175 Commits

Author SHA1 Message Date
Kayvan Sylvan
11f2683d50 Merge branch 'main' into feat/grokai-search-grounding 2026-04-23 00:37:28 -07:00
Kayvan Sylvan
78f9d7c1f7 fix: fall back to streamed delta text when completed Codex response is empty
- Prefer extracted completed text only when content stays non-empty
- Fall back to accumulated streamed delta text otherwise
- Preserve streamed response text before completed response evaluation
- Add regression test for empty completed output text
- Simulate SSE delta stream followed by blank completion
- Verify Send returns delta text when completion lacks content
2026-04-16 20:16:23 -07:00
Kayvan Sylvan
d2537208df feat: add Claude Opus 4.7 model support and bump Anthropic SDK to v1.37.0
- Upgrade `anthropic-sdk-go` dependency from v1.34.0 to v1.37.0
- Add `claude-opus-4-7` to supported models list
- Enable 1M context window beta for Opus 4.7
- Update model beta comments to reflect Opus 4.7 support
2026-04-16 19:35:39 -07:00
alecjmckanna
0d7e1f7d52 feat: add --readpattern flag to print pattern contents to terminal
Adds a new `--readpattern <name>` CLI flag that prints the raw contents
of a named pattern's system.md file to stdout. This makes it easy to
inspect what instructions a pattern sends to the model without having
to navigate the filesystem manually.

The implementation respects custom patterns directories: it checks the
user's custom patterns directory first before falling back to the main
patterns directory, consistent with how all other pattern lookups work.
2026-04-15 00:43:16 -04:00
Kayvan Sylvan
e387e7b86f refactor: replace manual reverse loops with slices.Backward iterator
- Use `slices.Backward` for reverse iteration in copilot response extraction
- Use `slices.Backward` for reverse iteration in gemini TTS extraction
- Add `slices` import to copilot and gemini packages
- Remove manual index-based reverse loop patterns
- Remove redundant comment about copilot response message type
2026-04-12 21:18:29 -07:00
Kenneth G. Hartman
7ced82f782 feat(openai): add GrokAI search grounding via xAI Responses API
xAI's Responses API accepts web_search and x_search tool types, but
fabric hardcoded OpenAI's web_search_preview tool name in
buildResponseParams, causing GrokAI plus --search to fail with HTTP 422.

This adds two new fields to openai_compatible.ProviderConfig:
- WebSearchToolName: override the default web_search tool name string
- EnableXSearch: append xAI's x_search tool when search is enabled

Both fields are empty/false by default, preserving backwards
compatibility for all existing providers. GrokAI now sets
WebSearchToolName to "web_search" and EnableXSearch to true.

Tests added in openai_test.go cover the new override paths and
confirm the default provider behavior is unchanged.

Verified with live xAI API key: fabric -V GrokAI --search "query"
now returns grounded results with real source URLs.
2026-04-11 12:27:16 -04:00
Kayvan Sylvan
c271816d2d feat: add i18n translations for Codex OAuth and error messages
- Add 17 new Codex-related i18n keys across all locale files
- Replace hardcoded English strings in OAuth flow with i18n lookups
- Internationalize Codex error messages in `errors.go`
- Localize token exchange and refresh failure messages
- Translate OAuth callback server responses and browser fallback text
- Add translations for usage limit and request status errors
- Cover DE, EN, ES, FA, FR, IT, JA, PL, PT-BR, PT-PT, ZH locales
2026-03-25 16:49:12 -07:00
Kayvan Sylvan
2e0abdd78a refactor: propagate context.Context through Vendor interface methods
- Add `context.Context` parameter to `ListModels` interface method
- Add `context.Context` parameter to `SendStream` interface method
- Thread caller context through `Chatter.Send` instead of using `context.Background()`
- Update all vendor implementations to accept context parameter
- Introduce `publicError` type wrapping Codex provider errors
- Normalize Codex error messages to lowercase for consistency
- Add context-aware `sendStreamUpdate` helper in Codex client
- Remove stale `context.Background()` calls from Anthropic and Azure AI Gateway
- Update all vendor test mocks and stubs with new signatures
- Pass HTTP request context from server handler into `chatter.Send`
2026-03-25 16:09:10 -07:00
Kayvan Sylvan
070c626b7b refactor: extract OAuth and auth logic from Codex client module
- Remove OAuth flow, PKCE, and token refresh from codex.go
- Remove auth transport round-trip retry logic
- Remove unused OAuth types and helper structs
- Remove JWT parsing and token expiry utilities
- Remove error mapping and usage limit detection helpers
- Remove browser-open and version normalization functions
- Add `.maestro/` directory to `.gitignore`
- Add test for `SendStream` HTTP error mapping and channel close
- Clean up unused imports from codex client package
2026-03-25 15:32:40 -07:00
Kayvan Sylvan
e5d0d7f630 chore: update Go module dependencies and remove deprecated Anthropic model aliases
- Bump `anthropic-sdk-go` from v1.23.0 to v1.27.1
- Upgrade AWS SDK Go v2 packages to latest patch versions
- Update `gin-gonic/gin` to v1.12.0 and `go-git` to v5.17.0
- Bump `ollama/ollama` from v0.16.2 to v0.18.2
- Upgrade `google.golang.org/api` to v0.272.0 and `genai` to v1.51.0
- Update OpenTelemetry packages to v1.42.0/v0.67.0
- Bump `golang.org/x` packages to latest minor versions
- Remove deprecated `ModelClaude4Sonnet20250514` and `ModelClaude4Opus20250514` aliases
- Add `go.mongodb.org/mongo-driver/v2` as new indirect dependency
2026-03-22 07:54:47 -07:00
Kayvan Sylvan
7023e15d0a Merge branch 'main' into feature/upgrade-minimax-m27 2026-03-18 10:40:50 -07:00
octo-patch
42ecceab4f feat: upgrade MiniMax default model to M2.7
- Add MiniMax-M2.7 and MiniMax-M2.7-highspeed to static model list
- Place M2.7 models at the top of the list as new defaults
- Retain all previous models (M2.5, M2.5-highspeed, M2.5-lightning, M2, M2.1, M2.1-lightning) as alternatives

MiniMax-M2.7 is the latest flagship model with enhanced reasoning and coding capabilities.
2026-03-18 13:33:09 +08:00
Prax Lannister
3dd498bc47 fix(chat): prevent streaming deadlock and unify strategy handling
## Bug: Streaming Deadlock in Chatter.Send

When a streaming error occurs, two goroutines can race to write to the
same buffered(1) error channel:

1. The SendStream goroutine returns an error and writes to errChan
2. The stream-update loop receives a StreamTypeError update and also
   writes to errChan

Since errChan has a buffer of 1, the second write blocks forever,
causing a goroutine leak and a deadlock — the caller never returns.

### Fix

Introduce `recordFirstStreamError()` which uses a non-blocking
select/default to safely send only the first error, discarding
subsequent ones. This prevents the deadlock while preserving the
original error for the caller.

### Scenario that triggers the deadlock (before this fix):

  1. Vendor stream emits a StreamTypeError update (e.g., rate limit)
  2. The update loop writes the error to errChan (buffer fills)
  3. SendStream also returns an error
  4. SendStream goroutine tries to write to errChan → BLOCKS FOREVER
  5. Chatter.Send never returns → user sees a hang

## Refactor: Unify Strategy Handling (Server + CLI)

The REST API server (chat.go) was loading strategy prompts inline by
reading JSON files directly with os.ReadFile, bypassing the core
Chatter layer entirely. This caused:

- Strategy prompts were prepended to UserInput instead of the system
  message, breaking the prompt architecture
- The StrategyName was not passed to GetChatter(), so the core layer
  had no knowledge of the strategy
- Duplicate strategy-loading logic between CLI and server paths

### Fix

- Pass StrategyName through to GetChatter() and ChatRequest so the
  core Chatter.BuildSession() handles strategy loading uniformly
- Extract `buildPromptChatRequest()` helper for clean request
  construction
- Remove inline os.ReadFile strategy loading from the server handler

## Refactor: Clean System Message Assembly

Replace raw string concatenation of context + pattern + strategy
prompts with `joinPromptSections()` which:

- Trims whitespace from each section
- Skips empty sections (no double newlines from missing context)
- Joins with a single newline separator

## Tests Added

- `TestChatter_BuildSession_SeparatesSystemSections`: Verifies
  strategy, context, and pattern are joined with newline separators
  in the correct order
- `TestChatter_Send_StreamingErrorUpdateAndReturnDoesNotDeadlock`:
  Regression test with 2-second timeout that catches the deadlock
  when both error paths fire simultaneously
- `TestBuildPromptChatRequest_PreservesStrategyAndUserInput`: Verifies
  the extracted helper preserves all fields including StrategyName
2026-03-18 04:42:03 +05:30
Kayvan Sylvan
3c40a3462d feat: add OpenAI Codex vendor with browser-based OAuth authentication
- Add new Codex AI vendor plugin with OpenAI OAuth PKCE flow
- Implement browser-based login with automatic token refresh on 401
- Register Codex client in the plugin registry
- Allow explicit Codex model selection bypassing model listing
- Expose shared OpenAI `BuildResponseParams` and `ExtractText` helpers
- Move system/developer messages into Codex `instructions` field
- Add Codex i18n strings across all supported locales
- Add comprehensive unit tests for Codex OAuth, streaming, and retry
- Update README with Codex feature entry and provider listing
- Trim older changelog entries from README recent features section
2026-03-16 10:20:23 -07:00
octo-patch
cb08f8e9e0 feat: add MiniMax-M2.5-highspeed to static model list
Add the MiniMax-M2.5-highspeed model variant to the static MiniMax
model list. This model offers the same performance as MiniMax-M2.5
but with faster inference speed.

API docs: https://platform.minimax.io/docs/api-reference/text-openai-api
2026-03-14 22:48:10 +08:00
Kayvan Sylvan
9057f97739 Merge pull request #2052 from praxstack/feat/bedrock-bearer-token-auth
feat(bedrock): dynamic region fetching and AWS_PROFILE conflict fix
2026-03-09 08:49:51 -07:00
Prax Lannister
b211c42b44 fix: address all PR #2052 review feedback
- P2 fix: Add thread-safety comment to withMockEndpointsURL helper
- All @ksylvan reviewer comments addressed (see verification below)
2026-03-08 17:25:43 +05:30
Prax Lannister
19430ec69d Merge branch 'danielmiessler:main' into feat/bedrock-bearer-token-auth 2026-03-08 17:15:16 +05:30
pretyflaco
1c94fabb46 fix(ollama): map thinking levels and convert single system-role messages 2026-03-08 01:14:47 +03:00
Prax Lannister
2469673a2c feat(bedrock): dynamic region fetching and AWS_PROFILE fix
- Fetch Bedrock regions dynamically from botocore endpoints.json (public, no auth)
  Shows 40+ regions instead of hardcoded 6. Falls back to static list on error.
- Fix AWS_PROFILE env var conflict: users with AWS_PROFILE set for other tools
  (terraform, aws-cli) would get 'failed to get shared config profile' errors
  when using explicit ABSK or static credentials.
- Handle empty auth choice gracefully (skip instead of error)

Follow-up to #2044.
2026-03-06 23:19:31 +05:30
Kayvan Sylvan
24f3f82dc6 feat: internationalize Bedrock setup UI strings and add guided setup i18n keys
- Internationalize all Bedrock setup prompt strings via `i18n.T()`
- Add `bedrock_setup_*` i18n keys for auth, region, and model selection
- Add `bedrock_client_not_initialized` error message to all locale files
- Propagate new i18n keys across 11 locale files (de, en, es, fa, fr, it, ja, pl, pt-BR, pt-PT, zh)
- Replace hardcoded setup strings in `bedrock.go` with i18n lookups
- Reorder locale JSON keys alphabetically for consistency
2026-03-06 07:06:02 -08:00
Kayvan Sylvan
5d784609f0 Merge remote-tracking branch 'upstream/main' into feat/bedrock-bearer-token-auth 2026-03-05 14:04:33 -08:00
Kayvan Sylvan
1f7e1d3d20 refactor: extract raw pattern retrieval into dedicated GetRaw method`
- Add `GetRaw` method to `PatternsEntity` for unprocessed pattern retrieval
- Replace inline raw pattern loading logic in server handler with `GetRaw`
- Remove manual `Pattern` struct construction from `PatternsHandler.Get`
- Simplify server handler by delegating storage access to database layer
- Add test coverage for `GetRaw` with custom patterns directory
2026-03-05 12:19:06 -08:00
Prax Lannister
e59a70f8ba feat: add Bedrock bearer token (ABSK) authentication
Add 3-tier authentication for AWS Bedrock:
1. Bearer token (ABSK) - simplest, same as Claude Code
2. Static AWS credentials (access key + secret key)
3. Default AWS credential chain (existing behavior)

- Remove hasAWSCredentials() gate so Bedrock always appears in setup
- Custom guided Setup() flow: auth method, region, model
- Bearer token transport with token redaction
- Nil guards for uninitialized clients
- Temperature-only fix (no top_p) for Claude on Bedrock
- API key masking during re-setup
- Fallback model list when ListFoundationModels API is inaccessible
- i18n support for 11 locales (3 new keys each)
- 25 unit tests
2026-03-05 11:30:55 +05:30
Kayvan Sylvan
efd10061e4 refactor: move NeedsRawMode default implementation to PluginBase
- Add default `NeedsRawMode` method to shared `PluginBase` struct
- Remove redundant `NeedsRawMode` implementations across all AI vendor plugins
- Consolidate default `false` return logic into single base plugin method
- Clean up duplicate boilerplate from anthropic, bedrock, copilot, gemini plugins
- Remove identical implementations from azureaigateway, vertexai, lmstudio, dryrun
2026-02-26 12:39:49 -08:00
Kayvan Sylvan
103493206e fix: Address copilot review comments 2026-02-23 14:29:25 -08:00
Justin Lecher
283a548e05 feat: address PR #2014 feedback and add configurable Azure OpenAI API version
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
2026-02-23 13:58:32 -08:00
Kayvan Sylvan
6b46ac1e78 Merge pull request #2019 from ksylvan/2026-02-21-i18n
feat: replace hardcoded error strings with i18n translation keys
2026-02-21 16:04:27 -08:00
Kayvan Sylvan
9514f6cdfe chore: add DigitalOcean error i18n strings and sort locale keys alphabetically
- 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
2026-02-21 15:55:50 -08:00
Kayvan Sylvan
e84edd935b refactor: replace fmt.Errorf("%s", ...) with errors.New() and normalize i18n strings
- 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
2026-02-21 15:48:01 -08:00
Kayvan Sylvan
e9b1b88d86 feat: replace hardcoded error strings with i18n translation keys
- Replace hardcoded error messages with `i18n.T()` calls across Go source files
- Add ~80 new translation keys to all locale files (en, de, es, fa, fr, it, ja, pt-BR, pt-PT, zh)
- Internationalize error strings in chat, attachment, storage, and template packages
- Internationalize error strings in plugin registry, server, and utility modules
- Internationalize githelper, notifications, patterns, and sessions modules
- Add i18n support for DigitalOcean, Gemini, and OpenAI-compatible providers
- Sort existing locale keys alphabetically in JSON files
- chore: incoming 2019 changelog entry
2026-02-21 13:28:52 -08:00
Kayvan Sylvan
7faf4f6a14 feat: add Azure AI Gateway plugin to the plugin registry
- Import the new `azureaigateway` plugin package
- Register `azureaigateway.NewClient()` in the plugin registry
- Enable Azure AI Gateway as an available AI provider
2026-02-21 11:41:02 -08:00
Kayvan Sylvan
94425b5778 feat: add Azure Entra ID authentication plugin with shared Azure utilities
## 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
2026-02-20 23:30:29 -08:00
Kayvan Sylvan
d6bb84da4d chore: extend Anthropic model beta map with 1M context models
## 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.
2026-02-19 15:09:12 -08:00
Kayvan Sylvan
8f9798a69b chore: implement comprehensive i18n support across all plugins and tools
### 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
2026-02-19 14:00:23 -08:00
Kayvan Sylvan
af47036bff chore: remove unused gemini_openai plugin and oauth_storage utility
## CHANGES

- Delete `gemini_openai` package and its OpenAI-compatible client wrapper
- Remove `OAuthToken` struct and expiry-check logic from `util`
- Remove `OAuthStorage` persistent token save/load/delete handlers
- Drop `HasValidToken` helper and atomic file-write token saving
- Delete all `oauth_storage` unit tests covering token lifecycle
2026-02-17 23:11:48 -08:00
Kayvan Sylvan
12f34621b9 chore: bump Go dependencies and remove deprecated Anthropic models
- 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
2026-02-17 21:01:39 -08:00
Kayvan Sylvan
683c860b89 chore: bump anthropic-sdk-go from v1.22.0 to v1.23.0
- Upgrade Anthropic SDK Go dependency to version 1.23.0
- Add Claude Sonnet 4.6 to list of supported models
- Update `go.sum` checksums for new SDK version
2026-02-17 19:40:18 -08:00
Kayvan Sylvan
2244e2a152 feat: add optional API key authentication to LM Studio client
- Add optional API key setup question to client configuration
- Add `ApiKey` field to the LM Studio `Client` struct
- Create `addAuthorizationHeader` helper to attach Bearer token to requests
- Apply authorization header to all outgoing HTTP requests
- Skip authorization header when API key is empty or unset
2026-02-16 17:52:56 -08:00
Kayvan Sylvan
f26e328d40 feat: internationalize file manager, Vertex AI, and Copilot error messages via i18n
- Replace hardcoded error strings in `file_manager.go` with i18n translation keys
- Add file manager, Vertex AI, and Copilot i18n keys to all 10 locale files
- Internationalize Copilot plugin error messages and debug logs
- Internationalize Vertex AI model fetching error messages
- Fix JSON trailing comma syntax errors across all locale files
- Normalize German locale JSON indentation from tabs to spaces
- Use `AddSetupQuestionWithEnvName` for Bedrock AWS region setup
2026-02-16 13:10:00 -08:00
Kayvan Sylvan
3f46c45479 chore: gofmt fix 2026-02-16 08:42:39 -08:00
Kayvan Sylvan
c797a84847 feat: add error handling for fetch operations in i18n
- Add new error messages for fetch operations
- Rename `errInvalidLocationFormat` to `errInvalidLocationFormatKey`
- Use `errors.New` instead of `fmt.Errorf` for fetch errors
- Update Chinese locale with fetch-related error messages
2026-02-16 08:38:35 -08:00
Kayvan Sylvan
eeb9567ce0 feat: add i18n translations for VertexAI, Gemini, Bedrock, and fetch plugins
- Add VertexAI error message translations across 10 locale files
- Add Gemini TTS and audio error translations to all locales
- Add AWS Bedrock client error translations to all locales
- Add fetch plugin error message translations to all locales
- Replace hardcoded English strings with `i18n.T()` calls in Bedrock plugin
- Replace hardcoded English strings with `i18n.T()` calls in Gemini plugin
- Replace hardcoded English strings with `i18n.T()` calls in VertexAI plugin
- Replace hardcoded English strings with `i18n.T()` calls in fetch plugin
- Use `errors.New` instead of `fmt.Errorf` for non-formatted error strings
2026-02-16 08:28:54 -08:00
Kayvan Sylvan
a71a006f74 feat: add internationalization support for chatter and template file operations
- Replace hardcoded strings with i18n keys in chatter.go
- Add translation keys for errors, warnings, and metadata in locale files
- Update file.go to use i18n for operation messages and errors
- Provide translations in German, English, Spanish, Persian, French, Italian, Japanese, Portuguese, and Chinese
- Enable localized output for stream updates and file plugin operations
- Ensure consistent error handling across supported languages
- Maintain backward compatibility with existing functionality
2026-02-16 04:21:56 -08:00
Kayvan Sylvan
7839ae6fa7 MAESTRO: i18n: extract hard-coded strings from internal/plugins/template/extension_executor.go
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 00:45:46 -08:00
Kayvan Sylvan
398b07f13f MAESTRO: i18n: extract hard-coded strings from internal/plugins/ai/openai/openai.go
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 00:32:38 -08:00
Kayvan Sylvan
c8ca1792b4 MAESTRO: i18n: extract hard-coded strings from internal/plugins/template/extension_registry.go
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 23:52:59 -08:00
Kayvan Sylvan
7382ddaae5 MAESTRO: i18n: extract hard-coded strings from internal/plugins/ai/lmstudio/lmstudio.go
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 23:38:16 -08:00
Kayvan Sylvan
5fbddb2279 MAESTRO: i18n: extract hard-coded strings from internal/plugins/template/extension_manager.go
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 22:10:23 -08:00
Kayvan Sylvan
629257b1c1 feat: enable responses for GrokAI (xAI) provider
### CHANGES
- Set ImplementsResponses to true for GrokAI provider.
2026-02-12 18:32:54 -08:00