Repository navigation
Add branded account connections to onboarding and Integrations - #176
alichherawalla wants to merge 164 commits into
Conversation
…ent-main # Conflicts: # src/main/index.ts
|
Important Review skippedToo many files! This PR contains 189 files, which is 89 over the limit of 100. To get a review, reduce the PR to 100 files or fewer by splitting it into smaller PRs or changing its base branch. Upgrade to a paid plan to raise the limit. This review couldn't start because sufficient usage credits or metered capacity aren't available. Add credits or update usage-based reviews in the billing tab, then retry. ⚙️ Run configuration
⛔ Files ignored due to path filters (19)
📒 Files selected for processing (189)
You can disable this status message by setting the ✨ Finishing Touches 💡 1🛠️ Fix failing CI checks 💡
📝 Generate docstrings
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
…onnections # Conflicts: # pro # src/renderer/src/App.tsx # src/renderer/src/components/ConnectorsScreen.tsx
…nto feat/direct-account-connections # Conflicts: # package-lock.json # package.json # src/renderer/src/components/Settings.tsx
god-twin:hear takes a 16 kHz clip from the renderer, transcribes it with the local engine (never a remote server, even when one is set for transcription), biased toward the wake word, and deletes it. On a match it shows and focuses the main window and sends god-twin:wake with what followed the word. Off by default; settings live under godTwin:listen. A click on the companion now also brings the main window forward. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MXKTonahBSj3Td5TiTfgw7
…th Aries The Assistant tab is now God Twin, open to everyone. Ares stands in the middle of the screen with captions of what you said and what it says, a big microphone for hands-free talk and a text box. Answers come from the same tool-calling chat as Chat (memory, accounts, tools), are saved as a "God Twin" chat, and spoken answers follow spoken questions. Always listening is opt-in in its settings (on the screen and in Settings > God Twin): wake word (Aries by default), sensitivity and microphone. The listener pauses while Ares is listening or speaking. A wake from the word or from Ares on the desktop opens the God Twin and listens, or asks straight away what followed the word. Prepared workflows from the old screen live under "Things Ares can do" for Pro. The 3D Ares is shared with the desktop companion (AresAvatar) and falls back to a glow when WebGL is not available. Chat no longer switches itself to hands-free on a wake. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MXKTonahBSj3Td5TiTfgw7
…s removed removeConnector calls the new mcp:beforeRemove hook while the stored sign-in still exists; Pro uses it to revoke Google tokens. Removing locally never waits on or fails for the provider. Pins Pro with the account fixes (partial grants, expired sign-ins, revoke on remove). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MXKTonahBSj3Td5TiTfgw7
…c it mcp:list reports each connector's live-only flag, and the connector detail shows "Read live when you ask. Nothing from this account is saved to memory." in place of Sync recent for those accounts. Pins Pro with the account work: every account on its card with its access, sign in again, confirmed remove, duplicate accounts, several Obsidian vaults and no memory sync for live-only accounts. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MXKTonahBSj3Td5TiTfgw7
…fixes the broken account - The Connect your work step (onboarding and Integrations) says accounts are read live when asked and nothing is copied into memory, and that more than one can be added. A Pro build whose account cards fail to load says so instead of showing nothing. - Reconnect on a work tool targets the account that needs it (an errored or switched-off row) rather than whichever row came first. - The quick connection tests expected the old "Connected" label; they now match the account count the card shows. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MXKTonahBSj3Td5TiTfgw7
…ot add one settings.get connectors marks accounts (live-only connectors) with their health (connected, needs sign-in, off), what they can read and what was not granted (accounts:access, from Pro). The fields are optional, so an older browser is unaffected. settings.set refuses to add an account's internal identity URL as a web connector: accounts are signed in to on the desktop. The rule is in the shared bridge-settings file, changed in the browser extension's copy too. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MXKTonahBSj3Td5TiTfgw7
…ell as answers
Everything the app called Assistant is now God Twin: the per-turn switch
in the chat composer ("God Twin on - can act with Web Use or Computer
Use"), its Pro dialog, and the Settings tool group. On the God Twin
screen, Ares can act too: with Pro its turns carry Web Use and Computer
Use, as Chat's God Twin switch does. Prepared workflows are offered up
front when nothing is going on, with All workflows below; a free build
answers and offers none.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MXKTonahBSj3Td5TiTfgw7
…ign stale tests - useQuickConnection treats a missing connector list as none, instead of crashing the Connect your work section (and the screen around it). - The theme default became Dark in the accounts work; its tests and the navigation test still expected System. - The OAuth cancel test used Google Calendar, which the gallery now offers as a direct Google account; it runs on another OAuth connector. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MXKTonahBSj3Td5TiTfgw7
The tab, its settings, the chat composer's switch and its Pro dialog, the Settings tool group and the saved conversation are now named God. Code identifiers keep their god-twin names. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MXKTonahBSj3Td5TiTfgw7
The God screen is now a conversation: your messages and God's answers (markdown, streaming) beside Ares, who shows listening, thinking and speaking, with the mic under it. - Context: a Right now card (time, next meeting, open to-dos, approvals waiting, accounts read), refreshed every minute from god:context, and the same context goes with every question (toolChat context, added to the system prompt). - Proactive: God posts the day's plan, prep for a meeting starting within 20 minutes and approvals waiting, each once (god:posted), into the God chat; and offers what fits now (Prep me for the meeting, what to do first, review what is waiting, plan my day, what did I miss). The rules are in shared/god/god-context.ts with unit tests. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MXKTonahBSj3Td5TiTfgw7
Ares is the default wake word; Aries, Aires and Ari's still wake it, as whisper hears the name loosely. A wake word the user set is kept. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MXKTonahBSj3Td5TiTfgw7
…xed minute A 5.6 GB model on a CPU-only machine took longer than the 60 second start limit, so a healthy load was killed and every engine reported a failure. The wait now has no total deadline: it ends when the model is ready, when llama-server exits, or when it writes nothing for 60 seconds (180 on CUDA). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MXKTonahBSj3Td5TiTfgw7
…e clear The companion's listen button always asked God to start listening, so pressing it again while listening did nothing. It now toggles: Talk while idle, Stop while listening. The control bar used small symbols on a fixed light bar. It now has labelled icons on 32px targets with a visible focus ring, on the app's dark tokens, and Hide says where to show Ares again. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MXKTonahBSj3Td5TiTfgw7
An offgrid_guide tool returns what Off Grid AI does (free, Pro, mobile, extension) and the latest from GitHub releases, getoffgridai.co articles, dev.to and r/off_grid_ai. Public pages only, read only when called. God always offers "What's new in Off Grid AI". Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MXKTonahBSj3Td5TiTfgw7
God, Ares on the desktop, the wake word and God's settings now need Pro; a free build shows the upgrade screen. Chat mode stops listening: no wake word, no hands-free loop, one dictation per mic tap. God reaches for offgrid_guide when asked about Off Grid AI. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MXKTonahBSj3Td5TiTfgw7
…he model inventory and task roles no longer import each other
…w that retries run inside the screen-task gate
…icles, perspectives and ethos, and finds the pages about a task
…gs and saved look; the shipped Ares is unchanged
…tion in full, with their steps, tables and links
| const lines = body | ||
| .replace(/<(script|style|svg|nav|button|form)\b[\s\S]*?<\/\1>/gi, '') |
…e, settings and routines split into named parts
…greaves; the old single model is gone
…ish script, Athena joins Ares
…ation; God explains what it can do there
|
❌ The last analysis has failed. |
|



Connect your accounts (Google, Microsoft, Obsidian, MCP connectors) during onboarding and in Integrations, and meet God: your assistant, built on Chat, with Ares beside it. God and accounts are Pro; the private code is in off-grid-ai/desktop-pro#90, merge that first.
Accounts
God
Builds
scripts/oauth-build-config.mjsreads the Google client from the environment (repository secretsGOOGLE_CLIENT_IDandGOOGLE_CLIENT_SECRET, now set), ignored.envfiles or~/.offgrid/build.env. Release builds fail without them. Microsoft's public client ID is built in.Tests (6 Oct, macOS, Node 26)
Typecheck:
npm run typecheck:nodeandtypecheck:webpass.Renderer and Pro renderer: 216 files, 1,342 tests pass (37 that failed before because Node 26 hides jsdom's localStorage now run).
God screen 15, connectors edit and remove 3 + 4 DB, conversation surface 2 DB, tool routing 157, OAuth loopback 12, wake word 7: pass.
Pro main 361 pass; account lifecycle DB 10 pass (including the revoke-failure notice).
Real app (
e2e/accounts-lifecycle.spec.ts, dev build, Pro, temp profile, synthetic data): 4 of 4 pass. Google and Microsoft run to the consent page with Off Grid AI's app and your own; Obsidian and MCP run add, change and remove.Real Google and Microsoft sign-ins were tested by hand in the app on 6 Oct.
Extension against this branch's running desktop (remote Gemini 3.7 Flash): 5 passed, 2 vault tests skipped. Pairing, Settings, Models, a chat answered without a web task, and a web task driving a Chrome tab.
Gateway: remote reasoning reuses Chat's logic
The gateway kept its own copy of OpenRouter's reasoning control and always sent "reasoning off", which Gemini 3.7 Flash refuses (HTTP 400, "Reasoning is mandatory"). It now uses
remoteReasoningFields, the same function Chat uses, after reading the model's capability. The /v1 routes and responses are unchanged. Unit test:src/main/llm/__tests__/remote-reasoning-fields.test.ts; gateway test inmodel-server-chat.integration.test.ts(needs port 8439 free, so it runs in CI).Audit: every row of
docs/OFF_GRID_WORK_LOG_AUDIT_2026-10-06.mdnow has a Response.Summary by CodeRabbit
New Features
Improvements