fawney19
|
f80deea110
|
chore: bump aether-proxy version to 0.1.5
proxy-v0.1.5
v0.5.11
|
2026-02-11 23:35:23 +08:00 |
|
fawney19
|
6956536830
|
refactor: 将配置导入导出常量移至文件顶部
|
2026-02-11 23:27:48 +08:00 |
|
fawney19
|
01c725a2ee
|
Merge pull request #170 from RWDai/fix-config-version
fix: 配置导入导出版本号统一常量管理,移除前端硬编码版本校验
|
2026-02-11 23:26:33 +08:00 |
|
fawney19
|
1c2a8119c0
|
feat: delegate 客户端替换为 hyper 原生实现,新增代理管理功能
aether-proxy:
- 用 hyper-util Client + 自定义 InstrumentedConnector 替换 reqwest delegate 客户端
- 支持 HTTP/HTTPS 自动 TLS,ALPN h2 协商,connect/tls 分阶段计时
- ConnectTiming 通过 hyper extensions 传递,上游响应细分 connect_ms/tls_ms/ttfb_ms
- upgrade 命令在非 root 下跳过 systemd restart 并提示手动操作
后端:
- 新增 /admin/proxy-nodes/test-url 接口,支持直接测试代理 URL 连通性
- 新增 /admin/proxy-nodes/hmac-key 接口,获取 HMAC Key 供部署使用
- 提取 _test_proxy_connectivity 公共函数,消除 test_node 中的重复代码
- candidate_resolver 在 extra_data 中输出 needs_conversion/provider_api_format
- stats_aggregator 小时聚合增加 IntegrityError 冲突重试
前端:
- 请求时间线组件展示代理 timing 细分(DNS/连接/TLS/TTFB/上游处理)
- 请求时间线增加格式转换分界标记和 conversion badge
- ProxyNodes 页面新增代理 URL 测试和 HMAC Key 复制功能
- HardwareTooltip 从 Popover 改为 Tooltip 组件
|
2026-02-11 23:24:59 +08:00 |
|
fawney19
|
943ca79951
|
chore(aether-proxy): bump version to 0.1.4
proxy-v0.1.4
|
2026-02-11 17:29:37 +08:00 |
|
fawney19
|
62c05093a0
|
fix(docker): 统一 max-requests 默认值为 4000
PR #171 中 max-requests 的 fallback 默认值 (2000) 与 jitter 计算的默认值 (4000) 不一致,统一为 4000
|
2026-02-11 17:26:22 +08:00 |
|
fawney19
|
d71d4e24be
|
Merge pull request #171 from AAEE86/dev
refactor(docker): 优化 Gunicorn 配置并提升代码可读性
|
2026-02-11 17:21:19 +08:00 |
|
fawney19
|
37e0785775
|
fix(frontend): HardwareTooltip 组件健壮性重构
- hardware_info 支持 string/object/null 类型的安全解析
- 用 computed 统一提取展示行,无硬件信息时显示提示文案
- 增加 button 的 title/aria-label 属性
|
2026-02-11 17:17:53 +08:00 |
|
fawney19
|
0ddeccf698
|
feat(aether-proxy): delegate gzip body 流式透传替代读取解压
- gzip 压缩请求体直接流式转发给上游,避免全量读取和解压
- 非 gzip 请求保持原有读取逻辑
- 移除 body_read_ms/decompress_ms 指标,新增 passthrough 标记
- 前端 timing 展示兼容旧版字段
- 同步更新 Cargo.lock
|
2026-02-11 17:17:45 +08:00 |
|
AAEE86
|
875ecca527
|
refactor(docker): 优化 Gunicorn 配置并提升代码可读性
使 Gunicorn 的 max-requests 参数可通过环境变量 MAX_REQUESTS 配置,
并自动计算 max-requests-jitter (默认为 MAX_REQUESTS 的 1/20),
同时统一规范化 Dockerfile 中多行字符串的缩进格式
|
2026-02-11 17:14:32 +08:00 |
|
RWDai
|
3a5d687f08
|
fix: 配置导入导出版本号统一常量管理,移除前端硬编码版本校验
|
2026-02-11 17:06:06 +08:00 |
|
fawney19
|
257077a59b
|
chore: bump aether-proxy version to 0.1.3
v0.5.10
proxy-v0.1.3
|
2026-02-11 16:39:07 +08:00 |
|
fawney19
|
9647d95759
|
feat: delegate 协议改为 header 元数据 + gzip 压缩 body 直传
- delegate wire format 从 JSON body 改为 HTTP headers 传递元数据
(X-Delegate-Method/Url/Headers),上游请求体 gzip 压缩后直传,
减少跨国代理传输耗时
- Rust 侧新增 gzip 解压(含 decompression bomb 防护 50MB 上限)
- 升级模块从 GitHub API asset 下载改为公开 release URL 直链,
GITHUB_TOKEN 变为可选
- 前端适配新 timing 字段,展示压缩率与 wire_size/body_size
- CI release notes 改用 generate_release_notes 自动生成
|
2026-02-11 16:34:18 +08:00 |
|
fawney19
|
2436ce45a2
|
chore: bump aether-proxy version to 0.1.2
proxy-v0.1.2
v0.5.9
|
2026-02-11 15:35:28 +08:00 |
|
fawney19
|
2a2a4b817e
|
feat: 代理 timing 细分指标与前端展示优化
- aether-proxy 新增 auth_ms/body_read_ms/body_parse_ms/body_size 计时字段
- 链路追踪面板代理耗时改为分阶段展示,密钥和代理信息改为堆叠布局
- 硬件信息从 Tooltip 改为 Popover,新增 FD Limit 展示
- 新增区域代码格式化工具函数,统一显示区域中文名称
|
2026-02-11 15:33:01 +08:00 |
|
fawney19
|
d51234f202
|
fix(frontend): 链路追踪打开时自动选中进行中的尝试而非最后一个未执行的
|
2026-02-11 13:35:02 +08:00 |
|
fawney19
|
7abe7f1a87
|
chore: 更新 README 链接与清理 generate_keys 冗余输出
- 修正 aether-proxy README 中 Releases 为完整 URL,优化描述文案
- 移除 generate_keys.py 中不再需要的 hmac_key 配置提示
|
2026-02-11 13:24:28 +08:00 |
|
fawney19
|
2849a9bce5
|
fix(frontend): 密钥列表分页控件固定在底部
|
2026-02-11 12:57:52 +08:00 |
|
fawney19
|
2aee8b8c2c
|
Merge pull request #169 from AAEE86/master
feat: 调度器根据上游配额自动跳过已耗尽的 Key (Kiro/Codex/Antigravity)
|
2026-02-11 12:55:52 +08:00 |
|
AAEE86
|
e77c28b89b
|
feat: 调度器根据上游配额自动跳过已耗尽的 Key (Kiro/Codex/Antigravity)
在 _check_key_availability 末尾增加 _is_key_quota_exhausted 检查,读取 ProviderAPIKey.upstream_metadata 中各 Provider 的配额信息,配额耗尽时跳过该 Key 并返回可读的跳过原因。同时修正同函数内 logger 调用为 loguru {} 占位符风格。
|
2026-02-11 12:53:40 +08:00 |
|
fawney19
|
ed3f208dda
|
feat(aether-proxy): 网络层全面优化与代理耗时追踪
aether-proxy:
- 新增 20+ 可配置参数:Aether API/delegate/CONNECT 各阶段超时、连接池、TCP keepalive/nodelay
- AetherClient 支持指数退避重试(可配置次数/延迟)和 HTTP/2
- 新增 DNS 缓存(TTL + 容量限制)避免重复解析
- 新增并发连接数限制(Semaphore,默认基于硬件估算)
- CONNECT 隧道增加建连超时和升级超时
- TLS 增加握手超时、会话缓存(session ticket + memory cache)、ALPN 协商
- 新增 ProxyMetrics 收集请求计数和延迟,通过心跳上报
- delegate 响应注入 X-Proxy-Timing 头(dns_ms/upstream_ms/total_ms)
后端:
- StreamContext 和 handler 提取 X-Proxy-Timing 写入 proxy_info 追踪数据
前端:
- 请求时间线展示代理分阶段耗时(DNS/上游)
- Endpoint 添加按钮改为文字按钮样式
|
2026-02-11 11:30:29 +08:00 |
|
fawney19
|
68f5e7e502
|
fix(frontend): 链路追踪打开时自动选中有效状态的节点
修复 Provider 组状态提升逻辑,之前仅在 success 时更新组状态,
导致组内有 streaming/failed 等状态的 key 时组仍显示为 available,
自动选择逻辑无法识别有效节点。引入状态优先级机制正确提升组状态,
并扩大 fallback 有效状态范围,避免默认选中未执行的节点。
|
2026-02-11 10:06:59 +08:00 |
|
fawney19
|
11b0026995
|
feat: OAuth 重复账号失效时允许覆盖更新,优化前端分页与刷新体验
- OAuth 去重逻辑改为:已失效的重复账号自动覆盖更新而非拒绝,
适用于单个导入、批量导入、Kiro 导入等所有入口
- 新增 _update_existing_oauth_key 函数统一处理覆盖更新逻辑
- useSmartPagination 新增 fixedHeight 属性防止翻页时容器高度跳动
- ProviderDetailDrawer OAuth 刷新后仅重载 keys 数据避免整表刷新
|
2026-02-11 10:01:28 +08:00 |
|
fawney19
|
5cfae4f8f0
|
Merge pull request #168 from AAEE86/master
refactor(frontend): 优化模型/提供商组件的数据刷新逻辑
|
2026-02-11 09:20:35 +08:00 |
|
fawney19
|
bda03d187e
|
refactor: 统一代理配置优先级链(key>provider>系统默认)并复用 HTTP 连接池
- 引入 resolve_proxy_param / build_proxy_client_kwargs 工具函数,统一
httpx 客户端的代理+SSL+超时配置,替换各模块中零散的 get_ssl_context() 调用
- 所有涉及上游请求的模块(provider_query, usage replay, endpoint check,
model fetch, OAuth, Vertex Auth, Gemini Files/Video 等)改用
resolve_effective_proxy 按 key > provider > 系统默认优先级解析代理
- 流式请求改用 HTTPClientPool.get_upstream_client 复用连接池,移除各处
http_client.aclose() 避免关闭共享客户端
- StreamProcessor._cleanup 不再关闭池中客户端,仅清理响应上下文
- 前端 EndpointFormDialog 增加 body_rules 帮助说明 Popover
- Mock handler 补充 OAuth 字段、endpoint extras 及新增 mock 路由
|
2026-02-11 03:16:53 +08:00 |
|
AAEE86
|
0fa15604dc
|
refactor(frontend): 优化模型/提供商组件的数据刷新逻辑
- ModelDetailDrawer: 移除 handleMappingsUpdate 中冗余的 refreshRoutingData 调用,路由刷新改由 @refresh 事件统一处理
- ModelMappingsTab: saveMappings 成功后始终 emit update 和 refresh 事件,确保数据一致性
- BatchAssignModelsDialog: 为批量添加/导入操作增加 try-catch 错误处理,部分操作失败时仍通知父组件刷新
- ProviderDetailDrawer: 移除 modelsTabRef 直接调用子组件 reload 的模式,统一通过 emit('refresh') 由父组件协调刷新
|
2026-02-11 03:09:26 +08:00 |
|
fawney19
|
cd0acf1e6b
|
fix: OAuth 账号去重改用 user_id 替代 account_id,避免同 team 成员误判重复
|
2026-02-11 01:13:01 +08:00 |
|
fawney19
|
9e183a2033
|
Merge pull request #167 from AAEE86/dev
feat: Codex/Kiro 配额自动刷新增加 5 分钟过期检查
|
2026-02-11 01:10:19 +08:00 |
|
AAEE86
|
76e8e48400
|
fix(frontend): 移除 Dashboard onMounted 中重复的 daily-stats 请求
TimeRangePicker 初始化时已通过 watch immediate 触发数据加载,
无需在 onMounted 中重复调用 loadDailyStats()
|
2026-02-11 01:03:09 +08:00 |
|
fawney19
|
3d6d4a48a5
|
feat: body_rules 支持 condition 条件触发
为每条 body_rule 新增可选 condition 字段,支持 eq/neq/gt/lt/gte/lte/
starts_with/ends_with/contains/matches/exists/not_exists/in/type_is
共 14 种操作符,规则仅在条件满足时执行。
后端: 新增 _evaluate_condition 条件评估器与 _validate_condition 校验逻辑
前端: EndpointFormDialog 增加条件编辑行(IF 面板)与 Filter 按钮切换
测试: 新增 TestConditionalBodyRules 覆盖全部操作符及链式触发场景
|
2026-02-11 00:50:08 +08:00 |
|
AAEE86
|
5d0240e675
|
fix(frontend): TimeRangePicker 防止重复触发 update:modelValue
- 添加 lastEmittedValue 记录上次 emit 的值
- 提取 buildEmitValue 构建 emit 数据
- 使用 getValueKey 比较核心字段,忽略 timezone 等动态值
- 外部设置值时同步更新 lastEmittedValue 避免回环触发
|
2026-02-11 00:37:15 +08:00 |
|
AAEE86
|
cabaa9f1df
|
refactor(frontend): 统一 routing 数据加载,消除子组件重复请求
将 Model 和 Provider 详情抽屉中的 routing/mapping 数据加载逻辑
从各子组件(RoutingTab、ModelMappingsTab、ModelsTab、ModelMappingTab)
提升到父组件统一管理,通过 props 向下传递数据,避免多个子组件独立发起相同的 API 请求,提升页面加载性能。
|
2026-02-10 23:47:47 +08:00 |
|
AAEE86
|
347bd3345c
|
feat: Codex/Kiro 配额自动刷新增加 5 分钟过期检查
- Codex: 新增 Token 即将过期检查 + 配额数据过期检查
- Kiro: 新增配额数据过期检查
- 三个 OAuth Provider 的自动刷新逻辑现在完全一致
|
2026-02-10 21:12:31 +08:00 |
|
fawney19
|
262bc6e1f7
|
feat: body_rules set 操作支持 {{$original}} 占位符引用原值
后端 request_builder 新增递归检测与解析逻辑,完全匹配时保留原始类型,
部分匹配时转为字符串拼接。前端 EndpointFormDialog 增加 sentinel 替换
机制,使含占位符的值能通过 JSON 校验,并在提交时还原为 {{$original}}。
|
2026-02-10 21:01:45 +08:00 |
|
fawney19
|
e06152b58b
|
Merge pull request #166 from AAEE86/dev
fix: Claude SSE 流式输出补充 event 类型行
|
2026-02-10 18:56:21 +08:00 |
|
AAEE86
|
d8addec077
|
fix: Claude SSE 流式输出补充 event 类型行
|
2026-02-10 18:42:50 +08:00 |
|
fawney19
|
5456596b29
|
style: 优先级管理弹窗间距与样式微调
|
2026-02-10 18:32:51 +08:00 |
|
fawney19
|
8949ad6d9e
|
feat: 动态 block 索引分配、OAuth 自动启停联动与 Antigravity 签名注入增强
- Gemini/OpenAI normalizer 改为按实际出现顺序延迟分配 thinking/text block 索引
- OAuth 失效标记时自动停用 Key,清除/刷新成功时自动启用
- Antigravity thought signature 注入支持 tool-specific 签名优先,再回退 session 级签名
- Claude normalizer 对非字符串 thinking block 降级为 UnknownBlock
- Gemini normalizer 反序列化时为 Antigravity 目标补充 signature
- signature_cache _prune 增加超限驱逐
- model/provider 包 __init__ 改为惰性导入避免循环依赖
- build_antigravity_url 复制 query_params 防止修改调用方原始字典
- upstream_fetcher build_all_format_configs 兼容非 EndpointFetchConfig 对象
- Antigravity HTTP 状态判定扩展与 Gemini endpoint check 支持 v1internal
- 新增 thought signature 注入与 signature cache 驱逐测试
Closes #165
Co-authored-by: AAEE86 <ppk0227@hotmail.com>
|
2026-02-10 17:53:04 +08:00 |
|
fawney19
|
0bb17a1502
|
chore: Docker 基础镜像从 Python 3.14 降级到 3.13
|
2026-02-10 17:41:36 +08:00 |
|
fawney19
|
0c52341dec
|
feat: TTFB 追踪记录与前端展示 + 缓存调度器代码整理
- CLI handler 记录上游请求 TTFB 并注入 proxy_info
- 前端请求时间线展示 TTFB 耗时
- 调度器提升局部 import 到模块顶部,提取 _affinity_hash/_merge_restriction_sets 辅助方法
- 修复缓存亲和性写入的缩进层级
- Python 版本回退至 3.13
|
2026-02-10 17:37:53 +08:00 |
|
fawney19
|
4276e7835c
|
refactor: 自适应 RPM 从边界记忆改为多次观察确认 + 置信度衰减
将自适应 RPM 限制算法从"单次 429 即设限"重构为基于置信度的学习机制:
- 收到 429 时仅记录观察(本地 RPM + 上游 header 限制值),不立即设限
- 有 header 的观察需 2 次一致确认,无 header 需 3 次一致确认
- confidence 随时间自然衰减,确保限制永远不会固化
- confidence 低于阈值时停止本地 RPM 限制,429 直接透传客户端
- 统一 get_effective_limit 入口,消除多处重复的限制获取逻辑
- Admin API 增加置信度、观察数量等诊断字段
|
2026-02-10 14:58:15 +08:00 |
|
fawney19
|
fc1ad44346
|
feat: Antigravity 上游模型按 tier 排序逐个获取与前端单 Key 查询
- 后端 Antigravity Provider 获取上游模型改为按 tier/可用性排序后逐个尝试,成功即停止
- 新增 Provider 级别缓存避免重复请求
- 前端编辑 Key 允许模型时改为传入当前 Key ID 查询对应可用模型
|
2026-02-10 11:24:22 +08:00 |
|
fawney19
|
91cf93d133
|
fix: Antigravity function_call/function_response 驼峰转换与 thinking budget 非正值过滤
Close #161
v0.5.8
|
2026-02-10 10:34:28 +08:00 |
|
fawney19
|
457de0919a
|
Merge pull request #163 from AAEE86/master
fix: Antigravity 跨格式转换链 tool call ID 完整传递
|
2026-02-10 10:27:43 +08:00 |
|
AAEE86
|
d4fd3518bf
|
fix: Antigravity Claude tool ID 匹配与 thinking budget 输出约束
- 重构 _inject_claude_tool_ids_request 采用两遍扫描算法:
* 第一遍收集所有 functionCall 的 ID(按 name 分组)
* 第二遍为 functionResponse 从对应队列中取出匹配的 ID
* 解决多工具调用场景下 ID 匹配错乱问题
- 增强 _process_thinking_budget 确保 maxOutputTokens > thinkingBudget:
* 新增 OUTPUT_OVERHEAD/OUTPUT_OVERHEAD_IMAGE 常量(对齐 AM)
* 自动调整 maxOutputTokens 为 budget + overhead
* 超过 MODEL_MAX_OUTPUT_LIMIT 时减少 budget 而非超限
|
2026-02-10 05:12:21 +08:00 |
|
fawney19
|
f9adf5938e
|
feat: 请求记录 cURL 导出与回放功能
- 后端新增 /{usage_id}/curl 接口,重建完整 cURL 命令(含明文 API Key)
- 后端新增 /{usage_id}/replay 接口,支持向原始或指定提供商回放请求
- 回放支持 OAuth/Vertex AI/API Key 多种认证方式和跨格式请求体转换
- 前端新增 ReplayDialog 组件,支持选择目标提供商/Key 并查看响应
- RequestDetailDrawer 添加回放按钮和 cURL 复制按钮
- 调整 Tab 内容区布局,表头栏与内容区融为一体
|
2026-02-10 03:07:49 +08:00 |
|
AAEE86
|
5d36fd7f99
|
fix: Antigravity 跨格式转换链 tool call ID 完整传递
修复通过 Antigravity 适配器发送请求到 Claude 模型时 tool_use 块缺少必需 id 字段的问题。
根本原因:在跨格式转换链 (Gemini → Internal → Claude/Gemini) 中,
functionCall 和 functionResponse 的 id 字段没有被正确传递。
修复内容:
- internal.py: ToolResultBlock 增加 tool_name 字段,区分工具名称和 call id
- gemini.py: 读取/输出 functionCall 和 functionResponse 时保留 id 字段
- gemini.py: 流式响应中正确传递 tool_id
- envelope.py: 同时支持 camelCase/snake_case 两种命名风格
|
2026-02-10 02:50:45 +08:00 |
|
fawney19
|
9f5dd6f658
|
feat: 跨格式 thinking/reasoning 透传与 Antigravity 适配器增强
- 内部表示层新增 ThinkingBlock,统一 Claude thinking / Gemini thought / OpenAI reasoning_content
- Claude/Gemini/OpenAI/OpenAI CLI normalizer 全面支持 thinking 内容的解析、流式处理和跨格式转换
- schema_utils 重写为完整的 JSON Schema 清洗逻辑($ref 展开、allOf 合并、anyOf 折叠、白名单过滤)
- Antigravity envelope 新增模型别名映射、Google Search 注入、thoughtSignature 注入、图像生成配置解析
Close #161
|
2026-02-10 02:05:35 +08:00 |
|
fawney19
|
de40bd4705
|
fix: Claude API 模型列表查询兼容 Bearer Token 认证
第三方代理可能使用 Bearer Token 而非 x-api-key 认证,
在请求头中同时发送两种认证方式以提高兼容性。
|
2026-02-10 01:01:05 +08:00 |
|
AAEE86
|
6c5c41e8ea
|
fix: 修复 Antigravity beta 参数和 Kiro 403 状态处理
- Antigravity: 移除 v1internal 请求中不支持的 beta 查询参数
- Kiro: 将 403 状态码统一视为账户异常,而非仅检测特定关键词
|
2026-02-10 00:54:43 +08:00 |
|