From cc358ece91abd22e8d6e0cd4935c880767e7b3f8 Mon Sep 17 00:00:00 2001 From: Alex Hancock Date: Fri, 26 Jun 2026 14:10:11 -0600 Subject: [PATCH] feat(acp+): config in desktop on ACP+ --- crates/goose-sdk-types/src/custom_requests.rs | 46 ++++++ crates/goose/acp-meta.json | 20 +++ crates/goose/acp-schema.json | 134 ++++++++++++++++++ crates/goose/src/acp/server/config.rs | 111 +++++++++++++++ .../goose/src/acp/server/custom_dispatch.rs | 32 +++++ ui/desktop/src/App.test.tsx | 1 - ui/desktop/src/acp/config.ts | 38 +++++ ui/desktop/src/components/ConfigContext.tsx | 46 ++---- ui/desktop/src/components/alerts/AlertBox.tsx | 11 +- .../extensions/modal/ExtensionModal.test.tsx | 34 ++--- .../extensions/modal/ExtensionModal.tsx | 10 +- ui/desktop/src/renderer.tsx | 8 +- ui/sdk/src/generated/client.gen.ts | 44 ++++++ ui/sdk/src/generated/index.ts | 22 ++- ui/sdk/src/generated/types.gen.ts | 34 ++++- ui/sdk/src/generated/zod.gen.ts | 32 +++++ 16 files changed, 543 insertions(+), 80 deletions(-) create mode 100644 ui/desktop/src/acp/config.ts diff --git a/crates/goose-sdk-types/src/custom_requests.rs b/crates/goose-sdk-types/src/custom_requests.rs index 9b3f99de37af..e8143463c07e 100644 --- a/crates/goose-sdk-types/src/custom_requests.rs +++ b/crates/goose-sdk-types/src/custom_requests.rs @@ -479,6 +479,52 @@ pub struct PreferencesRemoveRequest { pub keys: Vec, } +#[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema, JsonRpcRequest)] +#[request(method = "_goose/unstable/config/read", response = ConfigReadResponse)] +#[serde(rename_all = "camelCase")] +pub struct ConfigReadRequest { + pub key: String, + #[serde(default)] + pub is_secret: bool, +} + +#[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema, JsonRpcResponse)] +#[serde(rename_all = "camelCase")] +pub struct ConfigReadResponse { + #[serde(default)] + pub value: serde_json::Value, +} + +#[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema, JsonRpcRequest)] +#[request(method = "_goose/unstable/config/upsert", response = EmptyResponse)] +#[serde(rename_all = "camelCase")] +pub struct ConfigUpsertRequest { + pub key: String, + pub value: serde_json::Value, + #[serde(default)] + pub is_secret: bool, +} + +#[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema, JsonRpcRequest)] +#[request(method = "_goose/unstable/config/remove", response = EmptyResponse)] +#[serde(rename_all = "camelCase")] +pub struct ConfigRemoveRequest { + pub key: String, + #[serde(default)] + pub is_secret: bool, +} + +#[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema, JsonRpcRequest)] +#[request(method = "_goose/unstable/config/read-all", response = ConfigReadAllResponse)] +#[serde(rename_all = "camelCase")] +pub struct ConfigReadAllRequest {} + +#[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema, JsonRpcResponse)] +#[serde(rename_all = "camelCase")] +pub struct ConfigReadAllResponse { + pub config: std::collections::HashMap, +} + #[derive(Debug, Default, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)] #[serde(rename_all = "camelCase")] pub enum PreferenceKey { diff --git a/crates/goose/acp-meta.json b/crates/goose/acp-meta.json index f801cf5129b0..619d7e53ecc1 100644 --- a/crates/goose/acp-meta.json +++ b/crates/goose/acp-meta.json @@ -225,6 +225,26 @@ "requestType": "PreferencesRemoveRequest_unstable", "responseType": "EmptyResponse" }, + { + "method": "_goose/unstable/config/read", + "requestType": "ConfigReadRequest_unstable", + "responseType": "ConfigReadResponse_unstable" + }, + { + "method": "_goose/unstable/config/upsert", + "requestType": "ConfigUpsertRequest_unstable", + "responseType": "EmptyResponse" + }, + { + "method": "_goose/unstable/config/remove", + "requestType": "ConfigRemoveRequest_unstable", + "responseType": "EmptyResponse" + }, + { + "method": "_goose/unstable/config/read-all", + "requestType": "ConfigReadAllRequest_unstable", + "responseType": "ConfigReadAllResponse_unstable" + }, { "method": "_goose/unstable/defaults/read", "requestType": "DefaultsReadRequest_unstable", diff --git a/crates/goose/acp-schema.json b/crates/goose/acp-schema.json index 7debc5185ca7..cf9f13a3df43 100644 --- a/crates/goose/acp-schema.json +++ b/crates/goose/acp-schema.json @@ -2961,6 +2961,88 @@ "x-side": "agent", "x-method": "_goose/unstable/preferences/remove" }, + "ConfigReadRequest_unstable": { + "type": "object", + "properties": { + "key": { + "type": "string" + }, + "isSecret": { + "type": "boolean", + "default": false + } + }, + "required": [ + "key" + ], + "x-side": "agent", + "x-method": "_goose/unstable/config/read" + }, + "ConfigReadResponse_unstable": { + "type": "object", + "properties": { + "value": { + "default": null + } + }, + "x-side": "agent", + "x-method": "_goose/unstable/config/read" + }, + "ConfigUpsertRequest_unstable": { + "type": "object", + "properties": { + "key": { + "type": "string" + }, + "value": {}, + "isSecret": { + "type": "boolean", + "default": false + } + }, + "required": [ + "key", + "value" + ], + "x-side": "agent", + "x-method": "_goose/unstable/config/upsert" + }, + "ConfigRemoveRequest_unstable": { + "type": "object", + "properties": { + "key": { + "type": "string" + }, + "isSecret": { + "type": "boolean", + "default": false + } + }, + "required": [ + "key" + ], + "x-side": "agent", + "x-method": "_goose/unstable/config/remove" + }, + "ConfigReadAllRequest_unstable": { + "type": "object", + "x-side": "agent", + "x-method": "_goose/unstable/config/read-all" + }, + "ConfigReadAllResponse_unstable": { + "type": "object", + "properties": { + "config": { + "type": "object", + "additionalProperties": {} + } + }, + "required": [ + "config" + ], + "x-side": "agent", + "x-method": "_goose/unstable/config/read-all" + }, "DefaultsReadRequest_unstable": { "type": "object", "description": "Read Goose default provider and model configuration.", @@ -6043,6 +6125,42 @@ "description": "Params for _goose/unstable/preferences/remove", "title": "PreferencesRemoveRequest_unstable" }, + { + "allOf": [ + { + "$ref": "#/$defs/ConfigReadRequest_unstable" + } + ], + "description": "Params for _goose/unstable/config/read", + "title": "ConfigReadRequest_unstable" + }, + { + "allOf": [ + { + "$ref": "#/$defs/ConfigUpsertRequest_unstable" + } + ], + "description": "Params for _goose/unstable/config/upsert", + "title": "ConfigUpsertRequest_unstable" + }, + { + "allOf": [ + { + "$ref": "#/$defs/ConfigRemoveRequest_unstable" + } + ], + "description": "Params for _goose/unstable/config/remove", + "title": "ConfigRemoveRequest_unstable" + }, + { + "allOf": [ + { + "$ref": "#/$defs/ConfigReadAllRequest_unstable" + } + ], + "description": "Params for _goose/unstable/config/read-all", + "title": "ConfigReadAllRequest_unstable" + }, { "allOf": [ { @@ -6797,6 +6915,22 @@ ], "title": "PreferencesReadResponse_unstable" }, + { + "allOf": [ + { + "$ref": "#/$defs/ConfigReadResponse_unstable" + } + ], + "title": "ConfigReadResponse_unstable" + }, + { + "allOf": [ + { + "$ref": "#/$defs/ConfigReadAllResponse_unstable" + } + ], + "title": "ConfigReadAllResponse_unstable" + }, { "allOf": [ { diff --git a/crates/goose/src/acp/server/config.rs b/crates/goose/src/acp/server/config.rs index 14a95a15075c..e70ddf98dfb1 100644 --- a/crates/goose/src/acp/server/config.rs +++ b/crates/goose/src/acp/server/config.rs @@ -1,6 +1,22 @@ use super::*; use goose_providers::thinking::ThinkingEffort; +const SECRET_MASK_SHOW_LEN: usize = 8; + +fn mask_secret(secret: serde_json::Value) -> String { + let as_string = match secret { + serde_json::Value::String(s) => s, + _ => serde_json::to_string(&secret).unwrap_or_else(|_| secret.to_string()), + }; + + let chars: Vec<_> = as_string.chars().collect(); + let show_len = std::cmp::min(chars.len() / 2, SECRET_MASK_SHOW_LEN); + let visible: String = chars.iter().take(show_len).collect(); + let mask = "*".repeat(chars.len() - show_len); + + format!("{}{}", visible, mask) +} + impl GooseAcpAgent { pub(super) async fn on_preferences_read( &self, @@ -58,6 +74,101 @@ impl GooseAcpAgent { Ok(EmptyResponse {}) } + pub(super) async fn on_config_read( + &self, + req: ConfigReadRequest, + ) -> Result { + let config = self.config()?; + + if req.key == "GOOSE_PROVIDER" || req.key == "active_provider" { + let value = config + .get_goose_provider() + .map(serde_json::Value::String) + .unwrap_or(serde_json::Value::Null); + return Ok(ConfigReadResponse { value }); + } + if req.key == "GOOSE_MODEL" { + let value = config + .get_goose_model() + .map(serde_json::Value::String) + .unwrap_or(serde_json::Value::Null); + return Ok(ConfigReadResponse { value }); + } + + let value = match config.get(&req.key, req.is_secret) { + Ok(value) if req.is_secret => serde_json::Value::String(mask_secret(value)), + Ok(value) => value, + Err(crate::config::ConfigError::NotFound(_)) => serde_json::Value::Null, + Err(e) => { + return Err(agent_client_protocol::Error::internal_error().data(e.to_string())) + } + }; + Ok(ConfigReadResponse { value }) + } + + pub(super) async fn on_config_upsert( + &self, + req: ConfigUpsertRequest, + ) -> Result { + let config = self.config()?; + + if req.key == "GOOSE_PROVIDER" { + if let Some(name) = req.value.as_str() { + let model = crate::config::get_provider_entry(config, name) + .map(|e| e.model) + .or_else(|| config.get_goose_model().ok()) + .unwrap_or_default(); + crate::config::set_active_provider(config, name, &model).internal_err()?; + return Ok(EmptyResponse {}); + } + } + if req.key == "GOOSE_MODEL" { + if let Some(model) = req.value.as_str() { + if let Ok(provider) = config.get_goose_provider() { + crate::config::set_active_provider(config, &provider, model).internal_err()?; + return Ok(EmptyResponse {}); + } + } + } + + config + .set(&req.key, &req.value, req.is_secret) + .internal_err()?; + Ok(EmptyResponse {}) + } + + pub(super) async fn on_config_remove( + &self, + req: ConfigRemoveRequest, + ) -> Result { + let config = self.config()?; + + if req.is_secret { + config.delete_secret(&req.key).internal_err()?; + } else if req.key == "GOOSE_PROVIDER" || req.key == "active_provider" { + config.delete("active_provider").internal_err()?; + config.delete("GOOSE_PROVIDER").internal_err()?; + } else if req.key == "GOOSE_MODEL" { + if let Ok(provider) = config.get_goose_provider() { + crate::config::set_active_provider(config, &provider, "").internal_err()?; + } + config.delete("GOOSE_MODEL").internal_err()?; + } else { + config.delete(&req.key).internal_err()?; + } + + Ok(EmptyResponse {}) + } + + pub(super) async fn on_config_read_all( + &self, + _req: ConfigReadAllRequest, + ) -> Result { + let config = self.config()?; + let values = config.all_values().internal_err()?; + Ok(ConfigReadAllResponse { config: values }) + } + pub(super) async fn on_defaults_read( &self, _req: DefaultsReadRequest, diff --git a/crates/goose/src/acp/server/custom_dispatch.rs b/crates/goose/src/acp/server/custom_dispatch.rs index ca8dbfc011d6..b15693746d1a 100644 --- a/crates/goose/src/acp/server/custom_dispatch.rs +++ b/crates/goose/src/acp/server/custom_dispatch.rs @@ -376,6 +376,38 @@ impl GooseAcpAgent { self.on_preferences_remove(req).await } + #[custom_method(ConfigReadRequest)] + async fn dispatch_config_read( + &self, + req: ConfigReadRequest, + ) -> Result { + self.on_config_read(req).await + } + + #[custom_method(ConfigUpsertRequest)] + async fn dispatch_config_upsert( + &self, + req: ConfigUpsertRequest, + ) -> Result { + self.on_config_upsert(req).await + } + + #[custom_method(ConfigRemoveRequest)] + async fn dispatch_config_remove( + &self, + req: ConfigRemoveRequest, + ) -> Result { + self.on_config_remove(req).await + } + + #[custom_method(ConfigReadAllRequest)] + async fn dispatch_config_read_all( + &self, + req: ConfigReadAllRequest, + ) -> Result { + self.on_config_read_all(req).await + } + #[custom_method(DefaultsReadRequest)] async fn dispatch_defaults_read( &self, diff --git a/ui/desktop/src/App.test.tsx b/ui/desktop/src/App.test.tsx index 08e795cb4d1a..cee3c1466cff 100644 --- a/ui/desktop/src/App.test.tsx +++ b/ui/desktop/src/App.test.tsx @@ -46,7 +46,6 @@ vi.mock('./api', () => { return { initConfig: vi.fn().mockResolvedValue(undefined), - readAllConfig: vi.fn().mockResolvedValue(undefined), backupConfig: vi.fn().mockResolvedValue(undefined), recoverConfig: vi.fn().mockResolvedValue(undefined), validateConfig: vi.fn().mockResolvedValue(undefined), diff --git a/ui/desktop/src/acp/config.ts b/ui/desktop/src/acp/config.ts new file mode 100644 index 000000000000..7ca81030bba3 --- /dev/null +++ b/ui/desktop/src/acp/config.ts @@ -0,0 +1,38 @@ +import { getAcpClient } from './acpConnection'; + +export type ConfigReadValue = unknown; + +export async function acpReadConfig( + key: string, + isSecret: boolean = false +): Promise { + const client = await getAcpClient(); + const { value } = await client.goose.configRead_unstable({ key, isSecret }); + if (value == null) { + return null; + } + if (isSecret) { + return { maskedValue: value as string }; + } + return value; +} + +export async function acpUpsertConfig( + key: string, + value: unknown, + isSecret: boolean = false +): Promise { + const client = await getAcpClient(); + await client.goose.configUpsert_unstable({ key, value, isSecret }); +} + +export async function acpRemoveConfig(key: string, isSecret: boolean): Promise { + const client = await getAcpClient(); + await client.goose.configRemove_unstable({ key, isSecret }); +} + +export async function acpReadAllConfig(): Promise> { + const client = await getAcpClient(); + const { config } = await client.goose.configReadAll_unstable({}); + return config; +} diff --git a/ui/desktop/src/components/ConfigContext.tsx b/ui/desktop/src/components/ConfigContext.tsx index 84704b22f6e3..2672a397f104 100644 --- a/ui/desktop/src/components/ConfigContext.tsx +++ b/ui/desktop/src/components/ConfigContext.tsx @@ -1,5 +1,5 @@ import React, { createContext, useContext, useState, useEffect, useMemo, useCallback } from 'react'; -import { readAllConfig, readConfig, removeConfig, upsertConfig } from '../api'; +import { acpReadAllConfig, acpReadConfig, acpRemoveConfig, acpUpsertConfig } from '../acp/config'; import { acpListProviderDetails } from '../acp/providers'; import { getConfiguredExtensions, @@ -9,13 +9,7 @@ import { } from '../acp/extensions'; import { pruneDeprecatedBundledExtensions, syncBundledExtensions } from './settings/extensions'; import { nameToKey } from './settings/extensions/utils'; -import type { - ConfigResponse, - UpsertConfigQuery, - ConfigKeyQuery, - ProviderDetails, - ExtensionConfig, -} from '../api'; +import type { ConfigResponse, ProviderDetails, ExtensionConfig } from '../api'; export type { ExtensionConfig } from '../api/types.gen'; @@ -57,20 +51,13 @@ export const ConfigProvider: React.FC = ({ children }) => { providersListRef.current = providersList; const reloadConfig = useCallback(async () => { - const response = await readAllConfig(); - setConfig(response.data?.config || {}); + const config = await acpReadAllConfig(); + setConfig(config); }, []); const upsert = useCallback( async (key: string, value: unknown, isSecret: boolean = false) => { - const query: UpsertConfigQuery = { - key: key, - value: value, - is_secret: isSecret, - }; - await upsertConfig({ - body: query, - }); + await acpUpsertConfig(key, value, isSecret); await reloadConfig(); }, [reloadConfig] @@ -78,24 +65,21 @@ export const ConfigProvider: React.FC = ({ children }) => { const read = useCallback( async (key: string, is_secret: boolean = false, options?: { throwOnError?: boolean }) => { - const query: ConfigKeyQuery = { key: key, is_secret: is_secret }; - const response = await readConfig({ - body: query, - }); - if (options?.throwOnError && response.error) { - throw response.error; + try { + return await acpReadConfig(key, is_secret); + } catch (error) { + if (options?.throwOnError) { + throw error; + } + return null; } - return response.data; }, [] ); const remove = useCallback( async (key: string, is_secret: boolean) => { - const query: ConfigKeyQuery = { key: key, is_secret: is_secret }; - await removeConfig({ - body: query, - }); + await acpRemoveConfig(key, is_secret); await reloadConfig(); }, [reloadConfig] @@ -167,8 +151,8 @@ export const ConfigProvider: React.FC = ({ children }) => { // Load all configuration data and providers on mount (async () => { // Load config - const configResponse = await readAllConfig(); - setConfig(configResponse.data?.config || {}); + const configResponse = await acpReadAllConfig(); + setConfig(configResponse); // Load providers try { diff --git a/ui/desktop/src/components/alerts/AlertBox.tsx b/ui/desktop/src/components/alerts/AlertBox.tsx index 3e987d3ad761..8d45b945666d 100644 --- a/ui/desktop/src/components/alerts/AlertBox.tsx +++ b/ui/desktop/src/components/alerts/AlertBox.tsx @@ -4,7 +4,6 @@ import { FaPencilAlt, FaSave } from 'react-icons/fa'; import { cn } from '../../utils'; import { errorMessage } from '../../utils/conversionUtils'; import { Alert, AlertType } from './types'; -import { upsertConfig } from '../../api'; import { useConfig } from '../ConfigContext'; import { defineMessages, useIntl } from '../../i18n'; @@ -43,7 +42,7 @@ const alertStyles: Record = { export const AlertBox = ({ alert, className }: AlertBoxProps) => { const intl = useIntl(); - const { read } = useConfig(); + const { read, upsert } = useConfig(); const [isEditingThreshold, setIsEditingThreshold] = useState(false); const [loadedThreshold, setLoadedThreshold] = useState(0.8); const [thresholdValue, setThresholdValue] = useState(80); @@ -79,13 +78,7 @@ export const AlertBox = ({ alert, className }: AlertBoxProps) => { try { const newThreshold = validThreshold / 100; // Convert percentage to decimal - await upsertConfig({ - body: { - key: 'GOOSE_AUTO_COMPACT_THRESHOLD', - value: newThreshold, - is_secret: false, - }, - }); + await upsert('GOOSE_AUTO_COMPACT_THRESHOLD', newThreshold, false); setIsEditingThreshold(false); setLoadedThreshold(newThreshold); diff --git a/ui/desktop/src/components/settings/extensions/modal/ExtensionModal.test.tsx b/ui/desktop/src/components/settings/extensions/modal/ExtensionModal.test.tsx index a18ebbe2feb2..7cb6e76c3492 100644 --- a/ui/desktop/src/components/settings/extensions/modal/ExtensionModal.test.tsx +++ b/ui/desktop/src/components/settings/extensions/modal/ExtensionModal.test.tsx @@ -4,17 +4,18 @@ import userEvent from '@testing-library/user-event'; import ExtensionModal from './ExtensionModal'; import { ExtensionFormData } from '../utils'; import { IntlTestWrapper } from '../../../../i18n/test-utils'; -import { upsertConfig } from '../../../../api'; +import { acpUpsertConfig } from '../../../../acp/config'; -vi.mock('../../../../api', async () => { - const actual = await vi.importActual('../../../../api'); +vi.mock('../../../../acp/config', async () => { + const actual = + await vi.importActual('../../../../acp/config'); return { ...actual, - upsertConfig: vi.fn().mockResolvedValue({ data: 'ok' }), + acpUpsertConfig: vi.fn().mockResolvedValue(undefined), }; }); -const mockedUpsertConfig = vi.mocked(upsertConfig); +const mockedUpsertConfig = vi.mocked(acpUpsertConfig); const renderWithIntl = (ui: React.ReactElement, options?: RenderOptions) => render(ui, { wrapper: IntlTestWrapper, ...options }); @@ -261,12 +262,7 @@ describe('ExtensionModal', () => { describe('pending env var capture (fix for #8969)', () => { beforeEach(() => { mockedUpsertConfig.mockClear(); - mockedUpsertConfig.mockResolvedValue({ - data: 'ok', - error: undefined, - request: new globalThis.Request('http://localhost/test'), - response: new globalThis.Response(), - }); + mockedUpsertConfig.mockResolvedValue(undefined); }); const emptyInitialData: ExtensionFormData = { @@ -330,15 +326,7 @@ describe('ExtensionModal', () => { expect(mockOnSubmit).toHaveBeenCalled(); }); - expect(mockedUpsertConfig).toHaveBeenCalledWith( - expect.objectContaining({ - body: expect.objectContaining({ - is_secret: true, - key: 'JWT_TOKEN', - value: 'my_very_long_token', - }), - }) - ); + expect(mockedUpsertConfig).toHaveBeenCalledWith('JWT_TOKEN', 'my_very_long_token', true); const submittedData = mockOnSubmit.mock.calls[0][0]; expect(submittedData.envVars).toEqual( @@ -382,9 +370,9 @@ describe('ExtensionModal', () => { }); expect(mockedUpsertConfig).not.toHaveBeenCalledWith( - expect.objectContaining({ - body: expect.objectContaining({ key: 'LONELY_KEY' }), - }) + 'LONELY_KEY', + expect.anything(), + expect.anything() ); const submittedData = mockOnSubmit.mock.calls[0][0]; diff --git a/ui/desktop/src/components/settings/extensions/modal/ExtensionModal.tsx b/ui/desktop/src/components/settings/extensions/modal/ExtensionModal.tsx index 97acdaab8e55..7001f7466fb3 100644 --- a/ui/desktop/src/components/settings/extensions/modal/ExtensionModal.tsx +++ b/ui/desktop/src/components/settings/extensions/modal/ExtensionModal.tsx @@ -15,7 +15,7 @@ import ExtensionConfigFields from './ExtensionConfigFields'; import { PlusIcon, Edit, Trash2, AlertTriangle, Info } from 'lucide-react'; import ExtensionInfoFields from './ExtensionInfoFields'; import ExtensionTimeoutField from './ExtensionTimeoutField'; -import { upsertConfig } from '../../../../api'; +import { acpUpsertConfig } from '../../../../acp/config'; import { ConfirmationModal } from '../../../ui/ConfirmationModal'; import { defineMessages, useIntl } from '../../../../i18n'; @@ -244,13 +244,7 @@ export default function ExtensionModal({ // Function to store a secret value const storeSecret = async (key: string, value: string) => { try { - await upsertConfig({ - body: { - is_secret: true, - key: key, - value: value, - }, - }); + await acpUpsertConfig(key, value, true); return true; } catch (error) { console.error('Failed to store secret:', error); diff --git a/ui/desktop/src/renderer.tsx b/ui/desktop/src/renderer.tsx index 3e6533188a15..e809407a9b31 100644 --- a/ui/desktop/src/renderer.tsx +++ b/ui/desktop/src/renderer.tsx @@ -6,7 +6,7 @@ import { ErrorBoundary } from './components/ErrorBoundary'; import SuspenseLoader from './suspense-loader'; import { client } from './api/client.gen'; import { setTelemetryEnabled } from './utils/analytics'; -import { readConfig } from './api'; +import { acpReadConfig } from './acp/config'; import { applyThemeTokens } from './theme/theme-tokens'; import { currentLocale, currentMessageLocale, loadMessages } from './i18n'; @@ -50,10 +50,8 @@ function handleIntlError(err: { code: string; message?: string }) { }); try { - const telemetryResponse = await readConfig({ - body: { key: TELEMETRY_CONFIG_KEY, is_secret: false }, - }); - const isTelemetryEnabled = telemetryResponse.data !== false; + const telemetryValue = await acpReadConfig(TELEMETRY_CONFIG_KEY, false); + const isTelemetryEnabled = telemetryValue !== false; setTelemetryEnabled(isTelemetryEnabled); } catch (error) { console.warn('[Analytics] Failed to initialize analytics:', error); diff --git a/ui/sdk/src/generated/client.gen.ts b/ui/sdk/src/generated/client.gen.ts index 4455796c47c8..beb4b3e460fc 100644 --- a/ui/sdk/src/generated/client.gen.ts +++ b/ui/sdk/src/generated/client.gen.ts @@ -20,6 +20,12 @@ import type { ArchiveSessionRequest_unstable, CanonicalModelInfoRequest_unstable, CanonicalModelInfoResponse_unstable, + ConfigReadAllRequest_unstable, + ConfigReadAllResponse_unstable, + ConfigReadRequest_unstable, + ConfigReadResponse_unstable, + ConfigRemoveRequest_unstable, + ConfigUpsertRequest_unstable, CreateScheduleRequest_unstable, CreateScheduleResponse_unstable, CreateSourceRequest_unstable, @@ -178,6 +184,8 @@ import { zAppsImportResponse_unstable, zAppsListResponse_unstable, zCanonicalModelInfoResponse_unstable, + zConfigReadAllResponse_unstable, + zConfigReadResponse_unstable, zCreateScheduleResponse_unstable, zCreateSourceResponse_unstable, zCustomProviderCreateResponse_unstable, @@ -719,6 +727,42 @@ export class GooseExtClient { await this.conn.extMethod("_goose/unstable/preferences/remove", params); } + async configRead_unstable( + params: ConfigReadRequest_unstable, + ): Promise { + const raw = await this.conn.extMethod( + "_goose/unstable/config/read", + params, + ); + return zConfigReadResponse_unstable.parse( + raw, + ) as ConfigReadResponse_unstable; + } + + async configUpsert_unstable( + params: ConfigUpsertRequest_unstable, + ): Promise { + await this.conn.extMethod("_goose/unstable/config/upsert", params); + } + + async configRemove_unstable( + params: ConfigRemoveRequest_unstable, + ): Promise { + await this.conn.extMethod("_goose/unstable/config/remove", params); + } + + async configReadAll_unstable( + params: ConfigReadAllRequest_unstable, + ): Promise { + const raw = await this.conn.extMethod( + "_goose/unstable/config/read-all", + params, + ); + return zConfigReadAllResponse_unstable.parse( + raw, + ) as ConfigReadAllResponse_unstable; + } + async defaultsRead_unstable( params: DefaultsReadRequest_unstable, ): Promise { diff --git a/ui/sdk/src/generated/index.ts b/ui/sdk/src/generated/index.ts index bfe769325b0a..a16b38709b50 100644 --- a/ui/sdk/src/generated/index.ts +++ b/ui/sdk/src/generated/index.ts @@ -1,6 +1,6 @@ // This file is auto-generated by @hey-api/openapi-ts -export type { AddConfigExtensionRequest_unstable, AddSessionExtensionRequest_unstable, AgentMention, Annotations, AppsExportRequest_unstable, AppsExportResponse_unstable, AppsImportRequest_unstable, AppsImportResponse_unstable, AppsListRequest_unstable, AppsListResponse_unstable, ArchiveSessionRequest_unstable, AudioContent, AvailableCommand, AvailableCommandInput, BlobResourceContents, CanonicalModelInfoDto, CanonicalModelInfoRequest_unstable, CanonicalModelInfoResponse_unstable, ContentBlock, CreateScheduleRequest_unstable, CreateScheduleResponse_unstable, CreateSourceRequest_unstable, CreateSourceResponse_unstable, CustomProviderConfigDto, CustomProviderCreateRequest_unstable, CustomProviderCreateResponse_unstable, CustomProviderDeleteRequest_unstable, CustomProviderDeleteResponse_unstable, CustomProviderReadRequest_unstable, CustomProviderReadResponse_unstable, CustomProviderUpdateRequest_unstable, CustomProviderUpdateResponse_unstable, DecodeRecipeRequest_unstable, DecodeRecipeResponse_unstable, DefaultsClearRequest_unstable, DefaultsReadRequest_unstable, DefaultsReadResponse_unstable, DefaultsSaveRequest_unstable, DeleteRecipeRequest_unstable, DeleteScheduleRequest_unstable, DeleteSessionRequest, DeleteSourceRequest_unstable, DiagnosticsGetRequest_unstable, DiagnosticsGetResponse_unstable, DiagnosticsReportLevel, 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, EmbeddedResource, EmbeddedResourceResource, EmptyResponse, EncodeRecipeRequest_unstable, EncodeRecipeResponse_unstable, EnvVariable, ExportSessionRequest_unstable, ExportSessionResponse_unstable, ExportSourceRequest_unstable, ExportSourceResponse_unstable, ExtAgentRequest, ExtAgentResponse, ExtNotification, ExtRequest, ExtResponse, GetAvailableExtensionsRequest_unstable, GetAvailableExtensionsResponse_unstable, GetConfigExtensionsRequest_unstable, GetConfigExtensionsResponse_unstable, GetPromptRequest_unstable, GetPromptResponse_unstable, GetSessionExtensionsRequest_unstable, GetSessionExtensionsResponse_unstable, GetSessionInfoRequest_unstable, GetSessionInfoResponse_unstable, GetToolsRequest_unstable, GetToolsResponse_unstable, GooseExtension, GooseExtensionEntry, GooseSessionNotification_unstable, GooseSessionUpdate, GooseToolCallRequest_unstable, GooseToolCallResponse_unstable, HttpHeader, ImageContent, ImportSessionRequest_unstable, ImportSessionResponse_unstable, ImportSourcesRequest_unstable, ImportSourcesResponse_unstable, InspectRunningJobRequest_unstable, InspectRunningJobResponse_unstable, KillRunningJobRequest_unstable, KillRunningJobResponse_unstable, ListAgentMentionsRequest_unstable, ListAgentMentionsResponse_unstable, ListPromptsRequest_unstable, ListPromptsResponse_unstable, ListProvidersRequest_unstable, ListProvidersResponse_unstable, ListRecipesRequest_unstable, ListRecipesResponse_unstable, ListScheduleSessionsRequest_unstable, ListScheduleSessionsResponse_unstable, ListSchedulesRequest_unstable, ListSchedulesResponse_unstable, ListSlashCommandsRequest_unstable, ListSlashCommandsResponse_unstable, ListSourcesRequest_unstable, ListSourcesResponse_unstable, McpServer, McpServerHttp, McpServerSse, McpServerStdio, OnboardingImportApplyRequest_unstable, OnboardingImportApplyResponse_unstable, OnboardingImportCandidate, OnboardingImportCounts, OnboardingImportScanRequest_unstable, OnboardingImportScanResponse_unstable, OnboardingImportSourceKind, ParseRecipeRequest_unstable, ParseRecipeResponse_unstable, PauseScheduleRequest_unstable, PreferenceKey, PreferencesReadRequest_unstable, PreferencesReadResponse_unstable, PreferencesRemoveRequest_unstable, PreferencesSaveRequest_unstable, PreferenceValue, PromptOperationResponse_unstable, PromptTemplateEntry, 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, ProviderSecretDeleteRequest_unstable, ProviderSecretDto, ProviderSecretsListRequest_unstable, ProviderSecretsListResponse_unstable, ProviderSecretStatusDto, ProviderSecretStorageDto, ProviderSetupCatalogEntryDto, ProviderSetupCatalogListRequest_unstable, ProviderSetupCatalogListResponse_unstable, ProviderSetupCategoryDto, ProviderSetupFieldDto, ProviderSetupGroupDto, ProviderSetupMethodDto, ProviderSupportedModelsListRequest_unstable, ProviderSupportedModelsListResponse_unstable, ProviderTemplateCapabilitiesDto, ProviderTemplateCatalogEntryDto, ProviderTemplateDto, ProviderTemplateModelDto, ReadResourceRequest_unstable, ReadResourceResponse_unstable, RecipeAuthorDto, RecipeDto, RecipeExtensionDto, RecipeListEntryDto, RecipeParameterDto, RecipeParameterInputTypeDto, RecipeParameterRequirementDto, RecipeParamsAction, RecipeParamsResponse_unstable, RecipeResponseDto, RecipeRetryConfigDto, RecipeSettingsDto, RecipeSuccessCheckDto, RecipeToYamlRequest_unstable, RecipeToYamlResponse_unstable, RefreshProviderInventoryRequest_unstable, RefreshProviderInventoryResponse_unstable, RefreshProviderInventorySkipDto, RefreshProviderInventorySkipReasonDto, RemoveConfigExtensionRequest_unstable, RemoveSessionExtensionRequest_unstable, RenameSessionRequest_unstable, RequestRecipeParams_unstable, ResetPromptRequest_unstable, ResourceLink, Role, RunScheduleNowRequest_unstable, RunScheduleNowResponse_unstable, RunScheduleNowStatus, SavePromptRequest_unstable, SaveRecipeRequest_unstable, SaveRecipeResponse_unstable, ScanRecipeRequest_unstable, ScanRecipeResponse_unstable, ScheduledJobDto, ScheduleRecipeRequest_unstable, SessionId, SessionImportSource, SessionInfo, SessionSystemPromptMode, SessionUsageUpdate, SetConfigExtensionEnabledRequest_unstable, SetRecipeSlashCommandRequest_unstable, SetSessionSystemPromptRequest_unstable, SetToolPermissionsRequest_unstable, SetToolPermissionsResponse_unstable, ShareSessionNostrRequest_unstable, ShareSessionNostrResponse_unstable, SourceEntry, SourceScope, SourceType, StatusMessage, StatusMessageUpdate, SteerSessionRequest_unstable, SteerSessionResponse_unstable, SubRecipeDto, TextContent, TextResourceContents, ToolListItem, ToolPermissionEntry, ToolPermissionLevel, TruncateSessionConversationRequest_unstable, UnarchiveSessionRequest_unstable, UnpauseScheduleRequest_unstable, UnstructuredCommandInput, UpdateScheduleRequest_unstable, UpdateScheduleResponse_unstable, UpdateSessionProjectRequest_unstable, UpdateSourceRequest_unstable, UpdateSourceResponse_unstable, UpdateWorkingDirRequest_unstable } from './types.gen.js'; +export type { AddConfigExtensionRequest_unstable, AddSessionExtensionRequest_unstable, AgentMention, Annotations, AppsExportRequest_unstable, AppsExportResponse_unstable, AppsImportRequest_unstable, AppsImportResponse_unstable, AppsListRequest_unstable, AppsListResponse_unstable, ArchiveSessionRequest_unstable, AudioContent, AvailableCommand, AvailableCommandInput, BlobResourceContents, CanonicalModelInfoDto, CanonicalModelInfoRequest_unstable, CanonicalModelInfoResponse_unstable, ConfigReadAllRequest_unstable, ConfigReadAllResponse_unstable, ConfigReadRequest_unstable, ConfigReadResponse_unstable, ConfigRemoveRequest_unstable, ConfigUpsertRequest_unstable, ContentBlock, CreateScheduleRequest_unstable, CreateScheduleResponse_unstable, CreateSourceRequest_unstable, CreateSourceResponse_unstable, CustomProviderConfigDto, CustomProviderCreateRequest_unstable, CustomProviderCreateResponse_unstable, CustomProviderDeleteRequest_unstable, CustomProviderDeleteResponse_unstable, CustomProviderReadRequest_unstable, CustomProviderReadResponse_unstable, CustomProviderUpdateRequest_unstable, CustomProviderUpdateResponse_unstable, DecodeRecipeRequest_unstable, DecodeRecipeResponse_unstable, DefaultsClearRequest_unstable, DefaultsReadRequest_unstable, DefaultsReadResponse_unstable, DefaultsSaveRequest_unstable, DeleteRecipeRequest_unstable, DeleteScheduleRequest_unstable, DeleteSessionRequest, DeleteSourceRequest_unstable, DiagnosticsGetRequest_unstable, DiagnosticsGetResponse_unstable, DiagnosticsReportLevel, 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, EmbeddedResource, EmbeddedResourceResource, EmptyResponse, EncodeRecipeRequest_unstable, EncodeRecipeResponse_unstable, EnvVariable, ExportSessionRequest_unstable, ExportSessionResponse_unstable, ExportSourceRequest_unstable, ExportSourceResponse_unstable, ExtAgentRequest, ExtAgentResponse, ExtNotification, ExtRequest, ExtResponse, GetAvailableExtensionsRequest_unstable, GetAvailableExtensionsResponse_unstable, GetConfigExtensionsRequest_unstable, GetConfigExtensionsResponse_unstable, GetPromptRequest_unstable, GetPromptResponse_unstable, GetSessionExtensionsRequest_unstable, GetSessionExtensionsResponse_unstable, GetSessionInfoRequest_unstable, GetSessionInfoResponse_unstable, GetToolsRequest_unstable, GetToolsResponse_unstable, GooseExtension, GooseExtensionEntry, GooseSessionNotification_unstable, GooseSessionUpdate, GooseToolCallRequest_unstable, GooseToolCallResponse_unstable, HttpHeader, ImageContent, ImportSessionRequest_unstable, ImportSessionResponse_unstable, ImportSourcesRequest_unstable, ImportSourcesResponse_unstable, InspectRunningJobRequest_unstable, InspectRunningJobResponse_unstable, KillRunningJobRequest_unstable, KillRunningJobResponse_unstable, ListAgentMentionsRequest_unstable, ListAgentMentionsResponse_unstable, ListPromptsRequest_unstable, ListPromptsResponse_unstable, ListProvidersRequest_unstable, ListProvidersResponse_unstable, ListRecipesRequest_unstable, ListRecipesResponse_unstable, ListScheduleSessionsRequest_unstable, ListScheduleSessionsResponse_unstable, ListSchedulesRequest_unstable, ListSchedulesResponse_unstable, ListSlashCommandsRequest_unstable, ListSlashCommandsResponse_unstable, ListSourcesRequest_unstable, ListSourcesResponse_unstable, McpServer, McpServerHttp, McpServerSse, McpServerStdio, OnboardingImportApplyRequest_unstable, OnboardingImportApplyResponse_unstable, OnboardingImportCandidate, OnboardingImportCounts, OnboardingImportScanRequest_unstable, OnboardingImportScanResponse_unstable, OnboardingImportSourceKind, ParseRecipeRequest_unstable, ParseRecipeResponse_unstable, PauseScheduleRequest_unstable, PreferenceKey, PreferencesReadRequest_unstable, PreferencesReadResponse_unstable, PreferencesRemoveRequest_unstable, PreferencesSaveRequest_unstable, PreferenceValue, PromptOperationResponse_unstable, PromptTemplateEntry, 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, ProviderSecretDeleteRequest_unstable, ProviderSecretDto, ProviderSecretsListRequest_unstable, ProviderSecretsListResponse_unstable, ProviderSecretStatusDto, ProviderSecretStorageDto, ProviderSetupCatalogEntryDto, ProviderSetupCatalogListRequest_unstable, ProviderSetupCatalogListResponse_unstable, ProviderSetupCategoryDto, ProviderSetupFieldDto, ProviderSetupGroupDto, ProviderSetupMethodDto, ProviderSupportedModelsListRequest_unstable, ProviderSupportedModelsListResponse_unstable, ProviderTemplateCapabilitiesDto, ProviderTemplateCatalogEntryDto, ProviderTemplateDto, ProviderTemplateModelDto, ReadResourceRequest_unstable, ReadResourceResponse_unstable, RecipeAuthorDto, RecipeDto, RecipeExtensionDto, RecipeListEntryDto, RecipeParameterDto, RecipeParameterInputTypeDto, RecipeParameterRequirementDto, RecipeParamsAction, RecipeParamsResponse_unstable, RecipeResponseDto, RecipeRetryConfigDto, RecipeSettingsDto, RecipeSuccessCheckDto, RecipeToYamlRequest_unstable, RecipeToYamlResponse_unstable, RefreshProviderInventoryRequest_unstable, RefreshProviderInventoryResponse_unstable, RefreshProviderInventorySkipDto, RefreshProviderInventorySkipReasonDto, RemoveConfigExtensionRequest_unstable, RemoveSessionExtensionRequest_unstable, RenameSessionRequest_unstable, RequestRecipeParams_unstable, ResetPromptRequest_unstable, ResourceLink, Role, RunScheduleNowRequest_unstable, RunScheduleNowResponse_unstable, RunScheduleNowStatus, SavePromptRequest_unstable, SaveRecipeRequest_unstable, SaveRecipeResponse_unstable, ScanRecipeRequest_unstable, ScanRecipeResponse_unstable, ScheduledJobDto, ScheduleRecipeRequest_unstable, SessionId, SessionImportSource, SessionInfo, SessionSystemPromptMode, SessionUsageUpdate, SetConfigExtensionEnabledRequest_unstable, SetRecipeSlashCommandRequest_unstable, SetSessionSystemPromptRequest_unstable, SetToolPermissionsRequest_unstable, SetToolPermissionsResponse_unstable, ShareSessionNostrRequest_unstable, ShareSessionNostrResponse_unstable, SourceEntry, SourceScope, SourceType, StatusMessage, StatusMessageUpdate, SteerSessionRequest_unstable, SteerSessionResponse_unstable, SubRecipeDto, TextContent, TextResourceContents, ToolListItem, ToolPermissionEntry, ToolPermissionLevel, TruncateSessionConversationRequest_unstable, UnarchiveSessionRequest_unstable, UnpauseScheduleRequest_unstable, UnstructuredCommandInput, UpdateScheduleRequest_unstable, UpdateScheduleResponse_unstable, UpdateSessionProjectRequest_unstable, UpdateSourceRequest_unstable, UpdateSourceResponse_unstable, UpdateWorkingDirRequest_unstable } from './types.gen.js'; export const GOOSE_EXT_METHODS = [ { @@ -228,6 +228,26 @@ export const GOOSE_EXT_METHODS = [ requestType: "PreferencesRemoveRequest_unstable", responseType: "EmptyResponse", }, + { + method: "_goose/unstable/config/read", + requestType: "ConfigReadRequest_unstable", + responseType: "ConfigReadResponse_unstable", + }, + { + method: "_goose/unstable/config/upsert", + requestType: "ConfigUpsertRequest_unstable", + responseType: "EmptyResponse", + }, + { + method: "_goose/unstable/config/remove", + requestType: "ConfigRemoveRequest_unstable", + responseType: "EmptyResponse", + }, + { + method: "_goose/unstable/config/read-all", + requestType: "ConfigReadAllRequest_unstable", + responseType: "ConfigReadAllResponse_unstable", + }, { method: "_goose/unstable/defaults/read", requestType: "DefaultsReadRequest_unstable", diff --git a/ui/sdk/src/generated/types.gen.ts b/ui/sdk/src/generated/types.gen.ts index 864ced01b88f..c95c07fd2887 100644 --- a/ui/sdk/src/generated/types.gen.ts +++ b/ui/sdk/src/generated/types.gen.ts @@ -1218,6 +1218,36 @@ export type PreferencesRemoveRequest_unstable = { keys?: Array; }; +export type ConfigReadRequest_unstable = { + key: string; + isSecret?: boolean; +}; + +export type ConfigReadResponse_unstable = { + value?: unknown; +}; + +export type ConfigUpsertRequest_unstable = { + key: string; + value: unknown; + isSecret?: boolean; +}; + +export type ConfigRemoveRequest_unstable = { + key: string; + isSecret?: boolean; +}; + +export type ConfigReadAllRequest_unstable = { + [key: string]: unknown; +}; + +export type ConfigReadAllResponse_unstable = { + config: { + [key: string]: unknown; + }; +}; + /** * Read Goose default provider and model configuration. */ @@ -2195,14 +2225,14 @@ export type RecipeParamsAction = 'submit' | 'cancel'; export type ExtRequest = { id: string; method: string; - params?: AddSessionExtensionRequest_unstable | RemoveSessionExtensionRequest_unstable | GetToolsRequest_unstable | SetToolPermissionsRequest_unstable | GooseToolCallRequest_unstable | ReadResourceRequest_unstable | AppsListRequest_unstable | AppsExportRequest_unstable | AppsImportRequest_unstable | UpdateWorkingDirRequest_unstable | SetSessionSystemPromptRequest_unstable | SteerSessionRequest_unstable | DiagnosticsGetRequest_unstable | ListPromptsRequest_unstable | GetPromptRequest_unstable | SavePromptRequest_unstable | ResetPromptRequest_unstable | DeleteSessionRequest | GetConfigExtensionsRequest_unstable | GetAvailableExtensionsRequest_unstable | AddConfigExtensionRequest_unstable | RemoveConfigExtensionRequest_unstable | SetConfigExtensionEnabledRequest_unstable | GetSessionExtensionsRequest_unstable | ListProvidersRequest_unstable | ProviderSupportedModelsListRequest_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 | ProviderSecretsListRequest_unstable | ProviderSecretDeleteRequest_unstable | CanonicalModelInfoRequest_unstable | PreferencesReadRequest_unstable | PreferencesSaveRequest_unstable | PreferencesRemoveRequest_unstable | DefaultsReadRequest_unstable | DefaultsSaveRequest_unstable | DefaultsClearRequest_unstable | OnboardingImportScanRequest_unstable | OnboardingImportApplyRequest_unstable | ExportSessionRequest_unstable | ImportSessionRequest_unstable | ShareSessionNostrRequest_unstable | EncodeRecipeRequest_unstable | DecodeRecipeRequest_unstable | ScanRecipeRequest_unstable | ListRecipesRequest_unstable | DeleteRecipeRequest_unstable | ScheduleRecipeRequest_unstable | SetRecipeSlashCommandRequest_unstable | SaveRecipeRequest_unstable | ParseRecipeRequest_unstable | RecipeToYamlRequest_unstable | ListSchedulesRequest_unstable | ListScheduleSessionsRequest_unstable | CreateScheduleRequest_unstable | DeleteScheduleRequest_unstable | PauseScheduleRequest_unstable | UnpauseScheduleRequest_unstable | UpdateScheduleRequest_unstable | RunScheduleNowRequest_unstable | KillRunningJobRequest_unstable | InspectRunningJobRequest_unstable | GetSessionInfoRequest_unstable | TruncateSessionConversationRequest_unstable | UpdateSessionProjectRequest_unstable | RenameSessionRequest_unstable | ArchiveSessionRequest_unstable | UnarchiveSessionRequest_unstable | CreateSourceRequest_unstable | ListSourcesRequest_unstable | ListAgentMentionsRequest_unstable | ListSlashCommandsRequest_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 | { + params?: AddSessionExtensionRequest_unstable | RemoveSessionExtensionRequest_unstable | GetToolsRequest_unstable | SetToolPermissionsRequest_unstable | GooseToolCallRequest_unstable | ReadResourceRequest_unstable | AppsListRequest_unstable | AppsExportRequest_unstable | AppsImportRequest_unstable | UpdateWorkingDirRequest_unstable | SetSessionSystemPromptRequest_unstable | SteerSessionRequest_unstable | DiagnosticsGetRequest_unstable | ListPromptsRequest_unstable | GetPromptRequest_unstable | SavePromptRequest_unstable | ResetPromptRequest_unstable | DeleteSessionRequest | GetConfigExtensionsRequest_unstable | GetAvailableExtensionsRequest_unstable | AddConfigExtensionRequest_unstable | RemoveConfigExtensionRequest_unstable | SetConfigExtensionEnabledRequest_unstable | GetSessionExtensionsRequest_unstable | ListProvidersRequest_unstable | ProviderSupportedModelsListRequest_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 | ProviderSecretsListRequest_unstable | ProviderSecretDeleteRequest_unstable | CanonicalModelInfoRequest_unstable | PreferencesReadRequest_unstable | PreferencesSaveRequest_unstable | PreferencesRemoveRequest_unstable | ConfigReadRequest_unstable | ConfigUpsertRequest_unstable | ConfigRemoveRequest_unstable | ConfigReadAllRequest_unstable | DefaultsReadRequest_unstable | DefaultsSaveRequest_unstable | DefaultsClearRequest_unstable | OnboardingImportScanRequest_unstable | OnboardingImportApplyRequest_unstable | ExportSessionRequest_unstable | ImportSessionRequest_unstable | ShareSessionNostrRequest_unstable | EncodeRecipeRequest_unstable | DecodeRecipeRequest_unstable | ScanRecipeRequest_unstable | ListRecipesRequest_unstable | DeleteRecipeRequest_unstable | ScheduleRecipeRequest_unstable | SetRecipeSlashCommandRequest_unstable | SaveRecipeRequest_unstable | ParseRecipeRequest_unstable | RecipeToYamlRequest_unstable | ListSchedulesRequest_unstable | ListScheduleSessionsRequest_unstable | CreateScheduleRequest_unstable | DeleteScheduleRequest_unstable | PauseScheduleRequest_unstable | UnpauseScheduleRequest_unstable | UpdateScheduleRequest_unstable | RunScheduleNowRequest_unstable | KillRunningJobRequest_unstable | InspectRunningJobRequest_unstable | GetSessionInfoRequest_unstable | TruncateSessionConversationRequest_unstable | UpdateSessionProjectRequest_unstable | RenameSessionRequest_unstable | ArchiveSessionRequest_unstable | UnarchiveSessionRequest_unstable | CreateSourceRequest_unstable | ListSourcesRequest_unstable | ListAgentMentionsRequest_unstable | ListSlashCommandsRequest_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_unstable | SetToolPermissionsResponse_unstable | GooseToolCallResponse_unstable | ReadResourceResponse_unstable | AppsListResponse_unstable | AppsExportResponse_unstable | AppsImportResponse_unstable | SteerSessionResponse_unstable | DiagnosticsGetResponse_unstable | ListPromptsResponse_unstable | GetPromptResponse_unstable | PromptOperationResponse_unstable | GetConfigExtensionsResponse_unstable | GetAvailableExtensionsResponse_unstable | GetSessionExtensionsResponse_unstable | ListProvidersResponse_unstable | ProviderSupportedModelsListResponse_unstable | ProviderCatalogListResponse_unstable | ProviderSetupCatalogListResponse_unstable | ProviderCatalogTemplateResponse_unstable | CustomProviderCreateResponse_unstable | CustomProviderReadResponse_unstable | CustomProviderUpdateResponse_unstable | CustomProviderDeleteResponse_unstable | RefreshProviderInventoryResponse_unstable | ProviderConfigReadResponse_unstable | ProviderConfigStatusResponse_unstable | ProviderConfigChangeResponse_unstable | ProviderSecretsListResponse_unstable | CanonicalModelInfoResponse_unstable | PreferencesReadResponse_unstable | DefaultsReadResponse_unstable | OnboardingImportScanResponse_unstable | OnboardingImportApplyResponse_unstable | ExportSessionResponse_unstable | ImportSessionResponse_unstable | ShareSessionNostrResponse_unstable | EncodeRecipeResponse_unstable | DecodeRecipeResponse_unstable | ScanRecipeResponse_unstable | ListRecipesResponse_unstable | SaveRecipeResponse_unstable | ParseRecipeResponse_unstable | RecipeToYamlResponse_unstable | ListSchedulesResponse_unstable | ListScheduleSessionsResponse_unstable | CreateScheduleResponse_unstable | UpdateScheduleResponse_unstable | RunScheduleNowResponse_unstable | KillRunningJobResponse_unstable | InspectRunningJobResponse_unstable | GetSessionInfoResponse_unstable | CreateSourceResponse_unstable | ListSourcesResponse_unstable | ListAgentMentionsResponse_unstable | ListSlashCommandsResponse_unstable | UpdateSourceResponse_unstable | ExportSourceResponse_unstable | ImportSourcesResponse_unstable | DictationTranscribeResponse_unstable | DictationConfigResponse_unstable | DictationModelsListResponse_unstable | DictationModelDownloadProgressResponse_unstable | unknown; + result?: EmptyResponse | GetToolsResponse_unstable | SetToolPermissionsResponse_unstable | GooseToolCallResponse_unstable | ReadResourceResponse_unstable | AppsListResponse_unstable | AppsExportResponse_unstable | AppsImportResponse_unstable | SteerSessionResponse_unstable | DiagnosticsGetResponse_unstable | ListPromptsResponse_unstable | GetPromptResponse_unstable | PromptOperationResponse_unstable | GetConfigExtensionsResponse_unstable | GetAvailableExtensionsResponse_unstable | GetSessionExtensionsResponse_unstable | ListProvidersResponse_unstable | ProviderSupportedModelsListResponse_unstable | ProviderCatalogListResponse_unstable | ProviderSetupCatalogListResponse_unstable | ProviderCatalogTemplateResponse_unstable | CustomProviderCreateResponse_unstable | CustomProviderReadResponse_unstable | CustomProviderUpdateResponse_unstable | CustomProviderDeleteResponse_unstable | RefreshProviderInventoryResponse_unstable | ProviderConfigReadResponse_unstable | ProviderConfigStatusResponse_unstable | ProviderConfigChangeResponse_unstable | ProviderSecretsListResponse_unstable | CanonicalModelInfoResponse_unstable | PreferencesReadResponse_unstable | ConfigReadResponse_unstable | ConfigReadAllResponse_unstable | DefaultsReadResponse_unstable | OnboardingImportScanResponse_unstable | OnboardingImportApplyResponse_unstable | ExportSessionResponse_unstable | ImportSessionResponse_unstable | ShareSessionNostrResponse_unstable | EncodeRecipeResponse_unstable | DecodeRecipeResponse_unstable | ScanRecipeResponse_unstable | ListRecipesResponse_unstable | SaveRecipeResponse_unstable | ParseRecipeResponse_unstable | RecipeToYamlResponse_unstable | ListSchedulesResponse_unstable | ListScheduleSessionsResponse_unstable | CreateScheduleResponse_unstable | UpdateScheduleResponse_unstable | RunScheduleNowResponse_unstable | KillRunningJobResponse_unstable | InspectRunningJobResponse_unstable | GetSessionInfoResponse_unstable | CreateSourceResponse_unstable | ListSourcesResponse_unstable | ListAgentMentionsResponse_unstable | ListSlashCommandsResponse_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 4ffed9a6ddac..3ce88c961970 100644 --- a/ui/sdk/src/generated/zod.gen.ts +++ b/ui/sdk/src/generated/zod.gen.ts @@ -1243,6 +1243,32 @@ export const zPreferencesRemoveRequest_unstable = z.object({ keys: z.array(zPreferenceKey).optional().default([]) }); +export const zConfigReadRequest_unstable = z.object({ + key: z.string(), + isSecret: z.boolean().optional().default(false) +}); + +export const zConfigReadResponse_unstable = z.object({ + value: z.unknown().optional().default(null) +}); + +export const zConfigUpsertRequest_unstable = z.object({ + key: z.string(), + value: z.unknown(), + isSecret: z.boolean().optional().default(false) +}); + +export const zConfigRemoveRequest_unstable = z.object({ + key: z.string(), + isSecret: z.boolean().optional().default(false) +}); + +export const zConfigReadAllRequest_unstable = z.record(z.unknown()); + +export const zConfigReadAllResponse_unstable = z.object({ + config: z.record(z.unknown()) +}); + /** * Read Goose default provider and model configuration. */ @@ -2400,6 +2426,10 @@ export const zExtRequest = z.object({ zPreferencesReadRequest_unstable, zPreferencesSaveRequest_unstable, zPreferencesRemoveRequest_unstable, + zConfigReadRequest_unstable, + zConfigUpsertRequest_unstable, + zConfigRemoveRequest_unstable, + zConfigReadAllRequest_unstable, zDefaultsReadRequest_unstable, zDefaultsSaveRequest_unstable, zDefaultsClearRequest_unstable, @@ -2497,6 +2527,8 @@ export const zExtResponse = z.union([ zProviderSecretsListResponse_unstable, zCanonicalModelInfoResponse_unstable, zPreferencesReadResponse_unstable, + zConfigReadResponse_unstable, + zConfigReadAllResponse_unstable, zDefaultsReadResponse_unstable, zOnboardingImportScanResponse_unstable, zOnboardingImportApplyResponse_unstable,