Repository navigation
1.4.1
A corrective release. No public API was added, removed, or renamed. Where two
shipped surfaces disagreed, or where behavior contradicted its documented
contract, the implementation was moved to match; several crash, hang, and
lost-input paths are closed.
Changed
- The generated help and the completion candidates list only what dispatch can
actually reach, and both advertise the shell built-insexitandquitin
the same place. A command registered under one of those names takes
precedence over the built-in. - A flag token resolves to the same option on every surface. Long aliases such
as--loudparse, and help and completion advertise them with two dashes;
-hand--helpare advertised as the built-in help only when no declared
option has claimed them. - The borderless and simple table layouts honor padding, border color, and
compact spacing, which previously applied to the boxed layout only. - Progress and table options are normalized through a single path, so a
multi-bar total, acolWidthsentry below the padding width, and a column
keyedconstructorortoStringbehave as documented. - Caller-supplied text is sanitized where it reaches the terminal, covering
bar characters, spinner frames, table borders and truncation markers, help
text, and prompt messages. logger()accepts only its documented options, and a rejected numeric option
value reports whether it failed the declared range or the safe integer bound.- The toolchain moves to the native TypeScript build; Biome, Vitest, and the
pinned Node.js, Yarn, and npm versions are updated with it. - The documentation is restructured into per-topic guide pages in both
languages, with diagrams and a separate API reference; the READMEs are
reduced to an overview that links into the guide. The exit-code, subpath
export, and quick-start descriptions are corrected to match what ships.
Fixed
- The first Ctrl-C during concurrent command execution cancels the running
commands instead of terminating the process. - Every registered
exitlistener runs to completion before a forced quit
terminates, including on the direct execution entry point. - An empty-string argument keeps its position in direct argv mode instead of
being dropped and shifting the arguments after it. - A rejected asynchronous cancel handler no longer terminates the process, a
prompt opened after stdin has ended no longer hangs, and a non-string value
passed to the logger no longer throws. - The completion deadline applies to every user-supplied provider, so a
provider that never settles can no longer freeze the shell. - Completion replaces the word the terminal actually holds, so a candidate
inserted after a quote, a backslash, or a pipe no longer corrupts the line. - A password prompt keeps its label readable while the value is being edited.
- A prompt decides its terminal mode from the input stream alone, so Ctrl-C is
handled when stdin is a TTY and stdout is redirected. Thestderroption is
accepted where it applies, on password prompts. - Leaving a mode always returns to the top level, input typed before a command
finished is redisplayed afterwards, and a closed stdin is not reopened. - With color disabled, an interpolated
ctemplate no longer emits escape
sequences, and sanitizing multi-line text preserves line and word boundaries
instead of joining words together. - A color chain responds to runtime protocol properties such as
thenand
toStringinstead of throwing. - A cursor-restoration handler is registered per signal, so an unrelated
listener on one signal no longer disables restoration for the others. - Log lines no longer merge into the line a live progress frame is drawing.
- Colon-separated SGR colors are recognized when closing terminal state, and
wide status emoji are measured as two columns. - Interactive history reports a permanently failing save once instead of on
every command. - A released progress indicator that never drew writes nothing, and adding a
bar after the group is closed returns an inert handle. - The published tarball ships a single README.