feat(v2): add SSH management, ctx integration, themes, detached mode, auto-updater

SSH session management:
- SshSession struct + ssh_sessions SQLite table in session.rs
- CRUD Tauri commands (ssh_session_list/save/delete) in lib.rs
- SshDialog.svelte (create/edit modal), SshSessionList.svelte (sidebar)
- SSH pane routes to TerminalPane with shell=/usr/bin/ssh + args

ctx context database integration:
- ctx.rs: read-only CtxDb (SQLITE_OPEN_READ_ONLY for ~/.claude-context/context.db)
- 5 Tauri commands (ctx_list_projects/get_context/get_shared/get_summaries/search)
- ContextPane.svelte with project selector, tabs, search
- ctx-bridge.ts adapter

Catppuccin theme flavors (Latte/Frappe/Macchiato/Mocha):
- themes.ts: all 4 palette definitions + buildXtermTheme/applyCssVariables
- theme.svelte.ts: reactive store with SQLite persistence
- SettingsDialog flavor dropdown, TerminalPane theme-aware

Detached pane mode (pop-out windows):
- detach.ts: isDetachedMode/getDetachedConfig from URL params
- App.svelte: conditional rendering of single pane without chrome

Other additions:
- Shiki syntax highlighting (highlight.ts, lazy singleton, 13 languages)
- Tauri auto-updater plugin (tauri-plugin-updater + updater.ts)
- AgentPane markdown rendering with Shiki code highlighting
- New deps: shiki, @tauri-apps/plugin-updater, tauri-plugin-updater
This commit is contained in:
Hibryda 2026-03-06 14:50:00 +01:00
parent 4f2614186d
commit 4db7ccff60
28 changed files with 2992 additions and 51 deletions

View file

@ -0,0 +1,41 @@
import { invoke } from '@tauri-apps/api/core';
export interface CtxProject {
name: string;
description: string;
work_dir: string | null;
created_at: string;
}
export interface CtxEntry {
project: string;
key: string;
value: string;
updated_at: string;
}
export interface CtxSummary {
project: string;
summary: string;
created_at: string;
}
export async function ctxListProjects(): Promise<CtxProject[]> {
return invoke('ctx_list_projects');
}
export async function ctxGetContext(project: string): Promise<CtxEntry[]> {
return invoke('ctx_get_context', { project });
}
export async function ctxGetShared(): Promise<CtxEntry[]> {
return invoke('ctx_get_shared');
}
export async function ctxGetSummaries(project: string, limit: number = 5): Promise<CtxSummary[]> {
return invoke('ctx_get_summaries', { project, limit });
}
export async function ctxSearch(query: string): Promise<CtxEntry[]> {
return invoke('ctx_search', { query });
}

View file

@ -0,0 +1,26 @@
import { invoke } from '@tauri-apps/api/core';
export interface SshSession {
id: string;
name: string;
host: string;
port: number;
username: string;
key_file: string;
folder: string;
color: string;
created_at: number;
last_used_at: number;
}
export async function listSshSessions(): Promise<SshSession[]> {
return invoke('ssh_session_list');
}
export async function saveSshSession(session: SshSession): Promise<void> {
return invoke('ssh_session_save', { session });
}
export async function deleteSshSession(id: string): Promise<void> {
return invoke('ssh_session_delete', { id });
}