跳轉到主要內容
這些語意讓選取時與執行階段的驗證行為保持一致。它們由下列項目共用:
  • resolveAuthProfileOrder(設定檔排序)
  • resolveApiKeyForProfile(執行階段憑證解析)
  • openclaw models status --probe
  • openclaw doctor 驗證檢查(doctor-auth

穩定的探測原因代碼

探測結果會帶有 status 分類(okauthrate_limitbillingtimeoutformatunknownno_model),並在探測從未到達模型呼叫時帶有穩定的 reasonCode
reasonCode含義
excluded_by_auth_order設定檔已從其提供者的明確驗證順序中省略。
missing_credential未設定內嵌憑證或 SecretRef。
expired權杖 expires 已過期。
invalid_expiresexpires 不是有效的正數 Unix 毫秒時間戳記。
unresolved_ref無法解析已設定的 SecretRef。
ineligible_profile設定檔與提供者設定不相容(包括格式錯誤的金鑰輸入)。
no_model憑證存在,但沒有解析出可探測的模型候選項。
資格檢查會對可用憑證回報 ok 作為原因代碼。

權杖憑證

權杖憑證(type: "token")支援內嵌的 token 和/或 tokenRef

資格規則

  1. tokentokenRef 都不存在時,權杖設定檔不符合資格(missing_credential)。
  2. expires 是選用的。若存在,它必須是大於 0,且不大於 JavaScript Date 時間戳記上限(8640000000000000)的有限 Unix epoch 毫秒數。
  3. 如果 expires 無效(類型錯誤、NaN0、負數、非有限值,或超過該上限),設定檔會因 invalid_expires 而不符合資格。
  4. 如果 expires 在過去,設定檔會因 expired 而不符合資格。
  5. tokenRef 不會略過 expires 驗證。

解析規則

  1. 解析器對 expires 的語意與資格語意相符。
  2. 對於符合資格的設定檔,權杖素材可以從內嵌值或 tokenRef 解析。
  3. 無法解析的參照會在 models status --probe 輸出中產生 unresolved_ref

代理程式副本可攜性

代理程式驗證繼承是讀穿式的。當代理程式沒有本機設定檔時,它會在執行階段從預設/主要代理程式儲存區解析設定檔,而不會將祕密素材複製到自己的憑證儲存區(agents/<agentId>/agent/openclaw-agent.sqlite)。 明確的複製流程,例如 openclaw agents add,會使用此可攜性政策:
  • api_keytoken 設定檔可攜,除非 copyToAgents: false
  • oauth 設定檔預設不可攜,因為重新整理權杖可能是一次性使用或對輪替敏感。
  • 提供者擁有的 OAuth 流程只有在已知跨代理程式複製重新整理素材安全時,才能使用 copyToAgents: true 選擇加入;此選擇加入僅在設定檔帶有內嵌存取/重新整理素材時適用。
不可攜的設定檔仍可透過讀穿式繼承使用,除非目標代理程式另行登入並建立自己的本機設定檔。

僅設定驗證路由

含有 mode: "aws-sdk"auth.profiles 項目是路由中繼資料,而非已儲存的憑證。當目標提供者使用 models.providers.<id>.auth: "aws-sdk" 時,它們有效;這是外掛擁有的 Amazon Bedrock 設定所寫入的路由。即使憑證儲存區中沒有相符項目,這些設定檔 ID 也可能出現在 auth.order 和工作階段覆寫中。 不要將 type: "aws-sdk" 寫入憑證儲存區;已儲存的憑證只能是 api_keytokenoauth。如果舊版 auth-profiles.json 有這類標記,openclaw doctor --fix 會將它移至 auth.profiles,並從儲存區移除該標記。

明確驗證順序篩選

  • 當為提供者設定 auth.order.<provider> 或驗證儲存區順序覆寫時,models status --probe 只會探測仍留在該提供者已解析驗證順序中的設定檔 ID。已儲存的覆寫優先於 auth.order 設定。
  • 該提供者的已儲存設定檔若從明確順序中省略,之後不會被靜默嘗試。探測輸出會以 reasonCode: excluded_by_auth_order 和詳細資訊 Excluded by auth.order for this provider. 回報它。

探測目標解析

  • 探測目標可來自驗證設定檔、環境憑證或 models.json(結果 sourceprofileenvmodels.json)。
  • 如果提供者有憑證,但 OpenClaw 無法為其解析出可探測的模型候選項,models status --probe 會以 reasonCode: no_model 回報 status: no_model

外部命令列介面憑證探索

  • 由外部命令列介面擁有的僅執行階段憑證(Claude CLI 對應 claude-cli、Codex CLI 對應 openai、MiniMax CLI 對應 minimax-portal),只會在提供者、執行階段或驗證設定檔位於目前操作範圍內時,或該外部來源已有已儲存的本機設定檔時被探索。
  • 驗證儲存區呼叫端會選擇明確的外部命令列介面探索模式:none 表示僅限持久化/外掛驗證,existing 表示重新整理已儲存的外部命令列介面設定檔,或 scoped 表示具體的提供者/設定檔集合。
  • 唯讀/狀態路徑會傳遞 allowKeychainPrompt: false;它們只使用檔案支援的外部命令列介面憑證,且不讀取或重用 macOS Keychain 結果。

OAuth SecretRef 政策防護

SecretRef 輸入僅用於靜態憑證。OAuth 憑證可在執行階段變動(重新整理流程會持久化輪替後的權杖),因此 SecretRef 支援的 OAuth 素材會讓可變狀態分散到多個儲存區。
  • 如果設定檔憑證是 type: "oauth",該設定檔上任何憑證素材欄位都會拒絕 SecretRef 物件。
  • 如果 auth.profiles.<id>.mode"oauth",該設定檔會拒絕 SecretRef 支援的 keyRef/tokenRef 輸入。
  • 違規會在啟動/重新載入祕密準備與設定檔解析路徑中成為硬性失敗(拋出錯誤)。

舊版相容訊息

為了指令碼相容性,探測錯誤會保持這第一行不變: Auth profile credentials are missing or expired. 便於人類閱讀的詳細資訊與穩定原因代碼會在後續行以 ↳ Auth reason [code]: ... 形式呈現。

相關