# yaml-language-server: $schema=https://app.stainless.com/config-internal.schema.json

organization:
  name: opencode
  docs: "https://opencode.ai/docs"
  contact: "support@sst.dev"

targets:
  typescript:
    package_name: "@opencode-ai/sdk"
    production_repo: "sst/opencode-sdk-js"
    publish:
      npm: true
  go:
    package_name: opencode
    production_repo: sst/opencode-sdk-go
  python:
    project_name: opencode-ai
    package_name: opencode_ai
    production_repo: sst/opencode-sdk-python
    publish:
      pypi: true

environments:
  production: http://localhost:54321

streaming:
  on_event:
    - kind: fallthrough
      handle: yield

resources:
  $shared:
    models:
      unknownError: UnknownError
      providerAuthError: ProviderAuthError
      messageAbortedError: MessageAbortedError

  event:
    methods:
      list:
        endpoint: get /event
        paginated: false
        streaming:
          # This method is always streaming.
          param_discriminator: null

  app:
    models:
      app: App
      provider: Provider
      model: Model
      agent: Agent
    methods:
      get: get /app
      init: post /app/init
      log: post /log
      agents: get /agent
      providers: get /config/providers

  find:
    models:
      symbol: Symbol
    methods:
      text: get /find
      files: get /find/file
      symbols: get /find/symbol

  file:
    models:
      file: File
      fileNode: FileNode

    methods:
      list: get /file
      read: get /file/content
      status: get /file/status

  config:
    models:
      config: Config
      keybindsConfig: KeybindsConfig
      mcpLocalConfig: McpLocalConfig
      mcpRemoteConfig: McpRemoteConfig
      modeConfig: ModeConfig
    methods:
      get: get /config

  command:
    models:
      command: Command
    methods:
      list: get /command

  session:
    models:
      session: Session
      message: Message
      part: Part
      textPart: TextPart
      textPartInput: TextPartInput
      filePart: FilePart
      filePartInput: FilePartInput
      filePartSourceText: FilePartSourceText
      filePartSource: FilePartSource
      fileSource: FileSource
      symbolSource: SymbolSource
      toolPart: ToolPart
      agentPart: AgentPart
      agentPartInput: AgentPartInput
      reasoningPart: ReasoningPart
      stepStartPart: StepStartPart
      stepFinishPart: StepFinishPart
      snapshotPart: SnapshotPart
      assistantMessage: AssistantMessage
      userMessage: UserMessage
      toolStatePending: ToolStatePending
      toolStateRunning: ToolStateRunning
      toolStateCompleted: ToolStateCompleted
      toolStateError: ToolStateError

    methods:
      get: get /session/{id}
      list: get /session
      children: get /session/{id}/children
      create: post /session
      delete: delete /session/{id}
      init: post /session/{id}/init
      abort: post /session/{id}/abort
      share: post /session/{id}/share
      unshare: delete /session/{id}/share
      summarize: post /session/{id}/summarize
      message: get /session/{id}/message/{messageID}
      messages: get /session/{id}/message
      chat: post /session/{id}/message
      command: post /session/{id}/command
      shell: post /session/{id}/shell
      update: patch /session/{id}
      revert: post /session/{id}/revert
      unrevert: post /session/{id}/unrevert

    subresources:
      permissions:
        models:
          permission: Permission
        methods:
          respond: post /session/{id}/permissions/{permissionID}

  tui:
    methods:
      appendPrompt: post /tui/append-prompt
      submitPrompt: post /tui/submit-prompt
      clearPrompt: post /tui/clear-prompt
      openHelp: post /tui/open-help
      openSessions: post /tui/open-sessions
      openThemes: post /tui/open-themes
      openModels: post /tui/open-models
      executeCommand: post /tui/execute-command
      showToast: post /tui/show-toast

settings:
  disable_mock_tests: true
  license: MIT

security:
  - {}

readme:
  example_requests:
    default:
      type: request
      endpoint: get /session
      params: {}
    headline:
      type: request
      endpoint: get /session
      params: {}
    streaming:
      type: request
      endpoint: get /event
      params: {}
