Skip to content

Releases: HengXin666/freebuff-proxy

v1.6.0 — 幽灵连接全链路有界化 + 付费/免费模型分层调度

Choose a tag to compare

@HengXin666 HengXin666 released this 18 Aug 14:06

v1.6.0 — 幽灵连接全链路有界化 + 付费/免费模型分层调度

🐛 幽灵连接(一条链卡死 → 其他连接全部超时)全链路修复

网络波动导致连接一直卡死、前端显示仍占用连接、新请求全部超时——根因是请求链路存在多处无限等待,现全部有界化:

  • 下游背压缺口:客户端"活着但不再读"(网络波动/卡顿)时,等待 drain 不再裸挂,受 idle 超时约束自动掐断释放账号锁
  • chat 兜底锁不再无限排队:预算耗尽后的锁等待设上界,超时返回 account_busy 可重试,绝不无限挂起
  • chat 响应头等待 600s → 120s:上游/代理网络波动(TCP 黑洞)时账号锁尽快释放,不再占死 10 分钟
  • 会话切换等在途请求有上界(2×idle+60s),超时放弃该账号换下一个
  • 代理池单代理挂起自动回落:连接成功但永不响应的代理 ≤20s 即视为失败,落到池内下一个

✨ 付费/免费模型分层调度

  • 付费模型(premium)恒走热 session 复用,绝不暴力分散:每次 admit 都是计费会话,分散 = 每个账号各 admit 一次(烧钱 + 抖动)。spreadFreeModels 开关只对免费模型生效
  • 免费模型会话剩余 <5 分钟不再调度:新配置 session.free_model_re_admit_lead_sec(默认 300s),提前 re-admit 换新会话,避免请求发到马上过期的免费会话上中途被掐断/白占额度;付费模型沿用 re_admit_lead_sec(默认 60s)用到接近过期
  • spread 模式下临近过期且正被在途流占用的账号自动降优先级

📦 镜像

ghcr.io/hengxin666/freebuff-proxy:latest / :1.6.0 / :1.6(GitHub Actions 自动构建推送)

升级:git pull && docker compose pull && docker compose up -d

v1.5.9

Choose a tag to compare

@HengXin666 HengXin666 released this 16 Aug 08:34

v1.5.9 — 标准模式思维增强:多轮稳定 + 一键回退

修复:多轮对话思维链混用(用户实测反馈)

  • 标准模式移除逐轮动态引导注入(v4-flash-godmode rc.6 教训:动态注入不可靠、每轮 GUIDE 随轮次变化 → 思维链模式混用)
  • 深度思考引导静态并入 persona,每轮请求改写注入同一份 persona → 多轮恒定、稳定触发

新增:标准模式(standard)路由实现风格(v1.5.8)

  • flash 恒走 weak 内路由(w7 最优)+ 深度引导静态并入(参考 v4-flash-godmode-opencode-go)
  • Pro 用 w6c persona(spec 句 + 分类,无锚,参考 dsh-anchored-standard)
  • 一键开关:dashboard「思维路由」总开关 + 「路由实现风格」选择器(standard 默认 / minimal 旧行为),性能不佳可随时回退

修复:DS4 思考链稍长即截断(v1.5.7,参考 freebuff2api-wokers#8)

  • 客户端小 max_tokens/max_completion_tokens 不再掐断长思考链:转发上游前把输出预算抬到 floor(65536),统一为 max_completion_tokens 单字段

部署

git pull && docker compose pull && docker compose up -d

镜像

  • ghcr.io/hengxin666/freebuff-proxy:v1.5.9
  • ghcr.io/hengxin666/freebuff-proxy:latest

v1.5.6 修复 DS4 长思考链截断 + 保留 max 思考深度

Choose a tag to compare

@HengXin666 HengXin666 released this 15 Aug 13:42

🎯 参考 freebuff2api-wokers#8

症状:deepseek-v4-flash 思考链稍长即自动截断,再次继续仍断(cc / Pi 客户端均复现,mimo 正常)。评论指出:推理任务会触发上游返回不同 agent(code-reviewer / base3 / base2),部分 agent 带单次 output 限制

修复内容

1. 保留 reasoning_effort: max(不再降档)

  • 旧实现把 max 一律降为 high(注释误以为 Luna 上限);官方 efforts 表:flash=[low, high, max]、pro=[high, max]——max 是合法档位;
  • 实测保留 max 后思考深度 30K → 45K 字符(智力提升),且完整返回(finish=stop,不截断)——这正是「思维链模式核心 = 模型智力提升」所需要的。

2. agent 兜底回退 base3 孪生

  • 主 agent 被上游以 free_mode_invalid_agent_model(403)拒绝时,自动回退 base3-free-* 孪生(官方 free-agents.ts FREEBUFF_WEB_BASE3_AGENT_ID_BY_MODEL);
  • 应对「上游按用途/推理任务路由到不同 agent、部分带 output 限制」的场景;
  • -max 扩展上下文 root 为预置配额、普通免费账号 403,不选作默认。

3. 路由模式不受影响:persona 替换(套件 applyPersona 语义)+ 首轮核心工具 + weak 近距引导 + flash 近距引导(用户指定文本)全部保留。

验证

  • 单元:normalizeReasoningFields max 保留断言 + agent_fallback mock(主 agent 403 → base3 成功)✓
  • 真实上游:effort=max + spec 路由 → reasoning=45K / 18K 字符,finish=stop 不截断 ✓
  • npm test / typecheck / compose / docker build 全绿 ✓
  • 本地代理已启动(127.0.0.1:28299,路由开 + spec + 免费模型分散 + 断连自愈)

🐳 镜像

ghcr.io/hengxin666/freebuff-proxy:1.5.6latest 同步),升级:docker compose pull && docker compose up -d(含远程部署)。

v1.5.5 persona 恢复逐字符原样 + 近距引导独立注入

Choose a tag to compare

@HengXin666 HengXin666 released this 15 Aug 11:46

🎯 本次修复

persona 恢复套件逐字符原样(哈希不可变)

  • spec persona = You are a helpful software engineer assistant.(与 dsh-routing-suite router-core.mjs 逐字符一致);
  • 移除了此前追加在 pro spec persona 后的 Plan and reason collectively... 文本——那污染了 RL 句的哈希,导致模型语域僵硬(用户反馈「禁锢/反常」),且被指为角色设定而非路由优化。

近距引导独立注入:用户指定文本 Plan and reason collectively: use first-person plural (we / let's). Begin your reasoning with "We". 保留为 flash+spec 的独立 user 消息注入(与套件 GUIDE_WEAK 的近距机制一致,不修改 persona 哈希);工具循环轮次也持续注入。

验证

  • 单元测试:spec persona 断言改为「不包含追加文本」(哈希纯净);flash 近距引导断言保留 ✓
  • 真实上游:turn1 强集体语域(we=82/let's=57/let me=21,引导被模型引用);turn2 工具轮混合(flash 固有方差)✓
  • npm test / typecheck / compose / docker build 全绿 ✓

🐳 镜像

ghcr.io/hengxin666/freebuff-proxy:1.5.5latest 同步),升级:docker compose pull && docker compose up -d(含你服务器上的远程部署)。

v1.5.4 persona 替换语义:与 dsh-routing-suite 的 applyPersona 对齐

Choose a tag to compare

@HengXin666 HengXin666 released this 15 Aug 11:01

🎯 本次修复:persona 从「前置」改为「替换」

重新审视了 dsh-routing-suite 的原始实现(applyPersona):它的语义是移除客户端 persona section、换成路由 persona,其余 section 全部保留

旧实现的问题:我们只在请求最前前置了一条 persona system 消息,客户端原本的 persona(如 "You are a coding agent powered by...")原样保留在后面——模型同时看到两个身份互相打架,路由效果被稀释,等于没改变实质。

新实现:移除客户端第一条 system 开头的 persona 段("You are..." 段落),换成路由 persona(free-mode 门禁标记保留在最前),其余 section(工具指导 / 工作区 / 回复格式)原样保留——与套件语义一致;无法识别 persona 段时回退为前置。

验证

  • 单元 + e2e:标准预设形态("You are a coding agent powered by...")被替换、"### " section 保留、消息数从 3 → 2;非 "You are" 开头回退前置 ✓
  • npm test / typecheck / compose / docker build 全绿 ✓
  • 本地代理已重启加载(路由开 + spec + 免费模型分散 + 断连自愈 + 多轮锚定)

🐳 镜像

ghcr.io/hengxin666/freebuff-proxy:1.5.4latest 同步),升级:docker compose pull && docker compose up -d你服务器上的远程部署也需要拉取这个版本(hxapi→SUBapi 链路才会带上替换语义 + 多轮锚定修复)。

v1.5.3 思维链不再衰减:工具循环轮次持续锚定 we/let's

Choose a tag to compare

@HengXin666 HengXin666 released this 15 Aug 10:25

🐛 修复:we/let's 思维链在工具循环里衰减回 let me

  • 根因:near-field 锚定只在「最后一条是用户消息」时注入。工具循环里最后一条通常是 tool 结果,锚定在第二轮起断供——实测「做一个我的世界网页版」会话:turn1 step1 完美(we=121 / let me=4),turn1 step2(工具结果返回后)let me 飙到 18。
  • 修复:最后一条是「用户消息」**或「tool 结果」**都持续注入锚定/引导;assistant 文本回复 / tool_calls 之后不追加(避免"用户插话"或破坏 tool_call→tool 结果配对);复杂度判断在 tool 轮次回退到会话首个用户任务。
  • 真实上游复验:turn2(tool 结果后)we=8 / let's=6 / let me=1——集体语域跨轮保持。

🐳 镜像

ghcr.io/hengxin666/freebuff-proxy:1.5.3latest 同步),升级:docker compose pull && docker compose up -d

v1.5.2 稳定性修复:断连自愈 + 免费模型分散

Choose a tag to compare

@HengXin666 HengXin666 released this 15 Aug 10:13

🐛 修复:客户端断开占死账号锁(严重影响使用)

  • 根因:node 的 IncomingMessage 'close' 是「请求体读完」事件(body 读完即触发),不是连接关闭。旧实现监听它,导致客户端断开(请求体已读完)后上游 fetch 一直挂着(最长等 120s 超时),账号 chat 锁被占死,后续所有请求排队超时
  • 修复:改为监听底层 socket close(真正的断开信号)+ pipe 内显式 client-gone race。断开瞬间中止上游读取并释放锁——实测 3 秒恢复服务(原 120 秒);once/removeListener 防止 keep-alive 连接监听器泄漏。

🚀 新特性:免费模型暴力分散(spreadFreeModels,默认开)

控制台「负载均衡设置 → 免费模型分散到不同账号」:

  • 请求轮转分散到不同账号(空闲槽位 → 在途少 → 轮询公平),不再钉死单个热 session;
  • 单账号被占死不再拖垮全部请求,多账号并行吞吐更高(实测 4 个请求 → 4 个不同账号);
  • 免费额度不心疼 admit,每个账号各持一个热 session,轮转到时复用;
  • 关闭则恢复「最省额度」的热 session 优先调度。

📊 科研结论(README 已更新)

标准模式(35K 完整系统提示)+ 代理 spec 路由:we/let's 链出现(we=11)但被完整系统提示稀释为混合语域;官方 minimal 模式为纯链(we=44/let's=18)。客户端模式选择指引已写入 README:minimal=纯链 / standard+代理=完整能力+稳定性 / 自定义路由预设勿与代理路由同开

🐳 镜像

ghcr.io/hengxin666/freebuff-proxy:1.5.2latest 同步),升级:docker compose pull && docker compose up -d

v1.5.0 极简路由(路由模式)

Choose a tag to compare

@HengXin666 HengXin666 released this 15 Aug 08:42

✨ 新特性:极简路由(路由模式)

控制台「总览 → 免费额度策略」新增「极简路由」开关与「路由风格」选择器,保存立即生效、持久化 /data/settings.json

代理侧按 dsh-routing-suite(P1-P30 实测)的请求协议改写请求,解决"客户端注入的路由经翻译/反向代理链失效"的问题:

  1. persona 注入:任务自动分类 → spec(计划-集体)/ react(执行-个体)/ weak(内部路由),极简 persona 置顶,客户端 system 保留在后;
  2. 首轮核心工具面:首个 tool_calls 前裁剪到核心集(spec 读优先 / react 写优先)+ shell;工具保证——不裁空、Freebuff 特殊签名工具 end_turn 始终保留(保住请求模型/额度);
  3. weak 近距离引导:用户消息后追加固定引导(简单/复杂任务分级收敛);
  4. 路由风格钉死minimalRoutingMode:auto/spec/react/weak)。

🎯 目标模型:deepseek-v4-flash(V4 Fast)

we/let's 集体思维链按模型自适应锚定:

  • v4-flash:远距锚定反噬 → 近距 user 注入 + 首 token We 自锚定(P14/P15),实测工具化多轮会话 we=4~6 / let's=3 / let me=0
  • v4-pro(对照):persona 远距锚定即生效(we=7~12)。

📊 Benchmark

README 新增「基准测试与验证」章节,含思维链实测数据表与测试归属

  • P1-P30 理论实验:dsh-routing-suite 作者 yjh051108(官方 API 实测);
  • 本项目真实上游验证:freebuff-proxy 维护者用真实 Freebuff 账号、codebuff.com 上游实测;
  • 合规/回归测试:test/smoke.mjs(mock 上游自动化,覆盖 free-mode 门禁 + 路由改写不变量)。

🐳 镜像

ghcr.io/hengxin666/freebuff-proxy:1.5.0latest 同步更新),升级:docker compose pull && docker compose up -d

v1.4.1

Choose a tag to compare

@HengXin666 HengXin666 released this 15 Aug 06:41

v1.4.1 - 流量/会话切换不断流 + 并发上限可配

修复:切换流量/会话时不再掐断正在传输的 SSE(本次核心)

用户端「用着用着突然卡住、前端请求为 0、无在线连接」的根因:切换代理或 re-admit 会话时,
把正在传输的 SSE 流底下的 session 直接 DELETE 了——上游连接还在但 session 已消失,
客户端只能永久等待。本次修复:

  • 会话临近过期切换平滑化:需要 re-admit 换新会话时,若旧会话正被在途流使用,
    先等在途流结束后才释放重建(循环等待防竞态),绝不掐断健康连接;
  • 代理切换不断流:前端保存代理池/账号出口后立即生效(新请求走新出口),旧 runtime
    的 session 在后台等在途 SSE 结束后再优雅释放;
  • 排队等锁期间切换不卡死:请求排队时若发生代理/账号切换,会自动检测到 runtime
    已被顶替并无冷却重新选号(走新出口、新 session),不会撞上已失效的旧会话;
  • 新增 3 个回归测试覆盖上述场景(re-admit 不断流 / 代理切换不断流 / 排队切换重新选号)。

负载均衡增强

  • 账号并发上限可配(控制台「负载均衡设置」,默认 1:1,范围 1..16,保存立即生效):
    一个账号可同时转发多条 SSE 响应流;总览每账号显示「并发(在途/上限)」实时监控;
  • 前端「全部断开重连」(admin,POST /api/system/reconnect):释放全部 session +
    重置并发信号量,比重启更轻量,下个请求自动 re-admit;
  • 会话临近过期提前 re-admit(session.re_admit_lead_sec,默认 60s),流 idle 超时按
    会话剩余时间收敛。

其他

  • README 顶部增加 Releases 发布页链接。

部署

git pull && docker compose pull && docker compose up -d

v1.4.0

Choose a tag to compare

@HengXin666 HengXin666 released this 09 Aug 17:25

v1.4.0 - 幽灵连接治理 + 账号级串行化 + 前端一键重启

修复:幽灵连接(连接卡死不自动断开)

上游偶尔会出现"发了一半不再吐数据、也不断开连接"的卡死状态,导致该连接永远挂着并拖住后续请求。本次治理:

  • 上游流式响应 body 增加 idle 超时limits.stream_idle_timeout_sec,默认 120 秒):只要超过该时长没有新数据块,立即取消上游读取并断开下游连接,让客户端感知截断后自行重试,不再有无限期挂起的幽灵连接
  • 控制面请求(session / agent-runs 等)的 body 读取同样带超时兜底,杜绝任何路径挂死。
  • 断开后不误伤账号:session 本身正常的话,下一个请求仍可复用,不浪费免费额度。

负载均衡:一个账号一个并发

  • 账号级串行化:一个账号同一时间只处理一个 chat(新增账号互斥锁),并发请求按热 session 排队复用,不再同时打在同一个 instanceId 上(上游会话不稳定时并发容易互相干扰/顶号)。
  • 选号在同层级内优先空闲账号;排队超过 limits.account_chat_wait_ms(默认 120000ms)兜底换号;预算耗尽时自动转入受 idle 超时约束的最终等待,不会误报失败。
  • 冷启动原子化保持不变:多个并发请求同时到达仍只创建一个 session。

新增:前端一键「重启服务」(终极兜底)

  • 控制台右上角管理员专属「重启服务」按钮(POST /api/system/restart,仅 admin)。
  • 服务端 spawn 自重启子进程等待端口释放后无缝接管并优雅退出;Docker 场景下容器主进程退出会触发 restart: unless-stopped 整容器重建,双保险。
  • 前端自动轮询 /healthz 直到恢复;Web 登录态持久化在 /data,重启后无需重新登录。
  • 已实测:容器场景(Docker 自动恢复)与裸机场景(子进程接管 + 登录态保留)均验证通过。

其他

  • 新增 smoke 回归测试:zero/partial 幽灵连接掐断、账号串行化并发峰值、重启 API 权限与回调。

部署

git pull && docker compose pull && docker compose up -d