# `OpenCode.Generated.Session`
[🔗](https://github.com/UtkarshUsername/opencode-sdk-elixir/blob/v0.1.84/lib/opencode/generated/session.ex#L1)

Provides API endpoints related to session

# `session_command_200_json_resp`

```elixir
@type session_command_200_json_resp() :: %{
  info: OpenCode.Generated.AssistantMessage.t(),
  parts: [
    OpenCode.Generated.AgentPart.t()
    | OpenCode.Generated.CompactionPart.t()
    | OpenCode.Generated.FilePart.t()
    | OpenCode.Generated.PatchPart.t()
    | OpenCode.Generated.ReasoningPart.t()
    | OpenCode.Generated.RetryPart.t()
    | OpenCode.Generated.SnapshotPart.t()
    | OpenCode.Generated.StepFinishPart.t()
    | OpenCode.Generated.StepStartPart.t()
    | OpenCode.Generated.SubtaskPart.t()
    | OpenCode.Generated.TextPart.t()
    | OpenCode.Generated.ToolPart.t()
  ]
}
```

# `session_message_200_json_resp`

```elixir
@type session_message_200_json_resp() :: %{
  info:
    OpenCode.Generated.AssistantMessage.t() | OpenCode.Generated.UserMessage.t(),
  parts: [
    OpenCode.Generated.AgentPart.t()
    | OpenCode.Generated.CompactionPart.t()
    | OpenCode.Generated.FilePart.t()
    | OpenCode.Generated.PatchPart.t()
    | OpenCode.Generated.ReasoningPart.t()
    | OpenCode.Generated.RetryPart.t()
    | OpenCode.Generated.SnapshotPart.t()
    | OpenCode.Generated.StepFinishPart.t()
    | OpenCode.Generated.StepStartPart.t()
    | OpenCode.Generated.SubtaskPart.t()
    | OpenCode.Generated.TextPart.t()
    | OpenCode.Generated.ToolPart.t()
  ]
}
```

# `session_messages_200_json_resp`

```elixir
@type session_messages_200_json_resp() :: %{
  info:
    OpenCode.Generated.AssistantMessage.t() | OpenCode.Generated.UserMessage.t(),
  parts: [
    OpenCode.Generated.AgentPart.t()
    | OpenCode.Generated.CompactionPart.t()
    | OpenCode.Generated.FilePart.t()
    | OpenCode.Generated.PatchPart.t()
    | OpenCode.Generated.ReasoningPart.t()
    | OpenCode.Generated.RetryPart.t()
    | OpenCode.Generated.SnapshotPart.t()
    | OpenCode.Generated.StepFinishPart.t()
    | OpenCode.Generated.StepStartPart.t()
    | OpenCode.Generated.SubtaskPart.t()
    | OpenCode.Generated.TextPart.t()
    | OpenCode.Generated.ToolPart.t()
  ]
}
```

# `session_prompt_200_json_resp`

```elixir
@type session_prompt_200_json_resp() :: %{
  info: OpenCode.Generated.AssistantMessage.t(),
  parts: [
    OpenCode.Generated.AgentPart.t()
    | OpenCode.Generated.CompactionPart.t()
    | OpenCode.Generated.FilePart.t()
    | OpenCode.Generated.PatchPart.t()
    | OpenCode.Generated.ReasoningPart.t()
    | OpenCode.Generated.RetryPart.t()
    | OpenCode.Generated.SnapshotPart.t()
    | OpenCode.Generated.StepFinishPart.t()
    | OpenCode.Generated.StepStartPart.t()
    | OpenCode.Generated.SubtaskPart.t()
    | OpenCode.Generated.TextPart.t()
    | OpenCode.Generated.ToolPart.t()
  ]
}
```

# `session_shell_200_json_resp`

```elixir
@type session_shell_200_json_resp() :: %{
  info:
    OpenCode.Generated.AssistantMessage.t() | OpenCode.Generated.UserMessage.t(),
  parts: [
    OpenCode.Generated.AgentPart.t()
    | OpenCode.Generated.CompactionPart.t()
    | OpenCode.Generated.FilePart.t()
    | OpenCode.Generated.PatchPart.t()
    | OpenCode.Generated.ReasoningPart.t()
    | OpenCode.Generated.RetryPart.t()
    | OpenCode.Generated.SnapshotPart.t()
    | OpenCode.Generated.StepFinishPart.t()
    | OpenCode.Generated.StepStartPart.t()
    | OpenCode.Generated.SubtaskPart.t()
    | OpenCode.Generated.TextPart.t()
    | OpenCode.Generated.ToolPart.t()
  ]
}
```

# `t`

```elixir
@type t() :: %OpenCode.Generated.Session{
  agent: String.t() | nil,
  cost: number() | nil,
  directory: String.t(),
  id: String.t(),
  metadata: map() | nil,
  model: OpenCode.Generated.SessionModel.t() | nil,
  parent_id: String.t() | nil,
  path: String.t() | nil,
  permission: [OpenCode.Generated.PermissionRule.t()] | nil,
  project_id: String.t(),
  revert: OpenCode.Generated.SessionRevert.t() | nil,
  share: OpenCode.Generated.SessionShare.t() | nil,
  slug: String.t(),
  summary: OpenCode.Generated.SessionSummary.t() | nil,
  time: OpenCode.Generated.SessionTime.t(),
  title: String.t(),
  tokens: OpenCode.Generated.SessionTokens.t() | nil,
  version: String.t(),
  workspace_id: String.t() | nil
}
```

# `part_delete`

```elixir
@spec part_delete(
  sessionID :: String.t(),
  messageID :: String.t(),
  partID :: String.t(),
  opts :: keyword()
) ::
  {:ok, boolean()}
  | {:error,
     OpenCode.Generated.EffectHttpApiErrorBadRequest.t()
     | OpenCode.Generated.InvalidRequestError.t()
     | OpenCode.Generated.NotFoundError.t()}
```

delete `/session/{sessionID}/message/{messageID}/part/{partID}`

Delete a part from a message.

## Options

  * `directory`
  * `workspace`

# `part_update`

```elixir
@spec part_update(
  sessionID :: String.t(),
  messageID :: String.t(),
  partID :: String.t(),
  body ::
    OpenCode.Generated.AgentPart.t()
    | OpenCode.Generated.CompactionPart.t()
    | OpenCode.Generated.FilePart.t()
    | OpenCode.Generated.PatchPart.t()
    | OpenCode.Generated.ReasoningPart.t()
    | OpenCode.Generated.RetryPart.t()
    | OpenCode.Generated.SnapshotPart.t()
    | OpenCode.Generated.StepFinishPart.t()
    | OpenCode.Generated.StepStartPart.t()
    | OpenCode.Generated.SubtaskPart.t()
    | OpenCode.Generated.TextPart.t()
    | OpenCode.Generated.ToolPart.t(),
  opts :: keyword()
) ::
  {:ok,
   OpenCode.Generated.AgentPart.t()
   | OpenCode.Generated.CompactionPart.t()
   | OpenCode.Generated.FilePart.t()
   | OpenCode.Generated.PatchPart.t()
   | OpenCode.Generated.ReasoningPart.t()
   | OpenCode.Generated.RetryPart.t()
   | OpenCode.Generated.SnapshotPart.t()
   | OpenCode.Generated.StepFinishPart.t()
   | OpenCode.Generated.StepStartPart.t()
   | OpenCode.Generated.SubtaskPart.t()
   | OpenCode.Generated.TextPart.t()
   | OpenCode.Generated.ToolPart.t()}
  | {:error,
     OpenCode.Generated.EffectHttpApiErrorBadRequest.t()
     | OpenCode.Generated.InvalidRequestError.t()
     | OpenCode.Generated.NotFoundError.t()}
```

patch `/session/{sessionID}/message/{messageID}/part/{partID}`

Update a part in a message.

## Options

  * `directory`
  * `workspace`

## Request Body

**Content Types**: `application/json`

# `permission_respond`

```elixir
@spec permission_respond(
  sessionID :: String.t(),
  permissionID :: String.t(),
  body :: map(),
  opts :: keyword()
) ::
  {:ok, boolean()}
  | {:error,
     OpenCode.Generated.EffectHttpApiErrorBadRequest.t()
     | OpenCode.Generated.InvalidRequestError.t()
     | OpenCode.Generated.NotFoundError.t()
     | OpenCode.Generated.PermissionNotFoundError.t()}
```

Respond to permission

Approve or deny a permission request from the AI assistant.

## Options

  * `directory`
  * `workspace`

## Request Body

**Content Types**: `application/json`

# `session_abort`

```elixir
@spec session_abort(sessionID :: String.t(), opts :: keyword()) ::
  {:ok, boolean()}
  | {:error,
     OpenCode.Generated.EffectHttpApiErrorBadRequest.t()
     | OpenCode.Generated.InvalidRequestError.t()}
```

Abort session

Abort an active session and stop any ongoing AI processing or command execution.

## Options

  * `directory`
  * `workspace`

# `session_children`

```elixir
@spec session_children(sessionID :: String.t(), opts :: keyword()) ::
  {:ok, [t()]}
  | {:error,
     OpenCode.Generated.EffectHttpApiErrorBadRequest.t()
     | OpenCode.Generated.InvalidRequestError.t()
     | OpenCode.Generated.NotFoundError.t()}
```

Get session children

Retrieve all child sessions that were forked from the specified parent session.

## Options

  * `directory`
  * `workspace`

# `session_command`

```elixir
@spec session_command(sessionID :: String.t(), body :: map(), opts :: keyword()) ::
  {:ok, session_command_200_json_resp()}
  | {:error,
     OpenCode.Generated.EffectHttpApiErrorBadRequest.t()
     | OpenCode.Generated.InvalidRequestError.t()
     | OpenCode.Generated.NotFoundError.t()}
```

Send command

Send a new command to a session for execution by the AI assistant.

## Options

  * `directory`
  * `workspace`

## Request Body

**Content Types**: `application/json`

# `session_create`

```elixir
@spec session_create(body :: map(), opts :: keyword()) ::
  {:ok, t()}
  | {:error,
     OpenCode.Generated.EffectHttpApiErrorBadRequest.t()
     | OpenCode.Generated.InvalidRequestError.t()}
```

Create session

Create a new OpenCode session for interacting with AI assistants and managing conversations.

## Options

  * `directory`
  * `workspace`

## Request Body

**Content Types**: `application/json`

# `session_delete`

```elixir
@spec session_delete(sessionID :: String.t(), opts :: keyword()) ::
  {:ok, boolean()}
  | {:error,
     OpenCode.Generated.EffectHttpApiErrorBadRequest.t()
     | OpenCode.Generated.InvalidRequestError.t()
     | OpenCode.Generated.NotFoundError.t()}
```

Delete session

Delete a session and permanently remove all associated data, including messages and history.

## Options

  * `directory`
  * `workspace`

# `session_delete_message`

```elixir
@spec session_delete_message(
  sessionID :: String.t(),
  messageID :: String.t(),
  opts :: keyword()
) ::
  {:ok, boolean()}
  | {:error,
     OpenCode.Generated.EffectHttpApiErrorBadRequest.t()
     | OpenCode.Generated.InvalidRequestError.t()
     | OpenCode.Generated.NotFoundError.t()
     | OpenCode.Generated.SessionBusyError.t()}
```

Delete message

Permanently delete a specific message and all of its parts from a session without reverting file changes.

## Options

  * `directory`
  * `workspace`

# `session_diff`

```elixir
@spec session_diff(sessionID :: String.t(), opts :: keyword()) ::
  {:ok, [OpenCode.Generated.SnapshotFileDiff.t()]}
  | {:error, OpenCode.Generated.BadRequestError.t()}
```

Get message diff

Get the file changes (diff) that resulted from a specific user message in the session.

## Options

  * `directory`
  * `workspace`
  * `messageID`

# `session_fork`

```elixir
@spec session_fork(sessionID :: String.t(), body :: map(), opts :: keyword()) ::
  {:ok, t()}
  | {:error,
     OpenCode.Generated.EffectHttpApiErrorBadRequest.t()
     | OpenCode.Generated.InvalidRequestError.t()
     | OpenCode.Generated.NotFoundError.t()}
```

Fork session

Create a new session by forking an existing session at a specific message point.

## Options

  * `directory`
  * `workspace`

## Request Body

**Content Types**: `application/json`

# `session_get`

```elixir
@spec session_get(sessionID :: String.t(), opts :: keyword()) ::
  {:ok, t()}
  | {:error,
     OpenCode.Generated.EffectHttpApiErrorBadRequest.t()
     | OpenCode.Generated.InvalidRequestError.t()
     | OpenCode.Generated.NotFoundError.t()}
```

Get session

Retrieve detailed information about a specific OpenCode session.

## Options

  * `directory`
  * `workspace`

# `session_init`

```elixir
@spec session_init(sessionID :: String.t(), body :: map(), opts :: keyword()) ::
  {:ok, boolean()}
  | {:error,
     OpenCode.Generated.EffectHttpApiErrorBadRequest.t()
     | OpenCode.Generated.InvalidRequestError.t()
     | OpenCode.Generated.NotFoundError.t()}
```

Initialize session

Analyze the current application and create an AGENTS.md file with project-specific agent configurations.

## Options

  * `directory`
  * `workspace`

## Request Body

**Content Types**: `application/json`

# `session_list`

```elixir
@spec session_list(opts :: keyword()) ::
  {:ok, [t()]} | {:error, OpenCode.Generated.BadRequestError.t()}
```

List sessions

Get a list of all OpenCode sessions, sorted by most recently updated.

## Options

  * `directory`
  * `workspace`
  * `scope`
  * `path`
  * `roots`
  * `start`
  * `search`
  * `limit`

# `session_message`

```elixir
@spec session_message(
  sessionID :: String.t(),
  messageID :: String.t(),
  opts :: keyword()
) ::
  {:ok, session_message_200_json_resp()}
  | {:error,
     OpenCode.Generated.EffectHttpApiErrorBadRequest.t()
     | OpenCode.Generated.InvalidRequestError.t()
     | OpenCode.Generated.NotFoundError.t()}
```

Get message

Retrieve a specific message from a session by its message ID.

## Options

  * `directory`
  * `workspace`

# `session_messages`

```elixir
@spec session_messages(sessionID :: String.t(), opts :: keyword()) ::
  {:ok, [session_messages_200_json_resp()]}
  | {:error,
     OpenCode.Generated.EffectHttpApiErrorBadRequest.t()
     | OpenCode.Generated.InvalidRequestError.t()
     | OpenCode.Generated.NotFoundError.t()}
```

Get session messages

Retrieve all messages in a session, including user prompts and AI responses.

## Options

  * `directory`
  * `workspace`
  * `limit`
  * `before`

# `session_prompt`

```elixir
@spec session_prompt(sessionID :: String.t(), body :: map(), opts :: keyword()) ::
  {:ok, session_prompt_200_json_resp()}
  | {:error,
     OpenCode.Generated.EffectHttpApiErrorBadRequest.t()
     | OpenCode.Generated.InvalidRequestError.t()
     | OpenCode.Generated.NotFoundError.t()}
```

Send message

Create and send a new message to a session, streaming the AI response.

## Options

  * `directory`
  * `workspace`

## Request Body

**Content Types**: `application/json`

# `session_prompt_async`

```elixir
@spec session_prompt_async(sessionID :: String.t(), body :: map(), opts :: keyword()) ::
  :ok
  | {:error,
     OpenCode.Generated.EffectHttpApiErrorBadRequest.t()
     | OpenCode.Generated.InvalidRequestError.t()
     | OpenCode.Generated.NotFoundError.t()}
```

Send async message

Create and send a new message to a session asynchronously, starting the session if needed and returning immediately.

## Options

  * `directory`
  * `workspace`

## Request Body

**Content Types**: `application/json`

# `session_revert`

```elixir
@spec session_revert(sessionID :: String.t(), body :: map(), opts :: keyword()) ::
  {:ok, t()}
  | {:error,
     OpenCode.Generated.EffectHttpApiErrorBadRequest.t()
     | OpenCode.Generated.InvalidRequestError.t()
     | OpenCode.Generated.NotFoundError.t()
     | OpenCode.Generated.SessionBusyError.t()}
```

Revert message

Revert a specific message in a session, undoing its effects and restoring the previous state.

## Options

  * `directory`
  * `workspace`

## Request Body

**Content Types**: `application/json`

# `session_share`

```elixir
@spec session_share(sessionID :: String.t(), opts :: keyword()) ::
  {:ok, t()}
  | {:error,
     OpenCode.Generated.BadRequestError.t()
     | OpenCode.Generated.EffectHttpApiErrorInternalServerError.t()
     | OpenCode.Generated.NotFoundError.t()}
```

Share session

Create a shareable link for a session, allowing others to view the conversation.

## Options

  * `directory`
  * `workspace`

# `session_shell`

```elixir
@spec session_shell(sessionID :: String.t(), body :: map(), opts :: keyword()) ::
  {:ok, session_shell_200_json_resp()}
  | {:error,
     OpenCode.Generated.EffectHttpApiErrorBadRequest.t()
     | OpenCode.Generated.InvalidRequestError.t()
     | OpenCode.Generated.NotFoundError.t()
     | OpenCode.Generated.SessionBusyError.t()}
```

Run shell command

Execute a shell command within the session context and return the AI's response.

## Options

  * `directory`
  * `workspace`

## Request Body

**Content Types**: `application/json`

# `session_status`

```elixir
@spec session_status(opts :: keyword()) ::
  {:ok, map()}
  | {:error,
     OpenCode.Generated.EffectHttpApiErrorBadRequest.t()
     | OpenCode.Generated.InvalidRequestError.t()}
```

Get session status

Retrieve the current status of all sessions, including active, idle, and completed states.

## Options

  * `directory`
  * `workspace`

# `session_summarize`

```elixir
@spec session_summarize(sessionID :: String.t(), body :: map(), opts :: keyword()) ::
  {:ok, boolean()}
  | {:error,
     OpenCode.Generated.EffectHttpApiErrorBadRequest.t()
     | OpenCode.Generated.InvalidRequestError.t()
     | OpenCode.Generated.NotFoundError.t()}
```

Summarize session

Generate a concise summary of the session using AI compaction to preserve key information.

## Options

  * `directory`
  * `workspace`

## Request Body

**Content Types**: `application/json`

# `session_todo`

```elixir
@spec session_todo(sessionID :: String.t(), opts :: keyword()) ::
  {:ok, [OpenCode.Generated.Todo.t()]}
  | {:error,
     OpenCode.Generated.EffectHttpApiErrorBadRequest.t()
     | OpenCode.Generated.InvalidRequestError.t()
     | OpenCode.Generated.NotFoundError.t()}
```

Get session todos

Retrieve the todo list associated with a specific session, showing tasks and action items.

## Options

  * `directory`
  * `workspace`

# `session_unrevert`

```elixir
@spec session_unrevert(sessionID :: String.t(), opts :: keyword()) ::
  {:ok, t()}
  | {:error,
     OpenCode.Generated.EffectHttpApiErrorBadRequest.t()
     | OpenCode.Generated.InvalidRequestError.t()
     | OpenCode.Generated.NotFoundError.t()
     | OpenCode.Generated.SessionBusyError.t()}
```

Restore reverted messages

Restore all previously reverted messages in a session.

## Options

  * `directory`
  * `workspace`

# `session_unshare`

```elixir
@spec session_unshare(sessionID :: String.t(), opts :: keyword()) ::
  {:ok, t()}
  | {:error,
     OpenCode.Generated.BadRequestError.t()
     | OpenCode.Generated.EffectHttpApiErrorInternalServerError.t()
     | OpenCode.Generated.NotFoundError.t()}
```

Unshare session

Remove the shareable link for a session, making it private again.

## Options

  * `directory`
  * `workspace`

# `session_update`

```elixir
@spec session_update(sessionID :: String.t(), body :: map(), opts :: keyword()) ::
  {:ok, t()}
  | {:error,
     OpenCode.Generated.EffectHttpApiErrorBadRequest.t()
     | OpenCode.Generated.InvalidRequestError.t()
     | OpenCode.Generated.NotFoundError.t()}
```

Update session

Update properties of an existing session, such as title or other metadata.

## Options

  * `directory`
  * `workspace`

## Request Body

**Content Types**: `application/json`

---

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