Packages
opencode_sdk
0.1.71
0.1.84
0.1.83
0.1.82
0.1.81
0.1.80
0.1.79
0.1.78
0.1.77
0.1.76
0.1.75
0.1.74
0.1.73
0.1.72
0.1.71
0.1.70
0.1.69
0.1.68
0.1.67
0.1.66
0.1.65
0.1.64
0.1.63
0.1.62
0.1.61
0.1.60
0.1.59
0.1.58
0.1.57
0.1.56
0.1.55
0.1.54
0.1.53
0.1.52
0.1.51
0.1.50
0.1.49
0.1.48
0.1.47
0.1.46
0.1.45
0.1.44
0.1.43
0.1.42
0.1.41
0.1.40
0.1.39
0.1.38
0.1.37
0.1.36
0.1.35
0.1.34
0.1.33
0.1.32
0.1.31
0.1.30
0.1.29
0.1.28
0.1.27
0.1.26
0.1.25
0.1.24
0.1.23
0.1.22
0.1.21
0.1.20
0.1.19
0.1.18
0.1.17
0.1.16
0.1.15
0.1.14
0.1.13
0.1.12
0.1.11
0.1.10
0.1.9
0.1.8
0.1.7
0.1.6
0.1.5
0.1.4
0.1.3
0.1.2
0.1.1
0.1.0
Unofficial OpenCode SDK for Elixir. A complete Elixir SDK for OpenCode, providing server creation, session management, messaging, file operations, and more. Mirrors the functionality of the official JavaScript SDK (@opencode-ai/sdk). Not affiliated with or built by the OpenCode team.
Current section
Files
Jump to
Current section
Files
lib/opencode/generated/v2.ex
defmodule OpenCode.Generated.V2 do
@moduledoc """
Provides API endpoints related to v2
"""
@default_client OpenCode.Client
@doc """
Compact v2 session
Compact a v2 session conversation.
## Options
* `directory`
* `workspace`
"""
@spec v2_session_compact(sessionID :: String.t(), opts :: keyword) ::
:ok
| {:error,
OpenCode.Generated.InvalidRequestError.t()
| OpenCode.Generated.ServiceUnavailableError.t()
| OpenCode.Generated.SessionNotFoundError.t()
| OpenCode.Generated.UnauthorizedError.t()}
def v2_session_compact(sessionID, opts \\ []) do
client = opts[:client] || @default_client
query = Keyword.take(opts, [:directory, :workspace])
client.request(%{
args: [sessionID: sessionID],
call: {OpenCode.Generated.V2, :v2_session_compact},
url: "/api/session/#{sessionID}/compact",
method: :post,
query: query,
response: [
{204, :null},
{400, {OpenCode.Generated.InvalidRequestError, :t}},
{401, {OpenCode.Generated.UnauthorizedError, :t}},
{404, {OpenCode.Generated.SessionNotFoundError, :t}},
{503, {OpenCode.Generated.ServiceUnavailableError, :t}}
],
opts: opts
})
end
@doc """
Get v2 session context
Retrieve the active context messages for a v2 session (all messages after the last compaction).
## Options
* `directory`
* `workspace`
"""
@spec v2_session_context(sessionID :: String.t(), opts :: keyword) ::
{:ok,
[
OpenCode.Generated.SessionMessageAgentSwitched.t()
| OpenCode.Generated.SessionMessageAssistant.t()
| OpenCode.Generated.SessionMessageCompaction.t()
| OpenCode.Generated.SessionMessageModelSwitched.t()
| OpenCode.Generated.SessionMessageShell.t()
| OpenCode.Generated.SessionMessageSynthetic.t()
| OpenCode.Generated.SessionMessageUser.t()
]}
| {:error,
OpenCode.Generated.InvalidRequestError.t()
| OpenCode.Generated.SessionNotFoundError.t()
| OpenCode.Generated.UnauthorizedError.t()
| OpenCode.Generated.UnknownError1.t()}
def v2_session_context(sessionID, opts \\ []) do
client = opts[:client] || @default_client
query = Keyword.take(opts, [:directory, :workspace])
client.request(%{
args: [sessionID: sessionID],
call: {OpenCode.Generated.V2, :v2_session_context},
url: "/api/session/#{sessionID}/context",
method: :get,
query: query,
response: [
{200,
[
union: [
{OpenCode.Generated.SessionMessageAgentSwitched, :t},
{OpenCode.Generated.SessionMessageAssistant, :t},
{OpenCode.Generated.SessionMessageCompaction, :t},
{OpenCode.Generated.SessionMessageModelSwitched, :t},
{OpenCode.Generated.SessionMessageShell, :t},
{OpenCode.Generated.SessionMessageSynthetic, :t},
{OpenCode.Generated.SessionMessageUser, :t}
]
]},
{400, {OpenCode.Generated.InvalidRequestError, :t}},
{401, {OpenCode.Generated.UnauthorizedError, :t}},
{404, {OpenCode.Generated.SessionNotFoundError, :t}},
{500, {OpenCode.Generated.UnknownError1, :t}}
],
opts: opts
})
end
@doc """
List v2 sessions
Retrieve sessions in the requested order. Items keep that order across pages; use cursor.next or cursor.previous to move through the ordered list.
## Options
* `directory`
* `workspace`
* `limit`
* `order`
* `path`
* `roots`
* `start`
* `search`
* `cursor`
"""
@spec v2_session_list(opts :: keyword) ::
{:ok, OpenCode.Generated.V2SessionsResponse.t()}
| {:error,
OpenCode.Generated.InvalidCursorError.t()
| OpenCode.Generated.InvalidRequestError.t()
| OpenCode.Generated.UnauthorizedError.t()}
def v2_session_list(opts \\ []) do
client = opts[:client] || @default_client
query =
Keyword.take(opts, [
:cursor,
:directory,
:limit,
:order,
:path,
:roots,
:search,
:start,
:workspace
])
client.request(%{
args: [],
call: {OpenCode.Generated.V2, :v2_session_list},
url: "/api/session",
method: :get,
query: query,
response: [
{200, {OpenCode.Generated.V2SessionsResponse, :t}},
{400,
{:union,
[
{OpenCode.Generated.InvalidCursorError, :t},
{OpenCode.Generated.InvalidRequestError, :t}
]}},
{401, {OpenCode.Generated.UnauthorizedError, :t}}
],
opts: opts
})
end
@doc """
Send v2 message
Create a v2 session message and queue it for the agent loop.
## Options
* `directory`
* `workspace`
## Request Body
**Content Types**: `application/json`
"""
@spec v2_session_prompt(sessionID :: String.t(), body :: map, opts :: keyword) ::
{:ok,
OpenCode.Generated.SessionMessageAgentSwitched.t()
| OpenCode.Generated.SessionMessageAssistant.t()
| OpenCode.Generated.SessionMessageCompaction.t()
| OpenCode.Generated.SessionMessageModelSwitched.t()
| OpenCode.Generated.SessionMessageShell.t()
| OpenCode.Generated.SessionMessageSynthetic.t()
| OpenCode.Generated.SessionMessageUser.t()}
| {:error,
OpenCode.Generated.InvalidRequestError.t()
| OpenCode.Generated.ServiceUnavailableError.t()
| OpenCode.Generated.SessionNotFoundError.t()
| OpenCode.Generated.UnauthorizedError.t()}
def v2_session_prompt(sessionID, body, opts \\ []) do
client = opts[:client] || @default_client
query = Keyword.take(opts, [:directory, :workspace])
client.request(%{
args: [sessionID: sessionID, body: body],
call: {OpenCode.Generated.V2, :v2_session_prompt},
url: "/api/session/#{sessionID}/prompt",
body: body,
method: :post,
query: query,
request: [{"application/json", :map}],
response: [
{200,
{:union,
[
{OpenCode.Generated.SessionMessageAgentSwitched, :t},
{OpenCode.Generated.SessionMessageAssistant, :t},
{OpenCode.Generated.SessionMessageCompaction, :t},
{OpenCode.Generated.SessionMessageModelSwitched, :t},
{OpenCode.Generated.SessionMessageShell, :t},
{OpenCode.Generated.SessionMessageSynthetic, :t},
{OpenCode.Generated.SessionMessageUser, :t}
]}},
{400, {OpenCode.Generated.InvalidRequestError, :t}},
{401, {OpenCode.Generated.UnauthorizedError, :t}},
{404, {OpenCode.Generated.SessionNotFoundError, :t}},
{503, {OpenCode.Generated.ServiceUnavailableError, :t}}
],
opts: opts
})
end
@doc """
Wait for v2 session
Wait for a v2 session agent loop to become idle.
## Options
* `directory`
* `workspace`
"""
@spec v2_session_wait(sessionID :: String.t(), opts :: keyword) ::
:ok
| {:error,
OpenCode.Generated.InvalidRequestError.t()
| OpenCode.Generated.ServiceUnavailableError.t()
| OpenCode.Generated.SessionNotFoundError.t()
| OpenCode.Generated.UnauthorizedError.t()}
def v2_session_wait(sessionID, opts \\ []) do
client = opts[:client] || @default_client
query = Keyword.take(opts, [:directory, :workspace])
client.request(%{
args: [sessionID: sessionID],
call: {OpenCode.Generated.V2, :v2_session_wait},
url: "/api/session/#{sessionID}/wait",
method: :post,
query: query,
response: [
{204, :null},
{400, {OpenCode.Generated.InvalidRequestError, :t}},
{401, {OpenCode.Generated.UnauthorizedError, :t}},
{404, {OpenCode.Generated.SessionNotFoundError, :t}},
{503, {OpenCode.Generated.ServiceUnavailableError, :t}}
],
opts: opts
})
end
end