Skip to content

Commit d0396c2

Browse files
authored
Release v3.8.31 (#4377)
Release v3.8.31 — see CHANGELOG.md [3.8.31] for full notes and contributors. Merged over known non-blocking reds (all correctness gates green): Integration Tests (2/2) is env/flaky (polls a real upstream batch that did not complete in the poll window); SonarQube/SonarCloud is the advisory server-side new-code quality gate. Unit (8 shards), Coverage, Node 22/24/26, Lint, PR Test Policy, Quality Ratchet, Docs-Strict, Quality-Extended and all 4 CodeQL analyses are green.
1 parent 3b2a2f0 commit d0396c2

226 files changed

Lines changed: 11990 additions & 1229 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.env.example

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1461,6 +1461,10 @@ APP_LOG_TO_FILE=true
14611461
# dashboard's tunnel manager. Used by: src/lib/tailscaleTunnel.ts.
14621462
# TAILSCALE_BIN=/usr/local/bin/tailscale
14631463
# TAILSCALED_BIN=/usr/local/bin/tailscaled
1464+
# Pre-shared Tailscale auth key for non-interactive / headless `tailscale up`
1465+
# (passed via --auth-key=). When unset, login falls back to the interactive
1466+
# browser auth URL. Used by: src/lib/tailscaleTunnel.ts.
1467+
# TAILSCALE_AUTHKEY=
14641468

14651469
# ── Ngrok tunnel ──
14661470
# Used by: src/lib/ngrokTunnel.ts — authenticates outbound tunnels.
@@ -1619,3 +1623,48 @@ QUOTA_STORE_DRIVER=sqlite # sqlite | redis
16191623
# OpenCode-style API key (sk-...) for the regenerated opencode.json. Used by:
16201624
# scripts/ad-hoc/regen-opencode-config.ts. Falls back to OMNIROUTE_KEY.
16211625
# OPENCODE_API_KEY=
1626+
1627+
# ─── Bifrost Go sidecar (PR-4 in #3932) ──────────────────────────────────────
1628+
# When BIFROST_BASE_URL is set, /api/v1/relay/chat/completions/bifrost routes
1629+
# traffic to the Go gateway instead of the TS relay handler, removing TS from
1630+
# the hot path. Auth/rate-limit/injection-guard stay in the route (security not
1631+
# duplicated). Falls back to TS path via X-Bifrost-Fallback header on
1632+
# timeout/failure. See bin/omniroute for the local-redis companion.
1633+
# BIFROST_BASE_URL=
1634+
# API key for the Bifrost gateway (sent as Authorization: Bearer ...). If
1635+
# unset, the route expects the request to carry a valid OmniRoute API key;
1636+
# this key is for gateway-side auth only.
1637+
# BIFROST_API_KEY=
1638+
# When true, the Bifrost sidecar route streams responses back via SSE through
1639+
# the gateway rather than the TS streaming executor. Default: true (when
1640+
# BIFROST_BASE_URL is set).
1641+
# BIFROST_STREAMING_ENABLED=
1642+
# Per-request timeout when proxying to the Bifrost gateway. Default: 30000 (30s).
1643+
# BIFROST_TIMEOUT_MS=
1644+
# Alias for BIFROST_API_KEY (used by scripts that read the env via
1645+
# OMNIROUTE_*). Falls back to BIFROST_API_KEY when unset.
1646+
# OMNIROUTE_BIFROST_KEY=
1647+
1648+
# ─── 1-click local service launchers (PR-3 in #3932) ────────────────────────
1649+
# Master switch for /api/local/* routes. When unset or "0", all /api/local/*
1650+
# routes return 503 in production. Default: 0. Must be "1" in non-loopback
1651+
# deploys to enable the Redis launcher and similar 1-click local service
1652+
# starters. Belt-and-suspenders with the isLocalOnlyPath() route-guard
1653+
# classification (LOCAL_ONLY_API_PREFIXES in src/server/authz/routeGuard.ts).
1654+
# OMNIROUTE_LOCAL_ENDPOINTS_ENABLED=
1655+
# Bearer token for /api/local/* callers that aren't on loopback (e.g. the
1656+
# desktop app). When set, requests from non-loopback IPs must carry
1657+
# Authorization: Bearer <token>. Required when
1658+
# OMNIROUTE_LOCAL_ENDPOINTS_ENABLED=1 in non-loopback deployments. Default:
1659+
# unset (loopback-only).
1660+
# OMNIROUTE_LOCAL_ENDPOINTS_TOKEN=
1661+
# Container name for the 1-click Redis launcher (`omniroute redis up`).
1662+
# Default: omniroute-redis. Used by bin/cli/commands/redis.mjs and the
1663+
# RedisLauncherPanel.
1664+
# OMNIROUTE_REDIS_CONTAINER_NAME=
1665+
# Host port for the 1-click Redis launcher. Default: 6379. Bump if the host
1666+
# already binds 6379. The container's internal port stays 6379.
1667+
# OMNIROUTE_REDIS_HOST_PORT=
1668+
# Redis image used by the 1-click Redis launcher. Default: redis:7-alpine.
1669+
# Override to redis:8-alpine or a private registry mirror as needed.
1670+
# OMNIROUTE_REDIS_IMAGE=
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
name: npm ci with retry
2+
description: Run npm ci with retries for transient registry/network failures.
3+
runs:
4+
using: composite
5+
steps:
6+
- shell: bash
7+
run: |
8+
set -euo pipefail
9+
10+
max_attempts=3
11+
delay_seconds=20
12+
13+
for attempt in $(seq 1 "$max_attempts"); do
14+
if [ "$attempt" -gt 1 ]; then
15+
echo "npm ci attempt $attempt/$max_attempts after transient failure"
16+
fi
17+
18+
if npm ci; then
19+
exit 0
20+
fi
21+
22+
exit_code=$?
23+
if [ "$attempt" -eq "$max_attempts" ]; then
24+
exit "$exit_code"
25+
fi
26+
27+
sleep "$delay_seconds"
28+
delay_seconds=$((delay_seconds * 2))
29+
done

0 commit comments

Comments
 (0)