omnyshell_client library

OmnyShell Client: authenticate with a Hub, discover nodes, and open exec or interactive sessions.

final client = ClientRuntime(ClientConfig(
  hubUri: Uri.parse('wss://hub.example.com:8443'),
  credentials: credentials,
));
await client.connect();
final result = await client.execute(nodeId: 'web-01', command: 'uname -a');

Classes

ActiveSessionDetachRequest
Client → Hub: detach an active (attached) session on nodeId from another connection — e.g. when a full-screen program owns the original terminal. sessionRef is an id/short-id/prefix, or empty to target the caller's sole active session. Correlated by requestId.
ActiveSessionDetachResponse
Hub → Client: the result of an active-session detach. Correlated by requestId.
ActiveSessionDetachResult
The result of ClientRuntime.detachActiveSession.
AgentAbort
A cooperative cancellation signal for an AgentService run.
AgentCommandRunner
Runs commands the agent decides to execute, decoupling the agent loop from the concrete transport (ClientRuntime) so it stays browser-safe and unit-testable with a fake.
AgentEnvironment
Facts about the target node, woven into the system prompt so the model knows what it is operating.
AgentHandlers
Host-side interaction hooks the agent uses to talk to the user. The CLI and the web client provide their own implementations; tests provide fakes.
AgentPlan
A plan the model presents (in AgentMode.plan) before executing.
AgentPlanStep
A single step in a proposed plan.
AgentService
Drives a provider-agnostic agent loop that investigates a node, plans and executes commands to accomplish a natural-language goal.
AgentStyle
Maps the agent's output categories to display styling.
AiCommand
The :ai $prompt local command: drives a provider-agnostic AI agent that investigates the node, plans and executes commands to accomplish a natural-language goal, with command_shield gating every command.
AiConfig
Immutable AI configuration: which provider/model to use, the API key, the default agent mode and loop bounds.
AiConfigDescription
A non-secret summary of the resolved AI configuration, used by omnyshell ai show to report settings and where each value came from. The API key is never included — only keySet and keyFromEnv.
AiConfigIo
Loads and persists AiConfig from the environment and ~/.omnyshell/ai.yaml.
AiConfigRequest
Client → Hub: ask for the Hub's default AI configuration (provider/model and agent defaults) so a browser embedder can offer "use the Hub default" without ever seeing an API key. Correlated by requestId.
AiConfigResponse
Hub → Client: the Hub's default AI configuration. Never carries an API key — the key stays on the Hub and is injected when proxying. available is false when the Hub has no AI provider configured. Correlated by requestId.
AiMessage
A single message in the conversation.
AiModelCheck
The outcome of validating one model with a live provider request.
AiProvider
A chat provider that supports tool calling.
AiResult
One assistant turn returned by a provider.
AiToolCall
A single tool invocation requested by the model.
AiToolResult
The outcome of executing an AiToolCall, fed back to the model.
AiToolSpec
A tool the model is allowed to call. parameters is a JSON-Schema object.
AiUsage
Token usage and latency for a single provider call.
AnsiAgentStyle
ANSI-colored AgentStyle for terminals.
Authenticator
Validates a Credential and resolves it to a Principal.
AuthFail
Failed authentication.
AuthOk
Successful authentication, carrying the resolved identity and a session token bound to this connection.
Authorizer
Decides whether an authenticated Principal may open a session on a node.
AuthRequest
A login attempt presenting a credential.
AuthSnapshot
The persisted auth state the login screen renders: the remembered default Hub and the list of saved logins.
CertGenerator
Generates the TLS certificate material an OmnyShell Hub needs to run.
CertificateIdentity
Extracts a stable public-key identity from an X.509 certificate.
Channel
One logical, bidirectional stream multiplexed over a connection.
ChannelClose
Tear down a channel.
ChannelContentSource
An OmnyDrive ContentSource backed by a node-side path reached over a drive session.
ChannelEof
Half-close a stream (typically stdin) on the channel.
ChannelExit
Node → Client: the process exited.
ChannelId
A logical channel identifier, scoped to a single physical connection.
ChannelMultiplexer
Multiplexes logical Channels over a single OmnyShellConnection.
ChannelResize
Resize the terminal of an interactive session.
ChannelSignal
Deliver a POSIX signal to the session's process.
ChannelWindow
Backpressure credit grant for a stream on a channel.
ClientConfig
Configuration for a ClientRuntime.
ClientRuntime
An embeddable OmnyShell client: authenticates with the Hub, discovers nodes, and opens exec / interactive sessions.
A TransferLink backed by a client-side RemoteSession.
Clock
Time source used throughout OmnyShell so tests can fix now.
CmdShellDialect
Windows cmd.exe — the degraded last resort. cmd /Q disables command echo; initLine shrinks the prompt to >. The marker reports only the working directory (%CD%): git branch/status and privilege are omitted, since cmd cannot compute them inline. The token is written in two set /p pieces so it never appears verbatim in the command text.
CommandHistory
Persistent, per-key command history backed by a plain-text file.
CommandHistoryBuffer
An ordered, bounded set of history entries with the shell's add rules.
CommandHistoryStore
A persistent command history a LineEditor can record into and navigate.
CommandRun
The result of running a single command on the node.
ControlFrame
A control message frame (carried as a WebSocket text frame).
ControlMessage
Base class for every structured control message.
Credential
A credential presented during the authentication handshake.
CredentialProvider
Produces the AuthRequest a node or client sends in response to the Hub's challenge hello.
CredentialStore
On-disk store of Hub logins, keyed by Hub URL, with a remembered default.
CwdMarker
Client-side shell integration that learns the remote working directory.
CwdScan
The outcome of feeding one chunk of remote stdout to a CwdMarker.
DashboardActionResult
The outcome of a fire-and-forget session action (detach / terminate) that the dashboard shows in its message bar.
DashboardApp
A full-screen TUI over the OmnyShell CLI: log in to a Hub, then work across four top-level tabs — Nodes (browse a node's info and sessions, and resume / peek / detach / terminate them), Tunnels (open / list / close), Drive (mount / sync / diff / resolve / unmount / remount) and AI (view / edit config, validate models) — without typing individual commands. Tab / Shift-Tab (or the number keys) switch tabs.
DashboardBackend
The capability port the DashboardApp drives.
DataFrame
A binary stream-data frame (carried as a WebSocket binary frame) with a fixed 10-byte header followed by the raw payload bytes.
DetachedSessionInfo
A user-facing view of a detached session living in a node's in-memory registry, as returned by the list API and relayed through the Hub.
DetachedSessionKillRequest
Client → Hub: terminate the caller's detached session sessionRef (an unambiguous id or prefix) on nodeId. Correlated by requestId.
DetachedSessionKillResponse
Hub → Client: the result of a detached-session kill. Correlated by requestId.
DetachedSessionKillResult
The result of ClientRuntime.killDetachedSession.
DetachedSessionsRequest
Client → Hub: list the caller's detached sessions on nodeId. Correlated to the response by requestId (a connection-level request/response RPC).
DetachedSessionsResponse
Hub → Client: the caller's detached sessions. Correlated by requestId.
DetachOutcome
The result of RemoteSession.detach: the detached session's identifiers and optional expiry, used to print the resume hint.
DriveChanges
The set of paths that differ between a directory mount's local copy and the node, grouped by which side changed. Produced read-only by DriveManager.conflicts — no sync or resolve is performed.
DriveCredentialEntry
One masked git-credential entry returned by a list (secrets never leave the node — description is the credential's masked toString).
DriveCredentialRequest
Client → Hub: manage the caller's own git credentials on nodeId.
DriveCredentialResponse
Hub → Client: the result of a drive-credential operation. Correlated by requestId.
DriveCredentialResult
The result of ClientRuntime.peekSession: the current screen snapshot of a session, captured without attaching to it. The result of a drive credential RPC against a node.
DriveManager
Orchestrates OmnyDrive mounts over OmnyShell drive sessions.
DriveRpcClient
Issues OmnyDrive RPCs over a SessionMode.drive RemoteSession.
Ed25519PublicKey
An Ed25519 public key, used to identify users and nodes in an authorized_keys-style trust store. Equality is by key bytes.
ErrorCodes
Stable, machine-readable error codes carried in error control messages and surfaced on OmnyShellExceptions.
ExecResult
The result of a one-shot ClientRuntime.execute.
FileDiff
The comparison of one path between a directory mount's local copy and the node. At most one of local/origin is null (an absent side).
FileResolveOutcome
The outcome of resolving a single path on a directory mount.
FrameCodec
Encodes and decodes OmnyShellFrames to and from WebSocket events.
GeneratedCertificates
The paths of the TLS files produced by CertGenerator.generate.
Hello
First frame after the WebSocket upgrade. The Hub sends hello with a single-use nonce; the peer replies with its role and capabilities.
HistoryCursor
A reusable Up/Down navigation cursor over a CommandHistoryBuffer.
HttpProxyRequest
Client → Hub: make an outbound HTTPS request to an AI provider on the client's behalf (the browser cannot, due to CORS). The Hub validates the target against an allowlist, optionally injects credentials, and replies with an HttpProxyResponse. Correlated by requestId.
HttpProxyResponse
Hub → Client: the result of a proxied AI request. On a transport-level failure (rejected host, timeout, DNS) error is set and statusCode is 0. Correlated by requestId.
HubAiConfig
The Hub's advertised default AI configuration, returned by ClientRuntime.fetchHubAiConfig. Never carries an API key — the key stays on the Hub. available is false when the Hub has no default provider.
IdeCommand
The :ide [path] local command: opens a full-screen, IntelliJ/VS Code-style terminal IDE rooted at path (default: the current directory). It shows a file-tree sidebar, tabs of open files, syntax highlighting per file type and a git-change gutter, and lets you edit and save files — all without leaving the omnyShell session. Press Ctrl-Q to return to the shell.
InteractiveShellController
Pure Dart (no dart:io, no DOM), so the orchestration is identical and unit-testable across the CLI, the browser, and any other embedder.
LineEditor
A raw-mode line editor with command-history navigation.
LocalCommand
A local OmnyShell command, invoked with a leading : and never forwarded to the remote shell.
LocalCommandContext
Runtime context passed to a LocalCommand.
LocalCommandRegistry
An extensible registry of local : commands.
LocalShellSession
Adapts a node-side ShellSession to the transport-free ShellSessionPort the interactive terminal UI drives.
LoginRequest
A request to authenticate and persist a new login, built from the login form.
MachineId
Reads a stable, per-machine identifier provided by the operating system.
ManifestEntry
One file in a transfer manifest (path is POSIX-relative to the transfer root; size is the uncompressed byte length).
MountRecord
A persisted record of one OmnyDrive mount the client manages.
MountStore
On-disk registry of the client's OmnyDrive mounts.
NodeActiveSessionDetach
Hub → Node: detach the principal's active session sessionRef.
NodeActiveSessionDetachResponse
Node → Hub: the result of an active-session detach. Correlated by requestId.
NodeCapabilities
What a node can do, advertised to the Hub after registration and relayed to clients during discovery.
NodeCapabilitiesMessage
Node → Hub: advertises capabilities after registration.
NodeDescriptor
A node's public description as registered with the Hub and returned by discovery (nodes list). Combines identity, platform, operator labels and advertised capabilities.
NodeDetachedSessionKillRequest
Hub → Node: terminate the principal's detached session sessionRef.
NodeDetachedSessionKillResponse
Node → Hub: the result of a detached-session kill. Correlated by requestId.
NodeDetachedSessionsRequest
Hub → Node: list the principal's detached sessions. Correlated by requestId.
NodeDetachedSessionsResponse
Node → Hub: the principal's detached sessions. Correlated by requestId.
NodeDriveCredentialRequest
Hub → Node: manage principal's git credentials. The principal is stamped by the hub from the authenticated peer; the node only ever mutates that principal's scope. Correlated by requestId.
NodeDriveCredentialResponse
Node → Hub: the result of a drive-credential operation. entries carries the masked credential list for list. Correlated by requestId.
NodeHeartbeat
Node → Hub: periodic liveness signal with a monotonic sequence number.
NodeHeartbeatAck
Hub → Node: acknowledges a heartbeat.
NodeId
Stable identity of a node, used by clients to address it (instead of a host:port). Equality is by value.
NodeListRequest
Client → Hub: requests the list of nodes the client may see.
NodeListResponse
Hub → Client: the discovered nodes.
NodeRegister
Node → Hub: registers the node's identity and platform.
NodeRegistered
Hub → Node: confirms registration.
NodeSessionDetach
Hub → Node: detach the session on the node-side channel, on behalf of principal. Mirrors SessionDetachRequest across the relay.
NodeSessionDetached
Node → Hub: the session was detached and now lives in the node registry.
NodeSessionOpen
Hub → Node: instructs the node to start a session on a node-side channel.
NodeSessionOpened
Node → Hub: the node accepted and started the session.
NodeSessionRejected
Node → Hub: the node refused the session.
NodeSessionScreenRequest
Hub → Node: fetch the current screen snapshot of the principal's session sessionRef. Correlated by requestId.
NodeSessionScreenResponse
Node → Hub: the current screen snapshot of a session. The replayable bytes (the same a resume would paint) are base64-encoded in screenBase64. Correlated by requestId.
NodeTunnelConnect
Hub → exposer (node or client): a public connection arrived; adopt channel, dial targetHost:targetPort, and bridge bytes. Reply with NodeTunnelConnected or NodeTunnelConnectFailed.
NodeTunnelConnected
Exposer → Hub: the target was dialed; the Hub may relay bytes on channel.
NodeTunnelConnectFailed
Exposer → Hub: the target dial failed; the Hub closes the public socket.
OmnyShellConnection
A duplex, frame-oriented link between two OmnyShell peers.
OmnyShellFrame
A decoded unit travelling over a connection: either a structured control message (ControlFrame) or a binary stream payload (DataFrame).
OmnyUid
A deterministic, globally-stable identifier for a node or a hub.
Ping
Application-level keepalive request, used to measure round-trip latency and detect half-open connections.
PlatformInfo
Describes the operating system and architecture a node runs on, advertised to clients during discovery and shown by the :info local command.
Pong
Reply to a Ping.
PosixShellDialect
POSIX shells (sh, bash, zsh, Git Bash, WSL): the original protocol, unchanged. Uses trap, eval, stty and a printf/git/id marker.
PowerShellDialect
Windows PowerShell (pwsh/powershell). The shell reads commands from a redirected stdin (so input is never echoed); initLine silences the per-line prompt. The marker computes git status counts and the admin flag in PowerShell and writes one line directly to the console out.
Principal
An authenticated identity, as resolved by an Authenticator.
PrincipalId
Identity of an authenticated principal (a user or a node account) as known to the Hub. Equality is by value.
ProgressBar
A single-line, carriage-return progress bar for file transfers.
ProtocolError
A connection- or channel-level error.
PtySpec
Requested pseudo-terminal geometry for an interactive shell.
PublicKeyCredential
An Ed25519 public-key credential: the client proves possession of the private key by signing the connection challenge.
PublicKeyCredentialProvider
A CredentialProvider that signs the connection nonce with an Ed25519 private key.
RemoteSession
A client-side handle to one open session on a node.
RoleBasedAuthorizer
A role-based Authorizer with a small, predictable policy:
SavedLogin
A login already saved in the local credential store, shown so the dashboard can reconnect with one keystroke instead of retyping credentials.
ScreenModeDetector
Detects when the remote terminal switches into or out of the alternate screen buffer, by watching the output byte stream for the DEC private-mode sequences full-screen programs emit:
Session
A domain view of a brokered session: who opened it, on which node, in what mode, and its current state and exit code.
SessionCommandResult
The captured result of running a command in the host's interactive session (see LocalCommandContext.runInSession).
SessionDetached
Hub → Client: the session was detached; resume it later by shortId.
SessionDetachRequest
Client → Hub: detach the live session on channel, keeping the node-side PTY/shell/processes running. Optional timeoutSeconds schedules automatic cleanup; null keeps the session indefinitely.
SessionId
Unique identity of a brokered session, minted by the Hub when a session is opened. Equality is by value.
SessionOpen
Client → Hub: opens a session on a node over a new client channel.
SessionOpened
Hub → Client: the session is open.
SessionRejected
Hub → Client (or Node → Hub via NodeSessionRejected): the session could not be opened.
SessionScreenRequest
Client → Hub: fetch the current screen snapshot of the caller's session sessionRef (active or detached) on nodeId, without attaching to it. Correlated by requestId.
SessionScreenResponse
Hub → Client: the current screen snapshot of a session. Correlated by requestId.
SessionScreenResult
ShellBackend
Starts ShellSessions on a node in response to authorized session opens.
ShellDialect
Generates the shell-specific text the interactive connect/resume loop sends to a remote shell: a one-time init line, the per-command wrapper, and the prompt-completion markers.
ShellPromptState
The remote shell's prompt context, reported to the host when the shell returns to its (idle) prompt so the host can render a prompt line.
ShellRequest
A request to start a process or interactive shell on a node.
ShellRunResult
Drives a ShellSessionPort as an interactive shell, terminal-agnostically.
ShellSession
A running process or shell on the node, with byte streams wired to the session channel.
ShellSessionPort
The minimal session surface an InteractiveShellController drives.
StoredSession
A persisted login to a single Hub.
SyncOutcome
The outcome of a synchronization, surfaced to the CLI.
SyncProgressBar
A live, multi-line progress view for OmnyDrive sync transfers.
SystemClock
The default Clock, backed by the system wall clock (UTC).
TokenCredential
A bearer-token credential, validated against a token store. Relies on TLS for secrecy in transit.
TokenCredentialProvider
A CredentialProvider that presents a bearer token.
TransferPreflight
Snapshot handed to a confirmation hook once both ends know the manifest and resume state, but before any file is written or any data flows.
TransferProgress
Progress notification emitted while a transfer runs.
TransferResult
The outcome of a completed transfer.
TunnelCloseRequest
Client → Hub: close the caller's tunnel tunnelRef (a full id or unambiguous prefix). Correlated by requestId.
TunnelCloseResponse
Hub → Client: the result of a tunnel close. Correlated by requestId.
TunnelCloseResult
The result of ClientRuntime.closeTunnel.
TunnelHandle
A handle to an open tunnel returned by ClientRuntime.openTunnel.
TunnelInfo
A user-facing view of an active TCP tunnel held by the Hub, as returned by the list API and relayed to the owning client.
TunnelListRequest
Client → Hub: list the caller's active tunnels. Correlated by requestId.
TunnelListResponse
Hub → Client: the caller's active tunnels. Correlated by requestId.
TunnelOpened
Hub → Client: the tunnel is open and listening. Correlated by requestId.
TunnelOpenRequest
Client → Hub: open a tunnel that exposes targetHost:targetPort (reachable by nodeId, or the requesting client's own machine when nodeId is the @local sentinel) on a public Hub port. When publicPort is set the Hub validates it against its configured range; otherwise the Hub allocates a free port in range. Correlated by requestId.
TunnelRejected
Hub → Client: the tunnel was refused. Correlated by requestId.
UidComputer
Computes deterministic OmnyUids from identity material.
UidResolution
The outcome of resolving an entity's UID against its persisted value.
UidStore
Persists an entity's UID under ~/.omnyshell/<fileName> and detects changes.

Enums

AgentMode
How much autonomy the AI agent has when it wants to run a command.
AgentPhase
Which phase of the agent loop a model request belongs to, used to pick the model via AiConfig.modelFor.
AiProviderKind
The AI provider an AiConfig talks to.
AiRole
The author of an AiMessage.
AiStopReason
Why the model stopped this turn.
ArchiveFormat
A supported download archive format.
CommandConfirm
The user's answer at a command-confirmation prompt.
DataOpcode
The stream a binary data frame belongs to, encoded as the msgType byte of the data-frame header.
DriveSyncDirection
The direction of a one-shot drive sync requested from the dashboard, mapped by the backend onto OmnyDrive's SyncDirection (so the port stays free of the package:omnydrive dependency).
FileDivergence
Which side of a mount moved off the baseline for a given path. Drives how a difference is described and how drive sync would reconcile it.
HttpProxyCredentialMode
How the Hub should authenticate a proxied AI request.
LoginMethod
How a login authenticates to a Hub.
PlanApproval
The user's verdict on a presented plan.
SessionMode
How a session runs on the node.
SessionState
Lifecycle state of a session as tracked by the Hub.
ShellFamily
The command-language family of a node's interactive shell.

Extensions

AiCommands on LocalCommandRegistry
Registers the :ai command on a LocalCommandRegistry for the native CLI.
FileTransferCommands on LocalCommandRegistry
Registers the file-transfer and OmnyDrive local commands — :download, :upload and :drive — on a LocalCommandRegistry.
IdeCommands on LocalCommandRegistry
Registers the :ide full-screen editor command on a LocalCommandRegistry.

Constants

kAiProxyElapsedMsHeader → const String
Response header the Hub proxy sets to report the upstream provider request duration in milliseconds.
kDefaultGzipLevel → const int
Default GZip compression level for transfers (1=fast … 9=best).
kMinProtocolVersion → const int
The lowest protocol version this build can interoperate with.
kProtocolVersion → const int
The wire protocol version implemented by this package.
omnyShellVersion → const String
The canonical OmnyShell package version (kept in sync with pubspec.yaml).

Functions

aiRequestMs(Map<String, String> headers, int localMs) int
The request duration to record for a provider call: the Hub-reported upstream time from kAiProxyElapsedMsHeader when present (proxied requests), otherwise the locally measured localMs.
aiTokenCount(Object? value) int
Coerces a JSON value (provider usage counts may arrive as int or num) into a non-negative token count, returning 0 for null/unexpected types.
archiveError(ArchiveFormat format, {required bool isDir}) String?
Validates format against whether the source isDir, returning an error message to show the user, or null when the combination is allowed.
archiveExtension(ArchiveFormat format) String
The file extension (without a leading dot) for format.
defaultModelFor(AiProviderKind provider) String
The default model for provider when neither the user, env, nor ai.yaml (CLI) or the Hub (web) specified one.
downloadPath({required ClientRuntime client, required String nodeId, required String remotePath, required String localDest, bool destIsDir = false, int gzipLevel = kDefaultGzipLevel, void onProgress(TransferProgress)?, Future<bool> confirm(TransferPreflight)?}) Future<TransferResult>
Downloads remotePath from nodeId to the local localDest (a directory to write into, or an explicit target path — see FileTransferEngine.runReceiver; destIsDir forces directory mode), resuming any partial files and verifying each file's SHA-256.
formatDriveChanges(DriveChanges c, {required String mountId}) String
Renders a DriveChanges for omnyshell drive conflicts: the diverging paths grouped by which side changed, with true conflicts first. mountId tags the header.
formatFileDiff(FileDiff d) String
Renders a FileDiff for omnyshell drive diff: a size/hash header for each side, then a unified line diff (- local, + remote) when both sides are small text. Big or binary files fall back to the header alone.
formatShellPrompt({required String principal, required String node, required String cwd, String? branch, String? gitStatus, String? privilege, bool color = true, int width = 0}) String
Formats the interactive shell prompt — user@node:cwd (git) $ — shared by the native CLI connect loop and web clients so the prompt looks the same everywhere. Pure string assembly with no I/O, so it compiles to JavaScript.
formatSyncProgress(ProgressEvent e) String?
Formats a sync ProgressEvent as a per-path status line for in-session display above the prompt, or null when there is nothing useful to show.
formatSyncReport(SyncOutcome o, {bool verbose = false}) String
Builds the final report for a completed sync o — a one-line summary of file counts and raw vs on-wire bytes, e.g. Synced push: 12 transferred, 3 copied · 4.1 MB (1.2 MB on wire). When verbose, appends one line per path (+ transferred, = copied, - removed). Mirrors the wording of :drive/omnyshell drive so the CLI and in-session paths read the same.
ioConnectionFactory({SecurityContext? securityContext, bool onBadCertificate(X509Certificate cert, String host, int port)?, Duration? pingInterval}) ConnectionFactory
Builds a dart:io ConnectionFactory with explicit TLS trust overrides.
isProtocolCompatible(int remoteVersion, {int? remoteMin}) bool
Whether a peer advertising remoteVersion (with optional remoteMin) is compatible with this build.
launchesForegroundProgram(String line) bool
Whether line launches an interactive foreground program that should take over the terminal (so the client switches to raw passthrough).
localCompletionCandidates(ShellBackend backend, ShellDialect dialect, String word, {required bool isCommand, required ShellFamily family, String? cwd, Duration timeout = const Duration(seconds: 4)}) Future<List<String>>
Generates TAB-completion candidates for word by running the dialect's completion command as a one-shot SessionMode.exec on a local backend, reading its stdout to EOF.
mayChangeCwdOrGit(String line) bool
Whether line could change the working directory or git state, and thus warrants a prompt refresh (the marker).
newId() String
Generates a new globally-unique identifier (UUID v4).
newSecureToken([int byteLength = 32]) String
Returns byteLength cryptographically secure random bytes encoded as a URL-safe, unpadded base64 string.
parseArchiveFlag(String arg) ArchiveFormat?
Parses a --… compression flag into an ArchiveFormat, or null if arg is not a recognised compression flag.
parseStatLines(String stdout) List<StatEntry>
Parses the TYPE|SIZE|PATH lines emitted by the node's find/stat run.
providerFor(AiConfig config, Client client) AiProvider
Builds the AiProvider matching config's provider kind, sharing client for all requests.
remoteArchiveCommand(String src, {required ArchiveFormat format, required bool isDir}) String
Returns a POSIX sh command that builds an archive of src (a file or directory per isDir) in format and prints the resulting temporary archive path as its only stdout line.
remoteCompletionCommand(String word, {required bool isCommand}) String
Returns a POSIX sh command that prints completion candidates for word, one per line. When isCommand is true the word is in command position.
renderTree(String root, List<StatEntry> entries, {required int maxDepth}) List<String>
Renders entries (rooted at the start point root) as a tree-style listing: each line carries the aggregated size, directories are listed first, and subtrees deeper than maxDepth are collapsed (their line still reports the full aggregate). maxDepth == 0 means no depth limit.
resolveDirMountFilter({required String localDir, PathFilter? explicit, String? ignoreFileName}) Future<PathFilter?>
Resolves the effective PathFilter for a directory mount, mirroring omnydrive publish's .omnyignore handling.
shortId(String id, [int length = 8]) String
Derives a short, human-friendly handle from a full id.
uploadPath({required ClientRuntime client, required String nodeId, required String localPath, required String remoteDir, int gzipLevel = kDefaultGzipLevel, void onProgress(TransferProgress)?, Future<bool> confirm(TransferPreflight)?}) Future<TransferResult>
Uploads the local localPath to remoteDir on nodeId, resuming any partial files; the node verifies each file's SHA-256 and reports failure via the session exit code.
validateModels(AiProvider provider, List<String> models) Future<List<AiModelCheck>>
Validates models against provider by sending a minimal, tool-free request per model — confirming the API key works and each model id is accepted. Errors are captured per model rather than thrown, so one bad model does not hide the others.

Typedefs

ConnectionFactory = Future<OmnyShellConnection> Function(Uri uri, {Map<String, String>? headers})
Opens a transport connection to uri, returning a connected OmnyShellConnection.
ControlDecoder = ControlMessage Function(int? channelId, Map<String, dynamic> data)
Decodes a control-message payload (the envelope d) for a registered type.
DriveProgress = void Function(ProgressEvent event)
Sink for live sync progress, fed omnydrive ProgressEvents as each file is uploaded/downloaded (directory mounts) or as a git push/clone advances.
OmnyShellClient = ClientRuntime
Friendly alias for ClientRuntime, the embeddable OmnyShell client.
StatEntry = ({bool isDir, bool isLink, String path, int size})
A single find … -exec stat … entry: its absolute path, byte size and whether it is a directory or a symlink (leaf; never followed).

Exceptions / Errors

AiProviderException
Thrown when a provider request fails (network, auth, malformed response).
AuthException
Authentication failed: credentials missing, malformed or rejected.
AuthorizationException
The authenticated principal is not permitted to perform the action.
CertGeneratorException
Thrown when certificate generation cannot complete.
ChannelException
A logical channel was closed or referenced after teardown.
DriveConflictException
Raised when an automatic sync cannot proceed because both sides changed.
DriveException
A general drive-management error surfaced to the CLI.
DriveRpcException
Raised when a drive RPC returns an error response.
NodeUnavailableException
The requested node is unknown or offline.
OmnyShellException
Base type for every expected, classified failure raised by OmnyShell.
OmnyShellTimeoutException
An operation exceeded its deadline.
ProtocolException
A frame could not be decoded, or a message violated the protocol.
SessionRejectedException
A session could not be opened (rejected by the Hub or node).
TransferException
Thrown when the transfer stream ends or is malformed mid-protocol.
TransportException
The underlying transport failed or closed unexpectedly.
TunnelRejectedException
A tunnel could not be opened (rejected by the Hub).