/** * Voice MCP Tools - Voice Input for Decibel Commands * * Provides MCP tools for: * - Managing a Voice Inbox (queued transcripts) * - Processing voice commands via AI intent parsing * - Routing to existing Decibel tools based on intent * * DOJO-EXP-0001: Voice Input for Decibel Commands * Status: Ungraduated experiment - feature flagged */ export type VoiceInboxStatus = 'queued' | 'processing' | 'completed' | 'failed' | 'discarded'; export type VoiceInboxSource = 'voice_cli' | 'text_input' | 'share_extension' | 'api' | 'mobile_app'; export type VoiceIntent = 'add_wish' | 'log_issue' | 'create_epic' | 'search' | 'ask_oracle' | 'log_crit' | 'log_friction' | 'record_learning' | 'unknown'; export interface VoiceInboxItem { id: string; transcript: string; source: VoiceInboxSource; created_at: string; status: VoiceInboxStatus; intent?: VoiceIntent; intent_confidence?: number; parsed_params?: Record; result?: { tool_called: string; tool_result: unknown; completed_at: string; }; error?: string; tags?: string[]; project_id: string; } export interface VoiceBaseInput { project_id?: string; } /** * Parse intent from a voice transcript. * Uses pattern matching for now - can be upgraded to AI-powered later. */ export declare function parseIntent(transcript: string): { intent: VoiceIntent; confidence: number; params: Record; }; export interface VoiceInboxAddInput extends VoiceBaseInput { transcript: string; source?: VoiceInboxSource; tags?: string[]; process_immediately?: boolean; explicit_intent?: string; } export interface VoiceInboxAddOutput { inbox_id: string; transcript: string; intent: VoiceIntent; intent_confidence: number; status: VoiceInboxStatus; immediate_result?: unknown; } export declare function voiceInboxAdd(input: VoiceInboxAddInput): Promise; export interface VoiceInboxListInput extends VoiceBaseInput { status?: VoiceInboxStatus; limit?: number; /** Discarded items are hidden unless asked for, by this or by status: 'discarded'. */ include_discarded?: boolean; } export interface VoiceInboxListOutput { items: VoiceInboxItem[]; total: number; by_status: Record; } export declare function voiceInboxList(input: VoiceInboxListInput): Promise; export interface VoiceInboxProcessInput extends VoiceBaseInput { inbox_id: string; override_intent?: VoiceIntent; override_params?: Record; } export interface VoiceInboxProcessOutput { inbox_id: string; intent: VoiceIntent; tool_called: string; result: unknown; success: boolean; } export interface VoiceInboxDiscardInput extends VoiceBaseInput { inbox_id: string; } export interface VoiceInboxDiscardOutput { discarded: true; id: string; stored_in: 'local' | 'supabase'; } export declare function voiceInboxDiscard(input: VoiceInboxDiscardInput): Promise; export declare function voiceInboxProcess(input: VoiceInboxProcessInput): Promise; export interface VoiceCommandInput extends VoiceBaseInput { transcript: string; } export interface VoiceCommandOutput { transcript: string; intent: VoiceIntent; intent_confidence: number; tool_called: string; result: unknown; success: boolean; } /** * Process a voice command directly without storing in inbox. * Use for real-time voice interactions. */ export declare function voiceCommand(input: VoiceCommandInput): Promise; export interface VoiceInboxSyncInput extends VoiceBaseInput { /** Only sync unsynced messages (default: true) */ unsynced_only?: boolean; /** Maximum messages to sync (default: 50) */ limit?: number; /** If true, also process synced messages immediately */ process_after_sync?: boolean; } export interface VoiceInboxSyncOutput { synced: number; skipped: number; errors: number; items: Array<{ id: string; transcript: string; intent: VoiceIntent; status: 'synced' | 'already_exists' | 'error'; error?: string; }>; } /** * Sync voice inbox messages from Supabase to local project. * This is the "pull" operation - projects can call this to get pending messages. */ export declare function voiceInboxSync(input: VoiceInboxSyncInput): Promise; export declare const voiceToolDefinitions: ({ name: string; description: string; inputSchema: { type: string; properties: { project_id: { type: string; description: string; }; transcript: { type: string; description: string; }; source: { type: string; enum: string[]; description: string; }; tags: { type: string; items: { type: string; }; description: string; }; process_immediately: { type: string; description: string; }; status?: undefined; limit?: undefined; include_discarded?: undefined; inbox_id?: undefined; override_intent?: undefined; override_params?: undefined; unsynced_only?: undefined; process_after_sync?: undefined; }; required: string[]; }; } | { name: string; description: string; inputSchema: { type: string; properties: { project_id: { type: string; description: string; }; status: { type: string; enum: string[]; description: string; }; limit: { type: string; description: string; }; include_discarded: { type: string; description: string; }; transcript?: undefined; source?: undefined; tags?: undefined; process_immediately?: undefined; inbox_id?: undefined; override_intent?: undefined; override_params?: undefined; unsynced_only?: undefined; process_after_sync?: undefined; }; required?: undefined; }; } | { name: string; description: string; inputSchema: { type: string; properties: { project_id: { type: string; description: string; }; inbox_id: { type: string; description: string; }; transcript?: undefined; source?: undefined; tags?: undefined; process_immediately?: undefined; status?: undefined; limit?: undefined; include_discarded?: undefined; override_intent?: undefined; override_params?: undefined; unsynced_only?: undefined; process_after_sync?: undefined; }; required: string[]; }; } | { name: string; description: string; inputSchema: { type: string; properties: { project_id: { type: string; description: string; }; inbox_id: { type: string; description: string; }; override_intent: { type: string; enum: string[]; description: string; }; override_params: { type: string; description: string; }; transcript?: undefined; source?: undefined; tags?: undefined; process_immediately?: undefined; status?: undefined; limit?: undefined; include_discarded?: undefined; unsynced_only?: undefined; process_after_sync?: undefined; }; required: string[]; }; } | { name: string; description: string; inputSchema: { type: string; properties: { project_id: { type: string; description: string; }; transcript: { type: string; description: string; }; source?: undefined; tags?: undefined; process_immediately?: undefined; status?: undefined; limit?: undefined; include_discarded?: undefined; inbox_id?: undefined; override_intent?: undefined; override_params?: undefined; unsynced_only?: undefined; process_after_sync?: undefined; }; required: string[]; }; } | { name: string; description: string; inputSchema: { type: string; properties: { project_id: { type: string; description: string; }; unsynced_only: { type: string; description: string; }; limit: { type: string; description: string; }; process_after_sync: { type: string; description: string; }; transcript?: undefined; source?: undefined; tags?: undefined; process_immediately?: undefined; status?: undefined; include_discarded?: undefined; inbox_id?: undefined; override_intent?: undefined; override_params?: undefined; }; required: never[]; }; })[]; //# sourceMappingURL=voice.d.ts.map