Skip to content

Conversation Recording & Export System #331

@ProjectLiminality

Description

@ProjectLiminality

Enhanced Description

Conversation Recording & Export System tracks DreamNode invocations during FaceTime calls and generates email summaries with AI-powered conversation highlights. The system embeds invocation events directly into the real-time transcript for temporal alignment, then exports a pre-filled email draft with timestamped DreamNode links and conversation summary.

Parent Specification: #269
Parent Epic: #257

Technical Approach

1. Conversation Recording Architecture

  • Trigger: Start recording when "Start Video Call" command executes
  • Track: DreamNode invocations (click-based, not hotkey)
  • Data structure: { timestamp: Date, nodeName: string, dreamUUID: string }
  • Real-time transcript embedding: Append (Invoked: NodeName) inline to active transcript
  • Storage: Local-only, ephemeral (cleared on "End Video Call")

2. AI Summary System (Future-Proof Architecture)

  • Provider abstraction layer: Interface for swappable LLM providers
  • Initial implementation: Claude API via plugin settings
  • Future-ready: OpenRouter integration, open-source model support
  • Summary scope: Conversation summary with explicit attention to (Invoked: NodeName) markers
  • Output: Contextualized DreamNode references with plain text deep links

3. Obsidian URI Deep Links

  • Single node link: obsidian://interbrain-clone?vault=<vault>&uuid=<dreamUUID>
  • Batch clone link: obsidian://interbrain-clone-batch?vault=<vault>&uuids=<uuid1,uuid2,uuid3>
  • Behavior: Opens Obsidian, triggers InterBrain clone command with UUID(s)
  • User flow: Click link → Obsidian opens → DreamNode(s) cloned to vault
  • Current status: Proof of concept (logs + Notice), clone logic deferred to networking epic

4. Email Export via AppleScript

  • Trigger: Automatic on "End Video Call" command
  • Pre-filled fields:
  • User action: Review and send, or dismiss draft

5. Plugin Settings Integration

  • Settings tab: Standard Obsidian PluginSettingTab with text input
  • Field: "Claude API Key" (password-style input)
  • Storage: Obsidian's built-in saveData() / loadData() system
  • Future: Additional fields for OpenRouter, model selection

Enhanced Acceptance Criteria

Conversation Timeline Tracking

  • Track DreamNode invocations with precise timestamps
  • Store invocation metadata: nodeName, dreamUUID, timestamp
  • Start recording on "Start Video Call" command
  • Embed invocation markers inline in transcript: (Invoked: NodeName)
  • Maintain temporal ordering for future time-aligned summaries

AI Summary Generation

  • Plugin settings tab with Claude API key input
  • Abstract LLM provider interface for future extensibility
  • Generate conversation summary from transcript text
  • Explicitly identify and contextualize invoked DreamNodes in summary
  • Handle edge case: pure discussion (no invocations) vs. node-rich conversations

Obsidian URI Deep Links

  • Register custom URI handler: obsidian://interbrain-clone
  • Single node clone via URI with UUID parameter
  • Batch clone URI for multiple UUIDs
  • Links open Obsidian and trigger handler (proof of concept with logs/Notice)

Email Export System

  • Generate pre-filled Apple Mail draft via AppleScript
  • Auto-populate recipient from FaceTime contact email
  • Email body includes conversation metadata (date, time, duration)
  • Timestamped list of invoked DreamNodes with clickable deep links
  • Include batch clone link for all shared nodes
  • Include InterBrain download/install link
  • Trigger automatically on "End Video Call" (dismissible)

Data Management

  • Clear conversation data when ending copilot mode
  • Local-only storage (no cloud sync)
  • Minimal memory footprint for long conversations

Integration Points

  • Copilot System (Complete Copilot System with Real-time Search #327): Hooks into click-based invocation (DreamspaceCanvas.tsx)
  • Transcription Service: Appends invocation markers to active transcript
  • FaceTime Integration: Uses contact info for email auto-population
  • Settings Framework: Standard Obsidian plugin settings pattern

Implementation Notes

  • Click-based invocation: Records when user clicks DreamNode in copilot mode
  • CORS workaround: Uses Obsidian's requestUrl() instead of fetch() for Claude API
  • Transcript preservation: Reads content before stopping transcription service
  • Plain text emails: Working implementation after HTML attempt failed
  • Deep links: Proof of concept established, actual clone logic deferred

Definition of Done

  • All acceptance criteria met and tested
  • Plugin settings integration working
  • Email export generates correct AppleScript output
  • Deep links proof of concept working (console logs + Notice)
  • AI summary accurately reflects conversation context
  • User testing confirms workflow is intuitive
  • Code reviewed and merged to epic branch

Metadata

Metadata

Assignees

No one assigned

    Labels

    featureFeature level issues

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions