Changes: - Non-blocking coding-data sharing upsell banner - Consolidate remediation in Doctor - Auto mode defers fail-closed gate asks to the classifier - Coalesce marketplace list fetches - Allow removing a marketplace source by name - Contain hung git marketplace sources (timeouts, non-blocking refresh, unbrick modal) - Label failed workspace RPCs with error_kind - Drop redundant explicit tonic/prost deps from xai-grok-shell - Report real exit codes for completed background shells - Narrow the date-rollover reminder to date-bearing templates - Wire toolOverrides through the session and agent - Security: Bash(git:*) allowlist matches whole command chain by prefix - Split prompt-trigger telemetry and record classifier provenance - Raise connectors-manager timeout to 60s - Auto classifier honors recorded approvals for repeat actions - Apply doctor fixes in the TUI - Auto-mode classifier timeouts prompt instead of silently denying - Scope subagent completion drains to the owning session - Add the toolOverrides wire types - Set client_identifier=grok-agent-sdk - Accept both spellings of the workspace-teleport kill switch - Persist one-shot occurrence journal - Stop turns that poll the exact same tool call 16x in a row - Copy compaction checkpoint files when forking sessions - Auto-focus permission prompt from scrollback - Esc cancels the running turn in non-vim and minimal modes - List Ctrl+Z undo and redo in keyboard shortcuts - Out-of-process macOS mic capture - Show active auth mode on session-info - Install the npm binary under $GROK_HOME - Remove hover/click dead zones between dashboard items - Route startup warnings to doctor - Document [feedback.user] author identity config - Extend bang command timeout - Close combine-queued edit-hold race - Integrate relocation recovery - Expose privacy notice rollout flag - Break harness discovery ref cycle so connections can idle-evict - Shift/Alt+Enter inserts newline when editing a queued prompt - Gate project Claude permissions on folder trust - Echo response.create.event_id on response.created - Toast when session creation fails from disk full - Add shared test process lifecycle - Enable dynamic workflows by default - Add relocation transaction state machine - Add shared test sandbox - Surface auth failures on model-switch compact - Persist durable scheduler expiry - Confirm before removing extensions-modal items - Re-run compact and prompt after login when compact hit expired auth - Recap sends hosted tools under backend search
53 lines
2.2 KiB
Rust
53 lines
2.2 KiB
Rust
//! Microphone capture (optional `audio` feature).
|
|
//!
|
|
//! Three backends share one interface (`spawn_pcm_capture`,
|
|
//! `capture_pcm_for_duration`, `input_device_info`, `CaptureHandle`):
|
|
//!
|
|
//! - **Linux**: a subprocess recorder (`pw-record`/`parec`/`arecord`) — the
|
|
//! static-musl release binary cannot link `cpal` → `alsa-sys`; see
|
|
//! [`capture_linux`].
|
|
//! - **macOS**: a subprocess too — the self-exec `__mic-capture` helper —
|
|
//! because in-process CoreAudio memory is never returned after the stream
|
|
//! drops; see [`capture_subprocess`].
|
|
//! - **Windows**: `cpal` (WASAPI) in-process; its memory cost is modest.
|
|
//!
|
|
//! The fixed-duration probe capture stays in-process on macOS/Windows: it only
|
|
//! runs in short-lived diagnostic processes, where the memory dies at exit.
|
|
//!
|
|
//! `CaptureHandle` is deliberately one name per platform, resolved by the
|
|
//! re-exports below:
|
|
//! - Linux → `pipe::ChildCaptureHandle` (recorder subprocess);
|
|
//! - macOS → `capture_subprocess::CaptureHandle`, an enum over the helper
|
|
//! subprocess and the in-process fallback;
|
|
//! - Windows → `capture::CaptureHandle` (in-process cpal stream).
|
|
|
|
// cpal-based capture: the Windows backend, the macOS fallback, and the macOS
|
|
// `__mic-capture` child implementation.
|
|
#[cfg(not(target_os = "linux"))]
|
|
mod capture;
|
|
// Wire protocol shared by the `__mic-capture` child (writer, in `capture`)
|
|
// and the macOS parent (parser, in `capture_subprocess`).
|
|
#[cfg(not(target_os = "linux"))]
|
|
mod protocol;
|
|
#[cfg(not(target_os = "linux"))]
|
|
pub use capture::capture_pcm_for_duration;
|
|
#[cfg(not(target_os = "linux"))]
|
|
pub(crate) use capture::run_capture_child_cli;
|
|
#[cfg(target_os = "windows")]
|
|
pub use capture::{CaptureHandle, input_device_info, spawn_pcm_capture};
|
|
|
|
// Shared PCM-over-pipe plumbing for the two subprocess backends.
|
|
#[cfg(any(target_os = "linux", target_os = "macos"))]
|
|
mod pipe;
|
|
|
|
#[cfg(target_os = "macos")]
|
|
mod capture_subprocess;
|
|
#[cfg(target_os = "macos")]
|
|
pub use capture_subprocess::{CaptureHandle, input_device_info, spawn_pcm_capture};
|
|
|
|
#[cfg(target_os = "linux")]
|
|
mod capture_linux;
|
|
#[cfg(target_os = "linux")]
|
|
pub use capture_linux::{
|
|
CaptureHandle, capture_pcm_for_duration, input_device_info, spawn_pcm_capture,
|
|
};
|