Skip to content

PR #928 on ID-Robots/clawbox (TASK-896 progress card in web chat, base… - #934

Closed
yalexx wants to merge 10 commits into
betafrom
clawbox/run-cv0d5vno
Closed

yalexx wants to merge 10 commits into
betafrom
clawbox/run-cv0d5vno

Conversation

@yalexx

@yalexx yalexx commented Sep 19, 2026

Copy link
Copy Markdown
Collaborator

Opened by the ClawBox coding agent.

Task
PR #928 on ID-Robots/clawbox (TASK-896 progress card in web chat, base beta, never main) is APPROVED but its required Test check FAILS on head 2cf1c86. A previous run already wrote the fix but pushed it to a separate branch clawbox/run-iwvp2ovu (PR #931, now conflicting) instead of the PR branch. Do NOT open a new PR and do NOT create a new branch. Check out the PR branch clawbox/run-y9uhrltl, merge origin/beta into it (TASK-899 #926 and TASK-900 #932 just merged into beta; resolve conflicts keeping both sides), cherry-pick or re-apply the test fix from clawbox/run-iwvp2ovu, run the full test suite + tsc + eslint locally until green, push to clawbox/run-y9uhrltl, then close PR #931 with a comment saying its fix moved into #928. Report the final check state of #928.

Run run-cv0d5vno · commit 802ca5d5
Reviewed by run run-eu6hjqxu (automatic review pass).

Summary
Still waiting on #928's CI checks for 802ca5d; the background watch will wake me when they finish.

yalexx and others added 10 commits September 18, 2026 08:59
Settings -> Local AI -> Speech model size -> Download failed on every size on
a Jetson in ~3 s with "faster-whisper is not installed on this box
(libctranslate2.so.4: cannot open shared object file)".

install-voice.sh builds CTranslate2 into ~/.local/lib, which ldconfig does not
know. whisper-server.service names it in Environment=LD_LIBRARY_PATH, which is
why the engine works; clawbox-setup.service names nothing, and
/setup-api/whisper spawned scripts/fetch-whisper-model.py with no env, so its
`import faster_whisper` could not load the library (exit 3).

The fetcher now inherits the web server's environment as before, with
stt-local.ts's existing ldLibraryPath() (the one the Settings probe and the
chat transcriber already use, derived from HOME) in front of any inherited
LD_LIBRARY_PATH. The route's other children (the voice_whisper_install root
step, systemctl --user) do not import faster-whisper in the web server's
environment, so they are left as they are.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…wn verificat…

The full suite is still running in the background. After it finishes I'll run tsc on its own (it runs out of memory next to vitest on this box) and re-check that the new tests fail without the fix.

Run: run-ipaih6pv
…nd size (TASK-892)

OpenClaw hands the desktop a file the agent sent as a ROOT-RELATIVE gateway
URL (/api/chat/media/outgoing/agent%3Amain%3Amain/<uuid>/full). mediaUrl()
passed only https:/data: through, so it wrapped that URL as a filesystem path
into /setup-api/chat/media?path=…, which 404s; the card named the file after
the last segment ("full") and showed no size.

- mediaUrl(): a URL into the gateway's media tree (/api/chat/media/…) is
  passed through, normalised, so the browser fetches it same-origin via the
  session-gated /api proxy. Dot-segments that leave the tree are not passed
  through.
- acceptableSource() (now exported for the tests): accepts a gateway media
  URL, refuses any other /api/… URL instead of reading it as a path.
- extractFileAttachments(): the attachment part's name (fileName, filename,
  name, label) and size (size, sizeBytes, bytes, byteLength, fileSize) ride
  on the file ref as a fragment (#name=…&size=…), so refs stay plain strings
  on every transcript path and no server sees anything new.
- mediaFileName()/mediaDisplayName(): the carried name wins; a gateway URL's
  variant segment is never used as a name ("file" as the card's fallback).
- mediaDownloadUrl() drops the fragment so download=1 stays in the query;
  boundedFiles() de-duplicates on the ref without its fragment, keeping the
  spelling that carries the name.
- ChatFileCard shows the carried size; the on-disk HEAD probe of our own
  route still wins where it runs. The /setup-api/chat/media route is untouched.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…wn verificat…

The review found one real defect, now fixed in the working tree (not yet committed): a missing local file showed the payload's size. The two changed test files pass (65 tests), and the harness has moved to the evidence folder.

Still out: the full vitest suite on the committed code. Once it finishes I'll run the preview script, then commit, push, and write `report.md`.

Run: run-uaqgco9z
…ASK-896)

The OpenClaw Control UI pins the session's "Task progress" card — the one the
agent keeps with its `progress_card` tool — inside its composer. The ClawBox
chat never showed it, so an owner chatting here could not see what the agent
was working on.

Both chat surfaces (the mascot popup and the full-page chat) now read the
card the way the Control UI does (OpenClaw 2026.9.x, docs/tools/progress-card.md
and src/gateway/server-methods/progress-card.ts): `progressCard.get
{ sessionKey }` after the handshake and on a session switch, and again on every
`progressCard.changed` naming this session — the event is a refresh hint, so a
removal is confirmed by the read. Each write replaces the card; a card with
both parts empty removes it; only the newest read is applied; a failed refresh
keeps the card on screen. `operator.admin`, which the chat already requests,
covers the read scope. Hermes boxes (no gateway) never ask.

The card is a collapsible band between the transcript and the composer —
never over either: title, "Updated N ago", the step in progress, done/total,
then the note and the plan (pending / in progress / completed, at most one in
progress). The body is capped and scrolls inside itself; the fold is kept in
localStorage and shared by both surfaces. Every string is `t()` in all ten
locales.

The note is parsed by a new sanitiser (src/lib/progress-card-markdown.ts) into
React elements — no innerHTML anywhere: paragraphs, headings, GFM tables,
lists, quotes, code, bold/italic/strike, http(s)/mailto links and
`<progress value max aria-label>` bars (clamped as HTML does); every other tag
is dropped with its markup, script-like elements with their content. Its
scans are linear and bounded, so a hostile note cannot stall the chat.

Tests: parser and sanitiser (unit), the card, the hook, and both surfaces'
socket wiring (components).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…e time off (TASK-896)

Seen at 390px in German and Bulgarian: the title and "Updated N ago" were
both set never to shrink, so the time was cut mid-word with no ellipsis and
the step the agent is on disappeared entirely. The header now gives way in
order — the summary first, the time last and with an ellipsis — and on a
narrow card (a container query on the card itself, so a narrow popup counts
too) the time and summary sit on a second line under the title. The wide
desktop header is unchanged.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…TASK-896)

The done/total badge carried its spoken form ("1 of 3 steps done") as an
aria-label on a role-less span, which ARIA 1.2 prohibits and assistive tech
may ignore. The figures are now aria-hidden and the words are visually hidden
text, so the header button's accessible name says them.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@yalexx
yalexx requested a review from a team as a code owner September 19, 2026 04:53
@yalexx
yalexx deployed to clawreview September 19, 2026 04:53 — with GitHub Actions Active
@coderabbitai

coderabbitai Bot commented Sep 19, 2026

Copy link
Copy Markdown

Warning

Review limit reached

  • Ask an admin to enable usage-based reviews

Open in CodeRabbit

Reviews can continue after your included limit without a manual trigger. An admin must approve usage-based billing.

Next included review available in 17 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used the included review currently available. Your 112 included PR review attempts over the past 7 days set your current allowance at 1 review per hour.

The included review limit has been reached and this organization has disabled usage-based review continuation. Wait for reviews to reset or ask a billing admin to change After included review limits.

Learn how review limits work.

Review configuration:

⚙️ Run configuration

Configuration used: Repository: ID-Robots/clawbox/.coderabbit.yaml

Review profile: ASSERTIVE

Plan: Advanced

Run ID: 1a399c4c-7a67-4da6-a8ef-7966149a7692

📥 Commits

Reviewing files that changed from the base of the PR and between 67a8e6d and badb09d.

📒 Files selected for processing (20)
  • src/app/setup-api/whisper/route.ts
  • src/components/ChatApp.tsx
  • src/components/ChatFileCard.tsx
  • src/components/ChatPopup.tsx
  • src/components/ChatProgressCard.tsx
  • src/lib/chat-media.ts
  • src/lib/chat-progress-card.ts
  • src/lib/desktop-translations-part1.ts
  • src/lib/desktop-translations-part2.ts
  • src/lib/desktop-translations-part3.ts
  • src/lib/desktop-translations.ts
  • src/lib/progress-card-markdown.ts
  • src/lib/stt-local.ts
  • src/tests/components/chat-file-card.test.tsx
  • src/tests/components/chat-progress-card-gateway.test.tsx
  • src/tests/components/chat-progress-card.test.tsx
  • src/tests/routes/whisper.test.ts
  • src/tests/unit/chat-media.test.ts
  • src/tests/unit/chat-progress-card.test.ts
  • src/tests/unit/progress-card-markdown.test.ts

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

@yalexx

yalexx commented Sep 19, 2026

Copy link
Copy Markdown
Collaborator Author

Closing as a duplicate of #928, the same way #931 was closed. This PR was opened automatically from the coding run's own branch (clawbox/run-cv0d5vno), but the task explicitly said not to open a new PR. Its head badb09d has the same tree as #928's earlier tip 1f46783 and contains nothing that #928 lacks. Rebasing it onto beta would only produce a second copy of the TASK-896 progress card, without the CI test fix. The work lives in #928: head 802ca5d on clawbox/run-y9uhrltl, with beta merged in (TASK-899 #926, TASK-900 #932) plus the coding-agent teardown test fix. Reopen if this was wanted after all.

@yalexx yalexx closed this Sep 19, 2026
@yalexx
yalexx deployed to clawreview September 19, 2026 07:17 — with GitHub Actions Active

This branch was successfully deployed

1 active deployment
clawreview badb09db Deployed Sep 19, 2026 by yalexx via review #2315
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.

1 participant