Commit graph

1509 commits

Author SHA1 Message Date
Deepak Bhagat
bcf354a4e2 fix: bundle pdf-parse, xlsx, papaparse, mammoth for packaged Electron app
These four packages are loaded via _importDynamic (new Function pattern) in
builtin-tools.ts to prevent esbuild from statically bundling pdfjs-dist's DOM
polyfills into the Electron main process. As a result, esbuild cannot inline
them into main.cjs, and they are not available at runtime in the packaged app.

Two changes to fix this:

1. bundle.mjs: mark the four packages as esbuild external so the generated
   main.cjs emits require() calls for them rather than inlining them.

2. forge.config.cjs: after bundling, recursively collect all transitive and
   optional dependencies of the four packages from the pnpm store and copy
   them into .package/node_modules/. Optional deps are included because
   @napi-rs/canvas (required by pdfjs-dist for DOMMatrix polyfills) ships
   its native binaries as optional platform-specific packages.

Fixes: pdf-parse, xlsx, papaparse, mammoth all fail with
'Cannot find package' in the packaged .app (issue #486).
2026-04-21 20:39:07 +05:30
arkml
2133d7226f
Merge pull request #490 from rowboatlabs/dev
Dev
2026-04-13 22:21:12 +05:30
Arjun
490b14ad58 switch to claude as default 2026-04-13 21:28:01 +05:30
Tushar
2653f6170d
feat(oauth): enhance Rowboat sign-in process to prevent duplicate users (#489)
* feat(oauth): enhance Rowboat sign-in process to prevent duplicate users

Added billing information checks during the Rowboat OAuth connection and onboarding process to ensure user and Stripe customer existence before proceeding. This change mitigates the risk of creating duplicate users due to parallel API calls. Updated error handling for better debugging in case of failures.

* refactor(onboarding): remove billing info check during Rowboat OAuth connection

Eliminated the billing information check that was previously in place to prevent duplicate Stripe customers during the onboarding process. This change simplifies the onboarding flow while maintaining the necessary checks for composio flags after account connection.
2026-04-13 18:15:04 +05:30
Ramnique Singh
b3066a0b7a add cmd+k palette with chat mode that captures editor cursor context
Cmd+K (Ctrl+K on Win/Linux) now opens a unified palette with two
modes: Chat (default) and Search (existing behavior). Tab cycles
between them. In Chat mode, if the user triggered the shortcut from
the markdown editor, the palette auto-attaches a removable chip
showing the note path and precise cursor line. Enter sends the
prompt to the right-sidebar copilot — opening the sidebar if closed
and starting a fresh chat tab — with the chip carried as a
FileMention whose lineNumber is forwarded to the agent as
"... at <path> (line N)" so the agent can use workspace-readFile
with offset to fetch the right slice on demand.

Line numbers are computed against the same getMarkdownWithBlankLines
serializer used to write notes to disk, so the reference is
byte-identical to what the agent reads back.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 17:00:37 +05:30
Ramnique Singh
4a2dfbf16f pass @-mention notes by reference, not by inlined content
Mentions now route through the structured-attachment path, sending
only path/filename/mimeType. The agent fetches content on demand via
workspace-readFile (line-prefixed, paginated). Avoids freezing a stale
snapshot of the note into the conversation and saves tokens on long
notes.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 14:59:36 +05:30
Ramnique Singh
f4dc5e7db4 prefix line numbers and add offset/limit to workspace-readFile
Returns utf8 reads as `<path>`/`<type>`/`<content>` blocks with each
line prefixed by its 1-indexed line number, plus offset/limit paging
and an end-of-file/truncation footer. Helps the agent reference
specific lines when forming precise edits to knowledge markdown.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 14:30:36 +05:30
tusharmagar
1da3223f7d update .gitignore 2026-04-13 09:45:43 +05:30
tusharmagar
05166e791f clean up .claude 2026-04-13 09:45:28 +05:30
arkml
884b5d0414
fix composio related sync scripts (#484) 2026-04-11 09:08:26 +05:30
Arjun
80d134568c fix default model 2026-04-11 08:16:53 +05:30
Ramnique Singh
610616e5a0 add mermaid rendering 2026-04-10 18:00:30 +05:30
arkml
220e15f642
fix workdir everywhere (#475)
* make workdir configurable everywhere for easy testing
2026-04-10 10:40:46 +05:30
Ramnique Singh
c5e984e4c4
Merge pull request #481 from rowboatlabs/dev
Dev
2026-04-10 01:23:05 +05:30
Ramnique Singh
44fd94d5e6 use correct paths in analytics 2026-04-10 01:21:01 +05:30
Ramnique Singh
1ac4e648da fix model-fetch error: remove experimental field handling 2026-04-10 01:07:52 +05:30
Ramnique Singh
41bbec6296
Merge pull request #480 from rowboatlabs/dev
feat(oauth): switch Google OAuth from PKCE to authorization code flow…
2026-04-10 00:44:37 +05:30
Ramnique Singh
50bce6c1d6 feat(oauth): switch Google OAuth from PKCE to authorization code flow with client secret
Previously, the Google OAuth integration used a PKCE-only flow (no client
secret). This switches to a standard authorization code flow where the user
provides both a Client ID and Client Secret from a "Web application" type
OAuth client in Google Cloud Console. PKCE is retained alongside the secret
for defense in depth.

Key changes:

- oauth-client.ts: discoverConfiguration() and createStaticConfiguration()
  now accept an optional clientSecret param. When provided, uses
  ClientSecretPost instead of None() for client authentication.

- oauth-handler.ts: connectProvider() takes a credentials object
  ({clientId, clientSecret}) instead of a bare clientId. Removed eager
  persistence of clientId before flow completion — credentials are now
  only saved after successful token exchange. Renamed resolveClientId to
  resolveClientCredentials to return both values from a single repo read.

- google-client-factory.ts: same resolveClientId → resolveCredentials
  rename. Passes clientSecret to OAuth2Client constructor and
  discoverConfiguration for token refresh.

- repo.ts: added clientSecret to ProviderConnectionSchema. Not exposed
  to renderer via ClientFacingConfigSchema (stays main-process only).

- IPC: added clientSecret to oauth:connect request schema. Handler builds
  a credentials object and passes it through.

- UI: GoogleClientIdModal now collects both Client ID and Client Secret
  (password field). Always shown on connect — no in-memory credential
  caching. Renamed google-client-id-store to google-credentials-store
  with a unified {clientId, clientSecret} object.

- google-setup.md: updated to instruct users to create a "Web application"
  type OAuth client (instead of UWP), add the localhost redirect URI, and
  copy both Client ID and Client Secret. Added credentials modal screenshot.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-10 00:43:34 +05:30
arkml
70ca18a7fa
Merge pull request #479 from rowboatlabs/dev
Dev
2026-04-10 00:00:32 +05:30
Arjun
924e136505 change lookback to 7 days 2026-04-09 23:55:29 +05:30
tusharmagar
1d29ca8886 refactor(sidebar): simplify auto-collapse logic and improve sidebar toggle behavior 2026-04-09 20:58:59 +05:30
tusharmagar
79a21c715e feat(sidebar): implement auto-collapse functionality and refine sidebar toggle logic
Fixed sidebar animations and icon positioning
remove mobile sidebar
2026-04-09 14:38:54 +05:30
tusharmagar
1b81a42ed3 refactor(App): update sidebar toggle functionality and adjust button configurations 2026-04-09 13:28:26 +05:30
tusharmagar
9c010dabd8 fix(help-popover): update Discord invite link to the new URL 2026-04-09 10:09:18 +05:30
Ramnique Singh
89b6b963a2 Merge branch 'main' into dev 2026-04-09 07:06:56 +05:30
Ramnique Singh
d854b3f4f0
Merge pull request #431 from aculich/pr/google-oauth-callback
fix(oauth): preserve full callback URL for token exchange + persist Google Client ID
2026-04-09 07:05:16 +05:30
arkml
de24293cce
Merge pull request #470 from rowboatlabs/arkml-patch-18
Revise voice input/output and tools integration sections
2026-04-08 17:17:20 +05:30
arkml
52f5922495
Revise voice input/output and tools integration sections
Updated README to improve clarity and formatting for API key configuration.
2026-04-08 17:14:08 +05:30
arkml
34d64382d5
Merge pull request #469 from rowboatlabs/arkml-patch-17
Enhance README with tools integration and live notes
2026-04-08 16:58:07 +05:30
arkml
6da447ef3b
Enhance README with tools integration and live notes
Added sections for tools integration and live notes, and updated existing content for clarity and completeness.
2026-04-08 16:54:46 +05:30
Ramnique Singh
1a7dce35c8 fix shell env inference 2026-04-08 14:46:18 +05:30
arkml
4a16af6e02
Merge pull request #468 from rowboatlabs/arkml-patch-16
Replace demo video links in README
2026-04-08 11:31:17 +05:30
arkml
670b623fe6
Replace demo video links in README
Updated demo section with new video links and removed old demo images.
2026-04-08 11:30:08 +05:30
Aaron Culich
e1c6758a3f fix(oauth): full callback URL, Google clientId, refresh, and review follow-ups
- Pass full OAuth callback URL through auth-server for openid-client validation
- Composio + Google flows: duplicate-callback guard; preserve timeout cleanup
- Persist and expose Google clientId via oauth:getState; hydrate UI from useConnectors
- getAccessToken returns refreshed credentials; clearer errors and missing-state handling
- IPC schema: per-provider userId + clientId
- Docs: google-setup redirect URI and troubleshooting

Made-with: Cursor
2026-04-07 11:24:25 -07:00
Ramnique Singh
598aeb59cc
Merge pull request #467 from rowboatlabs/dev
Dev changes
2026-04-07 22:21:05 +05:30
arkml
69983ec566
Revise voice notes section to voice input and output
Updated the README to reflect changes in voice notes to voice input and added voice output section.
2026-04-07 22:19:29 +05:30
Ramnique Singh
c4e61eb6ff
Merge pull request #466 from rowboatlabs/dev-billing-updates
Add billing error handling and wire upgrade entry points
2026-04-07 22:18:37 +05:30
tusharmagar
75ffbc781c Add billing error handling and UI updates
- Introduced billing error patterns to match specific error messages and display appropriate user prompts in the ChatSidebar.
- Enhanced SidebarContentPanel and AccountSettings components to reflect subscription status, including trial expiration details.
- Updated button actions to direct users to the app URL for subscription management and upgrades.
- Added a new Payment section in AccountSettings for managing invoices and payment methods, with conditional rendering based on subscription status.
2026-04-07 21:51:17 +05:30
Arjun
d6b31cc25a fixed onboarding 2026-04-07 17:25:43 +05:30
tusharmagar
2739de6c67 Add app URL handling in Sidebar and Account Settings
(Wire up the upgrade buttons)

- Introduced `appUrl` state in both SidebarContentPanel and AccountSettings components.
- Updated OAuth state handling to fetch and set the app URL when connected to Rowboat.
- Enhanced Upgrade button functionality to open the app URL if available.
- Improved error handling during app URL retrieval to ensure robustness.
2026-04-07 14:21:45 +05:30
Arjun
01bc31ce77 default model in logged in 2026-04-07 13:49:01 +05:30
arkml
aea40e632b
Remove slack granola (#465)
* remove native slack and granola

* remove agent-slack instructions

* fix build error
2026-04-07 12:38:19 +05:30
Arjun
ce4e8f620a fix build issue 2026-04-07 11:58:17 +05:30
arkml
470947a59d
posthog analytics (#424)
Improved analytics
2026-04-07 11:37:20 +05:30
arkml
71c848006c
Polishes (#464)
Fix assistant scroll behavior
2026-04-07 09:10:00 +05:30
tusharmagar
290dc54d1e Enhance Composio tools prompt to clarify integration usage and configuration requirements. Added detailed instructions for users on enabling Composio integrations and handling email/calendar requests separately. 2026-04-07 01:08:19 +05:30
tusharmagar
c2177a0aa4 remove KEY configured indicator on connected account 2026-04-07 00:43:37 +05:30
Tushar
e0aaa9a27e
Feature/composio tools library (#461)
* first version of composio

* Enhance error handling in Composio tool execution. Added try-catch block to log errors and return a structured error response when executing tools fails.

* Add tool search functionality to settings dialog

Implemented a debounced search feature for tools within the toolkit, allowing users to filter tools based on a search query. Added state management for search results and loading status. Updated the UI to accommodate the search input and results display. Additionally, modified the API call to use 'query' instead of 'search' for consistency.

* Enhance Composio OAuth flow management and improve tool handling

- Updated the activeFlows management to prevent concurrent OAuth flows for the same toolkit by using toolkitSlug as the key.
- Implemented cleanup logic for existing flows, ensuring proper resource management by aborting and closing servers as needed.
- Introduced a timeout mechanism for abandoned flows, enhancing reliability.
- Refactored the Composio tools repository to use an in-memory cache for improved performance and added methods for persisting changes to disk.
- Updated the detailed tools listing to use a consistent API call structure and improved input parameter handling.
- Made connectionData in the response optional for better flexibility in handling connected accounts.

* Improve error handling in Composio API calls

- Enhanced error reporting by extracting human-readable messages from the JSON response body when the API call fails.
- Added logic to parse the response and include specific error details in the thrown error message, improving debugging and user feedback.

* Refactor Composio integration handling and improve UI components

- Updated composio-handler.ts to invalidate the copilot instructions cache upon connection and disconnection.
- Removed unused functions related to tool management in composio-handler.ts.
- Enhanced IPC handlers in ipc.ts to streamline Composio connection processes.
- Introduced ComposioConnectCard in the renderer to display connection status and handle events.
- Refactored tool rendering in App.tsx and chat-sidebar.tsx to utilize new tabbed content for parameters and results.
- Improved Composio tools prompt generation in instructions.ts to clarify integration usage and discovery flow.
- Cleaned up unused code and improved overall structure for better maintainability.

* Refactor listToolkits function to remove cursor parameter and implement pagination

- Updated listToolkits in composio-handler.ts to paginate through API results, collecting all curated toolkits.
- Adjusted IPC handler in ipc.ts to call the modified listToolkits without cursor argument.
- Made properties in ToolkitInfo optional in settings-dialog.tsx for improved flexibility.
- Removed the unused enabled-tools-repo.ts file to clean up the codebase.

* Refactor Composio toolkit management for improved structure and maintainability

- Consolidated toolkit definitions and display names into a single source of truth in shared/composio.ts.
- Updated core composio/curated-toolkits.ts to re-export types and constants for backward compatibility.
- Enhanced the organization of toolkit data, ensuring clarity and ease of access for future development.

* Refactor Composio integration and improve component structure

- Updated imports in composio-handler.ts and various components to utilize shared/composio.js for consistency.
- Simplified ComposioConnectCard by removing unnecessary state management and improving event handling.
- Enhanced chat-conversation.ts to directly reference COMPOSIO_DISPLAY_NAMES from shared/composio.js.
- Cleaned up unused functions and types in client.ts and types.ts for better maintainability.
- Removed deprecated curated-toolkits.ts file to streamline the codebase.

* Refactor Composio connection handling and improve tool display logic

- Removed the connection bridge for Composio toolkit OAuth, simplifying the connection process.
- Updated ComposioConnectCard to display a more user-friendly connection message.
- Introduced a new utility function, getToolDisplayName, to provide human-friendly names for builtin tools.
- Refactored App and ChatSidebar components to utilize the new getToolDisplayName function for improved clarity in tool titles.
- Cleaned up imports and removed unused code for better maintainability.

* remove from diff

* Address PR review: consolidate types, refactor CopilotAgent, sort toolkits

- Move ZSearchResultTool and ZNormalizedToolResult into composio/types.ts
- Convert CopilotAgent from static const to async buildCopilotAgent()
- Simplify loadAgent to delegate to buildCopilotAgent()
- Sort CURATED_TOOLKITS alphabetically by slug
- Remove inline type annotations in composio-handler, use inferred types
- Bump search limit from 15→50 for unscoped queries
- Add docstrings explaining inferToolkitSlug fallback behavior
- Add IPC schema reference comment for composio channels

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* Enhance Composio connection handling and improve rendering logic

- Added a 'hidden' property to ComposioConnectCardData to prevent rendering of duplicate connection cards.
- Updated App and ChatSidebar components to skip rendering if the card is marked as hidden.
- Refactored ComposioConnectCard to utilize a ref for callback firing, ensuring onConnected is only called once.
- Improved instructions for Composio integration to clarify usage and loading of the composio-integration skill.

This update streamlines the user experience by avoiding duplicate connection prompts and enhances the overall clarity of integration instructions.

* Address PR round 2: use query param, remove inferToolkitSlug, consolidate types

- Rename deprecated `search` param to `query` per Composio docs
- Remove inferToolkitSlug fallback; make toolkit required in ZSearchResultTool
- Replace inline Awaited<ReturnType<...>> with concrete Toolkit type in handler
- Move ZToolkitMeta/ZToolkitItem/ZListToolkitsResponse to shared/composio.ts
- Reference shared schemas in ipc.ts and core/types.ts (single source of truth)
- Remove unused ZTool import from client.ts

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* Add Toolkit type inference to composio/types.ts

- Introduced a new type `Toolkit` inferred from `ZToolkit` to enhance type safety and clarity in type definitions.
- This addition supports better integration and usage of the toolkit within the Composio framework.

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-06 13:30:46 +05:30
tusharmagar
bc929b6c1b Update run title inference logic to set title only when it is not already defined.
removes bug where the chat session name updates to the latest user message while generating, before switching back to the original name.
2026-04-02 09:43:03 +05:30
tusharmagar
48edd98fe0 Remove action indicators from TasksSection and TabBar components (green dot) 2026-04-02 09:36:14 +05:30