Skip to main content

arkor loginarkor logoutarkor whoami

~/.arkor/credentials.json を読み書きするだけの 3 つの短いコマンドです。いずれも .arkor/state.json には触りません。匿名ワークスペースでは、スコープを必要とする最初の呼び出し(trainer.start()、ベースモデル推論、Studio の Endpoints ページからの初回 *.arkor.app deployment 作成)でランタイムがプロジェクトルーティングを自動作成します。OAuth ワークスペースではこれらの呼び出しの前に .arkor/state.json が存在している必要があります。今のところ arkor loginarkor init もこれを作らないので、現実的な手段は { orgSlug, projectSlug, projectId } を手で書くことです。状態ファイルが無くてランタイムがエラーを返した場合、このフォールバックを案内します。

arkor login

マネージドバックエンドにサインインします。フラグなしの場合、CLI は Arkor Cloud の OAuth と匿名セッションのどちらを使うかを対話的に尋ねます。対話セレクターの初期選択は Anonymous なので、デフォルトを受け入れる(あるいは非 TTY にパイプする)と匿名フローに進みます。OAuth が走るのは明示的に選択するか --oauth を渡したときだけです。

概要

オプション

振る舞い

  1. CLI はクラウド API の /v1/auth/cli/config を呼んでデプロイの OAuth 設定を読みます。
  2. --anonymous が渡されたら、/v1/auth/anonymous から匿名トークンを要求し、mode: "anon"~/.arkor/credentials.json に書きます。
  3. --oauth が渡された場合、ピッカーをスキップして直接 OAuth フローへ。
  4. フラグが渡されない場合、対話ピッカー(OAuth (browser) / Anonymous)を表示し Anonymous が事前選択されます。デフォルトを受け入れる(プロンプトがブロッキングしない非対話的な場面でも同様)と匿名フローが走り、OAuth を選ぶと OAuth フローが走ります。
  5. OAuth フローは PKCE ペアを生成し、クラウド API から提供されたコールバックポートのいずれかでループバック HTTP サーバーを起動して、authorize URL を開き(または表示し)、コールバックを待ちます。コードをトークンに交換する前に state を検証し、不一致は CSRF 防止のため Abort されます。得られた OAuth トークンは mode: "oauth"~/.arkor/credentials.json に書かれます。
ループバックサーバーは finally ブロックで閉じられるので、login が失敗してもサーバーは残りません。

匿名モードを 1 段落で

匿名認証は、アカウントなしで Arkor を試すためのものです。学習、ジョブ、その他の作業は匿名トークンを介してローカルに紐づきます。あとで OAuth に切り替える(arkor login --oauth、またはピッカーから OAuth (browser) を選ぶ)と認証情報ファイルは差し替えられますが、作業は移行されません。匿名で学習したものを残したいなら、学習を始める前に arkor login --oauth を走らせてください。

匿名発行時の出力

どちらの匿名フローでも、新しい anonymousId と「この id によって Arkor Cloud がセッションをまたいでクライアントを識別する」旨の説明を必ず表示します。ただし出力の形は入口によって異なります。arkor login--anonymous フラグまたはピッカー → Anonymous)は進捗インジケーターの停止行として Anonymous id: <id> を出し、続けて「認証情報ファイル(credentialsPath()、Linux と macOS では通常 ~/.arkor/credentials.json)を保持していれば同じ ID を維持できる」旨の info 行を別行で出します。arkor dev の自動初期化は進捗インジケーターを使わず、id と同じ説明を 1 本の info 行にまとめて出します。ピッカー → Anonymous のフローでは、さらに成功メッセージと並んで 1 行の warn(Anonymous sessions aren't guaranteed to persist. Sign in with `arkor login --oauth` to tie future work to your Arkor Cloud account.、和訳: 匿名セッションは永続性が保証されないので、今後の作業を Arkor Cloud アカウントに紐付けたいなら arkor login --oauth でサインインしてください)が出るので、発行時点でアップグレードのヒントが見えます。明示的な --anonymous ショートカットでは /v1/auth/cli/config の取得をスキップしているため arkor login --oauth がそのデプロイで成功するかわからず、稀に存在する匿名専用デプロイで失敗するコマンドへユーザーを誘導しないよう、warn は意図的に抑制されます。

arkor logout

確認後に ~/.arkor/credentials.json を削除します。確認プロンプトのデフォルトは No です。 匿名認証情報の場合、認証情報ファイルを自分でバックアップしていない限り、logout は元に戻せません。削除すると、その匿名 ID のローカルトークンが失われ、次の匿名ログインでは新しい anonymousId が作られます。OAuth 認証情報は arkor login --oauth を再実行すれば作り直せます。 arkor logout はプロジェクトローカルの .arkor/state.json には触れません。匿名で使っていて同じワークスペースで新しい匿名セッションを始めると、この残ったファイルは前の ID の組織を指しています。read 表示は無視します(一覧は空のまま)が、最初の write(学習、ベースモデル推論、endpoint 作成)は 409/エラーで失敗し、「.arkor/state.json を削除して新しい匿名プロジェクトを開始するか、そのプロジェクトを所有するアカウントで arkor login してください」と案内されます。詳しくは プロジェクト構成 を参照してください。

概要

オプション

振る舞い

  • 認証情報ファイルが存在しなければ、CLI は No credentials on file.(認証情報ファイルがありません)と出して終了。
  • 認証情報ファイルが匿名(mode: "anon")なら、logout 後にその匿名 ID を復元できないことを警告。
  • ユーザーがプロンプトを断ると Aborted.(中止しました)と出して削除せずに終了。
  • --force はプロンプトをスキップしますが、匿名認証情報を削除する前の復元不可警告は表示します。
  • arkor logout.arkor/state.json.arkor/build/ 成果物には触りません。完全に最初からやり直すには .arkor/ も手動で削除してください。

arkor whoami

クラウド API の /v1/me から現在の ID を表示し、到達できる org slug も並べます。

概要

フラグはありません。

出力

サインイン中なら user オブジェクトを JSON として整形表示し、レスポンスに org が含まれていれば Orgs: <slug>, <slug>, …(org 一覧)を 1 行で出します。~/.arkor/credentials.json が無いときは Not signed in. Run \arkor login` or `arkor login —anonymous`.(サインインしていません。arkor loginまたはarkor login —anonymous` を実行してください)と出して終了します。

終了コード

  • 0: サインイン中、ID を表示。
  • 0: 未サインイン、メッセージは情報用のみ。
  • 1: クラウド API が 426 Upgrade Required を返した。CLI はアップグレードのヒント(と検出したパッケージマネージャー用のアップグレードコマンド)を表示し、process.exitCode = 1 を立てて、arkor のシャットダウンフックの非推奨警告フラッシュが終了前に走るようにします。
  • それ以外の 4xx / 5xx は Failed to fetch /v1/me (<status>). Token may be expired./v1/me の取得に失敗しました(<status>)。トークンが期限切れの可能性があります)として報告し、0 で終了します。

認証情報の保存場所

両モードとも同じファイル ~/.arkor/credentials.json に書き、mode フィールドが "oauth""anon" でタグ付けされます。これにより CLI(と Studio サーバー)はどのモードを使うかわかります。レイアウト全体は プロジェクト構成 を参照。

トークンの有効期限

OAuth セッションでは、認証情報ファイルにアクセストークンと発行されたリフレッシュトークン、トークン交換が返した expiresAt タイムスタンプを記録します。リフレッシュトークンは保存していますが、CLI は まだ 期限切れアクセストークンの自動リフレッシュをしません。これはロードマップ上です。 実用上の意味は次のとおりです。
  • 期限切れアクセストークンは arkor whoami から Failed to fetch /v1/me (401). Token may be expired./v1/me の取得に失敗しました(401)。トークンが期限切れの可能性があります)として、あるいはクラウド API と話すあらゆるものから類似の失敗として現れます。
  • OAuth セッションの直し方は arkor login --oauth をもう一度走らせることです。フル PKCE フローを通って ~/.arkor/credentials.json を新トークンで上書きします。
匿名トークンはクライアント側に有効期限の追跡がなく、いつ動かなくなるかはクラウド API が決めます。匿名セッションが失敗し始めたら arkor login --anonymous で新しいものを発行してください(新しい anonymousId が発行されるので、実質的には別ワークスペースになります)。

エラー

関連項目