diff options
Diffstat (limited to 'packages/sdk')
38 files changed, 1975 insertions, 1118 deletions
diff --git a/packages/sdk/go/.release-please-manifest.json b/packages/sdk/go/.release-please-manifest.json index c373724dc..6538ca917 100644 --- a/packages/sdk/go/.release-please-manifest.json +++ b/packages/sdk/go/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "0.1.0-alpha.8" + ".": "0.8.0" }
\ No newline at end of file diff --git a/packages/sdk/go/.stats.yml b/packages/sdk/go/.stats.yml index 58d41c722..79ec5d889 100644 --- a/packages/sdk/go/.stats.yml +++ b/packages/sdk/go/.stats.yml @@ -1,4 +1,4 @@ -configured_endpoints: 41 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/opencode%2Fopencode-6d8e9dfd438cac63fc7d689ea29adfff81ff8880c2d8e1e10fc36f375a721594.yml -openapi_spec_hash: 7ac6028dd5957c67a98d91e790863c80 -config_hash: fb625e876313a9f8f31532348fa91f59 +configured_endpoints: 43 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/opencode%2Fopencode-97b61518d8666ea7cb310af04248e00bcf8dc9753ba3c7e84471df72b3232004.yml +openapi_spec_hash: a3500531973ad999c350b87c21aa3ab8 +config_hash: 026ef000d34bf2f930e7b41e77d2d3ff diff --git a/packages/sdk/go/CHANGELOG.md b/packages/sdk/go/CHANGELOG.md index bc407fad9..014933da8 100644 --- a/packages/sdk/go/CHANGELOG.md +++ b/packages/sdk/go/CHANGELOG.md @@ -1,73 +1,122 @@ # Changelog -## 0.1.0-alpha.8 (2025-07-02) +## 0.8.0 (2025-09-01) -Full Changelog: [v0.1.0-alpha.7...v0.1.0-alpha.8](https://github.com/sst/opencode-sdk-go/compare/v0.1.0-alpha.7...v0.1.0-alpha.8) +Full Changelog: [v0.7.0...v0.8.0](https://github.com/sst/opencode-sdk-go/compare/v0.7.0...v0.8.0) ### Features -* **api:** update via SDK Studio ([651e937](https://github.com/sst/opencode-sdk-go/commit/651e937c334e1caba3b968e6cac865c219879519)) +* **api:** api update ([ae87a71](https://github.com/sst/opencode-sdk-go/commit/ae87a71949994590ace8285a39f0991ef34b664d)) -## 0.1.0-alpha.7 (2025-06-30) +## 0.7.0 (2025-09-01) -Full Changelog: [v0.1.0-alpha.6...v0.1.0-alpha.7](https://github.com/sst/opencode-sdk-go/compare/v0.1.0-alpha.6...v0.1.0-alpha.7) +Full Changelog: [v0.6.0...v0.7.0](https://github.com/sst/opencode-sdk-go/compare/v0.6.0...v0.7.0) ### Features -* **api:** update via SDK Studio ([13550a5](https://github.com/sst/opencode-sdk-go/commit/13550a5c65d77325e945ed99fe0799cd1107b775)) -* **api:** update via SDK Studio ([7b73730](https://github.com/sst/opencode-sdk-go/commit/7b73730c7fa62ba966dda3541c3e97b49be8d2bf)) - - -### Chores - -* **ci:** only run for pushes and fork pull requests ([bea59b8](https://github.com/sst/opencode-sdk-go/commit/bea59b886800ef555f89c47a9256d6392ed2e53d)) +* **api:** api update ([64bb1b1](https://github.com/sst/opencode-sdk-go/commit/64bb1b1ee0cbe153abc6fb7bd9703b47911724d4)) -## 0.1.0-alpha.6 (2025-06-28) +## 0.6.0 (2025-09-01) -Full Changelog: [v0.1.0-alpha.5...v0.1.0-alpha.6](https://github.com/sst/opencode-sdk-go/compare/v0.1.0-alpha.5...v0.1.0-alpha.6) +Full Changelog: [v0.5.0...v0.6.0](https://github.com/sst/opencode-sdk-go/compare/v0.5.0...v0.6.0) -### Bug Fixes +### Features -* don't try to deserialize as json when ResponseBodyInto is []byte ([5988d04](https://github.com/sst/opencode-sdk-go/commit/5988d04839cb78b6613057280b91b72a60fef33d)) +* **api:** api update ([928e384](https://github.com/sst/opencode-sdk-go/commit/928e3843355f96899f046f002b84372281dad0c8)) -## 0.1.0-alpha.5 (2025-06-27) +## 0.5.0 (2025-08-31) -Full Changelog: [v0.1.0-alpha.4...v0.1.0-alpha.5](https://github.com/sst/opencode-sdk-go/compare/v0.1.0-alpha.4...v0.1.0-alpha.5) +Full Changelog: [v0.4.0...v0.5.0](https://github.com/sst/opencode-sdk-go/compare/v0.4.0...v0.5.0) ### Features -* **api:** update via SDK Studio ([9e39a59](https://github.com/sst/opencode-sdk-go/commit/9e39a59b3d5d1bd5e64633732521fb28362cc70e)) +* **api:** api update ([44b281d](https://github.com/sst/opencode-sdk-go/commit/44b281d0bb39c5022a984ac9d0fca1529ccc0604)) -## 0.1.0-alpha.4 (2025-06-27) +## 0.4.0 (2025-08-31) -Full Changelog: [v0.1.0-alpha.3...v0.1.0-alpha.4](https://github.com/sst/opencode-sdk-go/compare/v0.1.0-alpha.3...v0.1.0-alpha.4) +Full Changelog: [v0.3.0...v0.4.0](https://github.com/sst/opencode-sdk-go/compare/v0.3.0...v0.4.0) ### Features -* **api:** update via SDK Studio ([9609d1b](https://github.com/sst/opencode-sdk-go/commit/9609d1b1db7806d00cb846c9914cb4935cdedf52)) +* **api:** api update ([fa9d6ec](https://github.com/sst/opencode-sdk-go/commit/fa9d6ec6472e62f4f6605d0a71a7aa8bf8a24559)) -## 0.1.0-alpha.3 (2025-06-27) +## 0.3.0 (2025-08-31) -Full Changelog: [v0.1.0-alpha.2...v0.1.0-alpha.3](https://github.com/sst/opencode-sdk-go/compare/v0.1.0-alpha.2...v0.1.0-alpha.3) +Full Changelog: [v0.2.0...v0.3.0](https://github.com/sst/opencode-sdk-go/compare/v0.2.0...v0.3.0) ### Features -* **api:** update via SDK Studio ([57f3230](https://github.com/sst/opencode-sdk-go/commit/57f32309023cc1f0f20c20d02a3907e390a71f61)) +* **api:** api update ([aae1c06](https://github.com/sst/opencode-sdk-go/commit/aae1c06bb5a93a1cd9c589846a84b3f16246f5da)) -## 0.1.0-alpha.2 (2025-06-27) +## 0.2.0 (2025-08-31) -Full Changelog: [v0.1.0-alpha.1...v0.1.0-alpha.2](https://github.com/sst/opencode-sdk-go/compare/v0.1.0-alpha.1...v0.1.0-alpha.2) +Full Changelog: [v0.1.0...v0.2.0](https://github.com/sst/opencode-sdk-go/compare/v0.1.0...v0.2.0) ### Features -* **api:** update via SDK Studio ([a766f1c](https://github.com/sst/opencode-sdk-go/commit/a766f1c54f02bbc1380151b0e22d97cc2c5892e6)) +* **api:** api update ([1472790](https://github.com/sst/opencode-sdk-go/commit/1472790542515f47bd46e2a9e28d8afea024cf9c)) -## 0.1.0-alpha.1 (2025-06-27) +## 0.1.0 (2025-08-31) -Full Changelog: [v0.0.1-alpha.0...v0.1.0-alpha.1](https://github.com/sst/opencode-sdk-go/compare/v0.0.1-alpha.0...v0.1.0-alpha.1) +Full Changelog: [v0.0.1...v0.1.0](https://github.com/sst/opencode-sdk-go/compare/v0.0.1...v0.1.0) ### Features -* **api:** update via SDK Studio ([27b7376](https://github.com/sst/opencode-sdk-go/commit/27b7376310466ee17a63f2104f546b53a2b8361a)) +* **api:** api update ([3f03ddd](https://github.com/sst/opencode-sdk-go/commit/3f03dddd5ec0de98f99ce48679077dcae9ceffd6)) +* **api:** api update ([e9f79c4](https://github.com/sst/opencode-sdk-go/commit/e9f79c4792b21ef64ab0431ffd76f5a71e04d182)) +* **api:** api update ([139a686](https://github.com/sst/opencode-sdk-go/commit/139a6862d2f0ab0c8ea791663d736868be3e96e6)) +* **api:** api update ([2ed0800](https://github.com/sst/opencode-sdk-go/commit/2ed0800b2c5b99877e9f7fde669a6c005fad6b77)) +* **api:** api update ([88a87a4](https://github.com/sst/opencode-sdk-go/commit/88a87a458f56ce0c18b502c73da933f614f56e8b)) +* **api:** api update ([0e5d65b](https://github.com/sst/opencode-sdk-go/commit/0e5d65b571e7b30dc6347e6730098878ebba3a42)) +* **api:** api update ([ba381f1](https://github.com/sst/opencode-sdk-go/commit/ba381f1e07aad24e9824df7d53befae2a644f69f)) +* **api:** api update ([3f429f5](https://github.com/sst/opencode-sdk-go/commit/3f429f5b4be5607433ef5fdc0d5bf67fe590d039)) +* **api:** api update ([9f34787](https://github.com/sst/opencode-sdk-go/commit/9f347876b35b7f898060c1a5f71c322e95978e3e)) +* **api:** api update ([379c8e0](https://github.com/sst/opencode-sdk-go/commit/379c8e00197e13aebaf2f2d61277b125f1f90011)) +* **api:** api update ([550511c](https://github.com/sst/opencode-sdk-go/commit/550511c4c5b5055ac8ff22b7b11731331bd9d088)) +* **api:** api update ([547f0c2](https://github.com/sst/opencode-sdk-go/commit/547f0c262f2df1ce83eaa7267d68be64bb29b841)) +* **api:** api update ([b7b0720](https://github.com/sst/opencode-sdk-go/commit/b7b07204bff314da24b1819c128835a43ef64065)) +* **api:** api update ([7250ffc](https://github.com/sst/opencode-sdk-go/commit/7250ffcba262b916c958ddecc2a42927982db39f)) +* **api:** api update ([17fbab7](https://github.com/sst/opencode-sdk-go/commit/17fbab73111a3eae488737c69b12370bc69c65f7)) +* **api:** api update ([1270b5c](https://github.com/sst/opencode-sdk-go/commit/1270b5cd81e6ac769dcd92ade6d877891bf51bd5)) +* **api:** api update ([a238d4a](https://github.com/sst/opencode-sdk-go/commit/a238d4abd6ed7d15f3547d27a4b6ecf4aec8431e)) +* **api:** api update ([7475655](https://github.com/sst/opencode-sdk-go/commit/7475655aca577fe4f807c2f02f92171f6a358e9c)) +* **api:** api update ([429d258](https://github.com/sst/opencode-sdk-go/commit/429d258bb56e9cdeb1528be3944bf5537ac26a96)) +* **api:** api update ([f250915](https://github.com/sst/opencode-sdk-go/commit/f2509157eaf1b453e741ee9482127cad2e3ace25)) +* **api:** api update ([5efc987](https://github.com/sst/opencode-sdk-go/commit/5efc987353801d1e772c20edf162b1c75da32743)) +* **api:** api update ([98a8350](https://github.com/sst/opencode-sdk-go/commit/98a83504f7cfc361e83314c3e79a4e9ff53f0560)) +* **api:** api update ([6da8bf8](https://github.com/sst/opencode-sdk-go/commit/6da8bf8bfe91d45991fb580753d77c5534fc0b1b)) +* **api:** api update ([f8c7148](https://github.com/sst/opencode-sdk-go/commit/f8c7148ae56143823186e2675a78e82676154956)) +* **api:** manual updates ([7cf038f](https://github.com/sst/opencode-sdk-go/commit/7cf038ffae5da1b77e1cef11b5fa166a53b467f2)) +* **api:** update via SDK Studio ([068a0eb](https://github.com/sst/opencode-sdk-go/commit/068a0eb025010da0c8d86fa1bb496a39dbedcef9)) +* **api:** update via SDK Studio ([ca651ed](https://github.com/sst/opencode-sdk-go/commit/ca651edaf71d1f3678f929287474f5bc4f1aad10)) +* **api:** update via SDK Studio ([13550a5](https://github.com/sst/opencode-sdk-go/commit/13550a5c65d77325e945ed99fe0799cd1107b775)) +* **api:** update via SDK Studio ([7b73730](https://github.com/sst/opencode-sdk-go/commit/7b73730c7fa62ba966dda3541c3e97b49be8d2bf)) +* **api:** update via SDK Studio ([9e39a59](https://github.com/sst/opencode-sdk-go/commit/9e39a59b3d5d1bd5e64633732521fb28362cc70e)) +* **api:** update via SDK Studio ([9609d1b](https://github.com/sst/opencode-sdk-go/commit/9609d1b1db7806d00cb846c9914cb4935cdedf52)) +* **api:** update via SDK Studio ([51315fa](https://github.com/sst/opencode-sdk-go/commit/51315fa2eae424743ea79701e67d44447c44144d)) +* **api:** update via SDK Studio ([af07955](https://github.com/sst/opencode-sdk-go/commit/af0795543240aefaf04fc7663a348825541c79ed)) +* **api:** update via SDK Studio ([5e3468a](https://github.com/sst/opencode-sdk-go/commit/5e3468a0aaa5ed3b13e019c3a24e0ba9147d1675)) * **api:** update via SDK Studio ([0a73e04](https://github.com/sst/opencode-sdk-go/commit/0a73e04c23c90b2061611edaa8fd6282dc0ce397)) * **api:** update via SDK Studio ([9b7883a](https://github.com/sst/opencode-sdk-go/commit/9b7883a144eeac526d9d04538e0876a9d18bb844)) +* **client:** expand max streaming buffer size ([76303e5](https://github.com/sst/opencode-sdk-go/commit/76303e51067e78e732af26ced9d83b8bad7655c3)) +* **client:** support optional json html escaping ([449748f](https://github.com/sst/opencode-sdk-go/commit/449748f35a1d8cb6f91dc36d25bf9489f4f371bd)) + + +### Bug Fixes + +* **client:** process custom base url ahead of time ([9b360d6](https://github.com/sst/opencode-sdk-go/commit/9b360d642cf6f302104308af5622e17099899e5f)) +* **client:** resolve lint errors in streaming tests ([4d36cb0](https://github.com/sst/opencode-sdk-go/commit/4d36cb09fc9d436734d5dab1c499acaa88568ff7)) +* close body before retrying ([4da3f7f](https://github.com/sst/opencode-sdk-go/commit/4da3f7f372bad222a189ba3eabcfde3373166ae5)) +* don't try to deserialize as json when ResponseBodyInto is []byte ([595291f](https://github.com/sst/opencode-sdk-go/commit/595291f6dba6af472f160b9f8e3d145002f43a4a)) + + +### Chores + +* **ci:** only run for pushes and fork pull requests ([bea59b8](https://github.com/sst/opencode-sdk-go/commit/bea59b886800ef555f89c47a9256d6392ed2e53d)) +* **internal:** codegen related update ([6a22ce6](https://github.com/sst/opencode-sdk-go/commit/6a22ce6df155f5003e80b8a75686a9e513a5568a)) +* **internal:** fix lint script for tests ([391c482](https://github.com/sst/opencode-sdk-go/commit/391c482148ed0a77c4ad52807abeb2d540b56797)) +* **internal:** update comment in script ([b7f1c3e](https://github.com/sst/opencode-sdk-go/commit/b7f1c3e16935c71e243004b8f321d661cd8e9474)) +* lint tests ([616796b](https://github.com/sst/opencode-sdk-go/commit/616796b761704bde6be5c6c2428f28c79c7f05ff)) +* lint tests in subpackages ([50c82ff](https://github.com/sst/opencode-sdk-go/commit/50c82ff0757c973834b68adc22566b70f767b611)) +* sync repo ([2f34d5d](https://github.com/sst/opencode-sdk-go/commit/2f34d5d53e56e9cdc3df99be7ee7efc83dd977a3)) +* update @stainless-api/prism-cli to v5.15.0 ([2f24852](https://github.com/sst/opencode-sdk-go/commit/2f2485216d4f4891d1fbfbc23ff8410c2f35152a)) diff --git a/packages/sdk/go/README.md b/packages/sdk/go/README.md index 2588b6147..780111828 100644 --- a/packages/sdk/go/README.md +++ b/packages/sdk/go/README.md @@ -24,7 +24,7 @@ Or to pin the version: <!-- x-release-please-start-version --> ```sh -go get -u 'github.com/sst/[email protected]' +go get -u 'github.com/sst/[email protected]' ``` <!-- x-release-please-end --> @@ -49,7 +49,7 @@ import ( func main() { client := opencode.NewClient() - sessions, err := client.Session.List(context.TODO()) + sessions, err := client.Session.List(context.TODO(), opencode.SessionListParams{}) if err != nil { panic(err.Error()) } @@ -171,7 +171,7 @@ When the API returns a non-success status code, we return an error with type To handle errors, we recommend that you use the `errors.As` pattern: ```go -_, err := client.Session.List(context.TODO()) +_, err := client.Session.List(context.TODO(), opencode.SessionListParams{}) if err != nil { var apierr *opencode.Error if errors.As(err, &apierr) { @@ -198,6 +198,7 @@ ctx, cancel := context.WithTimeout(context.Background(), 5*time.Minute) defer cancel() client.Session.List( ctx, + opencode.SessionListParams{}, // This sets the per-retry timeout option.WithRequestTimeout(20*time.Second), ) @@ -231,7 +232,11 @@ client := opencode.NewClient( ) // Override per-request: -client.Session.List(context.TODO(), option.WithMaxRetries(5)) +client.Session.List( + context.TODO(), + opencode.SessionListParams{}, + option.WithMaxRetries(5), +) ``` ### Accessing raw response data (e.g. response headers) @@ -242,7 +247,11 @@ you need to examine response headers, status codes, or other details. ```go // Create a variable to store the HTTP response var response *http.Response -sessions, err := client.Session.List(context.TODO(), option.WithResponseInto(&response)) +sessions, err := client.Session.List( + context.TODO(), + opencode.SessionListParams{}, + option.WithResponseInto(&response), +) if err != nil { // handle error } diff --git a/packages/sdk/go/agent.go b/packages/sdk/go/agent.go new file mode 100644 index 000000000..5e8f4957c --- /dev/null +++ b/packages/sdk/go/agent.go @@ -0,0 +1,204 @@ +// 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, + }) +} diff --git a/packages/sdk/go/agent_test.go b/packages/sdk/go/agent_test.go new file mode 100644 index 000000000..0827df5fd --- /dev/null +++ b/packages/sdk/go/agent_test.go @@ -0,0 +1,38 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +package opencode_test + +import ( + "context" + "errors" + "os" + "testing" + + "github.com/sst/opencode-sdk-go" + "github.com/sst/opencode-sdk-go/internal/testutil" + "github.com/sst/opencode-sdk-go/option" +) + +func TestAgentListWithOptionalParams(t *testing.T) { + t.Skip("Prism tests are disabled") + baseURL := "http://localhost:4010" + if envURL, ok := os.LookupEnv("TEST_API_BASE_URL"); ok { + baseURL = envURL + } + if !testutil.CheckTestServer(t, baseURL) { + return + } + client := opencode.NewClient( + option.WithBaseURL(baseURL), + ) + _, err := client.Agent.List(context.TODO(), opencode.AgentListParams{ + Directory: opencode.F("directory"), + }) + if err != nil { + var apierr *opencode.Error + if errors.As(err, &apierr) { + t.Log(string(apierr.DumpRequest(true))) + } + t.Fatalf("err should be nil: %s", err.Error()) + } +} diff --git a/packages/sdk/go/api.md b/packages/sdk/go/api.md index 2f9eadb6a..02ac42b36 100644 --- a/packages/sdk/go/api.md +++ b/packages/sdk/go/api.md @@ -12,25 +12,40 @@ Response Types: Methods: -- <code title="get /event">client.Event.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#EventService.List">List</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>) (<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#EventListResponse">EventListResponse</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code> +- <code title="get /event">client.Event.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#EventService.List">List</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>, query <a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#EventListParams">EventListParams</a>) (<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#EventListResponse">EventListResponse</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code> + +# Path + +Response Types: + +- <a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#Path">Path</a> + +Methods: + +- <code title="get /path">client.Path.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#PathService.Get">Get</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>, query <a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#PathGetParams">PathGetParams</a>) (<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#Path">Path</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code> # App Response Types: -- <a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#Agent">Agent</a> -- <a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#App">App</a> - <a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#Model">Model</a> - <a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#Provider">Provider</a> - <a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#AppProvidersResponse">AppProvidersResponse</a> Methods: -- <code title="get /agent">client.App.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#AppService.Agents">Agents</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>) ([]<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#Agent">Agent</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code> -- <code title="get /app">client.App.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#AppService.Get">Get</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>) (<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#App">App</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code> -- <code title="post /app/init">client.App.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#AppService.Init">Init</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>) (<a href="https://pkg.go.dev/builtin#bool">bool</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code> -- <code title="post /log">client.App.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#AppService.Log">Log</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>, body <a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#AppLogParams">AppLogParams</a>) (<a href="https://pkg.go.dev/builtin#bool">bool</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code> -- <code title="get /config/providers">client.App.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#AppService.Providers">Providers</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>) (<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#AppProvidersResponse">AppProvidersResponse</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code> +- <code title="post /log">client.App.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#AppService.Log">Log</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>, params <a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#AppLogParams">AppLogParams</a>) (<a href="https://pkg.go.dev/builtin#bool">bool</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code> +- <code title="get /config/providers">client.App.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#AppService.Providers">Providers</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>, query <a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#AppProvidersParams">AppProvidersParams</a>) (<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#AppProvidersResponse">AppProvidersResponse</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code> + +# Agent + +Response Types: + +- <a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#Agent">Agent</a> + +Methods: + +- <code title="get /agent">client.Agent.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#AgentService.List">List</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>, query <a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#AgentListParams">AgentListParams</a>) ([]<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#Agent">Agent</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code> # Find @@ -50,12 +65,14 @@ Methods: Response Types: - <a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#File">File</a> +- <a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#FileNode">FileNode</a> - <a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#FileReadResponse">FileReadResponse</a> Methods: -- <code title="get /file">client.File.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#FileService.Read">Read</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>, query <a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#FileReadParams">FileReadParams</a>) (<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#FileReadResponse">FileReadResponse</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code> -- <code title="get /file/status">client.File.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#FileService.Status">Status</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>) ([]<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#File">File</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code> +- <code title="get /file">client.File.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#FileService.List">List</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>, query <a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#FileListParams">FileListParams</a>) ([]<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#FileNode">FileNode</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code> +- <code title="get /file/content">client.File.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#FileService.Read">Read</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>, query <a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#FileReadParams">FileReadParams</a>) (<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#FileReadResponse">FileReadResponse</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code> +- <code title="get /file/status">client.File.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#FileService.Status">Status</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>, query <a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#FileStatusParams">FileStatusParams</a>) ([]<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#File">File</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code> # Config @@ -68,7 +85,7 @@ Response Types: Methods: -- <code title="get /config">client.Config.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#ConfigService.Get">Get</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>) (<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#Config">Config</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code> +- <code title="get /config">client.Config.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#ConfigService.Get">Get</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>, query <a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#ConfigGetParams">ConfigGetParams</a>) (<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#Config">Config</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code> # Command @@ -78,7 +95,18 @@ Response Types: Methods: -- <code title="get /command">client.Command.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#CommandService.List">List</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>) ([]<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#Command">Command</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code> +- <code title="get /command">client.Command.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#CommandService.List">List</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>, query <a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#CommandListParams">CommandListParams</a>) ([]<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#Command">Command</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code> + +# Project + +Response Types: + +- <a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#Project">Project</a> + +Methods: + +- <code title="get /project">client.Project.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#ProjectService.List">List</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>, query <a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#ProjectListParams">ProjectListParams</a>) ([]<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#Project">Project</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code> +- <code title="get /project/current">client.Project.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#ProjectService.Current">Current</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>, query <a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#ProjectCurrentParams">ProjectCurrentParams</a>) (<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#Project">Project</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code> # Session @@ -115,31 +143,31 @@ Response Types: - <a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#ToolStatePending">ToolStatePending</a> - <a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#ToolStateRunning">ToolStateRunning</a> - <a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#UserMessage">UserMessage</a> -- <a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#SessionChatResponse">SessionChatResponse</a> - <a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#SessionCommandResponse">SessionCommandResponse</a> - <a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#SessionMessageResponse">SessionMessageResponse</a> - <a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#SessionMessagesResponse">SessionMessagesResponse</a> +- <a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#SessionPromptResponse">SessionPromptResponse</a> Methods: -- <code title="post /session">client.Session.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#SessionService.New">New</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>, body <a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#SessionNewParams">SessionNewParams</a>) (<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#Session">Session</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code> -- <code title="patch /session/{id}">client.Session.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#SessionService.Update">Update</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>, id <a href="https://pkg.go.dev/builtin#string">string</a>, body <a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#SessionUpdateParams">SessionUpdateParams</a>) (<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#Session">Session</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code> -- <code title="get /session">client.Session.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#SessionService.List">List</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>) ([]<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#Session">Session</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code> -- <code title="delete /session/{id}">client.Session.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#SessionService.Delete">Delete</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>, id <a href="https://pkg.go.dev/builtin#string">string</a>) (<a href="https://pkg.go.dev/builtin#bool">bool</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code> -- <code title="post /session/{id}/abort">client.Session.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#SessionService.Abort">Abort</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>, id <a href="https://pkg.go.dev/builtin#string">string</a>) (<a href="https://pkg.go.dev/builtin#bool">bool</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code> -- <code title="post /session/{id}/message">client.Session.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#SessionService.Chat">Chat</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>, id <a href="https://pkg.go.dev/builtin#string">string</a>, body <a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#SessionChatParams">SessionChatParams</a>) (<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#SessionChatResponse">SessionChatResponse</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code> -- <code title="get /session/{id}/children">client.Session.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#SessionService.Children">Children</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>, id <a href="https://pkg.go.dev/builtin#string">string</a>) ([]<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#Session">Session</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code> -- <code title="post /session/{id}/command">client.Session.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#SessionService.Command">Command</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>, id <a href="https://pkg.go.dev/builtin#string">string</a>, body <a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#SessionCommandParams">SessionCommandParams</a>) (<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#SessionCommandResponse">SessionCommandResponse</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code> -- <code title="get /session/{id}">client.Session.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#SessionService.Get">Get</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>, id <a href="https://pkg.go.dev/builtin#string">string</a>) (<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#Session">Session</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code> -- <code title="post /session/{id}/init">client.Session.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#SessionService.Init">Init</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>, id <a href="https://pkg.go.dev/builtin#string">string</a>, body <a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#SessionInitParams">SessionInitParams</a>) (<a href="https://pkg.go.dev/builtin#bool">bool</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code> -- <code title="get /session/{id}/message/{messageID}">client.Session.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#SessionService.Message">Message</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>, id <a href="https://pkg.go.dev/builtin#string">string</a>, messageID <a href="https://pkg.go.dev/builtin#string">string</a>) (<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#SessionMessageResponse">SessionMessageResponse</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code> -- <code title="get /session/{id}/message">client.Session.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#SessionService.Messages">Messages</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>, id <a href="https://pkg.go.dev/builtin#string">string</a>) ([]<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#SessionMessagesResponse">SessionMessagesResponse</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code> -- <code title="post /session/{id}/revert">client.Session.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#SessionService.Revert">Revert</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>, id <a href="https://pkg.go.dev/builtin#string">string</a>, body <a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#SessionRevertParams">SessionRevertParams</a>) (<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#Session">Session</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code> -- <code title="post /session/{id}/share">client.Session.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#SessionService.Share">Share</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>, id <a href="https://pkg.go.dev/builtin#string">string</a>) (<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#Session">Session</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code> -- <code title="post /session/{id}/shell">client.Session.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#SessionService.Shell">Shell</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>, id <a href="https://pkg.go.dev/builtin#string">string</a>, body <a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#SessionShellParams">SessionShellParams</a>) (<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#AssistantMessage">AssistantMessage</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code> -- <code title="post /session/{id}/summarize">client.Session.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#SessionService.Summarize">Summarize</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>, id <a href="https://pkg.go.dev/builtin#string">string</a>, body <a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#SessionSummarizeParams">SessionSummarizeParams</a>) (<a href="https://pkg.go.dev/builtin#bool">bool</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code> -- <code title="post /session/{id}/unrevert">client.Session.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#SessionService.Unrevert">Unrevert</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>, id <a href="https://pkg.go.dev/builtin#string">string</a>) (<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#Session">Session</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code> -- <code title="delete /session/{id}/share">client.Session.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#SessionService.Unshare">Unshare</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>, id <a href="https://pkg.go.dev/builtin#string">string</a>) (<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#Session">Session</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code> +- <code title="post /session">client.Session.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#SessionService.New">New</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>, params <a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#SessionNewParams">SessionNewParams</a>) (<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#Session">Session</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code> +- <code title="patch /session/{id}">client.Session.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#SessionService.Update">Update</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>, id <a href="https://pkg.go.dev/builtin#string">string</a>, params <a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#SessionUpdateParams">SessionUpdateParams</a>) (<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#Session">Session</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code> +- <code title="get /session">client.Session.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#SessionService.List">List</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>, query <a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#SessionListParams">SessionListParams</a>) ([]<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#Session">Session</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code> +- <code title="delete /session/{id}">client.Session.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#SessionService.Delete">Delete</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>, id <a href="https://pkg.go.dev/builtin#string">string</a>, body <a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#SessionDeleteParams">SessionDeleteParams</a>) (<a href="https://pkg.go.dev/builtin#bool">bool</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code> +- <code title="post /session/{id}/abort">client.Session.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#SessionService.Abort">Abort</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>, id <a href="https://pkg.go.dev/builtin#string">string</a>, body <a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#SessionAbortParams">SessionAbortParams</a>) (<a href="https://pkg.go.dev/builtin#bool">bool</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code> +- <code title="get /session/{id}/children">client.Session.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#SessionService.Children">Children</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>, id <a href="https://pkg.go.dev/builtin#string">string</a>, query <a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#SessionChildrenParams">SessionChildrenParams</a>) ([]<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#Session">Session</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code> +- <code title="post /session/{id}/command">client.Session.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#SessionService.Command">Command</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>, id <a href="https://pkg.go.dev/builtin#string">string</a>, params <a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#SessionCommandParams">SessionCommandParams</a>) (<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#SessionCommandResponse">SessionCommandResponse</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code> +- <code title="get /session/{id}">client.Session.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#SessionService.Get">Get</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>, id <a href="https://pkg.go.dev/builtin#string">string</a>, query <a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#SessionGetParams">SessionGetParams</a>) (<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#Session">Session</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code> +- <code title="post /session/{id}/init">client.Session.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#SessionService.Init">Init</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>, id <a href="https://pkg.go.dev/builtin#string">string</a>, params <a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#SessionInitParams">SessionInitParams</a>) (<a href="https://pkg.go.dev/builtin#bool">bool</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code> +- <code title="get /session/{id}/message/{messageID}">client.Session.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#SessionService.Message">Message</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>, id <a href="https://pkg.go.dev/builtin#string">string</a>, messageID <a href="https://pkg.go.dev/builtin#string">string</a>, query <a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#SessionMessageParams">SessionMessageParams</a>) (<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#SessionMessageResponse">SessionMessageResponse</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code> +- <code title="get /session/{id}/message">client.Session.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#SessionService.Messages">Messages</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>, id <a href="https://pkg.go.dev/builtin#string">string</a>, query <a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#SessionMessagesParams">SessionMessagesParams</a>) ([]<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#SessionMessagesResponse">SessionMessagesResponse</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code> +- <code title="post /session/{id}/message">client.Session.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#SessionService.Prompt">Prompt</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>, id <a href="https://pkg.go.dev/builtin#string">string</a>, params <a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#SessionPromptParams">SessionPromptParams</a>) (<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#SessionPromptResponse">SessionPromptResponse</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code> +- <code title="post /session/{id}/revert">client.Session.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#SessionService.Revert">Revert</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>, id <a href="https://pkg.go.dev/builtin#string">string</a>, params <a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#SessionRevertParams">SessionRevertParams</a>) (<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#Session">Session</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code> +- <code title="post /session/{id}/share">client.Session.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#SessionService.Share">Share</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>, id <a href="https://pkg.go.dev/builtin#string">string</a>, body <a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#SessionShareParams">SessionShareParams</a>) (<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#Session">Session</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code> +- <code title="post /session/{id}/shell">client.Session.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#SessionService.Shell">Shell</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>, id <a href="https://pkg.go.dev/builtin#string">string</a>, params <a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#SessionShellParams">SessionShellParams</a>) (<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#AssistantMessage">AssistantMessage</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code> +- <code title="post /session/{id}/summarize">client.Session.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#SessionService.Summarize">Summarize</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>, id <a href="https://pkg.go.dev/builtin#string">string</a>, params <a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#SessionSummarizeParams">SessionSummarizeParams</a>) (<a href="https://pkg.go.dev/builtin#bool">bool</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code> +- <code title="post /session/{id}/unrevert">client.Session.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#SessionService.Unrevert">Unrevert</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>, id <a href="https://pkg.go.dev/builtin#string">string</a>, body <a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#SessionUnrevertParams">SessionUnrevertParams</a>) (<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#Session">Session</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code> +- <code title="delete /session/{id}/share">client.Session.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#SessionService.Unshare">Unshare</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>, id <a href="https://pkg.go.dev/builtin#string">string</a>, body <a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#SessionUnshareParams">SessionUnshareParams</a>) (<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#Session">Session</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code> ## Permissions @@ -149,18 +177,18 @@ Response Types: Methods: -- <code title="post /session/{id}/permissions/{permissionID}">client.Session.Permissions.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#SessionPermissionService.Respond">Respond</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>, id <a href="https://pkg.go.dev/builtin#string">string</a>, permissionID <a href="https://pkg.go.dev/builtin#string">string</a>, body <a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#SessionPermissionRespondParams">SessionPermissionRespondParams</a>) (<a href="https://pkg.go.dev/builtin#bool">bool</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code> +- <code title="post /session/{id}/permissions/{permissionID}">client.Session.Permissions.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#SessionPermissionService.Respond">Respond</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>, id <a href="https://pkg.go.dev/builtin#string">string</a>, permissionID <a href="https://pkg.go.dev/builtin#string">string</a>, params <a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#SessionPermissionRespondParams">SessionPermissionRespondParams</a>) (<a href="https://pkg.go.dev/builtin#bool">bool</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code> # Tui Methods: -- <code title="post /tui/append-prompt">client.Tui.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#TuiService.AppendPrompt">AppendPrompt</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>, body <a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#TuiAppendPromptParams">TuiAppendPromptParams</a>) (<a href="https://pkg.go.dev/builtin#bool">bool</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code> -- <code title="post /tui/clear-prompt">client.Tui.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#TuiService.ClearPrompt">ClearPrompt</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>) (<a href="https://pkg.go.dev/builtin#bool">bool</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code> -- <code title="post /tui/execute-command">client.Tui.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#TuiService.ExecuteCommand">ExecuteCommand</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>, body <a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#TuiExecuteCommandParams">TuiExecuteCommandParams</a>) (<a href="https://pkg.go.dev/builtin#bool">bool</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code> -- <code title="post /tui/open-help">client.Tui.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#TuiService.OpenHelp">OpenHelp</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>) (<a href="https://pkg.go.dev/builtin#bool">bool</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code> -- <code title="post /tui/open-models">client.Tui.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#TuiService.OpenModels">OpenModels</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>) (<a href="https://pkg.go.dev/builtin#bool">bool</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code> -- <code title="post /tui/open-sessions">client.Tui.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#TuiService.OpenSessions">OpenSessions</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>) (<a href="https://pkg.go.dev/builtin#bool">bool</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code> -- <code title="post /tui/open-themes">client.Tui.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#TuiService.OpenThemes">OpenThemes</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>) (<a href="https://pkg.go.dev/builtin#bool">bool</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code> -- <code title="post /tui/show-toast">client.Tui.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#TuiService.ShowToast">ShowToast</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>, body <a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#TuiShowToastParams">TuiShowToastParams</a>) (<a href="https://pkg.go.dev/builtin#bool">bool</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code> -- <code title="post /tui/submit-prompt">client.Tui.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#TuiService.SubmitPrompt">SubmitPrompt</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>) (<a href="https://pkg.go.dev/builtin#bool">bool</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code> +- <code title="post /tui/append-prompt">client.Tui.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#TuiService.AppendPrompt">AppendPrompt</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>, params <a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#TuiAppendPromptParams">TuiAppendPromptParams</a>) (<a href="https://pkg.go.dev/builtin#bool">bool</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code> +- <code title="post /tui/clear-prompt">client.Tui.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#TuiService.ClearPrompt">ClearPrompt</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>, body <a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#TuiClearPromptParams">TuiClearPromptParams</a>) (<a href="https://pkg.go.dev/builtin#bool">bool</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code> +- <code title="post /tui/execute-command">client.Tui.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#TuiService.ExecuteCommand">ExecuteCommand</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>, params <a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#TuiExecuteCommandParams">TuiExecuteCommandParams</a>) (<a href="https://pkg.go.dev/builtin#bool">bool</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code> +- <code title="post /tui/open-help">client.Tui.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#TuiService.OpenHelp">OpenHelp</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>, body <a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#TuiOpenHelpParams">TuiOpenHelpParams</a>) (<a href="https://pkg.go.dev/builtin#bool">bool</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code> +- <code title="post /tui/open-models">client.Tui.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#TuiService.OpenModels">OpenModels</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>, body <a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#TuiOpenModelsParams">TuiOpenModelsParams</a>) (<a href="https://pkg.go.dev/builtin#bool">bool</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code> +- <code title="post /tui/open-sessions">client.Tui.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#TuiService.OpenSessions">OpenSessions</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>, body <a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#TuiOpenSessionsParams">TuiOpenSessionsParams</a>) (<a href="https://pkg.go.dev/builtin#bool">bool</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code> +- <code title="post /tui/open-themes">client.Tui.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#TuiService.OpenThemes">OpenThemes</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>, body <a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#TuiOpenThemesParams">TuiOpenThemesParams</a>) (<a href="https://pkg.go.dev/builtin#bool">bool</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code> +- <code title="post /tui/show-toast">client.Tui.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#TuiService.ShowToast">ShowToast</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>, params <a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#TuiShowToastParams">TuiShowToastParams</a>) (<a href="https://pkg.go.dev/builtin#bool">bool</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code> +- <code title="post /tui/submit-prompt">client.Tui.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#TuiService.SubmitPrompt">SubmitPrompt</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>, body <a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go">opencode</a>.<a href="https://pkg.go.dev/github.com/sst/opencode-sdk-go#TuiSubmitPromptParams">TuiSubmitPromptParams</a>) (<a href="https://pkg.go.dev/builtin#bool">bool</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code> diff --git a/packages/sdk/go/app.go b/packages/sdk/go/app.go index 36d5be77f..53a8aeb4a 100644 --- a/packages/sdk/go/app.go +++ b/packages/sdk/go/app.go @@ -5,8 +5,10 @@ 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" @@ -31,270 +33,22 @@ func NewAppService(opts ...option.RequestOption) (r *AppService) { return } -// List all agents -func (r *AppService) Agents(ctx context.Context, opts ...option.RequestOption) (res *[]Agent, err error) { - opts = append(r.Options[:], opts...) - path := "agent" - err = requestconfig.ExecuteNewRequest(ctx, http.MethodGet, path, nil, &res, opts...) - return -} - -// Get app info -func (r *AppService) Get(ctx context.Context, opts ...option.RequestOption) (res *App, err error) { - opts = append(r.Options[:], opts...) - path := "app" - err = requestconfig.ExecuteNewRequest(ctx, http.MethodGet, path, nil, &res, opts...) - return -} - -// Initialize the app -func (r *AppService) Init(ctx context.Context, opts ...option.RequestOption) (res *bool, err error) { - opts = append(r.Options[:], opts...) - path := "app/init" - err = requestconfig.ExecuteNewRequest(ctx, http.MethodPost, path, nil, &res, opts...) - return -} - // Write a log entry to the server logs -func (r *AppService) Log(ctx context.Context, body AppLogParams, opts ...option.RequestOption) (res *bool, err error) { +func (r *AppService) Log(ctx context.Context, params AppLogParams, opts ...option.RequestOption) (res *bool, err error) { opts = append(r.Options[:], opts...) path := "log" - err = requestconfig.ExecuteNewRequest(ctx, http.MethodPost, path, body, &res, opts...) + err = requestconfig.ExecuteNewRequest(ctx, http.MethodPost, path, params, &res, opts...) return } // List all providers -func (r *AppService) Providers(ctx context.Context, opts ...option.RequestOption) (res *AppProvidersResponse, err error) { +func (r *AppService) Providers(ctx context.Context, query AppProvidersParams, opts ...option.RequestOption) (res *AppProvidersResponse, err error) { opts = append(r.Options[:], opts...) path := "config/providers" - err = requestconfig.ExecuteNewRequest(ctx, http.MethodGet, path, nil, &res, opts...) + 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 App struct { - Git bool `json:"git,required"` - Hostname string `json:"hostname,required"` - Path AppPath `json:"path,required"` - Time AppTime `json:"time,required"` - JSON appJSON `json:"-"` -} - -// appJSON contains the JSON metadata for the struct [App] -type appJSON struct { - Git apijson.Field - Hostname apijson.Field - Path apijson.Field - Time apijson.Field - raw string - ExtraFields map[string]apijson.Field -} - -func (r *App) UnmarshalJSON(data []byte) (err error) { - return apijson.UnmarshalRoot(data, r) -} - -func (r appJSON) RawJSON() string { - return r.raw -} - -type AppPath struct { - Config string `json:"config,required"` - Cwd string `json:"cwd,required"` - Data string `json:"data,required"` - Root string `json:"root,required"` - State string `json:"state,required"` - JSON appPathJSON `json:"-"` -} - -// appPathJSON contains the JSON metadata for the struct [AppPath] -type appPathJSON struct { - Config apijson.Field - Cwd apijson.Field - Data apijson.Field - Root apijson.Field - State apijson.Field - raw string - ExtraFields map[string]apijson.Field -} - -func (r *AppPath) UnmarshalJSON(data []byte) (err error) { - return apijson.UnmarshalRoot(data, r) -} - -func (r appPathJSON) RawJSON() string { - return r.raw -} - -type AppTime struct { - Initialized float64 `json:"initialized"` - JSON appTimeJSON `json:"-"` -} - -// appTimeJSON contains the JSON metadata for the struct [AppTime] -type appTimeJSON struct { - Initialized apijson.Field - raw string - ExtraFields map[string]apijson.Field -} - -func (r *AppTime) UnmarshalJSON(data []byte) (err error) { - return apijson.UnmarshalRoot(data, r) -} - -func (r appTimeJSON) RawJSON() string { - return r.raw -} - type Model struct { ID string `json:"id,required"` Attachment bool `json:"attachment,required"` @@ -440,7 +194,8 @@ type AppLogParams struct { // Log message Message param.Field[string] `json:"message,required"` // Service name for the log entry - Service param.Field[string] `json:"service,required"` + Service param.Field[string] `json:"service,required"` + Directory param.Field[string] `query:"directory"` // Additional metadata for the log entry Extra param.Field[map[string]interface{}] `json:"extra"` } @@ -449,6 +204,14 @@ func (r AppLogParams) MarshalJSON() (data []byte, err error) { return apijson.MarshalRoot(r) } +// URLQuery serializes [AppLogParams]'s query parameters as `url.Values`. +func (r AppLogParams) URLQuery() (v url.Values) { + return apiquery.MarshalWithSettings(r, apiquery.QuerySettings{ + ArrayFormat: apiquery.ArrayQueryFormatComma, + NestedFormat: apiquery.NestedQueryFormatBrackets, + }) +} + // Log level type AppLogParamsLevel string @@ -466,3 +229,15 @@ func (r AppLogParamsLevel) IsKnown() bool { } return false } + +type AppProvidersParams struct { + Directory param.Field[string] `query:"directory"` +} + +// URLQuery serializes [AppProvidersParams]'s query parameters as `url.Values`. +func (r AppProvidersParams) URLQuery() (v url.Values) { + return apiquery.MarshalWithSettings(r, apiquery.QuerySettings{ + ArrayFormat: apiquery.ArrayQueryFormatComma, + NestedFormat: apiquery.NestedQueryFormatBrackets, + }) +} diff --git a/packages/sdk/go/app_test.go b/packages/sdk/go/app_test.go index 2ade6c7ec..eb2fc92e5 100644 --- a/packages/sdk/go/app_test.go +++ b/packages/sdk/go/app_test.go @@ -13,74 +13,8 @@ import ( "github.com/sst/opencode-sdk-go/option" ) -func TestAppAgents(t *testing.T) { - t.Skip("skipped: tests are disabled for the time being") - baseURL := "http://localhost:4010" - if envURL, ok := os.LookupEnv("TEST_API_BASE_URL"); ok { - baseURL = envURL - } - if !testutil.CheckTestServer(t, baseURL) { - return - } - client := opencode.NewClient( - option.WithBaseURL(baseURL), - ) - _, err := client.App.Agents(context.TODO()) - if err != nil { - var apierr *opencode.Error - if errors.As(err, &apierr) { - t.Log(string(apierr.DumpRequest(true))) - } - t.Fatalf("err should be nil: %s", err.Error()) - } -} - -func TestAppGet(t *testing.T) { - t.Skip("skipped: tests are disabled for the time being") - baseURL := "http://localhost:4010" - if envURL, ok := os.LookupEnv("TEST_API_BASE_URL"); ok { - baseURL = envURL - } - if !testutil.CheckTestServer(t, baseURL) { - return - } - client := opencode.NewClient( - option.WithBaseURL(baseURL), - ) - _, err := client.App.Get(context.TODO()) - if err != nil { - var apierr *opencode.Error - if errors.As(err, &apierr) { - t.Log(string(apierr.DumpRequest(true))) - } - t.Fatalf("err should be nil: %s", err.Error()) - } -} - -func TestAppInit(t *testing.T) { - t.Skip("skipped: tests are disabled for the time being") - baseURL := "http://localhost:4010" - if envURL, ok := os.LookupEnv("TEST_API_BASE_URL"); ok { - baseURL = envURL - } - if !testutil.CheckTestServer(t, baseURL) { - return - } - client := opencode.NewClient( - option.WithBaseURL(baseURL), - ) - _, err := client.App.Init(context.TODO()) - if err != nil { - var apierr *opencode.Error - if errors.As(err, &apierr) { - t.Log(string(apierr.DumpRequest(true))) - } - t.Fatalf("err should be nil: %s", err.Error()) - } -} - func TestAppLogWithOptionalParams(t *testing.T) { - t.Skip("skipped: tests are disabled for the time being") + t.Skip("Prism tests are disabled") baseURL := "http://localhost:4010" if envURL, ok := os.LookupEnv("TEST_API_BASE_URL"); ok { baseURL = envURL @@ -92,9 +26,10 @@ func TestAppLogWithOptionalParams(t *testing.T) { option.WithBaseURL(baseURL), ) _, err := client.App.Log(context.TODO(), opencode.AppLogParams{ - Level: opencode.F(opencode.AppLogParamsLevelDebug), - Message: opencode.F("message"), - Service: opencode.F("service"), + Level: opencode.F(opencode.AppLogParamsLevelDebug), + Message: opencode.F("message"), + Service: opencode.F("service"), + Directory: opencode.F("directory"), Extra: opencode.F(map[string]interface{}{ "foo": "bar", }), @@ -108,8 +43,8 @@ func TestAppLogWithOptionalParams(t *testing.T) { } } -func TestAppProviders(t *testing.T) { - t.Skip("skipped: tests are disabled for the time being") +func TestAppProvidersWithOptionalParams(t *testing.T) { + t.Skip("Prism tests are disabled") baseURL := "http://localhost:4010" if envURL, ok := os.LookupEnv("TEST_API_BASE_URL"); ok { baseURL = envURL @@ -120,7 +55,9 @@ func TestAppProviders(t *testing.T) { client := opencode.NewClient( option.WithBaseURL(baseURL), ) - _, err := client.App.Providers(context.TODO()) + _, err := client.App.Providers(context.TODO(), opencode.AppProvidersParams{ + Directory: opencode.F("directory"), + }) if err != nil { var apierr *opencode.Error if errors.As(err, &apierr) { diff --git a/packages/sdk/go/client.go b/packages/sdk/go/client.go index 286408ab6..c66b86bba 100644 --- a/packages/sdk/go/client.go +++ b/packages/sdk/go/client.go @@ -17,11 +17,14 @@ import ( type Client struct { Options []option.RequestOption Event *EventService + Path *PathService App *AppService + Agent *AgentService Find *FindService File *FileService Config *ConfigService Command *CommandService + Project *ProjectService Session *SessionService Tui *TuiService } @@ -46,11 +49,14 @@ func NewClient(opts ...option.RequestOption) (r *Client) { r = &Client{Options: opts} r.Event = NewEventService(opts...) + r.Path = NewPathService(opts...) r.App = NewAppService(opts...) + r.Agent = NewAgentService(opts...) r.Find = NewFindService(opts...) r.File = NewFileService(opts...) r.Config = NewConfigService(opts...) r.Command = NewCommandService(opts...) + r.Project = NewProjectService(opts...) r.Session = NewSessionService(opts...) r.Tui = NewTuiService(opts...) diff --git a/packages/sdk/go/client_test.go b/packages/sdk/go/client_test.go index 0f5b8205d..d620da8ed 100644 --- a/packages/sdk/go/client_test.go +++ b/packages/sdk/go/client_test.go @@ -38,7 +38,7 @@ func TestUserAgentHeader(t *testing.T) { }, }), ) - client.Session.List(context.Background()) + client.Session.List(context.Background(), opencode.SessionListParams{}) if userAgent != fmt.Sprintf("Opencode/Go %s", internal.PackageVersion) { t.Errorf("Expected User-Agent to be correct, but got: %#v", userAgent) } @@ -61,7 +61,7 @@ func TestRetryAfter(t *testing.T) { }, }), ) - _, err := client.Session.List(context.Background()) + _, err := client.Session.List(context.Background(), opencode.SessionListParams{}) if err == nil { t.Error("Expected there to be a cancel error") } @@ -95,7 +95,7 @@ func TestDeleteRetryCountHeader(t *testing.T) { }), option.WithHeaderDel("X-Stainless-Retry-Count"), ) - _, err := client.Session.List(context.Background()) + _, err := client.Session.List(context.Background(), opencode.SessionListParams{}) if err == nil { t.Error("Expected there to be a cancel error") } @@ -124,7 +124,7 @@ func TestOverwriteRetryCountHeader(t *testing.T) { }), option.WithHeader("X-Stainless-Retry-Count", "42"), ) - _, err := client.Session.List(context.Background()) + _, err := client.Session.List(context.Background(), opencode.SessionListParams{}) if err == nil { t.Error("Expected there to be a cancel error") } @@ -152,7 +152,7 @@ func TestRetryAfterMs(t *testing.T) { }, }), ) - _, err := client.Session.List(context.Background()) + _, err := client.Session.List(context.Background(), opencode.SessionListParams{}) if err == nil { t.Error("Expected there to be a cancel error") } @@ -174,7 +174,7 @@ func TestContextCancel(t *testing.T) { ) cancelCtx, cancel := context.WithCancel(context.Background()) cancel() - _, err := client.Session.List(cancelCtx) + _, err := client.Session.List(cancelCtx, opencode.SessionListParams{}) if err == nil { t.Error("Expected there to be a cancel error") } @@ -193,7 +193,7 @@ func TestContextCancelDelay(t *testing.T) { ) cancelCtx, cancel := context.WithTimeout(context.Background(), 2*time.Millisecond) defer cancel() - _, err := client.Session.List(cancelCtx) + _, err := client.Session.List(cancelCtx, opencode.SessionListParams{}) if err == nil { t.Error("expected there to be a cancel error") } @@ -218,7 +218,7 @@ func TestContextDeadline(t *testing.T) { }, }), ) - _, err := client.Session.List(deadlineCtx) + _, err := client.Session.List(deadlineCtx, opencode.SessionListParams{}) if err == nil { t.Error("expected there to be a deadline error") } @@ -262,7 +262,7 @@ func TestContextDeadlineStreaming(t *testing.T) { }, }), ) - stream := client.Event.ListStreaming(deadlineCtx) + stream := client.Event.ListStreaming(deadlineCtx, opencode.EventListParams{}) for stream.Next() { _ = stream.Current() } @@ -306,7 +306,11 @@ func TestContextDeadlineStreamingWithRequestTimeout(t *testing.T) { }, }), ) - stream := client.Event.ListStreaming(context.Background(), option.WithRequestTimeout((100 * time.Millisecond))) + stream := client.Event.ListStreaming( + context.Background(), + opencode.EventListParams{}, + option.WithRequestTimeout((100 * time.Millisecond)), + ) for stream.Next() { _ = stream.Current() } diff --git a/packages/sdk/go/command.go b/packages/sdk/go/command.go index 9ca70c3ac..2638fc607 100644 --- a/packages/sdk/go/command.go +++ b/packages/sdk/go/command.go @@ -5,8 +5,11 @@ 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" ) @@ -31,10 +34,10 @@ func NewCommandService(opts ...option.RequestOption) (r *CommandService) { } // List all commands -func (r *CommandService) List(ctx context.Context, opts ...option.RequestOption) (res *[]Command, err error) { +func (r *CommandService) List(ctx context.Context, query CommandListParams, opts ...option.RequestOption) (res *[]Command, err error) { opts = append(r.Options[:], opts...) path := "command" - err = requestconfig.ExecuteNewRequest(ctx, http.MethodGet, path, nil, &res, opts...) + err = requestconfig.ExecuteNewRequest(ctx, http.MethodGet, path, query, &res, opts...) return } @@ -65,3 +68,15 @@ func (r *Command) UnmarshalJSON(data []byte) (err error) { func (r commandJSON) RawJSON() string { return r.raw } + +type CommandListParams struct { + Directory param.Field[string] `query:"directory"` +} + +// URLQuery serializes [CommandListParams]'s query parameters as `url.Values`. +func (r CommandListParams) URLQuery() (v url.Values) { + return apiquery.MarshalWithSettings(r, apiquery.QuerySettings{ + ArrayFormat: apiquery.ArrayQueryFormatComma, + NestedFormat: apiquery.NestedQueryFormatBrackets, + }) +} diff --git a/packages/sdk/go/command_test.go b/packages/sdk/go/command_test.go index 5fd8c37be..781498b27 100644 --- a/packages/sdk/go/command_test.go +++ b/packages/sdk/go/command_test.go @@ -13,8 +13,8 @@ import ( "github.com/sst/opencode-sdk-go/option" ) -func TestCommandList(t *testing.T) { - t.Skip("skipped: tests are disabled for the time being") +func TestCommandListWithOptionalParams(t *testing.T) { + t.Skip("Prism tests are disabled") baseURL := "http://localhost:4010" if envURL, ok := os.LookupEnv("TEST_API_BASE_URL"); ok { baseURL = envURL @@ -25,7 +25,9 @@ func TestCommandList(t *testing.T) { client := opencode.NewClient( option.WithBaseURL(baseURL), ) - _, err := client.Command.List(context.TODO()) + _, err := client.Command.List(context.TODO(), opencode.CommandListParams{ + Directory: opencode.F("directory"), + }) if err != nil { var apierr *opencode.Error if errors.As(err, &apierr) { diff --git a/packages/sdk/go/config.go b/packages/sdk/go/config.go index 59db54b95..5469fb29e 100644 --- a/packages/sdk/go/config.go +++ b/packages/sdk/go/config.go @@ -5,11 +5,15 @@ package opencode import ( "context" "net/http" + "net/url" "reflect" "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" + "github.com/sst/opencode-sdk-go/shared" "github.com/tidwall/gjson" ) @@ -33,10 +37,10 @@ func NewConfigService(opts ...option.RequestOption) (r *ConfigService) { } // Get config info -func (r *ConfigService) Get(ctx context.Context, opts ...option.RequestOption) (res *Config, err error) { +func (r *ConfigService) Get(ctx context.Context, query ConfigGetParams, opts ...option.RequestOption) (res *Config, err error) { opts = append(r.Options[:], opts...) path := "config" - err = requestconfig.ExecuteNewRequest(ctx, http.MethodGet, path, nil, &res, opts...) + err = requestconfig.ExecuteNewRequest(ctx, http.MethodGet, path, query, &res, opts...) return } @@ -49,8 +53,9 @@ type Config struct { // automatically Autoshare bool `json:"autoshare"` // Automatically update to the latest version - Autoupdate bool `json:"autoupdate"` - Command map[string]ConfigCommand `json:"command"` + Autoupdate bool `json:"autoupdate"` + // Command configuration, see https://opencode.ai/docs/commands + Command map[string]ConfigCommand `json:"command"` // Disable providers that are loaded automatically DisabledProviders []string `json:"disabled_providers"` Experimental ConfigExperimental `json:"experimental"` @@ -1646,10 +1651,13 @@ func (r configProviderModelsLimitJSON) RawJSON() string { } type ConfigProviderOptions struct { - APIKey string `json:"apiKey"` - BaseURL string `json:"baseURL"` - ExtraFields map[string]interface{} `json:"-,extras"` - JSON configProviderOptionsJSON `json:"-"` + APIKey string `json:"apiKey"` + BaseURL string `json:"baseURL"` + // Timeout in milliseconds for requests to this provider. Default is 300000 (5 + // minutes). Set to false to disable timeout. + Timeout ConfigProviderOptionsTimeoutUnion `json:"timeout"` + ExtraFields map[string]interface{} `json:"-,extras"` + JSON configProviderOptionsJSON `json:"-"` } // configProviderOptionsJSON contains the JSON metadata for the struct @@ -1657,6 +1665,7 @@ type ConfigProviderOptions struct { type configProviderOptionsJSON struct { APIKey apijson.Field BaseURL apijson.Field + Timeout apijson.Field raw string ExtraFields map[string]apijson.Field } @@ -1669,6 +1678,33 @@ func (r configProviderOptionsJSON) RawJSON() string { return r.raw } +// Timeout in milliseconds for requests to this provider. Default is 300000 (5 +// minutes). Set to false to disable timeout. +// +// Union satisfied by [shared.UnionInt] or [shared.UnionBool]. +type ConfigProviderOptionsTimeoutUnion interface { + ImplementsConfigProviderOptionsTimeoutUnion() +} + +func init() { + apijson.RegisterUnion( + reflect.TypeOf((*ConfigProviderOptionsTimeoutUnion)(nil)).Elem(), + "", + apijson.UnionVariant{ + TypeFilter: gjson.Number, + Type: reflect.TypeOf(shared.UnionInt(0)), + }, + apijson.UnionVariant{ + TypeFilter: gjson.True, + Type: reflect.TypeOf(shared.UnionBool(false)), + }, + apijson.UnionVariant{ + TypeFilter: gjson.False, + Type: reflect.TypeOf(shared.UnionBool(false)), + }, + ) +} + // Control sharing behavior:'manual' allows manual sharing via commands, 'auto' // enables automatic sharing, 'disabled' disables all sharing type ConfigShare string @@ -1967,3 +2003,15 @@ func (r McpRemoteConfigType) IsKnown() bool { } return false } + +type ConfigGetParams struct { + Directory param.Field[string] `query:"directory"` +} + +// URLQuery serializes [ConfigGetParams]'s query parameters as `url.Values`. +func (r ConfigGetParams) URLQuery() (v url.Values) { + return apiquery.MarshalWithSettings(r, apiquery.QuerySettings{ + ArrayFormat: apiquery.ArrayQueryFormatComma, + NestedFormat: apiquery.NestedQueryFormatBrackets, + }) +} diff --git a/packages/sdk/go/config_test.go b/packages/sdk/go/config_test.go index 86e058a9a..f188d7e8d 100644 --- a/packages/sdk/go/config_test.go +++ b/packages/sdk/go/config_test.go @@ -13,8 +13,8 @@ import ( "github.com/sst/opencode-sdk-go/option" ) -func TestConfigGet(t *testing.T) { - t.Skip("skipped: tests are disabled for the time being") +func TestConfigGetWithOptionalParams(t *testing.T) { + t.Skip("Prism tests are disabled") baseURL := "http://localhost:4010" if envURL, ok := os.LookupEnv("TEST_API_BASE_URL"); ok { baseURL = envURL @@ -25,7 +25,9 @@ func TestConfigGet(t *testing.T) { client := opencode.NewClient( option.WithBaseURL(baseURL), ) - _, err := client.Config.Get(context.TODO()) + _, err := client.Config.Get(context.TODO(), opencode.ConfigGetParams{ + Directory: opencode.F("directory"), + }) if err != nil { var apierr *opencode.Error if errors.As(err, &apierr) { diff --git a/packages/sdk/go/event.go b/packages/sdk/go/event.go index 5eee292e5..2f44f907e 100644 --- a/packages/sdk/go/event.go +++ b/packages/sdk/go/event.go @@ -5,9 +5,12 @@ package opencode import ( "context" "net/http" + "net/url" "reflect" "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" "github.com/sst/opencode-sdk-go/packages/ssestream" @@ -35,7 +38,7 @@ func NewEventService(opts ...option.RequestOption) (r *EventService) { } // Get events -func (r *EventService) ListStreaming(ctx context.Context, opts ...option.RequestOption) (stream *ssestream.Stream[EventListResponse]) { +func (r *EventService) ListStreaming(ctx context.Context, query EventListParams, opts ...option.RequestOption) (stream *ssestream.Stream[EventListResponse]) { var ( raw *http.Response err error @@ -43,7 +46,7 @@ func (r *EventService) ListStreaming(ctx context.Context, opts ...option.Request opts = append(r.Options[:], opts...) opts = append([]option.RequestOption{option.WithHeader("Accept", "text/event-stream")}, opts...) path := "event" - err = requestconfig.ExecuteNewRequest(ctx, http.MethodGet, path, nil, &raw, opts...) + err = requestconfig.ExecuteNewRequest(ctx, http.MethodGet, path, query, &raw, opts...) return ssestream.NewStream[EventListResponse](ssestream.NewDecoder(raw), err) } @@ -54,16 +57,13 @@ type EventListResponse struct { // [EventListResponseEventMessageUpdatedProperties], // [EventListResponseEventMessageRemovedProperties], // [EventListResponseEventMessagePartUpdatedProperties], - // [EventListResponseEventMessagePartRemovedProperties], - // [EventListResponseEventStorageWriteProperties], [Permission], + // [EventListResponseEventMessagePartRemovedProperties], [Permission], // [EventListResponseEventPermissionRepliedProperties], // [EventListResponseEventFileEditedProperties], // [EventListResponseEventSessionUpdatedProperties], // [EventListResponseEventSessionDeletedProperties], // [EventListResponseEventSessionIdleProperties], - // [EventListResponseEventSessionErrorProperties], [interface{}], - // [EventListResponseEventFileWatcherUpdatedProperties], - // [EventListResponseEventIdeInstalledProperties]. + // [EventListResponseEventSessionErrorProperties], [interface{}]. Properties interface{} `json:"properties,required"` Type EventListResponseType `json:"type,required"` JSON eventListResponseJSON `json:"-"` @@ -101,13 +101,11 @@ func (r *EventListResponse) UnmarshalJSON(data []byte) (err error) { // [EventListResponseEventMessageUpdated], [EventListResponseEventMessageRemoved], // [EventListResponseEventMessagePartUpdated], // [EventListResponseEventMessagePartRemoved], -// [EventListResponseEventStorageWrite], [EventListResponseEventPermissionUpdated], +// [EventListResponseEventPermissionUpdated], // [EventListResponseEventPermissionReplied], [EventListResponseEventFileEdited], // [EventListResponseEventSessionUpdated], [EventListResponseEventSessionDeleted], // [EventListResponseEventSessionIdle], [EventListResponseEventSessionError], -// [EventListResponseEventServerConnected], -// [EventListResponseEventFileWatcherUpdated], -// [EventListResponseEventIdeInstalled]. +// [EventListResponseEventServerConnected]. func (r EventListResponse) AsUnion() EventListResponseUnion { return r.union } @@ -117,13 +115,11 @@ func (r EventListResponse) AsUnion() EventListResponseUnion { // [EventListResponseEventMessageUpdated], [EventListResponseEventMessageRemoved], // [EventListResponseEventMessagePartUpdated], // [EventListResponseEventMessagePartRemoved], -// [EventListResponseEventStorageWrite], [EventListResponseEventPermissionUpdated], +// [EventListResponseEventPermissionUpdated], // [EventListResponseEventPermissionReplied], [EventListResponseEventFileEdited], // [EventListResponseEventSessionUpdated], [EventListResponseEventSessionDeleted], -// [EventListResponseEventSessionIdle], [EventListResponseEventSessionError], -// [EventListResponseEventServerConnected], -// [EventListResponseEventFileWatcherUpdated] or -// [EventListResponseEventIdeInstalled]. +// [EventListResponseEventSessionIdle], [EventListResponseEventSessionError] or +// [EventListResponseEventServerConnected]. type EventListResponseUnion interface { implementsEventListResponse() } @@ -164,11 +160,6 @@ func init() { }, apijson.UnionVariant{ TypeFilter: gjson.JSON, - Type: reflect.TypeOf(EventListResponseEventStorageWrite{}), - DiscriminatorValue: "storage.write", - }, - apijson.UnionVariant{ - TypeFilter: gjson.JSON, Type: reflect.TypeOf(EventListResponseEventPermissionUpdated{}), DiscriminatorValue: "permission.updated", }, @@ -207,16 +198,6 @@ func init() { Type: reflect.TypeOf(EventListResponseEventServerConnected{}), DiscriminatorValue: "server.connected", }, - apijson.UnionVariant{ - TypeFilter: gjson.JSON, - Type: reflect.TypeOf(EventListResponseEventFileWatcherUpdated{}), - DiscriminatorValue: "file.watcher.updated", - }, - apijson.UnionVariant{ - TypeFilter: gjson.JSON, - Type: reflect.TypeOf(EventListResponseEventIdeInstalled{}), - DiscriminatorValue: "ide.installed", - }, ) } @@ -588,68 +569,6 @@ func (r EventListResponseEventMessagePartRemovedType) IsKnown() bool { return false } -type EventListResponseEventStorageWrite struct { - Properties EventListResponseEventStorageWriteProperties `json:"properties,required"` - Type EventListResponseEventStorageWriteType `json:"type,required"` - JSON eventListResponseEventStorageWriteJSON `json:"-"` -} - -// eventListResponseEventStorageWriteJSON contains the JSON metadata for the struct -// [EventListResponseEventStorageWrite] -type eventListResponseEventStorageWriteJSON struct { - Properties apijson.Field - Type apijson.Field - raw string - ExtraFields map[string]apijson.Field -} - -func (r *EventListResponseEventStorageWrite) UnmarshalJSON(data []byte) (err error) { - return apijson.UnmarshalRoot(data, r) -} - -func (r eventListResponseEventStorageWriteJSON) RawJSON() string { - return r.raw -} - -func (r EventListResponseEventStorageWrite) implementsEventListResponse() {} - -type EventListResponseEventStorageWriteProperties struct { - Key string `json:"key,required"` - Content interface{} `json:"content"` - JSON eventListResponseEventStorageWritePropertiesJSON `json:"-"` -} - -// eventListResponseEventStorageWritePropertiesJSON contains the JSON metadata for -// the struct [EventListResponseEventStorageWriteProperties] -type eventListResponseEventStorageWritePropertiesJSON struct { - Key apijson.Field - Content apijson.Field - raw string - ExtraFields map[string]apijson.Field -} - -func (r *EventListResponseEventStorageWriteProperties) UnmarshalJSON(data []byte) (err error) { - return apijson.UnmarshalRoot(data, r) -} - -func (r eventListResponseEventStorageWritePropertiesJSON) RawJSON() string { - return r.raw -} - -type EventListResponseEventStorageWriteType string - -const ( - EventListResponseEventStorageWriteTypeStorageWrite EventListResponseEventStorageWriteType = "storage.write" -) - -func (r EventListResponseEventStorageWriteType) IsKnown() bool { - switch r { - case EventListResponseEventStorageWriteTypeStorageWrite: - return true - } - return false -} - type EventListResponseEventPermissionUpdated struct { Properties Permission `json:"properties,required"` Type EventListResponseEventPermissionUpdatedType `json:"type,required"` @@ -1228,143 +1147,6 @@ func (r EventListResponseEventServerConnectedType) IsKnown() bool { return false } -type EventListResponseEventFileWatcherUpdated struct { - Properties EventListResponseEventFileWatcherUpdatedProperties `json:"properties,required"` - Type EventListResponseEventFileWatcherUpdatedType `json:"type,required"` - JSON eventListResponseEventFileWatcherUpdatedJSON `json:"-"` -} - -// eventListResponseEventFileWatcherUpdatedJSON contains the JSON metadata for the -// struct [EventListResponseEventFileWatcherUpdated] -type eventListResponseEventFileWatcherUpdatedJSON struct { - Properties apijson.Field - Type apijson.Field - raw string - ExtraFields map[string]apijson.Field -} - -func (r *EventListResponseEventFileWatcherUpdated) UnmarshalJSON(data []byte) (err error) { - return apijson.UnmarshalRoot(data, r) -} - -func (r eventListResponseEventFileWatcherUpdatedJSON) RawJSON() string { - return r.raw -} - -func (r EventListResponseEventFileWatcherUpdated) implementsEventListResponse() {} - -type EventListResponseEventFileWatcherUpdatedProperties struct { - Event EventListResponseEventFileWatcherUpdatedPropertiesEvent `json:"event,required"` - File string `json:"file,required"` - JSON eventListResponseEventFileWatcherUpdatedPropertiesJSON `json:"-"` -} - -// eventListResponseEventFileWatcherUpdatedPropertiesJSON contains the JSON -// metadata for the struct [EventListResponseEventFileWatcherUpdatedProperties] -type eventListResponseEventFileWatcherUpdatedPropertiesJSON struct { - Event apijson.Field - File apijson.Field - raw string - ExtraFields map[string]apijson.Field -} - -func (r *EventListResponseEventFileWatcherUpdatedProperties) UnmarshalJSON(data []byte) (err error) { - return apijson.UnmarshalRoot(data, r) -} - -func (r eventListResponseEventFileWatcherUpdatedPropertiesJSON) RawJSON() string { - return r.raw -} - -type EventListResponseEventFileWatcherUpdatedPropertiesEvent string - -const ( - EventListResponseEventFileWatcherUpdatedPropertiesEventRename EventListResponseEventFileWatcherUpdatedPropertiesEvent = "rename" - EventListResponseEventFileWatcherUpdatedPropertiesEventChange EventListResponseEventFileWatcherUpdatedPropertiesEvent = "change" -) - -func (r EventListResponseEventFileWatcherUpdatedPropertiesEvent) IsKnown() bool { - switch r { - case EventListResponseEventFileWatcherUpdatedPropertiesEventRename, EventListResponseEventFileWatcherUpdatedPropertiesEventChange: - return true - } - return false -} - -type EventListResponseEventFileWatcherUpdatedType string - -const ( - EventListResponseEventFileWatcherUpdatedTypeFileWatcherUpdated EventListResponseEventFileWatcherUpdatedType = "file.watcher.updated" -) - -func (r EventListResponseEventFileWatcherUpdatedType) IsKnown() bool { - switch r { - case EventListResponseEventFileWatcherUpdatedTypeFileWatcherUpdated: - return true - } - return false -} - -type EventListResponseEventIdeInstalled struct { - Properties EventListResponseEventIdeInstalledProperties `json:"properties,required"` - Type EventListResponseEventIdeInstalledType `json:"type,required"` - JSON eventListResponseEventIdeInstalledJSON `json:"-"` -} - -// eventListResponseEventIdeInstalledJSON contains the JSON metadata for the struct -// [EventListResponseEventIdeInstalled] -type eventListResponseEventIdeInstalledJSON struct { - Properties apijson.Field - Type apijson.Field - raw string - ExtraFields map[string]apijson.Field -} - -func (r *EventListResponseEventIdeInstalled) UnmarshalJSON(data []byte) (err error) { - return apijson.UnmarshalRoot(data, r) -} - -func (r eventListResponseEventIdeInstalledJSON) RawJSON() string { - return r.raw -} - -func (r EventListResponseEventIdeInstalled) implementsEventListResponse() {} - -type EventListResponseEventIdeInstalledProperties struct { - Ide string `json:"ide,required"` - JSON eventListResponseEventIdeInstalledPropertiesJSON `json:"-"` -} - -// eventListResponseEventIdeInstalledPropertiesJSON contains the JSON metadata for -// the struct [EventListResponseEventIdeInstalledProperties] -type eventListResponseEventIdeInstalledPropertiesJSON struct { - Ide apijson.Field - raw string - ExtraFields map[string]apijson.Field -} - -func (r *EventListResponseEventIdeInstalledProperties) UnmarshalJSON(data []byte) (err error) { - return apijson.UnmarshalRoot(data, r) -} - -func (r eventListResponseEventIdeInstalledPropertiesJSON) RawJSON() string { - return r.raw -} - -type EventListResponseEventIdeInstalledType string - -const ( - EventListResponseEventIdeInstalledTypeIdeInstalled EventListResponseEventIdeInstalledType = "ide.installed" -) - -func (r EventListResponseEventIdeInstalledType) IsKnown() bool { - switch r { - case EventListResponseEventIdeInstalledTypeIdeInstalled: - return true - } - return false -} - type EventListResponseType string const ( @@ -1374,7 +1156,6 @@ const ( EventListResponseTypeMessageRemoved EventListResponseType = "message.removed" EventListResponseTypeMessagePartUpdated EventListResponseType = "message.part.updated" EventListResponseTypeMessagePartRemoved EventListResponseType = "message.part.removed" - EventListResponseTypeStorageWrite EventListResponseType = "storage.write" EventListResponseTypePermissionUpdated EventListResponseType = "permission.updated" EventListResponseTypePermissionReplied EventListResponseType = "permission.replied" EventListResponseTypeFileEdited EventListResponseType = "file.edited" @@ -1383,14 +1164,24 @@ const ( EventListResponseTypeSessionIdle EventListResponseType = "session.idle" EventListResponseTypeSessionError EventListResponseType = "session.error" EventListResponseTypeServerConnected EventListResponseType = "server.connected" - EventListResponseTypeFileWatcherUpdated EventListResponseType = "file.watcher.updated" - EventListResponseTypeIdeInstalled EventListResponseType = "ide.installed" ) func (r EventListResponseType) IsKnown() bool { switch r { - case EventListResponseTypeInstallationUpdated, EventListResponseTypeLspClientDiagnostics, EventListResponseTypeMessageUpdated, EventListResponseTypeMessageRemoved, EventListResponseTypeMessagePartUpdated, EventListResponseTypeMessagePartRemoved, EventListResponseTypeStorageWrite, EventListResponseTypePermissionUpdated, EventListResponseTypePermissionReplied, EventListResponseTypeFileEdited, EventListResponseTypeSessionUpdated, EventListResponseTypeSessionDeleted, EventListResponseTypeSessionIdle, EventListResponseTypeSessionError, EventListResponseTypeServerConnected, EventListResponseTypeFileWatcherUpdated, EventListResponseTypeIdeInstalled: + case EventListResponseTypeInstallationUpdated, EventListResponseTypeLspClientDiagnostics, EventListResponseTypeMessageUpdated, EventListResponseTypeMessageRemoved, EventListResponseTypeMessagePartUpdated, EventListResponseTypeMessagePartRemoved, EventListResponseTypePermissionUpdated, EventListResponseTypePermissionReplied, EventListResponseTypeFileEdited, EventListResponseTypeSessionUpdated, EventListResponseTypeSessionDeleted, EventListResponseTypeSessionIdle, EventListResponseTypeSessionError, EventListResponseTypeServerConnected: return true } return false } + +type EventListParams struct { + Directory param.Field[string] `query:"directory"` +} + +// URLQuery serializes [EventListParams]'s query parameters as `url.Values`. +func (r EventListParams) URLQuery() (v url.Values) { + return apiquery.MarshalWithSettings(r, apiquery.QuerySettings{ + ArrayFormat: apiquery.ArrayQueryFormatComma, + NestedFormat: apiquery.NestedQueryFormatBrackets, + }) +} diff --git a/packages/sdk/go/file.go b/packages/sdk/go/file.go index 0a8a4b2b6..3e1b2f42f 100644 --- a/packages/sdk/go/file.go +++ b/packages/sdk/go/file.go @@ -33,19 +33,27 @@ func NewFileService(opts ...option.RequestOption) (r *FileService) { 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" + path := "file/content" err = requestconfig.ExecuteNewRequest(ctx, http.MethodGet, path, query, &res, opts...) return } // Get file status -func (r *FileService) Status(ctx context.Context, opts ...option.RequestOption) (res *[]File, err error) { +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, nil, &res, opts...) + err = requestconfig.ExecuteNewRequest(ctx, http.MethodGet, path, query, &res, opts...) return } @@ -91,6 +99,47 @@ func (r FileStatus) IsKnown() bool { 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"` @@ -129,8 +178,22 @@ func (r FileReadResponseType) IsKnown() bool { 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"` + Path param.Field[string] `query:"path,required"` + Directory param.Field[string] `query:"directory"` } // URLQuery serializes [FileReadParams]'s query parameters as `url.Values`. @@ -140,3 +203,15 @@ func (r FileReadParams) URLQuery() (v url.Values) { 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, + }) +} diff --git a/packages/sdk/go/file_test.go b/packages/sdk/go/file_test.go index 60212ea24..2790fff96 100644 --- a/packages/sdk/go/file_test.go +++ b/packages/sdk/go/file_test.go @@ -13,8 +13,33 @@ import ( "github.com/sst/opencode-sdk-go/option" ) -func TestFileRead(t *testing.T) { - t.Skip("skipped: tests are disabled for the time being") +func TestFileListWithOptionalParams(t *testing.T) { + t.Skip("Prism tests are disabled") + baseURL := "http://localhost:4010" + if envURL, ok := os.LookupEnv("TEST_API_BASE_URL"); ok { + baseURL = envURL + } + if !testutil.CheckTestServer(t, baseURL) { + return + } + client := opencode.NewClient( + option.WithBaseURL(baseURL), + ) + _, err := client.File.List(context.TODO(), opencode.FileListParams{ + Path: opencode.F("path"), + Directory: opencode.F("directory"), + }) + if err != nil { + var apierr *opencode.Error + if errors.As(err, &apierr) { + t.Log(string(apierr.DumpRequest(true))) + } + t.Fatalf("err should be nil: %s", err.Error()) + } +} + +func TestFileReadWithOptionalParams(t *testing.T) { + t.Skip("Prism tests are disabled") baseURL := "http://localhost:4010" if envURL, ok := os.LookupEnv("TEST_API_BASE_URL"); ok { baseURL = envURL @@ -26,7 +51,8 @@ func TestFileRead(t *testing.T) { option.WithBaseURL(baseURL), ) _, err := client.File.Read(context.TODO(), opencode.FileReadParams{ - Path: opencode.F("path"), + Path: opencode.F("path"), + Directory: opencode.F("directory"), }) if err != nil { var apierr *opencode.Error @@ -37,8 +63,8 @@ func TestFileRead(t *testing.T) { } } -func TestFileStatus(t *testing.T) { - t.Skip("skipped: tests are disabled for the time being") +func TestFileStatusWithOptionalParams(t *testing.T) { + t.Skip("Prism tests are disabled") baseURL := "http://localhost:4010" if envURL, ok := os.LookupEnv("TEST_API_BASE_URL"); ok { baseURL = envURL @@ -49,7 +75,9 @@ func TestFileStatus(t *testing.T) { client := opencode.NewClient( option.WithBaseURL(baseURL), ) - _, err := client.File.Status(context.TODO()) + _, err := client.File.Status(context.TODO(), opencode.FileStatusParams{ + Directory: opencode.F("directory"), + }) if err != nil { var apierr *opencode.Error if errors.As(err, &apierr) { diff --git a/packages/sdk/go/find.go b/packages/sdk/go/find.go index a993a353f..e869116b4 100644 --- a/packages/sdk/go/find.go +++ b/packages/sdk/go/find.go @@ -290,7 +290,8 @@ func (r findTextResponseSubmatchesMatchJSON) RawJSON() string { } type FindFilesParams struct { - Query param.Field[string] `query:"query,required"` + Query param.Field[string] `query:"query,required"` + Directory param.Field[string] `query:"directory"` } // URLQuery serializes [FindFilesParams]'s query parameters as `url.Values`. @@ -302,7 +303,8 @@ func (r FindFilesParams) URLQuery() (v url.Values) { } type FindSymbolsParams struct { - Query param.Field[string] `query:"query,required"` + Query param.Field[string] `query:"query,required"` + Directory param.Field[string] `query:"directory"` } // URLQuery serializes [FindSymbolsParams]'s query parameters as `url.Values`. @@ -314,7 +316,8 @@ func (r FindSymbolsParams) URLQuery() (v url.Values) { } type FindTextParams struct { - Pattern param.Field[string] `query:"pattern,required"` + Pattern param.Field[string] `query:"pattern,required"` + Directory param.Field[string] `query:"directory"` } // URLQuery serializes [FindTextParams]'s query parameters as `url.Values`. diff --git a/packages/sdk/go/find_test.go b/packages/sdk/go/find_test.go index e2f1caa16..901a895b2 100644 --- a/packages/sdk/go/find_test.go +++ b/packages/sdk/go/find_test.go @@ -13,8 +13,8 @@ import ( "github.com/sst/opencode-sdk-go/option" ) -func TestFindFiles(t *testing.T) { - t.Skip("skipped: tests are disabled for the time being") +func TestFindFilesWithOptionalParams(t *testing.T) { + t.Skip("Prism tests are disabled") baseURL := "http://localhost:4010" if envURL, ok := os.LookupEnv("TEST_API_BASE_URL"); ok { baseURL = envURL @@ -26,7 +26,8 @@ func TestFindFiles(t *testing.T) { option.WithBaseURL(baseURL), ) _, err := client.Find.Files(context.TODO(), opencode.FindFilesParams{ - Query: opencode.F("query"), + Query: opencode.F("query"), + Directory: opencode.F("directory"), }) if err != nil { var apierr *opencode.Error @@ -37,8 +38,8 @@ func TestFindFiles(t *testing.T) { } } -func TestFindSymbols(t *testing.T) { - t.Skip("skipped: tests are disabled for the time being") +func TestFindSymbolsWithOptionalParams(t *testing.T) { + t.Skip("Prism tests are disabled") baseURL := "http://localhost:4010" if envURL, ok := os.LookupEnv("TEST_API_BASE_URL"); ok { baseURL = envURL @@ -50,7 +51,8 @@ func TestFindSymbols(t *testing.T) { option.WithBaseURL(baseURL), ) _, err := client.Find.Symbols(context.TODO(), opencode.FindSymbolsParams{ - Query: opencode.F("query"), + Query: opencode.F("query"), + Directory: opencode.F("directory"), }) if err != nil { var apierr *opencode.Error @@ -61,8 +63,8 @@ func TestFindSymbols(t *testing.T) { } } -func TestFindText(t *testing.T) { - t.Skip("skipped: tests are disabled for the time being") +func TestFindTextWithOptionalParams(t *testing.T) { + t.Skip("Prism tests are disabled") baseURL := "http://localhost:4010" if envURL, ok := os.LookupEnv("TEST_API_BASE_URL"); ok { baseURL = envURL @@ -74,7 +76,8 @@ func TestFindText(t *testing.T) { option.WithBaseURL(baseURL), ) _, err := client.Find.Text(context.TODO(), opencode.FindTextParams{ - Pattern: opencode.F("pattern"), + Pattern: opencode.F("pattern"), + Directory: opencode.F("directory"), }) if err != nil { var apierr *opencode.Error diff --git a/packages/sdk/go/internal/requestconfig/requestconfig.go b/packages/sdk/go/internal/requestconfig/requestconfig.go index 53bf9f58c..95111f757 100644 --- a/packages/sdk/go/internal/requestconfig/requestconfig.go +++ b/packages/sdk/go/internal/requestconfig/requestconfig.go @@ -464,6 +464,11 @@ func (cfg *RequestConfig) Execute() (err error) { break } + // Close the response body before retrying to prevent connection leaks + if res != nil && res.Body != nil { + res.Body.Close() + } + time.Sleep(retryDelay(res, retryCount)) } diff --git a/packages/sdk/go/internal/version.go b/packages/sdk/go/internal/version.go index 64dcebbb4..3c8392e9d 100644 --- a/packages/sdk/go/internal/version.go +++ b/packages/sdk/go/internal/version.go @@ -2,4 +2,4 @@ package internal -const PackageVersion = "0.1.0-alpha.8" // x-release-please-version +const PackageVersion = "0.8.0" // x-release-please-version diff --git a/packages/sdk/go/path.go b/packages/sdk/go/path.go new file mode 100644 index 000000000..63e502626 --- /dev/null +++ b/packages/sdk/go/path.go @@ -0,0 +1,80 @@ +// 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" +) + +// PathService 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 [NewPathService] method instead. +type PathService struct { + Options []option.RequestOption +} + +// NewPathService 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 NewPathService(opts ...option.RequestOption) (r *PathService) { + r = &PathService{} + r.Options = opts + return +} + +// Get the current path +func (r *PathService) Get(ctx context.Context, query PathGetParams, opts ...option.RequestOption) (res *Path, err error) { + opts = append(r.Options[:], opts...) + path := "path" + err = requestconfig.ExecuteNewRequest(ctx, http.MethodGet, path, query, &res, opts...) + return +} + +type Path struct { + Config string `json:"config,required"` + Directory string `json:"directory,required"` + State string `json:"state,required"` + Worktree string `json:"worktree,required"` + JSON pathJSON `json:"-"` +} + +// pathJSON contains the JSON metadata for the struct [Path] +type pathJSON struct { + Config apijson.Field + Directory apijson.Field + State apijson.Field + Worktree apijson.Field + raw string + ExtraFields map[string]apijson.Field +} + +func (r *Path) UnmarshalJSON(data []byte) (err error) { + return apijson.UnmarshalRoot(data, r) +} + +func (r pathJSON) RawJSON() string { + return r.raw +} + +type PathGetParams struct { + Directory param.Field[string] `query:"directory"` +} + +// URLQuery serializes [PathGetParams]'s query parameters as `url.Values`. +func (r PathGetParams) URLQuery() (v url.Values) { + return apiquery.MarshalWithSettings(r, apiquery.QuerySettings{ + ArrayFormat: apiquery.ArrayQueryFormatComma, + NestedFormat: apiquery.NestedQueryFormatBrackets, + }) +} diff --git a/packages/sdk/go/path_test.go b/packages/sdk/go/path_test.go new file mode 100644 index 000000000..08273ce32 --- /dev/null +++ b/packages/sdk/go/path_test.go @@ -0,0 +1,38 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +package opencode_test + +import ( + "context" + "errors" + "os" + "testing" + + "github.com/sst/opencode-sdk-go" + "github.com/sst/opencode-sdk-go/internal/testutil" + "github.com/sst/opencode-sdk-go/option" +) + +func TestPathGetWithOptionalParams(t *testing.T) { + t.Skip("Prism tests are disabled") + baseURL := "http://localhost:4010" + if envURL, ok := os.LookupEnv("TEST_API_BASE_URL"); ok { + baseURL = envURL + } + if !testutil.CheckTestServer(t, baseURL) { + return + } + client := opencode.NewClient( + option.WithBaseURL(baseURL), + ) + _, err := client.Path.Get(context.TODO(), opencode.PathGetParams{ + Directory: opencode.F("directory"), + }) + if err != nil { + var apierr *opencode.Error + if errors.As(err, &apierr) { + t.Log(string(apierr.DumpRequest(true))) + } + t.Fatalf("err should be nil: %s", err.Error()) + } +} diff --git a/packages/sdk/go/project.go b/packages/sdk/go/project.go new file mode 100644 index 000000000..3b349dadd --- /dev/null +++ b/packages/sdk/go/project.go @@ -0,0 +1,136 @@ +// 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" +) + +// ProjectService 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 [NewProjectService] method instead. +type ProjectService struct { + Options []option.RequestOption +} + +// NewProjectService 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 NewProjectService(opts ...option.RequestOption) (r *ProjectService) { + r = &ProjectService{} + r.Options = opts + return +} + +// List all projects +func (r *ProjectService) List(ctx context.Context, query ProjectListParams, opts ...option.RequestOption) (res *[]Project, err error) { + opts = append(r.Options[:], opts...) + path := "project" + err = requestconfig.ExecuteNewRequest(ctx, http.MethodGet, path, query, &res, opts...) + return +} + +// Get the current project +func (r *ProjectService) Current(ctx context.Context, query ProjectCurrentParams, opts ...option.RequestOption) (res *Project, err error) { + opts = append(r.Options[:], opts...) + path := "project/current" + err = requestconfig.ExecuteNewRequest(ctx, http.MethodGet, path, query, &res, opts...) + return +} + +type Project struct { + ID string `json:"id,required"` + Time ProjectTime `json:"time,required"` + Worktree string `json:"worktree,required"` + Vcs ProjectVcs `json:"vcs"` + JSON projectJSON `json:"-"` +} + +// projectJSON contains the JSON metadata for the struct [Project] +type projectJSON struct { + ID apijson.Field + Time apijson.Field + Worktree apijson.Field + Vcs apijson.Field + raw string + ExtraFields map[string]apijson.Field +} + +func (r *Project) UnmarshalJSON(data []byte) (err error) { + return apijson.UnmarshalRoot(data, r) +} + +func (r projectJSON) RawJSON() string { + return r.raw +} + +type ProjectTime struct { + Created float64 `json:"created,required"` + Initialized float64 `json:"initialized"` + JSON projectTimeJSON `json:"-"` +} + +// projectTimeJSON contains the JSON metadata for the struct [ProjectTime] +type projectTimeJSON struct { + Created apijson.Field + Initialized apijson.Field + raw string + ExtraFields map[string]apijson.Field +} + +func (r *ProjectTime) UnmarshalJSON(data []byte) (err error) { + return apijson.UnmarshalRoot(data, r) +} + +func (r projectTimeJSON) RawJSON() string { + return r.raw +} + +type ProjectVcs string + +const ( + ProjectVcsGit ProjectVcs = "git" +) + +func (r ProjectVcs) IsKnown() bool { + switch r { + case ProjectVcsGit: + return true + } + return false +} + +type ProjectListParams struct { + Directory param.Field[string] `query:"directory"` +} + +// URLQuery serializes [ProjectListParams]'s query parameters as `url.Values`. +func (r ProjectListParams) URLQuery() (v url.Values) { + return apiquery.MarshalWithSettings(r, apiquery.QuerySettings{ + ArrayFormat: apiquery.ArrayQueryFormatComma, + NestedFormat: apiquery.NestedQueryFormatBrackets, + }) +} + +type ProjectCurrentParams struct { + Directory param.Field[string] `query:"directory"` +} + +// URLQuery serializes [ProjectCurrentParams]'s query parameters as `url.Values`. +func (r ProjectCurrentParams) URLQuery() (v url.Values) { + return apiquery.MarshalWithSettings(r, apiquery.QuerySettings{ + ArrayFormat: apiquery.ArrayQueryFormatComma, + NestedFormat: apiquery.NestedQueryFormatBrackets, + }) +} diff --git a/packages/sdk/go/project_test.go b/packages/sdk/go/project_test.go new file mode 100644 index 000000000..adf3dbf10 --- /dev/null +++ b/packages/sdk/go/project_test.go @@ -0,0 +1,62 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +package opencode_test + +import ( + "context" + "errors" + "os" + "testing" + + "github.com/sst/opencode-sdk-go" + "github.com/sst/opencode-sdk-go/internal/testutil" + "github.com/sst/opencode-sdk-go/option" +) + +func TestProjectListWithOptionalParams(t *testing.T) { + t.Skip("Prism tests are disabled") + baseURL := "http://localhost:4010" + if envURL, ok := os.LookupEnv("TEST_API_BASE_URL"); ok { + baseURL = envURL + } + if !testutil.CheckTestServer(t, baseURL) { + return + } + client := opencode.NewClient( + option.WithBaseURL(baseURL), + ) + _, err := client.Project.List(context.TODO(), opencode.ProjectListParams{ + Directory: opencode.F("directory"), + }) + if err != nil { + var apierr *opencode.Error + if errors.As(err, &apierr) { + t.Log(string(apierr.DumpRequest(true))) + } + t.Fatalf("err should be nil: %s", err.Error()) + } +} + +func TestProjectCurrentWithOptionalParams(t *testing.T) { + t.Skip("Prism tests are disabled") + baseURL := "http://localhost:4010" + if envURL, ok := os.LookupEnv("TEST_API_BASE_URL"); ok { + baseURL = envURL + } + if !testutil.CheckTestServer(t, baseURL) { + return + } + client := opencode.NewClient( + option.WithBaseURL(baseURL), + ) + _, err := client.Project.Current(context.TODO(), opencode.ProjectCurrentParams{ + Directory: opencode.F("directory"), + }) + if err != nil { + var apierr *opencode.Error + if errors.As(err, &apierr) { + t.Log(string(apierr.DumpRequest(true))) + } + t.Fatalf("err should be nil: %s", err.Error()) + } +} diff --git a/packages/sdk/go/session.go b/packages/sdk/go/session.go index 237b490d7..88d71b575 100644 --- a/packages/sdk/go/session.go +++ b/packages/sdk/go/session.go @@ -7,9 +7,11 @@ import ( "errors" "fmt" "net/http" + "net/url" "reflect" "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" @@ -39,119 +41,107 @@ func NewSessionService(opts ...option.RequestOption) (r *SessionService) { } // Create a new session -func (r *SessionService) New(ctx context.Context, body SessionNewParams, opts ...option.RequestOption) (res *Session, err error) { +func (r *SessionService) New(ctx context.Context, params SessionNewParams, opts ...option.RequestOption) (res *Session, err error) { opts = append(r.Options[:], opts...) path := "session" - err = requestconfig.ExecuteNewRequest(ctx, http.MethodPost, path, body, &res, opts...) + err = requestconfig.ExecuteNewRequest(ctx, http.MethodPost, path, params, &res, opts...) return } // Update session properties -func (r *SessionService) Update(ctx context.Context, id string, body SessionUpdateParams, opts ...option.RequestOption) (res *Session, err error) { +func (r *SessionService) Update(ctx context.Context, id string, params SessionUpdateParams, opts ...option.RequestOption) (res *Session, err error) { opts = append(r.Options[:], opts...) if id == "" { err = errors.New("missing required id parameter") return } path := fmt.Sprintf("session/%s", id) - err = requestconfig.ExecuteNewRequest(ctx, http.MethodPatch, path, body, &res, opts...) + err = requestconfig.ExecuteNewRequest(ctx, http.MethodPatch, path, params, &res, opts...) return } // List all sessions -func (r *SessionService) List(ctx context.Context, opts ...option.RequestOption) (res *[]Session, err error) { +func (r *SessionService) List(ctx context.Context, query SessionListParams, opts ...option.RequestOption) (res *[]Session, err error) { opts = append(r.Options[:], opts...) path := "session" - err = requestconfig.ExecuteNewRequest(ctx, http.MethodGet, path, nil, &res, opts...) + err = requestconfig.ExecuteNewRequest(ctx, http.MethodGet, path, query, &res, opts...) return } // Delete a session and all its data -func (r *SessionService) Delete(ctx context.Context, id string, opts ...option.RequestOption) (res *bool, err error) { +func (r *SessionService) Delete(ctx context.Context, id string, body SessionDeleteParams, opts ...option.RequestOption) (res *bool, err error) { opts = append(r.Options[:], opts...) if id == "" { err = errors.New("missing required id parameter") return } path := fmt.Sprintf("session/%s", id) - err = requestconfig.ExecuteNewRequest(ctx, http.MethodDelete, path, nil, &res, opts...) + err = requestconfig.ExecuteNewRequest(ctx, http.MethodDelete, path, body, &res, opts...) return } // Abort a session -func (r *SessionService) Abort(ctx context.Context, id string, opts ...option.RequestOption) (res *bool, err error) { +func (r *SessionService) Abort(ctx context.Context, id string, body SessionAbortParams, opts ...option.RequestOption) (res *bool, err error) { opts = append(r.Options[:], opts...) if id == "" { err = errors.New("missing required id parameter") return } path := fmt.Sprintf("session/%s/abort", id) - err = requestconfig.ExecuteNewRequest(ctx, http.MethodPost, path, nil, &res, opts...) - return -} - -// Create and send a new message to a session -func (r *SessionService) Chat(ctx context.Context, id string, body SessionChatParams, opts ...option.RequestOption) (res *SessionChatResponse, err error) { - opts = append(r.Options[:], opts...) - if id == "" { - err = errors.New("missing required id parameter") - return - } - path := fmt.Sprintf("session/%s/message", id) err = requestconfig.ExecuteNewRequest(ctx, http.MethodPost, path, body, &res, opts...) return } // Get a session's children -func (r *SessionService) Children(ctx context.Context, id string, opts ...option.RequestOption) (res *[]Session, err error) { +func (r *SessionService) Children(ctx context.Context, id string, query SessionChildrenParams, opts ...option.RequestOption) (res *[]Session, err error) { opts = append(r.Options[:], opts...) if id == "" { err = errors.New("missing required id parameter") return } path := fmt.Sprintf("session/%s/children", id) - err = requestconfig.ExecuteNewRequest(ctx, http.MethodGet, path, nil, &res, opts...) + err = requestconfig.ExecuteNewRequest(ctx, http.MethodGet, path, query, &res, opts...) return } // Send a new command to a session -func (r *SessionService) Command(ctx context.Context, id string, body SessionCommandParams, opts ...option.RequestOption) (res *SessionCommandResponse, err error) { +func (r *SessionService) Command(ctx context.Context, id string, params SessionCommandParams, opts ...option.RequestOption) (res *SessionCommandResponse, err error) { opts = append(r.Options[:], opts...) if id == "" { err = errors.New("missing required id parameter") return } path := fmt.Sprintf("session/%s/command", id) - err = requestconfig.ExecuteNewRequest(ctx, http.MethodPost, path, body, &res, opts...) + err = requestconfig.ExecuteNewRequest(ctx, http.MethodPost, path, params, &res, opts...) return } // Get session -func (r *SessionService) Get(ctx context.Context, id string, opts ...option.RequestOption) (res *Session, err error) { +func (r *SessionService) Get(ctx context.Context, id string, query SessionGetParams, opts ...option.RequestOption) (res *Session, err error) { opts = append(r.Options[:], opts...) if id == "" { err = errors.New("missing required id parameter") return } path := fmt.Sprintf("session/%s", id) - err = requestconfig.ExecuteNewRequest(ctx, http.MethodGet, path, nil, &res, opts...) + err = requestconfig.ExecuteNewRequest(ctx, http.MethodGet, path, query, &res, opts...) return } // Analyze the app and create an AGENTS.md file -func (r *SessionService) Init(ctx context.Context, id string, body SessionInitParams, opts ...option.RequestOption) (res *bool, err error) { +func (r *SessionService) Init(ctx context.Context, id string, params SessionInitParams, opts ...option.RequestOption) (res *bool, err error) { opts = append(r.Options[:], opts...) if id == "" { err = errors.New("missing required id parameter") return } path := fmt.Sprintf("session/%s/init", id) - err = requestconfig.ExecuteNewRequest(ctx, http.MethodPost, path, body, &res, opts...) + err = requestconfig.ExecuteNewRequest(ctx, http.MethodPost, path, params, &res, opts...) return } // Get a message from a session -func (r *SessionService) Message(ctx context.Context, id string, messageID string, opts ...option.RequestOption) (res *SessionMessageResponse, err error) { +func (r *SessionService) Message(ctx context.Context, id string, messageID string, query SessionMessageParams, opts ...option.RequestOption) (res *SessionMessageResponse, err error) { opts = append(r.Options[:], opts...) if id == "" { err = errors.New("missing required id parameter") @@ -162,91 +152,103 @@ func (r *SessionService) Message(ctx context.Context, id string, messageID strin return } path := fmt.Sprintf("session/%s/message/%s", id, messageID) - err = requestconfig.ExecuteNewRequest(ctx, http.MethodGet, path, nil, &res, opts...) + err = requestconfig.ExecuteNewRequest(ctx, http.MethodGet, path, query, &res, opts...) return } // List messages for a session -func (r *SessionService) Messages(ctx context.Context, id string, opts ...option.RequestOption) (res *[]SessionMessagesResponse, err error) { +func (r *SessionService) Messages(ctx context.Context, id string, query SessionMessagesParams, opts ...option.RequestOption) (res *[]SessionMessagesResponse, err error) { opts = append(r.Options[:], opts...) if id == "" { err = errors.New("missing required id parameter") return } path := fmt.Sprintf("session/%s/message", id) - err = requestconfig.ExecuteNewRequest(ctx, http.MethodGet, path, nil, &res, opts...) + err = requestconfig.ExecuteNewRequest(ctx, http.MethodGet, path, query, &res, opts...) + return +} + +// Create and send a new message to a session +func (r *SessionService) Prompt(ctx context.Context, id string, params SessionPromptParams, opts ...option.RequestOption) (res *SessionPromptResponse, err error) { + opts = append(r.Options[:], opts...) + if id == "" { + err = errors.New("missing required id parameter") + return + } + path := fmt.Sprintf("session/%s/message", id) + err = requestconfig.ExecuteNewRequest(ctx, http.MethodPost, path, params, &res, opts...) return } // Revert a message -func (r *SessionService) Revert(ctx context.Context, id string, body SessionRevertParams, opts ...option.RequestOption) (res *Session, err error) { +func (r *SessionService) Revert(ctx context.Context, id string, params SessionRevertParams, opts ...option.RequestOption) (res *Session, err error) { opts = append(r.Options[:], opts...) if id == "" { err = errors.New("missing required id parameter") return } path := fmt.Sprintf("session/%s/revert", id) - err = requestconfig.ExecuteNewRequest(ctx, http.MethodPost, path, body, &res, opts...) + err = requestconfig.ExecuteNewRequest(ctx, http.MethodPost, path, params, &res, opts...) return } // Share a session -func (r *SessionService) Share(ctx context.Context, id string, opts ...option.RequestOption) (res *Session, err error) { +func (r *SessionService) Share(ctx context.Context, id string, body SessionShareParams, opts ...option.RequestOption) (res *Session, err error) { opts = append(r.Options[:], opts...) if id == "" { err = errors.New("missing required id parameter") return } path := fmt.Sprintf("session/%s/share", id) - err = requestconfig.ExecuteNewRequest(ctx, http.MethodPost, path, nil, &res, opts...) + err = requestconfig.ExecuteNewRequest(ctx, http.MethodPost, path, body, &res, opts...) return } // Run a shell command -func (r *SessionService) Shell(ctx context.Context, id string, body SessionShellParams, opts ...option.RequestOption) (res *AssistantMessage, err error) { +func (r *SessionService) Shell(ctx context.Context, id string, params SessionShellParams, opts ...option.RequestOption) (res *AssistantMessage, err error) { opts = append(r.Options[:], opts...) if id == "" { err = errors.New("missing required id parameter") return } path := fmt.Sprintf("session/%s/shell", id) - err = requestconfig.ExecuteNewRequest(ctx, http.MethodPost, path, body, &res, opts...) + err = requestconfig.ExecuteNewRequest(ctx, http.MethodPost, path, params, &res, opts...) return } // Summarize the session -func (r *SessionService) Summarize(ctx context.Context, id string, body SessionSummarizeParams, opts ...option.RequestOption) (res *bool, err error) { +func (r *SessionService) Summarize(ctx context.Context, id string, params SessionSummarizeParams, opts ...option.RequestOption) (res *bool, err error) { opts = append(r.Options[:], opts...) if id == "" { err = errors.New("missing required id parameter") return } path := fmt.Sprintf("session/%s/summarize", id) - err = requestconfig.ExecuteNewRequest(ctx, http.MethodPost, path, body, &res, opts...) + err = requestconfig.ExecuteNewRequest(ctx, http.MethodPost, path, params, &res, opts...) return } // Restore all reverted messages -func (r *SessionService) Unrevert(ctx context.Context, id string, opts ...option.RequestOption) (res *Session, err error) { +func (r *SessionService) Unrevert(ctx context.Context, id string, body SessionUnrevertParams, opts ...option.RequestOption) (res *Session, err error) { opts = append(r.Options[:], opts...) if id == "" { err = errors.New("missing required id parameter") return } path := fmt.Sprintf("session/%s/unrevert", id) - err = requestconfig.ExecuteNewRequest(ctx, http.MethodPost, path, nil, &res, opts...) + err = requestconfig.ExecuteNewRequest(ctx, http.MethodPost, path, body, &res, opts...) return } // Unshare the session -func (r *SessionService) Unshare(ctx context.Context, id string, opts ...option.RequestOption) (res *Session, err error) { +func (r *SessionService) Unshare(ctx context.Context, id string, body SessionUnshareParams, opts ...option.RequestOption) (res *Session, err error) { opts = append(r.Options[:], opts...) if id == "" { err = errors.New("missing required id parameter") return } path := fmt.Sprintf("session/%s/share", id) - err = requestconfig.ExecuteNewRequest(ctx, http.MethodDelete, path, nil, &res, opts...) + err = requestconfig.ExecuteNewRequest(ctx, http.MethodDelete, path, body, &res, opts...) return } @@ -331,7 +333,7 @@ func (r AgentPartInputParam) MarshalJSON() (data []byte, err error) { return apijson.MarshalRoot(r) } -func (r AgentPartInputParam) implementsSessionChatParamsPartUnion() {} +func (r AgentPartInputParam) implementsSessionPromptParamsPartUnion() {} type AgentPartInputType string @@ -707,7 +709,7 @@ func (r FilePartInputParam) MarshalJSON() (data []byte, err error) { return apijson.MarshalRoot(r) } -func (r FilePartInputParam) implementsSessionChatParamsPartUnion() {} +func (r FilePartInputParam) implementsSessionPromptParamsPartUnion() {} type FilePartInputType string @@ -1294,19 +1296,23 @@ func (r ReasoningPartType) IsKnown() bool { } type Session struct { - ID string `json:"id,required"` - Time SessionTime `json:"time,required"` - Title string `json:"title,required"` - Version string `json:"version,required"` - ParentID string `json:"parentID"` - Revert SessionRevert `json:"revert"` - Share SessionShare `json:"share"` - JSON sessionJSON `json:"-"` + ID string `json:"id,required"` + Directory string `json:"directory,required"` + ProjectID string `json:"projectID,required"` + Time SessionTime `json:"time,required"` + Title string `json:"title,required"` + Version string `json:"version,required"` + ParentID string `json:"parentID"` + Revert SessionRevert `json:"revert"` + Share SessionShare `json:"share"` + JSON sessionJSON `json:"-"` } // sessionJSON contains the JSON metadata for the struct [Session] type sessionJSON struct { ID apijson.Field + Directory apijson.Field + ProjectID apijson.Field Time apijson.Field Title apijson.Field Version apijson.Field @@ -1814,7 +1820,7 @@ func (r TextPartInputParam) MarshalJSON() (data []byte, err error) { return apijson.MarshalRoot(r) } -func (r TextPartInputParam) implementsSessionChatParamsPartUnion() {} +func (r TextPartInputParam) implementsSessionPromptParamsPartUnion() {} type TextPartInputType string @@ -2290,29 +2296,6 @@ func (r userMessageTimeJSON) RawJSON() string { return r.raw } -type SessionChatResponse struct { - Info AssistantMessage `json:"info,required"` - Parts []Part `json:"parts,required"` - JSON sessionChatResponseJSON `json:"-"` -} - -// sessionChatResponseJSON contains the JSON metadata for the struct -// [SessionChatResponse] -type sessionChatResponseJSON struct { - Info apijson.Field - Parts apijson.Field - raw string - ExtraFields map[string]apijson.Field -} - -func (r *SessionChatResponse) UnmarshalJSON(data []byte) (err error) { - return apijson.UnmarshalRoot(data, r) -} - -func (r sessionChatResponseJSON) RawJSON() string { - return r.raw -} - type SessionCommandResponse struct { Info AssistantMessage `json:"info,required"` Parts []Part `json:"parts,required"` @@ -2382,81 +2365,116 @@ func (r sessionMessagesResponseJSON) RawJSON() string { return r.raw } +type SessionPromptResponse struct { + Info AssistantMessage `json:"info,required"` + Parts []Part `json:"parts,required"` + JSON sessionPromptResponseJSON `json:"-"` +} + +// sessionPromptResponseJSON contains the JSON metadata for the struct +// [SessionPromptResponse] +type sessionPromptResponseJSON struct { + Info apijson.Field + Parts apijson.Field + raw string + ExtraFields map[string]apijson.Field +} + +func (r *SessionPromptResponse) UnmarshalJSON(data []byte) (err error) { + return apijson.UnmarshalRoot(data, r) +} + +func (r sessionPromptResponseJSON) RawJSON() string { + return r.raw +} + type SessionNewParams struct { - ParentID param.Field[string] `json:"parentID"` - Title param.Field[string] `json:"title"` + Directory param.Field[string] `query:"directory"` + ParentID param.Field[string] `json:"parentID"` + Title param.Field[string] `json:"title"` } func (r SessionNewParams) MarshalJSON() (data []byte, err error) { return apijson.MarshalRoot(r) } +// URLQuery serializes [SessionNewParams]'s query parameters as `url.Values`. +func (r SessionNewParams) URLQuery() (v url.Values) { + return apiquery.MarshalWithSettings(r, apiquery.QuerySettings{ + ArrayFormat: apiquery.ArrayQueryFormatComma, + NestedFormat: apiquery.NestedQueryFormatBrackets, + }) +} + type SessionUpdateParams struct { - Title param.Field[string] `json:"title"` + Directory param.Field[string] `query:"directory"` + Title param.Field[string] `json:"title"` } func (r SessionUpdateParams) MarshalJSON() (data []byte, err error) { return apijson.MarshalRoot(r) } -type SessionChatParams struct { - ModelID param.Field[string] `json:"modelID,required"` - Parts param.Field[[]SessionChatParamsPartUnion] `json:"parts,required"` - ProviderID param.Field[string] `json:"providerID,required"` - Agent param.Field[string] `json:"agent"` - MessageID param.Field[string] `json:"messageID"` - System param.Field[string] `json:"system"` - Tools param.Field[map[string]bool] `json:"tools"` +// URLQuery serializes [SessionUpdateParams]'s query parameters as `url.Values`. +func (r SessionUpdateParams) URLQuery() (v url.Values) { + return apiquery.MarshalWithSettings(r, apiquery.QuerySettings{ + ArrayFormat: apiquery.ArrayQueryFormatComma, + NestedFormat: apiquery.NestedQueryFormatBrackets, + }) } -func (r SessionChatParams) MarshalJSON() (data []byte, err error) { - return apijson.MarshalRoot(r) +type SessionListParams struct { + Directory param.Field[string] `query:"directory"` } -type SessionChatParamsPart struct { - Type param.Field[SessionChatParamsPartsType] `json:"type,required"` - ID param.Field[string] `json:"id"` - Filename param.Field[string] `json:"filename"` - Mime param.Field[string] `json:"mime"` - Name param.Field[string] `json:"name"` - Source param.Field[interface{}] `json:"source"` - Synthetic param.Field[bool] `json:"synthetic"` - Text param.Field[string] `json:"text"` - Time param.Field[interface{}] `json:"time"` - URL param.Field[string] `json:"url"` +// URLQuery serializes [SessionListParams]'s query parameters as `url.Values`. +func (r SessionListParams) URLQuery() (v url.Values) { + return apiquery.MarshalWithSettings(r, apiquery.QuerySettings{ + ArrayFormat: apiquery.ArrayQueryFormatComma, + NestedFormat: apiquery.NestedQueryFormatBrackets, + }) } -func (r SessionChatParamsPart) MarshalJSON() (data []byte, err error) { - return apijson.MarshalRoot(r) +type SessionDeleteParams struct { + Directory param.Field[string] `query:"directory"` } -func (r SessionChatParamsPart) implementsSessionChatParamsPartUnion() {} +// URLQuery serializes [SessionDeleteParams]'s query parameters as `url.Values`. +func (r SessionDeleteParams) URLQuery() (v url.Values) { + return apiquery.MarshalWithSettings(r, apiquery.QuerySettings{ + ArrayFormat: apiquery.ArrayQueryFormatComma, + NestedFormat: apiquery.NestedQueryFormatBrackets, + }) +} -// Satisfied by [TextPartInputParam], [FilePartInputParam], [AgentPartInputParam], -// [SessionChatParamsPart]. -type SessionChatParamsPartUnion interface { - implementsSessionChatParamsPartUnion() +type SessionAbortParams struct { + Directory param.Field[string] `query:"directory"` } -type SessionChatParamsPartsType string +// URLQuery serializes [SessionAbortParams]'s query parameters as `url.Values`. +func (r SessionAbortParams) URLQuery() (v url.Values) { + return apiquery.MarshalWithSettings(r, apiquery.QuerySettings{ + ArrayFormat: apiquery.ArrayQueryFormatComma, + NestedFormat: apiquery.NestedQueryFormatBrackets, + }) +} -const ( - SessionChatParamsPartsTypeText SessionChatParamsPartsType = "text" - SessionChatParamsPartsTypeFile SessionChatParamsPartsType = "file" - SessionChatParamsPartsTypeAgent SessionChatParamsPartsType = "agent" -) +type SessionChildrenParams struct { + Directory param.Field[string] `query:"directory"` +} -func (r SessionChatParamsPartsType) IsKnown() bool { - switch r { - case SessionChatParamsPartsTypeText, SessionChatParamsPartsTypeFile, SessionChatParamsPartsTypeAgent: - return true - } - return false +// URLQuery serializes [SessionChildrenParams]'s query parameters as `url.Values`. +func (r SessionChildrenParams) URLQuery() (v url.Values) { + return apiquery.MarshalWithSettings(r, apiquery.QuerySettings{ + ArrayFormat: apiquery.ArrayQueryFormatComma, + NestedFormat: apiquery.NestedQueryFormatBrackets, + }) } type SessionCommandParams struct { Arguments param.Field[string] `json:"arguments,required"` Command param.Field[string] `json:"command,required"` + Directory param.Field[string] `query:"directory"` Agent param.Field[string] `json:"agent"` MessageID param.Field[string] `json:"messageID"` Model param.Field[string] `json:"model"` @@ -2466,18 +2484,144 @@ func (r SessionCommandParams) MarshalJSON() (data []byte, err error) { return apijson.MarshalRoot(r) } +// URLQuery serializes [SessionCommandParams]'s query parameters as `url.Values`. +func (r SessionCommandParams) URLQuery() (v url.Values) { + return apiquery.MarshalWithSettings(r, apiquery.QuerySettings{ + ArrayFormat: apiquery.ArrayQueryFormatComma, + NestedFormat: apiquery.NestedQueryFormatBrackets, + }) +} + +type SessionGetParams struct { + Directory param.Field[string] `query:"directory"` +} + +// URLQuery serializes [SessionGetParams]'s query parameters as `url.Values`. +func (r SessionGetParams) URLQuery() (v url.Values) { + return apiquery.MarshalWithSettings(r, apiquery.QuerySettings{ + ArrayFormat: apiquery.ArrayQueryFormatComma, + NestedFormat: apiquery.NestedQueryFormatBrackets, + }) +} + type SessionInitParams struct { MessageID param.Field[string] `json:"messageID,required"` ModelID param.Field[string] `json:"modelID,required"` ProviderID param.Field[string] `json:"providerID,required"` + Directory param.Field[string] `query:"directory"` } func (r SessionInitParams) MarshalJSON() (data []byte, err error) { return apijson.MarshalRoot(r) } +// URLQuery serializes [SessionInitParams]'s query parameters as `url.Values`. +func (r SessionInitParams) URLQuery() (v url.Values) { + return apiquery.MarshalWithSettings(r, apiquery.QuerySettings{ + ArrayFormat: apiquery.ArrayQueryFormatComma, + NestedFormat: apiquery.NestedQueryFormatBrackets, + }) +} + +type SessionMessageParams struct { + Directory param.Field[string] `query:"directory"` +} + +// URLQuery serializes [SessionMessageParams]'s query parameters as `url.Values`. +func (r SessionMessageParams) URLQuery() (v url.Values) { + return apiquery.MarshalWithSettings(r, apiquery.QuerySettings{ + ArrayFormat: apiquery.ArrayQueryFormatComma, + NestedFormat: apiquery.NestedQueryFormatBrackets, + }) +} + +type SessionMessagesParams struct { + Directory param.Field[string] `query:"directory"` +} + +// URLQuery serializes [SessionMessagesParams]'s query parameters as `url.Values`. +func (r SessionMessagesParams) URLQuery() (v url.Values) { + return apiquery.MarshalWithSettings(r, apiquery.QuerySettings{ + ArrayFormat: apiquery.ArrayQueryFormatComma, + NestedFormat: apiquery.NestedQueryFormatBrackets, + }) +} + +type SessionPromptParams struct { + Parts param.Field[[]SessionPromptParamsPartUnion] `json:"parts,required"` + Directory param.Field[string] `query:"directory"` + Agent param.Field[string] `json:"agent"` + MessageID param.Field[string] `json:"messageID"` + Model param.Field[SessionPromptParamsModel] `json:"model"` + System param.Field[string] `json:"system"` + Tools param.Field[map[string]bool] `json:"tools"` +} + +func (r SessionPromptParams) MarshalJSON() (data []byte, err error) { + return apijson.MarshalRoot(r) +} + +// URLQuery serializes [SessionPromptParams]'s query parameters as `url.Values`. +func (r SessionPromptParams) URLQuery() (v url.Values) { + return apiquery.MarshalWithSettings(r, apiquery.QuerySettings{ + ArrayFormat: apiquery.ArrayQueryFormatComma, + NestedFormat: apiquery.NestedQueryFormatBrackets, + }) +} + +type SessionPromptParamsPart struct { + Type param.Field[SessionPromptParamsPartsType] `json:"type,required"` + ID param.Field[string] `json:"id"` + Filename param.Field[string] `json:"filename"` + Mime param.Field[string] `json:"mime"` + Name param.Field[string] `json:"name"` + Source param.Field[interface{}] `json:"source"` + Synthetic param.Field[bool] `json:"synthetic"` + Text param.Field[string] `json:"text"` + Time param.Field[interface{}] `json:"time"` + URL param.Field[string] `json:"url"` +} + +func (r SessionPromptParamsPart) MarshalJSON() (data []byte, err error) { + return apijson.MarshalRoot(r) +} + +func (r SessionPromptParamsPart) implementsSessionPromptParamsPartUnion() {} + +// Satisfied by [TextPartInputParam], [FilePartInputParam], [AgentPartInputParam], +// [SessionPromptParamsPart]. +type SessionPromptParamsPartUnion interface { + implementsSessionPromptParamsPartUnion() +} + +type SessionPromptParamsPartsType string + +const ( + SessionPromptParamsPartsTypeText SessionPromptParamsPartsType = "text" + SessionPromptParamsPartsTypeFile SessionPromptParamsPartsType = "file" + SessionPromptParamsPartsTypeAgent SessionPromptParamsPartsType = "agent" +) + +func (r SessionPromptParamsPartsType) IsKnown() bool { + switch r { + case SessionPromptParamsPartsTypeText, SessionPromptParamsPartsTypeFile, SessionPromptParamsPartsTypeAgent: + return true + } + return false +} + +type SessionPromptParamsModel struct { + ModelID param.Field[string] `json:"modelID,required"` + ProviderID param.Field[string] `json:"providerID,required"` +} + +func (r SessionPromptParamsModel) MarshalJSON() (data []byte, err error) { + return apijson.MarshalRoot(r) +} + type SessionRevertParams struct { MessageID param.Field[string] `json:"messageID,required"` + Directory param.Field[string] `query:"directory"` PartID param.Field[string] `json:"partID"` } @@ -2485,20 +2629,82 @@ func (r SessionRevertParams) MarshalJSON() (data []byte, err error) { return apijson.MarshalRoot(r) } +// URLQuery serializes [SessionRevertParams]'s query parameters as `url.Values`. +func (r SessionRevertParams) URLQuery() (v url.Values) { + return apiquery.MarshalWithSettings(r, apiquery.QuerySettings{ + ArrayFormat: apiquery.ArrayQueryFormatComma, + NestedFormat: apiquery.NestedQueryFormatBrackets, + }) +} + +type SessionShareParams struct { + Directory param.Field[string] `query:"directory"` +} + +// URLQuery serializes [SessionShareParams]'s query parameters as `url.Values`. +func (r SessionShareParams) URLQuery() (v url.Values) { + return apiquery.MarshalWithSettings(r, apiquery.QuerySettings{ + ArrayFormat: apiquery.ArrayQueryFormatComma, + NestedFormat: apiquery.NestedQueryFormatBrackets, + }) +} + type SessionShellParams struct { - Agent param.Field[string] `json:"agent,required"` - Command param.Field[string] `json:"command,required"` + Agent param.Field[string] `json:"agent,required"` + Command param.Field[string] `json:"command,required"` + Directory param.Field[string] `query:"directory"` } func (r SessionShellParams) MarshalJSON() (data []byte, err error) { return apijson.MarshalRoot(r) } +// URLQuery serializes [SessionShellParams]'s query parameters as `url.Values`. +func (r SessionShellParams) URLQuery() (v url.Values) { + return apiquery.MarshalWithSettings(r, apiquery.QuerySettings{ + ArrayFormat: apiquery.ArrayQueryFormatComma, + NestedFormat: apiquery.NestedQueryFormatBrackets, + }) +} + type SessionSummarizeParams struct { ModelID param.Field[string] `json:"modelID,required"` ProviderID param.Field[string] `json:"providerID,required"` + Directory param.Field[string] `query:"directory"` } func (r SessionSummarizeParams) MarshalJSON() (data []byte, err error) { return apijson.MarshalRoot(r) } + +// URLQuery serializes [SessionSummarizeParams]'s query parameters as `url.Values`. +func (r SessionSummarizeParams) URLQuery() (v url.Values) { + return apiquery.MarshalWithSettings(r, apiquery.QuerySettings{ + ArrayFormat: apiquery.ArrayQueryFormatComma, + NestedFormat: apiquery.NestedQueryFormatBrackets, + }) +} + +type SessionUnrevertParams struct { + Directory param.Field[string] `query:"directory"` +} + +// URLQuery serializes [SessionUnrevertParams]'s query parameters as `url.Values`. +func (r SessionUnrevertParams) URLQuery() (v url.Values) { + return apiquery.MarshalWithSettings(r, apiquery.QuerySettings{ + ArrayFormat: apiquery.ArrayQueryFormatComma, + NestedFormat: apiquery.NestedQueryFormatBrackets, + }) +} + +type SessionUnshareParams struct { + Directory param.Field[string] `query:"directory"` +} + +// URLQuery serializes [SessionUnshareParams]'s query parameters as `url.Values`. +func (r SessionUnshareParams) URLQuery() (v url.Values) { + return apiquery.MarshalWithSettings(r, apiquery.QuerySettings{ + ArrayFormat: apiquery.ArrayQueryFormatComma, + NestedFormat: apiquery.NestedQueryFormatBrackets, + }) +} diff --git a/packages/sdk/go/session_test.go b/packages/sdk/go/session_test.go index d67be255a..f4cbc04b1 100644 --- a/packages/sdk/go/session_test.go +++ b/packages/sdk/go/session_test.go @@ -14,7 +14,7 @@ import ( ) func TestSessionNewWithOptionalParams(t *testing.T) { - t.Skip("skipped: tests are disabled for the time being") + t.Skip("Prism tests are disabled") baseURL := "http://localhost:4010" if envURL, ok := os.LookupEnv("TEST_API_BASE_URL"); ok { baseURL = envURL @@ -26,8 +26,9 @@ func TestSessionNewWithOptionalParams(t *testing.T) { option.WithBaseURL(baseURL), ) _, err := client.Session.New(context.TODO(), opencode.SessionNewParams{ - ParentID: opencode.F("parentID"), - Title: opencode.F("title"), + Directory: opencode.F("directory"), + ParentID: opencode.F("parentID"), + Title: opencode.F("title"), }) if err != nil { var apierr *opencode.Error @@ -39,7 +40,7 @@ func TestSessionNewWithOptionalParams(t *testing.T) { } func TestSessionUpdateWithOptionalParams(t *testing.T) { - t.Skip("skipped: tests are disabled for the time being") + t.Skip("Prism tests are disabled") baseURL := "http://localhost:4010" if envURL, ok := os.LookupEnv("TEST_API_BASE_URL"); ok { baseURL = envURL @@ -54,7 +55,8 @@ func TestSessionUpdateWithOptionalParams(t *testing.T) { context.TODO(), "id", opencode.SessionUpdateParams{ - Title: opencode.F("title"), + Directory: opencode.F("directory"), + Title: opencode.F("title"), }, ) if err != nil { @@ -66,8 +68,8 @@ func TestSessionUpdateWithOptionalParams(t *testing.T) { } } -func TestSessionList(t *testing.T) { - t.Skip("skipped: tests are disabled for the time being") +func TestSessionListWithOptionalParams(t *testing.T) { + t.Skip("Prism tests are disabled") baseURL := "http://localhost:4010" if envURL, ok := os.LookupEnv("TEST_API_BASE_URL"); ok { baseURL = envURL @@ -78,7 +80,9 @@ func TestSessionList(t *testing.T) { client := opencode.NewClient( option.WithBaseURL(baseURL), ) - _, err := client.Session.List(context.TODO()) + _, err := client.Session.List(context.TODO(), opencode.SessionListParams{ + Directory: opencode.F("directory"), + }) if err != nil { var apierr *opencode.Error if errors.As(err, &apierr) { @@ -88,8 +92,8 @@ func TestSessionList(t *testing.T) { } } -func TestSessionDelete(t *testing.T) { - t.Skip("skipped: tests are disabled for the time being") +func TestSessionDeleteWithOptionalParams(t *testing.T) { + t.Skip("Prism tests are disabled") baseURL := "http://localhost:4010" if envURL, ok := os.LookupEnv("TEST_API_BASE_URL"); ok { baseURL = envURL @@ -100,7 +104,13 @@ func TestSessionDelete(t *testing.T) { client := opencode.NewClient( option.WithBaseURL(baseURL), ) - _, err := client.Session.Delete(context.TODO(), "id") + _, err := client.Session.Delete( + context.TODO(), + "id", + opencode.SessionDeleteParams{ + Directory: opencode.F("directory"), + }, + ) if err != nil { var apierr *opencode.Error if errors.As(err, &apierr) { @@ -110,8 +120,8 @@ func TestSessionDelete(t *testing.T) { } } -func TestSessionAbort(t *testing.T) { - t.Skip("skipped: tests are disabled for the time being") +func TestSessionAbortWithOptionalParams(t *testing.T) { + t.Skip("Prism tests are disabled") baseURL := "http://localhost:4010" if envURL, ok := os.LookupEnv("TEST_API_BASE_URL"); ok { baseURL = envURL @@ -122,7 +132,13 @@ func TestSessionAbort(t *testing.T) { client := opencode.NewClient( option.WithBaseURL(baseURL), ) - _, err := client.Session.Abort(context.TODO(), "id") + _, err := client.Session.Abort( + context.TODO(), + "id", + opencode.SessionAbortParams{ + Directory: opencode.F("directory"), + }, + ) if err != nil { var apierr *opencode.Error if errors.As(err, &apierr) { @@ -132,8 +148,8 @@ func TestSessionAbort(t *testing.T) { } } -func TestSessionChatWithOptionalParams(t *testing.T) { - t.Skip("skipped: tests are disabled for the time being") +func TestSessionChildrenWithOptionalParams(t *testing.T) { + t.Skip("Prism tests are disabled") baseURL := "http://localhost:4010" if envURL, ok := os.LookupEnv("TEST_API_BASE_URL"); ok { baseURL = envURL @@ -144,28 +160,11 @@ func TestSessionChatWithOptionalParams(t *testing.T) { client := opencode.NewClient( option.WithBaseURL(baseURL), ) - _, err := client.Session.Chat( + _, err := client.Session.Children( context.TODO(), "id", - opencode.SessionChatParams{ - ModelID: opencode.F("modelID"), - Parts: opencode.F([]opencode.SessionChatParamsPartUnion{opencode.TextPartInputParam{ - Text: opencode.F("text"), - Type: opencode.F(opencode.TextPartInputTypeText), - ID: opencode.F("id"), - Synthetic: opencode.F(true), - Time: opencode.F(opencode.TextPartInputTimeParam{ - Start: opencode.F(0.000000), - End: opencode.F(0.000000), - }), - }}), - ProviderID: opencode.F("providerID"), - Agent: opencode.F("agent"), - MessageID: opencode.F("msg"), - System: opencode.F("system"), - Tools: opencode.F(map[string]bool{ - "foo": true, - }), + opencode.SessionChildrenParams{ + Directory: opencode.F("directory"), }, ) if err != nil { @@ -177,8 +176,8 @@ func TestSessionChatWithOptionalParams(t *testing.T) { } } -func TestSessionChildren(t *testing.T) { - t.Skip("skipped: tests are disabled for the time being") +func TestSessionCommandWithOptionalParams(t *testing.T) { + t.Skip("Prism tests are disabled") baseURL := "http://localhost:4010" if envURL, ok := os.LookupEnv("TEST_API_BASE_URL"); ok { baseURL = envURL @@ -189,7 +188,18 @@ func TestSessionChildren(t *testing.T) { client := opencode.NewClient( option.WithBaseURL(baseURL), ) - _, err := client.Session.Children(context.TODO(), "id") + _, err := client.Session.Command( + context.TODO(), + "id", + opencode.SessionCommandParams{ + Arguments: opencode.F("arguments"), + Command: opencode.F("command"), + Directory: opencode.F("directory"), + Agent: opencode.F("agent"), + MessageID: opencode.F("msg"), + Model: opencode.F("model"), + }, + ) if err != nil { var apierr *opencode.Error if errors.As(err, &apierr) { @@ -199,8 +209,8 @@ func TestSessionChildren(t *testing.T) { } } -func TestSessionCommandWithOptionalParams(t *testing.T) { - t.Skip("skipped: tests are disabled for the time being") +func TestSessionGetWithOptionalParams(t *testing.T) { + t.Skip("Prism tests are disabled") baseURL := "http://localhost:4010" if envURL, ok := os.LookupEnv("TEST_API_BASE_URL"); ok { baseURL = envURL @@ -211,15 +221,11 @@ func TestSessionCommandWithOptionalParams(t *testing.T) { client := opencode.NewClient( option.WithBaseURL(baseURL), ) - _, err := client.Session.Command( + _, err := client.Session.Get( context.TODO(), "id", - opencode.SessionCommandParams{ - Arguments: opencode.F("arguments"), - Command: opencode.F("command"), - Agent: opencode.F("agent"), - MessageID: opencode.F("msg"), - Model: opencode.F("model"), + opencode.SessionGetParams{ + Directory: opencode.F("directory"), }, ) if err != nil { @@ -231,8 +237,8 @@ func TestSessionCommandWithOptionalParams(t *testing.T) { } } -func TestSessionGet(t *testing.T) { - t.Skip("skipped: tests are disabled for the time being") +func TestSessionInitWithOptionalParams(t *testing.T) { + t.Skip("Prism tests are disabled") baseURL := "http://localhost:4010" if envURL, ok := os.LookupEnv("TEST_API_BASE_URL"); ok { baseURL = envURL @@ -243,7 +249,16 @@ func TestSessionGet(t *testing.T) { client := opencode.NewClient( option.WithBaseURL(baseURL), ) - _, err := client.Session.Get(context.TODO(), "id") + _, err := client.Session.Init( + context.TODO(), + "id", + opencode.SessionInitParams{ + MessageID: opencode.F("messageID"), + ModelID: opencode.F("modelID"), + ProviderID: opencode.F("providerID"), + Directory: opencode.F("directory"), + }, + ) if err != nil { var apierr *opencode.Error if errors.As(err, &apierr) { @@ -253,8 +268,8 @@ func TestSessionGet(t *testing.T) { } } -func TestSessionInit(t *testing.T) { - t.Skip("skipped: tests are disabled for the time being") +func TestSessionMessageWithOptionalParams(t *testing.T) { + t.Skip("Prism tests are disabled") baseURL := "http://localhost:4010" if envURL, ok := os.LookupEnv("TEST_API_BASE_URL"); ok { baseURL = envURL @@ -265,13 +280,12 @@ func TestSessionInit(t *testing.T) { client := opencode.NewClient( option.WithBaseURL(baseURL), ) - _, err := client.Session.Init( + _, err := client.Session.Message( context.TODO(), "id", - opencode.SessionInitParams{ - MessageID: opencode.F("messageID"), - ModelID: opencode.F("modelID"), - ProviderID: opencode.F("providerID"), + "messageID", + opencode.SessionMessageParams{ + Directory: opencode.F("directory"), }, ) if err != nil { @@ -283,8 +297,8 @@ func TestSessionInit(t *testing.T) { } } -func TestSessionMessage(t *testing.T) { - t.Skip("skipped: tests are disabled for the time being") +func TestSessionMessagesWithOptionalParams(t *testing.T) { + t.Skip("Prism tests are disabled") baseURL := "http://localhost:4010" if envURL, ok := os.LookupEnv("TEST_API_BASE_URL"); ok { baseURL = envURL @@ -295,10 +309,12 @@ func TestSessionMessage(t *testing.T) { client := opencode.NewClient( option.WithBaseURL(baseURL), ) - _, err := client.Session.Message( + _, err := client.Session.Messages( context.TODO(), "id", - "messageID", + opencode.SessionMessagesParams{ + Directory: opencode.F("directory"), + }, ) if err != nil { var apierr *opencode.Error @@ -309,8 +325,8 @@ func TestSessionMessage(t *testing.T) { } } -func TestSessionMessages(t *testing.T) { - t.Skip("skipped: tests are disabled for the time being") +func TestSessionPromptWithOptionalParams(t *testing.T) { + t.Skip("Prism tests are disabled") baseURL := "http://localhost:4010" if envURL, ok := os.LookupEnv("TEST_API_BASE_URL"); ok { baseURL = envURL @@ -321,7 +337,33 @@ func TestSessionMessages(t *testing.T) { client := opencode.NewClient( option.WithBaseURL(baseURL), ) - _, err := client.Session.Messages(context.TODO(), "id") + _, err := client.Session.Prompt( + context.TODO(), + "id", + opencode.SessionPromptParams{ + Parts: opencode.F([]opencode.SessionPromptParamsPartUnion{opencode.TextPartInputParam{ + Text: opencode.F("text"), + Type: opencode.F(opencode.TextPartInputTypeText), + ID: opencode.F("id"), + Synthetic: opencode.F(true), + Time: opencode.F(opencode.TextPartInputTimeParam{ + Start: opencode.F(0.000000), + End: opencode.F(0.000000), + }), + }}), + Directory: opencode.F("directory"), + Agent: opencode.F("agent"), + MessageID: opencode.F("msg"), + Model: opencode.F(opencode.SessionPromptParamsModel{ + ModelID: opencode.F("modelID"), + ProviderID: opencode.F("providerID"), + }), + System: opencode.F("system"), + Tools: opencode.F(map[string]bool{ + "foo": true, + }), + }, + ) if err != nil { var apierr *opencode.Error if errors.As(err, &apierr) { @@ -332,7 +374,7 @@ func TestSessionMessages(t *testing.T) { } func TestSessionRevertWithOptionalParams(t *testing.T) { - t.Skip("skipped: tests are disabled for the time being") + t.Skip("Prism tests are disabled") baseURL := "http://localhost:4010" if envURL, ok := os.LookupEnv("TEST_API_BASE_URL"); ok { baseURL = envURL @@ -348,6 +390,7 @@ func TestSessionRevertWithOptionalParams(t *testing.T) { "id", opencode.SessionRevertParams{ MessageID: opencode.F("msg"), + Directory: opencode.F("directory"), PartID: opencode.F("prt"), }, ) @@ -360,8 +403,8 @@ func TestSessionRevertWithOptionalParams(t *testing.T) { } } -func TestSessionShare(t *testing.T) { - t.Skip("skipped: tests are disabled for the time being") +func TestSessionShareWithOptionalParams(t *testing.T) { + t.Skip("Prism tests are disabled") baseURL := "http://localhost:4010" if envURL, ok := os.LookupEnv("TEST_API_BASE_URL"); ok { baseURL = envURL @@ -372,7 +415,13 @@ func TestSessionShare(t *testing.T) { client := opencode.NewClient( option.WithBaseURL(baseURL), ) - _, err := client.Session.Share(context.TODO(), "id") + _, err := client.Session.Share( + context.TODO(), + "id", + opencode.SessionShareParams{ + Directory: opencode.F("directory"), + }, + ) if err != nil { var apierr *opencode.Error if errors.As(err, &apierr) { @@ -382,8 +431,8 @@ func TestSessionShare(t *testing.T) { } } -func TestSessionShell(t *testing.T) { - t.Skip("skipped: tests are disabled for the time being") +func TestSessionShellWithOptionalParams(t *testing.T) { + t.Skip("Prism tests are disabled") baseURL := "http://localhost:4010" if envURL, ok := os.LookupEnv("TEST_API_BASE_URL"); ok { baseURL = envURL @@ -398,8 +447,9 @@ func TestSessionShell(t *testing.T) { context.TODO(), "id", opencode.SessionShellParams{ - Agent: opencode.F("agent"), - Command: opencode.F("command"), + Agent: opencode.F("agent"), + Command: opencode.F("command"), + Directory: opencode.F("directory"), }, ) if err != nil { @@ -411,8 +461,8 @@ func TestSessionShell(t *testing.T) { } } -func TestSessionSummarize(t *testing.T) { - t.Skip("skipped: tests are disabled for the time being") +func TestSessionSummarizeWithOptionalParams(t *testing.T) { + t.Skip("Prism tests are disabled") baseURL := "http://localhost:4010" if envURL, ok := os.LookupEnv("TEST_API_BASE_URL"); ok { baseURL = envURL @@ -429,6 +479,7 @@ func TestSessionSummarize(t *testing.T) { opencode.SessionSummarizeParams{ ModelID: opencode.F("modelID"), ProviderID: opencode.F("providerID"), + Directory: opencode.F("directory"), }, ) if err != nil { @@ -440,8 +491,8 @@ func TestSessionSummarize(t *testing.T) { } } -func TestSessionUnrevert(t *testing.T) { - t.Skip("skipped: tests are disabled for the time being") +func TestSessionUnrevertWithOptionalParams(t *testing.T) { + t.Skip("Prism tests are disabled") baseURL := "http://localhost:4010" if envURL, ok := os.LookupEnv("TEST_API_BASE_URL"); ok { baseURL = envURL @@ -452,7 +503,13 @@ func TestSessionUnrevert(t *testing.T) { client := opencode.NewClient( option.WithBaseURL(baseURL), ) - _, err := client.Session.Unrevert(context.TODO(), "id") + _, err := client.Session.Unrevert( + context.TODO(), + "id", + opencode.SessionUnrevertParams{ + Directory: opencode.F("directory"), + }, + ) if err != nil { var apierr *opencode.Error if errors.As(err, &apierr) { @@ -462,8 +519,8 @@ func TestSessionUnrevert(t *testing.T) { } } -func TestSessionUnshare(t *testing.T) { - t.Skip("skipped: tests are disabled for the time being") +func TestSessionUnshareWithOptionalParams(t *testing.T) { + t.Skip("Prism tests are disabled") baseURL := "http://localhost:4010" if envURL, ok := os.LookupEnv("TEST_API_BASE_URL"); ok { baseURL = envURL @@ -474,7 +531,13 @@ func TestSessionUnshare(t *testing.T) { client := opencode.NewClient( option.WithBaseURL(baseURL), ) - _, err := client.Session.Unshare(context.TODO(), "id") + _, err := client.Session.Unshare( + context.TODO(), + "id", + opencode.SessionUnshareParams{ + Directory: opencode.F("directory"), + }, + ) if err != nil { var apierr *opencode.Error if errors.As(err, &apierr) { diff --git a/packages/sdk/go/sessionpermission.go b/packages/sdk/go/sessionpermission.go index 85e55bd5e..4d49bd87b 100644 --- a/packages/sdk/go/sessionpermission.go +++ b/packages/sdk/go/sessionpermission.go @@ -7,8 +7,10 @@ import ( "errors" "fmt" "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" @@ -34,7 +36,7 @@ func NewSessionPermissionService(opts ...option.RequestOption) (r *SessionPermis } // Respond to a permission request -func (r *SessionPermissionService) Respond(ctx context.Context, id string, permissionID string, body SessionPermissionRespondParams, opts ...option.RequestOption) (res *bool, err error) { +func (r *SessionPermissionService) Respond(ctx context.Context, id string, permissionID string, params SessionPermissionRespondParams, opts ...option.RequestOption) (res *bool, err error) { opts = append(r.Options[:], opts...) if id == "" { err = errors.New("missing required id parameter") @@ -45,7 +47,7 @@ func (r *SessionPermissionService) Respond(ctx context.Context, id string, permi return } path := fmt.Sprintf("session/%s/permissions/%s", id, permissionID) - err = requestconfig.ExecuteNewRequest(ctx, http.MethodPost, path, body, &res, opts...) + err = requestconfig.ExecuteNewRequest(ctx, http.MethodPost, path, params, &res, opts...) return } @@ -106,13 +108,23 @@ func (r permissionTimeJSON) RawJSON() string { } type SessionPermissionRespondParams struct { - Response param.Field[SessionPermissionRespondParamsResponse] `json:"response,required"` + Response param.Field[SessionPermissionRespondParamsResponse] `json:"response,required"` + Directory param.Field[string] `query:"directory"` } func (r SessionPermissionRespondParams) MarshalJSON() (data []byte, err error) { return apijson.MarshalRoot(r) } +// URLQuery serializes [SessionPermissionRespondParams]'s query parameters as +// `url.Values`. +func (r SessionPermissionRespondParams) URLQuery() (v url.Values) { + return apiquery.MarshalWithSettings(r, apiquery.QuerySettings{ + ArrayFormat: apiquery.ArrayQueryFormatComma, + NestedFormat: apiquery.NestedQueryFormatBrackets, + }) +} + type SessionPermissionRespondParamsResponse string const ( diff --git a/packages/sdk/go/sessionpermission_test.go b/packages/sdk/go/sessionpermission_test.go index 728976be4..ed396b50a 100644 --- a/packages/sdk/go/sessionpermission_test.go +++ b/packages/sdk/go/sessionpermission_test.go @@ -13,8 +13,8 @@ import ( "github.com/sst/opencode-sdk-go/option" ) -func TestSessionPermissionRespond(t *testing.T) { - t.Skip("skipped: tests are disabled for the time being") +func TestSessionPermissionRespondWithOptionalParams(t *testing.T) { + t.Skip("Prism tests are disabled") baseURL := "http://localhost:4010" if envURL, ok := os.LookupEnv("TEST_API_BASE_URL"); ok { baseURL = envURL @@ -30,7 +30,8 @@ func TestSessionPermissionRespond(t *testing.T) { "id", "permissionID", opencode.SessionPermissionRespondParams{ - Response: opencode.F(opencode.SessionPermissionRespondParamsResponseOnce), + Response: opencode.F(opencode.SessionPermissionRespondParamsResponseOnce), + Directory: opencode.F("directory"), }, ) if err != nil { diff --git a/packages/sdk/go/shared/union.go b/packages/sdk/go/shared/union.go new file mode 100644 index 000000000..91c73305d --- /dev/null +++ b/packages/sdk/go/shared/union.go @@ -0,0 +1,11 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +package shared + +type UnionBool bool + +func (UnionBool) ImplementsConfigProviderOptionsTimeoutUnion() {} + +type UnionInt int64 + +func (UnionInt) ImplementsConfigProviderOptionsTimeoutUnion() {} diff --git a/packages/sdk/go/tui.go b/packages/sdk/go/tui.go index ab5ed6403..b7a8483f0 100644 --- a/packages/sdk/go/tui.go +++ b/packages/sdk/go/tui.go @@ -5,8 +5,10 @@ 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" @@ -32,103 +34,191 @@ func NewTuiService(opts ...option.RequestOption) (r *TuiService) { } // Append prompt to the TUI -func (r *TuiService) AppendPrompt(ctx context.Context, body TuiAppendPromptParams, opts ...option.RequestOption) (res *bool, err error) { +func (r *TuiService) AppendPrompt(ctx context.Context, params TuiAppendPromptParams, opts ...option.RequestOption) (res *bool, err error) { opts = append(r.Options[:], opts...) path := "tui/append-prompt" - err = requestconfig.ExecuteNewRequest(ctx, http.MethodPost, path, body, &res, opts...) + err = requestconfig.ExecuteNewRequest(ctx, http.MethodPost, path, params, &res, opts...) return } // Clear the prompt -func (r *TuiService) ClearPrompt(ctx context.Context, opts ...option.RequestOption) (res *bool, err error) { +func (r *TuiService) ClearPrompt(ctx context.Context, body TuiClearPromptParams, opts ...option.RequestOption) (res *bool, err error) { opts = append(r.Options[:], opts...) path := "tui/clear-prompt" - err = requestconfig.ExecuteNewRequest(ctx, http.MethodPost, path, nil, &res, opts...) + err = requestconfig.ExecuteNewRequest(ctx, http.MethodPost, path, body, &res, opts...) return } // Execute a TUI command (e.g. agent_cycle) -func (r *TuiService) ExecuteCommand(ctx context.Context, body TuiExecuteCommandParams, opts ...option.RequestOption) (res *bool, err error) { +func (r *TuiService) ExecuteCommand(ctx context.Context, params TuiExecuteCommandParams, opts ...option.RequestOption) (res *bool, err error) { opts = append(r.Options[:], opts...) path := "tui/execute-command" - err = requestconfig.ExecuteNewRequest(ctx, http.MethodPost, path, body, &res, opts...) + err = requestconfig.ExecuteNewRequest(ctx, http.MethodPost, path, params, &res, opts...) return } // Open the help dialog -func (r *TuiService) OpenHelp(ctx context.Context, opts ...option.RequestOption) (res *bool, err error) { +func (r *TuiService) OpenHelp(ctx context.Context, body TuiOpenHelpParams, opts ...option.RequestOption) (res *bool, err error) { opts = append(r.Options[:], opts...) path := "tui/open-help" - err = requestconfig.ExecuteNewRequest(ctx, http.MethodPost, path, nil, &res, opts...) + err = requestconfig.ExecuteNewRequest(ctx, http.MethodPost, path, body, &res, opts...) return } // Open the model dialog -func (r *TuiService) OpenModels(ctx context.Context, opts ...option.RequestOption) (res *bool, err error) { +func (r *TuiService) OpenModels(ctx context.Context, body TuiOpenModelsParams, opts ...option.RequestOption) (res *bool, err error) { opts = append(r.Options[:], opts...) path := "tui/open-models" - err = requestconfig.ExecuteNewRequest(ctx, http.MethodPost, path, nil, &res, opts...) + err = requestconfig.ExecuteNewRequest(ctx, http.MethodPost, path, body, &res, opts...) return } // Open the session dialog -func (r *TuiService) OpenSessions(ctx context.Context, opts ...option.RequestOption) (res *bool, err error) { +func (r *TuiService) OpenSessions(ctx context.Context, body TuiOpenSessionsParams, opts ...option.RequestOption) (res *bool, err error) { opts = append(r.Options[:], opts...) path := "tui/open-sessions" - err = requestconfig.ExecuteNewRequest(ctx, http.MethodPost, path, nil, &res, opts...) + err = requestconfig.ExecuteNewRequest(ctx, http.MethodPost, path, body, &res, opts...) return } // Open the theme dialog -func (r *TuiService) OpenThemes(ctx context.Context, opts ...option.RequestOption) (res *bool, err error) { +func (r *TuiService) OpenThemes(ctx context.Context, body TuiOpenThemesParams, opts ...option.RequestOption) (res *bool, err error) { opts = append(r.Options[:], opts...) path := "tui/open-themes" - err = requestconfig.ExecuteNewRequest(ctx, http.MethodPost, path, nil, &res, opts...) + err = requestconfig.ExecuteNewRequest(ctx, http.MethodPost, path, body, &res, opts...) return } // Show a toast notification in the TUI -func (r *TuiService) ShowToast(ctx context.Context, body TuiShowToastParams, opts ...option.RequestOption) (res *bool, err error) { +func (r *TuiService) ShowToast(ctx context.Context, params TuiShowToastParams, opts ...option.RequestOption) (res *bool, err error) { opts = append(r.Options[:], opts...) path := "tui/show-toast" - err = requestconfig.ExecuteNewRequest(ctx, http.MethodPost, path, body, &res, opts...) + err = requestconfig.ExecuteNewRequest(ctx, http.MethodPost, path, params, &res, opts...) return } // Submit the prompt -func (r *TuiService) SubmitPrompt(ctx context.Context, opts ...option.RequestOption) (res *bool, err error) { +func (r *TuiService) SubmitPrompt(ctx context.Context, body TuiSubmitPromptParams, opts ...option.RequestOption) (res *bool, err error) { opts = append(r.Options[:], opts...) path := "tui/submit-prompt" - err = requestconfig.ExecuteNewRequest(ctx, http.MethodPost, path, nil, &res, opts...) + err = requestconfig.ExecuteNewRequest(ctx, http.MethodPost, path, body, &res, opts...) return } type TuiAppendPromptParams struct { - Text param.Field[string] `json:"text,required"` + Text param.Field[string] `json:"text,required"` + Directory param.Field[string] `query:"directory"` } func (r TuiAppendPromptParams) MarshalJSON() (data []byte, err error) { return apijson.MarshalRoot(r) } +// URLQuery serializes [TuiAppendPromptParams]'s query parameters as `url.Values`. +func (r TuiAppendPromptParams) URLQuery() (v url.Values) { + return apiquery.MarshalWithSettings(r, apiquery.QuerySettings{ + ArrayFormat: apiquery.ArrayQueryFormatComma, + NestedFormat: apiquery.NestedQueryFormatBrackets, + }) +} + +type TuiClearPromptParams struct { + Directory param.Field[string] `query:"directory"` +} + +// URLQuery serializes [TuiClearPromptParams]'s query parameters as `url.Values`. +func (r TuiClearPromptParams) URLQuery() (v url.Values) { + return apiquery.MarshalWithSettings(r, apiquery.QuerySettings{ + ArrayFormat: apiquery.ArrayQueryFormatComma, + NestedFormat: apiquery.NestedQueryFormatBrackets, + }) +} + type TuiExecuteCommandParams struct { - Command param.Field[string] `json:"command,required"` + Command param.Field[string] `json:"command,required"` + Directory param.Field[string] `query:"directory"` } func (r TuiExecuteCommandParams) MarshalJSON() (data []byte, err error) { return apijson.MarshalRoot(r) } +// URLQuery serializes [TuiExecuteCommandParams]'s query parameters as +// `url.Values`. +func (r TuiExecuteCommandParams) URLQuery() (v url.Values) { + return apiquery.MarshalWithSettings(r, apiquery.QuerySettings{ + ArrayFormat: apiquery.ArrayQueryFormatComma, + NestedFormat: apiquery.NestedQueryFormatBrackets, + }) +} + +type TuiOpenHelpParams struct { + Directory param.Field[string] `query:"directory"` +} + +// URLQuery serializes [TuiOpenHelpParams]'s query parameters as `url.Values`. +func (r TuiOpenHelpParams) URLQuery() (v url.Values) { + return apiquery.MarshalWithSettings(r, apiquery.QuerySettings{ + ArrayFormat: apiquery.ArrayQueryFormatComma, + NestedFormat: apiquery.NestedQueryFormatBrackets, + }) +} + +type TuiOpenModelsParams struct { + Directory param.Field[string] `query:"directory"` +} + +// URLQuery serializes [TuiOpenModelsParams]'s query parameters as `url.Values`. +func (r TuiOpenModelsParams) URLQuery() (v url.Values) { + return apiquery.MarshalWithSettings(r, apiquery.QuerySettings{ + ArrayFormat: apiquery.ArrayQueryFormatComma, + NestedFormat: apiquery.NestedQueryFormatBrackets, + }) +} + +type TuiOpenSessionsParams struct { + Directory param.Field[string] `query:"directory"` +} + +// URLQuery serializes [TuiOpenSessionsParams]'s query parameters as `url.Values`. +func (r TuiOpenSessionsParams) URLQuery() (v url.Values) { + return apiquery.MarshalWithSettings(r, apiquery.QuerySettings{ + ArrayFormat: apiquery.ArrayQueryFormatComma, + NestedFormat: apiquery.NestedQueryFormatBrackets, + }) +} + +type TuiOpenThemesParams struct { + Directory param.Field[string] `query:"directory"` +} + +// URLQuery serializes [TuiOpenThemesParams]'s query parameters as `url.Values`. +func (r TuiOpenThemesParams) URLQuery() (v url.Values) { + return apiquery.MarshalWithSettings(r, apiquery.QuerySettings{ + ArrayFormat: apiquery.ArrayQueryFormatComma, + NestedFormat: apiquery.NestedQueryFormatBrackets, + }) +} + type TuiShowToastParams struct { - Message param.Field[string] `json:"message,required"` - Variant param.Field[TuiShowToastParamsVariant] `json:"variant,required"` - Title param.Field[string] `json:"title"` + Message param.Field[string] `json:"message,required"` + Variant param.Field[TuiShowToastParamsVariant] `json:"variant,required"` + Directory param.Field[string] `query:"directory"` + Title param.Field[string] `json:"title"` } func (r TuiShowToastParams) MarshalJSON() (data []byte, err error) { return apijson.MarshalRoot(r) } +// URLQuery serializes [TuiShowToastParams]'s query parameters as `url.Values`. +func (r TuiShowToastParams) URLQuery() (v url.Values) { + return apiquery.MarshalWithSettings(r, apiquery.QuerySettings{ + ArrayFormat: apiquery.ArrayQueryFormatComma, + NestedFormat: apiquery.NestedQueryFormatBrackets, + }) +} + type TuiShowToastParamsVariant string const ( @@ -145,3 +235,15 @@ func (r TuiShowToastParamsVariant) IsKnown() bool { } return false } + +type TuiSubmitPromptParams struct { + Directory param.Field[string] `query:"directory"` +} + +// URLQuery serializes [TuiSubmitPromptParams]'s query parameters as `url.Values`. +func (r TuiSubmitPromptParams) URLQuery() (v url.Values) { + return apiquery.MarshalWithSettings(r, apiquery.QuerySettings{ + ArrayFormat: apiquery.ArrayQueryFormatComma, + NestedFormat: apiquery.NestedQueryFormatBrackets, + }) +} diff --git a/packages/sdk/go/tui_test.go b/packages/sdk/go/tui_test.go index cb482226c..635473ba6 100644 --- a/packages/sdk/go/tui_test.go +++ b/packages/sdk/go/tui_test.go @@ -13,8 +13,8 @@ import ( "github.com/sst/opencode-sdk-go/option" ) -func TestTuiAppendPrompt(t *testing.T) { - t.Skip("skipped: tests are disabled for the time being") +func TestTuiAppendPromptWithOptionalParams(t *testing.T) { + t.Skip("Prism tests are disabled") baseURL := "http://localhost:4010" if envURL, ok := os.LookupEnv("TEST_API_BASE_URL"); ok { baseURL = envURL @@ -26,7 +26,8 @@ func TestTuiAppendPrompt(t *testing.T) { option.WithBaseURL(baseURL), ) _, err := client.Tui.AppendPrompt(context.TODO(), opencode.TuiAppendPromptParams{ - Text: opencode.F("text"), + Text: opencode.F("text"), + Directory: opencode.F("directory"), }) if err != nil { var apierr *opencode.Error @@ -37,8 +38,8 @@ func TestTuiAppendPrompt(t *testing.T) { } } -func TestTuiClearPrompt(t *testing.T) { - t.Skip("skipped: tests are disabled for the time being") +func TestTuiClearPromptWithOptionalParams(t *testing.T) { + t.Skip("Prism tests are disabled") baseURL := "http://localhost:4010" if envURL, ok := os.LookupEnv("TEST_API_BASE_URL"); ok { baseURL = envURL @@ -49,7 +50,9 @@ func TestTuiClearPrompt(t *testing.T) { client := opencode.NewClient( option.WithBaseURL(baseURL), ) - _, err := client.Tui.ClearPrompt(context.TODO()) + _, err := client.Tui.ClearPrompt(context.TODO(), opencode.TuiClearPromptParams{ + Directory: opencode.F("directory"), + }) if err != nil { var apierr *opencode.Error if errors.As(err, &apierr) { @@ -59,8 +62,8 @@ func TestTuiClearPrompt(t *testing.T) { } } -func TestTuiExecuteCommand(t *testing.T) { - t.Skip("skipped: tests are disabled for the time being") +func TestTuiExecuteCommandWithOptionalParams(t *testing.T) { + t.Skip("Prism tests are disabled") baseURL := "http://localhost:4010" if envURL, ok := os.LookupEnv("TEST_API_BASE_URL"); ok { baseURL = envURL @@ -72,7 +75,8 @@ func TestTuiExecuteCommand(t *testing.T) { option.WithBaseURL(baseURL), ) _, err := client.Tui.ExecuteCommand(context.TODO(), opencode.TuiExecuteCommandParams{ - Command: opencode.F("command"), + Command: opencode.F("command"), + Directory: opencode.F("directory"), }) if err != nil { var apierr *opencode.Error @@ -83,8 +87,8 @@ func TestTuiExecuteCommand(t *testing.T) { } } -func TestTuiOpenHelp(t *testing.T) { - t.Skip("skipped: tests are disabled for the time being") +func TestTuiOpenHelpWithOptionalParams(t *testing.T) { + t.Skip("Prism tests are disabled") baseURL := "http://localhost:4010" if envURL, ok := os.LookupEnv("TEST_API_BASE_URL"); ok { baseURL = envURL @@ -95,7 +99,9 @@ func TestTuiOpenHelp(t *testing.T) { client := opencode.NewClient( option.WithBaseURL(baseURL), ) - _, err := client.Tui.OpenHelp(context.TODO()) + _, err := client.Tui.OpenHelp(context.TODO(), opencode.TuiOpenHelpParams{ + Directory: opencode.F("directory"), + }) if err != nil { var apierr *opencode.Error if errors.As(err, &apierr) { @@ -105,8 +111,8 @@ func TestTuiOpenHelp(t *testing.T) { } } -func TestTuiOpenModels(t *testing.T) { - t.Skip("skipped: tests are disabled for the time being") +func TestTuiOpenModelsWithOptionalParams(t *testing.T) { + t.Skip("Prism tests are disabled") baseURL := "http://localhost:4010" if envURL, ok := os.LookupEnv("TEST_API_BASE_URL"); ok { baseURL = envURL @@ -117,7 +123,9 @@ func TestTuiOpenModels(t *testing.T) { client := opencode.NewClient( option.WithBaseURL(baseURL), ) - _, err := client.Tui.OpenModels(context.TODO()) + _, err := client.Tui.OpenModels(context.TODO(), opencode.TuiOpenModelsParams{ + Directory: opencode.F("directory"), + }) if err != nil { var apierr *opencode.Error if errors.As(err, &apierr) { @@ -127,8 +135,8 @@ func TestTuiOpenModels(t *testing.T) { } } -func TestTuiOpenSessions(t *testing.T) { - t.Skip("skipped: tests are disabled for the time being") +func TestTuiOpenSessionsWithOptionalParams(t *testing.T) { + t.Skip("Prism tests are disabled") baseURL := "http://localhost:4010" if envURL, ok := os.LookupEnv("TEST_API_BASE_URL"); ok { baseURL = envURL @@ -139,7 +147,9 @@ func TestTuiOpenSessions(t *testing.T) { client := opencode.NewClient( option.WithBaseURL(baseURL), ) - _, err := client.Tui.OpenSessions(context.TODO()) + _, err := client.Tui.OpenSessions(context.TODO(), opencode.TuiOpenSessionsParams{ + Directory: opencode.F("directory"), + }) if err != nil { var apierr *opencode.Error if errors.As(err, &apierr) { @@ -149,8 +159,8 @@ func TestTuiOpenSessions(t *testing.T) { } } -func TestTuiOpenThemes(t *testing.T) { - t.Skip("skipped: tests are disabled for the time being") +func TestTuiOpenThemesWithOptionalParams(t *testing.T) { + t.Skip("Prism tests are disabled") baseURL := "http://localhost:4010" if envURL, ok := os.LookupEnv("TEST_API_BASE_URL"); ok { baseURL = envURL @@ -161,7 +171,9 @@ func TestTuiOpenThemes(t *testing.T) { client := opencode.NewClient( option.WithBaseURL(baseURL), ) - _, err := client.Tui.OpenThemes(context.TODO()) + _, err := client.Tui.OpenThemes(context.TODO(), opencode.TuiOpenThemesParams{ + Directory: opencode.F("directory"), + }) if err != nil { var apierr *opencode.Error if errors.As(err, &apierr) { @@ -172,7 +184,7 @@ func TestTuiOpenThemes(t *testing.T) { } func TestTuiShowToastWithOptionalParams(t *testing.T) { - t.Skip("skipped: tests are disabled for the time being") + t.Skip("Prism tests are disabled") baseURL := "http://localhost:4010" if envURL, ok := os.LookupEnv("TEST_API_BASE_URL"); ok { baseURL = envURL @@ -184,9 +196,10 @@ func TestTuiShowToastWithOptionalParams(t *testing.T) { option.WithBaseURL(baseURL), ) _, err := client.Tui.ShowToast(context.TODO(), opencode.TuiShowToastParams{ - Message: opencode.F("message"), - Variant: opencode.F(opencode.TuiShowToastParamsVariantInfo), - Title: opencode.F("title"), + Message: opencode.F("message"), + Variant: opencode.F(opencode.TuiShowToastParamsVariantInfo), + Directory: opencode.F("directory"), + Title: opencode.F("title"), }) if err != nil { var apierr *opencode.Error @@ -197,8 +210,8 @@ func TestTuiShowToastWithOptionalParams(t *testing.T) { } } -func TestTuiSubmitPrompt(t *testing.T) { - t.Skip("skipped: tests are disabled for the time being") +func TestTuiSubmitPromptWithOptionalParams(t *testing.T) { + t.Skip("Prism tests are disabled") baseURL := "http://localhost:4010" if envURL, ok := os.LookupEnv("TEST_API_BASE_URL"); ok { baseURL = envURL @@ -209,7 +222,9 @@ func TestTuiSubmitPrompt(t *testing.T) { client := opencode.NewClient( option.WithBaseURL(baseURL), ) - _, err := client.Tui.SubmitPrompt(context.TODO()) + _, err := client.Tui.SubmitPrompt(context.TODO(), opencode.TuiSubmitPromptParams{ + Directory: opencode.F("directory"), + }) if err != nil { var apierr *opencode.Error if errors.As(err, &apierr) { diff --git a/packages/sdk/go/usage_test.go b/packages/sdk/go/usage_test.go index ef7ce8bde..2652b5829 100644 --- a/packages/sdk/go/usage_test.go +++ b/packages/sdk/go/usage_test.go @@ -23,7 +23,7 @@ func TestUsage(t *testing.T) { client := opencode.NewClient( option.WithBaseURL(baseURL), ) - sessions, err := client.Session.List(context.TODO()) + sessions, err := client.Session.List(context.TODO(), opencode.SessionListParams{}) if err != nil { t.Error(err) return diff --git a/packages/sdk/js/src/gen/sdk.gen.ts b/packages/sdk/js/src/gen/sdk.gen.ts index a50f5e142..ac6be13d5 100644 --- a/packages/sdk/js/src/gen/sdk.gen.ts +++ b/packages/sdk/js/src/gen/sdk.gen.ts @@ -2,14 +2,16 @@ import type { Options as ClientOptions, TDataShape, Client } from "./client/index.js" import type { + ProjectListData, + ProjectListResponses, + ProjectCurrentData, + ProjectCurrentResponses, EventSubscribeData, EventSubscribeResponses, - AppGetData, - AppGetResponses, - AppInitData, - AppInitResponses, ConfigGetData, ConfigGetResponses, + PathGetData, + PathGetResponses, SessionListData, SessionListResponses, SessionCreateData, @@ -35,8 +37,8 @@ import type { SessionSummarizeResponses, SessionMessagesData, SessionMessagesResponses, - SessionChatData, - SessionChatResponses, + SessionPromptData, + SessionPromptResponses, SessionMessageData, SessionMessageResponses, SessionCommandData, @@ -120,59 +122,35 @@ class _HeyApiClient { } } -class Event extends _HeyApiClient { - /** - * Get events - */ - public subscribe<ThrowOnError extends boolean = false>(options?: Options<EventSubscribeData, ThrowOnError>) { - return (options?.client ?? this._client).get.sse<EventSubscribeResponses, unknown, ThrowOnError>({ - url: "/event", - ...options, - }) - } -} - -class App extends _HeyApiClient { - /** - * Get app info - */ - public get<ThrowOnError extends boolean = false>(options?: Options<AppGetData, ThrowOnError>) { - return (options?.client ?? this._client).get<AppGetResponses, unknown, ThrowOnError>({ - url: "/app", - ...options, - }) - } - +class Project extends _HeyApiClient { /** - * Initialize the app + * List all projects */ - public init<ThrowOnError extends boolean = false>(options?: Options<AppInitData, ThrowOnError>) { - return (options?.client ?? this._client).post<AppInitResponses, unknown, ThrowOnError>({ - url: "/app/init", + public list<ThrowOnError extends boolean = false>(options?: Options<ProjectListData, ThrowOnError>) { + return (options?.client ?? this._client).get<ProjectListResponses, unknown, ThrowOnError>({ + url: "/project", ...options, }) } /** - * Write a log entry to the server logs + * Get the current project */ - public log<ThrowOnError extends boolean = false>(options?: Options<AppLogData, ThrowOnError>) { - return (options?.client ?? this._client).post<AppLogResponses, unknown, ThrowOnError>({ - url: "/log", + public current<ThrowOnError extends boolean = false>(options?: Options<ProjectCurrentData, ThrowOnError>) { + return (options?.client ?? this._client).get<ProjectCurrentResponses, unknown, ThrowOnError>({ + url: "/project/current", ...options, - headers: { - "Content-Type": "application/json", - ...options?.headers, - }, }) } +} +class Event extends _HeyApiClient { /** - * List all agents + * Get events */ - public agents<ThrowOnError extends boolean = false>(options?: Options<AppAgentsData, ThrowOnError>) { - return (options?.client ?? this._client).get<AppAgentsResponses, unknown, ThrowOnError>({ - url: "/agent", + public subscribe<ThrowOnError extends boolean = false>(options?: Options<EventSubscribeData, ThrowOnError>) { + return (options?.client ?? this._client).get.sse<EventSubscribeResponses, unknown, ThrowOnError>({ + url: "/event", ...options, }) } @@ -200,6 +178,18 @@ class Config extends _HeyApiClient { } } +class Path extends _HeyApiClient { + /** + * Get the current path + */ + public get<ThrowOnError extends boolean = false>(options?: Options<PathGetData, ThrowOnError>) { + return (options?.client ?? this._client).get<PathGetResponses, unknown, ThrowOnError>({ + url: "/path", + ...options, + }) + } +} + class Session extends _HeyApiClient { /** * List all sessions @@ -340,8 +330,8 @@ class Session extends _HeyApiClient { /** * Create and send a new message to a session */ - public chat<ThrowOnError extends boolean = false>(options: Options<SessionChatData, ThrowOnError>) { - return (options.client ?? this._client).post<SessionChatResponses, unknown, ThrowOnError>({ + public prompt<ThrowOnError extends boolean = false>(options: Options<SessionPromptData, ThrowOnError>) { + return (options.client ?? this._client).post<SessionPromptResponses, unknown, ThrowOnError>({ url: "/session/{id}/message", ...options, headers: { @@ -490,6 +480,32 @@ class File extends _HeyApiClient { } } +class App extends _HeyApiClient { + /** + * Write a log entry to the server logs + */ + public log<ThrowOnError extends boolean = false>(options?: Options<AppLogData, ThrowOnError>) { + return (options?.client ?? this._client).post<AppLogResponses, unknown, ThrowOnError>({ + url: "/log", + ...options, + headers: { + "Content-Type": "application/json", + ...options?.headers, + }, + }) + } + + /** + * List all agents + */ + public agents<ThrowOnError extends boolean = false>(options?: Options<AppAgentsData, ThrowOnError>) { + return (options?.client ?? this._client).get<AppAgentsResponses, unknown, ThrowOnError>({ + url: "/agent", + ...options, + }) + } +} + class Tui extends _HeyApiClient { /** * Append prompt to the TUI @@ -630,13 +646,15 @@ export class OpencodeClient extends _HeyApiClient { }, }) } + project = new Project({ client: this._client }) event = new Event({ client: this._client }) - app = new App({ client: this._client }) config = new Config({ client: this._client }) + path = new Path({ client: this._client }) session = new Session({ client: this._client }) command = new Command({ client: this._client }) find = new Find({ client: this._client }) file = new File({ client: this._client }) + app = new App({ client: this._client }) tui = new Tui({ client: this._client }) auth = new Auth({ client: this._client }) } diff --git a/packages/sdk/js/src/gen/types.gen.ts b/packages/sdk/js/src/gen/types.gen.ts index 434606d86..c56ea309b 100644 --- a/packages/sdk/js/src/gen/types.gen.ts +++ b/packages/sdk/js/src/gen/types.gen.ts @@ -1,5 +1,15 @@ // This file is auto-generated by @hey-api/openapi-ts +export type Project = { + id: string + worktree: string + vcs?: "git" + time: { + created: number + initialized?: number + } +} + export type Event = | ({ type: "installation.updated" @@ -20,9 +30,6 @@ export type Event = type: "message.part.removed" } & EventMessagePartRemoved) | ({ - type: "storage.write" - } & EventStorageWrite) - | ({ type: "permission.updated" } & EventPermissionUpdated) | ({ @@ -46,12 +53,6 @@ export type Event = | ({ type: "server.connected" } & EventServerConnected) - | ({ - type: "file.watcher.updated" - } & EventFileWatcherUpdated) - | ({ - type: "ide.installed" - } & EventIdeInstalled) export type EventInstallationUpdated = { type: "installation.updated" @@ -420,14 +421,6 @@ export type EventMessagePartRemoved = { } } -export type EventStorageWrite = { - type: "storage.write" - properties: { - key: string - content?: unknown - } -} - export type EventPermissionUpdated = { type: "permission.updated" properties: Permission @@ -474,6 +467,8 @@ export type EventSessionUpdated = { export type Session = { id: string + projectID: string + directory: string parentID?: string share?: { url: string @@ -533,37 +528,6 @@ export type EventServerConnected = { } } -export type EventFileWatcherUpdated = { - type: "file.watcher.updated" - properties: { - file: string - event: "rename" | "change" - } -} - -export type EventIdeInstalled = { - type: "ide.installed" - properties: { - ide: string - } -} - -export type App = { - hostname: string - git: boolean - path: { - home: string - config: string - data: string - root: string - cwd: string - state: string - } - time: { - initialized?: number - } -} - export type Config = { /** * JSON schema reference for configuration validation @@ -681,7 +645,11 @@ export type Config = { options?: { apiKey?: string baseURL?: string - [key: string]: unknown | string | undefined + /** + * Timeout in milliseconds for requests to this provider. Default is 300000 (5 minutes). Set to false to disable timeout. + */ + timeout?: number | false + [key: string]: unknown | string | (number | false) | undefined } } } @@ -1085,6 +1053,13 @@ export type McpRemoteConfig = { export type LayoutConfig = "auto" | "stretch" +export type Path = { + state: string + config: string + worktree: string + directory: string +} + export type _Error = { data: { [key: string]: unknown @@ -1209,58 +1184,66 @@ export type WellKnownAuth = { token: string } -export type EventSubscribeData = { +export type ProjectListData = { body?: never path?: never - query?: never - url: "/event" + query?: { + directory?: string + } + url: "/project" } -export type EventSubscribeResponses = { +export type ProjectListResponses = { /** - * Event stream + * List of projects */ - 200: Event + 200: Array<Project> } -export type EventSubscribeResponse = EventSubscribeResponses[keyof EventSubscribeResponses] +export type ProjectListResponse = ProjectListResponses[keyof ProjectListResponses] -export type AppGetData = { +export type ProjectCurrentData = { body?: never path?: never - query?: never - url: "/app" + query?: { + directory?: string + } + url: "/project/current" } -export type AppGetResponses = { +export type ProjectCurrentResponses = { /** - * 200 + * Current project */ - 200: App + 200: Project } -export type AppGetResponse = AppGetResponses[keyof AppGetResponses] +export type ProjectCurrentResponse = ProjectCurrentResponses[keyof ProjectCurrentResponses] -export type AppInitData = { +export type EventSubscribeData = { body?: never path?: never - query?: never - url: "/app/init" + query?: { + directory?: string + } + url: "/event" } -export type AppInitResponses = { +export type EventSubscribeResponses = { /** - * Initialize the app + * Event stream */ - 200: boolean + 200: Event } -export type AppInitResponse = AppInitResponses[keyof AppInitResponses] +export type EventSubscribeResponse = EventSubscribeResponses[keyof EventSubscribeResponses] export type ConfigGetData = { body?: never path?: never - query?: never + query?: { + directory?: string + } url: "/config" } @@ -1273,10 +1256,30 @@ export type ConfigGetResponses = { export type ConfigGetResponse = ConfigGetResponses[keyof ConfigGetResponses] +export type PathGetData = { + body?: never + path?: never + query?: { + directory?: string + } + url: "/path" +} + +export type PathGetResponses = { + /** + * Path + */ + 200: Path +} + +export type PathGetResponse = PathGetResponses[keyof PathGetResponses] + export type SessionListData = { body?: never path?: never - query?: never + query?: { + directory?: string + } url: "/session" } @@ -1295,7 +1298,9 @@ export type SessionCreateData = { title?: string } path?: never - query?: never + query?: { + directory?: string + } url: "/session" } @@ -1322,7 +1327,9 @@ export type SessionDeleteData = { path: { id: string } - query?: never + query?: { + directory?: string + } url: "/session/{id}" } @@ -1340,7 +1347,9 @@ export type SessionGetData = { path: { id: string } - query?: never + query?: { + directory?: string + } url: "/session/{id}" } @@ -1360,7 +1369,9 @@ export type SessionUpdateData = { path: { id: string } - query?: never + query?: { + directory?: string + } url: "/session/{id}" } @@ -1378,7 +1389,9 @@ export type SessionChildrenData = { path: { id: string } - query?: never + query?: { + directory?: string + } url: "/session/{id}/children" } @@ -1403,7 +1416,9 @@ export type SessionInitData = { */ id: string } - query?: never + query?: { + directory?: string + } url: "/session/{id}/init" } @@ -1421,7 +1436,9 @@ export type SessionAbortData = { path: { id: string } - query?: never + query?: { + directory?: string + } url: "/session/{id}/abort" } @@ -1439,7 +1456,9 @@ export type SessionUnshareData = { path: { id: string } - query?: never + query?: { + directory?: string + } url: "/session/{id}/share" } @@ -1457,7 +1476,9 @@ export type SessionShareData = { path: { id: string } - query?: never + query?: { + directory?: string + } url: "/session/{id}/share" } @@ -1481,7 +1502,9 @@ export type SessionSummarizeData = { */ id: string } - query?: never + query?: { + directory?: string + } url: "/session/{id}/summarize" } @@ -1502,7 +1525,9 @@ export type SessionMessagesData = { */ id: string } - query?: never + query?: { + directory?: string + } url: "/session/{id}/message" } @@ -1518,11 +1543,13 @@ export type SessionMessagesResponses = { export type SessionMessagesResponse = SessionMessagesResponses[keyof SessionMessagesResponses] -export type SessionChatData = { +export type SessionPromptData = { body?: { messageID?: string - providerID: string - modelID: string + model?: { + providerID: string + modelID: string + } agent?: string system?: string tools?: { @@ -1546,11 +1573,13 @@ export type SessionChatData = { */ id: string } - query?: never + query?: { + directory?: string + } url: "/session/{id}/message" } -export type SessionChatResponses = { +export type SessionPromptResponses = { /** * Created message */ @@ -1560,7 +1589,7 @@ export type SessionChatResponses = { } } -export type SessionChatResponse = SessionChatResponses[keyof SessionChatResponses] +export type SessionPromptResponse = SessionPromptResponses[keyof SessionPromptResponses] export type SessionMessageData = { body?: never @@ -1574,7 +1603,9 @@ export type SessionMessageData = { */ messageID: string } - query?: never + query?: { + directory?: string + } url: "/session/{id}/message/{messageID}" } @@ -1604,7 +1635,9 @@ export type SessionCommandData = { */ id: string } - query?: never + query?: { + directory?: string + } url: "/session/{id}/command" } @@ -1631,7 +1664,9 @@ export type SessionShellData = { */ id: string } - query?: never + query?: { + directory?: string + } url: "/session/{id}/shell" } @@ -1652,7 +1687,9 @@ export type SessionRevertData = { path: { id: string } - query?: never + query?: { + directory?: string + } url: "/session/{id}/revert" } @@ -1670,7 +1707,9 @@ export type SessionUnrevertData = { path: { id: string } - query?: never + query?: { + directory?: string + } url: "/session/{id}/unrevert" } @@ -1691,7 +1730,9 @@ export type PostSessionByIdPermissionsByPermissionIdData = { id: string permissionID: string } - query?: never + query?: { + directory?: string + } url: "/session/{id}/permissions/{permissionID}" } @@ -1708,7 +1749,9 @@ export type PostSessionByIdPermissionsByPermissionIdResponse = export type CommandListData = { body?: never path?: never - query?: never + query?: { + directory?: string + } url: "/command" } @@ -1724,7 +1767,9 @@ export type CommandListResponse = CommandListResponses[keyof CommandListResponse export type ConfigProvidersData = { body?: never path?: never - query?: never + query?: { + directory?: string + } url: "/config/providers" } @@ -1746,6 +1791,7 @@ export type FindTextData = { body?: never path?: never query: { + directory?: string pattern: string } url: "/find" @@ -1780,6 +1826,7 @@ export type FindFilesData = { body?: never path?: never query: { + directory?: string query: string } url: "/find/file" @@ -1798,6 +1845,7 @@ export type FindSymbolsData = { body?: never path?: never query: { + directory?: string query: string } url: "/find/symbol" @@ -1816,6 +1864,7 @@ export type FileListData = { body?: never path?: never query: { + directory?: string path: string } url: "/file" @@ -1834,6 +1883,7 @@ export type FileReadData = { body?: never path?: never query: { + directory?: string path: string } url: "/file/content" @@ -1854,7 +1904,9 @@ export type FileReadResponse = FileReadResponses[keyof FileReadResponses] export type FileStatusData = { body?: never path?: never - query?: never + query?: { + directory?: string + } url: "/file/status" } @@ -1889,7 +1941,9 @@ export type AppLogData = { } } path?: never - query?: never + query?: { + directory?: string + } url: "/log" } @@ -1905,7 +1959,9 @@ export type AppLogResponse = AppLogResponses[keyof AppLogResponses] export type AppAgentsData = { body?: never path?: never - query?: never + query?: { + directory?: string + } url: "/agent" } @@ -1923,7 +1979,9 @@ export type TuiAppendPromptData = { text: string } path?: never - query?: never + query?: { + directory?: string + } url: "/tui/append-prompt" } @@ -1939,7 +1997,9 @@ export type TuiAppendPromptResponse = TuiAppendPromptResponses[keyof TuiAppendPr export type TuiOpenHelpData = { body?: never path?: never - query?: never + query?: { + directory?: string + } url: "/tui/open-help" } @@ -1955,7 +2015,9 @@ export type TuiOpenHelpResponse = TuiOpenHelpResponses[keyof TuiOpenHelpResponse export type TuiOpenSessionsData = { body?: never path?: never - query?: never + query?: { + directory?: string + } url: "/tui/open-sessions" } @@ -1971,7 +2033,9 @@ export type TuiOpenSessionsResponse = TuiOpenSessionsResponses[keyof TuiOpenSess export type TuiOpenThemesData = { body?: never path?: never - query?: never + query?: { + directory?: string + } url: "/tui/open-themes" } @@ -1987,7 +2051,9 @@ export type TuiOpenThemesResponse = TuiOpenThemesResponses[keyof TuiOpenThemesRe export type TuiOpenModelsData = { body?: never path?: never - query?: never + query?: { + directory?: string + } url: "/tui/open-models" } @@ -2003,7 +2069,9 @@ export type TuiOpenModelsResponse = TuiOpenModelsResponses[keyof TuiOpenModelsRe export type TuiSubmitPromptData = { body?: never path?: never - query?: never + query?: { + directory?: string + } url: "/tui/submit-prompt" } @@ -2019,7 +2087,9 @@ export type TuiSubmitPromptResponse = TuiSubmitPromptResponses[keyof TuiSubmitPr export type TuiClearPromptData = { body?: never path?: never - query?: never + query?: { + directory?: string + } url: "/tui/clear-prompt" } @@ -2037,7 +2107,9 @@ export type TuiExecuteCommandData = { command: string } path?: never - query?: never + query?: { + directory?: string + } url: "/tui/execute-command" } @@ -2057,7 +2129,9 @@ export type TuiShowToastData = { variant: "info" | "success" | "warning" | "error" } path?: never - query?: never + query?: { + directory?: string + } url: "/tui/show-toast" } @@ -2075,7 +2149,9 @@ export type AuthSetData = { path: { id: string } - query?: never + query?: { + directory?: string + } url: "/auth/{id}" } diff --git a/packages/sdk/stainless/generate.ts b/packages/sdk/stainless/generate.ts index 6b1877f6b..22224224d 100755 --- a/packages/sdk/stainless/generate.ts +++ b/packages/sdk/stainless/generate.ts @@ -8,7 +8,7 @@ console.log(process.cwd()) await $`rm -rf go` await $`bun run --conditions=development ../../opencode/src/index.ts generate > openapi.json` -await $`stl builds create --branch dev --pull --allow-empty --+target go` +await $`stl builds create --branch main --pull --allow-empty --+target go` await $`rm -rf ../go` await $`mv opencode-go/ ../go` diff --git a/packages/sdk/stainless/stainless.yml b/packages/sdk/stainless/stainless.yml index f829e2280..1efe263a0 100644 --- a/packages/sdk/stainless/stainless.yml +++ b/packages/sdk/stainless/stainless.yml @@ -45,19 +45,27 @@ resources: # This method is always streaming. param_discriminator: null + path: + models: + path: Path + methods: + get: get /path + 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 + agent: + models: + agent: Agent + methods: + list: get /agent + find: models: symbol: Symbol @@ -92,6 +100,13 @@ resources: methods: list: get /command + project: + models: + project: Project + methods: + list: get /project + current: get /project/current + session: models: session: Session @@ -132,7 +147,7 @@ resources: summarize: post /session/{id}/summarize message: get /session/{id}/message/{messageID} messages: get /session/{id}/message - chat: post /session/{id}/message + prompt: post /session/{id}/message command: post /session/{id}/command shell: post /session/{id}/shell update: patch /session/{id} |
