Commit graph

1687 commits

Author SHA1 Message Date
arkml
30356e36b1
Merge pull request #591 from rowboatlabs/dev
Dev
2026-05-29 22:41:55 +05:30
arkml
caea83aecf
clamp sync to 7 days even after long hiatus (#590) 2026-05-29 22:23:21 +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
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
Ramnique Singh
5677916790
Merge pull request #586 from rowboatlabs/dev
fix(ci): make electron release artifacts deterministic
2026-05-28 23:45:55 +05:30
Ramnique Singh
cc034c7688 fix(ci): make electron release artifacts deterministic
Pin Electron release builds to Node 24.15.0, the last known-good runner version for Windows/Linux packaging, and fail artifact upload when out/make is empty so successful jobs cannot hide missing release assets.
2026-05-28 23:40:46 +05:30
Ramnique Singh
56246b84e6
Merge pull request #585 from rowboatlabs/dev
Dev changes
2026-05-28 23:01:55 +05:30
Ramnique Singh
129d91dc8d Persist per-message context for prompt caching
Move volatile current time and middle-pane data out of the system prompt and into a hidden userMessageContext stored on each user message. Reconstruct the LLM-facing message from this persisted context so older conversation turns remain stable across later requests while UI-facing content stays unchanged.

Keep finite branch instructions such as voice, search, code mode, agent notes, and workdir behavior in the system prompt so each conversation can still benefit from reusable prompt-cache prefixes.
2026-05-28 23:00:44 +05:30
Arjun
c213274723 enable coding agents if they are available by default 2026-05-28 22:33:32 +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
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
6288f99a85
Merge pull request #581 from rowboatlabs/chat-log
Add chat log download menu
2026-05-27 23:18:46 +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
Ramnique Singh
45bdbfcbbc Fix spurious "Reconnect Google" on cold start
When the app launches after the access token has expired, the Gmail and
Calendar sync loops both try to refresh at the same instant. The backend
dedup returns 429 to whichever request arrives second, and we were
treating that 429 as a permanent failure — writing an error into
oauth.json that surfaces in the UI as "Needs reconnect", even though
the tokens are valid and the other refresh succeeded.

Two changes address this:

- GoogleClientFactory now serializes concurrent getClient() callers
  end-to-end, so Gmail and Calendar share a single refresh round-trip
  instead of racing the backend.

- A 429 (or 5xx) from the refresh API is now classified as transient:
  we leave stored tokens and the in-memory cache alone and let the
  next sync tick retry, rather than flagging the user for reconnect.

Refresh logs now include enough detail (time-since-expiry, new TTL,
cause chain on failure) to diagnose the next class of issue from a
single user's log.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 02:25:03 +05:30
Arjun
c6d6ad7665 fix notes scroll issue 2026-05-26 13:43:14 +05:30
Arjun
a775a9f6d3 fix knowledge graph issues 2026-05-26 11:15:14 +05:30
Ramnique Singh
81f89d7878 Merge branch 'main' into dev 2026-05-26 10:33:49 +05:30
arkml
89f6f80215
Merge pull request #575 from rowboatlabs/update-kg-live-note-models
moved from preview models
2026-05-25 22:48:37 +05:30
Arjun
6d953428c4 moved from preview models 2026-05-25 22:43:45 +05:30
Arjun
949ab4c243 move gemini models from preview 2026-05-25 22:30:56 +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
a79263c5ef fix email drafts 2026-05-25 20:49:00 +05:30
Arjun
a4697fc281 dont sync working location 2026-05-25 20:05:39 +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
4db42d17cf fix gmail sync 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