Packages
opencode_sdk
0.1.20
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/tui.ex
defmodule OpenCode.Tui do
@moduledoc """
OpenCode TUI process management.
Mirrors the JS SDK's `createOpencodeTui()` behavior.
"""
defstruct [:port]
@type t :: %__MODULE__{port: port() | nil}
@spec create(keyword()) :: {:ok, t()}
def create(opts \\ []) do
args = build_args(opts)
env = build_env(Keyword.get(opts, :config, %{}))
port =
Port.open({:spawn_executable, find_executable("opencode")}, [
:binary,
:exit_status,
:use_stdio,
args: args,
env: env
])
{:ok, %__MODULE__{port: port}}
end
@spec close(t()) :: :ok
def close(%__MODULE__{port: port}) when is_port(port) do
Port.close(port)
:ok
end
def close(_), do: :ok
defp build_args(opts) do
[]
|> put_arg(opts, :project, "--project=")
|> put_arg(opts, :model, "--model=")
|> put_arg(opts, :session, "--session=")
|> put_arg(opts, :agent, "--agent=")
end
defp put_arg(args, opts, key, flag) do
case Keyword.get(opts, key) do
nil -> args
val -> args ++ [flag <> val]
end
end
defp build_env(config) do
[{~c"OPENCODE_CONFIG_CONTENT", String.to_charlist(Jason.encode!(config))}]
end
defp find_executable(name) do
case System.find_executable(name) do
nil -> String.to_charlist(name)
path -> String.to_charlist(path)
end
end
end