- Add vendor selector dropdown to filter available models
- Introduce `selectedVendor` writable store for vendor selection
- Add `vendorNames` derived store with sorted unique vendor names
- Add `filteredModels` derived store filtered by selected vendor
- Fix model deduplication to use `vendor:name` composite key
- Sort models by vendor then name, case-insensitive
- Display vendor prefix in model option labels
- Append content to existing assistant messages instead of replacing
- Fix loading message removal to search by index, not position
- Refactor SSE buffer splitting to always retain incomplete segments
- Trim segments before parsing to handle whitespace edge cases
- Consolidate duplicate message update logic across chat components
- Process remaining buffer after stream completion more reliably
This commit addresses all review feedback from PR #2014 and adds
configurable API version support for Azure OpenAI backend.
PR Review Fixes:
- Add URL validation with HTTPS enforcement (ISC-C7)
- Implement cancellable context in SendStream with 300s timeout (ISC-C6)
- Add response body size limit (10MB) using io.LimitReader (ISC-C12)
- Update error body truncation from 200 to 500 characters (ISC-C13)
- Lowercase error messages per Go convention (ISC-C15)
- Add file-level documentation to all backend files (ISC-C14)
- Fix Bedrock max_tokens to respect opts.MaxTokens with fallback (ISC-C5)
- Document temperature/top_p mutual exclusivity in Bedrock (ISC-C11)
- Add debug logging when empty messages are skipped (ISC-C16)
- Add error check for empty message lists across all backends
- Verify and document Vertex AI endpoint path for APIM routing (ISC-C9)
- Update Azure OpenAI API version to 2025-04-01-preview (ISC-C10)
New Feature - Configurable API Version:
- Add APIVersion field to Client struct for Azure OpenAI backend
- Add optional setup question for API version (default: 2025-04-01-preview)
- Update AzureOpenAIBackend to accept and use configurable API version
- Maintain backward compatibility: empty version defaults to 2025-04-01-preview
- Add test coverage for custom API version and backward compatibility
- Update all existing tests to work with new backend signature
Test Coverage: 89.1% (maintained from 89.0%)
All 52 tests passing (49 existing + 3 new API version tests)
Internationalization polish: add AzureAIGateway locale strings across all 10 languages
- Add `azureaigateway_*` i18n keys to all 10 locale files
- Replace hardcoded error strings with `i18n.T()` calls
- Internationalize setup question prompts for gateway configuration
- Add `errors.New` in place of `fmt.Errorf` for static error strings
- Fix `url.QueryEscape` for API version query parameter encoding
- Correct `claude-opus-4-6-v1` model ID to include `:0` suffix
- Add error case for empty Bedrock text content blocks in `ParseResponse`
- Add test for Bedrock `ParseResponse` with no text content blocks
- Add `SendStream` context limitation note as inline code comment
- Truncate debug error body log output at 2000 characters
## CHANGES
- Add debug level 4 (`wire`) to `--debug` flag options
- Update zsh completion to include new `4` debug level value
- Update bash completion to include `4` in `compgen -W` word list
- Update fish completion description and arguments with level 4
## CHANGES
- Add `Wire` log level constant to debug level enum
- Expose `GetLevel()` function for safe concurrent level reads
- Log outbound message roles and content at wire debug level
- Log inbound stream updates and token usage at wire level
- Log non-streaming LLM responses at wire debug level
- Update `--debug` flag description to include new level 4
- Update `set_debug_level` locale strings across all 10 languages
- Add three new DigitalOcean error message translation keys across all locales
- Add plugin registry vendor and setup default translation keys
- Move misplaced locale entries into correct alphabetical order
- Replace hardcoded English error strings with `i18n.T()` calls in DigitalOcean client
- Sort Go import statements alphabetically in YouTube tool
- Replace `fmt.Errorf("%s", ...)` with `errors.New()` across all packages
- Add `errors` import where needed, remove unused `fmt` imports
- Lowercase error message strings in i18n locale files for Go conventions
- Add `plugin_registry_run_setup_select_defaults` i18n key for setup prompt
- Add `plugin_registry_could_not_find_vendor` i18n key for vendor errors
- Internationalize hardcoded English strings in `plugin_registry.go`
- Update `db_error_loading_env_file` format verb from `%s` to `%w` for wrapping
- Normalize error casing in en, de, es, fr, it, ja, pt-BR, pt-PT, zh, fa locales
- Import the new `azureaigateway` plugin package
- Register `azureaigateway.NewClient()` in the plugin registry
- Enable Azure AI Gateway as an available AI provider
## CHANGES
- Add new `azure_entra` plugin client to plugin registry
- Extract shared Azure logic into `azurecommon` package
- Move `ParseDeployments`, `BuildEndpoint`, and middleware to `azurecommon`
- Upgrade `azidentity` to v1.13.1 with Entra ID/MSAL support
- Add `golang-jwt`, `pkg/browser`, and `go-keychain` as new dependencies
- Add `azure_credential_failure`, `azure_base_url_question` i18n keys across all locales
- Validate Azure deployment names are non-empty on configure
## CHANGES
- Document 1M token context window model support.
- Clarify model beta list maintenance and update strategy.
- Add Claude Sonnet 4.6 to context-1m beta list.
- Add Claude Opus 4.5 and 4.6 beta entries.
- Group model variants under clearer, annotated sections.
### CHANGES
- Implement internationalization support for all AI vendor plugins
- Update localization files for multiple languages with new keys
- Replace hardcoded strings in Spotify and YouTube tools
- Add unit tests for localized error handling in Ollama
- Refactor template plugins to use localized system error messages
- Standardize setup questions using the new i18n translation framework
- Bump go-sqlite3 from v1.14.33 to v1.14.34
- Bump ollama from v0.15.6 to v0.16.1
- Bump google.golang.org/api from v0.265.0 to v0.266.0
- Bump google.golang.org/grpc from v1.78.0 to v1.79.0
- Remove deprecated Claude 3.x model references from Anthropic client
- Remove claude-3-7-sonnet model from OpenAI-compatible provider config
- Add changelog entry for PR #1996
- Add PDFURL and URLPDF to VSCode spell-check dictionary
- incoming 1996 changelog entry