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