Skip to content

Conversation

@waleedlatif1
Copy link
Collaborator

Summary

  • Fix excessive "[CustomToolsStore] Synced X custom tools" log spam (was logging per-block instead of once)
  • Fix excessive "[CollaborativeWorkflow] Active workflow changed" log spam (50+ times on load)
  • Remove dead code: lastPositionTimestamps ref was never read, queue was unused
  • Remove unused return values from useCollaborativeWorkflow (consumers use source hooks directly)

Type of Change

  • Bug fix

Testing

Tested manually - console logs reduced from 50+ to single instances

Checklist

  • Code follows project style guidelines
  • Self-reviewed my changes
  • Tests added/updated and passing
  • No new warnings introduced
  • I confirm that I have read and agree to the terms outlined in the Contributor License Agreement (CLA)

@vercel
Copy link

vercel bot commented Jan 21, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Review Updated (UTC)
docs Skipped Skipped Jan 21, 2026 11:49pm

Request Review

@greptile-apps
Copy link
Contributor

greptile-apps bot commented Jan 21, 2026

Greptile Summary

This PR successfully migrates custom tools from Zustand store to React Query cache and removes excessive logging.

Key Changes:

  • Replaced custom tools Zustand store with React Query cache for better server-state management
  • Added getCustomTool and getCustomTools helper functions to access query cache outside React components
  • Removed excessive logging in useCollaborativeWorkflow (workflow change log was firing 50+ times on load)
  • Removed dead code: lastPositionTimestamps ref (never read), unused queue variable, unused return values from useCollaborativeWorkflow
  • Updated all consumers to use new query cache-based approach
  • Removed transformCustomTool and getCustomTools from providers/utils (no longer needed)

Impact:

  • Console logs reduced from 50+ instances to single occurrences
  • Better separation of concerns (server state in React Query, client state in Zustand)
  • Cleaner codebase with removed dead code

Confidence Score: 5/5

  • This PR is safe to merge with minimal risk
  • The changes are well-structured refactoring work that improves code quality. The migration from Zustand to React Query is properly implemented with fallback handling. All references to deleted code have been updated. The removal of dead code and excessive logging directly addresses the stated goals. Tests have been updated to match the new implementation.
  • No files require special attention

Important Files Changed

Filename Overview
apps/sim/hooks/queries/custom-tools.ts Moved types and logic from Zustand store to React Query cache, added helper functions to access cache outside React
apps/sim/hooks/use-collaborative-workflow.ts Removed excessive logging and dead code (unused refs, queue variable, unused return values)
apps/sim/stores/custom-tools/store.ts Deleted entire Zustand store - replaced by React Query cache
apps/sim/stores/index.ts Removed custom tools store references, added comment explaining React Query migration
apps/sim/tools/utils.ts Updated to use getCustomTool from query cache instead of Zustand store

Sequence Diagram

sequenceDiagram
    participant Component as React Component
    participant Hook as useCustomTools Hook
    participant RQ as React Query Cache
    participant NonReact as Non-React Code
    participant API as Custom Tools API
    
    Note over Component,API: Initial Load
    Component->>Hook: useCustomTools(workspaceId)
    Hook->>RQ: Query customToolsKeys.list(wsId)
    RQ->>API: GET /api/tools/custom
    API-->>RQ: Return tools data
    RQ-->>Hook: Return cached tools
    Hook-->>Component: Tools available
    
    Note over Component,API: Non-React Access (e.g., agent-handler)
    NonReact->>NonReact: getCustomTool(toolId, workspaceId)
    NonReact->>NonReact: getWorkspaceIdFromUrl() if not provided
    NonReact->>RQ: queryClient.getQueryData(customToolsKeys.list(wsId))
    RQ-->>NonReact: Return cached tools or []
    NonReact->>NonReact: Find tool by id or title
    
    Note over Component,API: Old Flow (Removed)
    rect rgb(200, 200, 200)
        Note over Hook,RQ: Previously: useCustomTools synced to Zustand store
        Note over NonReact: Previously: useCustomToolsStore.getState().getTool()
    end
Loading

Copy link

@cursor cursor bot left a comment

Choose a reason for hiding this comment

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

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Bugbot Autofix is OFF. To automatically fix reported issues with Cloud Agents, enable Autofix in the Cursor dashboard.

@waleedlatif1
Copy link
Collaborator Author

@greptile

@waleedlatif1 waleedlatif1 merged commit 103b31a into staging Jan 22, 2026
12 checks passed
@waleedlatif1 waleedlatif1 deleted the fix/stores branch January 22, 2026 00:08
waleedlatif1 added a commit that referenced this pull request Jan 22, 2026
* fix(zustand): updated to useShallow from deprecated createWithEqualityFn (#2919)

* fix(logger): use direct env access for webpack inlining (#2920)

* fix(notifications): text overflow with line-clamp (#2921)

* chore(helm): add env vars for Vertex AI, orgs, and telemetry (#2922)

* fix(auth): improve reset password flow and consolidate brand detection (#2924)

* fix(auth): improve reset password flow and consolidate brand detection

* fix(auth): set errorHandled for EMAIL_NOT_VERIFIED to prevent duplicate error

* fix(auth): clear success message on login errors

* chore(auth): fix import order per lint

* fix(action-bar): duplicate subflows with children (#2923)

* fix(action-bar): duplicate subflows with children

* fix(action-bar): add validateTriggerPaste for subflow duplicate

* fix(resolver): agent response format, input formats, root level (#2925)

* fix(resolvers): agent response format, input formats, root level

* fix response block initial seeding

* fix tests

* fix(messages-input): fix cursor alignment and auto-resize with overlay (#2926)

* fix(messages-input): fix cursor alignment and auto-resize with overlay

* fixed remaining zustand warnings

* fix(stores): remove dead code causing log spam on startup (#2927)

* fix(stores): remove dead code causing log spam on startup

* fix(stores): replace custom tools zustand store with react query cache

* improvement(ui): use BrandedButton and BrandedLink components (#2930)

- Refactor auth forms to use BrandedButton component
- Add BrandedLink component for changelog page
- Reduce code duplication in login, signup, reset-password forms
- Update star count default value

* fix(custom-tools): remove unsafe title fallback in getCustomTool (#2929)

* fix(custom-tools): remove unsafe title fallback in getCustomTool

* fix(custom-tools): restore title fallback in getCustomTool lookup

Custom tools are referenced by title (custom_${title}), not database ID.
The title fallback is required for client-side tool resolution to work.

* fix(null-bodies): empty bodies handling (#2931)

* fix(null-statuses): empty bodies handling

* address bugbot comment

* fix(token-refresh): microsoft, notion, x, linear (#2933)

* fix(microsoft): proactive refresh needed

* fix(x): missing token refresh flag

* notion and linear missing flag too

* address bugbot comment

* fix(auth): handle EMAIL_NOT_VERIFIED in onError callback (#2932)

* fix(auth): handle EMAIL_NOT_VERIFIED in onError callback

* refactor(auth): extract redirectToVerify helper to reduce duplication

* fix(workflow-selector): use dedicated selector for workflow dropdown (#2934)

* feat(workflow-block): preview (#2935)

* improvement(copilot): tool configs to show nested props (#2936)

* fix(auth): add genericOAuth providers to trustedProviders (#2937)

---------

Co-authored-by: Vikhyath Mondreti <vikhyathvikku@gmail.com>
Co-authored-by: Emir Karabeg <78010029+emir-karabeg@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants