From a59086d41375a8384808eb640eff0181d441dc6a Mon Sep 17 00:00:00 2001 From: LHagfoss Date: Sun, 15 Nov 2026 15:57:57 +0100 Subject: [PATCH] fix(desktop): keep icons on the design scale and say this computer Icons were drawn at 8 to 22px, with 11px used 128 times though the scale in docs/design.md has no 11. Every icon now takes a size from the scale (10, 12, 13, 14, 16, 18, 24), and a design test keeps it there. Visible strings that called this computer 'this machine', or environments 'machines', use the words docs/terminology.md gives. --- apps/desktop/src/design.test.ts | 20 ++++++++++++ apps/desktop/src/ui/AddHarness.tsx | 6 ++-- apps/desktop/src/ui/AgentViews.tsx | 8 ++--- apps/desktop/src/ui/Attachments.tsx | 2 +- apps/desktop/src/ui/AttentionCards.tsx | 6 ++-- apps/desktop/src/ui/Board.tsx | 8 ++--- apps/desktop/src/ui/Branches.tsx | 4 +-- apps/desktop/src/ui/Capabilities.tsx | 16 ++++----- apps/desktop/src/ui/ChangesPanel.tsx | 4 +-- apps/desktop/src/ui/ChatView.tsx | 4 +-- apps/desktop/src/ui/CommandPalette.tsx | 2 +- apps/desktop/src/ui/Compare.tsx | 2 +- apps/desktop/src/ui/Composer.tsx | 6 ++-- apps/desktop/src/ui/ComputerUseGroup.tsx | 2 +- apps/desktop/src/ui/ConnectRequests.tsx | 2 +- apps/desktop/src/ui/DelegateStatus.tsx | 4 +-- apps/desktop/src/ui/DelegateTree.tsx | 2 +- apps/desktop/src/ui/Dictation.tsx | 2 +- apps/desktop/src/ui/EarlierAttempts.tsx | 4 +-- apps/desktop/src/ui/Harnesses.tsx | 10 +++--- apps/desktop/src/ui/Inbox.tsx | 2 +- apps/desktop/src/ui/LinkChip.tsx | 4 +-- apps/desktop/src/ui/Links.tsx | 2 +- apps/desktop/src/ui/MachineProfile.tsx | 4 +-- apps/desktop/src/ui/MachineSettingsPage.tsx | 4 +-- apps/desktop/src/ui/Markdown.tsx | 2 +- apps/desktop/src/ui/MarkdownMedia.tsx | 2 +- apps/desktop/src/ui/ModelPicker.tsx | 4 +-- apps/desktop/src/ui/OverviewDetails.tsx | 4 +-- apps/desktop/src/ui/OverviewSection.tsx | 2 +- apps/desktop/src/ui/PlanCard.tsx | 4 +-- apps/desktop/src/ui/ProjectGenerators.tsx | 2 +- apps/desktop/src/ui/PullDiff.tsx | 16 ++++----- apps/desktop/src/ui/PullRequests.tsx | 12 +++---- apps/desktop/src/ui/QueuedMessages.tsx | 4 +-- apps/desktop/src/ui/RemoteAccessPage.tsx | 4 +-- apps/desktop/src/ui/RemoteConnect.tsx | 2 +- apps/desktop/src/ui/Review.tsx | 6 ++-- apps/desktop/src/ui/Rows.tsx | 36 ++++++++++----------- apps/desktop/src/ui/ScopedHarnesses.tsx | 2 +- apps/desktop/src/ui/Settings.tsx | 6 ++-- apps/desktop/src/ui/SettingsScope.tsx | 6 ++-- apps/desktop/src/ui/Sidebar.tsx | 34 +++++++++---------- apps/desktop/src/ui/SmartUIView.tsx | 4 +-- apps/desktop/src/ui/StatisticsPage.tsx | 6 ++-- apps/desktop/src/ui/SteerMark.tsx | 2 +- apps/desktop/src/ui/TerminalPanel.tsx | 4 +-- apps/desktop/src/ui/TextGeneration.tsx | 2 +- apps/desktop/src/ui/ThreadHoverCard.tsx | 8 ++--- apps/desktop/src/ui/ThreadPeek.tsx | 2 +- apps/desktop/src/ui/Transcript.tsx | 2 +- apps/desktop/src/ui/TurnChanges.tsx | 2 +- apps/desktop/src/ui/TurnTrace.tsx | 2 +- apps/desktop/src/ui/Updates.tsx | 8 ++--- apps/desktop/src/ui/UsagePage.tsx | 2 +- apps/desktop/src/ui/Viz.tsx | 2 +- apps/desktop/src/ui/WhileAway.tsx | 2 +- apps/desktop/src/ui/WorkflowRuns.tsx | 6 ++-- apps/desktop/src/ui/primitives.tsx | 2 +- docs/design.md | 6 ++-- 60 files changed, 181 insertions(+), 159 deletions(-) diff --git a/apps/desktop/src/design.test.ts b/apps/desktop/src/design.test.ts index ab1ee38d2..7a4b94d4a 100644 --- a/apps/desktop/src/design.test.ts +++ b/apps/desktop/src/design.test.ts @@ -268,6 +268,26 @@ describe("design system", () => { expect([...used].map(([, , why]) => `allowlist entry no longer matches a line: ${why}`)).toEqual([]); }); + test("icons take a size from the scale (docs/design.md › Icons)", () => { + // 10 a glyph in a status dot or a caption's spinner, 12 chips and captions, 13 menus, 14 + // toolbars and composer buttons, 16 page headers and tool rows, 18 empty states, 24 a page's + // own mark. + const SCALE = new Set([10, 12, 13, 14, 16, 18, 24]); + const found: string[] = []; + for (const path of files(join(SRC, "ui"))) { + const file = relative(SRC, path); + readFileSync(path, "utf8") + .split("\n") + .forEach((line, i) => { + for (const match of line.matchAll(/\bsize=\{(\d+)\}/g)) { + if (!SCALE.has(Number(match[1]))) + found.push(`${file}:${i + 1} icon size ${match[1]}: ${line.trim()}`); + } + }); + } + expect(found).toEqual([]); + }); + test("the engine's built-in themes carry the same surfaces", () => { // The app applies a theme's tokens inline, so an engine built-in that still // holds an old fill shadows index.css: the real app shows the theme file's diff --git a/apps/desktop/src/ui/AddHarness.tsx b/apps/desktop/src/ui/AddHarness.tsx index 87b931697..70ab8116f 100644 --- a/apps/desktop/src/ui/AddHarness.tsx +++ b/apps/desktop/src/ui/AddHarness.tsx @@ -153,7 +153,7 @@ export function AddHarnessForm({ onClose }: { onClose: () => void }) { )}
- {busy && } + {busy && } {busy === "adding" ? "Adding…" : busy === "verifying" ? "Verifying…" : "Add and verify"} @@ -216,7 +216,7 @@ export function HarnessCommandFields({ onClick={() => patch({ args: [...form.args, ""] })} className="flex items-center gap-1 self-start text-caption text-accent hover:underline" > - + Add argument
@@ -263,7 +263,7 @@ export function HarnessCommandFields({ onClick={() => patch({ env: [...form.env, { name: "", value: "" }] })} className="flex items-center gap-1 self-start text-caption text-accent hover:underline" > - + Add variable diff --git a/apps/desktop/src/ui/AgentViews.tsx b/apps/desktop/src/ui/AgentViews.tsx index 4bd325244..c3586269e 100644 --- a/apps/desktop/src/ui/AgentViews.tsx +++ b/apps/desktop/src/ui/AgentViews.tsx @@ -122,13 +122,13 @@ export function AgentAvatar({ className="-right-1 -bottom-1 absolute flex size-3 items-center justify-center rounded-full bg-bg ring-2 ring-bg" > {state === "working" ? ( - + ) : state === "failed" ? ( - + ) : state === "stopped" ? ( - + ) : ( - + )} )} diff --git a/apps/desktop/src/ui/Attachments.tsx b/apps/desktop/src/ui/Attachments.tsx index 4830e58fc..ed040fd1d 100644 --- a/apps/desktop/src/ui/Attachments.tsx +++ b/apps/desktop/src/ui/Attachments.tsx @@ -146,7 +146,7 @@ export function AttachmentStrip({ onClick={() => onRemove(a.id)} className="rc-glass absolute top-1.5 right-1.5 flex size-[20px] items-center justify-center rounded-full text-fg opacity-0 shadow-1 hover:bg-surface-3 group-hover:opacity-100 focus-visible:opacity-100" > - + ) : null, diff --git a/apps/desktop/src/ui/AttentionCards.tsx b/apps/desktop/src/ui/AttentionCards.tsx index 3fcc43f47..e465b663d 100644 --- a/apps/desktop/src/ui/AttentionCards.tsx +++ b/apps/desktop/src/ui/AttentionCards.tsx @@ -175,7 +175,7 @@ function ApprovalActions({ - {grants.length > 0 ? "Grant" : "More"} + {grants.length > 0 ? "Grant" : "More"} @@ -676,7 +676,7 @@ export function QuestionCard({ }} >
- +

{from ? `From ${from}: ` : ""} {q.header || "RustCode has a question"} @@ -928,7 +928,7 @@ export function ChildRequestCard({ From {from} diff --git a/apps/desktop/src/ui/Board.tsx b/apps/desktop/src/ui/Board.tsx index b02878775..17e559bfd 100644 --- a/apps/desktop/src/ui/Board.tsx +++ b/apps/desktop/src/ui/Board.tsx @@ -113,7 +113,7 @@ function Card({ {wt ? ( - + {wt.branch} ) : ( @@ -129,7 +129,7 @@ function Card({ {status === "review" ? ( settleThread(session.id)}> - Settle + Settle ) : ( @@ -139,7 +139,7 @@ function Card({ aria-label="Back to review" onClick={() => void setThreadStatus(session.id, "review")} > - Review + Review )} @@ -150,7 +150,7 @@ function Card({ onClick={() => void setThreadStatus(session.id, "idle")} className="flex size-6 items-center justify-center rounded-full bg-fill hover:bg-fill-strong" > - +

diff --git a/apps/desktop/src/ui/Branches.tsx b/apps/desktop/src/ui/Branches.tsx index 4784fd6b9..08e6564f6 100644 --- a/apps/desktop/src/ui/Branches.tsx +++ b/apps/desktop/src/ui/Branches.tsx @@ -26,7 +26,7 @@ export function OriginChip({ threadId }: { threadId: string }) { onClick={() => open && selectThread(open)} className="flex min-w-0 max-w-[260px] shrink items-center gap-1 rounded-sm px-1 text-caption text-fg-muted enabled:hover:bg-fill-subtle enabled:hover:text-fg disabled:cursor-default" > - + {line.label} {line.title} {open && } @@ -46,7 +46,7 @@ export function BranchRow({ branch }: { branch: Branch }) { const line = branchLine(branch); return (
- + {line.label} {!folded && (
@@ -230,7 +230,7 @@ export function StatusReplyRow({ rows }: { rows: readonly DelegateStatusRow[] }) return (
- + Status · {statusSummary(rows)} Local reply · no model turn diff --git a/apps/desktop/src/ui/DelegateTree.tsx b/apps/desktop/src/ui/DelegateTree.tsx index d4e24cd09..2d7bd0a81 100644 --- a/apps/desktop/src/ui/DelegateTree.tsx +++ b/apps/desktop/src/ui/DelegateTree.tsx @@ -341,7 +341,7 @@ export function DelegateTree({ return ( }> - + {total.threads} {total.threads === 1 ? "delegate" : "delegates"} diff --git a/apps/desktop/src/ui/Dictation.tsx b/apps/desktop/src/ui/Dictation.tsx index 28b1969b9..c3521bd2f 100644 --- a/apps/desktop/src/ui/Dictation.tsx +++ b/apps/desktop/src/ui/Dictation.tsx @@ -404,7 +404,7 @@ export function DictationButton({ dictation }: { dictation: Dictation }) { onPointerUp={hold ? dictation.release : undefined} className="flex size-7 items-center justify-center rounded-full bg-danger text-accent-fg hover:bg-danger/85" > - +
diff --git a/apps/desktop/src/ui/EarlierAttempts.tsx b/apps/desktop/src/ui/EarlierAttempts.tsx index fe08fa155..76b2d04e8 100644 --- a/apps/desktop/src/ui/EarlierAttempts.tsx +++ b/apps/desktop/src/ui/EarlierAttempts.tsx @@ -85,7 +85,7 @@ function EarlierAttempt({
- + Earlier attempt {turns} turn{turns === 1 ? "" : "s"} @@ -114,7 +114,7 @@ function AttemptAction({ threadId, attempt }: { threadId: string; attempt: Attem if (attempt.head === undefined) return ( - + The state it left was not kept ); diff --git a/apps/desktop/src/ui/Harnesses.tsx b/apps/desktop/src/ui/Harnesses.tsx index 602f3f94d..d2ecdf097 100644 --- a/apps/desktop/src/ui/Harnesses.tsx +++ b/apps/desktop/src/ui/Harnesses.tsx @@ -316,7 +316,7 @@ export function AccountsList({ harness }: { harness: Harness }) { onClick={() => setAdding(true)} className="flex items-center gap-1 self-start text-caption text-accent hover:underline" > - + Add account )} @@ -478,7 +478,7 @@ export function HarnessCard({ harness }: { harness: Harness }) {
- +
@@ -555,7 +555,7 @@ export function HarnessCard({ harness }: { harness: Harness }) { aria-expanded={open} className="flex items-center gap-1 text-caption text-fg-muted hover:text-fg" > - + Details {open && ( @@ -586,9 +586,9 @@ export function HarnessCard({ harness }: { harness: Harness }) { className={cx("flex items-start gap-1.5 text-caption", !row.available && "text-fg-faint")} > {row.available ? ( - + ) : ( - + )} {row.label} diff --git a/apps/desktop/src/ui/Inbox.tsx b/apps/desktop/src/ui/Inbox.tsx index 3a498b7ff..85d4836c5 100644 --- a/apps/desktop/src/ui/Inbox.tsx +++ b/apps/desktop/src/ui/Inbox.tsx @@ -507,7 +507,7 @@ export function Inbox() {
) : (
- +

Nothing needs you

Approvals, questions, failed turns and delegates land here. diff --git a/apps/desktop/src/ui/LinkChip.tsx b/apps/desktop/src/ui/LinkChip.tsx index abb8309c3..af7c56be0 100644 --- a/apps/desktop/src/ui/LinkChip.tsx +++ b/apps/desktop/src/ui/LinkChip.tsx @@ -113,7 +113,7 @@ export function LinkChip({ {!onRemove && ( )} @@ -125,7 +125,7 @@ export function LinkChip({ onClick={onRemove} className="ml-0.5 flex shrink-0 items-center text-fg-faint hover:text-fg" > - + )} diff --git a/apps/desktop/src/ui/Links.tsx b/apps/desktop/src/ui/Links.tsx index c533e579e..82b3dde18 100644 --- a/apps/desktop/src/ui/Links.tsx +++ b/apps/desktop/src/ui/Links.tsx @@ -244,7 +244,7 @@ export function LinkBadge({ threadId }: { threadId: string }) { if (!drivenBy) return null; return ( - + ); } diff --git a/apps/desktop/src/ui/MachineProfile.tsx b/apps/desktop/src/ui/MachineProfile.tsx index 9779ca093..df92101da 100644 --- a/apps/desktop/src/ui/MachineProfile.tsx +++ b/apps/desktop/src/ui/MachineProfile.tsx @@ -101,7 +101,7 @@ export function MachineIdentityEditor({ onName(null); }} > - + Reset )} @@ -126,7 +126,7 @@ export function MachineIdentityEditor({ : "flex size-7 items-center justify-center rounded-md text-fg-muted hover:bg-fill" } > - + ); })} diff --git a/apps/desktop/src/ui/MachineSettingsPage.tsx b/apps/desktop/src/ui/MachineSettingsPage.tsx index b8950bac7..cc6fb7e44 100644 --- a/apps/desktop/src/ui/MachineSettingsPage.tsx +++ b/apps/desktop/src/ui/MachineSettingsPage.tsx @@ -97,7 +97,7 @@ function MachineSettings({ machine }: { machine: Machine }) {

- +
@@ -150,7 +150,7 @@ function MachineSettings({ machine }: { machine: Machine }) { - + {title} ); diff --git a/apps/desktop/src/ui/MarkdownMedia.tsx b/apps/desktop/src/ui/MarkdownMedia.tsx index ea2e75359..1f0865f94 100644 --- a/apps/desktop/src/ui/MarkdownMedia.tsx +++ b/apps/desktop/src/ui/MarkdownMedia.tsx @@ -239,7 +239,7 @@ export function MermaidBlock({ code, fallback }: { code: string; fallback: React {fallback} {error && ( - + {tooBig ? error : `Mermaid: ${error}`} )} diff --git a/apps/desktop/src/ui/ModelPicker.tsx b/apps/desktop/src/ui/ModelPicker.tsx index f0bcc164a..2af0ed72d 100644 --- a/apps/desktop/src/ui/ModelPicker.tsx +++ b/apps/desktop/src/ui/ModelPicker.tsx @@ -1227,10 +1227,10 @@ export function ModelPicker({ thread, compact }: { thread?: ThreadState; compact > {label} - {fast?.currentBool && } + {fast?.currentBool && } {traits && {traits}} diff --git a/apps/desktop/src/ui/OverviewDetails.tsx b/apps/desktop/src/ui/OverviewDetails.tsx index 1eed681c5..ce2bd7a29 100644 --- a/apps/desktop/src/ui/OverviewDetails.tsx +++ b/apps/desktop/src/ui/OverviewDetails.tsx @@ -334,7 +334,7 @@ export function DetailsSection({ {lineage.parent && ( <>
- {lineage.parent.live ? "Working for" : "Started from"} + {lineage.parent.live ? "Working for" : "Started from"}
{lineage.parent.link ? (
- Messaged by + Messaged by
diff --git a/apps/desktop/src/ui/PlanCard.tsx b/apps/desktop/src/ui/PlanCard.tsx index 1f56f6308..9b01edabd 100644 --- a/apps/desktop/src/ui/PlanCard.tsx +++ b/apps/desktop/src/ui/PlanCard.tsx @@ -76,7 +76,7 @@ export function PlanCard({
- + Plan {left ? `${left} of ${entries.length} left` : "all done"} @@ -155,7 +155,7 @@ export function PlanCard({ setOpen(!open)}> {open ? "Collapse" : `Expand · ${entries.length} steps`} - {open ? : } + {open ? : }
diff --git a/apps/desktop/src/ui/ProjectGenerators.tsx b/apps/desktop/src/ui/ProjectGenerators.tsx index 35bc4a018..fd4d033ed 100644 --- a/apps/desktop/src/ui/ProjectGenerators.tsx +++ b/apps/desktop/src/ui/ProjectGenerators.tsx @@ -114,7 +114,7 @@ export function ProjectGenerators({ project }: { project: { name: string; path: return ( diff --git a/apps/desktop/src/ui/PullDiff.tsx b/apps/desktop/src/ui/PullDiff.tsx index 0cde2e218..2ff5e1fa9 100644 --- a/apps/desktop/src/ui/PullDiff.tsx +++ b/apps/desktop/src/ui/PullDiff.tsx @@ -294,10 +294,10 @@ export function ConversationCard({ return (
setOpen(true)} aria-expanded={false}> - + Resolved · {first.author || "Deleted user"} {replies.length > 0 && <> · {count(conversation.comments.length, "comment")}} - +
); @@ -308,7 +308,7 @@ export function ConversationCard({ aria-label={`Conversation on ${conversation.path}${range ? `:${range}` : ""}`} >
- + {range ? `${conversation.side === "LEFT" ? "base " : ""}line ${range}` : conversation.path} @@ -320,7 +320,7 @@ export function ConversationCard({ aria-expanded className="flex shrink-0 items-center gap-1 text-success hover:underline" > - Resolved + Resolved )} {threadId && ( @@ -329,7 +329,7 @@ export function ConversationCard({ )} addFeedbackToThread(conversationFeedback(conversation), pull)}> - Add to chat + Add to chat
@@ -474,7 +474,7 @@ const PullFile = memo(function PullFile({ {canComment && ( )} @@ -562,7 +562,7 @@ export function PullDiff({ cwd, pull, detail }: { cwd: string; pull: PullRequest disabled={open.length === 0} onClick={() => addFeedbackToThread(unresolvedFeedback(conversations), pull)} > - Add all unresolved + Add all unresolved
{detail?.reviewCommentsError && ( @@ -579,7 +579,7 @@ export function PullDiff({ cwd, pull, detail }: { cwd: string; pull: PullRequest {item.at !== undefined && <> · {relativeAge(item.at)}} addFeedbackToThread([item], pull)}> - Add to chat + Add to chat
diff --git a/apps/desktop/src/ui/PullRequests.tsx b/apps/desktop/src/ui/PullRequests.tsx index f08bfa6f5..254b1fc16 100644 --- a/apps/desktop/src/ui/PullRequests.tsx +++ b/apps/desktop/src/ui/PullRequests.tsx @@ -105,21 +105,21 @@ function ChecksMark({ pull }: { pull: PullRequest }) { if (c.failed) return ( - + {c.failed} failing ); if (c.pending) return ( - + {c.pending} running ); if (c.passed) return ( - + {c.passed} passed ); @@ -215,7 +215,7 @@ function ReviewForm({ cwd, pull, onDone }: { cwd: string; pull: PullRequest; onD disabled={busy || !repository || (event !== "APPROVE" && !body.trim())} onClick={() => void submit()} > - {busy ? : null} Submit review + {busy ? : null} Submit review
@@ -261,7 +261,7 @@ function FeedbackCard({ )} - Add to thread + Add to thread
@@ -420,7 +420,7 @@ function ChecksSection({ runs }: { runs: PullDetail["checkRuns"] }) { aria-expanded={open} className="mb-1 flex items-center gap-1 font-semibold text-caption text-fg-muted hover:text-fg" > - + {checksHeadline(runs)} {!open && rest.length > 0 && attention.length > 0 && ( · {rest.length} passed diff --git a/apps/desktop/src/ui/QueuedMessages.tsx b/apps/desktop/src/ui/QueuedMessages.tsx index 5e8ab23d2..3537d0e82 100644 --- a/apps/desktop/src/ui/QueuedMessages.tsx +++ b/apps/desktop/src/ui/QueuedMessages.tsx @@ -220,12 +220,12 @@ export const QueuedMessageRow = memo(function QueuedMessageRow({ edit. */}
- + {state} {editing ? ( - + Editing in the composer @@ -779,19 +779,19 @@ export const ToolRow = memo(function ToolRow({ {item.autoAllowed && ( - + )} {linkState && ( - + )} selectThread(startedId)} className="flex size-5 shrink-0 items-center justify-center rounded-sm text-fg-faint hover:bg-fill hover:text-fg" > - + )} @@ -836,7 +836,7 @@ export function SwitchRow({ item }: { item: Item<"switch"> }) { {modelFrom && ( <> {modelName(modelFrom)} - + )} {modelName(modelTo)} @@ -848,7 +848,7 @@ export function SwitchRow({ item }: { item: Item<"switch"> }) { {effortFrom && ( <> {effortLabel(effortFrom)} - + )} {effortLabel(effortTo)} @@ -872,7 +872,7 @@ export function HandoffRow({ item }: { item: Item<"handoff"> }) { {name(item.from)} - + {name(item.to)} {item.model && · {item.model}} @@ -916,9 +916,9 @@ export function WakeRow({ text, flat }: { text: string; flat?: boolean }) { )) ) : notice.asking.length && !notice.finished.length ? ( - + ) : ( - + )} {notice.failed && } {notice.label} @@ -975,7 +975,7 @@ export function NoticeRow({ > - {item.progress ? : } + {item.progress ? : } {item.text} {times} {item.setting === "auto-compact" && ( @@ -1023,7 +1023,7 @@ export function CompletionCard({ completion }: { completion: TurnCompletion }) { @@ -1052,7 +1052,7 @@ export function CompletionCard({ completion }: { completion: TurnCompletion }) {
{completion.files.map((f) => (
- + {f.path} @@ -1163,12 +1163,12 @@ export const ToolGroupRow = memo(function ToolGroupRow({ {group.label} {group.failed > 0 && ( - + {group.failed} failed )} {completion && }
- {item.outcome === "cancelled" && !folded && } + {item.outcome === "cancelled" && !folded && } {parts.length > 0 && {parts.join(" · ")}} {(row.copy || row.fork || row.sideChat) && ( diff --git a/apps/desktop/src/ui/ScopedHarnesses.tsx b/apps/desktop/src/ui/ScopedHarnesses.tsx index 2ef570d15..a1f2c70a7 100644 --- a/apps/desktop/src/ui/ScopedHarnesses.tsx +++ b/apps/desktop/src/ui/ScopedHarnesses.tsx @@ -80,7 +80,7 @@ export function ScopedHarnessList({ targets, writes }: { targets: ScopeMachine[] return (
- +
diff --git a/apps/desktop/src/ui/Settings.tsx b/apps/desktop/src/ui/Settings.tsx index 6441e61ea..a989f61d8 100644 --- a/apps/desktop/src/ui/Settings.tsx +++ b/apps/desktop/src/ui/Settings.tsx @@ -672,7 +672,7 @@ function AgentsPage() { action={ saved ? ( - Saved + Saved ) : undefined } @@ -699,13 +699,13 @@ function AgentsPage() { thisMachine ? (
void runAllHarnessChecks()} disabled={checking}> - {checking && } + {checking && } {checkingAll ? `Checking ${Math.min(checkingAll.done + 1, checkingAll.total)} of ${checkingAll.total}…` : "Check all"} setAdding(true)} disabled={adding}> - + Add harness
diff --git a/apps/desktop/src/ui/SettingsScope.tsx b/apps/desktop/src/ui/SettingsScope.tsx index ca6a5e70f..99947e0af 100644 --- a/apps/desktop/src/ui/SettingsScope.tsx +++ b/apps/desktop/src/ui/SettingsScope.tsx @@ -135,7 +135,7 @@ export function MixedChip({ breakdown }: { breakdown: ScopeBreakdownEntry[] }) { } > - + Mixed @@ -167,7 +167,7 @@ export function SourceChip({ project }: { project: ProjectRowState }) { project.source === "project" ? "bg-accent/12 text-accent" : "bg-fill-subtle text-fg-muted" }`} > - + {SOURCE_LABEL[project.source]} @@ -211,7 +211,7 @@ export function ScopedValue({ /** Where a page's rows are shown, for a title ("Lars's MacBook Pro"). */ export function scopeName(value: string | undefined, machines: { host: string; name: string }[]): string { - return machines.find((machine) => machine.host === value)?.name ?? "this machine"; + return machines.find((machine) => machine.host === value)?.name ?? "this environment"; } export { scopeLabel }; diff --git a/apps/desktop/src/ui/Sidebar.tsx b/apps/desktop/src/ui/Sidebar.tsx index 1ece71ae4..7e15b0db7 100644 --- a/apps/desktop/src/ui/Sidebar.tsx +++ b/apps/desktop/src/ui/Sidebar.tsx @@ -343,7 +343,7 @@ function ThreadMenuItems({ Snooze - +
- {worktree.branch} + {worktree.branch}
{!remote && ( <> @@ -1002,10 +1002,10 @@ const ThreadRow = memo(function ThreadRow({ className={cx("relative shrink-0", markTint)} /> - {pinned && } + {pinned && } {branch && ( - {branch === "fork" ? : } + {branch === "fork" ? : } )} @@ -1019,7 +1019,7 @@ const ThreadRow = memo(function ThreadRow({ > {delegates && ( - + {delegates.title} {delegates.count} @@ -1032,13 +1032,13 @@ const ThreadRow = memo(function ThreadRow({ {/* Line 1: the title, and what the thread is doing (the hover actions take its place). */} - {pinned && } + {pinned && } {branch && ( - {branch === "fork" ? : } + {branch === "fork" ? : } )} @@ -1081,10 +1081,10 @@ const ThreadRow = memo(function ThreadRow({ } > · - + {place.name} {unsynced && ( - + )} )} @@ -1097,7 +1097,7 @@ const ThreadRow = memo(function ThreadRow({ aria-label={delegates.title} className="flex shrink-0 items-center gap-0.5 text-fg-muted tabular" > - + {delegates.count} @@ -1121,7 +1121,7 @@ const ThreadRow = memo(function ThreadRow({ ) : gitBranch ? ( <> - + {rowBranch(gitBranch)} @@ -1130,7 +1130,7 @@ const ThreadRow = memo(function ThreadRow({ // A folder outside git has no branch: the line names the folder instead. folder && ( <> - + {folder} @@ -1195,7 +1195,7 @@ const ThreadRow = memo(function ThreadRow({ title={`Actions · ${formatBinding("shift+f10")}`} className="flex size-6 items-center justify-center rounded-sm text-fg-muted hover:bg-fill hover:text-fg" > - + @@ -1269,12 +1269,12 @@ const PendingRow = memo(function PendingRow({ {failure ? ( <> - + Failed ) : ( <> - + )} @@ -1297,7 +1297,7 @@ const PendingRow = memo(function PendingRow({ {pending.worktree ? "Setting up" : "Starting"} {branch && ( <> - + {branch} )} @@ -2464,7 +2464,7 @@ export function Sidebar() { aria-live="polite" className="pointer-events-none absolute inset-2 z-30 flex flex-col items-center justify-center gap-2 rounded-lg bg-accent/10 px-4 text-center text-callout text-fg outline-2 outline-accent outline-dashed" > - + Drop folders to add them as projects
)} diff --git a/apps/desktop/src/ui/SmartUIView.tsx b/apps/desktop/src/ui/SmartUIView.tsx index 9facccadb..424e9a10b 100644 --- a/apps/desktop/src/ui/SmartUIView.tsx +++ b/apps/desktop/src/ui/SmartUIView.tsx @@ -529,7 +529,7 @@ export function SmartUIView({ ) : halt ? (
- Run interactive view + Run interactive view {title}
@@ -562,7 +562,7 @@ export function SmartUIView({ ) : ( - + )}
diff --git a/apps/desktop/src/ui/StatisticsPage.tsx b/apps/desktop/src/ui/StatisticsPage.tsx index a08ca1d0b..d7633d1a0 100644 --- a/apps/desktop/src/ui/StatisticsPage.tsx +++ b/apps/desktop/src/ui/StatisticsPage.tsx @@ -232,7 +232,7 @@ export function StatisticsPage() { onChange={setPeriod} /> void refresh()} disabled={refreshing}> - {refreshing ? : } Refresh + {refreshing ? : } Refresh
} @@ -875,7 +875,7 @@ function HowThisIsCounted({ children }: { children: ReactNode }) { return (
- + How this is counted
{children}
@@ -1008,7 +1008,7 @@ function NothingRecorded({ title="Recorded usage" action={ void refresh()} disabled={refreshing}> - {refreshing ? : } Refresh + {refreshing ? : } Refresh } footer={error ? Could not refresh: {error} : undefined} diff --git a/apps/desktop/src/ui/SteerMark.tsx b/apps/desktop/src/ui/SteerMark.tsx index 35205932c..4d87d7f15 100644 --- a/apps/desktop/src/ui/SteerMark.tsx +++ b/apps/desktop/src/ui/SteerMark.tsx @@ -44,7 +44,7 @@ export function SteerMark({ note, inPlan }: { note: SteerNote; inPlan?: boolean inPlan ? "max-w-full" : "max-w-[min(420px,60vw)]", )} > - + Steered: {line} diff --git a/apps/desktop/src/ui/TerminalPanel.tsx b/apps/desktop/src/ui/TerminalPanel.tsx index f79d73cef..d3366838b 100644 --- a/apps/desktop/src/ui/TerminalPanel.tsx +++ b/apps/desktop/src/ui/TerminalPanel.tsx @@ -238,7 +238,7 @@ function TerminalView({ tab, visible }: { tab: TerminalTab; visible: boolean }) onClick={() => setGeneration((g) => g + 1)} className="flex items-center gap-1 text-accent hover:underline" > - Restart + Restart
)} @@ -325,7 +325,7 @@ export function TerminalPanel() { onClick={() => closeTerminalTab(tab.id)} className="shrink-0 text-fg-faint opacity-0 group-focus-within:opacity-100 group-hover:opacity-100 hover:text-fg focus-visible:opacity-100" > - +
))} diff --git a/apps/desktop/src/ui/TextGeneration.tsx b/apps/desktop/src/ui/TextGeneration.tsx index 411271629..a08b50ede 100644 --- a/apps/desktop/src/ui/TextGeneration.tsx +++ b/apps/desktop/src/ui/TextGeneration.tsx @@ -45,7 +45,7 @@ export function TextGeneration() {

Text generation

- Use a separate model for titles and git drafts. Keys stay on this machine. + Use a separate model for titles and git drafts. Keys stay on this computer.