web/components/roster.tsx: the left sidebar's tabs, its tickets list, and the workspace picker;web/components/pull-requests/pull-requests-nav.tsxis its Pull requests tab, andweb/components/section-link.tsxthe section link that the tickets list and the Pull requests page's section index share.web/components/session-list.tsxis its Sessions tab, which lists the first 100 past sessions until you ask for more, andweb/components/project-group.tsxthe group of one project in it, each worker's row named by the title its coordinator gave it.web/components/sidebar-search.tsxis the Sessions tab's search field; given a shortcut, as the Sessions tab gives Cmd+F, the key puts the cursor in it and the empty field shows the key on its right.web/components/kbd.tsxholdsKbd, the key chip the command palette draws, andShortcutChip, the smaller chip with a shortcut's first key that New session and that search field show on their right.web/components/session-row.tsxholdsPastRowandHostRow, memoized on the row's session, so a roster push or a search keystroke renders only the rows it changed. Every row names its source among its facts, fromSOURCE_LABELSinweb/labels.ts, without replacing its workspace or role badge. The row's menu items read the dashboard contexts only once the menu opens, and their ages count up on the page's one minute timer.web/components/todo/categories.tsxholds its Todo tab: All, Today, Needs you, From agents, Archive, then the categories, andweb/components/calendar/calendar-nav.tsxits Calendar tab: the calendar, the Google calendars under My calendars and Other calendars, each a checkbox that shows or hides its events, and then the routines by name.web/components/inbox/inbox-nav.tsxis its Inbox tab: the Gmail address over one Inbox row with its unread count.web/components/toaster.tsx:toasts, the page's one Base UI toast manager, which shows a toast from anywhere without rendering its caller again, itsToastData, a toast's optional source line, andToaster, whichweb/main.tsxmounts at the bottom right.web/components/notices.tsxholdsNoticesBell, the roster header's bell, its source filters, and its list, andNoticeOrigin, the logo and name of where a notice came from.web/components/use-notice-toasts.tsxholdsuseNoticeToasts, whichweb/app.tsxcalls so a notice no page has shown toasts once under itsNoticeOrigin, even with the sidebar hidden. Both draw each notice frompresentNoticeinweb/notice-model.ts, the one place that tells notice kinds apart: its source, headline, preview, link, face, action, and toast policy.web/use-attention.tsholdsuseAttention, whichweb/app.tsxcalls too: it sends the desktop app's Dock badge, raises a session notification through the desktop bridge or the browser's Notifications API, and sendsreadfor the unread sessions the panes show in a focused window;useSessionNotificationsthere is the Settings › Preferences switch.web/attention.tsholds its rules:yourSessions, which leaves out a project's workers,needsYou,attend, which keeps an episode per live session and raises each question and turn once, none for what waited when the page first saw the session, andunreadShown. The command palette's Update dashboard runsupdateDashboardinweb/dashboard-update.ts.web/components/todo/: the Todo page.page.tsxis the page and its lists, Archive included, whichLIST_KINDSmarks read-only: its rows put a todo back or delete it for good, and its header offers Empty where the others offer Clear done. Every other list groups its top-level todos by status, inSTATUS_GROUPSorder, under fold headers whose foldsuseFoldskeeps; the page puts the list on the left and the open todo'sdetail.tsxon the right in aListSplit.row.tsxholds a todo's row, with its priority and status buttons, category badge, work-state dot, due day and assignee buttons, link icons, and the day it was added, an archived todo's row, and the row of a todo not added yet;fields.tsxholds the status, priority, assignee, and due day pickers, as a row's icon or a labeled property button, andinput.tsxthe input a title is typed into, whose Cmd+Enter starts a session from the todo. As icons, the priority, assignee, and due day pickers show nothing while their field is unset, or for a closed todo's due day, until their key opens them, so a row and a sub-todo follow the same rule.editing.tsholdsuseTodoEditing, which of those inputs is open, the status a new todo takes, and what its keys do, and deleting with its Undo toast;search.tsxis the search field.detail.tsxis the open todo: a bar with its place, its status, and the ↑, ↓, and × buttons, its title, its property pickers, and notes, whichweb/components/notes-editor.tsxshows formatted and edits in place, then for a top-level todo its sub-todos, an agent card with the work state, live agent question, the Work on it and Plan it quick actions, and Start session, its links with Create Linear ticket, which sendsPUT /api/todo/ticketand offers Link for an issue the server opened but could not link, and when it was added and by which session.links.tsxdraws a todo's link chips and work-state pill, each with an icon-only form for rows, andadd-button.tsxis the button that adds a todo linking to a pull request row or a ticket row.notes-editor.tsxis a Lexical rich-text editor;web/markdown-notes.tsholds its nodes and markdown shortcuts, turns its document into the notes' markdown and back, and decides when its text saves.web/todo-views.tsholdsLIST_KINDS, what each list is called and lets you do, which todos it holds,TODO_STATUS, each status's label and the Linear state type whose icon it takes, each category's badge color, how a due day reads, and themoveandrestorethe page sends;web/use-todo-drag.tsandweb/use-todo-keys.tsdrag and move rows, and the keys also step the open todo and open its pickers.web/todo-work-state.tsderives the pill and the Needs you filter from the latest linked session's live status, outstanding question, submitted pull request, or recorded/shipmerge; it keeps unknown and ended sessions distinct from new ideas.web/todo-quick-add.tsreads a trailing due day and#categoryoff a new todo's title, in the page's new todos and in the command palette's Create todo.web/components/notes/page.tsx: the Notes page's searchable list and Markdown detail, todo picker, deletion with Undo, and keyboard navigation.web/components/notes/nav.tsxdraws its sidebar's All and From agents lists fromweb/notes-views.ts. A top-level todo'sdetail.tsxlists linked notes and creates a note with its todo id.web/palette-records.tsincludes note titles and bodies in command-menu search.web/components/routines/routines-page.tsx: the Routines page, its list with each routine's menu, and one routine's settings and runs, which open the sessions they started. It, the Calendar page, and the session rows read the time throughweb/use-minute.ts, one timer renewed each minute for every component that reads it. The session rows, the pull request rows, and the bell's notices show how long ago something was withAgefromweb/components/age.tsx, which words it withagefromweb/labels.tsand counts up on that timer.web/components/routines/routine-editor.tsxis the form that makes or edits a routine, with the new-session draft'sDirectoryPickerfor its workspace.web/components/projects/projects-page.tsx: the Projects page, its list, its New project form at#projects/new, which sendsproject-createwith the model and effort, and one project's page: its coordinator, its workers with their phases and last replies, its waiting updates, and its notes fromGET /api/project-notes, which open in the file dialog, its queue, At most, Subscriptions and the review cadence, with Rename, Archive, and Unarchive.web/components/projects/project-parts.tsxholds what the page shares with the coordinator's sidebar:PHASE_LABEL, the fields'FIELDlook, andProjectNotesList.web/components/projects/project-settings.tsxholds a project's settings:MaxWorkersFieldandProjectSubscriptions, whose Linear filter and review cadence areSavedFields.web/components/calendar/calendar-page.tsx: the Calendar page, a month ofweb/calendar-model.tsentries and the chosen day's list beside it, including Google events and the events kept on this computer read withweb/reads.ts, and the delete button of each event in the day's list that is kept on this computer or in a Google calendar you may write to. It draws the month's grid and each day's hover card itself, and takes the month and year menus and arrows from Kibo UI's calendar,web/components/kibo-ui/calendar/index.tsx, whose month and year live in jotai atoms, so the page keeps its month while you leave and come back.web/components/calendar/new-event.tsxholdsNewEventDialog, which New event and C open: a title, all day or a start and end time, and the calendar, one ofcalendarChoicesinweb/calendar-model.ts, the last one used kept in localStorage; it sends the event and hands the page what the server answered.web/components/inbox/inbox-page.tsx: the Inbox page, the Gmail inbox's conversations on three lines each, each a link to#inbox/<thread id>that opens the conversation beside the list in aListSplit, as#inbox/newopens the new-mail editor there, dated bymailTimeinweb/labels.ts, or Gmail's integration row while the dashboard cannot read Gmail. Its one shortcut registration takes ↓, ↑, Esc, O, C, R, A, and #, asweb/use-todo-keys.tsdoes on the Todo page: with nothing open ↓ and ↑ move the focus through the rows withstepRows, with a conversation open they open its neighbour and focus its row withfocusRow, and closing it returns the focus to its row withuseReturnFocus.thread-view.tsxholdsThreadDetail, the open conversation as Superhuman shows it: a sticky bar with its place in the list and its icon buttons, its subject and who wrote in it, its messages with avatars between thin lines in a scrolling area, and a dockedMailEditorunder them, which reads its neighbours ahead and scrolls back to its top for each conversation;mail-frame.tsxholdsMailFrame, the sandboxed frame of a message's HTML;mail-editor.tsxholdsMailEditor, the Lexical editor with recipient chips and a toolbar for replies and new mail; see Gmail.web/mail-draft.tsholds the draft's one owner,useMailDraft, a reducer over aMailDocumentthat changes only on a person's events and freezes whilesendMailDraftsends it, anduseReplyDraft, which captures a reply's people when it begins and again only when you choose the other of Reply and Reply all;MailEditorshows the document and its phase and sends its edits back. It also holds the editor's nodes anddecodeMailDraft, which reads a kept draft back only when its people, subject, and body have their shape and the body restores into those nodes; any other kept draft reads as none, so the editor opens empty instead of failing.