From 117085e5979f076a10020a6e836b59a36d77c01c Mon Sep 17 00:00:00 2001 From: coso Date: Wed, 17 Dec 2025 12:10:14 +0800 Subject: [PATCH] fix: increase request body limit to 100MB for Claude Code /compact command - Add tower-http dependency with limit feature - Configure DefaultBodyLimit::max(100MB) on axum Router - Fixes CONTENT_LENGTH_EXCEEDS_THRESHOLD error when using /compact Closes #2 --- package-lock.json | 4 ++-- package.json | 2 +- src-tauri/Cargo.lock | 21 +++++++++++++++++++-- src-tauri/Cargo.toml | 3 ++- src-tauri/src/server.rs | 8 ++++++-- src-tauri/tauri.conf.json | 2 +- 6 files changed, 31 insertions(+), 9 deletions(-) diff --git a/package-lock.json b/package-lock.json index 25c3a4647..2b8e13260 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "proxycast", - "version": "0.10.0", + "version": "0.10.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "proxycast", - "version": "0.10.0", + "version": "0.10.1", "dependencies": { "@radix-ui/react-dialog": "^1.1.2", "@radix-ui/react-dropdown-menu": "^2.1.2", diff --git a/package.json b/package.json index 8820f831e..20d7f1b57 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "proxycast", "private": true, - "version": "0.10.0", + "version": "0.10.1", "type": "module", "scripts": { "dev": "vite", diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index 7713a7652..ab69e353a 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -3274,7 +3274,7 @@ dependencies = [ [[package]] name = "proxycast" -version = "0.10.0" +version = "0.10.1" dependencies = [ "anyhow", "async-stream", @@ -3304,6 +3304,7 @@ dependencies = [ "thiserror 1.0.69", "tiktoken-rs", "tokio", + "tower-http 0.5.2", "tracing", "tracing-subscriber", "urlencoding", @@ -3589,7 +3590,7 @@ dependencies = [ "tokio-native-tls", "tokio-util", "tower", - "tower-http", + "tower-http 0.6.8", "tower-service", "url", "wasm-bindgen", @@ -5044,6 +5045,22 @@ dependencies = [ "tracing", ] +[[package]] +name = "tower-http" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e9cd434a998747dd2c4276bc96ee2e0c7a2eadf3cae88e52be55a05fa9053f5" +dependencies = [ + "bitflags 2.10.0", + "bytes", + "http", + "http-body", + "http-body-util", + "pin-project-lite", + "tower-layer", + "tower-service", +] + [[package]] name = "tower-http" version = "0.6.8" diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index dfcac8e55..1fbad480e 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "proxycast" -version = "0.10.0" +version = "0.10.1" description = "AI API Proxy Desktop App" authors = ["you"] edition = "2021" @@ -21,6 +21,7 @@ serde = { version = "1", features = ["derive"] } serde_json = "1" tokio = { version = "1", features = ["full"] } axum = { version = "0.7", features = ["ws"] } +tower-http = { version = "0.5", features = ["limit"] } reqwest = { version = "0.12", features = ["json", "stream"] } uuid = { version = "1", features = ["v4"] } chrono = { version = "0.4", features = ["serde"] } diff --git a/src-tauri/src/server.rs b/src-tauri/src/server.rs index 80cc0991b..0bff79f2e 100644 --- a/src-tauri/src/server.rs +++ b/src-tauri/src/server.rs @@ -28,7 +28,7 @@ use crate::telemetry::{RequestLog, RequestStatus}; use crate::websocket::{WsConfig, WsConnectionManager, WsStats}; use axum::{ body::Body, - extract::{Path, State}, + extract::{DefaultBodyLimit, Path, State}, http::{header, HeaderMap, StatusCode}, response::{IntoResponse, Response}, routing::{get, post}, @@ -716,6 +716,9 @@ async fn run_server( None }; + // 设置请求体大小限制为 100MB,支持大型上下文请求(如 Claude Code 的 /compact 命令) + let body_limit = 100 * 1024 * 1024; // 100MB + let app = Router::new() .route("/health", get(health)) .route("/v1/models", get(models)) @@ -735,6 +738,7 @@ async fn run_server( "/:selector/v1/chat/completions", post(chat_completions_with_selector), ) + .layer(DefaultBodyLimit::max(body_limit)) .with_state(state); let addr: std::net::SocketAddr = format!("{host}:{port}").parse()?; @@ -754,7 +758,7 @@ async fn run_server( async fn health() -> impl IntoResponse { Json(serde_json::json!({ "status": "healthy", - "version": "0.10.0" + "version": "0.10.1" })) } diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index e531b9d54..a45bb5a0c 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -1,7 +1,7 @@ { "$schema": "https://schema.tauri.app/config/2", "productName": "ProxyCast", - "version": "0.10.0", + "version": "0.10.1", "identifier": "com.proxycast.app", "build": { "beforeDevCommand": "npm run dev",