diff --git a/docs/04-api-contracts.md b/docs/04-api-contracts.md index 095b0ee..de95bd4 100644 --- a/docs/04-api-contracts.md +++ b/docs/04-api-contracts.md @@ -101,6 +101,13 @@ bulk_export_meetings(input: { destDir: string; format: "md" | "pdf" | "docx" | " // folder of them (from a bulk export). Each is reconstructed under a fresh meeting id (original // title/date/duration/speakers/tags/action items preserved). Returns the count imported. import_meeting_bundle(input: { dir: string }): number +// Add a meeting from an existing recording: a local audio/video file path or a URL (YouTube/ +// streaming page or direct media URL). Needs ffmpeg (+ yt-dlp for URLs) on PATH; neither bundled. +// `model` overrides the Settings whisper model for this import (recorded as meeting.model_used). +// Returns the new meeting id IMMEDIATELY (status "transcribing"); transcode→transcribe→diarize→ +// finalize run in the background, streaming import://progress and ending with transcript://finalized. +// A failed import is left in the list with status "error" (not deleted). +import_media(input: { source: string; title?: string; model?: string }): MeetingId // ---- LLM / AI provider (ADR-0007/0011) ---- // provider ∈ ollama | custom | anthropic | openai | off. Hosted-provider API keys are passed to @@ -193,6 +200,7 @@ privacy_self_check(): { "recording://device" { meetingId, recovered: boolean, message: string } // capture device change (FR-CAP-6) "transcript://segment" { meetingId, segment: TranscriptSegment } // live segments (FR-TRX-2); may re-emit a committed segment with a refined `speaker` — replace by `segment.id` "transcript://finalized" { meetingId, segmentCount } +"import://progress" { meetingId, phase: "prepare"|"transcribe"|"diarize"|"finalize", state: "active"|"done"|"error", elapsedMs: number|null, error: string|null } // background import_media tracker "diarization://updated" { meetingId, speakers: SpeakerInfo[] } // post-pass AND live 15s provisional passes (FR-SPK); carries "You" once the mic voiceprint matches "llm://token" { meetingId, text } // streamed summary (FR-LLM-4) "llm://done" { meetingId, summary: SummaryFile } // full summary.json contents, not just a pointer