Skip to content

feat: update Composio components #8868

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 16 commits into
base: main
Choose a base branch
from

Conversation

abhishekpatil4
Copy link
Contributor

@abhishekpatil4 abhishekpatil4 commented Jul 3, 2025

Changes

  • Dynamic component system: Replaced hardcoded components with dynamic tool fetching code
  • Package updates: Added composio package, updated composio_langchain, removed composio-core
  • Response post-processing: Added support to process tool execution responses before returning to components code
  • New/Replaced components: Added Gmail, Slack, Outlook, Reddit etc.

Processed response screenshot for reference:
Screenshot 2025-07-04 at 2 32 45 AM

Summary by CodeRabbit

  • New Features

    • Added integration components for Google Meet, Google Tasks, Linear, Reddit, Slackbot, Supabase, Todoist, YouTube, and Dropbox.
    • Introduced new sidebar bundles and icons for Linear, Reddit, Google Tasks, Google Maps, Todoist, Zoom, Google Meet, and Google Sheets.
    • Enabled lazy loading and display of new app icons in the interface.
  • Improvements

    • Upgraded Composio SDK dependencies for enhanced API integration.
    • Refactored and modernized Composio components for improved action handling, authentication, and UI configuration.
  • Bug Fixes

    • Improved error handling and state management for API connections and tool selection.
  • Removals

    • Simplified or removed legacy code for Gmail, Google Calendar, Outlook, Slack, and GitHub components to prepare for updated implementations.

@dosubot dosubot bot added the size:XXL This PR changes 1000+ lines, ignoring generated files. label Jul 3, 2025
Copy link
Contributor

coderabbitai bot commented Jul 3, 2025

Walkthrough

This update introduces new Composio integrations (Google Meet, Google Tasks, Linear, Reddit, Slackbot, Supabase, Todoist, YouTube, Dropbox), refactors backend components to use the latest Composio SDK, and streamlines existing API components. The frontend is updated with new icons and sidebar bundles for these integrations, expanding UI support.

Changes

File(s) Change Summary
pyproject.toml Updated Composio dependencies to use the new composio package at version 1.0.0rc9 and removed composio-core.
src/backend/base/langflow/base/composio/composio_base.py Refactored to use new Composio SDK, improved action/schema handling, dynamic UI config, robust authentication, and error handling. Added/updated multiple public methods for action/data management.
src/backend/base/langflow/components/composio/init.py Added exports for new Composio API components: Google Meet, Google Tasks, Linear, Reddit, Slackbot, Supabase, Todoist, YouTube, Dropbox.
src/backend/base/langflow/components/composio/composio_api.py Refactored to use new Composio client and LangchainProvider; simplified tool validation, build config logic, and deprecated old SDK usage. Improved error handling.
src/backend/base/langflow/components/composio/dropbox_compnent.py Added new Dropbox API component class with basic attributes and placeholder method.
src/backend/base/langflow/components/composio/github_composio.py Stripped to a minimal skeleton; removed all action/input logic, leaving only basic attributes and an empty method.
src/backend/base/langflow/components/composio/gmail_composio.py Removed all action/input logic; added minimal constructor and response post-processing methods for Gmail actions.
src/backend/base/langflow/components/composio/googlecalendar_composio.py Reduced to a skeleton; removed all logic except basic attributes and a stub method.
src/backend/base/langflow/components/composio/googlemeet_composio.py Added new Google Meet API component class with attributes and placeholder method.
src/backend/base/langflow/components/composio/googletasks_composio.py Added new Google Tasks API component class with attributes.
src/backend/base/langflow/components/composio/linear_composio.py Added new Linear API component class with attributes and placeholder method.
src/backend/base/langflow/components/composio/outlook_composio.py Reduced to skeleton; removed all logic except basic attributes and a stub method.
src/backend/base/langflow/components/composio/reddit_composio.py Added new Reddit API component class with attributes and placeholder method.
src/backend/base/langflow/components/composio/slack_composio.py Removed all logic except for an empty stub method.
src/backend/base/langflow/components/composio/slackbot_composio.py Added new Slackbot API component class with attributes and placeholder method.
src/backend/base/langflow/components/composio/supabase_composio.py Added new Supabase API component class with attributes and placeholder method.
src/backend/base/langflow/components/composio/todoist_composio.py Added new Todoist API component class with attributes and placeholder method.
src/backend/base/langflow/components/composio/youtube_composio.py Added new YouTube API component class with attributes and placeholder method.
src/frontend/src/icons/GoogleTasks/googletasks.jsx Added new SVG React component for Google Tasks icon.
src/frontend/src/icons/GoogleTasks/index.tsx Added forwardRef wrapper for Google Tasks icon.
src/frontend/src/icons/googlemaps/googlemaps.jsx Added new SVG React component for Google Maps icon.
src/frontend/src/icons/googlemaps/index.tsx Added forwardRef wrapper for Google Maps icon.
src/frontend/src/icons/googlemeet/googlemeet.jsx Added new SVG React component for Google Meet icon.
src/frontend/src/icons/googlemeet/index.tsx Added forwardRef wrapper for Google Meet icon.
src/frontend/src/icons/googlesheets/googlesheets.jsx Added new SVG React component for Google Sheets icon.
src/frontend/src/icons/googlesheets/index.tsx Added forwardRef wrapper for Google Sheets icon.
src/frontend/src/icons/lazyIconImports.ts Extended lazy icon mapping with new icons: Google Meet, Google Tasks, Google Sheets, Google Maps, Todoist, Zoom, Linear, Reddit.
src/frontend/src/icons/linear/index.tsx Added forwardRef wrapper for Linear icon.
src/frontend/src/icons/linear/linear.jsx Added new SVG React component for Linear icon.
src/frontend/src/icons/reddit/index.tsx Added forwardRef wrapper for Reddit icon.
src/frontend/src/icons/reddit/reddit.jsx Added new SVG React component for Reddit icon.
src/frontend/src/icons/todoist/index.tsx Added forwardRef wrapper for Todoist icon.
src/frontend/src/icons/todoist/todoist.jsx Added new SVG React component for Todoist icon.
src/frontend/src/icons/zoom/index.tsx Added forwardRef wrapper for Zoom icon.
src/frontend/src/icons/zoom/zoom.jsx Added new SVG React component for Zoom icon.
src/frontend/src/utils/styleUtils.ts Added new sidebar bundles and icon mappings for all newly supported tools.

Sequence Diagram(s)

sequenceDiagram
    participant User
    participant Frontend
    participant Backend
    participant ComposioSDK

    User->>Frontend: Selects a tool (e.g., Google Tasks)
    Frontend->>Backend: Requests available actions and input schema
    Backend->>ComposioSDK: Fetch toolkits/actions metadata
    ComposioSDK-->>Backend: Returns actions and schemas
    Backend-->>Frontend: Returns actions/options and dynamic input fields
    User->>Frontend: Fills input fields and submits action
    Frontend->>Backend: Sends action request with parameters
    Backend->>ComposioSDK: Executes selected action with parameters
    ComposioSDK-->>Backend: Returns action result
    Backend-->>Frontend: Returns processed result
    Frontend-->>User: Displays result
Loading

Suggested labels

enhancement, size:XXL, lgtm

Suggested reviewers

  • edwinjosechittilappilly
  • mfortman11
✨ Finishing Touches
  • 📝 Generate Docstrings
🧪 Generate Unit Tests
  • Create PR with Unit Tests
  • Post Copyable Unit Tests in a Comment

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.

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Explain this complex logic.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai explain this code block.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and explain its main purpose.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai auto-generate unit tests to generate unit tests for this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@dosubot dosubot bot added enhancement New feature or request javascript Pull requests that update Javascript code labels Jul 3, 2025
@github-actions github-actions bot added enhancement New feature or request and removed enhancement New feature or request labels Jul 3, 2025
@abhishekpatil4
Copy link
Contributor Author

I'm getting this error when I use Slack, Supabase or GitHub Component specifically when all tools are enabled (works fine when tools are limited) Error while updating the Component: An unexpected error occurred while updating the Component. Please try again.

This likely happens during tool schema to LangFlow input conversion. Is there a way to debug this? Maybe a debug flag or logging option? I don't see any error logs currently.

Thanks!

Screenshot 2025-07-04 at 2 40 02 AM

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 22

🔭 Outside diff range comments (8)
pyproject.toml (1)

35-37: Duplicate pins produce non-deterministic resolution

The file lists the same libraries twice (certifi and filelock). PEP-621 parsers usually keep the last occurrence, but this is easy to miss and will confuse dependabot / uv.

-    "certifi>=2023.11.17,<2025.0.0",
-    "certifi==2024.8.30",
+    # keep only one, pick the stricter spec
+    "certifi==2024.8.30",-    "filelock>=3.18.0",
-    "filelock>=3.18.0"
+    "filelock>=3.18.0"

Also applies to: 127-129

src/frontend/src/icons/googlemaps/googlemaps.jsx (1)

1-20: Conventions breach: no dark-mode colours & no TypeScript wrapper

Same issues as the Zoom icon: the SVG ignores isdark and no index.tsx with forwardRef exists.
Add both pieces so the icon integrates with the existing lazy-loading + ref-forwarding infrastructure.

src/backend/base/langflow/components/composio/todoist_composio.py (1)

10-12: Implement the abstract method with a pass statement.

The set_default_tools method is abstract in the base class but has no implementation. Add a pass statement to prevent runtime errors.

 def set_default_tools(self):
     """Set the default tools for Todoist component."""
+    pass
src/backend/base/langflow/components/composio/supabase_composio.py (1)

10-12: Implement the abstract method with a pass statement.

The set_default_tools method is abstract in the base class but has no implementation. Add a pass statement to prevent runtime errors.

 def set_default_tools(self):
     """Set the default tools for Supabase component."""
+    pass
src/backend/base/langflow/components/composio/reddit_composio.py (1)

10-12: Implement the abstract method with a pass statement.

The set_default_tools method is abstract in the base class but has no implementation. Add a pass statement to prevent runtime errors.

 def set_default_tools(self):
     """Set the default tools for Reddit component."""
+    pass
src/backend/base/langflow/components/composio/youtube_composio.py (1)

10-12: Implement the abstract method with a pass statement.

The set_default_tools method is abstract in the base class but has no implementation. Add a pass statement to prevent runtime errors.

 def set_default_tools(self):
     """Set the default tools for Youtube component."""
+    pass
src/backend/base/langflow/components/composio/slackbot_composio.py (1)

10-12: Implement the abstract method with a pass statement.

The set_default_tools method is abstract in the base class but has no implementation. Add a pass statement to prevent runtime errors.

 def set_default_tools(self):
     """Set the default tools for Slackbot component."""
+    pass
src/backend/base/langflow/components/composio/composio_api.py (1)

126-220: Refactor deeply nested code blocks.

The update_build_config method has 6 levels of nesting, exceeding the recommended limit of 5. Consider extracting helper methods to improve readability.

Would you like me to suggest a refactored version that extracts the connection checking and OAuth flow logic into separate methods?

🧹 Nitpick comments (19)
src/frontend/src/icons/GoogleTasks/index.tsx (1)

4-8: Expose full SVG props to consumers

React.PropsWithChildren<{}> blocks common attributes such as className, style, width, etc. Typing the props as React.SVGProps<SVGSVGElement> (which already includes children) keeps the pattern consistent while remaining type-safe.

-export const GoogleTasksIcon = forwardRef<
-  SVGSVGElement,
-  React.PropsWithChildren<{}>
->((props, ref) => {
+export const GoogleTasksIcon = forwardRef<
+  SVGSVGElement,
+  React.SVGProps<SVGSVGElement>
+>((props, ref) => {
src/frontend/src/icons/googlesheets/googlesheets.jsx (1)

1-19: Spread incoming props & honour the isdark theme toggle

  1. props is never used – consumers cannot set className, onClick, etc.
  2. Guidelines require an isdark prop so colours adapt to dark mode.
-const Icon = (props) => (
-    <svg
+const Icon = ({ isdark, ...props }) => (
+    <svg
       xmlns="http://www.w3.org/2000/svg"
       viewBox="0 0 48 48"
       width="23px"
       height="23px"
+      {...props}
     >
       <path
-        fill="#43a047"
+        fill={isdark ? "#66bb6a" : "#43a047"}

(Repeat the colour guard for the other hard-coded fills as needed.)

src/frontend/src/icons/todoist/todoist.jsx (1)

1-3: Allow customisation & dark-mode for Todoist icon

Same concerns as with the Google Sheets icon – props are ignored and the graphic is not theme-aware.

-const Icon = (props) => (
-    <svg xmlns="http://www.w3.org/2000/svg"  viewBox="0 0 48 48" width="23px" height="23px" baseProfile="basic">
+const Icon = ({ isdark, ...props }) => (
+    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="23px" height="23px" baseProfile="basic" {...props}>-<path fill="#f44336"
+<path fill={isdark ? "#ef5350" : "#f44336"}
src/frontend/src/icons/googlemeet/index.tsx (1)

4-8: Use SVGProps for better type coverage (same as Google Tasks)

-export const GooglemeetIcon = forwardRef<
-  SVGSVGElement,
-  React.PropsWithChildren<{}>
->((props, ref) => {
+export const GooglemeetIcon = forwardRef<
+  SVGSVGElement,
+  React.SVGProps<SVGSVGElement>
+>((props, ref) => {

Keeps icon typings uniform and unblocks consumers from passing standard SVG attributes.

src/frontend/src/icons/googlesheets/index.tsx (1)

4-9: Optional typing refinement

React.PropsWithChildren<{}> is accepted across the codebase, but tools like Biome flag {}.
If you ever touch this again, consider

React.PropsWithChildren<{ isdark?: boolean }>

to silence the linter and document the dark-mode prop.

src/frontend/src/icons/todoist/index.tsx (1)

4-9: (Nit) Silence Biome lint by typing the prop shape

Optional but avoids lint error:

-React.PropsWithChildren<{}>
+React.PropsWithChildren<{ isdark?: boolean }>
src/backend/base/langflow/components/composio/dropbox_compnent.py (1)

10-12: Implement or remove placeholder method.

The set_default_tools method is empty. Either implement it with default tools or remove it if not needed yet.

-    def set_default_tools(self):
-        """Set the default tools for Dropbox component."""
+    def set_default_tools(self):
+        """Set the default tools for Dropbox component."""
+        pass  # TODO: Implement default tools configuration
src/backend/base/langflow/components/composio/linear_composio.py (1)

10-12: Implement or remove placeholder method.

The set_default_tools method is empty. Either implement it with default tools or add a pass statement for clarity.

     def set_default_tools(self):
         """Set the default tools for Linear component."""
+        pass  # TODO: Implement default tools configuration
src/backend/base/langflow/components/composio/todoist_composio.py (1)

4-8: Add class docstring for better documentation.

The class is missing a docstring that describes its purpose and functionality.

 class ComposioTodoistAPIComponent(ComposioBaseComponent):
+    """Composio API component for Todoist integration."""
     display_name: str = "Todoist"
src/backend/base/langflow/components/composio/supabase_composio.py (1)

4-8: Add class docstring for better documentation.

The class is missing a docstring that describes its purpose and functionality.

 class ComposioSupabaseAPIComponent(ComposioBaseComponent):
+    """Composio API component for Supabase integration."""
     display_name: str = "Supabase"
src/backend/base/langflow/components/composio/reddit_composio.py (1)

4-8: Add class docstring for better documentation.

The class is missing a docstring that describes its purpose and functionality.

 class ComposioRedditAPIComponent(ComposioBaseComponent):
+    """Composio API component for Reddit integration."""
     display_name: str = "Reddit"
src/backend/base/langflow/components/composio/youtube_composio.py (1)

4-8: Add class docstring for better documentation.

The class is missing a docstring that describes its purpose and functionality.

 class ComposioYoutubeAPIComponent(ComposioBaseComponent):
+    """Composio API component for YouTube integration."""
     display_name: str = "Youtube"
src/backend/base/langflow/components/composio/slackbot_composio.py (2)

4-8: Add class docstring for better documentation.

The class is missing a docstring that describes its purpose and functionality.

 class ComposioSlackbotAPIComponent(ComposioBaseComponent):
+    """Composio API component for Slackbot integration."""
     display_name: str = "Slackbot"

6-6: Consider icon consistency with component name.

The icon is set to "Slack" while the component name is "Slackbot". For consistency with other components, consider using "Slackbot" if a specific icon exists.

-    icon = "Slack"
+    icon = "Slackbot"
src/backend/base/langflow/base/composio/composio_base.py (5)

128-130: Remove excessive blank lines.

-
-
-
+

473-473: Fix inline comment formatting.

-                    field_schema_copy["description"] = f"User ID for {self.app_name.title()}: " + field_schema["description"] #noqa: E501
+                    field_schema_copy["description"] = f"User ID for {self.app_name.title()}: " + field_schema["description"]  # noqa: E501
-                            if inp.name == "user_id" and getattr(self, "entity_id", None) == getattr(inp, "value", None): #noqa: E501
+                            if inp.name == "user_id" and getattr(self, "entity_id", None) == getattr(inp, "value", None):  # noqa: E501

Also applies to: 565-565


376-378: Remove excessive blank lines.

-
-
+

681-681: Fix inline comment formatting throughout the method.

Multiple inline comments need proper spacing:

-                if field_name_in_config not in ["api_key", "tool_mode", "action", "auth_link", "entity_id"] and isinstance(build_config[field_name_in_config], dict) and "show" in build_config[field_name_in_config]:  # noqa: E501
+                if field_name_in_config not in ["api_key", "tool_mode", "action", "auth_link", "entity_id"] and isinstance(build_config[field_name_in_config], dict) and "show" in build_config[field_name_in_config]:  # noqa: E501

-                    connections = toolset.connected_accounts.list(user_ids=[self.entity_id], toolkit_slugs=[toolkit_slug]) #noqa: E501
+                    connections = toolset.connected_accounts.list(user_ids=[self.entity_id], toolkit_slugs=[toolkit_slug])  # noqa: E501

# ... and similar fixes for lines 774, 809, 813

Also applies to: 755-755, 774-774, 809-809, 813-813


885-887: Remove commented debug code.

     def configure_tools(self, composio: Composio) -> list[Tool]:
         tools = composio.tools.get(user_id=self.entity_id, toolkits=[self.app_name.lower()], limit=999)
-        # tools = composio.tools.get(user_id=self.entity_id, toolkits=[self.app_name.lower()])
-        # logger.info(f"Tools: {tools}")
📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 78d64eb and 0564001.

⛔ Files ignored due to path filters (9)
  • src/frontend/src/icons/GoogleTasks/googletasks.svg is excluded by !**/*.svg
  • src/frontend/src/icons/googlemaps/googlemaps.svg is excluded by !**/*.svg
  • src/frontend/src/icons/googlemeet/googlemeet.svg is excluded by !**/*.svg
  • src/frontend/src/icons/googlesheets/googlesheets.svg is excluded by !**/*.svg
  • src/frontend/src/icons/linear/linear.svg is excluded by !**/*.svg
  • src/frontend/src/icons/reddit/reddit.svg is excluded by !**/*.svg
  • src/frontend/src/icons/todoist/todoist.svg is excluded by !**/*.svg
  • src/frontend/src/icons/zoom/zoom.svg is excluded by !**/*.svg
  • uv.lock is excluded by !**/*.lock
📒 Files selected for processing (36)
  • pyproject.toml (1 hunks)
  • src/backend/base/langflow/base/composio/composio_base.py (5 hunks)
  • src/backend/base/langflow/components/composio/__init__.py (1 hunks)
  • src/backend/base/langflow/components/composio/composio_api.py (6 hunks)
  • src/backend/base/langflow/components/composio/dropbox_compnent.py (1 hunks)
  • src/backend/base/langflow/components/composio/github_composio.py (1 hunks)
  • src/backend/base/langflow/components/composio/gmail_composio.py (1 hunks)
  • src/backend/base/langflow/components/composio/googlecalendar_composio.py (1 hunks)
  • src/backend/base/langflow/components/composio/googlemeet_composio.py (1 hunks)
  • src/backend/base/langflow/components/composio/googletasks_composio.py (1 hunks)
  • src/backend/base/langflow/components/composio/linear_composio.py (1 hunks)
  • src/backend/base/langflow/components/composio/outlook_composio.py (1 hunks)
  • src/backend/base/langflow/components/composio/reddit_composio.py (1 hunks)
  • src/backend/base/langflow/components/composio/slack_composio.py (1 hunks)
  • src/backend/base/langflow/components/composio/slackbot_composio.py (1 hunks)
  • src/backend/base/langflow/components/composio/supabase_composio.py (1 hunks)
  • src/backend/base/langflow/components/composio/todoist_composio.py (1 hunks)
  • src/backend/base/langflow/components/composio/youtube_composio.py (1 hunks)
  • src/frontend/src/icons/GoogleTasks/googletasks.jsx (1 hunks)
  • src/frontend/src/icons/GoogleTasks/index.tsx (1 hunks)
  • src/frontend/src/icons/googlemaps/googlemaps.jsx (1 hunks)
  • src/frontend/src/icons/googlemaps/index.tsx (1 hunks)
  • src/frontend/src/icons/googlemeet/googlemeet.jsx (1 hunks)
  • src/frontend/src/icons/googlemeet/index.tsx (1 hunks)
  • src/frontend/src/icons/googlesheets/googlesheets.jsx (1 hunks)
  • src/frontend/src/icons/googlesheets/index.tsx (1 hunks)
  • src/frontend/src/icons/lazyIconImports.ts (4 hunks)
  • src/frontend/src/icons/linear/index.tsx (1 hunks)
  • src/frontend/src/icons/linear/linear.jsx (1 hunks)
  • src/frontend/src/icons/reddit/index.tsx (1 hunks)
  • src/frontend/src/icons/reddit/reddit.jsx (1 hunks)
  • src/frontend/src/icons/todoist/index.tsx (1 hunks)
  • src/frontend/src/icons/todoist/todoist.jsx (1 hunks)
  • src/frontend/src/icons/zoom/index.tsx (1 hunks)
  • src/frontend/src/icons/zoom/zoom.jsx (1 hunks)
  • src/frontend/src/utils/styleUtils.ts (6 hunks)
🧰 Additional context used
📓 Path-based instructions (12)
`{uv.lock,pyproject.toml}`: Use uv (>=0.4) as the Python package manager for dependency management

{uv.lock,pyproject.toml}: Use uv (>=0.4) as the Python package manager for dependency management

📄 Source: CodeRabbit Inference Engine (.cursor/rules/backend_development.mdc)

List of files the instruction was applied to:

  • pyproject.toml
`src/frontend/**/*.{ts,tsx}`: Use React 18 with TypeScript for all UI components and frontend logic.

src/frontend/**/*.{ts,tsx}: Use React 18 with TypeScript for all UI components and frontend logic.

📄 Source: CodeRabbit Inference Engine (.cursor/rules/frontend_development.mdc)

List of files the instruction was applied to:

  • src/frontend/src/icons/zoom/index.tsx
  • src/frontend/src/icons/googlemeet/index.tsx
  • src/frontend/src/icons/linear/index.tsx
  • src/frontend/src/icons/googlesheets/index.tsx
  • src/frontend/src/icons/reddit/index.tsx
  • src/frontend/src/icons/googlemaps/index.tsx
  • src/frontend/src/icons/GoogleTasks/index.tsx
  • src/frontend/src/icons/todoist/index.tsx
  • src/frontend/src/icons/lazyIconImports.ts
  • src/frontend/src/utils/styleUtils.ts
`src/frontend/**/*.{ts,tsx,js,jsx,css,scss}`: Use Tailwind CSS for styling all frontend components.

src/frontend/**/*.{ts,tsx,js,jsx,css,scss}: Use Tailwind CSS for styling all frontend components.

📄 Source: CodeRabbit Inference Engine (.cursor/rules/frontend_development.mdc)

List of files the instruction was applied to:

  • src/frontend/src/icons/zoom/index.tsx
  • src/frontend/src/icons/GoogleTasks/googletasks.jsx
  • src/frontend/src/icons/googlemeet/googlemeet.jsx
  • src/frontend/src/icons/googlemeet/index.tsx
  • src/frontend/src/icons/linear/index.tsx
  • src/frontend/src/icons/googlesheets/index.tsx
  • src/frontend/src/icons/reddit/reddit.jsx
  • src/frontend/src/icons/linear/linear.jsx
  • src/frontend/src/icons/reddit/index.tsx
  • src/frontend/src/icons/googlemaps/googlemaps.jsx
  • src/frontend/src/icons/googlesheets/googlesheets.jsx
  • src/frontend/src/icons/googlemaps/index.tsx
  • src/frontend/src/icons/GoogleTasks/index.tsx
  • src/frontend/src/icons/zoom/zoom.jsx
  • src/frontend/src/icons/todoist/todoist.jsx
  • src/frontend/src/icons/todoist/index.tsx
  • src/frontend/src/icons/lazyIconImports.ts
  • src/frontend/src/utils/styleUtils.ts
`src/frontend/src/icons/**/*.{ts,tsx,js,jsx}`: Use Lucide React for icons in frontend components.

src/frontend/src/icons/**/*.{ts,tsx,js,jsx}: Use Lucide React for icons in frontend components.

📄 Source: CodeRabbit Inference Engine (.cursor/rules/frontend_development.mdc)

List of files the instruction was applied to:

  • src/frontend/src/icons/zoom/index.tsx
  • src/frontend/src/icons/GoogleTasks/googletasks.jsx
  • src/frontend/src/icons/googlemeet/googlemeet.jsx
  • src/frontend/src/icons/googlemeet/index.tsx
  • src/frontend/src/icons/linear/index.tsx
  • src/frontend/src/icons/googlesheets/index.tsx
  • src/frontend/src/icons/reddit/reddit.jsx
  • src/frontend/src/icons/linear/linear.jsx
  • src/frontend/src/icons/reddit/index.tsx
  • src/frontend/src/icons/googlemaps/googlemaps.jsx
  • src/frontend/src/icons/googlesheets/googlesheets.jsx
  • src/frontend/src/icons/googlemaps/index.tsx
  • src/frontend/src/icons/GoogleTasks/index.tsx
  • src/frontend/src/icons/zoom/zoom.jsx
  • src/frontend/src/icons/todoist/todoist.jsx
  • src/frontend/src/icons/todoist/index.tsx
  • src/frontend/src/icons/lazyIconImports.ts
`src/frontend/src/icons/*/*`: Create a new directory for your icon in `src/front...

src/frontend/src/icons/*/*: Create a new directory for your icon in src/frontend/src/icons/YourIconName/ and add your SVG as a React component (e.g., YourIconName.jsx) that uses the isdark prop to support both light and dark mode.

📄 Source: CodeRabbit Inference Engine (.cursor/rules/icons.mdc)

List of files the instruction was applied to:

  • src/frontend/src/icons/zoom/index.tsx
  • src/frontend/src/icons/GoogleTasks/googletasks.jsx
  • src/frontend/src/icons/googlemeet/googlemeet.jsx
  • src/frontend/src/icons/googlemeet/index.tsx
  • src/frontend/src/icons/linear/index.tsx
  • src/frontend/src/icons/googlesheets/index.tsx
  • src/frontend/src/icons/reddit/reddit.jsx
  • src/frontend/src/icons/linear/linear.jsx
  • src/frontend/src/icons/reddit/index.tsx
  • src/frontend/src/icons/googlemaps/googlemaps.jsx
  • src/frontend/src/icons/googlesheets/googlesheets.jsx
  • src/frontend/src/icons/googlemaps/index.tsx
  • src/frontend/src/icons/GoogleTasks/index.tsx
  • src/frontend/src/icons/zoom/zoom.jsx
  • src/frontend/src/icons/todoist/todoist.jsx
  • src/frontend/src/icons/todoist/index.tsx
`src/frontend/src/icons/*/index.tsx`: Create an `index.tsx` in your icon directory that exports your icon using `forwardRef` and passes the `isdark` prop.

src/frontend/src/icons/*/index.tsx: Create an index.tsx in your icon directory that exports your icon using forwardRef and passes the isdark prop.

📄 Source: CodeRabbit Inference Engine (.cursor/rules/icons.mdc)

List of files the instruction was applied to:

  • src/frontend/src/icons/zoom/index.tsx
  • src/frontend/src/icons/googlemeet/index.tsx
  • src/frontend/src/icons/linear/index.tsx
  • src/frontend/src/icons/googlesheets/index.tsx
  • src/frontend/src/icons/reddit/index.tsx
  • src/frontend/src/icons/googlemaps/index.tsx
  • src/frontend/src/icons/GoogleTasks/index.tsx
  • src/frontend/src/icons/todoist/index.tsx
`src/frontend/src/icons/*/*.jsx`: Always support both light and dark mode for custom icons by using the `isdark` prop in your SVG component.

src/frontend/src/icons/*/*.jsx: Always support both light and dark mode for custom icons by using the isdark prop in your SVG component.

📄 Source: CodeRabbit Inference Engine (.cursor/rules/icons.mdc)

List of files the instruction was applied to:

  • src/frontend/src/icons/GoogleTasks/googletasks.jsx
  • src/frontend/src/icons/googlemeet/googlemeet.jsx
  • src/frontend/src/icons/reddit/reddit.jsx
  • src/frontend/src/icons/linear/linear.jsx
  • src/frontend/src/icons/googlemaps/googlemaps.jsx
  • src/frontend/src/icons/googlesheets/googlesheets.jsx
  • src/frontend/src/icons/zoom/zoom.jsx
  • src/frontend/src/icons/todoist/todoist.jsx
`src/backend/base/langflow/components/**/*.py`: Add new backend components to th...

src/backend/base/langflow/components/**/*.py: Add new backend components to the appropriate subdirectory under src/backend/base/langflow/components/
Implement async component methods using async def and await for asynchronous operations
Use asyncio.create_task for background work in async components and ensure proper cleanup on cancellation
Use asyncio.Queue for non-blocking queue operations in async components and handle timeouts appropriately

📄 Source: CodeRabbit Inference Engine (.cursor/rules/backend_development.mdc)

List of files the instruction was applied to:

  • src/backend/base/langflow/components/composio/todoist_composio.py
  • src/backend/base/langflow/components/composio/googlemeet_composio.py
  • src/backend/base/langflow/components/composio/reddit_composio.py
  • src/backend/base/langflow/components/composio/supabase_composio.py
  • src/backend/base/langflow/components/composio/__init__.py
  • src/backend/base/langflow/components/composio/slackbot_composio.py
  • src/backend/base/langflow/components/composio/googletasks_composio.py
  • src/backend/base/langflow/components/composio/dropbox_compnent.py
  • src/backend/base/langflow/components/composio/linear_composio.py
  • src/backend/base/langflow/components/composio/youtube_composio.py
  • src/backend/base/langflow/components/composio/gmail_composio.py
  • src/backend/base/langflow/components/composio/outlook_composio.py
  • src/backend/base/langflow/components/composio/googlecalendar_composio.py
  • src/backend/base/langflow/components/composio/github_composio.py
  • src/backend/base/langflow/components/composio/slack_composio.py
  • src/backend/base/langflow/components/composio/composio_api.py
`src/backend/**/*.py`: Run make format_backend to format Python code early and often Run make lint to check for linting issues in backend Python code

src/backend/**/*.py: Run make format_backend to format Python code early and often
Run make lint to check for linting issues in backend Python code

📄 Source: CodeRabbit Inference Engine (.cursor/rules/backend_development.mdc)

List of files the instruction was applied to:

  • src/backend/base/langflow/components/composio/todoist_composio.py
  • src/backend/base/langflow/components/composio/googlemeet_composio.py
  • src/backend/base/langflow/components/composio/reddit_composio.py
  • src/backend/base/langflow/components/composio/supabase_composio.py
  • src/backend/base/langflow/components/composio/__init__.py
  • src/backend/base/langflow/components/composio/slackbot_composio.py
  • src/backend/base/langflow/components/composio/googletasks_composio.py
  • src/backend/base/langflow/components/composio/dropbox_compnent.py
  • src/backend/base/langflow/components/composio/linear_composio.py
  • src/backend/base/langflow/components/composio/youtube_composio.py
  • src/backend/base/langflow/components/composio/gmail_composio.py
  • src/backend/base/langflow/components/composio/outlook_composio.py
  • src/backend/base/langflow/components/composio/googlecalendar_composio.py
  • src/backend/base/langflow/components/composio/github_composio.py
  • src/backend/base/langflow/components/composio/slack_composio.py
  • src/backend/base/langflow/components/composio/composio_api.py
  • src/backend/base/langflow/base/composio/composio_base.py
`src/backend/**/components/**/*.py`: In your Python component class, set the `icon` attribute to a string matching the frontend icon mapping exactly (case-sensitive).

src/backend/**/components/**/*.py: In your Python component class, set the icon attribute to a string matching the frontend icon mapping exactly (case-sensitive).

📄 Source: CodeRabbit Inference Engine (.cursor/rules/icons.mdc)

List of files the instruction was applied to:

  • src/backend/base/langflow/components/composio/todoist_composio.py
  • src/backend/base/langflow/components/composio/googlemeet_composio.py
  • src/backend/base/langflow/components/composio/reddit_composio.py
  • src/backend/base/langflow/components/composio/supabase_composio.py
  • src/backend/base/langflow/components/composio/__init__.py
  • src/backend/base/langflow/components/composio/slackbot_composio.py
  • src/backend/base/langflow/components/composio/googletasks_composio.py
  • src/backend/base/langflow/components/composio/dropbox_compnent.py
  • src/backend/base/langflow/components/composio/linear_composio.py
  • src/backend/base/langflow/components/composio/youtube_composio.py
  • src/backend/base/langflow/components/composio/gmail_composio.py
  • src/backend/base/langflow/components/composio/outlook_composio.py
  • src/backend/base/langflow/components/composio/googlecalendar_composio.py
  • src/backend/base/langflow/components/composio/github_composio.py
  • src/backend/base/langflow/components/composio/slack_composio.py
  • src/backend/base/langflow/components/composio/composio_api.py
`src/backend/base/langflow/components/**/__init__.py`: Update __init__.py with alphabetical imports when adding new components

src/backend/base/langflow/components/**/__init__.py: Update init.py with alphabetical imports when adding new components

📄 Source: CodeRabbit Inference Engine (.cursor/rules/backend_development.mdc)

List of files the instruction was applied to:

  • src/backend/base/langflow/components/composio/__init__.py
`src/frontend/src/icons/lazyIconImports.ts`: Add your icon to the `lazyIconsMapp...

src/frontend/src/icons/lazyIconImports.ts: Add your icon to the lazyIconsMapping object in src/frontend/src/icons/lazyIconImports.ts with a key that matches the backend icon string exactly.

📄 Source: CodeRabbit Inference Engine (.cursor/rules/icons.mdc)

List of files the instruction was applied to:

  • src/frontend/src/icons/lazyIconImports.ts
🧠 Learnings (36)
📓 Common learnings
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/backend_development.mdc:0-0
Timestamp: 2025-06-30T14:39:17.428Z
Learning: Applies to src/backend/base/langflow/components/**/__init__.py : Update __init__.py with alphabetical imports when adding new components
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/backend_development.mdc:0-0
Timestamp: 2025-06-30T14:39:17.428Z
Learning: After backend restart, old components will show 'Updates Available' in the UI
pyproject.toml (1)
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/backend_development.mdc:0-0
Timestamp: 2025-06-30T14:39:17.428Z
Learning: Applies to {uv.lock,pyproject.toml} : Use uv (>=0.4) as the Python package manager for dependency management
src/frontend/src/icons/zoom/index.tsx (12)
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-23T12:46:52.420Z
Learning: Export custom icon components in React using React.forwardRef to ensure proper ref forwarding and compatibility with parent components.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-30T14:40:50.836Z
Learning: Applies to src/frontend/src/icons/*/index.tsx : Create an `index.tsx` in your icon directory that exports your icon using `forwardRef` and passes the `isdark` prop.
Learnt from: dolfim-ibm
PR: langflow-ai/langflow#8394
File: src/frontend/src/icons/Docling/index.tsx:4-6
Timestamp: 2025-06-16T11:14:04.200Z
Learning: The Langflow codebase consistently uses `React.PropsWithChildren<{}>` as the prop type for all icon components using forwardRef, rather than `React.SVGProps<SVGSVGElement>`. This is an established pattern across hundreds of icon files in src/frontend/src/icons/.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/frontend_development.mdc:0-0
Timestamp: 2025-06-30T14:40:29.494Z
Learning: Applies to src/frontend/src/icons/**/*.{ts,tsx,js,jsx} : Use Lucide React for icons in frontend components.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-30T14:40:50.836Z
Learning: Applies to src/frontend/src/icons/*/* : Create a new directory for your icon in `src/frontend/src/icons/YourIconName/` and add your SVG as a React component (e.g., `YourIconName.jsx`) that uses the `isdark` prop to support both light and dark mode.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/frontend_development.mdc:0-0
Timestamp: 2025-06-30T14:40:29.494Z
Learning: Applies to src/frontend/src/components/**/*FlowGraph.tsx : Use React Flow for flow graph visualization components.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/frontend_development.mdc:0-0
Timestamp: 2025-06-30T14:40:29.494Z
Learning: Applies to src/frontend/**/*.{ts,tsx} : Use React 18 with TypeScript for all UI components and frontend logic.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-23T12:46:52.420Z
Learning: When implementing a new component icon in Langflow, ensure the icon name is clear, recognizable, and used consistently across both backend (Python 'icon' attribute) and frontend (React/TypeScript mapping).
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-30T14:40:50.836Z
Learning: Applies to src/frontend/src/icons/*/*.jsx : Always support both light and dark mode for custom icons by using the `isdark` prop in your SVG component.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-23T12:46:52.420Z
Learning: Custom SVG icon components in React should always support both light and dark mode by accepting an 'isdark' prop and adjusting colors accordingly.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/frontend_development.mdc:0-0
Timestamp: 2025-06-23T12:46:42.048Z
Learning: Custom React Flow node types should be implemented as memoized components, using Handle components for connection points and supporting optional icons and labels.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/frontend_development.mdc:0-0
Timestamp: 2025-06-23T12:46:42.048Z
Learning: React Flow should be used for flow graph visualization, with nodes and edges passed as props, and changes handled via onNodesChange and onEdgesChange callbacks.
src/frontend/src/icons/GoogleTasks/googletasks.jsx (10)
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-30T14:40:50.836Z
Learning: Applies to src/frontend/src/icons/*/* : Create a new directory for your icon in `src/frontend/src/icons/YourIconName/` and add your SVG as a React component (e.g., `YourIconName.jsx`) that uses the `isdark` prop to support both light and dark mode.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/frontend_development.mdc:0-0
Timestamp: 2025-06-30T14:40:29.494Z
Learning: Applies to src/frontend/src/icons/**/*.{ts,tsx,js,jsx} : Use Lucide React for icons in frontend components.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-30T14:40:50.836Z
Learning: Applies to src/frontend/src/icons/*/index.tsx : Create an `index.tsx` in your icon directory that exports your icon using `forwardRef` and passes the `isdark` prop.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-23T12:46:52.420Z
Learning: Export custom icon components in React using React.forwardRef to ensure proper ref forwarding and compatibility with parent components.
Learnt from: dolfim-ibm
PR: langflow-ai/langflow#8394
File: src/frontend/src/icons/Docling/index.tsx:4-6
Timestamp: 2025-06-16T11:14:04.200Z
Learning: The Langflow codebase consistently uses `React.PropsWithChildren<{}>` as the prop type for all icon components using forwardRef, rather than `React.SVGProps<SVGSVGElement>`. This is an established pattern across hundreds of icon files in src/frontend/src/icons/.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-23T12:46:52.420Z
Learning: Custom SVG icon components in React should always support both light and dark mode by accepting an 'isdark' prop and adjusting colors accordingly.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-23T12:46:52.420Z
Learning: When implementing a new component icon in Langflow, ensure the icon name is clear, recognizable, and used consistently across both backend (Python 'icon' attribute) and frontend (React/TypeScript mapping).
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/frontend_development.mdc:0-0
Timestamp: 2025-06-30T14:40:29.494Z
Learning: Applies to src/frontend/src/components/**/*FlowGraph.tsx : Use React Flow for flow graph visualization components.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-30T14:40:50.836Z
Learning: Applies to src/frontend/src/icons/*/*.jsx : Always support both light and dark mode for custom icons by using the `isdark` prop in your SVG component.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/frontend_development.mdc:0-0
Timestamp: 2025-06-30T14:40:29.494Z
Learning: Applies to src/frontend/**/*.{ts,tsx} : Use React 18 with TypeScript for all UI components and frontend logic.
src/frontend/src/icons/googlemeet/googlemeet.jsx (9)
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-30T14:40:50.836Z
Learning: Applies to src/frontend/src/icons/*/* : Create a new directory for your icon in `src/frontend/src/icons/YourIconName/` and add your SVG as a React component (e.g., `YourIconName.jsx`) that uses the `isdark` prop to support both light and dark mode.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-23T12:46:52.420Z
Learning: Export custom icon components in React using React.forwardRef to ensure proper ref forwarding and compatibility with parent components.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-23T12:46:52.420Z
Learning: When implementing a new component icon in Langflow, ensure the icon name is clear, recognizable, and used consistently across both backend (Python 'icon' attribute) and frontend (React/TypeScript mapping).
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/frontend_development.mdc:0-0
Timestamp: 2025-06-30T14:40:29.494Z
Learning: Applies to src/frontend/src/icons/**/*.{ts,tsx,js,jsx} : Use Lucide React for icons in frontend components.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-30T14:40:50.836Z
Learning: Applies to src/frontend/src/icons/*/index.tsx : Create an `index.tsx` in your icon directory that exports your icon using `forwardRef` and passes the `isdark` prop.
Learnt from: dolfim-ibm
PR: langflow-ai/langflow#8394
File: src/frontend/src/icons/Docling/index.tsx:4-6
Timestamp: 2025-06-16T11:14:04.200Z
Learning: The Langflow codebase consistently uses `React.PropsWithChildren<{}>` as the prop type for all icon components using forwardRef, rather than `React.SVGProps<SVGSVGElement>`. This is an established pattern across hundreds of icon files in src/frontend/src/icons/.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-23T12:46:52.420Z
Learning: Custom SVG icon components in React should always support both light and dark mode by accepting an 'isdark' prop and adjusting colors accordingly.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-30T14:40:50.836Z
Learning: Applies to src/frontend/src/icons/*/*.jsx : Always support both light and dark mode for custom icons by using the `isdark` prop in your SVG component.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/frontend_development.mdc:0-0
Timestamp: 2025-06-30T14:40:29.494Z
Learning: Applies to src/frontend/src/components/**/*FlowGraph.tsx : Use React Flow for flow graph visualization components.
src/frontend/src/icons/googlemeet/index.tsx (11)
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-23T12:46:52.420Z
Learning: Export custom icon components in React using React.forwardRef to ensure proper ref forwarding and compatibility with parent components.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-30T14:40:50.836Z
Learning: Applies to src/frontend/src/icons/*/index.tsx : Create an `index.tsx` in your icon directory that exports your icon using `forwardRef` and passes the `isdark` prop.
Learnt from: dolfim-ibm
PR: langflow-ai/langflow#8394
File: src/frontend/src/icons/Docling/index.tsx:4-6
Timestamp: 2025-06-16T11:14:04.200Z
Learning: The Langflow codebase consistently uses `React.PropsWithChildren<{}>` as the prop type for all icon components using forwardRef, rather than `React.SVGProps<SVGSVGElement>`. This is an established pattern across hundreds of icon files in src/frontend/src/icons/.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/frontend_development.mdc:0-0
Timestamp: 2025-06-30T14:40:29.494Z
Learning: Applies to src/frontend/src/icons/**/*.{ts,tsx,js,jsx} : Use Lucide React for icons in frontend components.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-30T14:40:50.836Z
Learning: Applies to src/frontend/src/icons/*/* : Create a new directory for your icon in `src/frontend/src/icons/YourIconName/` and add your SVG as a React component (e.g., `YourIconName.jsx`) that uses the `isdark` prop to support both light and dark mode.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/frontend_development.mdc:0-0
Timestamp: 2025-06-30T14:40:29.494Z
Learning: Applies to src/frontend/src/components/**/*FlowGraph.tsx : Use React Flow for flow graph visualization components.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-23T12:46:52.420Z
Learning: When implementing a new component icon in Langflow, ensure the icon name is clear, recognizable, and used consistently across both backend (Python 'icon' attribute) and frontend (React/TypeScript mapping).
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/frontend_development.mdc:0-0
Timestamp: 2025-06-30T14:40:29.494Z
Learning: Applies to src/frontend/**/*.{ts,tsx} : Use React 18 with TypeScript for all UI components and frontend logic.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-23T12:46:52.420Z
Learning: Custom SVG icon components in React should always support both light and dark mode by accepting an 'isdark' prop and adjusting colors accordingly.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-30T14:40:50.836Z
Learning: Applies to src/frontend/src/icons/*/*.jsx : Always support both light and dark mode for custom icons by using the `isdark` prop in your SVG component.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/frontend_development.mdc:0-0
Timestamp: 2025-06-23T12:46:42.048Z
Learning: Custom React Flow node types should be implemented as memoized components, using Handle components for connection points and supporting optional icons and labels.
src/frontend/src/icons/linear/index.tsx (11)
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-23T12:46:52.420Z
Learning: Export custom icon components in React using React.forwardRef to ensure proper ref forwarding and compatibility with parent components.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-30T14:40:50.836Z
Learning: Applies to src/frontend/src/icons/*/index.tsx : Create an `index.tsx` in your icon directory that exports your icon using `forwardRef` and passes the `isdark` prop.
Learnt from: dolfim-ibm
PR: langflow-ai/langflow#8394
File: src/frontend/src/icons/Docling/index.tsx:4-6
Timestamp: 2025-06-16T11:14:04.200Z
Learning: The Langflow codebase consistently uses `React.PropsWithChildren<{}>` as the prop type for all icon components using forwardRef, rather than `React.SVGProps<SVGSVGElement>`. This is an established pattern across hundreds of icon files in src/frontend/src/icons/.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/frontend_development.mdc:0-0
Timestamp: 2025-06-30T14:40:29.494Z
Learning: Applies to src/frontend/src/icons/**/*.{ts,tsx,js,jsx} : Use Lucide React for icons in frontend components.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-30T14:40:50.836Z
Learning: Applies to src/frontend/src/icons/*/* : Create a new directory for your icon in `src/frontend/src/icons/YourIconName/` and add your SVG as a React component (e.g., `YourIconName.jsx`) that uses the `isdark` prop to support both light and dark mode.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/frontend_development.mdc:0-0
Timestamp: 2025-06-30T14:40:29.494Z
Learning: Applies to src/frontend/src/components/**/*FlowGraph.tsx : Use React Flow for flow graph visualization components.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-23T12:46:52.420Z
Learning: When implementing a new component icon in Langflow, ensure the icon name is clear, recognizable, and used consistently across both backend (Python 'icon' attribute) and frontend (React/TypeScript mapping).
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-30T14:40:50.836Z
Learning: Applies to src/frontend/src/icons/*/*.jsx : Always support both light and dark mode for custom icons by using the `isdark` prop in your SVG component.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-30T14:40:50.836Z
Learning: Applies to src/frontend/src/icons/lazyIconImports.ts : Add your icon to the `lazyIconsMapping` object in `src/frontend/src/icons/lazyIconImports.ts` with a key that matches the backend icon string exactly.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-23T12:46:52.420Z
Learning: Custom SVG icon components in React should always support both light and dark mode by accepting an 'isdark' prop and adjusting colors accordingly.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/frontend_development.mdc:0-0
Timestamp: 2025-06-23T12:46:42.048Z
Learning: Custom React Flow node types should be implemented as memoized components, using Handle components for connection points and supporting optional icons and labels.
src/frontend/src/icons/googlesheets/index.tsx (13)
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-23T12:46:52.420Z
Learning: Export custom icon components in React using React.forwardRef to ensure proper ref forwarding and compatibility with parent components.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-30T14:40:50.836Z
Learning: Applies to src/frontend/src/icons/*/index.tsx : Create an `index.tsx` in your icon directory that exports your icon using `forwardRef` and passes the `isdark` prop.
Learnt from: dolfim-ibm
PR: langflow-ai/langflow#8394
File: src/frontend/src/icons/Docling/index.tsx:4-6
Timestamp: 2025-06-16T11:14:04.200Z
Learning: The Langflow codebase consistently uses `React.PropsWithChildren<{}>` as the prop type for all icon components using forwardRef, rather than `React.SVGProps<SVGSVGElement>`. This is an established pattern across hundreds of icon files in src/frontend/src/icons/.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/frontend_development.mdc:0-0
Timestamp: 2025-06-30T14:40:29.494Z
Learning: Applies to src/frontend/src/icons/**/*.{ts,tsx,js,jsx} : Use Lucide React for icons in frontend components.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-30T14:40:50.836Z
Learning: Applies to src/frontend/src/icons/*/* : Create a new directory for your icon in `src/frontend/src/icons/YourIconName/` and add your SVG as a React component (e.g., `YourIconName.jsx`) that uses the `isdark` prop to support both light and dark mode.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/frontend_development.mdc:0-0
Timestamp: 2025-06-30T14:40:29.494Z
Learning: Applies to src/frontend/src/components/**/*FlowGraph.tsx : Use React Flow for flow graph visualization components.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-23T12:46:52.420Z
Learning: When implementing a new component icon in Langflow, ensure the icon name is clear, recognizable, and used consistently across both backend (Python 'icon' attribute) and frontend (React/TypeScript mapping).
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/frontend_development.mdc:0-0
Timestamp: 2025-06-30T14:40:29.494Z
Learning: Applies to src/frontend/**/*.{ts,tsx} : Use React 18 with TypeScript for all UI components and frontend logic.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-30T14:40:50.836Z
Learning: Applies to src/frontend/src/icons/lazyIconImports.ts : Add your icon to the `lazyIconsMapping` object in `src/frontend/src/icons/lazyIconImports.ts` with a key that matches the backend icon string exactly.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-30T14:40:50.836Z
Learning: Applies to src/frontend/src/icons/*/*.jsx : Always support both light and dark mode for custom icons by using the `isdark` prop in your SVG component.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-23T12:46:52.420Z
Learning: Custom SVG icon components in React should always support both light and dark mode by accepting an 'isdark' prop and adjusting colors accordingly.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/frontend_development.mdc:0-0
Timestamp: 2025-06-23T12:46:42.048Z
Learning: Custom React Flow node types should be implemented as memoized components, using Handle components for connection points and supporting optional icons and labels.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/frontend_development.mdc:0-0
Timestamp: 2025-06-23T12:46:42.048Z
Learning: React Flow should be used for flow graph visualization, with nodes and edges passed as props, and changes handled via onNodesChange and onEdgesChange callbacks.
src/frontend/src/icons/reddit/reddit.jsx (10)
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-30T14:40:50.836Z
Learning: Applies to src/frontend/src/icons/*/* : Create a new directory for your icon in `src/frontend/src/icons/YourIconName/` and add your SVG as a React component (e.g., `YourIconName.jsx`) that uses the `isdark` prop to support both light and dark mode.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-23T12:46:52.420Z
Learning: Export custom icon components in React using React.forwardRef to ensure proper ref forwarding and compatibility with parent components.
Learnt from: dolfim-ibm
PR: langflow-ai/langflow#8394
File: src/frontend/src/icons/Docling/index.tsx:4-6
Timestamp: 2025-06-16T11:14:04.200Z
Learning: The Langflow codebase consistently uses `React.PropsWithChildren<{}>` as the prop type for all icon components using forwardRef, rather than `React.SVGProps<SVGSVGElement>`. This is an established pattern across hundreds of icon files in src/frontend/src/icons/.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/frontend_development.mdc:0-0
Timestamp: 2025-06-30T14:40:29.494Z
Learning: Applies to src/frontend/src/icons/**/*.{ts,tsx,js,jsx} : Use Lucide React for icons in frontend components.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-23T12:46:52.420Z
Learning: Custom SVG icon components in React should always support both light and dark mode by accepting an 'isdark' prop and adjusting colors accordingly.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-30T14:40:50.836Z
Learning: Applies to src/frontend/src/icons/*/index.tsx : Create an `index.tsx` in your icon directory that exports your icon using `forwardRef` and passes the `isdark` prop.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-30T14:40:50.836Z
Learning: Applies to src/frontend/src/icons/*/*.jsx : Always support both light and dark mode for custom icons by using the `isdark` prop in your SVG component.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-23T12:46:52.420Z
Learning: When implementing a new component icon in Langflow, ensure the icon name is clear, recognizable, and used consistently across both backend (Python 'icon' attribute) and frontend (React/TypeScript mapping).
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/frontend_development.mdc:0-0
Timestamp: 2025-06-30T14:40:29.494Z
Learning: Applies to src/frontend/src/components/**/*FlowGraph.tsx : Use React Flow for flow graph visualization components.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/frontend_development.mdc:0-0
Timestamp: 2025-06-30T14:40:29.494Z
Learning: Applies to src/frontend/**/*.{ts,tsx} : Use React 18 with TypeScript for all UI components and frontend logic.
src/frontend/src/icons/linear/linear.jsx (11)
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-30T14:40:50.836Z
Learning: Applies to src/frontend/src/icons/*/* : Create a new directory for your icon in `src/frontend/src/icons/YourIconName/` and add your SVG as a React component (e.g., `YourIconName.jsx`) that uses the `isdark` prop to support both light and dark mode.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-30T14:40:50.836Z
Learning: Applies to src/frontend/src/icons/*/index.tsx : Create an `index.tsx` in your icon directory that exports your icon using `forwardRef` and passes the `isdark` prop.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/frontend_development.mdc:0-0
Timestamp: 2025-06-30T14:40:29.494Z
Learning: Applies to src/frontend/src/icons/**/*.{ts,tsx,js,jsx} : Use Lucide React for icons in frontend components.
Learnt from: dolfim-ibm
PR: langflow-ai/langflow#8394
File: src/frontend/src/icons/Docling/index.tsx:4-6
Timestamp: 2025-06-16T11:14:04.200Z
Learning: The Langflow codebase consistently uses `React.PropsWithChildren<{}>` as the prop type for all icon components using forwardRef, rather than `React.SVGProps<SVGSVGElement>`. This is an established pattern across hundreds of icon files in src/frontend/src/icons/.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-23T12:46:52.420Z
Learning: Export custom icon components in React using React.forwardRef to ensure proper ref forwarding and compatibility with parent components.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-30T14:40:50.836Z
Learning: Applies to src/frontend/src/icons/*/*.jsx : Always support both light and dark mode for custom icons by using the `isdark` prop in your SVG component.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-23T12:46:52.420Z
Learning: When implementing a new component icon in Langflow, ensure the icon name is clear, recognizable, and used consistently across both backend (Python 'icon' attribute) and frontend (React/TypeScript mapping).
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-23T12:46:52.420Z
Learning: Custom SVG icon components in React should always support both light and dark mode by accepting an 'isdark' prop and adjusting colors accordingly.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/frontend_development.mdc:0-0
Timestamp: 2025-06-30T14:40:29.494Z
Learning: Applies to src/frontend/src/components/**/*FlowGraph.tsx : Use React Flow for flow graph visualization components.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/frontend_development.mdc:0-0
Timestamp: 2025-06-23T12:46:42.048Z
Learning: Custom React Flow node types should be implemented as memoized components, using Handle components for connection points and supporting optional icons and labels.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-30T14:40:50.836Z
Learning: Applies to src/frontend/src/icons/lazyIconImports.ts : Add your icon to the `lazyIconsMapping` object in `src/frontend/src/icons/lazyIconImports.ts` with a key that matches the backend icon string exactly.
src/frontend/src/icons/reddit/index.tsx (12)
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-23T12:46:52.420Z
Learning: Export custom icon components in React using React.forwardRef to ensure proper ref forwarding and compatibility with parent components.
Learnt from: dolfim-ibm
PR: langflow-ai/langflow#8394
File: src/frontend/src/icons/Docling/index.tsx:4-6
Timestamp: 2025-06-16T11:14:04.200Z
Learning: The Langflow codebase consistently uses `React.PropsWithChildren<{}>` as the prop type for all icon components using forwardRef, rather than `React.SVGProps<SVGSVGElement>`. This is an established pattern across hundreds of icon files in src/frontend/src/icons/.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-30T14:40:50.836Z
Learning: Applies to src/frontend/src/icons/*/index.tsx : Create an `index.tsx` in your icon directory that exports your icon using `forwardRef` and passes the `isdark` prop.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/frontend_development.mdc:0-0
Timestamp: 2025-06-30T14:40:29.494Z
Learning: Applies to src/frontend/src/icons/**/*.{ts,tsx,js,jsx} : Use Lucide React for icons in frontend components.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-30T14:40:50.836Z
Learning: Applies to src/frontend/src/icons/*/* : Create a new directory for your icon in `src/frontend/src/icons/YourIconName/` and add your SVG as a React component (e.g., `YourIconName.jsx`) that uses the `isdark` prop to support both light and dark mode.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-23T12:46:52.420Z
Learning: Custom SVG icon components in React should always support both light and dark mode by accepting an 'isdark' prop and adjusting colors accordingly.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/frontend_development.mdc:0-0
Timestamp: 2025-06-30T14:40:29.494Z
Learning: Applies to src/frontend/src/components/**/*FlowGraph.tsx : Use React Flow for flow graph visualization components.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-23T12:46:52.420Z
Learning: When implementing a new component icon in Langflow, ensure the icon name is clear, recognizable, and used consistently across both backend (Python 'icon' attribute) and frontend (React/TypeScript mapping).
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/frontend_development.mdc:0-0
Timestamp: 2025-06-30T14:40:29.494Z
Learning: Applies to src/frontend/**/*.{ts,tsx} : Use React 18 with TypeScript for all UI components and frontend logic.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-30T14:40:50.836Z
Learning: Applies to src/frontend/src/icons/*/*.jsx : Always support both light and dark mode for custom icons by using the `isdark` prop in your SVG component.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/frontend_development.mdc:0-0
Timestamp: 2025-06-23T12:46:42.048Z
Learning: Custom React Flow node types should be implemented as memoized components, using Handle components for connection points and supporting optional icons and labels.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/frontend_development.mdc:0-0
Timestamp: 2025-06-23T12:46:42.048Z
Learning: React Flow should be used for flow graph visualization, with nodes and edges passed as props, and changes handled via onNodesChange and onEdgesChange callbacks.
src/backend/base/langflow/components/composio/todoist_composio.py (8)
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/backend_development.mdc:0-0
Timestamp: 2025-06-30T14:39:17.428Z
Learning: Applies to src/backend/base/langflow/components/**/__init__.py : Update __init__.py with alphabetical imports when adding new components
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/backend_development.mdc:0-0
Timestamp: 2025-06-30T14:39:17.428Z
Learning: Applies to src/backend/base/langflow/components/**/*.py : Add new backend components to the appropriate subdirectory under src/backend/base/langflow/components/
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/backend_development.mdc:0-0
Timestamp: 2025-06-30T14:39:17.428Z
Learning: Applies to src/backend/tests/unit/components/**/*.py : Create comprehensive unit tests for all new components
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/backend_development.mdc:0-0
Timestamp: 2025-06-30T14:39:17.428Z
Learning: Applies to src/backend/base/langflow/components/**/*.py : Implement async component methods using async def and await for asynchronous operations
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/testing.mdc:0-0
Timestamp: 2025-06-30T14:41:58.837Z
Learning: Applies to src/backend/tests/**/*.py : Inherit from the appropriate ComponentTestBase class ('ComponentTestBase', 'ComponentTestBaseWithClient', or 'ComponentTestBaseWithoutClient') and provide the required fixtures: 'component_class', 'default_kwargs', and 'file_names_mapping' when adding a new component test.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-30T14:40:50.836Z
Learning: Applies to src/backend/**/components/**/*.py : In your Python component class, set the `icon` attribute to a string matching the frontend icon mapping exactly (case-sensitive).
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-30T14:40:50.836Z
Learning: Applies to src/backend/**/*component*.py : In your Python component class, set the `icon` attribute to a string matching the frontend icon mapping exactly (case-sensitive).
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/backend_development.mdc:0-0
Timestamp: 2025-06-30T14:39:17.428Z
Learning: Applies to src/backend/base/langflow/components/**/*.py : Use asyncio.create_task for background work in async components and ensure proper cleanup on cancellation
src/frontend/src/icons/googlemaps/googlemaps.jsx (11)
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-23T12:46:52.420Z
Learning: Export custom icon components in React using React.forwardRef to ensure proper ref forwarding and compatibility with parent components.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-30T14:40:50.836Z
Learning: Applies to src/frontend/src/icons/*/* : Create a new directory for your icon in `src/frontend/src/icons/YourIconName/` and add your SVG as a React component (e.g., `YourIconName.jsx`) that uses the `isdark` prop to support both light and dark mode.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-30T14:40:50.836Z
Learning: Applies to src/frontend/src/icons/*/index.tsx : Create an `index.tsx` in your icon directory that exports your icon using `forwardRef` and passes the `isdark` prop.
Learnt from: dolfim-ibm
PR: langflow-ai/langflow#8394
File: src/frontend/src/icons/Docling/index.tsx:4-6
Timestamp: 2025-06-16T11:14:04.200Z
Learning: The Langflow codebase consistently uses `React.PropsWithChildren<{}>` as the prop type for all icon components using forwardRef, rather than `React.SVGProps<SVGSVGElement>`. This is an established pattern across hundreds of icon files in src/frontend/src/icons/.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/frontend_development.mdc:0-0
Timestamp: 2025-06-30T14:40:29.494Z
Learning: Applies to src/frontend/src/icons/**/*.{ts,tsx,js,jsx} : Use Lucide React for icons in frontend components.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-23T12:46:52.420Z
Learning: When implementing a new component icon in Langflow, ensure the icon name is clear, recognizable, and used consistently across both backend (Python 'icon' attribute) and frontend (React/TypeScript mapping).
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-23T12:46:52.420Z
Learning: Custom SVG icon components in React should always support both light and dark mode by accepting an 'isdark' prop and adjusting colors accordingly.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-30T14:40:50.836Z
Learning: Applies to src/frontend/src/icons/*/*.jsx : Always support both light and dark mode for custom icons by using the `isdark` prop in your SVG component.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-30T14:40:50.836Z
Learning: Applies to src/frontend/src/icons/lazyIconImports.ts : Add your icon to the `lazyIconsMapping` object in `src/frontend/src/icons/lazyIconImports.ts` with a key that matches the backend icon string exactly.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/frontend_development.mdc:0-0
Timestamp: 2025-06-30T14:40:29.494Z
Learning: Applies to src/frontend/src/components/**/*FlowGraph.tsx : Use React Flow for flow graph visualization components.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/frontend_development.mdc:0-0
Timestamp: 2025-06-23T12:46:42.048Z
Learning: Custom React Flow node types should be implemented as memoized components, using Handle components for connection points and supporting optional icons and labels.
src/frontend/src/icons/googlesheets/googlesheets.jsx (11)
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-30T14:40:50.836Z
Learning: Applies to src/frontend/src/icons/*/* : Create a new directory for your icon in `src/frontend/src/icons/YourIconName/` and add your SVG as a React component (e.g., `YourIconName.jsx`) that uses the `isdark` prop to support both light and dark mode.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-23T12:46:52.420Z
Learning: Export custom icon components in React using React.forwardRef to ensure proper ref forwarding and compatibility with parent components.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-30T14:40:50.836Z
Learning: Applies to src/frontend/src/icons/*/index.tsx : Create an `index.tsx` in your icon directory that exports your icon using `forwardRef` and passes the `isdark` prop.
Learnt from: dolfim-ibm
PR: langflow-ai/langflow#8394
File: src/frontend/src/icons/Docling/index.tsx:4-6
Timestamp: 2025-06-16T11:14:04.200Z
Learning: The Langflow codebase consistently uses `React.PropsWithChildren<{}>` as the prop type for all icon components using forwardRef, rather than `React.SVGProps<SVGSVGElement>`. This is an established pattern across hundreds of icon files in src/frontend/src/icons/.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/frontend_development.mdc:0-0
Timestamp: 2025-06-30T14:40:29.494Z
Learning: Applies to src/frontend/src/icons/**/*.{ts,tsx,js,jsx} : Use Lucide React for icons in frontend components.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-23T12:46:52.420Z
Learning: When implementing a new component icon in Langflow, ensure the icon name is clear, recognizable, and used consistently across both backend (Python 'icon' attribute) and frontend (React/TypeScript mapping).
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-30T14:40:50.836Z
Learning: Applies to src/frontend/src/icons/*/*.jsx : Always support both light and dark mode for custom icons by using the `isdark` prop in your SVG component.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-23T12:46:52.420Z
Learning: Custom SVG icon components in React should always support both light and dark mode by accepting an 'isdark' prop and adjusting colors accordingly.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-30T14:40:50.836Z
Learning: Applies to src/frontend/src/icons/lazyIconImports.ts : Add your icon to the `lazyIconsMapping` object in `src/frontend/src/icons/lazyIconImports.ts` with a key that matches the backend icon string exactly.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/frontend_development.mdc:0-0
Timestamp: 2025-06-30T14:40:29.494Z
Learning: Applies to src/frontend/src/components/**/*FlowGraph.tsx : Use React Flow for flow graph visualization components.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/frontend_development.mdc:0-0
Timestamp: 2025-06-23T12:46:42.048Z
Learning: Custom React Flow node types should be implemented as memoized components, using Handle components for connection points and supporting optional icons and labels.
src/backend/base/langflow/components/composio/googlemeet_composio.py (4)
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/backend_development.mdc:0-0
Timestamp: 2025-06-30T14:39:17.428Z
Learning: Applies to src/backend/base/langflow/components/**/*.py : Add new backend components to the appropriate subdirectory under src/backend/base/langflow/components/
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/backend_development.mdc:0-0
Timestamp: 2025-06-30T14:39:17.428Z
Learning: Applies to src/backend/base/langflow/components/**/__init__.py : Update __init__.py with alphabetical imports when adding new components
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/backend_development.mdc:0-0
Timestamp: 2025-06-30T14:39:17.428Z
Learning: Applies to src/backend/base/langflow/components/**/*.py : Implement async component methods using async def and await for asynchronous operations
Learnt from: ogabrielluiz
PR: langflow-ai/langflow#0
File: :0-0
Timestamp: 2025-06-26T19:43:18.260Z
Learning: In langflow custom components, the `module_name` parameter is now propagated through template building functions to add module metadata and code hashes to frontend nodes for better component tracking and debugging.
src/frontend/src/icons/googlemaps/index.tsx (13)
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-23T12:46:52.420Z
Learning: Export custom icon components in React using React.forwardRef to ensure proper ref forwarding and compatibility with parent components.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-30T14:40:50.836Z
Learning: Applies to src/frontend/src/icons/*/index.tsx : Create an `index.tsx` in your icon directory that exports your icon using `forwardRef` and passes the `isdark` prop.
Learnt from: dolfim-ibm
PR: langflow-ai/langflow#8394
File: src/frontend/src/icons/Docling/index.tsx:4-6
Timestamp: 2025-06-16T11:14:04.200Z
Learning: The Langflow codebase consistently uses `React.PropsWithChildren<{}>` as the prop type for all icon components using forwardRef, rather than `React.SVGProps<SVGSVGElement>`. This is an established pattern across hundreds of icon files in src/frontend/src/icons/.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/frontend_development.mdc:0-0
Timestamp: 2025-06-30T14:40:29.494Z
Learning: Applies to src/frontend/src/icons/**/*.{ts,tsx,js,jsx} : Use Lucide React for icons in frontend components.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-30T14:40:50.836Z
Learning: Applies to src/frontend/src/icons/*/* : Create a new directory for your icon in `src/frontend/src/icons/YourIconName/` and add your SVG as a React component (e.g., `YourIconName.jsx`) that uses the `isdark` prop to support both light and dark mode.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/frontend_development.mdc:0-0
Timestamp: 2025-06-30T14:40:29.494Z
Learning: Applies to src/frontend/src/components/**/*FlowGraph.tsx : Use React Flow for flow graph visualization components.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-30T14:40:50.836Z
Learning: Applies to src/frontend/src/icons/lazyIconImports.ts : Add your icon to the `lazyIconsMapping` object in `src/frontend/src/icons/lazyIconImports.ts` with a key that matches the backend icon string exactly.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-23T12:46:52.420Z
Learning: When implementing a new component icon in Langflow, ensure the icon name is clear, recognizable, and used consistently across both backend (Python 'icon' attribute) and frontend (React/TypeScript mapping).
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/frontend_development.mdc:0-0
Timestamp: 2025-06-30T14:40:29.494Z
Learning: Applies to src/frontend/**/*.{ts,tsx} : Use React 18 with TypeScript for all UI components and frontend logic.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-30T14:40:50.836Z
Learning: Applies to src/frontend/src/icons/*/*.jsx : Always support both light and dark mode for custom icons by using the `isdark` prop in your SVG component.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-23T12:46:52.420Z
Learning: Custom SVG icon components in React should always support both light and dark mode by accepting an 'isdark' prop and adjusting colors accordingly.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/frontend_development.mdc:0-0
Timestamp: 2025-06-23T12:46:42.048Z
Learning: Custom React Flow node types should be implemented as memoized components, using Handle components for connection points and supporting optional icons and labels.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/frontend_development.mdc:0-0
Timestamp: 2025-06-23T12:46:42.048Z
Learning: React Flow should be used for flow graph visualization, with nodes and edges passed as props, and changes handled via onNodesChange and onEdgesChange callbacks.
src/frontend/src/icons/GoogleTasks/index.tsx (12)
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-23T12:46:52.420Z
Learning: Export custom icon components in React using React.forwardRef to ensure proper ref forwarding and compatibility with parent components.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-30T14:40:50.836Z
Learning: Applies to src/frontend/src/icons/*/index.tsx : Create an `index.tsx` in your icon directory that exports your icon using `forwardRef` and passes the `isdark` prop.
Learnt from: dolfim-ibm
PR: langflow-ai/langflow#8394
File: src/frontend/src/icons/Docling/index.tsx:4-6
Timestamp: 2025-06-16T11:14:04.200Z
Learning: The Langflow codebase consistently uses `React.PropsWithChildren<{}>` as the prop type for all icon components using forwardRef, rather than `React.SVGProps<SVGSVGElement>`. This is an established pattern across hundreds of icon files in src/frontend/src/icons/.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/frontend_development.mdc:0-0
Timestamp: 2025-06-30T14:40:29.494Z
Learning: Applies to src/frontend/src/icons/**/*.{ts,tsx,js,jsx} : Use Lucide React for icons in frontend components.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-30T14:40:50.836Z
Learning: Applies to src/frontend/src/icons/*/* : Create a new directory for your icon in `src/frontend/src/icons/YourIconName/` and add your SVG as a React component (e.g., `YourIconName.jsx`) that uses the `isdark` prop to support both light and dark mode.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/frontend_development.mdc:0-0
Timestamp: 2025-06-30T14:40:29.494Z
Learning: Applies to src/frontend/src/components/**/*FlowGraph.tsx : Use React Flow for flow graph visualization components.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/frontend_development.mdc:0-0
Timestamp: 2025-06-30T14:40:29.494Z
Learning: Applies to src/frontend/**/*.{ts,tsx} : Use React 18 with TypeScript for all UI components and frontend logic.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-23T12:46:52.420Z
Learning: When implementing a new component icon in Langflow, ensure the icon name is clear, recognizable, and used consistently across both backend (Python 'icon' attribute) and frontend (React/TypeScript mapping).
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-30T14:40:50.836Z
Learning: Applies to src/frontend/src/icons/lazyIconImports.ts : Add your icon to the `lazyIconsMapping` object in `src/frontend/src/icons/lazyIconImports.ts` with a key that matches the backend icon string exactly.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-30T14:40:50.836Z
Learning: Applies to src/frontend/src/icons/*/*.jsx : Always support both light and dark mode for custom icons by using the `isdark` prop in your SVG component.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-23T12:46:52.420Z
Learning: Custom SVG icon components in React should always support both light and dark mode by accepting an 'isdark' prop and adjusting colors accordingly.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/frontend_development.mdc:0-0
Timestamp: 2025-06-23T12:46:42.048Z
Learning: Custom React Flow node types should be implemented as memoized components, using Handle components for connection points and supporting optional icons and labels.
src/frontend/src/icons/zoom/zoom.jsx (11)
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-23T12:46:52.420Z
Learning: Export custom icon components in React using React.forwardRef to ensure proper ref forwarding and compatibility with parent components.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-30T14:40:50.836Z
Learning: Applies to src/frontend/src/icons/*/* : Create a new directory for your icon in `src/frontend/src/icons/YourIconName/` and add your SVG as a React component (e.g., `YourIconName.jsx`) that uses the `isdark` prop to support both light and dark mode.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-30T14:40:50.836Z
Learning: Applies to src/frontend/src/icons/*/index.tsx : Create an `index.tsx` in your icon directory that exports your icon using `forwardRef` and passes the `isdark` prop.
Learnt from: dolfim-ibm
PR: langflow-ai/langflow#8394
File: src/frontend/src/icons/Docling/index.tsx:4-6
Timestamp: 2025-06-16T11:14:04.200Z
Learning: The Langflow codebase consistently uses `React.PropsWithChildren<{}>` as the prop type for all icon components using forwardRef, rather than `React.SVGProps<SVGSVGElement>`. This is an established pattern across hundreds of icon files in src/frontend/src/icons/.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/frontend_development.mdc:0-0
Timestamp: 2025-06-30T14:40:29.494Z
Learning: Applies to src/frontend/src/icons/**/*.{ts,tsx,js,jsx} : Use Lucide React for icons in frontend components.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-23T12:46:52.420Z
Learning: When implementing a new component icon in Langflow, ensure the icon name is clear, recognizable, and used consistently across both backend (Python 'icon' attribute) and frontend (React/TypeScript mapping).
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-23T12:46:52.420Z
Learning: Custom SVG icon components in React should always support both light and dark mode by accepting an 'isdark' prop and adjusting colors accordingly.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-30T14:40:50.836Z
Learning: Applies to src/frontend/src/icons/*/*.jsx : Always support both light and dark mode for custom icons by using the `isdark` prop in your SVG component.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/frontend_development.mdc:0-0
Timestamp: 2025-06-30T14:40:29.494Z
Learning: Applies to src/frontend/src/components/**/*FlowGraph.tsx : Use React Flow for flow graph visualization components.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/frontend_development.mdc:0-0
Timestamp: 2025-06-30T14:40:29.494Z
Learning: Applies to src/frontend/**/*.{ts,tsx} : Use React 18 with TypeScript for all UI components and frontend logic.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/frontend_development.mdc:0-0
Timestamp: 2025-06-23T12:46:42.048Z
Learning: Custom React Flow node types should be implemented as memoized components, using Handle components for connection points and supporting optional icons and labels.
src/frontend/src/icons/todoist/todoist.jsx (10)
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-30T14:40:50.836Z
Learning: Applies to src/frontend/src/icons/*/* : Create a new directory for your icon in `src/frontend/src/icons/YourIconName/` and add your SVG as a React component (e.g., `YourIconName.jsx`) that uses the `isdark` prop to support both light and dark mode.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-30T14:40:50.836Z
Learning: Applies to src/frontend/src/icons/*/index.tsx : Create an `index.tsx` in your icon directory that exports your icon using `forwardRef` and passes the `isdark` prop.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/frontend_development.mdc:0-0
Timestamp: 2025-06-30T14:40:29.494Z
Learning: Applies to src/frontend/src/icons/**/*.{ts,tsx,js,jsx} : Use Lucide React for icons in frontend components.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-23T12:46:52.420Z
Learning: Export custom icon components in React using React.forwardRef to ensure proper ref forwarding and compatibility with parent components.
Learnt from: dolfim-ibm
PR: langflow-ai/langflow#8394
File: src/frontend/src/icons/Docling/index.tsx:4-6
Timestamp: 2025-06-16T11:14:04.200Z
Learning: The Langflow codebase consistently uses `React.PropsWithChildren<{}>` as the prop type for all icon components using forwardRef, rather than `React.SVGProps<SVGSVGElement>`. This is an established pattern across hundreds of icon files in src/frontend/src/icons/.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-30T14:40:50.836Z
Learning: Applies to src/frontend/src/icons/*/*.jsx : Always support both light and dark mode for custom icons by using the `isdark` prop in your SVG component.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-23T12:46:52.420Z
Learning: Custom SVG icon components in React should always support both light and dark mode by accepting an 'isdark' prop and adjusting colors accordingly.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-23T12:46:52.420Z
Learning: When implementing a new component icon in Langflow, ensure the icon name is clear, recognizable, and used consistently across both backend (Python 'icon' attribute) and frontend (React/TypeScript mapping).
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-30T14:40:50.836Z
Learning: Applies to src/frontend/src/icons/lazyIconImports.ts : Add your icon to the `lazyIconsMapping` object in `src/frontend/src/icons/lazyIconImports.ts` with a key that matches the backend icon string exactly.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/frontend_development.mdc:0-0
Timestamp: 2025-06-30T14:40:29.494Z
Learning: Applies to src/frontend/src/components/**/*FlowGraph.tsx : Use React Flow for flow graph visualization components.
src/backend/base/langflow/components/composio/reddit_composio.py (2)
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/backend_development.mdc:0-0
Timestamp: 2025-06-30T14:39:17.428Z
Learning: Applies to src/backend/base/langflow/components/**/*.py : Add new backend components to the appropriate subdirectory under src/backend/base/langflow/components/
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/backend_development.mdc:0-0
Timestamp: 2025-06-30T14:39:17.428Z
Learning: Applies to src/backend/base/langflow/components/**/__init__.py : Update __init__.py with alphabetical imports when adding new components
src/backend/base/langflow/components/composio/supabase_composio.py (8)
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/backend_development.mdc:0-0
Timestamp: 2025-06-30T14:39:17.428Z
Learning: Applies to src/backend/base/langflow/components/**/*.py : Add new backend components to the appropriate subdirectory under src/backend/base/langflow/components/
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/backend_development.mdc:0-0
Timestamp: 2025-06-30T14:39:17.428Z
Learning: Applies to src/backend/base/langflow/components/**/__init__.py : Update __init__.py with alphabetical imports when adding new components
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/backend_development.mdc:0-0
Timestamp: 2025-06-30T14:39:17.428Z
Learning: Applies to src/backend/base/langflow/components/**/*.py : Implement async component methods using async def and await for asynchronous operations
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-30T14:40:50.836Z
Learning: Applies to src/backend/**/components/**/*.py : In your Python component class, set the `icon` attribute to a string matching the frontend icon mapping exactly (case-sensitive).
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-30T14:40:50.836Z
Learning: Applies to src/backend/**/*component*.py : In your Python component class, set the `icon` attribute to a string matching the frontend icon mapping exactly (case-sensitive).
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/backend_development.mdc:0-0
Timestamp: 2025-06-30T14:39:17.428Z
Learning: Applies to src/backend/tests/unit/components/**/*.py : Create comprehensive unit tests for all new components
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/testing.mdc:0-0
Timestamp: 2025-06-30T14:41:58.837Z
Learning: Applies to src/backend/tests/**/*.py : Inherit from the appropriate ComponentTestBase class ('ComponentTestBase', 'ComponentTestBaseWithClient', or 'ComponentTestBaseWithoutClient') and provide the required fixtures: 'component_class', 'default_kwargs', and 'file_names_mapping' when adding a new component test.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/backend_development.mdc:0-0
Timestamp: 2025-06-30T14:39:17.428Z
Learning: Applies to src/backend/base/langflow/services/database/models/**/*.py : Place database models in src/backend/base/langflow/services/database/models/ and its subdirectories
src/frontend/src/icons/todoist/index.tsx (11)
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-23T12:46:52.420Z
Learning: Export custom icon components in React using React.forwardRef to ensure proper ref forwarding and compatibility with parent components.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-30T14:40:50.836Z
Learning: Applies to src/frontend/src/icons/*/index.tsx : Create an `index.tsx` in your icon directory that exports your icon using `forwardRef` and passes the `isdark` prop.
Learnt from: dolfim-ibm
PR: langflow-ai/langflow#8394
File: src/frontend/src/icons/Docling/index.tsx:4-6
Timestamp: 2025-06-16T11:14:04.200Z
Learning: The Langflow codebase consistently uses `React.PropsWithChildren<{}>` as the prop type for all icon components using forwardRef, rather than `React.SVGProps<SVGSVGElement>`. This is an established pattern across hundreds of icon files in src/frontend/src/icons/.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/frontend_development.mdc:0-0
Timestamp: 2025-06-30T14:40:29.494Z
Learning: Applies to src/frontend/src/icons/**/*.{ts,tsx,js,jsx} : Use Lucide React for icons in frontend components.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-30T14:40:50.836Z
Learning: Applies to src/frontend/src/icons/*/* : Create a new directory for your icon in `src/frontend/src/icons/YourIconName/` and add your SVG as a React component (e.g., `YourIconName.jsx`) that uses the `isdark` prop to support both light and dark mode.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-30T14:40:50.836Z
Learning: Applies to src/frontend/src/icons/*/*.jsx : Always support both light and dark mode for custom icons by using the `isdark` prop in your SVG component.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/frontend_development.mdc:0-0
Timestamp: 2025-06-30T14:40:29.494Z
Learning: Applies to src/frontend/**/*.{ts,tsx} : Use React 18 with TypeScript for all UI components and frontend logic.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/frontend_development.mdc:0-0
Timestamp: 2025-06-30T14:40:29.494Z
Learning: Applies to src/frontend/src/components/**/*FlowGraph.tsx : Use React Flow for flow graph visualization components.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-23T12:46:52.420Z
Learning: Custom SVG icon components in React should always support both light and dark mode by accepting an 'isdark' prop and adjusting colors accordingly.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-23T12:46:52.420Z
Learning: When implementing a new component icon in Langflow, ensure the icon name is clear, recognizable, and used consistently across both backend (Python 'icon' attribute) and frontend (React/TypeScript mapping).
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/frontend_development.mdc:0-0
Timestamp: 2025-06-23T12:46:42.048Z
Learning: Custom React Flow node types should be implemented as memoized components, using Handle components for connection points and supporting optional icons and labels.
src/backend/base/langflow/components/composio/__init__.py (3)
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/backend_development.mdc:0-0
Timestamp: 2025-06-30T14:39:17.428Z
Learning: Applies to src/backend/base/langflow/components/**/__init__.py : Update __init__.py with alphabetical imports when adding new components
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/backend_development.mdc:0-0
Timestamp: 2025-06-30T14:39:17.428Z
Learning: Applies to src/backend/base/langflow/components/**/*.py : Add new backend components to the appropriate subdirectory under src/backend/base/langflow/components/
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/backend_development.mdc:0-0
Timestamp: 2025-06-30T14:39:17.428Z
Learning: Applies to src/backend/base/langflow/components/**/*.py : Implement async component methods using async def and await for asynchronous operations
src/backend/base/langflow/components/composio/slackbot_composio.py (6)
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/backend_development.mdc:0-0
Timestamp: 2025-06-30T14:39:17.428Z
Learning: Applies to src/backend/base/langflow/components/**/*.py : Add new backend components to the appropriate subdirectory under src/backend/base/langflow/components/
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/backend_development.mdc:0-0
Timestamp: 2025-06-30T14:39:17.428Z
Learning: Applies to src/backend/base/langflow/components/**/__init__.py : Update __init__.py with alphabetical imports when adding new components
Learnt from: ogabrielluiz
PR: langflow-ai/langflow#0
File: :0-0
Timestamp: 2025-06-26T19:43:18.260Z
Learning: In langflow custom components, the `module_name` parameter is now propagated through template building functions to add module metadata and code hashes to frontend nodes for better component tracking and debugging.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/backend_development.mdc:0-0
Timestamp: 2025-06-30T14:39:17.428Z
Learning: Applies to src/backend/base/langflow/components/**/*.py : Implement async component methods using async def and await for asynchronous operations
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-30T14:40:50.836Z
Learning: Applies to src/backend/**/*component*.py : In your Python component class, set the `icon` attribute to a string matching the frontend icon mapping exactly (case-sensitive).
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-30T14:40:50.836Z
Learning: Applies to src/backend/**/components/**/*.py : In your Python component class, set the `icon` attribute to a string matching the frontend icon mapping exactly (case-sensitive).
src/backend/base/langflow/components/composio/googletasks_composio.py (8)
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/backend_development.mdc:0-0
Timestamp: 2025-06-30T14:39:17.428Z
Learning: Applies to src/backend/base/langflow/components/**/*.py : Add new backend components to the appropriate subdirectory under src/backend/base/langflow/components/
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/backend_development.mdc:0-0
Timestamp: 2025-06-30T14:39:17.428Z
Learning: Applies to src/backend/base/langflow/components/**/__init__.py : Update __init__.py with alphabetical imports when adding new components
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/backend_development.mdc:0-0
Timestamp: 2025-06-30T14:39:17.428Z
Learning: Applies to src/backend/base/langflow/components/**/*.py : Use asyncio.create_task for background work in async components and ensure proper cleanup on cancellation
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/backend_development.mdc:0-0
Timestamp: 2025-06-30T14:39:17.428Z
Learning: Applies to src/backend/base/langflow/components/**/*.py : Implement async component methods using async def and await for asynchronous operations
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/backend_development.mdc:0-0
Timestamp: 2025-06-30T14:39:17.428Z
Learning: Applies to src/backend/tests/unit/components/**/*.py : Create comprehensive unit tests for all new components
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-30T14:40:50.836Z
Learning: Applies to src/backend/**/components/**/*.py : In your Python component class, set the `icon` attribute to a string matching the frontend icon mapping exactly (case-sensitive).
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-30T14:40:50.836Z
Learning: Applies to src/backend/**/*component*.py : In your Python component class, set the `icon` attribute to a string matching the frontend icon mapping exactly (case-sensitive).
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/testing.mdc:0-0
Timestamp: 2025-06-30T14:41:58.837Z
Learning: Applies to src/backend/tests/**/*.py : Inherit from the appropriate ComponentTestBase class ('ComponentTestBase', 'ComponentTestBaseWithClient', or 'ComponentTestBaseWithoutClient') and provide the required fixtures: 'component_class', 'default_kwargs', and 'file_names_mapping' when adding a new component test.
src/backend/base/langflow/components/composio/dropbox_compnent.py (8)
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/backend_development.mdc:0-0
Timestamp: 2025-06-30T14:39:17.428Z
Learning: Applies to src/backend/base/langflow/components/**/*.py : Add new backend components to the appropriate subdirectory under src/backend/base/langflow/components/
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/backend_development.mdc:0-0
Timestamp: 2025-06-30T14:39:17.428Z
Learning: Applies to src/backend/base/langflow/components/**/__init__.py : Update __init__.py with alphabetical imports when adding new components
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-30T14:40:50.836Z
Learning: Applies to src/backend/**/*component*.py : In your Python component class, set the `icon` attribute to a string matching the frontend icon mapping exactly (case-sensitive).
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-30T14:40:50.836Z
Learning: Applies to src/backend/**/components/**/*.py : In your Python component class, set the `icon` attribute to a string matching the frontend icon mapping exactly (case-sensitive).
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/testing.mdc:0-0
Timestamp: 2025-06-30T14:41:58.837Z
Learning: Applies to src/backend/tests/**/*.py : Inherit from the appropriate ComponentTestBase class ('ComponentTestBase', 'ComponentTestBaseWithClient', or 'ComponentTestBaseWithoutClient') and provide the required fixtures: 'component_class', 'default_kwargs', and 'file_names_mapping' when adding a new component test.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/backend_development.mdc:0-0
Timestamp: 2025-06-30T14:39:17.428Z
Learning: Applies to src/backend/base/langflow/components/**/*.py : Implement async component methods using async def and await for asynchronous operations
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/backend_development.mdc:0-0
Timestamp: 2025-06-30T14:39:17.428Z
Learning: Applies to src/backend/tests/unit/components/**/*.py : Create comprehensive unit tests for all new components
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-23T12:46:52.420Z
Learning: When implementing a new component icon in Langflow, ensure the icon name is clear, recognizable, and used consistently across both backend (Python 'icon' attribute) and frontend (React/TypeScript mapping).
src/frontend/src/icons/lazyIconImports.ts (13)
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-30T14:40:50.836Z
Learning: Applies to src/frontend/src/icons/lazyIconImports.ts : Add your icon to the `lazyIconsMapping` object in `src/frontend/src/icons/lazyIconImports.ts` with a key that matches the backend icon string exactly.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/frontend_development.mdc:0-0
Timestamp: 2025-06-30T14:40:29.494Z
Learning: Applies to src/frontend/src/icons/**/*.{ts,tsx,js,jsx} : Use Lucide React for icons in frontend components.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-23T12:46:52.420Z
Learning: The frontend icon mapping key (in 'lazyIconsMapping') must match the backend 'icon' attribute string exactly, including case sensitivity, to ensure correct icon rendering.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-30T14:40:50.836Z
Learning: Applies to src/frontend/src/icons/*/index.tsx : Create an `index.tsx` in your icon directory that exports your icon using `forwardRef` and passes the `isdark` prop.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-30T14:40:50.836Z
Learning: Applies to src/frontend/src/icons/*/* : Create a new directory for your icon in `src/frontend/src/icons/YourIconName/` and add your SVG as a React component (e.g., `YourIconName.jsx`) that uses the `isdark` prop to support both light and dark mode.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-23T12:46:52.420Z
Learning: When implementing a new component icon in Langflow, ensure the icon name is clear, recognizable, and used consistently across both backend (Python 'icon' attribute) and frontend (React/TypeScript mapping).
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-30T14:40:50.836Z
Learning: Applies to src/frontend/src/icons/*/*.jsx : Always support both light and dark mode for custom icons by using the `isdark` prop in your SVG component.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-23T12:46:52.420Z
Learning: If a custom icon does not exist for a component, use a generic lucide icon as a fallback and request a new custom icon if needed.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-23T12:46:52.420Z
Learning: Export custom icon components in React using React.forwardRef to ensure proper ref forwarding and compatibility with parent components.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-23T12:46:52.420Z
Learning: Custom SVG icon components in React should always support both light and dark mode by accepting an 'isdark' prop and adjusting colors accordingly.
Learnt from: dolfim-ibm
PR: langflow-ai/langflow#8394
File: src/frontend/src/icons/Docling/index.tsx:4-6
Timestamp: 2025-06-16T11:14:04.200Z
Learning: The Langflow codebase consistently uses `React.PropsWithChildren<{}>` as the prop type for all icon components using forwardRef, rather than `React.SVGProps<SVGSVGElement>`. This is an established pattern across hundreds of icon files in src/frontend/src/icons/.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-30T14:40:50.836Z
Learning: If no suitable custom icon exists, use a lucide icon from https://lucide.dev/icons.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-30T14:40:50.836Z
Learning: Use clear, recognizable, and consistent icon names for both backend and frontend (e.g., 'AstraDB', 'Postgres', 'OpenAI').
src/backend/base/langflow/components/composio/linear_composio.py (6)
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/backend_development.mdc:0-0
Timestamp: 2025-06-30T14:39:17.428Z
Learning: Applies to src/backend/base/langflow/components/**/__init__.py : Update __init__.py with alphabetical imports when adding new components
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/backend_development.mdc:0-0
Timestamp: 2025-06-30T14:39:17.428Z
Learning: Applies to src/backend/base/langflow/components/**/*.py : Add new backend components to the appropriate subdirectory under src/backend/base/langflow/components/
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/backend_development.mdc:0-0
Timestamp: 2025-06-30T14:39:17.428Z
Learning: Applies to src/backend/base/langflow/components/**/*.py : Implement async component methods using async def and await for asynchronous operations
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-23T12:46:52.420Z
Learning: When implementing a new component icon in Langflow, ensure the icon name is clear, recognizable, and used consistently across both backend (Python 'icon' attribute) and frontend (React/TypeScript mapping).
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/testing.mdc:0-0
Timestamp: 2025-06-30T14:41:58.837Z
Learning: Applies to {src/backend/tests/**/*.py,tests/**/*.py} : Test backward compatibility across Langflow versions by mapping component files to supported versions using 'VersionComponentMapping'.
Learnt from: ogabrielluiz
PR: langflow-ai/langflow#0
File: :0-0
Timestamp: 2025-06-26T19:43:18.260Z
Learning: In langflow custom components, the `module_name` parameter is now propagated through template building functions to add module metadata and code hashes to frontend nodes for better component tracking and debugging.
src/backend/base/langflow/components/composio/youtube_composio.py (5)
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/backend_development.mdc:0-0
Timestamp: 2025-06-30T14:39:17.428Z
Learning: Applies to src/backend/base/langflow/components/**/*.py : Add new backend components to the appropriate subdirectory under src/backend/base/langflow/components/
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/backend_development.mdc:0-0
Timestamp: 2025-06-30T14:39:17.428Z
Learning: Applies to src/backend/base/langflow/components/**/__init__.py : Update __init__.py with alphabetical imports when adding new components
Learnt from: ogabrielluiz
PR: langflow-ai/langflow#0
File: :0-0
Timestamp: 2025-06-26T19:43:18.260Z
Learning: In langflow custom components, the `module_name` parameter is now propagated through template building functions to add module metadata and code hashes to frontend nodes for better component tracking and debugging.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-30T14:40:50.836Z
Learning: Applies to src/backend/**/components/**/*.py : In your Python component class, set the `icon` attribute to a string matching the frontend icon mapping exactly (case-sensitive).
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-30T14:40:50.836Z
Learning: Applies to src/backend/**/*component*.py : In your Python component class, set the `icon` attribute to a string matching the frontend icon mapping exactly (case-sensitive).
src/backend/base/langflow/components/composio/gmail_composio.py (1)
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/backend_development.mdc:0-0
Timestamp: 2025-06-30T14:39:17.428Z
Learning: Applies to src/backend/base/langflow/components/**/__init__.py : Update __init__.py with alphabetical imports when adding new components
src/backend/base/langflow/components/composio/outlook_composio.py (1)
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/backend_development.mdc:0-0
Timestamp: 2025-06-30T14:39:17.428Z
Learning: Applies to src/backend/base/langflow/components/**/__init__.py : Update __init__.py with alphabetical imports when adding new components
src/backend/base/langflow/components/composio/googlecalendar_composio.py (1)
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/backend_development.mdc:0-0
Timestamp: 2025-06-30T14:39:17.428Z
Learning: Applies to src/backend/base/langflow/components/**/__init__.py : Update __init__.py with alphabetical imports when adding new components
src/backend/base/langflow/components/composio/github_composio.py (1)
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/backend_development.mdc:0-0
Timestamp: 2025-06-30T14:39:17.428Z
Learning: Applies to src/backend/base/langflow/components/**/__init__.py : Update __init__.py with alphabetical imports when adding new components
src/frontend/src/utils/styleUtils.ts (12)
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/frontend_development.mdc:0-0
Timestamp: 2025-06-30T14:40:29.494Z
Learning: Applies to src/frontend/src/icons/**/*.{ts,tsx,js,jsx} : Use Lucide React for icons in frontend components.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-30T14:40:50.836Z
Learning: Applies to src/frontend/src/icons/lazyIconImports.ts : Add your icon to the `lazyIconsMapping` object in `src/frontend/src/icons/lazyIconImports.ts` with a key that matches the backend icon string exactly.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/docs_development.mdc:0-0
Timestamp: 2025-06-30T14:40:02.667Z
Learning: Applies to docs/sidebars.js : Sidebar navigation must be configured and updated in 'docs/sidebars.js' to reflect the current documentation structure.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-30T14:40:50.836Z
Learning: Applies to src/frontend/src/icons/*/index.tsx : Create an `index.tsx` in your icon directory that exports your icon using `forwardRef` and passes the `isdark` prop.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-23T12:46:52.420Z
Learning: Export custom icon components in React using React.forwardRef to ensure proper ref forwarding and compatibility with parent components.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-30T14:40:50.836Z
Learning: Applies to src/frontend/src/icons/*/* : Create a new directory for your icon in `src/frontend/src/icons/YourIconName/` and add your SVG as a React component (e.g., `YourIconName.jsx`) that uses the `isdark` prop to support both light and dark mode.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-23T12:46:52.420Z
Learning: Custom SVG icon components in React should always support both light and dark mode by accepting an 'isdark' prop and adjusting colors accordingly.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-30T14:40:50.836Z
Learning: Applies to src/frontend/src/icons/*/*.jsx : Always support both light and dark mode for custom icons by using the `isdark` prop in your SVG component.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-23T12:46:52.420Z
Learning: The frontend icon mapping key (in 'lazyIconsMapping') must match the backend 'icon' attribute string exactly, including case sensitivity, to ensure correct icon rendering.
Learnt from: dolfim-ibm
PR: langflow-ai/langflow#8394
File: src/frontend/src/icons/Docling/index.tsx:4-6
Timestamp: 2025-06-16T11:14:04.200Z
Learning: The Langflow codebase consistently uses `React.PropsWithChildren<{}>` as the prop type for all icon components using forwardRef, rather than `React.SVGProps<SVGSVGElement>`. This is an established pattern across hundreds of icon files in src/frontend/src/icons/.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-30T14:40:50.836Z
Learning: Use clear, recognizable, and consistent icon names for both backend and frontend (e.g., 'AstraDB', 'Postgres', 'OpenAI').
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-23T12:46:52.420Z
Learning: When implementing a new component icon in Langflow, ensure the icon name is clear, recognizable, and used consistently across both backend (Python 'icon' attribute) and frontend (React/TypeScript mapping).
src/backend/base/langflow/components/composio/composio_api.py (6)
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/backend_development.mdc:0-0
Timestamp: 2025-06-30T14:39:17.428Z
Learning: Applies to src/backend/base/langflow/components/**/__init__.py : Update __init__.py with alphabetical imports when adding new components
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/testing.mdc:0-0
Timestamp: 2025-06-30T14:41:58.837Z
Learning: Applies to {src/backend/tests/**/*.py,tests/**/*.py} : Test backward compatibility across Langflow versions by mapping component files to supported versions using 'VersionComponentMapping'.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/backend_development.mdc:0-0
Timestamp: 2025-06-30T14:39:17.428Z
Learning: Applies to src/backend/base/langflow/components/**/*.py : Add new backend components to the appropriate subdirectory under src/backend/base/langflow/components/
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/testing.mdc:0-0
Timestamp: 2025-06-30T14:41:58.837Z
Learning: Applies to {src/backend/tests/**/*.py,tests/**/*.py} : Test component configuration updates by asserting changes in build config dictionaries.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/backend_development.mdc:0-0
Timestamp: 2025-06-30T14:39:17.428Z
Learning: Applies to src/backend/base/langflow/components/**/*.py : Implement async component methods using async def and await for asynchronous operations
Learnt from: ogabrielluiz
PR: langflow-ai/langflow#0
File: :0-0
Timestamp: 2025-06-26T19:43:18.260Z
Learning: In langflow custom components, the `module_name` parameter is now propagated through template building functions to add module metadata and code hashes to frontend nodes for better component tracking and debugging.
src/backend/base/langflow/base/composio/composio_base.py (6)
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/backend_development.mdc:0-0
Timestamp: 2025-06-30T14:39:17.428Z
Learning: Applies to src/backend/base/langflow/components/**/__init__.py : Update __init__.py with alphabetical imports when adding new components
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/backend_development.mdc:0-0
Timestamp: 2025-06-30T14:39:17.428Z
Learning: Applies to src/backend/base/langflow/components/**/*.py : Add new backend components to the appropriate subdirectory under src/backend/base/langflow/components/
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/backend_development.mdc:0-0
Timestamp: 2025-06-30T14:39:17.428Z
Learning: Applies to src/backend/base/langflow/components/**/*.py : Implement async component methods using async def and await for asynchronous operations
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/backend_development.mdc:0-0
Timestamp: 2025-06-30T14:39:17.428Z
Learning: Applies to src/backend/tests/unit/components/**/*.py : Use ComponentTestBaseWithClient or ComponentTestBaseWithoutClient as base classes for component unit tests
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/testing.mdc:0-0
Timestamp: 2025-06-30T14:41:58.837Z
Learning: Applies to {src/backend/tests/**/*.py,tests/**/*.py} : Test backward compatibility across Langflow versions by mapping component files to supported versions using 'VersionComponentMapping'.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/testing.mdc:0-0
Timestamp: 2025-06-30T14:41:58.837Z
Learning: Applies to src/backend/tests/**/*.py : Inherit from the appropriate ComponentTestBase class ('ComponentTestBase', 'ComponentTestBaseWithClient', or 'ComponentTestBaseWithoutClient') and provide the required fixtures: 'component_class', 'default_kwargs', and 'file_names_mapping' when adding a new component test.
🧬 Code Graph Analysis (11)
src/frontend/src/icons/googlemeet/googlemeet.jsx (1)
src/frontend/src/icons/googlemeet/index.tsx (1)
  • GooglemeetIcon (4-9)
src/frontend/src/icons/googlemeet/index.tsx (1)
src/frontend/src/icons/googlemeet/googlemeet.jsx (1)
  • GooglemeetIcon (1-33)
src/frontend/src/icons/linear/linear.jsx (4)
src/frontend/src/icons/googlemaps/googlemaps.jsx (1)
  • Icon (1-3)
src/frontend/src/icons/googlesheets/googlesheets.jsx (1)
  • Icon (1-19)
src/frontend/src/icons/todoist/todoist.jsx (1)
  • Icon (1-3)
src/frontend/src/icons/zoom/zoom.jsx (1)
  • Icon (1-3)
src/frontend/src/icons/reddit/index.tsx (1)
src/frontend/src/icons/reddit/reddit.jsx (1)
  • RedditIconSVG (1-12)
src/frontend/src/icons/googlemaps/googlemaps.jsx (4)
src/frontend/src/icons/googlesheets/googlesheets.jsx (1)
  • Icon (1-19)
src/frontend/src/icons/linear/linear.jsx (1)
  • Icon (1-19)
src/frontend/src/icons/todoist/todoist.jsx (1)
  • Icon (1-3)
src/frontend/src/icons/zoom/zoom.jsx (1)
  • Icon (1-3)
src/frontend/src/icons/todoist/todoist.jsx (3)
src/frontend/src/icons/googlemaps/googlemaps.jsx (1)
  • Icon (1-3)
src/frontend/src/icons/googlesheets/googlesheets.jsx (1)
  • Icon (1-19)
src/frontend/src/icons/zoom/zoom.jsx (1)
  • Icon (1-3)
src/backend/base/langflow/components/composio/reddit_composio.py (12)
src/backend/base/langflow/base/composio/composio_base.py (2)
  • ComposioBaseComponent (27-1019)
  • set_default_tools (1018-1019)
src/backend/base/langflow/components/composio/gmail_composio.py (1)
  • set_default_tools (37-38)
src/backend/base/langflow/components/composio/googlecalendar_composio.py (1)
  • set_default_tools (10-11)
src/backend/base/langflow/components/composio/github_composio.py (1)
  • set_default_tools (10-11)
src/backend/base/langflow/components/composio/googlemeet_composio.py (1)
  • set_default_tools (11-12)
src/backend/base/langflow/components/composio/linear_composio.py (1)
  • set_default_tools (10-11)
src/backend/base/langflow/components/composio/outlook_composio.py (1)
  • set_default_tools (10-11)
src/backend/base/langflow/components/composio/slack_composio.py (1)
  • set_default_tools (10-11)
src/backend/base/langflow/components/composio/slackbot_composio.py (1)
  • set_default_tools (10-11)
src/backend/base/langflow/components/composio/supabase_composio.py (1)
  • set_default_tools (10-11)
src/backend/base/langflow/components/composio/youtube_composio.py (1)
  • set_default_tools (10-11)
src/backend/base/langflow/components/composio/todoist_composio.py (1)
  • set_default_tools (10-11)
src/backend/base/langflow/components/composio/supabase_composio.py (12)
src/backend/base/langflow/base/composio/composio_base.py (2)
  • ComposioBaseComponent (27-1019)
  • set_default_tools (1018-1019)
src/backend/base/langflow/components/composio/gmail_composio.py (1)
  • set_default_tools (37-38)
src/backend/base/langflow/components/composio/googlecalendar_composio.py (1)
  • set_default_tools (10-11)
src/backend/base/langflow/components/composio/github_composio.py (1)
  • set_default_tools (10-11)
src/backend/base/langflow/components/composio/googlemeet_composio.py (1)
  • set_default_tools (11-12)
src/backend/base/langflow/components/composio/linear_composio.py (1)
  • set_default_tools (10-11)
src/backend/base/langflow/components/composio/outlook_composio.py (1)
  • set_default_tools (10-11)
src/backend/base/langflow/components/composio/reddit_composio.py (1)
  • set_default_tools (10-11)
src/backend/base/langflow/components/composio/slack_composio.py (1)
  • set_default_tools (10-11)
src/backend/base/langflow/components/composio/slackbot_composio.py (1)
  • set_default_tools (10-11)
src/backend/base/langflow/components/composio/youtube_composio.py (1)
  • set_default_tools (10-11)
src/backend/base/langflow/components/composio/todoist_composio.py (1)
  • set_default_tools (10-11)
src/backend/base/langflow/components/composio/__init__.py (8)
src/backend/base/langflow/components/composio/googlemeet_composio.py (1)
  • ComposioGooglemeetAPIComponent (5-12)
src/backend/base/langflow/components/composio/googletasks_composio.py (1)
  • ComposioGoogleTasksAPIComponent (4-9)
src/backend/base/langflow/components/composio/linear_composio.py (1)
  • ComposioLinearAPIComponent (4-11)
src/backend/base/langflow/components/composio/reddit_composio.py (1)
  • ComposioRedditAPIComponent (4-11)
src/backend/base/langflow/components/composio/slackbot_composio.py (1)
  • ComposioSlackbotAPIComponent (4-11)
src/backend/base/langflow/components/composio/supabase_composio.py (1)
  • ComposioSupabaseAPIComponent (4-11)
src/backend/base/langflow/components/composio/todoist_composio.py (1)
  • ComposioTodoistAPIComponent (4-11)
src/backend/base/langflow/components/composio/youtube_composio.py (1)
  • ComposioYoutubeAPIComponent (4-11)
src/backend/base/langflow/components/composio/dropbox_compnent.py (1)
src/backend/base/langflow/base/composio/composio_base.py (1)
  • ComposioBaseComponent (27-1019)
src/backend/base/langflow/components/composio/googlecalendar_composio.py (3)
src/backend/base/langflow/components/composio/gmail_composio.py (1)
  • set_default_tools (37-38)
src/backend/base/langflow/components/composio/googlemeet_composio.py (1)
  • set_default_tools (11-12)
src/backend/base/langflow/base/composio/composio_base.py (1)
  • set_default_tools (1018-1019)
🪛 Biome (1.9.4)
src/frontend/src/icons/zoom/index.tsx

[error] 6-6: Don't use '{}' as a type.

Prefer explicitly define the object shape. '{}' means "any non-nullable value".

(lint/complexity/noBannedTypes)

src/frontend/src/icons/googlemeet/index.tsx

[error] 6-6: Don't use '{}' as a type.

Prefer explicitly define the object shape. '{}' means "any non-nullable value".

(lint/complexity/noBannedTypes)

src/frontend/src/icons/linear/index.tsx

[error] 6-6: Don't use '{}' as a type.

Prefer explicitly define the object shape. '{}' means "any non-nullable value".

(lint/complexity/noBannedTypes)

src/frontend/src/icons/googlesheets/index.tsx

[error] 6-6: Don't use '{}' as a type.

Prefer explicitly define the object shape. '{}' means "any non-nullable value".

(lint/complexity/noBannedTypes)

src/frontend/src/icons/reddit/index.tsx

[error] 6-6: Don't use '{}' as a type.

Prefer explicitly define the object shape. '{}' means "any non-nullable value".

(lint/complexity/noBannedTypes)

src/frontend/src/icons/googlemaps/index.tsx

[error] 6-6: Don't use '{}' as a type.

Prefer explicitly define the object shape. '{}' means "any non-nullable value".

(lint/complexity/noBannedTypes)

src/frontend/src/icons/GoogleTasks/index.tsx

[error] 6-6: Don't use '{}' as a type.

Prefer explicitly define the object shape. '{}' means "any non-nullable value".

(lint/complexity/noBannedTypes)

src/frontend/src/icons/todoist/index.tsx

[error] 6-6: Don't use '{}' as a type.

Prefer explicitly define the object shape. '{}' means "any non-nullable value".

(lint/complexity/noBannedTypes)

🪛 Pylint (3.3.7)
src/backend/base/langflow/components/composio/googletasks_composio.py

[refactor] 4-4: Too few public methods (0/2)

(R0903)

src/backend/base/langflow/components/composio/composio_api.py

[refactor] 155-217: Too many nested blocks (6/5)

(R1702)

src/backend/base/langflow/base/composio/composio_base.py

[refactor] 172-172: Too many local variables (33/15)

(R0914)


[refactor] 181-375: Too many nested blocks (6/5)

(R1702)


[refactor] 181-375: Too many nested blocks (7/5)

(R1702)


[refactor] 181-375: Too many nested blocks (9/5)

(R1702)


[refactor] 181-375: Too many nested blocks (9/5)

(R1702)


[refactor] 181-375: Too many nested blocks (6/5)

(R1702)


[refactor] 172-172: Too many branches (39/12)

(R0912)


[refactor] 172-172: Too many statements (112/50)

(R0915)


[refactor] 181-375: Too many nested blocks (7/5)

(R1702)


[refactor] 378-378: Too many local variables (30/15)

(R0914)


[refactor] 385-576: Too many nested blocks (6/5)

(R1702)


[refactor] 378-378: Too many return statements (12/6)

(R0911)


[refactor] 378-378: Too many branches (39/12)

(R0912)


[refactor] 378-378: Too many statements (97/50)

(R0915)


[refactor] 385-576: Too many nested blocks (6/5)

(R1702)


[refactor] 637-637: Too many local variables (26/15)

(R0914)


[refactor] 748-875: Too many nested blocks (7/5)

(R1702)


[refactor] 748-875: Too many nested blocks (7/5)

(R1702)


[refactor] 748-875: Too many nested blocks (6/5)

(R1702)


[refactor] 748-875: Too many nested blocks (6/5)

(R1702)


[refactor] 637-637: Too many return statements (8/6)

(R0911)


[refactor] 637-637: Too many branches (54/12)

(R0912)


[refactor] 637-637: Too many statements (154/50)

(R0915)


[refactor] 922-922: Too many local variables (22/15)

(R0914)


[refactor] 922-922: Either all return statements in a function should return an expression, or none of them should.

(R1710)

🪛 Flake8 (7.2.0)
src/backend/base/langflow/components/composio/composio_api.py

[error] 92-92: too many blank lines (2)

(E303)


[error] 179-179: visually indented line with same indent as next logical line

(E129)


[error] 180-180: over-indented

(E117)

src/backend/base/langflow/base/composio/composio_base.py

[error] 130-130: too many blank lines (3)

(E303)


[error] 378-378: too many blank lines (2)

(E303)


[error] 473-473: at least two spaces before inline comment

(E261)


[error] 473-473: inline comment should start with '# '

(E262)


[error] 565-565: at least two spaces before inline comment

(E261)


[error] 565-565: inline comment should start with '# '

(E262)


[error] 681-681: at least two spaces before inline comment

(E261)


[error] 681-681: inline comment should start with '# '

(E262)


[error] 755-755: at least two spaces before inline comment

(E261)


[error] 755-755: inline comment should start with '# '

(E262)


[error] 774-774: at least two spaces before inline comment

(E261)


[error] 774-774: inline comment should start with '# '

(E262)


[error] 809-809: at least two spaces before inline comment

(E261)


[error] 809-809: inline comment should start with '# '

(E262)


[error] 813-813: at least two spaces before inline comment

(E261)


[error] 813-813: inline comment should start with '# '

(E262)

🔇 Additional comments (19)
pyproject.toml (1)

69-70: Prefer stable versions over release-candidates for production dependencies

1.0.0rc9 is still a release-candidate. Unless you depend on RC-specific features, pinning to a final release (or at least a <1.0.0 stable tag) reduces the risk of breaking changes when the package graduates to GA.

-    "composio-langchain==1.0.0rc9",
-    "composio==1.0.0rc9",
+#   TODO: switch to the first stable build once available
+    "composio-langchain>=1.0.0,<2.0.0",
+    "composio>=1.0.0,<2.0.0",

Check whether the GA builds are already on PyPI and, if not, open an issue to track the upgrade.

src/frontend/src/icons/reddit/index.tsx (1)

6-6: Static analysis warning can be ignored.

The use of React.PropsWithChildren<{}> is the established pattern across hundreds of icon files in this codebase, as confirmed by the retrieved learnings. This static analysis warning is a false positive.

src/frontend/src/icons/linear/index.tsx (1)

6-6: Static analysis warning can be ignored.

The use of React.PropsWithChildren<{}> is the established pattern in this codebase for icon components.

src/frontend/src/icons/googlemaps/index.tsx (1)

6-6: Static analysis warning can be ignored.

The use of React.PropsWithChildren<{}> is the established pattern in this codebase for icon components.

src/frontend/src/icons/zoom/index.tsx (1)

6-6: Static analysis warning can be ignored.

The use of React.PropsWithChildren<{}> is the established pattern in this codebase for icon components.

src/frontend/src/icons/googlesheets/index.tsx (1)

4-9: Icon does not guarantee dark-mode support

The wrapper faithfully forwards props, but the underlying googlesheets.jsx hard-codes fill colours and ignores an isdark prop, violating the icon guidelines that every custom SVG must honour light/dark mode via that prop.
Please extend the SVG component to accept { isdark?: boolean } and swap colours accordingly (or at minimum expose className / style so Tailwind can style the fills).

src/frontend/src/icons/todoist/index.tsx (1)

4-9: Dark-mode still unimplemented in underlying SVG

Same observation as for Google Sheets: the wrapper forwards props, but todoist.jsx does not react to isdark. Users on dark themes will get a red square with poor contrast.

Recommend updating the SVG component to honour isdark.

src/backend/base/langflow/components/composio/googletasks_composio.py (1)

4-9: Add missing description attribute for consistency.

The component structure looks good, but it's missing the description attribute that other Composio components have for consistency.

 class ComposioGoogleTasksAPIComponent(ComposioBaseComponent):
     display_name: str = "Google Tasks"
+    description: str = "Google Tasks API"
     icon = "GoogleTasks"
     documentation: str = "https://docs.composio.dev"
     app_name = "googletasks"
⛔ Skipped due to learnings
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/backend_development.mdc:0-0
Timestamp: 2025-06-30T14:39:17.428Z
Learning: Applies to src/backend/tests/unit/components/**/*.py : Create comprehensive unit tests for all new components
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/testing.mdc:0-0
Timestamp: 2025-06-30T14:41:58.837Z
Learning: Applies to src/backend/tests/**/*.py : Inherit from the appropriate ComponentTestBase class ('ComponentTestBase', 'ComponentTestBaseWithClient', or 'ComponentTestBaseWithoutClient') and provide the required fixtures: 'component_class', 'default_kwargs', and 'file_names_mapping' when adding a new component test.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/testing.mdc:0-0
Timestamp: 2025-06-30T14:41:58.837Z
Learning: Applies to {src/backend/tests/**/*.py,src/frontend/**/*.test.{ts,tsx,js,jsx},src/frontend/**/*.spec.{ts,tsx,js,jsx},tests/**/*.py} : Expected behaviors should be explicitly stated in test docstrings or comments.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/testing.mdc:0-0
Timestamp: 2025-06-30T14:41:58.837Z
Learning: Applies to {src/backend/tests/**/*.py,src/frontend/**/*.test.{ts,tsx,js,jsx},src/frontend/**/*.spec.{ts,tsx,js,jsx},tests/**/*.py} : Create comprehensive unit tests for all new components.
Learnt from: CR
PR: langflow-ai/langflow#0
File: .cursor/rules/icons.mdc:0-0
Timestamp: 2025-06-30T14:40:50.836Z
Learning: Applies to src/backend/**/*component*.py : In your Python component class, set the `icon` attribute to a string matching the frontend icon mapping exactly (case-sensitive).
src/backend/base/langflow/components/composio/googlemeet_composio.py (1)

7-7: Icon mapping verified for “Googlemeet”

The icon name “Googlemeet” is consistently defined in the frontend:

  • In src/frontend/src/utils/styleUtils.ts:
    { display_name: "Googlemeet", name: "googlemeet", icon: "Googlemeet" }
    // …
    Googlemeet: "Googlemeet",
  • In src/frontend/src/icons/lazyIconImports.ts:
    Googlemeet: () =>
      import("@/icons/googlemeet").then((mod) => ({
        default: mod.GooglemeetIcon,
      })),

No changes required.

src/frontend/src/icons/lazyIconImports.ts (1)

110-149: LGTM! Icon mappings follow established patterns.

The new icon mappings for Googlemeet, GoogleTasks, Googlesheets, Googlemaps, Todoist, Zoom, Linear, and Reddit all follow the correct lazy loading pattern and maintain consistency with existing entries.

Also applies to: 182-184, 247-248

src/backend/base/langflow/components/composio/__init__.py (1)

5-14: LGTM! Imports follow alphabetical ordering.

The new component imports and exports properly follow alphabetical ordering as required by the coding guidelines, and maintain consistency with the existing pattern.

Also applies to: 21-30

src/backend/base/langflow/components/composio/slack_composio.py (1)

4-12: LGTM! Refactoring aligns with architectural changes.

The component has been appropriately stripped down to a minimal skeleton, consistent with the broader refactoring that moves detailed implementation logic to the base component.

src/frontend/src/utils/styleUtils.ts (1)

234-276: LGTM! Sidebar bundles and icon mappings properly integrated.

The new entries in SIDEBAR_BUNDLES and nodeIconToDisplayIconMap follow the established patterns and properly integrate the new Composio components into the frontend UI system.

Also applies to: 356-402

src/backend/base/langflow/components/composio/googlecalendar_composio.py (1)

6-6: Icon name “Googlecalendar” matches frontend mapping
The backend icon = "Googlecalendar" aligns exactly (case-sensitive) with:

  • src/frontend/src/utils/styleUtils.ts → icon: "Googlecalendar"
  • src/frontend/src/icons/googlecalendar/index.tsx → exports GooglecalendarIcon
  • src/frontend/src/icons/lazyIconImports.ts → key Googlecalendar

No changes required.

src/backend/base/langflow/base/composio/composio_base.py (5)

5-6: LGTM! SDK migration looks correct.

The migration from deprecated SDK classes to the new Composio client with LangchainProvider aligns with the dependency updates in pyproject.toml.


73-84: Good refactoring to prevent shared state issues.

Moving mutable attributes from class-level to instance variables is the correct approach to avoid state sharing between component instances.


87-89: Good defensive programming practice.

Adding None handling prevents potential AttributeError when execute_action returns None.


908-921: Good documentation update for enabled_tools property.

The updated docstring clearly explains how the property exposes all action keys for autonomous agents without UI selection.


1004-1015: Good error handling in post-processor.

The method properly handles exceptions and logs errors while gracefully falling back to raw data.

Comment on lines +4 to +9
export const RedditIcon = forwardRef<
SVGSVGElement,
React.PropsWithChildren<{}>
>((props, ref) => {
return <RedditIconSVG ref={ref} {...props} />;
});
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue

Add dark mode support by forwarding the isdark prop.

The coding guidelines require custom SVG icon components to support both light and dark mode by accepting an isdark prop. The current implementation doesn't forward this prop to the underlying SVG component.

Apply this diff to forward the isdark prop:

>((props, ref) => {
-  return <RedditIconSVG ref={ref} {...props} />;
+  return <RedditIconSVG ref={ref} isdark={props.isdark} {...props} />;
});
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
export const RedditIcon = forwardRef<
SVGSVGElement,
React.PropsWithChildren<{}>
>((props, ref) => {
return <RedditIconSVG ref={ref} {...props} />;
});
export const RedditIcon = forwardRef<
SVGSVGElement,
React.PropsWithChildren<{}>
>((props, ref) => {
return <RedditIconSVG ref={ref} isdark={props.isdark} {...props} />;
});
🧰 Tools
🪛 Biome (1.9.4)

[error] 6-6: Don't use '{}' as a type.

Prefer explicitly define the object shape. '{}' means "any non-nullable value".

(lint/complexity/noBannedTypes)

🤖 Prompt for AI Agents
In src/frontend/src/icons/reddit/index.tsx around lines 4 to 9, the RedditIcon
component does not forward the `isdark` prop to the underlying RedditIconSVG
component, which is required for dark mode support. Update the component to
explicitly accept the `isdark` prop and pass it along with other props to
RedditIconSVG, ensuring the icon can render correctly in both light and dark
modes.

Comment on lines +4 to +9
export const LinearIcon = forwardRef<
SVGSVGElement,
React.PropsWithChildren<{}>
>((props, ref) => {
return <LinearIconSVG ref={ref} {...props} />;
});
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue

Add dark mode support by forwarding the isdark prop.

The coding guidelines require custom SVG icon components to support both light and dark mode. Forward the isdark prop to the underlying SVG component.

Apply this diff:

>((props, ref) => {
-  return <LinearIconSVG ref={ref} {...props} />;
+  return <LinearIconSVG ref={ref} isdark={props.isdark} {...props} />;
});
🧰 Tools
🪛 Biome (1.9.4)

[error] 6-6: Don't use '{}' as a type.

Prefer explicitly define the object shape. '{}' means "any non-nullable value".

(lint/complexity/noBannedTypes)

🤖 Prompt for AI Agents
In src/frontend/src/icons/linear/index.tsx around lines 4 to 9, the LinearIcon
component does not forward the isdark prop to the underlying LinearIconSVG
component, which is required for dark mode support. Update the component to
explicitly accept an isdark prop and pass it along with other props to
LinearIconSVG, ensuring the dark mode styling can be applied correctly.

Comment on lines +1 to +13
const RedditIconSVG = (props) => (
<svg viewBox="0 0 16 16" width="23px" height="23px" {...props}>
<path
fill="#fe3155"
d="M8,0c4.418,0,8,3.582,8,8s-3.582,8-8,8s-8-3.582-8-8S3.582,0,8,0z"
/>
<path
fill="#fff"
d="M12.124,6.875c-0.285,0.009-0.558,0.127-0.766,0.324c-0.911-0.62-1.98-0.96-3.08-0.984l0.52-2.496 l1.711,0.36c0.047,0.44,0.442,0.758,0.882,0.711c0.438-0.049,0.756-0.442,0.709-0.882c-0.047-0.44-0.442-0.758-0.88-0.709 c-0.253,0.025-0.48,0.173-0.605,0.391l-1.96-0.391C8.522,3.167,8.387,3.251,8.358,3.387c0,0.002,0,0.002,0,0.004L7.767,6.167 c-1.113,0.016-2.198,0.36-3.12,0.984c-0.469-0.442-1.209-0.42-1.651,0.051c-0.442,0.471-0.42,1.209,0.053,1.651 c0.091,0.085,0.196,0.16,0.313,0.211c-0.007,0.118-0.007,0.235,0,0.353c0,1.791,2.089,3.249,4.664,3.249 c2.576,0,4.664-1.456,4.664-3.249c0.007-0.118,0.007-0.234,0-0.353c0.402-0.2,0.655-0.615,0.645-1.064 C13.311,7.356,12.771,6.853,12.124,6.875z M5.335,8.8c0-0.442,0.358-0.8,0.802-0.8c0.442,0,0.8,0.358,0.8,0.8s-0.358,0.8-0.8,0.8 S5.335,9.242,5.335,8.8z M9.971,11C9.616,11.328,8.988,11.616,8,11.616S6.384,11.328,6.029,11c-0.073-0.067-0.062-0.227,0.031-0.304 c0.078-0.065,0.193-0.065,0.275,0c0.48,0.353,1.07,0.48,1.665,0.48s1.185-0.127,1.665-0.48c0.082-0.065,0.196-0.065,0.275,0 C10.033,10.773,10.044,10.933,9.971,11z M9.842,9.6C9.4,9.6,9.04,9.242,9.04,8.8C9.042,8.358,9.4,8,9.842,8 c0.442,0,0.8,0.358,0.8,0.8S10.284,9.6,9.842,9.6z"
/>
</svg>
);
export default RedditIconSVG;
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue

Implement dark mode support using the isdark prop.

The coding guidelines require custom SVG icon components to support both light and dark mode. The current implementation uses hardcoded colors that don't adapt to the theme.

Apply this diff to add dark mode support:

-const RedditIconSVG = (props) => (
+const RedditIconSVG = ({ isdark, ...props }) => (
    <svg viewBox="0 0 16 16" width="23px" height="23px" {...props}>
      <path
-        fill="#fe3155"
+        fill={isdark ? "#fe3155" : "#fe3155"}
        d="M8,0c4.418,0,8,3.582,8,8s-3.582,8-8,8s-8-3.582-8-8S3.582,0,8,0z"
      />
      <path
-        fill="#fff"
+        fill={isdark ? "#000" : "#fff"}
        d="M12.124,6.875c-0.285,0.009-0.558,0.127-0.766,0.324c-0.911-0.62-1.98-0.96-3.08-0.984l0.52-2.496	l1.711,0.36c0.047,0.44,0.442,0.758,0.882,0.711c0.438-0.049,0.756-0.442,0.709-0.882c-0.047-0.44-0.442-0.758-0.88-0.709	c-0.253,0.025-0.48,0.173-0.605,0.391l-1.96-0.391C8.522,3.167,8.387,3.251,8.358,3.387c0,0.002,0,0.002,0,0.004L7.767,6.167	c-1.113,0.016-2.198,0.36-3.12,0.984c-0.469-0.442-1.209-0.42-1.651,0.051c-0.442,0.471-0.42,1.209,0.053,1.651	c0.091,0.085,0.196,0.16,0.313,0.211c-0.007,0.118-0.007,0.235,0,0.353c0,1.791,2.089,3.249,4.664,3.249	c2.576,0,4.664-1.456,4.664-3.249c0.007-0.118,0.007-0.234,0-0.353c0.402-0.2,0.655-0.615,0.645-1.064	C13.311,7.356,12.771,6.853,12.124,6.875z M5.335,8.8c0-0.442,0.358-0.8,0.802-0.8c0.442,0,0.8,0.358,0.8,0.8s-0.358,0.8-0.8,0.8	S5.335,9.242,5.335,8.8z M9.971,11C9.616,11.328,8.988,11.616,8,11.616S6.384,11.328,6.029,11c-0.073-0.067-0.062-0.227,0.031-0.304	c0.078-0.065,0.193-0.065,0.275,0c0.48,0.353,1.07,0.48,1.665,0.48s1.185-0.127,1.665-0.48c0.082-0.065,0.196-0.065,0.275,0	C10.033,10.773,10.044,10.933,9.971,11z M9.842,9.6C9.4,9.6,9.04,9.242,9.04,8.8C9.042,8.358,9.4,8,9.842,8	c0.442,0,0.8,0.358,0.8,0.8S10.284,9.6,9.842,9.6z"
      />
    </svg>
  );
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
const RedditIconSVG = (props) => (
<svg viewBox="0 0 16 16" width="23px" height="23px" {...props}>
<path
fill="#fe3155"
d="M8,0c4.418,0,8,3.582,8,8s-3.582,8-8,8s-8-3.582-8-8S3.582,0,8,0z"
/>
<path
fill="#fff"
d="M12.124,6.875c-0.285,0.009-0.558,0.127-0.766,0.324c-0.911-0.62-1.98-0.96-3.08-0.984l0.52-2.496 l1.711,0.36c0.047,0.44,0.442,0.758,0.882,0.711c0.438-0.049,0.756-0.442,0.709-0.882c-0.047-0.44-0.442-0.758-0.88-0.709 c-0.253,0.025-0.48,0.173-0.605,0.391l-1.96-0.391C8.522,3.167,8.387,3.251,8.358,3.387c0,0.002,0,0.002,0,0.004L7.767,6.167 c-1.113,0.016-2.198,0.36-3.12,0.984c-0.469-0.442-1.209-0.42-1.651,0.051c-0.442,0.471-0.42,1.209,0.053,1.651 c0.091,0.085,0.196,0.16,0.313,0.211c-0.007,0.118-0.007,0.235,0,0.353c0,1.791,2.089,3.249,4.664,3.249 c2.576,0,4.664-1.456,4.664-3.249c0.007-0.118,0.007-0.234,0-0.353c0.402-0.2,0.655-0.615,0.645-1.064 C13.311,7.356,12.771,6.853,12.124,6.875z M5.335,8.8c0-0.442,0.358-0.8,0.802-0.8c0.442,0,0.8,0.358,0.8,0.8s-0.358,0.8-0.8,0.8 S5.335,9.242,5.335,8.8z M9.971,11C9.616,11.328,8.988,11.616,8,11.616S6.384,11.328,6.029,11c-0.073-0.067-0.062-0.227,0.031-0.304 c0.078-0.065,0.193-0.065,0.275,0c0.48,0.353,1.07,0.48,1.665,0.48s1.185-0.127,1.665-0.48c0.082-0.065,0.196-0.065,0.275,0 C10.033,10.773,10.044,10.933,9.971,11z M9.842,9.6C9.4,9.6,9.04,9.242,9.04,8.8C9.042,8.358,9.4,8,9.842,8 c0.442,0,0.8,0.358,0.8,0.8S10.284,9.6,9.842,9.6z"
/>
</svg>
);
export default RedditIconSVG;
const RedditIconSVG = ({ isdark, ...props }) => (
<svg viewBox="0 0 16 16" width="23px" height="23px" {...props}>
<path
fill={isdark ? "#fe3155" : "#fe3155"}
d="M8,0c4.418,0,8,3.582,8,8s-3.582,8-8,8s-8-3.582-8-8S3.582,0,8,0z"
/>
<path
fill={isdark ? "#000" : "#fff"}
d="M12.124,6.875c-0.285,0.009-0.558,0.127-0.766,0.324c-0.911-0.62-1.98-0.96-3.08-0.984l0.52-2.496 l1.711,0.36c0.047,0.44,0.442,0.758,0.882,0.711c0.438-0.049,0.756-0.442,0.709-0.882c-0.047-0.44-0.442-0.758-0.88-0.709 c-0.253,0.025-0.48,0.173-0.605,0.391l-1.96-0.391C8.522,3.167,8.387,3.251,8.358,3.387c0,0.002,0,0.002,0,0.004L7.767,6.167 c-1.113,0.016-2.198,0.36-3.12,0.984c-0.469-0.442-1.209-0.42-1.651,0.051c-0.442,0.471-0.42,1.209,0.053,1.651 c0.091,0.085,0.196,0.16,0.313,0.211c-0.007,0.118-0.007,0.235,0,0.353c0,1.791,2.089,3.249,4.664,3.249 c2.576,0,4.664-1.456,4.664-3.249c0.007-0.118,0.007-0.234,0-0.353c0.402-0.2,0.655-0.615,0.645-1.064 C13.311,7.356,12.771,6.853,12.124,6.875z M5.335,8.8c0-0.442,0.358-0.8,0.802-0.8c0.442,0,0.8,0.358,0.8,0.8s-0.358,0.8-0.8,0.8 S5.335,9.242,5.335,8.8z M9.971,11C9.616,11.328,8.988,11.616,8,11.616S6.384,11.328,6.029,11c-0.073-0.067-0.062-0.227,0.031-0.304 c0.078-0.065,0.193-0.065,0.275,0c0.48,0.353,1.07,0.48,1.665,0.48s1.185-0.127,1.665-0.48c0.082-0.065,0.196-0.065,0.275,0 C10.033,10.773,10.044,10.933,9.971,11z M9.842,9.6C9.4,9.6,9.04,9.242,9.04,8.8C9.042,8.358,9.4,8,9.842,8 c0.442,0,0.8,0.358,0.8,0.8S10.284,9.6,9.842,9.6z"
/>
</svg>
);
export default RedditIconSVG;
🤖 Prompt for AI Agents
In src/frontend/src/icons/reddit/reddit.jsx lines 1 to 13, the SVG icon uses
hardcoded fill colors that do not adapt to dark mode. Modify the component to
accept an 'isdark' prop and conditionally set the fill colors based on its
value, using appropriate colors for light and dark themes instead of fixed hex
codes. Update the fill attributes in the <path> elements to use these
conditional colors so the icon supports both modes.

Comment on lines +4 to +9
export const GooglemapsIcon = forwardRef<
SVGSVGElement,
React.PropsWithChildren<{}>
>((props, ref) => {
return <GooglemapsIconSVG ref={ref} {...props} />;
});
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue

Add dark mode support by forwarding the isdark prop.

The coding guidelines require custom SVG icon components to support both light and dark mode. Forward the isdark prop to the underlying SVG component.

Apply this diff:

>((props, ref) => {
-  return <GooglemapsIconSVG ref={ref} {...props} />;
+  return <GooglemapsIconSVG ref={ref} isdark={props.isdark} {...props} />;
});
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
export const GooglemapsIcon = forwardRef<
SVGSVGElement,
React.PropsWithChildren<{}>
>((props, ref) => {
return <GooglemapsIconSVG ref={ref} {...props} />;
});
export const GooglemapsIcon = forwardRef<
SVGSVGElement,
React.PropsWithChildren<{}>
>((props, ref) => {
return <GooglemapsIconSVG ref={ref} isdark={props.isdark} {...props} />;
});
🧰 Tools
🪛 Biome (1.9.4)

[error] 6-6: Don't use '{}' as a type.

Prefer explicitly define the object shape. '{}' means "any non-nullable value".

(lint/complexity/noBannedTypes)

🤖 Prompt for AI Agents
In src/frontend/src/icons/googlemaps/index.tsx around lines 4 to 9, the
GooglemapsIcon component does not forward the isdark prop to the underlying SVG
component, which is required for dark mode support. Update the component to
accept an isdark prop and pass it along with other props to GooglemapsIconSVG to
enable dark mode styling.

Comment on lines +4 to +9
export const ZoomIcon = forwardRef<
SVGSVGElement,
React.PropsWithChildren<{}>
>((props, ref) => {
return <ZoomIconSVG ref={ref} {...props} />;
});
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue

Add dark mode support by forwarding the isdark prop.

The coding guidelines require custom SVG icon components to support both light and dark mode. Forward the isdark prop to the underlying SVG component.

Apply this diff:

>((props, ref) => {
-  return <ZoomIconSVG ref={ref} {...props} />;
+  return <ZoomIconSVG ref={ref} isdark={props.isdark} {...props} />;
});
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
export const ZoomIcon = forwardRef<
SVGSVGElement,
React.PropsWithChildren<{}>
>((props, ref) => {
return <ZoomIconSVG ref={ref} {...props} />;
});
export const ZoomIcon = forwardRef<
SVGSVGElement,
React.PropsWithChildren<{}>
>((props, ref) => {
- return <ZoomIconSVG ref={ref} {...props} />;
+ return <ZoomIconSVG ref={ref} isdark={props.isdark} {...props} />;
});
🧰 Tools
🪛 Biome (1.9.4)

[error] 6-6: Don't use '{}' as a type.

Prefer explicitly define the object shape. '{}' means "any non-nullable value".

(lint/complexity/noBannedTypes)

🤖 Prompt for AI Agents
In src/frontend/src/icons/zoom/index.tsx around lines 4 to 9, the ZoomIcon
component does not forward the isdark prop to the underlying ZoomIconSVG
component, which is required for dark mode support. Modify the component to
accept an isdark prop and pass it along with other props to ZoomIconSVG,
ensuring the dark mode styling can be applied correctly.

Comment on lines +178 to +184
if (connection_list and hasattr(connection_list, "items") and connection_list.items and
isinstance(connection_list.items, list) and len(connection_list.items) > 0):
for connection in connection_list.items:
if getattr(connection, "status", None) == "ACTIVE":
has_active_connections = True
break

Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue

Fix indentation issues.

The indentation is incorrect and makes the code harder to read.

                 if (connection_list and hasattr(connection_list, "items") and connection_list.items and
                     isinstance(connection_list.items, list) and len(connection_list.items) > 0):
-                        for connection in connection_list.items:
-                            if getattr(connection, "status", None) == "ACTIVE":
-                                has_active_connections = True
-                                break
+                    for connection in connection_list.items:
+                        if getattr(connection, "status", None) == "ACTIVE":
+                            has_active_connections = True
+                            break
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
if (connection_list and hasattr(connection_list, "items") and connection_list.items and
isinstance(connection_list.items, list) and len(connection_list.items) > 0):
for connection in connection_list.items:
if getattr(connection, "status", None) == "ACTIVE":
has_active_connections = True
break
if (connection_list and hasattr(connection_list, "items") and connection_list.items and
isinstance(connection_list.items, list) and len(connection_list.items) > 0):
for connection in connection_list.items:
if getattr(connection, "status", None) == "ACTIVE":
has_active_connections = True
break
🧰 Tools
🪛 Flake8 (7.2.0)

[error] 179-179: visually indented line with same indent as next logical line

(E129)


[error] 180-180: over-indented

(E117)

🤖 Prompt for AI Agents
In src/backend/base/langflow/components/composio/composio_api.py around lines
178 to 184, the indentation of the if statement and the for loop is inconsistent
and reduces readability. Adjust the indentation so that the if condition and the
for loop are properly aligned and nested according to Python standards, ensuring
all blocks are indented uniformly to improve clarity.

Comment on lines +378 to +577
# Preserve the full schema information, not just the type
cleaned_properties[clean_field_name] = field_schema_copy

# If we found attachment-related fields, add a single "attachment" field
if attachment_related_fields:
# Create a generic attachment field schema
attachment_schema = {
"type": "string",
"description": "File attachment for the email",
"title": "Attachment"
}
cleaned_properties["attachment"] = attachment_schema

# Update the flat schema with cleaned field names
flat_schema["properties"] = cleaned_properties

# Also update required fields to match cleaned names
if flat_schema.get("required"):
cleaned_required = [field.replace("[0]", "") for field in flat_schema["required"]]
flat_schema["required"] = cleaned_required

input_schema = create_input_schema_from_json_schema(flat_schema)
if input_schema is None:
logger.warning(f"Input schema is None for action key: {action_key}")
return []

# Additional safety check before calling schema_to_langflow_inputs
if not hasattr(input_schema, "model_fields"):
logger.warning(f"Input schema for {action_key} does not have model_fields attribute")
return []

if input_schema.model_fields is None:
logger.warning(f"Input schema model_fields is None for {action_key}")
return []

result = schema_to_langflow_inputs(input_schema)

# Process inputs to handle attachment fields and set advanced status
if result:
processed_inputs = []
required_fields_set = set(flat_schema.get("required", []))

# Get file upload fields from stored action data
file_upload_fields = self._actions_data.get(action_key, {}).get("file_upload_fields", set())
if attachment_related_fields: # If we consolidated attachment fields
file_upload_fields = file_upload_fields | {"attachment"}

for inp in result:
if hasattr(inp, "name") and inp.name is not None:
# Check if this specific field is a file upload field
if inp.name.lower() in file_upload_fields or inp.name.lower() == "attachment":
# Replace with FileInput for file upload fields
file_input = FileInput(
name=inp.name,
display_name=getattr(inp, "display_name", inp.name.replace("_", " ").title()),
required=inp.name in required_fields_set,
advanced=inp.name not in required_fields_set,
info=getattr(inp, "info", "Upload file for this field"),
show=True,
file_types=[
"csv", "txt", "doc", "docx", "xls", "xlsx", "pdf",
"png", "jpg", "jpeg", "gif", "zip", "rar", "ppt", "pptx"
],
)
processed_inputs.append(file_input)
else:
# Ensure proper display_name and info are set for regular fields
if not hasattr(inp, "display_name") or not inp.display_name:
inp.display_name = inp.name.replace("_", " ").title()

# Preserve description from schema if available
field_schema = flat_schema.get("properties", {}).get(inp.name, {})
schema_description = field_schema.get("description")
current_info = getattr(inp, "info", None)

# Use schema description if available, otherwise keep current info or create from name
if schema_description:
inp.info = schema_description
elif not current_info:
# Fallback: create a basic description from the field name if no description exists
inp.info = f"{inp.name.replace('_', ' ').title()} field"

# Set advanced status for non-file-upload fields
if inp.name not in required_fields_set:
inp.advanced = True

# Skip entity_id being mapped to user_id parameter
if inp.name == "user_id" and getattr(self, "entity_id", None) == getattr(inp, "value", None): #noqa: E501
continue

processed_inputs.append(inp)
else:
processed_inputs.append(inp)

return processed_inputs
return result # noqa: TRY300
except ValueError as e:
logger.warning(f"Error generating inputs for {action_key}: {e}")
return []

Copy link
Contributor

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

Method complexity needs attention.

Similar to _populate_actions_data, this method has high complexity:

  • 30 local variables
  • 39 branches
  • 97 statements
  • Deep nesting levels

The duplication of schema processing logic between this method and _populate_actions_data (lines 246-280 duplicated at 398-432) suggests both methods should use a shared helper function.

🧰 Tools
🪛 Flake8 (7.2.0)

[error] 378-378: too many blank lines (2)

(E303)


[error] 473-473: at least two spaces before inline comment

(E261)


[error] 473-473: inline comment should start with '# '

(E262)


[error] 565-565: at least two spaces before inline comment

(E261)


[error] 565-565: inline comment should start with '# '

(E262)

🪛 Pylint (3.3.7)

[refactor] 378-378: Too many local variables (30/15)

(R0914)


[refactor] 385-576: Too many nested blocks (6/5)

(R1702)


[refactor] 378-378: Too many return statements (12/6)

(R0911)


[refactor] 378-378: Too many branches (39/12)

(R0912)


[refactor] 378-378: Too many statements (97/50)

(R0915)


[refactor] 385-576: Too many nested blocks (6/5)

(R1702)

🤖 Prompt for AI Agents
In src/backend/base/langflow/base/composio/composio_base.py between lines 378
and 577, the _validate_schema_inputs method is overly complex with many local
variables, branches, and deep nesting, and duplicates schema processing logic
found in _populate_actions_data (lines 246-280). To fix this, refactor by
extracting the duplicated schema processing code into a shared helper function
that both methods can call. This will reduce complexity, improve readability,
and avoid code duplication. Then update _validate_schema_inputs and
_populate_actions_data to use this helper function for schema processing.

Comment on lines +922 to +1003
def execute_action(self):
"""Execute the selected Composio tool."""
composio = self._build_wrapper()
self._populate_actions_data()
self._build_action_maps()

@abstractmethod
def execute_action(self) -> list[dict]:
"""Execute action and return response as Message."""
display_name = (
self.action[0]["name"] if isinstance(getattr(self, "action", None), list) and self.action else self.action
)
action_key = self._display_to_key_map.get(display_name)

if not action_key:
msg = f"Invalid action: {display_name}"
raise ValueError(msg)

try:
arguments: dict[str, Any] = {}
param_fields = self._actions_data.get(action_key, {}).get("action_fields", [])

schema_dict = self._action_schemas.get(action_key, {})
parameters_schema = schema_dict.get("input_parameters", {})
schema_properties = parameters_schema.get("properties", {}) if parameters_schema else {}
# Handle case where 'required' field is None (causes "'NoneType' object is not iterable")
required_list = parameters_schema.get("required", []) if parameters_schema else []
required_fields = set(required_list) if required_list is not None else set()

for field in param_fields:
if not hasattr(self, field):
continue
value = getattr(self, field)

# Skip None, empty strings, and empty lists
if value is None or value == "" or (isinstance(value, list) and len(value) == 0):
continue

# For optional fields, be more strict about including them
# Only include if the user has explicitly provided a meaningful value
if field not in required_fields:
# Get the default value from the schema
field_schema = schema_properties.get(field, {})
schema_default = field_schema.get("default")

# Skip if the current value matches the schema default
if value == schema_default:
continue

logger.debug(f"Field: {field}, Value: {value}, Schema Default: {schema_default}")

# Convert comma-separated to list for array parameters (heuristic)
prop_schema = schema_properties.get(field, {})
if prop_schema.get("type") == "array" and isinstance(value, str):
value = [item.strip() for item in value.split(",")]

if field in self._bool_variables:
value = bool(value)

# Handle renamed fields - map back to original names for API execution
final_field_name = field
if field.endswith("_user_id") and field.startswith(self.app_name):
final_field_name = "user_id"
logger.debug(f"Mapping {field} back to user_id for API execution")

arguments[final_field_name] = value

# Execute using new SDK
result = composio.tools.execute(
slug=action_key,
arguments=arguments,
user_id=self.entity_id,
)

if isinstance(result, dict) and "successful" in result:
if result["successful"]:
raw_data = result.get("data", result)
return self._apply_post_processor(action_key, raw_data)
error_msg = result.get("error", "Tool execution failed")
raise ValueError(error_msg)

except ValueError as e:
logger.error(f"Failed to execute {action_key}: {e}")
raise

Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue

execute_action return consistency issue.

The method has inconsistent return statements - some return values while others return nothing (implicitly None). All paths should return a value or raise an exception.

Also, the method has high complexity (22 local variables). Consider extracting the argument preparation logic into a separate method.

🧰 Tools
🪛 Pylint (3.3.7)

[refactor] 922-922: Too many local variables (22/15)

(R0914)


[refactor] 922-922: Either all return statements in a function should return an expression, or none of them should.

(R1710)

🤖 Prompt for AI Agents
In src/backend/base/langflow/base/composio/composio_base.py around lines 922 to
1003, the execute_action method has inconsistent return behavior, returning a
processed result on success but implicitly returning None if no successful
result is found or an exception is raised. Refactor the method to ensure all
execution paths either return a value or raise an exception explicitly.
Additionally, extract the argument preparation logic (building the arguments
dictionary from parameters and schema) into a separate helper method to reduce
complexity and improve readability.

Comment on lines +172 to +376
field_schema["description"] = original_descriptions[base_field_name]
elif field_name in original_descriptions:
field_schema["description"] = original_descriptions[field_name]
except (KeyError, TypeError, ValueError):
self._action_schemas[action_key] = tool_dict
self._actions_data[action_key] = {
"display_name": display_name,
"action_fields": [],
"file_upload_fields": set(),
}
continue

if flat_schema is None:
logger.warning(f"Flat schema is None for action key: {action_key}")
# Still add the action but with empty fields so the UI doesn't break
self._action_schemas[action_key] = tool_dict
self._actions_data[action_key] = {
"display_name": display_name,
"action_fields": [],
"file_upload_fields": set(),
}
continue

# Extract field names and detect file upload fields during parsing
raw_action_fields = list(flat_schema.get("properties", {}).keys())
action_fields = []
attachment_related_found = False
file_upload_fields = set()

# Check original schema properties for file_uploadable fields
original_props = parameters_schema.get("properties", {})
for field_name, field_schema in original_props.items():
if isinstance(field_schema, dict):
clean_field_name = field_name.replace("[0]", "")
# Check direct file_uploadable attribute
if field_schema.get("file_uploadable") is True:
file_upload_fields.add(clean_field_name)
logger.debug(f"Found file upload field: {clean_field_name} in {action_key}")

# Check anyOf structures (like OUTLOOK_OUTLOOK_SEND_EMAIL)
if "anyOf" in field_schema:
for any_of_item in field_schema["anyOf"]:
if isinstance(any_of_item, dict) and any_of_item.get("file_uploadable") is True:
file_upload_fields.add(clean_field_name)

for field in raw_action_fields:
clean_field = field.replace("[0]", "")
# Check if this field is attachment-related
if clean_field.lower().startswith("attachment."):
attachment_related_found = True
continue # Skip individual attachment fields

# Handle conflicting field names - rename user_id to avoid conflicts with entity_id
if clean_field == "user_id":
clean_field = f"{self.app_name}_user_id"
logger.debug(f"Renamed user_id to {clean_field} to avoid conflict with entity_id")

action_fields.append(clean_field)

# Add consolidated attachment field if we found attachment-related fields
if attachment_related_found:
action_fields.append("attachment")
file_upload_fields.add("attachment") # Attachment fields are also file upload fields

# Track boolean parameters so we can coerce them later
properties = flat_schema.get("properties", {})
if properties:
for p_name, p_schema in properties.items():
if isinstance(p_schema, dict) and p_schema.get("type") == "boolean":
# Use cleaned field name for boolean tracking
clean_field_name = p_name.replace("[0]", "")
self._bool_variables.add(clean_field_name)

self._action_schemas[action_key] = tool_dict
self._actions_data[action_key] = {
"display_name": display_name,
"action_fields": action_fields,
"file_upload_fields": file_upload_fields,
}

except (KeyError, TypeError, ValueError) as flatten_error:
logger.error(f"flatten_schema failed for {action_key}: {flatten_error}")
self._action_schemas[action_key] = tool_dict
self._actions_data[action_key] = {
"display_name": display_name,
"action_fields": [],
"file_upload_fields": set(),
}
continue

except ValueError as e:
logger.warning(f"Failed processing Composio tool for action {raw_tool}: {e}")

# Helper look-ups used elsewhere
self._all_fields = {f for d in self._actions_data.values() for f in d["action_fields"]}
self._build_action_maps()

except ValueError as e:
logger.debug(f"Could not populate Composio actions for {self.app_name}: {e}")

Copy link
Contributor

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

Method is too complex - consider refactoring.

This method has excessive complexity with:

  • 33 local variables (exceeds limit of 15)
  • 39 branches (exceeds limit of 12)
  • 112 statements (exceeds limit of 50)
  • Up to 9 levels of nesting (exceeds limit of 5)

Consider breaking this method into smaller, focused helper methods:

  1. _fetch_raw_tools() - for fetching tools from Composio
  2. _process_tool_metadata() - for extracting action key and display name
  3. _process_parameters_schema() - for schema flattening and field extraction
  4. _identify_file_upload_fields() - for file upload field detection

Would you like me to help refactor this method into smaller, more maintainable functions?

🧰 Tools
🪛 Pylint (3.3.7)

[refactor] 172-172: Too many local variables (33/15)

(R0914)


[refactor] 181-375: Too many nested blocks (6/5)

(R1702)


[refactor] 181-375: Too many nested blocks (7/5)

(R1702)


[refactor] 181-375: Too many nested blocks (9/5)

(R1702)


[refactor] 181-375: Too many nested blocks (9/5)

(R1702)


[refactor] 181-375: Too many nested blocks (6/5)

(R1702)


[refactor] 172-172: Too many branches (39/12)

(R0912)


[refactor] 172-172: Too many statements (112/50)

(R0915)


[refactor] 181-375: Too many nested blocks (7/5)

(R1702)

🤖 Prompt for AI Agents
In src/backend/base/langflow/base/composio/composio_base.py from lines 172 to
376, the _populate_actions_data method is overly complex with too many
variables, branches, statements, and nesting levels. To fix this, refactor the
method by extracting smaller helper methods: one to fetch raw tools
(_fetch_raw_tools), one to process tool metadata like action key and display
name (_process_tool_metadata), one to handle schema flattening and field
extraction (_process_parameters_schema), and one to identify file upload fields
(_identify_file_upload_fields). Then call these helpers in
_populate_actions_data to simplify and clarify the logic.

Comment on lines 637 to 883

if has_active_connections:
# User has active connection
build_config["auth_link"]["value"] = "validated"
build_config["auth_link"]["auth_tooltip"] = "Disconnect"
build_config["action"]["helper_text"] = ""
build_config["action"]["helper_text_metadata"] = {}
else:
# No active connection - create OAuth connection and set redirect URL immediately
try:
build_config["auth_link"]["value"] = self._initiate_default_connection(entity, self.app_name)
logger.info(f"No active connection found. Creating OAuth connection for {toolkit_slug}...")
connection = toolset.toolkits.authorize(user_id=self.entity_id, toolkit=toolkit_slug)

# Get the redirect URL
redirect_url = getattr(connection, "redirect_url", None)
if not redirect_url:
# Try accessing it as a property or method
if hasattr(connection, "redirect_url"):
redirect_url = connection.redirect_url
else:
error_message = "No redirect URL received from Composio"
raise ValueError(error_message)

# Validate the URL format
if not redirect_url.startswith(("http://", "https://")):
message = f"Invalid redirect URL format: {redirect_url}"
raise ValueError(message)

# Log the URL for debugging and manual use if needed
logger.info(f"🔗 Composio OAuth URL for {toolkit_slug}: {redirect_url}")

# Set the redirect URL directly - like the old implementation
build_config["auth_link"]["value"] = redirect_url
build_config["auth_link"]["auth_tooltip"] = "Connect"
except (ValueError, ConnectionError, ApiKeyError) as e:
build_config["auth_link"]["value"] = "disabled"
build_config["action"]["helper_text"] = "Please connect before selecting actions."
build_config["action"]["helper_text_metadata"] = {"variant": "destructive"}
except ValueError as e:
logger.error(f"Error creating OAuth connection: {e}")
build_config["auth_link"]["value"] = "connect"
build_config["auth_link"]["auth_tooltip"] = f"Error: {e!s}"
logger.error(f"Error checking auth status: {e}")
build_config["action"]["helper_text"] = "Please connect before selecting actions."
build_config["action"]["helper_text_metadata"] = {"variant": "destructive"}

except ValueError as e:
logger.error(f"Error checking connection status for {toolkit_slug}: {e}")
# Default to disconnected state on error
build_config["auth_link"]["value"] = "connect"
build_config["auth_link"]["auth_tooltip"] = "Connect"
build_config["action"]["helper_text"] = "Please connect before selecting actions."
build_config["action"]["helper_text_metadata"] = {"variant": "destructive"}

except (ValueError, ConnectionError) as e:
build_config["auth_link"]["value"] = "error"
build_config["auth_link"]["auth_tooltip"] = f"Error: {e!s}"
logger.error(f"Error checking auth status: {e}")
except ApiKeyError as e:
except ValueError as e:
build_config["auth_link"]["value"] = ""
build_config["auth_link"]["auth_tooltip"] = "Please provide a valid Composio API Key."
build_config["action"]["options"] = []
build_config["action"]["value"] = ""
build_config["action"]["helper_text"] = "Please connect before selecting actions."
build_config["action"]["helper_text_metadata"] = {"variant": "destructive"}
logger.error(f"Error checking auth status: {e}")
logger.error(f"Error in auth flow: {e}")

# Handle disconnection
if field_name == "auth_link" and field_value == "disconnect":
try:
for field in self._all_fields:
build_config[field]["show"] = False
toolset = self._build_wrapper()
entity = toolset.client.get_entity(id=self.entity_id)
self.disconnect_connection(entity, self.app_name)
build_config["auth_link"]["value"] = self._initiate_default_connection(entity, self.app_name)
build_config["auth_link"]["auth_tooltip"] = "Connect"
build_config["action"]["helper_text"] = "Please connect before selecting actions."
build_config["action"]["helper_text_metadata"] = {
"variant": "destructive",
}
build_config["action"]["options"] = []
build_config["action"]["value"] = ""
except (ValueError, ConnectionError, ApiKeyError) as e:
build_config["auth_link"]["value"] = "error"
build_config["auth_link"]["auth_tooltip"] = f"Failed to disconnect from the app: {e}"
logger.error(f"Error disconnecting: {e}")
if field_name == "auth_link" and field_value == "validated":
build_config["action"]["helper_text"] = ""
build_config["action"]["helper_text_metadata"] = {"icon": "Check", "variant": "success"}
# CRITICAL: Final check to ensure action field is hidden when tool_mode is enabled
# This overrides any other logic that might have set it to visible
if self._is_tool_mode_enabled():
build_config["action"]["show"] = False
logger.debug("Final check: Hiding action field because tool_mode is enabled")

return build_config
Copy link
Contributor

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

⚠️ Potential issue

Critical: Method is extremely complex and needs major refactoring.

This method has severe complexity issues:

  • 26 local variables
  • 54 branches (4.5x the recommended limit)
  • 154 statements (3x the recommended limit)
  • Multiple deeply nested conditionals

The method is trying to handle too many responsibilities:

  1. Tool mode state management
  2. API key validation
  3. Connection status checking
  4. OAuth flow handling
  5. Build config updates
  6. Action field visibility

Consider extracting these into separate methods:

  • _handle_tool_mode_change()
  • _handle_api_key_change()
  • _check_connection_status()
  • _handle_oauth_flow()
  • _update_action_visibility()
🧰 Tools
🪛 Flake8 (7.2.0)

[error] 681-681: at least two spaces before inline comment

(E261)


[error] 681-681: inline comment should start with '# '

(E262)


[error] 755-755: at least two spaces before inline comment

(E261)


[error] 755-755: inline comment should start with '# '

(E262)


[error] 774-774: at least two spaces before inline comment

(E261)


[error] 774-774: inline comment should start with '# '

(E262)


[error] 809-809: at least two spaces before inline comment

(E261)


[error] 809-809: inline comment should start with '# '

(E262)


[error] 813-813: at least two spaces before inline comment

(E261)


[error] 813-813: inline comment should start with '# '

(E262)

🪛 Pylint (3.3.7)

[refactor] 637-637: Too many local variables (26/15)

(R0914)


[refactor] 748-875: Too many nested blocks (7/5)

(R1702)


[refactor] 748-875: Too many nested blocks (7/5)

(R1702)


[refactor] 748-875: Too many nested blocks (6/5)

(R1702)


[refactor] 748-875: Too many nested blocks (6/5)

(R1702)


[refactor] 637-637: Too many return statements (8/6)

(R0911)


[refactor] 637-637: Too many branches (54/12)

(R0912)


[refactor] 637-637: Too many statements (154/50)

(R0915)

🤖 Prompt for AI Agents
In src/backend/base/langflow/base/composio/composio_base.py between lines 637
and 883, the update_build_config method is overly complex with excessive local
variables, branches, and nested conditionals, making it hard to maintain.
Refactor by extracting distinct responsibilities into separate helper methods:
create _handle_tool_mode_change to manage tool mode state updates and
visibility, _handle_api_key_change for API key validation and related config
updates, _check_connection_status to encapsulate connection status logic,
_handle_oauth_flow for OAuth connection creation and error handling, and
_update_action_visibility to centralize action field show/hide logic. Then
simplify update_build_config by delegating to these methods, reducing complexity
and improving readability.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request javascript Pull requests that update Javascript code size:XXL This PR changes 1000+ lines, ignoring generated files.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants