Eai.PTY (eai v1.0.4)

Copy Markdown

Public API for PTY session management.

All calls route through Eai.Hub.run/3 before reaching the underlying PTY.Session GenServer, enabling pre/post hooks on every PTY operation.

Sessions are created lazily on first exec_async/3 call. Use Eai.PTY.Supervisor.stop_session/1 to explicitly terminate a session.

Graph

<<{Eai.Hub, required_by, Eai.PTY}. <<{Eai.PTY.Registry, required_by, Eai.PTY}. <<{Eai.PTY.Supervisor, required_by, Eai.PTY}. <<{Eai.PTY.Session, required_by, Eai.PTY}. <<{Eai.PTY, required_by, execute_script_exs}. <<{Eai.PTY, required_by, write_to_session_exs}. <<{Eai.PTY, required_by, reset_session_exs}. <<{Eai.PTY, required_by, list_pty_sessions_exs}. <<{Eai.PTY, required_by, force_complete_task_exs}. <<{Eai.PTY, required_by, get_task_result_exs}.

Replaces

Eai.Sandbox.PTYPool (deleted). Call sites update:

PTYPool.exec_async(id, cmd)        Eai.PTY.exec_async(id, cmd)
PTYPool.force_reset(id)            Eai.PTY.force_reset(id)
PTYPool.write_raw(id, input)       Eai.PTY.write_raw(id, input)
PTYPool.interrupt_task(id)         Eai.PTY.interrupt_task(id)
PTYPool.clear_task(id, task_id)    Eai.PTY.clear_task(id, task_id)
PTYPool.list_sessions()            Eai.PTY.list_sessions()

Summary

Functions

Clear completed task state from a session.

Execute a command asynchronously in a PTY session.

Force-reset a PTY session — kills the PTY and respawns it.

Inject Ctrl+C + right sentinel into the active task.

Return info map for all active PTY sessions.

Send raw input (Ctrl+C, passwords, etc.) to a PTY session.

Functions

clear_task(pty_session_id, task_id)

@spec clear_task(String.t(), String.t()) ::
  :ok | {:error, term()} | {:block, String.t()}

Clear completed task state from a session.

exec_async(pty_session_id, cmd, task_id \\ nil)

@spec exec_async(String.t(), String.t(), String.t() | nil) ::
  {:ok, String.t()} | {:error, term()} | {:block, String.t()}

Execute a command asynchronously in a PTY session.

Creates the session if it does not exist yet. Returns {:ok, task_id} immediately; poll results via Eai.ResultCollector.get/1.

force_reset(pty_session_id)

@spec force_reset(String.t()) :: :ok | {:error, term()} | {:block, String.t()}

Force-reset a PTY session — kills the PTY and respawns it.

interrupt_task(pty_session_id)

@spec interrupt_task(String.t()) :: :ok | {:error, term()} | {:block, String.t()}

Inject Ctrl+C + right sentinel into the active task.

list_sessions()

@spec list_sessions() :: %{required(String.t()) => map()}

Return info map for all active PTY sessions.

write_raw(pty_session_id, input)

@spec write_raw(String.t(), String.t()) ::
  :ok | {:error, term()} | {:block, String.t()}

Send raw input (Ctrl+C, passwords, etc.) to a PTY session.