Repository navigation
v0.8.0
Added
-
Which-key overlay (
Ctrl+Shift+K) lists the live keymap chords with labels, fuzzy-filters them, and runs the selected action with Enter. While a multi-key sequence is in progress, a prefix hint shows the remaining chords (samekeybindsmap, not a second keymap). Esc cancels the prefix. -
Copy path (
Ctrl+Shift+C, Files menu, command palette) puts the hovered or tagged full path(s) on the OS clipboard. Command palette is bound asCtrl+Shift+Pin the shipped keymaps. -
Short threat model (
docs/THREAT_MODEL.md) for plugins, SSH presets, updates, and the elevated helper. -
Structured tracing architecture (
tracing,tracing-subscriber,tracing-appender) with rolling daily logs and environment filter control. -
Cross-platform POSIX and Windows signal handling (
SIGTERM,SIGINT,SIGHUP,SIGQUIT, and console control events) for clean TUI restoration. -
CI test coverage workflow using
cargo-llvm-covto measure and report codebase test coverage. -
Plugin confirm, input, and which-key dialogs are real TUI overlays (
pairee.confirm/pairee.input/pairee.which); Enter/Esc (and Y/N) reply to the waiting plugin. -
Typed
Fileuserdata (name,path,url,size,is_dir,is_symlink) andpairee.cx(cwd, hovered, selected) filled insidepairee.sync. -
Lua
Filemetadata:mime,mtime,is_hidden,is_exec(Lua API 1.1.0). -
Plugin filesystem extras:
mkdir,remove,rename,copy,read_dir, andfile()(File userdata). -
pairee.Commandprocess builder with pipedChildstreaming (write_all,read,wait_with_output). -
Optional feature flags in Settings → System: SSH, plugins, and image preview (Git already had a toggle). Existing configs stay enabled.
-
EN/ES translation keys are now complete and checked in CI (
scripts/check_translations.py,docs/i18n.md). -
Parser smoke-fuzz tests (globs, descript.ion, plugin manifests, settings TOML) so junk input cannot panic.
-
CI tests run on macOS as well as Linux and Windows.
-
First-run keymap onboarding (Norton / Neovim / VS Code). Existing configs skip the dialog.
-
Versioned Lua plugin API v1.1.0 (
pairee._lua_api_version,docs/api/lua/). -
CI acceptance plugins under
tests/plugin_acceptance/(surface, fs, cx/utils, Command echo). -
pairee.emit,pairee.notify, andpairee.file_cacheare callable functions (they were nested tables). -
Improvement tracking document at
docs/IMPROVEMENT_PLAN.mdwith phased roadmap and progress checkboxes. -
Integration tests under
tests/cover isolated temp workspace, Settings TOML roundtrip, shipped keymap presets, packaged EN/ES keys, AppState panel roots, and zip extract. -
Project-level
rustfmt.tomlandclippy.tomlfor consistent CI quality gates. -
Declared MSRV (
rust-version = "1.88", required bytui-scrollbar) and package metadata inCargo.toml. -
Transfer Strategy backends (
local/ssh) undersrc/fs/transfer/backend/with unified job submission. -
Command palette (
Ctrl+Shift+P) to filter and run logical actions. -
Fractional scrollbars via
tui-scrollbar(shared helper insrc/ui/scrollbar.rs) on help, viewer/quickview, history lists, transfer panel, git panel, and related popups. -
Mouse drag and jump-to-click on scrollbars (
ScrollBarInteraction, hit targets registered each frame,EnableMouseCapture). -
Unicode-aware file-name truncation helpers (
unicode-width+unicode-segmentation) for panel columns. -
Bracketed paste: pasted text lands in the CLI or the open text prompt (rename, apply command, mkdir, …) as one string instead of fake keystrokes.
-
Settings → Interface shows keymap validation (errors, warnings, bound count) and a “View keymap issues” overlay. Far-style
Gray+/Gray-/Gray*aliases are documented as mapping toPlus/-/*. -
CI draw/resize smoke tests via
ratatuiTestBackend (not a substitute for a human pass on Windows Terminal / conhost / Linux). -
CI
cargo denyjob checks licenses, RustSec advisories, yanked crates, and crate sources (deny.toml).
Improved
-
Complete codebase modularization under the Single Responsibility Principle (SRP), bringing all
.rsfiles across the project strictly below 300 lines (zero files exceed 300 lines). -
Decoupled
PopupTypevariants into dedicated sub-structures (GitPanelState,SshConnectPromptState,ConfigurationDialogState,PluginMenuState,CopyMovePromptState) to keep overlay payloads modular, lightweight, and maintainable. -
Background Terminal (
command &) and apply-command run on a real PTY (Windows ConPTY / Unix pty), so programs that check for a TTY can emit colors and use normal line buffering. -
Apply-command (
Ctrl+G) opens the Terminal screen and shows captured stdout/stderr with ANSI colors, while the Transfer Engine still tracks progress. -
Command palette entries come from a shared
ActionDefcatalogue (id+ category) instead of a second hardcoded name list. -
Native 7z extract/list uses maintained
sevenz-rust2instead of unmaintainedsevenz-rust(Zip-Slip sanitization kept). -
Command palette filters with Helix
nucleo-matcher(fuzzy ranking) instead of substringcontains. -
MSRV is 1.93 (required by
sevenz-rust2). -
Clipboard writes use
arboardinstead of shelling out toclip/xclip/wl-copy(update “copy command” and Copy path). -
Background Terminal screen (
command &) renders ANSI SGR colors from captured stdout/stderr instead of showing raw escape codes. -
Full-screen terminal clear runs inside the synchronized-update region, and only on resize or after a native TTY/admin restore.
-
Keyboard enhancement and focus-change sequences are enabled only when the terminal supports them (Unix query; Windows CSI push), and popped only if they were pushed.
-
File-association and CLI command lines split with POSIX
shlex(quoted words) on Unix, and quote-aware tokens on Windows so"C:\\Program Files\\App\\app.exe" %fstays one program name. -
Keybindings engine rebuilt on the
keybindscrate: invalid chords are rejected, duplicate chords across actions are rejected, and Norton/Neovim/VSCode presets load from validated TOML. -
TUI draw path uses synchronized updates and dirty-flag rendering to reduce flicker/glitches.
-
Scroll indicators use theme colors and proportional thumbs instead of ratatui’s full-cell default.
-
Clippy collapsible-if and related lint cleanups so
cargo clippy -- -D warningsis green again. -
Clippy 1.98 cleanups (
useless_borrows_in_formatting,question_markin Luat()lookup). -
CI
checkworkflow now targetsmaster/main, runs tests on Ubuntu and Windows, uses Node 24-aligned actions, and rejects crate-levelclippy::allallows. -
Documentation index (
docs/README.md) lists design docs with Implemented/Partial/Planned status. -
README (EN/ES) links corrected to
help/enandhelp/es, project tree updated, plugin system no longer labeled as only planned. -
Transfer worker split into focused modules (scan, delete, copy, helpers) under
src/fs/transfer/worker/using a facade orchestrator. -
Copy, move, and delete (including SSH) now use the Transfer Engine progress UI instead of the legacy modal-only path.
-
Wipe, compress, extract, and apply-command jobs use the Transfer Engine queue and minimized panel (one consistent progress UX).
-
Cooperative cancel for archive compress/extract (native formats check cancel between entries; external 7z is killed on cancel).
-
Session state grouped into
PanelPair,HistoryState, andUpdateStateonAppState. -
Split oversized UI modules (transfer panel, history lists, settings actions, plugin dev options) into focused files.
-
Internal F3 viewer split into
src/ui/viewer/{state,text,hex,image}.rs. -
Overlay
PopupTypepaste handling and plugin widgets live in focused files undersrc/app/state/popup/. -
Overlay dialogs live in
src/app/state/popup/(QuickViewDialogboxed; config settings boxed) soPopupTypeis no longer a huge enum payload. -
Plugin updater, directory listing, and Settings split into focused modules.
-
Dialogs use a
DialogStack(state.dialogs) with replace/push/pop instead of a singleOptionpopup. -
Background channels (search, SSH, terminal, updates, plugin progress) are polled in place instead of take/put-back.
Changed
- Application logic lives in the
paireelibrary crate;src/main.rsis a thin tokio entry so tests canuse pairee. - Replaced inherited rustc-style
.gitignorewith a Pairee-specific ignore list. - Plugin manager core module renamed to
lifecycleto avoid module-inception nesting. - Long-running file jobs no longer use a separate modal progress dialog.
Deprecated
Removed
- Local temporary
.tmp*workspaces and the vendored localexample/reference tree from the working tree (still ignored by git). - Legacy
ops_workerspawn stack,progress_rx/BackgroundOpContext, and theCopyProgressmodal UI.
Fixed
- Trusted Lua plugins load again (
StdLib::ALL_SAFEinstead ofALL, which rejecteddebugundernew_with). - Clippy is enforced without
#![allow(clippy::all)]insrc/main.rs. - Outdated status banners on transfer-engine and plugin-system design docs.