# `MingaEditor.State.Remote`
[🔗](https://github.com/jsmestad/minga/blob/main/lib/minga_editor/state/remote.ex#L1)

State for remote agent sessions and remote file buffers.

# `remote_connection_status`

```elixir
@type remote_connection_status() :: :connected | :disconnected | :ended | :unavailable
```

# `remote_file_key`

```elixir
@type remote_file_key() :: {String.t(), String.t()}
```

# `remote_session_entry`

```elixir
@type remote_session_entry() :: {String.t(), pid(), session_metadata()}
```

# `session_metadata`

```elixir
@type session_metadata() :: MingaAgent.SessionMetadata.t() | map()
```

Remote session metadata is normally `MingaAgent.SessionMetadata.t()`. The map fallback keeps compatibility with older remote nodes that may return decoded persisted metadata before both nodes share the exact struct module version.

# `t`

```elixir
@type t() :: %MingaEditor.State.Remote{
  buffers: %{required(remote_file_key()) =&gt; pid()},
  server_status: %{required(String.t()) =&gt; remote_connection_status()},
  sessions: %{required(String.t()) =&gt; [remote_session_entry()]}
}
```

# `all_buffers`

```elixir
@spec all_buffers(t()) :: [{String.t(), String.t(), pid()}]
```

Returns all tracked remote buffers with their server names and paths.

# `buffer`

```elixir
@spec buffer(t(), String.t(), String.t()) :: pid() | nil
```

Finds an open buffer for a remote file.

# `buffers_for_path`

```elixir
@spec buffers_for_path(t(), String.t()) :: [{String.t(), pid()}]
```

Returns all tracked remote buffers for `path`, across servers.

# `put_buffer`

```elixir
@spec put_buffer(t(), String.t(), String.t(), pid()) :: t()
```

Tracks the buffer pid used to display a remote file.

# `put_server_status`

```elixir
@spec put_server_status(t(), String.t(), remote_connection_status()) :: t()
```

Marks a server's connection status.

# `put_sessions`

```elixir
@spec put_sessions(t(), String.t(), [remote_session_entry()]) :: t()
```

Stores the latest discovered remote sessions for a server.

# `server_status`

```elixir
@spec server_status(t(), String.t()) :: remote_connection_status()
```

Returns a server's known connection status.

# `sessions`

```elixir
@spec sessions(t()) :: %{required(String.t()) =&gt; [remote_session_entry()]}
```

Returns all discovered remote sessions grouped by server name.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
