mirror of
https://github.com/aljazceru/opencode.git
synced 2025-12-18 16:34:18 +01:00
This release has a bunch of minor breaking changes if you are using opencode plugins or sdk 1. storage events have been removed (we might bring this back but had some issues) 2. concept of `app` is gone - there is a new concept called `project` and endpoints to list projects and get the current project 3. plugin receives `directory` which is cwd and `worktree` which is where the root of the project is if it's a git repo 4. the session.chat function has been renamed to session.prompt in sdk. it no longer requires model to be passed in (model is now an object) 5. every endpoint takes an optional `directory` parameter to operate as though opencode is running in that directory
205 lines
5.7 KiB
Go
205 lines
5.7 KiB
Go
// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
|
|
|
package opencode
|
|
|
|
import (
|
|
"context"
|
|
"net/http"
|
|
"net/url"
|
|
|
|
"github.com/sst/opencode-sdk-go/internal/apijson"
|
|
"github.com/sst/opencode-sdk-go/internal/apiquery"
|
|
"github.com/sst/opencode-sdk-go/internal/param"
|
|
"github.com/sst/opencode-sdk-go/internal/requestconfig"
|
|
"github.com/sst/opencode-sdk-go/option"
|
|
)
|
|
|
|
// AgentService contains methods and other services that help with interacting with
|
|
// the opencode API.
|
|
//
|
|
// Note, unlike clients, this service does not read variables from the environment
|
|
// automatically. You should not instantiate this service directly, and instead use
|
|
// the [NewAgentService] method instead.
|
|
type AgentService struct {
|
|
Options []option.RequestOption
|
|
}
|
|
|
|
// NewAgentService generates a new service that applies the given options to each
|
|
// request. These options are applied after the parent client's options (if there
|
|
// is one), and before any request-specific options.
|
|
func NewAgentService(opts ...option.RequestOption) (r *AgentService) {
|
|
r = &AgentService{}
|
|
r.Options = opts
|
|
return
|
|
}
|
|
|
|
// List all agents
|
|
func (r *AgentService) List(ctx context.Context, query AgentListParams, opts ...option.RequestOption) (res *[]Agent, err error) {
|
|
opts = append(r.Options[:], opts...)
|
|
path := "agent"
|
|
err = requestconfig.ExecuteNewRequest(ctx, http.MethodGet, path, query, &res, opts...)
|
|
return
|
|
}
|
|
|
|
type Agent struct {
|
|
BuiltIn bool `json:"builtIn,required"`
|
|
Mode AgentMode `json:"mode,required"`
|
|
Name string `json:"name,required"`
|
|
Options map[string]interface{} `json:"options,required"`
|
|
Permission AgentPermission `json:"permission,required"`
|
|
Tools map[string]bool `json:"tools,required"`
|
|
Description string `json:"description"`
|
|
Model AgentModel `json:"model"`
|
|
Prompt string `json:"prompt"`
|
|
Temperature float64 `json:"temperature"`
|
|
TopP float64 `json:"topP"`
|
|
JSON agentJSON `json:"-"`
|
|
}
|
|
|
|
// agentJSON contains the JSON metadata for the struct [Agent]
|
|
type agentJSON struct {
|
|
BuiltIn apijson.Field
|
|
Mode apijson.Field
|
|
Name apijson.Field
|
|
Options apijson.Field
|
|
Permission apijson.Field
|
|
Tools apijson.Field
|
|
Description apijson.Field
|
|
Model apijson.Field
|
|
Prompt apijson.Field
|
|
Temperature apijson.Field
|
|
TopP apijson.Field
|
|
raw string
|
|
ExtraFields map[string]apijson.Field
|
|
}
|
|
|
|
func (r *Agent) UnmarshalJSON(data []byte) (err error) {
|
|
return apijson.UnmarshalRoot(data, r)
|
|
}
|
|
|
|
func (r agentJSON) RawJSON() string {
|
|
return r.raw
|
|
}
|
|
|
|
type AgentMode string
|
|
|
|
const (
|
|
AgentModeSubagent AgentMode = "subagent"
|
|
AgentModePrimary AgentMode = "primary"
|
|
AgentModeAll AgentMode = "all"
|
|
)
|
|
|
|
func (r AgentMode) IsKnown() bool {
|
|
switch r {
|
|
case AgentModeSubagent, AgentModePrimary, AgentModeAll:
|
|
return true
|
|
}
|
|
return false
|
|
}
|
|
|
|
type AgentPermission struct {
|
|
Bash map[string]AgentPermissionBash `json:"bash,required"`
|
|
Edit AgentPermissionEdit `json:"edit,required"`
|
|
Webfetch AgentPermissionWebfetch `json:"webfetch"`
|
|
JSON agentPermissionJSON `json:"-"`
|
|
}
|
|
|
|
// agentPermissionJSON contains the JSON metadata for the struct [AgentPermission]
|
|
type agentPermissionJSON struct {
|
|
Bash apijson.Field
|
|
Edit apijson.Field
|
|
Webfetch apijson.Field
|
|
raw string
|
|
ExtraFields map[string]apijson.Field
|
|
}
|
|
|
|
func (r *AgentPermission) UnmarshalJSON(data []byte) (err error) {
|
|
return apijson.UnmarshalRoot(data, r)
|
|
}
|
|
|
|
func (r agentPermissionJSON) RawJSON() string {
|
|
return r.raw
|
|
}
|
|
|
|
type AgentPermissionBash string
|
|
|
|
const (
|
|
AgentPermissionBashAsk AgentPermissionBash = "ask"
|
|
AgentPermissionBashAllow AgentPermissionBash = "allow"
|
|
AgentPermissionBashDeny AgentPermissionBash = "deny"
|
|
)
|
|
|
|
func (r AgentPermissionBash) IsKnown() bool {
|
|
switch r {
|
|
case AgentPermissionBashAsk, AgentPermissionBashAllow, AgentPermissionBashDeny:
|
|
return true
|
|
}
|
|
return false
|
|
}
|
|
|
|
type AgentPermissionEdit string
|
|
|
|
const (
|
|
AgentPermissionEditAsk AgentPermissionEdit = "ask"
|
|
AgentPermissionEditAllow AgentPermissionEdit = "allow"
|
|
AgentPermissionEditDeny AgentPermissionEdit = "deny"
|
|
)
|
|
|
|
func (r AgentPermissionEdit) IsKnown() bool {
|
|
switch r {
|
|
case AgentPermissionEditAsk, AgentPermissionEditAllow, AgentPermissionEditDeny:
|
|
return true
|
|
}
|
|
return false
|
|
}
|
|
|
|
type AgentPermissionWebfetch string
|
|
|
|
const (
|
|
AgentPermissionWebfetchAsk AgentPermissionWebfetch = "ask"
|
|
AgentPermissionWebfetchAllow AgentPermissionWebfetch = "allow"
|
|
AgentPermissionWebfetchDeny AgentPermissionWebfetch = "deny"
|
|
)
|
|
|
|
func (r AgentPermissionWebfetch) IsKnown() bool {
|
|
switch r {
|
|
case AgentPermissionWebfetchAsk, AgentPermissionWebfetchAllow, AgentPermissionWebfetchDeny:
|
|
return true
|
|
}
|
|
return false
|
|
}
|
|
|
|
type AgentModel struct {
|
|
ModelID string `json:"modelID,required"`
|
|
ProviderID string `json:"providerID,required"`
|
|
JSON agentModelJSON `json:"-"`
|
|
}
|
|
|
|
// agentModelJSON contains the JSON metadata for the struct [AgentModel]
|
|
type agentModelJSON struct {
|
|
ModelID apijson.Field
|
|
ProviderID apijson.Field
|
|
raw string
|
|
ExtraFields map[string]apijson.Field
|
|
}
|
|
|
|
func (r *AgentModel) UnmarshalJSON(data []byte) (err error) {
|
|
return apijson.UnmarshalRoot(data, r)
|
|
}
|
|
|
|
func (r agentModelJSON) RawJSON() string {
|
|
return r.raw
|
|
}
|
|
|
|
type AgentListParams struct {
|
|
Directory param.Field[string] `query:"directory"`
|
|
}
|
|
|
|
// URLQuery serializes [AgentListParams]'s query parameters as `url.Values`.
|
|
func (r AgentListParams) URLQuery() (v url.Values) {
|
|
return apiquery.MarshalWithSettings(r, apiquery.QuerySettings{
|
|
ArrayFormat: apiquery.ArrayQueryFormatComma,
|
|
NestedFormat: apiquery.NestedQueryFormatBrackets,
|
|
})
|
|
}
|