Commit Graph
393 Commits
Author SHA1 Message Date
whit3rabbitandClaude Opus 4.8 ff03a7ebd7 chore: release 0.14.0
Move Unreleased changelog entries (RTK compression, opt-in prompt
optimizer, release binary archives, Bedrock allowlist fix, model
discovery fix) into the 0.14.0 section. Bump workspace + inter-crate
versions 0.13.0 -> 0.14.0 and the README deb filename.

Fix clippy missing_const_for_thread_local in optimize-core alloc_budget
test (const-init the thread-locals) so cargo clippy -D warnings is clean.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
v0.14.0
2026-07-12 21:21:14 -05:00
whit3rabbit 1c7d66cc54 Large refactor of files over 400+ of lines of code to make it more managable. Just clean up/splitting of files. 2026-07-12 21:14:16 -05:00
whit3rabbitandClaude Opus 4.8 6816442f3c docs: changelog + config/env for RTK, optimizer, Bedrock allowlist fix
Add [Unreleased] entries for RTK tool-output compression and the opt-in prompt
optimizer, and document their RTK_* / OPTIMIZER_* / MODEL_* env vars and config
keys in docs/ENV.md and docs/CONFIG.md. Also records the already-committed
Bedrock native-route model-allowlist fix and the model-discovery URL fix.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-12 19:55:44 -05:00
whit3rabbitandClaude Opus 4.8 d155bfd148 feat: RTK tool-output compression and opt-in prompt optimizer
RTK (anyllm_rtk crate): command-aware filtering of tool-result text
(test/build/git/log output) via a catalog of 55 declarative filters ported
from OmniRoute (MIT). IO-free, deterministic, prompt-cache safe (cache_control
blocks preserved byte-for-byte). Wired into the Anthropic passthrough (stream +
non-stream) and OpenAI-translate paths, gated per-model via RTK_MODELS.
RTK_COMPRESS env / admin toggle, rtk_compress/rtk_models runtime config.

Optimizer (anyllm_optimize_* crates): opt-in Frozen-Frontier Extractive
Compression of long client-sent conversation history for OpenAI Chat
Completions, the Anthropic translate path, and the Anthropic passthrough path
(client history only, never proxy tool-loop turns). OPTIMIZER_MODE=off|shadow|
live env / admin toggle; live places a cache_control breakpoint at the frontier
over raw bytes. Optional LLMLingua-2 ONNX scorer behind the optimizer-onnx
feature (model fetched on demand, never bundled). New optimizer_* metrics
counters and GET/POST /admin/api/optimizer/model endpoints.

Both features expose runtime config + Settings UI controls and fail open on any
error. Adds workspace members, CI lint/test for the optimizer-onnx feature, and
gitignore rules for downloaded ONNX artifacts.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-12 19:55:33 -05:00
whit3rabbitandClaude Opus 4.8 7fc44582c6 fix: enforce model allowlist on Bedrock native routes; fix model discovery
Bedrock native routes (converse/converse-stream/invoke/invoke-with-response-
stream) now enforce the virtual key's model allowlist, closing a model-scope
bypass where a model-scoped key could invoke any Bedrock modelId.

Admin UI "Query models" discovery: stop doubling /v1 into /v1/v1/models for
local providers whose catalog base URL already ends in /v1, trim trailing
slashes off api_base, support Anthropic-native providers (x-api-key +
anthropic-version auth, display_name model field), and show/warn about the
discovery target URL in the Add-Backend form.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-12 09:14:20 -05:00
whit3rabbitandClaude Opus 4.8 062f8eaf5a ci: attach Linux and Windows binary archives to GitHub Releases
build-release already compiles x86_64/aarch64 Linux and x86_64 Windows binaries
but only uploaded them as CI artifacts. The release-assets job now packages them
into anyllm-proxy-<ver>-linux-{x86_64,arm64}.tar.gz and
anyllm-proxy-<ver>-windows-x86_64.zip and uploads them to the release, matching
the macOS tarball naming.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-12 08:45:54 -05:00
whit3rabbitandClaude Opus 4.8 70ba5ade26 fix(docker): use hyphenated anyllm-proxy binary name
The [[bin]] name became anyllm-proxy (hyphen) in 0.12.0, but the Dockerfile
runtime COPY and docker-entrypoint.sh still referenced anyllm_proxy
(underscore), breaking the Docker image build ("/app/target/release/anyllm_proxy:
not found"). Both now use the hyphenated name.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
v0.13.0
2026-07-12 08:10:41 -05:00
whit3rabbitandClaude Opus 4.8 c2e77c59c7 chore: release 0.13.0
Bump workspace + inter-crate versions 0.12.0 -> 0.13.0, README deb filename,
and move CHANGELOG [Unreleased] into [0.13.0] - 2026-07-12.

Also bump crossbeam-epoch 0.9.18 -> 0.9.20 (Cargo.lock) to clear
RUSTSEC-2026-0204 (invalid pointer dereference), which was failing the
CI Security audit step.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-12 08:00:28 -05:00
whit3rabbitandClaude Opus 4.8 a108c35ff1 feat(admin-ui): default-open provider options, route curl snippet, live proxy status
Admin UI UX fixes plus the route-dispatch feature set:

- Providers: selecting a provider shows the full key/options form immediately
  instead of hiding it behind a "+ Add key" button; "Cancel" becomes "Reset".
- Routes: enabled routes show a ready-to-run curl snippet (endpoint URL from the
  new proxy_port on /admin/api/status, route name as the model) with a copy button.
- Settings: live proxy status badge (running/unreachable) backed by a proxy_running
  TCP liveness check on /admin/api/status, plus a per-save "applied live" toast.
- Backend: plumb proxy listen_port into SharedState; expose proxy_port + proxy_running.
- Also includes the RouteRouter dispatch layer, per-route option overrides, local-LLM
  backend support, favorites, and model discovery (see CHANGELOG [Unreleased]).

Ignore .gate/ security-scanner scratch artifacts.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-12 07:48:13 -05:00
whit3rabbitandClaude Opus 4.8 8bcee60e2b feat: admin UI fixes, shared modal/clipboard utils, status counts managed backends
Admin UI: shared centered provider modal, dropdown backend selectors for Add
Model/Backend, inline add-failure errors, copy/dismiss on created keys, metric
tooltips, empty states. status route now counts managed backends. Add InfoTip
and clipboard helpers. Ignore .eatahorse*/ scratch boards and drop the tracked
guardrails board.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-11 15:52:35 -05:00
whit3rabbitandClaude Opus 4.8 4e55f8ce5a docs: add Unreleased changelog entries for admin UI fixes and startup UX
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-11 15:51:17 -05:00
whit3rabbitandClaude Opus 4.8 b89e0bd359 feat: hyphenated binary name, TTY-aware logs, one-click admin login
- Emit binary as `anyllm-proxy` (hyphen) via explicit [[bin]]; package/crate
  name stays `anyllm_proxy`. Threads one hyphenated name through deb/brew/
  release archives and CI; drops the rename-in-archive shim.
- Terminal logs default to human-readable on a TTY, JSON when piped
  (Docker/systemd). Override with LOG_FORMAT=json|text.
- On loopback admin binds, startup banner prints a tokenized `?token=` admin
  URL plus a bare Token line; SPA reads `?token=` to auto-login then strips it
  from the address bar. Omitted on non-loopback binds to avoid token leak.
- `--webui`/`--admin` with no backend prints a one-line hint instead of the
  full backend cheat-sheet (UI already covers it).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-10 15:35:06 -05:00
whit3rabbitandClaude Opus 4.8 88e9ccad4b docs: bump README deb version to 0.12.0, add README step to release process
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-10 14:05:49 -05:00
whit3rabbit 9031e0ee16 chore: release 0.12.0 v0.12.0 2026-07-05 19:20:29 -05:00
whit3rabbit 8d523abd63 feat: pxpipe context compression + forge guardrails + LiteLLM catalog refresh + otel security bump 2026-07-05 16:22:51 -05:00
whit3rabbit a786da1e49 Release 0.11.0 v0.11.0 2026-07-04 17:58:14 -05:00
whit3rabbitandClaude Sonnet 5 a87cae6ca4 feat: ANTHROPIC_FORWARD_CLIENT_AUTH with live admin-UI toggle
Adds opt-in client-credential forwarding for Anthropic passthrough
(single-key/BYOK deployments), plus fixes found in review:

- Startup safeguard now shares one check (server/middleware/auth.rs)
  with the live admin PUT /admin/api/config path, closing a bypass
  where PROXY_OPEN_RELAY=true alongside 2+ PROXY_API_KEYS entries
  slipped past the old startup-only check.
- x-goog-api-key is now recognized as a forwardable credential
  (renamed to x-api-key upstream, since Anthropic doesn't understand
  that header name), matching validate_auth's precedence.
- Managed (admin-API) backends no longer carry a dead
  forward_client_auth field that could never take effect.
- ClientAuthPath forwarding decisions are now double-checked against
  live VirtualKeyContext/JwtClaims presence, not just the enum, to
  fail closed if the two ever desync.
- Moved from a per-backend BackendConfig field to a global
  RuntimeConfig field (like anthropic_thinking_repair), making it
  live-toggleable from the admin UI with no restart, and uniform
  across every Anthropic-kind backend in a multi-backend deployment.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-04 15:40:53 -05:00
whit3rabbitandClaude Sonnet 5 9456d1ad1b feat: opt-in forge-guardrails tool-call policy + Anthropic thinking-block repair
- Tool-call guardrails (lsp_first/quiet_command/write_payload_cap nudges,
  fingerprint dedup) for local-LLM tool loops. Configurable via YAML
  tool_execution.guardrails, FORGE_TOOL_CALL_POLICY env fallback, or the
  admin UI (live, no restart).
- Anthropic thinking-block record/repair (ANTHROPIC_THINKING_REPAIR):
  records ground truth off the real API and repairs client-corrupted
  thinking/redacted_thinking blocks in replayed conversations.
- Bidirectional thinking_blocks (signature/redacted state) round-trip
  through the OpenAI-compat wire format for LiteLLM-style clients.
- Review fixes: guardrail-mode divergence between streaming/non-streaming
  paths, cross-backend/tenant cache-namespace collision, client-controlled
  integer overflow in thinking budget_tokens, dropped reasoning_content and
  citations on repair/translation paths, a fail-closed race under cache
  eviction, plus dedup/simplification cleanup and doc corrections.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-04 13:03:02 -05:00
whit3rabbitandClaude Sonnet 5 9eb15cce16 fix(deps): bump opentelemetry to 0.32 to fix baggage-propagation DoS
opentelemetry_sdk <= 0.32.0 allows unbounded memory allocation while
parsing W3C Baggage headers (2 open Dependabot alerts). Bump
opentelemetry/opentelemetry_sdk/opentelemetry-otlp 0.31 -> 0.32 and
tracing-opentelemetry 0.32 -> 0.33 in lockstep behind the optional
otel feature; the old tracing-opentelemetry 0.32.x pinned
opentelemetry 0.31, which produced a duplicate-trait-impl compile
error until bumped together.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-04 10:46:26 -05:00
whit3rabbitandClaude Sonnet 5 8d1136ea97 chore: refresh LiteLLM provider/model catalog and pricing
Regenerate litellm_snapshot.rs from upstream LiteLLM data: adds 7 new
providers (darkbloom, libertai, pinstripes, scaleway, tencent,
tensormesh, tinyfish) and fixes model/pricing drift across ~28
existing providers. Drop the now-redundant hand-maintained scaleway
legacy stub in favor of the generated entry. Refresh model_pricing.json
for the new claude-sonnet-5 entry.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-04 10:36:38 -05:00
whit3rabbit e74efb7597 fix: expose body logging toggle and validate redaction startup 2026-06-20 20:16:03 -05:00
whit3rabbit ce89a2d19c Release 0.10.1 v0.10.1 2026-06-20 15:24:43 -05:00
whit3rabbitandClaude Opus 4.8 ee6a39d5d4 fix: streaming/cost/cache correctness, litellm compat, provider docs
- client/proxy SSE + streaming loop cleanups (sse.rs, streaming.rs,
  runtime/stream.rs, chat_completions stream/anthropic/generic, gemini_input)
- cost + cache module fixes with added tests
- provider catalog/registry adjustments
- litellm YAML config support + tests; single-config tweaks
- docs: scope Vertex auth to VERTEX_API_KEY/GOOGLE_ACCESS_TOKEN,
  Bedrock LiteLLM YAML limits, Docker Hub image/tag docs in README
- CI: docker workflow multi-arch tag handling

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-20 12:24:07 -05:00
whit3rabbit af7fe570c7 fix: complete admin UI and backend wiring 2026-06-20 11:01:29 -05:00
whit3rabbitandClaude Opus 4.8 c5609db0c7 fix(admin-ui): correct keys unwrap + request/audit pagination
useKeys treated the {keys:[...]} response as a bare array, so the Keys
tab threw at runtime (.find/.filter on a plain object). Unwrap .keys to
match the VirtualKey[] consumers expect (mirrors useBackends).

useRequests and useAudit sent page/page_size, but the backends only read
limit/offset, so every page returned the first page. Translate at the
hook boundary (limit=page_size, offset=(page-1)*page_size) and align the
RequestsResponse/AuditResponse types with the actual backend shape
(limit/offset/has_more; drop the never-sent total/page/page_size).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 16:25:45 -05:00
whit3rabbitandClaude Opus 4.8 e10d906383 fix(admin-ui): stop key-edit data loss, wire dead controls
Key edit modal sent only 4 of the 8 PUT /admin/api/keys/{id} fields; the
endpoint clears omitted fields to NULL, so every save silently wiped the
enforced budget (max_budget_usd), budget_duration, tpm_limit, allowed_models,
and expires_at. The visible "Spend limit" input wrote the unused spend_limit
column (dropped by serde, never enforced). Now the spend input drives
max_budget_usd and all unsurfaced fields are resent from current values.

Also:
- BackendForm edit mode seeds existing values instead of starting blank,
  which combined with the no-NULL-clear patch made saves no-op or look like
  they wiped endpoint config.
- App handles config_changed websocket events (Settings uses staleTime:
  Infinity, so config changes from another session/CLI never refreshed).
- Request-log and observability backend filters are populated from
  useBackends() (were empty, dead <select>s); server already filters by name.
- Removed dead AddBackendForm onCreated no-op prop.
- Revoke flow: ConfirmDialog owns its close; parent closes reactively on
  success, avoiding setState on an unmounted component.

Verified: tsc + eslint clean, vite build ok, cargo test 1254 passed.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 09:37:02 -05:00
whit3rabbitandClaude Opus 4.8 bfe24b5cc2 chore(release): v0.10.0
Bump workspace + inter-crate version refs 0.9.9 -> 0.10.0 and update
CHANGELOG with admin UI redesign, cache auth/backend scoping, Gemini
virtual-key accounting, and security dependency bumps.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
v0.10.0
2026-06-18 21:12:49 -05:00
whit3rabbitandClaude Opus 4.8 d3a7aadfa5 chore(deps): cargo update (bytes, h2, syn, time, webpki-roots; drop unused wit-bindgen tree)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 20:45:32 -05:00
whit3rabbitandClaude Opus 4.8 214beba3bc fix(deps): bump dompurify 3.4.11 + js-yaml 4.2.0 in admin-ui (security)
Resolves dependabot alerts: dompurify <=3.4.10 (medium/low), js-yaml
<=4.1.1 (medium). npm audit clean, vite build green.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 20:43:05 -05:00
whit3rabbitandClaude Opus 4.8 c217c7feb1 merge: cache-scoping security fix (already superseded by main)
Main already scopes cache keys by backend + auth (CacheScope, _scope_backend/
_scope_auth) and includes 'system' in CACHE_FIELDS, with a stronger
vk_ctx-aware auth_identity than this branch. Recording as merged; no tree
change to avoid regressing the existing fix.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 20:27:49 -05:00
whit3rabbitandClaude Opus 4.8 2abca68220 merge: gemini virtual-key fix (superseded by main's record_virtual_key_usage)
Main already enforces VK TPM + cost accounting in the gemini native path
via record_virtual_key_usage (helpers.rs). Kept main's version; the
branch's older handler structure would regress logging/attribution.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 20:26:35 -05:00
whit3rabbit 7e78e36fa2 Merge remote-tracking branch 'origin/dependabot/npm_and_yarn/crates/proxy/admin-ui/multi-577102d0ae'
# Conflicts:
#	crates/proxy/admin-ui/package-lock.json
2026-06-18 20:25:35 -05:00
whit3rabbit 70bea48ed2 Merge remote-tracking branch 'origin/dependabot/npm_and_yarn/crates/proxy/admin-ui/dompurify-3.4.11' 2026-06-18 20:24:59 -05:00
whit3rabbitandClaude Opus 4.8 fee9a275e8 refactor: split oversized proxy modules into submodule dirs
Break logs.rs, config/multi.rs, config/simple, chat_completions.rs,
gemini_input.rs, and admin/routes into focused submodules. No behavior
change; build is green.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 20:24:34 -05:00
whit3rabbitandClaude Opus 4.8 65cf673b97 feat: performative admin UI redesign + admin API contract fixes
Large admin-ui refactor (Performative component system, sidebar nav,
provider/route tabs) plus backend module restructuring.

Admin UI contract fixes (this session):
- Fix Models page crash: useBackends unwraps {backends:[...]}; align
  ModelEntry to {model_name, deployments} and ModelsResponse.strategy;
  fix add-model body to {model_name, actual_model, backend_name}.
- Fix Backends/Providers health rendering: source per-backend status and
  latency from the uptime endpoint (health_checks); narrow Backend type to
  the real get_backends shape.
- Route + sidebar-link the previously-unrouted Backends tab.

Verified: cargo test (exit 0), clippy -D warnings (exit 0), fmt --check,
admin-ui tsc + vite build all green.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 18:13:59 -05:00
dependabot[bot] 013a73f2a4 chore(deps): bump dompurify in /crates/proxy/admin-ui
Bumps [dompurify](https://github.com/cure53/DOMPurify) from 3.4.8 to 3.4.11.
- [Release notes](https://github.com/cure53/DOMPurify/releases)
- [Commits](https://github.com/cure53/DOMPurify/compare/3.4.8...3.4.11)

---
updated-dependencies:
- dependency-name: dompurify
  dependency-version: 3.4.11
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-06-18 08:08:42 +00:00
dependabot[bot] 5557748808 chore(deps-dev): bump vite and @vitejs/plugin-react
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) and [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/tree/HEAD/packages/plugin-react). These dependencies needed to be updated together.

Updates `vite` from 8.0.7 to 8.0.16
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v8.0.16/packages/vite)

Updates `@vitejs/plugin-react` from 4.7.0 to 6.0.2
- [Release notes](https://github.com/vitejs/vite-plugin-react/releases)
- [Changelog](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite-plugin-react/commits/plugin-react@6.0.2/packages/plugin-react)

---
updated-dependencies:
- dependency-name: vite
  dependency-version: 8.0.16
  dependency-type: direct:development
- dependency-name: "@vitejs/plugin-react"
  dependency-version: 6.0.2
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-06-16 01:04:48 +00:00
whit3rabbitandClaude Opus 4.8 e46ab81273 fix(docker): disable cargo HTTP/2 multiplexing for arm64 builds
GitHub's arm64 Docker builders intermittently hit "[16] Error in the
HTTP2 framing layer" during cargo-chef's sparse-index fetches, panicking
the cook step (recipe.rs:224) and failing the v0.9.9 arm64 release build.

Set CARGO_HTTP_MULTIPLEXING=false + CARGO_NET_RETRY=5 in the chef stage,
inherited by planner and builder. Multiplexing-off is the canonical
workaround for transient crates.io HTTP/2 framing errors.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
v0.9.9
2026-06-14 18:35:13 -05:00
whit3rabbitandClaude Opus 4.8 138aaa65ac fix: error classification + retry consistency across backends; bump 0.9.9
Surface upstream errors hidden in 200 bodies/streams (OpenRouter), unify
retry/fallback policy, fast-fail insufficient_quota, add timeout_error
mapping. Gemini native now retries with backoff.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-14 15:43:04 -05:00
whit3rabbitandClaude Sonnet 4.6 6a47df31f5 fix: stable catalog reference, pin windows runner
- Providers.tsx: wrap catalog in useMemo so filtered memo doesn't
  re-run on every render when catalogQuery.data is undefined
- ci.yml: pin windows-latest -> windows-2025 ahead of June 15 redirect

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-12 23:03:14 -05:00
whit3rabbitandClaude Sonnet 4.6 b5930eee51 chore: update Cargo.lock for 0.9.8 version bump
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-12 22:40:44 -05:00
whit3rabbitandClaude Sonnet 4.6 ad4fbf8dd4 style: cargo fmt, fix CHANGELOG release instruction
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
v0.9.8
2026-06-12 22:39:39 -05:00
whit3rabbitandClaude Sonnet 4.6 681b0d47d9 chore: bump to 0.9.8, add CHANGELOG, cargo update
- Version: 0.9.7 → 0.9.8 (workspace + all pinned inter-crate deps)
- New: AnthropicMessagesClient passthrough client
- New: RetryPolicy struct, retry_transport_errors flag, extra_header builder
- New: ssrf_allow_loopback, ssrf_allow_private, extra_headers in HttpClientConfig
- New: ChatMessage::effective_text(), claude-fable-5 in provider catalog
- Fix: relaxed serde defaults for lax local backends (Ollama, llama.cpp)
- Fix: warn on empty choices in openai_to_anthropic_response
- ci: create-release now uses CHANGELOG section as release body
- docs: CHANGELOG.md created, release process documented in CLAUDE.md
- deps: cargo update (~105 packages, tokio 1.52, axum 0.8.9, rustls 0.23.40)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-12 22:37:09 -05:00
whit3rabbit 517b6f4ea4 Bump version to 0.9.7 2026-06-07 15:51:43 -05:00
whit3rabbit 8b4abfdf7d chore: bump version to 0.9.7 v0.9.7 2026-06-07 15:38:56 -05:00
whit3rabbit d87a72cc66 Merge pull request #22 from whit3rabbit/codex/batch-builds-ci
[codex] preserve Anthropic tool context and provider catalog
2026-06-07 12:57:57 -05:00
whit3rabbit 878097b3b0 Merge remote-tracking branch 'origin/main' into codex/batch-builds-ci
# Conflicts:
#	crates/proxy/src/main.rs
#	crates/proxy/src/server/chat_completions.rs
2026-06-07 12:52:57 -05:00
whit3rabbit 88f18ee33a fix: use hardened HTTP client for provider model refresh (#20) 2026-06-07 11:31:49 -05:00
whit3rabbit a8c4330e58 Fix chat cache key collisions for Anthropic extensions (#19) 2026-06-07 11:31:35 -05:00
dependabot[bot] ee0d8276bd chore(deps): bump react-router and react-router-dom (#21)
Bumps [react-router](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router) to 6.30.4 and updates ancestor dependency [react-router-dom](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom). These dependencies need to be updated together.


Updates `react-router` from 6.30.3 to 6.30.4
- [Release notes](https://github.com/remix-run/react-router/releases)
- [Changelog](https://github.com/remix-run/react-router/blob/react-router@6.30.4/packages/react-router/CHANGELOG.md)
- [Commits](https://github.com/remix-run/react-router/commits/react-router@6.30.4/packages/react-router)

Updates `react-router-dom` from 6.30.3 to 6.30.4
- [Release notes](https://github.com/remix-run/react-router/releases)
- [Changelog](https://github.com/remix-run/react-router/blob/react-router-dom@6.30.4/packages/react-router-dom/CHANGELOG.md)
- [Commits](https://github.com/remix-run/react-router/commits/react-router-dom@6.30.4/packages/react-router-dom)

---
updated-dependencies:
- dependency-name: react-router
  dependency-version: 6.30.4
  dependency-type: indirect
- dependency-name: react-router-dom
  dependency-version: 6.30.4
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-07 11:31:17 -05:00