Skip to content

Releases: OmnyGrid/omnyshell

v1.8.1

11 Jun 01:35
926b666

Choose a tag to compare

1.8.1

Changed

  • Upgraded omnydrive to ^1.1.2. Picks up the fix that prevents a mount
    sync from silently discarding local-only changes. OmnyShell already guards
    this in DriveManager._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

10 Jun 23:06
69a2ba7

Choose a tag to compare

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 list now shows the current command and path. Each row gains a
    COMMAND (the foreground command, or - at the prompt) and PATH (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 (like cd ~) instead of wherever the
    node process was launched. An explicit per-request working directory still
    takes precedence.

Changed

  • Profile PATH is deduplicated on export. When syncing the node profile,
    the captured PATH now has empty and duplicate entries removed (first
    occurrence wins, order preserved) before it is written to profile.yaml.
  • Clearer omnyshell node profile sync reporting. When nothing changes it
    reports Node PATH already up to date.; when it writes a change it now also
    reminds you to restart the node for the new PATH to take effect. (The
    restart hint is omitted during node start, which re-loads the profile
    immediately.)

v1.7.0

10 Jun 21:50
0020f65

Choose a tag to compare

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 $PATH starts
    bare. The node now applies an env: map from ~/.omnyshell/profile.yaml
    (values support ${VAR} expansion) as the baseEnvironment of every shell
    and exec session. On an interactive node start the node derives PATH
    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-verify at login. Logging in with
    --insecure-skip-verify now 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-running login without the flag (or logout) clears it.

v1.6.1

10 Jun 06:10

Choose a tag to compare

1.6.1

  • Dependency updates in pubspec.yaml:
    • cryptography: updated from ^2.7.0 to ^2.9.0
    • omnydrive: updated from ^1.1.0 to ^1.1.1
    • lints: updated from ^6.0.0 to ^6.1.0
    • test: updated from ^1.25.6 to ^1.31.1

v1.6.0

10 Jun 05:34
93ce36a

Choose a tag to compare

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-level omnyshell drive CLI:
    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
    new LocalCommandContext.printAbove hook.
  • Live drive sync progress. Every drive operation now reports progress as it
    runs instead of only a final count: sync, mount, resolve, remount and
    watch, for both the omnyshell drive CLI and the in-session :drive command.
    The top-level CLI renders an in-place bar
    ([##########----] 71% 5/7 files src/main.dart); in-session prints a
    throttled syncing N/M: path line above the prompt. Per-file granularity for
    directory mounts comes from omnydrive ≥ 1.1.0's per-file ProgressEvents; git
    push/clone show a coarse pushing… / cloning… phase. Threaded through a new
    DriveManager onProgress callback and a SyncProgressBar renderer.

v1.5.1

10 Jun 04:29
61dec05

Choose a tag to compare

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) The connect client 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

10 Jun 02:55
d2e1aec

Choose a tag to compare

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; units s/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(); new NodeConfig
    autoDetachOnDisconnect, autoDetachTimeout, cleanupInterval.

  • Detach a running session from another window. Because :detach can'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 no session-id it targets your sole active
    session on that node (errors if several). omnyshell sessions list <node> now
    shows active sessions too (STATUS attached/detached) so you can find
    the id. New client APIs: ClientRuntime.detachActiveSession(),
    listSessions(), and RemoteSession.wasDetached / detachOutcome.

  • sessions kill terminates 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. New ClientRuntime.killSession() (the old killDetachedSession
    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 into nano/vim/htop/less repaints 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. SessionOpened gains an altScreen
    flag (exposed as RemoteSession.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

09 Jun 21:10

Choose a tag to compare

1.4.0

Changed

  • Interactive connect now 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
    CwdMarker completion signal returns. This fixes full-screen programs (vim,
    nano, less, top) and interactive line-readers (read, y/N confirmations,
    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),
    so read/cat/y-N prompts 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

09 Jun 08:50

Choose a tag to compare

1.3.3

  • dart_service_manager: ^1.2.2

v1.3.2

09 Jun 08:22
838471f

Choose a tag to compare

1.3.2

Added

  • --verbose (-v) flag on every omnyshell service subcommand. 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