diff --git a/src/channels/web.ts b/src/channels/web.ts index 8997d7db..285f5dc4 100644 --- a/src/channels/web.ts +++ b/src/channels/web.ts @@ -42,7 +42,7 @@ export class WebChannel extends BaseChannel { private pendingPermModes: Map = new Map(); private agentName: string; private stepCounter: Map = new Map(); - private bypassPermissions = false; + private bypassPermissions = true; private restrictUser = false; constructor(agentName: string) { diff --git a/src/providers/registry.ts b/src/providers/registry.ts index 2de70f09..dfe4049e 100644 --- a/src/providers/registry.ts +++ b/src/providers/registry.ts @@ -32,7 +32,7 @@ async function createProvider(pc: ProviderConfig): Promise { return new GitHubCopilotProvider(pc); } else { const { OpenAICompatProvider } = await import('./openai-compat.js'); - return new OpenAICompatProvider(pc); + return new OpenAICompatProvider(pc, { useChatApi: true }); } } diff --git a/src/utils/provider-models.ts b/src/utils/provider-models.ts index 3a50d38f..a076fbbd 100644 --- a/src/utils/provider-models.ts +++ b/src/utils/provider-models.ts @@ -165,22 +165,24 @@ function limitModels(models: string[]): string[] { function isOpenAIChatModel(id: string): boolean { const lower = id.toLowerCase(); + const parts = lower.split("/"); + const modelName = parts[parts.length - 1]; if ( - lower.includes('image') - || lower.includes('audio') - || lower.includes('tts') - || lower.includes('transcribe') - || lower.includes('embedding') - || lower.includes('moderation') - || lower.includes('realtime') - || lower.includes('whisper') - || lower.includes('search') - || lower.includes('computer') + modelName.includes("image") + || modelName.includes("audio") + || modelName.includes("tts") + || modelName.includes("transcribe") + || modelName.includes("embedding") + || modelName.includes("moderation") + || modelName.includes("realtime") + || modelName.includes("whisper") + || modelName.includes("search") + || modelName.includes("computer") ) { return false; } - return lower.startsWith('gpt-') || /^o\d/.test(lower); + return modelName.startsWith("gpt-") || /^o\d/.test(modelName); } function chooseRecommendedModel( diff --git a/src/web/api/providers.ts b/src/web/api/providers.ts index 8a9d3006..d2dafa72 100644 --- a/src/web/api/providers.ts +++ b/src/web/api/providers.ts @@ -26,7 +26,7 @@ providers.post('/api/providers/:name', async (c) => { const body = await c.req.json(); const config = loadConfig(); - const validNames: ProviderName[] = ['openai', 'anthropic', 'deepseek', 'grok', 'ollamaCloud', 'ollamaLocal']; + const validNames: ProviderName[] = ['openai', 'anthropic', 'deepseek', 'grok', 'ollamaCloud', 'ollamaLocal', 'openaiCompat', 'mimo', 'mimoTokenPlan', 'chatgptWeb', 'githubCopilot']; if (!validNames.includes(providerName)) { return c.json({ error: 'Unknown provider' }, 400); }