Skip to content
Closed
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
35 changes: 34 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 CalendarContextProvider
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,12 @@ def create_context_providers() -> list[ContextProvider]:
_create_knowledge_wiki(),
_create_voice_wiki(),
]
for factory in (_create_slack_provider, _create_gdrive_provider):
for factory in (
_create_slack_provider,
_create_gdrive_provider,
_create_gmail_provider,
_create_calendar_provider,
):
try:
provider = factory()
except Exception as exc:
Expand Down Expand Up @@ -248,6 +255,32 @@ def _create_gdrive_provider() -> GDriveContextProvider | None:
return GDriveContextProvider(model=default_model())


def _create_gmail_provider() -> GmailContextProvider | None:
"""Gmail context — OAuth or service account with delegation.

For OAuth: set GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET, GOOGLE_PROJECT_ID.
For SA: set GOOGLE_SERVICE_ACCOUNT_FILE and GOOGLE_DELEGATED_USER.
"""
has_oauth = getenv("GOOGLE_CLIENT_ID") and getenv("GOOGLE_CLIENT_SECRET")
has_sa = getenv("GOOGLE_SERVICE_ACCOUNT_FILE") and getenv("GOOGLE_DELEGATED_USER")
if not (has_oauth or has_sa):
return None
return GmailContextProvider(model=default_model(), read=True, write=True)


def _create_calendar_provider() -> CalendarContextProvider | None:
"""Calendar context — OAuth or service account (delegation optional).

For OAuth: set GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET, GOOGLE_PROJECT_ID.
For SA: set GOOGLE_SERVICE_ACCOUNT_FILE (GOOGLE_DELEGATED_USER optional).
"""
has_oauth = getenv("GOOGLE_CLIENT_ID") and getenv("GOOGLE_CLIENT_SECRET")
has_sa = getenv("GOOGLE_SERVICE_ACCOUNT_FILE")
if not (has_oauth or has_sa):
return None
return CalendarContextProvider(model=default_model(), read=True, write=True)


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

Expand Down
Loading