feat: auto-initialize goose config.yaml (#2102)

This commit is contained in:
Alex Hancock
2025-04-09 11:31:19 -04:00
committed by GitHub
parent 5cc608dd03
commit a3deeef05a
7 changed files with 131 additions and 2 deletions
+23
View File
@@ -173,6 +173,29 @@
}
}
},
"/config/init": {
"post": {
"tags": [
"super::routes::config_management"
],
"operationId": "init_config",
"responses": {
"200": {
"description": "Config initialization check completed",
"content": {
"text/plain": {
"schema": {
"type": "string"
}
}
}
},
"500": {
"description": "Internal server error"
}
}
}
},
"/config/providers": {
"get": {
"tags": [
+4
View File
@@ -31,6 +31,7 @@ import { useChat } from './hooks/useChat';
import 'react-toastify/dist/ReactToastify.css';
import { useConfig, MalformedConfigError } from './components/ConfigContext';
import { addExtensionFromDeepLink as addExtensionFromDeepLinkV2 } from './components/settings_v2/extensions';
import { initConfig } from './api/sdk.gen';
// Views and their options
export type View =
@@ -91,6 +92,9 @@ export default function App() {
const initializeApp = async () => {
try {
// Initialize config first
await initConfig();
const config = window.electron.getConfig();
const provider = (await read('GOOSE_PROVIDER', false)) ?? config.GOOSE_DEFAULT_PROVIDER;
+8 -1
View File
@@ -1,7 +1,7 @@
// This file is auto-generated by @hey-api/openapi-ts
import type { Options as ClientOptions, TDataShape, Client } from '@hey-api/client-fetch';
import type { GetToolsData, GetToolsResponse, ReadAllConfigData, ReadAllConfigResponse, GetExtensionsData, GetExtensionsResponse, AddExtensionData, AddExtensionResponse, RemoveExtensionData, RemoveExtensionResponse, ProvidersData, ProvidersResponse2, ReadConfigData, RemoveConfigData, RemoveConfigResponse, UpsertConfigData, UpsertConfigResponse } from './types.gen';
import type { GetToolsData, GetToolsResponse, ReadAllConfigData, ReadAllConfigResponse, GetExtensionsData, GetExtensionsResponse, AddExtensionData, AddExtensionResponse, RemoveExtensionData, RemoveExtensionResponse, InitConfigData, InitConfigResponse, ProvidersData, ProvidersResponse2, ReadConfigData, RemoveConfigData, RemoveConfigResponse, UpsertConfigData, UpsertConfigResponse } from './types.gen';
import { client as _heyApiClient } from './client.gen';
export type Options<TData extends TDataShape = TDataShape, ThrowOnError extends boolean = boolean> = ClientOptions<TData, ThrowOnError> & {
@@ -57,6 +57,13 @@ export const removeExtension = <ThrowOnError extends boolean = false>(options: O
});
};
export const initConfig = <ThrowOnError extends boolean = false>(options?: Options<InitConfigData, ThrowOnError>) => {
return (options?.client ?? _heyApiClient).post<InitConfigResponse, unknown, ThrowOnError>({
url: '/config/init',
...options
});
};
export const providers = <ThrowOnError extends boolean = false>(options?: Options<ProvidersData, ThrowOnError>) => {
return (options?.client ?? _heyApiClient).get<ProvidersResponse2, unknown, ThrowOnError>({
url: '/config/providers',
+23
View File
@@ -360,6 +360,29 @@ export type RemoveExtensionResponses = {
export type RemoveExtensionResponse = RemoveExtensionResponses[keyof RemoveExtensionResponses];
export type InitConfigData = {
body?: never;
path?: never;
query?: never;
url: '/config/init';
};
export type InitConfigErrors = {
/**
* Internal server error
*/
500: unknown;
};
export type InitConfigResponses = {
/**
* Config initialization check completed
*/
200: string;
};
export type InitConfigResponse = InitConfigResponses[keyof InitConfigResponses];
export type ProvidersData = {
body?: never;
path?: never;