[package] name = "luvus" version = "0.14.3" edition = "2021" # ratatui 0.30 (and ratatui-core) use Rust edition 2024, so the dependency tree # needs rustc 1.88+. Keep this honest — a lower value makes `cargo install` fail # with a cryptic `edition2024` error instead of a clear "requires a newer Rust". rust-version = "1.88" description = "Mission control for your AI coding agents" authors = ["Riz "] license = "Apache-2.0" readme = "README.md" homepage = "https://github.com/RizRiyz/luvus" repository = "https://github.com/RizRiyz/luvus" documentation = "https://luvus.dev/docs/" keywords = ["terminal", "multiplexer", "tui", "agents", "workspace"] categories = ["command-line-utilities", "development-tools"] # Keep the published crate lean: ship source + README + license, not the design # notes, previews, or CI/packaging files. `/changelog` is deliberately NOT # excluded — `build.rs` embeds those notes into the binary for the in-app # changelog modal, so they must be present when the crate is built anywhere. exclude = [ "/docs", "/.github", "/assets", "/community", "/plugins", "/preview.html", "/preview.ans", "/MODULE-GUIDE.md", "/examples", "/CONTRIBUTING.md", "/SECURITY.md", "/install.sh", "/install.ps1", "/RELEASING.md", "/scripts", "/web", "/website", "/flake.nix", "/flake.lock", "/nix", ] [[bin]] name = "luvus" path = "src/main.rs" [features] default = [] # Opt-in benchmark and artifact generators. Keeping these out of the default # test registry avoids reporting deliberate developer commands as ignored tests. dev-tools = [] [dependencies] ratatui = "0.30" crossterm = { version = "0.29", features = ["serde"] } portable-pty = "0.9" bitflags = "=2.13.0" alacritty_terminal = { package = "luvus-alacritty-terminal", version = "0.26" } casefold = "=0.1.0" unicode-segmentation = "=1.13.3" unicode-width = "0.2" # Explicit terminal-native document previews. The parser is pure Rust and only # runs after the user chooses a Markdown/Mermaid preview action. pulldown-cmark = { version = "0.13.6", default-features = false } anyhow = "1" serde = { version = "1", features = ["derive", "rc"] } serde_json = "1" # Manual ORCH worker commands accept an executable plus quoted argv without # routing the task briefing back through an interactive shell. shell-words = "1.1" # SHA-256 tracks managed skill files and verifies release, theme, and diff # artifacts. The canonical Luvus skill itself is bundled with this release. semver = "1" sha2 = "0.10" # Module manifests (`luvus-module.toml`). toml = "0.8" # Format-preserving TOML edits (Kimi's `~/.kimi-code/config.toml` holds the # user's API keys + comments, so we edit it in place without a lossy round-trip). toml_edit = "0.22" bincode = { version = "2", features = ["serde"] } # Cross-platform local IPC: Unix-domain sockets on Unix, named pipes on Windows. interprocess = "2" # Cross-process startup lock so concurrent clients cannot orphan a live server. fs2 = "0.4" # Opaque server- and PTY-lifetime identifiers for the public terminal-backend # protocol. This calls the operating-system RNG directly; identifiers are not # derived from pane routes, PIDs, clocks, or process-global counters. getrandom = "0.3" # `luvus web` is an explicit foreground role. Its HTTP/WebSocket runtime is # constructed only for that command; normal TUI, CLI, and server processes do # not start an async runtime or bind a network listener. axum = { version = "0.8", default-features = false, features = ["http1", "original-uri", "tokio", "ws"] } futures-util = "0.3" tokio = { version = "1", features = ["io-util", "macros", "net", "rt", "signal", "sync", "time"] } # Calendar-safe IANA timezone conversion for daily and weekly automations. # Jiff is local-only: it reads the OS timezone database (with a Windows bundle) # and performs no runtime network access. jiff = { version = "0.2", default-features = false, features = ["std", "tz-system", "tzdb-zoneinfo", "tzdb-bundle-platform"] } # `libc` (setsid + macOS proc_pidinfo) is only needed on Unix. [target.'cfg(unix)'.dependencies] libc = "0.2" # Native Windows terminal-backend safety: owner verification for named-pipe # peers, PID-reuse-safe process creation timestamps, and one bounded ToolHelp # process snapshot for agent/runtime inspection. [target.'cfg(windows)'.dependencies] widestring = "1" windows-sys = { version = "0.61", features = [ "Wdk_System_Threading", "Win32_Foundation", "Win32_Media_Audio", "Win32_Security", "Win32_Storage_FileSystem", "Win32_System_Diagnostics_Debug", "Win32_System_Diagnostics_ToolHelp", "Win32_System_Console", "Win32_System_DataExchange", "Win32_System_Kernel", "Win32_System_JobObjects", "Win32_System_Memory", "Win32_System_Threading", ] } [profile.release] lto = "thin" strip = true # `vte`'s synchronized-update buffer is allocated lazily in our pinned local # patch. The upstream 0.15.0 release reserves 2 MiB for every terminal parser, # even when the terminal never uses synchronized updates. [patch.crates-io] luvus-vte = { path = "vendor/vte" } luvus-alacritty-terminal = { path = "vendor/alacritty_terminal" } # ── Linux packaging (docs/16) ──────────────────────────────────────────────── # luvus is a single static (musl) binary with no shared-library dependencies, so # a .deb/.rpm just drops the binary in /usr/bin and declares nothing hard. The # external tools it *optionally* shells out to (git tab, ssh remote, clipboard) # are Recommends/Suggests, never hard deps: luvus degrades gracefully without # them, and a minimal server should not be forced to pull git + gh. # Built + attached to each release by `.github/workflows/release.yml`. [package.metadata.deb] section = "utils" priority = "optional" # Static binary → no shared-lib Depends. Only soft suggestions. depends = "" recommends = "git, openssh-client, xclip" suggests = "gh, wl-clipboard" extended-description = """ Mission control for your AI coding agents: persistent panes, tabs, and \ workspaces that survive detach, a live sidebar of agent states, zero-config \ agent session resume, a built-in git tab, worktrees, remote attach over plain \ SSH, and an extension system. Ships as a single static binary.""" assets = [["target/release/luvus", "usr/bin/", "755"]] [package.metadata.generate-rpm] # `--target` rewrites this to target//release/luvus automatically. assets = [{ source = "target/release/luvus", dest = "/usr/bin/luvus", mode = "755" }] [package.metadata.generate-rpm.recommends] git = "*" openssh-clients = "*" xclip = "*" [package.metadata.generate-rpm.suggests] gh = "*" wl-clipboard = "*"