refactor: convert desktop v1 and goose-server extensions to ACP+ (#9448)
This commit is contained in:
@@ -1,21 +1,16 @@
|
||||
import React, { createContext, useContext, useState, useEffect, useMemo, useCallback } from 'react';
|
||||
import { readAllConfig, readConfig, removeConfig, upsertConfig, providers } from '../api';
|
||||
import {
|
||||
readAllConfig,
|
||||
readConfig,
|
||||
removeConfig,
|
||||
upsertConfig,
|
||||
addExtension as apiAddExtension,
|
||||
removeExtension as apiRemoveExtension,
|
||||
providers,
|
||||
} from '../api';
|
||||
import { getConfiguredExtensions } from '../acp/extensions';
|
||||
getConfiguredExtensions,
|
||||
addConfiguredExtension,
|
||||
removeConfiguredExtension,
|
||||
} from '../acp/extensions';
|
||||
import { pruneDeprecatedBundledExtensions, syncBundledExtensions } from './settings/extensions';
|
||||
import type {
|
||||
ConfigResponse,
|
||||
UpsertConfigQuery,
|
||||
ConfigKeyQuery,
|
||||
ProviderDetails,
|
||||
ExtensionQuery,
|
||||
ExtensionConfig,
|
||||
} from '../api';
|
||||
|
||||
@@ -113,10 +108,7 @@ export const ConfigProvider: React.FC<ConfigProviderProps> = ({ children }) => {
|
||||
|
||||
const addExtension = useCallback(
|
||||
async (name: string, config: ExtensionConfig, enabled: boolean) => {
|
||||
const query: ExtensionQuery = { name, config, enabled };
|
||||
await apiAddExtension({
|
||||
body: query,
|
||||
});
|
||||
await addConfiguredExtension(name, config, enabled);
|
||||
await reloadConfig();
|
||||
// Refresh extensions list after successful addition
|
||||
await refreshExtensions();
|
||||
@@ -126,7 +118,7 @@ export const ConfigProvider: React.FC<ConfigProviderProps> = ({ children }) => {
|
||||
|
||||
const removeExtension = useCallback(
|
||||
async (name: string) => {
|
||||
await apiRemoveExtension({ path: { name: name } });
|
||||
await removeConfiguredExtension(name);
|
||||
await reloadConfig();
|
||||
// Refresh extensions list after successful removal
|
||||
await refreshExtensions();
|
||||
@@ -206,11 +198,10 @@ export const ConfigProvider: React.FC<ConfigProviderProps> = ({ children }) => {
|
||||
config: ExtensionConfig,
|
||||
enabled: boolean
|
||||
) => {
|
||||
const query: ExtensionQuery = { name, config, enabled };
|
||||
await apiAddExtension({ body: query });
|
||||
await addConfiguredExtension(name, config, enabled);
|
||||
};
|
||||
const removeExtensionForSync = async (name: string) => {
|
||||
await apiRemoveExtension({ path: { name } });
|
||||
await removeConfiguredExtension(name);
|
||||
};
|
||||
extensions = await pruneDeprecatedBundledExtensions(extensions, removeExtensionForSync);
|
||||
await syncBundledExtensions(extensions, addExtensionForSync);
|
||||
|
||||
@@ -8,7 +8,8 @@ import { FixedExtensionEntry, useConfig } from '../ConfigContext';
|
||||
import { toastService } from '../../toasts';
|
||||
import { formatExtensionName } from '../settings/extensions/subcomponents/ExtensionList';
|
||||
import { nameToKey } from '../settings/extensions/utils';
|
||||
import { ExtensionConfig, getSessionExtensions } from '../../api';
|
||||
import { ExtensionConfig } from '../../api';
|
||||
import { getSessionExtensions } from '../../acp/extensions';
|
||||
import { addToAgent, removeFromAgent } from '../settings/extensions/agent-api';
|
||||
import {
|
||||
setExtensionOverride,
|
||||
@@ -119,14 +120,9 @@ export const BottomMenuExtensionSelection = ({ sessionId }: BottomMenuExtensionS
|
||||
}
|
||||
|
||||
try {
|
||||
const response = await getSessionExtensions({
|
||||
path: { session_id: sessionId },
|
||||
});
|
||||
|
||||
if (response.data?.extensions) {
|
||||
setSessionExtensions(response.data.extensions);
|
||||
setIsSessionExtensionsLoaded(true);
|
||||
}
|
||||
const extensions = await getSessionExtensions(sessionId);
|
||||
setSessionExtensions(extensions);
|
||||
setIsSessionExtensionsLoaded(true);
|
||||
} catch (error) {
|
||||
console.error('Failed to fetch session extensions:', error);
|
||||
setIsSessionExtensionsLoaded(true);
|
||||
@@ -197,13 +193,8 @@ export const BottomMenuExtensionSelection = ({ sessionId }: BottomMenuExtensionS
|
||||
}
|
||||
|
||||
sortTimeoutRef.current = setTimeout(async () => {
|
||||
const response = await getSessionExtensions({
|
||||
path: { session_id: sessionId },
|
||||
});
|
||||
|
||||
if (response.data?.extensions) {
|
||||
setSessionExtensions(response.data.extensions);
|
||||
}
|
||||
const extensions = await getSessionExtensions(sessionId);
|
||||
setSessionExtensions(extensions);
|
||||
setPendingSort(false);
|
||||
setIsTransitioning(false);
|
||||
setTogglingExtension(null);
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import { toastService } from '../../../toasts';
|
||||
import { agentAddExtension, ExtensionConfig, agentRemoveExtension } from '../../../api';
|
||||
import { ExtensionConfig } from '../../../api';
|
||||
import { addSessionExtension, removeSessionExtension } from '../../../acp/extensions';
|
||||
import { errorMessage } from '../../../utils/conversionUtils';
|
||||
import {
|
||||
createExtensionRecoverHints,
|
||||
@@ -20,10 +21,7 @@ export async function addToAgent(
|
||||
: 0;
|
||||
|
||||
try {
|
||||
await agentAddExtension({
|
||||
body: { session_id: sessionId, config: extensionConfig },
|
||||
throwOnError: true,
|
||||
});
|
||||
await addSessionExtension(sessionId, extensionConfig);
|
||||
if (showToast) {
|
||||
toastService.dismiss(toastId);
|
||||
toastService.success({
|
||||
@@ -61,10 +59,7 @@ export async function removeFromAgent(
|
||||
: 0;
|
||||
|
||||
try {
|
||||
await agentRemoveExtension({
|
||||
body: { session_id: sessionId, name: extensionName },
|
||||
throwOnError: true,
|
||||
});
|
||||
await removeSessionExtension(sessionId, extensionName);
|
||||
if (showToast) {
|
||||
toastService.dismiss(toastId);
|
||||
toastService.success({
|
||||
|
||||
Reference in New Issue
Block a user