You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Panel commands on the tuiHost seam.ctx.tuiHost.registerPanel() lets a
plugin contribute a command panel — rows the host draws, an enter action,
and an optional masked secret prompt — so a feature's UI ships with its
plugin instead of this app. moqi-jev-loop uses it for /JevLoop (its API key
and four gates). Command matching is now case-insensitive, so a panel
registered as JevLoop answers to /jevloop.
Changed
shift+enter is the composer's carriage return. Enter still submits; shift+enter (or ctrl+j) inserts a newline, so a draft can span several
lines. Bracketed paste is enabled, so a multi-line paste is inserted whole
rather than sending on its first line.
The dshfind listing is documented as automatic. The repository carries
the dsh-plugin topic its marketplace indexes, so the README no longer
describes a listing step that no release needs.
A plugin panel cannot shadow the app's own commands. The palette and runCommand now agree: on a name collision a built-in or Harness command
wins, and a panel answers only to a name both leave free.
Fixed
CSI-u and modifyOtherKeys key reports are decoded. Terminals such as
Ghostty and foot report modified keys as ESC [ 13 ; 2 u (shift+enter) or ESC [ 27 ; 5 ; 13 ~ (ctrl+enter) rather than a bare control byte; the
decoder now names those keys instead of dropping them.
ctrl+j inserts a newline, as documented. The decoder had folded both
Return (\r) and line feed (\n) into enter, so the advertised ctrl+j
newline submitted instead. Return and line feed are now distinct.
/resume lists stored sessions again. Two defects left the picker
empty: the query call passed a plain object where the session-query service
takes an optional AbortSignal (signal?.throwIfAborted() threw, and the
failure surfaced as "no earlier sessions found"), and the row mapper read id/createdAt off the top level of rows that carry them nested inside header, so every row was filtered out. The mapper now reads both shapes,
and no signal is passed. /tree benefits from the same fix.
A panel survives a failed action or a cancelled prompt. Enter on a panel
row used to close the panel and leave only a status line behind when the
action threw; the panel now stays open and refreshes.