From 272b1aa4bc4eea93056a63fd01a15024657799ba Mon Sep 17 00:00:00 2001 From: Richard Feldman Date: Mon, 8 Dec 2025 14:46:04 -0500 Subject: [PATCH] Remove obsolete llm_provider_authenticate --- crates/extension_api/src/extension_api.rs | 33 ++++++------------ .../wit/since_v0.8.0/extension.wit | 5 +-- .../wit/since_v0.8.0/llm-provider.wit | 17 ---------- .../src/wasm_host/llm_provider.rs | 34 ++----------------- crates/extension_host/src/wasm_host/wit.rs | 30 +++++----------- .../src/wasm_host/wit/since_v0_8_0.rs | 14 -------- extensions/anthropic/src/anthropic.rs | 14 -------- extensions/copilot-chat/src/copilot_chat.rs | 14 -------- extensions/google-ai/Cargo.lock | 20 +++++------ extensions/google-ai/src/google_ai.rs | 14 -------- extensions/open-router/Cargo.lock | 2 +- extensions/open-router/src/open_router.rs | 14 -------- extensions/openai/Cargo.lock | 20 +++++------ extensions/openai/src/openai.rs | 14 -------- 14 files changed, 45 insertions(+), 200 deletions(-) diff --git a/crates/extension_api/src/extension_api.rs b/crates/extension_api/src/extension_api.rs index 7764b13f19672f4211715ec4804b15037de9925e..7ce852f6a36208cff2ae9edc682017e018ea0cb7 100644 --- a/crates/extension_api/src/extension_api.rs +++ b/crates/extension_api/src/extension_api.rs @@ -31,22 +31,20 @@ pub use wit::{ }, zed::extension::llm_provider::{ CacheConfiguration as LlmCacheConfiguration, CompletionEvent as LlmCompletionEvent, - CompletionRequest as LlmCompletionRequest, CredentialType as LlmCredentialType, - ImageData as LlmImageData, MessageContent as LlmMessageContent, - MessageRole as LlmMessageRole, ModelCapabilities as LlmModelCapabilities, - ModelInfo as LlmModelInfo, OauthHttpRequest as LlmOauthHttpRequest, - OauthHttpResponse as LlmOauthHttpResponse, OauthWebAuthConfig as LlmOauthWebAuthConfig, - OauthWebAuthResult as LlmOauthWebAuthResult, ProviderInfo as LlmProviderInfo, - RequestMessage as LlmRequestMessage, StopReason as LlmStopReason, - ThinkingContent as LlmThinkingContent, TokenUsage as LlmTokenUsage, - ToolChoice as LlmToolChoice, ToolDefinition as LlmToolDefinition, - ToolInputFormat as LlmToolInputFormat, ToolResult as LlmToolResult, - ToolResultContent as LlmToolResultContent, ToolUse as LlmToolUse, - ToolUseJsonParseError as LlmToolUseJsonParseError, + CompletionRequest as LlmCompletionRequest, ImageData as LlmImageData, + MessageContent as LlmMessageContent, MessageRole as LlmMessageRole, + ModelCapabilities as LlmModelCapabilities, ModelInfo as LlmModelInfo, + OauthHttpRequest as LlmOauthHttpRequest, OauthHttpResponse as LlmOauthHttpResponse, + OauthWebAuthConfig as LlmOauthWebAuthConfig, OauthWebAuthResult as LlmOauthWebAuthResult, + ProviderInfo as LlmProviderInfo, RequestMessage as LlmRequestMessage, + StopReason as LlmStopReason, ThinkingContent as LlmThinkingContent, + TokenUsage as LlmTokenUsage, ToolChoice as LlmToolChoice, + ToolDefinition as LlmToolDefinition, ToolInputFormat as LlmToolInputFormat, + ToolResult as LlmToolResult, ToolResultContent as LlmToolResultContent, + ToolUse as LlmToolUse, ToolUseJsonParseError as LlmToolUseJsonParseError, delete_credential as llm_delete_credential, get_credential as llm_get_credential, get_env_var as llm_get_env_var, oauth_open_browser as llm_oauth_open_browser, oauth_start_web_auth as llm_oauth_start_web_auth, - request_credential as llm_request_credential, send_oauth_http_request as llm_oauth_http_request, store_credential as llm_store_credential, }, @@ -302,11 +300,6 @@ pub trait Extension: Send + Sync { false } - /// Attempt to authenticate the provider. - fn llm_provider_authenticate(&mut self, _provider_id: &str) -> Result<(), String> { - Err("`llm_provider_authenticate` not implemented".to_string()) - } - /// Reset credentials for the provider. fn llm_provider_reset_credentials(&mut self, _provider_id: &str) -> Result<(), String> { Err("`llm_provider_reset_credentials` not implemented".to_string()) @@ -631,10 +624,6 @@ impl wit::Guest for Component { extension().llm_provider_is_authenticated(&provider_id) } - fn llm_provider_authenticate(provider_id: String) -> Result<(), String> { - extension().llm_provider_authenticate(&provider_id) - } - fn llm_provider_reset_credentials(provider_id: String) -> Result<(), String> { extension().llm_provider_reset_credentials(&provider_id) } diff --git a/crates/extension_api/wit/since_v0.8.0/extension.wit b/crates/extension_api/wit/since_v0.8.0/extension.wit index b972b78a80ed56cd632f0fa9854bc004d2620f28..aad4db30e82aebd7106d2354a7df2458de549888 100644 --- a/crates/extension_api/wit/since_v0.8.0/extension.wit +++ b/crates/extension_api/wit/since_v0.8.0/extension.wit @@ -18,7 +18,7 @@ world extension { use slash-command.{slash-command, slash-command-argument-completion, slash-command-output}; use llm-provider.{ provider-info, model-info, completion-request, - credential-type, cache-configuration, completion-event, token-usage + cache-configuration, completion-event, token-usage }; /// Initializes the extension. @@ -183,9 +183,6 @@ world extension { /// Check if the provider is authenticated. export llm-provider-is-authenticated: func(provider-id: string) -> bool; - /// Attempt to authenticate the provider. - export llm-provider-authenticate: func(provider-id: string) -> result<_, string>; - /// Reset credentials for the provider. export llm-provider-reset-credentials: func(provider-id: string) -> result<_, string>; diff --git a/crates/extension_api/wit/since_v0.8.0/llm-provider.wit b/crates/extension_api/wit/since_v0.8.0/llm-provider.wit index c0d6b371a88e9f10292710998d38962f8910b2dc..f9c81f13bac734c6a317e1f3a8c68fb5da2c18fc 100644 --- a/crates/extension_api/wit/since_v0.8.0/llm-provider.wit +++ b/crates/extension_api/wit/since_v0.8.0/llm-provider.wit @@ -235,14 +235,6 @@ interface llm-provider { cache-read-input-tokens: option, } - /// Credential types that can be requested. - enum credential-type { - /// An API key. - api-key, - /// An OAuth token. - oauth-token, - } - /// Cache configuration for prompt caching. record cache-configuration { /// Maximum number of cache anchors. @@ -296,15 +288,6 @@ interface llm-provider { body: string, } - /// Request a credential from the user. - /// Returns true if the credential was provided, false if the user cancelled. - request-credential: func( - provider-id: string, - credential-type: credential-type, - label: string, - placeholder: string - ) -> result; - /// Get a stored credential for this provider. get-credential: func(provider-id: string) -> option; diff --git a/crates/extension_host/src/wasm_host/llm_provider.rs b/crates/extension_host/src/wasm_host/llm_provider.rs index b9650d5715909a53ee0de5673ceb3a84b7397bbc..d3bc0ca036f6ed171aeae5de543a9af975555924 100644 --- a/crates/extension_host/src/wasm_host/llm_provider.rs +++ b/crates/extension_host/src/wasm_host/llm_provider.rs @@ -182,37 +182,9 @@ impl LanguageModelProvider for ExtensionLanguageModelProvider { self.state.read(cx).is_authenticated } - fn authenticate(&self, cx: &mut App) -> Task> { - let extension = self.extension.clone(); - let provider_id = self.provider_info.id.clone(); - let state = self.state.clone(); - - cx.spawn(async move |cx| { - let result = extension - .call(|extension, store| { - async move { - extension - .call_llm_provider_authenticate(store, &provider_id) - .await - } - .boxed() - }) - .await; - - match result { - Ok(Ok(Ok(()))) => { - cx.update(|cx| { - state.update(cx, |state, _| { - state.is_authenticated = true; - }); - })?; - Ok(()) - } - Ok(Ok(Err(e))) => Err(AuthenticateError::Other(anyhow!("{}", e))), - Ok(Err(e)) => Err(AuthenticateError::Other(e)), - Err(e) => Err(AuthenticateError::Other(e)), - } - }) + fn authenticate(&self, _cx: &mut App) -> Task> { + // Authentication is handled via the configuration view UI + Task::ready(Ok(())) } fn configuration_view( diff --git a/crates/extension_host/src/wasm_host/wit.rs b/crates/extension_host/src/wasm_host/wit.rs index 946b4864f4f6948353732d8ac5bb6a36212f9b25..ab85cdf2429a4fde4eedfdf945c0ee87f339f4c3 100644 --- a/crates/extension_host/src/wasm_host/wit.rs +++ b/crates/extension_host/src/wasm_host/wit.rs @@ -35,16 +35,15 @@ pub use latest::{ zed::extension::context_server::ContextServerConfiguration, zed::extension::llm_provider::{ CacheConfiguration as LlmCacheConfiguration, CompletionEvent as LlmCompletionEvent, - CompletionRequest as LlmCompletionRequest, CredentialType as LlmCredentialType, - ImageData as LlmImageData, MessageContent as LlmMessageContent, - MessageRole as LlmMessageRole, ModelCapabilities as LlmModelCapabilities, - ModelInfo as LlmModelInfo, ProviderInfo as LlmProviderInfo, - RequestMessage as LlmRequestMessage, StopReason as LlmStopReason, - ThinkingContent as LlmThinkingContent, TokenUsage as LlmTokenUsage, - ToolChoice as LlmToolChoice, ToolDefinition as LlmToolDefinition, - ToolInputFormat as LlmToolInputFormat, ToolResult as LlmToolResult, - ToolResultContent as LlmToolResultContent, ToolUse as LlmToolUse, - ToolUseJsonParseError as LlmToolUseJsonParseError, + CompletionRequest as LlmCompletionRequest, ImageData as LlmImageData, + MessageContent as LlmMessageContent, MessageRole as LlmMessageRole, + ModelCapabilities as LlmModelCapabilities, ModelInfo as LlmModelInfo, + ProviderInfo as LlmProviderInfo, RequestMessage as LlmRequestMessage, + StopReason as LlmStopReason, ThinkingContent as LlmThinkingContent, + TokenUsage as LlmTokenUsage, ToolChoice as LlmToolChoice, + ToolDefinition as LlmToolDefinition, ToolInputFormat as LlmToolInputFormat, + ToolResult as LlmToolResult, ToolResultContent as LlmToolResultContent, + ToolUse as LlmToolUse, ToolUseJsonParseError as LlmToolUseJsonParseError, }, zed::extension::lsp::{ Completion, CompletionKind, CompletionLabelDetails, InsertTextFormat, Symbol, SymbolKind, @@ -1230,17 +1229,6 @@ impl Extension { } } - pub async fn call_llm_provider_authenticate( - &self, - store: &mut Store, - provider_id: &str, - ) -> Result> { - match self { - Extension::V0_8_0(ext) => ext.call_llm_provider_authenticate(store, provider_id).await, - _ => anyhow::bail!("`llm_provider_authenticate` not available prior to v0.8.0"), - } - } - pub async fn call_llm_provider_reset_credentials( &self, store: &mut Store, diff --git a/crates/extension_host/src/wasm_host/wit/since_v0_8_0.rs b/crates/extension_host/src/wasm_host/wit/since_v0_8_0.rs index 82a662db9a28d8583534818fb5836aee632516d5..d17787ad009af13f8b72b75498f89da5f7d62778 100644 --- a/crates/extension_host/src/wasm_host/wit/since_v0_8_0.rs +++ b/crates/extension_host/src/wasm_host/wit/since_v0_8_0.rs @@ -1112,20 +1112,6 @@ impl ExtensionImports for WasmState { } impl llm_provider::Host for WasmState { - async fn request_credential( - &mut self, - _provider_id: String, - _credential_type: llm_provider::CredentialType, - _label: String, - _placeholder: String, - ) -> wasmtime::Result> { - // For now, credential requests return false (not provided) - // Extensions should use get_env_var to check for env vars first, - // then store_credential/get_credential for manual storage - // Full UI credential prompting will be added in a future phase - Ok(Ok(false)) - } - async fn get_credential(&mut self, provider_id: String) -> wasmtime::Result> { let extension_id = self.manifest.id.clone(); diff --git a/extensions/anthropic/src/anthropic.rs b/extensions/anthropic/src/anthropic.rs index 26d364cf90acbc9692e12c926f7dbb1f3ce4fd09..594505339f2e056e730c14a9af4a7d9cb35c8bc1 100644 --- a/extensions/anthropic/src/anthropic.rs +++ b/extensions/anthropic/src/anthropic.rs @@ -562,20 +562,6 @@ Uses your Anthropic API credits. See [Anthropic pricing](https://www.anthropic.c ) } - fn llm_provider_authenticate(&mut self, _provider_id: &str) -> Result<(), String> { - let provided = llm_request_credential( - "anthropic", - LlmCredentialType::ApiKey, - "Anthropic API Key", - "sk-ant-...", - )?; - if provided { - Ok(()) - } else { - Err("Authentication cancelled".to_string()) - } - } - fn llm_provider_reset_credentials(&mut self, _provider_id: &str) -> Result<(), String> { llm_delete_credential("anthropic") } diff --git a/extensions/copilot-chat/src/copilot_chat.rs b/extensions/copilot-chat/src/copilot_chat.rs index 2c64d430689f94fce36c2060728e8cd7bb326f23..d7d592e7c2ab4eaffec96f65152fcd35d0d5f6b6 100644 --- a/extensions/copilot-chat/src/copilot_chat.rs +++ b/extensions/copilot-chat/src/copilot_chat.rs @@ -502,20 +502,6 @@ This extension requires an active GitHub Copilot subscription. ) } - fn llm_provider_authenticate(&mut self, _provider_id: &str) -> Result<(), String> { - let provided = llm_request_credential( - "copilot_chat", - LlmCredentialType::ApiKey, - "GitHub Copilot Token", - "ghu_...", - )?; - if provided { - Ok(()) - } else { - Err("Authentication cancelled".to_string()) - } - } - fn llm_provider_reset_credentials(&mut self, _provider_id: &str) -> Result<(), String> { llm_delete_credential("copilot_chat") } diff --git a/extensions/google-ai/Cargo.lock b/extensions/google-ai/Cargo.lock index 2389ff51da0c24e679cec8d541860d1513227335..d18654a49bd8a582a215c629ecf64de70e09f99c 100644 --- a/extensions/google-ai/Cargo.lock +++ b/extensions/google-ai/Cargo.lock @@ -80,15 +80,6 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" -[[package]] -name = "foogle" -version = "0.1.0" -dependencies = [ - "serde", - "serde_json", - "zed_extension_api", -] - [[package]] name = "form_urlencoded" version = "1.2.2" @@ -187,6 +178,15 @@ dependencies = [ "slab", ] +[[package]] +name = "google-ai" +version = "0.1.0" +dependencies = [ + "serde", + "serde_json", + "zed_extension_api", +] + [[package]] name = "hashbrown" version = "0.15.5" @@ -761,7 +761,7 @@ dependencies = [ [[package]] name = "zed_extension_api" -version = "0.7.0" +version = "0.8.0" dependencies = [ "serde", "serde_json", diff --git a/extensions/google-ai/src/google_ai.rs b/extensions/google-ai/src/google_ai.rs index 61baca80b19d9d0b0dd6f53f913400e9f6069c4f..30c16e3b507fed6400816767d618f77f1062040a 100644 --- a/extensions/google-ai/src/google_ai.rs +++ b/extensions/google-ai/src/google_ai.rs @@ -633,20 +633,6 @@ Uses your Google AI API credits. See [Google AI pricing](https://ai.google.dev/p ) } - fn llm_provider_authenticate(&mut self, _provider_id: &str) -> Result<(), String> { - let provided = llm_request_credential( - "google-ai", - LlmCredentialType::ApiKey, - "Google AI API Key", - "AIza...", - )?; - if provided { - Ok(()) - } else { - Err("Authentication cancelled".to_string()) - } - } - fn llm_provider_reset_credentials(&mut self, _provider_id: &str) -> Result<(), String> { llm_delete_credential("google-ai") } diff --git a/extensions/open-router/Cargo.lock b/extensions/open-router/Cargo.lock index 4dea7c7a8a9cd857522214cf4ab4453d41c47e57..019da04200e6f05291cc6f80bebaa52a1ae32ad8 100644 --- a/extensions/open-router/Cargo.lock +++ b/extensions/open-router/Cargo.lock @@ -366,7 +366,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" [[package]] -name = "open_router" +name = "open-router" version = "0.1.0" dependencies = [ "serde", diff --git a/extensions/open-router/src/open_router.rs b/extensions/open-router/src/open_router.rs index 8d8b143cd70a3c7bf3cadc1e4dd0d3042f38d580..1101f6b9abb0d3a1b71d49bdaabc05dbf94fa5dd 100644 --- a/extensions/open-router/src/open_router.rs +++ b/extensions/open-router/src/open_router.rs @@ -639,20 +639,6 @@ Pay-per-use based on model. See [openrouter.ai/models](https://openrouter.ai/mod ) } - fn llm_provider_authenticate(&mut self, _provider_id: &str) -> Result<(), String> { - let provided = llm_request_credential( - "open_router", - LlmCredentialType::ApiKey, - "OpenRouter API Key", - "sk-or-v1-...", - )?; - if provided { - Ok(()) - } else { - Err("Authentication cancelled".to_string()) - } - } - fn llm_provider_reset_credentials(&mut self, _provider_id: &str) -> Result<(), String> { llm_delete_credential("open_router") } diff --git a/extensions/openai/Cargo.lock b/extensions/openai/Cargo.lock index 2ef354a2892b231676c722e48a348502d012a4a9..d39408412cb4c17689687f581b32e7a339329572 100644 --- a/extensions/openai/Cargo.lock +++ b/extensions/openai/Cargo.lock @@ -80,15 +80,6 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" -[[package]] -name = "fopenai" -version = "0.1.0" -dependencies = [ - "serde", - "serde_json", - "zed_extension_api", -] - [[package]] name = "form_urlencoded" version = "1.2.2" @@ -374,6 +365,15 @@ version = "1.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" +[[package]] +name = "openai" +version = "0.1.0" +dependencies = [ + "serde", + "serde_json", + "zed_extension_api", +] + [[package]] name = "percent-encoding" version = "2.3.2" @@ -761,7 +761,7 @@ dependencies = [ [[package]] name = "zed_extension_api" -version = "0.7.0" +version = "0.8.0" dependencies = [ "serde", "serde_json", diff --git a/extensions/openai/src/openai.rs b/extensions/openai/src/openai.rs index 40a99352abd5da1145b0a0ec6641247e363677b8..a64b2502c115297bc647f8bee6a58998543262e8 100644 --- a/extensions/openai/src/openai.rs +++ b/extensions/openai/src/openai.rs @@ -515,20 +515,6 @@ Uses your OpenAI API credits. See [OpenAI pricing](https://openai.com/pricing) f ) } - fn llm_provider_authenticate(&mut self, _provider_id: &str) -> Result<(), String> { - let provided = llm_request_credential( - "openai", - LlmCredentialType::ApiKey, - "OpenAI API Key", - "sk-...", - )?; - if provided { - Ok(()) - } else { - Err("Authentication cancelled".to_string()) - } - } - fn llm_provider_reset_credentials(&mut self, _provider_id: &str) -> Result<(), String> { llm_delete_credential("openai") }