Implement Sprint 1: Notebook Management CRUD
- Add NotebookService with full CRUD operations
- Add POST /api/v1/notebooks (create notebook)
- Add GET /api/v1/notebooks (list with pagination)
- Add GET /api/v1/notebooks/{id} (get by ID)
- Add PATCH /api/v1/notebooks/{id} (partial update)
- Add DELETE /api/v1/notebooks/{id} (delete)
- Add Pydantic models for requests/responses
- Add custom exceptions (ValidationError, NotFoundError, NotebookLMError)
- Add comprehensive unit tests (31 tests, 97% coverage)
- Add API integration tests (26 tests)
- Fix router prefix duplication
- Fix JSON serialization in error responses
BREAKING CHANGE: None
18 KiB
Product Requirements Document (PRD)
NotebookLM Agent API
Versione: 1.0.0
Data: 2026-04-05
Autore: NotebookLM Agent Team
Status: Draft
1. Panoramica del Prodotto
1.1 Nome del Prodotto
NotebookLM Agent API - Un agente LLM che fornisce accesso programmatico a Google NotebookLM tramite interfaccia API con webhook.
1.2 Descrizione
Sistema agentico basato su Python che integra Google NotebookLM tramite la libreria notebooklm-py, offrendo:
- Interfaccia API REST per automazione
- Webhook per integrazione con altri agenti AI
- Skill nativa per agenti AI (OpenCode, Claude, Codex)
- Metodologia Spec-Driven Development (SDD)
- Test Driven Development (TDD)
1.3 Obiettivi Principali
- Fornire accesso programmatico completo a NotebookLM
- Creare un'interfaccia API standardizzata per integrazione multi-agent
- Supportare workflow automatizzati di ricerca e generazione contenuti
- Garantire qualità del codice attraverso TDD e SDD
2. Obiettivi
2.1 Obiettivi di Business
- Creare un servizio API stabile per NotebookLM
- Supportare integrazione con ecosistema AI multi-agent
- Fornire webhook per event-driven architecture
- Garantire manutenibilità attraverso test automatizzati (>90% coverage)
2.2 Obiettivi Utente
- Creare notebook e gestire fonti programmaticamente
- Generare contenuti (audio, video, quiz, flashcard) via API
- Ricevere notifiche webhook su completamento operazioni
- Integrare con altri agenti AI tramite API standard
2.3 Metriche di Successo (KPI)
| Metrica | Target | Note |
|---|---|---|
| Code Coverage | ≥90% | Pytest + coverage |
| API Uptime | ≥99.5% | Per operazioni core |
| Response Time (API) | <500ms | Per operazioni sync |
| Webhook Delivery | ≥99% | Con retry automatico |
| Test Pass Rate | 100% | CI/CD gate |
3. Pubblico Target
3.1 Persona 1: AI Agent Developer
- Ruolo: Sviluppatore di agenti AI
- Needs: API stabile, webhook affidabili, documentazione chiara
- Frustrazioni: API instabili, mancanza di webhook, documentazione scarsa
- Obiettivi: Integrare NotebookLM nel proprio agente AI
3.2 Persona 2: Automation Engineer
- Ruolo: Ingegnere automazione
- Needs: Automazione research-to-content, batch processing
- Frustrazioni: Processi manuali ripetitivi
- Obiettivi: Pipeline automatizzate di ricerca e generazione
3.3 Persona 3: Content Creator
- Ruolo: Creatore di contenuti
- Needs: Generazione podcast/video da fonti multiple
- Frustrazioni: Operazioni manuali su NotebookLM
- Obiettivi: Workflow automatizzato research → content
4. Requisiti Funzionali
4.1 Core: API REST
REQ-001: Gestione Notebook
Priorità: Alta
Descrizione: CRUD operazioni su notebook NotebookLM
Criteri di Accettazione:
- POST /api/v1/notebooks - Creare notebook
- GET /api/v1/notebooks - Listare notebook
- GET /api/v1/notebooks/{id} - Ottenere dettagli
- DELETE /api/v1/notebooks/{id} - Eliminare notebook
- PATCH /api/v1/notebooks/{id} - Aggiornare notebook
User Story:
"Come sviluppatore, voglio creare e gestire notebook via API per automatizzare workflow"
REQ-002: Gestione Fonti
Priorità: Alta
Descrizione: Aggiungere e gestire fonti (URL, PDF, YouTube, Drive)
Criteri di Accettazione:
- POST /api/v1/notebooks/{id}/sources - Aggiungere fonte
- GET /api/v1/notebooks/{id}/sources - Listare fonti
- DELETE /api/v1/notebooks/{id}/sources/{source_id} - Rimuovere fonte
- GET /api/v1/notebooks/{id}/sources/{source_id}/fulltext - Ottenere testo indicizzato
- POST /api/v1/notebooks/{id}/sources/research - Avviare ricerca web/Drive
User Story:
"Come utente, voglio aggiungere fonti programmaticamente per analisi bulk"
REQ-003: Chat e Query
Priorità: Alta
Descrizione: Interagire con i contenuti tramite chat
Criteri di Accettazione:
- POST /api/v1/notebooks/{id}/chat - Inviare messaggio
- GET /api/v1/notebooks/{id}/chat/history - Ottenere storico
- POST /api/v1/notebooks/{id}/chat/save - Salvare risposta come nota
User Story:
"Come utente, voglio interrogare le fonti via API per estrarre insights"
REQ-004: Generazione Contenuti
Priorità: Alta
Descrizione: Generare tutti i tipi di contenuto NotebookLM
Criteri di Accettazione:
- POST /api/v1/notebooks/{id}/generate/audio - Generare podcast
- POST /api/v1/notebooks/{id}/generate/video - Generare video
- POST /api/v1/notebooks/{id}/generate/slide-deck - Generare slide
- POST /api/v1/notebooks/{id}/generate/infographic - Generare infografica
- POST /api/v1/notebooks/{id}/generate/quiz - Generare quiz
- POST /api/v1/notebooks/{id}/generate/flashcards - Generare flashcard
- POST /api/v1/notebooks/{id}/generate/report - Generare report
- POST /api/v1/notebooks/{id}/generate/mind-map - Generare mappa mentale
- POST /api/v1/notebooks/{id}/generate/data-table - Generare tabella dati
User Story:
"Come creatore, voglio generare contenuti multi-formato automaticamente"
REQ-005: Gestione Artifacts
Priorità: Alta
Descrizione: Monitorare e scaricare contenuti generati
Criteri di Accettazione:
- GET /api/v1/notebooks/{id}/artifacts - Listare artifacts
- GET /api/v1/notebooks/{id}/artifacts/{artifact_id}/status - Controllare stato
- GET /api/v1/notebooks/{id}/artifacts/{artifact_id}/download - Scaricare artifact
- POST /api/v1/notebooks/{id}/artifacts/{artifact_id}/wait - Attendere completamento
User Story:
"Come utente, voglio scaricare contenuti generati in vari formati"
4.2 Core: Webhook System
REQ-006: Webhook Management
Priorità: Alta
Descrizione: Gestire endpoint webhook per notifiche eventi
Criteri di Accettazione:
- POST /api/v1/webhooks - Registrare webhook
- GET /api/v1/webhooks - Listare webhook registrati
- DELETE /api/v1/webhooks/{id} - Rimuovere webhook
- POST /api/v1/webhooks/{id}/test - Testare webhook
User Story:
"Come sviluppatore, voglio ricevere notifiche su eventi NotebookLM"
REQ-007: Eventi Webhook
Priorità: Alta
Descrizione: Inviare notifiche su eventi specifici
Criteri di Accettazione:
- source.added - Nuova fonte aggiunta
- source.ready - Fonte indicizzata e pronta
- artifact.generated - Artifact generato con successo
- artifact.failed - Generazione artifact fallita
- research.completed - Ricerca completata
- notebook.shared - Notebook condiviso
User Story:
"Come agente AI, voglio essere notificato quando un contenuto è pronto"
REQ-008: Webhook Reliability
Priorità: Media
Descrizione: Garantire affidabilità delivery webhook
Criteri di Accettazione:
- Retry automatico con exponential backoff
- Firma HMAC per verifica autenticità
- Timeout configurabile (default: 30s)
- Delivery tracking con ID univoco
User Story:
"Come sviluppatore, voglio webhook affidabili con verifica sicurezza"
4.3 Core: Skill AI
REQ-009: Skill OpenCode
Priorità: Alta
Descrizione: Skill nativa per OpenCode CLI
Criteri di Accettazione:
- File SKILL.md conforme specifiche OpenCode
- Comandi natural language supportati
- Autonomy rules definite
- Error handling documentato
User Story:
"Come utente OpenCode, voglio usare NotebookLM tramite comandi naturali"
REQ-010: Multi-Agent Integration
Priorità: Media
Descrizione: Supporto per integrazione con altri agenti AI
Criteri di Accettazione:
- API Key authentication per agenti
- Rate limiting per tenant
- Isolamento risorse per agente
5. Requisiti Non Funzionali
5.1 Performance
- API Response Time: <500ms per operazioni sincrone
- Webhook Delivery: <5s dalla generazione evento
- Throughput: 100 req/s per endpoint API
- Connessioni concorrenti: ≥1000
5.2 Sicurezza
- API Key authentication per tutti gli endpoint
- HTTPS obbligatorio in produzione
- HMAC signature per webhook
- Sanitizzazione input (prevenzione injection)
- Nessuna persistenza credenziali NotebookLM (usa storage_state.json)
5.3 Affidabilità
- Uptime target: 99.5%
- Retry automatico per operazioni fallite
- Circuit breaker per API esterne (NotebookLM)
- Graceful degradation su rate limiting
5.4 Scalabilità
- Architettura stateless
- Supporto per horizontal scaling
- Queue-based processing per operazioni lunghe
- Caching risultati dove appropriato
5.5 Monitoring
- Logging strutturato (JSON)
- Metrics (Prometheus-compatible)
- Health check endpoints
- Alerting su errori critici
6. Stack Tecnologico
6.1 Core Technologies
| Componente | Tecnologia | Versione |
|---|---|---|
| Language | Python | ≥3.10 |
| Framework API | FastAPI | ≥0.100 |
| Async | asyncio | built-in |
| HTTP Client | httpx | ≥0.27 |
| Validation | Pydantic | ≥2.0 |
6.2 NotebookLM Integration
| Componente | Tecnologia | Note |
|---|---|---|
| NotebookLM Client | notebooklm-py | ≥0.3.4 |
| Auth | playwright | Per browser login |
| Storage | Local JSON | storage_state.json |
6.3 Testing & Quality
| Componente | Tecnologia | Scopo |
|---|---|---|
| Testing | pytest | Unit/Integration/E2E |
| Coverage | pytest-cov | ≥90% target |
| Linting | ruff | Code quality |
| Type Check | mypy | Static typing |
| Pre-commit | pre-commit | Git hooks |
6.4 DevOps
| Componente | Tecnologia | Scopo |
|---|---|---|
| Package | uv | Dependency management |
| Build | hatchling | Package building |
| Git | conventional commits | Standardizzazione commit |
| Changelog | common-changelog | Gestione changelog |
7. Architettura
7.1 System Architecture
┌─────────────────────────────────────────────────────────────┐
│ Clients │
│ (OpenCode, Claude, Codex, Custom Agents, Direct API) │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ NotebookLM Agent API │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────┐ │
│ │ REST API │ │ Webhook │ │ Skill Interface │ │
│ │ Layer │ │ Manager │ │ │ │
│ └─────────────┘ └─────────────┘ └─────────────────────┘ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────┐ │
│ │ Service │ │ Event │ │ Queue/Worker │ │
│ │ Layer │ │ Bus │ │ (Celery/RQ) │ │
│ └─────────────┘ └─────────────┘ └─────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ NotebookLM-py Client Library │
│ (Async wrapper + RPC handling) │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ Google NotebookLM │
│ (Undocumented Internal APIs) │
└─────────────────────────────────────────────────────────────┘
7.2 API Structure
/api/v1/
├── notebooks/
│ ├── GET / # List
│ ├── POST / # Create
│ ├── GET /{id} # Get
│ ├── DELETE /{id} # Delete
│ ├── PATCH /{id} # Update
│ ├── sources/
│ │ ├── GET / # List sources
│ │ ├── POST / # Add source
│ │ ├── DELETE /{source_id} # Remove source
│ │ ├── GET /{source_id}/fulltext
│ │ └── POST /research # Web/Drive research
│ ├── chat/
│ │ ├── POST / # Send message
│ │ ├── GET /history # Get history
│ │ └── POST /save # Save as note
│ ├── generate/
│ │ ├── POST /audio
│ │ ├── POST /video
│ │ ├── POST /slide-deck
│ │ ├── POST /infographic
│ │ ├── POST /quiz
│ │ ├── POST /flashcards
│ │ ├── POST /report
│ │ ├── POST /mind-map
│ │ └── POST /data-table
│ └── artifacts/
│ ├── GET / # List
│ ├── GET /{id}/status # Status
│ ├── GET /{id}/download # Download
│ └── POST /{id}/wait # Wait completion
├── webhooks/
│ ├── GET / # List
│ ├── POST / # Register
│ ├── DELETE /{id} # Remove
│ └── POST /{id}/test # Test
└── health/
├── GET / # Health check
└── GET /ready # Readiness probe
8. Metodologia di Sviluppo
8.1 Spec-Driven Development (SDD)
- Specifica: Definire requisiti e API contract prima del codice
- Review: Revisione specifica con stakeholder
- Implementazione: Sviluppo seguendo la spec
- Validazione: Verifica conformità alla spec
8.2 Test Driven Development (TDD)
- Red: Scrivere test che fallisce
- Green: Implementare codice minimo per passare il test
- Refactor: Migliorare codice mantenendo test pass
8.3 Testing Strategy
| Livello | Scope | Tools | Coverage |
|---|---|---|---|
| Unit | Funzioni isolate | pytest, mock | ≥90% |
| Integration | Componenti integrati | pytest, httpx | ≥80% |
| E2E | Flussi completi | pytest, real API | Key paths |
8.4 Conventional Commits
<type>(<scope>): <description>
[optional body]
[optional footer]
Types: feat, fix, docs, style, refactor, test, chore, ci
Scopes: api, webhook, skill, notebook, source, artifact, auth
9. Piano di Rilascio
9.1 Milestone
| Milestone | Data | Features | Stato |
|---|---|---|---|
| v0.1.0 | 2026-04-15 | Core API (notebook, source, chat) | Pianificato |
| v0.2.0 | 2026-04-30 | Generazione contenuti + webhook | Pianificato |
| v0.3.0 | 2026-05-15 | Skill OpenCode + multi-agent | Pianificato |
| v1.0.0 | 2026-06-01 | Production ready + docs complete | Pianificato |
9.2 Roadmap
- Q2 2026: Core features, stabilizzazione API
- Q3 2026: Advanced features, performance optimization
- Q4 2026: Enterprise features, scaling improvements
10. Analisi dei Rischi
| Rischio | Probabilità | Impatto | Mitigazione |
|---|---|---|---|
| API NotebookLM cambiano | Alta | Alto | Wrapper abstraction, monitoring |
| Rate limiting agressivo | Media | Medio | Retry logic, queue-based processing |
| Auth session scade | Media | Medio | Refresh automatico, alerting |
| Webhook delivery fallisce | Media | Medio | Retry con backoff, dead letter queue |
| Breaking changes notebooklm-py | Bassa | Alto | Version pinning, vendor tests |
11. Note e Assunzioni
11.1 Assunzioni
- Utente ha account Google valido con accesso NotebookLM
notebooklm-pyè installato e funzionante- Playwright configurato per autenticazione browser
- Ambiente Python 3.10+ disponibile
11.2 Dipendenze Esterne
- Google NotebookLM (undocumented APIs)
- notebooklm-py library
- Playwright (browser automation)
11.3 Vincoli
- Nessuna persistenza server-side per credenziali
- Rate limits di NotebookLM applicati
- Alcune operazioni sono asincrone per natura
12. Approvazioni
| Ruolo | Nome | Firma | Data |
|---|---|---|---|
| Product Owner | |||
| Tech Lead | |||
| QA Lead |
13. Cronologia Revisioni
| Versione | Data | Autore | Modifiche |
|---|---|---|---|
| 0.1.0 | 2026-04-05 | NotebookLM Agent Team | Bozza iniziale |
Documento PRD
Ultimo aggiornamento: 2026-04-05