From 9609c1803e68ecd753572972cb2cd531b48f1438 Mon Sep 17 00:00:00 2001 From: adamdotdevin <2363879+adamdottv@users.noreply.github.com> Date: Fri, 15 Aug 2025 08:39:58 -0500 Subject: feat: /tui/show-toast api --- packages/sdk/go/.stats.yml | 8 ++++---- packages/sdk/go/api.md | 1 + packages/sdk/go/tui.go | 35 +++++++++++++++++++++++++++++++++++ packages/sdk/go/tui_test.go | 26 ++++++++++++++++++++++++++ packages/sdk/js/src/gen/sdk.gen.ts | 16 ++++++++++++++++ packages/sdk/js/src/gen/types.gen.ts | 20 ++++++++++++++++++++ packages/sdk/stainless/stainless.yml | 1 + 7 files changed, 103 insertions(+), 4 deletions(-) (limited to 'packages/sdk') diff --git a/packages/sdk/go/.stats.yml b/packages/sdk/go/.stats.yml index e3713a1ca..6a6c7c1fe 100644 --- a/packages/sdk/go/.stats.yml +++ b/packages/sdk/go/.stats.yml @@ -1,4 +1,4 @@ -configured_endpoints: 36 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/opencode%2Fopencode-d0eaf92deaa53a25bbbc3181540ad73ed5a4aec6381ac08d8122e24318e5e455.yml -openapi_spec_hash: 22196d859c0711e564b9538d988abda6 -config_hash: 8d85a768523cff92b85ef06c443d49fa +configured_endpoints: 37 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/opencode%2Fopencode-e438f89b86b573c957866c9b057efacc912e3946be03390e4027e8dfab5b83ba.yml +openapi_spec_hash: 4e9d257b86172e266dc9d72fb04548bc +config_hash: a78225c7474eb9ab8745e72a0cfe6f96 diff --git a/packages/sdk/go/api.md b/packages/sdk/go/api.md index 79a67e42d..f48d06870 100644 --- a/packages/sdk/go/api.md +++ b/packages/sdk/go/api.md @@ -147,4 +147,5 @@ Methods: - client.Tui.OpenModels(ctx context.Context) (bool, error) - client.Tui.OpenSessions(ctx context.Context) (bool, error) - client.Tui.OpenThemes(ctx context.Context) (bool, error) +- client.Tui.ShowToast(ctx context.Context, body opencode.TuiShowToastParams) (bool, error) - client.Tui.SubmitPrompt(ctx context.Context) (bool, error) diff --git a/packages/sdk/go/tui.go b/packages/sdk/go/tui.go index 6f36ce543..ab5ed6403 100644 --- a/packages/sdk/go/tui.go +++ b/packages/sdk/go/tui.go @@ -87,6 +87,14 @@ func (r *TuiService) OpenThemes(ctx context.Context, opts ...option.RequestOptio return } +// Show a toast notification in the TUI +func (r *TuiService) ShowToast(ctx context.Context, body 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...) + return +} + // Submit the prompt func (r *TuiService) SubmitPrompt(ctx context.Context, opts ...option.RequestOption) (res *bool, err error) { opts = append(r.Options[:], opts...) @@ -110,3 +118,30 @@ type TuiExecuteCommandParams struct { func (r TuiExecuteCommandParams) MarshalJSON() (data []byte, err error) { return apijson.MarshalRoot(r) } + +type TuiShowToastParams struct { + Message param.Field[string] `json:"message,required"` + Variant param.Field[TuiShowToastParamsVariant] `json:"variant,required"` + Title param.Field[string] `json:"title"` +} + +func (r TuiShowToastParams) MarshalJSON() (data []byte, err error) { + return apijson.MarshalRoot(r) +} + +type TuiShowToastParamsVariant string + +const ( + TuiShowToastParamsVariantInfo TuiShowToastParamsVariant = "info" + TuiShowToastParamsVariantSuccess TuiShowToastParamsVariant = "success" + TuiShowToastParamsVariantWarning TuiShowToastParamsVariant = "warning" + TuiShowToastParamsVariantError TuiShowToastParamsVariant = "error" +) + +func (r TuiShowToastParamsVariant) IsKnown() bool { + switch r { + case TuiShowToastParamsVariantInfo, TuiShowToastParamsVariantSuccess, TuiShowToastParamsVariantWarning, TuiShowToastParamsVariantError: + return true + } + return false +} diff --git a/packages/sdk/go/tui_test.go b/packages/sdk/go/tui_test.go index f3260aafd..cb482226c 100644 --- a/packages/sdk/go/tui_test.go +++ b/packages/sdk/go/tui_test.go @@ -171,6 +171,32 @@ func TestTuiOpenThemes(t *testing.T) { } } +func TestTuiShowToastWithOptionalParams(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.Tui.ShowToast(context.TODO(), opencode.TuiShowToastParams{ + Message: opencode.F("message"), + Variant: opencode.F(opencode.TuiShowToastParamsVariantInfo), + Title: opencode.F("title"), + }) + 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 TestTuiSubmitPrompt(t *testing.T) { t.Skip("skipped: tests are disabled for the time being") baseURL := "http://localhost:4010" diff --git a/packages/sdk/js/src/gen/sdk.gen.ts b/packages/sdk/js/src/gen/sdk.gen.ts index d29862387..1e0e1ae58 100644 --- a/packages/sdk/js/src/gen/sdk.gen.ts +++ b/packages/sdk/js/src/gen/sdk.gen.ts @@ -77,6 +77,8 @@ import type { TuiClearPromptResponses, TuiExecuteCommandData, TuiExecuteCommandResponses, + TuiShowToastData, + TuiShowToastResponses, AuthSetData, AuthSetResponses, AuthSetErrors, @@ -518,6 +520,20 @@ class Tui extends _HeyApiClient { }, }) } + + /** + * Show a toast notification in the TUI + */ + public showToast(options?: Options) { + return (options?.client ?? this._client).post({ + url: "/tui/show-toast", + ...options, + headers: { + "Content-Type": "application/json", + ...options?.headers, + }, + }) + } } class Auth extends _HeyApiClient { diff --git a/packages/sdk/js/src/gen/types.gen.ts b/packages/sdk/js/src/gen/types.gen.ts index 54087908c..81faf7bf8 100644 --- a/packages/sdk/js/src/gen/types.gen.ts +++ b/packages/sdk/js/src/gen/types.gen.ts @@ -1911,6 +1911,26 @@ export type TuiExecuteCommandResponses = { export type TuiExecuteCommandResponse = TuiExecuteCommandResponses[keyof TuiExecuteCommandResponses] +export type TuiShowToastData = { + body?: { + title?: string + message: string + variant: "info" | "success" | "warning" | "error" + } + path?: never + query?: never + url: "/tui/show-toast" +} + +export type TuiShowToastResponses = { + /** + * Toast notification shown successfully + */ + 200: boolean +} + +export type TuiShowToastResponse = TuiShowToastResponses[keyof TuiShowToastResponses] + export type AuthSetData = { body?: Auth path: { diff --git a/packages/sdk/stainless/stainless.yml b/packages/sdk/stainless/stainless.yml index db4afd8da..4ce3cd2ac 100644 --- a/packages/sdk/stainless/stainless.yml +++ b/packages/sdk/stainless/stainless.yml @@ -146,6 +146,7 @@ resources: openThemes: post /tui/open-themes openModels: post /tui/open-models executeCommand: post /tui/execute-command + showToast: post /tui/show-toast settings: disable_mock_tests: true -- cgit v1.2.3