accessToken 与 refreshToken。续期令牌建议填写——本家令牌不是 JWT(约 7 天到期,读不到过期时间),没有它账号无法自动续期,到期只能重新登录。": "Paste the two values from the AtomCode page on AtomGit: accessToken and refreshToken. The refresh token is strongly recommended — this provider's token is not a JWT (it expires in about 7 days and carries no readable expiry), so an account without it cannot renew itself and must be re-authorised once it expires.",
"在 cc-switch 里找到": "Found",
"在内嵌窗口里完成官方登录,成功后自动加入账号列表。": "Complete the official sign-in in the embedded window; the account is added to the list automatically on success.",
"在{label}的 Qoder 账号设置 → Integrations 生成 PAT(别填 Google / GitHub 的令牌)。两个地区的账号与凭证不通用。": "Generate a PAT in the Qoder account settings → Integrations for {label} (do not use a Google / GitHub token). Accounts and credentials do not carry over between the two regions.",
@@ -305,6 +309,7 @@
"粘贴 session cookie": "Paste session cookie",
"粘贴 token / refreshToken": "Paste token / refreshToken",
"粘贴 workos:… 开头的令牌(不带前缀也会自动补上)": "Paste a token starting with workos:… (the prefix is added automatically if missing)",
+ "粘贴令牌对": "Paste token pair",
"粘贴智谱清言的访问令牌(JWT,三段点分)。获取方式:浏览器打开 chatglm.cn 并登录后,在开发者工具的 Application → Cookies 里复制 chatglm_token 的值(也可以直接粘 chatglm_token=…; 整行)。粘贴后会先向上游校验一次,校验通过才落账号;登录账号的积分、签到能力都能用,之后由网关自动续期(上游有续期接口)。": "Paste a Zhipu Qingyan access token (a JWT with three dot-separated parts). How to get it: open chatglm.cn in a browser, sign in, then copy the value of the chatglm_token cookie from Application → Cookies in the developer tools (pasting the whole chatglm_token=…; line works too). It is verified against the upstream once after pasting, and the account is only saved if that passes; signed-in accounts get points and sign-in capability, and the gateway renews it automatically afterwards (the upstream has a renewal API).",
"粘贴登录凭据": "Paste login credentials",
"粘贴的是登录 session(同时是模型网关的 token)。Loomy 没有续期接口,session 有效期约 14 天,过期后重新登录即可。": "What you paste is the login session (which is also the model gateway token). Loomy has no renewal API; the session is valid for about 14 days, so just sign in again after it expires.",
@@ -319,6 +324,7 @@
"系统浏览器打开(复用已登录的美团账号);完成后自动加入列表": "Opens in the system browser (reuses the signed-in Meituan account); added to the list when done",
"系统浏览器打开(复用已登录账号);完成后自动加入列表": "Opens in the system browser (reuses a signed-in account); added to the list when done",
"系统默认浏览器": "System default browser",
+ "续期令牌": "Refresh token",
"编码套餐 API Key": "Coding Plan API Key",
"网关 Secret": "Gateway secret",
"网页登录": "Web login",
@@ -331,6 +337,7 @@
"获取验证码": "Get code",
"访客模式": "Guest mode",
"访客模式(免登录)": "Guest mode (no sign-in)",
+ "访问令牌": "Access token",
"该上游无需鉴权(不发送鉴权头)": "This upstream needs no authentication (no auth headers are sent)",
"该提供商": "This provider",
"该提供商账号添加功能即将上线": "Account adding for this provider is coming soon",
diff --git a/desktop-tauri/i18n/i18n-src/ja/add-account.json b/desktop-tauri/i18n/i18n-src/ja/add-account.json
index 09069fed9..9bb31adc1 100644
--- a/desktop-tauri/i18n/i18n-src/ja/add-account.json
+++ b/desktop-tauri/i18n/i18n-src/ja/add-account.json
@@ -10,6 +10,7 @@
"Anthropic 兼容端点在 https://api.deepseek.com/anthropic(协议换 anthropic 时填它)": "Anthropic 互換エンドポイントは https://api.deepseek.com/anthropic です(プロトコルを anthropic に切り替えるときにこれを入力)",
"Anthropic 协议填根地址,不要带 /v1": "Anthropic プロトコルではルートアドレスを入力し、/v1 は付けないでください",
"Antigravity": "Antigravity",
+ "AtomCode": "AtomCode",
"AutoClaw 国内版": "AutoClaw 中国版",
"AutoClaw 国际版": "AutoClaw 国際版",
"BDUSS 必填;请粘贴**完整 Cookie**(Cookie 编辑器一键导出即可)—— 其中 **PTOKEN 必须保留**,网关要用它向百度换发 KukuAI 业务会话令牌,缺了它模型刷新会报「未登录」。支持整段 Cookie 头、Cookie 编辑器导出的 JSON 数组,或 {BDUSS, STOKEN} 对象。KukuAI 没有刷新机制,登录态过期后重新粘贴即可。": "BDUSS は必須です;**完全な Cookie** を貼り付けてください(Cookie エディターのワンクリック書き出しで構いません)—— このうち **PTOKEN は必ず残してください**。ゲートウェイはこれを使って Baidu から KukuAI の業務セッショントークンを発行してもらうため、欠けるとモデル更新時に「未ログイン」と表示されます。Cookie ヘッダー全体、Cookie エディターが書き出した JSON 配列、または {BDUSS, STOKEN} オブジェクトに対応しています。KukuAI には更新の仕組みがないため、ログイン状態の期限が切れたら貼り直せば済みます。",
@@ -97,6 +98,7 @@
"可选(cloudaicompanionProject):留空由网关自动发现": "任意(cloudaicompanionProject):空欄の場合はゲートウェイが自動検出します",
"可选,展示用": "任意、表示用",
"可选,没有则无法自动续期": "任意、ないと自動更新できません",
+ "可选,用于生成账号标识": "任意。アカウント識別子の生成に使用",
"可选,留空使用凭据里的 user_name": "任意、空欄の場合は認証情報の user_name を使用",
"可选,留空使用账号姓名、邮箱或令牌指纹": "任意、空欄の場合はアカウントの氏名、メールアドレス、またはトークンフィンガープリントを使用",
"可选,留空使用账号昵称或邮箱": "任意、空欄の場合はアカウントのニックネームまたはメールアドレスを使用",
@@ -112,6 +114,7 @@
"可选,留空则用账号昵称": "任意。空欄ならアカウントのニックネームを使用",
"可选,留空则用账号昵称或 userId": "任意。空欄の場合はアカウントのニックネームまたは userId を使用",
"可选,留空则用邮箱或令牌尾号": "任意、空欄の場合はメールアドレスまたはトークンの末尾を使用",
+ "可选,留空用「AtomCode」": "任意。空欄なら「AtomCode」",
"可选,留空用「OfficeAce 果办」": "任意、空欄の場合は「OfficeAce」を使用",
"可选,留空自动生成": "任意、空欄の場合は自動生成",
"可选,留空自动用昵称": "任意、空欄の場合はニックネームを自動使用",
@@ -145,6 +148,7 @@
"国际版的推理站点是 api.z.ai,与国内版不是同一站;套餐也各自独立。": "国際版の推論サイトは api.z.ai で、中国版とは別のサイトです;プランもそれぞれ独立しています。",
"国际版(WorkBuddy AI)": "国際版(WorkBuddy AI)",
"国际站 Coding 套餐;OpenAI 兼容地址为 https://api.minimax.io/v1": "国際版サイトの Coding プラン;OpenAI 互換アドレスは https://api.minimax.io/v1",
+ "在 AtomGit 的 AtomCode 页面登出后取得两项贴进来:accessToken 与 refreshToken。续期令牌建议填写——本家令牌不是 JWT(约 7 天到期,读不到过期时间),没有它账号无法自动续期,到期只能重新登录。": "AtomGit の AtomCode ページから accessToken と refreshToken の 2 つを取得して貼り付けてください。リフレッシュトークンの入力推奨 —— このプロバイダーのトークンは JWT ではなく(約 7 日で失効し、失効時刻も読み取れません)、これが無いと自動更新できず、失効後は再ログインが必要になります。",
"在 cc-switch 里找到": "cc-switch で",
"在内嵌窗口里完成官方登录,成功后自动加入账号列表。": "内蔵ウィンドウで公式ログインを完了してください。成功すると自動でアカウント一覧に追加されます。",
"在{label}的 Qoder 账号设置 → Integrations 生成 PAT(别填 Google / GitHub 的令牌)。两个地区的账号与凭证不通用。": "{label} の Qoder アカウント設定 → Integrations で PAT を生成してください(Google / GitHub のトークンは入力しないでください)。2 つの地域のアカウントと認証情報は共用できません。",
@@ -305,6 +309,7 @@
"粘贴 session cookie": "session cookie を貼り付け",
"粘贴 token / refreshToken": "token / refreshToken を貼り付け",
"粘贴 workos:… 开头的令牌(不带前缀也会自动补上)": "workos:… で始まるトークンを貼り付け(プレフィックスがなくても自動で補われます)",
+ "粘贴令牌对": "トークンペアを貼り付け",
"粘贴智谱清言的访问令牌(JWT,三段点分)。获取方式:浏览器打开 chatglm.cn 并登录后,在开发者工具的 Application → Cookies 里复制 chatglm_token 的值(也可以直接粘 chatglm_token=…; 整行)。粘贴后会先向上游校验一次,校验通过才落账号;登录账号的积分、签到能力都能用,之后由网关自动续期(上游有续期接口)。": "智谱清言のアクセストークン(3 つのドット区切り部分からなる JWT)を貼り付けてください。取得方法:ブラウザで chatglm.cn を開いてログインし、開発者ツールの Application → Cookies から chatglm_token の値をコピーします(chatglm_token=…; の行をそのまま貼っても可)。貼り付けたあと上流に対して一度検証し、通った場合のみアカウントを保存します。ログイン済みアカウントではポイントと签到の機能が使え、以降はゲートウェイが自動で更新します(上流に更新インターフェースがあります)。",
"粘贴登录凭据": "ログイン認証情報を貼り付け",
"粘贴的是登录 session(同时是模型网关的 token)。Loomy 没有续期接口,session 有效期约 14 天,过期后重新登录即可。": "貼り付けるのはログイン session です(同時にモデルゲートウェイの token でもあります)。Loomy には更新用 API がなく、session の有効期間は約 14 日です。期限切れ後は再ログインしてください。",
@@ -319,6 +324,7 @@
"系统浏览器打开(复用已登录的美团账号);完成后自动加入列表": "システムブラウザで開く(ログイン済みの Meituan アカウントを再利用);完了後は自動でリストに追加されます",
"系统浏览器打开(复用已登录账号);完成后自动加入列表": "システムブラウザで開く(ログイン済みアカウントを再利用);完了後は自動でリストに追加されます",
"系统默认浏览器": "システムの既定ブラウザ",
+ "续期令牌": "リフレッシュトークン",
"编码套餐 API Key": "コーディングプラン API Key",
"网关 Secret": "ゲートウェイシークレット",
"网页登录": "ウェブログイン",
@@ -331,6 +337,7 @@
"获取验证码": "コードを取得",
"访客模式": "ゲストモード",
"访客模式(免登录)": "ゲストモード(ログイン不要)",
+ "访问令牌": "アクセストークン",
"该上游无需鉴权(不发送鉴权头)": "このアップストリームは認証不要(認証ヘッダーを送信しません)",
"该提供商": "このプロバイダー",
"该提供商账号添加功能即将上线": "このプロバイダーのアカウント追加機能は近日公開予定です",
diff --git a/desktop-tauri/i18n/i18n-src/ko/add-account.json b/desktop-tauri/i18n/i18n-src/ko/add-account.json
index 8136ce9e9..377ce6c1c 100644
--- a/desktop-tauri/i18n/i18n-src/ko/add-account.json
+++ b/desktop-tauri/i18n/i18n-src/ko/add-account.json
@@ -10,6 +10,7 @@
"Anthropic 兼容端点在 https://api.deepseek.com/anthropic(协议换 anthropic 时填它)": "Anthropic 호환 엔드포인트는 https://api.deepseek.com/anthropic입니다 (프로토콜을 anthropic으로 바꿀 때 입력합니다)",
"Anthropic 协议填根地址,不要带 /v1": "Anthropic 프로토콜은 루트 주소를 입력하고 /v1은 붙이지 마세요",
"Antigravity": "Antigravity",
+ "AtomCode": "AtomCode",
"AutoClaw 国内版": "AutoClaw 중국판",
"AutoClaw 国际版": "AutoClaw 국제판",
"BDUSS 必填;请粘贴**完整 Cookie**(Cookie 编辑器一键导出即可)—— 其中 **PTOKEN 必须保留**,网关要用它向百度换发 KukuAI 业务会话令牌,缺了它模型刷新会报「未登录」。支持整段 Cookie 头、Cookie 编辑器导出的 JSON 数组,或 {BDUSS, STOKEN} 对象。KukuAI 没有刷新机制,登录态过期后重新粘贴即可。": "BDUSS는 필수입니다; **전체 Cookie**를 붙여넣으세요 (Cookie 편집기에서 원클릭 내보내기 가능) — 이 중 **PTOKEN은 반드시 남겨 두세요**. 게이트웨이가 이것을 사용해 Baidu에서 KukuAI 비즈니스 세션 토큰을 교환 발급받으며, 없으면 모델 갱신 시 「미로그인」 오류가 발생합니다. 전체 Cookie 헤더, Cookie 편집기에서 내보낸 JSON 배열, 또는 {BDUSS, STOKEN} 객체를 지원합니다. KukuAI에는 갱신 메커니즘이 없으므로 로그인 상태가 만료되면 다시 붙여넣으면 됩니다.",
@@ -97,6 +98,7 @@
"可选(cloudaicompanionProject):留空由网关自动发现": "선택 (cloudaicompanionProject): 비워 두면 게이트웨이가 자동으로 찾습니다",
"可选,展示用": "선택, 표시용",
"可选,没有则无法自动续期": "선택, 없으면 자동 갱신 불가",
+ "可选,用于生成账号标识": "선택 사항이며 계정 식별자 생성에 사용",
"可选,留空使用凭据里的 user_name": "선택, 비워 두면 자격 증명의 user_name 사용",
"可选,留空使用账号姓名、邮箱或令牌指纹": "선택, 비워 두면 계정 이름, 이메일 또는 토큰 지문 사용",
"可选,留空使用账号昵称或邮箱": "선택, 비워 두면 계정 닉네임 또는 이메일 사용",
@@ -112,6 +114,7 @@
"可选,留空则用账号昵称": "선택 사항. 비워 두면 계정 닉네임을 사용합니다",
"可选,留空则用账号昵称或 userId": "선택 사항. 비워 두면 계정 닉네임 또는 userId 사용",
"可选,留空则用邮箱或令牌尾号": "선택, 비워 두면 이메일 또는 토큰 끝자리 사용",
+ "可选,留空用「AtomCode」": "선택 사항이며 비워 두면 “AtomCode”",
"可选,留空用「OfficeAce 果办」": "선택, 비워 두면 「OfficeAce」 사용",
"可选,留空自动生成": "선택, 비워 두면 자동 생성",
"可选,留空自动用昵称": "선택, 비워 두면 닉네임 자동 사용",
@@ -145,6 +148,7 @@
"国际版的推理站点是 api.z.ai,与国内版不是同一站;套餐也各自独立。": "국제판의 추론 사이트는 api.z.ai이며 중국판과 다른 사이트입니다; 플랜도 각각 독립적입니다.",
"国际版(WorkBuddy AI)": "국제판 (WorkBuddy AI)",
"国际站 Coding 套餐;OpenAI 兼容地址为 https://api.minimax.io/v1": "국제 사이트 Coding 플랜; OpenAI 호환 주소는 https://api.minimax.io/v1입니다",
+ "在 AtomGit 的 AtomCode 页面登出后取得两项贴进来:accessToken 与 refreshToken。续期令牌建议填写——本家令牌不是 JWT(约 7 天到期,读不到过期时间),没有它账号无法自动续期,到期只能重新登录。": "AtomGit의 AtomCode 페이지에서 accessToken과 refreshToken 두 값을 가져와 붙여넣으세요. 리프레시 토큰 입력을 권장합니다 —— 이 제공자의 토큰은 JWT가 아니며(약 7일 후 만료되고 만료 시각을 읽을 수 없습니다), 없으면 자동 갱신이 불가능해 만료 후 다시 로그인해야 합니다.",
"在 cc-switch 里找到": "cc-switch에서 찾은",
"在内嵌窗口里完成官方登录,成功后自动加入账号列表。": "내장 창에서 공식 로그인을 완료하면 성공 시 자동으로 계정 목록에 추가됩니다.",
"在{label}的 Qoder 账号设置 → Integrations 生成 PAT(别填 Google / GitHub 的令牌)。两个地区的账号与凭证不通用。": "{label}의 Qoder 계정 설정 → Integrations에서 PAT를 생성하세요 (Google / GitHub 토큰을 입력하지 마세요). 두 지역의 계정과 자격 증명은 호환되지 않습니다.",
@@ -305,6 +309,7 @@
"粘贴 session cookie": "session cookie 붙여넣기",
"粘贴 token / refreshToken": "token / refreshToken 붙여넣기",
"粘贴 workos:… 开头的令牌(不带前缀也会自动补上)": "workos:…로 시작하는 토큰 붙여넣기 (접두사가 없어도 자동으로 붙습니다)",
+ "粘贴令牌对": "토큰 쌍 붙여넣기",
"粘贴智谱清言的访问令牌(JWT,三段点分)。获取方式:浏览器打开 chatglm.cn 并登录后,在开发者工具的 Application → Cookies 里复制 chatglm_token 的值(也可以直接粘 chatglm_token=…; 整行)。粘贴后会先向上游校验一次,校验通过才落账号;登录账号的积分、签到能力都能用,之后由网关自动续期(上游有续期接口)。": "智谱清言 액세스 토큰(점 3개로 구분된 JWT)을 붙여넣으세요. 발급 방법: 브라우저에서 chatglm.cn을 열고 로그인한 뒤 개발자 도구의 Application → Cookies에서 chatglm_token 값을 복사합니다(chatglm_token=…; 줄을 그대로 붙여도 됩니다). 붙여넣은 뒤 업스트림에 한 번 검증하며, 통과한 경우에만 계정을 저장합니다. 로그인된 계정은 포인트와 签到 기능을 쓸 수 있고, 이후 게이트웨이가 자동으로 갱신합니다(업스트림에 갱신 인터페이스가 있습니다).",
"粘贴登录凭据": "로그인 자격 증명 붙여넣기",
"粘贴的是登录 session(同时是模型网关的 token)。Loomy 没有续期接口,session 有效期约 14 天,过期后重新登录即可。": "붙여넣는 것은 로그인 session입니다 (동시에 모델 게이트웨이의 token입니다). Loomy에는 갱신 인터페이스가 없으며 session 유효 기간은 약 14일이므로, 만료되면 다시 로그인하면 됩니다.",
@@ -319,6 +324,7 @@
"系统浏览器打开(复用已登录的美团账号);完成后自动加入列表": "시스템 브라우저로 엽니다 (로그인된 Meituan 계정 재사용); 완료하면 자동으로 목록에 추가됩니다",
"系统浏览器打开(复用已登录账号);完成后自动加入列表": "시스템 브라우저로 엽니다 (로그인된 계정 재사용); 완료하면 자동으로 목록에 추가됩니다",
"系统默认浏览器": "시스템 기본 브라우저",
+ "续期令牌": "리프레시 토큰",
"编码套餐 API Key": "코딩 플랜 API Key",
"网关 Secret": "게이트웨이 시크릿",
"网页登录": "웹 로그인",
@@ -331,6 +337,7 @@
"获取验证码": "코드 받기",
"访客模式": "게스트 모드",
"访客模式(免登录)": "게스트 모드(로그인 불필요)",
+ "访问令牌": "액세스 토큰",
"该上游无需鉴权(不发送鉴权头)": "이 업스트림은 인증이 필요하지 않음 (인증 헤더를 보내지 않음)",
"该提供商": "이 제공자",
"该提供商账号添加功能即将上线": "이 제공자의 계정 추가 기능이 곧 출시됩니다",
diff --git a/desktop-tauri/i18n/i18n-src/pt-BR/add-account.json b/desktop-tauri/i18n/i18n-src/pt-BR/add-account.json
index 0c3064b4f..aebf7034d 100644
--- a/desktop-tauri/i18n/i18n-src/pt-BR/add-account.json
+++ b/desktop-tauri/i18n/i18n-src/pt-BR/add-account.json
@@ -10,6 +10,7 @@
"Anthropic 兼容端点在 https://api.deepseek.com/anthropic(协议换 anthropic 时填它)": "O endpoint compatível com Anthropic é https://api.deepseek.com/anthropic (preencha-o ao trocar o protocolo para anthropic)",
"Anthropic 协议填根地址,不要带 /v1": "No protocolo Anthropic, preencha o endereço raiz, sem /v1",
"Antigravity": "Antigravity",
+ "AtomCode": "AtomCode",
"AutoClaw 国内版": "AutoClaw edição da China",
"AutoClaw 国际版": "AutoClaw edição internacional",
"BDUSS 必填;请粘贴**完整 Cookie**(Cookie 编辑器一键导出即可)—— 其中 **PTOKEN 必须保留**,网关要用它向百度换发 KukuAI 业务会话令牌,缺了它模型刷新会报「未登录」。支持整段 Cookie 头、Cookie 编辑器导出的 JSON 数组,或 {BDUSS, STOKEN} 对象。KukuAI 没有刷新机制,登录态过期后重新粘贴即可。": "BDUSS é obrigatório; cole o **Cookie completo** (um editor de Cookie exporta com um clique) — o **PTOKEN deve ser mantido**, pois o gateway o usa para trocar com o Baidu por um token de sessão de negócio do KukuAI; sem ele, a atualização de modelos reporta \"não conectado\". São aceitos o cabeçalho Cookie inteiro, um array JSON exportado por um editor de Cookie, ou um objeto {BDUSS, STOKEN}. O KukuAI não tem mecanismo de atualização; quando a sessão de login expirar, basta colar de novo.",
@@ -97,6 +98,7 @@
"可选(cloudaicompanionProject):留空由网关自动发现": "Opcional (cloudaicompanionProject); se vazio, o gateway descobre automaticamente",
"可选,展示用": "Opcional, para exibição",
"可选,没有则无法自动续期": "Opcional; sem ele, não é possível renovar automaticamente",
+ "可选,用于生成账号标识": "Opcional; usado para gerar o identificador da conta",
"可选,留空使用凭据里的 user_name": "Opcional; se vazio, usa o user_name da credencial",
"可选,留空使用账号姓名、邮箱或令牌指纹": "Opcional; se vazio, usa o nome, o e-mail ou a impressão digital do token",
"可选,留空使用账号昵称或邮箱": "Opcional; se vazio, usa o apelido ou o e-mail da conta",
@@ -112,6 +114,7 @@
"可选,留空则用账号昵称": "Opcional; em branco usa o apelido da conta",
"可选,留空则用账号昵称或 userId": "Opcional; deixe em branco para usar o apelido da conta ou o userId",
"可选,留空则用邮箱或令牌尾号": "Opcional; se vazio, usa o e-mail ou o final do token",
+ "可选,留空用「AtomCode」": "Opcional; padrão “AtomCode”",
"可选,留空用「OfficeAce 果办」": "Opcional; se vazio, usa “OfficeAce”",
"可选,留空自动生成": "Opcional; se vazio, gerado automaticamente",
"可选,留空自动用昵称": "Opcional; se vazio, usa o apelido",
@@ -145,6 +148,7 @@
"国际版的推理站点是 api.z.ai,与国内版不是同一站;套餐也各自独立。": "O site de inferência da edição internacional é api.z.ai, diferente do site da edição da China; os planos também são independentes.",
"国际版(WorkBuddy AI)": "Edição internacional (WorkBuddy AI)",
"国际站 Coding 套餐;OpenAI 兼容地址为 https://api.minimax.io/v1": "Plano Coding do site internacional; o endereço compatível com OpenAI é https://api.minimax.io/v1",
+ "在 AtomGit 的 AtomCode 页面登出后取得两项贴进来:accessToken 与 refreshToken。续期令牌建议填写——本家令牌不是 JWT(约 7 天到期,读不到过期时间),没有它账号无法自动续期,到期只能重新登录。": "Obtenha os dois valores na página do AtomCode no AtomGit: accessToken e refreshToken. O refresh token é fortemente recomendado — o token deste provedor não é um JWT (expira em cerca de 7 dias e não traz expiração legível); sem ele a conta não consegue se renovar e precisará ser autorizada de novo ao expirar.",
"在 cc-switch 里找到": "Encontradas",
"在内嵌窗口里完成官方登录,成功后自动加入账号列表。": "Conclua o login oficial na janela embutida; em caso de sucesso, a conta entra automaticamente na lista de contas.",
"在{label}的 Qoder 账号设置 → Integrations 生成 PAT(别填 Google / GitHub 的令牌)。两个地区的账号与凭证不通用。": "Gere um PAT nas configurações da conta Qoder do {label} → Integrations (não use um token do Google / GitHub). Contas e credenciais não são compartilhadas entre as duas regiões.",
@@ -305,6 +309,7 @@
"粘贴 session cookie": "Colar session cookie",
"粘贴 token / refreshToken": "Colar token / refreshToken",
"粘贴 workos:… 开头的令牌(不带前缀也会自动补上)": "Cole um token começando com workos:… (o prefixo é adicionado automaticamente se faltar)",
+ "粘贴令牌对": "Colar par de tokens",
"粘贴智谱清言的访问令牌(JWT,三段点分)。获取方式:浏览器打开 chatglm.cn 并登录后,在开发者工具的 Application → Cookies 里复制 chatglm_token 的值(也可以直接粘 chatglm_token=…; 整行)。粘贴后会先向上游校验一次,校验通过才落账号;登录账号的积分、签到能力都能用,之后由网关自动续期(上游有续期接口)。": "Cole um token de acesso do Zhipu Qingyan (um JWT com três partes separadas por ponto). Como obter: abra chatglm.cn no navegador, faça login e copie o valor do cookie chatglm_token em Application → Cookies nas ferramentas de desenvolvedor (colar a linha chatglm_token=…; inteira também funciona). O token é verificado uma vez na origem após a colagem, e a conta só é salva se passar; contas conectadas têm pontos e check-in, e o gateway renova automaticamente depois (a origem tem API de renovação).",
"粘贴登录凭据": "Colar credenciais de login",
"粘贴的是登录 session(同时是模型网关的 token)。Loomy 没有续期接口,session 有效期约 14 天,过期后重新登录即可。": "O que você cola é a sessão de login (que também é o token do gateway de modelos). O Loomy não tem API de renovação; a sessão vale cerca de 14 dias, então basta entrar de novo após expirar.",
@@ -319,6 +324,7 @@
"系统浏览器打开(复用已登录的美团账号);完成后自动加入列表": "Abre no navegador do sistema (reaproveita a conta Meituan já conectada); ao concluir, entra automaticamente na lista",
"系统浏览器打开(复用已登录账号);完成后自动加入列表": "Abre no navegador do sistema (reaproveita a conta já conectada); ao concluir, entra automaticamente na lista",
"系统默认浏览器": "Navegador padrão do sistema",
+ "续期令牌": "Token de atualização",
"编码套餐 API Key": "API Key do Coding Plan",
"网关 Secret": "Segredo do gateway",
"网页登录": "Login web",
@@ -331,6 +337,7 @@
"获取验证码": "Obter código",
"访客模式": "Modo visitante",
"访客模式(免登录)": "Modo visitante (sem login)",
+ "访问令牌": "Token de acesso",
"该上游无需鉴权(不发送鉴权头)": "Este upstream não exige autenticação (nenhum cabeçalho de autenticação é enviado)",
"该提供商": "Este provedor",
"该提供商账号添加功能即将上线": "A adição de contas deste provedor chega em breve",
diff --git a/desktop-tauri/i18n/i18n-src/zh-Hant/add-account.json b/desktop-tauri/i18n/i18n-src/zh-Hant/add-account.json
index 5a2b843a8..98485bfab 100644
--- a/desktop-tauri/i18n/i18n-src/zh-Hant/add-account.json
+++ b/desktop-tauri/i18n/i18n-src/zh-Hant/add-account.json
@@ -10,6 +10,7 @@
"Anthropic 兼容端点在 https://api.deepseek.com/anthropic(协议换 anthropic 时填它)": "",
"Anthropic 协议填根地址,不要带 /v1": "",
"Antigravity": "",
+ "AtomCode": "AtomCode",
"AutoClaw 国内版": "",
"AutoClaw 国际版": "",
"BDUSS 必填;请粘贴**完整 Cookie**(Cookie 编辑器一键导出即可)—— 其中 **PTOKEN 必须保留**,网关要用它向百度换发 KukuAI 业务会话令牌,缺了它模型刷新会报「未登录」。支持整段 Cookie 头、Cookie 编辑器导出的 JSON 数组,或 {BDUSS, STOKEN} 对象。KukuAI 没有刷新机制,登录态过期后重新粘贴即可。": "",
@@ -97,6 +98,7 @@
"可选(cloudaicompanionProject):留空由网关自动发现": "",
"可选,展示用": "",
"可选,没有则无法自动续期": "",
+ "可选,用于生成账号标识": "選填,用於產生帳號識別碼",
"可选,留空使用凭据里的 user_name": "",
"可选,留空使用账号姓名、邮箱或令牌指纹": "",
"可选,留空使用账号昵称或邮箱": "",
@@ -112,6 +114,7 @@
"可选,留空则用账号昵称": "",
"可选,留空则用账号昵称或 userId": "",
"可选,留空则用邮箱或令牌尾号": "",
+ "可选,留空用「AtomCode」": "選填,留空用「AtomCode」",
"可选,留空用「OfficeAce 果办」": "",
"可选,留空自动生成": "",
"可选,留空自动用昵称": "",
@@ -145,6 +148,7 @@
"国际版的推理站点是 api.z.ai,与国内版不是同一站;套餐也各自独立。": "",
"国际版(WorkBuddy AI)": "",
"国际站 Coding 套餐;OpenAI 兼容地址为 https://api.minimax.io/v1": "",
+ "在 AtomGit 的 AtomCode 页面登出后取得两项贴进来:accessToken 与 refreshToken。续期令牌建议填写——本家令牌不是 JWT(约 7 天到期,读不到过期时间),没有它账号无法自动续期,到期只能重新登录。": "在 AtomGit 的 AtomCode 頁面取得兩項貼進來:accessToken 與 refreshToken。續期權杖建議填寫——本家權杖不是 JWT(約 7 天到期,讀不到到期時間),沒有它帳號無法自動續期,到期只能重新登入。",
"在 cc-switch 里找到": "",
"在内嵌窗口里完成官方登录,成功后自动加入账号列表。": "",
"在{label}的 Qoder 账号设置 → Integrations 生成 PAT(别填 Google / GitHub 的令牌)。两个地区的账号与凭证不通用。": "",
@@ -305,6 +309,7 @@
"粘贴 session cookie": "",
"粘贴 token / refreshToken": "",
"粘贴 workos:… 开头的令牌(不带前缀也会自动补上)": "",
+ "粘贴令牌对": "貼上權杖對",
"粘贴智谱清言的访问令牌(JWT,三段点分)。获取方式:浏览器打开 chatglm.cn 并登录后,在开发者工具的 Application → Cookies 里复制 chatglm_token 的值(也可以直接粘 chatglm_token=…; 整行)。粘贴后会先向上游校验一次,校验通过才落账号;登录账号的积分、签到能力都能用,之后由网关自动续期(上游有续期接口)。": "",
"粘贴登录凭据": "",
"粘贴的是登录 session(同时是模型网关的 token)。Loomy 没有续期接口,session 有效期约 14 天,过期后重新登录即可。": "",
@@ -319,6 +324,7 @@
"系统浏览器打开(复用已登录的美团账号);完成后自动加入列表": "",
"系统浏览器打开(复用已登录账号);完成后自动加入列表": "",
"系统默认浏览器": "",
+ "续期令牌": "續期權杖",
"编码套餐 API Key": "",
"网关 Secret": "",
"网页登录": "",
@@ -331,6 +337,7 @@
"获取验证码": "",
"访客模式": "",
"访客模式(免登录)": "",
+ "访问令牌": "存取權杖",
"该上游无需鉴权(不发送鉴权头)": "",
"该提供商": "",
"该提供商账号添加功能即将上线": "",
diff --git a/desktop-tauri/src-tauri/server/src/server/api/accounts.rs b/desktop-tauri/src-tauri/server/src/server/api/accounts.rs
index 02e887427..5df7f530b 100644
--- a/desktop-tauri/src-tauri/server/src/server/api/accounts.rs
+++ b/desktop-tauri/src-tauri/server/src/server/api/accounts.rs
@@ -1107,7 +1107,7 @@ pub async fn add_account(state: &ServerState, body: &Bytes) -> Response {
// 面板传来的名字是用户自己打的 ⇒ 标 custom(此后续期/重登不改它)
store.add_officeace_account(&payload, import_name, true)
}
- // OrcaTerm(腾讯云遨驰终端桌面客户端):**粘贴 accessToken**(OAuth JWT)
+// OrcaTerm(腾讯云遨驰终端桌面客户端):**粘贴 accessToken**(OAuth JWT)
// → 本地归一化(剥 `Bearer ` / `ot_session=` 前缀;整段 data.bin JSON
// 直接粘也行)→ 打一次 `GetUserInfo` 做**真实校验**(顺带补 userId 与
// 昵称;JWT 里本来就有 userId,这一步同时确认 token 没被上游拒绝)→
@@ -1285,6 +1285,14 @@ pub async fn add_account(state: &ServerState, body: &Bytes) -> Response {
"manual"
},
)
+ // AtomCode(AtomGit / GitCode):粘贴令牌对(accessToken + refreshToken)。
+ // **不调上游**(与 CodeArts / OfficeAce 同口径)——令牌是浏览器登录换来的,
+ // 添加时没有可交换的授权码;目录与连通性由刷新链路验。
+ // ⚠️ refreshToken 强烈建议给:没有它账号无法自动续期(本家的令牌不是 JWT,
+ // 7 天到期后只能重新登录),见 `providers::atomcode::credentials` 的模块头。
+ Some(crate::server::core::providers::ProviderKind::Atomcode) => {
+ // 面板传来的名字是用户自己打的 ⇒ 标 custom(此后续期/重登不改它)
+ store.add_atomcode_account(&payload, import_name)
}
// WorkBuddy 系的两家(国内版 / 国际版):同一套凭证形态与落账号路径,
// 差别只有归属 —— provider id 自己就是归属(拆家后不再从 payload 里的
@@ -1563,6 +1571,13 @@ pub async fn refresh_account(state: &ServerState, body: &Bytes) -> Response {
if state.store().officeace_account_record(&id).is_some() {
return refresh_provider_account(state, &id, ProviderKind::OfficeAce).await;
}
+ // AtomCode:续期走它自己的适配器(`POST {broker}/oauth/refresh`,**会轮换**
+ // refresh token,且必须单飞 + 写回)。**这条不能省**:漏了就落到 workbuddy
+ // 兜底链路,用户点「刷新 Token」收到的是腾讯那侧的错(与 CodeArts/Trae/
+ // OfficeAce 同一条理由),而 AtomGit 的令牌会因此悄悄过期到只能重新登录。
+ if state.store().atomcode_account_record(&id).is_some() {
+ return refresh_provider_account(state, &id, ProviderKind::Atomcode).await;
+ }
// Accio(两个地区):走适配器的强制刷新(`POST /api/auth/refresh_token`,
// 结果按「比较再写」回写)。两个地区各查一次 —— 账号集合按 provider 隔离,
// 同一 id 不可能同时属于两家(撞 id 在存储层就报错了)。
diff --git a/desktop-tauri/src-tauri/server/src/server/core/account_store/atomcode_accounts.rs b/desktop-tauri/src-tauri/server/src/server/core/account_store/atomcode_accounts.rs
new file mode 100644
index 000000000..092cc8ba3
--- /dev/null
+++ b/desktop-tauri/src-tauri/server/src/server/core/account_store/atomcode_accounts.rs
@@ -0,0 +1,333 @@
+//! AtomCode 账号:粘贴凭据落账号、刷新回写、公开形态。
+//!
+//! ── 账号字段 ────────────────────────────────────────────────
+//! ```text
+//! 本项目记录:{ id, provider:"atomcode", name, userId, username, accessToken,
+//! refreshToken, tokenTail, expiresAt, addedAt, updatedAt,
+//! source, priority, enabled }
+//! 代理令牌包: { access_token, refresh_token, token_type, expires_in, user:{id,…} }
+//! ```
+//! `accessToken` / `refreshToken` 键名与别家统一(`update_account_tokens` 一族
+//! 认这两个键,见 `store_admin.rs`),粘贴形态另外兼容官方 `auth.toml` 的
+//! 下划线拼法(`access_token` / `refresh_token`)。
+//!
+//! ── 与别家添加路径的关系 ────────────────────────────────────
+//! - **粘贴凭据**:`api::accounts::add_account` 的 atomcode 分支(唯一的入口,
+//! 在此之前界面上的「浏览器登录」尚未接壳侧,见 `providers::atomcode` 模块头);
+//! - **刷新回写**:不走本文件 —— 走通用的
+//! `AccountStore::update_account_tokens`(`providers::atomcode::mod` 的
+//! `refresh_and_save` 调它)。
+//!
+//! 本文件全是「读-改-写」文件操作,**没有任何网络请求**(持锁不做网络)。
+//! 绝不 unwrap/expect(release 是 panic=abort)。
+
+use serde_json::{Map, Value};
+
+use crate::server::core::account_store::priority::next_free_priority;
+use crate::server::core::account_store::sql;
+use crate::server::core::account_store::state::{mark_name_custom, StoredAccount};
+use crate::server::core::account_store::{ATOMCODE_PROVIDER_ID, AccountStore, AccountStoreError};
+use crate::server::logging;
+
+use crate::server::core::providers::atomcode::credentials;
+
+/// 备注名长度上限(与别家同一口径)
+const MAX_NAME_LENGTH: usize = 100;
+
+/// 身份字段(userId / username)长度上限
+const MAX_IDENTITY_LENGTH: usize = 256;
+
+/// 令牌长度上限(超过这个长度的输入一定是粘错了东西)
+const MAX_TOKEN_LENGTH: usize = 8192;
+
+/// 截断到 `max` 个**字符**(不是字节;用户名可能有中文)
+fn truncate_chars(value: &str, max: usize) -> String {
+ if value.chars().count() <= max {
+ return value.to_string();
+ }
+ value.chars().take(max).collect()
+}
+
+/// 从一条取值链里挑第一个非空字符串
+fn pick(payload: &Value, keys: &[&str]) -> String {
+ for key in keys {
+ let value = payload
+ .get(*key)
+ .and_then(Value::as_str)
+ .map(str::trim)
+ .unwrap_or("");
+ if !value.is_empty() {
+ return value.to_string();
+ }
+ }
+ String::new()
+}
+
+/// 从一条取值链里挑第一个正数
+fn pick_i64(payload: &Value, keys: &[&str]) -> i64 {
+ for key in keys {
+ if let Some(value) = payload.get(*key).and_then(Value::as_i64) {
+ if value > 0 {
+ return value;
+ }
+ }
+ }
+ 0
+}
+
+impl AccountStore {
+ /// 取一条 AtomCode 账号记录(公开形态的原始 JSON)。
+ ///
+ /// `account_id` 非空 → 按 id 直查(不属于本家返回 None);
+ /// 为空 → 本家**启用中**账号里优先级最靠前的一条(转发默认用队首账号)。
+ pub fn atomcode_account_record(&self, account_id: &str) -> Option