Repository navigation
fix: 降低多輪工具 Token 消耗、修正 Cookie 302 重定向與 Chrome 多帳號匯入 - #18
Merged
Merged
Conversation
- 優化多輪工具提示詞:新增 ContinuationSuffix 精簡協議約束,避免每輪重複拼接完整工具 JSON Schema - 新增對話指紋自動辨識與多種 Session Header 擷取,支援無 Header 客戶端自動延續會話 - 調整 prompt token 計算排除 ThoughtTokens 並防止錯誤重試雙倍扣額 - 將 Google 登入 302 重定向辨識為認證失效,避免純 Cookie 帳號輪換時觸發 reload 引爆 302 - 移除 SQLite immutable=1 參數以支援讀取 WAL,支援無 DBSC 設備綁定之 Chrome 帳號匯入並精細化狀態標籤 Co-Authored-By: Claude Code <noreply@anthropic.com>
- 兼容 string 與 int 形式的 authUser,避免舊版或手工設定的 storage-state.json 報 json unmarshal 錯誤
- 當 Google 將 /u/N/app 重定向回 /app 時識別為 isLoginRedirect,避免拋出原始 HTTP 302 錯誤
- 當 Chrome 正在執行時,直接開啟 Web Data 會報 database is locked (SQLITE_BUSY),導致所有帳號誤判為 missing_token - 透過拷貝 Web Data 及其 WAL 日志至臨時目錄後再開啟讀取,可完整讀取所有帳號之 v20 token
- 允許無 DBSC 設備綁定密鑰的帳號正常寫入與載入認證狀態檔,支援非 DBSC 帳號順利匯入
- 在 claude_handler.go 與 openai_chat.go 中正規化訊息指紋計算,拆解 bridge.Parse 工具調用並忽略動態 tool_call id 與 thinking 區塊差異,確保多步工具迴圈穩定命中會話續接並消除 slice 底層陣列污染 - 在 conversation.go 中記錄與比對會話工具集雜湊(toolsHash),當續接輪次新增或變更工具定義時自動回退發送完整 PromptSuffix - 在 platform_windows.go 新增 readProfileTokens 以單一 Profile 為單位複製並讀取一次 Web Data + WAL(不複製 -shm 且移除臨時檔 mode=ro 限制),避免同 Profile 多帳號重複拷貝資料庫 - 在 protocol.go 的 encodeMultiOAuthHeader 中當無 DBSC assertion 時省略 protobuf 第 3 欄位,並在 state.go 補齊 authUser 負數與非法字串校驗
- 复制 Web Data 与 WAL 后以 url.URL 构造的只读 URI 打开,复制失败时报错 - 支持没有设备绑定密钥的账号导入,续签以 MultiBearer 头一次取得明文 Cookie - 导入页区分 Web Data 读取失败与需在 Chrome 重新登录两种不可导入原因 - 首页 /u/N 重定向到同一主机其他页面时按会话失效处理,有续签材料时续签 - 回传完整历史的客户端按历史续接网页会话,续接时不重复工具定义与 Schema - 上一轮思考不计入下一轮的上下文 token - 撤回会话请求头续接、单次尝试、authUser 字符串解析与轮换跳过首页重读 - 同步中英文 README、协议与开发文档
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
概述
本 PR 針對專案的工具橋接與會話狀態設計、Cookie 輪換與重定向處理機制,以及 Windows Chrome Web Data 讀取限制進行了修復與優化:
1. 降低多輪工具呼叫 Token 與 Quota 消耗
internal/adapter/tool_bridge.go中新增ContinuationSuffix(),在多輪對話續接時僅追加精簡輸出約束,避免每一輪重複全量拼接數千 Token 的工具 JSON Schema。openai_chat.go與claude_handler.go支援多種常見 Session Header(X-Conversation-ID、X-Session-ID、anthropic-session-id等),並在客戶端未傳遞 Session Header 時透過歷史訊息指紋(openAIMessagesFingerprint/claudeMessagesFingerprint)自動命中既有 CID 會話,讓增量訊息能持續複用相同對話串,避免每輪建立新會話或重傳完整歷史。internal/adapter/stream.go將requestAttempts固定為 1,避免在模型輸出不合規或拒答時背景自動二次重發耗費雙倍配額;下輪會話contextTokens累計時排除 Thought Tokens,使計費與上下文估算更加準確。2. 修復 Cookie 導入調用幾輪後報 HTTP 302
internal/gemini/client.go中將轉跳至 accounts.google.com 登入頁(如 ServiceLogin)的 302 重定向精確映射為 401 Unauthorized (ErrSignedOut),並納入 isAuthenticationError 判定。internal/gemini/rotate.go中,當帳號缺乏 accounts.google.com 域 Cookie(!listed)且無 OAuth 續簽材料(c.refresh == nil)時,避免在第 10 分鐘第 2 輪輪換時主動觸發 c.reload() 向首頁發起無授權請求而引爆 302。3. 修復 Chrome 匯入大機率顯示「Not signed in to Google」
&immutable=1(改為?mode=ro),使 Chrome 運行時未刷盤的Web Data-wal也能被正常讀取。len(bindingKey) != 0的硬性限制,允許具備有效 v20 token 的非 DBSC 帳號順利匯入,並在protocol.go中加入無 wrappedKey 時的 requestMultilogin 降級呼叫流程。ImportPage與 7 國語言檔中補齊「缺少認證權杖」與「需要重新登入」狀態標籤,避免所有未就緒帳號統一顯示為「未登入 Google」。🤖 Generated with Claude Code