Repository navigation
feat(agent-chat): the data box shows what it waits for - #12221
Merged
Merged
Conversation
A server-side file read (Parquet, Excel, ODS, Feather, NumPy) and a .parse() take seconds, but the box only greyed its buttons and changed a quiet line under them, so the page looked stuck. BoxWorking draws the step over the box with a pulsing ellipsis, a seconds counter and a thin bar (plain indicator, style guide 10.1; no motion under reduced motion). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GdMSqLR5ww4ji74EUSmk9M
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GdMSqLR5ww4ji74EUSmk9M
Contributor
There was a problem hiding this comment.
🟡 Changes recommended
Elapsed time resets when the overlay remounts, and long filenames can be clipped on narrow screens.
2 open issues
What changed in this PR
Adds visible progress feedback to the agent-chat data box during server-side file reads and parsing.
Changes:
- Adds an overlay with status text, elapsed seconds, and a reduced-motion-aware progress bar.
- Shares conversion status text and marks the drop zone as busy.
- Adds component tests and a changelog entry.
| File | Description |
|---|---|
| changelog.d/agent-box-working.md | Documents the progress feedback. |
| app/src/sections/agent-chat/DataPanel.tsx | Integrates the overlay and busy state. |
| app/src/sections/agent-chat/DataPanel.test.tsx | Checks conversion and parsing feedback. |
| app/src/sections/agent-chat/BoxWorking.tsx | Implements the progress overlay and timer. |
| app/src/sections/agent-chat/BoxWorking.test.tsx | Tests status text and elapsed seconds. |
Review effort: Balanced
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
…icks Gemini 4 Argon review of #12221: - the overlay dims the text underneath, so the line stands out on the box's own surface in both themes; - a drag over the box hides the overlay instead of unmounting it, so the seconds counter keeps running; - only the conversion that set the line clears it (convertSeq), so a later read that converted nothing cannot leave the box waiting; - aria-busy sits on the textarea, not on its wrapper. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GdMSqLR5ww4ji74EUSmk9M
Owner
Author
First review: Gemini 4 ArgonVerdict: needs fixes. Applied in the latest commit:
Not applied:
Fable was not involved: this is a UI-only change with no high-risk surface. |
… wrap Copilot review of #12221: - the panel keeps when the conversion and the parse began (set where they start), so collapsing and reopening the card no longer restarts the overlay's seconds count; - the overlay's label wraps a long file or sheet name instead of being clipped on a narrow screen. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GdMSqLR5ww4ji74EUSmk9M
6 tasks done
MarkusNeusinger
added a commit
that referenced
this pull request
Oct 22, 2026
…ude (#12226) ## Summary - Google's Antigravity FAQ ("Wrapping `agy` inside third-party coding agents or applications … is not supported under consumer plans") and a staff reply on 2026-10-16 ([forum topic 189905](https://discuss.ai.google.dev/t/clarification-on-consumer-plan-policy-for-invoking-official-agy-via-local-subprocess/189905): "No under consumer plans", even for the unmodified binary as a local subprocess) rule out the read-only `agy -p` second opinions #12223 introduced. Claude stopped running agy on 2026-10-21. - Second opinions and first PR reviews go through the new `zweitmeinung` project skill: `.claude/skills/zweitmeinung/gemini_review.py` calls Gemini through Vertex AI in project `anyplot`, location `global` (the site's agents stay on `eu`), with read-only tools over tracked repository files, prefetched data, and the public API; no shell, no credentials. The owner's split (2026-10-21/22): **Gemini 3.8 Flash on Flex PayGo** (half price) for routine first reviews, on probation against Copilot's findings; **Gemini 4 Argon**, thinking high, for plans and second opinions. - Cost work after a comparison run on three merged PRs (#12203, #12221, #12222): every tool turn re-sends the conversation, so `--diff-base` inlines the diff and changed files and `read_files` reads several files per call. Two loop bugs found there are fixed and pinned by tests: a text part beside the last function responses made Vertex answer 400, and a last turn without tools lost the implicit cache while Flash kept calling tools. The budget is now enforced through the tool responses with one tool configuration for all turns. Measured: Flash $0.07–0.28 per review, Argon $0.57–1.16. - Flex gets 5 minutes per run (and per request); after that, or after a timeout or a 429/5xx, the run goes online (`flex_fallback`, `per_turn_seconds`). The SDK retries timeouts too: the first Flash review of this PR waited over an hour on 15-minute attempts, and with a 5-minute cap per request the next one still ran for over 25 minutes. - Hardening after Copilot's reviews: a symlink is visible only when its target is itself a visible entry (a tracked `review.txt -> .env` exposed the untracked `.env` before), secret-name patterns apply to every path component of `--data` files, lock files stay out of the inlined diff and the diff is capped at 120,000 characters, a backtracking search pattern is stopped after 10 seconds, a line longer than the tool limit is cut instead of looping, and an unencoded URL is refused instead of crashing the run. - `gemini-task`: Gemini pushes its `gemini/*` branch and opens a **draft PR** labelled `gemini`. CI runs on drafts, Copilot does not (`review_draft_pull_requests: false` in the ruleset), and Claude marks the draft ready after its own review. The owner may let Gemini run tests and builds unattended in his own agy session; only he starts agy. - `CLAUDE.md` and `.claude/guardrails.md` describe the lanes and costs; the guardrail test anchors pin the obligations (Flash/Argon split, draft PRs only, Claude never runs agy). ## Plan N/A. The owner chose the Vertex route on 2026-10-21 after reading a research report on the policy, then the Flash/Argon split, the draft-PR hand-over, and moving the skill into the repository on 2026-10-22. ## Test plan - [x] `uv run pytest tests/unit tests/integration -n 8` (new `tests/unit/test_gemini_review.py`: confinement, http_get refusals, inlining caps, and the tool loop against a fake Vertex client) - [x] `uv run ruff check . && uv run ruff format --check .` - [x] `uv run python -m tools.changelog check --base origin/main` - [x] Flash smoke run with `--max-turns 1` on Vertex: forced last turn answers (exit 0), `traffic_type` `ON_DEMAND_FLEX` - [x] Gemini 3.8 Flash first review of this PR through the repository script: 3 of 5 findings applied (owner-only PR comments for Gemini, `git diff -z`, `*api_key*`); 2 skipped (callers already resolve `check_attachment`'s root, and the SDK returns `finish_reason` as an enum). Flex gave no answer on the first turn, so the run went online: 9 turns, $0.86. - [x] Copilot: three rounds on the rework, 9 findings, all applied 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01GdMSqLR5ww4ji74EUSmk9M --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.

Summary
.parse(), greyed out the buttons and seemed to do nothing until the data suddenly appeared. The only sign of work was a quiet line under the buttons.BoxWorking:# reading "x.parquet" on the server … · 4 sor# parsing your data … · 3 s.Ellipsis, a seconds counter from the first second on, and a thin indeterminate bar along the box's foot.docs/reference/style-guide.md§10.1).prefers-reduced-motion.aria-hidden; screen readers keep hearing the existing live line. The drop zone getsaria-busy.DataPanel, theconvertingboolean becameconvertLine(the line text itself), so the overlay and the live line say the same thing.Plan
N/A. Gemini 4 Argon reviewed it first; its verdict is in a comment.
Test plan
BoxWorking.test.tsx: the line shows at once, and the counter reads· 3 safter 3 s (fake timers).DataPanel.test.tsx: the overlay shows during a conversion and during.parse(), and is gone after the file lands.aria-busyis set while parsing.yarn lint,fm:check,type-check,test(1,163 passed) andbuild./debug/agentby dropping~/anyplot-testdaten/line-timeseries/stromzaehler.parquet, in both themes.🤖 Generated with Claude Code
https://claude.ai/code/session_01GdMSqLR5ww4ji74EUSmk9M