Compare commits

...
Sign in to create a new pull request.

8 commits

13 changed files with 85 additions and 111 deletions

8
Cargo.lock generated
View file

@ -3262,7 +3262,7 @@ checksum = "92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2"
[[package]]
name = "jarvis-app"
version = "0.1.0"
version = "0.4.1"
dependencies = [
"glib 0.21.5",
"gtk",
@ -3282,7 +3282,7 @@ dependencies = [
[[package]]
name = "jarvis-cli"
version = "0.1.0"
version = "0.4.1"
dependencies = [
"env_logger",
"jarvis-core",
@ -3293,7 +3293,7 @@ dependencies = [
[[package]]
name = "jarvis-core"
version = "0.1.0"
version = "0.4.1"
dependencies = [
"chrono",
"fastembed",
@ -3337,7 +3337,7 @@ dependencies = [
[[package]]
name = "jarvis-gui"
version = "0.1.0"
version = "0.4.1"
dependencies = [
"jarvis-core",
"lazy_static",

View file

@ -8,10 +8,10 @@ members = [
resolver = "2"
[workspace.package]
version = "0.1.0"
version = "0.4.1"
authors = ["Abraham Tugalov (original)", "Bossiara13 (fork)"]
license = "GPL-3.0-only"
repository = "https://github.com/Priler/jarvis"
repository = "https://github.com/DmitryBykov-ISPO/J.A.R.V.I.S-rust"
edition = "2021"
[workspace.dependencies]

View file

@ -72,7 +72,7 @@ pub const DEFAULT_INTENT_BACKEND: &str = "intent-classifier";
pub const DEFAULT_SLOTS_BACKEND: &str = "none";
pub const DEFAULT_VAD_BACKEND: &str = "energy";
pub const DEFAULT_VOICE: &str = "jarvis-remaster";
pub const DEFAULT_VOICE: &str = "jarvis-og";
pub const SOUND_PATH: &str = "resources/sound"; // extended from SOUND_DIR (resources/sound)
pub const VOICES_PATH: &str = "voices"; // extended from SOUND_PATH (resources/sound)

View file

@ -152,7 +152,7 @@ impl Default for Settings {
fn default() -> Settings {
Settings {
microphone: -1,
voice: String::from(""),
voice: String::from(config::DEFAULT_VOICE),
wake_word_engine: config::DEFAULT_WAKE_WORD_ENGINE,

View file

@ -42,10 +42,8 @@ stats-not-selected = Not selected
stats-loading = Loading...
# ### FOOTER
footer-author = Project author
footer-telegram = Our Telegram channel
footer-github = Github repository
footer-support = Support the project on
footer-attribution = Fork by Bossiara13. Original: Priler/jarvis (CC BY-NC-SA 4.0).
footer-github = Fork Github repository
# ### SETTINGS
settings-title = Settings
@ -112,10 +110,9 @@ settings-openai-not-supported = ChatGPT is not currently supported. It will be a
commands-title = Commands
commands-search = Search commands...
commands-count = { $count } commands
commands-wip-title = [404] This section is under development!
commands-wip-desc = Here will be a list of commands + full-featured command editor.
commands-wip-follow = Follow updates in
commands-wip-channel = our Telegram channel
commands-heading = Jarvis commands
commands-desc = Voice commands are configured via commands.yaml (Python fork) or resources/commands/ (Rust). A GUI command builder is available in the Python version of the fork.
commands-builder-link = Open Command Builder (Python fork)
# ### ERRORS
error-generic = An error occurred

View file

@ -42,10 +42,8 @@ stats-not-selected = Не выбран
stats-loading = Загрузка...
# FOOTER
footer-author = Автор проекта
footer-telegram = Наш телеграм канал
footer-github = Github репозиторий проекта
footer-support = Поддержать проект на
footer-attribution = Автор форка: Bossiara13. Оригинал: Priler/jarvis (CC BY-NC-SA 4.0).
footer-github = Github репозиторий форка
# SETTINGS
settings-title = Настройки
@ -112,10 +110,9 @@ settings-openai-not-supported = В данный момент ChatGPT не под
commands-title = Команды
commands-search = Поиск команд...
commands-count = { $count } команд
commands-wip-title = [404] Этот раздел еще находится в разработке!
commands-wip-desc = Тут будет список команд + полноценный редактор команд.
commands-wip-follow = Следите за обновлениями в
commands-wip-channel = нашем телеграм канале
commands-heading = Команды Jarvis
commands-desc = Голосовые команды настраиваются через файл commands.yaml (Python-форк) или resources/commands/ (Rust). GUI-конструктор команд доступен в Python-версии форка.
commands-builder-link = Открыть Command Builder (Python-форк)
# ERRORS
error-generic = Произошла ошибка

View file

@ -42,10 +42,8 @@ stats-not-selected = Не вибрано
stats-loading = Завантаження...
# ### FOOTER
footer-author = Автор проєкту
footer-telegram = Наш телеграм канал
footer-github = Github репозиторій проєкту
footer-support = Підтримати проєкт на
footer-attribution = Автор форка: Bossiara13. Оригінал: Priler/jarvis (CC BY-NC-SA 4.0).
footer-github = Github репозиторій форка
# ### SETTINGS
settings-title = Налаштування
@ -112,10 +110,9 @@ settings-openai-not-supported = Наразі ChatGPT не підтримуєть
commands-title = Команди
commands-search = Пошук команд...
commands-count = { $count } команд
commands-wip-title = [404] Цей розділ ще в розробці!
commands-wip-desc = Тут буде список команд + повноцінний редактор команд.
commands-wip-follow = Слідкуйте за оновленнями в
commands-wip-channel = нашому телеграм каналі
commands-heading = Команди Jarvis
commands-desc = Голосові команди налаштовуються через файл commands.yaml (Python-форк) або resources/commands/ (Rust). GUI-конструктор команд доступний у Python-версії форка.
commands-builder-link = Відкрити Command Builder (Python-форк)
# ### ERRORS
error-generic = Сталася помилка

View file

@ -1,7 +1,7 @@
{
"$schema": "https://schema.tauri.app/config/2",
"productName": "jarvis-app",
"version": "0.0.3",
"version": "0.4.1",
"identifier": "com.priler.jarvis",
"build": {
"beforeDevCommand": "npm run dev",

View file

@ -1,7 +1,7 @@
{
"name": "jarvis-app",
"private": true,
"version": "0.1.0",
"version": "0.4.1",
"type": "module",
"scripts": {
"dev": "vite",

View file

@ -1,63 +1,25 @@
<script lang="ts">
import { onMount } from "svelte"
import { invoke } from "@tauri-apps/api/core"
import { appInfo, currentLanguage, translations, translate } from "@/stores"
import { appInfo, translations, translate } from "@/stores"
$: t = (key: string) => translate($translations, key)
let authorName = ""
let tgLink = ""
let repoLink = ""
let boostyLink = ""
let patreonLink = ""
const currentYear = new Date().getFullYear()
appInfo.subscribe(info => {
tgLink = info.tgOfficialLink
repoLink = info.repositoryLink
boostyLink = info.boostySupportLink
patreonLink = info.patreonSupportLink
})
onMount(async () => {
try {
authorName = await invoke<string>("get_author_name")
} catch (err) {
console.error("failed to get author name:", err)
}
})
</script>
<footer id="footer">
<p>© {currentYear}. {t('footer-author')}: <b>{authorName}</b></p>
<p>© {currentYear}. {t('footer-attribution')}</p>
<p class="links">
{#if $currentLanguage === "ru" || $currentLanguage === "ua"}
<a href={tgLink} target="_blank" class="telegram-link">
<img src="/media/icons/telegram.webp" alt="Telegram" width="18px" />
&nbsp;<span>{t('footer-telegram')}</span>
</a>
&nbsp;
{/if}
<a href={repoLink} target="_blank">
<img src="/media/icons/github-logo.png" alt="GitHub" width="18px" />
&nbsp;<span>{t('footer-github')}</span>
</a>
</p>
<p class="links last">
{#if $currentLanguage === "ru"}
{t('footer-support')} <a href={boostyLink} target="_blank" class="telegram-link">
<img src="/media/icons/boosty.webp" alt="Boosty" width="18px" />
<span>Boosty</span>
</a>.
{/if}
{#if $currentLanguage === "ua" || $currentLanguage === "en"}
{t('footer-support')} <a href={patreonLink} target="_blank" class="telegram-link">
<img src="/media/icons/patreon.png" alt="Patreon" width="18px" />
<span>Patreon</span>
</a>.
{/if}
</p>
</footer>
<style lang="scss">

View file

@ -1,41 +1,74 @@
<script lang="ts">
import { Notification, Space } from "@svelteuidev/core"
import { InfoCircled } from "radix-icons-svelte"
import { Space } from "@svelteuidev/core"
import HDivider from "@/components/elements/HDivider.svelte"
import Footer from "@/components/Footer.svelte"
import { appInfo, translations, translate } from "@/stores"
import { translations, translate } from "@/stores"
$: t = (key: string) => translate($translations, key)
let tgLink = ""
appInfo.subscribe(info => {
tgLink = info.tgOfficialLink
})
const builderUrl = "https://github.com/DmitryBykov-ISPO/J.A.R.V.I.S-py/tree/main/tools/command_builder"
</script>
<Space h="xl" />
<Notification
title={t('commands-wip-title')}
icon={InfoCircled}
color="blue"
withCloseButton={false}
>
{t('commands-wip-desc')}<br />
{t('commands-wip-follow')} <a href={tgLink} target="_blank">{t('commands-wip-channel')}</a>!
</Notification>
<div class="placeholder-image">
<img src="/media/images/tenor.gif" alt="bruh" width="320px" />
<div class="commands-info">
<h2>{t('commands-heading')}</h2>
<p>{t('commands-desc')}</p>
<a class="builder-link" href={builderUrl} target="_blank" rel="noopener noreferrer">
{t('commands-builder-link')}
</a>
</div>
<HDivider />
<Footer />
<style>
.placeholder-image {
text-align: center;
margin-top: 25px;
<style lang="scss">
.commands-info {
background: #0a1214;
border: 1px solid rgba(82, 254, 254, 0.2);
border-radius: 8px;
padding: 1.25rem 1.5rem;
color: #d6e2e6;
h2 {
margin: 0 0 0.75rem;
font-size: 1.05rem;
color: #52fefe;
font-weight: 600;
letter-spacing: 0.02em;
}
p {
margin: 0 0 1rem;
font-size: 0.85rem;
line-height: 1.5;
color: rgba(255, 255, 255, 0.65);
}
:global(code) {
background: rgba(82, 254, 254, 0.08);
color: #52fefe;
padding: 0.05rem 0.35rem;
border-radius: 3px;
font-size: 0.8rem;
}
}
.builder-link {
display: inline-block;
padding: 0.5rem 0.9rem;
background: rgba(82, 254, 254, 0.08);
border: 1px solid rgba(82, 254, 254, 0.4);
border-radius: 6px;
color: #52fefe;
font-size: 0.8rem;
text-decoration: none;
transition: background 0.15s ease, border-color 0.15s ease;
&:hover {
background: rgba(82, 254, 254, 0.16);
border-color: rgba(82, 254, 254, 0.6);
}
}
</style>

View file

@ -272,9 +272,6 @@
>
<div class="voice-info">
<span class="voice-name">{voice.name}</span>
{#if voice.author}
<span class="voice-author">by {voice.author}</span>
{/if}
</div>
<div class="voice-languages">
{#each voice.languages as lang}

View file

@ -40,11 +40,8 @@ export const assistantVoice = writable("")
// ### APP INFO
export const appInfo = writable({
tgOfficialLink: "",
feedbackLink: "",
repositoryLink: "",
boostySupportLink: "",
patreonSupportLink: "",
logFilePath: ""
})
@ -60,21 +57,15 @@ export async function loadVoiceSetting() {
export async function loadAppInfo() {
try {
const [tg, feedback, repo, boosty, patreon, logPath] = await Promise.all([
invoke<string>("get_tg_official_link"),
const [feedback, repo, logPath] = await Promise.all([
invoke<string>("get_feedback_link"),
invoke<string>("get_repository_link"),
invoke<string>("get_boosty_link"),
invoke<string>("get_patreon_link"),
invoke<string>("get_log_file_path")
])
appInfo.set({
tgOfficialLink: tg,
feedbackLink: feedback,
repositoryLink: repo,
boostySupportLink: boosty,
patreonSupportLink: patreon,
logFilePath: logPath
})
} catch (err) {