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
218 lines
6.0 KiB
Go
218 lines
6.0 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"
|
|
)
|
|
|
|
// FileService 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 [NewFileService] method instead.
|
|
type FileService struct {
|
|
Options []option.RequestOption
|
|
}
|
|
|
|
// NewFileService 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 NewFileService(opts ...option.RequestOption) (r *FileService) {
|
|
r = &FileService{}
|
|
r.Options = opts
|
|
return
|
|
}
|
|
|
|
// List files and directories
|
|
func (r *FileService) List(ctx context.Context, query FileListParams, opts ...option.RequestOption) (res *[]FileNode, err error) {
|
|
opts = append(r.Options[:], opts...)
|
|
path := "file"
|
|
err = requestconfig.ExecuteNewRequest(ctx, http.MethodGet, path, query, &res, opts...)
|
|
return
|
|
}
|
|
|
|
// Read a file
|
|
func (r *FileService) Read(ctx context.Context, query FileReadParams, opts ...option.RequestOption) (res *FileReadResponse, err error) {
|
|
opts = append(r.Options[:], opts...)
|
|
path := "file/content"
|
|
err = requestconfig.ExecuteNewRequest(ctx, http.MethodGet, path, query, &res, opts...)
|
|
return
|
|
}
|
|
|
|
// Get file status
|
|
func (r *FileService) Status(ctx context.Context, query FileStatusParams, opts ...option.RequestOption) (res *[]File, err error) {
|
|
opts = append(r.Options[:], opts...)
|
|
path := "file/status"
|
|
err = requestconfig.ExecuteNewRequest(ctx, http.MethodGet, path, query, &res, opts...)
|
|
return
|
|
}
|
|
|
|
type File struct {
|
|
Added int64 `json:"added,required"`
|
|
Path string `json:"path,required"`
|
|
Removed int64 `json:"removed,required"`
|
|
Status FileStatus `json:"status,required"`
|
|
JSON fileJSON `json:"-"`
|
|
}
|
|
|
|
// fileJSON contains the JSON metadata for the struct [File]
|
|
type fileJSON struct {
|
|
Added apijson.Field
|
|
Path apijson.Field
|
|
Removed apijson.Field
|
|
Status apijson.Field
|
|
raw string
|
|
ExtraFields map[string]apijson.Field
|
|
}
|
|
|
|
func (r *File) UnmarshalJSON(data []byte) (err error) {
|
|
return apijson.UnmarshalRoot(data, r)
|
|
}
|
|
|
|
func (r fileJSON) RawJSON() string {
|
|
return r.raw
|
|
}
|
|
|
|
type FileStatus string
|
|
|
|
const (
|
|
FileStatusAdded FileStatus = "added"
|
|
FileStatusDeleted FileStatus = "deleted"
|
|
FileStatusModified FileStatus = "modified"
|
|
)
|
|
|
|
func (r FileStatus) IsKnown() bool {
|
|
switch r {
|
|
case FileStatusAdded, FileStatusDeleted, FileStatusModified:
|
|
return true
|
|
}
|
|
return false
|
|
}
|
|
|
|
type FileNode struct {
|
|
Ignored bool `json:"ignored,required"`
|
|
Name string `json:"name,required"`
|
|
Path string `json:"path,required"`
|
|
Type FileNodeType `json:"type,required"`
|
|
JSON fileNodeJSON `json:"-"`
|
|
}
|
|
|
|
// fileNodeJSON contains the JSON metadata for the struct [FileNode]
|
|
type fileNodeJSON struct {
|
|
Ignored apijson.Field
|
|
Name apijson.Field
|
|
Path apijson.Field
|
|
Type apijson.Field
|
|
raw string
|
|
ExtraFields map[string]apijson.Field
|
|
}
|
|
|
|
func (r *FileNode) UnmarshalJSON(data []byte) (err error) {
|
|
return apijson.UnmarshalRoot(data, r)
|
|
}
|
|
|
|
func (r fileNodeJSON) RawJSON() string {
|
|
return r.raw
|
|
}
|
|
|
|
type FileNodeType string
|
|
|
|
const (
|
|
FileNodeTypeFile FileNodeType = "file"
|
|
FileNodeTypeDirectory FileNodeType = "directory"
|
|
)
|
|
|
|
func (r FileNodeType) IsKnown() bool {
|
|
switch r {
|
|
case FileNodeTypeFile, FileNodeTypeDirectory:
|
|
return true
|
|
}
|
|
return false
|
|
}
|
|
|
|
type FileReadResponse struct {
|
|
Content string `json:"content,required"`
|
|
Type FileReadResponseType `json:"type,required"`
|
|
JSON fileReadResponseJSON `json:"-"`
|
|
}
|
|
|
|
// fileReadResponseJSON contains the JSON metadata for the struct
|
|
// [FileReadResponse]
|
|
type fileReadResponseJSON struct {
|
|
Content apijson.Field
|
|
Type apijson.Field
|
|
raw string
|
|
ExtraFields map[string]apijson.Field
|
|
}
|
|
|
|
func (r *FileReadResponse) UnmarshalJSON(data []byte) (err error) {
|
|
return apijson.UnmarshalRoot(data, r)
|
|
}
|
|
|
|
func (r fileReadResponseJSON) RawJSON() string {
|
|
return r.raw
|
|
}
|
|
|
|
type FileReadResponseType string
|
|
|
|
const (
|
|
FileReadResponseTypeRaw FileReadResponseType = "raw"
|
|
FileReadResponseTypePatch FileReadResponseType = "patch"
|
|
)
|
|
|
|
func (r FileReadResponseType) IsKnown() bool {
|
|
switch r {
|
|
case FileReadResponseTypeRaw, FileReadResponseTypePatch:
|
|
return true
|
|
}
|
|
return false
|
|
}
|
|
|
|
type FileListParams struct {
|
|
Path param.Field[string] `query:"path,required"`
|
|
Directory param.Field[string] `query:"directory"`
|
|
}
|
|
|
|
// URLQuery serializes [FileListParams]'s query parameters as `url.Values`.
|
|
func (r FileListParams) URLQuery() (v url.Values) {
|
|
return apiquery.MarshalWithSettings(r, apiquery.QuerySettings{
|
|
ArrayFormat: apiquery.ArrayQueryFormatComma,
|
|
NestedFormat: apiquery.NestedQueryFormatBrackets,
|
|
})
|
|
}
|
|
|
|
type FileReadParams struct {
|
|
Path param.Field[string] `query:"path,required"`
|
|
Directory param.Field[string] `query:"directory"`
|
|
}
|
|
|
|
// URLQuery serializes [FileReadParams]'s query parameters as `url.Values`.
|
|
func (r FileReadParams) URLQuery() (v url.Values) {
|
|
return apiquery.MarshalWithSettings(r, apiquery.QuerySettings{
|
|
ArrayFormat: apiquery.ArrayQueryFormatComma,
|
|
NestedFormat: apiquery.NestedQueryFormatBrackets,
|
|
})
|
|
}
|
|
|
|
type FileStatusParams struct {
|
|
Directory param.Field[string] `query:"directory"`
|
|
}
|
|
|
|
// URLQuery serializes [FileStatusParams]'s query parameters as `url.Values`.
|
|
func (r FileStatusParams) URLQuery() (v url.Values) {
|
|
return apiquery.MarshalWithSettings(r, apiquery.QuerySettings{
|
|
ArrayFormat: apiquery.ArrayQueryFormatComma,
|
|
NestedFormat: apiquery.NestedQueryFormatBrackets,
|
|
})
|
|
}
|