lfx-nightly 0.1.12.dev39__py3-none-any.whl → 0.1.12.dev40__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of lfx-nightly might be problematic. Click here for more details.

Files changed (30) hide show
  1. lfx/_assets/component_index.json +1 -1
  2. lfx/base/composio/composio_base.py +73 -170
  3. lfx/components/arxiv/arxiv.py +8 -2
  4. lfx/components/composio/__init__.py +71 -17
  5. lfx/components/composio/agentql_composio.py +11 -0
  6. lfx/components/composio/agiled_composio.py +11 -0
  7. lfx/components/composio/bolna_composio.py +11 -0
  8. lfx/components/composio/brightdata_composio.py +11 -0
  9. lfx/components/composio/canvas_composio.py +11 -0
  10. lfx/components/composio/digicert_composio.py +11 -0
  11. lfx/components/composio/finage_composio.py +11 -0
  12. lfx/components/composio/fixer_composio.py +11 -0
  13. lfx/components/composio/flexisign_composio.py +11 -0
  14. lfx/components/composio/freshdesk_composio.py +11 -0
  15. lfx/components/composio/googleclassroom_composio.py +11 -0
  16. lfx/components/composio/instagram_composio.py +11 -0
  17. lfx/components/composio/jira_composio.py +11 -0
  18. lfx/components/composio/jotform_composio.py +11 -0
  19. lfx/components/composio/listennotes_composio.py +11 -0
  20. lfx/components/composio/missive_composio.py +11 -0
  21. lfx/components/composio/pandadoc_composio.py +11 -0
  22. lfx/components/composio/slack_composio.py +573 -2
  23. lfx/components/composio/timelinesai_composio.py +11 -0
  24. lfx/components/logic/__init__.py +3 -0
  25. lfx/components/logic/llm_conditional_router.py +65 -21
  26. lfx/components/processing/lambda_filter.py +82 -18
  27. {lfx_nightly-0.1.12.dev39.dist-info → lfx_nightly-0.1.12.dev40.dist-info}/METADATA +1 -1
  28. {lfx_nightly-0.1.12.dev39.dist-info → lfx_nightly-0.1.12.dev40.dist-info}/RECORD +30 -12
  29. {lfx_nightly-0.1.12.dev39.dist-info → lfx_nightly-0.1.12.dev40.dist-info}/WHEEL +0 -0
  30. {lfx_nightly-0.1.12.dev39.dist-info → lfx_nightly-0.1.12.dev40.dist-info}/entry_points.txt +0 -0
@@ -67,96 +67,6 @@ class ComposioBaseComponent(Component):
67
67
  auth_tooltip="Please insert a valid Composio API Key.",
68
68
  show=False,
69
69
  ),
70
- # Pre-defined placeholder fields for dynamic auth - will be updated dynamically
71
- StrInput(
72
- name="client_id",
73
- display_name="Client id",
74
- info="",
75
- show=False,
76
- value="",
77
- required=False,
78
- ),
79
- StrInput(
80
- name="client_secret",
81
- display_name="Client secret",
82
- info="",
83
- show=False,
84
- value="",
85
- required=False,
86
- ),
87
- StrInput(
88
- name="verification_token",
89
- display_name="Verification Token",
90
- info="",
91
- show=False,
92
- value="",
93
- required=False,
94
- ),
95
- StrInput(
96
- name="api_key_field",
97
- display_name="API Key",
98
- info="",
99
- show=False,
100
- value="",
101
- required=False,
102
- ),
103
- StrInput(
104
- name="token",
105
- display_name="Token",
106
- info="",
107
- show=False,
108
- value="",
109
- required=False,
110
- ),
111
- # Additional common auth fields
112
- StrInput(
113
- name="access_token",
114
- display_name="Access Token",
115
- info="",
116
- show=False,
117
- value="",
118
- required=False,
119
- ),
120
- StrInput(
121
- name="refresh_token",
122
- display_name="Refresh Token",
123
- info="",
124
- show=False,
125
- value="",
126
- required=False,
127
- ),
128
- StrInput(
129
- name="username",
130
- display_name="Username",
131
- info="",
132
- show=False,
133
- value="",
134
- required=False,
135
- ),
136
- StrInput(
137
- name="password",
138
- display_name="Password",
139
- info="",
140
- show=False,
141
- value="",
142
- required=False,
143
- ),
144
- StrInput(
145
- name="domain",
146
- display_name="Domain",
147
- info="",
148
- show=False,
149
- value="",
150
- required=False,
151
- ),
152
- StrInput(
153
- name="base_url",
154
- display_name="Base URL",
155
- info="",
156
- show=False,
157
- value="",
158
- required=False,
159
- ),
160
70
  SortableListInput(
161
71
  name="action_button",
162
72
  display_name="Action",
@@ -851,6 +761,9 @@ class ComposioBaseComponent(Component):
851
761
  for inp in lf_inputs:
852
762
  if inp.name is not None:
853
763
  inp_dict = inp.to_dict() if hasattr(inp, "to_dict") else inp.__dict__.copy()
764
+
765
+ # Do not mutate input_types here; keep original configuration
766
+
854
767
  inp_dict.setdefault("show", True) # visible once action selected
855
768
  # Preserve previously entered value if user already filled something
856
769
  if inp.name in build_config:
@@ -1012,14 +925,26 @@ class ComposioBaseComponent(Component):
1012
925
  return self._toolkit_schema
1013
926
  try:
1014
927
  composio = self._build_wrapper()
928
+ # The SDK typically offers a retrieve by slug; if not present, try a few fallbacks
1015
929
  app_slug = getattr(self, "app_name", "").lower()
1016
930
  if not app_slug:
1017
931
  return None
1018
932
  try:
1019
- schema = composio.toolkits.get(slug=app_slug)
1020
- except (AttributeError, ValueError, ConnectionError, TypeError) as e:
1021
- logger.debug(f"Could not get toolkit schema for {app_slug}: {e}")
1022
- return None
933
+ schema = composio.toolkits.retrieve(slug=app_slug)
934
+ except (AttributeError, ValueError, ConnectionError, TypeError):
935
+ schema = None
936
+ for method_name, kwargs in (
937
+ ("retrieve", {"toolkit_slug": app_slug}),
938
+ ("get", {"slug": app_slug}),
939
+ ("get", {"toolkit_slug": app_slug}),
940
+ ):
941
+ try:
942
+ method = getattr(composio.toolkits, method_name)
943
+ schema = method(**kwargs)
944
+ if schema:
945
+ break
946
+ except (AttributeError, ValueError, ConnectionError, TypeError):
947
+ continue
1023
948
  self._toolkit_schema = self._to_plain_dict(schema)
1024
949
  except (AttributeError, ValueError, ConnectionError, TypeError) as e:
1025
950
  logger.debug(f"Could not retrieve toolkit schema for {getattr(self, 'app_name', '')}: {e}")
@@ -1034,12 +959,8 @@ class ComposioBaseComponent(Component):
1034
959
  modes: list[str] = []
1035
960
  # composio_managed_auth_schemes: list[str]
1036
961
  managed = schema.get("composio_managed_auth_schemes") or schema.get("composioManagedAuthSchemes") or []
1037
- has_managed_schemes = isinstance(managed, list) and len(managed) > 0
1038
-
1039
- # Add "Composio managed" as first option if there are managed schemes
1040
- if has_managed_schemes:
1041
- modes.append("Composio managed")
1042
-
962
+ if isinstance(managed, list):
963
+ modes.extend([m for m in managed if isinstance(m, str)])
1043
964
  # auth_config_details: list with entries containing mode
1044
965
  details = schema.get("auth_config_details") or schema.get("authConfigDetails") or []
1045
966
  for item in details:
@@ -1093,11 +1014,8 @@ class ComposioBaseComponent(Component):
1093
1014
 
1094
1015
  def _clear_auth_dynamic_fields(self, build_config: dict) -> None:
1095
1016
  for fname in list(self._auth_dynamic_fields):
1096
- if fname in build_config and isinstance(build_config[fname], dict):
1097
- # Hide and reset instead of removing
1098
- build_config[fname]["show"] = False
1099
- build_config[fname]["value"] = ""
1100
- build_config[fname]["required"] = False
1017
+ if fname in build_config:
1018
+ build_config.pop(fname, None)
1101
1019
  self._auth_dynamic_fields.clear()
1102
1020
 
1103
1021
  def _add_text_field(
@@ -1110,29 +1028,18 @@ class ComposioBaseComponent(Component):
1110
1028
  required: bool,
1111
1029
  default_value: str | None = None,
1112
1030
  ) -> None:
1113
- """Update existing field or add new text input for custom auth forms."""
1114
- # Check if field already exists in build_config (pre-defined placeholder)
1115
- if name in build_config:
1116
- # Update existing field properties
1117
- build_config[name]["display_name"] = display_name or name.replace("_", " ").title()
1118
- build_config[name]["info"] = info or ""
1119
- build_config[name]["required"] = required
1120
- build_config[name]["show"] = True
1121
- if default_value is not None and default_value != "":
1122
- build_config[name]["value"] = default_value
1123
- else:
1124
- # Create new field if not pre-defined
1125
- field = StrInput(
1126
- name=name,
1127
- display_name=display_name or name.replace("_", " ").title(),
1128
- info=info or "",
1129
- required=required,
1130
- real_time_refresh=True,
1131
- show=True,
1132
- ).to_dict()
1133
- if default_value is not None and default_value != "":
1134
- field["value"] = default_value
1135
- build_config[name] = field
1031
+ """Add a simple text input (StrInput) for custom auth forms, prefilled with schema defaults when available."""
1032
+ field = StrInput(
1033
+ name=name,
1034
+ display_name=display_name or name.replace("_", " ").title(),
1035
+ info=info or "",
1036
+ required=required,
1037
+ real_time_refresh=True,
1038
+ show=True,
1039
+ ).to_dict()
1040
+ if default_value is not None and default_value != "":
1041
+ field["value"] = default_value
1042
+ build_config[name] = field
1136
1043
  self._auth_dynamic_fields.add(name)
1137
1044
 
1138
1045
  def _render_custom_auth_fields(self, build_config: dict, schema: dict[str, Any], mode: str) -> None:
@@ -1146,37 +1053,35 @@ class ComposioBaseComponent(Component):
1146
1053
  if not selected:
1147
1054
  return
1148
1055
  fields = selected.get("fields") or {}
1149
-
1150
- # Helper function to process fields
1151
- def process_fields(field_list: list, *, required: bool) -> None:
1152
- for field in field_list:
1153
- name = field.get("name")
1154
- if not name:
1155
- continue
1156
- # Skip Access Token field (bearer_token)
1157
- if name == "bearer_token":
1158
- continue
1159
- # Skip fields with default values for both required and optional fields
1160
- default_val = field.get("default")
1161
- if default_val is not None:
1162
- continue
1163
- disp = field.get("display_name") or field.get("displayName") or name
1164
- desc = field.get("description")
1165
- self._add_text_field(build_config, name, disp, desc, required=required, default_value=default_val)
1166
-
1167
- # a) AuthConfigCreation fields (for custom OAuth2, etc.)
1056
+ # a) AuthConfigCreation required fields for OAUTH2 custom
1168
1057
  creation = fields.get("auth_config_creation") or fields.get("authConfigCreation") or {}
1169
- # Process required fields
1170
- process_fields(creation.get("required", []), required=True)
1171
- # Process optional fields (excluding those with defaults and bearer_token)
1172
- process_fields(creation.get("optional", []), required=False)
1173
-
1174
- # b) ConnectedAccountInitiation fields (for API_KEY, etc.)
1058
+ for req in creation.get("required", []):
1059
+ name = req.get("name")
1060
+ if not name:
1061
+ continue
1062
+ disp = req.get("display_name") or req.get("displayName") or name
1063
+ desc = req.get("description")
1064
+ default_val = req.get("default")
1065
+ self._add_text_field(build_config, name, disp, desc, required=True, default_value=default_val)
1066
+ # Optional auth_config_creation fields intentionally not rendered
1067
+ # b) ConnectedAccountInitiation fields for API_KEY mode
1175
1068
  initiation = fields.get("connected_account_initiation") or fields.get("connectedAccountInitiation") or {}
1176
- # Process required fields
1177
- process_fields(initiation.get("required", []), required=True)
1178
- # Process optional fields (excluding those with defaults)
1179
- process_fields(initiation.get("optional", []), required=False)
1069
+ for req in initiation.get("required", []):
1070
+ name = req.get("name")
1071
+ if not name:
1072
+ continue
1073
+ disp = req.get("display_name") or req.get("displayName") or name
1074
+ desc = req.get("description")
1075
+ default_val = req.get("default")
1076
+ self._add_text_field(build_config, name, disp, desc, required=True, default_value=default_val)
1077
+ for opt in initiation.get("optional", []):
1078
+ name = opt.get("name")
1079
+ if not name:
1080
+ continue
1081
+ disp = opt.get("display_name") or opt.get("displayName") or name
1082
+ desc = opt.get("description")
1083
+ default_val = opt.get("default")
1084
+ self._add_text_field(build_config, name, disp, desc, required=False, default_value=default_val)
1180
1085
 
1181
1086
  def _collect_all_auth_field_names(self, schema: dict[str, Any] | None) -> set[str]:
1182
1087
  names: set[str] = set()
@@ -1226,6 +1131,8 @@ class ComposioBaseComponent(Component):
1226
1131
 
1227
1132
  def update_build_config(self, build_config: dict, field_value: Any, field_name: str | None = None) -> dict:
1228
1133
  """Update build config for auth and action selection."""
1134
+ # Avoid normalizing legacy input_types here; rely on upstream fixes
1135
+
1229
1136
  # BULLETPROOF tool_mode checking - check all possible places where tool_mode could be stored
1230
1137
  instance_tool_mode = getattr(self, "tool_mode", False) if hasattr(self, "tool_mode") else False
1231
1138
 
@@ -1282,8 +1189,7 @@ class ComposioBaseComponent(Component):
1282
1189
  try:
1283
1190
  selected_mode = (build_config.get("auth_mode") or {}).get("value")
1284
1191
  managed = (schema or {}).get("composio_managed_auth_schemes") or []
1285
- # Don't render custom fields if "Composio managed" is selected
1286
- if selected_mode and selected_mode != "Composio managed":
1192
+ if selected_mode and not (isinstance(managed, list) and selected_mode in managed):
1287
1193
  self._clear_auth_dynamic_fields(build_config)
1288
1194
  self._render_custom_auth_fields(build_config, schema or {}, selected_mode)
1289
1195
  except (TypeError, ValueError, AttributeError):
@@ -1429,13 +1335,9 @@ class ComposioBaseComponent(Component):
1429
1335
  build_config["create_auth_config"]["value"] = ""
1430
1336
  build_config["create_auth_config"]["helper_text"] = ""
1431
1337
  build_config["create_auth_config"]["options"] = ["create"]
1432
- if mode == "Composio managed":
1433
- # Composio managed → no extra fields needed
1338
+ if isinstance(managed, list) and mode in managed:
1339
+ # Managed → no extra fields
1434
1340
  pass
1435
- elif isinstance(managed, list) and mode in managed:
1436
- # This is a specific managed auth scheme (e.g., OAUTH2) but user can still choose custom
1437
- # So we should render custom fields for this mode
1438
- self._render_custom_auth_fields(build_config, schema, mode)
1439
1341
  else:
1440
1342
  # Custom → render only required fields based on the toolkit schema
1441
1343
  self._render_custom_auth_fields(build_config, schema, mode)
@@ -1471,10 +1373,7 @@ class ComposioBaseComponent(Component):
1471
1373
  mode = build_config["auth_mode"].get("value")
1472
1374
  # If no managed default exists (400 Default auth config), require mode selection
1473
1375
  managed = (schema or {}).get("composio_managed_auth_schemes") or []
1474
-
1475
- # Handle "Composio managed" mode explicitly
1476
- if mode == "Composio managed":
1477
- # Use Composio managed auth flow
1376
+ if isinstance(managed, list) and "OAUTH2" in managed and (mode is None or mode == "OAUTH2"):
1478
1377
  redirect_url, connection_id = self._initiate_connection(toolkit_slug)
1479
1378
  build_config["auth_link"]["value"] = redirect_url
1480
1379
  logger.info(f"New OAuth URL created for {toolkit_slug}: {redirect_url}")
@@ -1849,7 +1748,11 @@ class ComposioBaseComponent(Component):
1849
1748
  schema = self._get_toolkit_schema()
1850
1749
  mode = (build_config.get("auth_mode") or {}).get("value")
1851
1750
  managed = (schema or {}).get("composio_managed_auth_schemes") or []
1852
- if mode and mode != "Composio managed" and not getattr(self, "_auth_dynamic_fields", set()):
1751
+ if (
1752
+ mode
1753
+ and not (isinstance(managed, list) and mode in managed)
1754
+ and not getattr(self, "_auth_dynamic_fields", set())
1755
+ ):
1853
1756
  self._render_custom_auth_fields(build_config, schema or {}, mode)
1854
1757
  except (TypeError, ValueError, AttributeError):
1855
1758
  pass
@@ -45,8 +45,14 @@ class ArXivComponent(Component):
45
45
  """Build the arXiv API query URL."""
46
46
  base_url = "http://export.arxiv.org/api/query?"
47
47
 
48
- # Build the search query
49
- search_query = f"{self.search_type}:{self.search_query}"
48
+ # Build the search query based on search type
49
+ if self.search_type == "all":
50
+ search_query = self.search_query # No prefix for all fields
51
+ else:
52
+ # Map dropdown values to ArXiv API prefixes
53
+ prefix_map = {"title": "ti", "abstract": "abs", "author": "au", "cat": "cat"}
54
+ prefix = prefix_map.get(self.search_type, "")
55
+ search_query = f"{prefix}:{self.search_query}"
50
56
 
51
57
  # URL parameters
52
58
  params = {
@@ -5,93 +5,147 @@ from typing import TYPE_CHECKING, Any
5
5
  from lfx.components._importing import import_mod
6
6
 
7
7
  if TYPE_CHECKING:
8
+ from .agentql_composio import ComposioAgentQLAPIComponent
9
+ from .agiled_composio import ComposioAgiledAPIComponent
8
10
  from .airtable_composio import ComposioAirtableAPIComponent
9
11
  from .asana_composio import ComposioAsanaAPIComponent
10
12
  from .attio_composio import ComposioAttioAPIComponent
13
+ from .bolna_composio import ComposioBolnaAPIComponent
14
+ from .brightdata_composio import ComposioBrightdataAPIComponent
11
15
  from .calendly_composio import ComposioCalendlyAPIComponent
16
+ from .canvas_composio import ComposioCanvasAPIComponent
12
17
  from .composio_api import ComposioAPIComponent
13
18
  from .contentful_composio import ComposioContentfulAPIComponent
19
+ from .digicert_composio import ComposioDigicertAPIComponent
14
20
  from .discord_composio import ComposioDiscordAPIComponent
15
21
  from .figma_composio import ComposioFigmaAPIComponent
22
+ from .finage_composio import ComposioFinageAPIComponent
23
+ from .fixer_composio import ComposioFixerAPIComponent
24
+ from .flexisign_composio import ComposioFlexisignAPIComponent
25
+ from .freshdesk_composio import ComposioFreshdeskAPIComponent
16
26
  from .github_composio import ComposioGitHubAPIComponent
17
27
  from .gmail_composio import ComposioGmailAPIComponent
18
28
  from .googlecalendar_composio import ComposioGoogleCalendarAPIComponent
29
+ from .googleclassroom_composio import ComposioGoogleclassroomAPIComponent
19
30
  from .googledocs_composio import ComposioGoogleDocsAPIComponent
20
31
  from .googlemeet_composio import ComposioGooglemeetAPIComponent
21
32
  from .googlesheets_composio import ComposioGoogleSheetsAPIComponent
22
33
  from .googletasks_composio import ComposioGoogleTasksAPIComponent
34
+ from .instagram_composio import ComposioInstagramAPIComponent
35
+ from .jira_composio import ComposioJiraAPIComponent
36
+ from .jotform_composio import ComposioJotformAPIComponent
23
37
  from .klaviyo_composio import ComposioKlaviyoAPIComponent
24
38
  from .linear_composio import ComposioLinearAPIComponent
39
+ from .listennotes_composio import ComposioListennotesAPIComponent
25
40
  from .miro_composio import ComposioMiroAPIComponent
41
+ from .missive_composio import ComposioMissiveAPIComponent
26
42
  from .notion_composio import ComposioNotionAPIComponent
27
43
  from .onedrive_composio import ComposioOneDriveAPIComponent
28
44
  from .outlook_composio import ComposioOutlookAPIComponent
45
+ from .pandadoc_composio import ComposioPandadocAPIComponent
29
46
  from .reddit_composio import ComposioRedditAPIComponent
30
47
  from .slack_composio import ComposioSlackAPIComponent
31
48
  from .slackbot_composio import ComposioSlackbotAPIComponent
32
49
  from .supabase_composio import ComposioSupabaseAPIComponent
50
+ from .timelinesai_composio import ComposioTimelinesAIAPIComponent
33
51
  from .todoist_composio import ComposioTodoistAPIComponent
34
52
  from .wrike_composio import ComposioWrikeAPIComponent
35
53
  from .youtube_composio import ComposioYoutubeAPIComponent
36
54
 
37
55
  _dynamic_imports = {
38
56
  "ComposioAPIComponent": "composio_api",
57
+ "ComposioAgentQLAPIComponent": "agentql_composio",
58
+ "ComposioAgiledAPIComponent": "agiled_composio",
59
+ "ComposioAirtableAPIComponent": "airtable_composio",
60
+ "ComposioAsanaAPIComponent": "asana_composio",
61
+ "ComposioAttioAPIComponent": "attio_composio",
62
+ "ComposioBolnaAPIComponent": "bolna_composio",
63
+ "ComposioBrightdataAPIComponent": "brightdata_composio",
64
+ "ComposioCalendlyAPIComponent": "calendly_composio",
65
+ "ComposioCanvasAPIComponent": "canvas_composio",
66
+ "ComposioContentfulAPIComponent": "contentful_composio",
67
+ "ComposioDiscordAPIComponent": "discord_composio",
68
+ "ComposioDigicertAPIComponent": "digicert_composio",
69
+ "ComposioFigmaAPIComponent": "figma_composio",
39
70
  "ComposioGitHubAPIComponent": "github_composio",
40
71
  "ComposioGmailAPIComponent": "gmail_composio",
41
72
  "ComposioGoogleCalendarAPIComponent": "googlecalendar_composio",
42
- "ComposioGooglemeetAPIComponent": "googlemeet_composio",
43
- "ComposioOutlookAPIComponent": "outlook_composio",
44
- "ComposioSlackAPIComponent": "slack_composio",
73
+ "ComposioGoogleDocsAPIComponent": "googledocs_composio",
74
+ "ComposioGoogleSheetsAPIComponent": "googlesheets_composio",
45
75
  "ComposioGoogleTasksAPIComponent": "googletasks_composio",
76
+ "ComposioGooglemeetAPIComponent": "googlemeet_composio",
77
+ "ComposioJiraAPIComponent": "jira_composio",
78
+ "ComposioKlaviyoAPIComponent": "klaviyo_composio",
46
79
  "ComposioLinearAPIComponent": "linear_composio",
80
+ "ComposioMiroAPIComponent": "miro_composio",
81
+ "ComposioNotionAPIComponent": "notion_composio",
82
+ "ComposioOneDriveAPIComponent": "onedrive_composio",
83
+ "ComposioOutlookAPIComponent": "outlook_composio",
47
84
  "ComposioRedditAPIComponent": "reddit_composio",
85
+ "ComposioSlackAPIComponent": "slack_composio",
48
86
  "ComposioSlackbotAPIComponent": "slackbot_composio",
49
87
  "ComposioSupabaseAPIComponent": "supabase_composio",
88
+ "ComposioTimelinesAIAPIComponent": "timelinesai_composio",
50
89
  "ComposioTodoistAPIComponent": "todoist_composio",
51
- "ComposioYoutubeAPIComponent": "youtube_composio",
52
- "ComposioGoogleDocsAPIComponent": "googledocs_composio",
53
- "ComposioGoogleSheetsAPIComponent": "googlesheets_composio",
54
- "ComposioKlaviyoAPIComponent": "klaviyo_composio",
55
- "ComposioNotionAPIComponent": "notion_composio",
56
- "ComposioOneDriveAPIComponent": "onedrive_composio",
57
- "ComposioAirtableAPIComponent": "airtable_composio",
58
- "ComposioAsanaAPIComponent": "asana_composio",
59
- "ComposioAttioAPIComponent": "attio_composio",
60
- "ComposioCalendlyAPIComponent": "calendly_composio",
61
- "ComposioContentfulAPIComponent": "contentful_composio",
62
- "ComposioDiscordAPIComponent": "discord_composio",
63
- "ComposioFigmaAPIComponent": "figma_composio",
64
- "ComposioMiroAPIComponent": "miro_composio",
65
90
  "ComposioWrikeAPIComponent": "wrike_composio",
91
+ "ComposioYoutubeAPIComponent": "youtube_composio",
92
+ "ComposioFinageAPIComponent": "finage_composio",
93
+ "ComposioFixerAPIComponent": "fixer_composio",
94
+ "ComposioFlexisignAPIComponent": "flexisign_composio",
95
+ "ComposioFreshdeskAPIComponent": "freshdesk_composio",
96
+ "ComposioGoogleclassroomAPIComponent": "googleclassroom_composio",
97
+ "ComposioInstagramAPIComponent": "instagram_composio",
98
+ "ComposioJotformAPIComponent": "jotform_composio",
99
+ "ComposioListennotesAPIComponent": "listennotes_composio",
100
+ "ComposioMissiveAPIComponent": "missive_composio",
101
+ "ComposioPandadocAPIComponent": "pandadoc_composio",
66
102
  }
67
103
 
68
104
  # Always expose all components - individual failures will be handled on import
69
105
  __all__ = [
70
106
  "ComposioAPIComponent",
107
+ "ComposioAgentQLAPIComponent",
108
+ "ComposioAgiledAPIComponent",
71
109
  "ComposioAirtableAPIComponent",
72
110
  "ComposioAsanaAPIComponent",
73
111
  "ComposioAttioAPIComponent",
112
+ "ComposioBolnaAPIComponent",
113
+ "ComposioBrightdataAPIComponent",
74
114
  "ComposioCalendlyAPIComponent",
115
+ "ComposioCanvasAPIComponent",
75
116
  "ComposioContentfulAPIComponent",
117
+ "ComposioDigicertAPIComponent",
76
118
  "ComposioDiscordAPIComponent",
77
119
  "ComposioFigmaAPIComponent",
120
+ "ComposioFinageAPIComponent",
121
+ "ComposioFixerAPIComponent",
122
+ "ComposioFlexisignAPIComponent",
123
+ "ComposioFreshdeskAPIComponent",
78
124
  "ComposioGitHubAPIComponent",
79
125
  "ComposioGmailAPIComponent",
80
126
  "ComposioGoogleCalendarAPIComponent",
81
127
  "ComposioGoogleDocsAPIComponent",
82
128
  "ComposioGoogleSheetsAPIComponent",
83
129
  "ComposioGoogleTasksAPIComponent",
130
+ "ComposioGoogleclassroomAPIComponent",
84
131
  "ComposioGooglemeetAPIComponent",
132
+ "ComposioInstagramAPIComponent",
133
+ "ComposioJiraAPIComponent",
134
+ "ComposioJotformAPIComponent",
85
135
  "ComposioKlaviyoAPIComponent",
86
136
  "ComposioLinearAPIComponent",
137
+ "ComposioListennotesAPIComponent",
87
138
  "ComposioMiroAPIComponent",
139
+ "ComposioMissiveAPIComponent",
88
140
  "ComposioNotionAPIComponent",
89
141
  "ComposioOneDriveAPIComponent",
90
142
  "ComposioOutlookAPIComponent",
143
+ "ComposioPandadocAPIComponent",
91
144
  "ComposioRedditAPIComponent",
92
145
  "ComposioSlackAPIComponent",
93
146
  "ComposioSlackbotAPIComponent",
94
147
  "ComposioSupabaseAPIComponent",
148
+ "ComposioTimelinesAIAPIComponent",
95
149
  "ComposioTodoistAPIComponent",
96
150
  "ComposioWrikeAPIComponent",
97
151
  "ComposioYoutubeAPIComponent",
@@ -0,0 +1,11 @@
1
+ from lfx.base.composio.composio_base import ComposioBaseComponent
2
+
3
+
4
+ class ComposioAgentQLAPIComponent(ComposioBaseComponent):
5
+ display_name: str = "AgentQL"
6
+ icon = "AgentQL"
7
+ documentation: str = "https://docs.composio.dev"
8
+ app_name = "agentql"
9
+
10
+ def set_default_tools(self):
11
+ """Set the default tools for AgentQL component."""
@@ -0,0 +1,11 @@
1
+ from lfx.base.composio.composio_base import ComposioBaseComponent
2
+
3
+
4
+ class ComposioAgiledAPIComponent(ComposioBaseComponent):
5
+ display_name: str = "Agiled"
6
+ icon = "Agiled"
7
+ documentation: str = "https://docs.composio.dev"
8
+ app_name = "agiled"
9
+
10
+ def set_default_tools(self):
11
+ """Set the default tools for Agiled component."""
@@ -0,0 +1,11 @@
1
+ from lfx.base.composio.composio_base import ComposioBaseComponent
2
+
3
+
4
+ class ComposioBolnaAPIComponent(ComposioBaseComponent):
5
+ display_name: str = "Bolna"
6
+ icon = "Bolna"
7
+ documentation: str = "https://docs.composio.dev"
8
+ app_name = "bolna"
9
+
10
+ def set_default_tools(self):
11
+ """Set the default tools for Bolna component."""
@@ -0,0 +1,11 @@
1
+ from lfx.base.composio.composio_base import ComposioBaseComponent
2
+
3
+
4
+ class ComposioBrightdataAPIComponent(ComposioBaseComponent):
5
+ display_name: str = "Brightdata"
6
+ icon = "Brightdata"
7
+ documentation: str = "https://docs.composio.dev"
8
+ app_name = "brightdata"
9
+
10
+ def set_default_tools(self):
11
+ """Set the default tools for Brightdata component."""
@@ -0,0 +1,11 @@
1
+ from lfx.base.composio.composio_base import ComposioBaseComponent
2
+
3
+
4
+ class ComposioCanvasAPIComponent(ComposioBaseComponent):
5
+ display_name: str = "Canvas"
6
+ icon = "Canvas"
7
+ documentation: str = "https://docs.composio.dev"
8
+ app_name = "canvas"
9
+
10
+ def set_default_tools(self):
11
+ """Set the default tools for Canvaas component."""
@@ -0,0 +1,11 @@
1
+ from lfx.base.composio.composio_base import ComposioBaseComponent
2
+
3
+
4
+ class ComposioDigicertAPIComponent(ComposioBaseComponent):
5
+ display_name: str = "Digicert"
6
+ icon = "Digicert"
7
+ documentation: str = "https://docs.composio.dev"
8
+ app_name = "digicert"
9
+
10
+ def set_default_tools(self):
11
+ """Set the default tools for Digicert component."""
@@ -0,0 +1,11 @@
1
+ from lfx.base.composio.composio_base import ComposioBaseComponent
2
+
3
+
4
+ class ComposioFinageAPIComponent(ComposioBaseComponent):
5
+ display_name: str = "Finage"
6
+ icon = "Finage"
7
+ documentation: str = "https://docs.composio.dev"
8
+ app_name = "finage"
9
+
10
+ def set_default_tools(self):
11
+ """Set the default tools for Finage component."""
@@ -0,0 +1,11 @@
1
+ from lfx.base.composio.composio_base import ComposioBaseComponent
2
+
3
+
4
+ class ComposioFixerAPIComponent(ComposioBaseComponent):
5
+ display_name: str = "Fixer"
6
+ icon = "Fixer"
7
+ documentation: str = "https://docs.composio.dev"
8
+ app_name = "fixer"
9
+
10
+ def set_default_tools(self):
11
+ """Set the default tools for Fixer component."""
@@ -0,0 +1,11 @@
1
+ from lfx.base.composio.composio_base import ComposioBaseComponent
2
+
3
+
4
+ class ComposioFlexisignAPIComponent(ComposioBaseComponent):
5
+ display_name: str = "Flexisign"
6
+ icon = "Flexisign"
7
+ documentation: str = "https://docs.composio.dev"
8
+ app_name = "flexisign"
9
+
10
+ def set_default_tools(self):
11
+ """Set the default tools for Flexisign component."""
@@ -0,0 +1,11 @@
1
+ from lfx.base.composio.composio_base import ComposioBaseComponent
2
+
3
+
4
+ class ComposioFreshdeskAPIComponent(ComposioBaseComponent):
5
+ display_name: str = "Freshdesk"
6
+ icon = "Freshdesk"
7
+ documentation: str = "https://docs.composio.dev"
8
+ app_name = "freshdesk"
9
+
10
+ def set_default_tools(self):
11
+ """Set the default tools for Freshdesk component."""
@@ -0,0 +1,11 @@
1
+ from lfx.base.composio.composio_base import ComposioBaseComponent
2
+
3
+
4
+ class ComposioGoogleclassroomAPIComponent(ComposioBaseComponent):
5
+ display_name: str = "Google Classroom"
6
+ icon = "Classroom"
7
+ documentation: str = "https://docs.composio.dev"
8
+ app_name = "GOOGLE_CLASSROOM"
9
+
10
+ def set_default_tools(self):
11
+ """Set the default tools for Google Classroom component."""