-
-
Notifications
You must be signed in to change notification settings - Fork 1.4k
feat(webapp): dashboard agent — chat, reports, investigate #4418
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
kathiekiwi
wants to merge
526
commits into
main
Choose a base branch
from
feat/dashboard-agent-flows
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from 250 commits
Commits
Show all changes
526 commits
Select commit
Hold shift + click to select a range
0045062
perf(webapp): the wake poll sleeps in hidden tabs and no longer runs …
kathiekiwi 0b66440
perf(webapp): a finished report is reusable for 90s
kathiekiwi 4606b94
feat(webapp): the watch sweep retires watches that ended a week ago
kathiekiwi 37e4c23
fix(webapp): the chat name is on the row before the turn settles
kathiekiwi d3d33a6
chore: oxfmt the generated drizzle snapshot and the presenter test im…
kathiekiwi ac1fdfd
chore(dashboard-agent): say why the title gate is the transcript length
kathiekiwi 4dedd60
chore: drop the working notes and the stray diff from the repo root
kathiekiwi cbeee67
feat(dashboard-agent): a batch chain registry, one per environment an…
kathiekiwi e16320b
feat(dashboard-agent): one tick run per environment and cadence, not …
kathiekiwi 5d90eb1
feat(webapp): the batch check answers a whole environment's watches a…
kathiekiwi 3993381
test(dashboard-agent): the batch tick isolates, bounds, and never dou…
kathiekiwi 93c5344
test(webapp): the batch check shares one authorization and one report…
kathiekiwi 1989336
fix(dashboard-agent): a dead chain is re-armed on its own cadence, an…
kathiekiwi a4cd475
chore(webapp): drop the unused stale-window import from the watch sweep
kathiekiwi f428759
chore(dashboard-agent): drop the M0 verdicts file, inline its reasons…
kathiekiwi 8349bf4
chore(webapp): shorten the agent logo, spinner and scenario-kit comments
kathiekiwi 27a9263
chore(webapp): tighten the chat-prose theme comments
kathiekiwi 16682d5
chore(webapp): the page-context comments say only what the handle doe…
kathiekiwi 5247a00
chore(dashboard-agent-db): shorten the query-layer and schema comments
kathiekiwi 398e8c5
chore(dashboard-agent): shorten the watch-tick comments to their inva…
kathiekiwi 0357d79
chore(dashboard-agent-contracts): cut the wire-contract comments to t…
kathiekiwi d1fff9c
chore(webapp): shorten the agent panel and view comments
kathiekiwi 6ac4214
chore(webapp): shorten the suggested-prompt and demo-fixture comments
kathiekiwi a5dd3f1
chore(webapp): shorten the report, waiting-run and agent route comments
kathiekiwi c331843
chore(webapp): shorten the watch service and test comments
kathiekiwi d70bcfc
chore(dashboard-agent): shorten the agent and tool-layer comments
kathiekiwi 0468776
chore: oxfmt the blank lines left by the removed comments
kathiekiwi a303cb0
refactor(webapp): one presenter for all watch and view-block wording
kathiekiwi 1af895b
fix(dashboard-agent): keep a failed turn in the conversation
kathiekiwi 5aef047
fix(webapp): cap the query API's scope at the credential's environment
kathiekiwi 547ec71
feat(webapp): declare the report layout once, shared by the card and …
kathiekiwi f6865d5
feat(webapp): render the markdown and ANSI report from the shared layout
kathiekiwi 880d94a
feat(webapp): build the report card from the shared layout
kathiekiwi 78aea57
test(webapp): assert the card and the text report stay one report
kathiekiwi b062490
chore: add a server-changes note for the report layout parity
kathiekiwi f3237de
chore(webapp): drop the unused demo report card
kathiekiwi 17e11c7
chore(webapp): cut the chat-layout header and stop the test asserting…
kathiekiwi bd6835f
chore(webapp): drop the page-context notes from the route files
kathiekiwi cb70b83
chore(webapp): drop the prose from the chat markdown css rules
kathiekiwi 0d415c0
chore(webapp): strip the step narration from the agent and report tests
kathiekiwi 93bc6c1
chore(webapp): clear the demo fixture and storybook commentary
kathiekiwi 0739337
chore: cut the report, waiting-run and package comments to their facts
kathiekiwi a4f8ed1
chore(webapp): trim the seed-script narration
kathiekiwi e6ec1d2
chore(webapp): delete the agent panel and view rationale comments
kathiekiwi 9b7ca8c
chore: bring the last three-line comments down to two
kathiekiwi 5153cca
chore: restore the comments an off-by-one over-trimmed
kathiekiwi 42749c9
chore(dashboard-agent): cut the agent, tool and watch-tick comments t…
kathiekiwi 9270caf
chore(webapp): cut the watch service and route comments to their inva…
kathiekiwi f9eb9c0
chore(dashboard-agent-db,contracts): cut the query and wire-contract …
kathiekiwi 8d3676a
chore: oxfmt the lines the removed comments let collapse
kathiekiwi 5800e89
chore: drop the unrendered demo cards and fold the release notes back…
kathiekiwi 3773f31
fix(webapp): route the report's stale-data badge through AgentBadge
kathiekiwi fd83288
fix(webapp): drop the metric sparkline to its own line on a narrow panel
kathiekiwi 9b32bfd
fix(webapp): let agent chips follow the interface-contrast control
kathiekiwi 5a80876
fix(webapp): ring the unread dot against the navbar surface
kathiekiwi 3f85acc
fix(webapp): give the diagnosis card links a focus ring via a TextLin…
kathiekiwi 0760f1b
refactor(webapp): give the agent cards one card primitive
kathiekiwi a7a29f3
chore: add a server-changes note for the report card fixes
kathiekiwi d4f0357
chore(webapp): move the gallery's transcripts into the storybook fixt…
kathiekiwi 6a6fa1f
chore: keep the release notes as one
kathiekiwi 02debc6
perf(dashboard-agent): sample a tenth of turns for the judge by default
kathiekiwi dd1f309
perf(dashboard-agent): cap the judge's tool payload and stop pretty-p…
kathiekiwi 7850289
perf(dashboard-agent): stop echoing the panel's view model back to th…
kathiekiwi e8d35fa
perf(dashboard-agent): cap read_file at 48KB / 1500 lines
kathiekiwi 893b9e8
chore(dashboard-agent): oxfmt
kathiekiwi 9b4e473
perf(dashboard-agent): share one 1h-TTL prompt cache between head sta…
kathiekiwi fc4381d
fix(webapp): keep the agent wake poll to one chain per tab
kathiekiwi e109a24
fix(webapp): read the alert channel and the watch target on the primary
kathiekiwi d26a28b
perf(webapp): only poll the wake feed for a browser that knows a watc…
kathiekiwi 1dd8536
perf(webapp): answer the wake poll with one narrow read per database
kathiekiwi 8b042be
perf(webapp): skip the admin read on the watch authorization path
kathiekiwi be1cb04
perf(dashboard-agent-db): index the open investigations the sweep scans
kathiekiwi cafd920
chore: keep the release notes as one
kathiekiwi a88228c
chore(webapp): move the agent storybook gallery out to a follow-up
kathiekiwi b6ebe55
fix(dashboard-agent): escape the prefix separator so the file reviews…
kathiekiwi 5b5a258
fix(webapp): scope a delegated user-actor token to the environment it…
kathiekiwi d6debe8
test(webapp): cover the user-actor token's environment scope on every…
kathiekiwi 30ec754
refactor(dashboard-agent-db): move the watch queries into their own m…
kathiekiwi 2ed5d52
refactor(dashboard-agent-db): move the watch tables into their own sc…
kathiekiwi 46290d1
refactor(dashboard-agent): move the watch wake and investigate lanes …
kathiekiwi 18dffa6
refactor(dashboard-agent): give the watch tests their own file
kathiekiwi a0d06e4
fix(webapp): send the agent wake signal to a browser that has never o…
kathiekiwi ebad471
fix(webapp): cap the size of a message to the agent
kathiekiwi c3ee6a4
perf(webapp): resolve the agent card's links in one request
kathiekiwi 08dc7ba
fix(webapp): keep the watch card in step with its draft, and frozen w…
kathiekiwi 7f13add
feat(webapp): retire judged-turn rows after 30 days
kathiekiwi 42ddcff
feat(dashboard-agent): keep customer data out of the judged-turn row …
kathiekiwi 3c5b2d5
feat(dashboard-agent): never judge a turn that read source
kathiekiwi a4b4ef1
feat(webapp): let an organization turn off judging of its agent turns
kathiekiwi 263b324
feat(dashboard-agent): give the golden runs their own eval sample rate
kathiekiwi 99b8933
docs(dashboard-agent): make the eval docs match the code
kathiekiwi 29d9a8e
chore: note the conversation scoring in the release note
kathiekiwi 31698fa
refactor(dashboard-agent): split the tool set into one module per res…
kathiekiwi fea1a29
refactor(dashboard-agent): split the watch tick into delivery, condit…
kathiekiwi 4876e07
refactor(webapp): give each watch condition family its own module
kathiekiwi fc32fc6
refactor(webapp): split the suggested-prompt registry by responsibility
kathiekiwi f963614
chore(webapp): restore the dashboard agent's flag gate
kathiekiwi 99850ac
feat(dashboard-agent): summarise an oversized conversation, keeping l…
kathiekiwi 1d083f3
test(dashboard-agent): budget the real prompt prefix with ceilings an…
kathiekiwi 42a76fb
perf(dashboard-agent): say a settled watch outcome without a model, a…
kathiekiwi 0c41a70
perf(dashboard-agent): cap search_docs to a few short excerpts
kathiekiwi 6c993f2
chore: note the summarised long conversations in the release note
kathiekiwi ddc6d25
fix(dashboard-agent): describe a value at the redaction depth cap ins…
kathiekiwi 4e39228
fix(dashboard-agent): pin only a live investigation into a compacted …
kathiekiwi a3be7bd
fix(dashboard-agent): cap the output of the summariser and the wake n…
kathiekiwi e599f12
fix(dashboard-agent): rotate an over-cap watch group instead of starv…
kathiekiwi d719c9b
fix(webapp): start the wake poll for a browser that has only an activ…
kathiekiwi 28b1f38
fix(webapp): cap the agent's request body while it streams, not after
kathiekiwi 49a9538
fix(webapp): record a watch request before the watch starts, and repa…
kathiekiwi cbc2edc
test(webapp): pin the watch submit's ordering, its retry repair and i…
kathiekiwi 4ff8859
fix(webapp): keep the agent's alert delete to channels the watch type…
kathiekiwi 50fd10b
fix(webapp): replay a watch submission's recorded outcome instead of …
kathiekiwi 1cdf1f0
refactor(webapp): split the dashboard agent's maintenance cron along …
kathiekiwi 62b598d
docs(webapp): say which layer refuses an oversized agent body
kathiekiwi 85b98ab
fix(webapp): mint the agent's token for the caller's own environment,…
kathiekiwi f5a146b
fix(webapp): cap the agent's body on any method and on a mixed-case path
kathiekiwi 880bf60
test(tsql): pin that no mutating query can pass the query boundary
kathiekiwi 9d45284
fix(webapp): keep the agent token's environment claim on the actor th…
kathiekiwi d51cb9a
fix(webapp): stop the OSS fallback handing a delegated token blanket …
kathiekiwi f58a9dc
fix(webapp): only let the browser set the agent's page context
kathiekiwi d12e6a8
style(webapp): merge duplicate imports on the user-actor auth path
kathiekiwi d2511bd
fix(webapp): hand the sweep's final check the previous facts
kathiekiwi e485209
perf(webapp): resolve the sweep's authorization and readers once per …
kathiekiwi bd2559a
fix(webapp): record only a real evaluation from a batch tick
kathiekiwi 4846cf8
fix(dashboard-agent): finish a wake in the transcript, or don't count it
kathiekiwi 012ce0d
test(webapp): drop an unsafe optional chain from the sweep boundary test
kathiekiwi 5f2f5fe
fix(webapp): scope the watch submission ledger and its alerts to one …
kathiekiwi 5176e3e
test(webapp): pin the watch ledger's tenancy, the once-only alert and…
kathiekiwi a63708c
test(webapp): assert the derived chat id before the submit outcome
kathiekiwi a0640ba
style(webapp): format the watch tenancy changes
kathiekiwi dd90b6e
fix(webapp): never render an image the agent's model authored
kathiekiwi 94ec67f
perf(webapp): keep the agent transcript's investigation winners stable
kathiekiwi 1aee9ca
fix(webapp): send the eval judge only the turn's structural facts
kathiekiwi 488621e
perf(webapp): cache the agent's accumulated tool results between steps
kathiekiwi 32553b9
style(webapp): format the agent markdown test
kathiekiwi d9ff853
style(webapp): format the agent eval and step-cache tests
kathiekiwi 82f4a73
style(webapp): drop a needless escape in the image regex
kathiekiwi 933aeb9
test(webapp): stub the agent proxy's environment lookup, not a Prisma…
kathiekiwi 05b3472
Merge branch 'main' into feat/dashboard-agent-flows
kathiekiwi d73f3f5
chore: ignore the agent worktrees directory
kathiekiwi 48d0d4a
fix(webapp): drop the img-src wildcard host for a validated origin al…
kathiekiwi cd112ba
test(webapp): assert the document img-src has no wildcard host
kathiekiwi 5adba81
docs: document CSP_IMG_SRC_ALLOWLIST for self-hosted image hosts
kathiekiwi fb99526
feat(dashboard-agent): tell the eval judge a failure's kind without i…
kathiekiwi 9daa8f9
docs(dashboard-agent): tell the judge the error category is derived, …
kathiekiwi 09d1b55
fix(webapp): require the watch card's request id instead of falling b…
kathiekiwi 22bf6d9
fix(webapp): cancel the watch a losing submit's winner does not name
kathiekiwi 210863e
fix(webapp): separate a watch's last look from its last check in the …
kathiekiwi 240799d
chore(dashboard-agent): drop the comments the code already says
kathiekiwi 478b30c
chore(dashboard-agent): drop the test comments the assertions already…
kathiekiwi 4e00b79
style(webapp): format the sweep's authorization helper
kathiekiwi d00b126
fix(webapp): bind a delegated token's environment claim on the projec…
kathiekiwi a7fc406
fix(webapp): keep a delegated token's claims on the authenticated ide…
kathiekiwi f700174
fix(webapp): ceiling an exchanged environment JWT by what the delegat…
kathiekiwi 3336a47
test(webapp): give the container-backed user-actor scope tests their …
kathiekiwi 7a645e5
chore(webapp): drop the comments the code already says
kathiekiwi 79482de
chore(webapp): drop the comments the tests already say
kathiekiwi d646809
chore(rbac): keep the delegated-token invariant, drop the essay
kathiekiwi c4d3f58
fix(webapp): replay a watch submission's recorded email outcome inste…
kathiekiwi 49e8fb5
fix(webapp): tell a watch's creator about their own email alerts, not…
kathiekiwi 7b2f9c6
chore(dashboard-agent-db): drop the submission's external-notificatio…
kathiekiwi f7b8374
fix(webapp): put a turn's settled investigation card in the transcript
kathiekiwi 26f93da
fix(webapp): have the stale-investigation sweep close the card it set…
kathiekiwi 07b83da
docs: note the agent's closed investigations, watch email honesty and…
kathiekiwi 60a9584
test(webapp): fail if a route sets an over-broad image CSP
kathiekiwi e62d8c6
style(webapp): format the route image CSP audit
kathiekiwi 1759618
fix(webapp): keep the project-wide answer for an environment-agnostic…
kathiekiwi 657f11d
docs(webapp): say which UAT flow the project-wide answer is preserved…
kathiekiwi 29de34f
style(webapp): drop the imports the merge left unused
kathiekiwi 5bf3612
fix(webapp): settle an investigation and its closing card in one write
kathiekiwi 37c56aa
test(webapp): pin the settlement failure window and the open panel
kathiekiwi 44b4e57
docs: say the investigation card closes while the panel is open
kathiekiwi 49a1504
docs: cut the release note back to what a user notices
kathiekiwi 2e23a09
fix(webapp): keep the other Anthropic options when the step breakpoin…
kathiekiwi f6f753c
fix(webapp): merge the transcript under the row lock instead of repla…
kathiekiwi afc0cfa
fix(webapp): close a consented watch investigation's card atomically
kathiekiwi d52c224
fix(dashboard-agent): merge the step breakpoint into the message's an…
kathiekiwi abaeebb
fix(webapp): make a repeated watch card close leave the revision alone
kathiekiwi c3f4ba8
refactor(webapp): drop the unused settleOpenInvestigations
kathiekiwi 7ab35df
fix(webapp): merge the turn's cache breakpoint into the last message'…
kathiekiwi 020dad2
refactor(webapp): store the dashboard agent's transcript one row per …
kathiekiwi 81e8349
refactor(webapp): drop the dashboard agent's JSONB transcript column
kathiekiwi 398a298
test(webapp): cover the batch position allocator with concurrent turns
kathiekiwi aad8498
fix(webapp): converge the watch transcript when a retried delivery fi…
kathiekiwi d8fda07
fix(webapp): stop an ordinary transcript write from rewriting a store…
kathiekiwi f159c69
test(webapp): guard against a raw-SQL reference to the dropped chats.…
kathiekiwi ceaa38d
fix(webapp): scope the watch transcript's appends to the caller's org…
kathiekiwi 3d3c962
fix(webapp): keep a malformed message's own text out of the error, an…
kathiekiwi e3fcc20
refactor(dashboard-agent-db): collapse the agent's migrations into one
kathiekiwi f4337f7
style(dashboard-agent-db): format the generated migration snapshot
kathiekiwi bb036f9
feat(webapp): split Watch out of the dashboard agent's first PR
kathiekiwi 9fad665
test(webapp): cover the dashboard agent's eval-policy gate, and requi…
kathiekiwi c37bdf8
test(webapp): pin the delegated token's scope ceiling on the RBAC fal…
kathiekiwi 5edfd78
feat(webapp): name the dashboard agent Ask Trigger everywhere
kathiekiwi c88a448
refactor(webapp): rename the ask-ai button variant to ask-trigger
kathiekiwi 0d3d216
feat(webapp): drop the agent button from the deploy blank states
kathiekiwi 9c6f148
chore(webapp): keep Ask AI in the tree, deprecated and unmounted
kathiekiwi db9f9a2
Merge remote-tracking branch 'origin/main' into feat/dashboard-agent-…
kathiekiwi dfcee8b
fix(webapp): settle the API keys route after merging main
kathiekiwi 49051f5
fix(dashboard-agent-db): stop rewriting the published migration history
kathiekiwi 798fdf9
refactor(webapp): split the dashboard agent's UI out of the first PR
kathiekiwi c025bbf
fix(dashboard-agent): keep the finished answer in the transcript, not…
kathiekiwi 2ff7ec0
fix(dashboard-agent): name a head-started chat instead of leaving it …
kathiekiwi 711b79e
fix(dashboard-agent): apply the token's cap as a second ceiling, and …
kathiekiwi c236601
feat(webapp): let an environment JWT read a queue, as it already read…
kathiekiwi 8adf2b2
Merge remote-tracking branch 'origin/main' into feat/dashboard-agent-…
kathiekiwi df2227e
fix(webapp): resolve a test's route paths from the test, not the repo…
kathiekiwi bd357fc
revert(webapp): put the JWT exchange back to how main had it
kathiekiwi f891584
fix(webapp): stub what the env JWT act-claim test's route actually calls
kathiekiwi cb0bcc9
fix(webapp): refuse an environment-scoped token on a route that names…
kathiekiwi 0f2814e
fix(dashboard-agent): escape model-supplied ids in tool request paths
kathiekiwi 33a3f6b
fix(dashboard-agent): require both halves of the support endpoint config
kathiekiwi 983055a
fix(dashboard-agent): keep a withheld object's key names from the eva…
kathiekiwi 5126bae
fix(webapp): gate a run's commit metadata on reading deployments
kathiekiwi 2d23dde
fix(webapp): keep the retired chats.messages column, and allow Google…
kathiekiwi 05505d5
fix(webapp): carry a queue's depth forward across empty buckets
kathiekiwi 1ee6704
fix(webapp): describe how far a report metric fell
kathiekiwi 0db1cf0
fix(webapp): say why a report's numbers can't be trusted
kathiekiwi d0be659
test(webapp): assert the queue depth trend fills its bucket grid
kathiekiwi 4c42230
fix(webapp): stop treating a ClickHouse unknown identifier as a rollo…
kathiekiwi aa55227
fix(cli): say that a capless mint-token is read-only
kathiekiwi f598f96
fix(webapp): refuse a dashboard agent turn whose token mint failed
kathiekiwi b38c518
fix(webapp): stop a failed agent chat start leaving an empty chat behind
kathiekiwi de4cdad
fix(webapp): list the preview branch an agent token is scoped to
kathiekiwi e2704ea
fix(webapp): keep identityOnly off action routes in the type
kathiekiwi f6afda3
docs(dashboard-agent): say what the queue path encoding is for
kathiekiwi 14d70be
docs(webapp): say that the agent is off until a flag turns it on
kathiekiwi c3f0d62
fix(webapp): undo a new agent chat only when its start never got anyw…
kathiekiwi 314a1d7
perf(webapp): skip the global feature-flag query when a per-org overr…
kathiekiwi a4ba027
fix(webapp): refuse a delegated token at the entrance of the PAT-only…
kathiekiwi d0f06d5
fix(webapp,dashboard-agent): address a branch environment by name and…
kathiekiwi a660349
fix(webapp): make each report caveat discount only the input it names
kathiekiwi 3355b68
fix(webapp): stop an unmeasured queue depth from silencing a measured…
kathiekiwi 566de27
docs: say that the agent works on branches
kathiekiwi ad2698b
feat(webapp): render the cards the flows already emit
kathiekiwi 643ea39
fix(dashboard-agent): read the report's untrustworthy reason under it…
kathiekiwi ed0a7b3
fix(dashboard-agent): stop a retrieved run's own error counting as a …
kathiekiwi 0cae301
fix(dashboard-agent): pin the investigation cards the transcript actu…
kathiekiwi 8fc6f20
style(dashboard-agent): format the two eval test files
kathiekiwi c3b7c10
refactor(dashboard-agent): move the watch data layer into the Watch PR
kathiekiwi 36691f1
chore: mark drizzle and test snapshots as generated
kathiekiwi 7e272cc
chore(webapp): drop the unused waiting-run diagnosis
kathiekiwi d40e9fe
chore: mark the lockfile as generated too
kathiekiwi 2aacd26
fix(webapp,dashboard-agent): keep investigation cards, and stop a bro…
kathiekiwi 8fd5369
revert(webapp): move the queue JWT read to the PR that uses it
kathiekiwi 0fd886c
perf(webapp): stop the agent transcript re-rendering on every streame…
kathiekiwi 9805c0a
fix(webapp): deny an unknown report key instead of authorizing it aga…
kathiekiwi 20c8f9e
fix(webapp): stop an unreadable eval override reading as consent to j…
kathiekiwi 61a3288
fix(webapp): scope the org-creation RBAC check to user-actor tokens
kathiekiwi 8fbbcf0
test(webapp): pin 404-before-403 ordering for capped user-actor tokens
kathiekiwi File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,5 @@ | ||
| --- | ||
| "trigger.dev": patch | ||
| --- | ||
|
|
||
| `trigger mint-token --help` now says that a token minted without `--cap` is read-only, instead of claiming it carries your full role. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,6 @@ | ||
| --- | ||
| "@trigger.dev/core": patch | ||
| "trigger.dev": patch | ||
| --- | ||
|
|
||
| Reports can be fetched as structured data with the `json` format. The shortest report period is now one minute (`30m`, `1h`, `7d`). |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,16 @@ | ||
| --- | ||
| area: webapp | ||
| type: feature | ||
| --- | ||
|
|
||
| Meet the dashboard agent: a chat in every environment that answers questions about your runs, queues, errors and health with real data and links. It takes over from Ask AI everywhere that used to appear; on the Free plan you get 20 messages. | ||
|
|
||
| **Investigate** on a failed run, an error, a backed-up queue or a run that hasn't started gets you a worked-through answer — what happened, why, and how to fix it, with every claim linked to the runs, errors and deploys behind it. | ||
|
|
||
| The agent works on preview and dev branches, with that branch's own data. | ||
|
|
||
| The health report reads the same everywhere — dashboard, terminal, editor. A very long chat keeps working: the agent summarises the earlier part and carries on. The agent's replies no longer show images. | ||
|
|
||
| A sample of conversations is scored automatically so the agent keeps getting better. Only the score and a one-line summary are kept, never your messages, data or code, and we can switch it off for your organization on request. | ||
|
|
||
| Separately: a queue's wait times, peak depth, throughput and throttling can now be read from the API, and the Docs button has been removed from page headers. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
31 changes: 31 additions & 0 deletions
31
apps/webapp/app/components/dashboard-agent/ActionsBlock.tsx
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,31 @@ | ||
| import type { | ||
| ActionsBlock as ActionsBlockPayload, | ||
| AgentIntent, | ||
| } from "@internal/dashboard-agent-contracts"; | ||
| import { Button } from "~/components/primitives/Buttons"; | ||
| import { ChatActionsRow } from "./chat-layout"; | ||
| import { renderableActions } from "./view-actions"; | ||
|
|
||
| export function ActionsBlock({ | ||
| block, | ||
| onIntent, | ||
| }: { | ||
| block: ActionsBlockPayload; | ||
| onIntent?: (intent: AgentIntent) => void; | ||
| }) { | ||
| const renderable = renderableActions(block.actions); | ||
| if (!onIntent || renderable.length === 0) return null; | ||
| return ( | ||
| <ChatActionsRow> | ||
| {renderable.map((action, i) => ( | ||
| <Button | ||
| key={i} | ||
| variant={i === 0 ? "primary/small" : "secondary/small"} | ||
| onClick={() => onIntent(action.intent as AgentIntent)} | ||
| > | ||
| {action.label} | ||
| </Button> | ||
| ))} | ||
| </ChatActionsRow> | ||
| ); | ||
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
41 changes: 41 additions & 0 deletions
41
apps/webapp/app/components/dashboard-agent/InvestigationCard.test.ts
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,41 @@ | ||
| import { readFileSync } from "node:fs"; | ||
| import { describe, expect, it } from "vitest"; | ||
|
|
||
| const source = readFileSync(new URL("./InvestigationCard.tsx", import.meta.url), "utf8"); | ||
|
|
||
| describe("InvestigationCard purity", () => { | ||
| it("imports nothing from Remix", () => { | ||
| expect(source).not.toMatch(/from\s+"@remix-run\//); | ||
| }); | ||
|
|
||
| it("imports no app hooks and no server module", () => { | ||
| expect(source).not.toMatch(/from\s+"~\/hooks\//); | ||
| expect(source).not.toMatch(/\.server"/); | ||
| }); | ||
|
|
||
| it("calls no hook other than useState", () => { | ||
| const hooks = [...source.matchAll(/\buse([A-Z]\w*)\(/g)].map((match) => `use${match[1]}`); | ||
| expect([...new Set(hooks)]).toEqual(["useState"]); | ||
| }); | ||
|
|
||
| it("resolves evidence URIs through the host, never a route of its own", () => { | ||
| expect(source).toMatch(/resolveUri/); | ||
| expect(source).not.toMatch(/\/orgs\//); | ||
| }); | ||
|
|
||
| it("hands its actions to the host as intents, and never composes its own", () => { | ||
| expect(source).toMatch(/capabilities\?\.actions/); | ||
| expect(source).toMatch(/onIntent\(action\.intent\)/); | ||
| expect(source).not.toMatch(/kind:\s*"(ask|navigate)"/); | ||
| expect(source).toMatch(/ChatActionsRow/); | ||
| }); | ||
|
|
||
| it("renders no spinner — the transcript owns the one live progress element", () => { | ||
| // A spinner in the card would restart on every revision. | ||
| expect(source).not.toMatch(/AgentSpinner|ChatProgress|ChatPendingTool/); | ||
| }); | ||
|
|
||
| it("renders nothing action-shaped without a host to hand intents to", () => { | ||
| expect(source).toMatch(/if \(!onIntent \|\| actions\.length === 0\) return null;/); | ||
| }); | ||
| }); |
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.