Releases: OmnyGrid/omnyshell
v1.8.1
1.8.1
Changed
- Upgraded
omnydriveto^1.1.2. Picks up the fix that prevents a mount
sync from silently discarding local-only changes. OmnyShell already guards
this inDriveManager._autoDirection(read-only mounts only push, read-write
mounts only pull when the local copy is unchanged, and a two-sided change
surfaces a conflict); added regression tests covering remote→local pulls of
new node files, read-only mounts never pulling, and divergent syncs refusing
to clobber local work.
v1.8.0
1.8.0
Added
- Peek at a session's current screen without attaching. The new
omnyshell sessions peek <node> <session-id>prints a session's current
screen — the same bytes a resume would paint, captured by the node's
alt-screen-aware replay buffer — without connecting to it or delivering any
input. Works for both running (attached) and detached sessions you own. sessions listnow shows the current command and path. Each row gains a
COMMAND(the foreground command, or-at the prompt) andPATH(the
session's working directory) column, queried best-effort by the node from the
OS (Linux/macOS).- New sessions start in your home directory. A freshly opened session now
starts in the node user's home directory (likecd ~) instead of wherever the
node process was launched. An explicit per-request working directory still
takes precedence.
Changed
- Profile
PATHis deduplicated on export. When syncing the node profile,
the capturedPATHnow has empty and duplicate entries removed (first
occurrence wins, order preserved) before it is written toprofile.yaml. - Clearer
omnyshell node profile syncreporting. When nothing changes it
reportsNode PATH already up to date.; when it writes a change it now also
reminds you to restart the node for the newPATHto take effect. (The
restart hint is omitted duringnode start, which re-loads the profile
immediately.)
v1.7.0
1.7.0
Added
- Node environment profile (
~/.omnyshell/profile.yaml). Sessions run the
node's shell non-interactively, so no rc file is sourced and$PATHstarts
bare. The node now applies anenv:map from~/.omnyshell/profile.yaml
(values support${VAR}expansion) as thebaseEnvironmentof every shell
and exec session. On an interactivenode startthe node derivesPATH
from your login shell rc (~/.zshrc,~/.bash_profile, …) and prompts before
writing it when it differs; non-interactive starts leave the profile untouched
and print a hint. New flags--profile <path>and--no-profile-sync, plus an
omnyshell node profile sync [--yes]subcommand to refresh on demand. - Remember
--insecure-skip-verifyat login. Logging in with
--insecure-skip-verifynow asks whether to persist the setting for that Hub;
when stored, later commands reusing the saved session skip TLS verification
without re-passing the flag. A non-interactive login defaults to not storing
it, and re-runningloginwithout the flag (orlogout) clears it.
v1.6.1
v1.6.0
1.6.0
Added
- Manage OmnyDrive mounts from inside a session with
:drive. The new local
command is the in-session counterpart of the top-levelomnyshell driveCLI:
because the session is already attached to one node, the node is implicit, so
paths take no<node>:prefix and every operation is scoped to the connected
node. Subcommands mirror the CLI —:drive ls,:drive mount <local-dir> <remote-path>(or--git <url> <remote-path>, with--rw,
--no-initial-sync,--name,--branch,--depth),:drive status,
:drive sync [--push|--pull],:drive resolve [--accept-local|--accept-origin| --reclone],:drive remount, and:drive unmount [--sync-first] [--no-keep-remote]. A mount-id belonging to a different node is refused, and
mounts share the same on-disk registry as the CLI. - Background
:drive watch.:drive watch <mount-id> [--interval S] [--debounce MS]auto-syncs a mount in the background while the shell stays
usable, logging each sync above the prompt;:drive unwatch [<mount-id>]stops
one or all watchers (teardown also runs automatically when the session ends or
the mount is unmounted). Background output repaints around the input line via a
newLocalCommandContext.printAbovehook. - Live drive sync progress. Every drive operation now reports progress as it
runs instead of only a final count:sync,mount,resolve,remountand
watch, for both theomnyshell driveCLI and the in-session:drivecommand.
The top-level CLI renders an in-place bar
([##########----] 71% 5/7 files src/main.dart); in-session prints a
throttledsyncing N/M: pathline above the prompt. Per-file granularity for
directory mounts comes from omnydrive ≥ 1.1.0's per-fileProgressEvents; git
push/clone show a coarsepushing…/cloning…phase. Threaded through a new
DriveManageronProgresscallback and aSyncProgressBarrenderer.
v1.5.1
1.5.1
Fixed
-
No more stray characters on the terminal after a session detaches. Two
separate leaks were writing to the local terminal once a session was already
gone. (1) Theconnectclient never cancelled its remote stdout/stderr
listeners on detach, so bytes still buffered in the channel were flushed
afterwards — at an idle prompt the line editor repainted around them, smearing
erase/prompt escape sequences onto the detached terminal. The listeners are now
guarded against the detached state and cancelled on teardown. (2) When a session
was detached from another window mid full-screen program, the terminal reset
undid the alternate screen, cursor and color attributes but not mouse
reporting, so every later mouse move spewed SGR mouse reports (ESC[<…M) onto
the terminal. The detach reset now also disables every mouse-tracking mode
(1000/1002/1003 and the 1005/1006/1015 encodings) and bracketed paste (2004). -
Interactive sessions no longer freeze on heavy output. The
connect
client consumed remote stdout/stderr without ever replenishing the channel's
send window, so after a cumulative 256 KiB the node's flow-control credit
drained and all further output stalled — the session appeared frozen. This
surfaced most often with full-screen TUIs that repaint the whole screen on
every scroll (e.g.claude's plan view,vim,less,htop), which exhaust
the window within a handful of redraws. The client now grants window credit for
every chunk it consumes. The node grants stdin credit symmetrically, so a large
paste into a full-screen program can't stall input either.
v1.5.0
1.5.0
Added
-
Detachable sessions. Leave a node without killing the remote shell and
reconnect later. From the interactive prompt,:detach [timeout]parks the
session — the PTY, shell and child processes keep running on the node — and
prints a short id to resume with (:detach,:detach 30m,:detach 2h,
:detach 1d; unitss/m/h/d). Manage detached sessions from the CLI:
omnyshell sessions list <node>,omnyshell sessions resume <node> <id>(a
full id, short handle or unambiguous prefix), and
omnyshell sessions kill <node> <id>. Sessions are owned by one
authenticated user on one node; the node enforces ownership and never reveals
another user's sessions. A dropped client connection auto-detaches by
default (preserving the shell) rather than terminating it. Output produced
while detached is retained in an in-memory capture and replayed on resume.
Detached-session state lives only in node memory — nothing is written to disk
and it is lost on node restart by design. The Hub only authenticates, routes
and correlates replies; it never persists detached-session metadata. New
client APIs:RemoteSession.detach(),ClientRuntime.resumeSession(),
listDetachedSessions(),killDetachedSession(); newNodeConfig
autoDetachOnDisconnect,autoDetachTimeout,cleanupInterval. -
Detach a running session from another window. Because
:detachcan't be
typed while a full-screen program (vim, top, less, a REPL) owns the terminal,
omnyshell sessions detach <node> [session-id] [timeout]detaches a running
session from a separate terminal — the attached window drops out of the
full-screen app with its terminal restored and prints a resume hint, and the
remote shell keeps running. With nosession-idit targets your sole active
session on that node (errors if several).omnyshell sessions list <node>now
shows active sessions too (STATUSattached/detached) so you can find
the id. New client APIs:ClientRuntime.detachActiveSession(),
listSessions(), andRemoteSession.wasDetached/detachOutcome. -
sessions killterminates running sessions too.omnyshell sessions kill <node> <id>now resolves both active (attached) and detached sessions, so
you can kill a running session from another window; the attached client is
disconnected. NewClientRuntime.killSession()(the oldkillDetachedSession
remains as a deprecated alias). -
Resume restores full-screen programs. The node now keeps a continuous,
alt-screen-aware capture of recent output for every session (not just while
detached), so resuming intonano/vim/htop/lessrepaints the program's
current screen — the frame it had drawn before detaching — instead of a
blank terminal. Resume into a full-screen program attaches in passthrough
without injecting a prompt marker (which previously typed into the program);
the program's existing completion marker restores the prompt when it exits.
Restoration is at the detached geometry.SessionOpenedgains analtScreen
flag (exposed asRemoteSession.resumedInAltScreen). The prompt-completion
marker token is derived from the stable session id (reported unchanged across
connect and resume), so a resumed client recognizes the marker the running
program leaves behind and reliably repaints the prompt after the program
exits — with the correct working directory.
v1.4.0
1.4.0
Changed
-
Interactive
connectnow hands the terminal to the remote while a command
runs, instead of guessing from the command text. The managed prompt is drawn
only when the shell is idle; the moment a command is dispatched the client
enters raw passthrough and lets the remote program own the terminal until the
CwdMarkercompletion signal returns. This fixes full-screen programs (vim,
nano, less, top) and interactive line-readers (read,y/Nconfirmations,
REPLs) corrupting — or being corrupted by — the local prompt, and replaces the
fragile alternate-screen detection plus hardcoded foreground-program list. -
Cooked-mode input now echoes correctly. Because the remote shell runs with
stty -echo, the dispatched command is wrapped to re-enable echo just for the
program's runtime input (stty echo ; eval '<cmd>' ; <marker> ; stty -echo),
soread/cat/y-Nprompts show what you type while password prompts stay
hidden (those programs disable echo themselves). No node-side change is needed.
Fixed
- Output arriving at the idle prompt no longer tangles with the input line.
A backgrounded job (cmd &) printing while you type now erases and repaints
the prompt around its output.
v1.3.3
v1.3.2
1.3.2
Added
-
--verbose(-v) flag on everyomnyshell servicesubcommand. Drops the
service manager's console logger to debug level so the underlying
install/lifecycle steps (and the 1.2.0 user-systemd/privilege diagnostics)
are printed; without it, info and warnings are shown as before. -
dart_service_manager: ^1.2.1