Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 33 additions & 1 deletion scout/contexts.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,10 @@
from os import getenv
from pathlib import Path

from agno.context.calendar import GoogleCalendarContextProvider
from agno.context.database import DatabaseContextProvider
from agno.context.gdrive import GDriveContextProvider
from agno.context.gmail import GmailContextProvider
from agno.context.mcp import MCPContextProvider
from agno.context.provider import ContextProvider
from agno.context.slack import SlackContextProvider
Expand Down Expand Up @@ -67,7 +69,13 @@ def create_context_providers() -> list[ContextProvider]:
_create_knowledge_wiki(),
_create_voice_wiki(),
]
for factory in (_create_slack_provider, _create_gdrive_provider):
optional_factories = (
_create_slack_provider,
_create_gdrive_provider,
_create_gmail_provider,
_create_calendar_provider,
)
for factory in optional_factories:
try:
provider = factory()
except Exception as exc:
Expand Down Expand Up @@ -248,6 +256,30 @@ def _create_gdrive_provider() -> GDriveContextProvider | None:
return GDriveContextProvider(model=default_model())


def _create_gmail_provider() -> GmailContextProvider | None:
sa_path = getenv("GOOGLE_SERVICE_ACCOUNT_FILE")
has_oauth = getenv("GOOGLE_CLIENT_ID") and getenv("GOOGLE_CLIENT_SECRET")

if not sa_path and not has_oauth:
return None

if sa_path and not getenv("GOOGLE_DELEGATED_USER"):
log_warning("Gmail requires GOOGLE_DELEGATED_USER for service account auth")
return None

return GmailContextProvider(model=default_model(), write=True)


def _create_calendar_provider() -> GoogleCalendarContextProvider | None:
sa_path = getenv("GOOGLE_SERVICE_ACCOUNT_FILE")
has_oauth = getenv("GOOGLE_CLIENT_ID") and getenv("GOOGLE_CLIENT_SECRET")

if not sa_path and not has_oauth:
return None

return GoogleCalendarContextProvider(model=default_model(), write=True)


def _create_mcp_providers() -> list[MCPContextProvider]:
"""Registered MCP servers.

Expand Down
Loading
Loading