chore: rebrand from Kon/Corbie to Magnotia

Replace all instances of the legacy product names "Kon" and "Corbie" with
"Magnotia" across user-facing copy, code identifiers, package names, bundle
ids, file paths, and documentation. Preserves the unrelated "konsole" (KDE
terminal) reference and the parent CORBEL company name.

- Renames 10 Rust crates (kon-* → magnotia-*) and the tauri binary
- Updates package.json, tauri.conf.json (productName + identifier)
- Renames CSS classes (kon-rh-* → magnotia-rh-*) and animations
- Renames brand and roadmap docs
- Regenerates Cargo.lock and package-lock.json

Verified: svelte-check passes; pure-rust crates compile under new names.
This commit is contained in:
Claude
2026-04-30 13:06:55 +00:00
parent 749403697a
commit 89c63891fa
186 changed files with 1297 additions and 1297 deletions

View File

@@ -25,7 +25,7 @@
import { hasTauriRuntime } from '$lib/utils/runtime.js';
const prefs = getPreferences();
const tauriRuntimeAvailable = hasTauriRuntime();
const browserPreviewMessage = "You're viewing Kon in a normal browser. Local transcription only works in the Tauri desktop app window.";
const browserPreviewMessage = "You're viewing Magnotia in a normal browser. Local transcription only works in the Tauri desktop app window.";
let transcript = $state("");
let segments = $state([]);
@@ -65,7 +65,7 @@
let hotkeyHandler = () => toggleRecording();
onMount(async () => {
window.addEventListener("kon:toggle-recording", hotkeyHandler);
window.addEventListener("magnotia:toggle-recording", hotkeyHandler);
if (!tauriRuntimeAvailable) {
error = browserPreviewMessage;
@@ -77,7 +77,7 @@
});
onDestroy(() => {
window.removeEventListener("kon:toggle-recording", hotkeyHandler);
window.removeEventListener("magnotia:toggle-recording", hotkeyHandler);
clearInterval(timerInterval);
if (page.recording) {
page.recording = false;
@@ -199,7 +199,7 @@
lastLiveActivityAt = Date.now();
if (status.type === "overload" || status.type === "warning") {
liveWarning = status.message || "Kon is dropping older audio to stay responsive.";
liveWarning = status.message || "Magnotia is dropping older audio to stay responsive.";
return;
}
@@ -647,7 +647,7 @@
const url = URL.createObjectURL(blob);
const a = document.createElement("a");
a.href = url;
a.download = `kon-${new Date().toISOString().slice(0, 10)}.${ext}`;
a.download = `magnotia-${new Date().toISOString().slice(0, 10)}.${ext}`;
a.click();
URL.revokeObjectURL(url);
}

View File

@@ -142,7 +142,7 @@
const url = URL.createObjectURL(blob);
const a = document.createElement("a");
a.href = url;
a.download = `kon-file-${new Date().toISOString().slice(0, 10)}.${ext}`;
a.download = `magnotia-file-${new Date().toISOString().slice(0, 10)}.${ext}`;
a.click();
URL.revokeObjectURL(url);
}

View File

@@ -225,9 +225,9 @@
{:else if ritualsStep === "autostart"}
<div class="w-full max-w-md mx-auto text-center">
<Play size={32} strokeWidth={1.5} class="text-accent mx-auto mb-3" />
<h2 class="text-xl font-medium text-text">Launch Corbie at login?</h2>
<h2 class="text-xl font-medium text-text">Launch Magnotia at login?</h2>
<p class="text-sm text-text-secondary mt-3 leading-relaxed">
So Corbie is already there when you need it — especially useful if you said yes to morning triage. Uses your OS's standard autostart. No background tricks, no telemetry.
So Magnotia is already there when you need it — especially useful if you said yes to morning triage. Uses your OS's standard autostart. No background tricks, no telemetry.
</p>
<p class="text-[11px] text-text-tertiary mt-3">You can change this any time in Settings.</p>
<div class="flex items-center justify-center gap-3 mt-6">
@@ -270,7 +270,7 @@
{:else}
<div class="w-full">
<h2 class="text-2xl font-medium text-text text-center">Welcome to Kon</h2>
<h2 class="text-2xl font-medium text-text text-center">Welcome to Magnotia</h2>
<p class="text-sm text-text-secondary text-center mt-2">Press the button. Start talking. That's it.</p>
{#if error}

View File

@@ -342,12 +342,12 @@
// script.
const handoff = JSON.stringify({ id: String(item.id) });
try {
localStorage.setItem("kon_viewer_item", handoff);
localStorage.setItem("kon_viewer_mode", "view");
localStorage.setItem("magnotia_viewer_item", handoff);
localStorage.setItem("magnotia_viewer_mode", "view");
await invoke("open_viewer_window");
} catch {
localStorage.setItem("kon_viewer_item", handoff);
localStorage.setItem("kon_viewer_mode", "view");
localStorage.setItem("magnotia_viewer_item", handoff);
localStorage.setItem("magnotia_viewer_mode", "view");
window.open("/viewer", "_blank", "width=600,height=700");
}
}
@@ -509,12 +509,12 @@
// (see openViewer above for the rationale).
const handoff = JSON.stringify({ id: String(item.id) });
try {
localStorage.setItem("kon_viewer_item", handoff);
localStorage.setItem("kon_viewer_mode", "edit");
localStorage.setItem("magnotia_viewer_item", handoff);
localStorage.setItem("magnotia_viewer_mode", "edit");
await invoke("open_viewer_window");
} catch {
localStorage.setItem("kon_viewer_item", handoff);
localStorage.setItem("kon_viewer_mode", "edit");
localStorage.setItem("magnotia_viewer_item", handoff);
localStorage.setItem("magnotia_viewer_mode", "edit");
window.open("/viewer", "_blank", "width=600,height=700");
}
}

View File

@@ -675,7 +675,7 @@
async function testReadAloudVoice() {
try {
await invoke("tts_speak", {
text: "This is Corbie reading aloud.",
text: "This is Magnotia reading aloud.",
rate: settings.ttsRate,
voice: settings.ttsVoice ?? null,
});
@@ -771,7 +771,7 @@
downloadProgress = event.payload.percent || event.payload.progress || 0;
});
unlistenLlm = await listen("kon:llm-download-progress", (event) => {
unlistenLlm = await listen("magnotia:llm-download-progress", (event) => {
llmDownloadProgress = event.payload.percent || 0;
llmDownloadingModel = event.payload.modelId || llmDownloadingModel;
});
@@ -984,7 +984,7 @@
bind:value={settings.microphoneDevice}
onfocus={refreshAudioDevices}
>
<option value="">Auto (recommended) — let Kon pick the working mic</option>
<option value="">Auto (recommended) — let Magnotia pick the working mic</option>
{#each visibleAudioDevices as dev}
<option value={dev.name} disabled={dev.is_likely_monitor}>
{friendlyLabel(dev)}{#if dev.is_default && dev.name !== "default"} (system default){/if}{#if dev.is_likely_monitor} — speaker monitor, skip{/if}
@@ -1624,7 +1624,7 @@
</div>
<p class="text-[11px] text-text-tertiary mt-2">
{settings.aiTier === "off"
? "No local LLM calls. Kon falls back to the existing rule-based path."
? "No local LLM calls. Magnotia falls back to the existing rule-based path."
: settings.aiTier === "cleanup"
? "Use the local model for transcript cleanup and formatting."
: "Use the local model for cleanup, task extraction, and task breakdown."}
@@ -1871,7 +1871,7 @@
disabled={autostartSyncing}
role="switch"
aria-checked={settings.launchAtLogin}
aria-label="Launch Corbie at login"
aria-label="Launch Magnotia at login"
>
<span
class="absolute top-[3px] left-[3px] w-4 h-4 rounded-full bg-white shadow-sm
@@ -1880,9 +1880,9 @@
></span>
</button>
<div class="flex-1 min-w-0">
<p class="text-[13px] text-text leading-tight">Launch Corbie at login</p>
<p class="text-[13px] text-text leading-tight">Launch Magnotia at login</p>
<p class="text-[11px] text-text-tertiary mt-0.5 leading-snug">
So Corbie is already there at the start of the day. Uses your OS's standard autostart — no background tricks.
So Magnotia is already there at the start of the day. Uses your OS's standard autostart — no background tricks.
</p>
{#if autostartSyncing}
<p class="text-[11px] text-text-tertiary mt-1">Updating…</p>
@@ -1913,7 +1913,7 @@
<SettingsGroup title="Nudges" description="Soft notifications, capped per hour.">
<div class="animate-fade-in">
<p class="text-[11px] text-text-tertiary mb-4">
Gentle, anticipatory reminders. Capped at 3 per hour. Never fires while you're looking at Corbie.
Gentle, anticipatory reminders. Capped at 3 per hour. Never fires while you're looking at Magnotia.
</p>
<Toggle
@@ -2020,13 +2020,13 @@
/>
<Toggle
bind:checked={settings.transcriptionPreview}
label="Floating preview when Kon is unfocused"
label="Floating preview when Magnotia is unfocused"
description="Shows a small always-on-top window with the raw transcription as you dictate, then the final formatted text. Only opens when the main window is unfocused or hidden."
/>
<Toggle
bind:checked={settings.meetingAutoCapture}
label="Remind me when a meeting starts"
description="Toasts when a matching app appears in the process list. You still hit the hotkey — Kon never records on its own."
description="Toasts when a matching app appears in the process list. You still hit the hotkey — Magnotia never records on its own."
/>
{#if settings.meetingAutoCapture}
<div class="ml-[50px] mt-2 mb-1 animate-fade-in">
@@ -2201,7 +2201,7 @@
{/each}
</div>
<p class="text-[11px] text-text-tertiary mt-5">Kon v1.0 · Powered by whisper.cpp · Built by CORBEL Ltd</p>
<p class="text-[11px] text-text-tertiary mt-5">Magnotia v1.0 · Powered by whisper.cpp · Built by CORBEL Ltd</p>
<!-- Diagnostic report (privacy posture: local only until you share it) -->
<div class="mt-6 pt-5 border-t border-border-subtle">