The postbuild step was using cp and chmod, which only work on Unix. On Windows npm run build would run tsup successfully but then fail at the cp command, leaving dist/cli.cjs missing. Since the package.json bin field points there, npx torlnk would just say the command isn't recognized.I replaced the shell one-liner with scripts/postbuild.mjs
Small Node script that copies cli-entry.cjs to dist/cli.cjs and marks it executable. chmod is a no-op on Windows but still does the right thing for the published package, so the output is identical across Windows, macOS, and Linux.
Restore the seeders-desc default ordering that the new sort feature dropped,
so the healthiest torrents stay on top until `s` is pressed. Trim the
contextual footer (terse labels, folder key in the `?` overlay only) so the
added sort and folder keys never wrap it past one line. Gate the
download-folder editor on its own `editingFolder` flag instead of the shared
capture state, fixing the leak where `?`, `q`, and `m` fired through while
typing a path.
The npm name and command become torlnk (npx torlnk) to clear npm's
"too similar to comlink" guard, mirroring the sndcli/soundcli split. torlink
stays the brand everywhere it matters: the logo wordmark, app and terminal
title, version string, the data and downloads folder (APP_NAME), and the repo.
Updates the cli usage lines, readme install commands, and the user-agent
package url to match.
Reword the c help labels (Downloads "Cancel or remove from list", Seeding
"Remove from list", dropping the Downloads cross-reference) and add a help
note that downloaded files always stay on disk, so cancel and remove never
read as deleting your media. Also trims the over-specific c sentence from the
readme and refreshes the npm description and keywords.
Finished downloads now keep seeding automatically and you opt out per item with
p, reusing the live torrent instead of tearing it down. Resume and restore seed
from the .torrent metadata captured at download time, so they verify the local
file immediately rather than depending on re-fetching metadata from the swarm.
Quitting now flushes queue, history, and seeds synchronously and exits
immediately, fixing the hang when quitting while seeding or with a paused seed.
Paused seeds persist their state and stay paused across restarts. Hide the
hardware cursor on the splash, and clarify that c removes a finished item the
same way in Downloads and Seeding.
Tests are isolated from the real data dir via a TORLINK_STATE_DIR override plus
vitest config, so runs never touch user data. Adds scripts/verify-seeding.ts
(npm run verify:seeding), an offline-deterministic harness proving seed, pause,
and resume transfer real bytes.
Curated, multi-source torrent search and download from the terminal:
concurrent search across built-in sources with streamed, source-tagged
results; a download-only webtorrent engine with true pause/resume and
restart recovery; magnet paste; and a calm Ink + React TUI. No indexer
server, no setup.