From 0a958213dbc950bd99cb13d14f243942a8e86709 Mon Sep 17 00:00:00 2001 From: Jack Amadeo Date: Fri, 22 May 2026 17:04:46 -0400 Subject: [PATCH] protocol cleanup (#9147) --- crates/goose-sdk/src/custom_requests.rs | 140 +-- crates/goose/acp-meta.json | 286 +++--- crates/goose/acp-schema.json | 885 +++++++++-------- crates/goose/src/acp/server/sources.rs | 37 +- crates/goose/src/bin/generate_acp_schema.rs | 86 +- .../tests/acp_custom_provider_methods_test.rs | 45 +- .../goose/tests/acp_custom_requests_test.rs | 74 +- .../acp_secret_cache_invalidation_test.rs | 12 +- ui/desktop/src/acp/extensions.ts | 2 +- ui/sdk/generate-schema.ts | 30 +- ui/sdk/scripts/check-binary-compat.mjs | 4 +- ui/sdk/src/generated/client.gen.ts | 940 ++++++++++-------- ui/sdk/src/generated/index.ts | 288 +++--- ui/sdk/src/generated/types.gen.ts | 216 ++-- ui/sdk/src/generated/zod.gen.ts | 389 ++++---- ui/text/src/configure.tsx | 94 +- ui/text/src/extensions.tsx | 391 ++++++-- ui/text/src/onboarding.tsx | 182 ++-- ui/text/src/tui.tsx | 65 +- 19 files changed, 2378 insertions(+), 1788 deletions(-) diff --git a/crates/goose-sdk/src/custom_requests.rs b/crates/goose-sdk/src/custom_requests.rs index 4a8b52accf..69525bb13b 100644 --- a/crates/goose-sdk/src/custom_requests.rs +++ b/crates/goose-sdk/src/custom_requests.rs @@ -23,7 +23,7 @@ pub struct CustomMethodSchema { /// Add an extension to an active session. #[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema, JsonRpcRequest)] -#[request(method = "_goose/extensions/add", response = EmptyResponse)] +#[request(method = "_goose/unstable/session/extensions/add", response = EmptyResponse)] #[serde(rename_all = "camelCase")] pub struct AddExtensionRequest { pub session_id: String, @@ -34,7 +34,7 @@ pub struct AddExtensionRequest { /// Remove an extension from an active session. #[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema, JsonRpcRequest)] -#[request(method = "_goose/extensions/remove", response = EmptyResponse)] +#[request(method = "_goose/unstable/session/extensions/remove", response = EmptyResponse)] #[serde(rename_all = "camelCase")] pub struct RemoveExtensionRequest { pub session_id: String, @@ -43,7 +43,7 @@ pub struct RemoveExtensionRequest { /// List all tools available in a session. #[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema, JsonRpcRequest)] -#[request(method = "_goose/tools", response = GetToolsResponse)] +#[request(method = "_goose/unstable/tools/list", response = GetToolsResponse)] #[serde(rename_all = "camelCase")] pub struct GetToolsRequest { pub session_id: String, @@ -58,7 +58,7 @@ pub struct GetToolsResponse { /// Read a resource from an extension. #[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema, JsonRpcRequest)] -#[request(method = "_goose/resource/read", response = ReadResourceResponse)] +#[request(method = "_goose/unstable/resources/read", response = ReadResourceResponse)] #[serde(rename_all = "camelCase")] pub struct ReadResourceRequest { pub session_id: String, @@ -76,7 +76,7 @@ pub struct ReadResourceResponse { /// Call a tool from an extension. #[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema, JsonRpcRequest)] -#[request(method = "_goose/tool/call", response = GooseToolCallResponse)] +#[request(method = "_goose/unstable/tools/call", response = GooseToolCallResponse)] #[serde(rename_all = "camelCase")] pub struct GooseToolCallRequest { pub session_id: String, @@ -101,7 +101,7 @@ pub struct GooseToolCallResponse { /// Update the working directory for a session. #[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema, JsonRpcRequest)] -#[request(method = "_goose/working_dir/update", response = EmptyResponse)] +#[request(method = "_goose/unstable/session/working-dir/update", response = EmptyResponse)] #[serde(rename_all = "camelCase")] pub struct UpdateWorkingDirRequest { pub session_id: String, @@ -118,7 +118,7 @@ pub struct DeleteSessionRequest { /// List configured extensions and any warnings. #[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema, JsonRpcRequest)] -#[request(method = "_goose/config/extensions", response = GetExtensionsResponse)] +#[request(method = "_goose/unstable/config/extensions/list", response = GetExtensionsResponse)] pub struct GetExtensionsRequest {} /// List configured extensions and any warnings. @@ -131,7 +131,7 @@ pub struct GetExtensionsResponse { /// Persist a new extension to the user's global goose config. #[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema, JsonRpcRequest)] -#[request(method = "_goose/config/extensions/add", response = EmptyResponse)] +#[request(method = "_goose/unstable/config/extensions/add", response = EmptyResponse)] #[serde(rename_all = "camelCase")] pub struct AddConfigExtensionRequest { pub name: String, @@ -146,7 +146,7 @@ pub struct AddConfigExtensionRequest { /// Remove a persisted extension from the user's global goose config. #[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema, JsonRpcRequest)] -#[request(method = "_goose/config/extensions/remove", response = EmptyResponse)] +#[request(method = "_goose/unstable/config/extensions/remove", response = EmptyResponse)] #[serde(rename_all = "camelCase")] pub struct RemoveConfigExtensionRequest { pub config_key: String, @@ -154,7 +154,7 @@ pub struct RemoveConfigExtensionRequest { /// Toggle the `enabled` flag for a persisted extension in the user's global goose config. #[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema, JsonRpcRequest)] -#[request(method = "_goose/config/extensions/toggle", response = EmptyResponse)] +#[request(method = "_goose/unstable/config/extensions/toggle", response = EmptyResponse)] #[serde(rename_all = "camelCase")] pub struct ToggleConfigExtensionRequest { pub config_key: String, @@ -162,7 +162,7 @@ pub struct ToggleConfigExtensionRequest { } #[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema, JsonRpcRequest)] -#[request(method = "_goose/session/extensions", response = GetSessionExtensionsResponse)] +#[request(method = "_goose/unstable/session/extensions/list", response = GetSessionExtensionsResponse)] #[serde(rename_all = "camelCase")] pub struct GetSessionExtensionsRequest { pub session_id: String, @@ -175,7 +175,7 @@ pub struct GetSessionExtensionsResponse { /// Read allowlisted user preferences. Empty `keys` means all supported preferences. #[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema, JsonRpcRequest)] -#[request(method = "_goose/preferences/read", response = PreferencesReadResponse)] +#[request(method = "_goose/unstable/preferences/read", response = PreferencesReadResponse)] #[serde(rename_all = "camelCase")] pub struct PreferencesReadRequest { #[serde(default)] @@ -184,7 +184,7 @@ pub struct PreferencesReadRequest { /// Save allowlisted user preferences. #[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema, JsonRpcRequest)] -#[request(method = "_goose/preferences/save", response = EmptyResponse)] +#[request(method = "_goose/unstable/preferences/save", response = EmptyResponse)] #[serde(rename_all = "camelCase")] pub struct PreferencesSaveRequest { #[serde(default)] @@ -193,7 +193,7 @@ pub struct PreferencesSaveRequest { /// Remove allowlisted user preferences. #[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema, JsonRpcRequest)] -#[request(method = "_goose/preferences/remove", response = EmptyResponse)] +#[request(method = "_goose/unstable/preferences/remove", response = EmptyResponse)] #[serde(rename_all = "camelCase")] pub struct PreferencesRemoveRequest { #[serde(default)] @@ -226,7 +226,7 @@ pub struct PreferencesReadResponse { /// Read Goose default provider and model configuration. #[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema, JsonRpcRequest)] -#[request(method = "_goose/defaults/read", response = DefaultsReadResponse)] +#[request(method = "_goose/unstable/defaults/read", response = DefaultsReadResponse)] #[serde(rename_all = "camelCase")] pub struct DefaultsReadRequest {} @@ -239,7 +239,7 @@ pub struct DefaultsReadResponse { /// Save Goose default provider and model configuration. #[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema, JsonRpcRequest)] -#[request(method = "_goose/defaults/save", response = DefaultsReadResponse)] +#[request(method = "_goose/unstable/defaults/save", response = DefaultsReadResponse)] #[serde(rename_all = "camelCase")] pub struct DefaultsSaveRequest { pub provider_id: String, @@ -282,7 +282,7 @@ pub struct OnboardingImportCandidate { /// Scan for existing Goose and compatible app data that onboarding can import. #[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema, JsonRpcRequest)] #[request( - method = "_goose/onboarding/import/scan", + method = "_goose/unstable/onboarding/import/scan", response = OnboardingImportScanResponse )] #[serde(rename_all = "camelCase")] @@ -301,7 +301,7 @@ pub struct OnboardingImportScanResponse { /// Import selected onboarding candidates. #[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema, JsonRpcRequest)] #[request( - method = "_goose/onboarding/import/apply", + method = "_goose/unstable/onboarding/import/apply", response = OnboardingImportApplyResponse )] #[serde(rename_all = "camelCase")] @@ -325,7 +325,7 @@ pub struct OnboardingImportApplyResponse { /// Set a dictation provider secret value. #[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema, JsonRpcRequest)] -#[request(method = "_goose/dictation/secret/save", response = EmptyResponse)] +#[request(method = "_goose/unstable/dictation/secret/save", response = EmptyResponse)] #[serde(rename_all = "camelCase")] pub struct DictationSecretSaveRequest { pub provider: String, @@ -334,7 +334,7 @@ pub struct DictationSecretSaveRequest { /// Remove a dictation provider secret value. #[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema, JsonRpcRequest)] -#[request(method = "_goose/dictation/secret/delete", response = EmptyResponse)] +#[request(method = "_goose/unstable/dictation/secret/delete", response = EmptyResponse)] #[serde(rename_all = "camelCase")] pub struct DictationSecretDeleteRequest { pub provider: String, @@ -342,7 +342,7 @@ pub struct DictationSecretDeleteRequest { /// Update the project association for a session. #[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema, JsonRpcRequest)] -#[request(method = "_goose/session/update_project", response = EmptyResponse)] +#[request(method = "_goose/unstable/session/project/update", response = EmptyResponse)] #[serde(rename_all = "camelCase")] pub struct UpdateSessionProjectRequest { pub session_id: String, @@ -351,7 +351,7 @@ pub struct UpdateSessionProjectRequest { /// Rename a session. #[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema, JsonRpcRequest)] -#[request(method = "_goose/session/rename", response = EmptyResponse)] +#[request(method = "_goose/unstable/session/rename", response = EmptyResponse)] #[serde(rename_all = "camelCase")] pub struct RenameSessionRequest { pub session_id: String, @@ -360,7 +360,7 @@ pub struct RenameSessionRequest { /// Archive a session (soft delete). #[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema, JsonRpcRequest)] -#[request(method = "_goose/session/archive", response = EmptyResponse)] +#[request(method = "_goose/unstable/session/archive", response = EmptyResponse)] #[serde(rename_all = "camelCase")] pub struct ArchiveSessionRequest { pub session_id: String, @@ -368,7 +368,7 @@ pub struct ArchiveSessionRequest { /// Unarchive a previously archived session. #[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema, JsonRpcRequest)] -#[request(method = "_goose/session/unarchive", response = EmptyResponse)] +#[request(method = "_goose/unstable/session/unarchive", response = EmptyResponse)] #[serde(rename_all = "camelCase")] pub struct UnarchiveSessionRequest { pub session_id: String, @@ -376,7 +376,7 @@ pub struct UnarchiveSessionRequest { /// Export a session as a JSON string. #[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema, JsonRpcRequest)] -#[request(method = "_goose/session/export", response = ExportSessionResponse)] +#[request(method = "_goose/unstable/session/export", response = ExportSessionResponse)] #[serde(rename_all = "camelCase")] pub struct ExportSessionRequest { pub session_id: String, @@ -390,7 +390,7 @@ pub struct ExportSessionResponse { /// Import a session from a JSON string. #[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema, JsonRpcRequest)] -#[request(method = "_goose/session/import", response = ImportSessionResponse)] +#[request(method = "_goose/unstable/session/import", response = ImportSessionResponse)] pub struct ImportSessionRequest { pub data: String, } @@ -449,7 +449,7 @@ pub struct ProviderConfigFieldUpdate { /// Read saved configuration field values for one provider. #[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema, JsonRpcRequest)] #[request( - method = "_goose/providers/config/read", + method = "_goose/unstable/providers/config/read", response = ProviderConfigReadResponse )] #[serde(rename_all = "camelCase")] @@ -466,7 +466,7 @@ pub struct ProviderConfigReadResponse { /// Return provider configured statuses. Empty provider_ids means all providers. #[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema, JsonRpcRequest)] #[request( - method = "_goose/providers/config/status", + method = "_goose/unstable/providers/config/status", response = ProviderConfigStatusResponse )] #[serde(rename_all = "camelCase")] @@ -484,7 +484,7 @@ pub struct ProviderConfigStatusResponse { /// Save provider configuration fields and start an inventory refresh when supported. #[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema, JsonRpcRequest)] #[request( - method = "_goose/providers/config/save", + method = "_goose/unstable/providers/config/save", response = ProviderConfigChangeResponse )] #[serde(rename_all = "camelCase")] @@ -496,7 +496,7 @@ pub struct ProviderConfigSaveRequest { /// Delete provider configuration fields and start an inventory refresh when supported. #[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema, JsonRpcRequest)] #[request( - method = "_goose/providers/config/delete", + method = "_goose/unstable/providers/config/delete", response = ProviderConfigChangeResponse )] #[serde(rename_all = "camelCase")] @@ -507,7 +507,7 @@ pub struct ProviderConfigDeleteRequest { /// Run a provider-owned native authentication flow and start an inventory refresh when supported. #[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema, JsonRpcRequest)] #[request( - method = "_goose/providers/config/authenticate", + method = "_goose/unstable/providers/config/authenticate", response = ProviderConfigChangeResponse )] #[serde(rename_all = "camelCase")] @@ -636,7 +636,7 @@ pub struct ProviderTemplateDto { /// List custom-provider catalog entries. Omit `format` to list all formats. #[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema, JsonRpcRequest)] #[request( - method = "_goose/providers/catalog/list", + method = "_goose/unstable/providers/catalog/list", response = ProviderCatalogListResponse )] #[serde(rename_all = "camelCase")] @@ -654,7 +654,7 @@ pub struct ProviderCatalogListResponse { /// List provider setup catalog entries #[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema, JsonRpcRequest)] #[request( - method = "_goose/providers/setup/catalog/list", + method = "_goose/unstable/providers/setup/catalog/list", response = ProviderSetupCatalogListResponse )] #[serde(rename_all = "camelCase")] @@ -669,7 +669,7 @@ pub struct ProviderSetupCatalogListResponse { /// Return the editable template for one catalog provider. #[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema, JsonRpcRequest)] #[request( - method = "_goose/providers/catalog/template", + method = "_goose/unstable/providers/catalog/template", response = ProviderCatalogTemplateResponse )] #[serde(rename_all = "camelCase")] @@ -733,7 +733,7 @@ pub struct CustomProviderUpsertDto { /// Create a custom provider backed by Goose's declarative provider store. #[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema, JsonRpcRequest)] #[request( - method = "_goose/providers/custom/create", + method = "_goose/unstable/providers/custom/create", response = CustomProviderCreateResponse )] #[serde(rename_all = "camelCase")] @@ -753,7 +753,7 @@ pub struct CustomProviderCreateResponse { /// Read a declarative provider config. Custom configs are editable; bundled configs are read-only. #[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema, JsonRpcRequest)] #[request( - method = "_goose/providers/custom/read", + method = "_goose/unstable/providers/custom/read", response = CustomProviderReadResponse )] #[serde(rename_all = "camelCase")] @@ -772,7 +772,7 @@ pub struct CustomProviderReadResponse { /// Update a custom provider backed by Goose's declarative provider store. #[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema, JsonRpcRequest)] #[request( - method = "_goose/providers/custom/update", + method = "_goose/unstable/providers/custom/update", response = CustomProviderUpdateResponse )] #[serde(rename_all = "camelCase")] @@ -793,7 +793,7 @@ pub struct CustomProviderUpdateResponse { /// Delete a custom provider from Goose's declarative provider store. #[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema, JsonRpcRequest)] #[request( - method = "_goose/providers/custom/delete", + method = "_goose/unstable/providers/custom/delete", response = CustomProviderDeleteResponse )] #[serde(rename_all = "camelCase")] @@ -881,9 +881,25 @@ impl SourceEntry { } } +/// Target scope for creating or importing sources. +#[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema)] +#[serde(tag = "scope", rename_all = "camelCase")] +pub enum SourceScope { + #[default] + Global, + ProjectDir { + #[serde(rename = "projectDir")] + project_dir: String, + }, + ProjectId { + #[serde(rename = "projectId")] + project_id: String, + }, +} + /// Create a new source in an explicit target scope (global or project-scoped). #[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema, JsonRpcRequest)] -#[request(method = "_goose/sources/create", response = CreateSourceResponse)] +#[request(method = "_goose/unstable/sources/create", response = CreateSourceResponse)] #[serde(rename_all = "camelCase")] pub struct CreateSourceRequest { #[serde(rename = "type")] @@ -891,15 +907,7 @@ pub struct CreateSourceRequest { pub name: String, pub description: String, pub content: String, - pub global: bool, - /// Absolute path to the project root. Required when `global` is false. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub project_dir: Option, - /// Project source ID. When set with `global: false`, the backend resolves - /// the project's first working directory automatically. Takes precedence - /// over `project_dir`. - #[serde(default, skip_serializing_if = "Option::is_none")] - pub project_id: Option, + pub target: SourceScope, /// Arbitrary key/value metadata. #[serde(default, skip_serializing_if = "std::collections::HashMap::is_empty")] pub properties: std::collections::HashMap, @@ -918,7 +926,7 @@ pub struct CreateSourceResponse { /// set. If `type` is `builtinSkill`, this lists shipped read-only built-in /// skills. #[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema, JsonRpcRequest)] -#[request(method = "_goose/sources/list", response = ListSourcesResponse)] +#[request(method = "_goose/unstable/sources/list", response = ListSourcesResponse)] #[serde(rename_all = "camelCase")] pub struct ListSourcesRequest { #[serde(rename = "type", default, skip_serializing_if = "Option::is_none")] @@ -939,7 +947,7 @@ pub struct ListSourcesResponse { /// Update an existing source's name, description, and content by absolute path. #[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema, JsonRpcRequest)] -#[request(method = "_goose/sources/update", response = UpdateSourceResponse)] +#[request(method = "_goose/unstable/sources/update", response = UpdateSourceResponse)] #[serde(rename_all = "camelCase")] pub struct UpdateSourceRequest { #[serde(rename = "type")] @@ -965,7 +973,7 @@ pub struct UpdateSourceResponse { /// Delete a source and its on-disk directory by absolute path. #[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema, JsonRpcRequest)] -#[request(method = "_goose/sources/delete", response = EmptyResponse)] +#[request(method = "_goose/unstable/sources/delete", response = EmptyResponse)] #[serde(rename_all = "camelCase")] pub struct DeleteSourceRequest { #[serde(rename = "type")] @@ -975,7 +983,7 @@ pub struct DeleteSourceRequest { /// Export a source at an absolute path as a portable JSON payload. #[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema, JsonRpcRequest)] -#[request(method = "_goose/sources/export", response = ExportSourceResponse)] +#[request(method = "_goose/unstable/sources/export", response = ExportSourceResponse)] #[serde(rename_all = "camelCase")] pub struct ExportSourceRequest { #[serde(rename = "type")] @@ -990,17 +998,15 @@ pub struct ExportSourceResponse { pub filename: String, } -/// Import a source from a JSON export payload produced by `_goose/sources/export`. +/// Import a source from a JSON export payload produced by `_goose/unstable/sources/export`. /// The imported source is written into the explicit target scope; on name /// collisions a `-imported` suffix is appended. #[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema, JsonRpcRequest)] -#[request(method = "_goose/sources/import", response = ImportSourcesResponse)] +#[request(method = "_goose/unstable/sources/import", response = ImportSourcesResponse)] #[serde(rename_all = "camelCase")] pub struct ImportSourcesRequest { pub data: String, - pub global: bool, - #[serde(default, skip_serializing_if = "Option::is_none")] - pub project_dir: Option, + pub target: SourceScope, } #[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema, JsonRpcResponse)] @@ -1011,7 +1017,7 @@ pub struct ImportSourcesResponse { /// Transcribe audio via a dictation provider. #[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema, JsonRpcRequest)] -#[request(method = "_goose/dictation/transcribe", response = DictationTranscribeResponse)] +#[request(method = "_goose/unstable/dictation/transcribe", response = DictationTranscribeResponse)] #[serde(rename_all = "camelCase")] pub struct DictationTranscribeRequest { /// Base64-encoded audio data @@ -1030,7 +1036,7 @@ pub struct DictationTranscribeResponse { /// Get the configuration status of all dictation providers. #[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema, JsonRpcRequest)] -#[request(method = "_goose/dictation/config", response = DictationConfigResponse)] +#[request(method = "_goose/unstable/dictation/config", response = DictationConfigResponse)] pub struct DictationConfigRequest {} #[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema)] @@ -1071,7 +1077,7 @@ pub struct DictationConfigResponse { /// List providers with setup metadata and the current model inventory snapshot. #[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema, JsonRpcRequest)] -#[request(method = "_goose/providers/list", response = ListProvidersResponse)] +#[request(method = "_goose/unstable/providers/list", response = ListProvidersResponse)] #[serde(rename_all = "camelCase")] pub struct ListProvidersRequest { /// Only return entries for these providers. Empty means all. @@ -1088,7 +1094,7 @@ pub struct ListProvidersResponse { /// Trigger a background refresh of provider inventories. #[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema, JsonRpcRequest)] #[request( - method = "_goose/providers/inventory/refresh", + method = "_goose/unstable/providers/inventory/refresh", response = RefreshProviderInventoryResponse )] #[serde(rename_all = "camelCase")] @@ -1199,7 +1205,7 @@ pub struct EmptyResponse {} /// List available local Whisper models with their download status. #[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema, JsonRpcRequest)] #[request( - method = "_goose/dictation/models/list", + method = "_goose/unstable/dictation/models/list", response = DictationModelsListResponse )] #[serde(rename_all = "camelCase")] @@ -1224,7 +1230,7 @@ pub struct DictationLocalModelStatus { /// Kick off a background download of a local Whisper model. #[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema, JsonRpcRequest)] -#[request(method = "_goose/dictation/models/download", response = EmptyResponse)] +#[request(method = "_goose/unstable/dictation/models/download", response = EmptyResponse)] #[serde(rename_all = "camelCase")] pub struct DictationModelDownloadRequest { pub model_id: String, @@ -1233,7 +1239,7 @@ pub struct DictationModelDownloadRequest { /// Poll the progress of an in-flight download. #[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema, JsonRpcRequest)] #[request( - method = "_goose/dictation/models/download/progress", + method = "_goose/unstable/dictation/models/download/progress", response = DictationModelDownloadProgressResponse )] #[serde(rename_all = "camelCase")] @@ -1261,7 +1267,7 @@ pub struct DictationDownloadProgress { /// Cancel an in-flight download. #[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema, JsonRpcRequest)] -#[request(method = "_goose/dictation/models/cancel", response = EmptyResponse)] +#[request(method = "_goose/unstable/dictation/models/cancel", response = EmptyResponse)] #[serde(rename_all = "camelCase")] pub struct DictationModelCancelRequest { pub model_id: String, @@ -1269,7 +1275,7 @@ pub struct DictationModelCancelRequest { /// Delete a downloaded local Whisper model from disk. #[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema, JsonRpcRequest)] -#[request(method = "_goose/dictation/models/delete", response = EmptyResponse)] +#[request(method = "_goose/unstable/dictation/models/delete", response = EmptyResponse)] #[serde(rename_all = "camelCase")] pub struct DictationModelDeleteRequest { pub model_id: String, @@ -1277,7 +1283,7 @@ pub struct DictationModelDeleteRequest { /// Persist the user's model selection for a given provider. #[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema, JsonRpcRequest)] -#[request(method = "_goose/dictation/model/select", response = EmptyResponse)] +#[request(method = "_goose/unstable/dictation/models/select", response = EmptyResponse)] #[serde(rename_all = "camelCase")] pub struct DictationModelSelectRequest { pub provider: String, diff --git a/crates/goose/acp-meta.json b/crates/goose/acp-meta.json index 1f78227fd3..60893f1020 100644 --- a/crates/goose/acp-meta.json +++ b/crates/goose/acp-meta.json @@ -1,33 +1,33 @@ { "methods": [ { - "method": "_goose/extensions/add", - "requestType": "AddExtensionRequest", + "method": "_goose/unstable/session/extensions/add", + "requestType": "AddExtensionRequest_unstable", "responseType": "EmptyResponse" }, { - "method": "_goose/extensions/remove", - "requestType": "RemoveExtensionRequest", + "method": "_goose/unstable/session/extensions/remove", + "requestType": "RemoveExtensionRequest_unstable", "responseType": "EmptyResponse" }, { - "method": "_goose/tools", - "requestType": "GetToolsRequest", - "responseType": "GetToolsResponse" + "method": "_goose/unstable/tools/list", + "requestType": "GetToolsRequest_unstable", + "responseType": "GetToolsResponse_unstable" }, { - "method": "_goose/tool/call", - "requestType": "GooseToolCallRequest", - "responseType": "GooseToolCallResponse" + "method": "_goose/unstable/tools/call", + "requestType": "GooseToolCallRequest_unstable", + "responseType": "GooseToolCallResponse_unstable" }, { - "method": "_goose/resource/read", - "requestType": "ReadResourceRequest", - "responseType": "ReadResourceResponse" + "method": "_goose/unstable/resources/read", + "requestType": "ReadResourceRequest_unstable", + "responseType": "ReadResourceResponse_unstable" }, { - "method": "_goose/working_dir/update", - "requestType": "UpdateWorkingDirRequest", + "method": "_goose/unstable/session/working-dir/update", + "requestType": "UpdateWorkingDirRequest_unstable", "responseType": "EmptyResponse" }, { @@ -36,243 +36,243 @@ "responseType": "EmptyResponse" }, { - "method": "_goose/config/extensions", - "requestType": "GetExtensionsRequest", - "responseType": "GetExtensionsResponse" + "method": "_goose/unstable/config/extensions/list", + "requestType": "GetExtensionsRequest_unstable", + "responseType": "GetExtensionsResponse_unstable" }, { - "method": "_goose/config/extensions/add", - "requestType": "AddConfigExtensionRequest", + "method": "_goose/unstable/config/extensions/add", + "requestType": "AddConfigExtensionRequest_unstable", "responseType": "EmptyResponse" }, { - "method": "_goose/config/extensions/remove", - "requestType": "RemoveConfigExtensionRequest", + "method": "_goose/unstable/config/extensions/remove", + "requestType": "RemoveConfigExtensionRequest_unstable", "responseType": "EmptyResponse" }, { - "method": "_goose/config/extensions/toggle", - "requestType": "ToggleConfigExtensionRequest", + "method": "_goose/unstable/config/extensions/toggle", + "requestType": "ToggleConfigExtensionRequest_unstable", "responseType": "EmptyResponse" }, { - "method": "_goose/session/extensions", - "requestType": "GetSessionExtensionsRequest", - "responseType": "GetSessionExtensionsResponse" + "method": "_goose/unstable/session/extensions/list", + "requestType": "GetSessionExtensionsRequest_unstable", + "responseType": "GetSessionExtensionsResponse_unstable" }, { - "method": "_goose/providers/list", - "requestType": "ListProvidersRequest", - "responseType": "ListProvidersResponse" + "method": "_goose/unstable/providers/list", + "requestType": "ListProvidersRequest_unstable", + "responseType": "ListProvidersResponse_unstable" }, { - "method": "_goose/providers/catalog/list", - "requestType": "ProviderCatalogListRequest", - "responseType": "ProviderCatalogListResponse" + "method": "_goose/unstable/providers/catalog/list", + "requestType": "ProviderCatalogListRequest_unstable", + "responseType": "ProviderCatalogListResponse_unstable" }, { - "method": "_goose/providers/setup/catalog/list", - "requestType": "ProviderSetupCatalogListRequest", - "responseType": "ProviderSetupCatalogListResponse" + "method": "_goose/unstable/providers/setup/catalog/list", + "requestType": "ProviderSetupCatalogListRequest_unstable", + "responseType": "ProviderSetupCatalogListResponse_unstable" }, { - "method": "_goose/providers/catalog/template", - "requestType": "ProviderCatalogTemplateRequest", - "responseType": "ProviderCatalogTemplateResponse" + "method": "_goose/unstable/providers/catalog/template", + "requestType": "ProviderCatalogTemplateRequest_unstable", + "responseType": "ProviderCatalogTemplateResponse_unstable" }, { - "method": "_goose/providers/custom/create", - "requestType": "CustomProviderCreateRequest", - "responseType": "CustomProviderCreateResponse" + "method": "_goose/unstable/providers/custom/create", + "requestType": "CustomProviderCreateRequest_unstable", + "responseType": "CustomProviderCreateResponse_unstable" }, { - "method": "_goose/providers/custom/read", - "requestType": "CustomProviderReadRequest", - "responseType": "CustomProviderReadResponse" + "method": "_goose/unstable/providers/custom/read", + "requestType": "CustomProviderReadRequest_unstable", + "responseType": "CustomProviderReadResponse_unstable" }, { - "method": "_goose/providers/custom/update", - "requestType": "CustomProviderUpdateRequest", - "responseType": "CustomProviderUpdateResponse" + "method": "_goose/unstable/providers/custom/update", + "requestType": "CustomProviderUpdateRequest_unstable", + "responseType": "CustomProviderUpdateResponse_unstable" }, { - "method": "_goose/providers/custom/delete", - "requestType": "CustomProviderDeleteRequest", - "responseType": "CustomProviderDeleteResponse" + "method": "_goose/unstable/providers/custom/delete", + "requestType": "CustomProviderDeleteRequest_unstable", + "responseType": "CustomProviderDeleteResponse_unstable" }, { - "method": "_goose/providers/inventory/refresh", - "requestType": "RefreshProviderInventoryRequest", - "responseType": "RefreshProviderInventoryResponse" + "method": "_goose/unstable/providers/inventory/refresh", + "requestType": "RefreshProviderInventoryRequest_unstable", + "responseType": "RefreshProviderInventoryResponse_unstable" }, { - "method": "_goose/providers/config/read", - "requestType": "ProviderConfigReadRequest", - "responseType": "ProviderConfigReadResponse" + "method": "_goose/unstable/providers/config/read", + "requestType": "ProviderConfigReadRequest_unstable", + "responseType": "ProviderConfigReadResponse_unstable" }, { - "method": "_goose/providers/config/status", - "requestType": "ProviderConfigStatusRequest", - "responseType": "ProviderConfigStatusResponse" + "method": "_goose/unstable/providers/config/status", + "requestType": "ProviderConfigStatusRequest_unstable", + "responseType": "ProviderConfigStatusResponse_unstable" }, { - "method": "_goose/providers/config/save", - "requestType": "ProviderConfigSaveRequest", - "responseType": "ProviderConfigChangeResponse" + "method": "_goose/unstable/providers/config/save", + "requestType": "ProviderConfigSaveRequest_unstable", + "responseType": "ProviderConfigChangeResponse_unstable" }, { - "method": "_goose/providers/config/delete", - "requestType": "ProviderConfigDeleteRequest", - "responseType": "ProviderConfigChangeResponse" + "method": "_goose/unstable/providers/config/delete", + "requestType": "ProviderConfigDeleteRequest_unstable", + "responseType": "ProviderConfigChangeResponse_unstable" }, { - "method": "_goose/providers/config/authenticate", - "requestType": "ProviderConfigAuthenticateRequest", - "responseType": "ProviderConfigChangeResponse" + "method": "_goose/unstable/providers/config/authenticate", + "requestType": "ProviderConfigAuthenticateRequest_unstable", + "responseType": "ProviderConfigChangeResponse_unstable" }, { - "method": "_goose/preferences/read", - "requestType": "PreferencesReadRequest", - "responseType": "PreferencesReadResponse" + "method": "_goose/unstable/preferences/read", + "requestType": "PreferencesReadRequest_unstable", + "responseType": "PreferencesReadResponse_unstable" }, { - "method": "_goose/preferences/save", - "requestType": "PreferencesSaveRequest", + "method": "_goose/unstable/preferences/save", + "requestType": "PreferencesSaveRequest_unstable", "responseType": "EmptyResponse" }, { - "method": "_goose/preferences/remove", - "requestType": "PreferencesRemoveRequest", + "method": "_goose/unstable/preferences/remove", + "requestType": "PreferencesRemoveRequest_unstable", "responseType": "EmptyResponse" }, { - "method": "_goose/defaults/read", - "requestType": "DefaultsReadRequest", - "responseType": "DefaultsReadResponse" + "method": "_goose/unstable/defaults/read", + "requestType": "DefaultsReadRequest_unstable", + "responseType": "DefaultsReadResponse_unstable" }, { - "method": "_goose/defaults/save", - "requestType": "DefaultsSaveRequest", - "responseType": "DefaultsReadResponse" + "method": "_goose/unstable/defaults/save", + "requestType": "DefaultsSaveRequest_unstable", + "responseType": "DefaultsReadResponse_unstable" }, { - "method": "_goose/onboarding/import/scan", - "requestType": "OnboardingImportScanRequest", - "responseType": "OnboardingImportScanResponse" + "method": "_goose/unstable/onboarding/import/scan", + "requestType": "OnboardingImportScanRequest_unstable", + "responseType": "OnboardingImportScanResponse_unstable" }, { - "method": "_goose/onboarding/import/apply", - "requestType": "OnboardingImportApplyRequest", - "responseType": "OnboardingImportApplyResponse" + "method": "_goose/unstable/onboarding/import/apply", + "requestType": "OnboardingImportApplyRequest_unstable", + "responseType": "OnboardingImportApplyResponse_unstable" }, { - "method": "_goose/session/export", - "requestType": "ExportSessionRequest", - "responseType": "ExportSessionResponse" + "method": "_goose/unstable/session/export", + "requestType": "ExportSessionRequest_unstable", + "responseType": "ExportSessionResponse_unstable" }, { - "method": "_goose/session/import", - "requestType": "ImportSessionRequest", - "responseType": "ImportSessionResponse" + "method": "_goose/unstable/session/import", + "requestType": "ImportSessionRequest_unstable", + "responseType": "ImportSessionResponse_unstable" }, { - "method": "_goose/session/update_project", - "requestType": "UpdateSessionProjectRequest", + "method": "_goose/unstable/session/project/update", + "requestType": "UpdateSessionProjectRequest_unstable", "responseType": "EmptyResponse" }, { - "method": "_goose/session/rename", - "requestType": "RenameSessionRequest", + "method": "_goose/unstable/session/rename", + "requestType": "RenameSessionRequest_unstable", "responseType": "EmptyResponse" }, { - "method": "_goose/session/archive", - "requestType": "ArchiveSessionRequest", + "method": "_goose/unstable/session/archive", + "requestType": "ArchiveSessionRequest_unstable", "responseType": "EmptyResponse" }, { - "method": "_goose/session/unarchive", - "requestType": "UnarchiveSessionRequest", + "method": "_goose/unstable/session/unarchive", + "requestType": "UnarchiveSessionRequest_unstable", "responseType": "EmptyResponse" }, { - "method": "_goose/sources/create", - "requestType": "CreateSourceRequest", - "responseType": "CreateSourceResponse" + "method": "_goose/unstable/sources/create", + "requestType": "CreateSourceRequest_unstable", + "responseType": "CreateSourceResponse_unstable" }, { - "method": "_goose/sources/list", - "requestType": "ListSourcesRequest", - "responseType": "ListSourcesResponse" + "method": "_goose/unstable/sources/list", + "requestType": "ListSourcesRequest_unstable", + "responseType": "ListSourcesResponse_unstable" }, { - "method": "_goose/sources/update", - "requestType": "UpdateSourceRequest", - "responseType": "UpdateSourceResponse" + "method": "_goose/unstable/sources/update", + "requestType": "UpdateSourceRequest_unstable", + "responseType": "UpdateSourceResponse_unstable" }, { - "method": "_goose/sources/delete", - "requestType": "DeleteSourceRequest", + "method": "_goose/unstable/sources/delete", + "requestType": "DeleteSourceRequest_unstable", "responseType": "EmptyResponse" }, { - "method": "_goose/sources/export", - "requestType": "ExportSourceRequest", - "responseType": "ExportSourceResponse" + "method": "_goose/unstable/sources/export", + "requestType": "ExportSourceRequest_unstable", + "responseType": "ExportSourceResponse_unstable" }, { - "method": "_goose/sources/import", - "requestType": "ImportSourcesRequest", - "responseType": "ImportSourcesResponse" + "method": "_goose/unstable/sources/import", + "requestType": "ImportSourcesRequest_unstable", + "responseType": "ImportSourcesResponse_unstable" }, { - "method": "_goose/dictation/transcribe", - "requestType": "DictationTranscribeRequest", - "responseType": "DictationTranscribeResponse" + "method": "_goose/unstable/dictation/transcribe", + "requestType": "DictationTranscribeRequest_unstable", + "responseType": "DictationTranscribeResponse_unstable" }, { - "method": "_goose/dictation/config", - "requestType": "DictationConfigRequest", - "responseType": "DictationConfigResponse" + "method": "_goose/unstable/dictation/config", + "requestType": "DictationConfigRequest_unstable", + "responseType": "DictationConfigResponse_unstable" }, { - "method": "_goose/dictation/secret/save", - "requestType": "DictationSecretSaveRequest", + "method": "_goose/unstable/dictation/secret/save", + "requestType": "DictationSecretSaveRequest_unstable", "responseType": "EmptyResponse" }, { - "method": "_goose/dictation/secret/delete", - "requestType": "DictationSecretDeleteRequest", + "method": "_goose/unstable/dictation/secret/delete", + "requestType": "DictationSecretDeleteRequest_unstable", "responseType": "EmptyResponse" }, { - "method": "_goose/dictation/models/list", - "requestType": "DictationModelsListRequest", - "responseType": "DictationModelsListResponse" + "method": "_goose/unstable/dictation/models/list", + "requestType": "DictationModelsListRequest_unstable", + "responseType": "DictationModelsListResponse_unstable" }, { - "method": "_goose/dictation/models/download", - "requestType": "DictationModelDownloadRequest", + "method": "_goose/unstable/dictation/models/download", + "requestType": "DictationModelDownloadRequest_unstable", "responseType": "EmptyResponse" }, { - "method": "_goose/dictation/models/download/progress", - "requestType": "DictationModelDownloadProgressRequest", - "responseType": "DictationModelDownloadProgressResponse" + "method": "_goose/unstable/dictation/models/download/progress", + "requestType": "DictationModelDownloadProgressRequest_unstable", + "responseType": "DictationModelDownloadProgressResponse_unstable" }, { - "method": "_goose/dictation/models/cancel", - "requestType": "DictationModelCancelRequest", + "method": "_goose/unstable/dictation/models/cancel", + "requestType": "DictationModelCancelRequest_unstable", "responseType": "EmptyResponse" }, { - "method": "_goose/dictation/models/delete", - "requestType": "DictationModelDeleteRequest", + "method": "_goose/unstable/dictation/models/delete", + "requestType": "DictationModelDeleteRequest_unstable", "responseType": "EmptyResponse" }, { - "method": "_goose/dictation/model/select", - "requestType": "DictationModelSelectRequest", + "method": "_goose/unstable/dictation/models/select", + "requestType": "DictationModelSelectRequest_unstable", "responseType": "EmptyResponse" } ] diff --git a/crates/goose/acp-schema.json b/crates/goose/acp-schema.json index 66edaf0c21..63bf2b7643 100644 --- a/crates/goose/acp-schema.json +++ b/crates/goose/acp-schema.json @@ -2,7 +2,7 @@ "$schema": "https://json-schema.org/draft/2020-12/schema", "title": "GooseExtensions", "$defs": { - "AddExtensionRequest": { + "AddExtensionRequest_unstable": { "type": "object", "properties": { "sessionId": { @@ -18,14 +18,14 @@ ], "description": "Add an extension to an active session.", "x-side": "agent", - "x-method": "_goose/extensions/add" + "x-method": "_goose/unstable/session/extensions/add" }, "EmptyResponse": { "type": "object", "description": "Empty success response for operations that return no data.", "x-side": "agent" }, - "RemoveExtensionRequest": { + "RemoveExtensionRequest_unstable": { "type": "object", "properties": { "sessionId": { @@ -41,9 +41,9 @@ ], "description": "Remove an extension from an active session.", "x-side": "agent", - "x-method": "_goose/extensions/remove" + "x-method": "_goose/unstable/session/extensions/remove" }, - "GetToolsRequest": { + "GetToolsRequest_unstable": { "type": "object", "properties": { "sessionId": { @@ -55,9 +55,9 @@ ], "description": "List all tools available in a session.", "x-side": "agent", - "x-method": "_goose/tools" + "x-method": "_goose/unstable/tools/list" }, - "GetToolsResponse": { + "GetToolsResponse_unstable": { "type": "object", "properties": { "tools": { @@ -71,9 +71,9 @@ ], "description": "Tools response.", "x-side": "agent", - "x-method": "_goose/tools" + "x-method": "_goose/unstable/tools/list" }, - "GooseToolCallRequest": { + "GooseToolCallRequest_unstable": { "type": "object", "properties": { "sessionId": { @@ -92,9 +92,9 @@ ], "description": "Call a tool from an extension.", "x-side": "agent", - "x-method": "_goose/tool/call" + "x-method": "_goose/unstable/tools/call" }, - "GooseToolCallResponse": { + "GooseToolCallResponse_unstable": { "type": "object", "properties": { "content": { @@ -113,9 +113,9 @@ ], "description": "Tool call response.", "x-side": "agent", - "x-method": "_goose/tool/call" + "x-method": "_goose/unstable/tools/call" }, - "ReadResourceRequest": { + "ReadResourceRequest_unstable": { "type": "object", "properties": { "sessionId": { @@ -135,9 +135,9 @@ ], "description": "Read a resource from an extension.", "x-side": "agent", - "x-method": "_goose/resource/read" + "x-method": "_goose/unstable/resources/read" }, - "ReadResourceResponse": { + "ReadResourceResponse_unstable": { "type": "object", "properties": { "result": { @@ -147,9 +147,9 @@ }, "description": "Resource read response.", "x-side": "agent", - "x-method": "_goose/resource/read" + "x-method": "_goose/unstable/resources/read" }, - "UpdateWorkingDirRequest": { + "UpdateWorkingDirRequest_unstable": { "type": "object", "properties": { "sessionId": { @@ -165,7 +165,7 @@ ], "description": "Update the working directory for a session.", "x-side": "agent", - "x-method": "_goose/working_dir/update" + "x-method": "_goose/unstable/session/working-dir/update" }, "DeleteSessionRequest": { "type": "object", @@ -181,13 +181,13 @@ "x-side": "agent", "x-method": "session/delete" }, - "GetExtensionsRequest": { + "GetExtensionsRequest_unstable": { "type": "object", "description": "List configured extensions and any warnings.", "x-side": "agent", - "x-method": "_goose/config/extensions" + "x-method": "_goose/unstable/config/extensions/list" }, - "GetExtensionsResponse": { + "GetExtensionsResponse_unstable": { "type": "object", "properties": { "extensions": { @@ -208,9 +208,9 @@ ], "description": "List configured extensions and any warnings.", "x-side": "agent", - "x-method": "_goose/config/extensions" + "x-method": "_goose/unstable/config/extensions/list" }, - "AddConfigExtensionRequest": { + "AddConfigExtensionRequest_unstable": { "type": "object", "properties": { "name": { @@ -230,9 +230,9 @@ ], "description": "Persist a new extension to the user's global goose config.", "x-side": "agent", - "x-method": "_goose/config/extensions/add" + "x-method": "_goose/unstable/config/extensions/add" }, - "RemoveConfigExtensionRequest": { + "RemoveConfigExtensionRequest_unstable": { "type": "object", "properties": { "configKey": { @@ -244,9 +244,9 @@ ], "description": "Remove a persisted extension from the user's global goose config.", "x-side": "agent", - "x-method": "_goose/config/extensions/remove" + "x-method": "_goose/unstable/config/extensions/remove" }, - "ToggleConfigExtensionRequest": { + "ToggleConfigExtensionRequest_unstable": { "type": "object", "properties": { "configKey": { @@ -262,9 +262,9 @@ ], "description": "Toggle the `enabled` flag for a persisted extension in the user's global goose config.", "x-side": "agent", - "x-method": "_goose/config/extensions/toggle" + "x-method": "_goose/unstable/config/extensions/toggle" }, - "GetSessionExtensionsRequest": { + "GetSessionExtensionsRequest_unstable": { "type": "object", "properties": { "sessionId": { @@ -275,9 +275,9 @@ "sessionId" ], "x-side": "agent", - "x-method": "_goose/session/extensions" + "x-method": "_goose/unstable/session/extensions/list" }, - "GetSessionExtensionsResponse": { + "GetSessionExtensionsResponse_unstable": { "type": "object", "properties": { "extensions": { @@ -289,9 +289,9 @@ "extensions" ], "x-side": "agent", - "x-method": "_goose/session/extensions" + "x-method": "_goose/unstable/session/extensions/list" }, - "ListProvidersRequest": { + "ListProvidersRequest_unstable": { "type": "object", "properties": { "providerIds": { @@ -305,9 +305,9 @@ }, "description": "List providers with setup metadata and the current model inventory snapshot.", "x-side": "agent", - "x-method": "_goose/providers/list" + "x-method": "_goose/unstable/providers/list" }, - "ListProvidersResponse": { + "ListProvidersResponse_unstable": { "type": "object", "properties": { "entries": { @@ -322,7 +322,7 @@ ], "description": "Provider list response.", "x-side": "agent", - "x-method": "_goose/providers/list" + "x-method": "_goose/unstable/providers/list" }, "ProviderInventoryEntryDto": { "type": "object", @@ -525,7 +525,7 @@ ], "description": "A single model in provider inventory." }, - "ProviderCatalogListRequest": { + "ProviderCatalogListRequest_unstable": { "type": "object", "properties": { "format": { @@ -537,9 +537,9 @@ }, "description": "List custom-provider catalog entries. Omit `format` to list all formats.", "x-side": "agent", - "x-method": "_goose/providers/catalog/list" + "x-method": "_goose/unstable/providers/catalog/list" }, - "ProviderCatalogListResponse": { + "ProviderCatalogListResponse_unstable": { "type": "object", "properties": { "providers": { @@ -553,7 +553,7 @@ "providers" ], "x-side": "agent", - "x-method": "_goose/providers/catalog/list" + "x-method": "_goose/unstable/providers/catalog/list" }, "ProviderTemplateCatalogEntryDto": { "type": "object", @@ -591,13 +591,13 @@ "envVar" ] }, - "ProviderSetupCatalogListRequest": { + "ProviderSetupCatalogListRequest_unstable": { "type": "object", "description": "List provider setup catalog entries", "x-side": "agent", - "x-method": "_goose/providers/setup/catalog/list" + "x-method": "_goose/unstable/providers/setup/catalog/list" }, - "ProviderSetupCatalogListResponse": { + "ProviderSetupCatalogListResponse_unstable": { "type": "object", "properties": { "providers": { @@ -611,7 +611,7 @@ "providers" ], "x-side": "agent", - "x-method": "_goose/providers/setup/catalog/list" + "x-method": "_goose/unstable/providers/setup/catalog/list" }, "ProviderSetupCatalogEntryDto": { "type": "object", @@ -748,7 +748,7 @@ "additional" ] }, - "ProviderCatalogTemplateRequest": { + "ProviderCatalogTemplateRequest_unstable": { "type": "object", "properties": { "providerId": { @@ -760,9 +760,9 @@ ], "description": "Return the editable template for one catalog provider.", "x-side": "agent", - "x-method": "_goose/providers/catalog/template" + "x-method": "_goose/unstable/providers/catalog/template" }, - "ProviderCatalogTemplateResponse": { + "ProviderCatalogTemplateResponse_unstable": { "type": "object", "properties": { "template": { @@ -773,7 +773,7 @@ "template" ], "x-side": "agent", - "x-method": "_goose/providers/catalog/template" + "x-method": "_goose/unstable/providers/catalog/template" }, "ProviderTemplateDto": { "type": "object", @@ -868,7 +868,7 @@ "temperature" ] }, - "CustomProviderCreateRequest": { + "CustomProviderCreateRequest_unstable": { "type": "object", "properties": { "engine": { @@ -936,9 +936,9 @@ ], "description": "Create a custom provider backed by Goose's declarative provider store.", "x-side": "agent", - "x-method": "_goose/providers/custom/create" + "x-method": "_goose/unstable/providers/custom/create" }, - "CustomProviderCreateResponse": { + "CustomProviderCreateResponse_unstable": { "type": "object", "properties": { "providerId": { @@ -948,7 +948,7 @@ "$ref": "#/$defs/ProviderConfigStatusDto" }, "refresh": { - "$ref": "#/$defs/RefreshProviderInventoryResponse" + "$ref": "#/$defs/RefreshProviderInventoryResponse_unstable" } }, "required": [ @@ -957,7 +957,7 @@ "refresh" ], "x-side": "agent", - "x-method": "_goose/providers/custom/create" + "x-method": "_goose/unstable/providers/custom/create" }, "ProviderConfigStatusDto": { "type": "object", @@ -974,7 +974,7 @@ "isConfigured" ] }, - "RefreshProviderInventoryResponse": { + "RefreshProviderInventoryResponse_unstable": { "type": "object", "properties": { "started": { @@ -998,7 +998,7 @@ ], "description": "Refresh acknowledgement.", "x-side": "agent", - "x-method": "_goose/providers/inventory/refresh" + "x-method": "_goose/unstable/providers/inventory/refresh" }, "RefreshProviderInventorySkipDto": { "type": "object", @@ -1024,7 +1024,7 @@ "already_refreshing" ] }, - "CustomProviderReadRequest": { + "CustomProviderReadRequest_unstable": { "type": "object", "properties": { "providerId": { @@ -1036,9 +1036,9 @@ ], "description": "Read a declarative provider config. Custom configs are editable; bundled configs are read-only.", "x-side": "agent", - "x-method": "_goose/providers/custom/read" + "x-method": "_goose/unstable/providers/custom/read" }, - "CustomProviderReadResponse": { + "CustomProviderReadResponse_unstable": { "type": "object", "properties": { "provider": { @@ -1057,7 +1057,7 @@ "status" ], "x-side": "agent", - "x-method": "_goose/providers/custom/read" + "x-method": "_goose/unstable/providers/custom/read" }, "CustomProviderConfigDto": { "type": "object", @@ -1132,7 +1132,7 @@ "preservesThinking" ] }, - "CustomProviderUpdateRequest": { + "CustomProviderUpdateRequest_unstable": { "type": "object", "properties": { "providerId": { @@ -1204,9 +1204,9 @@ ], "description": "Update a custom provider backed by Goose's declarative provider store.", "x-side": "agent", - "x-method": "_goose/providers/custom/update" + "x-method": "_goose/unstable/providers/custom/update" }, - "CustomProviderUpdateResponse": { + "CustomProviderUpdateResponse_unstable": { "type": "object", "properties": { "providerId": { @@ -1216,7 +1216,7 @@ "$ref": "#/$defs/ProviderConfigStatusDto" }, "refresh": { - "$ref": "#/$defs/RefreshProviderInventoryResponse" + "$ref": "#/$defs/RefreshProviderInventoryResponse_unstable" } }, "required": [ @@ -1225,9 +1225,9 @@ "refresh" ], "x-side": "agent", - "x-method": "_goose/providers/custom/update" + "x-method": "_goose/unstable/providers/custom/update" }, - "CustomProviderDeleteRequest": { + "CustomProviderDeleteRequest_unstable": { "type": "object", "properties": { "providerId": { @@ -1239,16 +1239,16 @@ ], "description": "Delete a custom provider from Goose's declarative provider store.", "x-side": "agent", - "x-method": "_goose/providers/custom/delete" + "x-method": "_goose/unstable/providers/custom/delete" }, - "CustomProviderDeleteResponse": { + "CustomProviderDeleteResponse_unstable": { "type": "object", "properties": { "providerId": { "type": "string" }, "refresh": { - "$ref": "#/$defs/RefreshProviderInventoryResponse" + "$ref": "#/$defs/RefreshProviderInventoryResponse_unstable" } }, "required": [ @@ -1256,9 +1256,9 @@ "refresh" ], "x-side": "agent", - "x-method": "_goose/providers/custom/delete" + "x-method": "_goose/unstable/providers/custom/delete" }, - "RefreshProviderInventoryRequest": { + "RefreshProviderInventoryRequest_unstable": { "type": "object", "properties": { "providerIds": { @@ -1272,9 +1272,9 @@ }, "description": "Trigger a background refresh of provider inventories.", "x-side": "agent", - "x-method": "_goose/providers/inventory/refresh" + "x-method": "_goose/unstable/providers/inventory/refresh" }, - "ProviderConfigReadRequest": { + "ProviderConfigReadRequest_unstable": { "type": "object", "properties": { "providerId": { @@ -1286,9 +1286,9 @@ ], "description": "Read saved configuration field values for one provider.", "x-side": "agent", - "x-method": "_goose/providers/config/read" + "x-method": "_goose/unstable/providers/config/read" }, - "ProviderConfigReadResponse": { + "ProviderConfigReadResponse_unstable": { "type": "object", "properties": { "fields": { @@ -1302,7 +1302,7 @@ "fields" ], "x-side": "agent", - "x-method": "_goose/providers/config/read" + "x-method": "_goose/unstable/providers/config/read" }, "ProviderConfigFieldValueDto": { "type": "object", @@ -1334,7 +1334,7 @@ "required" ] }, - "ProviderConfigStatusRequest": { + "ProviderConfigStatusRequest_unstable": { "type": "object", "properties": { "providerIds": { @@ -1347,9 +1347,9 @@ }, "description": "Return provider configured statuses. Empty provider_ids means all providers.", "x-side": "agent", - "x-method": "_goose/providers/config/status" + "x-method": "_goose/unstable/providers/config/status" }, - "ProviderConfigStatusResponse": { + "ProviderConfigStatusResponse_unstable": { "type": "object", "properties": { "statuses": { @@ -1363,9 +1363,9 @@ "statuses" ], "x-side": "agent", - "x-method": "_goose/providers/config/status" + "x-method": "_goose/unstable/providers/config/status" }, - "ProviderConfigSaveRequest": { + "ProviderConfigSaveRequest_unstable": { "type": "object", "properties": { "providerId": { @@ -1384,7 +1384,7 @@ ], "description": "Save provider configuration fields and start an inventory refresh when supported.", "x-side": "agent", - "x-method": "_goose/providers/config/save" + "x-method": "_goose/unstable/providers/config/save" }, "ProviderConfigFieldUpdate": { "type": "object", @@ -1401,14 +1401,14 @@ "value" ] }, - "ProviderConfigChangeResponse": { + "ProviderConfigChangeResponse_unstable": { "type": "object", "properties": { "status": { "$ref": "#/$defs/ProviderConfigStatusDto" }, "refresh": { - "$ref": "#/$defs/RefreshProviderInventoryResponse" + "$ref": "#/$defs/RefreshProviderInventoryResponse_unstable" } }, "required": [ @@ -1417,7 +1417,7 @@ ], "x-side": "agent" }, - "ProviderConfigDeleteRequest": { + "ProviderConfigDeleteRequest_unstable": { "type": "object", "properties": { "providerId": { @@ -1429,9 +1429,9 @@ ], "description": "Delete provider configuration fields and start an inventory refresh when supported.", "x-side": "agent", - "x-method": "_goose/providers/config/delete" + "x-method": "_goose/unstable/providers/config/delete" }, - "ProviderConfigAuthenticateRequest": { + "ProviderConfigAuthenticateRequest_unstable": { "type": "object", "properties": { "providerId": { @@ -1443,9 +1443,9 @@ ], "description": "Run a provider-owned native authentication flow and start an inventory refresh when supported.", "x-side": "agent", - "x-method": "_goose/providers/config/authenticate" + "x-method": "_goose/unstable/providers/config/authenticate" }, - "PreferencesReadRequest": { + "PreferencesReadRequest_unstable": { "type": "object", "properties": { "keys": { @@ -1458,7 +1458,7 @@ }, "description": "Read allowlisted user preferences. Empty `keys` means all supported preferences.", "x-side": "agent", - "x-method": "_goose/preferences/read" + "x-method": "_goose/unstable/preferences/read" }, "PreferenceKey": { "type": "string", @@ -1469,7 +1469,7 @@ "voiceDictationPreferredMic" ] }, - "PreferencesReadResponse": { + "PreferencesReadResponse_unstable": { "type": "object", "properties": { "values": { @@ -1483,7 +1483,7 @@ "values" ], "x-side": "agent", - "x-method": "_goose/preferences/read" + "x-method": "_goose/unstable/preferences/read" }, "PreferenceValue": { "type": "object", @@ -1499,7 +1499,7 @@ "key" ] }, - "PreferencesSaveRequest": { + "PreferencesSaveRequest_unstable": { "type": "object", "properties": { "values": { @@ -1512,9 +1512,9 @@ }, "description": "Save allowlisted user preferences.", "x-side": "agent", - "x-method": "_goose/preferences/save" + "x-method": "_goose/unstable/preferences/save" }, - "PreferencesRemoveRequest": { + "PreferencesRemoveRequest_unstable": { "type": "object", "properties": { "keys": { @@ -1527,15 +1527,15 @@ }, "description": "Remove allowlisted user preferences.", "x-side": "agent", - "x-method": "_goose/preferences/remove" + "x-method": "_goose/unstable/preferences/remove" }, - "DefaultsReadRequest": { + "DefaultsReadRequest_unstable": { "type": "object", "description": "Read Goose default provider and model configuration.", "x-side": "agent", - "x-method": "_goose/defaults/read" + "x-method": "_goose/unstable/defaults/read" }, - "DefaultsReadResponse": { + "DefaultsReadResponse_unstable": { "type": "object", "properties": { "providerId": { @@ -1553,7 +1553,7 @@ }, "x-side": "agent" }, - "DefaultsSaveRequest": { + "DefaultsSaveRequest_unstable": { "type": "object", "properties": { "providerId": { @@ -1571,9 +1571,9 @@ ], "description": "Save Goose default provider and model configuration.", "x-side": "agent", - "x-method": "_goose/defaults/save" + "x-method": "_goose/unstable/defaults/save" }, - "OnboardingImportScanRequest": { + "OnboardingImportScanRequest_unstable": { "type": "object", "properties": { "sources": { @@ -1587,7 +1587,7 @@ }, "description": "Scan for existing Goose and compatible app data that onboarding can import.", "x-side": "agent", - "x-method": "_goose/onboarding/import/scan" + "x-method": "_goose/unstable/onboarding/import/scan" }, "OnboardingImportSourceKind": { "type": "string", @@ -1597,7 +1597,7 @@ ], "description": "Sources that onboarding knows how to discover and import." }, - "OnboardingImportScanResponse": { + "OnboardingImportScanResponse_unstable": { "type": "object", "properties": { "candidates": { @@ -1611,7 +1611,7 @@ "candidates" ], "x-side": "agent", - "x-method": "_goose/onboarding/import/scan" + "x-method": "_goose/unstable/onboarding/import/scan" }, "OnboardingImportCandidate": { "type": "object", @@ -1684,7 +1684,7 @@ "preferences" ] }, - "OnboardingImportApplyRequest": { + "OnboardingImportApplyRequest_unstable": { "type": "object", "properties": { "candidateIds": { @@ -1701,9 +1701,9 @@ }, "description": "Import selected onboarding candidates.", "x-side": "agent", - "x-method": "_goose/onboarding/import/apply" + "x-method": "_goose/unstable/onboarding/import/apply" }, - "OnboardingImportApplyResponse": { + "OnboardingImportApplyResponse_unstable": { "type": "object", "properties": { "imported": { @@ -1722,7 +1722,7 @@ "providerDefaults": { "anyOf": [ { - "$ref": "#/$defs/DefaultsReadResponse" + "$ref": "#/$defs/DefaultsReadResponse_unstable" }, { "type": "null" @@ -1735,9 +1735,9 @@ "skipped" ], "x-side": "agent", - "x-method": "_goose/onboarding/import/apply" + "x-method": "_goose/unstable/onboarding/import/apply" }, - "ExportSessionRequest": { + "ExportSessionRequest_unstable": { "type": "object", "properties": { "sessionId": { @@ -1749,9 +1749,9 @@ ], "description": "Export a session as a JSON string.", "x-side": "agent", - "x-method": "_goose/session/export" + "x-method": "_goose/unstable/session/export" }, - "ExportSessionResponse": { + "ExportSessionResponse_unstable": { "type": "object", "properties": { "data": { @@ -1763,9 +1763,9 @@ ], "description": "Export session response — raw JSON of the goose session with `conversation`.", "x-side": "agent", - "x-method": "_goose/session/export" + "x-method": "_goose/unstable/session/export" }, - "ImportSessionRequest": { + "ImportSessionRequest_unstable": { "type": "object", "properties": { "data": { @@ -1777,9 +1777,9 @@ ], "description": "Import a session from a JSON string.", "x-side": "agent", - "x-method": "_goose/session/import" + "x-method": "_goose/unstable/session/import" }, - "ImportSessionResponse": { + "ImportSessionResponse_unstable": { "type": "object", "properties": { "sessionId": { @@ -1808,9 +1808,9 @@ ], "description": "Import session response — metadata about the newly created session.", "x-side": "agent", - "x-method": "_goose/session/import" + "x-method": "_goose/unstable/session/import" }, - "UpdateSessionProjectRequest": { + "UpdateSessionProjectRequest_unstable": { "type": "object", "properties": { "sessionId": { @@ -1828,9 +1828,9 @@ ], "description": "Update the project association for a session.", "x-side": "agent", - "x-method": "_goose/session/update_project" + "x-method": "_goose/unstable/session/project/update" }, - "RenameSessionRequest": { + "RenameSessionRequest_unstable": { "type": "object", "properties": { "sessionId": { @@ -1846,9 +1846,9 @@ ], "description": "Rename a session.", "x-side": "agent", - "x-method": "_goose/session/rename" + "x-method": "_goose/unstable/session/rename" }, - "ArchiveSessionRequest": { + "ArchiveSessionRequest_unstable": { "type": "object", "properties": { "sessionId": { @@ -1860,9 +1860,9 @@ ], "description": "Archive a session (soft delete).", "x-side": "agent", - "x-method": "_goose/session/archive" + "x-method": "_goose/unstable/session/archive" }, - "UnarchiveSessionRequest": { + "UnarchiveSessionRequest_unstable": { "type": "object", "properties": { "sessionId": { @@ -1874,9 +1874,9 @@ ], "description": "Unarchive a previously archived session.", "x-side": "agent", - "x-method": "_goose/session/unarchive" + "x-method": "_goose/unstable/session/unarchive" }, - "CreateSourceRequest": { + "CreateSourceRequest_unstable": { "type": "object", "properties": { "type": { @@ -1891,22 +1891,8 @@ "content": { "type": "string" }, - "global": { - "type": "boolean" - }, - "projectDir": { - "type": [ - "string", - "null" - ], - "description": "Absolute path to the project root. Required when `global` is false." - }, - "projectId": { - "type": [ - "string", - "null" - ], - "description": "Project source ID. When set with `global: false`, the backend resolves\nthe project's first working directory automatically. Takes precedence\nover `project_dir`." + "target": { + "$ref": "#/$defs/SourceScope" }, "properties": { "type": "object", @@ -1919,11 +1905,11 @@ "name", "description", "content", - "global" + "target" ], "description": "Create a new source in an explicit target scope (global or project-scoped).", "x-side": "agent", - "x-method": "_goose/sources/create" + "x-method": "_goose/unstable/sources/create" }, "SourceType": { "type": "string", @@ -1937,7 +1923,56 @@ ], "description": "The type of source entity." }, - "CreateSourceResponse": { + "SourceScope": { + "oneOf": [ + { + "type": "object", + "properties": { + "scope": { + "type": "string", + "const": "global" + } + }, + "required": [ + "scope" + ] + }, + { + "type": "object", + "properties": { + "projectDir": { + "type": "string" + }, + "scope": { + "type": "string", + "const": "projectDir" + } + }, + "required": [ + "scope", + "projectDir" + ] + }, + { + "type": "object", + "properties": { + "projectId": { + "type": "string" + }, + "scope": { + "type": "string", + "const": "projectId" + } + }, + "required": [ + "scope", + "projectId" + ] + } + ], + "description": "Target scope for creating or importing sources." + }, + "CreateSourceResponse_unstable": { "type": "object", "properties": { "source": { @@ -1948,7 +1983,7 @@ "source" ], "x-side": "agent", - "x-method": "_goose/sources/create" + "x-method": "_goose/unstable/sources/create" }, "SourceEntry": { "type": "object", @@ -2001,7 +2036,7 @@ ], "description": "A source discovered by Goose. Filesystem sources use an on-disk path;\nbuilt-in sources use a stable synthetic path. Sources may be either\n`global` (shared across all projects) or project-specific." }, - "ListSourcesRequest": { + "ListSourcesRequest_unstable": { "type": "object", "properties": { "type": { @@ -2028,9 +2063,9 @@ }, "description": "List discovered sources.\n\nIf `type` is omitted or `skill`, this lists filesystem/plugin skills only.\nBoth global and project-scoped skills are included when `project_dir` is\nset. If `type` is `builtinSkill`, this lists shipped read-only built-in\nskills.", "x-side": "agent", - "x-method": "_goose/sources/list" + "x-method": "_goose/unstable/sources/list" }, - "ListSourcesResponse": { + "ListSourcesResponse_unstable": { "type": "object", "properties": { "sources": { @@ -2044,9 +2079,9 @@ "sources" ], "x-side": "agent", - "x-method": "_goose/sources/list" + "x-method": "_goose/unstable/sources/list" }, - "UpdateSourceRequest": { + "UpdateSourceRequest_unstable": { "type": "object", "properties": { "type": { @@ -2082,9 +2117,9 @@ ], "description": "Update an existing source's name, description, and content by absolute path.", "x-side": "agent", - "x-method": "_goose/sources/update" + "x-method": "_goose/unstable/sources/update" }, - "UpdateSourceResponse": { + "UpdateSourceResponse_unstable": { "type": "object", "properties": { "source": { @@ -2095,9 +2130,9 @@ "source" ], "x-side": "agent", - "x-method": "_goose/sources/update" + "x-method": "_goose/unstable/sources/update" }, - "DeleteSourceRequest": { + "DeleteSourceRequest_unstable": { "type": "object", "properties": { "type": { @@ -2113,9 +2148,9 @@ ], "description": "Delete a source and its on-disk directory by absolute path.", "x-side": "agent", - "x-method": "_goose/sources/delete" + "x-method": "_goose/unstable/sources/delete" }, - "ExportSourceRequest": { + "ExportSourceRequest_unstable": { "type": "object", "properties": { "type": { @@ -2131,9 +2166,9 @@ ], "description": "Export a source at an absolute path as a portable JSON payload.", "x-side": "agent", - "x-method": "_goose/sources/export" + "x-method": "_goose/unstable/sources/export" }, - "ExportSourceResponse": { + "ExportSourceResponse_unstable": { "type": "object", "properties": { "json": { @@ -2148,33 +2183,27 @@ "filename" ], "x-side": "agent", - "x-method": "_goose/sources/export" + "x-method": "_goose/unstable/sources/export" }, - "ImportSourcesRequest": { + "ImportSourcesRequest_unstable": { "type": "object", "properties": { "data": { "type": "string" }, - "global": { - "type": "boolean" - }, - "projectDir": { - "type": [ - "string", - "null" - ] + "target": { + "$ref": "#/$defs/SourceScope" } }, "required": [ "data", - "global" + "target" ], - "description": "Import a source from a JSON export payload produced by `_goose/sources/export`.\nThe imported source is written into the explicit target scope; on name\ncollisions a `-imported` suffix is appended.", + "description": "Import a source from a JSON export payload produced by `_goose/unstable/sources/export`.\nThe imported source is written into the explicit target scope; on name\ncollisions a `-imported` suffix is appended.", "x-side": "agent", - "x-method": "_goose/sources/import" + "x-method": "_goose/unstable/sources/import" }, - "ImportSourcesResponse": { + "ImportSourcesResponse_unstable": { "type": "object", "properties": { "sources": { @@ -2188,9 +2217,9 @@ "sources" ], "x-side": "agent", - "x-method": "_goose/sources/import" + "x-method": "_goose/unstable/sources/import" }, - "DictationTranscribeRequest": { + "DictationTranscribeRequest_unstable": { "type": "object", "properties": { "audio": { @@ -2213,9 +2242,9 @@ ], "description": "Transcribe audio via a dictation provider.", "x-side": "agent", - "x-method": "_goose/dictation/transcribe" + "x-method": "_goose/unstable/dictation/transcribe" }, - "DictationTranscribeResponse": { + "DictationTranscribeResponse_unstable": { "type": "object", "properties": { "text": { @@ -2227,15 +2256,15 @@ ], "description": "Transcription result.", "x-side": "agent", - "x-method": "_goose/dictation/transcribe" + "x-method": "_goose/unstable/dictation/transcribe" }, - "DictationConfigRequest": { + "DictationConfigRequest_unstable": { "type": "object", "description": "Get the configuration status of all dictation providers.", "x-side": "agent", - "x-method": "_goose/dictation/config" + "x-method": "_goose/unstable/dictation/config" }, - "DictationConfigResponse": { + "DictationConfigResponse_unstable": { "type": "object", "properties": { "providers": { @@ -2250,7 +2279,7 @@ ], "description": "Dictation config response — map of provider name to status.", "x-side": "agent", - "x-method": "_goose/dictation/config" + "x-method": "_goose/unstable/dictation/config" }, "DictationProviderStatusEntry": { "type": "object", @@ -2334,7 +2363,7 @@ "description" ] }, - "DictationSecretSaveRequest": { + "DictationSecretSaveRequest_unstable": { "type": "object", "properties": { "provider": { @@ -2350,9 +2379,9 @@ ], "description": "Set a dictation provider secret value.", "x-side": "agent", - "x-method": "_goose/dictation/secret/save" + "x-method": "_goose/unstable/dictation/secret/save" }, - "DictationSecretDeleteRequest": { + "DictationSecretDeleteRequest_unstable": { "type": "object", "properties": { "provider": { @@ -2364,15 +2393,15 @@ ], "description": "Remove a dictation provider secret value.", "x-side": "agent", - "x-method": "_goose/dictation/secret/delete" + "x-method": "_goose/unstable/dictation/secret/delete" }, - "DictationModelsListRequest": { + "DictationModelsListRequest_unstable": { "type": "object", "description": "List available local Whisper models with their download status.", "x-side": "agent", - "x-method": "_goose/dictation/models/list" + "x-method": "_goose/unstable/dictation/models/list" }, - "DictationModelsListResponse": { + "DictationModelsListResponse_unstable": { "type": "object", "properties": { "models": { @@ -2386,7 +2415,7 @@ "models" ], "x-side": "agent", - "x-method": "_goose/dictation/models/list" + "x-method": "_goose/unstable/dictation/models/list" }, "DictationLocalModelStatus": { "type": "object", @@ -2420,7 +2449,7 @@ "downloadInProgress" ] }, - "DictationModelDownloadRequest": { + "DictationModelDownloadRequest_unstable": { "type": "object", "properties": { "modelId": { @@ -2432,9 +2461,9 @@ ], "description": "Kick off a background download of a local Whisper model.", "x-side": "agent", - "x-method": "_goose/dictation/models/download" + "x-method": "_goose/unstable/dictation/models/download" }, - "DictationModelDownloadProgressRequest": { + "DictationModelDownloadProgressRequest_unstable": { "type": "object", "properties": { "modelId": { @@ -2446,9 +2475,9 @@ ], "description": "Poll the progress of an in-flight download.", "x-side": "agent", - "x-method": "_goose/dictation/models/download/progress" + "x-method": "_goose/unstable/dictation/models/download/progress" }, - "DictationModelDownloadProgressResponse": { + "DictationModelDownloadProgressResponse_unstable": { "type": "object", "properties": { "progress": { @@ -2464,7 +2493,7 @@ } }, "x-side": "agent", - "x-method": "_goose/dictation/models/download/progress" + "x-method": "_goose/unstable/dictation/models/download/progress" }, "DictationDownloadProgress": { "type": "object", @@ -2499,7 +2528,7 @@ "status" ] }, - "DictationModelCancelRequest": { + "DictationModelCancelRequest_unstable": { "type": "object", "properties": { "modelId": { @@ -2511,9 +2540,9 @@ ], "description": "Cancel an in-flight download.", "x-side": "agent", - "x-method": "_goose/dictation/models/cancel" + "x-method": "_goose/unstable/dictation/models/cancel" }, - "DictationModelDeleteRequest": { + "DictationModelDeleteRequest_unstable": { "type": "object", "properties": { "modelId": { @@ -2525,9 +2554,9 @@ ], "description": "Delete a downloaded local Whisper model from disk.", "x-side": "agent", - "x-method": "_goose/dictation/models/delete" + "x-method": "_goose/unstable/dictation/models/delete" }, - "DictationModelSelectRequest": { + "DictationModelSelectRequest_unstable": { "type": "object", "properties": { "provider": { @@ -2543,7 +2572,7 @@ ], "description": "Persist the user's model selection for a given provider.", "x-side": "agent", - "x-method": "_goose/dictation/model/select" + "x-method": "_goose/unstable/dictation/models/select" }, "ExtRequest": { "properties": { @@ -2560,56 +2589,56 @@ { "allOf": [ { - "$ref": "#/$defs/AddExtensionRequest" + "$ref": "#/$defs/AddExtensionRequest_unstable" } ], - "description": "Params for _goose/extensions/add", - "title": "AddExtensionRequest" + "description": "Params for _goose/unstable/session/extensions/add", + "title": "AddExtensionRequest_unstable" }, { "allOf": [ { - "$ref": "#/$defs/RemoveExtensionRequest" + "$ref": "#/$defs/RemoveExtensionRequest_unstable" } ], - "description": "Params for _goose/extensions/remove", - "title": "RemoveExtensionRequest" + "description": "Params for _goose/unstable/session/extensions/remove", + "title": "RemoveExtensionRequest_unstable" }, { "allOf": [ { - "$ref": "#/$defs/GetToolsRequest" + "$ref": "#/$defs/GetToolsRequest_unstable" } ], - "description": "Params for _goose/tools", - "title": "GetToolsRequest" + "description": "Params for _goose/unstable/tools/list", + "title": "GetToolsRequest_unstable" }, { "allOf": [ { - "$ref": "#/$defs/GooseToolCallRequest" + "$ref": "#/$defs/GooseToolCallRequest_unstable" } ], - "description": "Params for _goose/tool/call", - "title": "GooseToolCallRequest" + "description": "Params for _goose/unstable/tools/call", + "title": "GooseToolCallRequest_unstable" }, { "allOf": [ { - "$ref": "#/$defs/ReadResourceRequest" + "$ref": "#/$defs/ReadResourceRequest_unstable" } ], - "description": "Params for _goose/resource/read", - "title": "ReadResourceRequest" + "description": "Params for _goose/unstable/resources/read", + "title": "ReadResourceRequest_unstable" }, { "allOf": [ { - "$ref": "#/$defs/UpdateWorkingDirRequest" + "$ref": "#/$defs/UpdateWorkingDirRequest_unstable" } ], - "description": "Params for _goose/working_dir/update", - "title": "UpdateWorkingDirRequest" + "description": "Params for _goose/unstable/session/working-dir/update", + "title": "UpdateWorkingDirRequest_unstable" }, { "allOf": [ @@ -2623,434 +2652,434 @@ { "allOf": [ { - "$ref": "#/$defs/GetExtensionsRequest" + "$ref": "#/$defs/GetExtensionsRequest_unstable" } ], - "description": "Params for _goose/config/extensions", - "title": "GetExtensionsRequest" + "description": "Params for _goose/unstable/config/extensions/list", + "title": "GetExtensionsRequest_unstable" }, { "allOf": [ { - "$ref": "#/$defs/AddConfigExtensionRequest" + "$ref": "#/$defs/AddConfigExtensionRequest_unstable" } ], - "description": "Params for _goose/config/extensions/add", - "title": "AddConfigExtensionRequest" + "description": "Params for _goose/unstable/config/extensions/add", + "title": "AddConfigExtensionRequest_unstable" }, { "allOf": [ { - "$ref": "#/$defs/RemoveConfigExtensionRequest" + "$ref": "#/$defs/RemoveConfigExtensionRequest_unstable" } ], - "description": "Params for _goose/config/extensions/remove", - "title": "RemoveConfigExtensionRequest" + "description": "Params for _goose/unstable/config/extensions/remove", + "title": "RemoveConfigExtensionRequest_unstable" }, { "allOf": [ { - "$ref": "#/$defs/ToggleConfigExtensionRequest" + "$ref": "#/$defs/ToggleConfigExtensionRequest_unstable" } ], - "description": "Params for _goose/config/extensions/toggle", - "title": "ToggleConfigExtensionRequest" + "description": "Params for _goose/unstable/config/extensions/toggle", + "title": "ToggleConfigExtensionRequest_unstable" }, { "allOf": [ { - "$ref": "#/$defs/GetSessionExtensionsRequest" + "$ref": "#/$defs/GetSessionExtensionsRequest_unstable" } ], - "description": "Params for _goose/session/extensions", - "title": "GetSessionExtensionsRequest" + "description": "Params for _goose/unstable/session/extensions/list", + "title": "GetSessionExtensionsRequest_unstable" }, { "allOf": [ { - "$ref": "#/$defs/ListProvidersRequest" + "$ref": "#/$defs/ListProvidersRequest_unstable" } ], - "description": "Params for _goose/providers/list", - "title": "ListProvidersRequest" + "description": "Params for _goose/unstable/providers/list", + "title": "ListProvidersRequest_unstable" }, { "allOf": [ { - "$ref": "#/$defs/ProviderCatalogListRequest" + "$ref": "#/$defs/ProviderCatalogListRequest_unstable" } ], - "description": "Params for _goose/providers/catalog/list", - "title": "ProviderCatalogListRequest" + "description": "Params for _goose/unstable/providers/catalog/list", + "title": "ProviderCatalogListRequest_unstable" }, { "allOf": [ { - "$ref": "#/$defs/ProviderSetupCatalogListRequest" + "$ref": "#/$defs/ProviderSetupCatalogListRequest_unstable" } ], - "description": "Params for _goose/providers/setup/catalog/list", - "title": "ProviderSetupCatalogListRequest" + "description": "Params for _goose/unstable/providers/setup/catalog/list", + "title": "ProviderSetupCatalogListRequest_unstable" }, { "allOf": [ { - "$ref": "#/$defs/ProviderCatalogTemplateRequest" + "$ref": "#/$defs/ProviderCatalogTemplateRequest_unstable" } ], - "description": "Params for _goose/providers/catalog/template", - "title": "ProviderCatalogTemplateRequest" + "description": "Params for _goose/unstable/providers/catalog/template", + "title": "ProviderCatalogTemplateRequest_unstable" }, { "allOf": [ { - "$ref": "#/$defs/CustomProviderCreateRequest" + "$ref": "#/$defs/CustomProviderCreateRequest_unstable" } ], - "description": "Params for _goose/providers/custom/create", - "title": "CustomProviderCreateRequest" + "description": "Params for _goose/unstable/providers/custom/create", + "title": "CustomProviderCreateRequest_unstable" }, { "allOf": [ { - "$ref": "#/$defs/CustomProviderReadRequest" + "$ref": "#/$defs/CustomProviderReadRequest_unstable" } ], - "description": "Params for _goose/providers/custom/read", - "title": "CustomProviderReadRequest" + "description": "Params for _goose/unstable/providers/custom/read", + "title": "CustomProviderReadRequest_unstable" }, { "allOf": [ { - "$ref": "#/$defs/CustomProviderUpdateRequest" + "$ref": "#/$defs/CustomProviderUpdateRequest_unstable" } ], - "description": "Params for _goose/providers/custom/update", - "title": "CustomProviderUpdateRequest" + "description": "Params for _goose/unstable/providers/custom/update", + "title": "CustomProviderUpdateRequest_unstable" }, { "allOf": [ { - "$ref": "#/$defs/CustomProviderDeleteRequest" + "$ref": "#/$defs/CustomProviderDeleteRequest_unstable" } ], - "description": "Params for _goose/providers/custom/delete", - "title": "CustomProviderDeleteRequest" + "description": "Params for _goose/unstable/providers/custom/delete", + "title": "CustomProviderDeleteRequest_unstable" }, { "allOf": [ { - "$ref": "#/$defs/RefreshProviderInventoryRequest" + "$ref": "#/$defs/RefreshProviderInventoryRequest_unstable" } ], - "description": "Params for _goose/providers/inventory/refresh", - "title": "RefreshProviderInventoryRequest" + "description": "Params for _goose/unstable/providers/inventory/refresh", + "title": "RefreshProviderInventoryRequest_unstable" }, { "allOf": [ { - "$ref": "#/$defs/ProviderConfigReadRequest" + "$ref": "#/$defs/ProviderConfigReadRequest_unstable" } ], - "description": "Params for _goose/providers/config/read", - "title": "ProviderConfigReadRequest" + "description": "Params for _goose/unstable/providers/config/read", + "title": "ProviderConfigReadRequest_unstable" }, { "allOf": [ { - "$ref": "#/$defs/ProviderConfigStatusRequest" + "$ref": "#/$defs/ProviderConfigStatusRequest_unstable" } ], - "description": "Params for _goose/providers/config/status", - "title": "ProviderConfigStatusRequest" + "description": "Params for _goose/unstable/providers/config/status", + "title": "ProviderConfigStatusRequest_unstable" }, { "allOf": [ { - "$ref": "#/$defs/ProviderConfigSaveRequest" + "$ref": "#/$defs/ProviderConfigSaveRequest_unstable" } ], - "description": "Params for _goose/providers/config/save", - "title": "ProviderConfigSaveRequest" + "description": "Params for _goose/unstable/providers/config/save", + "title": "ProviderConfigSaveRequest_unstable" }, { "allOf": [ { - "$ref": "#/$defs/ProviderConfigDeleteRequest" + "$ref": "#/$defs/ProviderConfigDeleteRequest_unstable" } ], - "description": "Params for _goose/providers/config/delete", - "title": "ProviderConfigDeleteRequest" + "description": "Params for _goose/unstable/providers/config/delete", + "title": "ProviderConfigDeleteRequest_unstable" }, { "allOf": [ { - "$ref": "#/$defs/ProviderConfigAuthenticateRequest" + "$ref": "#/$defs/ProviderConfigAuthenticateRequest_unstable" } ], - "description": "Params for _goose/providers/config/authenticate", - "title": "ProviderConfigAuthenticateRequest" + "description": "Params for _goose/unstable/providers/config/authenticate", + "title": "ProviderConfigAuthenticateRequest_unstable" }, { "allOf": [ { - "$ref": "#/$defs/PreferencesReadRequest" + "$ref": "#/$defs/PreferencesReadRequest_unstable" } ], - "description": "Params for _goose/preferences/read", - "title": "PreferencesReadRequest" + "description": "Params for _goose/unstable/preferences/read", + "title": "PreferencesReadRequest_unstable" }, { "allOf": [ { - "$ref": "#/$defs/PreferencesSaveRequest" + "$ref": "#/$defs/PreferencesSaveRequest_unstable" } ], - "description": "Params for _goose/preferences/save", - "title": "PreferencesSaveRequest" + "description": "Params for _goose/unstable/preferences/save", + "title": "PreferencesSaveRequest_unstable" }, { "allOf": [ { - "$ref": "#/$defs/PreferencesRemoveRequest" + "$ref": "#/$defs/PreferencesRemoveRequest_unstable" } ], - "description": "Params for _goose/preferences/remove", - "title": "PreferencesRemoveRequest" + "description": "Params for _goose/unstable/preferences/remove", + "title": "PreferencesRemoveRequest_unstable" }, { "allOf": [ { - "$ref": "#/$defs/DefaultsReadRequest" + "$ref": "#/$defs/DefaultsReadRequest_unstable" } ], - "description": "Params for _goose/defaults/read", - "title": "DefaultsReadRequest" + "description": "Params for _goose/unstable/defaults/read", + "title": "DefaultsReadRequest_unstable" }, { "allOf": [ { - "$ref": "#/$defs/DefaultsSaveRequest" + "$ref": "#/$defs/DefaultsSaveRequest_unstable" } ], - "description": "Params for _goose/defaults/save", - "title": "DefaultsSaveRequest" + "description": "Params for _goose/unstable/defaults/save", + "title": "DefaultsSaveRequest_unstable" }, { "allOf": [ { - "$ref": "#/$defs/OnboardingImportScanRequest" + "$ref": "#/$defs/OnboardingImportScanRequest_unstable" } ], - "description": "Params for _goose/onboarding/import/scan", - "title": "OnboardingImportScanRequest" + "description": "Params for _goose/unstable/onboarding/import/scan", + "title": "OnboardingImportScanRequest_unstable" }, { "allOf": [ { - "$ref": "#/$defs/OnboardingImportApplyRequest" + "$ref": "#/$defs/OnboardingImportApplyRequest_unstable" } ], - "description": "Params for _goose/onboarding/import/apply", - "title": "OnboardingImportApplyRequest" + "description": "Params for _goose/unstable/onboarding/import/apply", + "title": "OnboardingImportApplyRequest_unstable" }, { "allOf": [ { - "$ref": "#/$defs/ExportSessionRequest" + "$ref": "#/$defs/ExportSessionRequest_unstable" } ], - "description": "Params for _goose/session/export", - "title": "ExportSessionRequest" + "description": "Params for _goose/unstable/session/export", + "title": "ExportSessionRequest_unstable" }, { "allOf": [ { - "$ref": "#/$defs/ImportSessionRequest" + "$ref": "#/$defs/ImportSessionRequest_unstable" } ], - "description": "Params for _goose/session/import", - "title": "ImportSessionRequest" + "description": "Params for _goose/unstable/session/import", + "title": "ImportSessionRequest_unstable" }, { "allOf": [ { - "$ref": "#/$defs/UpdateSessionProjectRequest" + "$ref": "#/$defs/UpdateSessionProjectRequest_unstable" } ], - "description": "Params for _goose/session/update_project", - "title": "UpdateSessionProjectRequest" + "description": "Params for _goose/unstable/session/project/update", + "title": "UpdateSessionProjectRequest_unstable" }, { "allOf": [ { - "$ref": "#/$defs/RenameSessionRequest" + "$ref": "#/$defs/RenameSessionRequest_unstable" } ], - "description": "Params for _goose/session/rename", - "title": "RenameSessionRequest" + "description": "Params for _goose/unstable/session/rename", + "title": "RenameSessionRequest_unstable" }, { "allOf": [ { - "$ref": "#/$defs/ArchiveSessionRequest" + "$ref": "#/$defs/ArchiveSessionRequest_unstable" } ], - "description": "Params for _goose/session/archive", - "title": "ArchiveSessionRequest" + "description": "Params for _goose/unstable/session/archive", + "title": "ArchiveSessionRequest_unstable" }, { "allOf": [ { - "$ref": "#/$defs/UnarchiveSessionRequest" + "$ref": "#/$defs/UnarchiveSessionRequest_unstable" } ], - "description": "Params for _goose/session/unarchive", - "title": "UnarchiveSessionRequest" + "description": "Params for _goose/unstable/session/unarchive", + "title": "UnarchiveSessionRequest_unstable" }, { "allOf": [ { - "$ref": "#/$defs/CreateSourceRequest" + "$ref": "#/$defs/CreateSourceRequest_unstable" } ], - "description": "Params for _goose/sources/create", - "title": "CreateSourceRequest" + "description": "Params for _goose/unstable/sources/create", + "title": "CreateSourceRequest_unstable" }, { "allOf": [ { - "$ref": "#/$defs/ListSourcesRequest" + "$ref": "#/$defs/ListSourcesRequest_unstable" } ], - "description": "Params for _goose/sources/list", - "title": "ListSourcesRequest" + "description": "Params for _goose/unstable/sources/list", + "title": "ListSourcesRequest_unstable" }, { "allOf": [ { - "$ref": "#/$defs/UpdateSourceRequest" + "$ref": "#/$defs/UpdateSourceRequest_unstable" } ], - "description": "Params for _goose/sources/update", - "title": "UpdateSourceRequest" + "description": "Params for _goose/unstable/sources/update", + "title": "UpdateSourceRequest_unstable" }, { "allOf": [ { - "$ref": "#/$defs/DeleteSourceRequest" + "$ref": "#/$defs/DeleteSourceRequest_unstable" } ], - "description": "Params for _goose/sources/delete", - "title": "DeleteSourceRequest" + "description": "Params for _goose/unstable/sources/delete", + "title": "DeleteSourceRequest_unstable" }, { "allOf": [ { - "$ref": "#/$defs/ExportSourceRequest" + "$ref": "#/$defs/ExportSourceRequest_unstable" } ], - "description": "Params for _goose/sources/export", - "title": "ExportSourceRequest" + "description": "Params for _goose/unstable/sources/export", + "title": "ExportSourceRequest_unstable" }, { "allOf": [ { - "$ref": "#/$defs/ImportSourcesRequest" + "$ref": "#/$defs/ImportSourcesRequest_unstable" } ], - "description": "Params for _goose/sources/import", - "title": "ImportSourcesRequest" + "description": "Params for _goose/unstable/sources/import", + "title": "ImportSourcesRequest_unstable" }, { "allOf": [ { - "$ref": "#/$defs/DictationTranscribeRequest" + "$ref": "#/$defs/DictationTranscribeRequest_unstable" } ], - "description": "Params for _goose/dictation/transcribe", - "title": "DictationTranscribeRequest" + "description": "Params for _goose/unstable/dictation/transcribe", + "title": "DictationTranscribeRequest_unstable" }, { "allOf": [ { - "$ref": "#/$defs/DictationConfigRequest" + "$ref": "#/$defs/DictationConfigRequest_unstable" } ], - "description": "Params for _goose/dictation/config", - "title": "DictationConfigRequest" + "description": "Params for _goose/unstable/dictation/config", + "title": "DictationConfigRequest_unstable" }, { "allOf": [ { - "$ref": "#/$defs/DictationSecretSaveRequest" + "$ref": "#/$defs/DictationSecretSaveRequest_unstable" } ], - "description": "Params for _goose/dictation/secret/save", - "title": "DictationSecretSaveRequest" + "description": "Params for _goose/unstable/dictation/secret/save", + "title": "DictationSecretSaveRequest_unstable" }, { "allOf": [ { - "$ref": "#/$defs/DictationSecretDeleteRequest" + "$ref": "#/$defs/DictationSecretDeleteRequest_unstable" } ], - "description": "Params for _goose/dictation/secret/delete", - "title": "DictationSecretDeleteRequest" + "description": "Params for _goose/unstable/dictation/secret/delete", + "title": "DictationSecretDeleteRequest_unstable" }, { "allOf": [ { - "$ref": "#/$defs/DictationModelsListRequest" + "$ref": "#/$defs/DictationModelsListRequest_unstable" } ], - "description": "Params for _goose/dictation/models/list", - "title": "DictationModelsListRequest" + "description": "Params for _goose/unstable/dictation/models/list", + "title": "DictationModelsListRequest_unstable" }, { "allOf": [ { - "$ref": "#/$defs/DictationModelDownloadRequest" + "$ref": "#/$defs/DictationModelDownloadRequest_unstable" } ], - "description": "Params for _goose/dictation/models/download", - "title": "DictationModelDownloadRequest" + "description": "Params for _goose/unstable/dictation/models/download", + "title": "DictationModelDownloadRequest_unstable" }, { "allOf": [ { - "$ref": "#/$defs/DictationModelDownloadProgressRequest" + "$ref": "#/$defs/DictationModelDownloadProgressRequest_unstable" } ], - "description": "Params for _goose/dictation/models/download/progress", - "title": "DictationModelDownloadProgressRequest" + "description": "Params for _goose/unstable/dictation/models/download/progress", + "title": "DictationModelDownloadProgressRequest_unstable" }, { "allOf": [ { - "$ref": "#/$defs/DictationModelCancelRequest" + "$ref": "#/$defs/DictationModelCancelRequest_unstable" } ], - "description": "Params for _goose/dictation/models/cancel", - "title": "DictationModelCancelRequest" + "description": "Params for _goose/unstable/dictation/models/cancel", + "title": "DictationModelCancelRequest_unstable" }, { "allOf": [ { - "$ref": "#/$defs/DictationModelDeleteRequest" + "$ref": "#/$defs/DictationModelDeleteRequest_unstable" } ], - "description": "Params for _goose/dictation/models/delete", - "title": "DictationModelDeleteRequest" + "description": "Params for _goose/unstable/dictation/models/delete", + "title": "DictationModelDeleteRequest_unstable" }, { "allOf": [ { - "$ref": "#/$defs/DictationModelSelectRequest" + "$ref": "#/$defs/DictationModelSelectRequest_unstable" } ], - "description": "Params for _goose/dictation/model/select", - "title": "DictationModelSelectRequest" + "description": "Params for _goose/unstable/dictation/models/select", + "title": "DictationModelSelectRequest_unstable" } ] }, @@ -3093,258 +3122,258 @@ { "allOf": [ { - "$ref": "#/$defs/GetToolsResponse" + "$ref": "#/$defs/GetToolsResponse_unstable" } ], - "title": "GetToolsResponse" + "title": "GetToolsResponse_unstable" }, { "allOf": [ { - "$ref": "#/$defs/GooseToolCallResponse" + "$ref": "#/$defs/GooseToolCallResponse_unstable" } ], - "title": "GooseToolCallResponse" + "title": "GooseToolCallResponse_unstable" }, { "allOf": [ { - "$ref": "#/$defs/ReadResourceResponse" + "$ref": "#/$defs/ReadResourceResponse_unstable" } ], - "title": "ReadResourceResponse" + "title": "ReadResourceResponse_unstable" }, { "allOf": [ { - "$ref": "#/$defs/GetExtensionsResponse" + "$ref": "#/$defs/GetExtensionsResponse_unstable" } ], - "title": "GetExtensionsResponse" + "title": "GetExtensionsResponse_unstable" }, { "allOf": [ { - "$ref": "#/$defs/GetSessionExtensionsResponse" + "$ref": "#/$defs/GetSessionExtensionsResponse_unstable" } ], - "title": "GetSessionExtensionsResponse" + "title": "GetSessionExtensionsResponse_unstable" }, { "allOf": [ { - "$ref": "#/$defs/ListProvidersResponse" + "$ref": "#/$defs/ListProvidersResponse_unstable" } ], - "title": "ListProvidersResponse" + "title": "ListProvidersResponse_unstable" }, { "allOf": [ { - "$ref": "#/$defs/ProviderCatalogListResponse" + "$ref": "#/$defs/ProviderCatalogListResponse_unstable" } ], - "title": "ProviderCatalogListResponse" + "title": "ProviderCatalogListResponse_unstable" }, { "allOf": [ { - "$ref": "#/$defs/ProviderSetupCatalogListResponse" + "$ref": "#/$defs/ProviderSetupCatalogListResponse_unstable" } ], - "title": "ProviderSetupCatalogListResponse" + "title": "ProviderSetupCatalogListResponse_unstable" }, { "allOf": [ { - "$ref": "#/$defs/ProviderCatalogTemplateResponse" + "$ref": "#/$defs/ProviderCatalogTemplateResponse_unstable" } ], - "title": "ProviderCatalogTemplateResponse" + "title": "ProviderCatalogTemplateResponse_unstable" }, { "allOf": [ { - "$ref": "#/$defs/CustomProviderCreateResponse" + "$ref": "#/$defs/CustomProviderCreateResponse_unstable" } ], - "title": "CustomProviderCreateResponse" + "title": "CustomProviderCreateResponse_unstable" }, { "allOf": [ { - "$ref": "#/$defs/CustomProviderReadResponse" + "$ref": "#/$defs/CustomProviderReadResponse_unstable" } ], - "title": "CustomProviderReadResponse" + "title": "CustomProviderReadResponse_unstable" }, { "allOf": [ { - "$ref": "#/$defs/CustomProviderUpdateResponse" + "$ref": "#/$defs/CustomProviderUpdateResponse_unstable" } ], - "title": "CustomProviderUpdateResponse" + "title": "CustomProviderUpdateResponse_unstable" }, { "allOf": [ { - "$ref": "#/$defs/CustomProviderDeleteResponse" + "$ref": "#/$defs/CustomProviderDeleteResponse_unstable" } ], - "title": "CustomProviderDeleteResponse" + "title": "CustomProviderDeleteResponse_unstable" }, { "allOf": [ { - "$ref": "#/$defs/RefreshProviderInventoryResponse" + "$ref": "#/$defs/RefreshProviderInventoryResponse_unstable" } ], - "title": "RefreshProviderInventoryResponse" + "title": "RefreshProviderInventoryResponse_unstable" }, { "allOf": [ { - "$ref": "#/$defs/ProviderConfigReadResponse" + "$ref": "#/$defs/ProviderConfigReadResponse_unstable" } ], - "title": "ProviderConfigReadResponse" + "title": "ProviderConfigReadResponse_unstable" }, { "allOf": [ { - "$ref": "#/$defs/ProviderConfigStatusResponse" + "$ref": "#/$defs/ProviderConfigStatusResponse_unstable" } ], - "title": "ProviderConfigStatusResponse" + "title": "ProviderConfigStatusResponse_unstable" }, { "allOf": [ { - "$ref": "#/$defs/ProviderConfigChangeResponse" + "$ref": "#/$defs/ProviderConfigChangeResponse_unstable" } ], - "title": "ProviderConfigChangeResponse" + "title": "ProviderConfigChangeResponse_unstable" }, { "allOf": [ { - "$ref": "#/$defs/PreferencesReadResponse" + "$ref": "#/$defs/PreferencesReadResponse_unstable" } ], - "title": "PreferencesReadResponse" + "title": "PreferencesReadResponse_unstable" }, { "allOf": [ { - "$ref": "#/$defs/DefaultsReadResponse" + "$ref": "#/$defs/DefaultsReadResponse_unstable" } ], - "title": "DefaultsReadResponse" + "title": "DefaultsReadResponse_unstable" }, { "allOf": [ { - "$ref": "#/$defs/OnboardingImportScanResponse" + "$ref": "#/$defs/OnboardingImportScanResponse_unstable" } ], - "title": "OnboardingImportScanResponse" + "title": "OnboardingImportScanResponse_unstable" }, { "allOf": [ { - "$ref": "#/$defs/OnboardingImportApplyResponse" + "$ref": "#/$defs/OnboardingImportApplyResponse_unstable" } ], - "title": "OnboardingImportApplyResponse" + "title": "OnboardingImportApplyResponse_unstable" }, { "allOf": [ { - "$ref": "#/$defs/ExportSessionResponse" + "$ref": "#/$defs/ExportSessionResponse_unstable" } ], - "title": "ExportSessionResponse" + "title": "ExportSessionResponse_unstable" }, { "allOf": [ { - "$ref": "#/$defs/ImportSessionResponse" + "$ref": "#/$defs/ImportSessionResponse_unstable" } ], - "title": "ImportSessionResponse" + "title": "ImportSessionResponse_unstable" }, { "allOf": [ { - "$ref": "#/$defs/CreateSourceResponse" + "$ref": "#/$defs/CreateSourceResponse_unstable" } ], - "title": "CreateSourceResponse" + "title": "CreateSourceResponse_unstable" }, { "allOf": [ { - "$ref": "#/$defs/ListSourcesResponse" + "$ref": "#/$defs/ListSourcesResponse_unstable" } ], - "title": "ListSourcesResponse" + "title": "ListSourcesResponse_unstable" }, { "allOf": [ { - "$ref": "#/$defs/UpdateSourceResponse" + "$ref": "#/$defs/UpdateSourceResponse_unstable" } ], - "title": "UpdateSourceResponse" + "title": "UpdateSourceResponse_unstable" }, { "allOf": [ { - "$ref": "#/$defs/ExportSourceResponse" + "$ref": "#/$defs/ExportSourceResponse_unstable" } ], - "title": "ExportSourceResponse" + "title": "ExportSourceResponse_unstable" }, { "allOf": [ { - "$ref": "#/$defs/ImportSourcesResponse" + "$ref": "#/$defs/ImportSourcesResponse_unstable" } ], - "title": "ImportSourcesResponse" + "title": "ImportSourcesResponse_unstable" }, { "allOf": [ { - "$ref": "#/$defs/DictationTranscribeResponse" + "$ref": "#/$defs/DictationTranscribeResponse_unstable" } ], - "title": "DictationTranscribeResponse" + "title": "DictationTranscribeResponse_unstable" }, { "allOf": [ { - "$ref": "#/$defs/DictationConfigResponse" + "$ref": "#/$defs/DictationConfigResponse_unstable" } ], - "title": "DictationConfigResponse" + "title": "DictationConfigResponse_unstable" }, { "allOf": [ { - "$ref": "#/$defs/DictationModelsListResponse" + "$ref": "#/$defs/DictationModelsListResponse_unstable" } ], - "title": "DictationModelsListResponse" + "title": "DictationModelsListResponse_unstable" }, { "allOf": [ { - "$ref": "#/$defs/DictationModelDownloadProgressResponse" + "$ref": "#/$defs/DictationModelDownloadProgressResponse_unstable" } ], - "title": "DictationModelDownloadProgressResponse" + "title": "DictationModelDownloadProgressResponse_unstable" } ] }, diff --git a/crates/goose/src/acp/server/sources.rs b/crates/goose/src/acp/server/sources.rs index 9360e7e415..826e3e3c88 100644 --- a/crates/goose/src/acp/server/sources.rs +++ b/crates/goose/src/acp/server/sources.rs @@ -5,24 +5,13 @@ impl GooseAcpAgent { &self, req: CreateSourceRequest, ) -> Result { - let project_dir = match (&req.project_id, &req.project_dir) { - (Some(pid), _) if !req.global => { - let dirs = crate::sources::project_working_dirs(pid); - Some(dirs.into_iter().next().ok_or_else(|| { - agent_client_protocol::Error::invalid_params().data(format!( - "Project \"{pid}\" has no working directories configured" - )) - })?) - } - (_, Some(pd)) => Some(pd.clone()), - _ => None, - }; + let (global, project_dir) = resolve_source_scope(&req.target)?; let source = crate::sources::create_source( req.source_type, &req.name, &req.description, &req.content, - req.global, + global, project_dir.as_deref(), req.properties, )?; @@ -88,8 +77,26 @@ impl GooseAcpAgent { &self, req: ImportSourcesRequest, ) -> Result { - let sources = - crate::sources::import_sources(&req.data, req.global, req.project_dir.as_deref())?; + let (global, project_dir) = resolve_source_scope(&req.target)?; + let sources = crate::sources::import_sources(&req.data, global, project_dir.as_deref())?; Ok(ImportSourcesResponse { sources }) } } + +fn resolve_source_scope( + target: &SourceScope, +) -> Result<(bool, Option), agent_client_protocol::Error> { + match target { + SourceScope::Global => Ok((true, None)), + SourceScope::ProjectDir { project_dir } => Ok((false, Some(project_dir.clone()))), + SourceScope::ProjectId { project_id } => { + let dirs = crate::sources::project_working_dirs(project_id); + let project_dir = dirs.into_iter().next().ok_or_else(|| { + agent_client_protocol::Error::invalid_params().data(format!( + "Project \"{project_id}\" has no working directories configured" + )) + })?; + Ok((false, Some(project_dir))) + } + } +} diff --git a/crates/goose/src/bin/generate_acp_schema.rs b/crates/goose/src/bin/generate_acp_schema.rs index 070d9d74e7..905dacb1a1 100644 --- a/crates/goose/src/bin/generate_acp_schema.rs +++ b/crates/goose/src/bin/generate_acp_schema.rs @@ -35,6 +35,32 @@ fn main() { } } + let unstable_type_names: BTreeSet = type_methods + .iter() + .filter_map(|(name, methods_list)| { + if methods_list.iter().all(|method| is_unstable_method(method)) { + Some(name.clone()) + } else { + None + } + }) + .collect(); + + for def in defs.values_mut() { + rewrite_unstable_schema_refs(def, &unstable_type_names); + } + + let mut renamed_defs = Map::new(); + for (name, def) in defs { + let generated_name = generated_type_name(&name, &unstable_type_names); + let previous = renamed_defs.insert(generated_name.clone(), def); + assert!( + previous.is_none(), + "duplicate schema definition name after unstable suffix: {generated_name}" + ); + } + let mut defs = renamed_defs; + // Replace `true` with `{}` throughout $defs. Both mean "accept any value" in // JSON Schema, but many TS codegen tools (e.g. @hey-api/openapi-ts Zod plugin) // silently drop properties whose schema is the bare `true` literal. @@ -49,7 +75,8 @@ fn main() { // Annotate $defs entries with x-method/x-side. Only set x-method for types // used by exactly one method (shared types like EmptyResponse skip x-method). for (name, methods_list) in &type_methods { - if let Some(def) = defs.get_mut(name) { + let generated_name = generated_type_name(name, &unstable_type_names); + if let Some(def) = defs.get_mut(&generated_name) { if let Some(obj) = def.as_object_mut() { obj.insert("x-side".into(), json!("agent")); if methods_list.len() == 1 { @@ -67,18 +94,20 @@ fn main() { for m in &methods { if let Some(name) = &m.params_type_name { + let generated_name = generated_type_name(name, &unstable_type_names); request_variants.push(json!({ - "allOf": [{ "$ref": format!("#/$defs/{name}") }], + "allOf": [{ "$ref": format!("#/$defs/{generated_name}") }], "description": format!("Params for {}", m.method), - "title": name, + "title": generated_name, })); } if let Some(name) = &m.response_type_name { - if seen_response_types.insert(name.clone()) { + let generated_name = generated_type_name(name, &unstable_type_names); + if seen_response_types.insert(generated_name.clone()) { response_variants.push(json!({ - "allOf": [{ "$ref": format!("#/$defs/{name}") }], - "title": name, + "allOf": [{ "$ref": format!("#/$defs/{generated_name}") }], + "title": generated_name, })); } } @@ -179,8 +208,14 @@ fn main() { .map(|m| { json!({ "method": &m.method, - "requestType": m.params_type_name, - "responseType": m.response_type_name, + "requestType": m + .params_type_name + .as_ref() + .map(|name| generated_type_name(name, &unstable_type_names)), + "responseType": m + .response_type_name + .as_ref() + .map(|name| generated_type_name(name, &unstable_type_names)), }) }) .collect(); @@ -193,6 +228,41 @@ fn main() { println!("{json_str}"); } +fn is_unstable_method(method: &str) -> bool { + method.contains("_goose/unstable") +} + +fn generated_type_name(name: &str, unstable_type_names: &BTreeSet) -> String { + if unstable_type_names.contains(name) { + format!("{name}_unstable") + } else { + name.to_string() + } +} + +fn rewrite_unstable_schema_refs(value: &mut Value, unstable_type_names: &BTreeSet) { + match value { + Value::Object(map) => { + if let Some(Value::String(reference)) = map.get_mut("$ref") { + if let Some(name) = reference.strip_prefix("#/$defs/") { + if unstable_type_names.contains(name) { + *reference = format!("#/$defs/{name}_unstable"); + } + } + } + for v in map.values_mut() { + rewrite_unstable_schema_refs(v, unstable_type_names); + } + } + Value::Array(arr) => { + for v in arr.iter_mut() { + rewrite_unstable_schema_refs(v, unstable_type_names); + } + } + _ => {} + } +} + /// Recursively strip `"format"` from integer-typed schemas. /// /// schemars emits `"format": "uint64"` / `"int64"` etc. for Rust integer types. diff --git a/crates/goose/tests/acp_custom_provider_methods_test.rs b/crates/goose/tests/acp_custom_provider_methods_test.rs index 47c5ebe66d..167c420bfd 100644 --- a/crates/goose/tests/acp_custom_provider_methods_test.rs +++ b/crates/goose/tests/acp_custom_provider_methods_test.rs @@ -56,7 +56,7 @@ fn acp_catalog_and_custom_provider_methods_use_core_provider_store() { let catalog = send_custom( conn.cx(), - "_goose/providers/catalog/list", + "_goose/unstable/providers/catalog/list", serde_json::json!({ "format": "openai" }), ) .await @@ -74,7 +74,7 @@ fn acp_catalog_and_custom_provider_methods_use_core_provider_store() { let setup_catalog = send_custom( conn.cx(), - "_goose/providers/setup/catalog/list", + "_goose/unstable/providers/setup/catalog/list", serde_json::json!({}), ) .await @@ -137,7 +137,7 @@ fn acp_catalog_and_custom_provider_methods_use_core_provider_store() { let template = send_custom( conn.cx(), - "_goose/providers/catalog/template", + "_goose/unstable/providers/catalog/template", serde_json::json!({ "providerId": "zai" }), ) .await @@ -156,7 +156,7 @@ fn acp_catalog_and_custom_provider_methods_use_core_provider_store() { let configured_status = send_custom( conn.cx(), - "_goose/providers/config/status", + "_goose/unstable/providers/config/status", serde_json::json!({ "providerIds": ["xai"] }), ) .await @@ -172,7 +172,7 @@ fn acp_catalog_and_custom_provider_methods_use_core_provider_store() { let configured_read = send_custom( conn.cx(), - "_goose/providers/config/read", + "_goose/unstable/providers/config/read", serde_json::json!({ "providerId": "xai" }), ) .await @@ -194,7 +194,7 @@ fn acp_catalog_and_custom_provider_methods_use_core_provider_store() { let non_oauth_auth = send_custom( conn.cx(), - "_goose/providers/config/authenticate", + "_goose/unstable/providers/config/authenticate", serde_json::json!({ "providerId": "xai" }), ) .await; @@ -210,7 +210,7 @@ fn acp_catalog_and_custom_provider_methods_use_core_provider_store() { let created = send_custom( conn.cx(), - "_goose/providers/custom/create", + "_goose/unstable/providers/custom/create", serde_json::json!({ "engine": "openai_compatible", "displayName": "Stark ACP Provider", @@ -292,7 +292,7 @@ fn acp_catalog_and_custom_provider_methods_use_core_provider_store() { let read = send_custom( conn.cx(), - "_goose/providers/custom/read", + "_goose/unstable/providers/custom/read", serde_json::json!({ "providerId": provider_id }), ) .await @@ -321,7 +321,7 @@ fn acp_catalog_and_custom_provider_methods_use_core_provider_store() { let inventory = send_custom( conn.cx(), - "_goose/providers/list", + "_goose/unstable/providers/list", serde_json::json!({ "providerIds": [provider_id] }), ) .await @@ -337,7 +337,7 @@ fn acp_catalog_and_custom_provider_methods_use_core_provider_store() { let updated = send_custom( conn.cx(), - "_goose/providers/custom/update", + "_goose/unstable/providers/custom/update", serde_json::json!({ "providerId": provider_id, "engine": "openai", @@ -392,7 +392,7 @@ fn acp_catalog_and_custom_provider_methods_use_core_provider_store() { let auth_disabled = send_custom( conn.cx(), - "_goose/providers/custom/update", + "_goose/unstable/providers/custom/update", serde_json::json!({ "providerId": provider_id, "engine": "openai_compatible", @@ -432,7 +432,7 @@ fn acp_catalog_and_custom_provider_methods_use_core_provider_store() { let auth_reenabled_without_key = send_custom( conn.cx(), - "_goose/providers/custom/update", + "_goose/unstable/providers/custom/update", serde_json::json!({ "providerId": provider_id, "engine": "openai_compatible", @@ -464,7 +464,7 @@ fn acp_catalog_and_custom_provider_methods_use_core_provider_store() { let deleted = send_custom( conn.cx(), - "_goose/providers/custom/delete", + "_goose/unstable/providers/custom/delete", serde_json::json!({ "providerId": provider_id }), ) .await @@ -494,7 +494,7 @@ fn acp_catalog_and_custom_provider_methods_use_core_provider_store() { let deleted_status = send_custom( conn.cx(), - "_goose/providers/config/status", + "_goose/unstable/providers/config/status", serde_json::json!({ "providerIds": [provider_id] }), ) .await @@ -518,7 +518,7 @@ fn acp_catalog_and_custom_provider_methods_use_core_provider_store() { ] { let read = send_custom( conn.cx(), - "_goose/providers/custom/read", + "_goose/unstable/providers/custom/read", serde_json::json!({ "providerId": invalid_id }), ) .await; @@ -570,7 +570,12 @@ fn acp_catalog_and_custom_provider_methods_use_core_provider_store() { payload_obj.insert(key.clone(), value.clone()); } - let result = send_custom(conn.cx(), "_goose/providers/custom/create", payload).await; + let result = send_custom( + conn.cx(), + "_goose/unstable/providers/custom/create", + payload, + ) + .await; assert!(result.is_err(), "{name} should be rejected"); } @@ -580,7 +585,7 @@ fn acp_catalog_and_custom_provider_methods_use_core_provider_store() { let shared = send_custom( conn.cx(), - "_goose/providers/custom/create", + "_goose/unstable/providers/custom/create", serde_json::json!({ "engine": "openai_compatible", "displayName": "Shared Secret Test", @@ -613,7 +618,7 @@ fn acp_catalog_and_custom_provider_methods_use_core_provider_store() { send_custom( conn.cx(), - "_goose/providers/custom/update", + "_goose/unstable/providers/custom/update", serde_json::json!({ "providerId": shared_id, "engine": "openai_compatible", @@ -635,7 +640,7 @@ fn acp_catalog_and_custom_provider_methods_use_core_provider_store() { let shared_delete = send_custom( conn.cx(), - "_goose/providers/custom/create", + "_goose/unstable/providers/custom/create", serde_json::json!({ "engine": "openai_compatible", "displayName": "Shared Secret Delete", @@ -668,7 +673,7 @@ fn acp_catalog_and_custom_provider_methods_use_core_provider_store() { send_custom( conn.cx(), - "_goose/providers/custom/delete", + "_goose/unstable/providers/custom/delete", serde_json::json!({ "providerId": shared_delete_id }), ) .await diff --git a/crates/goose/tests/acp_custom_requests_test.rs b/crates/goose/tests/acp_custom_requests_test.rs index e0ec073f9a..03e25ebc29 100644 --- a/crates/goose/tests/acp_custom_requests_test.rs +++ b/crates/goose/tests/acp_custom_requests_test.rs @@ -79,7 +79,7 @@ fn test_custom_get_tools() { let result = send_custom( conn.cx(), - "_goose/tools", + "_goose/unstable/tools/list", serde_json::json!({ "sessionId": session_id }), ) .await; @@ -97,8 +97,12 @@ fn test_custom_get_extensions() { let openai = OpenAiFixture::new(vec![], Arc::new(EnforceSessionId::default())).await; let conn = AcpServerConnection::new(TestConnectionConfig::default(), openai).await; - let result = - send_custom(conn.cx(), "_goose/config/extensions", serde_json::json!({})).await; + let result = send_custom( + conn.cx(), + "_goose/unstable/config/extensions/list", + serde_json::json!({}), + ) + .await; assert!(result.is_ok(), "expected ok, got: {:?}", result); let response = result.unwrap(); @@ -221,7 +225,7 @@ fn test_custom_list_builtin_skill_sources() { let response = send_custom( conn.cx(), - "_goose/sources/list", + "_goose/unstable/sources/list", serde_json::json!({ "type": "builtinSkill" }), ) .await @@ -253,9 +257,13 @@ fn test_custom_provider_inventory_includes_metadata() { let openai = OpenAiFixture::new(vec![], Arc::new(EnforceSessionId::default())).await; let conn = AcpServerConnection::new(TestConnectionConfig::default(), openai).await; - let response = send_custom(conn.cx(), "_goose/providers/list", serde_json::json!({})) - .await - .expect("provider inventory should succeed"); + let response = send_custom( + conn.cx(), + "_goose/unstable/providers/list", + serde_json::json!({}), + ) + .await + .expect("provider inventory should succeed"); let providers = response .get("entries") .and_then(|value| value.as_array()) @@ -294,7 +302,7 @@ fn test_custom_preferences_read_save_remove() { let response = send_custom( conn.cx(), - "_goose/preferences/read", + "_goose/unstable/preferences/read", serde_json::json!({ "keys": [ "autoCompactThreshold", @@ -316,7 +324,7 @@ fn test_custom_preferences_read_save_remove() { send_custom( conn.cx(), - "_goose/preferences/save", + "_goose/unstable/preferences/save", serde_json::json!({ "values": [ { "key": "voiceDictationProvider", "value": "__disabled__" }, @@ -329,7 +337,7 @@ fn test_custom_preferences_read_save_remove() { send_custom( conn.cx(), - "_goose/preferences/remove", + "_goose/unstable/preferences/remove", serde_json::json!({ "keys": ["voiceDictationProvider"], }), @@ -339,7 +347,7 @@ fn test_custom_preferences_read_save_remove() { let response = send_custom( conn.cx(), - "_goose/preferences/read", + "_goose/unstable/preferences/read", serde_json::json!({ "keys": ["voiceDictationProvider", "voiceDictationPreferredMic"], }), @@ -381,13 +389,13 @@ fn test_custom_preferences_save_rejects_invalid_values() { ]; for payload in invalid_payloads { - let result = send_custom(conn.cx(), "_goose/preferences/save", payload).await; + let result = send_custom(conn.cx(), "_goose/unstable/preferences/save", payload).await; assert!(result.is_err(), "expected invalid params error"); } let result = send_custom( conn.cx(), - "_goose/preferences/save", + "_goose/unstable/preferences/save", serde_json::json!({ "values": [ { "key": "voiceDictationPreferredMic", "value": "mic-1" }, @@ -400,7 +408,7 @@ fn test_custom_preferences_save_rejects_invalid_values() { let response = send_custom( conn.cx(), - "_goose/preferences/read", + "_goose/unstable/preferences/read", serde_json::json!({ "keys": ["voiceDictationPreferredMic"], }), @@ -432,9 +440,13 @@ fn test_custom_defaults_read() { }; let conn = AcpServerConnection::new(config, openai).await; - let response = send_custom(conn.cx(), "_goose/defaults/read", serde_json::json!({})) - .await - .expect("defaults read should succeed"); + let response = send_custom( + conn.cx(), + "_goose/unstable/defaults/read", + serde_json::json!({}), + ) + .await + .expect("defaults read should succeed"); assert_eq!( response, serde_json::json!({ @@ -472,7 +484,7 @@ fn test_custom_dictation_secret_save_delete() { send_custom( conn.cx(), - "_goose/dictation/secret/save", + "_goose/unstable/dictation/secret/save", serde_json::json!({ "provider": "groq", "value": "groq-key", @@ -481,9 +493,13 @@ fn test_custom_dictation_secret_save_delete() { .await .expect("dictation secret save should succeed"); - let config = send_custom(conn.cx(), "_goose/dictation/config", serde_json::json!({})) - .await - .expect("dictation config should succeed"); + let config = send_custom( + conn.cx(), + "_goose/unstable/dictation/config", + serde_json::json!({}), + ) + .await + .expect("dictation config should succeed"); assert_eq!( config .pointer("/providers/groq/configured") @@ -493,7 +509,7 @@ fn test_custom_dictation_secret_save_delete() { let provider_config_result = send_custom( conn.cx(), - "_goose/dictation/secret/save", + "_goose/unstable/dictation/secret/save", serde_json::json!({ "provider": "openai", "value": "openai-key", @@ -507,7 +523,7 @@ fn test_custom_dictation_secret_save_delete() { let unknown_result = send_custom( conn.cx(), - "_goose/dictation/secret/save", + "_goose/unstable/dictation/secret/save", serde_json::json!({ "provider": "unknown", "value": "key", @@ -521,7 +537,7 @@ fn test_custom_dictation_secret_save_delete() { send_custom( conn.cx(), - "_goose/dictation/secret/delete", + "_goose/unstable/dictation/secret/delete", serde_json::json!({ "provider": "groq", }), @@ -529,9 +545,13 @@ fn test_custom_dictation_secret_save_delete() { .await .expect("dictation secret delete should succeed"); - let config = send_custom(conn.cx(), "_goose/dictation/config", serde_json::json!({})) - .await - .expect("dictation config should succeed"); + let config = send_custom( + conn.cx(), + "_goose/unstable/dictation/config", + serde_json::json!({}), + ) + .await + .expect("dictation config should succeed"); assert_eq!( config .pointer("/providers/groq/configured") diff --git a/crates/goose/tests/acp_secret_cache_invalidation_test.rs b/crates/goose/tests/acp_secret_cache_invalidation_test.rs index f2cf3377da..ef6a34df39 100644 --- a/crates/goose/tests/acp_secret_cache_invalidation_test.rs +++ b/crates/goose/tests/acp_secret_cache_invalidation_test.rs @@ -113,7 +113,7 @@ fn acp_secret_mutations_and_inventory_refresh_invalidate_global_secret_cache() { write_secrets(&config_dir, "GROQ_API_KEY: fresh-key\n"); send_custom( conn.cx(), - "_goose/dictation/secret/save", + "_goose/unstable/dictation/secret/save", serde_json::json!({ "provider": "groq", "value": "fresh-key", @@ -133,7 +133,7 @@ fn acp_secret_mutations_and_inventory_refresh_invalidate_global_secret_cache() { write_secrets(&config_dir, "{}\n"); send_custom( conn.cx(), - "_goose/dictation/secret/delete", + "_goose/unstable/dictation/secret/delete", serde_json::json!({ "provider": "groq", }), @@ -151,7 +151,7 @@ fn acp_secret_mutations_and_inventory_refresh_invalidate_global_secret_cache() { let save_provider_config = send_custom( conn.cx(), - "_goose/providers/config/save", + "_goose/unstable/providers/config/save", serde_json::json!({ "providerId": "xai", "fields": [ @@ -199,7 +199,7 @@ fn acp_secret_mutations_and_inventory_refresh_invalidate_global_secret_cache() { let read_provider_config = send_custom( conn.cx(), - "_goose/providers/config/read", + "_goose/unstable/providers/config/read", serde_json::json!({ "providerId": "xai", }), @@ -223,7 +223,7 @@ fn acp_secret_mutations_and_inventory_refresh_invalidate_global_secret_cache() { let delete_provider_config = send_custom( conn.cx(), - "_goose/providers/config/delete", + "_goose/unstable/providers/config/delete", serde_json::json!({ "providerId": "xai", }), @@ -255,7 +255,7 @@ fn acp_secret_mutations_and_inventory_refresh_invalidate_global_secret_cache() { let refresh = send_custom( conn.cx(), - "_goose/providers/inventory/refresh", + "_goose/unstable/providers/inventory/refresh", serde_json::json!({ "providerIds": ["anthropic"], }), diff --git a/ui/desktop/src/acp/extensions.ts b/ui/desktop/src/acp/extensions.ts index 69d8a80bfe..4edcff17c5 100644 --- a/ui/desktop/src/acp/extensions.ts +++ b/ui/desktop/src/acp/extensions.ts @@ -3,7 +3,7 @@ import { getAcpClient } from './acpConnection'; export async function getConfiguredExtensions(): Promise { const client = await getAcpClient(); - const response = await client.goose.GooseConfigExtensions({}); + const response = await client.goose.configExtensionsList_unstable({}); return { extensions: response.extensions as ExtensionEntry[], warnings: response.warnings, diff --git a/ui/sdk/generate-schema.ts b/ui/sdk/generate-schema.ts index 870e7eda80..1d7c4858df 100644 --- a/ui/sdk/generate-schema.ts +++ b/ui/sdk/generate-schema.ts @@ -44,7 +44,16 @@ export default async function main() { output: { path: OUTPUT_DIR, }, - plugins: ["zod", "@hey-api/typescript"], + plugins: [ + { + case: "preserve", + name: "zod", + }, + { + case: "preserve", + name: "@hey-api/typescript", + }, + ], }); await postProcessTypes(); @@ -118,12 +127,27 @@ interface MethodMeta { } function methodToCamelCase(method: string): string { - return method - .split(/[/_]/) + let methodParts = method.split(/[/_]/).filter((part) => part.length > 0); + + let suffix: string; + if (methodParts[0] == "goose" && methodParts[1] == "unstable") { + methodParts.shift(); + methodParts.shift(); + suffix = "_unstable"; + } else { + suffix = ""; + } + + let prefix = methodParts + .map((part) => + part.replace(/[^a-zA-Z0-9]+(.)/g, (_, chr: string) => chr.toUpperCase()), + ) .map((part, i) => i === 0 ? part : part.charAt(0).toUpperCase() + part.slice(1), ) .join(""); + + return `${prefix}${suffix}`; } async function generateClient(meta: { methods: MethodMeta[] }) { diff --git a/ui/sdk/scripts/check-binary-compat.mjs b/ui/sdk/scripts/check-binary-compat.mjs index 9e13ab0652..6ff439096c 100644 --- a/ui/sdk/scripts/check-binary-compat.mjs +++ b/ui/sdk/scripts/check-binary-compat.mjs @@ -77,8 +77,8 @@ const READ_ONLY_CHECKS = [ call: (c) => c.goose.GooseDictationModelsList({}), }, { - name: "GooseConfigExtensions", - call: (c) => c.goose.GooseConfigExtensions({}), + name: "GooseConfigExtensionsList", + call: (c) => c.goose.GooseConfigExtensionsList({}), }, ]; diff --git a/ui/sdk/src/generated/client.gen.ts b/ui/sdk/src/generated/client.gen.ts index 686c4f7988..2bc08d2fea 100644 --- a/ui/sdk/src/generated/client.gen.ts +++ b/ui/sdk/src/generated/client.gen.ts @@ -8,562 +8,686 @@ export interface ExtMethodProvider { } import type { - AddConfigExtensionRequest, - AddExtensionRequest, - ArchiveSessionRequest, - CreateSourceRequest, - CreateSourceResponse, - CustomProviderCreateRequest, - CustomProviderCreateResponse, - CustomProviderDeleteRequest, - CustomProviderDeleteResponse, - CustomProviderReadRequest, - CustomProviderReadResponse, - CustomProviderUpdateRequest, - CustomProviderUpdateResponse, - DefaultsReadRequest, - DefaultsReadResponse, - DefaultsSaveRequest, + AddConfigExtensionRequest_unstable, + AddExtensionRequest_unstable, + ArchiveSessionRequest_unstable, + CreateSourceRequest_unstable, + CreateSourceResponse_unstable, + CustomProviderCreateRequest_unstable, + CustomProviderCreateResponse_unstable, + CustomProviderDeleteRequest_unstable, + CustomProviderDeleteResponse_unstable, + CustomProviderReadRequest_unstable, + CustomProviderReadResponse_unstable, + CustomProviderUpdateRequest_unstable, + CustomProviderUpdateResponse_unstable, + DefaultsReadRequest_unstable, + DefaultsReadResponse_unstable, + DefaultsSaveRequest_unstable, DeleteSessionRequest, - DeleteSourceRequest, - DictationConfigRequest, - DictationConfigResponse, - DictationModelCancelRequest, - DictationModelDeleteRequest, - DictationModelDownloadProgressRequest, - DictationModelDownloadProgressResponse, - DictationModelDownloadRequest, - DictationModelSelectRequest, - DictationModelsListRequest, - DictationModelsListResponse, - DictationSecretDeleteRequest, - DictationSecretSaveRequest, - DictationTranscribeRequest, - DictationTranscribeResponse, - ExportSessionRequest, - ExportSessionResponse, - ExportSourceRequest, - ExportSourceResponse, - GetExtensionsRequest, - GetExtensionsResponse, - GetSessionExtensionsRequest, - GetSessionExtensionsResponse, - GetToolsRequest, - GetToolsResponse, - GooseToolCallRequest, - GooseToolCallResponse, - ImportSessionRequest, - ImportSessionResponse, - ImportSourcesRequest, - ImportSourcesResponse, - ListProvidersRequest, - ListProvidersResponse, - ListSourcesRequest, - ListSourcesResponse, - OnboardingImportApplyRequest, - OnboardingImportApplyResponse, - OnboardingImportScanRequest, - OnboardingImportScanResponse, - PreferencesReadRequest, - PreferencesReadResponse, - PreferencesRemoveRequest, - PreferencesSaveRequest, - ProviderCatalogListRequest, - ProviderCatalogListResponse, - ProviderCatalogTemplateRequest, - ProviderCatalogTemplateResponse, - ProviderConfigAuthenticateRequest, - ProviderConfigChangeResponse, - ProviderConfigDeleteRequest, - ProviderConfigReadRequest, - ProviderConfigReadResponse, - ProviderConfigSaveRequest, - ProviderConfigStatusRequest, - ProviderConfigStatusResponse, - ProviderSetupCatalogListRequest, - ProviderSetupCatalogListResponse, - ReadResourceRequest, - ReadResourceResponse, - RefreshProviderInventoryRequest, - RefreshProviderInventoryResponse, - RemoveConfigExtensionRequest, - RemoveExtensionRequest, - RenameSessionRequest, - ToggleConfigExtensionRequest, - UnarchiveSessionRequest, - UpdateSessionProjectRequest, - UpdateSourceRequest, - UpdateSourceResponse, - UpdateWorkingDirRequest, + DeleteSourceRequest_unstable, + DictationConfigRequest_unstable, + DictationConfigResponse_unstable, + DictationModelCancelRequest_unstable, + DictationModelDeleteRequest_unstable, + DictationModelDownloadProgressRequest_unstable, + DictationModelDownloadProgressResponse_unstable, + DictationModelDownloadRequest_unstable, + DictationModelSelectRequest_unstable, + DictationModelsListRequest_unstable, + DictationModelsListResponse_unstable, + DictationSecretDeleteRequest_unstable, + DictationSecretSaveRequest_unstable, + DictationTranscribeRequest_unstable, + DictationTranscribeResponse_unstable, + ExportSessionRequest_unstable, + ExportSessionResponse_unstable, + ExportSourceRequest_unstable, + ExportSourceResponse_unstable, + GetExtensionsRequest_unstable, + GetExtensionsResponse_unstable, + GetSessionExtensionsRequest_unstable, + GetSessionExtensionsResponse_unstable, + GetToolsRequest_unstable, + GetToolsResponse_unstable, + GooseToolCallRequest_unstable, + GooseToolCallResponse_unstable, + ImportSessionRequest_unstable, + ImportSessionResponse_unstable, + ImportSourcesRequest_unstable, + ImportSourcesResponse_unstable, + ListProvidersRequest_unstable, + ListProvidersResponse_unstable, + ListSourcesRequest_unstable, + ListSourcesResponse_unstable, + OnboardingImportApplyRequest_unstable, + OnboardingImportApplyResponse_unstable, + OnboardingImportScanRequest_unstable, + OnboardingImportScanResponse_unstable, + PreferencesReadRequest_unstable, + PreferencesReadResponse_unstable, + PreferencesRemoveRequest_unstable, + PreferencesSaveRequest_unstable, + ProviderCatalogListRequest_unstable, + ProviderCatalogListResponse_unstable, + ProviderCatalogTemplateRequest_unstable, + ProviderCatalogTemplateResponse_unstable, + ProviderConfigAuthenticateRequest_unstable, + ProviderConfigChangeResponse_unstable, + ProviderConfigDeleteRequest_unstable, + ProviderConfigReadRequest_unstable, + ProviderConfigReadResponse_unstable, + ProviderConfigSaveRequest_unstable, + ProviderConfigStatusRequest_unstable, + ProviderConfigStatusResponse_unstable, + ProviderSetupCatalogListRequest_unstable, + ProviderSetupCatalogListResponse_unstable, + ReadResourceRequest_unstable, + ReadResourceResponse_unstable, + RefreshProviderInventoryRequest_unstable, + RefreshProviderInventoryResponse_unstable, + RemoveConfigExtensionRequest_unstable, + RemoveExtensionRequest_unstable, + RenameSessionRequest_unstable, + ToggleConfigExtensionRequest_unstable, + UnarchiveSessionRequest_unstable, + UpdateSessionProjectRequest_unstable, + UpdateSourceRequest_unstable, + UpdateSourceResponse_unstable, + UpdateWorkingDirRequest_unstable, } from './types.gen.js'; import { - zCreateSourceResponse, - zCustomProviderCreateResponse, - zCustomProviderDeleteResponse, - zCustomProviderReadResponse, - zCustomProviderUpdateResponse, - zDefaultsReadResponse, - zDictationConfigResponse, - zDictationModelDownloadProgressResponse, - zDictationModelsListResponse, - zDictationTranscribeResponse, - zExportSessionResponse, - zExportSourceResponse, - zGetExtensionsResponse, - zGetSessionExtensionsResponse, - zGetToolsResponse, - zGooseToolCallResponse, - zImportSessionResponse, - zImportSourcesResponse, - zListProvidersResponse, - zListSourcesResponse, - zOnboardingImportApplyResponse, - zOnboardingImportScanResponse, - zPreferencesReadResponse, - zProviderCatalogListResponse, - zProviderCatalogTemplateResponse, - zProviderConfigChangeResponse, - zProviderConfigReadResponse, - zProviderConfigStatusResponse, - zProviderSetupCatalogListResponse, - zReadResourceResponse, - zRefreshProviderInventoryResponse, - zUpdateSourceResponse, + zCreateSourceResponse_unstable, + zCustomProviderCreateResponse_unstable, + zCustomProviderDeleteResponse_unstable, + zCustomProviderReadResponse_unstable, + zCustomProviderUpdateResponse_unstable, + zDefaultsReadResponse_unstable, + zDictationConfigResponse_unstable, + zDictationModelDownloadProgressResponse_unstable, + zDictationModelsListResponse_unstable, + zDictationTranscribeResponse_unstable, + zExportSessionResponse_unstable, + zExportSourceResponse_unstable, + zGetExtensionsResponse_unstable, + zGetSessionExtensionsResponse_unstable, + zGetToolsResponse_unstable, + zGooseToolCallResponse_unstable, + zImportSessionResponse_unstable, + zImportSourcesResponse_unstable, + zListProvidersResponse_unstable, + zListSourcesResponse_unstable, + zOnboardingImportApplyResponse_unstable, + zOnboardingImportScanResponse_unstable, + zPreferencesReadResponse_unstable, + zProviderCatalogListResponse_unstable, + zProviderCatalogTemplateResponse_unstable, + zProviderConfigChangeResponse_unstable, + zProviderConfigReadResponse_unstable, + zProviderConfigStatusResponse_unstable, + zProviderSetupCatalogListResponse_unstable, + zReadResourceResponse_unstable, + zRefreshProviderInventoryResponse_unstable, + zUpdateSourceResponse_unstable, } from './zod.gen.js'; export class GooseExtClient { constructor(private conn: ExtMethodProvider) {} - async GooseExtensionsAdd(params: AddExtensionRequest): Promise { - await this.conn.extMethod("_goose/extensions/add", params); + async sessionExtensionsAdd_unstable( + params: AddExtensionRequest_unstable, + ): Promise { + await this.conn.extMethod("_goose/unstable/session/extensions/add", params); } - async GooseExtensionsRemove(params: RemoveExtensionRequest): Promise { - await this.conn.extMethod("_goose/extensions/remove", params); + async sessionExtensionsRemove_unstable( + params: RemoveExtensionRequest_unstable, + ): Promise { + await this.conn.extMethod( + "_goose/unstable/session/extensions/remove", + params, + ); } - async GooseTools(params: GetToolsRequest): Promise { - const raw = await this.conn.extMethod("_goose/tools", params); - return zGetToolsResponse.parse(raw) as GetToolsResponse; + async toolsList_unstable( + params: GetToolsRequest_unstable, + ): Promise { + const raw = await this.conn.extMethod("_goose/unstable/tools/list", params); + return zGetToolsResponse_unstable.parse(raw) as GetToolsResponse_unstable; } - async GooseToolCall( - params: GooseToolCallRequest, - ): Promise { - const raw = await this.conn.extMethod("_goose/tool/call", params); - return zGooseToolCallResponse.parse(raw) as GooseToolCallResponse; + async toolsCall_unstable( + params: GooseToolCallRequest_unstable, + ): Promise { + const raw = await this.conn.extMethod("_goose/unstable/tools/call", params); + return zGooseToolCallResponse_unstable.parse( + raw, + ) as GooseToolCallResponse_unstable; } - async GooseResourceRead( - params: ReadResourceRequest, - ): Promise { - const raw = await this.conn.extMethod("_goose/resource/read", params); - return zReadResourceResponse.parse(raw) as ReadResourceResponse; + async resourcesRead_unstable( + params: ReadResourceRequest_unstable, + ): Promise { + const raw = await this.conn.extMethod( + "_goose/unstable/resources/read", + params, + ); + return zReadResourceResponse_unstable.parse( + raw, + ) as ReadResourceResponse_unstable; } - async GooseWorkingDirUpdate(params: UpdateWorkingDirRequest): Promise { - await this.conn.extMethod("_goose/working_dir/update", params); + async sessionWorkingDirUpdate_unstable( + params: UpdateWorkingDirRequest_unstable, + ): Promise { + await this.conn.extMethod( + "_goose/unstable/session/working-dir/update", + params, + ); } async sessionDelete(params: DeleteSessionRequest): Promise { await this.conn.extMethod("session/delete", params); } - async GooseConfigExtensions( - params: GetExtensionsRequest, - ): Promise { - const raw = await this.conn.extMethod("_goose/config/extensions", params); - return zGetExtensionsResponse.parse(raw) as GetExtensionsResponse; + async configExtensionsList_unstable( + params: GetExtensionsRequest_unstable, + ): Promise { + const raw = await this.conn.extMethod( + "_goose/unstable/config/extensions/list", + params, + ); + return zGetExtensionsResponse_unstable.parse( + raw, + ) as GetExtensionsResponse_unstable; } - async GooseConfigExtensionsAdd( - params: AddConfigExtensionRequest, + async configExtensionsAdd_unstable( + params: AddConfigExtensionRequest_unstable, ): Promise { - await this.conn.extMethod("_goose/config/extensions/add", params); + await this.conn.extMethod("_goose/unstable/config/extensions/add", params); } - async GooseConfigExtensionsRemove( - params: RemoveConfigExtensionRequest, + async configExtensionsRemove_unstable( + params: RemoveConfigExtensionRequest_unstable, ): Promise { - await this.conn.extMethod("_goose/config/extensions/remove", params); + await this.conn.extMethod( + "_goose/unstable/config/extensions/remove", + params, + ); } - async GooseConfigExtensionsToggle( - params: ToggleConfigExtensionRequest, + async configExtensionsToggle_unstable( + params: ToggleConfigExtensionRequest_unstable, ): Promise { - await this.conn.extMethod("_goose/config/extensions/toggle", params); + await this.conn.extMethod( + "_goose/unstable/config/extensions/toggle", + params, + ); } - async GooseSessionExtensions( - params: GetSessionExtensionsRequest, - ): Promise { - const raw = await this.conn.extMethod("_goose/session/extensions", params); - return zGetSessionExtensionsResponse.parse( + async sessionExtensionsList_unstable( + params: GetSessionExtensionsRequest_unstable, + ): Promise { + const raw = await this.conn.extMethod( + "_goose/unstable/session/extensions/list", + params, + ); + return zGetSessionExtensionsResponse_unstable.parse( raw, - ) as GetSessionExtensionsResponse; + ) as GetSessionExtensionsResponse_unstable; } - async GooseProvidersList( - params: ListProvidersRequest, - ): Promise { - const raw = await this.conn.extMethod("_goose/providers/list", params); - return zListProvidersResponse.parse(raw) as ListProvidersResponse; - } - - async GooseProvidersCatalogList( - params: ProviderCatalogListRequest, - ): Promise { + async providersList_unstable( + params: ListProvidersRequest_unstable, + ): Promise { const raw = await this.conn.extMethod( - "_goose/providers/catalog/list", + "_goose/unstable/providers/list", params, ); - return zProviderCatalogListResponse.parse( + return zListProvidersResponse_unstable.parse( raw, - ) as ProviderCatalogListResponse; + ) as ListProvidersResponse_unstable; } - async GooseProvidersSetupCatalogList( - params: ProviderSetupCatalogListRequest, - ): Promise { + async providersCatalogList_unstable( + params: ProviderCatalogListRequest_unstable, + ): Promise { const raw = await this.conn.extMethod( - "_goose/providers/setup/catalog/list", + "_goose/unstable/providers/catalog/list", params, ); - return zProviderSetupCatalogListResponse.parse( + return zProviderCatalogListResponse_unstable.parse( raw, - ) as ProviderSetupCatalogListResponse; + ) as ProviderCatalogListResponse_unstable; } - async GooseProvidersCatalogTemplate( - params: ProviderCatalogTemplateRequest, - ): Promise { + async providersSetupCatalogList_unstable( + params: ProviderSetupCatalogListRequest_unstable, + ): Promise { const raw = await this.conn.extMethod( - "_goose/providers/catalog/template", + "_goose/unstable/providers/setup/catalog/list", params, ); - return zProviderCatalogTemplateResponse.parse( + return zProviderSetupCatalogListResponse_unstable.parse( raw, - ) as ProviderCatalogTemplateResponse; + ) as ProviderSetupCatalogListResponse_unstable; } - async GooseProvidersCustomCreate( - params: CustomProviderCreateRequest, - ): Promise { + async providersCatalogTemplate_unstable( + params: ProviderCatalogTemplateRequest_unstable, + ): Promise { const raw = await this.conn.extMethod( - "_goose/providers/custom/create", + "_goose/unstable/providers/catalog/template", params, ); - return zCustomProviderCreateResponse.parse( + return zProviderCatalogTemplateResponse_unstable.parse( raw, - ) as CustomProviderCreateResponse; + ) as ProviderCatalogTemplateResponse_unstable; } - async GooseProvidersCustomRead( - params: CustomProviderReadRequest, - ): Promise { + async providersCustomCreate_unstable( + params: CustomProviderCreateRequest_unstable, + ): Promise { const raw = await this.conn.extMethod( - "_goose/providers/custom/read", + "_goose/unstable/providers/custom/create", params, ); - return zCustomProviderReadResponse.parse(raw) as CustomProviderReadResponse; - } - - async GooseProvidersCustomUpdate( - params: CustomProviderUpdateRequest, - ): Promise { - const raw = await this.conn.extMethod( - "_goose/providers/custom/update", - params, - ); - return zCustomProviderUpdateResponse.parse( + return zCustomProviderCreateResponse_unstable.parse( raw, - ) as CustomProviderUpdateResponse; + ) as CustomProviderCreateResponse_unstable; } - async GooseProvidersCustomDelete( - params: CustomProviderDeleteRequest, - ): Promise { + async providersCustomRead_unstable( + params: CustomProviderReadRequest_unstable, + ): Promise { const raw = await this.conn.extMethod( - "_goose/providers/custom/delete", + "_goose/unstable/providers/custom/read", params, ); - return zCustomProviderDeleteResponse.parse( + return zCustomProviderReadResponse_unstable.parse( raw, - ) as CustomProviderDeleteResponse; + ) as CustomProviderReadResponse_unstable; } - async GooseProvidersInventoryRefresh( - params: RefreshProviderInventoryRequest, - ): Promise { + async providersCustomUpdate_unstable( + params: CustomProviderUpdateRequest_unstable, + ): Promise { const raw = await this.conn.extMethod( - "_goose/providers/inventory/refresh", + "_goose/unstable/providers/custom/update", params, ); - return zRefreshProviderInventoryResponse.parse( + return zCustomProviderUpdateResponse_unstable.parse( raw, - ) as RefreshProviderInventoryResponse; + ) as CustomProviderUpdateResponse_unstable; } - async GooseProvidersConfigRead( - params: ProviderConfigReadRequest, - ): Promise { + async providersCustomDelete_unstable( + params: CustomProviderDeleteRequest_unstable, + ): Promise { const raw = await this.conn.extMethod( - "_goose/providers/config/read", + "_goose/unstable/providers/custom/delete", params, ); - return zProviderConfigReadResponse.parse(raw) as ProviderConfigReadResponse; - } - - async GooseProvidersConfigStatus( - params: ProviderConfigStatusRequest, - ): Promise { - const raw = await this.conn.extMethod( - "_goose/providers/config/status", - params, - ); - return zProviderConfigStatusResponse.parse( + return zCustomProviderDeleteResponse_unstable.parse( raw, - ) as ProviderConfigStatusResponse; + ) as CustomProviderDeleteResponse_unstable; } - async GooseProvidersConfigSave( - params: ProviderConfigSaveRequest, - ): Promise { + async providersInventoryRefresh_unstable( + params: RefreshProviderInventoryRequest_unstable, + ): Promise { const raw = await this.conn.extMethod( - "_goose/providers/config/save", + "_goose/unstable/providers/inventory/refresh", params, ); - return zProviderConfigChangeResponse.parse( + return zRefreshProviderInventoryResponse_unstable.parse( raw, - ) as ProviderConfigChangeResponse; + ) as RefreshProviderInventoryResponse_unstable; } - async GooseProvidersConfigDelete( - params: ProviderConfigDeleteRequest, - ): Promise { + async providersConfigRead_unstable( + params: ProviderConfigReadRequest_unstable, + ): Promise { const raw = await this.conn.extMethod( - "_goose/providers/config/delete", + "_goose/unstable/providers/config/read", params, ); - return zProviderConfigChangeResponse.parse( + return zProviderConfigReadResponse_unstable.parse( raw, - ) as ProviderConfigChangeResponse; + ) as ProviderConfigReadResponse_unstable; } - async GooseProvidersConfigAuthenticate( - params: ProviderConfigAuthenticateRequest, - ): Promise { + async providersConfigStatus_unstable( + params: ProviderConfigStatusRequest_unstable, + ): Promise { const raw = await this.conn.extMethod( - "_goose/providers/config/authenticate", + "_goose/unstable/providers/config/status", params, ); - return zProviderConfigChangeResponse.parse( + return zProviderConfigStatusResponse_unstable.parse( raw, - ) as ProviderConfigChangeResponse; + ) as ProviderConfigStatusResponse_unstable; } - async GoosePreferencesRead( - params: PreferencesReadRequest, - ): Promise { - const raw = await this.conn.extMethod("_goose/preferences/read", params); - return zPreferencesReadResponse.parse(raw) as PreferencesReadResponse; + async providersConfigSave_unstable( + params: ProviderConfigSaveRequest_unstable, + ): Promise { + const raw = await this.conn.extMethod( + "_goose/unstable/providers/config/save", + params, + ); + return zProviderConfigChangeResponse_unstable.parse( + raw, + ) as ProviderConfigChangeResponse_unstable; } - async GoosePreferencesSave(params: PreferencesSaveRequest): Promise { - await this.conn.extMethod("_goose/preferences/save", params); + async providersConfigDelete_unstable( + params: ProviderConfigDeleteRequest_unstable, + ): Promise { + const raw = await this.conn.extMethod( + "_goose/unstable/providers/config/delete", + params, + ); + return zProviderConfigChangeResponse_unstable.parse( + raw, + ) as ProviderConfigChangeResponse_unstable; } - async GoosePreferencesRemove( - params: PreferencesRemoveRequest, + async providersConfigAuthenticate_unstable( + params: ProviderConfigAuthenticateRequest_unstable, + ): Promise { + const raw = await this.conn.extMethod( + "_goose/unstable/providers/config/authenticate", + params, + ); + return zProviderConfigChangeResponse_unstable.parse( + raw, + ) as ProviderConfigChangeResponse_unstable; + } + + async preferencesRead_unstable( + params: PreferencesReadRequest_unstable, + ): Promise { + const raw = await this.conn.extMethod( + "_goose/unstable/preferences/read", + params, + ); + return zPreferencesReadResponse_unstable.parse( + raw, + ) as PreferencesReadResponse_unstable; + } + + async preferencesSave_unstable( + params: PreferencesSaveRequest_unstable, ): Promise { - await this.conn.extMethod("_goose/preferences/remove", params); + await this.conn.extMethod("_goose/unstable/preferences/save", params); } - async GooseDefaultsRead( - params: DefaultsReadRequest, - ): Promise { - const raw = await this.conn.extMethod("_goose/defaults/read", params); - return zDefaultsReadResponse.parse(raw) as DefaultsReadResponse; + async preferencesRemove_unstable( + params: PreferencesRemoveRequest_unstable, + ): Promise { + await this.conn.extMethod("_goose/unstable/preferences/remove", params); } - async GooseDefaultsSave( - params: DefaultsSaveRequest, - ): Promise { - const raw = await this.conn.extMethod("_goose/defaults/save", params); - return zDefaultsReadResponse.parse(raw) as DefaultsReadResponse; - } - - async GooseOnboardingImportScan( - params: OnboardingImportScanRequest, - ): Promise { + async defaultsRead_unstable( + params: DefaultsReadRequest_unstable, + ): Promise { const raw = await this.conn.extMethod( - "_goose/onboarding/import/scan", + "_goose/unstable/defaults/read", params, ); - return zOnboardingImportScanResponse.parse( + return zDefaultsReadResponse_unstable.parse( raw, - ) as OnboardingImportScanResponse; + ) as DefaultsReadResponse_unstable; } - async GooseOnboardingImportApply( - params: OnboardingImportApplyRequest, - ): Promise { + async defaultsSave_unstable( + params: DefaultsSaveRequest_unstable, + ): Promise { const raw = await this.conn.extMethod( - "_goose/onboarding/import/apply", + "_goose/unstable/defaults/save", params, ); - return zOnboardingImportApplyResponse.parse( + return zDefaultsReadResponse_unstable.parse( raw, - ) as OnboardingImportApplyResponse; + ) as DefaultsReadResponse_unstable; } - async GooseSessionExport( - params: ExportSessionRequest, - ): Promise { - const raw = await this.conn.extMethod("_goose/session/export", params); - return zExportSessionResponse.parse(raw) as ExportSessionResponse; - } - - async GooseSessionImport( - params: ImportSessionRequest, - ): Promise { - const raw = await this.conn.extMethod("_goose/session/import", params); - return zImportSessionResponse.parse(raw) as ImportSessionResponse; - } - - async GooseSessionUpdateProject( - params: UpdateSessionProjectRequest, - ): Promise { - await this.conn.extMethod("_goose/session/update_project", params); - } - - async GooseSessionRename(params: RenameSessionRequest): Promise { - await this.conn.extMethod("_goose/session/rename", params); - } - - async GooseSessionArchive(params: ArchiveSessionRequest): Promise { - await this.conn.extMethod("_goose/session/archive", params); - } - - async GooseSessionUnarchive(params: UnarchiveSessionRequest): Promise { - await this.conn.extMethod("_goose/session/unarchive", params); - } - - async GooseSourcesCreate( - params: CreateSourceRequest, - ): Promise { - const raw = await this.conn.extMethod("_goose/sources/create", params); - return zCreateSourceResponse.parse(raw) as CreateSourceResponse; - } - - async GooseSourcesList( - params: ListSourcesRequest, - ): Promise { - const raw = await this.conn.extMethod("_goose/sources/list", params); - return zListSourcesResponse.parse(raw) as ListSourcesResponse; - } - - async GooseSourcesUpdate( - params: UpdateSourceRequest, - ): Promise { - const raw = await this.conn.extMethod("_goose/sources/update", params); - return zUpdateSourceResponse.parse(raw) as UpdateSourceResponse; - } - - async GooseSourcesDelete(params: DeleteSourceRequest): Promise { - await this.conn.extMethod("_goose/sources/delete", params); - } - - async GooseSourcesExport( - params: ExportSourceRequest, - ): Promise { - const raw = await this.conn.extMethod("_goose/sources/export", params); - return zExportSourceResponse.parse(raw) as ExportSourceResponse; - } - - async GooseSourcesImport( - params: ImportSourcesRequest, - ): Promise { - const raw = await this.conn.extMethod("_goose/sources/import", params); - return zImportSourcesResponse.parse(raw) as ImportSourcesResponse; - } - - async GooseDictationTranscribe( - params: DictationTranscribeRequest, - ): Promise { + async onboardingImportScan_unstable( + params: OnboardingImportScanRequest_unstable, + ): Promise { const raw = await this.conn.extMethod( - "_goose/dictation/transcribe", + "_goose/unstable/onboarding/import/scan", params, ); - return zDictationTranscribeResponse.parse( + return zOnboardingImportScanResponse_unstable.parse( raw, - ) as DictationTranscribeResponse; + ) as OnboardingImportScanResponse_unstable; } - async GooseDictationConfig( - params: DictationConfigRequest, - ): Promise { - const raw = await this.conn.extMethod("_goose/dictation/config", params); - return zDictationConfigResponse.parse(raw) as DictationConfigResponse; - } - - async GooseDictationSecretSave( - params: DictationSecretSaveRequest, - ): Promise { - await this.conn.extMethod("_goose/dictation/secret/save", params); - } - - async GooseDictationSecretDelete( - params: DictationSecretDeleteRequest, - ): Promise { - await this.conn.extMethod("_goose/dictation/secret/delete", params); - } - - async GooseDictationModelsList( - params: DictationModelsListRequest, - ): Promise { + async onboardingImportApply_unstable( + params: OnboardingImportApplyRequest_unstable, + ): Promise { const raw = await this.conn.extMethod( - "_goose/dictation/models/list", + "_goose/unstable/onboarding/import/apply", params, ); - return zDictationModelsListResponse.parse( + return zOnboardingImportApplyResponse_unstable.parse( raw, - ) as DictationModelsListResponse; + ) as OnboardingImportApplyResponse_unstable; } - async GooseDictationModelsDownload( - params: DictationModelDownloadRequest, - ): Promise { - await this.conn.extMethod("_goose/dictation/models/download", params); - } - - async GooseDictationModelsDownloadProgress( - params: DictationModelDownloadProgressRequest, - ): Promise { + async sessionExport_unstable( + params: ExportSessionRequest_unstable, + ): Promise { const raw = await this.conn.extMethod( - "_goose/dictation/models/download/progress", + "_goose/unstable/session/export", params, ); - return zDictationModelDownloadProgressResponse.parse( + return zExportSessionResponse_unstable.parse( raw, - ) as DictationModelDownloadProgressResponse; + ) as ExportSessionResponse_unstable; } - async GooseDictationModelsCancel( - params: DictationModelCancelRequest, - ): Promise { - await this.conn.extMethod("_goose/dictation/models/cancel", params); + async sessionImport_unstable( + params: ImportSessionRequest_unstable, + ): Promise { + const raw = await this.conn.extMethod( + "_goose/unstable/session/import", + params, + ); + return zImportSessionResponse_unstable.parse( + raw, + ) as ImportSessionResponse_unstable; } - async GooseDictationModelsDelete( - params: DictationModelDeleteRequest, + async sessionProjectUpdate_unstable( + params: UpdateSessionProjectRequest_unstable, ): Promise { - await this.conn.extMethod("_goose/dictation/models/delete", params); + await this.conn.extMethod("_goose/unstable/session/project/update", params); } - async GooseDictationModelSelect( - params: DictationModelSelectRequest, + async sessionRename_unstable( + params: RenameSessionRequest_unstable, ): Promise { - await this.conn.extMethod("_goose/dictation/model/select", params); + await this.conn.extMethod("_goose/unstable/session/rename", params); + } + + async sessionArchive_unstable( + params: ArchiveSessionRequest_unstable, + ): Promise { + await this.conn.extMethod("_goose/unstable/session/archive", params); + } + + async sessionUnarchive_unstable( + params: UnarchiveSessionRequest_unstable, + ): Promise { + await this.conn.extMethod("_goose/unstable/session/unarchive", params); + } + + async sourcesCreate_unstable( + params: CreateSourceRequest_unstable, + ): Promise { + const raw = await this.conn.extMethod( + "_goose/unstable/sources/create", + params, + ); + return zCreateSourceResponse_unstable.parse( + raw, + ) as CreateSourceResponse_unstable; + } + + async sourcesList_unstable( + params: ListSourcesRequest_unstable, + ): Promise { + const raw = await this.conn.extMethod( + "_goose/unstable/sources/list", + params, + ); + return zListSourcesResponse_unstable.parse( + raw, + ) as ListSourcesResponse_unstable; + } + + async sourcesUpdate_unstable( + params: UpdateSourceRequest_unstable, + ): Promise { + const raw = await this.conn.extMethod( + "_goose/unstable/sources/update", + params, + ); + return zUpdateSourceResponse_unstable.parse( + raw, + ) as UpdateSourceResponse_unstable; + } + + async sourcesDelete_unstable( + params: DeleteSourceRequest_unstable, + ): Promise { + await this.conn.extMethod("_goose/unstable/sources/delete", params); + } + + async sourcesExport_unstable( + params: ExportSourceRequest_unstable, + ): Promise { + const raw = await this.conn.extMethod( + "_goose/unstable/sources/export", + params, + ); + return zExportSourceResponse_unstable.parse( + raw, + ) as ExportSourceResponse_unstable; + } + + async sourcesImport_unstable( + params: ImportSourcesRequest_unstable, + ): Promise { + const raw = await this.conn.extMethod( + "_goose/unstable/sources/import", + params, + ); + return zImportSourcesResponse_unstable.parse( + raw, + ) as ImportSourcesResponse_unstable; + } + + async dictationTranscribe_unstable( + params: DictationTranscribeRequest_unstable, + ): Promise { + const raw = await this.conn.extMethod( + "_goose/unstable/dictation/transcribe", + params, + ); + return zDictationTranscribeResponse_unstable.parse( + raw, + ) as DictationTranscribeResponse_unstable; + } + + async dictationConfig_unstable( + params: DictationConfigRequest_unstable, + ): Promise { + const raw = await this.conn.extMethod( + "_goose/unstable/dictation/config", + params, + ); + return zDictationConfigResponse_unstable.parse( + raw, + ) as DictationConfigResponse_unstable; + } + + async dictationSecretSave_unstable( + params: DictationSecretSaveRequest_unstable, + ): Promise { + await this.conn.extMethod("_goose/unstable/dictation/secret/save", params); + } + + async dictationSecretDelete_unstable( + params: DictationSecretDeleteRequest_unstable, + ): Promise { + await this.conn.extMethod( + "_goose/unstable/dictation/secret/delete", + params, + ); + } + + async dictationModelsList_unstable( + params: DictationModelsListRequest_unstable, + ): Promise { + const raw = await this.conn.extMethod( + "_goose/unstable/dictation/models/list", + params, + ); + return zDictationModelsListResponse_unstable.parse( + raw, + ) as DictationModelsListResponse_unstable; + } + + async dictationModelsDownload_unstable( + params: DictationModelDownloadRequest_unstable, + ): Promise { + await this.conn.extMethod( + "_goose/unstable/dictation/models/download", + params, + ); + } + + async dictationModelsDownloadProgress_unstable( + params: DictationModelDownloadProgressRequest_unstable, + ): Promise { + const raw = await this.conn.extMethod( + "_goose/unstable/dictation/models/download/progress", + params, + ); + return zDictationModelDownloadProgressResponse_unstable.parse( + raw, + ) as DictationModelDownloadProgressResponse_unstable; + } + + async dictationModelsCancel_unstable( + params: DictationModelCancelRequest_unstable, + ): Promise { + await this.conn.extMethod( + "_goose/unstable/dictation/models/cancel", + params, + ); + } + + async dictationModelsDelete_unstable( + params: DictationModelDeleteRequest_unstable, + ): Promise { + await this.conn.extMethod( + "_goose/unstable/dictation/models/delete", + params, + ); + } + + async dictationModelsSelect_unstable( + params: DictationModelSelectRequest_unstable, + ): Promise { + await this.conn.extMethod( + "_goose/unstable/dictation/models/select", + params, + ); } } diff --git a/ui/sdk/src/generated/index.ts b/ui/sdk/src/generated/index.ts index e4ecad2f29..701b2dd98b 100644 --- a/ui/sdk/src/generated/index.ts +++ b/ui/sdk/src/generated/index.ts @@ -1,36 +1,36 @@ // This file is auto-generated by @hey-api/openapi-ts -export type { AddConfigExtensionRequest, AddExtensionRequest, ArchiveSessionRequest, CreateSourceRequest, CreateSourceResponse, CustomProviderConfigDto, CustomProviderCreateRequest, CustomProviderCreateResponse, CustomProviderDeleteRequest, CustomProviderDeleteResponse, CustomProviderReadRequest, CustomProviderReadResponse, CustomProviderUpdateRequest, CustomProviderUpdateResponse, DefaultsReadRequest, DefaultsReadResponse, DefaultsSaveRequest, DeleteSessionRequest, DeleteSourceRequest, DictationConfigRequest, DictationConfigResponse, DictationDownloadProgress, DictationLocalModelStatus, DictationModelCancelRequest, DictationModelDeleteRequest, DictationModelDownloadProgressRequest, DictationModelDownloadProgressResponse, DictationModelDownloadRequest, DictationModelOption, DictationModelSelectRequest, DictationModelsListRequest, DictationModelsListResponse, DictationProviderStatusEntry, DictationSecretDeleteRequest, DictationSecretSaveRequest, DictationTranscribeRequest, DictationTranscribeResponse, EmptyResponse, ExportSessionRequest, ExportSessionResponse, ExportSourceRequest, ExportSourceResponse, ExtRequest, ExtResponse, GetExtensionsRequest, GetExtensionsResponse, GetSessionExtensionsRequest, GetSessionExtensionsResponse, GetToolsRequest, GetToolsResponse, GooseToolCallRequest, GooseToolCallResponse, ImportSessionRequest, ImportSessionResponse, ImportSourcesRequest, ImportSourcesResponse, ListProvidersRequest, ListProvidersResponse, ListSourcesRequest, ListSourcesResponse, OnboardingImportApplyRequest, OnboardingImportApplyResponse, OnboardingImportCandidate, OnboardingImportCounts, OnboardingImportScanRequest, OnboardingImportScanResponse, OnboardingImportSourceKind, PreferenceKey, PreferencesReadRequest, PreferencesReadResponse, PreferencesRemoveRequest, PreferencesSaveRequest, PreferenceValue, ProviderCatalogListRequest, ProviderCatalogListResponse, ProviderCatalogTemplateRequest, ProviderCatalogTemplateResponse, ProviderConfigAuthenticateRequest, ProviderConfigChangeResponse, ProviderConfigDeleteRequest, ProviderConfigFieldUpdate, ProviderConfigFieldValueDto, ProviderConfigKey, ProviderConfigReadRequest, ProviderConfigReadResponse, ProviderConfigSaveRequest, ProviderConfigStatusDto, ProviderConfigStatusRequest, ProviderConfigStatusResponse, ProviderInventoryEntryDto, ProviderInventoryModelDto, ProviderSetupCatalogEntryDto, ProviderSetupCatalogListRequest, ProviderSetupCatalogListResponse, ProviderSetupCategoryDto, ProviderSetupFieldDto, ProviderSetupGroupDto, ProviderSetupMethodDto, ProviderTemplateCapabilitiesDto, ProviderTemplateCatalogEntryDto, ProviderTemplateDto, ProviderTemplateModelDto, ReadResourceRequest, ReadResourceResponse, RefreshProviderInventoryRequest, RefreshProviderInventoryResponse, RefreshProviderInventorySkipDto, RefreshProviderInventorySkipReasonDto, RemoveConfigExtensionRequest, RemoveExtensionRequest, RenameSessionRequest, SourceEntry, SourceType, ToggleConfigExtensionRequest, UnarchiveSessionRequest, UpdateSessionProjectRequest, UpdateSourceRequest, UpdateSourceResponse, UpdateWorkingDirRequest } from './types.gen.js'; +export type { AddConfigExtensionRequest_unstable, AddExtensionRequest_unstable, ArchiveSessionRequest_unstable, CreateSourceRequest_unstable, CreateSourceResponse_unstable, CustomProviderConfigDto, CustomProviderCreateRequest_unstable, CustomProviderCreateResponse_unstable, CustomProviderDeleteRequest_unstable, CustomProviderDeleteResponse_unstable, CustomProviderReadRequest_unstable, CustomProviderReadResponse_unstable, CustomProviderUpdateRequest_unstable, CustomProviderUpdateResponse_unstable, DefaultsReadRequest_unstable, DefaultsReadResponse_unstable, DefaultsSaveRequest_unstable, DeleteSessionRequest, DeleteSourceRequest_unstable, DictationConfigRequest_unstable, DictationConfigResponse_unstable, DictationDownloadProgress, DictationLocalModelStatus, DictationModelCancelRequest_unstable, DictationModelDeleteRequest_unstable, DictationModelDownloadProgressRequest_unstable, DictationModelDownloadProgressResponse_unstable, DictationModelDownloadRequest_unstable, DictationModelOption, DictationModelSelectRequest_unstable, DictationModelsListRequest_unstable, DictationModelsListResponse_unstable, DictationProviderStatusEntry, DictationSecretDeleteRequest_unstable, DictationSecretSaveRequest_unstable, DictationTranscribeRequest_unstable, DictationTranscribeResponse_unstable, EmptyResponse, ExportSessionRequest_unstable, ExportSessionResponse_unstable, ExportSourceRequest_unstable, ExportSourceResponse_unstable, ExtRequest, ExtResponse, GetExtensionsRequest_unstable, GetExtensionsResponse_unstable, GetSessionExtensionsRequest_unstable, GetSessionExtensionsResponse_unstable, GetToolsRequest_unstable, GetToolsResponse_unstable, GooseToolCallRequest_unstable, GooseToolCallResponse_unstable, ImportSessionRequest_unstable, ImportSessionResponse_unstable, ImportSourcesRequest_unstable, ImportSourcesResponse_unstable, ListProvidersRequest_unstable, ListProvidersResponse_unstable, ListSourcesRequest_unstable, ListSourcesResponse_unstable, OnboardingImportApplyRequest_unstable, OnboardingImportApplyResponse_unstable, OnboardingImportCandidate, OnboardingImportCounts, OnboardingImportScanRequest_unstable, OnboardingImportScanResponse_unstable, OnboardingImportSourceKind, PreferenceKey, PreferencesReadRequest_unstable, PreferencesReadResponse_unstable, PreferencesRemoveRequest_unstable, PreferencesSaveRequest_unstable, PreferenceValue, ProviderCatalogListRequest_unstable, ProviderCatalogListResponse_unstable, ProviderCatalogTemplateRequest_unstable, ProviderCatalogTemplateResponse_unstable, ProviderConfigAuthenticateRequest_unstable, ProviderConfigChangeResponse_unstable, ProviderConfigDeleteRequest_unstable, ProviderConfigFieldUpdate, ProviderConfigFieldValueDto, ProviderConfigKey, ProviderConfigReadRequest_unstable, ProviderConfigReadResponse_unstable, ProviderConfigSaveRequest_unstable, ProviderConfigStatusDto, ProviderConfigStatusRequest_unstable, ProviderConfigStatusResponse_unstable, ProviderInventoryEntryDto, ProviderInventoryModelDto, ProviderSetupCatalogEntryDto, ProviderSetupCatalogListRequest_unstable, ProviderSetupCatalogListResponse_unstable, ProviderSetupCategoryDto, ProviderSetupFieldDto, ProviderSetupGroupDto, ProviderSetupMethodDto, ProviderTemplateCapabilitiesDto, ProviderTemplateCatalogEntryDto, ProviderTemplateDto, ProviderTemplateModelDto, ReadResourceRequest_unstable, ReadResourceResponse_unstable, RefreshProviderInventoryRequest_unstable, RefreshProviderInventoryResponse_unstable, RefreshProviderInventorySkipDto, RefreshProviderInventorySkipReasonDto, RemoveConfigExtensionRequest_unstable, RemoveExtensionRequest_unstable, RenameSessionRequest_unstable, SourceEntry, SourceScope, SourceType, ToggleConfigExtensionRequest_unstable, UnarchiveSessionRequest_unstable, UpdateSessionProjectRequest_unstable, UpdateSourceRequest_unstable, UpdateSourceResponse_unstable, UpdateWorkingDirRequest_unstable } from './types.gen.js'; export const GOOSE_EXT_METHODS = [ { - method: "_goose/extensions/add", - requestType: "AddExtensionRequest", + method: "_goose/unstable/session/extensions/add", + requestType: "AddExtensionRequest_unstable", responseType: "EmptyResponse", }, { - method: "_goose/extensions/remove", - requestType: "RemoveExtensionRequest", + method: "_goose/unstable/session/extensions/remove", + requestType: "RemoveExtensionRequest_unstable", responseType: "EmptyResponse", }, { - method: "_goose/tools", - requestType: "GetToolsRequest", - responseType: "GetToolsResponse", + method: "_goose/unstable/tools/list", + requestType: "GetToolsRequest_unstable", + responseType: "GetToolsResponse_unstable", }, { - method: "_goose/tool/call", - requestType: "GooseToolCallRequest", - responseType: "GooseToolCallResponse", + method: "_goose/unstable/tools/call", + requestType: "GooseToolCallRequest_unstable", + responseType: "GooseToolCallResponse_unstable", }, { - method: "_goose/resource/read", - requestType: "ReadResourceRequest", - responseType: "ReadResourceResponse", + method: "_goose/unstable/resources/read", + requestType: "ReadResourceRequest_unstable", + responseType: "ReadResourceResponse_unstable", }, { - method: "_goose/working_dir/update", - requestType: "UpdateWorkingDirRequest", + method: "_goose/unstable/session/working-dir/update", + requestType: "UpdateWorkingDirRequest_unstable", responseType: "EmptyResponse", }, { @@ -39,243 +39,243 @@ export const GOOSE_EXT_METHODS = [ responseType: "EmptyResponse", }, { - method: "_goose/config/extensions", - requestType: "GetExtensionsRequest", - responseType: "GetExtensionsResponse", + method: "_goose/unstable/config/extensions/list", + requestType: "GetExtensionsRequest_unstable", + responseType: "GetExtensionsResponse_unstable", }, { - method: "_goose/config/extensions/add", - requestType: "AddConfigExtensionRequest", + method: "_goose/unstable/config/extensions/add", + requestType: "AddConfigExtensionRequest_unstable", responseType: "EmptyResponse", }, { - method: "_goose/config/extensions/remove", - requestType: "RemoveConfigExtensionRequest", + method: "_goose/unstable/config/extensions/remove", + requestType: "RemoveConfigExtensionRequest_unstable", responseType: "EmptyResponse", }, { - method: "_goose/config/extensions/toggle", - requestType: "ToggleConfigExtensionRequest", + method: "_goose/unstable/config/extensions/toggle", + requestType: "ToggleConfigExtensionRequest_unstable", responseType: "EmptyResponse", }, { - method: "_goose/session/extensions", - requestType: "GetSessionExtensionsRequest", - responseType: "GetSessionExtensionsResponse", + method: "_goose/unstable/session/extensions/list", + requestType: "GetSessionExtensionsRequest_unstable", + responseType: "GetSessionExtensionsResponse_unstable", }, { - method: "_goose/providers/list", - requestType: "ListProvidersRequest", - responseType: "ListProvidersResponse", + method: "_goose/unstable/providers/list", + requestType: "ListProvidersRequest_unstable", + responseType: "ListProvidersResponse_unstable", }, { - method: "_goose/providers/catalog/list", - requestType: "ProviderCatalogListRequest", - responseType: "ProviderCatalogListResponse", + method: "_goose/unstable/providers/catalog/list", + requestType: "ProviderCatalogListRequest_unstable", + responseType: "ProviderCatalogListResponse_unstable", }, { - method: "_goose/providers/setup/catalog/list", - requestType: "ProviderSetupCatalogListRequest", - responseType: "ProviderSetupCatalogListResponse", + method: "_goose/unstable/providers/setup/catalog/list", + requestType: "ProviderSetupCatalogListRequest_unstable", + responseType: "ProviderSetupCatalogListResponse_unstable", }, { - method: "_goose/providers/catalog/template", - requestType: "ProviderCatalogTemplateRequest", - responseType: "ProviderCatalogTemplateResponse", + method: "_goose/unstable/providers/catalog/template", + requestType: "ProviderCatalogTemplateRequest_unstable", + responseType: "ProviderCatalogTemplateResponse_unstable", }, { - method: "_goose/providers/custom/create", - requestType: "CustomProviderCreateRequest", - responseType: "CustomProviderCreateResponse", + method: "_goose/unstable/providers/custom/create", + requestType: "CustomProviderCreateRequest_unstable", + responseType: "CustomProviderCreateResponse_unstable", }, { - method: "_goose/providers/custom/read", - requestType: "CustomProviderReadRequest", - responseType: "CustomProviderReadResponse", + method: "_goose/unstable/providers/custom/read", + requestType: "CustomProviderReadRequest_unstable", + responseType: "CustomProviderReadResponse_unstable", }, { - method: "_goose/providers/custom/update", - requestType: "CustomProviderUpdateRequest", - responseType: "CustomProviderUpdateResponse", + method: "_goose/unstable/providers/custom/update", + requestType: "CustomProviderUpdateRequest_unstable", + responseType: "CustomProviderUpdateResponse_unstable", }, { - method: "_goose/providers/custom/delete", - requestType: "CustomProviderDeleteRequest", - responseType: "CustomProviderDeleteResponse", + method: "_goose/unstable/providers/custom/delete", + requestType: "CustomProviderDeleteRequest_unstable", + responseType: "CustomProviderDeleteResponse_unstable", }, { - method: "_goose/providers/inventory/refresh", - requestType: "RefreshProviderInventoryRequest", - responseType: "RefreshProviderInventoryResponse", + method: "_goose/unstable/providers/inventory/refresh", + requestType: "RefreshProviderInventoryRequest_unstable", + responseType: "RefreshProviderInventoryResponse_unstable", }, { - method: "_goose/providers/config/read", - requestType: "ProviderConfigReadRequest", - responseType: "ProviderConfigReadResponse", + method: "_goose/unstable/providers/config/read", + requestType: "ProviderConfigReadRequest_unstable", + responseType: "ProviderConfigReadResponse_unstable", }, { - method: "_goose/providers/config/status", - requestType: "ProviderConfigStatusRequest", - responseType: "ProviderConfigStatusResponse", + method: "_goose/unstable/providers/config/status", + requestType: "ProviderConfigStatusRequest_unstable", + responseType: "ProviderConfigStatusResponse_unstable", }, { - method: "_goose/providers/config/save", - requestType: "ProviderConfigSaveRequest", - responseType: "ProviderConfigChangeResponse", + method: "_goose/unstable/providers/config/save", + requestType: "ProviderConfigSaveRequest_unstable", + responseType: "ProviderConfigChangeResponse_unstable", }, { - method: "_goose/providers/config/delete", - requestType: "ProviderConfigDeleteRequest", - responseType: "ProviderConfigChangeResponse", + method: "_goose/unstable/providers/config/delete", + requestType: "ProviderConfigDeleteRequest_unstable", + responseType: "ProviderConfigChangeResponse_unstable", }, { - method: "_goose/providers/config/authenticate", - requestType: "ProviderConfigAuthenticateRequest", - responseType: "ProviderConfigChangeResponse", + method: "_goose/unstable/providers/config/authenticate", + requestType: "ProviderConfigAuthenticateRequest_unstable", + responseType: "ProviderConfigChangeResponse_unstable", }, { - method: "_goose/preferences/read", - requestType: "PreferencesReadRequest", - responseType: "PreferencesReadResponse", + method: "_goose/unstable/preferences/read", + requestType: "PreferencesReadRequest_unstable", + responseType: "PreferencesReadResponse_unstable", }, { - method: "_goose/preferences/save", - requestType: "PreferencesSaveRequest", + method: "_goose/unstable/preferences/save", + requestType: "PreferencesSaveRequest_unstable", responseType: "EmptyResponse", }, { - method: "_goose/preferences/remove", - requestType: "PreferencesRemoveRequest", + method: "_goose/unstable/preferences/remove", + requestType: "PreferencesRemoveRequest_unstable", responseType: "EmptyResponse", }, { - method: "_goose/defaults/read", - requestType: "DefaultsReadRequest", - responseType: "DefaultsReadResponse", + method: "_goose/unstable/defaults/read", + requestType: "DefaultsReadRequest_unstable", + responseType: "DefaultsReadResponse_unstable", }, { - method: "_goose/defaults/save", - requestType: "DefaultsSaveRequest", - responseType: "DefaultsReadResponse", + method: "_goose/unstable/defaults/save", + requestType: "DefaultsSaveRequest_unstable", + responseType: "DefaultsReadResponse_unstable", }, { - method: "_goose/onboarding/import/scan", - requestType: "OnboardingImportScanRequest", - responseType: "OnboardingImportScanResponse", + method: "_goose/unstable/onboarding/import/scan", + requestType: "OnboardingImportScanRequest_unstable", + responseType: "OnboardingImportScanResponse_unstable", }, { - method: "_goose/onboarding/import/apply", - requestType: "OnboardingImportApplyRequest", - responseType: "OnboardingImportApplyResponse", + method: "_goose/unstable/onboarding/import/apply", + requestType: "OnboardingImportApplyRequest_unstable", + responseType: "OnboardingImportApplyResponse_unstable", }, { - method: "_goose/session/export", - requestType: "ExportSessionRequest", - responseType: "ExportSessionResponse", + method: "_goose/unstable/session/export", + requestType: "ExportSessionRequest_unstable", + responseType: "ExportSessionResponse_unstable", }, { - method: "_goose/session/import", - requestType: "ImportSessionRequest", - responseType: "ImportSessionResponse", + method: "_goose/unstable/session/import", + requestType: "ImportSessionRequest_unstable", + responseType: "ImportSessionResponse_unstable", }, { - method: "_goose/session/update_project", - requestType: "UpdateSessionProjectRequest", + method: "_goose/unstable/session/project/update", + requestType: "UpdateSessionProjectRequest_unstable", responseType: "EmptyResponse", }, { - method: "_goose/session/rename", - requestType: "RenameSessionRequest", + method: "_goose/unstable/session/rename", + requestType: "RenameSessionRequest_unstable", responseType: "EmptyResponse", }, { - method: "_goose/session/archive", - requestType: "ArchiveSessionRequest", + method: "_goose/unstable/session/archive", + requestType: "ArchiveSessionRequest_unstable", responseType: "EmptyResponse", }, { - method: "_goose/session/unarchive", - requestType: "UnarchiveSessionRequest", + method: "_goose/unstable/session/unarchive", + requestType: "UnarchiveSessionRequest_unstable", responseType: "EmptyResponse", }, { - method: "_goose/sources/create", - requestType: "CreateSourceRequest", - responseType: "CreateSourceResponse", + method: "_goose/unstable/sources/create", + requestType: "CreateSourceRequest_unstable", + responseType: "CreateSourceResponse_unstable", }, { - method: "_goose/sources/list", - requestType: "ListSourcesRequest", - responseType: "ListSourcesResponse", + method: "_goose/unstable/sources/list", + requestType: "ListSourcesRequest_unstable", + responseType: "ListSourcesResponse_unstable", }, { - method: "_goose/sources/update", - requestType: "UpdateSourceRequest", - responseType: "UpdateSourceResponse", + method: "_goose/unstable/sources/update", + requestType: "UpdateSourceRequest_unstable", + responseType: "UpdateSourceResponse_unstable", }, { - method: "_goose/sources/delete", - requestType: "DeleteSourceRequest", + method: "_goose/unstable/sources/delete", + requestType: "DeleteSourceRequest_unstable", responseType: "EmptyResponse", }, { - method: "_goose/sources/export", - requestType: "ExportSourceRequest", - responseType: "ExportSourceResponse", + method: "_goose/unstable/sources/export", + requestType: "ExportSourceRequest_unstable", + responseType: "ExportSourceResponse_unstable", }, { - method: "_goose/sources/import", - requestType: "ImportSourcesRequest", - responseType: "ImportSourcesResponse", + method: "_goose/unstable/sources/import", + requestType: "ImportSourcesRequest_unstable", + responseType: "ImportSourcesResponse_unstable", }, { - method: "_goose/dictation/transcribe", - requestType: "DictationTranscribeRequest", - responseType: "DictationTranscribeResponse", + method: "_goose/unstable/dictation/transcribe", + requestType: "DictationTranscribeRequest_unstable", + responseType: "DictationTranscribeResponse_unstable", }, { - method: "_goose/dictation/config", - requestType: "DictationConfigRequest", - responseType: "DictationConfigResponse", + method: "_goose/unstable/dictation/config", + requestType: "DictationConfigRequest_unstable", + responseType: "DictationConfigResponse_unstable", }, { - method: "_goose/dictation/secret/save", - requestType: "DictationSecretSaveRequest", + method: "_goose/unstable/dictation/secret/save", + requestType: "DictationSecretSaveRequest_unstable", responseType: "EmptyResponse", }, { - method: "_goose/dictation/secret/delete", - requestType: "DictationSecretDeleteRequest", + method: "_goose/unstable/dictation/secret/delete", + requestType: "DictationSecretDeleteRequest_unstable", responseType: "EmptyResponse", }, { - method: "_goose/dictation/models/list", - requestType: "DictationModelsListRequest", - responseType: "DictationModelsListResponse", + method: "_goose/unstable/dictation/models/list", + requestType: "DictationModelsListRequest_unstable", + responseType: "DictationModelsListResponse_unstable", }, { - method: "_goose/dictation/models/download", - requestType: "DictationModelDownloadRequest", + method: "_goose/unstable/dictation/models/download", + requestType: "DictationModelDownloadRequest_unstable", responseType: "EmptyResponse", }, { - method: "_goose/dictation/models/download/progress", - requestType: "DictationModelDownloadProgressRequest", - responseType: "DictationModelDownloadProgressResponse", + method: "_goose/unstable/dictation/models/download/progress", + requestType: "DictationModelDownloadProgressRequest_unstable", + responseType: "DictationModelDownloadProgressResponse_unstable", }, { - method: "_goose/dictation/models/cancel", - requestType: "DictationModelCancelRequest", + method: "_goose/unstable/dictation/models/cancel", + requestType: "DictationModelCancelRequest_unstable", responseType: "EmptyResponse", }, { - method: "_goose/dictation/models/delete", - requestType: "DictationModelDeleteRequest", + method: "_goose/unstable/dictation/models/delete", + requestType: "DictationModelDeleteRequest_unstable", responseType: "EmptyResponse", }, { - method: "_goose/dictation/model/select", - requestType: "DictationModelSelectRequest", + method: "_goose/unstable/dictation/models/select", + requestType: "DictationModelSelectRequest_unstable", responseType: "EmptyResponse", }, ] as const; diff --git a/ui/sdk/src/generated/types.gen.ts b/ui/sdk/src/generated/types.gen.ts index 6b5639510b..e75ad7919b 100644 --- a/ui/sdk/src/generated/types.gen.ts +++ b/ui/sdk/src/generated/types.gen.ts @@ -4,7 +4,7 @@ /** * Add an extension to an active session. */ -export type AddExtensionRequest = { +export type AddExtensionRequest_unstable = { sessionId: string; /** * Extension configuration (see ExtensionConfig variants: Stdio, StreamableHttp, Builtin, Platform). @@ -22,7 +22,7 @@ export type EmptyResponse = { /** * Remove an extension from an active session. */ -export type RemoveExtensionRequest = { +export type RemoveExtensionRequest_unstable = { sessionId: string; name: string; }; @@ -30,14 +30,14 @@ export type RemoveExtensionRequest = { /** * List all tools available in a session. */ -export type GetToolsRequest = { +export type GetToolsRequest_unstable = { sessionId: string; }; /** * Tools response. */ -export type GetToolsResponse = { +export type GetToolsResponse_unstable = { /** * Array of tool info objects with `name`, `description`, `parameters`, and optional `permission`. */ @@ -47,7 +47,7 @@ export type GetToolsResponse = { /** * Call a tool from an extension. */ -export type GooseToolCallRequest = { +export type GooseToolCallRequest_unstable = { sessionId: string; name: string; arguments?: unknown; @@ -56,7 +56,7 @@ export type GooseToolCallRequest = { /** * Tool call response. */ -export type GooseToolCallResponse = { +export type GooseToolCallResponse_unstable = { content?: Array; structuredContent?: unknown; isError: boolean; @@ -66,7 +66,7 @@ export type GooseToolCallResponse = { /** * Read a resource from an extension. */ -export type ReadResourceRequest = { +export type ReadResourceRequest_unstable = { sessionId: string; uri: string; extensionName: string; @@ -75,7 +75,7 @@ export type ReadResourceRequest = { /** * Resource read response. */ -export type ReadResourceResponse = { +export type ReadResourceResponse_unstable = { /** * The resource result from the extension (MCP ReadResourceResult). */ @@ -85,7 +85,7 @@ export type ReadResourceResponse = { /** * Update the working directory for a session. */ -export type UpdateWorkingDirRequest = { +export type UpdateWorkingDirRequest_unstable = { sessionId: string; workingDir: string; }; @@ -100,14 +100,14 @@ export type DeleteSessionRequest = { /** * List configured extensions and any warnings. */ -export type GetExtensionsRequest = { +export type GetExtensionsRequest_unstable = { [key: string]: unknown; }; /** * List configured extensions and any warnings. */ -export type GetExtensionsResponse = { +export type GetExtensionsResponse_unstable = { /** * Array of ExtensionEntry objects with `enabled` flag, `configKey`, and flattened config details. */ @@ -118,7 +118,7 @@ export type GetExtensionsResponse = { /** * Persist a new extension to the user's global goose config. */ -export type AddConfigExtensionRequest = { +export type AddConfigExtensionRequest_unstable = { name: string; /** * Extension configuration. Must be a JSON object matching one of the @@ -132,30 +132,30 @@ export type AddConfigExtensionRequest = { /** * Remove a persisted extension from the user's global goose config. */ -export type RemoveConfigExtensionRequest = { +export type RemoveConfigExtensionRequest_unstable = { configKey: string; }; /** * Toggle the `enabled` flag for a persisted extension in the user's global goose config. */ -export type ToggleConfigExtensionRequest = { +export type ToggleConfigExtensionRequest_unstable = { configKey: string; enabled: boolean; }; -export type GetSessionExtensionsRequest = { +export type GetSessionExtensionsRequest_unstable = { sessionId: string; }; -export type GetSessionExtensionsResponse = { +export type GetSessionExtensionsResponse_unstable = { extensions: Array; }; /** * List providers with setup metadata and the current model inventory snapshot. */ -export type ListProvidersRequest = { +export type ListProvidersRequest_unstable = { /** * Only return entries for these providers. Empty means all. */ @@ -165,7 +165,7 @@ export type ListProvidersRequest = { /** * Provider list response. */ -export type ListProvidersResponse = { +export type ListProvidersResponse_unstable = { entries: Array; }; @@ -288,11 +288,11 @@ export type ProviderInventoryModelDto = { /** * List custom-provider catalog entries. Omit `format` to list all formats. */ -export type ProviderCatalogListRequest = { +export type ProviderCatalogListRequest_unstable = { format?: string | null; }; -export type ProviderCatalogListResponse = { +export type ProviderCatalogListResponse_unstable = { providers: Array; }; @@ -309,11 +309,11 @@ export type ProviderTemplateCatalogEntryDto = { /** * List provider setup catalog entries */ -export type ProviderSetupCatalogListRequest = { +export type ProviderSetupCatalogListRequest_unstable = { [key: string]: unknown; }; -export type ProviderSetupCatalogListResponse = { +export type ProviderSetupCatalogListResponse_unstable = { providers: Array; }; @@ -351,11 +351,11 @@ export type ProviderSetupGroupDto = 'default' | 'additional'; /** * Return the editable template for one catalog provider. */ -export type ProviderCatalogTemplateRequest = { +export type ProviderCatalogTemplateRequest_unstable = { providerId: string; }; -export type ProviderCatalogTemplateResponse = { +export type ProviderCatalogTemplateResponse_unstable = { template: ProviderTemplateDto; }; @@ -388,7 +388,7 @@ export type ProviderTemplateCapabilitiesDto = { /** * Create a custom provider backed by Goose's declarative provider store. */ -export type CustomProviderCreateRequest = { +export type CustomProviderCreateRequest_unstable = { engine: string; displayName: string; apiUrl: string; @@ -404,10 +404,10 @@ export type CustomProviderCreateRequest = { preservesThinking?: boolean | null; }; -export type CustomProviderCreateResponse = { +export type CustomProviderCreateResponse_unstable = { providerId: string; status: ProviderConfigStatusDto; - refresh: RefreshProviderInventoryResponse; + refresh: RefreshProviderInventoryResponse_unstable; }; export type ProviderConfigStatusDto = { @@ -418,7 +418,7 @@ export type ProviderConfigStatusDto = { /** * Refresh acknowledgement. */ -export type RefreshProviderInventoryResponse = { +export type RefreshProviderInventoryResponse_unstable = { /** * Which providers will be refreshed. */ @@ -439,11 +439,11 @@ export type RefreshProviderInventorySkipReasonDto = 'unknown_provider' | 'not_co /** * Read a declarative provider config. Custom configs are editable; bundled configs are read-only. */ -export type CustomProviderReadRequest = { +export type CustomProviderReadRequest_unstable = { providerId: string; }; -export type CustomProviderReadResponse = { +export type CustomProviderReadResponse_unstable = { provider: CustomProviderConfigDto; editable: boolean; status: ProviderConfigStatusDto; @@ -470,7 +470,7 @@ export type CustomProviderConfigDto = { /** * Update a custom provider backed by Goose's declarative provider store. */ -export type CustomProviderUpdateRequest = { +export type CustomProviderUpdateRequest_unstable = { providerId: string; engine: string; displayName: string; @@ -487,28 +487,28 @@ export type CustomProviderUpdateRequest = { preservesThinking?: boolean | null; }; -export type CustomProviderUpdateResponse = { +export type CustomProviderUpdateResponse_unstable = { providerId: string; status: ProviderConfigStatusDto; - refresh: RefreshProviderInventoryResponse; + refresh: RefreshProviderInventoryResponse_unstable; }; /** * Delete a custom provider from Goose's declarative provider store. */ -export type CustomProviderDeleteRequest = { +export type CustomProviderDeleteRequest_unstable = { providerId: string; }; -export type CustomProviderDeleteResponse = { +export type CustomProviderDeleteResponse_unstable = { providerId: string; - refresh: RefreshProviderInventoryResponse; + refresh: RefreshProviderInventoryResponse_unstable; }; /** * Trigger a background refresh of provider inventories. */ -export type RefreshProviderInventoryRequest = { +export type RefreshProviderInventoryRequest_unstable = { /** * Which providers to refresh. Empty means all known providers. */ @@ -518,11 +518,11 @@ export type RefreshProviderInventoryRequest = { /** * Read saved configuration field values for one provider. */ -export type ProviderConfigReadRequest = { +export type ProviderConfigReadRequest_unstable = { providerId: string; }; -export type ProviderConfigReadResponse = { +export type ProviderConfigReadResponse_unstable = { fields: Array; }; @@ -537,18 +537,18 @@ export type ProviderConfigFieldValueDto = { /** * Return provider configured statuses. Empty provider_ids means all providers. */ -export type ProviderConfigStatusRequest = { +export type ProviderConfigStatusRequest_unstable = { providerIds?: Array; }; -export type ProviderConfigStatusResponse = { +export type ProviderConfigStatusResponse_unstable = { statuses: Array; }; /** * Save provider configuration fields and start an inventory refresh when supported. */ -export type ProviderConfigSaveRequest = { +export type ProviderConfigSaveRequest_unstable = { providerId: string; fields: Array; }; @@ -558,35 +558,35 @@ export type ProviderConfigFieldUpdate = { value: string; }; -export type ProviderConfigChangeResponse = { +export type ProviderConfigChangeResponse_unstable = { status: ProviderConfigStatusDto; - refresh: RefreshProviderInventoryResponse; + refresh: RefreshProviderInventoryResponse_unstable; }; /** * Delete provider configuration fields and start an inventory refresh when supported. */ -export type ProviderConfigDeleteRequest = { +export type ProviderConfigDeleteRequest_unstable = { providerId: string; }; /** * Run a provider-owned native authentication flow and start an inventory refresh when supported. */ -export type ProviderConfigAuthenticateRequest = { +export type ProviderConfigAuthenticateRequest_unstable = { providerId: string; }; /** * Read allowlisted user preferences. Empty `keys` means all supported preferences. */ -export type PreferencesReadRequest = { +export type PreferencesReadRequest_unstable = { keys?: Array; }; export type PreferenceKey = 'autoCompactThreshold' | 'voiceAutoSubmitPhrases' | 'voiceDictationProvider' | 'voiceDictationPreferredMic'; -export type PreferencesReadResponse = { +export type PreferencesReadResponse_unstable = { values: Array; }; @@ -598,25 +598,25 @@ export type PreferenceValue = { /** * Save allowlisted user preferences. */ -export type PreferencesSaveRequest = { +export type PreferencesSaveRequest_unstable = { values?: Array; }; /** * Remove allowlisted user preferences. */ -export type PreferencesRemoveRequest = { +export type PreferencesRemoveRequest_unstable = { keys?: Array; }; /** * Read Goose default provider and model configuration. */ -export type DefaultsReadRequest = { +export type DefaultsReadRequest_unstable = { [key: string]: unknown; }; -export type DefaultsReadResponse = { +export type DefaultsReadResponse_unstable = { providerId?: string | null; modelId?: string | null; }; @@ -624,7 +624,7 @@ export type DefaultsReadResponse = { /** * Save Goose default provider and model configuration. */ -export type DefaultsSaveRequest = { +export type DefaultsSaveRequest_unstable = { providerId: string; modelId?: string | null; }; @@ -632,7 +632,7 @@ export type DefaultsSaveRequest = { /** * Scan for existing Goose and compatible app data that onboarding can import. */ -export type OnboardingImportScanRequest = { +export type OnboardingImportScanRequest_unstable = { /** * Empty means all supported import sources. */ @@ -644,7 +644,7 @@ export type OnboardingImportScanRequest = { */ export type OnboardingImportSourceKind = 'goose_config' | 'claude_desktop'; -export type OnboardingImportScanResponse = { +export type OnboardingImportScanResponse_unstable = { candidates: Array; }; @@ -669,43 +669,43 @@ export type OnboardingImportCounts = { /** * Import selected onboarding candidates. */ -export type OnboardingImportApplyRequest = { +export type OnboardingImportApplyRequest_unstable = { candidateIds?: Array; enableImportedExtensions?: boolean; }; -export type OnboardingImportApplyResponse = { +export type OnboardingImportApplyResponse_unstable = { imported: OnboardingImportCounts; skipped: OnboardingImportCounts; warnings?: Array; - providerDefaults?: DefaultsReadResponse | null; + providerDefaults?: DefaultsReadResponse_unstable | null; }; /** * Export a session as a JSON string. */ -export type ExportSessionRequest = { +export type ExportSessionRequest_unstable = { sessionId: string; }; /** * Export session response — raw JSON of the goose session with `conversation`. */ -export type ExportSessionResponse = { +export type ExportSessionResponse_unstable = { data: string; }; /** * Import a session from a JSON string. */ -export type ImportSessionRequest = { +export type ImportSessionRequest_unstable = { data: string; }; /** * Import session response — metadata about the newly created session. */ -export type ImportSessionResponse = { +export type ImportSessionResponse_unstable = { sessionId: string; title?: string | null; updatedAt?: string | null; @@ -715,7 +715,7 @@ export type ImportSessionResponse = { /** * Update the project association for a session. */ -export type UpdateSessionProjectRequest = { +export type UpdateSessionProjectRequest_unstable = { sessionId: string; projectId?: string | null; }; @@ -723,7 +723,7 @@ export type UpdateSessionProjectRequest = { /** * Rename a session. */ -export type RenameSessionRequest = { +export type RenameSessionRequest_unstable = { sessionId: string; title: string; }; @@ -731,36 +731,26 @@ export type RenameSessionRequest = { /** * Archive a session (soft delete). */ -export type ArchiveSessionRequest = { +export type ArchiveSessionRequest_unstable = { sessionId: string; }; /** * Unarchive a previously archived session. */ -export type UnarchiveSessionRequest = { +export type UnarchiveSessionRequest_unstable = { sessionId: string; }; /** * Create a new source in an explicit target scope (global or project-scoped). */ -export type CreateSourceRequest = { +export type CreateSourceRequest_unstable = { type: SourceType; name: string; description: string; content: string; - global: boolean; - /** - * Absolute path to the project root. Required when `global` is false. - */ - projectDir?: string | null; - /** - * Project source ID. When set with `global: false`, the backend resolves - * the project's first working directory automatically. Takes precedence - * over `project_dir`. - */ - projectId?: string | null; + target: SourceScope; /** * Arbitrary key/value metadata. */ @@ -774,7 +764,20 @@ export type CreateSourceRequest = { */ export type SourceType = 'skill' | 'builtinSkill' | 'recipe' | 'subrecipe' | 'agent' | 'project'; -export type CreateSourceResponse = { +/** + * Target scope for creating or importing sources. + */ +export type SourceScope = { + scope: 'global'; +} | { + projectDir: string; + scope: 'projectDir'; +} | { + projectId: string; + scope: 'projectId'; +}; + +export type CreateSourceResponse_unstable = { source: SourceEntry; }; @@ -827,7 +830,7 @@ export type SourceEntry = { * set. If `type` is `builtinSkill`, this lists shipped read-only built-in * skills. */ -export type ListSourcesRequest = { +export type ListSourcesRequest_unstable = { type?: SourceType | null; projectDir?: string | null; /** @@ -837,14 +840,14 @@ export type ListSourcesRequest = { includeProjectSources?: boolean; }; -export type ListSourcesResponse = { +export type ListSourcesResponse_unstable = { sources: Array; }; /** * Update an existing source's name, description, and content by absolute path. */ -export type UpdateSourceRequest = { +export type UpdateSourceRequest_unstable = { type: SourceType; path: string; name: string; @@ -862,14 +865,14 @@ export type UpdateSourceRequest = { } | null; }; -export type UpdateSourceResponse = { +export type UpdateSourceResponse_unstable = { source: SourceEntry; }; /** * Delete a source and its on-disk directory by absolute path. */ -export type DeleteSourceRequest = { +export type DeleteSourceRequest_unstable = { type: SourceType; path: string; }; @@ -877,35 +880,34 @@ export type DeleteSourceRequest = { /** * Export a source at an absolute path as a portable JSON payload. */ -export type ExportSourceRequest = { +export type ExportSourceRequest_unstable = { type: SourceType; path: string; }; -export type ExportSourceResponse = { +export type ExportSourceResponse_unstable = { json: string; filename: string; }; /** - * Import a source from a JSON export payload produced by `_goose/sources/export`. + * Import a source from a JSON export payload produced by `_goose/unstable/sources/export`. * The imported source is written into the explicit target scope; on name * collisions a `-imported` suffix is appended. */ -export type ImportSourcesRequest = { +export type ImportSourcesRequest_unstable = { data: string; - global: boolean; - projectDir?: string | null; + target: SourceScope; }; -export type ImportSourcesResponse = { +export type ImportSourcesResponse_unstable = { sources: Array; }; /** * Transcribe audio via a dictation provider. */ -export type DictationTranscribeRequest = { +export type DictationTranscribeRequest_unstable = { /** * Base64-encoded audio data */ @@ -923,21 +925,21 @@ export type DictationTranscribeRequest = { /** * Transcription result. */ -export type DictationTranscribeResponse = { +export type DictationTranscribeResponse_unstable = { text: string; }; /** * Get the configuration status of all dictation providers. */ -export type DictationConfigRequest = { +export type DictationConfigRequest_unstable = { [key: string]: unknown; }; /** * Dictation config response — map of provider name to status. */ -export type DictationConfigResponse = { +export type DictationConfigResponse_unstable = { providers: { [key: string]: DictationProviderStatusEntry; }; @@ -968,7 +970,7 @@ export type DictationModelOption = { /** * Set a dictation provider secret value. */ -export type DictationSecretSaveRequest = { +export type DictationSecretSaveRequest_unstable = { provider: string; value: string; }; @@ -976,18 +978,18 @@ export type DictationSecretSaveRequest = { /** * Remove a dictation provider secret value. */ -export type DictationSecretDeleteRequest = { +export type DictationSecretDeleteRequest_unstable = { provider: string; }; /** * List available local Whisper models with their download status. */ -export type DictationModelsListRequest = { +export type DictationModelsListRequest_unstable = { [key: string]: unknown; }; -export type DictationModelsListResponse = { +export type DictationModelsListResponse_unstable = { models: Array; }; @@ -1003,18 +1005,18 @@ export type DictationLocalModelStatus = { /** * Kick off a background download of a local Whisper model. */ -export type DictationModelDownloadRequest = { +export type DictationModelDownloadRequest_unstable = { modelId: string; }; /** * Poll the progress of an in-flight download. */ -export type DictationModelDownloadProgressRequest = { +export type DictationModelDownloadProgressRequest_unstable = { modelId: string; }; -export type DictationModelDownloadProgressResponse = { +export type DictationModelDownloadProgressResponse_unstable = { /** * None when no download is active for this model id. */ @@ -1035,21 +1037,21 @@ export type DictationDownloadProgress = { /** * Cancel an in-flight download. */ -export type DictationModelCancelRequest = { +export type DictationModelCancelRequest_unstable = { modelId: string; }; /** * Delete a downloaded local Whisper model from disk. */ -export type DictationModelDeleteRequest = { +export type DictationModelDeleteRequest_unstable = { modelId: string; }; /** * Persist the user's model selection for a given provider. */ -export type DictationModelSelectRequest = { +export type DictationModelSelectRequest_unstable = { provider: string; modelId: string; }; @@ -1057,14 +1059,14 @@ export type DictationModelSelectRequest = { export type ExtRequest = { id: string; method: string; - params?: AddExtensionRequest | RemoveExtensionRequest | GetToolsRequest | GooseToolCallRequest | ReadResourceRequest | UpdateWorkingDirRequest | DeleteSessionRequest | GetExtensionsRequest | AddConfigExtensionRequest | RemoveConfigExtensionRequest | ToggleConfigExtensionRequest | GetSessionExtensionsRequest | ListProvidersRequest | ProviderCatalogListRequest | ProviderSetupCatalogListRequest | ProviderCatalogTemplateRequest | CustomProviderCreateRequest | CustomProviderReadRequest | CustomProviderUpdateRequest | CustomProviderDeleteRequest | RefreshProviderInventoryRequest | ProviderConfigReadRequest | ProviderConfigStatusRequest | ProviderConfigSaveRequest | ProviderConfigDeleteRequest | ProviderConfigAuthenticateRequest | PreferencesReadRequest | PreferencesSaveRequest | PreferencesRemoveRequest | DefaultsReadRequest | DefaultsSaveRequest | OnboardingImportScanRequest | OnboardingImportApplyRequest | ExportSessionRequest | ImportSessionRequest | UpdateSessionProjectRequest | RenameSessionRequest | ArchiveSessionRequest | UnarchiveSessionRequest | CreateSourceRequest | ListSourcesRequest | UpdateSourceRequest | DeleteSourceRequest | ExportSourceRequest | ImportSourcesRequest | DictationTranscribeRequest | DictationConfigRequest | DictationSecretSaveRequest | DictationSecretDeleteRequest | DictationModelsListRequest | DictationModelDownloadRequest | DictationModelDownloadProgressRequest | DictationModelCancelRequest | DictationModelDeleteRequest | DictationModelSelectRequest | { + params?: AddExtensionRequest_unstable | RemoveExtensionRequest_unstable | GetToolsRequest_unstable | GooseToolCallRequest_unstable | ReadResourceRequest_unstable | UpdateWorkingDirRequest_unstable | DeleteSessionRequest | GetExtensionsRequest_unstable | AddConfigExtensionRequest_unstable | RemoveConfigExtensionRequest_unstable | ToggleConfigExtensionRequest_unstable | GetSessionExtensionsRequest_unstable | ListProvidersRequest_unstable | ProviderCatalogListRequest_unstable | ProviderSetupCatalogListRequest_unstable | ProviderCatalogTemplateRequest_unstable | CustomProviderCreateRequest_unstable | CustomProviderReadRequest_unstable | CustomProviderUpdateRequest_unstable | CustomProviderDeleteRequest_unstable | RefreshProviderInventoryRequest_unstable | ProviderConfigReadRequest_unstable | ProviderConfigStatusRequest_unstable | ProviderConfigSaveRequest_unstable | ProviderConfigDeleteRequest_unstable | ProviderConfigAuthenticateRequest_unstable | PreferencesReadRequest_unstable | PreferencesSaveRequest_unstable | PreferencesRemoveRequest_unstable | DefaultsReadRequest_unstable | DefaultsSaveRequest_unstable | OnboardingImportScanRequest_unstable | OnboardingImportApplyRequest_unstable | ExportSessionRequest_unstable | ImportSessionRequest_unstable | UpdateSessionProjectRequest_unstable | RenameSessionRequest_unstable | ArchiveSessionRequest_unstable | UnarchiveSessionRequest_unstable | CreateSourceRequest_unstable | ListSourcesRequest_unstable | UpdateSourceRequest_unstable | DeleteSourceRequest_unstable | ExportSourceRequest_unstable | ImportSourcesRequest_unstable | DictationTranscribeRequest_unstable | DictationConfigRequest_unstable | DictationSecretSaveRequest_unstable | DictationSecretDeleteRequest_unstable | DictationModelsListRequest_unstable | DictationModelDownloadRequest_unstable | DictationModelDownloadProgressRequest_unstable | DictationModelCancelRequest_unstable | DictationModelDeleteRequest_unstable | DictationModelSelectRequest_unstable | { [key: string]: unknown; } | null; }; export type ExtResponse = { id: string; - result?: EmptyResponse | GetToolsResponse | GooseToolCallResponse | ReadResourceResponse | GetExtensionsResponse | GetSessionExtensionsResponse | ListProvidersResponse | ProviderCatalogListResponse | ProviderSetupCatalogListResponse | ProviderCatalogTemplateResponse | CustomProviderCreateResponse | CustomProviderReadResponse | CustomProviderUpdateResponse | CustomProviderDeleteResponse | RefreshProviderInventoryResponse | ProviderConfigReadResponse | ProviderConfigStatusResponse | ProviderConfigChangeResponse | PreferencesReadResponse | DefaultsReadResponse | OnboardingImportScanResponse | OnboardingImportApplyResponse | ExportSessionResponse | ImportSessionResponse | CreateSourceResponse | ListSourcesResponse | UpdateSourceResponse | ExportSourceResponse | ImportSourcesResponse | DictationTranscribeResponse | DictationConfigResponse | DictationModelsListResponse | DictationModelDownloadProgressResponse | unknown; + result?: EmptyResponse | GetToolsResponse_unstable | GooseToolCallResponse_unstable | ReadResourceResponse_unstable | GetExtensionsResponse_unstable | GetSessionExtensionsResponse_unstable | ListProvidersResponse_unstable | ProviderCatalogListResponse_unstable | ProviderSetupCatalogListResponse_unstable | ProviderCatalogTemplateResponse_unstable | CustomProviderCreateResponse_unstable | CustomProviderReadResponse_unstable | CustomProviderUpdateResponse_unstable | CustomProviderDeleteResponse_unstable | RefreshProviderInventoryResponse_unstable | ProviderConfigReadResponse_unstable | ProviderConfigStatusResponse_unstable | ProviderConfigChangeResponse_unstable | PreferencesReadResponse_unstable | DefaultsReadResponse_unstable | OnboardingImportScanResponse_unstable | OnboardingImportApplyResponse_unstable | ExportSessionResponse_unstable | ImportSessionResponse_unstable | CreateSourceResponse_unstable | ListSourcesResponse_unstable | UpdateSourceResponse_unstable | ExportSourceResponse_unstable | ImportSourcesResponse_unstable | DictationTranscribeResponse_unstable | DictationConfigResponse_unstable | DictationModelsListResponse_unstable | DictationModelDownloadProgressResponse_unstable | unknown; } | { error: { code: number; diff --git a/ui/sdk/src/generated/zod.gen.ts b/ui/sdk/src/generated/zod.gen.ts index 8b0951df18..300e478d75 100644 --- a/ui/sdk/src/generated/zod.gen.ts +++ b/ui/sdk/src/generated/zod.gen.ts @@ -5,7 +5,7 @@ import { z } from 'zod'; /** * Add an extension to an active session. */ -export const zAddExtensionRequest = z.object({ +export const zAddExtensionRequest_unstable = z.object({ sessionId: z.string(), config: z.unknown().optional().default(null) }); @@ -18,7 +18,7 @@ export const zEmptyResponse = z.record(z.unknown()); /** * Remove an extension from an active session. */ -export const zRemoveExtensionRequest = z.object({ +export const zRemoveExtensionRequest_unstable = z.object({ sessionId: z.string(), name: z.string() }); @@ -26,21 +26,21 @@ export const zRemoveExtensionRequest = z.object({ /** * List all tools available in a session. */ -export const zGetToolsRequest = z.object({ +export const zGetToolsRequest_unstable = z.object({ sessionId: z.string() }); /** * Tools response. */ -export const zGetToolsResponse = z.object({ +export const zGetToolsResponse_unstable = z.object({ tools: z.array(z.unknown()) }); /** * Call a tool from an extension. */ -export const zGooseToolCallRequest = z.object({ +export const zGooseToolCallRequest_unstable = z.object({ sessionId: z.string(), name: z.string(), arguments: z.unknown().optional().default(null) @@ -49,7 +49,7 @@ export const zGooseToolCallRequest = z.object({ /** * Tool call response. */ -export const zGooseToolCallResponse = z.object({ +export const zGooseToolCallResponse_unstable = z.object({ content: z.array(z.unknown()).optional().default([]), structuredContent: z.unknown().optional(), isError: z.boolean(), @@ -59,7 +59,7 @@ export const zGooseToolCallResponse = z.object({ /** * Read a resource from an extension. */ -export const zReadResourceRequest = z.object({ +export const zReadResourceRequest_unstable = z.object({ sessionId: z.string(), uri: z.string(), extensionName: z.string() @@ -68,14 +68,14 @@ export const zReadResourceRequest = z.object({ /** * Resource read response. */ -export const zReadResourceResponse = z.object({ +export const zReadResourceResponse_unstable = z.object({ result: z.unknown().optional().default(null) }); /** * Update the working directory for a session. */ -export const zUpdateWorkingDirRequest = z.object({ +export const zUpdateWorkingDirRequest_unstable = z.object({ sessionId: z.string(), workingDir: z.string() }); @@ -90,12 +90,12 @@ export const zDeleteSessionRequest = z.object({ /** * List configured extensions and any warnings. */ -export const zGetExtensionsRequest = z.record(z.unknown()); +export const zGetExtensionsRequest_unstable = z.record(z.unknown()); /** * List configured extensions and any warnings. */ -export const zGetExtensionsResponse = z.object({ +export const zGetExtensionsResponse_unstable = z.object({ extensions: z.array(z.unknown()), warnings: z.array(z.string()) }); @@ -103,7 +103,7 @@ export const zGetExtensionsResponse = z.object({ /** * Persist a new extension to the user's global goose config. */ -export const zAddConfigExtensionRequest = z.object({ +export const zAddConfigExtensionRequest_unstable = z.object({ name: z.string(), extensionConfig: z.unknown().optional().default(null), enabled: z.boolean().optional().default(false) @@ -112,30 +112,30 @@ export const zAddConfigExtensionRequest = z.object({ /** * Remove a persisted extension from the user's global goose config. */ -export const zRemoveConfigExtensionRequest = z.object({ +export const zRemoveConfigExtensionRequest_unstable = z.object({ configKey: z.string() }); /** * Toggle the `enabled` flag for a persisted extension in the user's global goose config. */ -export const zToggleConfigExtensionRequest = z.object({ +export const zToggleConfigExtensionRequest_unstable = z.object({ configKey: z.string(), enabled: z.boolean() }); -export const zGetSessionExtensionsRequest = z.object({ +export const zGetSessionExtensionsRequest_unstable = z.object({ sessionId: z.string() }); -export const zGetSessionExtensionsResponse = z.object({ +export const zGetSessionExtensionsResponse_unstable = z.object({ extensions: z.array(z.unknown()) }); /** * List providers with setup metadata and the current model inventory snapshot. */ -export const zListProvidersRequest = z.object({ +export const zListProvidersRequest_unstable = z.object({ providerIds: z.array(z.string()).optional().default([]) }); @@ -213,14 +213,14 @@ export const zProviderInventoryEntryDto = z.object({ /** * Provider list response. */ -export const zListProvidersResponse = z.object({ +export const zListProvidersResponse_unstable = z.object({ entries: z.array(zProviderInventoryEntryDto) }); /** * List custom-provider catalog entries. Omit `format` to list all formats. */ -export const zProviderCatalogListRequest = z.object({ +export const zProviderCatalogListRequest_unstable = z.object({ format: z.union([ z.string(), z.null() @@ -237,14 +237,14 @@ export const zProviderTemplateCatalogEntryDto = z.object({ envVar: z.string() }); -export const zProviderCatalogListResponse = z.object({ +export const zProviderCatalogListResponse_unstable = z.object({ providers: z.array(zProviderTemplateCatalogEntryDto) }); /** * List provider setup catalog entries */ -export const zProviderSetupCatalogListRequest = z.record(z.unknown()); +export const zProviderSetupCatalogListRequest_unstable = z.record(z.unknown()); export const zProviderSetupMethodDto = z.enum([ 'none', @@ -302,14 +302,14 @@ export const zProviderSetupCatalogEntryDto = z.object({ supportsAuthStatus: z.boolean() }); -export const zProviderSetupCatalogListResponse = z.object({ +export const zProviderSetupCatalogListResponse_unstable = z.object({ providers: z.array(zProviderSetupCatalogEntryDto) }); /** * Return the editable template for one catalog provider. */ -export const zProviderCatalogTemplateRequest = z.object({ +export const zProviderCatalogTemplateRequest_unstable = z.object({ providerId: z.string() }); @@ -339,14 +339,14 @@ export const zProviderTemplateDto = z.object({ docUrl: z.string() }); -export const zProviderCatalogTemplateResponse = z.object({ +export const zProviderCatalogTemplateResponse_unstable = z.object({ template: zProviderTemplateDto }); /** * Create a custom provider backed by Goose's declarative provider store. */ -export const zCustomProviderCreateRequest = z.object({ +export const zCustomProviderCreateRequest_unstable = z.object({ engine: z.string(), displayName: z.string(), apiUrl: z.string(), @@ -395,21 +395,21 @@ export const zRefreshProviderInventorySkipDto = z.object({ /** * Refresh acknowledgement. */ -export const zRefreshProviderInventoryResponse = z.object({ +export const zRefreshProviderInventoryResponse_unstable = z.object({ started: z.array(z.string()), skipped: z.array(zRefreshProviderInventorySkipDto).optional().default([]) }); -export const zCustomProviderCreateResponse = z.object({ +export const zCustomProviderCreateResponse_unstable = z.object({ providerId: z.string(), status: zProviderConfigStatusDto, - refresh: zRefreshProviderInventoryResponse + refresh: zRefreshProviderInventoryResponse_unstable }); /** * Read a declarative provider config. Custom configs are editable; bundled configs are read-only. */ -export const zCustomProviderReadRequest = z.object({ +export const zCustomProviderReadRequest_unstable = z.object({ providerId: z.string() }); @@ -441,7 +441,7 @@ export const zCustomProviderConfigDto = z.object({ preservesThinking: z.boolean() }); -export const zCustomProviderReadResponse = z.object({ +export const zCustomProviderReadResponse_unstable = z.object({ provider: zCustomProviderConfigDto, editable: z.boolean(), status: zProviderConfigStatusDto @@ -450,7 +450,7 @@ export const zCustomProviderReadResponse = z.object({ /** * Update a custom provider backed by Goose's declarative provider store. */ -export const zCustomProviderUpdateRequest = z.object({ +export const zCustomProviderUpdateRequest_unstable = z.object({ providerId: z.string(), engine: z.string(), displayName: z.string(), @@ -480,35 +480,35 @@ export const zCustomProviderUpdateRequest = z.object({ ]).optional() }); -export const zCustomProviderUpdateResponse = z.object({ +export const zCustomProviderUpdateResponse_unstable = z.object({ providerId: z.string(), status: zProviderConfigStatusDto, - refresh: zRefreshProviderInventoryResponse + refresh: zRefreshProviderInventoryResponse_unstable }); /** * Delete a custom provider from Goose's declarative provider store. */ -export const zCustomProviderDeleteRequest = z.object({ +export const zCustomProviderDeleteRequest_unstable = z.object({ providerId: z.string() }); -export const zCustomProviderDeleteResponse = z.object({ +export const zCustomProviderDeleteResponse_unstable = z.object({ providerId: z.string(), - refresh: zRefreshProviderInventoryResponse + refresh: zRefreshProviderInventoryResponse_unstable }); /** * Trigger a background refresh of provider inventories. */ -export const zRefreshProviderInventoryRequest = z.object({ +export const zRefreshProviderInventoryRequest_unstable = z.object({ providerIds: z.array(z.string()).optional().default([]) }); /** * Read saved configuration field values for one provider. */ -export const zProviderConfigReadRequest = z.object({ +export const zProviderConfigReadRequest_unstable = z.object({ providerId: z.string() }); @@ -523,18 +523,18 @@ export const zProviderConfigFieldValueDto = z.object({ required: z.boolean() }); -export const zProviderConfigReadResponse = z.object({ +export const zProviderConfigReadResponse_unstable = z.object({ fields: z.array(zProviderConfigFieldValueDto) }); /** * Return provider configured statuses. Empty provider_ids means all providers. */ -export const zProviderConfigStatusRequest = z.object({ +export const zProviderConfigStatusRequest_unstable = z.object({ providerIds: z.array(z.string()).optional().default([]) }); -export const zProviderConfigStatusResponse = z.object({ +export const zProviderConfigStatusResponse_unstable = z.object({ statuses: z.array(zProviderConfigStatusDto) }); @@ -546,27 +546,27 @@ export const zProviderConfigFieldUpdate = z.object({ /** * Save provider configuration fields and start an inventory refresh when supported. */ -export const zProviderConfigSaveRequest = z.object({ +export const zProviderConfigSaveRequest_unstable = z.object({ providerId: z.string(), fields: z.array(zProviderConfigFieldUpdate) }); -export const zProviderConfigChangeResponse = z.object({ +export const zProviderConfigChangeResponse_unstable = z.object({ status: zProviderConfigStatusDto, - refresh: zRefreshProviderInventoryResponse + refresh: zRefreshProviderInventoryResponse_unstable }); /** * Delete provider configuration fields and start an inventory refresh when supported. */ -export const zProviderConfigDeleteRequest = z.object({ +export const zProviderConfigDeleteRequest_unstable = z.object({ providerId: z.string() }); /** * Run a provider-owned native authentication flow and start an inventory refresh when supported. */ -export const zProviderConfigAuthenticateRequest = z.object({ +export const zProviderConfigAuthenticateRequest_unstable = z.object({ providerId: z.string() }); @@ -580,7 +580,7 @@ export const zPreferenceKey = z.enum([ /** * Read allowlisted user preferences. Empty `keys` means all supported preferences. */ -export const zPreferencesReadRequest = z.object({ +export const zPreferencesReadRequest_unstable = z.object({ keys: z.array(zPreferenceKey).optional().default([]) }); @@ -589,30 +589,30 @@ export const zPreferenceValue = z.object({ value: z.unknown().optional().default(null) }); -export const zPreferencesReadResponse = z.object({ +export const zPreferencesReadResponse_unstable = z.object({ values: z.array(zPreferenceValue) }); /** * Save allowlisted user preferences. */ -export const zPreferencesSaveRequest = z.object({ +export const zPreferencesSaveRequest_unstable = z.object({ values: z.array(zPreferenceValue).optional().default([]) }); /** * Remove allowlisted user preferences. */ -export const zPreferencesRemoveRequest = z.object({ +export const zPreferencesRemoveRequest_unstable = z.object({ keys: z.array(zPreferenceKey).optional().default([]) }); /** * Read Goose default provider and model configuration. */ -export const zDefaultsReadRequest = z.record(z.unknown()); +export const zDefaultsReadRequest_unstable = z.record(z.unknown()); -export const zDefaultsReadResponse = z.object({ +export const zDefaultsReadResponse_unstable = z.object({ providerId: z.union([ z.string(), z.null() @@ -626,7 +626,7 @@ export const zDefaultsReadResponse = z.object({ /** * Save Goose default provider and model configuration. */ -export const zDefaultsSaveRequest = z.object({ +export const zDefaultsSaveRequest_unstable = z.object({ providerId: z.string(), modelId: z.union([ z.string(), @@ -642,7 +642,7 @@ export const zOnboardingImportSourceKind = z.enum(['goose_config', 'claude_deskt /** * Scan for existing Goose and compatible app data that onboarding can import. */ -export const zOnboardingImportScanRequest = z.object({ +export const zOnboardingImportScanRequest_unstable = z.object({ sources: z.array(zOnboardingImportSourceKind).optional().default([]) }); @@ -664,24 +664,24 @@ export const zOnboardingImportCandidate = z.object({ warnings: z.array(z.string()).optional().default([]) }); -export const zOnboardingImportScanResponse = z.object({ +export const zOnboardingImportScanResponse_unstable = z.object({ candidates: z.array(zOnboardingImportCandidate) }); /** * Import selected onboarding candidates. */ -export const zOnboardingImportApplyRequest = z.object({ +export const zOnboardingImportApplyRequest_unstable = z.object({ candidateIds: z.array(z.string()).optional().default([]), enableImportedExtensions: z.boolean().optional().default(false) }); -export const zOnboardingImportApplyResponse = z.object({ +export const zOnboardingImportApplyResponse_unstable = z.object({ imported: zOnboardingImportCounts, skipped: zOnboardingImportCounts, warnings: z.array(z.string()).optional().default([]), providerDefaults: z.union([ - zDefaultsReadResponse, + zDefaultsReadResponse_unstable, z.null() ]).optional() }); @@ -689,28 +689,28 @@ export const zOnboardingImportApplyResponse = z.object({ /** * Export a session as a JSON string. */ -export const zExportSessionRequest = z.object({ +export const zExportSessionRequest_unstable = z.object({ sessionId: z.string() }); /** * Export session response — raw JSON of the goose session with `conversation`. */ -export const zExportSessionResponse = z.object({ +export const zExportSessionResponse_unstable = z.object({ data: z.string() }); /** * Import a session from a JSON string. */ -export const zImportSessionRequest = z.object({ +export const zImportSessionRequest_unstable = z.object({ data: z.string() }); /** * Import session response — metadata about the newly created session. */ -export const zImportSessionResponse = z.object({ +export const zImportSessionResponse_unstable = z.object({ sessionId: z.string(), title: z.union([ z.string(), @@ -726,7 +726,7 @@ export const zImportSessionResponse = z.object({ /** * Update the project association for a session. */ -export const zUpdateSessionProjectRequest = z.object({ +export const zUpdateSessionProjectRequest_unstable = z.object({ sessionId: z.string(), projectId: z.union([ z.string(), @@ -737,7 +737,7 @@ export const zUpdateSessionProjectRequest = z.object({ /** * Rename a session. */ -export const zRenameSessionRequest = z.object({ +export const zRenameSessionRequest_unstable = z.object({ sessionId: z.string(), title: z.string() }); @@ -745,14 +745,14 @@ export const zRenameSessionRequest = z.object({ /** * Archive a session (soft delete). */ -export const zArchiveSessionRequest = z.object({ +export const zArchiveSessionRequest_unstable = z.object({ sessionId: z.string() }); /** * Unarchive a previously archived session. */ -export const zUnarchiveSessionRequest = z.object({ +export const zUnarchiveSessionRequest_unstable = z.object({ sessionId: z.string() }); @@ -768,23 +768,32 @@ export const zSourceType = z.enum([ 'project' ]); +/** + * Target scope for creating or importing sources. + */ +export const zSourceScope = z.union([ + z.object({ + scope: z.literal('global') + }), + z.object({ + projectDir: z.string(), + scope: z.literal('projectDir') + }), + z.object({ + projectId: z.string(), + scope: z.literal('projectId') + }) +]); + /** * Create a new source in an explicit target scope (global or project-scoped). */ -export const zCreateSourceRequest = z.object({ +export const zCreateSourceRequest_unstable = z.object({ type: zSourceType, name: z.string(), description: z.string(), content: z.string(), - global: z.boolean(), - projectDir: z.union([ - z.string(), - z.null() - ]).optional(), - projectId: z.union([ - z.string(), - z.null() - ]).optional(), + target: zSourceScope, properties: z.record(z.unknown()).optional() }); @@ -805,7 +814,7 @@ export const zSourceEntry = z.object({ properties: z.record(z.unknown()).optional() }); -export const zCreateSourceResponse = z.object({ +export const zCreateSourceResponse_unstable = z.object({ source: zSourceEntry }); @@ -817,7 +826,7 @@ export const zCreateSourceResponse = z.object({ * set. If `type` is `builtinSkill`, this lists shipped read-only built-in * skills. */ -export const zListSourcesRequest = z.object({ +export const zListSourcesRequest_unstable = z.object({ type: z.union([ zSourceType, z.null() @@ -829,14 +838,14 @@ export const zListSourcesRequest = z.object({ includeProjectSources: z.boolean().optional().default(false) }); -export const zListSourcesResponse = z.object({ +export const zListSourcesResponse_unstable = z.object({ sources: z.array(zSourceEntry) }); /** * Update an existing source's name, description, and content by absolute path. */ -export const zUpdateSourceRequest = z.object({ +export const zUpdateSourceRequest_unstable = z.object({ type: zSourceType, path: z.string(), name: z.string(), @@ -848,14 +857,14 @@ export const zUpdateSourceRequest = z.object({ ]).optional() }); -export const zUpdateSourceResponse = z.object({ +export const zUpdateSourceResponse_unstable = z.object({ source: zSourceEntry }); /** * Delete a source and its on-disk directory by absolute path. */ -export const zDeleteSourceRequest = z.object({ +export const zDeleteSourceRequest_unstable = z.object({ type: zSourceType, path: z.string() }); @@ -863,38 +872,34 @@ export const zDeleteSourceRequest = z.object({ /** * Export a source at an absolute path as a portable JSON payload. */ -export const zExportSourceRequest = z.object({ +export const zExportSourceRequest_unstable = z.object({ type: zSourceType, path: z.string() }); -export const zExportSourceResponse = z.object({ +export const zExportSourceResponse_unstable = z.object({ json: z.string(), filename: z.string() }); /** - * Import a source from a JSON export payload produced by `_goose/sources/export`. + * Import a source from a JSON export payload produced by `_goose/unstable/sources/export`. * The imported source is written into the explicit target scope; on name * collisions a `-imported` suffix is appended. */ -export const zImportSourcesRequest = z.object({ +export const zImportSourcesRequest_unstable = z.object({ data: z.string(), - global: z.boolean(), - projectDir: z.union([ - z.string(), - z.null() - ]).optional() + target: zSourceScope }); -export const zImportSourcesResponse = z.object({ +export const zImportSourcesResponse_unstable = z.object({ sources: z.array(zSourceEntry) }); /** * Transcribe audio via a dictation provider. */ -export const zDictationTranscribeRequest = z.object({ +export const zDictationTranscribeRequest_unstable = z.object({ audio: z.string(), mimeType: z.string(), provider: z.string() @@ -903,14 +908,14 @@ export const zDictationTranscribeRequest = z.object({ /** * Transcription result. */ -export const zDictationTranscribeResponse = z.object({ +export const zDictationTranscribeResponse_unstable = z.object({ text: z.string() }); /** * Get the configuration status of all dictation providers. */ -export const zDictationConfigRequest = z.record(z.unknown()); +export const zDictationConfigRequest_unstable = z.record(z.unknown()); export const zDictationModelOption = z.object({ id: z.string(), @@ -955,14 +960,14 @@ export const zDictationProviderStatusEntry = z.object({ /** * Dictation config response — map of provider name to status. */ -export const zDictationConfigResponse = z.object({ +export const zDictationConfigResponse_unstable = z.object({ providers: z.record(zDictationProviderStatusEntry) }); /** * Set a dictation provider secret value. */ -export const zDictationSecretSaveRequest = z.object({ +export const zDictationSecretSaveRequest_unstable = z.object({ provider: z.string(), value: z.string() }); @@ -970,14 +975,14 @@ export const zDictationSecretSaveRequest = z.object({ /** * Remove a dictation provider secret value. */ -export const zDictationSecretDeleteRequest = z.object({ +export const zDictationSecretDeleteRequest_unstable = z.object({ provider: z.string() }); /** * List available local Whisper models with their download status. */ -export const zDictationModelsListRequest = z.record(z.unknown()); +export const zDictationModelsListRequest_unstable = z.record(z.unknown()); export const zDictationLocalModelStatus = z.object({ id: z.string(), @@ -988,21 +993,21 @@ export const zDictationLocalModelStatus = z.object({ downloadInProgress: z.boolean() }); -export const zDictationModelsListResponse = z.object({ +export const zDictationModelsListResponse_unstable = z.object({ models: z.array(zDictationLocalModelStatus) }); /** * Kick off a background download of a local Whisper model. */ -export const zDictationModelDownloadRequest = z.object({ +export const zDictationModelDownloadRequest_unstable = z.object({ modelId: z.string() }); /** * Poll the progress of an in-flight download. */ -export const zDictationModelDownloadProgressRequest = z.object({ +export const zDictationModelDownloadProgressRequest_unstable = z.object({ modelId: z.string() }); @@ -1017,7 +1022,7 @@ export const zDictationDownloadProgress = z.object({ ]).optional() }); -export const zDictationModelDownloadProgressResponse = z.object({ +export const zDictationModelDownloadProgressResponse_unstable = z.object({ progress: z.union([ zDictationDownloadProgress, z.null() @@ -1027,21 +1032,21 @@ export const zDictationModelDownloadProgressResponse = z.object({ /** * Cancel an in-flight download. */ -export const zDictationModelCancelRequest = z.object({ +export const zDictationModelCancelRequest_unstable = z.object({ modelId: z.string() }); /** * Delete a downloaded local Whisper model from disk. */ -export const zDictationModelDeleteRequest = z.object({ +export const zDictationModelDeleteRequest_unstable = z.object({ modelId: z.string() }); /** * Persist the user's model selection for a given provider. */ -export const zDictationModelSelectRequest = z.object({ +export const zDictationModelSelectRequest_unstable = z.object({ provider: z.string(), modelId: z.string() }); @@ -1051,61 +1056,61 @@ export const zExtRequest = z.object({ method: z.string(), params: z.union([ z.union([ - zAddExtensionRequest, - zRemoveExtensionRequest, - zGetToolsRequest, - zGooseToolCallRequest, - zReadResourceRequest, - zUpdateWorkingDirRequest, + zAddExtensionRequest_unstable, + zRemoveExtensionRequest_unstable, + zGetToolsRequest_unstable, + zGooseToolCallRequest_unstable, + zReadResourceRequest_unstable, + zUpdateWorkingDirRequest_unstable, zDeleteSessionRequest, - zGetExtensionsRequest, - zAddConfigExtensionRequest, - zRemoveConfigExtensionRequest, - zToggleConfigExtensionRequest, - zGetSessionExtensionsRequest, - zListProvidersRequest, - zProviderCatalogListRequest, - zProviderSetupCatalogListRequest, - zProviderCatalogTemplateRequest, - zCustomProviderCreateRequest, - zCustomProviderReadRequest, - zCustomProviderUpdateRequest, - zCustomProviderDeleteRequest, - zRefreshProviderInventoryRequest, - zProviderConfigReadRequest, - zProviderConfigStatusRequest, - zProviderConfigSaveRequest, - zProviderConfigDeleteRequest, - zProviderConfigAuthenticateRequest, - zPreferencesReadRequest, - zPreferencesSaveRequest, - zPreferencesRemoveRequest, - zDefaultsReadRequest, - zDefaultsSaveRequest, - zOnboardingImportScanRequest, - zOnboardingImportApplyRequest, - zExportSessionRequest, - zImportSessionRequest, - zUpdateSessionProjectRequest, - zRenameSessionRequest, - zArchiveSessionRequest, - zUnarchiveSessionRequest, - zCreateSourceRequest, - zListSourcesRequest, - zUpdateSourceRequest, - zDeleteSourceRequest, - zExportSourceRequest, - zImportSourcesRequest, - zDictationTranscribeRequest, - zDictationConfigRequest, - zDictationSecretSaveRequest, - zDictationSecretDeleteRequest, - zDictationModelsListRequest, - zDictationModelDownloadRequest, - zDictationModelDownloadProgressRequest, - zDictationModelCancelRequest, - zDictationModelDeleteRequest, - zDictationModelSelectRequest + zGetExtensionsRequest_unstable, + zAddConfigExtensionRequest_unstable, + zRemoveConfigExtensionRequest_unstable, + zToggleConfigExtensionRequest_unstable, + zGetSessionExtensionsRequest_unstable, + zListProvidersRequest_unstable, + zProviderCatalogListRequest_unstable, + zProviderSetupCatalogListRequest_unstable, + zProviderCatalogTemplateRequest_unstable, + zCustomProviderCreateRequest_unstable, + zCustomProviderReadRequest_unstable, + zCustomProviderUpdateRequest_unstable, + zCustomProviderDeleteRequest_unstable, + zRefreshProviderInventoryRequest_unstable, + zProviderConfigReadRequest_unstable, + zProviderConfigStatusRequest_unstable, + zProviderConfigSaveRequest_unstable, + zProviderConfigDeleteRequest_unstable, + zProviderConfigAuthenticateRequest_unstable, + zPreferencesReadRequest_unstable, + zPreferencesSaveRequest_unstable, + zPreferencesRemoveRequest_unstable, + zDefaultsReadRequest_unstable, + zDefaultsSaveRequest_unstable, + zOnboardingImportScanRequest_unstable, + zOnboardingImportApplyRequest_unstable, + zExportSessionRequest_unstable, + zImportSessionRequest_unstable, + zUpdateSessionProjectRequest_unstable, + zRenameSessionRequest_unstable, + zArchiveSessionRequest_unstable, + zUnarchiveSessionRequest_unstable, + zCreateSourceRequest_unstable, + zListSourcesRequest_unstable, + zUpdateSourceRequest_unstable, + zDeleteSourceRequest_unstable, + zExportSourceRequest_unstable, + zImportSourcesRequest_unstable, + zDictationTranscribeRequest_unstable, + zDictationConfigRequest_unstable, + zDictationSecretSaveRequest_unstable, + zDictationSecretDeleteRequest_unstable, + zDictationModelsListRequest_unstable, + zDictationModelDownloadRequest_unstable, + zDictationModelDownloadProgressRequest_unstable, + zDictationModelCancelRequest_unstable, + zDictationModelDeleteRequest_unstable, + zDictationModelSelectRequest_unstable ]), z.union([ z.record(z.unknown()), @@ -1120,38 +1125,38 @@ export const zExtResponse = z.union([ result: z.union([ z.union([ zEmptyResponse, - zGetToolsResponse, - zGooseToolCallResponse, - zReadResourceResponse, - zGetExtensionsResponse, - zGetSessionExtensionsResponse, - zListProvidersResponse, - zProviderCatalogListResponse, - zProviderSetupCatalogListResponse, - zProviderCatalogTemplateResponse, - zCustomProviderCreateResponse, - zCustomProviderReadResponse, - zCustomProviderUpdateResponse, - zCustomProviderDeleteResponse, - zRefreshProviderInventoryResponse, - zProviderConfigReadResponse, - zProviderConfigStatusResponse, - zProviderConfigChangeResponse, - zPreferencesReadResponse, - zDefaultsReadResponse, - zOnboardingImportScanResponse, - zOnboardingImportApplyResponse, - zExportSessionResponse, - zImportSessionResponse, - zCreateSourceResponse, - zListSourcesResponse, - zUpdateSourceResponse, - zExportSourceResponse, - zImportSourcesResponse, - zDictationTranscribeResponse, - zDictationConfigResponse, - zDictationModelsListResponse, - zDictationModelDownloadProgressResponse + zGetToolsResponse_unstable, + zGooseToolCallResponse_unstable, + zReadResourceResponse_unstable, + zGetExtensionsResponse_unstable, + zGetSessionExtensionsResponse_unstable, + zListProvidersResponse_unstable, + zProviderCatalogListResponse_unstable, + zProviderSetupCatalogListResponse_unstable, + zProviderCatalogTemplateResponse_unstable, + zCustomProviderCreateResponse_unstable, + zCustomProviderReadResponse_unstable, + zCustomProviderUpdateResponse_unstable, + zCustomProviderDeleteResponse_unstable, + zRefreshProviderInventoryResponse_unstable, + zProviderConfigReadResponse_unstable, + zProviderConfigStatusResponse_unstable, + zProviderConfigChangeResponse_unstable, + zPreferencesReadResponse_unstable, + zDefaultsReadResponse_unstable, + zOnboardingImportScanResponse_unstable, + zOnboardingImportApplyResponse_unstable, + zExportSessionResponse_unstable, + zImportSessionResponse_unstable, + zCreateSourceResponse_unstable, + zListSourcesResponse_unstable, + zUpdateSourceResponse_unstable, + zExportSourceResponse_unstable, + zImportSourcesResponse_unstable, + zDictationTranscribeResponse_unstable, + zDictationConfigResponse_unstable, + zDictationModelsListResponse_unstable, + zDictationModelDownloadProgressResponse_unstable ]), z.unknown() ]).optional() diff --git a/ui/text/src/configure.tsx b/ui/text/src/configure.tsx index 4d9a861119..ef889d81ad 100644 --- a/ui/text/src/configure.tsx +++ b/ui/text/src/configure.tsx @@ -60,7 +60,9 @@ const ModelSelector = React.memo(function ModelSelector({ useEffect(() => { const availableModels = provider.models.map((model) => model.id); setModels(availableModels); - const defaultIdx = availableModels.findIndex((model) => model === provider.defaultModel); + const defaultIdx = availableModels.findIndex( + (model) => model === provider.defaultModel, + ); setSelectedIdx(defaultIdx >= 0 ? defaultIdx : 0); setLoading(false); }, [provider.models, provider.defaultModel]); @@ -154,10 +156,14 @@ const ModelSelector = React.memo(function ModelSelector({ - ◆ Select model ◆ + + ◆ Select model ◆ + - Loading models for {provider.providerName}… + + Loading models for {provider.providerName}… + @@ -171,7 +177,9 @@ const ModelSelector = React.memo(function ModelSelector({ - ◆ Select model ◆ + + ◆ Select model ◆ + ⚠ No models available @@ -193,18 +201,23 @@ const ModelSelector = React.memo(function ModelSelector({ if (manualEntry) { const inputWidth = Math.min(60, maxWidth - 4); const displayText = searchQuery || "type model name…"; - const truncatedText = displayText.length > inputWidth - 6 - ? displayText.slice(0, inputWidth - 9) + "…" - : displayText; + const truncatedText = + displayText.length > inputWidth - 6 + ? displayText.slice(0, inputWidth - 9) + "…" + : displayText; return ( - ◆ Enter model name ◆ + + ◆ Enter model name ◆ + - Type a model identifier for {provider.providerName} + + Type a model identifier for {provider.providerName} + @@ -214,7 +227,9 @@ const ModelSelector = React.memo(function ModelSelector({ paddingX={2} width={inputWidth} > - {"❯ "} + + {"❯ "} + {truncatedText} @@ -236,7 +251,9 @@ const ModelSelector = React.memo(function ModelSelector({ {/* Header */} - ◆ Select model ◆ + + ◆ Select model ◆ + Choose a model for {provider.providerName} @@ -250,7 +267,9 @@ const ModelSelector = React.memo(function ModelSelector({ paddingX={2} width={searchBoxWidth} > - {"❯ "} + + {"❯ "} + {searchQuery || "search models…"} @@ -262,7 +281,11 @@ const ModelSelector = React.memo(function ModelSelector({ {/* Model List */} {filtered.length === 0 ? ( - + No matching models ) : ( @@ -279,16 +302,20 @@ const ModelSelector = React.memo(function ModelSelector({ const active = idx === selectedIdx; const isDefault = model === provider.defaultModel; const modelWidth = maxWidth - 8; - const truncatedModel = model.length > modelWidth - ? model.slice(0, modelWidth - 1) + "…" - : model; + const truncatedModel = + model.length > modelWidth + ? model.slice(0, modelWidth - 1) + "…" + : model; return ( {active ? "▸ " : " "} - + {truncatedModel} {isDefault && (default)} @@ -329,7 +356,8 @@ export default function ConfigureScreen({ }: ConfigureProps) { const [phase, setPhase] = useState("loading"); const [providers, setProviders] = useState([]); - const [selectedProvider, setSelectedProvider] = useState(null); + const [selectedProvider, setSelectedProvider] = + useState(null); const [errorMsg, setErrorMsg] = useState(""); const [spinIdx, setSpinIdx] = useState(0); const [fetchKey, setFetchKey] = useState(0); @@ -347,7 +375,9 @@ export default function ConfigureScreen({ (async () => { try { - const resp = await client.goose.GooseProvidersList({ providerIds: [] }); + const resp = await client.goose.providersList_unstable({ + providerIds: [], + }); if (cancelled) return; const sorted = [...resp.entries].sort((a, b) => { const aP = a.providerType === "Preferred" ? 0 : 1; @@ -359,7 +389,7 @@ export default function ConfigureScreen({ if (initialIntent === "model") { try { - const cfg = await client.goose.GooseDefaultsRead({}); + const cfg = await client.goose.defaultsRead_unstable({}); if (cancelled) return; const current = sorted.find((p) => p.providerId === cfg.providerId); if (current) { @@ -395,7 +425,7 @@ export default function ConfigureScreen({ ) => { setPhase("saving"); try { - await client.goose.GooseProvidersConfigSave({ + await client.goose.providersConfigSave_unstable({ providerId: provider.providerId, fields: Object.entries(configValues).map(([key, value]) => ({ key, @@ -421,7 +451,9 @@ export default function ConfigureScreen({ [client, sessionId, onComplete], ); - const [pendingConfigValues, setPendingConfigValues] = useState>({}); + const [pendingConfigValues, setPendingConfigValues] = useState< + Record + >({}); const handleProviderSelected = useCallback( (provider: ProviderInventoryEntryDto) => { @@ -463,15 +495,19 @@ export default function ConfigureScreen({ }, []); if (phase === "loading" || phase === "loading_models" || phase === "saving") { - const label = - phase === "loading" ? "Loading providers…" : - phase === "loading_models" ? "Loading models…" : - "Applying changes…"; + const label = + phase === "loading" + ? "Loading providers…" + : phase === "loading_models" + ? "Loading models…" + : "Applying changes…"; return ( - ◆ Configure provider ◆ + + ◆ Configure provider ◆ + {label} @@ -488,7 +524,9 @@ export default function ConfigureScreen({ - ◆ Configure provider ◆ + + ◆ Configure provider ◆ + diff --git a/ui/text/src/extensions.tsx b/ui/text/src/extensions.tsx index f698bdedf0..82877b54cb 100644 --- a/ui/text/src/extensions.tsx +++ b/ui/text/src/extensions.tsx @@ -1,10 +1,17 @@ -import React, {useCallback, useEffect, useState} from "react"; -import {Box, Text, useInput, useStdout} from "ink"; -import {TextInput} from "@inkjs/ui"; -import type {GooseClient} from "@aaif/goose-sdk"; -import {CRANBERRY, GOLD, RULE_COLOR, TEAL, TEXT_DIM, TEXT_PRIMARY} from "./colors.js"; -import {Spinner, SPINNER_FRAMES} from "./components/Spinner.js"; -import {ErrorScreen} from "./components/ErrorScreen.js"; +import React, { useCallback, useEffect, useState } from "react"; +import { Box, Text, useInput, useStdout } from "ink"; +import { TextInput } from "@inkjs/ui"; +import type { GooseClient } from "@aaif/goose-sdk"; +import { + CRANBERRY, + GOLD, + RULE_COLOR, + TEAL, + TEXT_DIM, + TEXT_PRIMARY, +} from "./colors.js"; +import { Spinner, SPINNER_FRAMES } from "./components/Spinner.js"; +import { ErrorScreen } from "./components/ErrorScreen.js"; type ExtEntry = { enabled: boolean; @@ -15,29 +22,65 @@ type ExtEntry = { }; function isExtEntry(v: unknown): v is ExtEntry { - return !!v && typeof v === "object" && "enabled" in v && "type" in v && "name" in v - && typeof (v as ExtEntry).enabled === "boolean" - && typeof (v as ExtEntry).type === "string" - && typeof (v as ExtEntry).name === "string"; + return ( + !!v && + typeof v === "object" && + "enabled" in v && + "type" in v && + "name" in v && + typeof (v as ExtEntry).enabled === "boolean" && + typeof (v as ExtEntry).type === "string" && + typeof (v as ExtEntry).name === "string" + ); } type AddType = "stdio" | "streamable_http"; -type Phase = "loading" | "list" | "add_type" | "add_value" | "add_name" | "add_desc" | "saving" | "error"; +type Phase = + | "loading" + | "list" + | "add_type" + | "add_value" + | "add_name" + | "add_desc" + | "saving" + | "error"; function deriveNameFromValue(addType: AddType, value: string): string { if (addType === "stdio") { const cmd = value.trim().split(/\s+/)[0] ?? ""; return cmd.split("/").pop() ?? cmd; } - try { return new URL(value.trim()).hostname; } catch { return value.trim(); } + try { + return new URL(value.trim()).hostname; + } catch { + return value.trim(); + } } -function buildConfig(addType: AddType, value: string, name: string, description: string): ExtEntry { +function buildConfig( + addType: AddType, + value: string, + name: string, + description: string, +): ExtEntry { if (addType === "stdio") { const parts = value.trim().split(/\s+/); - return {type: "stdio", enabled: true, name, description, cmd: parts[0] ?? "", args: parts.slice(1)}; + return { + type: "stdio", + enabled: true, + name, + description, + cmd: parts[0] ?? "", + args: parts.slice(1), + }; } - return {type: "streamable_http", enabled: true, name, description, uri: value.trim()}; + return { + type: "streamable_http", + enabled: true, + name, + description, + uri: value.trim(), + }; } export default function ExtensionsManager({ @@ -51,7 +94,7 @@ export default function ExtensionsManager({ height: number; onClose: () => void; }) { - const {stdout} = useStdout(); + const { stdout } = useStdout(); const columns = stdout?.columns ?? 80; const [phase, setPhase] = useState("loading"); @@ -68,7 +111,10 @@ export default function ExtensionsManager({ const [inputKey, setInputKey] = useState(0); useEffect(() => { - const t = setInterval(() => setSpinIdx(i => (i + 1) % SPINNER_FRAMES.length), 300); + const t = setInterval( + () => setSpinIdx((i) => (i + 1) % SPINNER_FRAMES.length), + 300, + ); return () => clearInterval(t); }, []); @@ -76,16 +122,23 @@ export default function ExtensionsManager({ setPhase("loading"); try { const [configResp, sessionResp] = await Promise.all([ - client.goose.GooseConfigExtensions({}), - client.goose.GooseSessionExtensions({sessionId}), + client.goose.configExtensionsList_unstable({}), + client.goose.sessionExtensionsList_unstable({ sessionId }), ]); - const allExtensions = (configResp.extensions as unknown[]).filter(isExtEntry); + const allExtensions = (configResp.extensions as unknown[]).filter( + isExtEntry, + ); const activeNames = new Set( - (sessionResp.extensions as Array<{name?: string}>).map(e => e.name), + (sessionResp.extensions as Array<{ name?: string }>).map((e) => e.name), ); - setEntries(allExtensions.map(ext => ({...ext, enabled: activeNames.has(ext.name)}))); + setEntries( + allExtensions.map((ext) => ({ + ...ext, + enabled: activeNames.has(ext.name), + })), + ); setWarnings(configResp.warnings ?? []); setPhase("list"); } catch (e: unknown) { @@ -94,60 +147,115 @@ export default function ExtensionsManager({ } }, [client, sessionId]); - useEffect(() => { reload(); }, [reload]); - - const withSaving = useCallback(async (fn: () => Promise) => { - setPhase("saving"); - try { - await fn(); - await reload(); - } catch (e: unknown) { - setErrorMsg(e instanceof Error ? e.message : String(e)); - setPhase("error"); - } + useEffect(() => { + reload(); }, [reload]); + const withSaving = useCallback( + async (fn: () => Promise) => { + setPhase("saving"); + try { + await fn(); + await reload(); + } catch (e: unknown) { + setErrorMsg(e instanceof Error ? e.message : String(e)); + setPhase("error"); + } + }, + [reload], + ); + const toggleSelected = useCallback(() => { const sel = entries[selectedIdx]; if (!sel) return; withSaving(async () => { if (sel.enabled) { - await client.goose.GooseExtensionsRemove({sessionId, name: sel.name}); + await client.goose.sessionExtensionsRemove_unstable({ + sessionId, + name: sel.name, + }); } else { - await client.goose.GooseExtensionsAdd({sessionId, config: sel as any}); + await client.goose.sessionExtensionsAdd_unstable({ + sessionId, + config: sel as any, + }); } }); }, [entries, selectedIdx, client, sessionId, withSaving]); - const saveNewExtension = useCallback((description: string) => { - const config = buildConfig(addType, addValue, addName, description); - withSaving(async () => { - await client.goose.GooseConfigExtensionsAdd({ - name: config.name, - extensionConfig: config as any, - enabled: true, + const saveNewExtension = useCallback( + (description: string) => { + const config = buildConfig(addType, addValue, addName, description); + withSaving(async () => { + await client.goose.configExtensionsAdd_unstable({ + name: config.name, + extensionConfig: config as any, + enabled: true, + }); + await client.goose.sessionExtensionsAdd_unstable({ + sessionId, + config: config as any, + }); }); - await client.goose.GooseExtensionsAdd({sessionId, config: config as any}); - }); - }, [addType, addValue, addName, client, sessionId, withSaving]); + }, + [addType, addValue, addName, client, sessionId, withSaving], + ); useInput((ch, key) => { if (phase === "list") { - if (key.escape) { onClose(); return; } - if (key.upArrow) { setSelectedIdx(i => Math.max(i - 1, 0)); return; } - if (key.downArrow) { setSelectedIdx(i => Math.min(i + 1, entries.length - 1)); return; } - if (ch === " " || key.return) { toggleSelected(); return; } - if (ch === "a") { setAddType("stdio"); setPhase("add_type"); return; } + if (key.escape) { + onClose(); + return; + } + if (key.upArrow) { + setSelectedIdx((i) => Math.max(i - 1, 0)); + return; + } + if (key.downArrow) { + setSelectedIdx((i) => Math.min(i + 1, entries.length - 1)); + return; + } + if (ch === " " || key.return) { + toggleSelected(); + return; + } + if (ch === "a") { + setAddType("stdio"); + setPhase("add_type"); + return; + } } if (phase === "add_type") { - if (key.escape) { setPhase("list"); return; } - if (key.upArrow || key.downArrow) { setAddType(t => t === "stdio" ? "streamable_http" : "stdio"); return; } - if (key.return) { setAddValue(""); setInputKey(k => k + 1); setPhase("add_value"); return; } + if (key.escape) { + setPhase("list"); + return; + } + if (key.upArrow || key.downArrow) { + setAddType((t) => (t === "stdio" ? "streamable_http" : "stdio")); + return; + } + if (key.return) { + setAddValue(""); + setInputKey((k) => k + 1); + setPhase("add_value"); + return; + } } if (key.escape) { - if (phase === "add_value") { setPhase("add_type"); return; } - if (phase === "add_name") { setInputKey(k => k + 1); setPhase("add_value"); return; } - if (phase === "add_desc") { setInputKey(k => k + 1); setPhase("add_name"); return; } + if (phase === "add_value") { + setPhase("add_type"); + return; + } + if (phase === "add_name") { + setInputKey((k) => k + 1); + setPhase("add_value"); + return; + } + if (phase === "add_desc") { + setInputKey((k) => k + 1); + setPhase("add_name"); + return; + } } }); @@ -156,10 +264,14 @@ export default function ExtensionsManager({ - ◆ Manage extensions ◆ + + ◆ Manage extensions ◆ + - {phase === "loading" ? "Loading extensions…" : "Saving…"} + + {phase === "loading" ? "Loading extensions…" : "Saving…"} + @@ -173,7 +285,9 @@ export default function ExtensionsManager({ - ◆ Manage extensions ◆ + + ◆ Manage extensions ◆ + reload()} /> @@ -184,28 +298,38 @@ export default function ExtensionsManager({ const inputW = Math.min(maxW - 10, 70); if (phase === "add_type") { - const types: {value: AddType; label: string; hint: string}[] = [ - {value: "stdio", label: "Command (stdio)", hint: "run a local command"}, - {value: "streamable_http", label: "Endpoint (HTTP)", hint: "connect to a remote server"}, + const types: { value: AddType; label: string; hint: string }[] = [ + { value: "stdio", label: "Command (stdio)", hint: "run a local command" }, + { + value: "streamable_http", + label: "Endpoint (HTTP)", + hint: "connect to a remote server", + }, ]; return ( - ◆ Add extension ◆ + + ◆ Add extension ◆ + Choose a connection type - {types.map(t => { + {types.map((t) => { const active = addType === t.value; return ( - {active ? "▸ " : " "} - {t.label} - {t.hint} + + {active ? "▸ " : " "} + + + {t.label} + + {t.hint} ); })} @@ -227,14 +351,27 @@ export default function ExtensionsManager({ - ◆ {isStdio ? "Enter command" : "Enter endpoint URL"} ◆ + + ◆ {isStdio ? "Enter command" : "Enter endpoint URL"} ◆ + - {isStdio ? "The command to launch the extension" : "URL of the remote MCP server"} + + {isStdio + ? "The command to launch the extension" + : "URL of the remote MCP server"} + - - {"❯ "} + + + {"❯ "} + k + 1); + setInputKey((k) => k + 1); setPhase("add_name"); }} /> @@ -261,14 +398,23 @@ export default function ExtensionsManager({ - ◆ Name this extension ◆ + + ◆ Name this extension ◆ + A short name to identify this extension - - {"❯ "} + + + {"❯ "} + k + 1); + setInputKey((k) => k + 1); setPhase("add_desc"); }} /> @@ -296,14 +442,23 @@ export default function ExtensionsManager({ - ◆ Description ◆ + + ◆ Description ◆ + What does this extension do? (optional) - - {"❯ "} + + + {"❯ "} + - enter save (leave empty to skip) · esc back + + enter save (leave empty to skip) · esc back + ); @@ -322,12 +479,15 @@ export default function ExtensionsManager({ const layoutW = maxW; const GUTTER = 2; const STATUS_W = 10; - const nameW = Math.max(16, Math.floor(layoutW * 0.30)); + const nameW = Math.max(16, Math.floor(layoutW * 0.3)); const descW = Math.max(8, layoutW - 2 - STATUS_W - nameW - 2 * GUTTER); const rows = Math.max(height - 9, 4); const maxStart = Math.max(0, entries.length - rows); - const start = Math.min(maxStart, Math.max(0, selectedIdx - Math.floor(rows / 2))); + const start = Math.min( + maxStart, + Math.max(0, selectedIdx - Math.floor(rows / 2)), + ); const end = Math.min(entries.length, start + rows); const windowed = entries.slice(start, end); @@ -336,17 +496,27 @@ export default function ExtensionsManager({ {/* Header */} - ◆ Manage extensions ◆ + + ◆ Manage extensions ◆ + - Toggle, add, or remove extensions for this session + + Toggle, add, or remove extensions for this session + {/* Extension List */} {entries.length === 0 ? ( - - No extensions configured — press a to add one + + + No extensions configured — press a to add one + ) : ( <> @@ -362,12 +532,37 @@ export default function ExtensionsManager({ const active = globalIdx === selectedIdx; return ( - {active ? "▸ " : " "} - {ext.name} - {" ".repeat(GUTTER)} - {ext.description || ""} - {" ".repeat(GUTTER)} - {ext.enabled ? "enabled" : "disabled"} + + {active ? "▸ " : " "} + + + + {ext.name} + + + + {" ".repeat(GUTTER)} + + + + {ext.description || ""} + + + + {" ".repeat(GUTTER)} + + + + {ext.enabled ? "enabled" : "disabled"} + + ); })} @@ -375,7 +570,9 @@ export default function ExtensionsManager({ {end < entries.length && ( - ▼ {entries.length - end} more below + + ▼ {entries.length - end} more below + )} @@ -387,7 +584,11 @@ export default function ExtensionsManager({ Warnings {warnings.map((w, i) => ( - • {w} + + + • {w} + + ))} diff --git a/ui/text/src/onboarding.tsx b/ui/text/src/onboarding.tsx index 8df1ba84d6..485d3aface 100644 --- a/ui/text/src/onboarding.tsx +++ b/ui/text/src/onboarding.tsx @@ -1,6 +1,6 @@ import React, { useState, useEffect, useCallback } from "react"; import { Box, Text, useInput, useStdout } from "ink"; -import { TextInput, PasswordInput } from '@inkjs/ui'; +import { TextInput, PasswordInput } from "@inkjs/ui"; import type { GooseClient, ProviderInventoryEntryDto } from "@aaif/goose-sdk"; import { CRANBERRY, @@ -38,7 +38,14 @@ export interface ProviderSelectorProps { onBack?: () => void; } -export const ProviderSelector = React.memo(function ProviderSelector({ providers, height, onSelect, title, subtitle, onBack }: ProviderSelectorProps) { +export const ProviderSelector = React.memo(function ProviderSelector({ + providers, + height, + onSelect, + title, + subtitle, + onBack, +}: ProviderSelectorProps) { const [selectedIdx, setSelectedIdx] = useState(0); const [searchQuery, setSearchQuery] = useState(""); const { stdout } = useStdout(); @@ -55,27 +62,38 @@ export const ProviderSelector = React.memo(function ProviderSelector({ providers })(); // Calculate grid dimensions based on terminal size - const cardWidth = 36; // Width of each provider card - const cardHeight = 8; // Height of each provider card - const minSpacing = 2; // Minimum spacing between cards - + const cardWidth = 36; // Width of each provider card + const cardHeight = 8; // Height of each provider card + const minSpacing = 2; // Minimum spacing between cards + const availableWidth = columns - 4; // Leave margins // Header: marginTop(1) + title+mb(2) + subtitle+mb(3) + searchbar+mb(5) = 11 // Footer: mt(2) + text(1) = 3, plus potential scroll indicators(2) const availableHeight = height - 16; - - const cardsPerRow = Math.max(1, Math.floor(availableWidth / (cardWidth + minSpacing))); + + const cardsPerRow = Math.max( + 1, + Math.floor(availableWidth / (cardWidth + minSpacing)), + ); // Cap horizontal gap so it doesn't grow unbounded on wide terminals - const columnSpacing = Math.min(minSpacing, Math.floor((availableWidth - (cardsPerRow * cardWidth)) / Math.max(1, cardsPerRow - 1))); + const columnSpacing = Math.min( + minSpacing, + Math.floor( + (availableWidth - cardsPerRow * cardWidth) / Math.max(1, cardsPerRow - 1), + ), + ); // Terminal chars are ~2× taller than wide, so 1 row ≈ 2 columns visually const rowSpacing = 1; - const rowsVisible = Math.max(1, Math.floor((availableHeight + rowSpacing) / (cardHeight + rowSpacing))); - + const rowsVisible = Math.max( + 1, + Math.floor((availableHeight + rowSpacing) / (cardHeight + rowSpacing)), + ); + const totalRows = Math.ceil(filtered.length / cardsPerRow); const selectedRow = Math.floor(selectedIdx / cardsPerRow); // Calculate scroll offset for rows const [scrollRow, setScrollRow] = useState(0); - + useEffect(() => { if (selectedRow < scrollRow) { setScrollRow(selectedRow); @@ -159,7 +177,7 @@ export const ProviderSelector = React.memo(function ProviderSelector({ providers const cardBorder = isSelected ? "double" : "single"; const cardBorderColor = isSelected ? GOLD : RULE_COLOR; const textColor = isSelected ? TEXT_PRIMARY : TEXT_SECONDARY; - + // Calculate actual content width: cardWidth - borders (2) - paddingX (2) const contentWidth = cardWidth - 4; // Width for title (leave space for icons: 2-3 chars) @@ -167,7 +185,7 @@ export const ProviderSelector = React.memo(function ProviderSelector({ providers // Available lines for description: cardHeight - borders (2) - title (1) - margin (1) - name (1) - margin (1) const descriptionMaxLines = Math.max(1, cardHeight - 6); const descriptionMaxChars = descriptionMaxLines * contentWidth; - + return ( )} - {provider.configured && ( - - )} + {provider.configured && } - + @@ -216,22 +232,33 @@ export const ProviderSelector = React.memo(function ProviderSelector({ providers }; const visibleRows = []; - for (let row = scrollRow; row < Math.min(scrollRow + rowsVisible, totalRows); row++) { + for ( + let row = scrollRow; + row < Math.min(scrollRow + rowsVisible, totalRows); + row++ + ) { const rowProviders = []; for (let col = 0; col < cardsPerRow; col++) { const index = row * cardsPerRow + col; if (index < filtered.length) { const isSelected = index === selectedIdx; - rowProviders.push(renderProviderCard(filtered[index], index, isSelected)); + rowProviders.push( + renderProviderCard(filtered[index], index, isSelected), + ); } } - + if (rowProviders.length > 0) { - const isLastVisibleRow = row === Math.min(scrollRow + rowsVisible, totalRows) - 1; + const isLastVisibleRow = + row === Math.min(scrollRow + rowsVisible, totalRows) - 1; visibleRows.push( - + {rowProviders} - + , ); } } @@ -250,7 +277,7 @@ export const ProviderSelector = React.memo(function ProviderSelector({ providers {subtitle ?? "Connect an AI model provider to get started"} - + {/* Search Bar */} {scrollRow > 0 && ( - ▲ {scrollRow * cardsPerRow} more above + + ▲ {scrollRow * cardsPerRow} more above + )} - + - - {visibleRows} - + {visibleRows} - + {scrollRow + rowsVisible < totalRows && ( - ▼ {filtered.length - (scrollRow + rowsVisible) * cardsPerRow} more below + ▼ {filtered.length - (scrollRow + rowsVisible) * cardsPerRow}{" "} + more below )} @@ -302,7 +330,8 @@ export const ProviderSelector = React.memo(function ProviderSelector({ providers {/* Footer */} - ↑↓←→ navigate · enter select · type to search{onBack ? " · esc back" : " · esc clear"} + ↑↓←→ navigate · enter select · type to search + {onBack ? " · esc back" : " · esc clear"} @@ -316,7 +345,12 @@ export interface ProviderConfiguratorProps { onBack: () => void; } -export const ProviderConfigurator = React.memo(function ProviderConfigurator({ provider, height, onComplete, onBack }: ProviderConfiguratorProps) { +export const ProviderConfigurator = React.memo(function ProviderConfigurator({ + provider, + height, + onComplete, + onBack, +}: ProviderConfiguratorProps) { const [keyValues, setKeyValues] = useState>({}); const [activeKeyIdx, setActiveKeyIdx] = useState(0); const [showMasked, setShowMasked] = useState>({}); @@ -354,7 +388,7 @@ export const ProviderConfigurator = React.memo(function ProviderConfigurator({ p if (activeKeyIdx < keys.length - 1) { setActiveKeyIdx(activeKeyIdx + 1); setShowMasked({}); - setInputKey(prev => prev + 1); // Force new input component + setInputKey((prev) => prev + 1); // Force new input component } else { onComplete(newValues); } @@ -376,12 +410,20 @@ export const ProviderConfigurator = React.memo(function ProviderConfigurator({ p const headerHeight = 1 + (provider.description ? 2 : 0) + 1; // title + description + spacer const keysHeight = keys.length; // one line per key const inputHeight = currentKey ? 3 : 0; // input + help text + spacing - const setupStepsHeight = provider.setupSteps?.length ? provider.setupSteps.length + 1 : 0; - const contentHeight = headerHeight + keysHeight + inputHeight + setupStepsHeight; + const setupStepsHeight = provider.setupSteps?.length + ? provider.setupSteps.length + 1 + : 0; + const contentHeight = + headerHeight + keysHeight + inputHeight + setupStepsHeight; const topPad = Math.max(0, Math.floor((height - contentHeight) / 2)); return ( - + {topPad > 0 && } {/* Header */} @@ -393,7 +435,9 @@ export const ProviderConfigurator = React.memo(function ProviderConfigurator({ p {provider.description && ( - {provider.description} + + {provider.description} + )} @@ -411,9 +455,7 @@ export const ProviderConfigurator = React.memo(function ProviderConfigurator({ p > {k.name} - {i < activeKeyIdx && ( - •••••• - )} + {i < activeKeyIdx && ••••••} ))} @@ -458,19 +500,18 @@ export const ProviderConfigurator = React.memo(function ProviderConfigurator({ p )} {/* Setup Steps */} - {provider.setupSteps && - provider.setupSteps.length > 0 && ( - - Setup steps: - {provider.setupSteps.map((step, i) => ( - - - {i + 1}. {step} - - - ))} - - )} + {provider.setupSteps && provider.setupSteps.length > 0 && ( + + Setup steps: + {provider.setupSteps.map((step, i) => ( + + + {i + 1}. {step} + + + ))} + + )} ); @@ -481,7 +522,10 @@ interface SuccessScreenProps { height: number; } -const SuccessScreen = React.memo(function SuccessScreen({ provider, height }: SuccessScreenProps) { +const SuccessScreen = React.memo(function SuccessScreen({ + provider, + height, +}: SuccessScreenProps) { const { stdout } = useStdout(); const columns = stdout?.columns ?? 80; @@ -539,7 +583,9 @@ export default function Onboarding({ useEffect(() => { (async () => { try { - const resp = await client.goose.GooseProvidersList({ providerIds: [] }); + const resp = await client.goose.providersList_unstable({ + providerIds: [], + }); const sorted = [...resp.entries].sort((a, b) => { const aP = a.providerType === "Preferred" ? 0 : 1; const bP = b.providerType === "Preferred" ? 0 : 1; @@ -556,10 +602,13 @@ export default function Onboarding({ }, [client, fetchKey]); const saveProvider = useCallback( - async (provider: ProviderInventoryEntryDto, values: Record) => { + async ( + provider: ProviderInventoryEntryDto, + values: Record, + ) => { setPhase("saving"); try { - await client.goose.GooseProvidersConfigSave({ + await client.goose.providersConfigSave_unstable({ providerId: provider.providerId, fields: Object.entries(values).map(([key, value]) => ({ key, @@ -600,7 +649,7 @@ export default function Onboarding({ if (phase === "loading") { const contentHeight = 3; // spinner + text + spacing const topPad = Math.max(0, Math.floor((height - contentHeight) / 2)); - + return ( + ); @@ -631,7 +685,7 @@ export default function Onboarding({ if (phase === "saving") { const contentHeight = 3; // spinner + text + spacing const topPad = Math.max(0, Math.floor((height - contentHeight) / 2)); - + return ( - ); + return ; } if (phase === "configure" && selectedProvider) { diff --git a/ui/text/src/tui.tsx b/ui/text/src/tui.tsx index d88a15ac32..5be8a2dfbb 100644 --- a/ui/text/src/tui.tsx +++ b/ui/text/src/tui.tsx @@ -1,5 +1,11 @@ #!/usr/bin/env node -import React, { useState, useEffect, useCallback, useMemo, useRef } from "react"; +import React, { + useState, + useEffect, + useCallback, + useMemo, + useRef, +} from "react"; import { Box, Text, render, useApp, useInput, useStdout } from "ink"; import { MultilineInput } from "ink-multiline-input"; import meow from "meow"; @@ -172,7 +178,9 @@ const InputBar = React.memo(function InputBar({ {scrollHint && ( - ↑↓ scroll · ⌥↑↓ fast · shift+↑↓ history + + ↑↓ scroll · ⌥↑↓ fast · shift+↑↓ history + )} ) : ( @@ -200,7 +208,9 @@ const InputBar = React.memo(function InputBar({ }} /> {scrollHint && ( - ↑↓ scroll · ⌥↑↓ fast · shift+↑↓ history + + ↑↓ scroll · ⌥↑↓ fast · shift+↑↓ history + )} )} @@ -792,7 +802,7 @@ function App({ setStatus("checking provider…"); let hasProvider = false; try { - const resp = await client.goose.GooseDefaultsRead({}); + const resp = await client.goose.defaultsRead_unstable({}); hasProvider = resp.providerId != null && resp.providerId !== "" && @@ -831,31 +841,28 @@ function App({ exit, ]); - const addLocalTurn = useCallback( - (userText: string, message?: string) => { - setTurns((prev) => [ - ...prev, - { - userText, - responseItems: message - ? [ - { - itemType: "content_chunk", - content: { type: "text", text: message }, - }, - ] - : [], - toolCallsById: new Map(), - }, - ]); - setViewTurnIdx(-1); - setSelectedToolCallIdx(null); - setToolCallExpanded(false); - setToolCallExpandedScroll(0); - setScrollOffset(0); - }, - [], - ); + const addLocalTurn = useCallback((userText: string, message?: string) => { + setTurns((prev) => [ + ...prev, + { + userText, + responseItems: message + ? [ + { + itemType: "content_chunk", + content: { type: "text", text: message }, + }, + ] + : [], + toolCallsById: new Map(), + }, + ]); + setViewTurnIdx(-1); + setSelectedToolCallIdx(null); + setToolCallExpanded(false); + setToolCallExpandedScroll(0); + setScrollOffset(0); + }, []); const runSlashCommand = useCallback( (raw: string): boolean => {