-
Notifications
You must be signed in to change notification settings - Fork 7k
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
base: main
Are you sure you want to change the base?
Conversation
WalkthroughThis 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
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
Suggested labels
Suggested reviewers
✨ Finishing Touches
🧪 Generate Unit Tests
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. 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
SupportNeed 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)
Other keywords and placeholders
Documentation and Community
|
There was a problem hiding this 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 resolutionThe file lists the same libraries twice (
certifi
andfilelock
). 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 wrapperSame issues as the Zoom icon: the SVG ignores
isdark
and noindex.tsx
withforwardRef
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 apass
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 apass
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 apass
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 apass
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 apass
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 asclassName
,style
,width
, etc. Typing the props asReact.SVGProps<SVGSVGElement>
(which already includeschildren
) 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 theisdark
theme toggle
props
is never used – consumers cannot setclassName
,onClick
, etc.- 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 iconSame 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
: UseSVGProps
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, considerReact.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 shapeOptional 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 configurationsrc/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 apass
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: E501Also 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, 813Also 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
⛔ 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 insrc/frontend/src/icons/YourIconName/
and add your SVG as a React component (e.g.,YourIconName.jsx
) that uses theisdark
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 anindex.tsx
in your icon directory that exports your icon usingforwardRef
and passes theisdark
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 theisdark
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 theicon
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 thelazyIconsMapping
object insrc/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 supportThe wrapper faithfully forwards props, but the underlying
googlesheets.jsx
hard-codes fill colours and ignores anisdark
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 exposeclassName
/style
so Tailwind can style the fills).src/frontend/src/icons/todoist/index.tsx (1)
4-9
: Dark-mode still unimplemented in underlying SVGSame observation as for Google Sheets: the wrapper forwards props, but
todoist.jsx
does not react toisdark
. 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 backendicon = "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 withLangchainProvider
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.
export const RedditIcon = forwardRef< | ||
SVGSVGElement, | ||
React.PropsWithChildren<{}> | ||
>((props, ref) => { | ||
return <RedditIconSVG ref={ref} {...props} />; | ||
}); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
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.
export const LinearIcon = forwardRef< | ||
SVGSVGElement, | ||
React.PropsWithChildren<{}> | ||
>((props, ref) => { | ||
return <LinearIconSVG ref={ref} {...props} />; | ||
}); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
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; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
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.
export const GooglemapsIcon = forwardRef< | ||
SVGSVGElement, | ||
React.PropsWithChildren<{}> | ||
>((props, ref) => { | ||
return <GooglemapsIconSVG ref={ref} {...props} />; | ||
}); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
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.
export const ZoomIcon = forwardRef< | ||
SVGSVGElement, | ||
React.PropsWithChildren<{}> | ||
>((props, ref) => { | ||
return <ZoomIconSVG ref={ref} {...props} />; | ||
}); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
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.
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 | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
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.
# 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 [] | ||
|
There was a problem hiding this comment.
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.
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 | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
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}") | ||
|
There was a problem hiding this comment.
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:
_fetch_raw_tools()
- for fetching tools from Composio_process_tool_metadata()
- for extracting action key and display name_process_parameters_schema()
- for schema flattening and field extraction_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.
|
||
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 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
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:
- Tool mode state management
- API key validation
- Connection status checking
- OAuth flow handling
- Build config updates
- 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.
Changes
composio
package, updatedcomposio_langchain
, removedcomposio-core
Processed response screenshot for reference:

Summary by CodeRabbit
New Features
Improvements
Bug Fixes
Removals