Improve morning report collectors and add section toggling

- Add is_section_enabled() to support per-section enable/disable in config
- Update Python path from 3.13 to 3.14 for gmail venv
- Disable tasks section by default (enabled: false in config)
- Apply code formatting improvements (black/ruff style)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
OpenCode Test
2026-01-04 23:44:24 -08:00
parent 7ca8caeecb
commit 45b7e4bcf7
5 changed files with 146 additions and 80 deletions

View File

@@ -11,37 +11,49 @@ from pathlib import Path
def fetch_unread_emails(days: int = 7, max_results: int = 15) -> list:
"""Fetch unread emails directly using gmail_mcp library."""
# Set credentials path
os.environ.setdefault('GMAIL_CREDENTIALS_PATH', os.path.expanduser('~/.gmail-mcp/credentials.json'))
os.environ.setdefault(
"GMAIL_CREDENTIALS_PATH", os.path.expanduser("~/.gmail-mcp/credentials.json")
)
try:
# Add gmail venv to path
venv_site = Path.home() / ".claude/mcp/gmail/venv/lib/python3.13/site-packages"
venv_site = Path.home() / ".claude/mcp/gmail/venv/lib/python3.14/site-packages"
if str(venv_site) not in sys.path:
sys.path.insert(0, str(venv_site))
from gmail_mcp.utils.GCP.gmail_auth import get_gmail_service
service = get_gmail_service()
results = service.users().messages().list(
userId='me',
q=f'is:unread newer_than:{days}d',
maxResults=max_results
).execute()
results = (
service.users()
.messages()
.list(
userId="me", q=f"is:unread newer_than:{days}d", maxResults=max_results
)
.execute()
)
emails = []
for msg in results.get('messages', []):
detail = service.users().messages().get(
userId='me',
id=msg['id'],
format='metadata',
metadataHeaders=['From', 'Subject']
).execute()
headers = {h['name']: h['value'] for h in detail['payload']['headers']}
emails.append({
'from': headers.get('From', 'Unknown'),
'subject': headers.get('Subject', '(no subject)'),
'id': msg['id']
})
for msg in results.get("messages", []):
detail = (
service.users()
.messages()
.get(
userId="me",
id=msg["id"],
format="metadata",
metadataHeaders=["From", "Subject"],
)
.execute()
)
headers = {h["name"]: h["value"] for h in detail["payload"]["headers"]}
emails.append(
{
"from": headers.get("From", "Unknown"),
"subject": headers.get("Subject", "(no subject)"),
"id": msg["id"],
}
)
return emails
@@ -79,10 +91,17 @@ Output the formatted email section, nothing else."""
try:
result = subprocess.run(
["/home/will/.local/bin/claude", "--print", "--model", "sonnet", "-p", prompt],
[
"/home/will/.local/bin/claude",
"--print",
"--model",
"sonnet",
"-p",
prompt,
],
capture_output=True,
text=True,
timeout=60
timeout=60,
)
if result.returncode == 0 and result.stdout.strip():
@@ -131,7 +150,7 @@ def collect(config: dict) -> dict:
"content": formatted,
"raw": emails if not has_error else None,
"count": len(emails) if not has_error else 0,
"error": emails[0].get("error") if has_error else None
"error": emails[0].get("error") if has_error else None,
}