rowboat/apps/x/packages/shared/src
arkml be81ffb27b
Drive (#583)
* add drive sync up and down

* add drive button

* google doc icon

* icon changes

* show error state with retry in google doc picker

* feat(google-docs): import and sync down as Markdown, record remote revision

* feat(google-docs): structure-preserving sync up with remote-conflict guard

* feat(google-docs): overwrite-confirm on sync conflict and last-synced indicator

* feat(google-docs): store linked docs as .docx, edit in docx editor, sync via Drive

* feat(google-docs): offer BYOK connect in picker so signed-in users can grant Drive/Docs scopes

* fix(google-docs): request full drive scope so .docx sync-up can write back

* fix(google-docs): search all drives in doc picker, log result count

* feat(google-docs): import native Docs AND uploaded .docx files from Drive

* chore(google-docs): drop dev-only test file

* feat(google-docs): use Google Picker + drive.file scope instead of full-drive listing

* 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.

* feat(google-docs): pick docs via system-browser Google Picker

Runs the Picker in the user's real browser (it 403s inside Electron), sets appId so the drive.file grant attaches to the picked file, and downloads + opens the selected doc.

* feat(google-docs): managed OAuth-redirect Picker (no API key, no BYOK) (#620)

* feat(google-docs): managed OAuth-redirect Picker (no API key, no BYOK)

Adds the managed (rowboat-mode) Google Docs picker via Google's trigger_onepick
flow. The Rowboat backend runs a standalone drive.file OAuth with the company
client, renders the Picker inside the browser consent screen, and deep-links the
selection back; the desktop downloads the picked doc with the fresh drive.file
token the backend returns. No Picker API key, appId, or BYOK credentials on the
desktop.

- core: importGoogleDocWithToken downloads a picked doc with an explicit token;
  fetch/metadata helpers take an optional Drive client and share writeDocxAndLink.
  claimPickedFilesViaBackend claims the parked file ids + token from the api.
- main: google-picker-managed.ts opens the backend start URL and resolves on the
  rowboat://oauth/google/picker/done deep link; deeplink.ts routes that completion.
- ipc: google-docs:pickViaManaged.
- renderer: the picker dialog gates on Rowboat sign-in (the picker grants
  drive.file per-file, so no pre-existing connection or scope is required).

Backend contract: rowboatlabs/rowboatx-backend#7
(GET /oauth/google/picker/{start,callback}, POST /v1/google-oauth/claim-picked).

* chore(google-docs): remove the dead API-key/system-browser Picker

The managed picker replaced the only consumer (the picker dialog), so the
experimental API-key Picker is now unused. Removes:
- main: google-docs:openPicker handler (system-browser loopback Picker)
- shared: google-docs:openPicker + google-docs:getAccessToken IPC schemas
- core: getGoogleAccessToken (token plumbing for the client-side Picker)
- renderer: lib/google-picker.ts (Picker JS SDK loader)

Kept GoogleClientIdModal / google-credentials-store — still used by the
general BYOK Google connect in onboarding, connectors, and settings.

---------

Co-authored-by: Gagancreates <gaganp000999@gmail.com>
2026-06-23 03:13:58 +05:30
..
agent-schedule-state.ts feat: add background agents with scheduling support 2026-02-05 16:43:09 +05:30
agent-schedule.ts feat: add background agents with scheduling support 2026-02-05 16:43:09 +05:30
agent.ts bootstrap new electron app 2026-01-16 12:05:33 +05:30
background-task.ts feat(bg-tasks): coding-from-meetings — auto-implement coding action items (#630) 2026-06-19 11:26:43 +05:30
bases.ts app navigation 2026-03-13 10:39:05 +05:30
billing.ts feat(billing): consume plan variant catalog 2026-06-19 16:52:22 +05:30
blocks.ts Gmail send, archive and delete (#573) 2026-05-25 09:47:08 +05:30
browser-control.ts pull browser-harness skills (#519) 2026-05-06 12:25:10 +05:30
code-mode.ts feat: run code mode on an in-app ACP client with live approvals (#593) 2026-06-05 14:45:08 +05:30
code-sessions.ts feat(code-mode): per-session model + effort, and keep output on nav (#632) 2026-06-21 21:08:49 +05:30
composio.ts Feature/composio tools library (#461) 2026-04-06 13:30:46 +05:30
events.ts feat: background tasks 2026-05-12 17:43:25 +05:30
example.ts bootstrap new electron app 2026-01-16 12:05:33 +05:30
frontmatter.ts app navigation 2026-03-13 10:39:05 +05:30
index.ts add code mode: coding-agent workspace with sessions, direct/Rowboat drive, diffs, and worktrees 2026-06-12 23:57:44 +05:30
inline-task.ts Livenote2 (#440) 2026-03-19 01:34:10 +05:30
ipc.ts Drive (#583) 2026-06-23 03:13:58 +05:30
live-note.ts feat: background tasks 2026-05-12 17:43:25 +05:30
llm-step-events.ts feat(ui): surface LLM stream errors in chat 2026-02-16 08:34:51 +05:30
mcp.ts bootstrap new electron app 2026-01-16 12:05:33 +05:30
message.ts Persist per-message context for prompt caching 2026-05-28 23:00:44 +05:30
models.ts Add run-level auto permission mode 2026-06-03 07:58:04 +05:30
notification-settings.ts feat: add user-configurable notification settings (#601) 2026-06-11 19:43:26 +05:30
prefix-logger.ts bootstrap new electron app 2026-01-16 12:05:33 +05:30
prompt-block.ts add prompt block 2026-04-20 14:42:13 +05:30
rowboat-account.ts feat(billing): consume plan variant catalog 2026-06-19 16:52:22 +05:30
runs.ts Last modified (#624) 2026-06-17 10:21:24 +05:30
service-events.ts feat: ship Slack as a knowledge source, hardened for production (#596) 2026-06-17 12:52:27 -07:00
workspace.ts bootstrap new electron app 2026-01-16 12:05:33 +05:30