# `SnakeBridge.SessionManager`
[🔗](https://github.com/nshkrdotcom/snakebridge/blob/v0.14.0/lib/snakebridge/session_manager.ex#L1)

Manages Python session lifecycle with process monitoring.

Sessions are automatically released when all owner processes die,
preventing memory leaks in long-running applications.

Cleanup logs are opt-in via config. Use
`config :snakebridge, session_cleanup_log_level: :debug` to enable.

# `ref`
[🔗](https://github.com/nshkrdotcom/snakebridge/blob/v0.14.0/lib/snakebridge/session_manager.ex#L16)

```elixir
@type ref() :: map()
```

# `session_id`
[🔗](https://github.com/nshkrdotcom/snakebridge/blob/v0.14.0/lib/snakebridge/session_manager.ex#L15)

```elixir
@type session_id() :: String.t()
```

# `child_spec`
[🔗](https://github.com/nshkrdotcom/snakebridge/blob/v0.14.0/lib/snakebridge/session_manager.ex#L12)

Returns a specification to start this module under a supervisor.

See `Supervisor`.

# `list_refs`
[🔗](https://github.com/nshkrdotcom/snakebridge/blob/v0.14.0/lib/snakebridge/session_manager.ex#L53)

```elixir
@spec list_refs(session_id()) :: [ref()]
```

Lists all refs in a session.

# `register_ref`
[🔗](https://github.com/nshkrdotcom/snakebridge/blob/v0.14.0/lib/snakebridge/session_manager.ex#L37)

```elixir
@spec register_ref(session_id(), ref()) :: :ok | {:error, :session_not_found}
```

Registers a ref with its session for tracking.

# `register_session`
[🔗](https://github.com/nshkrdotcom/snakebridge/blob/v0.14.0/lib/snakebridge/session_manager.ex#L29)

```elixir
@spec register_session(session_id(), pid()) :: :ok
```

Registers a session owner process.
The session will be released when the last owner dies.

# `release_session`
[🔗](https://github.com/nshkrdotcom/snakebridge/blob/v0.14.0/lib/snakebridge/session_manager.ex#L61)

```elixir
@spec release_session(session_id()) :: :ok
```

Explicitly releases a session and all its refs.

# `session_exists?`
[🔗](https://github.com/nshkrdotcom/snakebridge/blob/v0.14.0/lib/snakebridge/session_manager.ex#L45)

```elixir
@spec session_exists?(session_id()) :: boolean()
```

Checks if a session exists.

# `start_link`
[🔗](https://github.com/nshkrdotcom/snakebridge/blob/v0.14.0/lib/snakebridge/session_manager.ex#L20)

# `unregister_session`
[🔗](https://github.com/nshkrdotcom/snakebridge/blob/v0.14.0/lib/snakebridge/session_manager.ex#L72)

```elixir
@spec unregister_session(session_id()) :: :ok
```

Unregisters a session without releasing refs on the Python side.

Typically called when manually cleaning up before process death,
or when the caller has already released the session.

---

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