J.A.R.V.I.S-rust/frontend/src/components/Footer.svelte

231 lines
6.5 KiB
Svelte
Raw Normal View History

2026-01-04 22:50:34 +05:00
<script lang="ts">
feat(gui): footer backend chips + Settings 'AI Backends' tab + i18n Surfaces the LLM/TTS hot-swap UX in the GUI so the user doesn't need env vars or voice commands. Tauri commands for this landed in b243e67; this commit wires them to Svelte. Footer (frontend/src/components/Footer.svelte) - Poll get_active_backends() every 5 s, show TTS / LLM / Profile chips. - Chips have border accents by kind (cyan = TTS, lime = LLM, orange = Profile). - Friendly title tooltips with full backend + model names. - Silent if jarvis-gui can't reach the command (e.g. cold start) — no UI flicker. Settings — new "AI Backends" tab (frontend/src/routes/settings/index.svelte) - Status banner showing active LLM (with model name) + TTS + Profile. - LLM selector: Auto / Groq / Ollama → calls set_llm_backend on change (hot-swap, persisted to DB). - TTS selector: Auto / SAPI / Piper / Silero → calls set_tts_backend (persisted, effective on next jarvis-app restart). - "Reset context" button → llm_reset_context Tauri command. - Error toast for swap failures (e.g. Groq selected but no GROQ_TOKEN). - Tips alert: how to install Ollama / Piper / voice commands. - Loads prefs via db_read('llm_backend' / 'tts_backend') on mount. i18n strings (ru/en/ua, .ftl files) - 14 new keys: settings-ai-backends, settings-ai-active, settings-ai-auto, settings-ai-applying, settings-ai-error, settings-ai-tips, settings-llm-backend{,-desc}, settings-tts-backend{,-desc}, settings-llm-context{,-desc}, settings-llm-reset, settings-profile. Build glue (crates/jarvis-gui/Cargo.toml) - jarvis-core dep now includes the `llm` feature so backends.rs can resolve `jarvis_core::llm::*` (was failing to compile after the global LLM module). .gitignore - tools/piper/*.dll, piper.exe, voices/, espeak-ng-data/ — locally installed binaries from tools/piper/install.ps1, not committed. Build: cargo build --release -p jarvis-gui green (4m, includes npm/Vite). Test path: rebuild + launch jarvis-gui, /settings → "AI Backends" tab.
2026-05-15 17:06:46 +03:00
import { onMount, onDestroy } from "svelte"
import { invoke } from "@tauri-apps/api/core"
feat(gui): wire Footer + Settings to daemon over IPC (closes the gap from a6a098d) a6a098d added daemon-side IPC handlers (SwitchLlm, ReloadLlm, QueryHealth) but the GUI was still talking only to its own process. This commit wires the frontend to actually use those handlers. frontend/src/lib/ipc.ts - New DaemonHealth interface + daemonHealth: writable<DaemonHealth | null>. - handleEvent: "health_snapshot" case fills daemonHealth from daemon's IpcEvent. - New senders: switchDaemonLlm(backend) → action "switch_llm" reloadDaemonLlm() → action "reload_llm" queryDaemonHealth() → action "query_health" frontend/src/stores.ts - Re-exports daemonHealth + the three new senders + DaemonHealth type. frontend/src/components/Footer.svelte - Polls every 5s but PREFERS IPC: if daemon connected, calls queryDaemonHealth (snapshot arrives via daemonHealth store). - Falls back to invoke("get_active_backends") if daemon offline — shows GUI-process view in that case, with the chip tooltip distinguishing "daemon" vs "gui-process" source. frontend/src/routes/settings/index.svelte (AI Backends tab) - applyLlmBackend now ALSO fires switchDaemonLlm so the running listener picks the new backend without restart. - "Auto" (empty) path calls reloadDaemonLlm so daemon re-reads DB. End-to-end flow now: GUI dropdown → set_llm_backend (Tauri, persists DB + swaps GUI proc) ↘ switchDaemonLlm (IPC, swaps daemon proc too) ↘ daemon emits health_snapshot on next QueryHealth ↘ daemonHealth store updates ↘ Footer chips re-render with new state Build: cargo build --release -p jarvis-gui green.
2026-05-15 17:42:40 +03:00
import {
appInfo, translations, translate,
daemonHealth, ipcConnected, queryDaemonHealth,
} from "@/stores"
$: t = (key: string) => translate($translations, key)
2026-01-04 22:50:34 +05:00
let repoLink = ""
chore(gui): rebrand — strip TG/Boosty/Patreon/feedback-bot, keep CC BY-NC-SA attribution The previous feature/gui-rebrand-polish work only updated the appInfo store keys; Footer.svelte, settings, and the commands page were still rendering upstream's Telegram channel, Boosty/Patreon support links, feedback bot, and the original author byline. This finishes the job. Rust side (applies after `cargo build` — currently a no-op until MSVC Build Tools are reinstalled): - Cargo.toml: authors = ["Bossiara13"], repository = J.A.R.V.I.S-rust fork. Original attribution stays in LICENSE.txt per CC BY-NC-SA 4.0; the UI no longer renders an author byline. - config.rs: dropped TG_OFFICIAL_LINK / FEEDBACK_LINK / SUPPORT_BOOSTY_LINK / SUPPORT_PATREON_LINK. Added UPSTREAM_REPOSITORY_LINK (Priler/jarvis for the licence attribution), ISSUES_LINK (this fork's GH issues), and PYTHON_FORK_LINK. - tauri_commands/etc.rs: dropped get_tg_official_link/get_boosty_link/ get_patreon_link/get_feedback_link. Added get_upstream_link, get_issues_link, get_python_fork_link. Tidied up the Option<&str> -> String boilerplate with unwrap_or. - main.rs: invoke_handler updated to match. Frontend side (visible only after Rust rebuild — Tauri bundles the dist into the exe): - stores.ts: appInfo shape reduced to repositoryLink / upstreamLink / issuesLink / pythonForkLink / logFilePath. loadAppInfo() uses fetchOr() with hardcoded fallbacks so the UI still populates correctly when run against an un-rebuilt binary; fetchRepoOr() additionally overrides CARGO_PKG_REPOSITORY if it still resolves to upstream's Priler/jarvis. - Footer.svelte: rewritten — © year + "J.A.R.V.I.S." + repo link + issues link + small "fork of Priler/jarvis · CC BY-NC-SA 4.0" attribution line. No author byline (it's in LICENSE.txt). - routes/settings/index.svelte: feedback link now points to GitHub Issues. - routes/commands/index.svelte: TG-channel reference replaced with a link to the Python fork (where the command builder lives) plus a pointer to resources/commands/ in this repo. Bruh GIF removed. - locales/{ru,en,ua}.ftl: removed footer-author / footer-telegram / footer-support, added footer-issues / footer-fork-of, rewrote commands-wip-* strings, retargeted settings-beta-bot to "GitHub Issues". Bundle identifier (com.priler.jarvis) kept intact to avoid moving the app data directory.
2026-05-15 01:09:14 +03:00
let upstreamLink = ""
let issuesLink = ""
2026-01-04 22:50:34 +05:00
const currentYear = new Date().getFullYear()
2026-01-04 22:50:34 +05:00
appInfo.subscribe(info => {
repoLink = info.repositoryLink
chore(gui): rebrand — strip TG/Boosty/Patreon/feedback-bot, keep CC BY-NC-SA attribution The previous feature/gui-rebrand-polish work only updated the appInfo store keys; Footer.svelte, settings, and the commands page were still rendering upstream's Telegram channel, Boosty/Patreon support links, feedback bot, and the original author byline. This finishes the job. Rust side (applies after `cargo build` — currently a no-op until MSVC Build Tools are reinstalled): - Cargo.toml: authors = ["Bossiara13"], repository = J.A.R.V.I.S-rust fork. Original attribution stays in LICENSE.txt per CC BY-NC-SA 4.0; the UI no longer renders an author byline. - config.rs: dropped TG_OFFICIAL_LINK / FEEDBACK_LINK / SUPPORT_BOOSTY_LINK / SUPPORT_PATREON_LINK. Added UPSTREAM_REPOSITORY_LINK (Priler/jarvis for the licence attribution), ISSUES_LINK (this fork's GH issues), and PYTHON_FORK_LINK. - tauri_commands/etc.rs: dropped get_tg_official_link/get_boosty_link/ get_patreon_link/get_feedback_link. Added get_upstream_link, get_issues_link, get_python_fork_link. Tidied up the Option<&str> -> String boilerplate with unwrap_or. - main.rs: invoke_handler updated to match. Frontend side (visible only after Rust rebuild — Tauri bundles the dist into the exe): - stores.ts: appInfo shape reduced to repositoryLink / upstreamLink / issuesLink / pythonForkLink / logFilePath. loadAppInfo() uses fetchOr() with hardcoded fallbacks so the UI still populates correctly when run against an un-rebuilt binary; fetchRepoOr() additionally overrides CARGO_PKG_REPOSITORY if it still resolves to upstream's Priler/jarvis. - Footer.svelte: rewritten — © year + "J.A.R.V.I.S." + repo link + issues link + small "fork of Priler/jarvis · CC BY-NC-SA 4.0" attribution line. No author byline (it's in LICENSE.txt). - routes/settings/index.svelte: feedback link now points to GitHub Issues. - routes/commands/index.svelte: TG-channel reference replaced with a link to the Python fork (where the command builder lives) plus a pointer to resources/commands/ in this repo. Bruh GIF removed. - locales/{ru,en,ua}.ftl: removed footer-author / footer-telegram / footer-support, added footer-issues / footer-fork-of, rewrote commands-wip-* strings, retargeted settings-beta-bot to "GitHub Issues". Bundle identifier (com.priler.jarvis) kept intact to avoid moving the app data directory.
2026-05-15 01:09:14 +03:00
upstreamLink = info.upstreamLink
issuesLink = info.issuesLink
2026-01-04 22:50:34 +05:00
})
feat(gui): footer backend chips + Settings 'AI Backends' tab + i18n Surfaces the LLM/TTS hot-swap UX in the GUI so the user doesn't need env vars or voice commands. Tauri commands for this landed in b243e67; this commit wires them to Svelte. Footer (frontend/src/components/Footer.svelte) - Poll get_active_backends() every 5 s, show TTS / LLM / Profile chips. - Chips have border accents by kind (cyan = TTS, lime = LLM, orange = Profile). - Friendly title tooltips with full backend + model names. - Silent if jarvis-gui can't reach the command (e.g. cold start) — no UI flicker. Settings — new "AI Backends" tab (frontend/src/routes/settings/index.svelte) - Status banner showing active LLM (with model name) + TTS + Profile. - LLM selector: Auto / Groq / Ollama → calls set_llm_backend on change (hot-swap, persisted to DB). - TTS selector: Auto / SAPI / Piper / Silero → calls set_tts_backend (persisted, effective on next jarvis-app restart). - "Reset context" button → llm_reset_context Tauri command. - Error toast for swap failures (e.g. Groq selected but no GROQ_TOKEN). - Tips alert: how to install Ollama / Piper / voice commands. - Loads prefs via db_read('llm_backend' / 'tts_backend') on mount. i18n strings (ru/en/ua, .ftl files) - 14 new keys: settings-ai-backends, settings-ai-active, settings-ai-auto, settings-ai-applying, settings-ai-error, settings-ai-tips, settings-llm-backend{,-desc}, settings-tts-backend{,-desc}, settings-llm-context{,-desc}, settings-llm-reset, settings-profile. Build glue (crates/jarvis-gui/Cargo.toml) - jarvis-core dep now includes the `llm` feature so backends.rs can resolve `jarvis_core::llm::*` (was failing to compile after the global LLM module). .gitignore - tools/piper/*.dll, piper.exe, voices/, espeak-ng-data/ — locally installed binaries from tools/piper/install.ps1, not committed. Build: cargo build --release -p jarvis-gui green (4m, includes npm/Vite). Test path: rebuild + launch jarvis-gui, /settings → "AI Backends" tab.
2026-05-15 17:06:46 +03:00
// Active backends — refreshed every 5 seconds. Silently fails if the
// Tauri command isn't registered (e.g. running against an old jarvis-app).
interface ActiveBackends {
tts: string
llm: string
llm_model: string | null
profile: string
}
let backends: ActiveBackends | null = null
let pollId: ReturnType<typeof setInterval> | null = null
feat(gui): wire Footer + Settings to daemon over IPC (closes the gap from a6a098d) a6a098d added daemon-side IPC handlers (SwitchLlm, ReloadLlm, QueryHealth) but the GUI was still talking only to its own process. This commit wires the frontend to actually use those handlers. frontend/src/lib/ipc.ts - New DaemonHealth interface + daemonHealth: writable<DaemonHealth | null>. - handleEvent: "health_snapshot" case fills daemonHealth from daemon's IpcEvent. - New senders: switchDaemonLlm(backend) → action "switch_llm" reloadDaemonLlm() → action "reload_llm" queryDaemonHealth() → action "query_health" frontend/src/stores.ts - Re-exports daemonHealth + the three new senders + DaemonHealth type. frontend/src/components/Footer.svelte - Polls every 5s but PREFERS IPC: if daemon connected, calls queryDaemonHealth (snapshot arrives via daemonHealth store). - Falls back to invoke("get_active_backends") if daemon offline — shows GUI-process view in that case, with the chip tooltip distinguishing "daemon" vs "gui-process" source. frontend/src/routes/settings/index.svelte (AI Backends tab) - applyLlmBackend now ALSO fires switchDaemonLlm so the running listener picks the new backend without restart. - "Auto" (empty) path calls reloadDaemonLlm so daemon re-reads DB. End-to-end flow now: GUI dropdown → set_llm_backend (Tauri, persists DB + swaps GUI proc) ↘ switchDaemonLlm (IPC, swaps daemon proc too) ↘ daemon emits health_snapshot on next QueryHealth ↘ daemonHealth store updates ↘ Footer chips re-render with new state Build: cargo build --release -p jarvis-gui green.
2026-05-15 17:42:40 +03:00
let connected = false
ipcConnected.subscribe(v => { connected = v })
daemonHealth.subscribe(h => {
if (h) {
backends = {
tts: h.tts_backend,
llm: h.llm_backend,
llm_model: h.llm_model,
profile: h.active_profile,
}
}
})
feat(gui): footer backend chips + Settings 'AI Backends' tab + i18n Surfaces the LLM/TTS hot-swap UX in the GUI so the user doesn't need env vars or voice commands. Tauri commands for this landed in b243e67; this commit wires them to Svelte. Footer (frontend/src/components/Footer.svelte) - Poll get_active_backends() every 5 s, show TTS / LLM / Profile chips. - Chips have border accents by kind (cyan = TTS, lime = LLM, orange = Profile). - Friendly title tooltips with full backend + model names. - Silent if jarvis-gui can't reach the command (e.g. cold start) — no UI flicker. Settings — new "AI Backends" tab (frontend/src/routes/settings/index.svelte) - Status banner showing active LLM (with model name) + TTS + Profile. - LLM selector: Auto / Groq / Ollama → calls set_llm_backend on change (hot-swap, persisted to DB). - TTS selector: Auto / SAPI / Piper / Silero → calls set_tts_backend (persisted, effective on next jarvis-app restart). - "Reset context" button → llm_reset_context Tauri command. - Error toast for swap failures (e.g. Groq selected but no GROQ_TOKEN). - Tips alert: how to install Ollama / Piper / voice commands. - Loads prefs via db_read('llm_backend' / 'tts_backend') on mount. i18n strings (ru/en/ua, .ftl files) - 14 new keys: settings-ai-backends, settings-ai-active, settings-ai-auto, settings-ai-applying, settings-ai-error, settings-ai-tips, settings-llm-backend{,-desc}, settings-tts-backend{,-desc}, settings-llm-context{,-desc}, settings-llm-reset, settings-profile. Build glue (crates/jarvis-gui/Cargo.toml) - jarvis-core dep now includes the `llm` feature so backends.rs can resolve `jarvis_core::llm::*` (was failing to compile after the global LLM module). .gitignore - tools/piper/*.dll, piper.exe, voices/, espeak-ng-data/ — locally installed binaries from tools/piper/install.ps1, not committed. Build: cargo build --release -p jarvis-gui green (4m, includes npm/Vite). Test path: rebuild + launch jarvis-gui, /settings → "AI Backends" tab.
2026-05-15 17:06:46 +03:00
async function refreshBackends() {
feat(gui): wire Footer + Settings to daemon over IPC (closes the gap from a6a098d) a6a098d added daemon-side IPC handlers (SwitchLlm, ReloadLlm, QueryHealth) but the GUI was still talking only to its own process. This commit wires the frontend to actually use those handlers. frontend/src/lib/ipc.ts - New DaemonHealth interface + daemonHealth: writable<DaemonHealth | null>. - handleEvent: "health_snapshot" case fills daemonHealth from daemon's IpcEvent. - New senders: switchDaemonLlm(backend) → action "switch_llm" reloadDaemonLlm() → action "reload_llm" queryDaemonHealth() → action "query_health" frontend/src/stores.ts - Re-exports daemonHealth + the three new senders + DaemonHealth type. frontend/src/components/Footer.svelte - Polls every 5s but PREFERS IPC: if daemon connected, calls queryDaemonHealth (snapshot arrives via daemonHealth store). - Falls back to invoke("get_active_backends") if daemon offline — shows GUI-process view in that case, with the chip tooltip distinguishing "daemon" vs "gui-process" source. frontend/src/routes/settings/index.svelte (AI Backends tab) - applyLlmBackend now ALSO fires switchDaemonLlm so the running listener picks the new backend without restart. - "Auto" (empty) path calls reloadDaemonLlm so daemon re-reads DB. End-to-end flow now: GUI dropdown → set_llm_backend (Tauri, persists DB + swaps GUI proc) ↘ switchDaemonLlm (IPC, swaps daemon proc too) ↘ daemon emits health_snapshot on next QueryHealth ↘ daemonHealth store updates ↘ Footer chips re-render with new state Build: cargo build --release -p jarvis-gui green.
2026-05-15 17:42:40 +03:00
// Prefer IPC — daemon's actual state.
if (connected) {
queryDaemonHealth() // response arrives via daemonHealth store
return
}
// Fallback to GUI-process view if daemon offline.
feat(gui): footer backend chips + Settings 'AI Backends' tab + i18n Surfaces the LLM/TTS hot-swap UX in the GUI so the user doesn't need env vars or voice commands. Tauri commands for this landed in b243e67; this commit wires them to Svelte. Footer (frontend/src/components/Footer.svelte) - Poll get_active_backends() every 5 s, show TTS / LLM / Profile chips. - Chips have border accents by kind (cyan = TTS, lime = LLM, orange = Profile). - Friendly title tooltips with full backend + model names. - Silent if jarvis-gui can't reach the command (e.g. cold start) — no UI flicker. Settings — new "AI Backends" tab (frontend/src/routes/settings/index.svelte) - Status banner showing active LLM (with model name) + TTS + Profile. - LLM selector: Auto / Groq / Ollama → calls set_llm_backend on change (hot-swap, persisted to DB). - TTS selector: Auto / SAPI / Piper / Silero → calls set_tts_backend (persisted, effective on next jarvis-app restart). - "Reset context" button → llm_reset_context Tauri command. - Error toast for swap failures (e.g. Groq selected but no GROQ_TOKEN). - Tips alert: how to install Ollama / Piper / voice commands. - Loads prefs via db_read('llm_backend' / 'tts_backend') on mount. i18n strings (ru/en/ua, .ftl files) - 14 new keys: settings-ai-backends, settings-ai-active, settings-ai-auto, settings-ai-applying, settings-ai-error, settings-ai-tips, settings-llm-backend{,-desc}, settings-tts-backend{,-desc}, settings-llm-context{,-desc}, settings-llm-reset, settings-profile. Build glue (crates/jarvis-gui/Cargo.toml) - jarvis-core dep now includes the `llm` feature so backends.rs can resolve `jarvis_core::llm::*` (was failing to compile after the global LLM module). .gitignore - tools/piper/*.dll, piper.exe, voices/, espeak-ng-data/ — locally installed binaries from tools/piper/install.ps1, not committed. Build: cargo build --release -p jarvis-gui green (4m, includes npm/Vite). Test path: rebuild + launch jarvis-gui, /settings → "AI Backends" tab.
2026-05-15 17:06:46 +03:00
try {
feat(gui): wire Footer + Settings to daemon over IPC (closes the gap from a6a098d) a6a098d added daemon-side IPC handlers (SwitchLlm, ReloadLlm, QueryHealth) but the GUI was still talking only to its own process. This commit wires the frontend to actually use those handlers. frontend/src/lib/ipc.ts - New DaemonHealth interface + daemonHealth: writable<DaemonHealth | null>. - handleEvent: "health_snapshot" case fills daemonHealth from daemon's IpcEvent. - New senders: switchDaemonLlm(backend) → action "switch_llm" reloadDaemonLlm() → action "reload_llm" queryDaemonHealth() → action "query_health" frontend/src/stores.ts - Re-exports daemonHealth + the three new senders + DaemonHealth type. frontend/src/components/Footer.svelte - Polls every 5s but PREFERS IPC: if daemon connected, calls queryDaemonHealth (snapshot arrives via daemonHealth store). - Falls back to invoke("get_active_backends") if daemon offline — shows GUI-process view in that case, with the chip tooltip distinguishing "daemon" vs "gui-process" source. frontend/src/routes/settings/index.svelte (AI Backends tab) - applyLlmBackend now ALSO fires switchDaemonLlm so the running listener picks the new backend without restart. - "Auto" (empty) path calls reloadDaemonLlm so daemon re-reads DB. End-to-end flow now: GUI dropdown → set_llm_backend (Tauri, persists DB + swaps GUI proc) ↘ switchDaemonLlm (IPC, swaps daemon proc too) ↘ daemon emits health_snapshot on next QueryHealth ↘ daemonHealth store updates ↘ Footer chips re-render with new state Build: cargo build --release -p jarvis-gui green.
2026-05-15 17:42:40 +03:00
const fallback = await invoke<ActiveBackends>("get_active_backends")
if (!backends) backends = fallback
feat(gui): footer backend chips + Settings 'AI Backends' tab + i18n Surfaces the LLM/TTS hot-swap UX in the GUI so the user doesn't need env vars or voice commands. Tauri commands for this landed in b243e67; this commit wires them to Svelte. Footer (frontend/src/components/Footer.svelte) - Poll get_active_backends() every 5 s, show TTS / LLM / Profile chips. - Chips have border accents by kind (cyan = TTS, lime = LLM, orange = Profile). - Friendly title tooltips with full backend + model names. - Silent if jarvis-gui can't reach the command (e.g. cold start) — no UI flicker. Settings — new "AI Backends" tab (frontend/src/routes/settings/index.svelte) - Status banner showing active LLM (with model name) + TTS + Profile. - LLM selector: Auto / Groq / Ollama → calls set_llm_backend on change (hot-swap, persisted to DB). - TTS selector: Auto / SAPI / Piper / Silero → calls set_tts_backend (persisted, effective on next jarvis-app restart). - "Reset context" button → llm_reset_context Tauri command. - Error toast for swap failures (e.g. Groq selected but no GROQ_TOKEN). - Tips alert: how to install Ollama / Piper / voice commands. - Loads prefs via db_read('llm_backend' / 'tts_backend') on mount. i18n strings (ru/en/ua, .ftl files) - 14 new keys: settings-ai-backends, settings-ai-active, settings-ai-auto, settings-ai-applying, settings-ai-error, settings-ai-tips, settings-llm-backend{,-desc}, settings-tts-backend{,-desc}, settings-llm-context{,-desc}, settings-llm-reset, settings-profile. Build glue (crates/jarvis-gui/Cargo.toml) - jarvis-core dep now includes the `llm` feature so backends.rs can resolve `jarvis_core::llm::*` (was failing to compile after the global LLM module). .gitignore - tools/piper/*.dll, piper.exe, voices/, espeak-ng-data/ — locally installed binaries from tools/piper/install.ps1, not committed. Build: cargo build --release -p jarvis-gui green (4m, includes npm/Vite). Test path: rebuild + launch jarvis-gui, /settings → "AI Backends" tab.
2026-05-15 17:06:46 +03:00
} catch (err) {
// ignore
}
}
onMount(() => {
refreshBackends()
pollId = setInterval(refreshBackends, 5000)
})
onDestroy(() => {
if (pollId !== null) clearInterval(pollId)
})
function chipTitle(key: "tts" | "llm"): string {
if (!backends) return ""
feat(gui): wire Footer + Settings to daemon over IPC (closes the gap from a6a098d) a6a098d added daemon-side IPC handlers (SwitchLlm, ReloadLlm, QueryHealth) but the GUI was still talking only to its own process. This commit wires the frontend to actually use those handlers. frontend/src/lib/ipc.ts - New DaemonHealth interface + daemonHealth: writable<DaemonHealth | null>. - handleEvent: "health_snapshot" case fills daemonHealth from daemon's IpcEvent. - New senders: switchDaemonLlm(backend) → action "switch_llm" reloadDaemonLlm() → action "reload_llm" queryDaemonHealth() → action "query_health" frontend/src/stores.ts - Re-exports daemonHealth + the three new senders + DaemonHealth type. frontend/src/components/Footer.svelte - Polls every 5s but PREFERS IPC: if daemon connected, calls queryDaemonHealth (snapshot arrives via daemonHealth store). - Falls back to invoke("get_active_backends") if daemon offline — shows GUI-process view in that case, with the chip tooltip distinguishing "daemon" vs "gui-process" source. frontend/src/routes/settings/index.svelte (AI Backends tab) - applyLlmBackend now ALSO fires switchDaemonLlm so the running listener picks the new backend without restart. - "Auto" (empty) path calls reloadDaemonLlm so daemon re-reads DB. End-to-end flow now: GUI dropdown → set_llm_backend (Tauri, persists DB + swaps GUI proc) ↘ switchDaemonLlm (IPC, swaps daemon proc too) ↘ daemon emits health_snapshot on next QueryHealth ↘ daemonHealth store updates ↘ Footer chips re-render with new state Build: cargo build --release -p jarvis-gui green.
2026-05-15 17:42:40 +03:00
const src = connected ? "daemon" : "gui-process"
if (key === "tts") return `TTS backend: ${backends.tts} (${src})`
feat(gui): footer backend chips + Settings 'AI Backends' tab + i18n Surfaces the LLM/TTS hot-swap UX in the GUI so the user doesn't need env vars or voice commands. Tauri commands for this landed in b243e67; this commit wires them to Svelte. Footer (frontend/src/components/Footer.svelte) - Poll get_active_backends() every 5 s, show TTS / LLM / Profile chips. - Chips have border accents by kind (cyan = TTS, lime = LLM, orange = Profile). - Friendly title tooltips with full backend + model names. - Silent if jarvis-gui can't reach the command (e.g. cold start) — no UI flicker. Settings — new "AI Backends" tab (frontend/src/routes/settings/index.svelte) - Status banner showing active LLM (with model name) + TTS + Profile. - LLM selector: Auto / Groq / Ollama → calls set_llm_backend on change (hot-swap, persisted to DB). - TTS selector: Auto / SAPI / Piper / Silero → calls set_tts_backend (persisted, effective on next jarvis-app restart). - "Reset context" button → llm_reset_context Tauri command. - Error toast for swap failures (e.g. Groq selected but no GROQ_TOKEN). - Tips alert: how to install Ollama / Piper / voice commands. - Loads prefs via db_read('llm_backend' / 'tts_backend') on mount. i18n strings (ru/en/ua, .ftl files) - 14 new keys: settings-ai-backends, settings-ai-active, settings-ai-auto, settings-ai-applying, settings-ai-error, settings-ai-tips, settings-llm-backend{,-desc}, settings-tts-backend{,-desc}, settings-llm-context{,-desc}, settings-llm-reset, settings-profile. Build glue (crates/jarvis-gui/Cargo.toml) - jarvis-core dep now includes the `llm` feature so backends.rs can resolve `jarvis_core::llm::*` (was failing to compile after the global LLM module). .gitignore - tools/piper/*.dll, piper.exe, voices/, espeak-ng-data/ — locally installed binaries from tools/piper/install.ps1, not committed. Build: cargo build --release -p jarvis-gui green (4m, includes npm/Vite). Test path: rebuild + launch jarvis-gui, /settings → "AI Backends" tab.
2026-05-15 17:06:46 +03:00
const model = backends.llm_model ? ` (${backends.llm_model})` : ""
feat(gui): wire Footer + Settings to daemon over IPC (closes the gap from a6a098d) a6a098d added daemon-side IPC handlers (SwitchLlm, ReloadLlm, QueryHealth) but the GUI was still talking only to its own process. This commit wires the frontend to actually use those handlers. frontend/src/lib/ipc.ts - New DaemonHealth interface + daemonHealth: writable<DaemonHealth | null>. - handleEvent: "health_snapshot" case fills daemonHealth from daemon's IpcEvent. - New senders: switchDaemonLlm(backend) → action "switch_llm" reloadDaemonLlm() → action "reload_llm" queryDaemonHealth() → action "query_health" frontend/src/stores.ts - Re-exports daemonHealth + the three new senders + DaemonHealth type. frontend/src/components/Footer.svelte - Polls every 5s but PREFERS IPC: if daemon connected, calls queryDaemonHealth (snapshot arrives via daemonHealth store). - Falls back to invoke("get_active_backends") if daemon offline — shows GUI-process view in that case, with the chip tooltip distinguishing "daemon" vs "gui-process" source. frontend/src/routes/settings/index.svelte (AI Backends tab) - applyLlmBackend now ALSO fires switchDaemonLlm so the running listener picks the new backend without restart. - "Auto" (empty) path calls reloadDaemonLlm so daemon re-reads DB. End-to-end flow now: GUI dropdown → set_llm_backend (Tauri, persists DB + swaps GUI proc) ↘ switchDaemonLlm (IPC, swaps daemon proc too) ↘ daemon emits health_snapshot on next QueryHealth ↘ daemonHealth store updates ↘ Footer chips re-render with new state Build: cargo build --release -p jarvis-gui green.
2026-05-15 17:42:40 +03:00
return `LLM backend: ${backends.llm}${model} (${src})`
feat(gui): footer backend chips + Settings 'AI Backends' tab + i18n Surfaces the LLM/TTS hot-swap UX in the GUI so the user doesn't need env vars or voice commands. Tauri commands for this landed in b243e67; this commit wires them to Svelte. Footer (frontend/src/components/Footer.svelte) - Poll get_active_backends() every 5 s, show TTS / LLM / Profile chips. - Chips have border accents by kind (cyan = TTS, lime = LLM, orange = Profile). - Friendly title tooltips with full backend + model names. - Silent if jarvis-gui can't reach the command (e.g. cold start) — no UI flicker. Settings — new "AI Backends" tab (frontend/src/routes/settings/index.svelte) - Status banner showing active LLM (with model name) + TTS + Profile. - LLM selector: Auto / Groq / Ollama → calls set_llm_backend on change (hot-swap, persisted to DB). - TTS selector: Auto / SAPI / Piper / Silero → calls set_tts_backend (persisted, effective on next jarvis-app restart). - "Reset context" button → llm_reset_context Tauri command. - Error toast for swap failures (e.g. Groq selected but no GROQ_TOKEN). - Tips alert: how to install Ollama / Piper / voice commands. - Loads prefs via db_read('llm_backend' / 'tts_backend') on mount. i18n strings (ru/en/ua, .ftl files) - 14 new keys: settings-ai-backends, settings-ai-active, settings-ai-auto, settings-ai-applying, settings-ai-error, settings-ai-tips, settings-llm-backend{,-desc}, settings-tts-backend{,-desc}, settings-llm-context{,-desc}, settings-llm-reset, settings-profile. Build glue (crates/jarvis-gui/Cargo.toml) - jarvis-core dep now includes the `llm` feature so backends.rs can resolve `jarvis_core::llm::*` (was failing to compile after the global LLM module). .gitignore - tools/piper/*.dll, piper.exe, voices/, espeak-ng-data/ — locally installed binaries from tools/piper/install.ps1, not committed. Build: cargo build --release -p jarvis-gui green (4m, includes npm/Vite). Test path: rebuild + launch jarvis-gui, /settings → "AI Backends" tab.
2026-05-15 17:06:46 +03:00
}
function chipLabel(value: string): string {
const map: Record<string, string> = {
sapi: "SAPI",
piper: "Piper",
silero: "Silero",
groq: "Groq",
ollama: "Ollama",
none: "—",
}
return map[value] ?? value
}
</script>
<footer id="footer">
feat(gui): footer backend chips + Settings 'AI Backends' tab + i18n Surfaces the LLM/TTS hot-swap UX in the GUI so the user doesn't need env vars or voice commands. Tauri commands for this landed in b243e67; this commit wires them to Svelte. Footer (frontend/src/components/Footer.svelte) - Poll get_active_backends() every 5 s, show TTS / LLM / Profile chips. - Chips have border accents by kind (cyan = TTS, lime = LLM, orange = Profile). - Friendly title tooltips with full backend + model names. - Silent if jarvis-gui can't reach the command (e.g. cold start) — no UI flicker. Settings — new "AI Backends" tab (frontend/src/routes/settings/index.svelte) - Status banner showing active LLM (with model name) + TTS + Profile. - LLM selector: Auto / Groq / Ollama → calls set_llm_backend on change (hot-swap, persisted to DB). - TTS selector: Auto / SAPI / Piper / Silero → calls set_tts_backend (persisted, effective on next jarvis-app restart). - "Reset context" button → llm_reset_context Tauri command. - Error toast for swap failures (e.g. Groq selected but no GROQ_TOKEN). - Tips alert: how to install Ollama / Piper / voice commands. - Loads prefs via db_read('llm_backend' / 'tts_backend') on mount. i18n strings (ru/en/ua, .ftl files) - 14 new keys: settings-ai-backends, settings-ai-active, settings-ai-auto, settings-ai-applying, settings-ai-error, settings-ai-tips, settings-llm-backend{,-desc}, settings-tts-backend{,-desc}, settings-llm-context{,-desc}, settings-llm-reset, settings-profile. Build glue (crates/jarvis-gui/Cargo.toml) - jarvis-core dep now includes the `llm` feature so backends.rs can resolve `jarvis_core::llm::*` (was failing to compile after the global LLM module). .gitignore - tools/piper/*.dll, piper.exe, voices/, espeak-ng-data/ — locally installed binaries from tools/piper/install.ps1, not committed. Build: cargo build --release -p jarvis-gui green (4m, includes npm/Vite). Test path: rebuild + launch jarvis-gui, /settings → "AI Backends" tab.
2026-05-15 17:06:46 +03:00
{#if backends}
<p class="backends" title="Активные движки. Меняются в /settings и голосом.">
<span class="chip chip-tts" title={chipTitle("tts")}>
<small>TTS</small> {chipLabel(backends.tts)}
</span>
<span class="chip chip-llm" title={chipTitle("llm")}>
<small>LLM</small> {chipLabel(backends.llm)}
</span>
{#if backends.profile && backends.profile !== "default"}
<span class="chip chip-profile" title="Active profile">
<small>Profile</small> {backends.profile}
</span>
{/if}
</p>
{/if}
<p>
© {currentYear} J.A.R.V.I.S.
<span class="edition" title="Rust + Tauri build">Rust</span>
</p>
2026-01-04 22:50:34 +05:00
<p class="links">
chore(gui): rebrand — strip TG/Boosty/Patreon/feedback-bot, keep CC BY-NC-SA attribution The previous feature/gui-rebrand-polish work only updated the appInfo store keys; Footer.svelte, settings, and the commands page were still rendering upstream's Telegram channel, Boosty/Patreon support links, feedback bot, and the original author byline. This finishes the job. Rust side (applies after `cargo build` — currently a no-op until MSVC Build Tools are reinstalled): - Cargo.toml: authors = ["Bossiara13"], repository = J.A.R.V.I.S-rust fork. Original attribution stays in LICENSE.txt per CC BY-NC-SA 4.0; the UI no longer renders an author byline. - config.rs: dropped TG_OFFICIAL_LINK / FEEDBACK_LINK / SUPPORT_BOOSTY_LINK / SUPPORT_PATREON_LINK. Added UPSTREAM_REPOSITORY_LINK (Priler/jarvis for the licence attribution), ISSUES_LINK (this fork's GH issues), and PYTHON_FORK_LINK. - tauri_commands/etc.rs: dropped get_tg_official_link/get_boosty_link/ get_patreon_link/get_feedback_link. Added get_upstream_link, get_issues_link, get_python_fork_link. Tidied up the Option<&str> -> String boilerplate with unwrap_or. - main.rs: invoke_handler updated to match. Frontend side (visible only after Rust rebuild — Tauri bundles the dist into the exe): - stores.ts: appInfo shape reduced to repositoryLink / upstreamLink / issuesLink / pythonForkLink / logFilePath. loadAppInfo() uses fetchOr() with hardcoded fallbacks so the UI still populates correctly when run against an un-rebuilt binary; fetchRepoOr() additionally overrides CARGO_PKG_REPOSITORY if it still resolves to upstream's Priler/jarvis. - Footer.svelte: rewritten — © year + "J.A.R.V.I.S." + repo link + issues link + small "fork of Priler/jarvis · CC BY-NC-SA 4.0" attribution line. No author byline (it's in LICENSE.txt). - routes/settings/index.svelte: feedback link now points to GitHub Issues. - routes/commands/index.svelte: TG-channel reference replaced with a link to the Python fork (where the command builder lives) plus a pointer to resources/commands/ in this repo. Bruh GIF removed. - locales/{ru,en,ua}.ftl: removed footer-author / footer-telegram / footer-support, added footer-issues / footer-fork-of, rewrote commands-wip-* strings, retargeted settings-beta-bot to "GitHub Issues". Bundle identifier (com.priler.jarvis) kept intact to avoid moving the app data directory.
2026-05-15 01:09:14 +03:00
<a href={repoLink} target="_blank" rel="noopener noreferrer">
2026-01-04 22:50:34 +05:00
<img src="/media/icons/github-logo.png" alt="GitHub" width="18px" />
&nbsp;<span>{t('footer-github')}</span>
2026-01-04 22:50:34 +05:00
</a>
chore(gui): rebrand — strip TG/Boosty/Patreon/feedback-bot, keep CC BY-NC-SA attribution The previous feature/gui-rebrand-polish work only updated the appInfo store keys; Footer.svelte, settings, and the commands page were still rendering upstream's Telegram channel, Boosty/Patreon support links, feedback bot, and the original author byline. This finishes the job. Rust side (applies after `cargo build` — currently a no-op until MSVC Build Tools are reinstalled): - Cargo.toml: authors = ["Bossiara13"], repository = J.A.R.V.I.S-rust fork. Original attribution stays in LICENSE.txt per CC BY-NC-SA 4.0; the UI no longer renders an author byline. - config.rs: dropped TG_OFFICIAL_LINK / FEEDBACK_LINK / SUPPORT_BOOSTY_LINK / SUPPORT_PATREON_LINK. Added UPSTREAM_REPOSITORY_LINK (Priler/jarvis for the licence attribution), ISSUES_LINK (this fork's GH issues), and PYTHON_FORK_LINK. - tauri_commands/etc.rs: dropped get_tg_official_link/get_boosty_link/ get_patreon_link/get_feedback_link. Added get_upstream_link, get_issues_link, get_python_fork_link. Tidied up the Option<&str> -> String boilerplate with unwrap_or. - main.rs: invoke_handler updated to match. Frontend side (visible only after Rust rebuild — Tauri bundles the dist into the exe): - stores.ts: appInfo shape reduced to repositoryLink / upstreamLink / issuesLink / pythonForkLink / logFilePath. loadAppInfo() uses fetchOr() with hardcoded fallbacks so the UI still populates correctly when run against an un-rebuilt binary; fetchRepoOr() additionally overrides CARGO_PKG_REPOSITORY if it still resolves to upstream's Priler/jarvis. - Footer.svelte: rewritten — © year + "J.A.R.V.I.S." + repo link + issues link + small "fork of Priler/jarvis · CC BY-NC-SA 4.0" attribution line. No author byline (it's in LICENSE.txt). - routes/settings/index.svelte: feedback link now points to GitHub Issues. - routes/commands/index.svelte: TG-channel reference replaced with a link to the Python fork (where the command builder lives) plus a pointer to resources/commands/ in this repo. Bruh GIF removed. - locales/{ru,en,ua}.ftl: removed footer-author / footer-telegram / footer-support, added footer-issues / footer-fork-of, rewrote commands-wip-* strings, retargeted settings-beta-bot to "GitHub Issues". Bundle identifier (com.priler.jarvis) kept intact to avoid moving the app data directory.
2026-05-15 01:09:14 +03:00
&nbsp;·&nbsp;
<a href={issuesLink} target="_blank" rel="noopener noreferrer">
<span>{t('footer-issues')}</span>
</a>
</p>
<p class="links last">
chore(gui): rebrand — strip TG/Boosty/Patreon/feedback-bot, keep CC BY-NC-SA attribution The previous feature/gui-rebrand-polish work only updated the appInfo store keys; Footer.svelte, settings, and the commands page were still rendering upstream's Telegram channel, Boosty/Patreon support links, feedback bot, and the original author byline. This finishes the job. Rust side (applies after `cargo build` — currently a no-op until MSVC Build Tools are reinstalled): - Cargo.toml: authors = ["Bossiara13"], repository = J.A.R.V.I.S-rust fork. Original attribution stays in LICENSE.txt per CC BY-NC-SA 4.0; the UI no longer renders an author byline. - config.rs: dropped TG_OFFICIAL_LINK / FEEDBACK_LINK / SUPPORT_BOOSTY_LINK / SUPPORT_PATREON_LINK. Added UPSTREAM_REPOSITORY_LINK (Priler/jarvis for the licence attribution), ISSUES_LINK (this fork's GH issues), and PYTHON_FORK_LINK. - tauri_commands/etc.rs: dropped get_tg_official_link/get_boosty_link/ get_patreon_link/get_feedback_link. Added get_upstream_link, get_issues_link, get_python_fork_link. Tidied up the Option<&str> -> String boilerplate with unwrap_or. - main.rs: invoke_handler updated to match. Frontend side (visible only after Rust rebuild — Tauri bundles the dist into the exe): - stores.ts: appInfo shape reduced to repositoryLink / upstreamLink / issuesLink / pythonForkLink / logFilePath. loadAppInfo() uses fetchOr() with hardcoded fallbacks so the UI still populates correctly when run against an un-rebuilt binary; fetchRepoOr() additionally overrides CARGO_PKG_REPOSITORY if it still resolves to upstream's Priler/jarvis. - Footer.svelte: rewritten — © year + "J.A.R.V.I.S." + repo link + issues link + small "fork of Priler/jarvis · CC BY-NC-SA 4.0" attribution line. No author byline (it's in LICENSE.txt). - routes/settings/index.svelte: feedback link now points to GitHub Issues. - routes/commands/index.svelte: TG-channel reference replaced with a link to the Python fork (where the command builder lives) plus a pointer to resources/commands/ in this repo. Bruh GIF removed. - locales/{ru,en,ua}.ftl: removed footer-author / footer-telegram / footer-support, added footer-issues / footer-fork-of, rewrote commands-wip-* strings, retargeted settings-beta-bot to "GitHub Issues". Bundle identifier (com.priler.jarvis) kept intact to avoid moving the app data directory.
2026-05-15 01:09:14 +03:00
<small>
{t('footer-fork-of')}
<a href={upstreamLink} target="_blank" rel="noopener noreferrer">Priler/jarvis</a>
· CC BY-NC-SA 4.0
</small>
2026-01-04 22:50:34 +05:00
</p>
</footer>
<style lang="scss">
#footer {
text-align: center;
color: #6c6e71;
font-size: 13px;
font-weight: normal;
line-height: 1.7em;
margin-top: 15px;
.edition {
display: inline-block;
margin-left: 6px;
padding: 1px 7px;
border-radius: 4px;
background: #b7411a;
color: #fff;
font-size: 11px;
font-weight: 600;
letter-spacing: 0.5px;
vertical-align: middle;
}
feat(gui): footer backend chips + Settings 'AI Backends' tab + i18n Surfaces the LLM/TTS hot-swap UX in the GUI so the user doesn't need env vars or voice commands. Tauri commands for this landed in b243e67; this commit wires them to Svelte. Footer (frontend/src/components/Footer.svelte) - Poll get_active_backends() every 5 s, show TTS / LLM / Profile chips. - Chips have border accents by kind (cyan = TTS, lime = LLM, orange = Profile). - Friendly title tooltips with full backend + model names. - Silent if jarvis-gui can't reach the command (e.g. cold start) — no UI flicker. Settings — new "AI Backends" tab (frontend/src/routes/settings/index.svelte) - Status banner showing active LLM (with model name) + TTS + Profile. - LLM selector: Auto / Groq / Ollama → calls set_llm_backend on change (hot-swap, persisted to DB). - TTS selector: Auto / SAPI / Piper / Silero → calls set_tts_backend (persisted, effective on next jarvis-app restart). - "Reset context" button → llm_reset_context Tauri command. - Error toast for swap failures (e.g. Groq selected but no GROQ_TOKEN). - Tips alert: how to install Ollama / Piper / voice commands. - Loads prefs via db_read('llm_backend' / 'tts_backend') on mount. i18n strings (ru/en/ua, .ftl files) - 14 new keys: settings-ai-backends, settings-ai-active, settings-ai-auto, settings-ai-applying, settings-ai-error, settings-ai-tips, settings-llm-backend{,-desc}, settings-tts-backend{,-desc}, settings-llm-context{,-desc}, settings-llm-reset, settings-profile. Build glue (crates/jarvis-gui/Cargo.toml) - jarvis-core dep now includes the `llm` feature so backends.rs can resolve `jarvis_core::llm::*` (was failing to compile after the global LLM module). .gitignore - tools/piper/*.dll, piper.exe, voices/, espeak-ng-data/ — locally installed binaries from tools/piper/install.ps1, not committed. Build: cargo build --release -p jarvis-gui green (4m, includes npm/Vite). Test path: rebuild + launch jarvis-gui, /settings → "AI Backends" tab.
2026-05-15 17:06:46 +03:00
.backends {
margin-bottom: 8px;
.chip {
display: inline-block;
margin: 0 3px;
padding: 2px 8px;
border-radius: 10px;
font-size: 11px;
font-weight: 500;
letter-spacing: 0.2px;
color: #cfd2d5;
background: rgba(255, 255, 255, 0.06);
border: 1px solid rgba(255, 255, 255, 0.08);
small {
color: #6c6e71;
margin-right: 3px;
font-size: 9px;
text-transform: uppercase;
letter-spacing: 0.5px;
}
&.chip-tts { border-color: rgba(82, 254, 254, 0.25); }
&.chip-llm { border-color: rgba(138, 200, 50, 0.25); }
&.chip-profile { border-color: rgba(255, 168, 60, 0.25); }
}
}
p {
margin: 0;
padding: 0;
2026-01-04 22:50:34 +05:00
&.links {
margin-top: 5px;
margin-bottom: 15px;
&.last {
margin-top: -5px;
chore(gui): rebrand — strip TG/Boosty/Patreon/feedback-bot, keep CC BY-NC-SA attribution The previous feature/gui-rebrand-polish work only updated the appInfo store keys; Footer.svelte, settings, and the commands page were still rendering upstream's Telegram channel, Boosty/Patreon support links, feedback bot, and the original author byline. This finishes the job. Rust side (applies after `cargo build` — currently a no-op until MSVC Build Tools are reinstalled): - Cargo.toml: authors = ["Bossiara13"], repository = J.A.R.V.I.S-rust fork. Original attribution stays in LICENSE.txt per CC BY-NC-SA 4.0; the UI no longer renders an author byline. - config.rs: dropped TG_OFFICIAL_LINK / FEEDBACK_LINK / SUPPORT_BOOSTY_LINK / SUPPORT_PATREON_LINK. Added UPSTREAM_REPOSITORY_LINK (Priler/jarvis for the licence attribution), ISSUES_LINK (this fork's GH issues), and PYTHON_FORK_LINK. - tauri_commands/etc.rs: dropped get_tg_official_link/get_boosty_link/ get_patreon_link/get_feedback_link. Added get_upstream_link, get_issues_link, get_python_fork_link. Tidied up the Option<&str> -> String boilerplate with unwrap_or. - main.rs: invoke_handler updated to match. Frontend side (visible only after Rust rebuild — Tauri bundles the dist into the exe): - stores.ts: appInfo shape reduced to repositoryLink / upstreamLink / issuesLink / pythonForkLink / logFilePath. loadAppInfo() uses fetchOr() with hardcoded fallbacks so the UI still populates correctly when run against an un-rebuilt binary; fetchRepoOr() additionally overrides CARGO_PKG_REPOSITORY if it still resolves to upstream's Priler/jarvis. - Footer.svelte: rewritten — © year + "J.A.R.V.I.S." + repo link + issues link + small "fork of Priler/jarvis · CC BY-NC-SA 4.0" attribution line. No author byline (it's in LICENSE.txt). - routes/settings/index.svelte: feedback link now points to GitHub Issues. - routes/commands/index.svelte: TG-channel reference replaced with a link to the Python fork (where the command builder lives) plus a pointer to resources/commands/ in this repo. Bruh GIF removed. - locales/{ru,en,ua}.ftl: removed footer-author / footer-telegram / footer-support, added footer-issues / footer-fork-of, rewrote commands-wip-* strings, retargeted settings-beta-bot to "GitHub Issues". Bundle identifier (com.priler.jarvis) kept intact to avoid moving the app data directory.
2026-05-15 01:09:14 +03:00
color: #8a8d90;
font-size: 11px;
}
2026-01-04 22:50:34 +05:00
}
}
a {
chore(gui): rebrand — strip TG/Boosty/Patreon/feedback-bot, keep CC BY-NC-SA attribution The previous feature/gui-rebrand-polish work only updated the appInfo store keys; Footer.svelte, settings, and the commands page were still rendering upstream's Telegram channel, Boosty/Patreon support links, feedback bot, and the original author byline. This finishes the job. Rust side (applies after `cargo build` — currently a no-op until MSVC Build Tools are reinstalled): - Cargo.toml: authors = ["Bossiara13"], repository = J.A.R.V.I.S-rust fork. Original attribution stays in LICENSE.txt per CC BY-NC-SA 4.0; the UI no longer renders an author byline. - config.rs: dropped TG_OFFICIAL_LINK / FEEDBACK_LINK / SUPPORT_BOOSTY_LINK / SUPPORT_PATREON_LINK. Added UPSTREAM_REPOSITORY_LINK (Priler/jarvis for the licence attribution), ISSUES_LINK (this fork's GH issues), and PYTHON_FORK_LINK. - tauri_commands/etc.rs: dropped get_tg_official_link/get_boosty_link/ get_patreon_link/get_feedback_link. Added get_upstream_link, get_issues_link, get_python_fork_link. Tidied up the Option<&str> -> String boilerplate with unwrap_or. - main.rs: invoke_handler updated to match. Frontend side (visible only after Rust rebuild — Tauri bundles the dist into the exe): - stores.ts: appInfo shape reduced to repositoryLink / upstreamLink / issuesLink / pythonForkLink / logFilePath. loadAppInfo() uses fetchOr() with hardcoded fallbacks so the UI still populates correctly when run against an un-rebuilt binary; fetchRepoOr() additionally overrides CARGO_PKG_REPOSITORY if it still resolves to upstream's Priler/jarvis. - Footer.svelte: rewritten — © year + "J.A.R.V.I.S." + repo link + issues link + small "fork of Priler/jarvis · CC BY-NC-SA 4.0" attribution line. No author byline (it's in LICENSE.txt). - routes/settings/index.svelte: feedback link now points to GitHub Issues. - routes/commands/index.svelte: TG-channel reference replaced with a link to the Python fork (where the command builder lives) plus a pointer to resources/commands/ in this repo. Bruh GIF removed. - locales/{ru,en,ua}.ftl: removed footer-author / footer-telegram / footer-support, added footer-issues / footer-fork-of, rewrote commands-wip-* strings, retargeted settings-beta-bot to "GitHub Issues". Bundle identifier (com.priler.jarvis) kept intact to avoid moving the app data directory.
2026-05-15 01:09:14 +03:00
color: #555759 !important;
text-decoration: none;
transition: 0.3s;
chore(gui): rebrand — strip TG/Boosty/Patreon/feedback-bot, keep CC BY-NC-SA attribution The previous feature/gui-rebrand-polish work only updated the appInfo store keys; Footer.svelte, settings, and the commands page were still rendering upstream's Telegram channel, Boosty/Patreon support links, feedback bot, and the original author byline. This finishes the job. Rust side (applies after `cargo build` — currently a no-op until MSVC Build Tools are reinstalled): - Cargo.toml: authors = ["Bossiara13"], repository = J.A.R.V.I.S-rust fork. Original attribution stays in LICENSE.txt per CC BY-NC-SA 4.0; the UI no longer renders an author byline. - config.rs: dropped TG_OFFICIAL_LINK / FEEDBACK_LINK / SUPPORT_BOOSTY_LINK / SUPPORT_PATREON_LINK. Added UPSTREAM_REPOSITORY_LINK (Priler/jarvis for the licence attribution), ISSUES_LINK (this fork's GH issues), and PYTHON_FORK_LINK. - tauri_commands/etc.rs: dropped get_tg_official_link/get_boosty_link/ get_patreon_link/get_feedback_link. Added get_upstream_link, get_issues_link, get_python_fork_link. Tidied up the Option<&str> -> String boilerplate with unwrap_or. - main.rs: invoke_handler updated to match. Frontend side (visible only after Rust rebuild — Tauri bundles the dist into the exe): - stores.ts: appInfo shape reduced to repositoryLink / upstreamLink / issuesLink / pythonForkLink / logFilePath. loadAppInfo() uses fetchOr() with hardcoded fallbacks so the UI still populates correctly when run against an un-rebuilt binary; fetchRepoOr() additionally overrides CARGO_PKG_REPOSITORY if it still resolves to upstream's Priler/jarvis. - Footer.svelte: rewritten — © year + "J.A.R.V.I.S." + repo link + issues link + small "fork of Priler/jarvis · CC BY-NC-SA 4.0" attribution line. No author byline (it's in LICENSE.txt). - routes/settings/index.svelte: feedback link now points to GitHub Issues. - routes/commands/index.svelte: TG-channel reference replaced with a link to the Python fork (where the command builder lives) plus a pointer to resources/commands/ in this repo. Bruh GIF removed. - locales/{ru,en,ua}.ftl: removed footer-author / footer-telegram / footer-support, added footer-issues / footer-fork-of, rewrote commands-wip-* strings, retargeted settings-beta-bot to "GitHub Issues". Bundle identifier (com.priler.jarvis) kept intact to avoid moving the app data directory.
2026-05-15 01:09:14 +03:00
& > span {
color: #185876;
border-bottom: 1px solid #185876;
transition: 0.3s;
}
img {
2026-01-04 22:50:34 +05:00
opacity: 0.5;
transition: opacity 0.5s;
margin-top: -3px;
}
&:hover {
chore(gui): rebrand — strip TG/Boosty/Patreon/feedback-bot, keep CC BY-NC-SA attribution The previous feature/gui-rebrand-polish work only updated the appInfo store keys; Footer.svelte, settings, and the commands page were still rendering upstream's Telegram channel, Boosty/Patreon support links, feedback bot, and the original author byline. This finishes the job. Rust side (applies after `cargo build` — currently a no-op until MSVC Build Tools are reinstalled): - Cargo.toml: authors = ["Bossiara13"], repository = J.A.R.V.I.S-rust fork. Original attribution stays in LICENSE.txt per CC BY-NC-SA 4.0; the UI no longer renders an author byline. - config.rs: dropped TG_OFFICIAL_LINK / FEEDBACK_LINK / SUPPORT_BOOSTY_LINK / SUPPORT_PATREON_LINK. Added UPSTREAM_REPOSITORY_LINK (Priler/jarvis for the licence attribution), ISSUES_LINK (this fork's GH issues), and PYTHON_FORK_LINK. - tauri_commands/etc.rs: dropped get_tg_official_link/get_boosty_link/ get_patreon_link/get_feedback_link. Added get_upstream_link, get_issues_link, get_python_fork_link. Tidied up the Option<&str> -> String boilerplate with unwrap_or. - main.rs: invoke_handler updated to match. Frontend side (visible only after Rust rebuild — Tauri bundles the dist into the exe): - stores.ts: appInfo shape reduced to repositoryLink / upstreamLink / issuesLink / pythonForkLink / logFilePath. loadAppInfo() uses fetchOr() with hardcoded fallbacks so the UI still populates correctly when run against an un-rebuilt binary; fetchRepoOr() additionally overrides CARGO_PKG_REPOSITORY if it still resolves to upstream's Priler/jarvis. - Footer.svelte: rewritten — © year + "J.A.R.V.I.S." + repo link + issues link + small "fork of Priler/jarvis · CC BY-NC-SA 4.0" attribution line. No author byline (it's in LICENSE.txt). - routes/settings/index.svelte: feedback link now points to GitHub Issues. - routes/commands/index.svelte: TG-channel reference replaced with a link to the Python fork (where the command builder lives) plus a pointer to resources/commands/ in this repo. Bruh GIF removed. - locales/{ru,en,ua}.ftl: removed footer-author / footer-telegram / footer-support, added footer-issues / footer-fork-of, rewrote commands-wip-* strings, retargeted settings-beta-bot to "GitHub Issues". Bundle identifier (com.priler.jarvis) kept intact to avoid moving the app data directory.
2026-05-15 01:09:14 +03:00
color: #777a7d !important;
& > span {
color: #2A9CD0;
}
img {
opacity: 1;
}
}
}
}
2026-01-04 22:50:34 +05:00
</style>