Releases: dawiisss/vet
Releases · dawiisss/vet
1.0.8
Added
- better-sqlite3 migration: Replaced
node:sqlite(DatabaseSync) withbetter-sqlite3for the history database, providing ~5-10x faster synchronous SQLite operations and significantly reduced main thread blocking. - WAL journal mode: History database now uses WAL (Write-Ahead Logging) for improved concurrent read performance.
- SQLite write performance (
synchronous = NORMAL): Addeddb.pragma("synchronous = NORMAL")to database initialization to bypass immediate disk synchronization under WAL mode, dramatically optimizing write speeds. - Cached prepared statements: Frequently-used SQL statements (
INSERT INTO sessions,INSERT INTO session_chunks,INSERT INTO session_search,UPDATE sessions SET closed_at) are now prepared once at init and reused, eliminating per-call prepare overhead. - WAL checkpoint on shutdown:
cleanupHistoryDb()now checkpoints the WAL before closing, ensuring a clean.dbfile on exit. expandHomeutility: Proper~and~userpath expansion for workspace file operations, replacing fragile regex-based tilde expansion.logSensitivePathAccessfunction: Replaces the previously-unconditionalisPathAllowed()(which always returnedtrue) with a function that resolves and logs access to sensitive paths (.ssh,.gnupg,.aws, vet config) while still allowing full filesystem access..agents/and.Jules/in.gitignore: Added per project's own convention.
Fixed
- Config password redaction for new SSH hosts: New SSH hosts submitted with
__redacted__passwords now have the key deleted rather than set to"", preventing accidental credential loss. - Docker shell
connectionTargetoff-by-one:args.indexOf("-it")returning-1causedargs[0]to be used as the container name. Now correctly handles missing-itflag. useConfigStorerace condition:isInitializedwas set totruesynchronously beforeconfigApi.get()resolved. Moved into the.then()callback so the state reflects actual initialization.- Adblocker memory leak:
blockedCountsandlastHostnameMaps now clean up on webviewdestroyedevent instead of growing indefinitely. - LIKE wildcard injection in browser history search: User-provided
%and_characters in search queries are now escaped, and theESCAPE '\\'clause is explicitly specified. structuredCloneinstead ofJSON.parse(JSON.stringify(...)): Config deep cloning now usesstructuredClone()instead of the lossy, slow JSON round-trip.process.envspread dropsundefinedvalues: Replaced unsafe{ ...process.env } as Record<string, string>withObject.fromEntries(Object.entries(process.env).filter(...))to correctly handleundefinedenv values.- Pre-existing
mainWindownull bug:mainWindow = createWindow(isTransparent)is now called beforeinitConfigManager(mainWindow), fixing a null pointer crash in the main process startup flow. - TitleBar Button Hover States: Fixed an issue where inline
backgroundandcolorstyles inTitleBar.tsxoverrode the hover styles inglobal.css(caused by the removal of!importantflags in version1.0.7), by moving base backgrounds and colors directly to CSS classes. - Welcome Modal Race Condition: Fixed a race condition where the onboarding welcome modal would trigger on app startup before the persisted configuration was loaded from disk, by checking the config store's
isInitializedstate before evaluatingshowIntroOnStartup. - Adblocker catch block formatting: Fixed the indentation formatting of the navigation error catcher block in
adblocker.ts. - Deterministic sorting on history queries: Modified history and chunk queries in
historyDb.tsto include secondary sort keys (s.id DESC/id ASC) to ensure consistent sorting order and prevent test non-determinism. - Empty catch blocks annotated: Added explanatory comments to previously-silent catch blocks in
adblocker.ts,sysinfo.ts,index.ts, andsplitActions.ts. - Debug log removed: Removed
console.log("[adblocker] cosmetic filter for", url)that fired on every cosmetic filter application. install.shversion mismatch:FALLBACK_VERSIONupdated from1.0.6to1.0.7to matchpackage.json.EventEmitter.defaultMaxListenerscomment: Added documentation explaining why the global override exists and that per-emitter limits are preferred.mainIndex.test.ts: Updated mocks forelectron(addedshell),fs,json5, and fixedinitAdblockerassertion for lazy-loading change.sysinfo.test.ts: Added mocks for../main/pty(getPtyPids) andapp.getAppMetricsto prevent ESMuuidimport failure.- Prune batch size: Size-based history pruning now deletes 100 sessions per iteration (up from 10), reducing loop iterations from potentially 1000 to 100.
- Prune batch deletes wrapped in transaction: Size-based deletes now use
db.transaction()for atomicity.
Changed
- Workspace
DirectoryIteminterface: Replacedany[]with a typedDirectoryIteminterface in workspace directory listings. flushBuffertransaction: ManualBEGIN TRANSACTION/COMMIT/ROLLBACKreplaced withbetter-sqlite3'sdb.transaction()for automatic rollback on errors.- PRAGMA API: All
db.exec("PRAGMA ...")calls replaced withdb.pragma()(better-sqlite3 idiomatic API;getLogicalDatabaseSizeMbnow uses{ simple: true }for direct number returns). - Adblocker
web-contents-created:wcIdis now captured outside the navigation handler so it's available in thedestroyedcleanup listener. - Adblocker lists simplification: Removed redundant/overlapping filter lists (AdGuard, Fanboy, and custom uBlock repos) and simplified to
@ghostery/adblocker-electron's consolidatedfullListsCDN asset, optimizing memory, parsing speed, and network usage. - System Info Polling Split: Polling logic in
sysinfo.tshas been optimized. Fast-changing metrics (CPU, memory, network, disk IO, temperature) continue to poll every 2s, while slow-changing/static metrics (mounted disks size, battery, graphics info) are cached and queried only once every 10s, reducing system call and subprocess spawn CPU overhead.
1.0.7
Added
- Dedicated Test Suites: Added new test suites adblocker.test.ts and sftp.test.ts to cover critical adblocking and SFTP connection logic.
- Cross-Platform CI: Added Windows (matrix) testing to ci.yml to detect cross-platform compile/runtime errors.
- Advanced System Metrics: Expanded the System Metrics tab to monitor real-time network speeds, disk read/write throughput rates, graphics (GPU) usage and temperature, battery charging levels, and Vet's own CPU/RAM resource footprint.
- Visual Dashboard Cards: Redesigned the metrics panel into beautiful, theme-aligned dashboard cards with clean progress indicators and custom scrollbars.
Fixed
- History Database Pruning: Resolved the infinite loop and size-based pruning bug using logical database page metrics and replaced synchronous blocking
VACUUMcommands with incremental vacuuming. - IPC Security Redaction: Redacted plaintext SSH passwords/passphrases sent over IPC in renderer config queries, and securely merged them in the main process when setting configurations.
- Path Traversal Warnings: Enforced warning telemetry on sensitive path operations (such as
.sshand.gnupgaccess) inside workspace directory listings. - Terminal Session Ownership: Implemented terminal write and destroy ownership checks via sender verification.
- Shell Validation Bypass: Removed executable verification bypasses and implemented a user-configurable whitelist option.
- Lifecycle Resource Leaks: Fixed event listener and process/interval leaks by establishing explicit cleanup handlers (
FSWatcher, sysinfo pollers, adblocker webRequest events, updater intervals, SFTP connections) triggered on app quit. - Jest Test Compilation: Created tsconfig.test.json to resolve TS5023
filesoverride issues in Jest diagnostic runs, and fixed thefsmock issue inpty.test.ts. - CSS Hover Variables: Removed
!importantflags from hover classes to restore CSS theme customizability, and scoped.extract-btnpositioning rules to.terminal-container. - Assertion-Less and Empty Tests: Added valid assertions to tab-switching tests in
Sidebar.test.tsxand rendering assertions toSnippetLibraryPanel. - TypeScript Strict Warnings: Resolved all remaining compiler errors and warnings in both node and web renderer processes (e.g. missing
shellimport, strict size destructuring, and undefined object properties). - Disk Space Partition Deduplication: Filtered out non-physical virtual filesystems (e.g.
efivarfs,tmpfs, loop/FUSE mounts) and deduplicated multiple mounts mapping to the same physical device partition (such as Btrfs subvolumes).
Changed
- Shared Utilities Refactoring: Extracted duplicated
pathsEqual, directory sort, and default browser homepage strings into a single shared utility pathUtils.ts consumed by both main and renderer processes. - Removed macOS targets: Excluded unsupported macOS build tasks from
package.jsonand workflow scripts. - Top-Level Imports: Cleaned up inline require statements in
index.tsandsession.tsto improve dependency loading performance.
1.0.6
What's Changed
- Bump dompurify from 3.4.8 to 3.4.11
- Override undici to >=7.28.0 for transitive CVE fixes
- Remove stale package-lock.json (pnpm project)
- Bump version to 1.0.6
Full Changelog: v1.0.5...v1.0.6
1.0.5
Added
- User Onboarding Welcome Guide: Designed and implemented an interactive, multi-slide onboarding welcome guide (
IntroModal) to showcase key features on startup (Multi-Pane Splits, Web Browser, Sidebar panels, Command Palette, SQLite History, and Keyboard Shortcuts). - Live Theme Customizer: Added a live theme selector on the final onboarding slide to let users preview and select built-in application themes (Dracula, Nord, Catppuccin, One Dark) in real time.
- Onboarding Config Persistence: Saved the onboarding state (
showIntroOnStartup) toconfig.json5so the welcome guide won't reappear on launch once skipped or completed, but remains replayable via the About Modal and Command Palette.
Fixed
- Session Layout Persistence: Wired up window terminal API session saving and loading to automatically persist and restore complex tab and split-pane layouts across app restarts.
- React Key Collision & Tab Counters: Fixed duplicate tab key warnings (e.g. duplicate
tab-2keys) on session restoration by migrating tab ID and shell counters to Zustand state, resolving circular dependency initialization issues betweenuseTabStore.tsandtabActions.ts. - Fastfetch/Startup Size Persistence: Fixed rendering layout artifacts and horizontal clipping on startup commands (like
fastfetch) in narrow/midsize terminals by calculating estimated dimensions from Electron window bounds on spawn and executing initial ResizeObserver layouts instantly (without 50ms debounces).
Changed
- Major Refactoring and Architecture Improvements:
- Preload Isolation & Dry IPC: Reduced preload code by 150+ lines using declarative factory helpers (
invoke,send,on). - God Component Decompositions: Split the giant 800+ lines
App.tsxinto clean components:AppShellcontainer,ThemeProviderCSS injector,ModalManager, and auseKeybindingshook. - useTabStore Split: Decomposed
useTabStore.tsby extracting action files for tab CRUD, split pane layout, and window detaching, fixing tab hibernation bugs. - Terminal Lifecycle Extraction: Moved all xterm and fit/webgl/links/image addon lifecycle/mounting logic into a reusable
useTerminalhook. - Local/SSH PTY Isolation: Separated local PTY spawning from SSH PTY spawning in
pty.tsandsshPty.ts, fixing memory leaks on exit. - Standardized UI Components: Created reusable shared
<Panel>,<SettingsField>, and<ModalOverlay>components, consolidating backdrop/ESC/focus-trap behaviors. - Custom useSearchableList Hook: Extracted list filtering and keyboard selection/scrolling logic into a custom hook consumed by the Command Palette and Clipboard.
- Declarative Sidebar Mapping: Replaced duplicate JSX blocks in
Sidebar.tsxwith a mapped array configuration. - Runtime Config Validation: Implemented settings sanitization/clamping and syntax error broadcasting (
config:error) via IPC, rendering warnings on a non-disruptive banner. - Stricter Type Safety: Enabled strict TypeScript flags (
noUncheckedIndexedAccess,exactOptionalPropertyTypes) in all config files and resolved all compiler issues. - CSS Design Tokens: Added font-size, spacing, border-radius, shadows, and transitions scales to
global.cssand replaced hardcoded values. - ESLint React Config: Configured
react: { version: "detect" }in the flat ESLint configuration to enable hooks lint checks.
- Preload Isolation & Dry IPC: Reduced preload code by 150+ lines using declarative factory helpers (
1.0.4
Added
- Persistent Browser History: Implemented automated web browsing history tracking. Visited pages are persisted in the SQLite history database with automatic deduplication of consecutive identical URLs and automatic database pruning.
- Unified Sidebar History Panel: Integrated a high-fidelity toggle control (
[ Terminal ] [ Browser ]) in the sidebar History panel. Users can view, search (by URL or title), clear, and delete specific visited page records. Clicking a history item opens a new Web Browser tab navigated to that URL. - Browser Find-in-Page Overlay: Integrated the reusable
SearchOverlaycomponent inside the sandboxed Web Browser view, enabling unifiedCtrl+Ftext searching with match counts, Next/Previous controls, case-sensitivity toggles, and smooth dark-theme styling. - Browser DevTools Integration: Added support for launching the guest browser's developer console directly via a new toolbar button (
</>) or configurable keyboard shortcuts (defaulting toF12). - Command Palette Browser Actions: Integrated "Browser: Open Developer Tools" and "Browser: Find in Page" commands into the Command Palette, appearing dynamically only when a browser pane/split is active.
- Editable Keybindings: Added
browser:devtoolsto the Settings Keybindings list, allowing users to customize the devtools shortcut. - Community Standard Files: Added a repository Code of Conduct (
CODE_OF_CONDUCT.md) based on Contributor Covenant v2.1 and a Pull Request template (.github/pull_request_template.md).
Fixed
- Dependency Security Vulnerabilities: Resolved all 18 moderate-security warnings for
js-yaml(Dependabot Alert #4), the high-severity alert forform-data(Dependabot Alert #5), and the high-severity RCE alert foresbuild(Dependabot Alert #3) by adding nested dependency overrides. - pnpm v11 Configuration: Migrated package overrides and build scripts allowance into a root
pnpm-workspace.yamlto comply with pnpm v11 specification, resolving package manager warnings. - Detached Window Styling: Fixed a bug where detached tabs lost the theme's CSS variables, resulting in an unstyled top bar layout. The detached container now receives the exact same theme variables style mapping.
- Detached Web Browser Layout & State Preservation: Fixed a bug where detaching or reattaching a web browser tab caused it to lose its layout (loading as an empty terminal) and reset to the homepage. The tab is now correctly reconstructed as a browser tab, and the active page URL is preserved using dynamic DOM query serializations.
- TypeScript Ambient Type Resolution: Added
src/types.d.tsto theincludearrays intsconfig.node.jsonandtsconfig.web.json, fixingCannot find nameerrors for ambient interfaces likeSftpApi,TerminalApi, etc. - Terminal Write Return Type: Corrected the
TerminalApi.writereturn type fromPromise<void>tovoidto match the fire-and-forgetipcRenderer.send()implementation. - Null Safety in Tab Extraction: Added explicit null guard for
activeTabIdbefore passing it toextractToTab(), resolving a strict-mode type error. - SSH Host Type Narrowing: Added a type guard filter on
config.sshHostsin the command palette to handle theSshHost | { name: string; command: string }union, preventing property access errors on command-based SSH entries. - Browser Split Pane Navigation & Loops: Fixed issues with Electron webview browser panes where splitting a tab resulted in the split pane opening the homepage instead of preserving the current page URL. Resolved double-loading abort errors on mount and resolved navigation loops (spamming back-and-forth between a new URL and the homepage) by removing legacy navigation override checks.
- Browser Split Pane Focus & Context Menu: Captured standard DOM focus and mousedown events inside
<webview>elements to ensure that clicking inside a webview correctly updates the active focused pane and keeps keyboard input correctly routed. Also added context menu close support for browser panes.
1.0.3
Added
- Auto-Updater Integration: Implemented a secure, user-controlled auto-updater for Windows (NSIS/ZIP) and Linux (AppImage) using
electron-updater. - TitleBar Update Notification: Added a download icon with a pulsing green notification badge next to the "About" button in the TitleBar that appears only when an update is available.
- Dedicated Update Modal: Created a modal that presents release details, release notes, and a live download progress bar (displaying percentage, download speed, and bytes transferred).
- Update Simulator: Added a simulation mode in development environments (accessible via "About Vet" developer controls) to allow end-to-end testing of the update flow (including live download animations and hot-relaunching).
Fixed
- Theme Accent Color Persistence: Resolved a bug where the application highlight color (
--app-accent) remained purple across different themes. Defined signature accent colors for all built-in themes (e.g., Frost Cyan for Nord, One Dark Blue for One Dark) and updated the accent resolution logic.
v1.0.2
Version 1.0.2 introduces security updates, dependency resolution fixes, test suite corrections, and comprehensive community documentation templates.
Security and Dependency Management
- Vulnerability Remediation: Resolved four high-severity vulnerabilities affecting esbuild versions 0.17.0 through 0.28.0 (covering remote code execution and arbitrary file access).
- Dependency Overrides: Configured a package override to enforce esbuild version 0.28.1, addressing downstream vulnerabilities reported in both vite and electron-vite.
- Peer Dependency Alignment: Fixed npm installation failures (ERESOLVE errors) by restoring version compatibility between electron-vite and @vitejs/plugin-react on the stable branch.
Testing and CI/CD
- Test Case Resolution: Fixed a ReferenceError in the sysinfo test suite (src/tests/sysinfo.test.ts) where an undefined callback variable was invoked instead of the mocked timeout callback. All 31 test suites (281 test cases) now pass successfully.
Documentation and Compliance
- Standard Meta-Files: Added standard project files to meet repository compliance guidelines:
- LICENSE: Added the official MIT License.
- CONTRIBUTING.md: Defined guidelines for codebase contributions, testing, and formatting standards.
- SECURITY.md: Outlined the policy for reporting security vulnerabilities privately.
- SUPPORT.md: Documented initial troubleshooting procedures and discussion channels.
- ACKNOWLEDGEMENTS.md: Cataloged licensing and repository details for all 44 third-party open-source dependencies.
- README Enhancements: Restructured the main README documentation to include a Table of Contents, relative directory navigation, metadata badges, and an FAQ section.
1.0.0
[1.0.0] - 2026-06-10
This release marks the initial major version milestone (1.0.0), featuring expanded Linux package support, a new About modal, improved application launch performance, and a streamlined installer.
Added
- About Modal: Created a visually premium, glassmorphic About Modal displaying project metadata, built-in features, and licensing. Integrates with the Command Palette (
App: About Vet), window TitleBar button, and ESC key handlers. - Expanded Linux Packaging Targets: Configured
electron-builderto bundle.deb(Debian/Ubuntu) and.rpm(RedHat/Fedora) packages alongside AppImage and tarball formats. - Release Installer (
install.sh): Added a curl-compatible standalone installation script. It fetches the latest release assets from GitHub, installs the optimal format, downloads icons, and generates local desktop launchers. - Maintainer Configuration: Added project author and support email configurations to package specifications to facilitate package building.
Improved & Optimized
- Lazy Loading: Refactored major modal dialogs (Settings, History Viewer, Command Palette, File Preview, Clipboard Preview, and About Modal) to load dynamically, reducing startup loading latency.
- Resize Performance: Added debounced resizing handlers to the xterm.js
FitAddonto reduce redraw overhead during rapid panel window changes.
Fixed & Cleaned
- Native Rebuild Compilations: Configured
nanpackage overrides to resolve compilation conflicts when building native dependencies under newer Electron environments. - Script Runner Testing: Resolved unit test regressions in panels and runners by mocking workspace APIs and handling error states gracefully.
- Repository Cleanup: Removed unused test scripts, legacy configurations, and boilerplate workspace files to slim down source repository sizing.