Files
documente/prd.md
Luca Sacchi Ricciardi 4b7a419a98 feat(api): implement notebook management CRUD endpoints
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
2026-04-06 01:13:13 +02:00

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

  1. Fornire accesso programmatico completo a NotebookLM
  2. Creare un'interfaccia API standardizzata per integrazione multi-agent
  3. Supportare workflow automatizzati di ricerca e generazione contenuti
  4. 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)

  1. Specifica: Definire requisiti e API contract prima del codice
  2. Review: Revisione specifica con stakeholder
  3. Implementazione: Sviluppo seguendo la spec
  4. Validazione: Verifica conformità alla spec

8.2 Test Driven Development (TDD)

  1. Red: Scrivere test che fallisce
  2. Green: Implementare codice minimo per passare il test
  3. 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