refactor: wait for extension load

This commit is contained in:
Louis 2025-07-02 10:56:54 +07:00
parent 66bae2adb8
commit 0dbfde4c80
No known key found for this signature in database
GPG Key ID: 44FA9F4D33C37DE2
2 changed files with 22 additions and 25 deletions

View File

@ -117,10 +117,8 @@ export class ExtensionManager {
/**
* Loads all registered extension.
*/
load() {
this.listExtensions().forEach((ext) => {
ext.onLoad()
})
async load() {
await Promise.all(this.listExtensions().map((ext) => ext.onLoad()))
}
/**
@ -169,25 +167,27 @@ export class ExtensionManager {
async activateExtension(extension: Extension) {
// Import class
const extensionUrl = extension.url
await import(/* @vite-ignore */convertFileSrc(extensionUrl)).then((extensionClass) => {
// Register class if it has a default export
if (
typeof extensionClass.default === 'function' &&
extensionClass.default.prototype
) {
this.register(
extension.name,
new extensionClass.default(
extension.url,
await import(/* @vite-ignore */ convertFileSrc(extensionUrl)).then(
(extensionClass) => {
// Register class if it has a default export
if (
typeof extensionClass.default === 'function' &&
extensionClass.default.prototype
) {
this.register(
extension.name,
extension.productName,
extension.active,
extension.description,
extension.version
new extensionClass.default(
extension.url,
extension.name,
extension.productName,
extension.active,
extension.description,
extension.version
)
)
)
}
}
})
)
}
/**

View File

@ -10,7 +10,6 @@ import { fetchModels } from './models'
import { ExtensionManager } from '@/lib/extension'
import { fetch as fetchTauri } from '@tauri-apps/plugin-http'
export const getProviders = async (): Promise<ModelProvider[]> => {
const builtinProviders = predefinedProviders.map((provider) => {
let models = provider.models as Model[]
@ -48,7 +47,6 @@ export const getProviders = async (): Promise<ModelProvider[]> => {
const runtimeProviders: ModelProvider[] = []
for (const [providerName, value] of EngineManager.instance().engines) {
const models = (await fetchModels()) ?? []
const provider: ModelProvider = {
active: false,
persist: true,
@ -119,7 +117,6 @@ export const getProviders = async (): Promise<ModelProvider[]> => {
return runtimeProviders.concat(builtinProviders as ModelProvider[])
}
/**
* Fetches models from a provider's API endpoint
* Always uses Tauri's HTTP client to bypass CORS issues
@ -178,14 +175,14 @@ export const fetchModelsFromProvider = async (
}
} catch (error) {
console.error('Error fetching models from provider:', error)
// Provide helpful error message
if (error instanceof Error && error.message.includes('fetch')) {
throw new Error(
`Cannot connect to ${provider.provider} at ${provider.base_url}. Please check that the service is running and accessible.`
)
}
throw error
}
}