devtrim 0.8.0-beta1
Pre-release
Pre-release
·
5 commits
to main
since this release
Immutable
release. Only release title and notes can be modified.
Security
- The demo-video dependency graph moves
fast-urifrom 3.1.5 to 3.1.6, clearing four high-severity advisories (host confusion via skipped IDN canonicalization and via percent-encoded scheme normalization, plus SSRF via malformed IPv6 normalization and via repeated hostname percent-decoding). It reaches the tree four levels down, through@remotion/clitowebpacktoschema-utilstoajv, and does not enter the shipped binary — but the video graph is a release gate, so the advisory blocked the release until fixed
Added
devtrim optimizeruns macOS maintenance tasks as typed commands with fixed argv and no caller-supplied data: QuickLook thumbnail cache, user font caches, and the Launch Services database.--applyrequires an explicit--task, becauseplan_dangertakes the maximum and one confirmation must not authorize unrelated work. A task that cannot do what its name says is not offered: root-requiring or hours-long ones, and DNS, becausedscacheutil -flushcachedoes not clear themDNSResponderresolver cache it would advertisedevtrim status --watchis a live dashboard: sampling runs on a worker thread and the interface redraws when a report lands, so a slow probe delays the numbers rather than the keyboard. Every metric keeps a fixed row slot and an unreadable one renders asunavailable, so a number never moves because a probe failed once. Quitting does not join the sampler: the stop flag is only observed between samples, so joining would makeqwait out an in-flight probe and a hung system command would block the exit entirely. It has no JSON form and says so instead of ignoring the flagdevtrim uninstall <app>lists the paths macOS keys by an application's exact bundle identifier, read from the bundle's ownInfo.plist: support directories, caches, containers, preferences, saved state, HTTP storages, WebKit data, and launch agents. Matching is exact —com.example.thingnever selectscom.example.thingy, and a display name never selects by word — which is why it works at all: Amazon Kindle iscom.amazon.Lassen. It is a conservative report rather than an inventory, and says so: an app storing data under a product name is invisible to identifier matching, and group containers are omitted because their names come from an arbitrary entitlement. Report-only, becausesafety::is_protectedrefuses/Applicationsand everything under~/Libraryoutside a four-entry allowlist, and widening that would weaken every command rather than only this one