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,55 @@
1
+ """SerpApi 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.serpapi import SerpApiTools
17
+
18
+
19
+ @register_tool_with_metadata(
20
+ name="serpapi",
21
+ display_name="SerpApi",
22
+ description="Google and YouTube search using SerpApi",
23
+ category=ToolCategory.RESEARCH,
24
+ status=ToolStatus.REQUIRES_CONFIG,
25
+ setup_type=SetupType.API_KEY,
26
+ icon="FaGoogle",
27
+ icon_color="text-blue-500",
28
+ config_fields=[
29
+ # Authentication
30
+ ConfigField(
31
+ name="api_key",
32
+ label="API Key",
33
+ type="password",
34
+ required=False,
35
+ placeholder="YOUR_SERPAPI_KEY",
36
+ description="SerpApi API key for authentication (can also be set via SERP_API_KEY env var)",
37
+ ),
38
+ # Search features
39
+ ConfigField(
40
+ name="search_youtube",
41
+ label="Search YouTube",
42
+ type="boolean",
43
+ required=False,
44
+ default=False,
45
+ description="Enable YouTube search functionality",
46
+ ),
47
+ ],
48
+ dependencies=["google-search-results"],
49
+ docs_url="https://docs.agno.com/tools/toolkits/search/serpapi",
50
+ )
51
+ def serpapi_tools() -> type[SerpApiTools]:
52
+ """Return SerpApi tools for Google and YouTube search."""
53
+ from agno.tools.serpapi import SerpApiTools
54
+
55
+ return SerpApiTools
@@ -0,0 +1,81 @@
1
+ """Serper 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.serper import SerperTools
17
+
18
+
19
+ @register_tool_with_metadata(
20
+ name="serper",
21
+ display_name="Serper",
22
+ description="Search Google, news, academic papers, and scrape webpages using Serper API",
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="your-serper-api-key",
36
+ description="Serper API key for authentication (can also be set via SERPER_API_KEY env var)",
37
+ ),
38
+ # Search configuration
39
+ ConfigField(
40
+ name="location",
41
+ label="Location",
42
+ type="text",
43
+ required=False,
44
+ default="us",
45
+ placeholder="us",
46
+ description="Google location code for search results (e.g., 'us', 'uk', 'ca')",
47
+ ),
48
+ ConfigField(
49
+ name="language",
50
+ label="Language",
51
+ type="text",
52
+ required=False,
53
+ default="en",
54
+ placeholder="en",
55
+ description="Language code for search results (e.g., 'en', 'es', 'fr')",
56
+ ),
57
+ ConfigField(
58
+ name="num_results",
59
+ label="Number of Results",
60
+ type="number",
61
+ required=False,
62
+ default=10,
63
+ description="Default number of search results to retrieve",
64
+ ),
65
+ ConfigField(
66
+ name="date_range",
67
+ label="Date Range",
68
+ type="text",
69
+ required=False,
70
+ placeholder="d",
71
+ description="Default date range filter for searches (e.g., 'd' for day, 'w' for week, 'm' for month)",
72
+ ),
73
+ ],
74
+ dependencies=["requests"],
75
+ docs_url="https://docs.agno.com/tools/toolkits/search/serper",
76
+ )
77
+ def serper_tools() -> type[SerperTools]:
78
+ """Return Serper tools for Google search, news, academic papers, and web scraping."""
79
+ from agno.tools.serper import SerperTools
80
+
81
+ return SerperTools
@@ -0,0 +1,46 @@
1
+ """Shell 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.shell import ShellTools
17
+
18
+
19
+ @register_tool_with_metadata(
20
+ name="shell",
21
+ display_name="Shell Commands",
22
+ description="Execute shell commands and scripts",
23
+ category=ToolCategory.DEVELOPMENT,
24
+ status=ToolStatus.AVAILABLE,
25
+ setup_type=SetupType.NONE,
26
+ icon="Terminal",
27
+ icon_color="text-green-500",
28
+ config_fields=[
29
+ ConfigField(
30
+ name="base_dir",
31
+ label="Base Directory",
32
+ type="text",
33
+ required=False,
34
+ default=None,
35
+ placeholder="/path/to/working/directory",
36
+ description="Base directory for command execution (defaults to current directory)",
37
+ ),
38
+ ],
39
+ dependencies=[],
40
+ docs_url="https://docs.agno.com/tools/toolkits/local/shell",
41
+ )
42
+ def shell_tools() -> type[ShellTools]:
43
+ """Return shell tools for command execution."""
44
+ from agno.tools.shell import ShellTools
45
+
46
+ return ShellTools
@@ -0,0 +1,80 @@
1
+ """Slack 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.slack import SlackTools
17
+
18
+
19
+ @register_tool_with_metadata(
20
+ name="slack",
21
+ display_name="Slack",
22
+ description="Send messages and manage channels",
23
+ category=ToolCategory.COMMUNICATION,
24
+ status=ToolStatus.REQUIRES_CONFIG,
25
+ setup_type=SetupType.API_KEY,
26
+ icon="FaSlack",
27
+ icon_color="text-purple-600",
28
+ config_fields=[
29
+ # Authentication
30
+ ConfigField(
31
+ name="token",
32
+ label="Slack Token",
33
+ type="password",
34
+ required=False,
35
+ placeholder="xoxb-...",
36
+ description="Slack bot token (can also be set via SLACK_TOKEN env var)",
37
+ ),
38
+ # Message operations
39
+ ConfigField(
40
+ name="send_message",
41
+ label="Send Message",
42
+ type="boolean",
43
+ required=False,
44
+ default=True,
45
+ description="Enable sending messages to channels",
46
+ ),
47
+ ConfigField(
48
+ name="send_message_thread",
49
+ label="Send Message Thread",
50
+ type="boolean",
51
+ required=False,
52
+ default=True,
53
+ description="Enable sending threaded messages",
54
+ ),
55
+ # Channel operations
56
+ ConfigField(
57
+ name="list_channels",
58
+ label="List Channels",
59
+ type="boolean",
60
+ required=False,
61
+ default=True,
62
+ description="Enable listing workspace channels",
63
+ ),
64
+ ConfigField(
65
+ name="get_channel_history",
66
+ label="Get Channel History",
67
+ type="boolean",
68
+ required=False,
69
+ default=True,
70
+ description="Enable retrieving channel message history",
71
+ ),
72
+ ],
73
+ dependencies=["slack-sdk"],
74
+ docs_url="https://docs.agno.com/tools/toolkits/social/slack",
75
+ )
76
+ def slack_tools() -> type[SlackTools]:
77
+ """Return Slack tools for messaging and channel management."""
78
+ from agno.tools.slack import SlackTools
79
+
80
+ return SlackTools
@@ -0,0 +1,38 @@
1
+ """Sleep tool configuration."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import TYPE_CHECKING
6
+
7
+ from mindroom.tools_metadata import (
8
+ SetupType,
9
+ ToolCategory,
10
+ ToolStatus,
11
+ register_tool_with_metadata,
12
+ )
13
+
14
+ if TYPE_CHECKING:
15
+ from agno.tools.sleep import SleepTools
16
+
17
+
18
+ @register_tool_with_metadata(
19
+ name="sleep",
20
+ display_name="Sleep",
21
+ description="Sleep utility for introducing delays and pauses in execution",
22
+ category=ToolCategory.DEVELOPMENT, # Local utility tool
23
+ status=ToolStatus.AVAILABLE, # No config needed
24
+ setup_type=SetupType.NONE, # No authentication required
25
+ icon="Clock", # React icon name
26
+ icon_color="text-purple-500", # Tailwind color class
27
+ config_fields=[
28
+ # SleepTools has no explicit parameters, only **kwargs
29
+ # The tool inherits all base Toolkit configuration through **kwargs
30
+ ],
31
+ dependencies=["agno"], # From agno requirements
32
+ docs_url="https://docs.agno.com/tools/toolkits/local/sleep",
33
+ )
34
+ def sleep_tools() -> type[SleepTools]:
35
+ """Return sleep tools for introducing delays and pauses in execution."""
36
+ from agno.tools.sleep import SleepTools
37
+
38
+ return SleepTools
@@ -0,0 +1,62 @@
1
+ """Spider 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.spider import SpiderTools
17
+
18
+
19
+ @register_tool_with_metadata(
20
+ name="spider",
21
+ display_name="Spider",
22
+ description="Web scraper and crawler that returns LLM-ready data",
23
+ category=ToolCategory.RESEARCH, # Based on web_scrape category in docs
24
+ status=ToolStatus.AVAILABLE, # API key handled via SPIDER_API_KEY env var
25
+ setup_type=SetupType.NONE,
26
+ icon="FaSpider",
27
+ icon_color="text-red-600", # Spider red color
28
+ config_fields=[
29
+ ConfigField(
30
+ name="max_results",
31
+ label="Maximum Results",
32
+ type="number",
33
+ required=False,
34
+ placeholder="5",
35
+ description="The maximum number of search results to return",
36
+ ),
37
+ ConfigField(
38
+ name="url",
39
+ label="Default URL",
40
+ type="url",
41
+ required=False,
42
+ placeholder="https://example.com",
43
+ description="The default URL to be scraped or crawled",
44
+ ),
45
+ ConfigField(
46
+ name="optional_params",
47
+ label="Optional Parameters",
48
+ type="text",
49
+ required=False,
50
+ placeholder='{"return_format": "markdown"}',
51
+ description="Additional optional parameters as JSON object for Spider API calls",
52
+ ),
53
+ ],
54
+ dependencies=["spider-client"],
55
+ docs_url="https://docs.agno.com/tools/toolkits/web_scrape/spider",
56
+ helper_text="Get your API key from the [Spider dashboard](https://spider.cloud)",
57
+ )
58
+ def spider_tools() -> type[SpiderTools]:
59
+ """Return Spider tools for web scraping and crawling."""
60
+ from agno.tools.spider import SpiderTools
61
+
62
+ return SpiderTools
mindroom/tools/sql.py ADDED
@@ -0,0 +1,138 @@
1
+ """SQL 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.sql import SQLTools
17
+
18
+
19
+ @register_tool_with_metadata(
20
+ name="sql",
21
+ display_name="SQL Tools",
22
+ description="Database query and management tools for SQL databases",
23
+ category=ToolCategory.PRODUCTIVITY,
24
+ status=ToolStatus.REQUIRES_CONFIG,
25
+ setup_type=SetupType.SPECIAL,
26
+ icon="Database",
27
+ icon_color="text-blue-600",
28
+ config_fields=[
29
+ # Database Connection - Primary method: Database URL
30
+ ConfigField(
31
+ name="db_url",
32
+ label="Database URL",
33
+ type="url",
34
+ required=False,
35
+ placeholder="postgresql://user:password@host:port/database",
36
+ description="Complete database connection URL (can also be set via DB_URL env var)",
37
+ ),
38
+ # Advanced: Pre-configured database engine
39
+ ConfigField(
40
+ name="db_engine",
41
+ label="Database Engine",
42
+ type="text",
43
+ required=False,
44
+ placeholder="Advanced: Pre-configured SQLAlchemy Engine object",
45
+ description="Pre-configured SQLAlchemy Engine instance (for advanced users)",
46
+ ),
47
+ # Alternative connection parameters
48
+ ConfigField(
49
+ name="user",
50
+ label="Username",
51
+ type="text",
52
+ required=False,
53
+ placeholder="database_user",
54
+ description="Database username (alternative to db_url)",
55
+ ),
56
+ ConfigField(
57
+ name="password",
58
+ label="Password",
59
+ type="password",
60
+ required=False,
61
+ placeholder="database_password",
62
+ description="Database password (alternative to db_url)",
63
+ ),
64
+ ConfigField(
65
+ name="host",
66
+ label="Host",
67
+ type="url",
68
+ required=False,
69
+ placeholder="localhost",
70
+ description="Database host (alternative to db_url)",
71
+ ),
72
+ ConfigField(
73
+ name="port",
74
+ label="Port",
75
+ type="number",
76
+ required=False,
77
+ placeholder="5432",
78
+ description="Database port (alternative to db_url)",
79
+ ),
80
+ ConfigField(
81
+ name="schema",
82
+ label="Schema/Database",
83
+ type="text",
84
+ required=False,
85
+ placeholder="mydb",
86
+ description="Database schema or database name",
87
+ ),
88
+ ConfigField(
89
+ name="dialect",
90
+ label="Database Dialect",
91
+ type="text",
92
+ required=False,
93
+ placeholder="postgresql",
94
+ description="Database dialect (postgresql, mysql, sqlite, etc.)",
95
+ ),
96
+ # Table configuration
97
+ ConfigField(
98
+ name="tables",
99
+ label="Tables Configuration",
100
+ type="text",
101
+ required=False,
102
+ placeholder='{"users": {...}, "orders": {...}}',
103
+ description="JSON configuration of specific tables to access (optional)",
104
+ ),
105
+ # SQL Operation Controls
106
+ ConfigField(
107
+ name="list_tables",
108
+ label="List Tables",
109
+ type="boolean",
110
+ required=False,
111
+ default=True,
112
+ description="Enable listing database tables",
113
+ ),
114
+ ConfigField(
115
+ name="describe_table",
116
+ label="Describe Table",
117
+ type="boolean",
118
+ required=False,
119
+ default=True,
120
+ description="Enable describing table schemas",
121
+ ),
122
+ ConfigField(
123
+ name="run_sql_query",
124
+ label="Run SQL Query",
125
+ type="boolean",
126
+ required=False,
127
+ default=True,
128
+ description="Enable executing SQL queries",
129
+ ),
130
+ ],
131
+ dependencies=["sqlalchemy"],
132
+ docs_url="https://docs.agno.com/tools/toolkits/database/sql",
133
+ )
134
+ def sql_tools() -> type[SQLTools]:
135
+ """Return SQL tools for database operations."""
136
+ from agno.tools.sql import SQLTools
137
+
138
+ return SQLTools
@@ -0,0 +1,104 @@
1
+ """Tavily 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.tavily import TavilyTools
17
+
18
+
19
+ @register_tool_with_metadata(
20
+ name="tavily",
21
+ display_name="Tavily",
22
+ description="Real-time web search API for retrieving current information",
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="tvly-...",
36
+ description="Tavily API key for web search access (can also be set via TAVILY_API_KEY env var)",
37
+ ),
38
+ # Feature flags
39
+ ConfigField(
40
+ name="search",
41
+ label="Enable Search",
42
+ type="boolean",
43
+ required=False,
44
+ default=True,
45
+ description="Enable web search functionality",
46
+ ),
47
+ ConfigField(
48
+ name="use_search_context",
49
+ label="Use Search Context",
50
+ type="boolean",
51
+ required=False,
52
+ default=False,
53
+ description="Use search context method instead of regular search",
54
+ ),
55
+ # Search configuration
56
+ ConfigField(
57
+ name="max_tokens",
58
+ label="Max Tokens",
59
+ type="number",
60
+ required=False,
61
+ default=6000,
62
+ description="Maximum number of tokens to return in search results",
63
+ ),
64
+ ConfigField(
65
+ name="include_answer",
66
+ label="Include Answer",
67
+ type="boolean",
68
+ required=False,
69
+ default=True,
70
+ description="Include AI-generated answer summary in search results",
71
+ ),
72
+ ConfigField(
73
+ name="search_depth",
74
+ label="Search Depth",
75
+ type="select",
76
+ required=False,
77
+ default="advanced",
78
+ options=[
79
+ {"label": "Basic", "value": "basic"},
80
+ {"label": "Advanced", "value": "advanced"},
81
+ ],
82
+ description="Search depth level for query processing",
83
+ ),
84
+ ConfigField(
85
+ name="format",
86
+ label="Output Format",
87
+ type="select",
88
+ required=False,
89
+ default="markdown",
90
+ options=[
91
+ {"label": "JSON", "value": "json"},
92
+ {"label": "Markdown", "value": "markdown"},
93
+ ],
94
+ description="Format for search result output",
95
+ ),
96
+ ],
97
+ dependencies=["tavily-python"],
98
+ docs_url="https://docs.agno.com/tools/toolkits/search/tavily",
99
+ )
100
+ def tavily_tools() -> type[TavilyTools]:
101
+ """Return Tavily tools for real-time web search."""
102
+ from agno.tools.tavily import TavilyTools
103
+
104
+ return TavilyTools
@@ -0,0 +1,54 @@
1
+ """Telegram 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.telegram import TelegramTools
17
+
18
+
19
+ @register_tool_with_metadata(
20
+ name="telegram",
21
+ display_name="Telegram",
22
+ description="Send messages via Telegram bot",
23
+ category=ToolCategory.COMMUNICATION,
24
+ status=ToolStatus.REQUIRES_CONFIG,
25
+ setup_type=SetupType.API_KEY,
26
+ icon="FaTelegram",
27
+ icon_color="text-blue-500", # Telegram blue
28
+ config_fields=[
29
+ # Authentication/Connection parameters
30
+ ConfigField(
31
+ name="chat_id",
32
+ label="Chat ID",
33
+ type="text",
34
+ required=True,
35
+ placeholder="123456789 or @username",
36
+ description="The chat ID or username to send messages to",
37
+ ),
38
+ ConfigField(
39
+ name="token",
40
+ label="Bot Token",
41
+ type="password",
42
+ required=False,
43
+ placeholder="1234567890:ABCdefGHijKlmnOPqrSTuvwXYZ",
44
+ description="Telegram bot token (can also be set via TELEGRAM_TOKEN env var)",
45
+ ),
46
+ ],
47
+ dependencies=["httpx"],
48
+ docs_url="https://core.telegram.org/bots/api",
49
+ )
50
+ def telegram_tools() -> type[TelegramTools]:
51
+ """Return Telegram tools for sending messages."""
52
+ from agno.tools.telegram import TelegramTools
53
+
54
+ return TelegramTools