メインコンテンツまでスキップ

Cordis の設定

組み込み Cordis/DSH エンジンは 2 つのドキュメントと環境変数で設定します。既定では両ドキュメントをバックエンドの隣に置き、LIBRE_CORDIS_CONFIGLIBRE_CORDIS_SETTINGS で場所を変更できます。

ドキュメント管理主体形式用途
cordis.patch.ymlCordis Loader最上位が YAML 配列エンジンをマウントするプラグイン行
cordis.config.ymlLibre WebUI ホストYAML マッピングプロバイダー、認証情報の取得元、機能フラグ

Cordis の Include ツリーキャリアは構成自体を読み、最上位が配列でないファイルを拒否します。そのためホスト設定を同じファイルに置けず、2 つのドキュメントに分かれています。

有効化

設定内のエージェント有効化項目の隣にある Cordis エンジンの有効化項目。

管理者が設定 → ユーザー管理 → アクセスとポリシー → Cordis エンジンで有効にします。変更は即時に反映され、有効化後の次のリクエストでエンジンが起動し、無効化すると破棄されます。再起動は不要です。

次の 2 種類のデプロイ設定で値を固定できます。暗黙に上書きするのではなく、どちらも切り替えをグレーアウトします。

設定元効果
環境変数 LIBRE_CORDIS_ENABLEDtrue/false でデプロイ全体の機能状態を固定
cordis.config.ymlfeatures.enabled明示した値で固定。キーを省略すると管理者が選択

エンジンには構成も必要です。同梱の例から始めてください。

cd backend
cp cordis.patch.example.yml cordis.patch.yml
cp cordis.config.example.yml cordis.config.yml

ホストは cordis.patch.yml を読み、ブリッジ行に自身の既定値を統合して <DATA_DIR>/cordis-runtime/cordis.composed.yml に書き出します。この生成ファイルは破棄可能で、編集してはいけません。正規のドキュメントは運用者の cordis.patch.yml です。

cordis.config.yml

trace: false

model:
provider: libre-webui
# Empty selects the authenticated caller's configured default/fallback route.
model: ''

features:
# Omit enabled to let the administrator use the Settings toggle.
streaming: true
tools: true
persistence: true

# Optional absolute paths; defaults live under Libre WebUI's data directory.
# workspacePath: /absolute/path/to/workspace
# sessionStorePath: /absolute/path/to/sessions

最上位のキー

キー既定値意味
trace真偽値falseCordis の全有効化状態遷移を記録
modelマッピングモデルアダプターの選択。下記参照
featuresマッピング機能の切り替え。下記参照

features

キー既定値意味
enabled真偽値falseエンジンをマウント。false の間は全ルートが 503 を返す
streaming真偽値trueモデル出力をストリーミングするターンを受け付ける
tools真偽値trueエンジンのツールを許可し登録一覧を公開
persistence真偽値trueJSONL 永続化を有効化して対応サービスを必須とし、再起動後もセッションを維持

ブリッジの有効化に必要なスイッチは features.enabled だけです。最上位の enabled キーは読みません。すべての機能スイッチを features 内にまとめ、有効な機能を一か所で確認できるようにしています。

model

キー既定値意味
provider文字列libre-webuilibre-webuideepseekpi-ainone
apiKeyEnv文字列OPENAI_API_KEYキーを保持する環境変数の名前
route文字列libre-webuiエンジンがリクエストで指定するプロバイダールート
model文字列''要求するモデル ID。手動定義したルートでは必ず設定
baseUrl文字列''エンドポイントの上書き。空ならアダプターの既定値を使用
providersマッピング{}ルート名をキーとする手動定義のプロバイダールート

エンジンのモデルの取得元

エンジンは独自のプロバイダー設定を持ちません。構成の libre-webui-llm-adapter 行が登録する libre-webui ルート経由で、Libre WebUI の既存プロバイダーを呼び出します。UI でチャットできるモデルをエンジンでも使えます。UI でモデルを取得すれば、設定済みの認証情報とエンドポイントを使ってエンジンからも参照できます。

使用するには model.provider: libre-webui を設定します。これが同梱の既定値です。認証情報とプロバイダーエンドポイントは Libre WebUI の既存設定に残ります。

model はエンジンが要求するモデルです。空ならアプリの既定モデルを使い、デプロイに既定値がなければ、利用可能なローカルモデルを優先してプロバイダー層が返す最初のチャットモデルを選びます。埋め込みモデルは除外されます。内部ルートは lwui:ollama:<encoded-model> または lwui:plugin:<encoded-provider>:<encoded-model> として、モデルとプロバイダーの両方を保持します。同名モデルや Ollama の障害によってローカル要求がリモートへ転送されることを防ぎます。明示したプロバイダーが利用できなければ失敗し、別のプロバイダーへ暗黙に切り替えません。

空の model が安全なのは libre-webui ルートだけです。プロバイダーパッケージを使うルートではモデルの明示が必要です。dsh-llm-pi-ai はカタログ問い合わせのためにルートのカタログを解決しますが、最初の項目へフォールバックしません。そのため model のない手動ルートはターンを受け付けず、次のエラーになります。

provider "<route>" resolves no models; the installed catalog does not describe
this route, so its models must be listed in configuration

model に、そのルートの models 一覧にある ID を設定してください。同梱例は route: ollamamodel: llama3.2 を組み合わせ、宣言した llama3.2 項目に対応させています。

provider はマウントするアダプターパッケージを選びます。

  • libre-webui はこのデプロイ自身のプロバイダー層でエンジンに応答します。サポートされる既定モードです。
  • none はモデルアクセスなしで起動します。ツール一覧やセッションは利用できますがターンには回答できず、構成を検証するのに便利です。
  • deepseekpi-ai はプロバイダーパッケージを直接マウントします。これらはバックエンドの依存パッケージではありません。全プロバイダー SDK を含めると、エンジンが使わない機能向けの廃止済みパッケージを含む 59 個の間接依存が追加されるためです。必要なパッケージをインストールして行を構成に追加してください。不足していればホストがパッケージ名を示します。

プロバイダールートは次のフィールドで記述します。

フィールド意味
displayName人が読める表示名
api通信プロトコル。例:openai-completions
baseURLエンドポイントの基点
apiKeyEnvキーを保持する環境変数
modelsモデル一覧。各項目は idnamecontextWindowmaxTokens を指定

どちらのドキュメントにも認証情報は書き込みません。 apiKeyEnv は環境変数名であり、アダプターがリクエストごとに解決するため、キーのローテーションに再起動は不要です。

cordis.patch.yml

Cordis Loader エントリーの最上位配列です。同梱例は 9 行をマウントし、推奨する開始点になっています。

- id: llm
name: '@deepseek-ai/dsh-llm'

- id: session
name: '@deepseek-ai/dsh-session'

- id: session-projection
name: '@deepseek-ai/dsh-session-projection'

- id: session-persistence
name: '@deepseek-ai/dsh-session-persistence-jsonl'
config:
# The host supplies the resolved sessionStorePath.

- id: system-prompt
name: '@deepseek-ai/dsh-system-prompt'
config:
personaPrefix: ''

- id: tools
name: '@deepseek-ai/dsh-tools'

- id: agent
name: '@deepseek-ai/dsh-agent'

- id: agent-loop
name: '@deepseek-ai/dsh-agent-loop'
config:
agents: []

- id: libre-webui-bridge
name: './dist/cordis/dsh/engine-plugin.js'

エントリーのフィールド

フィールド必須意味
idいいえ行を指定する安定した ID。省略時は name から生成
nameはいLoader がインポートするモジュール指定子。文字列リテラルが必要
configいいえプラグイン設定。!!js 式を使用可能
disabledいいえ削除せず行をスキップ。!!js を使用可能
injectいいえ追加の必須サービス、または行の介入設定

name は Loader が直接インポートし評価しないため、!!js 式にはできません。config 値では !!js が使え、所属する行のファイバー内で、Loader コンテキストを参照して後から評価されます。process.envctx.get(...) は使えますが、import.meta は使えません。

相対指定子は構成ファイル自身のディレクトリを基準に解決されます。裸の指定子はバックエンドのパッケージを通じて解決されるため、@deepseek-ai/dsh-toolsbackend/node_modules 内のコピーを参照します。

行の並び順は読み込み順を決めません。Cordis は宣言したサービスが利用可能になると行を有効化するため、上のグループ分けは読みやすさのためだけです。

必須の行

チャットに回答できるエンジンには、次のすべてが必要です。

提供するもの必要とするもの
dsh-llmllmエージェントループ
dsh-sessionsessionsエージェントループ、ブリッジ
dsh-session-projectionsessionProjectionsエージェントループ
dsh-system-promptsystemPromptツール、エージェントループ
dsh-toolstoolsエージェントループ、ブリッジ
dsh-agentagentsブリッジ
dsh-agent-loopエージェントドライバーターンへの回答
ブリッジ行libreDshEngine全ルート

GET /api/cordis/tools が内容を返すには、@deepseek-ai/dsh-fs-sandbox@deepseek-ai/dsh-tool-fs などのツールプラグイン行もマウントします。ツールプラグインのない登録一覧が空なのは正常です。

環境変数

すべての設定値に環境変数の上書きがあり、環境変数、ドキュメント、組み込み既定値の順で優先されます。

変数上書き対象既定値
LIBRE_CORDIS_ENABLEDfeatures.enabledfalse
LIBRE_CORDIS_STREAMINGfeatures.streamingtrue
LIBRE_CORDIS_TOOLSfeatures.toolstrue
LIBRE_CORDIS_PERSISTENCEfeatures.persistencetrue
LIBRE_CORDIS_TRACEtracefalse
LIBRE_CORDIS_MODEL_PROVIDERmodel.providerlibre-webui
LIBRE_CORDIS_MODEL_ROUTEmodel.routelibre-webui
LIBRE_CORDIS_MODELmodel.model''
LIBRE_CORDIS_API_KEY_ENVmodel.apiKeyEnvOPENAI_API_KEY
LIBRE_CORDIS_BASE_URLmodel.baseUrl''
LIBRE_CORDIS_CONFIG構成ドキュメントのパス<cwd>/cordis.patch.yml
LIBRE_CORDIS_SETTINGS設定ドキュメントのパス構成ドキュメントの隣
LIBRE_CORDIS_WORKSPACEエンジンの既定ワークスペース<DATA_DIR>/cordis-workspace
LIBRE_CORDIS_SESSION_STORE永続化セッションのディレクトリ<DATA_DIR>/cordis-sessions

真偽値の変数は 1/true/yes/on0/false/no/off を受け付けます。解釈できない値では推測せず、ドキュメント設定に戻ります。

LIBRE_CORDIS_SESSION_STORELIBRE_CORDIS_WORKSPACE は同梱構成の !!js 式でも読まれるため、ホストはツリーのマウント前にこれらをエクスポートします。

設定例

完全にオフラインのローカル Ollama

features:
enabled: true
model:
provider: pi-ai
route: ollama
model: llama3.2
apiKeyEnv: OLLAMA_API_KEY
providers:
ollama:
api: openai-completions
baseURL: http://127.0.0.1:11434/v1
apiKeyEnv: OLLAMA_API_KEY
models:
- id: llama3.2
contextWindow: 131072
maxTokens: 4096

Ollama はキーを無視しますが、OpenAI クライアントは設定を要求します。OLLAMA_API_KEY=ollama をエクスポートすれば、秘密情報を作る必要なく要件を満たせます。データはマシン外へ送られません。

OpenAI 互換ゲートウェイ

features:
enabled: true
model:
provider: pi-ai
route: gateway
model: acme-large
apiKeyEnv: ACME_GATEWAY_API_KEY
providers:
gateway:
displayName: Acme Gateway
api: openai-completions
baseURL: https://gateway.acme.example/v1
apiKeyEnv: ACME_GATEWAY_API_KEY
models:
- id: acme-large
contextWindow: 65536
maxTokens: 4096

DeepSeek 公式サービス

features:
enabled: true
model:
provider: deepseek
route: deepseek
apiKeyEnv: DEEPSEEK_API_KEY

バックエンドの環境に DEEPSEEK_API_KEY を設定してください。

プロバイダーなしでツールのみ使用

features:
enabled: true
model:
provider: none

エンジンが起動し、セッションを作成でき、GET /api/cordis/tools は設定したツールプラグインを一覧表示します。応答できるアダプターがないため、メッセージ送信は失敗します。

移行に関する注意

Cordis ブリッジは追加機能です。既定では無効で、無効な間は既存の動作を変えません。

既存デプロイの更新。 作業は不要です。例は cordis.patch.example.ymlcordis.config.example.yml として同梱され、コピーして機能を有効にするまで読み込まれません。移行の実行、テーブル作成、既存データディレクトリへの変更はありません。

初めて有効にする場合。 2 つの例をコピーして features.enabled: true を設定します。エンジンパッケージはすでにバックエンドの依存関係なので追加インストールは不要です。最初のリクエストで <DATA_DIR>/cordis-workspace<DATA_DIR>/cordis-sessions<DATA_DIR>/cordis-runtime を作成します。いずれも既存データディレクトリ配下の新しいディレクトリなので、そのディレクトリを対象にした既存のバックアップと復元に含まれます。

エンジンの更新。 解決済みバージョンは package-lock.json に記録され、backend/package.json は alpha 互換の範囲を宣言します。意図的に更新し、npm install 後にプロバイダーとセッションの契約を検証してください。DSH パッケージに新しい peer dependency が加われば、npm はマウント時ではなくインストール時に報告します。モデルとセッションの形式は DSH が管理するため、形式変更は Libre WebUI の移行ではなく DSH のリリースノートで扱われます。

ロールバック。 features.enabled: false を設定して再起動するか、cordis.patch.yml からブリッジ行を除去します。libreDshEngine サービスとリスナーが撤回され、作成したエージェントも破棄されます。セッションファイルはデータとしてディスクに残ります。容量を解放するには sessionStorePath ディレクトリを削除してください。パッケージのアンインストールは任意で、Libre WebUI の他機能には影響しません。

既存の Chat と Work。 Chat には管理者専用の DeepSeek Harness 選択肢が加わり、一時エンジンセッションと既存の履歴を使用します。Work には独立した DeepSeek Harness エンジン選択肢が加わり、隔離された DSH ドライバーと既存のサンドボックス・承認経路を使用します。既存のモデル選択は通常の動作を保ちます。

標準の libre-webui アダプターでは、Chat のエージェント選択に基本プロファイルと明示的な DSH プロバイダーモデルが表示されます。明示的な選択は限定付きの提供元を保持し、基本プロファイルは実行中の構成の既定モデルを使います。タイトルと推論要約はエージェントツールを使わず、基になるプロバイダーを直接呼びます。カスタムアダプターのルートでは基本の Chat 項目だけを維持し、タイトルと推論要約には別途 Ollama またはプラグインのタスクモデルが必要です。

DSH は管理者の Ollama 設定を尊重します。無効な場合、そのモデルの一覧取得や確認は行わず、明示した Ollama 選択は他へ切り替えず失敗します。運用者が固定した非限定のモデル名も、安全に解決するには Ollama のカタログが必要です。プラグインだけのデプロイでは lwui:plugin:<plugin>:<model> で限定してください。

運用上の境界

  • ホストエンジンと Chat は管理者専用で solo 限定です。 エンジンページはローカル JSONL ストアを持つ共有管理コンソールで、team モードではマウントできません。サンドボックス Work は既存の SQL リポジトリを使用します。
  • モデル呼び出しは認証済み呼び出し元を使用します。 対話的なホストターンはその管理者のプロバイダー認証情報と既定モデルを使います。信頼された非対話構成では LIBRE_CORDIS_USER を有効な管理者 ID に明示設定できます。最も古い管理者への暗黙のフォールバックはありません。
  • ホストのファイル操作はワークスペース内に限定されます。 読み書きは正規化された対象を検査し、セッションは設定したルートの外を作業ディレクトリにできません。DSH の変更制限も適用されます。運用者が追加するプラグインは信頼されたサーバーコードです。
  • ホストツールは DSH のポリシーに従います。 エンジンページではセッションごとの読み取り専用・書き込み設定とネイティブの単発承認を提供します。いずれもワークスペース境界を回避しません。画面を持たない Chat は提示できない承認を拒否します。Work の DSH ドライバーはホストファイルツールを持たず、Work の承認とコンテナー隔離を使います。
  • ストリームはライブテキストと公開された推論を含みます。 永続化メッセージは完成した履歴を保ち、クライアントへ同じライブテキストを二重送信しません。
  • 再起動と削除は保存済みセッションを扱います。 空または完了したセッションも再起動後に残ります。ブリッジが作成した JSONL セッションの削除では書き込み側を止めてファイルを削除します。他の永続化実装には適切な削除アダプターが必要です。
  • 旧形式の不正ログには明示的な修復が必要です。 古いブリッジは必須 ID のないユーザーメッセージを保存しました。厳密な読み取り処理はログを捨てずに拒否します。トラブルシューティングの復旧手順を参照してください。
  • タイトルはローカルで生成します。 セッション概要は最初の人間のメッセージを短いタイトルに使い、空のセッションには派生タイトルがありません。

実行中の DSH インスタンスのモデルへ接続

任意の dsh-native-provider プラグインは、ポート 3080 のローカル Web アプリなど、別の DSH インスタンスに設定済みのモデルと接続を公開します。そのインスタンスの既存プロファイルへインストールしてください。呼ぶのは ctx.llm だけで、キーは DSH に残ります。セッション作成、エージェント実行、ネイティブ添付ファイルの読み取り、ネイティブツールの実行はできません。

両プロセスは同じ Unix ホスト上の同じ OS アカウントで実行する必要があります。明示設定した Unix ソケットを使い、その物理ディレクトリは同じアカウントが所有し権限は 0700、ソケットは 0600 です。TCP リスナーは追加せず、DSH のブラウザー認証を流用したり弱めたりしません。Windows やリモート DSH ホストは非対応です。

ローカルのアクセス境界は OS アカウントです。同じアカウントで動く他のプロセスもソケットを使用できます。この接続は、同一アカウントを共有するアプリごとの認証情報やアプリ間の隔離を提供しません。

独立プラグインのインストール

DSH → Plugins → Add pluginPackage name or address に次の公開リポジトリ URL を貼り付け、Install をクリックします。

https://github.com/libre-webui/dsh-native-provider

DSH に求められたらコンポーネントを有効化してください。公開パッケージは 0.1.1、Apache-2.0 ライセンスで、ビルド済みランタイムとバンドルパッチを含みます。ローカルビルド、インストールスクリプト、npm の実行時依存は不要です。@libre-webui/dsh-native-provider という名前では npm に公開されていないため、ダイアログには GitHub URL を使用します。

バンドルは <DSH home>/lwui-provider/llm.sock を選び、通常は $HOME/.dsh/lwui-provider/llm.sock になります。DSH_HOME の設定があれば優先されます。プライベートソケットのディレクトリがなければ作成します。DSH ホームごとに 1 つのブリッジを動かすか、追加プロファイルのユーザー用 cordis.patch.yml でソケットパスを上書きしてください。完全パスは 100 UTF-8 バイト以内で、シンボリックリンクを含んではいけません。上書き方法は独立パッケージの設定ガイドを参照してください。

同じ操作を CLI で行う場合は次を使います。

dsh plugin --profile web add https://github.com/libre-webui/dsh-native-provider

実際のプロファイルが web でなければ、その名前に変更してください。CLI インストール後はそのプロファイルを再起動します。実行中の UI からのインストールなら直ちに有効化できますが、DSH に再起動の通知が出た場合は従ってください。DSH 自体のソース変更やキーのコピーは不要です。

Libre WebUI からバンドルを準備

Libre WebUI にも準備スクリプトが同梱されています。ソースチェックアウトでバックエンドをビルドし、新しい出力ディレクトリを用意します。

npm run build:backend
node scripts/prepare-dsh-provider.mjs /absolute/dsh-provider-bundle /absolute/private-directory/provider.sock
dsh plugin --profile web add /absolute/dsh-provider-bundle

npm でインストールした配布物はビルド済みバックエンドと準備スクリプトを含むため、インストールディレクトリからビルド以外の最後の 2 コマンドを実行してください。その後、選択した DSH プロファイルを再起動します。どちらの準備方法も既存出力ディレクトリを拒否し、パッケージ情報、ライセンス、インストール説明を含めます。

Libre WebUI の接続

Libre WebUI の cordis.config.yml に同じ絶対ソケットパスを指定します。公開バンドルの既定値では、/absolute/home を実際のホームに置き換えます。

nativeProvider:
socketPath: /absolute/home/.dsh/lwui-provider/llm.sock

または LIBRE_DSH_PROVIDER_SOCKET にその絶対パスを設定します。環境変数を空にすると、ファイルにパスがあっても接続を無効化します。LWUI で Cordis エンジンを有効にすると、有効な管理者は Work の DeepSeek Harness エンジン、エンジンページ、Chat のエージェントグループでネイティブモデルを選べます。Chat にはエージェントCLIモデルの有効化も必要です。Work は providerType: dsh と元のモデル・提供者 ID を保存し、従来の LWUI プロバイダー経由の DSH タスクは以前の提供元とエンジン識別を保持します。

ネイティブモデル一覧はライブで読みます。プロバイダーや認証設定が変わると接続の世代が無効になり、進行中の呼び出しをキャンセルします。ソケット、モデル、ネイティブプロバイダーが利用できない場合は停止し、Ollama や別の提供元へは切り替えません。タイトルと推論要約はツールなしで選択モデルを直接呼びます。この初期接続はテキスト、推論、ツールメッセージを受け付け、ネイティブ画像・ファイル参照は拒否します。

ネイティブ認証情報は DSH 運用者のものなので、通常の Work を一般ユーザーに開放していても、この接続は管理者専用です。DSH の提供元設定によってモデル要求はホスト外へ出る場合があり、Work はリモート利用の説明を表示します。team デプロイでは、処理を担当する全ワーカーが設定済みローカル接続にアクセスできる必要があり、欠ければ実行を拒否します。Cordis を無効にするかソケット設定を削除すると、保存済みタスクを残してネイティブアクセスを撤回します。DSH がクラッシュしてソケットが残った場合、所有するインスタンスを止め、その古いソケットだけを削除してから再起動してください。プラグインは既存のファイルシステム項目を置き換えません。

更新または削除

変更前に実行中のネイティブ要求を完了させるかキャンセルしてください。旧ローカルバンドル 0.0.0/0.1.0 を DSH の UI で置き換えるには、UninstallAdd plugin の順に操作し、上記の公開 GitHub URL をインストールします。独自のソケットパスはサポートされるユーザープロファイルの上書き設定で維持してください。ネイティブのセッションと認証情報は保持されます。

すでに GitHub からインストールしたものは CLI で更新できます。

dsh plugin --profile web update @libre-webui/dsh-native-provider

CLI 更新後は再起動してバージョンを確認します。無効だったプラグインは無効のままなので、接続テスト前に有効状態を確認してください。固定やロールバックには github:libre-webui/dsh-native-provider#<commit> を使います。独自のローカルバンドルは新しい出力ディレクトリをビルドし、そのディレクトリを再追加してください。ローカル依存の更新で GitHub が取得されることはありません。

接続を削除するには、先に LWUI の nativeProvider.socketPath を削除するか LIBRE_DSH_PROVIDER_SOCKET を空にし、次を実行します。

dsh plugin --profile web remove @libre-webui/dsh-native-provider

削除後は DSH プロファイルを再起動してください。保存された LWUI タスクは残りますが、同じ明示的接続が復元されるまではネイティブモデル要求が失敗します。このプラグインの削除で DSH の提供元や認証情報が消えることはありません。古い生成バンドルのディレクトリは、インストール先として使わなくなってから削除してください。

ネイティブプロバイダーの使用状況

ネイティブ要求はプロバイダー使用状況DeepSeek Harness · プロバイダーに、選択した元のモデル名で表示されます。ツールの各ラウンド、タイトル、推論要約を含め、実際のモデル要求を 1 回ずつ数えます。成功、失敗、キャンセル、遅延、DSH が報告したトークン数を表示します。キャッシュ入力は入力合計に一度だけ加え、不明な使用量は推定せず未計測とします。提供元 ID は dsh-native:<percent-encoded-native-provider-id> で、既存の料金・コスト集計ルールに使用します。未知の料金には価格を付けません。

LWUI で設定したプロバイダーを通る DSH 要求は、その提供元の既存の記録を維持します。カタログの読み取りや推論に達する前に拒否された要求は追加のモデル呼び出しを記録しません。計測はこの接続バージョンの導入時から始まり、過去の使用量を生成しません。保存するのは識別情報、状態、時間、カウンターだけで、プロンプト、応答、認証情報、エンドポイント、提供元のエラー本文は含みません。

設定の検証

curl -s http://127.0.0.1:3001/api/cordis/health | jq
{
"success": true,
"enabled": true,
"ready": true,
"services": [
{ "name": "llm", "state": "ready" },
{ "name": "systemPrompt", "state": "ready" },
{ "name": "sessions", "state": "ready" },
{ "name": "tools", "state": "ready" },
{ "name": "agents", "state": "ready" }
]
}

503code: CORDIS_UNAVAILABLE は構成がマウントされなかったことを示します。error に理由があり、LIBRE_CORDIS_TRACE=true で Cordis の有効化ログを追加できます。よくある原因はトラブルシューティングを参照してください。