feat(work-log): native app and browser icons, honest failure and idle states - #444
Merged
Conversation
Keeps Pylon's public-host favicon guard on the new page-derived lookups: a work log can be read from a remote client, where a private-host favicon URL resolves against the viewer's network rather than the environment that browsed the page. Keeps the shimmer gating AGENTS.md requires instead of upstream's overlay, and leaves Pylon's Prime tool-detail suppression in place while the new presentation fields flow for every provider. Adopted from 6cf0c6ea55d281f65c80502ec1871b0adf472025.
Failed calls keep their tool icon with a muted tint instead of collapsing to an alert glyph, with a trailing mark where the icon cannot take a tint. Also converges the live row on upstream's sweeping shimmer overlay. Pylon's per-label shine hand-rolled its own IntersectionObserver plus visibility and focus listeners because no shared gate existed when it was written; visibleAnimation.ts now provides that for every animation in the app, so the overlay pauses offscreen with 28 fewer lines and one shimmer instead of two. Keeps the Pylon mark and Pylon branding in the docs, and Pylon's warning tone alongside the new muted failure tint. Adopted from c3b8825bf476cbce5e061c0f99570cf1f6723b89.
An Antigravity batch goes idle when its parent turn ends, which is not a result. Pylon kept the stale running summary on the row, so a batch that had stopped reporting still looked like work in progress; it now shows the explanation instead. Converges the spawn summary on upstream's extracted helper, which preserves Pylon's coordinator-authoritative live rule, and extends it with Pylon's queued/waiting distinctions: upstream reports a live run with nothing running as 'working', which is a lying label. Adopted from 00f8b7c28056188e3c5630160806a0afe51c9010.
Contributor
Thread transfer impact✅ Thread transfer remains within every enforced ceiling.
Baseline: Scenario and decoded snapshot size10 historical turns, 5 command tools per turn, 878.9 KiB retained MCP result per historical turn, and a 1.05 MiB retained result in the measured turn.
Updated in place by a trusted workflow. PR artifacts are strictly validated and never executed. |
- Restore the containing block on the live row so the absolute shimmer overlay cannot escape it and paint over neighbouring content. - Guard explicitFaviconUrl by host: a provider-reported tab favicon is still a page host, so a private one would resolve against a remote viewer's network. - Stop the raw payload status from overriding the normalized lifecycle status. - Make the muted mobile failure tint reachable; severe failures stay red. - Render displayText so an expanded command row reads 'Command'. - Keep the visible 'Failed - reason' status in the agents panel. - Add the unfocused-window gate to visibleAnimation, which AGENTS.md requires alongside reduce-motion and backgrounding; this covers every animation in the app, not just this row, and gains a regression test. - Drop the now-dead live-tool-shine CSS and keep technical browser backends such as 'cdp' out of user-visible source names.
The review flagged the payload status as duplicating toolLifecycleActivityStatus, but only tool.started and tool.completed call that helper. task.progress and item.updated have no normalized status, so removing the spread there left those activities with no status at all.
This was referenced Sep 10, 2026
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.
Work logs showed a generic glyph for every tool, so a Chrome step, a native app
launch and a shell command all looked alike. A failed call replaced its icon with
an alert mark, losing the only cue for what had failed. And an Antigravity
subagent batch kept its running summary after its parent turn ended, implying
work was still happening when the batch could no longer report anything.
What changed
the page's favicon, resolved server-side and cached per environment.
with a muted tint; icons that cannot take a tint get a trailing mark instead.
the explanation rather than a stale running summary, and the conversation
summary counts it without a completion checkmark.
Adopted from T3 Code
6cf0c6ea55d281f65c80502ec1871b0adf472025(#9093) native app and browser iconsc3b8825bf476cbce5e061c0f99570cf1f6723b89(#9606) preserve tool icons on failed calls00f8b7c28056188e3c5630160806a0afe51c9010(#9616) idle subagent batchesPylon adaptations
and reserved hosts; upstream's new page-derived lookup has no such filter. The
guard now covers it, because a work log can be read from a remote client where
http://localhost:5173resolves against the viewer's network rather than theenvironment that browsed the page. One upstream test asserted that localhost
returns a URL; it now asserts the refusal.
every provider, but detail-like fields remain behind Pylon's
primeAgentToolgate.
live run with nothing running as "working". Pylon distinguishes
N queued,queued,N waitingandworking; the helper now carries that, since aspinner that claims work nobody is doing is the defect this repo cares about.
Converged on upstream
plus
visibilitychange,focusandblurlisteners to gate a per-labelshine, because no shared gate existed when it was written.
visibleAnimation.tsnow provides exactly that for every animation in the app, so this adopts
upstream's sweeping overlay, registers its container with the shared gate, and
deletes 28 lines of bespoke wiring.
deriveAgentSpawnSummarypreserves Pylon'scoordinator-authoritative live rule, so Pylon's inline duplicate is gone.
extractWorkLogToolLifecycleStatus; Pylon's shared version inclient-runtimealready encodes the same idle-batch rule, so the local copywas dropped rather than shadowing it.
Fixed along the way
docs/user/providers-antigravity.mdshipped in #440 with 22 "T3 Code" mentions,because that file was taken wholesale from upstream. All of them are the running
product referring to itself and now read "Pylon". The two mentions in
docs/user/install.mdare left alone: they describe installing beside T3 Code asa separate product, which is accurate.
Verification
favicon, mobile thread activity, spawn summary, and both timeline suites.
vp check: 0 errors across 3367 files.knip:checkclean.Model and harness: Claude Opus 5 via Claude Code.
Need help on this PR? Tag
@codesmith-botwith what you need. Autofix is disabled.