Repository navigation
Conversation
|
cmux status (one comment, edited in place; each line is updated by the job that owns it) Review App of this head (app.zip, kept 1 day)
Unclear: CI failed on
Failures:
Matched log linesNot re-run automatically: Written by red: web / Web status; a job it gathers is red on this change (its line here); do not merge until green; see lane-rules Gallery before/after for
States
Pick other states with a |
|
Found 7 test failures on Blacksmith runners: Failures
|
|
Bead |
The host asks the favicon service for a public host name, held to the service and its image servers, redraws the answer as a small PNG (a dark mark on a clear ground gets a light plate), and keeps one answer per host.
Web links draw the site's favicon in a fixed square before the text, the globe until it arrives; pasted URLs in a prompt become links; fetch tool rows show the page's icon.
18d2d6b to
77a664a
Compare
* test(transcript): a quoted or out-of-range bare #N stays text Leo: "these auto render to the pr instead of just #1 #2...". Red at base. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-9131aa102699be06c366 * fix(transcript): a quoted or out-of-range bare #N stays text Leo: "these auto render to the pr instead of just #1 #2...". A reply quoting "what is #1 / #2" drew cmux#1 and cmux#2 chips. - A blockquote links no bare #N (owner/repo#N and addresses still link). - Rule 4: rules c and d take a candidate only when N is as long as the smallest number the chat named in it; out of the folder's range, only the App's pull request cache can link N, else it is text. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-9131aa102699be06c366 * test(transcript): count only bare chips in the out-of-range case A prompt's pasted pull request address may draw as a chip too (#27167). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-9131aa102699be06c366 --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Resolves PromptText.tsx with the base's version: a prompt holding a web address now renders through Markdown, whose links are UrlChip, which this branch draws with the site's mark. linkedUrls stays exported and tested. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…n only as an inline PNG The merge made prompts link through Markdown (PromptTyped), so linkedUrls had no caller left: remove it and test the bubble's own path. SiteIcon draws a link.inspect icon only through the same PNG data URL check fetched icons get. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Review (independent review subagent, correctness first) of 88f98a1 (the merge of feat-cmux-next, no force push): FIX, now addressed in 38d593d. Merge: the base renders a prompt that holds an address through Markdown (
|
|
Review (independent review subagent, correctness first): SHIP at 38d593d
This is |
|
For awareness: this PR conflicts with feat-cmux-next, so it can't land until it's rebased or base is merged in. Its current review verdict stays as is; a hand-resolved merge gets a fresh review at the new head. |
…avicons # Conflicts: # Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/AgentPaneReplyLinks.swift # Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/AgentPaneReplyRequest.swift # webviews/src/agent-session/acpmux/chips/LinkChips.tsx # webviews/src/agent-session/acpmux/conversation/ToolRow.tsx
…he icon scale, icon test selectors
![Fix with [code]smith](https://pr-comments-assets.blacksmith.sh/codesmith/fix-with-codesmith-light-3x.png)
Web links in agent replies showed a plain globe, or nothing, so a reply with several sources read as a wall of blue text. Links in a person's own prompt were plain text. This PR draws each external link with its site's favicon, as T3 Code does: in replies, in prompts (a pasted URL becomes a link), and on web fetch tool rows.
link.favicons {hosts}(AgentPaneSiteIcons.swift): an icon cmux already has from its own browser tabs comes first, with no network. Else the host asks a public favicon service for the host name (the link's path and query never leave the Mac), throughGuardedRemoteFetch: https only, every address of every hop public, only the service and its image servers (www.google.com,t0tot3.gstatic.com), at most 3 redirects, 64 KiB, 5 s, no cookies or referrer. The answer is decoded off the main actor and redrawn as a PNG of at most 64 px. A dark mark on a clear ground gets a light plate, so it shows on a dark theme.agentPane.images.remote = neverfetches nothing.chips/SiteIcon.tsx,chips/siteIcons.ts): the mark is a fixed square from the first frame (globe until the icon arrives), so a late icon never reflows the paragraph. Requests are batched, one call in flight. A local or private address (localhost,192.168.x,.local) keeps the globe and is never sent. The host also never sends reserved names (.corp,.home,.intranet,.private,.alt, ...) or a company's own hosts (jira.corp.acme.com, anycorp,internalorintranetlabel), the same list T3 Code keeps off the service. GitHub and arXiv keep cmux's own marks. The icon is a CSS background, not an<img>, so copying a message copies text only and the composer attaches no images. Only a base64 PNG data URL is accepted from the host.UserBubble.tsx): a typed or pastedhttp(s)address is a link chip with the same mark and hover card. Paths stay plain text.webviews/dev-server/faviconHost.ts): the same op for?mockin a plain browser.Why a service and not
/favicon.ico: measured on 106 common developer sites,/favicon.icofinds 65%, the page's<link rel=icon>87%, the service 97%. Sites likerust-lang.orgdeclare their icon only in the page, and sites likenpmjs.comrefuse a direct fetch. The service sees the host names a chat links; that is the trade-off T3 Code makes too.Changelog
Tests
webviews/test/link-site-icons.test.tsx: globe then favicon from one batched ask; local, private and GitHub links never asked; a prompt's pasted URL becomes a link; a fetch row shows its page's icon; no<img>in the drawn marks; an answer that is not a base64 PNG is no icon; past 512 sites, pending sites still get their icons.Packages/macOS/CmuxNext/Tests/CmuxNextAgentPaneTests/AgentPaneSiteIconsTests.swift(stubbed resolver and transport, no network): request validation, only public host names asked, the service URL, the host pin, one fetch per host as a PNG, a page answer is no icon, bytes that are no image are no icon,neverfetches nothing, a tab's icon wins without a fetch, a dark mark gets a plate.link-cards.test.tsx,pr-hover-card.test.tsx,links-bluefor the new link mark.Observed / Not run
chat-faviconson macOS 26 with Claude Code replies: React, MDN, both Rust sites, Python, npm, OpenAI, Vite, Svelte, Zed and Bun icons load;localhostkeeps the globe; the Rust book's black icon shows on its plate.bun run check,prepush-gate.py(no App lines, no new singleton: the one site icons store is onAgentPaneShared), the webviews tests above (37 pass), Release compile (swift build -c release, Xcode 26.6).swift test --filter AgentPaneSiteIconspasses 11 tests at 36fc5ef (the Swift code is the same at the head). The base'sRowBadgeSpinnerDensityTestsdoes not compile on Xcode 26.6 (from fix(sidebar): a row's working spinner draws at the status glyph size #33120, fix in base red: RowBadgeSpinnerDensityTests' argument table is nonisolated (from #33120) #33377); it was patched locally for this run only.agent-pane.transcript/site-faviconsgallery state draws its stand-in favicons in dark and light (local gallery server). Its fixtures were SVG, which the page drops; they are now PNG.cmux-next swift test(sidebar padding tests, and the run cut short at 1500 s) andnightly-guards / release-notary(runner pool 502). This PR changes none of those files.Need help on this PR? Tag
@codesmith-botwith what you need.Summary by cubic
Web links in agent replies, prompts, and web fetch tool rows now show the site's favicon instead of a plain globe or plain text, via a new
link.faviconshost op.agentPane.images.remote = neverdisables icon fetching./favicon.icobecause it finds icons for 97% of 106 common developer sites, against 65% for/favicon.icoand 87% for the page's<link rel=icon>.Written for commit 38d593d. Summary will update on new commits.