2026 OpenClaw フロント実戦:
リモート Mac でゲートウェイ /v1/models を OpenAI 互換クライアントと揃え、モノレポ変更パス別スモーク検査を再現する
想定読者:OpenClaw ゲートウェイをリモート Macでスモークする担当。OpenAI 互換はベース URLと一覧 JSON に敏感です。本稿は導入・対照・HowTo・シェル・PRに絞り、デプロイフック系とは分担します。関連:フロント検収、PR 要約。
00 導入と結論
一覧と推論で JSON がずれると CLI と UI が分断します。/v1/models を OpenAI 形に揃え、/v1/chat/completions と同一オリジンへ。マージ前にリモート Mac で curl 済みのログを残すとレビューが速いです。輸送層は HTTP/3 検収へ分けます。
01 痛み三つ
1) 上流 ID とゲートウェイの id が不一致。
2) ベース URL のスラッシュと /v1 の二重付与で //v1/models 化。
3) リモート Mac だけプロキシや社内 CA で TLS は通るが本文が欠ける。
02 対照表(ゲートウェイ経由とオリジン直叩き)
| 観点 | ゲートウェイ経由 | オリジン直叩き |
|---|---|---|
| 一貫性 | OPENAI_BASE_URL が一つで済む。 |
一覧と推論でホストが分かれやすい。 |
| 失敗 | Ingress の strip と 404。 | CORS と鍵の渡し方の差。 |
| 検証 | curl 一本で同一ホスト。 |
上流ごとに URL を組み替え。 |
03 HowTo:モノレポ変更パスを踏んだ再現手順
- 導入: ルートで
pnpm installまたはnpm ciを記録どおり。 - 置き場:
packages/gateway等にGET /v1/modelsを集約しdata[].idを README に固定。 - ルート: Ingress とアプリで
/v1/chat/completionsと/v1/modelsを同一ホストへ。 - 別名:
OPENCLAW_MODEL_ALIAS等でmodel文字列を一箇所で解決。 - リモート Mac: 同一
.envとプロキシ明示のうえcurlとjqで一覧合格後、最小チャットを同一BASEで。
04 スモーク用スクリプト(コピー可)
#!/usr/bin/env bash
set -euo pipefail
BASE="${OPENAI_BASE_URL:?}" KEY="${OPENAI_API_KEY:?}"
curl -sS -H "Authorization: Bearer ${KEY}" "${BASE%/}/v1/models" \
| jq -e '.object=="list" and (.data|type=="array")'
BASE はスラッシュ無しで統一。jq 無しは python3 -m json.tool で目視します。
05 PR ワークフローとゲート
ラベル area:gateway、PR 本文にリモート Mac の curl 標準出力を必須、CI は pnpm smoke:models 等を必須チェックに。ブランチは feat/gateway-models のように領域を名前へ。本番の公開後確認はデプロイ Runbook と分担し、ここはAPI 形の一致のみ扱います。
06 引用できる事実
形: object:list と data[].id。
URL: ベースはスラッシュ無し、パスは /v1/models。
運用: PR にマスクした鍵先頭とホスト名のみ。
07 FAQ
404
Ingress strip とアプリの /v1 二重を疑う。
401
Bearer、変数名、期限を順に。