diff --git a/apps/desktop/package.json b/apps/desktop/package.json
index 0936fe70..2750d5cb 100644
--- a/apps/desktop/package.json
+++ b/apps/desktop/package.json
@@ -1,6 +1,6 @@
{
"name": "@trixty/desktop",
- "version": "1.0.14",
+ "version": "1.1.5",
"private": true,
"scripts": {
"dev": "next dev",
diff --git a/apps/desktop/src-tauri/src/discord_rpc.rs b/apps/desktop/src-tauri/src/discord_rpc.rs
index aeeed926..b8efb5cd 100644
--- a/apps/desktop/src-tauri/src/discord_rpc.rs
+++ b/apps/desktop/src-tauri/src/discord_rpc.rs
@@ -1,7 +1,6 @@
use serde::{Deserialize, Serialize};
use serde_json::{json, Value};
-use std::env;
-use std::path::PathBuf;
+
use tokio::io::{AsyncReadExt, AsyncWriteExt};
#[cfg(unix)]
use tokio::net::UnixStream;
diff --git a/apps/desktop/src-tauri/src/lib.rs b/apps/desktop/src-tauri/src/lib.rs
index fc04f159..f58bd1ca 100644
--- a/apps/desktop/src-tauri/src/lib.rs
+++ b/apps/desktop/src-tauri/src/lib.rs
@@ -8,7 +8,7 @@ mod http;
mod pty;
mod discord_rpc;
-use cli::CliWorkspace;
+
use error::redact_user_paths;
mod extensions;
diff --git a/apps/desktop/src/api/builtin.l10n.ts b/apps/desktop/src/api/builtin.l10n.ts
index 11637546..012f5d22 100644
--- a/apps/desktop/src/api/builtin.l10n.ts
+++ b/apps/desktop/src/api/builtin.l10n.ts
@@ -1004,6 +1004,9 @@ export function registerBuiltinTranslations() {
'agent.configuration.loadonstartup_warning': 'Aviso: Esto puede provocar ralentización del sistema y hacer que Trixty tarde más en cargar mientras el modelo se sube a la memoria.',
'agent.configuration.loadonstartup_ping_desc': 'Trixty enviará una señal en segundo plano para cargar los modelos al iniciar la aplicación.',
'agent.configuration.keepalive_unit': 'minutos',
+ 'agent.configuration.ai_agent_suffix': 'Agente de IA',
+ 'agent.configuration.time_m': '{n}m',
+ 'agent.configuration.time_h': '{n}h',
'agent.configuration.provider_keys_label': 'Permitir Claves de Proveedor',
'agent.configuration.provider_keys_desc': 'Desbloquea proveedores en la nube (OpenAI, Anthropic, Gemini, OpenRouter) en el encabezado del chat y revela el submenú Claves de Proveedor donde guardas las credenciales API.',
'agent.configuration.inline_suggestions_label': 'Sugerencias de código en línea',
@@ -1033,10 +1036,6 @@ export function registerBuiltinTranslations() {
'settings.about.logo_alt': 'Logo de Trixty',
'settings.general.exclude_title_part1': 'Archivos: ',
'settings.general.exclude_title_part2': 'Excluir',
- 'agent.configuration.keepalive_unit': 'minutos',
- 'agent.configuration.ai_agent_suffix': 'Agente de IA',
- 'agent.configuration.time_m': '{n}m',
- 'agent.configuration.time_h': '{n}h',
'onboarding.language.en_native': 'Inglés (EE. UU.)',
'onboarding.language.es_native': 'Español',
});
diff --git a/apps/desktop/src/components/StatusBar.tsx b/apps/desktop/src/components/StatusBar.tsx
index f64fa526..2fe46275 100644
--- a/apps/desktop/src/components/StatusBar.tsx
+++ b/apps/desktop/src/components/StatusBar.tsx
@@ -89,8 +89,8 @@ const StatusBar: React.FC = () => {
.filter(u => u.user && u.user.clientId !== (provider?.awareness?.clientID))
.map((u, i) => (
-
-
{u.user.name}
+
+
{u.user?.name}
))}
diff --git a/apps/desktop/src/components/TabBar.tsx b/apps/desktop/src/components/TabBar.tsx
index 3b3a5134..5f51b7df 100644
--- a/apps/desktop/src/components/TabBar.tsx
+++ b/apps/desktop/src/components/TabBar.tsx
@@ -115,8 +115,8 @@ const TabBar: React.FC = () => {
className="flex bg-surface-1 h-[36px] overflow-x-auto scrollbar-none border-b border-border-subtle shrink-0"
>
{openFiles.map((file) => {
- const isActive = currentFile &&
- file.path.replace(/\\/g, "/").toLowerCase() === currentFile.path.replace(/\\/g, "/").toLowerCase();
+ const isActive = !!(currentFile &&
+ file.path.replace(/\\/g, "/").toLowerCase() === currentFile.path.replace(/\\/g, "/").toLowerCase());
return (
Promise
;
@@ -28,7 +40,7 @@ export function CollaborationProvider({ children }: { children: React.ReactNode
const [isCollaborating, setIsCollaborating] = useState(false);
const [role, setRole] = useState<"host" | "guest" | null>(null);
const [joinSecret, setJoinSecret] = useState(null);
- const [activeUsers, setActiveUsers] = useState([]);
+ const [activeUsers, setActiveUsers] = useState([]);
const { systemSettings } = useSettings();
const ydoc = useMemo(() => new Y.Doc(), []);
@@ -65,7 +77,7 @@ export function CollaborationProvider({ children }: { children: React.ReactNode
});
// Listen for Discord RPC events
- const unlisten = listen("discord-rpc-event", (event: any) => {
+ const unlisten = listen("discord-rpc-event", (event: { payload: any }) => {
const { evt, data } = event.payload;
if (evt === "ACTIVITY_JOIN_REQUEST") {
const { user } = data;
@@ -135,7 +147,7 @@ export function CollaborationProvider({ children }: { children: React.ReactNode
try {
await invoke("accept_discord_join_request", { userId });
toast.success("Accepted join request");
- } catch (err) {
+ } catch {
toast.error("Failed to accept join request");
}
};
@@ -144,7 +156,7 @@ export function CollaborationProvider({ children }: { children: React.ReactNode
try {
await invoke("reject_discord_join_request", { userId });
toast.info("Rejected join request");
- } catch (err) {
+ } catch {
toast.error("Failed to reject join request");
}
};
diff --git a/apps/desktop/src/hooks/useWorkspaceSync.ts b/apps/desktop/src/hooks/useWorkspaceSync.ts
index 2e9e83f1..f972e8d0 100644
--- a/apps/desktop/src/hooks/useWorkspaceSync.ts
+++ b/apps/desktop/src/hooks/useWorkspaceSync.ts
@@ -2,7 +2,7 @@ import { useEffect, useCallback } from "react";
import { invoke } from "@tauri-apps/api/core";
import { useCollaboration } from "@/context/CollaborationContext";
import { useWorkspace } from "@/context/WorkspaceContext";
-import { useSettings } from "@/context/SettingsContext";
+
import * as Y from "yjs";
interface FileEntry {
@@ -15,9 +15,9 @@ interface FileEntry {
export function useWorkspaceSync() {
const { isCollaborating, role, ydoc } = useCollaboration();
const { rootPath } = useWorkspace();
- const { systemSettings } = useSettings();
- const syncDirectory = useCallback(async (path: string, map: Y.Map) => {
+
+ const syncDirectory = useCallback(async (path: string, map: Y.Map) => {
try {
const data = await invoke("read_directory", { path });
@@ -46,14 +46,14 @@ export function useWorkspaceSync() {
syncDirectory(rootPath, workspaceMap);
// Listen for file requests from guests
- const requestObserver = async (event: any) => {
+ const requestObserver = async (event: Y.YMapEvent) => {
for (const [path, action] of event.keys) {
if (action.action === "add" || action.action === "update") {
const req = fileRequests.get(path);
if (!req) continue;
try {
- const content = await invoke("read_file", { path }, { silent: true });
+ const content = await invoke("read_file", { path });
const sharedText = ydoc.getText(`file:${path}`);
// Only populate if empty to avoid overwriting current edits