agent: lumotia-rebrand — rust workspace crates magnotia-* -> lumotia-*
Some checks failed
check / cargo check (macos-latest) (push) Has been cancelled
check / cargo check (ubuntu-22.04) (push) Has been cancelled
check / cargo check (windows-latest) (push) Has been cancelled
check / svelte build + lint (push) Has been cancelled

Phase 2 of the rebrand cascade. Renames all 9 workspace crates from
magnotia-* to lumotia-* plus the src-tauri binary crate name:

- magnotia-ai-formatting   -> lumotia-ai-formatting
- magnotia-audio           -> lumotia-audio
- magnotia-cloud-providers -> lumotia-cloud-providers
- magnotia-core            -> lumotia-core
- magnotia-hotkey          -> lumotia-hotkey
- magnotia-llm             -> lumotia-llm
- magnotia-mcp             -> lumotia-mcp
- magnotia-storage         -> lumotia-storage
- magnotia-transcription   -> lumotia-transcription
- magnotia                 -> lumotia (src-tauri binary)
- magnotia_lib             -> lumotia_lib (src-tauri lib target)

Crate directories (crates/audio/ etc.) stay as-is; only the Cargo.toml
[package] name field changes plus all consumer module imports
(magnotia_core -> lumotia_core, etc.).

Remaining magnotia_* references at this point are intentional and
scoped to later phases: tracing targets (Phase 4), DB setting keys
magnotia_preferences/magnotia_history (Phase 5).

cargo build --workspace passes. cargo test --workspace: 330 pass, 0 fail.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-13 08:48:09 +01:00
parent bc2db91520
commit 089349d966
60 changed files with 372 additions and 372 deletions

View File

@@ -1,11 +1,11 @@
[package]
name = "magnotia-audio"
name = "lumotia-audio"
version = "0.1.0"
edition = "2021"
description = "Audio capture (cpal), VAD, resampling (rubato), file decoding (symphonia), WAV I/O (hound) for Magnotia"
[dependencies]
magnotia-core = { path = "../core" }
lumotia-core = { path = "../core" }
# Microphone capture
cpal = "0.17"

View File

@@ -8,7 +8,7 @@ use regex::Regex;
use serde::{Deserialize, Serialize};
use std::sync::OnceLock;
use magnotia_core::error::{MagnotiaError, Result};
use lumotia_core::error::{MagnotiaError, Result};
const AUDIO_CHANNEL_CAPACITY: usize = 32;
@@ -149,7 +149,7 @@ impl MicrophoneCapture {
for device in devices {
let name = device_display_name(&device).unwrap_or_default();
if name == device_name {
tracing::info!(target: "magnotia_audio", "start_with_device: opening explicit device '{name}'");
tracing::info!(target: "lumotia_audio", "start_with_device: opening explicit device '{name}'");
return open_and_validate(device, &name, /* require_audio = */ true);
}
}
@@ -196,7 +196,7 @@ impl MicrophoneCapture {
});
tracing::info!(
target: "magnotia_audio",
target: "lumotia_audio",
device_count = all_devices.len(),
default = %default_name,
"enumerated input devices"
@@ -211,7 +211,7 @@ impl MicrophoneCapture {
match open_and_validate(device.clone(), &name, true) {
Ok(result) => return Ok(result),
Err(e) => {
tracing::warn!(target: "magnotia_audio", device = %name, error = %e, "candidate device rejected");
tracing::warn!(target: "lumotia_audio", device = %name, error = %e, "candidate device rejected");
}
}
}
@@ -219,7 +219,7 @@ impl MicrophoneCapture {
// Second pass: accept anything that delivers bytes (monitor sources
// included). Better to capture from a monitor than fail entirely.
tracing::warn!(
target: "magnotia_audio",
target: "lumotia_audio",
"no non-monitor mic produced audio; falling back to monitor/loopback sources"
);
for device in &all_devices {
@@ -227,7 +227,7 @@ impl MicrophoneCapture {
match open_and_validate(device.clone(), &name, false) {
Ok(result) => {
tracing::warn!(
target: "magnotia_audio",
target: "lumotia_audio",
device = %name,
"capturing from likely monitor source; recordings may be silent or contain system audio"
);
@@ -367,7 +367,7 @@ fn open_and_validate(
let format = config.sample_format();
tracing::info!(
target: "magnotia_audio",
target: "lumotia_audio",
device = %name,
sample_rate,
channels,
@@ -467,7 +467,7 @@ fn open_and_validate(
let rms = (sum_sq / total_samples as f64).sqrt() as f32;
tracing::info!(
target: "magnotia_audio",
target: "lumotia_audio",
device = %name,
samples = total_samples,
rms,
@@ -499,7 +499,7 @@ fn open_and_validate(
}
}
tracing::info!(target: "magnotia_audio", device = %name, "selected microphone");
tracing::info!(target: "lumotia_audio", device = %name, "selected microphone");
Ok((
MicrophoneCapture {
stream: Some(stream),
@@ -547,7 +547,7 @@ where
move |err| {
// Surface stream errors to the live session via err_tx so the
// frontend can show a toast.
tracing::error!(target: "magnotia_audio", error = %err, "capture stream error");
tracing::error!(target: "lumotia_audio", error = %err, "capture stream error");
if err_tx
.try_send(CaptureRuntimeError {
device_name: err_device_name.clone(),
@@ -560,7 +560,7 @@ where
// even if the frontend never received the typed event.
let prior = dropped_errors.fetch_add(1, Ordering::Relaxed);
tracing::warn!(
target: "magnotia_audio",
target: "lumotia_audio",
device = %err_device_name,
dropped_error = prior + 1,
"capture error channel full; dropping runtime error"

View File

@@ -1,7 +1,7 @@
use std::path::Path;
use magnotia_core::error::Result;
use magnotia_core::types::AudioSamples;
use lumotia_core::error::Result;
use lumotia_core::types::AudioSamples;
use crate::decode::decode_audio_file;
use crate::resample::resample_to_16khz;
@@ -16,6 +16,6 @@ pub async fn decode_and_resample(path: &Path) -> Result<AudioSamples> {
})
.await
.map_err(|e| {
magnotia_core::error::MagnotiaError::AudioDecodeFailed(format!("Task join error: {e}"))
lumotia_core::error::MagnotiaError::AudioDecodeFailed(format!("Task join error: {e}"))
})?
}

View File

@@ -9,8 +9,8 @@ use symphonia::core::io::MediaSourceStream;
use symphonia::core::meta::MetadataOptions;
use symphonia::core::probe::Hint;
use magnotia_core::error::{MagnotiaError, Result};
use magnotia_core::types::AudioSamples;
use lumotia_core::error::{MagnotiaError, Result};
use lumotia_core::types::AudioSamples;
/// Decode an audio file to mono f32 PCM samples.
/// Supports all formats symphonia handles: mp3, aac, flac, wav, ogg, etc.

View File

@@ -2,9 +2,9 @@ use rubato::{
Resampler, SincFixedIn, SincInterpolationParameters, SincInterpolationType, WindowFunction,
};
use magnotia_core::constants::WHISPER_SAMPLE_RATE;
use magnotia_core::error::{MagnotiaError, Result};
use magnotia_core::types::AudioSamples;
use lumotia_core::constants::WHISPER_SAMPLE_RATE;
use lumotia_core::error::{MagnotiaError, Result};
use lumotia_core::types::AudioSamples;
/// Resample audio to 16kHz mono using sinc interpolation (rubato).
/// Returns a new AudioSamples at the target sample rate.

View File

@@ -27,8 +27,8 @@ use rubato::{
Resampler, SincFixedIn, SincInterpolationParameters, SincInterpolationType, WindowFunction,
};
use magnotia_core::constants::WHISPER_SAMPLE_RATE;
use magnotia_core::error::{MagnotiaError, Result};
use lumotia_core::constants::WHISPER_SAMPLE_RATE;
use lumotia_core::error::{MagnotiaError, Result};
/// Number of input samples the rubato resampler consumes per `process()`
/// call. Matches the chunk size used in `resample::resample_to_16khz`.

View File

@@ -7,7 +7,7 @@
// For now, all audio is treated as speech. This matches v0.2 behaviour
// (no VAD) and doesn't affect core functionality.
use magnotia_core::constants::VAD_SPEECH_THRESHOLD;
use lumotia_core::constants::VAD_SPEECH_THRESHOLD;
/// Stub speech detector. Treats all audio as speech.
#[derive(Default)]

View File

@@ -1,8 +1,8 @@
use std::io::BufWriter;
use std::path::Path;
use magnotia_core::error::{MagnotiaError, Result};
use magnotia_core::types::AudioSamples;
use lumotia_core::error::{MagnotiaError, Result};
use lumotia_core::types::AudioSamples;
/// Append-friendly WAV writer for long-running captures.
///