Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
51 commits
Select commit Hold shift + click to select a range
19b1f9f
feat(proxy): add OpenAI Responses WebSocket support for Codex providers
ding113 Apr 25, 2026
02f8ba7
fix(proxy): address PR review on responses websocket support
ding113 Apr 25, 2026
ec98ee6
fix(proxy): harden responses websocket against header spoofing + scop…
ding113 Apr 25, 2026
ad0a9db
feat(proxy): add fake streaming whitelist
ding113 Apr 28, 2026
08ccfd6
feat(providers): add provider-level custom headers (#943, #944)
ding113 Apr 28, 2026
e3f0ae1
fix(proxy): address fake streaming review feedback
ding113 Apr 28, 2026
6674f70
fix(proxy): tolerate undefined fakeStreamingWhitelist in matcher
ding113 Apr 28, 2026
5fa3469
fix(proxy): avoid openai-compatible cache token double counting (#1133)
ding113 Apr 28, 2026
e9cd93c
fix(proxy): address fake streaming PR review comments
ding113 Apr 28, 2026
9251bac
Merge PR #1131: feat(providers): add provider-level custom headers
ding113 Apr 28, 2026
3c9bc11
Merge PR #1132: feat(proxy): add fake streaming whitelist
ding113 Apr 28, 2026
b69452f
Merge PR #1101: feat(proxy): OpenAI Responses WebSocket support for C…
ding113 Apr 28, 2026
d80e344
fix: dedupe multipart mask field and disable provider form autofill (…
ding113 Apr 29, 2026
7e2a722
refactor: add v1 REST management OpenAPI (#1140)
ding113 Apr 30, 2026
d62d9ea
fix: restore dashboard API compatibility
ding113 Apr 30, 2026
c99cf3e
fix(dashboard): align provider form payload with v1 REST schema
ding113 May 1, 2026
b588663
fix: keys:reveal + redirect fallback test + bill-on-failure toggle (#…
ding113 May 2, 2026
15e9380
fix(providers): inject statistics on REST list when include=statistic…
ding113 May 3, 2026
d078219
fix(responses-ws): send close frame after terminal event; raise WS pa…
ding113 May 3, 2026
9948c70
fix: harden proxy stream lifecycle to avoid SIGSEGV under load (#1152)
ding113 May 3, 2026
6cf7e44
fix(ws): 完善 Responses WebSocket 会话生命周期与测试覆盖 (#1154)
tesgth032 May 4, 2026
0c58703
fix(keys): register :reveal/:enable/:renew before generic CRUD (#1155)
ding113 May 4, 2026
a9c1e83
fix(providers): wrap unified test api-client in toActionResult (#1158)
ding113 May 5, 2026
a383506
feat: hide fake streaming whitelist and responses WS from system sett…
ding113 May 8, 2026
697f26e
fix(proxy): 1h TTL override 覆盖顶层 system 字段并补齐单测 (#1161)
ding113 May 8, 2026
abd3caa
fix(server): load standalone next config to honor proxyClientMaxBodyS…
ding113 May 8, 2026
49ba9e3
chore: update version to 0.8.0
ding113 May 13, 2026
5c1dbb4
Update claude-code-hub k8s app deployment.yaml (#1174)
dellnoantechnp May 13, 2026
b536955
fix(proxy): request usage chunks for streaming chat (#1166)
dofastted May 13, 2026
46090a4
fix: auto-fix CI lint failures
github-actions[bot] May 13, 2026
1713625
chore(ci): bump GitHub Actions to latest majors
ding113 May 13, 2026
b9675d8
Merge branch 'main' into dev
ding113 May 13, 2026
961cfbb
chore: update package dependencies to latest versions
ding113 May 13, 2026
b6978c4
fix(calendar): rename table class to month_grid for clarity
ding113 May 13, 2026
4132e2b
fix(deps): pin @lobehub/icons back to ^2
ding113 May 13, 2026
290b3b1
fix(deps): pin undici back to ^7
ding113 May 13, 2026
454254b
test(langfuse): rename updateTrace to setTraceIO in tests
ding113 May 13, 2026
e1c7f9d
fix(lifecycle): orchestrate graceful shutdown with server.close + bou…
ding113 May 13, 2026
4aef66c
fix(release-v0.8.1): address PR #1175 review findings
ding113 May 14, 2026
6e1c978
fix(langfuse): restore updateTrace call to match SDK API
ding113 May 14, 2026
4fc41f5
Revert "fix(langfuse): restore updateTrace call to match SDK API"
ding113 May 14, 2026
0cd5606
chore(install): pin bun registry to yarnpkg CDN
ding113 May 14, 2026
f9ee3cd
fix(deps): pin antd to ~6.3 to avoid broken @rc-component/notification@2
ding113 May 14, 2026
724f070
test(api/v1): add OpenAPI-driven auth and tier-enforcement sweeps (#1…
ding113 May 14, 2026
b0c9eaf
fix: disabled-key 429 lockout, slow availability page, public-status …
ding113 May 14, 2026
18b8e60
fix(availability): restore status_code IS NOT NULL terminal filter (#…
ding113 May 15, 2026
20a05b4
fix(install): clarify branch selection prompt in deploy scripts (#1188)
ding113 May 15, 2026
281b175
修复管理员登录态对 Redis session 的强依赖 (#1192)
tesgth032 May 15, 2026
e3c9e7d
fix: 隔离 AgentPool 活跃 dispatcher 生命周期 (#1190)
tesgth032 May 15, 2026
53bd70b
fix(db): cover endpoint in usage_ledger cost indexes to restore index…
ding113 May 17, 2026
f80d316
feat(providers): 放宽供应商密钥长度上限至 1 MiB (#1195)
ding113 May 17, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
15 changes: 14 additions & 1 deletion .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,17 @@ API_TEST_TIMEOUT_MS=15000
# 警告:若设置为 true 且使用远程 HTTP 访问,浏览器将拒绝设置 Cookie 导致无法登录
ENABLE_SECURE_COOKIES=true

# Management REST API / legacy actions API
# - ENABLE_LEGACY_ACTIONS_API=false returns 410 Gone for legacy /api/actions execution.
# - LEGACY_ACTIONS_DOCS_MODE=hidden returns 410 for legacy docs even when execution stays enabled.
# - ENABLE_API_KEY_ADMIN_ACCESS=true allows admin-role DB API keys to call admin /api/v1 routes.
# - CSRF_SECRET signs cookie-authenticated management mutations; set the same value on all replicas.
ENABLE_LEGACY_ACTIONS_API=true
LEGACY_ACTIONS_DOCS_MODE=deprecated
LEGACY_ACTIONS_SUNSET_DATE=2026-12-31
ENABLE_API_KEY_ADMIN_ACCESS=false
CSRF_SECRET=

# Redis 配置(用于限流和 Session 追踪)
# 功能说明:
# - 限流功能:金额限制(5小时/周/月)+ Session 并发限制
Expand All @@ -74,7 +85,9 @@ API_KEY_AUTH_CACHE_TTL_SECONDS="60" # 鉴权缓存 TTL(秒,默认 60,
ENABLE_API_KEY_REDIS_CACHE="true" # 是否启用 API Key Redis 缓存(默认:true)

# Session 配置
SESSION_TTL=300 # Session 过期时间(秒,默认 300 = 5 分钟)
# 降低该值会按签发时间收紧已签发 ADMIN_TOKEN 签名 cookie 的剩余寿命,且不会延长其原始 exp。
AUTH_SESSION_TTL_SECONDS=604800 # Web UI 登录态过期时间(秒,默认 604800 = 7 天,范围 60-31536000)
SESSION_TTL=300 # 代理请求上下文缓存时间(秒,默认 300 = 5 分钟;不控制 Web UI 登录态)
STORE_SESSION_MESSAGES=false # 会话消息存储模式(默认:false)
# - false:存储请求/响应体但对 message 内容脱敏 [REDACTED]
# - true:原样存储 message 内容(注意隐私和存储空间影响)
Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/claude-ci-autofix.yml
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ jobs:
echo "Branch validation passed: syncing $SOURCE -> $TARGET"

- name: Checkout code
uses: actions/checkout@v5
uses: actions/checkout@v6
with:
ref: ${{ github.event.inputs.target_branch }}
fetch-depth: 0
Expand Down Expand Up @@ -237,14 +237,14 @@ jobs:

steps:
- name: Checkout code
uses: actions/checkout@v5
uses: actions/checkout@v6
with:
ref: ${{ github.event.workflow_run.head_branch }}
fetch-depth: 0

- name: Get CI failure details
id: failure_details
uses: actions/github-script@v7
uses: actions/github-script@v9
with:
script: |
const run = await github.rest.actions.getWorkflowRun({
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/claude-issue-auto-response.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ jobs:
- name: Check if Codex workflow succeeded for this issue
if: steps.perm_check.outputs.EXTERNAL_USER == 'false'
id: check
uses: actions/github-script@v7
uses: actions/github-script@v9
with:
script: |
// Wait for Codex workflow to complete (max 5 minutes)
Expand Down Expand Up @@ -91,7 +91,7 @@ jobs:

steps:
- name: Checkout repository
uses: actions/checkout@v5
uses: actions/checkout@v6
with:
fetch-depth: 0

Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/claude-issue-duplicate-check.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ jobs:

steps:
- name: Checkout repository
uses: actions/checkout@v5
uses: actions/checkout@v6
with:
fetch-depth: 0

Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/claude-issue-oncall-triage.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ jobs:

steps:
- name: Checkout repository
uses: actions/checkout@v5
uses: actions/checkout@v6

- name: Run Claude Code for Oncall Triage
uses: anthropics/claude-code-action@v1
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/claude-issue-stale-cleanup.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ jobs:

steps:
- name: Checkout repository
uses: actions/checkout@v5
uses: actions/checkout@v6

- name: Run Claude Code for Stale Issue Cleanup
uses: anthropics/claude-code-action@v1
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/claude-issue-triage.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ jobs:

steps:
- name: Checkout repository
uses: actions/checkout@v5
uses: actions/checkout@v6
with:
fetch-depth: 0

Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/claude-mention-responder.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ jobs:

steps:
- name: Checkout repository
uses: actions/checkout@v5
uses: actions/checkout@v6
with:
fetch-depth: 0

Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/claude-pr-description.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ jobs:

steps:
- name: Checkout repository
uses: actions/checkout@v5
uses: actions/checkout@v6
with:
fetch-depth: 0

Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/claude-pr-label.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ jobs:

steps:
- name: Checkout repository
uses: actions/checkout@v5
uses: actions/checkout@v6
with:
fetch-depth: 1

Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/claude-pr-review.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ jobs:
- name: Check if Codex workflow succeeded for this PR
if: steps.perm_check.outputs.EXTERNAL_USER == 'false'
id: check
uses: actions/github-script@v7
uses: actions/github-script@v9
with:
script: |
// Wait for Codex workflow to complete (max 10 minutes for PR review)
Expand Down Expand Up @@ -99,7 +99,7 @@ jobs:

steps:
- name: Checkout repository
uses: actions/checkout@v5
uses: actions/checkout@v6
with:
fetch-depth: 1

Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/claude-review-responder.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ jobs:

steps:
- name: Checkout repository
uses: actions/checkout@v5
uses: actions/checkout@v6
with:
fetch-depth: 0
ref: ${{ github.event.pull_request.head.sha }}
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/claude-unified-docs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ jobs:

steps:
- name: Checkout repository
uses: actions/checkout@v5
uses: actions/checkout@v6
with:
fetch-depth: 0
token: ${{ secrets.GITHUB_TOKEN || secrets.GH_PAT }}
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/codex-issue-auto-response.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ jobs:

steps:
- name: Checkout repository
uses: actions/checkout@v5
uses: actions/checkout@v6
with:
fetch-depth: 0

Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/codex-pr-review.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ jobs:

steps:
- name: Checkout repository
uses: actions/checkout@v5
uses: actions/checkout@v6
with:
ref: refs/pull/${{ github.event.pull_request.number }}/merge
fetch-depth: 0
Expand Down Expand Up @@ -60,7 +60,7 @@ jobs:
pull-requests: write
steps:
- name: Post Review Comment
uses: actions/github-script@v7
uses: actions/github-script@v9
env:
REVIEW_RESULT: ${{ needs.pr-review.outputs.review_result }}
with:
Expand Down
14 changes: 7 additions & 7 deletions .github/workflows/dev.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ jobs:
if: github.event.pusher.name != 'github-actions[bot]' && !contains(github.event.head_commit.message, '[skip ci]')
steps:
- name: Checkout code
uses: actions/checkout@v5
uses: actions/checkout@v6
with:
fetch-depth: 0
token: ${{ secrets.GITHUB_TOKEN }}
Expand Down Expand Up @@ -56,7 +56,7 @@ jobs:
echo "Versioned tag: $VERSIONED_TAG"

- name: Setup Node.js for formatting
uses: actions/setup-node@v4
uses: actions/setup-node@v6
with:
node-version: "20"

Expand All @@ -66,7 +66,7 @@ jobs:
bun-version-file: .bun-version

- name: Cache Bun package cache
uses: actions/cache@v4
uses: actions/cache@v5
with:
path: ~/.bun/install/cache
# This repo intentionally does not track Bun lockfiles; rotate cache on package/runtime inputs.
Expand Down Expand Up @@ -112,20 +112,20 @@ jobs:

# Docker构建步骤
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
uses: docker/setup-qemu-action@v4

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
uses: docker/setup-buildx-action@v4

- name: Log in to GitHub Container Registry
uses: docker/login-action@v3
uses: docker/login-action@v4
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Build and push Docker image
uses: docker/build-push-action@v6
uses: docker/build-push-action@v7
with:
context: .
file: ./deploy/Dockerfile
Expand Down
14 changes: 7 additions & 7 deletions .github/workflows/pr-check.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,20 +21,20 @@ jobs:

steps:
- name: 📥 Checkout repository
uses: actions/checkout@v5
uses: actions/checkout@v6

- name: 📦 Setup Bun
uses: oven-sh/setup-bun@v2
with:
bun-version-file: .bun-version

- name: 🟢 Setup Node.js
uses: actions/setup-node@v4
uses: actions/setup-node@v6
with:
node-version: '20'

- name: Cache Bun package cache
uses: actions/cache@v4
uses: actions/cache@v5
with:
path: ~/.bun/install/cache
# This repo intentionally does not track Bun lockfiles; rotate cache on package/runtime inputs.
Expand Down Expand Up @@ -71,22 +71,22 @@ jobs:

steps:
- name: 📥 Checkout repository
uses: actions/checkout@v5
uses: actions/checkout@v6

- name: 🔧 Set up Docker Buildx
uses: docker/setup-buildx-action@v3
uses: docker/setup-buildx-action@v4

- name: 📋 Extract metadata
id: meta
uses: docker/metadata-action@v5
uses: docker/metadata-action@v6
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
tags: |
type=ref,event=pr
type=sha,prefix=pr-

- name: 🏗️ Build Docker image (Test Only - No Push)
uses: docker/build-push-action@v6
uses: docker/build-push-action@v7
with:
context: .
file: ./deploy/Dockerfile
Expand Down
16 changes: 8 additions & 8 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ jobs:
(github.event.pusher.name != 'github-actions[bot]' && !contains(github.event.head_commit.message, '[skip ci]'))
steps:
- name: Checkout code
uses: actions/checkout@v5
uses: actions/checkout@v6
with:
fetch-depth: 0
token: ${{ secrets.GITHUB_TOKEN }}
Expand Down Expand Up @@ -191,7 +191,7 @@ jobs:

- name: Setup Node.js for formatting
if: steps.check.outputs.needs_bump == 'true' || github.event_name == 'workflow_dispatch'
uses: actions/setup-node@v4
uses: actions/setup-node@v6
with:
node-version: "20"

Expand All @@ -203,7 +203,7 @@ jobs:

- name: Cache Bun package cache
if: steps.check.outputs.needs_bump == 'true' || github.event_name == 'workflow_dispatch'
uses: actions/cache@v4
uses: actions/cache@v5
with:
path: ~/.bun/install/cache
# This repo intentionally does not track Bun lockfiles; rotate cache on package/runtime inputs.
Expand Down Expand Up @@ -258,7 +258,7 @@ jobs:

- name: Create GitHub Release
if: (steps.check.outputs.needs_bump == 'true' || github.event_name == 'workflow_dispatch') && success()
uses: softprops/action-gh-release@v2
uses: softprops/action-gh-release@v3
with:
tag_name: ${{ steps.next_version.outputs.new_tag }}
name: Release ${{ steps.next_version.outputs.new_version }}
Expand Down Expand Up @@ -381,23 +381,23 @@ jobs:
# Docker构建步骤
- name: Set up QEMU
if: (steps.check.outputs.needs_bump == 'true' || github.event_name == 'workflow_dispatch') && success()
uses: docker/setup-qemu-action@v3
uses: docker/setup-qemu-action@v4

- name: Set up Docker Buildx
if: (steps.check.outputs.needs_bump == 'true' || github.event_name == 'workflow_dispatch') && success()
uses: docker/setup-buildx-action@v3
uses: docker/setup-buildx-action@v4

- name: Log in to GitHub Container Registry
if: (steps.check.outputs.needs_bump == 'true' || github.event_name == 'workflow_dispatch') && success()
uses: docker/login-action@v3
uses: docker/login-action@v4
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Build and push Docker image
if: (steps.check.outputs.needs_bump == 'true' || github.event_name == 'workflow_dispatch') && success()
uses: docker/build-push-action@v6
uses: docker/build-push-action@v7
with:
context: .
file: ./deploy/Dockerfile
Expand Down
Loading
Loading