Commit graph

410 commits

Author SHA1 Message Date
Gagancreates
bfcffa7d3a fix(google-oauth): request offline access so BYOK tokens refresh
BYOK never requested access_type=offline/prompt=consent so no refresh token was issued and tokens died after ~1h; also stop handing back expired tokens and extend the connect timeout to 10m.
2026-06-09 01:25:09 +05:30
Gagancreates
d08bf49d5a feat(google-docs): use Google Picker + drive.file scope instead of full-drive listing 2026-06-01 23:47:27 +05:30
Gagancreates
84cfe54ba1 feat(google-docs): offer BYOK connect in picker so signed-in users can grant Drive/Docs scopes 2026-06-01 13:22:54 +05:30
Gagancreates
09b0a66fa5 feat(google-docs): store linked docs as .docx, edit in docx editor, sync via Drive 2026-06-01 13:13:41 +05:30
Gagancreates
ccdfc0f6e9 feat(google-docs): overwrite-confirm on sync conflict and last-synced indicator 2026-06-01 02:35:29 +05:30
Gagancreates
7e6ee040aa feat(google-docs): structure-preserving sync up with remote-conflict guard 2026-06-01 02:27:33 +05:30
Gagancreates
8e6978b6c1 Merge remote-tracking branch 'origin/dev' into drive 2026-06-01 02:07:48 +05:30
gagan
5368751f61
feat: render and edit docx files in-app (#589)
Add a DocxFileViewer (via @eigenpal/docx-editor-react) wired into the file-type viewer switch, reading/saving bytes through the existing base64 workspace IPC with debounced autosave.
2026-05-29 18:04:04 +05:30
Ramnique Singh
732401f72e Add app version to analytics events 2026-05-29 17:02:01 +05:30
Gagancreates
c0427ed285 show error state with retry in google doc picker 2026-05-29 16:30:32 +05:30
arkml
5ae853e15c
fix thread boundary in email reply drafts (#588) 2026-05-29 10:58:57 +05:30
arkml
78d51ccbf6
fix navigation and other minor issue in workspace view (#587) 2026-05-28 23:57:43 +05:30
Arjun
e7c7d0e90f remove chat options from middle pane 2026-05-28 21:20:57 +05:30
arkml
f378c7c604
Oauth migration (#584)
* oauth migration for new scopes

* trigger google reconnect popover
2026-05-28 19:07:02 +05:30
gagan
537b6f66bb
Code Mode: in-chat toggle, settings tab, and permission/command UX (#572)
* feat: add in-chat code mode toggle with claude/codex swap

* feat: show agent and add swap-and-retry on acpx permission card

* style: reorder permission card buttons (approve, deny, swap)

* feat: add tooltips to composer plus and web search buttons

* feat: add code mode settings tab with agent install/auth checks

* feat: show sign-in command when agent installed but signed out

* style: refine code-mode permission and command block UX

- Render permission block before the command block
- Collapse permission details after a response; click header to expand
- Drop status icons/badge; use minimal green / bold red blocks
- Auto-collapse the running command block once it completes

* feat: rotating progress labels for code-mode commands; darker tool borders

- Code-mode (acpx) command block shows status-aware labels: rotating
  'Working on the task…' phrases (5s each, holding on the last) while
  running, then 'Completed the task' / "Couldn't complete the task"
- Darken outer border on all tool blocks in light and dark modes

* fix: detect Claude Code sign-in via macOS Keychain

On macOS, Claude Code stores OAuth credentials in the login Keychain
(service 'Claude Code-credentials'), not in ~/.claude/.credentials.json.
Read the Keychain as a fallback so signed-in Mac users are detected.

* feat: persistent per-chat sessions for code-mode coding agents

- Use a named acpx session (rowboat-<runId>) per chat so follow-up
  coding requests resume the same agent and keep context
- Create the session once at chat start (sessions new --name), then
  prompt with -s <name>; reuse on follow-ups (no re-create)
- Drop the redundant in-chat 'reply yes' confirmation (the executeCommand
  permission card is the confirmation)
- Code-mode output uses plain-text paths (overrides global filepath rule)
- On not-installed/auth errors, point user to Settings -> Code Mode

* fix: code-mode session creation uses idempotent ensure, run sequentially

- Use 'sessions ensure --name' instead of 'sessions new' so reopening a
  chat resumes the existing session instead of erroring on a name clash
- Create the session and run the prompt as separate sequential calls so
  the permission/command blocks render one at a time (not all at once)

* fix: reliable Claude Code session resume on Windows (avoid claude.cmd EINVAL)

Resuming a code-mode chat after restarting the app spawns a fresh ACP
agent. On Windows + Node >=20.12 the bridge spawning claude.cmd throws
EINVAL, so the session queue owner fails to start. Rowboat injects
CLAUDE_CODE_EXECUTABLE=claude.exe to dodge this, but the override didn't
reliably reach the spawn. Windows-only; no-op on macOS/Linux.

- executeCommand now accepts an env override and the non-abortable
  fallback path passes it through (was silently dropped)
- resolveClaudeExeOnWindows also scans known npm/pnpm/volta global bin
  dirs, not just PATH (Electron's runtime PATH can omit them)
- add --timeout 600 to acpx prompt commands so a genuine stall fails
  cleanly instead of hanging on 'Running' forever
2026-05-28 14:52:09 +05:30
Arjun
9456497e14 icon changes 2026-05-28 10:22:29 +05:30
Arjun
676fb47304 google doc icon 2026-05-28 10:21:50 +05:30
Arjun
b1e597ee3c add drive button 2026-05-28 10:21:50 +05:30
Arjun
c548f6bd51 add drive sync up and down 2026-05-28 10:21:08 +05:30
gagan
b89b91258e
feat: redesign web search & tool-call cards (rolling reveal, shared surface, action summaries) (#579)
* feat: roll web search sources in one-by-one with settle animation

* fix: keep web search toggle on for the rest of the chat session

* feat: redesign collapsed web search card with favicon stack and source summary

* style: tune web search card surface tints for light and dark mode

* feat: rounder web search card with subtle expand/collapse animation

* feat: apply web search card design to tool-call box with action summary

Shared --card-surface token, rounded card, hover, collapse animation, and a state-driven lead icon (spinner/check/cross). Single tools and the group now match. Completed group shows 'Ran N tools · <up to 2 actions>, more...' with the action summary in lighter gray.

* style: drop lead icon from tool group child rows and round them more
2026-05-28 01:57:46 +05:30
Arjun
daff21481a show recording status in sidebar 2026-05-28 01:07:12 +05:30
Arjun
78c5ad2e6f elevate folder navigation to app view state 2026-05-28 00:46:25 +05:30
Arjun
373d1ee92b search defaults to knowledge 2026-05-28 00:46:25 +05:30
Arjun
0af48ecd4a new knowledge view 2026-05-28 00:46:25 +05:30
Ramnique Singh
2e930612f8 Merge branch 'main' into dev 2026-05-27 23:49:30 +05:30
Ramnique Singh
2f9ce051c0 Add chat log download menu 2026-05-27 23:17:47 +05:30
Arjun
f78f1380eb added expand buttons for middle and side pane and fixed issue with moving new chat to side pane 2026-05-27 23:17:25 +05:30
gagan
d981fa9206
fix: scope chat work directory per-run instead of globally (#578)
* fix: scope chat work directory per-run instead of globally

* fix: refine work directory pill and search button controls

* feat: animate web search button toggle
2026-05-27 03:09:56 +05:30
Arjun
c6d6ad7665 fix notes scroll issue 2026-05-26 13:43:14 +05:30
Arjun
31ec625bef assistant welcome wording change 2026-05-25 21:18:33 +05:30
Arjun
23e1a89c9e add dismiss button for middle pane 2026-05-25 21:11:55 +05:30
Arjun
83389e93fc fixed multiple recepients / attachments in email issue 2026-05-25 20:04:52 +05:30
arkml
c0493e8b9f
Meetings4 (#574)
* fix meetings ui with design changes
2026-05-25 19:43:29 +05:30
Ramnique Singh
31e35e00b8 Refactor builtin file tools beyond workspace scope
Replace workspace-scoped builtin file tools with general-purpose file-* tools that accept relative, absolute, and ~/ paths. Relative paths still resolve against the configured workdir.

File operations within the workdir are auto-approved. File operations outside the workdir now emit file permission metadata and require user approval, with support for once, session, and persistent grants.

Add a shared filesystem layer for text-focused read/write/edit/list/search operations, including binary-file safeguards for text reads. parseFile and LLMParse continue to read file buffers for document/image parsing.

Update copilot prompts, background/live-note agents, knowledge workflows, and renderer labels/UI to use the new file-* tool surface and permission details.

Add package-local Vitest setup for @x/core with colocated filesystem unit tests covering path resolution, canonical permission paths, binary detection, read/write/edit behavior, glob, and grep.
2026-05-25 16:21:51 +05:30
Arjun
f1d3b7b825 show calendar details on click 2026-05-25 14:20:37 +05:30
Arjun
8aa0c1763a tools row in home 2026-05-25 13:19:34 +05:30
arkml
84aa980894
Gmail send, archive and delete (#573)
* added send, archive and delete

* fix scopes

* added replyall, cc, bcc etc

* - Added scope-aware Gmail status via gmail:getConnectionStatus, so the email empty state can
    distinguish “not connected” from “connected but missing new Gmail scope.”
  - Hardened Gmail send header construction against CR/LF header injection.
  - Switched MIME parts from invalid UTF-8 7bit bodies to base64-encoded UTF-8 parts.
  - Made forward send as a new message instead of attaching it to the original thread, and included
    forwarded message content.
  - Changed archive/delete UI behavior to remove the thread only after Gmail confirms success.

---------

Co-authored-by: Ramnique Singh <30795890+ramnique@users.noreply.github.com>
2026-05-25 09:47:08 +05:30
gagan
a59c42e22b
fix: notes — in-note section links, deep-note wiki resolution, file links (#571)
* fix discord users feedback

* fix: drop duplicate Link extension and scroll headings to viewport top

* fix: collapse ../ segments in note-relative file links

---------

Co-authored-by: Arjun <6592213+arkml@users.noreply.github.com>
2026-05-24 23:48:20 +05:30
Ramnique Singh
566f4553b4 Clarify billing usage labels
- rename monthly credits label to plan usage
- rename daily credits label to daily use
- clarify daily usage reset and out-of-credits copy
2026-05-24 13:21:30 +05:30
Ramnique Singh
7cd661d726 Show split monthly and daily credits
- update billing contract to consume split monthly/daily usage
- show monthly and daily credit percentage bars in account settings
- keep sidebar plan labels normalized
- update out-of-credits copy for daily credits
2026-05-24 12:48:23 +05:30
Arjun
eb4b11a530 email and calendar empty states now check only native google oauth 2026-05-23 09:25:26 +05:30
Arjun
6094ac508a fix build isues 2026-05-23 08:49:49 +05:30
Arjun
25a1976394 chat side pane, home/chat refinements, and connect prompts
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>
2026-05-22 15:56:57 +05:30
Arjun
fbd0791d0c implement the new navigation design
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>
2026-05-22 15:56:57 +05:30
Arjun
e6587a67b7 settings connections tab, denser sidebar, and help in settings
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>
2026-05-22 15:56:57 +05:30
Arjun
193c2a9131 move tasks, meetings, and email into the sidebar; add chat history
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>
2026-05-22 15:56:57 +05:30
Arjun
346c685ac9 new chat icon/shortcut, workspaces, and knowledge browsing
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>
2026-05-22 15:56:57 +05:30
gagan
5be0a11f98
feat: show out-of-credits dialog instead of raw API error (#568)
* feat: show billing error dialog on out-of-credits errors

* fix: suppress chat dump and toast when billing dialog shows
2026-05-22 00:20:35 +05:30
gagan
0a3fc3736f
fix: fall back to next port when OAuth callback server can't bind 8080 (#560)
* fix: fall back to next port when OAuth callback server can't bind 8080

On Windows with Hyper-V/WSL2/Docker, port 8080 is often reserved by the
OS (EACCES) or already in use (EADDRINUSE), making sign-in completely
impossible. The app now scans 8080–8089 and binds the first available
port. For DCR providers, a stale registration locked to a blocked port
is detected and cleared so the client re-registers on the new port.
Static-client providers (Google BYOK) keep fixed-port behaviour with a
clear error message instead of a raw Node.js exception.

* fix: keep createAuthServer fixed-port by default, opt-in fallback

Address review feedback:
- Flip createAuthServer default to fixed-port; fallback is now opt-in via
  { fallback: true }. Composio (composio-handler.ts) keeps exact-port
  semantics with no code change — only the Rowboat sign-in call site,
  which builds its redirect URI from the actual bound port, opts in.
- Wrap post-bind setup (DCR, PKCE, auth URL) in try/catch and close the
  server on any failure so the port is released for retries.

* fix: clear stale DCR registration when bound port differs from start port
2026-05-22 00:10:41 +05:30
Ramnique Singh
95c313de89 Deprecate generated Today.md live note 2026-05-19 15:13:05 +05:30