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,64 @@
1
+ """PubMed 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.pubmed import PubmedTools
17
+
18
+
19
+ @register_tool_with_metadata(
20
+ name="pubmed",
21
+ display_name="PubMed",
22
+ description="Search and retrieve medical and life science literature from PubMed",
23
+ category=ToolCategory.RESEARCH,
24
+ status=ToolStatus.AVAILABLE,
25
+ setup_type=SetupType.NONE,
26
+ icon="FaStethoscope",
27
+ icon_color="text-blue-600", # Medical blue
28
+ config_fields=[
29
+ # Configuration parameters
30
+ ConfigField(
31
+ name="email",
32
+ label="Email Address",
33
+ type="text",
34
+ required=False,
35
+ default="your_email@example.com",
36
+ placeholder="researcher@institution.edu",
37
+ description="Email address for NCBI API identification (required by NCBI guidelines)",
38
+ ),
39
+ ConfigField(
40
+ name="max_results",
41
+ label="Maximum Results",
42
+ type="number",
43
+ required=False,
44
+ default=None,
45
+ placeholder="10",
46
+ description="Default maximum number of search results to return (can be overridden per search)",
47
+ ),
48
+ ConfigField(
49
+ name="results_expanded",
50
+ label="Expanded Results",
51
+ type="boolean",
52
+ required=False,
53
+ default=False,
54
+ description="Return comprehensive article metadata including keywords, MeSH terms, and full abstracts",
55
+ ),
56
+ ],
57
+ dependencies=["httpx"],
58
+ docs_url="https://docs.agno.com/tools/toolkits/search/pubmed",
59
+ )
60
+ def pubmed_tools() -> type[PubmedTools]:
61
+ """Return PubMed tools for medical research and literature search."""
62
+ from agno.tools.pubmed import PubmedTools
63
+
64
+ return PubmedTools
@@ -0,0 +1,120 @@
1
+ """Python tools 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.python import PythonTools
17
+
18
+
19
+ @register_tool_with_metadata(
20
+ name="python",
21
+ display_name="Python Tools",
22
+ description="Execute Python code, manage files, and install packages",
23
+ category=ToolCategory.DEVELOPMENT,
24
+ status=ToolStatus.AVAILABLE,
25
+ setup_type=SetupType.NONE,
26
+ icon="FaPython",
27
+ icon_color="text-blue-500",
28
+ config_fields=[
29
+ # Base configuration
30
+ ConfigField(
31
+ name="base_dir",
32
+ label="Base Directory",
33
+ type="text",
34
+ required=False,
35
+ placeholder="/path/to/working/directory",
36
+ description="Base directory for file operations (defaults to current working directory)",
37
+ ),
38
+ # Execution environment
39
+ ConfigField(
40
+ name="safe_globals",
41
+ label="Safe Globals",
42
+ type="text",
43
+ required=False,
44
+ description="Custom global scope for code execution (advanced users only)",
45
+ ),
46
+ ConfigField(
47
+ name="safe_locals",
48
+ label="Safe Locals",
49
+ type="text",
50
+ required=False,
51
+ description="Custom local scope for code execution (advanced users only)",
52
+ ),
53
+ # Core functionality
54
+ ConfigField(
55
+ name="save_and_run",
56
+ label="Save and Run Files",
57
+ type="boolean",
58
+ required=False,
59
+ default=True,
60
+ description="Enable saving Python code to files and executing them",
61
+ ),
62
+ ConfigField(
63
+ name="run_code",
64
+ label="Run Code",
65
+ type="boolean",
66
+ required=False,
67
+ default=False,
68
+ description="Enable direct execution of Python code in memory",
69
+ ),
70
+ # File operations
71
+ ConfigField(
72
+ name="read_files",
73
+ label="Read Files",
74
+ type="boolean",
75
+ required=False,
76
+ default=False,
77
+ description="Enable reading file contents",
78
+ ),
79
+ ConfigField(
80
+ name="list_files",
81
+ label="List Files",
82
+ type="boolean",
83
+ required=False,
84
+ default=False,
85
+ description="Enable listing files in the base directory",
86
+ ),
87
+ ConfigField(
88
+ name="run_files",
89
+ label="Run Files",
90
+ type="boolean",
91
+ required=False,
92
+ default=False,
93
+ description="Enable running existing Python files",
94
+ ),
95
+ # Package management
96
+ ConfigField(
97
+ name="pip_install",
98
+ label="Pip Install",
99
+ type="boolean",
100
+ required=False,
101
+ default=False,
102
+ description="Enable installing packages using pip",
103
+ ),
104
+ ConfigField(
105
+ name="uv_pip_install",
106
+ label="UV Pip Install",
107
+ type="boolean",
108
+ required=False,
109
+ default=False,
110
+ description="Enable installing packages using uv pip",
111
+ ),
112
+ ],
113
+ dependencies=["agno"],
114
+ docs_url="https://docs.agno.com/tools/toolkits/local/python",
115
+ )
116
+ def python_tools() -> type[PythonTools]:
117
+ """Return Python tools for code execution and file management."""
118
+ from agno.tools.python import PythonTools
119
+
120
+ return PythonTools
@@ -0,0 +1,155 @@
1
+ """Reddit 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.reddit import RedditTools
17
+
18
+
19
+ @register_tool_with_metadata(
20
+ name="reddit",
21
+ display_name="Reddit",
22
+ description="Social media platform for browsing, posting, and interacting with Reddit communities",
23
+ category=ToolCategory.SOCIAL,
24
+ status=ToolStatus.REQUIRES_CONFIG,
25
+ setup_type=SetupType.API_KEY,
26
+ icon="FaReddit",
27
+ icon_color="text-orange-500", # Reddit's signature orange color
28
+ config_fields=[
29
+ # Reddit instance parameter
30
+ ConfigField(
31
+ name="reddit_instance",
32
+ label="Reddit Instance",
33
+ type="text",
34
+ required=False,
35
+ default=None,
36
+ description="Pre-configured Reddit instance (optional, will create one if not provided)",
37
+ ),
38
+ # Authentication parameters
39
+ ConfigField(
40
+ name="client_id",
41
+ label="Client ID",
42
+ type="text",
43
+ required=False,
44
+ placeholder="your_client_id",
45
+ description="Reddit API client ID (can also be set via REDDIT_CLIENT_ID env var)",
46
+ ),
47
+ ConfigField(
48
+ name="client_secret",
49
+ label="Client Secret",
50
+ type="password",
51
+ required=False,
52
+ placeholder="your_client_secret",
53
+ description="Reddit API client secret (can also be set via REDDIT_CLIENT_SECRET env var)",
54
+ ),
55
+ ConfigField(
56
+ name="user_agent",
57
+ label="User Agent",
58
+ type="text",
59
+ required=False,
60
+ default="RedditTools v1.0",
61
+ placeholder="MyApp v1.0",
62
+ description="User agent string for API requests (can also be set via REDDIT_USER_AGENT env var)",
63
+ ),
64
+ ConfigField(
65
+ name="username",
66
+ label="Username",
67
+ type="text",
68
+ required=False,
69
+ placeholder="your_reddit_username",
70
+ description="Reddit username for authenticated actions (can also be set via REDDIT_USERNAME env var)",
71
+ ),
72
+ ConfigField(
73
+ name="password",
74
+ label="Password",
75
+ type="password",
76
+ required=False,
77
+ placeholder="your_reddit_password",
78
+ description="Reddit password for authenticated actions (can also be set via REDDIT_PASSWORD env var)",
79
+ ),
80
+ # Feature flags grouped by functionality
81
+ # User and community information
82
+ ConfigField(
83
+ name="get_user_info",
84
+ label="Get User Info",
85
+ type="boolean",
86
+ required=False,
87
+ default=True,
88
+ description="Enable getting information about Reddit users",
89
+ ),
90
+ ConfigField(
91
+ name="get_top_posts",
92
+ label="Get Top Posts",
93
+ type="boolean",
94
+ required=False,
95
+ default=True,
96
+ description="Enable getting top posts from subreddits",
97
+ ),
98
+ ConfigField(
99
+ name="get_subreddit_info",
100
+ label="Get Subreddit Info",
101
+ type="boolean",
102
+ required=False,
103
+ default=True,
104
+ description="Enable getting information about subreddits",
105
+ ),
106
+ ConfigField(
107
+ name="get_trending_subreddits",
108
+ label="Get Trending Subreddits",
109
+ type="boolean",
110
+ required=False,
111
+ default=True,
112
+ description="Enable getting currently trending subreddits",
113
+ ),
114
+ ConfigField(
115
+ name="get_subreddit_stats",
116
+ label="Get Subreddit Stats",
117
+ type="boolean",
118
+ required=False,
119
+ default=True,
120
+ description="Enable getting statistics about subreddits",
121
+ ),
122
+ # Content creation and interaction
123
+ ConfigField(
124
+ name="create_post",
125
+ label="Create Post",
126
+ type="boolean",
127
+ required=False,
128
+ default=True,
129
+ description="Enable creating new posts in subreddits",
130
+ ),
131
+ ConfigField(
132
+ name="reply_to_post",
133
+ label="Reply to Post",
134
+ type="boolean",
135
+ required=False,
136
+ default=True,
137
+ description="Enable replying to existing posts",
138
+ ),
139
+ ConfigField(
140
+ name="reply_to_comment",
141
+ label="Reply to Comment",
142
+ type="boolean",
143
+ required=False,
144
+ default=True,
145
+ description="Enable replying to existing comments",
146
+ ),
147
+ ],
148
+ dependencies=["praw"],
149
+ docs_url=None,
150
+ )
151
+ def reddit_tools() -> type[RedditTools]:
152
+ """Return Reddit tools for social media interaction."""
153
+ from agno.tools.reddit import RedditTools
154
+
155
+ return RedditTools
@@ -0,0 +1,56 @@
1
+ """Replicate 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.replicate import ReplicateTools
17
+
18
+
19
+ @register_tool_with_metadata(
20
+ name="replicate",
21
+ display_name="Replicate",
22
+ description="Generate images and videos using AI models on the Replicate platform",
23
+ category=ToolCategory.DEVELOPMENT,
24
+ status=ToolStatus.REQUIRES_CONFIG,
25
+ setup_type=SetupType.API_KEY,
26
+ icon="FaVideo",
27
+ icon_color="text-purple-600",
28
+ config_fields=[
29
+ # Authentication
30
+ ConfigField(
31
+ name="api_key",
32
+ label="API Key",
33
+ type="password",
34
+ required=False,
35
+ placeholder="r8_...",
36
+ description="Replicate API token (can also be set via REPLICATE_API_TOKEN env var)",
37
+ ),
38
+ # Model configuration
39
+ ConfigField(
40
+ name="model",
41
+ label="Model",
42
+ type="text",
43
+ required=False,
44
+ default="minimax/video-01",
45
+ placeholder="minimax/video-01",
46
+ description="The Replicate model to use for media generation",
47
+ ),
48
+ ],
49
+ dependencies=["replicate"],
50
+ docs_url="https://docs.agno.com/tools/toolkits/others/replicate",
51
+ )
52
+ def replicate_tools() -> type[ReplicateTools]:
53
+ """Return Replicate tools for AI media generation."""
54
+ from agno.tools.replicate import ReplicateTools
55
+
56
+ return ReplicateTools
@@ -0,0 +1,55 @@
1
+ """Resend 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.resend import ResendTools
17
+
18
+
19
+ @register_tool_with_metadata(
20
+ name="resend",
21
+ display_name="Resend",
22
+ description="Email delivery service for sending transactional emails",
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
30
+ ConfigField(
31
+ name="api_key",
32
+ label="API Key",
33
+ type="password",
34
+ required=False,
35
+ placeholder="re_...",
36
+ description="Resend API key for authentication (can also be set via RESEND_API_KEY env var)",
37
+ ),
38
+ # Configuration
39
+ ConfigField(
40
+ name="from_email",
41
+ label="From Email",
42
+ type="text",
43
+ required=False,
44
+ placeholder="noreply@example.com",
45
+ description="Default sender email address for outgoing emails",
46
+ ),
47
+ ],
48
+ dependencies=["resend"],
49
+ docs_url="https://docs.agno.com/tools/toolkits/others/resend",
50
+ )
51
+ def resend_tools() -> type[ResendTools]:
52
+ """Return Resend email tools for sending transactional emails."""
53
+ from agno.tools.resend import ResendTools
54
+
55
+ return ResendTools
@@ -0,0 +1,87 @@
1
+ """ScrapeGraph 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.scrapegraph import ScrapeGraphTools
17
+
18
+
19
+ @register_tool_with_metadata(
20
+ name="scrapegraph",
21
+ display_name="ScrapeGraph",
22
+ description="Extract structured data from webpages using AI and natural language prompts",
23
+ category=ToolCategory.RESEARCH,
24
+ status=ToolStatus.REQUIRES_CONFIG,
25
+ setup_type=SetupType.API_KEY,
26
+ icon="FaGlobe",
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="sgai_...",
36
+ description="ScrapeGraph API key for enhanced services (can also be set via SGAI_API_KEY env var)",
37
+ ),
38
+ # Tool features
39
+ ConfigField(
40
+ name="smartscraper",
41
+ label="Smart Scraper",
42
+ type="boolean",
43
+ required=False,
44
+ default=True,
45
+ description="Enable AI-powered data extraction using natural language prompts",
46
+ ),
47
+ ConfigField(
48
+ name="markdownify",
49
+ label="Markdownify",
50
+ type="boolean",
51
+ required=False,
52
+ default=False,
53
+ description="Enable webpage to markdown conversion",
54
+ ),
55
+ ConfigField(
56
+ name="crawl",
57
+ label="Crawl",
58
+ type="boolean",
59
+ required=False,
60
+ default=False,
61
+ description="Enable website crawling and structured data extraction",
62
+ ),
63
+ ConfigField(
64
+ name="searchscraper",
65
+ label="Search Scraper",
66
+ type="boolean",
67
+ required=False,
68
+ default=False,
69
+ description="Enable web search and information extraction",
70
+ ),
71
+ ConfigField(
72
+ name="agentic_crawler",
73
+ label="Agentic Crawler",
74
+ type="boolean",
75
+ required=False,
76
+ default=False,
77
+ description="Enable automated browser actions and optional AI extraction",
78
+ ),
79
+ ],
80
+ dependencies=["scrapegraph-py"],
81
+ docs_url="https://docs.agno.com/tools/toolkits/web_scrape/scrapegraph",
82
+ )
83
+ def scrapegraph_tools() -> type[ScrapeGraphTools]:
84
+ """Return ScrapeGraph tools for web data extraction."""
85
+ from agno.tools.scrapegraph import ScrapeGraphTools
86
+
87
+ return ScrapeGraphTools
@@ -0,0 +1,120 @@
1
+ """Searxng 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.searxng import Searxng
17
+
18
+
19
+ @register_tool_with_metadata(
20
+ name="searxng",
21
+ display_name="SearxNG",
22
+ description="Open source search engine for web, images, news, science, and specialized content",
23
+ category=ToolCategory.RESEARCH,
24
+ status=ToolStatus.REQUIRES_CONFIG,
25
+ setup_type=SetupType.NONE,
26
+ icon="FaSearch",
27
+ icon_color="text-blue-600",
28
+ config_fields=[
29
+ # Connection configuration
30
+ ConfigField(
31
+ name="host",
32
+ label="Host URL",
33
+ type="url",
34
+ required=True,
35
+ placeholder="http://localhost:8080",
36
+ description="The host for the SearxNG instance connection",
37
+ ),
38
+ ConfigField(
39
+ name="engines",
40
+ label="Search Engines",
41
+ type="text",
42
+ required=False,
43
+ default="",
44
+ placeholder="google,bing,duckduckgo",
45
+ description="Comma-separated list of search engines to use (leave empty for default)",
46
+ ),
47
+ ConfigField(
48
+ name="fixed_max_results",
49
+ label="Fixed Max Results",
50
+ type="number",
51
+ required=False,
52
+ placeholder="10",
53
+ description="Optional parameter to specify the fixed maximum number of results",
54
+ ),
55
+ # Content type enablement flags
56
+ ConfigField(
57
+ name="images",
58
+ label="Enable Image Search",
59
+ type="boolean",
60
+ required=False,
61
+ default=False,
62
+ description="Enable searching for images",
63
+ ),
64
+ ConfigField(
65
+ name="it",
66
+ label="Enable IT Search",
67
+ type="boolean",
68
+ required=False,
69
+ default=False,
70
+ description="Enable searching for IT-related content",
71
+ ),
72
+ ConfigField(
73
+ name="map",
74
+ label="Enable Map Search",
75
+ type="boolean",
76
+ required=False,
77
+ default=False,
78
+ description="Enable searching for maps",
79
+ ),
80
+ ConfigField(
81
+ name="music",
82
+ label="Enable Music Search",
83
+ type="boolean",
84
+ required=False,
85
+ default=False,
86
+ description="Enable searching for music",
87
+ ),
88
+ ConfigField(
89
+ name="news",
90
+ label="Enable News Search",
91
+ type="boolean",
92
+ required=False,
93
+ default=False,
94
+ description="Enable searching for news",
95
+ ),
96
+ ConfigField(
97
+ name="science",
98
+ label="Enable Science Search",
99
+ type="boolean",
100
+ required=False,
101
+ default=False,
102
+ description="Enable searching for science-related content",
103
+ ),
104
+ ConfigField(
105
+ name="videos",
106
+ label="Enable Video Search",
107
+ type="boolean",
108
+ required=False,
109
+ default=False,
110
+ description="Enable searching for videos",
111
+ ),
112
+ ],
113
+ dependencies=[], # httpx already included in main dependencies
114
+ docs_url="https://docs.agno.com/tools/toolkits/search/searxng",
115
+ )
116
+ def searxng_tools() -> type[Searxng]:
117
+ """Return SearxNG search tools for web, images, news, and specialized content search."""
118
+ from agno.tools.searxng import Searxng
119
+
120
+ return Searxng