Skip to content

Conversation

@robertalv
Copy link

@robertalv robertalv commented Jan 7, 2026

Description

Convex Tools - A Raycast extension for interacting with your Convex backend directly from Raycast.

This extension provides quick access to essential Convex development workflows without leaving your keyboard:

Commands

Switch Convex Project - Navigate between your teams, projects, and deployments (dev/prod/preview)
Run Convex Function - Search and execute queries, mutations, and actions with argument input and formatted result display
Browse Convex Tables - View tables and documents with a detail panel showing formatted JSON and metadata
View Convex Logs - Stream real-time function execution logs with filtering, status indicators, and usage stats
Why I built this

I was building a Convex desktop application and found myself constantly alt-tabbing to the dashboard just to check logs and run seed functions. After doing this approximately 47 times too many, I decided to bring those features to Raycast. Tables got added because... well, I was already there.

Screencast

Youtube Video
First video might have been a bit blurry

Checklist

@raycastbot raycastbot added the new extension Label for PRs with new extensions label Jan 7, 2026
@raycastbot
Copy link
Collaborator

Congratulations on your new Raycast extension! 🚀

Due to our current reduced availability, the initial review may take up to 10-15 business days.

Once the PR is approved and merged, the extension will be available on our Store.

Copy link
Contributor

@0xdhrv 0xdhrv left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

issue: duplicate subfolders for the extension convex

Can you review again, and remove the nested subfolders for the extension convex, and update the PR accordingly?

@0xdhrv
Copy link
Contributor

0xdhrv commented Jan 7, 2026

Hi 👋

Thanks for your contribution 💪

I have now tested your extension, and I have some feedback ready for you:

I'm looking forward to testing this extension again 🔥

I converted this PR into a draft until it's ready for the review, please press the button Ready for review when it's ready and we'll have a look 😊

Feel free to contact me here or at Slack if you have any questions.

@0xdhrv 0xdhrv marked this pull request as draft January 7, 2026 15:48
@greptile-apps
Copy link
Contributor

greptile-apps bot commented Jan 7, 2026

Greptile Summary

  • Introduces a new Convex Tools extension providing commands to switch projects, execute functions, browse tables, and view logs for Convex backend development workflows
  • Implements OAuth authentication, real-time log streaming with deduplication, and comprehensive API client for interacting with Convex deployments
  • Follows Raycast extension patterns with proper TypeScript configuration, ESLint setup, and includes required metadata structure

Important Files Changed

Filename Overview
extensions/convex/src/components/DeploymentSelector.tsx New component with limited cross-team deployment selection due to logic flaw in onChange handler
extensions/convex/src/switch-project.tsx Project switcher with potential state inconsistency in deployment selection context updates
extensions/convex/src/hooks/useConvexData.ts Complex log streaming hook with sophisticated polling and deduplication logic requiring careful review
extensions/convex/src/lib/api.ts Comprehensive API client with extensive function execution and data fetching capabilities

Confidence score: 3/5

  • This PR introduces functional extension code but has logical issues that could impact core functionality in deployment switching
  • Score lowered due to deployment selector logic flaw preventing cross-team navigation and potential state inconsistency in context updates that could cause confusing user experience
  • Pay close attention to DeploymentSelector.tsx onChange logic and switch-project.tsx context state management patterns

Copy link
Contributor

@greptile-apps greptile-apps bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Additional Comments (9)

  1. extensions/convex/convex/tsconfig.json, line 1-16 (link)

    logic: This tsconfig.json file appears to be duplicated in a nested convex directory. The main extension should have its TypeScript configuration at extensions/convex/tsconfig.json, not extensions/convex/convex/tsconfig.json. This nested structure could cause confusion and build issues. Is this nested directory structure intentional, or should this file be removed in favor of the main tsconfig.json at the extension root?

  2. extensions/convex/src/browse-tables.tsx, line 377 (link)

    style: The tableName parameter is not used in this component

    Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!

  3. extensions/convex/src/components/DeploymentSelector.tsx, line 5 (link)

    style: Remove unused imports Action and ActionPanel

    Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!

  4. extensions/convex/src/components/DeploymentSelector.tsx, line 58-73 (link)

    logic: The onChange logic is flawed - it only checks deployments from the currently selected project, but users might want to select deployments from other projects. The loop through teams doesn't actually fetch different projects/deployments, making selection limited to the current context. How should the component handle deployment selection across different teams and projects?

  5. extensions/convex/src/components/DeploymentSelector.tsx, line 62 (link)

    style: Variable team is declared but never used in the loop

    Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!

  6. extensions/convex/src/hooks/useConvexData.ts, line 44 (link)

    logic: Using teamId ?? 0 as fallback could cause issues if teamId 0 is valid. Consider using a different approach. Is teamId 0 a valid identifier in your system, or should this use a different sentinel value?

  7. extensions/convex/CHANGELOG.md, line 3 (link)

    syntax: Use {PR_MERGE_DATE} placeholder instead of hardcoded date

    Context Used: Rule from dashboard - What: Changelog entries must use {PR_MERGE_DATE} placeholder in titles, be placed at the top of th... (source)

  8. extensions/convex/convex/README.md, line 3 (link)

    logic: This description doesn't match the actual features described in the PR body. Should describe the specific commands: Switch Project, Run Function, Browse Tables, and View Logs.

    Is this the correct README file for the main extension, or is this a placeholder that needs to be updated with the proper description?

  9. extensions/convex/src/switch-project.tsx, line 128 (link)

    logic: Context update may lose teamId when selecting project. Consider preserving existing context values. Should the teamId be preserved when updating the project context?

19 files reviewed, 9 comments

Edit Code Review Agent Settings | Greptile

@robertalv
Copy link
Author

issue: duplicate subfolders for the extension convex

Can you review again, and remove the nested subfolders for the extension convex, and update the PR accordingly?

All set! Thanks!

@robertalv robertalv marked this pull request as ready for review January 7, 2026 16:24
@robertalv robertalv marked this pull request as draft January 7, 2026 16:31
Copy link
Contributor

@greptile-apps greptile-apps bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Additional Comments (3)

  1. extensions/convex/src/hooks/useConvexData.ts, line 205-222 (link)

    style: useEffect dependency includes fetchLogs which recreates on every parameter change, potentially causing excessive polling restarts. Should fetchLogs be wrapped in useRef or the effect dependencies be restructured to prevent polling interval resets on parameter changes?

    Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!

  2. extensions/convex/src/components/DeploymentSelector.tsx, line 58-70 (link)

    logic: Logic flaw prevents cross-team/project deployment selection. The onChange handler only searches within the current deployments array (filtered by selectedProjectId), meaning users cannot switch to deployments in different teams or projects. This breaks the core functionality of a deployment selector. Should this component support switching to deployments across different teams/projects, or is it intended only for deployments within the current project?

  3. extensions/convex/src/switch-project.tsx, line 137 (link)

    style: Only updates deploymentName in context - should preserve teamId and projectId for consistency with other handlers

    Should the deployment selection preserve the current teamId and projectId values in the context?

    Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!

10 files reviewed, 3 comments

Edit Code Review Agent Settings | Greptile

@robertalv robertalv marked this pull request as ready for review January 7, 2026 16:50
@robertalv
Copy link
Author

Hi 👋

Thanks for your contribution 💪

I have now tested your extension, and I have some feedback ready for you:

I'm looking forward to testing this extension again 🔥

I converted this PR into a draft until it's ready for the review, please press the button Ready for review when it's ready and we'll have a look 😊

Feel free to contact me here or at Slack if you have any questions.

Only took a little bit haha, all set! Thanks for checkin it out!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

new extension Label for PRs with new extensions

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants