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,86 @@
1
+ """Google Sheets 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.google_sheets import GoogleSheetsTools
17
+
18
+
19
+ @register_tool_with_metadata(
20
+ name="google_sheets",
21
+ display_name="Google Sheets",
22
+ description="Read, create, update, and duplicate Google Sheets spreadsheets",
23
+ category=ToolCategory.DEVELOPMENT,
24
+ status=ToolStatus.REQUIRES_CONFIG,
25
+ setup_type=SetupType.SPECIAL,
26
+ auth_provider="google", # Authentication provided by Google Services integration
27
+ icon="FaGoogle",
28
+ icon_color="text-green-600",
29
+ config_fields=[
30
+ ConfigField(
31
+ name="spreadsheet_id",
32
+ label="Spreadsheet ID",
33
+ type="text",
34
+ required=False,
35
+ placeholder="Leave empty to work with multiple spreadsheets",
36
+ description="The ID of the Google Spreadsheet to work with. If not specified, you can work with multiple spreadsheets.",
37
+ ),
38
+ ConfigField(
39
+ name="spreadsheet_range",
40
+ label="Default Range",
41
+ type="text",
42
+ required=False,
43
+ placeholder="e.g., Sheet1!A1:Z100",
44
+ description="Default range to use for operations (optional)",
45
+ ),
46
+ ConfigField(
47
+ name="read",
48
+ label="Enable Read Operations",
49
+ type="boolean",
50
+ required=False,
51
+ default=True,
52
+ description="Allow reading data from spreadsheets",
53
+ ),
54
+ ConfigField(
55
+ name="create",
56
+ label="Enable Create Operations",
57
+ type="boolean",
58
+ required=False,
59
+ default=False,
60
+ description="Allow creating new spreadsheets",
61
+ ),
62
+ ConfigField(
63
+ name="update",
64
+ label="Enable Update Operations",
65
+ type="boolean",
66
+ required=False,
67
+ default=False,
68
+ description="Allow updating existing spreadsheets",
69
+ ),
70
+ ConfigField(
71
+ name="duplicate",
72
+ label="Enable Duplicate Operations",
73
+ type="boolean",
74
+ required=False,
75
+ default=False,
76
+ description="Allow duplicating spreadsheets",
77
+ ),
78
+ ],
79
+ dependencies=["google-api-python-client", "google-auth-httplib2", "google-auth-oauthlib"],
80
+ docs_url="https://docs.agno.com/tools/toolkits/others/google_sheets",
81
+ )
82
+ def google_sheets_tools() -> type[GoogleSheetsTools]:
83
+ """Return Google Sheets tools for spreadsheet integration."""
84
+ from mindroom.custom_tools.google_sheets import GoogleSheetsTools
85
+
86
+ return GoogleSheetsTools
@@ -0,0 +1,83 @@
1
+ """Google Search 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.googlesearch import GoogleSearchTools
17
+
18
+
19
+ @register_tool_with_metadata(
20
+ name="googlesearch",
21
+ display_name="Google Search",
22
+ description="Search Google for web results using Python library",
23
+ category=ToolCategory.RESEARCH,
24
+ status=ToolStatus.AVAILABLE,
25
+ setup_type=SetupType.NONE,
26
+ icon="FaGoogle",
27
+ icon_color="text-blue-500",
28
+ config_fields=[
29
+ # Search configuration
30
+ ConfigField(
31
+ name="fixed_max_results",
32
+ label="Fixed Max Results",
33
+ type="number",
34
+ required=False,
35
+ default=None,
36
+ placeholder="10",
37
+ description="Fixed number of maximum search results to return (overrides per-query max_results)",
38
+ ),
39
+ ConfigField(
40
+ name="fixed_language",
41
+ label="Fixed Language",
42
+ type="text",
43
+ required=False,
44
+ default=None,
45
+ placeholder="en",
46
+ description="Fixed language for search results (overrides per-query language setting)",
47
+ ),
48
+ ConfigField(
49
+ name="proxy",
50
+ label="Proxy",
51
+ type="url",
52
+ required=False,
53
+ default=None,
54
+ placeholder="http://proxy.example.com:8080",
55
+ description="Proxy server for search requests",
56
+ ),
57
+ ConfigField(
58
+ name="timeout",
59
+ label="Request Timeout",
60
+ type="number",
61
+ required=False,
62
+ default=10,
63
+ placeholder="10",
64
+ description="Timeout for search requests in seconds",
65
+ ),
66
+ ConfigField(
67
+ name="headers",
68
+ label="Custom Headers",
69
+ type="text",
70
+ required=False,
71
+ default=None,
72
+ placeholder='{"User-Agent": "Custom Agent"}',
73
+ description="Custom headers for search requests (JSON format)",
74
+ ),
75
+ ],
76
+ dependencies=["googlesearch-python", "pycountry"],
77
+ docs_url="https://docs.agno.com/tools/toolkits/search/googlesearch",
78
+ )
79
+ def googlesearch_tools() -> type[GoogleSearchTools]:
80
+ """Return Google Search tools for web search."""
81
+ from agno.tools.googlesearch import GoogleSearchTools
82
+
83
+ return GoogleSearchTools
mindroom/tools/groq.py ADDED
@@ -0,0 +1,77 @@
1
+ """Groq 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.models.groq import GroqTools
11
+
12
+
13
+ @register_tool_with_metadata(
14
+ name="groq",
15
+ display_name="Groq",
16
+ description="Fast AI inference for audio transcription, translation, and text-to-speech",
17
+ category=ToolCategory.DEVELOPMENT,
18
+ status=ToolStatus.REQUIRES_CONFIG,
19
+ setup_type=SetupType.API_KEY,
20
+ icon="TbBrain",
21
+ icon_color="text-orange-500", # Groq brand orange
22
+ config_fields=[
23
+ # Authentication
24
+ ConfigField(
25
+ name="api_key",
26
+ label="API Key",
27
+ type="password",
28
+ required=False,
29
+ placeholder="gsk_...",
30
+ description="Groq API key for authentication (can also be set via GROQ_API_KEY env var)",
31
+ ),
32
+ # Model Configuration
33
+ ConfigField(
34
+ name="transcription_model",
35
+ label="Transcription Model",
36
+ type="text",
37
+ required=False,
38
+ default="whisper-large-v3",
39
+ placeholder="whisper-large-v3",
40
+ description="Whisper model to use for audio transcription",
41
+ ),
42
+ ConfigField(
43
+ name="translation_model",
44
+ label="Translation Model",
45
+ type="text",
46
+ required=False,
47
+ default="whisper-large-v3",
48
+ placeholder="whisper-large-v3",
49
+ description="Whisper model to use for audio translation to English",
50
+ ),
51
+ ConfigField(
52
+ name="tts_model",
53
+ label="Text-to-Speech Model",
54
+ type="text",
55
+ required=False,
56
+ default="playai-tts",
57
+ placeholder="playai-tts",
58
+ description="Model to use for text-to-speech generation",
59
+ ),
60
+ ConfigField(
61
+ name="tts_voice",
62
+ label="TTS Voice",
63
+ type="text",
64
+ required=False,
65
+ default="Chip-PlayAI",
66
+ placeholder="Chip-PlayAI",
67
+ description="Voice to use for text-to-speech generation",
68
+ ),
69
+ ],
70
+ dependencies=["groq"],
71
+ docs_url="https://docs.agno.com/tools/toolkits/models/groq",
72
+ )
73
+ def groq_tools() -> type[GroqTools]:
74
+ """Return Groq AI tools for fast audio transcription, translation, and text-to-speech."""
75
+ from agno.tools.models.groq import GroqTools
76
+
77
+ return GroqTools
@@ -0,0 +1,54 @@
1
+ """Hacker News 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.hackernews import HackerNewsTools
17
+
18
+
19
+ @register_tool_with_metadata(
20
+ name="hackernews",
21
+ display_name="Hacker News",
22
+ description="Get top stories and user details from Hacker News",
23
+ category=ToolCategory.RESEARCH,
24
+ status=ToolStatus.AVAILABLE,
25
+ setup_type=SetupType.NONE,
26
+ icon="FaHackerNews",
27
+ icon_color="text-orange-600", # Hacker News orange
28
+ config_fields=[
29
+ # Feature flags
30
+ ConfigField(
31
+ name="get_top_stories",
32
+ label="Get Top Stories",
33
+ type="boolean",
34
+ required=False,
35
+ default=True,
36
+ description="Enable getting top stories from Hacker News",
37
+ ),
38
+ ConfigField(
39
+ name="get_user_details",
40
+ label="Get User Details",
41
+ type="boolean",
42
+ required=False,
43
+ default=True,
44
+ description="Enable getting user details from Hacker News",
45
+ ),
46
+ ],
47
+ dependencies=["httpx"],
48
+ docs_url="https://docs.agno.com/tools/toolkits/search/hackernews",
49
+ )
50
+ def hackernews_tools() -> type[HackerNewsTools]:
51
+ """Return Hacker News tools for getting stories and user details."""
52
+ from agno.tools.hackernews import HackerNewsTools
53
+
54
+ return HackerNewsTools
mindroom/tools/jina.py ADDED
@@ -0,0 +1,108 @@
1
+ """Jina Reader 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.jina import JinaReaderTools
17
+
18
+
19
+ @register_tool_with_metadata(
20
+ name="jina",
21
+ display_name="Jina Reader",
22
+ description="Web content reading and search using Jina AI Reader API",
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/Connection parameters first
30
+ ConfigField(
31
+ name="api_key",
32
+ label="API Key",
33
+ type="password",
34
+ required=False,
35
+ placeholder="jina_...",
36
+ description="API key for Jina Reader (can also be set via JINA_API_KEY env var)",
37
+ ),
38
+ ConfigField(
39
+ name="base_url",
40
+ label="Base URL",
41
+ type="url",
42
+ required=False,
43
+ default="https://r.jina.ai/",
44
+ placeholder="https://r.jina.ai/",
45
+ description="Base URL for Jina Reader API",
46
+ ),
47
+ ConfigField(
48
+ name="search_url",
49
+ label="Search URL",
50
+ type="url",
51
+ required=False,
52
+ default="https://s.jina.ai/",
53
+ placeholder="https://s.jina.ai/",
54
+ description="Search URL for Jina Reader API",
55
+ ),
56
+ # Configuration parameters
57
+ ConfigField(
58
+ name="max_content_length",
59
+ label="Max Content Length",
60
+ type="number",
61
+ required=False,
62
+ default=10000,
63
+ description="Maximum content length in characters",
64
+ ),
65
+ ConfigField(
66
+ name="timeout",
67
+ label="Timeout",
68
+ type="number",
69
+ required=False,
70
+ placeholder="30",
71
+ description="Timeout for Jina Reader API requests in seconds",
72
+ ),
73
+ # Feature flags grouped by functionality
74
+ # URL Reading Features
75
+ ConfigField(
76
+ name="read_url",
77
+ label="Read URL",
78
+ type="boolean",
79
+ required=False,
80
+ default=True,
81
+ description="Enable URL reading functionality",
82
+ ),
83
+ # Search Features
84
+ ConfigField(
85
+ name="search_query",
86
+ label="Search Query",
87
+ type="boolean",
88
+ required=False,
89
+ default=False,
90
+ description="Enable web search functionality",
91
+ ),
92
+ ConfigField(
93
+ name="search_query_content",
94
+ label="Search Query Content",
95
+ type="boolean",
96
+ required=False,
97
+ default=True,
98
+ description="Include full URL content in search results",
99
+ ),
100
+ ],
101
+ dependencies=["httpx", "pydantic"],
102
+ docs_url="https://docs.agno.com/tools/toolkits/web_scrape/jina_reader",
103
+ )
104
+ def jina_tools() -> type[JinaReaderTools]:
105
+ """Return Jina Reader tools for web content reading and search."""
106
+ from agno.tools.jina import JinaReaderTools
107
+
108
+ return JinaReaderTools
mindroom/tools/jira.py ADDED
@@ -0,0 +1,70 @@
1
+ """Jira 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.jira import JiraTools
17
+
18
+
19
+ @register_tool_with_metadata(
20
+ name="jira",
21
+ display_name="Jira",
22
+ description="Issue tracking and project management",
23
+ category=ToolCategory.DEVELOPMENT,
24
+ status=ToolStatus.REQUIRES_CONFIG,
25
+ setup_type=SetupType.API_KEY,
26
+ icon="FaTicketAlt",
27
+ icon_color="text-blue-600", # Jira blue
28
+ config_fields=[
29
+ # Authentication
30
+ ConfigField(
31
+ name="server_url",
32
+ label="Server URL",
33
+ type="url",
34
+ required=True,
35
+ placeholder="https://your-domain.atlassian.net",
36
+ description="The URL of the JIRA server (can also be set via JIRA_SERVER_URL env var)",
37
+ ),
38
+ ConfigField(
39
+ name="username",
40
+ label="Username",
41
+ type="text",
42
+ required=False,
43
+ placeholder="your.email@company.com",
44
+ description="The JIRA username for authentication (can also be set via JIRA_USERNAME env var)",
45
+ ),
46
+ ConfigField(
47
+ name="password",
48
+ label="Password",
49
+ type="password",
50
+ required=False,
51
+ placeholder="your-password",
52
+ description="The JIRA password for authentication (can also be set via JIRA_PASSWORD env var)",
53
+ ),
54
+ ConfigField(
55
+ name="token",
56
+ label="API Token",
57
+ type="password",
58
+ required=False,
59
+ placeholder="your-api-token",
60
+ description="The JIRA API token for authentication (can also be set via JIRA_TOKEN env var)",
61
+ ),
62
+ ],
63
+ dependencies=["jira"],
64
+ docs_url="https://docs.agno.com/tools/toolkits/others/jira",
65
+ )
66
+ def jira_tools() -> type[JiraTools]:
67
+ """Return Jira tools for issue tracking and project management."""
68
+ from agno.tools.jira import JiraTools
69
+
70
+ return JiraTools
@@ -0,0 +1,103 @@
1
+ """Linear 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.linear import LinearTools
17
+
18
+
19
+ @register_tool_with_metadata(
20
+ name="linear",
21
+ display_name="Linear",
22
+ description="Issue tracking and project management",
23
+ category=ToolCategory.DEVELOPMENT,
24
+ status=ToolStatus.REQUIRES_CONFIG,
25
+ setup_type=SetupType.API_KEY,
26
+ icon="FaLinear",
27
+ icon_color="text-purple-600",
28
+ config_fields=[
29
+ # User operations
30
+ ConfigField(
31
+ name="get_user_details",
32
+ label="Get User Details",
33
+ type="boolean",
34
+ required=False,
35
+ default=True,
36
+ description="Enable fetching authenticated user details",
37
+ ),
38
+ ConfigField(
39
+ name="get_teams_details",
40
+ label="Get Teams Details",
41
+ type="boolean",
42
+ required=False,
43
+ default=True,
44
+ description="Enable fetching team details for the authenticated user",
45
+ ),
46
+ # Issue operations
47
+ ConfigField(
48
+ name="get_issue_details",
49
+ label="Get Issue Details",
50
+ type="boolean",
51
+ required=False,
52
+ default=True,
53
+ description="Enable retrieving details of specific issues by ID",
54
+ ),
55
+ ConfigField(
56
+ name="create_issue",
57
+ label="Create Issue",
58
+ type="boolean",
59
+ required=False,
60
+ default=True,
61
+ description="Enable creating new issues within teams and projects",
62
+ ),
63
+ ConfigField(
64
+ name="update_issue",
65
+ label="Update Issue",
66
+ type="boolean",
67
+ required=False,
68
+ default=True,
69
+ description="Enable updating issue titles and states",
70
+ ),
71
+ ConfigField(
72
+ name="get_user_assigned_issues",
73
+ label="Get User Assigned Issues",
74
+ type="boolean",
75
+ required=False,
76
+ default=True,
77
+ description="Enable retrieving issues assigned to specific users",
78
+ ),
79
+ ConfigField(
80
+ name="get_workflow_issues",
81
+ label="Get Workflow Issues",
82
+ type="boolean",
83
+ required=False,
84
+ default=True,
85
+ description="Enable retrieving issues within specific workflow states",
86
+ ),
87
+ ConfigField(
88
+ name="get_high_priority_issues",
89
+ label="Get High Priority Issues",
90
+ type="boolean",
91
+ required=False,
92
+ default=True,
93
+ description="Enable retrieving issues with high priority (priority <= 2)",
94
+ ),
95
+ ],
96
+ dependencies=["requests"],
97
+ docs_url="https://docs.agno.com/tools/toolkits/others/linear",
98
+ )
99
+ def linear_tools() -> type[LinearTools]:
100
+ """Return Linear tools for issue tracking and project management."""
101
+ from agno.tools.linear import LinearTools
102
+
103
+ return LinearTools
@@ -0,0 +1,65 @@
1
+ """Linkup 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.linkup import LinkupTools
17
+
18
+
19
+ @register_tool_with_metadata(
20
+ name="linkup",
21
+ display_name="Linkup",
22
+ description="Web search using Linkup API for real-time 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="linkup_...",
36
+ description="Linkup API key for authentication (can also be set via LINKUP_API_KEY env var)",
37
+ ),
38
+ # Search configuration
39
+ ConfigField(
40
+ name="depth",
41
+ label="Search Depth",
42
+ type="text",
43
+ required=False,
44
+ default="standard",
45
+ placeholder="standard",
46
+ description="Depth of the search. Use 'standard' for fast and affordable web search or 'deep' for comprehensive, in-depth web search",
47
+ ),
48
+ ConfigField(
49
+ name="output_type",
50
+ label="Output Type",
51
+ type="text",
52
+ required=False,
53
+ default="searchResults",
54
+ placeholder="searchResults",
55
+ description="Type of output. 'sourcedAnswer' provides a comprehensive natural language answer with citations, 'searchResults' returns raw search context data",
56
+ ),
57
+ ],
58
+ dependencies=["linkup-sdk"],
59
+ docs_url="https://docs.agno.com/tools/toolkits/search/linkup",
60
+ )
61
+ def linkup_tools() -> type[LinkupTools]:
62
+ """Return Linkup tools for web search."""
63
+ from agno.tools.linkup import LinkupTools
64
+
65
+ return LinkupTools