Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
239 commits
Select commit Hold shift + click to select a range
094ecfe
feat(web): establish redesign primitives and shell
maria-rcks Oct 31, 2026
09ded08
refactor(web): remove unused toggle pressed tokens
maria-rcks Oct 31, 2026
868e926
fix(web): match catalog button and type specimens
maria-rcks Oct 31, 2026
ec38f21
fix(web): honor reduced motion in overlay primitives
maria-rcks Oct 31, 2026
9a66264
fix(web): match shell and overlay design geometry
maria-rcks Oct 31, 2026
50ac3db
fix(web): align project search and sidebar badge sizes
maria-rcks Oct 31, 2026
b4230c9
fix(web): preserve shell type role and titlebar spacing
maria-rcks Oct 31, 2026
e650cad
fix(web): give provider tiles room for icons and labels
maria-rcks Oct 31, 2026
2949e62
fix(web): match browser address toolbar spacing to design
maria-rcks Oct 31, 2026
f22947f
fix(chat): match inline request cards to the timeline design
maria-rcks Oct 31, 2026
597870e
feat(ui): add relaxed picker spacing and compact key hints
maria-rcks Oct 31, 2026
e5f7661
fix(ui): use the inset field surface and format picker variants
maria-rcks Oct 31, 2026
796bc67
fix(ui): preserve web context menu widths
maria-rcks Oct 31, 2026
ec376b6
fix(ui): keep palette actions above provider notices
maria-rcks Oct 31, 2026
945d8df
fix(ui): fit browser previews inside a landscape floating frame
maria-rcks Oct 31, 2026
11035a3
fix(web): restore compact panel controls and touch targets
maria-rcks Oct 31, 2026
70fa6ae
fix(web): home screen project rows show the project they open (#29085)
flamboh Nov 2, 2026
b3329c6
fix(web): Snoozed and Settled rows drop the PR badge, and snooze time…
flamboh Nov 2, 2026
b34b201
fix(web): snoozed rows show the snooze time like main
maria-rcks Nov 2, 2026
1f56095
fix(web): project groups show an icon if any checkout has one (#29199)
flamboh Nov 2, 2026
2aa33fa
fix(web): open pull requests show the arrow icon again (#29213)
flamboh Nov 2, 2026
f77d0c7
fix(web): restore main sidebar thread rows
maria-rcks Nov 3, 2026
6cd0c38
fix(web): new-thread project rows inset their environment icon (#29985)
flamboh Nov 3, 2026
d8727ee
fix(web): palette project rows show the location under the name (#29980)
flamboh Nov 3, 2026
f391418
fix(web): sidebar New thread skips the project dialog (#29973)
flamboh Nov 3, 2026
0addf89
fix(web): preserve rebased server text and shortcut expectations
maria-rcks Nov 3, 2026
dee2da0
fix(web): sidebar rows no longer show a Merged status (#31105)
SunkenInTime Nov 5, 2026
4c1d766
fix(web): sidebar PR badges use the same green as the rest of the red…
flamboh Nov 5, 2026
2bbd07e
feat(web): redesign composer and conversation timeline
maria-rcks Oct 31, 2026
7535dfc
refactor(chat): remove unused work log helpers
maria-rcks Oct 31, 2026
78f313c
fix(chat): stop tool shine while waiting for input
maria-rcks Oct 31, 2026
0621db6
fix(chat): keep paused timer clear of question text
maria-rcks Oct 31, 2026
d3fef7e
fix(chat): keep approval decisions together on narrow screens
maria-rcks Oct 31, 2026
2cc5772
fix(chat): match composer corner and send slot dimensions
maria-rcks Oct 31, 2026
f24108b
fix(chat): match the collapsed working window dimensions
maria-rcks Oct 31, 2026
47a7a88
fix(chat): acknowledge custom question answers in the footer
maria-rcks Oct 31, 2026
0a00810
style(chat): format grouped approval actions
maria-rcks Oct 31, 2026
1ee1d16
fix(chat): summarize wake-ups and retain the latest answer
maria-rcks Oct 31, 2026
dc269bf
fix(chat): use the pill radius token and accessible wake-up label
maria-rcks Oct 31, 2026
fff5ec8
style(chat): format the composer surface
maria-rcks Oct 31, 2026
7bb038d
fix(chat): align timeline rows and attachment layouts with design
maria-rcks Oct 31, 2026
797075c
fix(chat): keep row class helper compiler eligible
maria-rcks Oct 31, 2026
b28b6a7
fix(chat): expose the existing interrupt action on live work rows
maria-rcks Oct 31, 2026
73b3f2c
fix(chat): keep interrupt available in grouped live rows
maria-rcks Oct 31, 2026
b064ce1
fix(chat): keep turn interrupt off task summary rows
maria-rcks Oct 31, 2026
5775d4f
fix(chat): match composer suggestion and picker menus to the design
maria-rcks Oct 31, 2026
7e73ede
fix(chat): keep branch picker separators stable
maria-rcks Oct 31, 2026
59e2b35
fix(chat): let the picker text role own its weight
maria-rcks Oct 31, 2026
ba1a14c
fix(chat): match the option c composer and integrated tray
maria-rcks Oct 31, 2026
9811061
fix(chat): validate plan actions and queued reorder commands
maria-rcks Oct 31, 2026
4d023cb
fix(chat): keep work and notices in the composer tray
maria-rcks Oct 31, 2026
10fabcb
fix(chat): reserve the machine chip for remote threads
maria-rcks Oct 31, 2026
b2d09d5
fix(chat): wire approval shortcuts in the composer tray
maria-rcks Oct 31, 2026
4bd6500
fix(chat): settle completed tasks and cap the prompt at eight lines
maria-rcks Oct 31, 2026
a9e588c
fix(chat): keep tray work bound to the active run
maria-rcks Oct 31, 2026
24949fc
fix(chat): accept approval keys from the focused workspace
maria-rcks Oct 31, 2026
2ba6b02
fix(chat): collapse composer controls on narrow panes
maria-rcks Oct 31, 2026
fa50cd9
fix(chat): keep picked attachments above the prompt
maria-rcks Oct 31, 2026
830cd70
fix(chat): preview queue order while dragging
maria-rcks Oct 31, 2026
4cf6f95
fix(chat): show the branch picker chevron in the tray
maria-rcks Oct 31, 2026
bcf0b26
fix(chat): stage file rows without an automatic reference
maria-rcks Oct 31, 2026
82dc38d
fix(chat): keep question actions in the tray panel
maria-rcks Oct 31, 2026
193418f
fix(chat): align composer and requests with final design
maria-rcks Oct 31, 2026
d6716ab
fix(chat): anchor composer and branch popup to design edges
maria-rcks Oct 31, 2026
387ae8f
fix(chat): keep approval actions together and remove unused drop overlay
maria-rcks Oct 31, 2026
1d648e0
fix(chat): keep tray border inside composer dimensions
maria-rcks Oct 31, 2026
6f7d5dd
fix(chat): reconcile node views outside React lifecycle
maria-rcks Oct 31, 2026
9cd701c
fix(chat): preserve synchronous caret updates and popup width
maria-rcks Oct 31, 2026
437e583
fix(web): steered turns' fold rows each show their own time and edits…
flamboh Nov 2, 2026
4d130ec
fix(web): a finished turn's label stays readable next to still-runnin…
flamboh Nov 2, 2026
405813e
fix(web): steered turns read like a chat with one fold at the end (#2…
flamboh Nov 2, 2026
6f79218
test(web): drop the removed assistant timestamp assertion
maria-rcks Nov 3, 2026
2f0c434
fix(web): the working window expands downward without moving the bar …
flamboh Nov 2, 2026
818f116
refactor(chat): remove obsolete thinking interrupt flag
maria-rcks Nov 3, 2026
2e92c7f
fix(web): keep background work off turn fold rows
maria-rcks Nov 2, 2026
7e50fca
feat(web): context chips drop the pill and read as colored text, in r…
flamboh Nov 2, 2026
d940645
fix(web): narrow composers collapse the env and branch chips instead …
flamboh Nov 2, 2026
9f504c3
fix(web): scroll collapsed working history independently
maria-rcks Nov 3, 2026
ad0bf5a
fix(web): Limits opens the usage limits popover directly (#29222)
flamboh Nov 3, 2026
013eae5
fix(web): clarify account scope in the usage limits popover
maria-rcks Nov 3, 2026
ccc341d
fix(web): the working bar shows its fold caret again (#29969)
flamboh Nov 3, 2026
7df179b
fix(web): collapsing the working window keeps its top fade (#29972)
flamboh Nov 3, 2026
db26e98
fix(web): a running turn's answer streams below the fold, not inside …
flamboh Nov 3, 2026
18967ab
fix(web): new wake-ups join their fold without shifting the timeline …
flamboh Nov 3, 2026
f1db15f
fix(web): retain composer compatibility after rebase
maria-rcks Nov 3, 2026
69294da
fix(web): composer text and placeholder stay clear of the send button…
flamboh Nov 5, 2026
c3c4af6
fix(web): pasting an image or file drops its chip in the prompt again…
flamboh Nov 5, 2026
dc83af7
fix(web): collapsing the working window no longer nudges the timeline…
flamboh Nov 5, 2026
4609b05
fix(web): the working window's scrollbar shows its whole history from…
flamboh Nov 5, 2026
ae29518
fix(web): finished and wake-up folds work like the live working fold …
flamboh Nov 5, 2026
4ee7ba8
fix(web): finished turn folds show the live timer's duration format (…
flamboh Nov 5, 2026
57ecd42
fix(web): tighten the bubble corner under the steer label
maria-rcks Nov 5, 2026
ff00df3
feat(web): redesign review panels and supporting pages
maria-rcks Oct 31, 2026
f658165
fix(web): restore three-row pull request headers
maria-rcks Oct 31, 2026
b57f283
fix(web): fill pull request tab bars with equal segments
maria-rcks Oct 31, 2026
a87fcee
fix(web): group pull request readiness in a merge card
maria-rcks Oct 31, 2026
6abb429
fix(web): avoid repeated unchanged preview scroll updates
maria-rcks Oct 31, 2026
7c77315
fix(web): collect pull request body media in attachments gallery
maria-rcks Oct 31, 2026
645e238
chore(web): format panel fixes and remove unused copy handler
maria-rcks Oct 31, 2026
17cf8d8
fix(web): account for segmented well border in header sizing
maria-rcks Oct 31, 2026
bc515bd
fix(web): use design tokens for pull request header dimensions
maria-rcks Oct 31, 2026
c9b6b3e
fix(web): align panel content hierarchy with design frames
maria-rcks Oct 31, 2026
cb2846b
fix(web): fit compact csv columns to file previews
maria-rcks Oct 31, 2026
383f5e5
fix(web): preserve filled file refresh control
maria-rcks Oct 31, 2026
dfa4096
fix(web): align pull request panels with design
maria-rcks Oct 31, 2026
033c55b
fix(web): match pull request filter menu dimensions
maria-rcks Oct 31, 2026
d313a13
fix(web): match file preview and diff menu density
maria-rcks Oct 31, 2026
6b63452
fix(web): size pull request tabs to the compact design
maria-rcks Oct 31, 2026
2060e77
fix(web): compare sampled table content before remeasuring
maria-rcks Oct 31, 2026
4da9008
fix(web): use the control type token for document notices
maria-rcks Oct 31, 2026
6f43c86
fix(web): center compact pr tab segments
maria-rcks Oct 31, 2026
fef123d
fix(web): pull request header shows its repo and collapses on scroll …
flamboh Nov 2, 2026
db280c4
fix(web): edit title expands the collapsed pull request header
maria-rcks Nov 2, 2026
4278cf2
fix(web): pull request state badge matches the redesign's status chip…
flamboh Nov 2, 2026
a58e4ad
feat(web): redesign settings and setup surfaces
maria-rcks Oct 31, 2026
2918ea1
refactor(web): share diagnostics statistic tooltip
maria-rcks Oct 31, 2026
3ab4cfe
chore(web): remove obsolete lint ceiling entries
maria-rcks Oct 31, 2026
321ec49
fix(web): keep snooze fields inside narrow settings panes
maria-rcks Oct 31, 2026
b5c9dc9
fix(web): preserve room for snooze amounts on mobile
maria-rcks Oct 31, 2026
fb4c098
fix(web): give settings a floating panel shell
maria-rcks Oct 31, 2026
4880a05
fix(web): scope settings navigation surface and insets
maria-rcks Oct 31, 2026
13711b9
fix(web): match settings scrim and retain mobile scope labels
maria-rcks Oct 31, 2026
6fe11a9
fix(web): match settings content spacing and defer shortcut editors
maria-rcks Oct 31, 2026
2c534f1
perf(web): share shortcut tooltip and skip offscreen row layout
maria-rcks Oct 31, 2026
d989c1c
perf(web): defer offscreen shortcut controls until visible
maria-rcks Oct 31, 2026
82b848f
fix(web): align diagnostics overview cards with settings design
maria-rcks Oct 31, 2026
580b559
fix(web): retain shortcut subgrid alignment when deferring controls
maria-rcks Oct 31, 2026
d281326
fix(web): match settings page content to design frames
maria-rcks Oct 31, 2026
dab7bb8
fix(web): use compact project choices and browser selects
maria-rcks Oct 31, 2026
c7f1cc1
fix(server): let partial session scans search farther on refresh
maria-rcks Oct 31, 2026
958ae3c
fix(web): align system dialogs and restore guided setup
maria-rcks Oct 31, 2026
e3007c4
fix(web): keep all configured agents reachable during setup
maria-rcks Oct 31, 2026
e292d91
fix(web): keep setup actions visible and project names readable
maria-rcks Oct 31, 2026
67d5efc
fix(web): use provider tile size in publish dialog
maria-rcks Oct 31, 2026
3a22844
fix(web): align pull request linking dialog with design
maria-rcks Oct 31, 2026
dbe5dbd
fix(web): match link dialog title and action dimensions
maria-rcks Oct 31, 2026
ee347fa
fix(web): preserve intrinsic link dialog action widths
maria-rcks Oct 31, 2026
c65ca0f
fix(web): align settings rows and defer offscreen shortcut layout
maria-rcks Oct 31, 2026
2da9210
fix(web): retain the deferred shortcut grid layout
maria-rcks Oct 31, 2026
904d38c
fix(web): keep publish provider names readable in one row
maria-rcks Oct 31, 2026
1516f90
fix(web): position pull request linking within content
maria-rcks Oct 31, 2026
75e13a6
fix(web): account for both content margins when centering
maria-rcks Oct 31, 2026
a992fdb
fix(web): restore settings scope sentence and page breadcrumb
maria-rcks Oct 31, 2026
d58e18f
fix(web): wrap settings scope labels on narrow screens
maria-rcks Oct 31, 2026
26a7f9a
fix(web): settings stay dark in the Iris, Ember, Ocean and Grove them…
flamboh Nov 2, 2026
8a65ca5
fix(web): the current thread row in Lineage nests inside its card (#3…
SunkenInTime Nov 3, 2026
a96171a
fix(web): the project picker's computer icon lines up with the other …
SunkenInTime Nov 3, 2026
ad02f65
fix(web): the content pane sits evenly in the window and follows the …
SunkenInTime Nov 3, 2026
18517a5
fix(desktop): restore main titlebar insets after pane geometry
maria-rcks Nov 3, 2026
de5bfad
fix(web): keep working row hooks ahead of the setup card early return
maria-rcks Nov 5, 2026
ee0f6e5
feat(voice): add environment speech input
maria-rcks Oct 31, 2026
8c7a0c7
fix(voice): skip cleanup when no provider is ready
maria-rcks Oct 31, 2026
2ef5672
fix(voice): keep mobile model cards in the page scroll
maria-rcks Oct 31, 2026
cf794f4
docs(voice): describe the microphone finish control
maria-rcks Oct 31, 2026
8e63689
fix(web): dictating no longer flickers or shifts the timeline (#30437)
flamboh Nov 5, 2026
d4e8e12
fix(web): the timeline inset no longer reserves room for a speech tray
maria-rcks Nov 5, 2026
6277e2c
fix(web): Voice settings open on a short model list (#30410)
flamboh Nov 5, 2026
30f53af
feat(web): add workspace panes and transitions
maria-rcks Oct 31, 2026
de84f6a
fix(web): preserve restored sidebar focus controls in panes
maria-rcks Nov 3, 2026
c8cf4a3
fix(web): keep content focus recovery in its pane
maria-rcks Oct 31, 2026
5f0f225
fix(web): reorder tabs at their header drop position
maria-rcks Oct 31, 2026
8c1ee9d
fix(web): scroll overflowing pane tabs and reveal selection
maria-rcks Oct 31, 2026
a6f1dc3
fix(web): restore closed chat tabs from reopen history
maria-rcks Oct 31, 2026
6ed6283
fix(web): wrap the shortcut sheet at narrow widths
maria-rcks Oct 31, 2026
5555b2a
fix(web): retain workspace while route modals load
maria-rcks Oct 31, 2026
22e656c
test(web): cover restoring a closed chat tab
maria-rcks Oct 31, 2026
fbcbcd5
fix(web): carry the browser frame across picture-in-picture handoffs
maria-rcks Oct 31, 2026
5ce0b3e
fix(web): omit unset drop insertion indices
maria-rcks Oct 31, 2026
ac313c3
fix(web): show live shell status on the hidden terminal tab
maria-rcks Oct 31, 2026
96e05c2
feat(web): hint which thread a terminal opens for
maria-rcks Oct 31, 2026
a9d2f83
fix(web): resolve terminal hint thread before use
maria-rcks Oct 31, 2026
1ee9999
refactor(web): remove unused workspace components and helpers
maria-rcks Oct 31, 2026
7c9ef3c
refactor(web): remove the public design-system turn player
maria-rcks Oct 31, 2026
790d28a
style(web): format workspace pane fixes
maria-rcks Oct 31, 2026
2a3d561
fix(web): include utility headers in pane tab scrolling
maria-rcks Oct 31, 2026
65b05c3
chore(web): regenerate routes after removing scenes
maria-rcks Oct 31, 2026
045a535
fix(web): include terminal panes in tab drop indices
maria-rcks Oct 31, 2026
2a254f4
test(web): keep terminal drawer mock in sync with tab strip
maria-rcks Oct 31, 2026
caa3e2c
fix(web): focus thread search without scrolling its pane
maria-rcks Oct 31, 2026
e7d2cd3
fix(web): paint pane backgrounds without a retained compositor layer
maria-rcks Oct 31, 2026
467d053
fix(web): keep the active filename visible in crowded pane tabs
maria-rcks Oct 31, 2026
4afe857
fix(web): reposition layout hints when the viewport resizes
maria-rcks Oct 31, 2026
6f54981
fix(web): prevent horizontal scrolling of the chat column
maria-rcks Oct 31, 2026
7207e16
fix(web): preserve file tab width inside the pane scroller
maria-rcks Oct 31, 2026
efb4651
fix(web): reveal the filename end of oversized active tabs
maria-rcks Oct 31, 2026
bfc07a9
fix(web): reveal pane tabs when their breadcrumbs mount
maria-rcks Oct 31, 2026
f626fe0
fix(web): follow pane sizing while the terminal hint is visible
maria-rcks Oct 31, 2026
e59ba0f
fix(web): settle layout hints after pane transforms finish
maria-rcks Oct 31, 2026
f1001d4
fix(web): track hint anchors through compositor motion
maria-rcks Oct 31, 2026
47bfa1a
refactor(web): let the geometry tracker own hint movement listeners
maria-rcks Oct 31, 2026
045005c
fix(web): yield reopen shortcuts to modal dialogs
maria-rcks Oct 31, 2026
5f06b35
fix(web): match pane tabs and held layout sheet to the design
maria-rcks Oct 31, 2026
295cd7a
fix(web): use the design pane gutter between workspace columns
maria-rcks Oct 31, 2026
a69d9f9
feat(web): introduce workspace tabs with a guided tour
maria-rcks Oct 31, 2026
348f70a
fix(web): reuse floating settings shell for usage
maria-rcks Oct 31, 2026
72dc45d
fix(layout): reuse focused launchers when opening content
maria-rcks Oct 31, 2026
2eb36b7
fix(layout): cover timeline content beneath pane headers
maria-rcks Oct 31, 2026
56e03a7
fix(layout): reserve sidebar toggle space in surface headers
maria-rcks Oct 31, 2026
43a2bd4
fix(web): align settings shell and illustrate layout onboarding
maria-rcks Oct 31, 2026
726b610
fix(web): reserve mobile settings header actions in search
maria-rcks Oct 31, 2026
3d60160
fix(web): keep layout introduction actions reachable on mobile
maria-rcks Oct 31, 2026
81f707e
fix(web): keep layout tour coaches inside the viewport
maria-rcks Oct 31, 2026
847fb97
fix(web): constrain tour cards to their available width
maria-rcks Oct 31, 2026
166fe11
fix(web): sideways swipes over a terminal scroll the pane strip (#29054)
flamboh Nov 2, 2026
d6a7d4c
fix(web): closing a pane no longer blacks out the panes beside it (#2…
flamboh Nov 2, 2026
3d8a825
fix(web): Lineage shows short model names (#29138)
flamboh Nov 2, 2026
7197279
fix(web): keep lineage model metadata on separate lines
maria-rcks Nov 2, 2026
ba8314b
fix(web): keybinding settings show only this platform's shortcuts (#2…
flamboh Nov 2, 2026
82551ae
fix(web): project picker rows show the icon of the folder they open (…
flamboh Nov 2, 2026
90ae348
fix(web): pane corners keep the chrome grain under their curve (#29547)
flamboh Nov 2, 2026
a48db9a
fix(web): closing a subagent's tab goes back to its parent thread (#2…
flamboh Nov 2, 2026
9cc3aee
fix(web): drop the header Agents menu; Lineage covers it (#29568)
flamboh Nov 2, 2026
a20526f
refactor(web): remove the empty pane header actions wrapper
maria-rcks Nov 3, 2026
183425a
fix(web): pane tabs keep their icon and PR state when you switch tabs…
flamboh Nov 2, 2026
5523160
fix(web): keep pane tab labels to one resource title
maria-rcks Nov 2, 2026
721c3a1
fix(web): side pane tab bars match the pane below them (#29064)
flamboh Nov 2, 2026
f087c34
fix(web): closing a middle pane no longer blanks the panes beside it …
flamboh Nov 3, 2026
85c3a4c
fix(web): top-right notices sit below the pane notch, not inside it (…
flamboh Nov 3, 2026
f349a3e
fix(web): Pull requests is always a layout tab, so "+" keeps it open …
flamboh Nov 3, 2026
33932f4
fix(web): linked pull requests scroll up beside the pane tab notch (#…
flamboh Nov 3, 2026
c897695
fix(web): the pull requests list scrolls under its header in one surf…
flamboh Nov 3, 2026
650acb7
fix(web): sideways swipes scroll the pane strip over every pane (#29883)
flamboh Nov 3, 2026
3c3c53b
fix: retain layout compatibility checks after rebase
maria-rcks Nov 3, 2026
cbe581a
fix(web): match settings shell and pages to the design canvas
maria-rcks Nov 3, 2026
0603422
fix(web): restore machine overview in environment settings
maria-rcks Nov 3, 2026
e2cd1bf
fix(web): match project, archive and task settings to the design canvas
maria-rcks Nov 3, 2026
09de534
fix(web): show context usage and its breakdown in thread details
maria-rcks Nov 3, 2026
f4fd907
fix(web): match thread details cards to the design canvas
maria-rcks Nov 3, 2026
6cdc410
fix(chat): match the secret request card to the design canvas
maria-rcks Nov 3, 2026
a1796c7
fix(web): align thread details summaries and usage rows with the design
maria-rcks Nov 3, 2026
eb851d8
fix(web): the overview's new-workspace slots get the selection ring a…
flamboh Nov 5, 2026
849b1fe
fix(web): the workspace hint sits at the same height on every pane (#…
flamboh Nov 5, 2026
02f82cc
fix(web): thread details hide empty Servers and Automations cards (#3…
flamboh Nov 5, 2026
812ca61
fix(web): the composer floats over the chat instead of sitting in a s…
flamboh Nov 5, 2026
22911ed
feat(web): reuse speech models from any folder with a Model folders s…
screen-gd Nov 5, 2026
1ce0c0b
docs(voice): streaming models no longer show a live preview
maria-rcks Nov 5, 2026
5d93f22
feat(voice): transcribe in the cloud with OpenRouter
adityavardhansharma Nov 5, 2026
bf4e993
fix(web): voice input start compiles with the React Compiler again
adityavardhansharma Nov 6, 2026
10c4fc7
feat(voice): cloud transcription starts only when a cloud model is ch…
adityavardhansharma Nov 6, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
1 change: 1 addition & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -201,6 +201,7 @@ Architecture and its constraints: `docs/internals/overview.md`. Glossary: `docs/
projection, tight loops) or duplicate an existing tracing boundary; explain that choice nearby.
Named `Effect.fn` creates a span; the unnamed form does not. Preserve existing span names and
options, and pass combinators as additional function-builder arguments.
- Before building UI, open `/design-system` in a dev build: it renders every primitive, variant and type role. Text takes a role (`<Text variant>` or `text-title` … `text-micro`), not `text-sm` or `font-medium`; a clickable thing is a `components/ui` control, not a styled `<button>` or `<a>`. `t3code/no-raw-type-classes` and `t3code/no-styled-raw-controls` fail lint, and their per-file ceilings in `vite.config.ts` only go down.
- Inferred types over annotations. `any` is the enemy.
- Default to no comment. Write one only for a constraint, an external quirk, or an invariant the code can't show, in one line where you can and four at most. Don't restate names or signatures, narrate steps, record history, or explain the fix you just made; the PR carries that. `t3code/no-low-value-comments` enforces the length cap and the mechanical cases.
- React effects are for synchronizing with something outside React. Derive in render and act in handlers instead of syncing state, but don't hide real lifecycle work in refs or stores to dodge one. The `t3code/no-unreasoned-state-sync` lint rule reports every effect; one that stays states its reason with `// oxlint-disable-next-line t3code/no-unreasoned-state-sync -- <why>`.
Expand Down
30 changes: 7 additions & 23 deletions apps/desktop/resources/dmg/dmg-background-latest.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
40 changes: 10 additions & 30 deletions apps/desktop/resources/dmg/dmg-background-nightly.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 2 additions & 0 deletions apps/desktop/src/app/DesktopLifecycle.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,9 @@ function layerElectronApp(

const layerElectronTheme = Layer.succeed(ElectronTheme.ElectronTheme, {
shouldUseDarkColors: Effect.succeed(false),
shouldUseDarkChrome: Effect.succeed(false),
setSource: () => Effect.void,
setBlackChrome: () => Effect.void,
onUpdated: () => Effect.void,
});

Expand Down
5 changes: 5 additions & 0 deletions apps/desktop/src/electron/ElectronMenu.ts
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,9 @@ function normalizeContextMenuItems(source: readonly ContextMenuItem[]): ContextM
disabled: sourceItem.disabled === true,
...(sourceItem.separatorBefore === true ? { separatorBefore: true } : {}),
...(typeof sourceItem.checked === "boolean" ? { checked: sourceItem.checked } : {}),
...(typeof sourceItem.accelerator === "string"
? { accelerator: sourceItem.accelerator }
: {}),
};

if (sourceItem.children) {
Expand Down Expand Up @@ -167,6 +170,8 @@ export const make = Effect.gen(function* () {
label: item.label,
enabled: !item.disabled,
...(typeof item.checked === "boolean" ? { type: "checkbox", checked: item.checked } : {}),
// Shown beside the label for learning; the app's own handler runs the key.
...(item.accelerator ? { accelerator: item.accelerator, registerAccelerator: false } : {}),
};
if (item.children && item.children.length > 0) {
itemOption.submenu = buildTemplate(item.children, complete);
Expand Down
21 changes: 21 additions & 0 deletions apps/desktop/src/electron/ElectronTheme.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,14 @@ export class ElectronTheme extends Context.Service<
ElectronTheme,
{
readonly shouldUseDarkColors: Effect.Effect<boolean>;
/**
* Whether the window chrome (native background, caption button symbols)
* is dark: the dark appearance, or the renderer's light, black chrome.
*/
readonly shouldUseDarkChrome: Effect.Effect<boolean>;
readonly setSource: (theme: DesktopTheme) => Effect.Effect<void, ElectronThemeSetSourceError>;
/** The renderer's light, black chrome appearance; notifies onUpdated listeners. */
readonly setBlackChrome: (enabled: boolean) => Effect.Effect<void>;
readonly onUpdated: (listener: () => void) => Effect.Effect<void, never, Scope.Scope>;
}
>()("@t3tools/desktop/electron/ElectronTheme") {}
Expand All @@ -38,6 +45,10 @@ type WatchSystemColorScheme = (onChange: (scheme: LinuxColorScheme) => void) =>
export const makeWith = Effect.fn("ElectronTheme.make")(function* (
watchSystemColorScheme: WatchSystemColorScheme | undefined,
) {
// Black chrome is renderer state, not a native theme source, so the service
// keeps it and fans changes out to the same listeners as native updates.
let blackChrome = false;
const blackChromeListeners = new Set<() => void>();
let source: DesktopTheme = Electron.nativeTheme.themeSource;
let systemScheme: LinuxColorScheme = null;
// On Linux, Electron reads the desktop color scheme once and then ignores the settings
Expand All @@ -64,6 +75,7 @@ export const makeWith = Effect.fn("ElectronTheme.make")(function* (

return ElectronTheme.of({
shouldUseDarkColors: Effect.sync(() => Electron.nativeTheme.shouldUseDarkColors),
shouldUseDarkChrome: Effect.sync(() => Electron.nativeTheme.shouldUseDarkColors || blackChrome),
setSource: Effect.fn("ElectronTheme.setSource")(function (theme) {
return Effect.try({
try: () => {
Expand All @@ -73,15 +85,24 @@ export const makeWith = Effect.fn("ElectronTheme.make")(function* (
catch: (cause) => new ElectronThemeSetSourceError({ source: theme, cause }),
});
}),
setBlackChrome: Effect.fn("ElectronTheme.setBlackChrome")(function (enabled) {
return Effect.sync(() => {
if (blackChrome === enabled) return;
blackChrome = enabled;
for (const listener of blackChromeListeners) listener();
});
}),
onUpdated: Effect.fn("ElectronTheme.onUpdated")(function (listener) {
return Effect.acquireRelease(
Effect.suspend(() => {
Electron.nativeTheme.on("updated", listener);
blackChromeListeners.add(listener);
return Effect.void;
}),
() =>
Effect.suspend(() => {
Electron.nativeTheme.removeListener("updated", listener);
blackChromeListeners.delete(listener);
return Effect.void;
}),
);
Expand Down
4 changes: 4 additions & 0 deletions apps/desktop/src/ipc/DesktopIpcHandlers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,9 @@ import {
pickFolder,
pickProjectFavicon,
pickThemeFiles,
setBlackChrome,
setTheme,
setWindowButtonsVisible,
showContextMenu,
} from "./methods/window.ts";
import {
Expand Down Expand Up @@ -140,6 +142,7 @@ export const installDesktopIpcHandlers = Effect.fn("desktop.ipc.installHandlers"
yield* ipc.handle(pickProjectFavicon);
yield* ipc.handle(pickThemeFiles);
yield* ipc.handle(setTheme);
yield* ipc.handle(setBlackChrome);
yield* ipc.handle(showContextMenu);
yield* ipc.handle(openExternal);
yield* ipc.handle(readMedia);
Expand All @@ -149,6 +152,7 @@ export const installDesktopIpcHandlers = Effect.fn("desktop.ipc.installHandlers"
yield* ipc.handle(checkSystemPermission);
yield* ipc.handle(pasteAsText);
yield* ipc.handle(revealWindow);
yield* ipc.handle(setWindowButtonsVisible);
yield* ipc.handle(probeRemoteEditors);
yield* ipc.handle(getUpdateState);
yield* ipc.handle(setUpdateChannel);
Expand Down
Loading
Loading