* feat(telegram): support custom apiRoot for alternative API endpoints
Add `apiRoot` config option to allow users to specify custom Telegram Bot
API endpoints (e.g., self-hosted Bot API servers). Threads the configured
base URL through all Telegram API call sites: bot creation, send, probe,
audit, media download, and api-fetch. Extends SSRF policy to dynamically
trust custom apiRoot hostname for media downloads.
Closes#28535
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* fix(telegram): thread apiRoot through allowFrom lookups
* fix(telegram): honor lookup transport and local file paths
* refactor(telegram): unify username lookup plumbing
* fix(telegram): restore doctor lookup imports
* fix: document Telegram apiRoot support (#48842) (thanks @Cypherm)
---------
Co-authored-by: Cypherm <28184436+Cypherm@users.noreply.github.com>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-authored-by: Ayaan Zaidi <hi@obviy.us>
- Added a test to ensure no warnings for legacy Brave config when bundled web search allowlist compatibility is applied.
- Updated validation logic to incorporate compatibility configuration for bundled web search plugins.
- Refactored the ensureRegistry function to utilize the new compatibility handling.
* test: align extension runtime mocks with plugin-sdk
Update stale extension tests to mock the plugin-sdk runtime barrels that production code now imports, and harden the Signal tool-result harness around system-event assertions so the channels lane matches current extension boundaries.
Regeneration-Prompt: |
Verify the failing channels-lane tests against current origin/main in an isolated worktree before changing anything. If the failures reproduce on main, keep the fix test-only unless production behavior is clearly wrong. Recent extension refactors moved Telegram, WhatsApp, and Signal code onto plugin-sdk runtime barrels, so update stale tests that still mock old core module paths to intercept the seams production code now uses. For Signal reaction notifications, avoid brittle assertions that depend on shared queued system-event state when a direct harness spy on enqueue behavior is sufficient. Preserve scope: only touch the failing tests and their local harness, then rerun the reproduced targeted tests plus the full channels lane and repo check gate.
* test: fix extension test drift on main
* fix: lazy-load bundled web search plugin registry
* test: make matrix sweeper failure injection portable
* fix: split heavy matrix runtime-api seams
* fix: simplify bundled web search id lookup
* test: tolerate windows env key casing
Reuse pi-ai's Anthropic client injection seam for streaming, and add
the OpenClaw-side provider discovery, auth, model catalog, and tests
needed to expose anthropic-vertex cleanly.
Signed-off-by: sallyom <somalley@redhat.com>
Use params.provider (exact key, e.g. "nvidia-api") for direct config
lookup before falling back to findNormalizedProviderValue. This prevents
ambiguity when configs contain both an alias and its canonical name
(e.g. "nvidia-api" and "nvidia"), which could cause the wrong provider
block to be selected and miss the model definition.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Match config model IDs using the original (pre-normalization) provider
name (e.g. nvidia-api/meta-llama) so the image input fallback works for
aliased providers. Remove unnecessary type assertion in image.ts and
rename unused variable in image-tool.test.ts to satisfy oxlint.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Fix oxfmt formatting issue in image.ts (CI check failure)
- Add toHaveBeenCalledWith assertions to Google model normalization tests
to verify normalized model IDs are passed to resolveModelWithRegistry
- Copy api field from configured model in config fallback, not just input,
so custom providers with explicit api configs route through correct adapter
- Add dedicated tests for !imageProvider fallback in image-tool.test.ts
covering both single-image and multi-image branches
- Fix type errors in test configs (missing reasoning/cost fields)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The image tool failed with "Unknown model" for any user-configured custom
provider (vllm, nvidia-api, iflow) because resolveImageRuntime used bare
modelRegistry.find() which only checks built-in models.json entries.
- Replace modelRegistry.find() with resolveModelWithRegistry() to use the
full 4-layer resolution stack (registry → inline config → plugin → ad-hoc)
- Add config-aware input field fallback for provider-prefixed model IDs
(e.g. "vllm/Qwen3.5" in config vs "Qwen3.5" after ref parsing)
- Fall back to describeImageWithModel in image-tool.ts when no
media-understanding provider is registered for custom providers
- Normalize nvidia-api provider alias to nvidia in provider-id.ts
- Add regression tests for custom provider image model resolution
Closes#33185
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>