Conversation
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
…e project's own verification…
…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
…e project's own verification…
…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>
…e project's own verification…
|
Warning Review limit reached
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. View limit detailsLimit 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. Review configuration: ⚙️ Run configurationConfiguration used: Repository: ID-Robots/clawbox/.coderabbit.yaml Review profile: ASSERTIVE Plan: Advanced Run ID: 📒 Files selected for processing (20)
Comment |
|
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. |
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· commit802ca5d5Reviewed 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.