mindroom 0.0.0__py3-none-any.whl → 0.1.1__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.
Files changed (155) hide show
  1. mindroom/__init__.py +3 -0
  2. mindroom/agent_prompts.py +963 -0
  3. mindroom/agents.py +248 -0
  4. mindroom/ai.py +421 -0
  5. mindroom/api/__init__.py +1 -0
  6. mindroom/api/credentials.py +137 -0
  7. mindroom/api/google_integration.py +355 -0
  8. mindroom/api/google_tools_helper.py +40 -0
  9. mindroom/api/homeassistant_integration.py +421 -0
  10. mindroom/api/integrations.py +189 -0
  11. mindroom/api/main.py +506 -0
  12. mindroom/api/matrix_operations.py +219 -0
  13. mindroom/api/tools.py +94 -0
  14. mindroom/background_tasks.py +87 -0
  15. mindroom/bot.py +2470 -0
  16. mindroom/cli.py +86 -0
  17. mindroom/commands.py +377 -0
  18. mindroom/config.py +343 -0
  19. mindroom/config_commands.py +324 -0
  20. mindroom/config_confirmation.py +411 -0
  21. mindroom/constants.py +52 -0
  22. mindroom/credentials.py +146 -0
  23. mindroom/credentials_sync.py +134 -0
  24. mindroom/custom_tools/__init__.py +8 -0
  25. mindroom/custom_tools/config_manager.py +765 -0
  26. mindroom/custom_tools/gmail.py +92 -0
  27. mindroom/custom_tools/google_calendar.py +92 -0
  28. mindroom/custom_tools/google_sheets.py +92 -0
  29. mindroom/custom_tools/homeassistant.py +341 -0
  30. mindroom/error_handling.py +35 -0
  31. mindroom/file_watcher.py +49 -0
  32. mindroom/interactive.py +313 -0
  33. mindroom/logging_config.py +207 -0
  34. mindroom/matrix/__init__.py +1 -0
  35. mindroom/matrix/client.py +782 -0
  36. mindroom/matrix/event_info.py +173 -0
  37. mindroom/matrix/identity.py +149 -0
  38. mindroom/matrix/large_messages.py +267 -0
  39. mindroom/matrix/mentions.py +141 -0
  40. mindroom/matrix/message_builder.py +94 -0
  41. mindroom/matrix/message_content.py +209 -0
  42. mindroom/matrix/presence.py +178 -0
  43. mindroom/matrix/rooms.py +311 -0
  44. mindroom/matrix/state.py +77 -0
  45. mindroom/matrix/typing.py +91 -0
  46. mindroom/matrix/users.py +217 -0
  47. mindroom/memory/__init__.py +21 -0
  48. mindroom/memory/config.py +137 -0
  49. mindroom/memory/functions.py +396 -0
  50. mindroom/py.typed +0 -0
  51. mindroom/response_tracker.py +128 -0
  52. mindroom/room_cleanup.py +139 -0
  53. mindroom/routing.py +107 -0
  54. mindroom/scheduling.py +758 -0
  55. mindroom/stop.py +207 -0
  56. mindroom/streaming.py +203 -0
  57. mindroom/teams.py +749 -0
  58. mindroom/thread_utils.py +318 -0
  59. mindroom/tools/__init__.py +520 -0
  60. mindroom/tools/agentql.py +64 -0
  61. mindroom/tools/airflow.py +57 -0
  62. mindroom/tools/apify.py +49 -0
  63. mindroom/tools/arxiv.py +64 -0
  64. mindroom/tools/aws_lambda.py +41 -0
  65. mindroom/tools/aws_ses.py +57 -0
  66. mindroom/tools/baidusearch.py +87 -0
  67. mindroom/tools/brightdata.py +116 -0
  68. mindroom/tools/browserbase.py +62 -0
  69. mindroom/tools/cal_com.py +98 -0
  70. mindroom/tools/calculator.py +112 -0
  71. mindroom/tools/cartesia.py +84 -0
  72. mindroom/tools/composio.py +166 -0
  73. mindroom/tools/config_manager.py +44 -0
  74. mindroom/tools/confluence.py +73 -0
  75. mindroom/tools/crawl4ai.py +101 -0
  76. mindroom/tools/csv.py +104 -0
  77. mindroom/tools/custom_api.py +106 -0
  78. mindroom/tools/dalle.py +85 -0
  79. mindroom/tools/daytona.py +180 -0
  80. mindroom/tools/discord.py +81 -0
  81. mindroom/tools/docker.py +73 -0
  82. mindroom/tools/duckdb.py +124 -0
  83. mindroom/tools/duckduckgo.py +99 -0
  84. mindroom/tools/e2b.py +121 -0
  85. mindroom/tools/eleven_labs.py +77 -0
  86. mindroom/tools/email.py +74 -0
  87. mindroom/tools/exa.py +246 -0
  88. mindroom/tools/fal.py +50 -0
  89. mindroom/tools/file.py +80 -0
  90. mindroom/tools/financial_datasets_api.py +112 -0
  91. mindroom/tools/firecrawl.py +124 -0
  92. mindroom/tools/gemini.py +85 -0
  93. mindroom/tools/giphy.py +49 -0
  94. mindroom/tools/github.py +376 -0
  95. mindroom/tools/gmail.py +102 -0
  96. mindroom/tools/google_calendar.py +55 -0
  97. mindroom/tools/google_maps.py +112 -0
  98. mindroom/tools/google_sheets.py +86 -0
  99. mindroom/tools/googlesearch.py +83 -0
  100. mindroom/tools/groq.py +77 -0
  101. mindroom/tools/hackernews.py +54 -0
  102. mindroom/tools/jina.py +108 -0
  103. mindroom/tools/jira.py +70 -0
  104. mindroom/tools/linear.py +103 -0
  105. mindroom/tools/linkup.py +65 -0
  106. mindroom/tools/lumalabs.py +71 -0
  107. mindroom/tools/mem0.py +82 -0
  108. mindroom/tools/modelslabs.py +85 -0
  109. mindroom/tools/moviepy_video_tools.py +62 -0
  110. mindroom/tools/newspaper4k.py +63 -0
  111. mindroom/tools/openai.py +143 -0
  112. mindroom/tools/openweather.py +89 -0
  113. mindroom/tools/oxylabs.py +54 -0
  114. mindroom/tools/pandas.py +35 -0
  115. mindroom/tools/pubmed.py +64 -0
  116. mindroom/tools/python.py +120 -0
  117. mindroom/tools/reddit.py +155 -0
  118. mindroom/tools/replicate.py +56 -0
  119. mindroom/tools/resend.py +55 -0
  120. mindroom/tools/scrapegraph.py +87 -0
  121. mindroom/tools/searxng.py +120 -0
  122. mindroom/tools/serpapi.py +55 -0
  123. mindroom/tools/serper.py +81 -0
  124. mindroom/tools/shell.py +46 -0
  125. mindroom/tools/slack.py +80 -0
  126. mindroom/tools/sleep.py +38 -0
  127. mindroom/tools/spider.py +62 -0
  128. mindroom/tools/sql.py +138 -0
  129. mindroom/tools/tavily.py +104 -0
  130. mindroom/tools/telegram.py +54 -0
  131. mindroom/tools/todoist.py +103 -0
  132. mindroom/tools/trello.py +121 -0
  133. mindroom/tools/twilio.py +97 -0
  134. mindroom/tools/web_browser_tools.py +37 -0
  135. mindroom/tools/webex.py +63 -0
  136. mindroom/tools/website.py +45 -0
  137. mindroom/tools/whatsapp.py +81 -0
  138. mindroom/tools/wikipedia.py +45 -0
  139. mindroom/tools/x.py +97 -0
  140. mindroom/tools/yfinance.py +121 -0
  141. mindroom/tools/youtube.py +81 -0
  142. mindroom/tools/zendesk.py +62 -0
  143. mindroom/tools/zep.py +107 -0
  144. mindroom/tools/zoom.py +62 -0
  145. mindroom/tools_metadata.json +7643 -0
  146. mindroom/tools_metadata.py +220 -0
  147. mindroom/topic_generator.py +153 -0
  148. mindroom/voice_handler.py +266 -0
  149. mindroom-0.1.1.dist-info/METADATA +425 -0
  150. mindroom-0.1.1.dist-info/RECORD +152 -0
  151. {mindroom-0.0.0.dist-info → mindroom-0.1.1.dist-info}/WHEEL +1 -2
  152. mindroom-0.1.1.dist-info/entry_points.txt +2 -0
  153. mindroom-0.0.0.dist-info/METADATA +0 -24
  154. mindroom-0.0.0.dist-info/RECORD +0 -4
  155. mindroom-0.0.0.dist-info/top_level.txt +0 -1
@@ -0,0 +1,84 @@
1
+ """Cartesia tool configuration."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import TYPE_CHECKING
6
+
7
+ from mindroom.tools_metadata import ConfigField, SetupType, ToolCategory, ToolStatus, register_tool_with_metadata
8
+
9
+ if TYPE_CHECKING:
10
+ from agno.tools.cartesia import CartesiaTools
11
+
12
+
13
+ @register_tool_with_metadata(
14
+ name="cartesia",
15
+ display_name="Cartesia",
16
+ description="Voice AI services including text-to-speech and voice localization",
17
+ category=ToolCategory.DEVELOPMENT, # others/ → DEVELOPMENT according to mapping
18
+ status=ToolStatus.REQUIRES_CONFIG, # requires API key
19
+ setup_type=SetupType.API_KEY, # API key authentication
20
+ icon="VolumeX", # Voice/sound related icon
21
+ icon_color="text-purple-500", # Purple for voice AI
22
+ config_fields=[
23
+ # Authentication
24
+ ConfigField(
25
+ name="api_key",
26
+ label="API Key",
27
+ type="password",
28
+ required=False,
29
+ placeholder="your_api_key_here",
30
+ description="Cartesia API key for authentication (can also be set via CARTESIA_API_KEY env var)",
31
+ ),
32
+ # Model configuration
33
+ ConfigField(
34
+ name="model_id",
35
+ label="Model ID",
36
+ type="text",
37
+ required=False,
38
+ default="sonic-2",
39
+ placeholder="sonic-2",
40
+ description="The model ID to use for text-to-speech",
41
+ ),
42
+ ConfigField(
43
+ name="default_voice_id",
44
+ label="Default Voice ID",
45
+ type="text",
46
+ required=False,
47
+ default="78ab82d5-25be-4f7d-82b3-7ad64e5b85b2",
48
+ placeholder="78ab82d5-25be-4f7d-82b3-7ad64e5b85b2",
49
+ description="The default voice ID to use for text-to-speech and localization",
50
+ ),
51
+ # Feature flags
52
+ ConfigField(
53
+ name="text_to_speech_enabled",
54
+ label="Text to Speech Enabled",
55
+ type="boolean",
56
+ required=False,
57
+ default=True,
58
+ description="Enable text-to-speech functionality",
59
+ ),
60
+ ConfigField(
61
+ name="list_voices_enabled",
62
+ label="List Voices Enabled",
63
+ type="boolean",
64
+ required=False,
65
+ default=True,
66
+ description="Enable listing available voices functionality",
67
+ ),
68
+ ConfigField(
69
+ name="voice_localize_enabled",
70
+ label="Voice Localize Enabled",
71
+ type="boolean",
72
+ required=False,
73
+ default=False,
74
+ description="Enable voice localization functionality",
75
+ ),
76
+ ],
77
+ dependencies=["cartesia"],
78
+ docs_url="https://docs.agno.com/tools/toolkits/others/cartesia",
79
+ )
80
+ def cartesia_tools() -> type[CartesiaTools]:
81
+ """Return Cartesia tools for voice AI services."""
82
+ from agno.tools.cartesia import CartesiaTools
83
+
84
+ return CartesiaTools
@@ -0,0 +1,166 @@
1
+ """Composio tool configuration."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import TYPE_CHECKING
6
+
7
+ from mindroom.tools_metadata import ConfigField, SetupType, ToolCategory, ToolStatus, register_tool_with_metadata
8
+
9
+ if TYPE_CHECKING:
10
+ from composio_agno import ComposioToolSet # type: ignore[import-untyped]
11
+
12
+
13
+ @register_tool_with_metadata(
14
+ name="composio",
15
+ display_name="Composio",
16
+ description="Access 1000+ integrations including Gmail, Salesforce, GitHub, and more",
17
+ category=ToolCategory.INTEGRATIONS,
18
+ status=ToolStatus.REQUIRES_CONFIG,
19
+ setup_type=SetupType.API_KEY,
20
+ icon="FaConnectdevelop",
21
+ icon_color="text-blue-600",
22
+ config_fields=[
23
+ # Authentication/Connection parameters first
24
+ ConfigField(
25
+ name="api_key",
26
+ label="API Key",
27
+ type="password",
28
+ required=False,
29
+ placeholder="comp_...",
30
+ description="Composio API key (can also be set via COMPOSIO_API_KEY env var)",
31
+ ),
32
+ ConfigField(
33
+ name="base_url",
34
+ label="Base URL",
35
+ type="url",
36
+ required=False,
37
+ description="Base URL for Composio API (leave empty for default)",
38
+ ),
39
+ ConfigField(
40
+ name="entity_id",
41
+ label="Entity ID",
42
+ type="text",
43
+ required=False,
44
+ default="default",
45
+ placeholder="default",
46
+ description="Entity identifier for Composio workspace",
47
+ ),
48
+ # Workspace Configuration
49
+ ConfigField(
50
+ name="workspace_id",
51
+ label="Workspace ID",
52
+ type="text",
53
+ required=False,
54
+ placeholder="workspace_123",
55
+ description="Workspace identifier for organizing tools and data",
56
+ ),
57
+ ConfigField(
58
+ name="workspace_config",
59
+ label="Workspace Config",
60
+ type="text",
61
+ required=False,
62
+ placeholder='{"type": "local"}',
63
+ description="JSON configuration for workspace settings",
64
+ ),
65
+ # Connection Configuration
66
+ ConfigField(
67
+ name="connected_account_ids",
68
+ label="Connected Account IDs",
69
+ type="text",
70
+ required=False,
71
+ placeholder='{"github": "account_123"}',
72
+ description="JSON mapping of app names to connected account IDs",
73
+ ),
74
+ # Advanced Configuration
75
+ ConfigField(
76
+ name="metadata",
77
+ label="Metadata",
78
+ type="text",
79
+ required=False,
80
+ placeholder='{"key": "value"}',
81
+ description="JSON metadata for tools and actions configuration",
82
+ ),
83
+ ConfigField(
84
+ name="processors",
85
+ label="Processors",
86
+ type="text",
87
+ required=False,
88
+ description="Custom processors configuration (JSON format)",
89
+ ),
90
+ ConfigField(
91
+ name="output_dir",
92
+ label="Output Directory",
93
+ type="text",
94
+ required=False,
95
+ placeholder="/path/to/output",
96
+ description="Directory path for output files",
97
+ ),
98
+ ConfigField(
99
+ name="lockfile",
100
+ label="Lock File Path",
101
+ type="text",
102
+ required=False,
103
+ placeholder="/path/to/lockfile",
104
+ description="Path to lock file for concurrency control",
105
+ ),
106
+ # Numerical Configuration
107
+ ConfigField(
108
+ name="max_retries",
109
+ label="Max Retries",
110
+ type="number",
111
+ required=False,
112
+ default=3,
113
+ description="Maximum number of retries for failed operations",
114
+ ),
115
+ ConfigField(
116
+ name="verbosity_level",
117
+ label="Verbosity Level",
118
+ type="number",
119
+ required=False,
120
+ placeholder="1",
121
+ description="Logging verbosity level (0-3, higher = more verbose)",
122
+ ),
123
+ # Feature Flags
124
+ ConfigField(
125
+ name="output_in_file",
126
+ label="Output in File",
127
+ type="boolean",
128
+ required=False,
129
+ default=False,
130
+ description="Enable file-based output for operations",
131
+ ),
132
+ ConfigField(
133
+ name="allow_tracing",
134
+ label="Allow Tracing",
135
+ type="boolean",
136
+ required=False,
137
+ default=False,
138
+ description="Enable operation tracing for debugging",
139
+ ),
140
+ ConfigField(
141
+ name="lock",
142
+ label="Enable Locking",
143
+ type="boolean",
144
+ required=False,
145
+ default=True,
146
+ description="Enable file locking for concurrent operations",
147
+ ),
148
+ # Logging Configuration
149
+ ConfigField(
150
+ name="logging_level",
151
+ label="Logging Level",
152
+ type="text",
153
+ required=False,
154
+ default="INFO",
155
+ placeholder="INFO",
156
+ description="Logging level (DEBUG, INFO, WARNING, ERROR, CRITICAL)",
157
+ ),
158
+ ],
159
+ dependencies=["composio-agno"],
160
+ docs_url="https://docs.agno.com/tools/toolkits/others/composio",
161
+ )
162
+ def composio_tools() -> type[ComposioToolSet]:
163
+ """Return Composio tools for accessing 1000+ integrations."""
164
+ from composio_agno import ComposioToolSet
165
+
166
+ return ComposioToolSet # type: ignore[no-any-return]
@@ -0,0 +1,44 @@
1
+ """Config Manager tool configuration."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import TYPE_CHECKING
6
+
7
+ from mindroom.tools_metadata import (
8
+ ConfigField,
9
+ SetupType,
10
+ ToolCategory,
11
+ ToolStatus,
12
+ register_tool_with_metadata,
13
+ )
14
+
15
+ if TYPE_CHECKING:
16
+ from mindroom.custom_tools.config_manager import ConfigManagerTools
17
+
18
+
19
+ @register_tool_with_metadata(
20
+ name="config_manager",
21
+ display_name="Config Manager",
22
+ description="Build and manage MindRoom agents with expert knowledge of the system",
23
+ category=ToolCategory.DEVELOPMENT,
24
+ status=ToolStatus.AVAILABLE,
25
+ setup_type=SetupType.NONE,
26
+ icon="Settings",
27
+ icon_color="text-purple-500",
28
+ config_fields=[
29
+ ConfigField(
30
+ name="config_path",
31
+ label="Configuration Path",
32
+ type="text",
33
+ required=False,
34
+ description="Path to the configuration file (uses default if not specified)",
35
+ ),
36
+ ],
37
+ dependencies=["agno", "pydantic", "yaml"],
38
+ docs_url="https://github.com/mindroom-ai/mindroom",
39
+ )
40
+ def config_manager_tools() -> type[ConfigManagerTools]:
41
+ """Return config manager tools for agent building."""
42
+ from mindroom.custom_tools.config_manager import ConfigManagerTools
43
+
44
+ return ConfigManagerTools
@@ -0,0 +1,73 @@
1
+ """Confluence tool configuration."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import TYPE_CHECKING
6
+
7
+ from mindroom.tools_metadata import ConfigField, SetupType, ToolCategory, ToolStatus, register_tool_with_metadata
8
+
9
+ if TYPE_CHECKING:
10
+ from agno.tools.confluence import ConfluenceTools
11
+
12
+
13
+ @register_tool_with_metadata(
14
+ name="confluence",
15
+ display_name="Confluence",
16
+ description="Atlassian wiki platform for retrieving, creating, and updating pages",
17
+ category=ToolCategory.DEVELOPMENT,
18
+ status=ToolStatus.REQUIRES_CONFIG,
19
+ setup_type=SetupType.API_KEY,
20
+ icon="FaConfluence",
21
+ icon_color="text-blue-600",
22
+ config_fields=[
23
+ # Authentication/Connection parameters
24
+ ConfigField(
25
+ name="url",
26
+ label="Confluence URL",
27
+ type="url",
28
+ required=False,
29
+ placeholder="https://your-confluence-instance.atlassian.net",
30
+ description="Confluence instance URL (can also be set via CONFLUENCE_URL env var)",
31
+ ),
32
+ ConfigField(
33
+ name="username",
34
+ label="Username",
35
+ type="text",
36
+ required=False,
37
+ placeholder="your-username",
38
+ description="Confluence username (can also be set via CONFLUENCE_USERNAME env var)",
39
+ ),
40
+ ConfigField(
41
+ name="password",
42
+ label="Password",
43
+ type="password",
44
+ required=False,
45
+ placeholder="your-password",
46
+ description="Confluence password (can also be set via CONFLUENCE_PASSWORD env var)",
47
+ ),
48
+ ConfigField(
49
+ name="api_key",
50
+ label="API Key",
51
+ type="password",
52
+ required=False,
53
+ placeholder="your-api-key",
54
+ description="Confluence API key - alternative to password (can also be set via CONFLUENCE_API_KEY env var)",
55
+ ),
56
+ # Configuration options
57
+ ConfigField(
58
+ name="verify_ssl",
59
+ label="Verify SSL",
60
+ type="boolean",
61
+ required=False,
62
+ default=True,
63
+ description="Whether to verify SSL certificates when connecting to Confluence",
64
+ ),
65
+ ],
66
+ dependencies=["atlassian-python-api"],
67
+ docs_url="https://docs.agno.com/tools/toolkits/others/confluence",
68
+ )
69
+ def confluence_tools() -> type[ConfluenceTools]:
70
+ """Return Confluence tools for wiki management."""
71
+ from agno.tools.confluence import ConfluenceTools
72
+
73
+ return ConfluenceTools
@@ -0,0 +1,101 @@
1
+ """Crawl4AI tool configuration."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import TYPE_CHECKING
6
+
7
+ from mindroom.tools_metadata import (
8
+ ConfigField,
9
+ SetupType,
10
+ ToolCategory,
11
+ ToolStatus,
12
+ register_tool_with_metadata,
13
+ )
14
+
15
+ if TYPE_CHECKING:
16
+ from agno.tools.crawl4ai import Crawl4aiTools
17
+
18
+
19
+ @register_tool_with_metadata(
20
+ name="crawl4ai",
21
+ display_name="Crawl4AI",
22
+ description="Web crawling and scraping using the Crawl4ai library",
23
+ category=ToolCategory.RESEARCH,
24
+ status=ToolStatus.AVAILABLE,
25
+ setup_type=SetupType.NONE,
26
+ icon="FaSpider",
27
+ icon_color="text-blue-600",
28
+ config_fields=[
29
+ # Content extraction settings
30
+ ConfigField(
31
+ name="max_length",
32
+ label="Max Length",
33
+ type="number",
34
+ required=False,
35
+ default=5000,
36
+ placeholder="5000",
37
+ description="Maximum length of the text from the webpage to be returned",
38
+ ),
39
+ ConfigField(
40
+ name="timeout",
41
+ label="Timeout",
42
+ type="number",
43
+ required=False,
44
+ default=60,
45
+ placeholder="60",
46
+ description="Timeout in seconds for page loading",
47
+ ),
48
+ # Content filtering settings
49
+ ConfigField(
50
+ name="use_pruning",
51
+ label="Use Pruning",
52
+ type="boolean",
53
+ required=False,
54
+ default=False,
55
+ description="Enable content pruning to remove low-quality content",
56
+ ),
57
+ ConfigField(
58
+ name="pruning_threshold",
59
+ label="Pruning Threshold",
60
+ type="number",
61
+ required=False,
62
+ default=0.48,
63
+ placeholder="0.48",
64
+ description="Threshold for content pruning (0.0 to 1.0)",
65
+ ),
66
+ ConfigField(
67
+ name="bm25_threshold",
68
+ label="BM25 Threshold",
69
+ type="number",
70
+ required=False,
71
+ default=1.0,
72
+ placeholder="1.0",
73
+ description="Threshold for BM25 content filtering when using search queries",
74
+ ),
75
+ # Browser settings
76
+ ConfigField(
77
+ name="headless",
78
+ label="Headless Mode",
79
+ type="boolean",
80
+ required=False,
81
+ default=True,
82
+ description="Run browser in headless mode (no GUI)",
83
+ ),
84
+ ConfigField(
85
+ name="wait_until",
86
+ label="Wait Until",
87
+ type="text",
88
+ required=False,
89
+ default="domcontentloaded",
90
+ placeholder="domcontentloaded",
91
+ description="Browser event to wait for before extracting content (domcontentloaded, load, networkidle)",
92
+ ),
93
+ ],
94
+ dependencies=["crawl4ai"],
95
+ docs_url="https://docs.agno.com/tools/toolkits/web_scrape/crawl4ai",
96
+ )
97
+ def crawl4ai_tools() -> type[Crawl4aiTools]:
98
+ """Return Crawl4AI tools for web crawling and scraping."""
99
+ from agno.tools.crawl4ai import Crawl4aiTools
100
+
101
+ return Crawl4aiTools
mindroom/tools/csv.py ADDED
@@ -0,0 +1,104 @@
1
+ """CSV toolkit tool configuration."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import TYPE_CHECKING
6
+
7
+ from mindroom.tools_metadata import (
8
+ ConfigField,
9
+ SetupType,
10
+ ToolCategory,
11
+ ToolStatus,
12
+ register_tool_with_metadata,
13
+ )
14
+
15
+ if TYPE_CHECKING:
16
+ from agno.tools.csv_toolkit import CsvTools
17
+
18
+
19
+ @register_tool_with_metadata(
20
+ name="csv",
21
+ display_name="CSV Toolkit",
22
+ description="CSV file analysis and querying with SQL support",
23
+ category=ToolCategory.PRODUCTIVITY,
24
+ status=ToolStatus.AVAILABLE,
25
+ setup_type=SetupType.NONE,
26
+ icon="FaFileCsv",
27
+ icon_color="text-green-600",
28
+ config_fields=[
29
+ # File configuration
30
+ ConfigField(
31
+ name="csvs",
32
+ label="CSV Files",
33
+ type="text",
34
+ required=False,
35
+ placeholder="/path/to/file1.csv,/path/to/file2.csv",
36
+ description="List of CSV file paths to work with (comma-separated)",
37
+ ),
38
+ ConfigField(
39
+ name="row_limit",
40
+ label="Row Limit",
41
+ type="number",
42
+ required=False,
43
+ placeholder="1000",
44
+ description="Maximum number of rows to read from CSV files",
45
+ ),
46
+ # Feature toggles
47
+ ConfigField(
48
+ name="read_csvs",
49
+ label="Read CSVs",
50
+ type="boolean",
51
+ required=False,
52
+ default=True,
53
+ description="Enable reading CSV file contents",
54
+ ),
55
+ ConfigField(
56
+ name="list_csvs",
57
+ label="List CSVs",
58
+ type="boolean",
59
+ required=False,
60
+ default=True,
61
+ description="Enable listing available CSV files",
62
+ ),
63
+ ConfigField(
64
+ name="query_csvs",
65
+ label="Query CSVs",
66
+ type="boolean",
67
+ required=False,
68
+ default=True,
69
+ description="Enable SQL querying of CSV files (requires DuckDB)",
70
+ ),
71
+ ConfigField(
72
+ name="read_column_names",
73
+ label="Read Column Names",
74
+ type="boolean",
75
+ required=False,
76
+ default=True,
77
+ description="Enable reading column names from CSV files",
78
+ ),
79
+ # DuckDB configuration
80
+ ConfigField(
81
+ name="duckdb_connection",
82
+ label="DuckDB Connection",
83
+ type="text",
84
+ required=False,
85
+ placeholder="Auto-created if not provided",
86
+ description="Existing DuckDB connection object (advanced usage)",
87
+ ),
88
+ ConfigField(
89
+ name="duckdb_kwargs",
90
+ label="DuckDB Arguments",
91
+ type="text",
92
+ required=False,
93
+ placeholder='{"memory_limit": "1GB"}',
94
+ description="Additional arguments for DuckDB connection (JSON format)",
95
+ ),
96
+ ],
97
+ dependencies=["duckdb"],
98
+ docs_url="https://docs.agno.com/tools/toolkits/database/csv",
99
+ )
100
+ def csv_tools() -> type[CsvTools]:
101
+ """Return CSV toolkit for data analysis and querying."""
102
+ from agno.tools.csv_toolkit import CsvTools
103
+
104
+ return CsvTools
@@ -0,0 +1,106 @@
1
+ """Custom API tool configuration."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import TYPE_CHECKING
6
+
7
+ from mindroom.tools_metadata import ConfigField, SetupType, ToolCategory, ToolStatus, register_tool_with_metadata
8
+
9
+ if TYPE_CHECKING:
10
+ from agno.tools.api import CustomApiTools
11
+
12
+
13
+ @register_tool_with_metadata(
14
+ name="custom_api",
15
+ display_name="Custom API",
16
+ description="Make HTTP requests to any external API with customizable authentication and parameters",
17
+ category=ToolCategory.DEVELOPMENT,
18
+ status=ToolStatus.AVAILABLE,
19
+ setup_type=SetupType.NONE,
20
+ icon="Globe",
21
+ icon_color="text-blue-500",
22
+ config_fields=[
23
+ # Connection parameters
24
+ ConfigField(
25
+ name="base_url",
26
+ label="Base URL",
27
+ type="url",
28
+ required=False,
29
+ default=None,
30
+ placeholder="https://api.example.com",
31
+ description="Base URL for API calls. If not provided, full URLs must be specified in endpoints",
32
+ ),
33
+ # Authentication parameters
34
+ ConfigField(
35
+ name="username",
36
+ label="Username",
37
+ type="text",
38
+ required=False,
39
+ default=None,
40
+ placeholder="username",
41
+ description="Username for basic authentication",
42
+ ),
43
+ ConfigField(
44
+ name="password",
45
+ label="Password",
46
+ type="password",
47
+ required=False,
48
+ default=None,
49
+ placeholder="password",
50
+ description="Password for basic authentication",
51
+ ),
52
+ ConfigField(
53
+ name="api_key",
54
+ label="API Key",
55
+ type="password",
56
+ required=False,
57
+ default=None,
58
+ placeholder="sk-...",
59
+ description="API key for bearer token authentication",
60
+ ),
61
+ # Headers configuration
62
+ ConfigField(
63
+ name="headers",
64
+ label="Default Headers",
65
+ type="text",
66
+ required=False,
67
+ default=None,
68
+ placeholder='{"Content-Type": "application/json"}',
69
+ description="Default headers to include in requests (JSON format)",
70
+ ),
71
+ # Configuration parameters
72
+ ConfigField(
73
+ name="verify_ssl",
74
+ label="Verify SSL",
75
+ type="boolean",
76
+ required=False,
77
+ default=True,
78
+ description="Whether to verify SSL certificates for HTTPS requests",
79
+ ),
80
+ ConfigField(
81
+ name="timeout",
82
+ label="Timeout",
83
+ type="number",
84
+ required=False,
85
+ default=30,
86
+ placeholder="30",
87
+ description="Request timeout in seconds",
88
+ ),
89
+ # Feature flags
90
+ ConfigField(
91
+ name="make_request",
92
+ label="Enable Make Request",
93
+ type="boolean",
94
+ required=False,
95
+ default=True,
96
+ description="Whether to register the make_request function",
97
+ ),
98
+ ],
99
+ dependencies=["requests"],
100
+ docs_url="https://docs.agno.com/tools/toolkits/others/custom_api",
101
+ )
102
+ def custom_api_tools() -> type[CustomApiTools]:
103
+ """Return Custom API tools for making HTTP requests to external APIs."""
104
+ from agno.tools.api import CustomApiTools
105
+
106
+ return CustomApiTools