Add the chat side-pane navigation with dock/close/open controls, refine
the Home and chat panes, show connect-account prompts in the Email and
Meetings views (Zoom/Teams/Meet), fix the dock-to-side arrow, and default
the app to Home with the chat docked on the right.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Rebuild the sidebar, home, and chat surfaces per the navigation design:
Recents (capped at 5), single clickable previews, section separators, and
the chat page help items and discovery carousel.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Merge Connected Accounts and Tools Library into a single Connections tab,
tighten sidebar spacing, move Help into Settings, and refine the Workspace
view.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Surface background tasks, upcoming meetings (with a live recording
indicator), and important unread email directly in the sidebar; add a
chat history page with chat icons and a home action row.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Move new chat to a top-bar icon with a Cmd+N shortcut, introduce the
Workspaces concept (workspace sidebar + default the working-directory
picker to it), and expand the knowledge browser (view more).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* email view
* render html emails
* match unread and read status
* move to accordian
* faster loads
* iframe mounted across toggle and cached height
* prefetch on hover
* fix iframe caching
* split inbox
* email processing agent
* summary
* rich text
* email drafts
* add pagination, watcher and separation from gmail sync
* fix first load issue
* handle drafts
* send button opens the thread
* simplify renderer and fix flickering issue
* remove rended driven email path
* support attachments in incoming emails
* fix white background as well as dark mode
Adds Background Tasks — recurring background agents the user can set up to
either keep a digest current (daily email summary, top HN stories, weather
brief) or perform a recurring action (draft a reply, post to Slack, call an
API). Each task is a persistent set of instructions plus optional triggers
(schedule, time-of-day window, or matching incoming Gmail / calendar event).
The agent reads the verbs in the instructions on every run and picks the
right mode automatically.
User-facing surfaces:
- New "Background tasks" entry in the sidebar, with a table listing every
task, its schedule, last run, and an active toggle.
- A detail page per task with a max-width reader showing the task's
current output and a control sidebar for editing instructions, triggers,
and reviewing run history.
- "New task" can open in a free-form box where the user describes what they
want and Copilot sets it up end-to-end, or in a structured form for
manual setup.
- "Edit with Copilot" hand-off from the detail view, pre-seeded with the
task's context.
Under the hood:
- The event pipeline that previously powered live-notes is now a generic
consumer registry. Live-notes and background tasks both subscribe;
incoming events are routed to candidates from both concurrently.
- Schedule helpers and the agent-message trigger block are factored out of
live-notes into shared modules. Both features use the same building
blocks now.
- Copilot's proactive routing is reframed: anything recurring (cadence
words, watch / monitor verbs, action verbs, event-conditional asks) now
flows to background tasks. Live-notes load only on explicit mention.
- A small reliability fix for the run-creation fallback chain: an
empty-string model/provider passed by an LLM tool call now correctly
falls through to the default instead of being persisted as a real value.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Flatten the panel to match the rest of the app's design language. Splits
the surface into three tabs:
- Objective: full-height markdown render of the objective, in-tab plain
monospace editor (no card-in-card chrome).
- Last run: fetches via `runs:fetch` and shows the agent's full
transcript — summary at top, then a compact chat of user/assistant
turns with collapsible tool calls (Parameters/Result).
- Details: triggers (single cron + windows + events with display/edit
toggle) and collapsed Advanced (model/provider/danger zone) ending in
"Convert to static note →".
Adds a 2-column status strip (Last run · Triggers) above the tabs and a
context-aware footer. Adopts the app's signature `uppercase tracking-wider
text-muted-foreground` label style; drops nested bordered cards.
New helper `lib/run-to-conversation.ts` converts `Run.log` events into
ConversationItems for read-only playback — adapted from App.tsx's live
converter, trimmed for static history (no streaming/permission flows,
skips lifecycle and system/tool-role messages).
Co-Authored-By: Claude <noreply@anthropic.com>
Folds the multi-`track:`-array model into one `live:` block per note: a single
persistent objective the live-note agent maintains, plus an optional triggers
object (`cronExpr` / `windows` / `eventMatchCriteria`, each independently
optional). A note is now passive or live — no per-track scopes, no section
ownership contract, no `once` trigger. The agent owns the whole body and makes
patch-style incremental edits per run.
Highlights:
- Schema: `track:` array → single `live:` object (`packages/shared/src/live-note.ts`).
- Runtime: scheduler / event processor / runner under `core/knowledge/live-note/`,
with split `lastAttemptAt` (every run, drives 5-min backoff) vs `lastRunAt`
(success only, anchors cycles). `throwOnError` on agent runs surfaces LLM /
billing failures into `lastRunError`.
- Today.md: regenerated by template v2 (single objective covering overview /
calendar / emails / what-you-missed / priorities; existing files renamed to
`Today.md.bkp.<stamp>`).
- Renderer: `LiveNoteSidebar` mounts inside the editor row (no chat overlap,
auto-closes on note switch); toolbar Radio button becomes a status pill;
`LiveNotesView` replaces background-agents view.
- Copilot: new `live-note` skill with act-first stance, default folder/cadence
pickers, and a non-negotiable rule to extend an existing objective rather
than add a second one. Shared `KNOWLEDGE_NOTE_STYLE_GUIDE` enforces
terse-and-scannable writing across `doc-collab` and the live-note agent.
- Analytics: `track_block` use-case → `live_note_agent`; trigger
(`manual` / `cron` / `window` / `event`) becomes the Pass-2 sub-use-case,
alongside `routing` for Pass 1. Legacy run files with the old value are
read-mapped via `LegacyStartEvent` so they stay openable in the runs list.
Hard cutover — no back-compat shims for legacy `track:` frontmatter arrays.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The Reconnect button on the Google account row always opened the BYOK
client-ID modal, even for users signed into Rowboat — who should get
the managed-credentials browser flow instead. The non-reconnect Connect
button already branched correctly via useConnectors.handleConnect; the
reconnect path bypassed it. Adds a handleReconnect helper that mirrors
the same branching, and routes both call sites (popover and settings)
through it.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
In rowboat OAuth mode the OAuth2Client is built without a refresh_token
because refreshes go through the api. google-auth-library's default
5-minute eagerRefreshThresholdMillis caused it to attempt a refresh
whenever a Gmail call landed within 5 minutes of token expiry, throwing
"No refresh token is set." before our proactive 60s-margin refresh
could run. Disabling the eager window lets our getClient() refresh path
own all refreshes as the comment intends.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>