mindroom 0.0.0__py3-none-any.whl → 0.1.0__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.0.dist-info/METADATA +425 -0
  150. mindroom-0.1.0.dist-info/RECORD +152 -0
  151. {mindroom-0.0.0.dist-info → mindroom-0.1.0.dist-info}/WHEEL +1 -2
  152. mindroom-0.1.0.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
mindroom/tools/e2b.py ADDED
@@ -0,0 +1,121 @@
1
+ """E2B code execution 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.e2b import E2BTools
11
+
12
+
13
+ @register_tool_with_metadata(
14
+ name="e2b",
15
+ display_name="E2B Code Execution",
16
+ description="Code execution sandbox environment with Python, file operations, and web server capabilities",
17
+ category=ToolCategory.DEVELOPMENT,
18
+ status=ToolStatus.REQUIRES_CONFIG,
19
+ setup_type=SetupType.API_KEY,
20
+ icon="Terminal",
21
+ icon_color="text-blue-600",
22
+ config_fields=[
23
+ # Authentication
24
+ ConfigField(
25
+ name="api_key",
26
+ label="API Key",
27
+ type="password",
28
+ required=False,
29
+ placeholder="e2b_...",
30
+ description="E2B API key for authentication (can also be set via E2B_API_KEY env var)",
31
+ ),
32
+ # Configuration
33
+ ConfigField(
34
+ name="timeout",
35
+ label="Timeout",
36
+ type="number",
37
+ required=False,
38
+ default=300,
39
+ placeholder="300",
40
+ description="Timeout in seconds for the sandbox (default: 5 minutes)",
41
+ ),
42
+ # Code execution features
43
+ ConfigField(
44
+ name="run_code",
45
+ label="Run Code",
46
+ type="boolean",
47
+ required=False,
48
+ default=True,
49
+ description="Enable running Python code in the sandbox",
50
+ ),
51
+ # File operations
52
+ ConfigField(
53
+ name="upload_file",
54
+ label="Upload File",
55
+ type="boolean",
56
+ required=False,
57
+ default=True,
58
+ description="Enable uploading files to the sandbox",
59
+ ),
60
+ ConfigField(
61
+ name="download_result",
62
+ label="Download Result",
63
+ type="boolean",
64
+ required=False,
65
+ default=True,
66
+ description="Enable downloading execution results (PNG images, charts, files)",
67
+ ),
68
+ # Filesystem operations
69
+ ConfigField(
70
+ name="filesystem",
71
+ label="Filesystem Operations",
72
+ type="boolean",
73
+ required=False,
74
+ default=False,
75
+ description="Enable filesystem operations (list, read, write files and directories)",
76
+ ),
77
+ # Internet access
78
+ ConfigField(
79
+ name="internet_access",
80
+ label="Internet Access",
81
+ type="boolean",
82
+ required=False,
83
+ default=False,
84
+ description="Enable internet access functions (public URLs, web servers)",
85
+ ),
86
+ # Sandbox management
87
+ ConfigField(
88
+ name="sandbox_management",
89
+ label="Sandbox Management",
90
+ type="boolean",
91
+ required=False,
92
+ default=False,
93
+ description="Enable sandbox management functions (timeout, status, shutdown)",
94
+ ),
95
+ # Advanced configuration
96
+ ConfigField(
97
+ name="sandbox_options",
98
+ label="Sandbox Options",
99
+ type="text",
100
+ required=False,
101
+ placeholder='{"template": "python"}',
102
+ description="Additional options to pass to the Sandbox constructor (JSON format)",
103
+ ),
104
+ # Command execution
105
+ ConfigField(
106
+ name="command_execution",
107
+ label="Command Execution",
108
+ type="boolean",
109
+ required=False,
110
+ default=False,
111
+ description="Enable shell command execution in the sandbox",
112
+ ),
113
+ ],
114
+ dependencies=["e2b_code_interpreter"],
115
+ docs_url="https://docs.agno.com/tools/toolkits/others/e2b",
116
+ )
117
+ def e2b_tools() -> type[E2BTools]:
118
+ """Return E2B code execution tools for secure sandbox environments."""
119
+ from agno.tools.e2b import E2BTools
120
+
121
+ return E2BTools
@@ -0,0 +1,77 @@
1
+ """Eleven Labs 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.eleven_labs import ElevenLabsTools
11
+
12
+
13
+ @register_tool_with_metadata(
14
+ name="eleven_labs",
15
+ display_name="Eleven Labs",
16
+ description="Text-to-speech and sound effect generation using AI voices",
17
+ category=ToolCategory.DEVELOPMENT,
18
+ status=ToolStatus.REQUIRES_CONFIG,
19
+ setup_type=SetupType.API_KEY,
20
+ icon="FaVolumeUp",
21
+ icon_color="text-orange-500",
22
+ config_fields=[
23
+ # Authentication
24
+ ConfigField(
25
+ name="api_key",
26
+ label="API Key",
27
+ type="password",
28
+ required=False,
29
+ placeholder="sk-...",
30
+ description="Eleven Labs API key for authentication (can also be set via ELEVEN_LABS_API_KEY env var)",
31
+ ),
32
+ # Voice Configuration
33
+ ConfigField(
34
+ name="voice_id",
35
+ label="Voice ID",
36
+ type="text",
37
+ required=False,
38
+ default="JBFqnCBsd6RMkjVDRZzb",
39
+ placeholder="JBFqnCBsd6RMkjVDRZzb",
40
+ description="The voice ID to use for audio generation",
41
+ ),
42
+ ConfigField(
43
+ name="model_id",
44
+ label="Model ID",
45
+ type="text",
46
+ required=False,
47
+ default="eleven_multilingual_v2",
48
+ placeholder="eleven_multilingual_v2",
49
+ description="The model's ID to use for audio generation",
50
+ ),
51
+ # Output Configuration
52
+ ConfigField(
53
+ name="output_format",
54
+ label="Output Format",
55
+ type="text",
56
+ required=False,
57
+ default="mp3_44100_64",
58
+ placeholder="mp3_44100_64",
59
+ description="The output format for audio generation (e.g., mp3_44100_64, pcm_44100)",
60
+ ),
61
+ ConfigField(
62
+ name="target_directory",
63
+ label="Target Directory",
64
+ type="text",
65
+ required=False,
66
+ placeholder="audio_generations",
67
+ description="Directory to save generated audio files (optional)",
68
+ ),
69
+ ],
70
+ dependencies=["elevenlabs"],
71
+ docs_url="https://docs.agno.com/tools/toolkits/others/eleven_labs",
72
+ )
73
+ def eleven_labs_tools() -> type[ElevenLabsTools]:
74
+ """Return Eleven Labs tools for text-to-speech and sound effect generation."""
75
+ from agno.tools.eleven_labs import ElevenLabsTools
76
+
77
+ return ElevenLabsTools
@@ -0,0 +1,74 @@
1
+ """Email 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.email import EmailTools
17
+
18
+
19
+ @register_tool_with_metadata(
20
+ name="email",
21
+ display_name="Email",
22
+ description="Send emails via SMTP (Gmail)",
23
+ category=ToolCategory.EMAIL,
24
+ status=ToolStatus.REQUIRES_CONFIG,
25
+ setup_type=SetupType.API_KEY,
26
+ icon="Mail",
27
+ icon_color="text-blue-600",
28
+ config_fields=[
29
+ # Authentication/Connection parameters
30
+ ConfigField(
31
+ name="receiver_email",
32
+ label="Receiver Email",
33
+ type="text",
34
+ required=False,
35
+ default=None,
36
+ placeholder="recipient@example.com",
37
+ description="Default recipient email address",
38
+ ),
39
+ ConfigField(
40
+ name="sender_name",
41
+ label="Sender Name",
42
+ type="text",
43
+ required=False,
44
+ default=None,
45
+ placeholder="Your Name",
46
+ description="Name to display as the sender",
47
+ ),
48
+ ConfigField(
49
+ name="sender_email",
50
+ label="Sender Email",
51
+ type="text",
52
+ required=False,
53
+ default=None,
54
+ placeholder="your.email@gmail.com",
55
+ description="Gmail address to send emails from",
56
+ ),
57
+ ConfigField(
58
+ name="sender_passkey",
59
+ label="Sender Password/App Password",
60
+ type="password",
61
+ required=False,
62
+ default=None,
63
+ placeholder="Gmail password or app-specific password",
64
+ description="Gmail password or app-specific password for authentication",
65
+ ),
66
+ ],
67
+ dependencies=[], # Uses built-in smtplib
68
+ docs_url="https://docs.agno.com/tools/toolkits/social/email",
69
+ )
70
+ def email_tools() -> type[EmailTools]:
71
+ """Return email tools for sending messages via SMTP."""
72
+ from agno.tools.email import EmailTools
73
+
74
+ return EmailTools
mindroom/tools/exa.py ADDED
@@ -0,0 +1,246 @@
1
+ """Exa 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.exa import ExaTools
17
+
18
+
19
+ @register_tool_with_metadata(
20
+ name="exa",
21
+ display_name="Exa",
22
+ description="Advanced AI-powered web search engine for research and content discovery",
23
+ category=ToolCategory.RESEARCH,
24
+ status=ToolStatus.REQUIRES_CONFIG,
25
+ setup_type=SetupType.API_KEY,
26
+ icon="FaSearch",
27
+ icon_color="text-blue-600",
28
+ config_fields=[
29
+ # Authentication
30
+ ConfigField(
31
+ name="api_key",
32
+ label="API Key",
33
+ type="password",
34
+ required=False,
35
+ placeholder="exa_...",
36
+ description="Exa API key for authentication (can also be set via EXA_API_KEY env var)",
37
+ ),
38
+ # Tool functionality flags
39
+ ConfigField(
40
+ name="search",
41
+ label="Search",
42
+ type="boolean",
43
+ required=False,
44
+ default=True,
45
+ description="Enable web search functionality",
46
+ ),
47
+ ConfigField(
48
+ name="get_contents",
49
+ label="Get Contents",
50
+ type="boolean",
51
+ required=False,
52
+ default=True,
53
+ description="Enable retrieving detailed content from URLs",
54
+ ),
55
+ ConfigField(
56
+ name="find_similar",
57
+ label="Find Similar",
58
+ type="boolean",
59
+ required=False,
60
+ default=True,
61
+ description="Enable finding similar pages to a given URL",
62
+ ),
63
+ ConfigField(
64
+ name="answer",
65
+ label="Answer",
66
+ type="boolean",
67
+ required=False,
68
+ default=True,
69
+ description="Enable LLM-powered question answering with search results",
70
+ ),
71
+ ConfigField(
72
+ name="research",
73
+ label="Research",
74
+ type="boolean",
75
+ required=False,
76
+ default=False,
77
+ description="Enable deep research functionality with structured output",
78
+ ),
79
+ # Content options
80
+ ConfigField(
81
+ name="text",
82
+ label="Text",
83
+ type="boolean",
84
+ required=False,
85
+ default=True,
86
+ description="Retrieve text content from search results",
87
+ ),
88
+ ConfigField(
89
+ name="text_length_limit",
90
+ label="Text Length Limit",
91
+ type="number",
92
+ required=False,
93
+ default=1000,
94
+ description="Maximum length of text content per result",
95
+ ),
96
+ ConfigField(
97
+ name="highlights",
98
+ label="Highlights",
99
+ type="boolean",
100
+ required=False,
101
+ default=True,
102
+ description="Include highlighted snippets in results",
103
+ ),
104
+ ConfigField(
105
+ name="summary",
106
+ label="Summary",
107
+ type="boolean",
108
+ required=False,
109
+ default=False,
110
+ description="Include AI-generated summaries in results",
111
+ ),
112
+ # Search configuration
113
+ ConfigField(
114
+ name="num_results",
115
+ label="Number of Results",
116
+ type="number",
117
+ required=False,
118
+ placeholder="10",
119
+ description="Default number of search results to return (overrides individual searches if set)",
120
+ ),
121
+ ConfigField(
122
+ name="livecrawl",
123
+ label="Live Crawl",
124
+ type="text",
125
+ required=False,
126
+ default="always",
127
+ placeholder="always",
128
+ description="Live crawl setting for fresh content",
129
+ ),
130
+ # Date filtering
131
+ ConfigField(
132
+ name="start_crawl_date",
133
+ label="Start Crawl Date",
134
+ type="text",
135
+ required=False,
136
+ placeholder="2024-01-01",
137
+ description="Include results crawled on/after this date (YYYY-MM-DD format)",
138
+ ),
139
+ ConfigField(
140
+ name="end_crawl_date",
141
+ label="End Crawl Date",
142
+ type="text",
143
+ required=False,
144
+ placeholder="2024-12-31",
145
+ description="Include results crawled on/before this date (YYYY-MM-DD format)",
146
+ ),
147
+ ConfigField(
148
+ name="start_published_date",
149
+ label="Start Published Date",
150
+ type="text",
151
+ required=False,
152
+ placeholder="2024-01-01",
153
+ description="Include results published on/after this date (YYYY-MM-DD format)",
154
+ ),
155
+ ConfigField(
156
+ name="end_published_date",
157
+ label="End Published Date",
158
+ type="text",
159
+ required=False,
160
+ placeholder="2024-12-31",
161
+ description="Include results published on/before this date (YYYY-MM-DD format)",
162
+ ),
163
+ # Search enhancement
164
+ ConfigField(
165
+ name="use_autoprompt",
166
+ label="Use Autoprompt",
167
+ type="boolean",
168
+ required=False,
169
+ description="Enable autoprompt features to improve query understanding",
170
+ ),
171
+ ConfigField(
172
+ name="type",
173
+ label="Content Type",
174
+ type="text",
175
+ required=False,
176
+ placeholder="article",
177
+ description="Specify content type filter (e.g., article, blog, video)",
178
+ ),
179
+ ConfigField(
180
+ name="category",
181
+ label="Category",
182
+ type="text",
183
+ required=False,
184
+ placeholder="research paper",
185
+ description='Filter results by category. Options: "company", "research paper", "news", "pdf", "github", "tweet", "personal site", "linkedin profile", "financial report"',
186
+ ),
187
+ ConfigField(
188
+ name="include_domains",
189
+ label="Include Domains",
190
+ type="text",
191
+ required=False,
192
+ placeholder="example.com,google.com",
193
+ description="Comma-separated list of domains to restrict results to",
194
+ ),
195
+ ConfigField(
196
+ name="exclude_domains",
197
+ label="Exclude Domains",
198
+ type="text",
199
+ required=False,
200
+ placeholder="spam.com,ads.com",
201
+ description="Comma-separated list of domains to exclude from results",
202
+ ),
203
+ # Model settings
204
+ ConfigField(
205
+ name="model",
206
+ label="Search Model",
207
+ type="text",
208
+ required=False,
209
+ placeholder="exa",
210
+ description='The search model to use. Options: "exa" or "exa-pro"',
211
+ ),
212
+ ConfigField(
213
+ name="research_model",
214
+ label="Research Model",
215
+ type="text",
216
+ required=False,
217
+ default="exa-research",
218
+ placeholder="exa-research",
219
+ description='Model for research functionality. Options: "exa-research" or "exa-research-pro"',
220
+ ),
221
+ # System settings
222
+ ConfigField(
223
+ name="timeout",
224
+ label="Timeout",
225
+ type="number",
226
+ required=False,
227
+ default=30,
228
+ description="Maximum time in seconds to wait for API responses",
229
+ ),
230
+ ConfigField(
231
+ name="show_results",
232
+ label="Show Results",
233
+ type="boolean",
234
+ required=False,
235
+ default=False,
236
+ description="Log search results for debugging purposes",
237
+ ),
238
+ ],
239
+ dependencies=["exa_py"],
240
+ docs_url="https://docs.agno.com/tools/toolkits/search/exa",
241
+ )
242
+ def exa_tools() -> type[ExaTools]:
243
+ """Return Exa tools for AI-powered web search and research."""
244
+ from agno.tools.exa import ExaTools
245
+
246
+ return ExaTools
mindroom/tools/fal.py ADDED
@@ -0,0 +1,50 @@
1
+ """Fal 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.fal import FalTools
11
+
12
+
13
+ @register_tool_with_metadata(
14
+ name="fal",
15
+ display_name="Fal",
16
+ description="AI model serving platform for media generation (images and videos)",
17
+ category=ToolCategory.DEVELOPMENT, # others category maps to DEVELOPMENT
18
+ status=ToolStatus.REQUIRES_CONFIG, # requires FAL_KEY API key
19
+ setup_type=SetupType.API_KEY, # uses API key authentication
20
+ icon="FaRobot", # AI/robot icon for AI model serving
21
+ icon_color="text-purple-600", # Purple for AI/ML services
22
+ config_fields=[
23
+ # Authentication
24
+ ConfigField(
25
+ name="api_key",
26
+ label="API Key",
27
+ type="password",
28
+ required=False,
29
+ placeholder="fal-***",
30
+ description="Fal API key for authentication (can also be set via FAL_KEY env var)",
31
+ ),
32
+ # Model configuration
33
+ ConfigField(
34
+ name="model",
35
+ label="Model",
36
+ type="text",
37
+ required=False,
38
+ default="fal-ai/hunyuan-video",
39
+ placeholder="fal-ai/hunyuan-video",
40
+ description="The model to use for media generation (default: fal-ai/hunyuan-video)",
41
+ ),
42
+ ],
43
+ dependencies=["fal-client"], # From agno requirements
44
+ docs_url="https://docs.agno.com/tools/toolkits/others/fal", # URL without .md extension
45
+ )
46
+ def fal_tools() -> type[FalTools]:
47
+ """Return Fal tools for AI model serving and media generation."""
48
+ from agno.tools.fal import FalTools
49
+
50
+ return FalTools
mindroom/tools/file.py ADDED
@@ -0,0 +1,80 @@
1
+ """File 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.file import FileTools
17
+
18
+
19
+ @register_tool_with_metadata(
20
+ name="file",
21
+ display_name="File Tools",
22
+ description="Local file operations including read, write, list, and search",
23
+ category=ToolCategory.DEVELOPMENT, # Local tool
24
+ status=ToolStatus.AVAILABLE, # No config needed
25
+ setup_type=SetupType.NONE, # No authentication required
26
+ icon="FaFolder", # React icon name
27
+ icon_color="text-yellow-500", # Tailwind color class
28
+ config_fields=[
29
+ # Base directory configuration
30
+ ConfigField(
31
+ name="base_dir",
32
+ label="Base Directory",
33
+ type="text",
34
+ required=False,
35
+ default=None,
36
+ placeholder="/path/to/directory",
37
+ description="Base directory for file operations (defaults to current working directory)",
38
+ ),
39
+ # File operation controls
40
+ ConfigField(
41
+ name="save_files",
42
+ label="Save Files",
43
+ type="boolean",
44
+ required=False,
45
+ default=True,
46
+ description="Enable file saving operations",
47
+ ),
48
+ ConfigField(
49
+ name="read_files",
50
+ label="Read Files",
51
+ type="boolean",
52
+ required=False,
53
+ default=True,
54
+ description="Enable file reading operations",
55
+ ),
56
+ ConfigField(
57
+ name="list_files",
58
+ label="List Files",
59
+ type="boolean",
60
+ required=False,
61
+ default=True,
62
+ description="Enable file listing operations",
63
+ ),
64
+ ConfigField(
65
+ name="search_files",
66
+ label="Search Files",
67
+ type="boolean",
68
+ required=False,
69
+ default=True,
70
+ description="Enable file search operations with pattern matching",
71
+ ),
72
+ ],
73
+ dependencies=["agno"], # From agno requirements
74
+ docs_url="https://docs.agno.com/tools/toolkits/local/file",
75
+ )
76
+ def file_tools() -> type[FileTools]:
77
+ """Return file tools for local file operations."""
78
+ from agno.tools.file import FileTools
79
+
80
+ return FileTools