/** * `~/.claude.json` の `oauthAccount` セクション同期 helper。 * * Claude Code CLI v2.1.150 は、`CLAUDE_CODE_OAUTH_TOKEN` env を渡しても * 対話モード (TTY) 起動時に `~/.claude.json` の `oauthAccount` キーが * 存在しないと `/login` プロンプトを出す。 * * 実機検証で「`oauthAccount: {}` (空オブジェクト) が `~/.claude.json` に * 存在していれば対話モードでも認証通過する」ことが判明している * (claude auth status が `{"loggedIn": true, "authMethod": "oauth_token"}` を返す)。 * * agent は PTY / code-server を spawn する前にこの helper を呼び、 * envVarsOverride に `CLAUDE_CODE_OAUTH_TOKEN` が含まれていれば * `~/.claude.json` の `oauthAccount` キーを確保する。 * * 設計上の注意: * * - `~/.claude.json` はホスト/コンテナで volume mount 共有されているケースが * 多い (mbc-ai-01 では複数プロジェクトコンテナが同一ファイルを参照)。 * 並列 spawn による lost-update を防ぐため、`O_CREAT|O_EXCL` lockfile * 方式で排他制御する。 * - atomic write: 一時ファイルに書き込んでから rename で置換する。 * 書き込み途中で kill されても破損ファイルが残らない。 * - mode 0o600 を明示的に chmod する。`writeFileSync` の mode は * 既存ファイルには適用されない Node.js 仕様への対策。 * - 既存 `oauthAccount` が **オブジェクト型** の場合のみ温存する。 * `false`/`""`/`0`/`[]`/`null` 等の不正値は再生成対象とする。 */ /** * envVarsOverride(Web 設定 CLAUDE_CODE# / ENV# 経由)と processEnvToken * (`process.env.CLAUDE_CODE_OAUTH_TOKEN`。`linux-service.ts` 等の * `docker run -e CLAUDE_CODE_OAUTH_TOKEN=` 経由で渡る)のどちらから * トークンを採用するかを解決する。envVarsOverride が優先。 * * トークン解決ロジックを独立させているのは、`ensureClaudeJsonOAuthAccount` * の書き込み結果(~/.claude.json)だけからは、どちらのソースが実際に * 採用されたかを直接観測できない(結果は常に同じ `oauthAccount: {}` になる) * ため。優先順位(`??` の分岐)自体を単体でテスト可能にする。 */ export declare function resolveOAuthToken(envVarsOverride: Record | undefined, processEnvToken: string | undefined): string | undefined; /** * envVarsOverride または process.env に `CLAUDE_CODE_OAUTH_TOKEN` が含まれていれば、 * `~/.claude.json` を以下の状態にする: * * 1. `oauthAccount` キー(オブジェクト)を存在させる * 2. `hasCompletedOnboarding: true` を設定 * 3. `lastOnboardingVersion` に claude CLI の実バージョンを設定 * * 1 だけでは対話 (TTY) モードで claude が "Select login method:" を出す。 * 2 + 3 を加えることで onboarding wizard を完全にスキップし、 * `CLAUDE_CODE_OAUTH_TOKEN` env だけで対話 REPL が起動する。 * * 動作詳細: * - 有効なトークンが (resolveOAuthToken 経由で) 見つからない場合は何もしない * - 並列 spawn での lost update を防ぐため lockfile で排他 * - `~/.claude.json` が存在しない or 破損している場合は最小限の JSON で新規作成 * (破損時は `.claude.json.broken-` にバックアップを残す) * - トップレベルが object でない場合 (配列/プリミティブ) は corrupted 扱い * - 既に 3 つすべて有効な値で揃っていれば変更しない (no-op、mtime も変化しない) * - 不足キーのみを追加し、既存の正規メタデータ (実 OAuth login 由来の * accountUuid 等) は温存 * - atomic write + 明示的 chmod 0o600 * * 失敗は warn してスキップ(spawn 自体は止めない)。 */ export declare function ensureClaudeJsonOAuthAccount(envVarsOverride: Record | undefined, ctx: { prefix: string; }): void; //# sourceMappingURL=claude-json-oauth-sync.d.ts.map