Repository navigation
[release] v0.128.8 - #8124
[release] v0.128.8#8124
Conversation
Closing the drawer cleared revisionId even when the URL had none. That navigation rebuilt the URL from the router query, which lacks the ?revisions= and #pgSnapshot that the playground writes itself, so a reload lost the connected test set and the drafts. Clearing a param that is not in the URL is now a no-op.
…ved edits ConfigureEvaluator now calls useLocalDraftWarning, as the app playground does.
PanelSessionInspectorButton read executionController.selectors.backendSessionId
inline. Its atom family keys on an object, so each render got a new atom,
and useAtomValue rendered again without end ("Maximum update depth
exceeded" 100 to 400 times per load). The atom is now memoized per panel.
…each revision label
The row menu (Radix) and the antd dialogs both trap the focus. Move, Rename and Delete opened their dialog while the menu still trapped it, and the two traps moved the focus back and forth until "Maximum call stack size exceeded". These items now open the dialog on the next tick.
Retry ran the whole scan again and sent the traces that the failed run had already added, which made duplicate scenarios in the queue. The hook now keeps the ids each run added, skips them on Retry, lowers the per-run cap by their number, and counts them in the toasts.
…pp shell keeps its chunks
… in the playground link tests
The tracing filter dropped condition fields it did not know with a log warning. Live evaluation queries saved by /w and /m hold the trace filter picker's field names, so a filtered live evaluation scored every trace. - Read the picker fields as the traces page sends them: attributes.ag.*, custom, input_keys and output_keys as attribute keys, is_annotation as evaluator reference and feedback conditions, and has_annotation as an EXISTS on annotation traces that link to the span. - Raise on any other field, answer 400 when a query is saved with one, and close a live run whose saved filter cannot be applied. - Wrap the live query in an outer AND on invocation traces, and link a root span that arrives in a same-name list, so a live run never reads its own evaluator traces back.
A query object that is read page by page is parsed again on each page.
… everywhere - A feedback field saved as a list (the any-evaluator picker) is one filter per field, never a key with brackets in it. - All has_annotation rows of one AND must hold on the same annotation, as in the traces page's single annotation query. - Analytics and query revision retrieval answer 400 for a filter that cannot be applied instead of an empty 200.
…session spans Four vitest packages ran at once on a 4-CPU runner, each with one worker per CPU. The render tests ran out of CPU and failed at random on their fixed waits and the 5s timeout. The session spans test also asserted a span count before the spans had loaded.
… saved Tracing queries and analytics calls keep today's behaviour: an unknown condition field is logged and ignored, and analytics keeps its empty default on a filtering error. - parse_condition and the SQL filter log an unknown field again instead of raising. - validate_filtering parses a copy and rejects an unknown field. Saving a query (create, edit and commit of a revision, simple query create and edit) uses it and answers 400. A live run whose saved filter fails it is still closed. - The 400 decorator moves to apis/fastapi/queries/exceptions.py and is removed from the analytics routes and from query revision retrieval.
…ect in the /m playground A chat playground keeps its conversation apart from the test case rows, so Discard & disconnect left the edited conversation on screen and a later edit copied it into the new local row. Clear the conversation with the discarded test case. Also lock that a deselected row's unsaved edit does not come back after a commit (already true on main: the commit marks hidden saved rows deleted, and the save discards their drafts).
…traces stay annotations
A new switch under Developer Mode in /m Settings > Preferences. With both on, Developer Mode publishes no classic-mode gate cookie, so neither app sends the user to /w, and every developer view is on for that user.
At 390 px the bar let the Evaluator button shrink below its own width, so the Compare button covered half of it. Below sm both buttons now show their icon only (the name stays for screen readers), the evaluator chips shrink and scroll while the button keeps its width, and the app name truncates first.
…d all matching picker
The switch is now a shared Preferences row, shown under Developer Mode in both apps while Developer Mode is on. In /w, turning it on clears the classic-mode cookie and sends the user to the matching /m page.
|
Important Review skippedBot user detected. To trigger a single review, invoke the
|
A saved query with a malformed id, a 'btwn' without two bounds, a dict operator on attributes, or a 'not' group with several conditions passed validation. The tracing query then returned no traces or dropped the condition. Saving such a query now answers 400.
fix(frontend): web unit tests fail at random from CPU contention
Website previewPreview URL: https://pr-8124-agenta-website-preview.mahmoud-637.workers.dev Built from |
…load A browser with no agenta-classic-mode cookie (a new device, or cleared cookies) reaches /w before the cookie sync runs. The client redirect acted only when Developer Mode was off, so a beta user stayed in /w on that first load. It now also acts when beta developer mode is active.
Two failed runs of one evaluator now keep both messages. A failed step that no column stands for shows its message with the scenario status. A step's error shows even when the scenario's traces did not load, and the phone card names the evaluator of each error. Review follow-up on #8125.
A column path with __proto__, constructor or prototype could write into Object.prototype when Add row built the row; such a column is now left out. A top-level column with a dot in its name stays one key. A dedup id typed in the drawer's JSON or YAML view no longer replaces the saved one. Review follow-up on #8125.
The address now names the trace as soon as the drawer opens and keeps the asked span while the trace loads, so a reload during loading still restores both. Back past the trace closes the drawer, and Back to another span of the same trace shows that span. Review follow-up on #8125.
…ly when inactive The combined errors of several evaluators now keep only what adds up (type, sum, count), and their time series adds up per timestamp too. A live run reads Paused only when its is_active flag is false; a run with no flag keeps its own status. Review follow-up on #8125.
The user lookup compared members' profile ids with the session's login uid, so the signed-in author lost the (you) label when the two differ. It now reads the profile id. Review follow-up on #8125.
… shows it With the read timeout, every stored read can fail. The save then said "Annotations updated successfully" without seeing the writes. It now says the annotations were saved and can take a moment to show. Review follow-up on #8125.
The run-failure "Buy credits" link opens /w Settings on Billing with buy_credits=1. The /m route map kept only the tab, and /m opens the pack picker from Credits, so the picker never opened. Map that link to the Credits tab with buy_credits=1.
fix(frontend): fix /m view bugs found in live QA
fix(frontend): keep beta developer mode users in /m from /w addresses
A key typed in the Input Key or Output Key row is now read below the field's path (ag.data.inputs or ag.data.outputs), so a typed `country` is saved as attributes.ag.data.inputs.country and matches the traces. The /w live evaluation drawer now names an empty Is Annotation row in plain words and hides the API's code names when the filters are refused.
When no read showed a save yet, closing the sheet dropped what it saved, and opening it again could create the same annotation a second time. The writes now stay known for that span until a read shows them, and the drawer refreshes then.
The drawer split the row data with plain property writes, so a field named __proto__ set the object's prototype and the update dropped it. The split now builds its records with Object.fromEntries: the field stays row data and Object.prototype is not touched.
Column extraction now carries each column's path segments. A new row under a
key with a dot, such as {"meta.lang": {source: "x"}}, gets
{"meta.lang": {source: ""}} instead of {meta: {lang: {source: ""}}}.
Unsafe path parts stay left out.
…Back The address keeps an asked span only for the trace it belongs to. A span write that changes nothing (the drawer showing a span Back restored) no longer pushes a history entry, so Forward still works. Back to an address with no span clears the selected span.
fix(frontend): match typed input keys in live evaluation filters
…ETA_DEVELOPER_MODE is on
…live evaluation drawer The drawer showed "Couldn't save the trace filters" for every failure of the query create call. It now shows it only for a 400 or 422 answer with a detail, and the generic create-failure text for network, permission and server errors. The console keeps the detail.
Writes are now kept for the span as soon as the API takes them, not after the first read gives up, so a sheet closed during that wait or after a partly failed save still knows them. A read that shows a write drops it only when it shows that same value, so an older read cannot drop a newer save.
collectColumnPaths called with a parent path and no segments gave paths that started at the leaf. The segments now default to the parent path's parts.
With no span the drawer falls back to its first span and writes it to the address. After Back to an address with no span, that write now replaces the current entry instead of pushing one, so the Forward entry stays.
fix(frontend): show the filter message only for filter errors in the live evaluation drawer
…tring collectColumnPaths now takes the keys above the object it walks instead of a dotted parent path, so a caller that starts below the row cannot split a key like meta.lang into two.
The replace for the drawer's fallback span write is now armed only when clearing the span changes the span the drawer shows. When the drawer already showed its first span, nothing is written, and the next pick pushes as usual.
fix(frontend): show the beta developer mode switch only when AGENTA_BETA_DEVELOPER_MODE is on
📘 Docs preview
This comment updates in place on every push. |
fix(frontend): follow-up fixes for /m view review comments
mmabrouk
left a comment
There was a problem hiding this comment.
🤖 The AI agent says: Approved on Mahmoud's instruction after the v0.128.8 production deploy went green in US (run 42108461482) and EU (run 42110396474), and the live checks passed in both regions.
New version v0.128.8 in
Final QA
Staging (EE) and oss ran api
7afeed2a, and web and web-mobile07c28162. Services and runner stay on5594f5ca. Every check below passed on both stages unless it says otherwise.test_picker_filter_fields.pypassed 8 of 8 on each stage. A read-only count in production found no open live evaluation that the new check would close.AGENTA_BETA_DEVELOPER_MODEistrue. Production leaves it unset, so production users see no switch and route as in v0.128.7.Known gaps, not blockers: with beta on, /w links to a prompt app overview, playground or registry open an empty /m Agent page. The hidden /m New Evaluation wizard shows a user id in the test set version picker.
Deploy steps
AGENTA_BETA_DEVELOPER_MODEunset (it is set only for staging and oss in agenta_cloud).