# CLI コマンド

## fluxlay login

デバイス認証で Fluxlay アカウントに認証します。

```bash
fluxlay login
```

ブラウザウィンドウが開いてサインインします。確認用のユーザーコードが表示されます。承認後、セッションがローカルに保存されます。

## fluxlay logout

保存されたセッションを削除します。

```bash
fluxlay logout
```

## fluxlay whoami

現在の認証ユーザーを表示します。

```bash
fluxlay whoami
```

## fluxlay dev

壁紙のライブプレビュー用に開発サーバーを起動します。

```bash
fluxlay dev [dir]
```

| 引数  | 説明                     | デフォルト                  |
| ----- | ------------------------ | --------------------------- |
| `dir` | プロジェクトディレクトリ | `.`（カレントディレクトリ） |

**動作：**

1. `fluxlay.yaml` のバリデーション。
2. ポート 3000 から利用可能なポートを探索。
3. Vite 開発サーバーを起動。
4. アプリデータディレクトリに `dev.json` を書き込み。
5. デスクトップアプリが HMR 付きで壁紙をレンダリング。

## fluxlay build

壁紙を暗号化された `.fluxlay` パッケージにビルドします。

```bash
fluxlay build [dir] [-o <name>]
```

| 引数 / オプション     | 説明                     | デフォルト          |
| --------------------- | ------------------------ | ------------------- |
| `dir`                 | プロジェクトディレクトリ | `.`                 |
| `-o, --output <name>` | 出力ファイル名           | `wallpaper.fluxlay` |

**必要条件：** ログイン済みセッション、`fluxlay.yaml` に `kind` フィールドが必要。

`kind` に応じて挙動が分岐します:

- `kind: web` → Vite ビルドを実行し、`dist/` をパッケージング。
- `kind: video` / `kind: image` → `source` で指定されたメディアファイル単体をパッケージング。

## fluxlay publish

壁紙をビルドして Fluxlay ストアに公開します。

```bash
fluxlay publish [dir]
```

| 引数  | 説明                     | デフォルト |
| ----- | ------------------------ | ---------- |
| `dir` | プロジェクトディレクトリ | `.`        |

**必要条件：** ログイン済みセッション、オンボーディング完了。

**動作：**

1. `fluxlay.yaml` のバリデーション（`kind` フィールドが必須）。
2. コンテンツ暗号化キーの生成。
3. API にバージョンを登録。
4. `kind` に応じたバンドル生成:
   - `web`: Vite ビルド成果物（`dist/`）をバンドル化。
   - `video` / `image`: `source` で指定されたメディアファイルを `media.<ext>` としてバンドル化（Vite ビルドはスキップ）。
5. 暗号化してアップロード。
6. API に確認通知。

`kind: video` / `kind: image` の壁紙では、HTML はバンドルに含まれず、デスクトップアプリが配信時に動的に生成します。
