All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Bug in
distant fs set-permissions
where partial permissions such asgo-w
would result in clearing all permissions - Bug in
distant-local
implementation ofSetPermissions
where read-only status was being set/cleared prior to Unix permissions being applied, resulting in applying an invalid change to the permissions
All changes described in these alpha releases:
- Alpha 13
- Alpha 12
- Alpha 11
- Alpha 10
- Alpha 9
- Alpha 8
- Alpha 7
- Alpha 6
- Alpha 5
- Alpha 4
- Alpha 3
- Alpha 2
- Alpha 1
- When terminating a connection using
distant manager kill
, the connection is now properly dropped, resulting servers waiting to terminate due to--shutdown lonely=N
to now shutdown accordingly - Zombies from spawned servers via
distant launch manager://localhost
are now properly terminated by checking the exit status of processes
- Support for
--shell
with optional path to an explicit shell as an option when executingdistant spawn
in order to run the command within a shell rather than directly semver
crate to be used for version information in protocol and manageris_compatible_with
function to root ofdistant-protocol
crate that checks if a provided version is compatible with the protocol
distant_protocol::PROTOCOL_VERSION
now uses the crate's major, minor, and patch version at compile-time (parsed viaconst-str
crate) to streamline version handling between crate and protocol- Protocol and manager now supply a version request instead of capabilities and
the capabilities of protocol are now a
Vec<String>
to contain a set of more broad capabilities instead of every possible request type
- CLI commands like
distant manager select
will now output errors in a JSON format when configured to communicate using JSON distant-ssh2
no longer caches the remote family globally, but instead caches it perSsh
instance
Cmd::program
andCmd::arguments
functions as they were misleading (didn't do whatdistant-local
ordistant-ssh2
do)- Removed
Capability
andCapabilities
from protocol and manager
- Minimum Rust version is now
1.70.0
due to bump ingrep-cli
minimum requirement. This technically applied to v0.20.0-alpha.11, but wasn't caught until the dependency updated
distant --help
will now return exit code of 0distant --version
will now return exit code of 0
- CLI now supports
-c <STR>
and--cmd <STR>
to use a given string as the command as an alternative to-- <CMD> <ARG> <ARG>
- Add build for FreeBSD
- Cli no longer uses
-c
as shorthand for specifying a config file --file
option for generating completion has been renamed to--output
- CLI command to generate config files now defaults to printing to stdout with
--output
providing the option to write to a file - Artifacts built now use format of
distant-<TRIPLE>
use_hidden
,use_ignore_files
,use_parent_ignore_files
,use_git_ignore
,use_global_git_ignore
, anduse_git_exclude
as new options for searching
- Searching now disables all standard filters by default with re-introducing the ability to set the filters by individual options
- Failing to start a search will no longer cause the search task to exit when using the local server, which would result in no more searches being able to be executed
Request
andResponse
types fromdistant-net
now support an optionalHeader
to send miscellaneous information
Change
structure now provides a singlepath
instead ofpaths
with thedistant-local
implementation sending a separateChanged
event per pathChangeDetails
now includes arenamed
field to capture the new path name when knownDistantApi
now handles batch requests in parallel, returning the results in order. To achieve the previous sequential processing of batch requests, the header valuesequence
needs to be set to true- Rename
GenericServerRef
toServerRef
and removeServerRef
trait, refactoringTcpServerRef
,UnixSocketServerRef
, andWindowsPipeServerRef
to use the struct instead ofBox<dyn ServerRef>
- Update
Reply
trait and associated implementations to be non-blocking & synchronous as opposed to asynchronous to avoid deadlocks and also be more performant
- Username and password now support full character sets outside of
@
for passwords and:
and@
for usernames
distant-local
now has two features:macos-fsevent
andmacos-kqueue
. These are used to indicate what kind of file watching to support (for MacOS). The default ismacos-fsevent
.[server.watch]
configuration is now available with the following settings:native = <bool>
to specify whether to use native watching or polling (default true)poll_interval = <secs>
to specify seconds to wait between polling attempts (only for polling watcher)compare_contents = <bool>
to specify how polling watcher will evaluate a file change (default false)debounce_timeout = <secs>
to specify how long to wait before sending a change notification (will aggregate and merge changes)debounce_tick_rate = <secs>
to specify how long to wait between event aggregation loops
distant-protocol
response for a change now supports these additional fields:timestamp
(serialized asts
) to communicate the seconds since unix epoch when the event was receiveddetails
containingattributes
(clarify changes on attribute kind) andextra
(to convey arbitrary platform-specific extra information)
- Bump minimum Rust version to 1.68.0
crossbeam-channel
dependency removed from notify by disabling its feature in order to avoid atokio::spawn
issue (notify-rs/notify#380)
- usernames with
-
(hyphen) we're rejected as invalid
- New
SetPermissions
enum variant on protocol request - New
set_permissions
method availableDistantApi
and implemented by local server (ssh unavailable due to wez/wezterm#3784) - Implementation of
DistantChannelExt::set_permissions
distant version
to display information about connected serverdistant manager service install
now accepts additional arguments to provide the manager on startup
- CLI
--lsp [<SCHEME>]
scheme now expects just the scheme and not://
- Moved
distant_net::common::authentication
to separate cratedistant-auth
- Moved
distant_net::common::authentication::Keychain
todistant_net::common::Keychain
- Moved
distant_net::common::transport::framed::codec::encryption::SecretKey
and similar todistant_net::common::SecretKey
- Search matches reported with
match
key are now inlined as either a byte array or a string and no longer an object with atype
andvalue
field - Unset options and values are not now returned in
JSON
serialization versus the explicitnull
value provided Capabilities
message type has been changed toVersion
with new struct to report the version information that includes a server version string, protocol version tuple, and capabilitiesdistant_core::api::local
moved todistant_local
distant capabilities
has been removed in favor ofdistant version
- Renamed
distant_core::data
todistant_core::protocol
- CLI
--lsp
now accepts an optionalscheme
to be used instead ofdistant://
, which is the default RemoteLspProcess
now takes a second argument,scheme
, which dictates whether to translatedistant://
or something else
- CLI now offers the following new subcommands
distant fs copy
is a refactoring ofdistant client action copy
distant fs exists
is a refactoring ofdistant client action exists
distant fs read
is a refactoring ofdistant client action file-read
,distant client action file-read-text
, anddistant client action dir-read
distant fs rename
is a refactoring ofdistant client action rename
distant fs write
is a refactoring ofdistant client action file-write
,distant client action file-write-text
,distant client action file-append
,distant fs make-dir
is a refactoring ofdistant client action dir-create
distant fs metadata
is a refactoring ofdistant client action metadata
distant fs remove
is a refactoring ofdistant client action remove
distant fs search
is a refactoring ofdistant client action search
distant fs watch
is a refactoring ofdistant client action watch
distant spawn
is a refactoring ofdistant client action proc-spawn
withdistant client lsp
merged in using the--lsp
flagdistant system-info
is a refactoring ofdistant client action system-info
- Search now supports
upward
as a directional setting to traverse upward looking for results rather than recursing downward
- CLI subcommands refactored
distant client select
moved todistant manager select
distant client action
moved todistant action
distant client launch
moved todistant launch
distant client connect
moved todistant connect
distant client lsp
moved todistant lsp
distant client repl
moved todistant api
distant client shell
moved todistant shell
distant-core
crate no longer offers theclap
feature
distant launch manager://localhost
now rejects a bind address ofssh
as theSSH_CONNECTION
environment variable isn't available in most cases
0.20.0-alpha.4 - 2023-03-31
- Default configuration for
config.toml
- Ability to generate default configuration using
distant generate config /path/to/config.toml
--current-dir
option fordistant client shell
anddistant client lsp
- Updated a variety of dependencies to latest versions
0.20.0-alpha.3 - 2022-11-27
Frame::empty
method as convenience forFrame::new(&[])
ClientConfig
to supportReconnectStrategy
and a duration serving as the maximum time to wait between server activity before attempting to reconnect from the client- Server sends empty frames periodically to act as heartbeats to let the client know if the connection is still established
- Client now tracks length of time since last server activity and will attempt a reconnect if no activity beyond that point
Frame
methodsread
andwrite
no longer return anio::Result<...>
and instead returnOption<Frame<...>>
and nothing respectivelyFrame::read
method now supports zero-size itemsClient::inmemory_spawn
andUntypedClient::inmemory_spawn
now take aClientConfig
as the second argument instead ofReconnectStrategy
- Persist option now removed from
ProcSpawn
message and CLI - Bump minimum Rust version to 1.64.0
--no-shell
option is removed as we automatically detect and use the PTY of the remote system using a default shell
0.20.0-alpha.2 - 2022-11-20
- New
ConnectionState
andConnectionWatcher
to support watching changes to the client connection, supportingclone_connection_watcher
andon_connection_change
methods for the client
- Server will now drop the connection if it receives an error (other than WouldBlock) while trying to read from the transport, rather than just logging the error, regardless of whether the error is resumable
0.20.0-alpha.1 - 2022-11-19
NOTE: This is incomplete as v0.20.0 is a near-complete rewrite internally.
- New
contains
andor
types forSearchQueryCondition
SearchQueryCondition
now escapes regex for all types exceptregex
- Removed
min_depth
option from search - Updated search to properly use binary detection, filter out common ignore
file patterns, and execute in parallel via the
ignore
crate andnum_cpus
crate to calculate thread count
- Resolution of
BindAddress
now properly handles hostnames ranging fromlocalhost
toexample.com
- Parsing of
BindAddress
no longer causes a stack overflow
0.19.0 - 2022-08-30
SystemInfo
via ssh backend now detects and reports username and shellSystemInfo
via ssh backend now reports os when windows detectedCapabilities
request/response for server and manager that report back the capabilities (and descriptions) supported by the server or managerSearch
andCancelSearch
request/response for server that performs a search usinggrep
crate against paths or file contents, returning results back as a stream- New
Searcher
available as part of distant client interface to support performing a search and getting back results - Updated
DistantChannelExt
to support creating aSearcher
and canceling an ongoing search query distant client action search
now supported, waiting for results and printing them out
- New
SystemInfo
data type now includes two additional fields:username
andshell
. Theusername
field represents the name of the user running the server process. Theshell
field points to the default shell associated with the user running the server process
distant client shell
will now use the default shell from system info, or choose between/bin/sh
andcmd.exe
as the default shell based on the family returned by a system info requestdistant client shell
properly terminates master pty when the shell exits, resolving the hanging that occurred for Windowscmd.exe
andpowershell.exe
upon exit- ssh launch with login shell now only uses
sh
when remote family isunix
- ssh backend implementation of copy now works more widely across windows
systems by switching to
powershell.exe
to perform copy
0.18.0 - 2022-08-18
shutdown-after
replaced withshutdown
that supports three options:never
- server will never shutdown automaticallyafter=N
- server will shutdown after N secondslonely=N
- server will shutdown N seconds after no connections
0.17.6 - 2022-08-18
shutdown-after
cli parameter and config option now properly shuts down server after N seconds with no connections
0.17.5 - 2022-08-18
- Handle
RecommendedWatcher
failing with an unsupported OS function on M1 Mac architecture running a Linux container via Docker (notify #423)
0.17.4 - 2022-08-18
- Parsing of a host for
Destination
now correctly handles IPv6 addresses such that::1
and[::1]:12345
are captured into host and port - Displaying of
Distant
andDistantSingleKeyCredentials
now properly wrap IPv6 addresses in square brackets when a port is available
0.17.3 - 2022-08-18
- New
ClientConnectConfig
to support connect settings, specifically for ssh Host
withHostParseError
that follows the DoD Internet Host Table Specification and subsequent RFC-1123
Destination
now has direct fields for scheme, username, password, host, and port that are populated from parsingDestination
no longer wrapsuriparse::URI
and all references to implementing/wrapping have been removed
ssh
option to specify external binary not working onlaunch
due to the key being mis-labeled asssh.bind
instead ofssh.bin
- All ssh settings were not being applied with manager handlers due to some key
checks being incorrect (e.g.
backend
instead ofssh.backend
). This has now been corrected and settings now properly get applied
- The ssh settings of
ssh.user
andssh.port
were unused as these were now being taking from the destinationssh://[username:]host[:port]
, so they have now been removed to avoid confusion - Remove
uriparse
dependency
0.17.2 - 2022-08-16
replace_scheme
method toDestination
DistantManagerRouter
no longer silently fails whendistant.args
is provided that includes double quotes within it
Map
implementation ofDisplay
now escapes\
and"
Map
implementation ofFromStr
now handles escaped\
and"
- Split
fallback_scheme
forDistantManagerConfig
intolaunch_fallback_scheme
(defaulting to ssh) andconnect_fallback_scheme
(defaulting to distant); this means that subsequent use ofdistant client launch [user@]host[:port]
will now default to ssh instead of failing due to lack of distant launch handler - Expose
windows-pipe
andunix-socket
config and cli options regardless of platform (so they can be provided without worrying about which OS) - Lock
--access
todistant manager listen
as a cli parameter and move it out of[network]
config to be tied to manager config only
0.17.1 - 2022-08-16
- New
format
option available forclient select
- Choices are provided via
{"type": "select", "choices": ["...", ...], "current": 0}
- Selection is specified via
{"type": "selected", "choice": 0}
- Choices are provided via
distant client launch
using--format json
now properly prints out id in JSON format ({"type": "launched", "id": "..."}
)distant client connect
using--format json
now properly prints out id in JSON format ({"type": "connected", "id": "..."}
)
0.17.0 - 2022-08-09
distant manager
subcommanddistant manager service
subcommand contains functionality to install, start, stop, and uninstall the manager as a service on various operating systemsdistant manager info
will print information about an active connectiondistant manager list
will print information about all connections
distant generate
subcommanddistant generate schema
will produce JSON schema for server request/responsedistant generate completion
will produce completion file for a specific shell
distant launch
is nowdistant client launch
distant action
is nowdistant client action
distant shell
is nowdistant client shell
distant listen
is nowdistant server listen
- Minimum supported rust version (MSRV) has been bumped to
1.61.0
- Shell no longer has issues with fancier command prompts and other
terminal-oriented printing as
TERM=x256-color
is now set by default
- Networking directly from distant client to distant server. All connections are now facilitated by the manager interface with client -> manager -> server
- Environment variable output as part of launch is now gone as the connection is now being managed, so there is no need to export session information
0.16.4 - 2022-06-01
- Dockerfile using Alpine linux with a basic install of distant, tagged as
chipsenkbeil/distant:0.16.3
andchipsenkbeil/distant:0.16.4
0.16.3 - 2022-05-29
- New
--ssh-backend
option for CLI that acceptslibssh
orssh2
for native backend ssh support distant_ssh2::SshBackend
now supports parsing from a&str
and producing a&'static str
from an instance
0.16.2 - 2022-05-27
- The following fields now default to false when missing in JSON request body
- For
DirRead
:absolute
,canonicalize
,include_root
- For
DirCreate
:all
- For
Remove
:force
- For
Watch
:recursive
- For
Metadata
:canonicalize
andresolve_file_type
- For
ProcSpawn
:args
(empty list),persist
, andpty
(nothing)
- For
0.16.1 - 2022-05-13
- Lock in to Rust openssl 0.10.38 as it is the last version that supports using openssl 3.x.x before reverting
0.16.0 - 2022-05-12
- New
environment
session type that prints out environment variable definitions for use in an interactive session or to evaluate - Shell support introduced for ssh & distant servers, including a new shell command for distant cli
- Support for JSON communication of ssh auth during launch (cli)
- Add windows and unix metadata files to overall metadata response data
- Watch and unwatch cli commands powered by underlying
Watcher
core implementation that uses newRequestData::Watch
,RequestData::Unwatch
, andResponseData::Changed
data types to communicate filesystem changes
- Default session type for CLI (launch, action, etc) is
environment
- Replace cbor library with alternative as old cbor lib has been abandoned
- Refactor some request & response types to work with new cbor lib
- Updated cli to always include serde dependency
- Expose
origin_id
of remote process as method - Rename ProcRun -> ProcSpawn, ProcStarted -> ProcSpawned
- Update ProcStdin, ProcStdout, and ProcStderr to use list of bytes instead
of a string as a parameter; RemoteProcess and RemoteLspProcess now support
reading and writing using either
String
orVec<u8>
- Rename
--detached
and associated to--persist
- Github actions no longer use paths-filter so every PR & commit will test everything
distant-lua
anddistant-lua-test
no longer exist as we are focusing solely on the JSON API for integration into distant
0.15.1 - 2021-11-15
--key-from-stdin
option to listen cli command to read key from stdin instead of generating- More logging to distant and ssh handler proc run methods
- Disclaimer to distant session about dns resolution
- Improve the distant-core readme
- DNS resolution for ssh session
0.15.0 - 2021-10-16
- distant-ssh2 subcrate to provide an alternate session as an ssh client
- distant-lua subcrate for lua lib
rpassword
&wezterm-ssh
dependencies for distant-ssh2 andXChaCha20Poly1305
dependency in place oforion
for encryptionCodec
trait to support encode & decodeXChaCha20Poly1305Codec
that encrypts/signs using XChaCha20Poly1305PlainCodec
that does no encrypting/signingSessionChannelExt
trait for friendlier methodsMailbox
and internalPostOffice
to manage responses to requests- Method parameter to support distant & ssh methods for action and lsp subcommands
- Support compiling distant cli on windows (#59)
status
method toRemoteProcess
- Refactor Transport to take generic Codec
- Rewrite to no longer use blake256
- Refactor
Session
to use a newSessionChannel
underneath - Refactor
Response
to always include an origin_id field instead of being optional - Update
ProcStdout
,ProcStderr
, andProcDone
to include origin id - Replace
verbose
option withlog-level
- Replace
DISTANT_AUTH_KEY
withDISTANT_KEY
for environment variable parsing - Refactor to support Minimum Supported Rust Version (MSRV) of 1.51.0
- Rename core -> distant-core in project directory structure
- Upgrade tokio to 1.12
- Update
Metadata
to be- cloneable
- debuggable
- serializable
- deserializable
- Refactor
Metadata
andSystemInfo
response data types to support subtypes as singular parameters - Replace
--daemon
in favor of opposite parameter--foreground
DistantCodec
k256
dependencyTransport::from_handshake
as no longer doing EDCH key exchange
- Stdout/stderr being sent before proc_start by adding post_hook support to handler such that proc_run tasks are not spawned until proc_start is sent as response
InmemoryStreamWriteHalf
implementation of AsyncWrite now properly yields pending upon full channel and no longer locks up- stdout, stderr, and stdin of
RemoteProcess
no longer cause deadlock