chore(i18n): refresh ja-JP translations
This commit is contained in:
parent
8c267c5704
commit
1d07fbb4c0
@ -1,38 +1,32 @@
|
||||
---
|
||||
read_when:
|
||||
- エージェントワークスペースまたはそのファイルレイアウトを説明する必要がある場合
|
||||
- エージェントワークスペースをバックアップまたは移行したい場合
|
||||
summary: 'エージェントワークスペース: 場所、レイアウト、バックアップ戦略'
|
||||
title: Agent Workspace
|
||||
- エージェントのワークスペースまたはそのファイルレイアウトを説明する必要があります
|
||||
- エージェントのワークスペースをバックアップまたは移行したい場合があります
|
||||
summary: 'エージェントのワークスペース: 保存場所、レイアウト、バックアップ戦略'
|
||||
title: エージェントのワークスペース
|
||||
x-i18n:
|
||||
generated_at: "2026-04-05T12:40:45Z"
|
||||
generated_at: "2026-04-18T04:40:09Z"
|
||||
model: gpt-5.4
|
||||
provider: openai
|
||||
source_hash: 3735633f1098c733415369f9836fdbbc0bf869636a24ed42e95e6784610d964a
|
||||
source_hash: dd2e74614d8d45df04b1bbda48e2224e778b621803d774d38e4b544195eb234e
|
||||
source_path: concepts/agent-workspace.md
|
||||
workflow: 15
|
||||
---
|
||||
|
||||
# Agent Workspace
|
||||
# エージェントのワークスペース
|
||||
|
||||
ワークスペースはエージェントのホームです。これはファイルツールとワークスペースコンテキストで使用される唯一の作業ディレクトリです。
|
||||
ワークスペースはエージェントのホームです。これは、ファイルツールとワークスペースコンテキストで使用される唯一の作業ディレクトリです。
|
||||
これを非公開に保ち、メモリとして扱ってください。
|
||||
|
||||
これは `~/.openclaw/` とは別で、そちらには設定、認証情報、セッションが保存されます。
|
||||
これは、設定、認証情報、セッションを保存する `~/.openclaw/` とは別です。
|
||||
|
||||
**重要:** ワークスペースは**デフォルトのcwd**であり、厳格なサンドボックスではありません。ツールは
|
||||
相対パスをワークスペース基準で解決しますが、サンドボックス化が有効でない限り、絶対パスは引き続きホスト上の
|
||||
他の場所に到達できます。分離が必要な場合は、
|
||||
[`agents.defaults.sandbox`](/gateway/sandboxing)(および必要に応じてエージェントごとのサンドボックス設定)を使用してください。
|
||||
サンドボックス化が有効で、`workspaceAccess` が `"rw"` でない場合、ツールはホストワークスペースではなく、
|
||||
`~/.openclaw/sandboxes` 配下のサンドボックスワークスペース内で動作します。
|
||||
**重要:** ワークスペースは**デフォルトの cwd**であり、厳格なサンドボックスではありません。ツールはワークスペースを基準に相対パスを解決しますが、サンドボックス化が有効でない限り、絶対パスは引き続きホスト上の別の場所へ到達できます。分離が必要な場合は、[`agents.defaults.sandbox`](/ja-JP/gateway/sandboxing)(および/またはエージェントごとのサンドボックス設定)を使用してください。サンドボックス化が有効で、`workspaceAccess` が `"rw"` ではない場合、ツールはホストのワークスペースではなく、`~/.openclaw/sandboxes` 配下のサンドボックスワークスペース内で動作します。
|
||||
|
||||
## デフォルトの場所
|
||||
## デフォルトの保存場所
|
||||
|
||||
- デフォルト: `~/.openclaw/workspace`
|
||||
- `OPENCLAW_PROFILE` が設定されていて `"default"` でない場合、デフォルトは
|
||||
`~/.openclaw/workspace-<profile>` になります。
|
||||
- `~/.openclaw/openclaw.json` で上書きできます:
|
||||
- `OPENCLAW_PROFILE` が設定されていて `"default"` ではない場合、デフォルトは `~/.openclaw/workspace-<profile>` になります。
|
||||
- `~/.openclaw/openclaw.json` で上書きします:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -42,12 +36,10 @@ x-i18n:
|
||||
}
|
||||
```
|
||||
|
||||
`openclaw onboard`、`openclaw configure`、または `openclaw setup` は、ワークスペースが存在しない場合に
|
||||
それを作成し、bootstrapファイルを初期投入します。
|
||||
サンドボックス用のseedコピーは、ワークスペース内の通常ファイルのみを受け付けます。ソースワークスペース外を
|
||||
指すsymlink/hardlinkエイリアスは無視されます。
|
||||
`openclaw onboard`、`openclaw configure`、または `openclaw setup` は、ワークスペースが存在しない場合にそれを作成し、ブートストラップファイルを初期投入します。
|
||||
サンドボックスのシードコピーは、ワークスペース内の通常ファイルのみを受け入れます。ソースワークスペースの外部を指す symlink/hardlink のエイリアスは無視されます。
|
||||
|
||||
すでにワークスペースファイルを自分で管理している場合は、bootstrapファイルの作成を無効にできます:
|
||||
すでにワークスペースファイルを自分で管理している場合は、ブートストラップファイルの作成を無効にできます:
|
||||
|
||||
```json5
|
||||
{ agent: { skipBootstrap: true } }
|
||||
@ -55,20 +47,15 @@ x-i18n:
|
||||
|
||||
## 追加のワークスペースフォルダー
|
||||
|
||||
古いインストールでは `~/openclaw` が作成されていることがあります。
|
||||
複数のワークスペースディレクトリを残しておくと、同時にアクティブなのは1つだけであるため、認証や状態のずれで
|
||||
混乱を招く可能性があります。
|
||||
古いインストールでは `~/openclaw` が作成されていることがあります。複数のワークスペースディレクトリを残しておくと、同時に有効なのは1つのワークスペースだけなので、認証や状態の食い違いによって混乱を招くことがあります。
|
||||
|
||||
**推奨:** アクティブなワークスペースは1つだけにしてください。追加のフォルダーをもう使っていない場合は、
|
||||
アーカイブするかゴミ箱に移動してください(例: `trash ~/openclaw`)。
|
||||
意図的に複数のワークスペースを維持する場合は、
|
||||
`agents.defaults.workspace` がアクティブなものを指していることを確認してください。
|
||||
**推奨:** 有効なワークスペースは1つだけにしてください。追加フォルダーをもう使わない場合は、アーカイブするかゴミ箱へ移動してください(例: `trash ~/openclaw`)。意図的に複数のワークスペースを保持する場合は、`agents.defaults.workspace` が有効なものを指していることを確認してください。
|
||||
|
||||
`openclaw doctor` は、追加のワークスペースディレクトリを検出すると警告します。
|
||||
|
||||
## ワークスペースファイルマップ(各ファイルの意味)
|
||||
## ワークスペースのファイルマップ(各ファイルの意味)
|
||||
|
||||
これらは、OpenClawがワークスペース内にあることを想定している標準ファイルです:
|
||||
これらは、OpenClaw がワークスペース内にあることを想定している標準ファイルです:
|
||||
|
||||
- `AGENTS.md`
|
||||
- エージェント向けの運用指示と、メモリの使い方。
|
||||
@ -78,82 +65,75 @@ x-i18n:
|
||||
- `SOUL.md`
|
||||
- ペルソナ、トーン、境界。
|
||||
- 毎セッションで読み込まれます。
|
||||
- ガイド: [SOUL.md Personality Guide](/concepts/soul)
|
||||
- ガイド: [SOUL.md Personality Guide](/ja-JP/concepts/soul)
|
||||
|
||||
- `USER.md`
|
||||
- ユーザーが誰で、どう呼びかけるか。
|
||||
- ユーザーが誰か、どう呼びかけるか。
|
||||
- 毎セッションで読み込まれます。
|
||||
|
||||
- `IDENTITY.md`
|
||||
- エージェントの名前、雰囲気、絵文字。
|
||||
- bootstrap ritualの間に作成または更新されます。
|
||||
- ブートストラップ儀式の間に作成または更新されます。
|
||||
|
||||
- `TOOLS.md`
|
||||
- ローカルツールと慣習に関するメモ。
|
||||
- ツールの可用性は制御せず、ガイダンスにすぎません。
|
||||
- ツールの利用可否を制御するものではなく、あくまでガイダンスです。
|
||||
|
||||
- `HEARTBEAT.md`
|
||||
- heartbeat実行用の任意の小さなチェックリスト。
|
||||
- Heartbeat 実行用の任意の小さなチェックリスト。
|
||||
- トークン消費を避けるため、短く保ってください。
|
||||
|
||||
- `BOOT.md`
|
||||
- internal hooksが有効な場合に、Gateway再起動時に実行される任意の起動チェックリスト。
|
||||
- 短く保ち、外向きの送信にはmessageツールを使ってください。
|
||||
- 内部フックが有効なとき、Gateway 再起動時に実行される任意の起動チェックリスト。
|
||||
- 短く保ち、外向き送信には message ツールを使用してください。
|
||||
|
||||
- `BOOTSTRAP.md`
|
||||
- 初回実行時の一度きりのritual。
|
||||
- 初回実行時だけの儀式。
|
||||
- 新規ワークスペースに対してのみ作成されます。
|
||||
- ritualが完了したら削除してください。
|
||||
- 儀式が完了したら削除してください。
|
||||
|
||||
- `memory/YYYY-MM-DD.md`
|
||||
- 日次メモリログ(1日1ファイル)。
|
||||
- セッション開始時に今日分と昨日分を読むことを推奨します。
|
||||
- セッション開始時に今日と昨日のファイルを読むことを推奨します。
|
||||
|
||||
- `MEMORY.md`(任意)
|
||||
- キュレーションされた長期メモリ。
|
||||
- mainの非公開セッションでのみ読み込んでください(共有/グループコンテキストでは読み込まないでください)。
|
||||
- メインの非公開セッションでのみ読み込んでください(共有/グループコンテキストではありません)。
|
||||
|
||||
ワークフローと自動メモリフラッシュについては [Memory](/concepts/memory) を参照してください。
|
||||
ワークフローと自動メモリフラッシュについては [Memory](/ja-JP/concepts/memory) を参照してください。
|
||||
|
||||
- `skills/`(任意)
|
||||
- ワークスペース固有のSkills。
|
||||
- そのワークスペースにおける最優先のSkill配置場所です。
|
||||
- 名前が衝突した場合、project agent skills、personal agent skills、managed skills、bundled skills、
|
||||
および `skills.load.extraDirs` より優先されます。
|
||||
- ワークスペース固有の Skills。
|
||||
- そのワークスペースにおける最優先の Skills 保存場所です。
|
||||
- 名前が衝突した場合、プロジェクトのエージェント Skills、個人用エージェント Skills、管理された Skills、同梱 Skills、および `skills.load.extraDirs` より優先されます。
|
||||
|
||||
- `canvas/`(任意)
|
||||
- ノード表示用のCanvas UIファイル(例: `canvas/index.html`)。
|
||||
- Node 表示用の Canvas UI ファイル(例: `canvas/index.html`)。
|
||||
|
||||
bootstrapファイルが欠けている場合、OpenClawはセッションに「missing file」マーカーを挿入して継続します。
|
||||
大きなbootstrapファイルは挿入時に切り詰められます。
|
||||
上限は `agents.defaults.bootstrapMaxChars`(デフォルト: 20000)および
|
||||
`agents.defaults.bootstrapTotalMaxChars`(デフォルト: 150000)で調整してください。
|
||||
ブートストラップファイルのいずれかが欠けている場合、OpenClaw は「missing file」マーカーをセッションに注入して継続します。大きなブートストラップファイルは注入時に切り詰められます。制限は `agents.defaults.bootstrapMaxChars`(デフォルト: 12000)と `agents.defaults.bootstrapTotalMaxChars`(デフォルト: 60000)で調整してください。
|
||||
`openclaw setup` は、既存ファイルを上書きせずに不足しているデフォルトを再作成できます。
|
||||
|
||||
## ワークスペースに含まれないもの
|
||||
|
||||
これらは `~/.openclaw/` 配下にあり、ワークスペースrepoにはコミットすべきではありません:
|
||||
以下は `~/.openclaw/` 配下にあり、ワークスペースのリポジトリにコミットすべきではありません:
|
||||
|
||||
- `~/.openclaw/openclaw.json`(設定)
|
||||
- `~/.openclaw/agents/<agentId>/agent/auth-profiles.json`(モデル認証プロファイル: OAuth + API keys)
|
||||
- `~/.openclaw/credentials/`(channel/provider状態とレガシーOAuthインポートデータ)
|
||||
- `~/.openclaw/credentials/`(チャネル/プロバイダーの状態と旧OAuthインポートデータ)
|
||||
- `~/.openclaw/agents/<agentId>/sessions/`(セッショントランスクリプト + メタデータ)
|
||||
- `~/.openclaw/skills/`(managed skills)
|
||||
- `~/.openclaw/skills/`(管理された Skills)
|
||||
|
||||
セッションや設定を移行する必要がある場合は、それらを別途コピーし、
|
||||
バージョン管理の対象外にしてください。
|
||||
セッションや設定を移行する必要がある場合は、それらを別途コピーし、バージョン管理には含めないでください。
|
||||
|
||||
## Gitバックアップ(推奨、非公開)
|
||||
## Git バックアップ(推奨、非公開)
|
||||
|
||||
ワークスペースは非公開のメモリとして扱ってください。バックアップと復旧ができるように、
|
||||
**非公開**のgit repoに入れてください。
|
||||
ワークスペースは非公開のメモリとして扱ってください。バックアップと復旧ができるよう、**非公開**の git リポジトリに置いてください。
|
||||
|
||||
これらの手順は、Gatewayが動作しているマシン上で実行してください(ワークスペースはそこにあります)。
|
||||
これらの手順は Gateway が動作しているマシン上で実行してください(ワークスペースはそこにあります)。
|
||||
|
||||
### 1) repoを初期化する
|
||||
### 1) リポジトリを初期化する
|
||||
|
||||
gitがインストールされていれば、新規ワークスペースは自動的に初期化されます。
|
||||
このワークスペースがまだrepoでない場合は、次を実行してください:
|
||||
git がインストールされている場合、まったく新しいワークスペースは自動的に初期化されます。このワークスペースがまだリポジトリでない場合は、次を実行してください:
|
||||
|
||||
```bash
|
||||
cd ~/.openclaw/workspace
|
||||
@ -162,14 +142,14 @@ git add AGENTS.md SOUL.md TOOLS.md IDENTITY.md USER.md HEARTBEAT.md memory/
|
||||
git commit -m "Add agent workspace"
|
||||
```
|
||||
|
||||
### 2) 非公開のremoteを追加する(初心者向けオプション)
|
||||
### 2) 非公開リモートを追加する(初心者向けオプション)
|
||||
|
||||
オプションA: GitHub web UI
|
||||
|
||||
1. GitHubで新しい**非公開**リポジトリを作成します。
|
||||
2. READMEで初期化しないでください(マージ競合を避けるため)。
|
||||
3. HTTPSのremote URLをコピーします。
|
||||
4. remoteを追加してpushします:
|
||||
1. GitHub で新しい**非公開**リポジトリを作成します。
|
||||
2. README で初期化しないでください(マージ競合を避けるため)。
|
||||
3. HTTPS リモートURLをコピーします。
|
||||
4. リモートを追加して push します:
|
||||
|
||||
```bash
|
||||
git branch -M main
|
||||
@ -177,7 +157,7 @@ git remote add origin <https-url>
|
||||
git push -u origin main
|
||||
```
|
||||
|
||||
オプションB: GitHub CLI(`gh`)
|
||||
オプションB: GitHub CLI (`gh`)
|
||||
|
||||
```bash
|
||||
gh auth login
|
||||
@ -186,10 +166,10 @@ gh repo create openclaw-workspace --private --source . --remote origin --push
|
||||
|
||||
オプションC: GitLab web UI
|
||||
|
||||
1. GitLabで新しい**非公開**リポジトリを作成します。
|
||||
2. READMEで初期化しないでください(マージ競合を避けるため)。
|
||||
3. HTTPSのremote URLをコピーします。
|
||||
4. remoteを追加してpushします:
|
||||
1. GitLab で新しい**非公開**リポジトリを作成します。
|
||||
2. README で初期化しないでください(マージ競合を避けるため)。
|
||||
3. HTTPS リモートURLをコピーします。
|
||||
4. リモートを追加して push します:
|
||||
|
||||
```bash
|
||||
git branch -M main
|
||||
@ -208,16 +188,15 @@ git push
|
||||
|
||||
## シークレットをコミットしないでください
|
||||
|
||||
非公開repoであっても、ワークスペースにシークレットを保存しないでください:
|
||||
非公開リポジトリであっても、ワークスペースにシークレットを保存するのは避けてください:
|
||||
|
||||
- API keys、OAuth tokens、passwords、または非公開の認証情報。
|
||||
- `~/.openclaw/` 配下のあらゆるもの。
|
||||
- API keys、OAuth tokens、passwords、または private credentials。
|
||||
- `~/.openclaw/` 配下のものすべて。
|
||||
- チャットや機密添付ファイルの生ダンプ。
|
||||
|
||||
機密参照をどうしても保存する必要がある場合は、プレースホルダーを使い、実際の
|
||||
シークレットは別の場所に保管してください(パスワードマネージャー、環境変数、または `~/.openclaw/`)。
|
||||
機密参照を保存しなければならない場合は、プレースホルダーを使い、本物のシークレットは別の場所に保管してください(パスワードマネージャー、環境変数、または `~/.openclaw/`)。
|
||||
|
||||
推奨される `.gitignore` の開始例:
|
||||
推奨される `.gitignore` の初期例:
|
||||
|
||||
```gitignore
|
||||
.DS_Store
|
||||
@ -227,24 +206,21 @@ git push
|
||||
**/secrets*
|
||||
```
|
||||
|
||||
## ワークスペースを新しいマシンに移す
|
||||
## ワークスペースを新しいマシンへ移す
|
||||
|
||||
1. 目的のパスにrepoをcloneします(デフォルトは `~/.openclaw/workspace`)。
|
||||
1. 希望するパス(デフォルトは `~/.openclaw/workspace`)にリポジトリを clone します。
|
||||
2. `~/.openclaw/openclaw.json` で `agents.defaults.workspace` をそのパスに設定します。
|
||||
3. `openclaw setup --workspace <path>` を実行して、不足しているファイルを初期投入します。
|
||||
4. セッションが必要な場合は、古いマシンから `~/.openclaw/agents/<agentId>/sessions/` を
|
||||
別途コピーしてください。
|
||||
4. セッションが必要な場合は、古いマシンから `~/.openclaw/agents/<agentId>/sessions/` を別途コピーしてください。
|
||||
|
||||
## 高度な注意事項
|
||||
## 補足
|
||||
|
||||
- マルチエージェントルーティングでは、エージェントごとに異なるワークスペースを使用できます。
|
||||
ルーティング設定については [Channel routing](/ja-JP/channels/channel-routing) を参照してください。
|
||||
- `agents.defaults.sandbox` が有効な場合、main以外のセッションは
|
||||
`agents.defaults.sandbox.workspaceRoot` 配下のセッションごとのサンドボックスワークスペースを使用できます。
|
||||
- マルチエージェントのルーティングでは、エージェントごとに異なるワークスペースを使えます。ルーティング設定については [Channel routing](/ja-JP/channels/channel-routing) を参照してください。
|
||||
- `agents.defaults.sandbox` が有効な場合、非メインセッションでは `agents.defaults.sandbox.workspaceRoot` 配下のセッションごとのサンドボックスワークスペースを使用できます。
|
||||
|
||||
## 関連
|
||||
|
||||
- [Standing Orders](/ja-JP/automation/standing-orders) — ワークスペースファイル内の永続的な指示
|
||||
- [Heartbeat](/gateway/heartbeat) — HEARTBEAT.mdワークスペースファイル
|
||||
- [Session](/concepts/session) — セッション保存パス
|
||||
- [Sandboxing](/gateway/sandboxing) — サンドボックス環境でのワークスペースアクセス
|
||||
- [Heartbeat](/ja-JP/gateway/heartbeat) — HEARTBEAT.md ワークスペースファイル
|
||||
- [Session](/ja-JP/concepts/session) — セッション保存パス
|
||||
- [Sandboxing](/ja-JP/gateway/sandboxing) — サンドボックス環境におけるワークスペースアクセス
|
||||
|
||||
@ -1,51 +1,51 @@
|
||||
---
|
||||
read_when:
|
||||
- OpenClawにおける「コンテキスト」の意味を理解したい場合
|
||||
- モデルがなぜ何かを「知っている」のか(あるいは忘れたのか)をデバッグしている場合
|
||||
- コンテキストのオーバーヘッドを減らしたい場合(`/context`、`/status`、`/compact`)
|
||||
summary: 'コンテキスト: モデルが何を見るか、どのように構築されるか、そしてそれをどのように調べるか'
|
||||
- OpenClawにおける「コンテキスト」が何を意味するのかを理解したい
|
||||
- モデルがなぜ何かを「知っている」のか(または忘れたのか)をデバッグしている
|
||||
- コンテキストのオーバーヘッドを減らしたい(`/context`、`/status`、`/compact`)
|
||||
summary: コンテキスト:モデルが何を見るか、どのように構築されるか、そしてそれをどのように調べるか
|
||||
title: コンテキスト
|
||||
x-i18n:
|
||||
generated_at: "2026-04-12T23:27:59Z"
|
||||
generated_at: "2026-04-18T04:40:12Z"
|
||||
model: gpt-5.4
|
||||
provider: openai
|
||||
source_hash: 3620db1a8c1956d91a01328966df491388d3a32c4003dc4447197eb34316c77d
|
||||
source_hash: 477ccb1d9654968d0e904b6846b32b8c14db6b6c0d3d2ec2b7409639175629f9
|
||||
source_path: concepts/context.md
|
||||
workflow: 15
|
||||
---
|
||||
|
||||
# コンテキスト
|
||||
|
||||
「コンテキスト」とは、**OpenClawが実行時にモデルへ送信するすべてのもの**です。これはモデルの**コンテキストウィンドウ**(トークン上限)によって制限されます。
|
||||
「コンテキスト」とは、**OpenClawが実行のためにモデルへ送信するすべて**です。これは、モデルの**コンテキストウィンドウ**(トークン上限)によって制限されます。
|
||||
|
||||
初心者向けのイメージ:
|
||||
初心者向けのイメージ:
|
||||
|
||||
- **システムプロンプト**(OpenClawが構築): ルール、ツール、Skills リスト、時刻/ランタイム、注入されたワークスペースファイル。
|
||||
- **会話履歴**: このセッションにおけるあなたのメッセージ + アシスタントのメッセージ。
|
||||
- **ツール呼び出し/結果 + 添付**: コマンド出力、ファイル読み取り、画像/音声など。
|
||||
- **システムプロンプト**(OpenClawが構築): ルール、ツール、Skillsの一覧、時刻/ランタイム、注入されたワークスペースファイル。
|
||||
- **会話履歴**: このセッションにおけるあなたのメッセージとアシスタントのメッセージ。
|
||||
- **ツール呼び出し/結果 + 添付ファイル**: コマンド出力、ファイル読み取り、画像/音声など。
|
||||
|
||||
コンテキストは「メモリ」とは_同じではありません_。メモリはディスクに保存されて後で再読み込みできますが、コンテキストはモデルの現在のウィンドウ内に入っているものです。
|
||||
コンテキストは「メモリ」とは_同じものではありません_。メモリはディスクに保存して後で再読み込みできますが、コンテキストはモデルの現在のウィンドウ内に入っているものです。
|
||||
|
||||
## クイックスタート(コンテキストを調べる)
|
||||
## クイックスタート(コンテキストを確認する)
|
||||
|
||||
- `/status` → 「ウィンドウがどの程度埋まっているか」の簡易表示 + セッション設定。
|
||||
- `/context list` → 注入されているもの + おおよそのサイズ(ファイルごと + 合計)。
|
||||
- `/context detail` → より詳細な内訳: ファイルごと、ツールスキーマごとのサイズ、Skill エントリごとのサイズ、システムプロンプトサイズ。
|
||||
- `/usage tokens` → 通常の返信に返信ごとの使用量フッターを追加。
|
||||
- `/compact` → 古い履歴をコンパクトなエントリに要約して、ウィンドウの空きを増やす。
|
||||
- `/status` → 「ウィンドウがどれくらい埋まっているか?」のクイック表示 + セッション設定。
|
||||
- `/context list` → 何が注入されているか + おおよそのサイズ(ファイルごと + 合計)。
|
||||
- `/context detail` → より詳細な内訳: ファイルごと、ツールスキーマごとのサイズ、skillエントリごとのサイズ、システムプロンプトのサイズ。
|
||||
- `/usage tokens` → 通常の返信に、返信ごとの使用量フッターを追加。
|
||||
- `/compact` → 古い履歴を要約してコンパクトなエントリにし、ウィンドウの空きを増やす。
|
||||
|
||||
関連項目: [スラッシュコマンド](/ja-JP/tools/slash-commands)、[トークン使用量とコスト](/ja-JP/reference/token-use)、[Compaction](/ja-JP/concepts/compaction)。
|
||||
|
||||
## 出力例
|
||||
|
||||
値はモデル、プロバイダ、ツールポリシー、ワークスペース内の内容によって異なります。
|
||||
値は、モデル、プロバイダー、ツールポリシー、ワークスペース内の内容によって変わります。
|
||||
|
||||
### `/context list`
|
||||
|
||||
```
|
||||
🧠 Context breakdown
|
||||
Workspace: <workspaceDir>
|
||||
Bootstrap max/file: 20,000 chars
|
||||
Bootstrap max/file: 12,000 chars
|
||||
Sandbox: mode=non-main sandboxed=false
|
||||
System prompt (run): 38,412 chars (~9,603 tok) (Project Context 23,901 chars (~5,976 tok))
|
||||
|
||||
@ -85,31 +85,31 @@ Top tools (schema size):
|
||||
|
||||
## コンテキストウィンドウに含まれるもの
|
||||
|
||||
モデルが受け取るものはすべてカウントされます。これには以下が含まれます:
|
||||
モデルが受け取るものはすべて含まれます。たとえば:
|
||||
|
||||
- システムプロンプト(すべてのセクション)。
|
||||
- システムプロンプト(全セクション)。
|
||||
- 会話履歴。
|
||||
- ツール呼び出し + ツール結果。
|
||||
- 添付/文字起こし(画像/音声/ファイル)。
|
||||
- Compaction の要約と pruning アーティファクト。
|
||||
- プロバイダの「ラッパー」や隠しヘッダー(見えなくてもカウントされる)。
|
||||
- 添付ファイル/文字起こし(画像/音声/ファイル)。
|
||||
- Compactionの要約と刈り込みアーティファクト。
|
||||
- プロバイダーの「ラッパー」や隠しヘッダー(見えなくてもカウントされる)。
|
||||
|
||||
## OpenClawがシステムプロンプトをどのように構築するか
|
||||
## OpenClawがシステムプロンプトを構築する方法
|
||||
|
||||
システムプロンプトは**OpenClawが所有**しており、実行ごとに再構築されます。これには以下が含まれます:
|
||||
システムプロンプトは**OpenClawが管理**しており、実行ごとに再構築されます。含まれる内容は次のとおりです:
|
||||
|
||||
- ツール一覧 + 短い説明。
|
||||
- Skills リスト(メタデータのみ。詳細は後述)。
|
||||
- Skills一覧(メタデータのみ。詳細は後述)。
|
||||
- ワークスペースの場所。
|
||||
- 時刻(UTC + 設定されていれば変換後のユーザー時刻)。
|
||||
- 時刻(UTC + 設定されている場合は変換後のユーザー時刻)。
|
||||
- ランタイムメタデータ(ホスト/OS/モデル/thinking)。
|
||||
- **Project Context** 配下に注入されるワークスペースのブートストラップファイル。
|
||||
- **Project Context**配下に注入されたワークスペースのブートストラップファイル。
|
||||
|
||||
完全な内訳: [System Prompt](/ja-JP/concepts/system-prompt)。
|
||||
完全な内訳: [システムプロンプト](/ja-JP/concepts/system-prompt)。
|
||||
|
||||
## 注入されるワークスペースファイル(Project Context)
|
||||
|
||||
デフォルトでは、OpenClawは固定のワークスペースファイル群を(存在すれば)注入します:
|
||||
デフォルトでは、OpenClawは固定のワークスペースファイル群を注入します(存在する場合):
|
||||
|
||||
- `AGENTS.md`
|
||||
- `SOUL.md`
|
||||
@ -119,66 +119,61 @@ Top tools (schema size):
|
||||
- `HEARTBEAT.md`
|
||||
- `BOOTSTRAP.md`(初回実行時のみ)
|
||||
|
||||
大きなファイルは、`agents.defaults.bootstrapMaxChars`(デフォルト `20000` 文字)を使ってファイルごとに切り詰められます。OpenClawはさらに、ファイル全体をまたいだブートストラップ注入の合計上限 `agents.defaults.bootstrapTotalMaxChars`(デフォルト `150000` 文字)も適用します。`/context` では、**raw と injected** のサイズ、および切り詰めが発生したかどうかが表示されます。
|
||||
大きいファイルは、`agents.defaults.bootstrapMaxChars`(デフォルト `12000` 文字)を使ってファイルごとに切り詰められます。OpenClawはさらに、ファイル全体にまたがるブートストラップ注入の合計上限 `agents.defaults.bootstrapTotalMaxChars`(デフォルト `60000` 文字)も適用します。`/context` では、**raw と injected** のサイズ、および切り詰めが発生したかどうかが表示されます。
|
||||
|
||||
切り詰めが発生すると、ランタイムは Project Context の下にプロンプト内警告ブロックを注入できます。これは `agents.defaults.bootstrapPromptTruncationWarning`(`off`、`once`、`always`。デフォルトは `once`)で設定します。
|
||||
切り詰めが発生すると、ランタイムはProject Context配下にプロンプト内警告ブロックを注入できます。これは `agents.defaults.bootstrapPromptTruncationWarning`(`off`、`once`、`always`。デフォルトは `once`)で設定します。
|
||||
|
||||
## Skills: 注入されるものと必要時に読み込まれるもの
|
||||
## Skills: 注入されるものと必要時ロードされるもの
|
||||
|
||||
システムプロンプトには、コンパクトな**Skills リスト**(名前 + 説明 + 場所)が含まれます。このリストには実際のオーバーヘッドがあります。
|
||||
システムプロンプトには、コンパクトな**Skills一覧**(名前 + 説明 + 場所)が含まれます。この一覧には実際のオーバーヘッドがあります。
|
||||
|
||||
Skill の指示はデフォルトでは含まれません。モデルは必要なときにだけ、その Skill の `SKILL.md` を `read` することが想定されています。
|
||||
skillの指示内容自体は、デフォルトでは含まれません。モデルは、必要なときにだけそのskillの `SKILL.md` を `read` する想定です。
|
||||
|
||||
## ツール: コストは2種類ある
|
||||
|
||||
ツールは2つの形でコンテキストに影響します:
|
||||
ツールは、2つの形でコンテキストに影響します:
|
||||
|
||||
1. システムプロンプト内の**ツール一覧テキスト**(「Tooling」として見えるもの)。
|
||||
2. **ツールスキーマ**(JSON)。これらはモデルがツールを呼び出せるように送られます。プレーンテキストとして見えなくても、コンテキストにカウントされます。
|
||||
2. **ツールスキーマ**(JSON)。モデルがツールを呼び出せるように送信されます。プレーンテキストとしては見えなくても、コンテキストに含まれます。
|
||||
|
||||
`/context detail` では最大のツールスキーマを内訳表示するため、どこが支配的か確認できます。
|
||||
`/context detail` では、どのツールスキーマが最も大きいかを分解して表示できるため、何が支配的かを確認できます。
|
||||
|
||||
## コマンド、ディレクティブ、「インラインショートカット」
|
||||
|
||||
スラッシュコマンドは Gateway によって処理されます。動作にはいくつかの種類があります:
|
||||
スラッシュコマンドはGatewayによって処理されます。動作にはいくつかの種類があります:
|
||||
|
||||
- **スタンドアロンコマンド**: `/...` のみのメッセージはコマンドとして実行されます。
|
||||
- **スタンドアロンコマンド**: `/...` だけのメッセージは、コマンドとして実行されます。
|
||||
- **ディレクティブ**: `/think`、`/verbose`、`/trace`、`/reasoning`、`/elevated`、`/model`、`/queue` は、モデルがメッセージを見る前に取り除かれます。
|
||||
- ディレクティブのみのメッセージはセッション設定を保持します。
|
||||
- 通常メッセージ内のインラインディレクティブは、メッセージ単位のヒントとして機能します。
|
||||
- **インラインショートカット**(許可リストにある送信者のみ): 通常メッセージ内の特定の `/...` トークンは即座に実行されることがあり(例: 「hey /status」)、残りのテキストをモデルが見る前に取り除かれます。
|
||||
- ディレクティブだけのメッセージは、セッション設定を保持します。
|
||||
- 通常メッセージ内のインラインディレクティブは、メッセージ単位のヒントとして動作します。
|
||||
- **インラインショートカット**(許可リストに載った送信者のみ): 通常メッセージ内の特定の `/...` トークンは即座に実行できます(例: 「hey /status」)。その後、残りのテキストがモデルに渡される前に取り除かれます。
|
||||
|
||||
詳細: [スラッシュコマンド](/ja-JP/tools/slash-commands)。
|
||||
|
||||
## セッション、Compaction、pruning(何が保持されるか)
|
||||
## セッション、Compaction、刈り込み(何が保持されるか)
|
||||
|
||||
メッセージをまたいで何が保持されるかは、その仕組みによって異なります:
|
||||
メッセージをまたいで何が保持されるかは、仕組みによって異なります:
|
||||
|
||||
- **通常の履歴**は、ポリシーによって compact/prune されるまでセッショントランスクリプトに保持されます。
|
||||
- **Compaction** は要約をトランスクリプトに保持し、最近のメッセージはそのまま残します。
|
||||
- **Pruning** は実行時の_インメモリ_プロンプトから古いツール結果を削除しますが、トランスクリプト自体は書き換えません。
|
||||
- **通常の履歴** は、ポリシーにより compact/prune されるまでセッショントランスクリプトに保持されます。
|
||||
- **Compaction** は、要約をトランスクリプト内に保持し、最近のメッセージはそのまま維持します。
|
||||
- **刈り込み** は、実行時の_メモリ内_プロンプトから古いツール結果を削除しますが、トランスクリプト自体は書き換えません。
|
||||
|
||||
ドキュメント: [Session](/ja-JP/concepts/session)、[Compaction](/ja-JP/concepts/compaction)、[Session pruning](/ja-JP/concepts/session-pruning)。
|
||||
|
||||
デフォルトでは、OpenClawは組み立てと
|
||||
compaction に組み込みの `legacy` コンテキストエンジンを使用します。`kind: "context-engine"` を提供する Plugin をインストールし、
|
||||
`plugins.slots.contextEngine` でそれを選択すると、OpenClawはコンテキストの組み立て、`/compact`、および関連するサブエージェントのコンテキストライフサイクルフックをそのエンジンに委譲します。`ownsCompaction: false` は `legacy`
|
||||
エンジンへの自動フォールバックを意味しません。アクティブなエンジンは依然として `compact()` を正しく実装している必要があります。完全な
|
||||
プラガブルインターフェース、ライフサイクルフック、設定については
|
||||
[Context Engine](/ja-JP/concepts/context-engine) を参照してください。
|
||||
デフォルトでは、OpenClawは組み立てと compaction に組み込みの `legacy` コンテキストエンジンを使います。`kind: "context-engine"` を提供する plugin をインストールし、`plugins.slots.contextEngine` でそれを選ぶと、OpenClawは代わりにコンテキストの組み立て、`/compact`、および関連する subagent コンテキストライフサイクルフックをそのエンジンに委譲します。`ownsCompaction: false` であっても `legacy` エンジンへの自動フォールバックは行われません。アクティブなエンジンは依然として `compact()` を正しく実装している必要があります。完全なプラガブルインターフェース、ライフサイクルフック、設定については [Context Engine](/ja-JP/concepts/context-engine) を参照してください。
|
||||
|
||||
## `/context` が実際に報告するもの
|
||||
|
||||
`/context` は、利用可能な場合は最新の**実行時構築済み**システムプロンプトレポートを優先します:
|
||||
`/context` は、可能であれば最新の**実行時に構築された**システムプロンプトレポートを優先します:
|
||||
|
||||
- `System prompt (run)` = 最後の埋め込み(ツール使用可能)実行から取得され、セッションストアに保持されたもの。
|
||||
- `System prompt (run)` = 直近の埋め込み済み(ツール利用可能)実行から取得され、セッションストアに保存されたもの。
|
||||
- `System prompt (estimate)` = 実行レポートが存在しない場合(またはそのレポートを生成しないCLIバックエンド経由で実行している場合)に、その場で計算されたもの。
|
||||
|
||||
いずれの場合も、サイズと主な要因を報告しますが、完全なシステムプロンプトやツールスキーマ自体は出力しません。
|
||||
どちらの場合でも、サイズと主な寄与要因を報告しますが、システムプロンプト全体やツールスキーマそのものは出力しません。
|
||||
|
||||
## 関連
|
||||
|
||||
- [Context Engine](/ja-JP/concepts/context-engine) — Plugin によるカスタムコンテキスト注入
|
||||
- [Context Engine](/ja-JP/concepts/context-engine) — plugin によるカスタムコンテキスト注入
|
||||
- [Compaction](/ja-JP/concepts/compaction) — 長い会話の要約
|
||||
- [System Prompt](/ja-JP/concepts/system-prompt) — システムプロンプトの構築方法
|
||||
- [システムプロンプト](/ja-JP/concepts/system-prompt) — システムプロンプトの構築方法
|
||||
- [Agent Loop](/ja-JP/concepts/agent-loop) — エージェント実行サイクル全体
|
||||
|
||||
@ -1,15 +1,15 @@
|
||||
---
|
||||
read_when:
|
||||
- qa-labまたはqa-channelの拡張
|
||||
- リポジトリ連動のQAシナリオを追加する
|
||||
- Gatewayダッシュボードを中心に、より高い現実性のQA自動化を構築する
|
||||
- リポジトリ連動のQAシナリオの追加
|
||||
- Gatewayダッシュボードを中心に、より現実に近いQA自動化を構築する
|
||||
summary: qa-lab、qa-channel、シード済みシナリオ、プロトコルレポート向けの非公開QA自動化の構成
|
||||
title: QA E2E自動化
|
||||
x-i18n:
|
||||
generated_at: "2026-04-17T04:43:57Z"
|
||||
generated_at: "2026-04-18T04:40:10Z"
|
||||
model: gpt-5.4
|
||||
provider: openai
|
||||
source_hash: 51f97293c184d7c04c95d9858305668fbc0f93273f587ec7e54896ad5d603ab0
|
||||
source_hash: adf8c5f74e8fabdc8e9fd7ecd41afce8b60354c7dd24d92ac926d3c527927cd4
|
||||
source_path: concepts/qa-e2e-automation.md
|
||||
workflow: 15
|
||||
---
|
||||
@ -22,31 +22,32 @@ x-i18n:
|
||||
現在の構成要素:
|
||||
|
||||
- `extensions/qa-channel`: DM、チャネル、スレッド、
|
||||
リアクション、編集、削除の操作面を備えた合成メッセージチャネル。
|
||||
- `extensions/qa-lab`: トランスクリプトの観察、
|
||||
リアクション、編集、削除の各操作面を備えた合成メッセージチャネル。
|
||||
- `extensions/qa-lab`: トランスクリプトの観測、
|
||||
受信メッセージの注入、Markdownレポートのエクスポートを行うための
|
||||
デバッガUIとQAバス。
|
||||
デバッガーUIとQAバス。
|
||||
- `qa/`: キックオフタスクとベースラインQA
|
||||
シナリオのための、リポジトリ連動のシードアセット。
|
||||
シナリオ向けの、リポジトリ連動のシードアセット。
|
||||
|
||||
現在のQAオペレーターフローは、2ペインのQAサイトです:
|
||||
現在のQAオペレーターのフローは、2ペイン構成のQAサイトです:
|
||||
|
||||
- 左: エージェントを表示するGatewayダッシュボード(Control UI)。
|
||||
- 右: Slack風のトランスクリプトとシナリオ計画を表示するQA Lab。
|
||||
- 右: Slack風のトランスクリプトとシナリオプランを表示するQA Lab。
|
||||
|
||||
実行方法:
|
||||
次のコマンドで実行します:
|
||||
|
||||
```bash
|
||||
pnpm qa:lab:up
|
||||
```
|
||||
|
||||
これによりQAサイトがビルドされ、Dockerベースのgatewayレーンが起動し、
|
||||
オペレーターまたは自動化ループがエージェントにQAミッションを与え、
|
||||
実際のチャネル動作を観察し、何が機能し、何が失敗し、
|
||||
何がブロックされたままだったかを記録できるQA Labページが公開されます。
|
||||
オペレーターまたは自動化ループがエージェントにQA
|
||||
ミッションを与え、実際のチャネル動作を観察し、何が機能したか、
|
||||
何が失敗したか、何がブロックされたままだったかを記録できる
|
||||
QA Labページが公開されます。
|
||||
|
||||
Dockerイメージを毎回再ビルドせずにQA Lab UIをより高速に反復するには、
|
||||
QA Labバンドルをバインドマウントしてスタックを起動します:
|
||||
Dockerイメージを毎回再ビルドせずにQA Lab UIをより高速に反復開発するには、
|
||||
バインドマウントされたQA Labバンドルでスタックを起動します:
|
||||
|
||||
```bash
|
||||
pnpm openclaw qa docker-build-image
|
||||
@ -55,170 +56,172 @@ pnpm qa:lab:up:fast
|
||||
pnpm qa:lab:watch
|
||||
```
|
||||
|
||||
`qa:lab:up:fast` は、Dockerサービスを事前ビルド済みイメージ上で維持しつつ、
|
||||
`extensions/qa-lab/web/dist` を `qa-lab` コンテナにバインドマウントします。
|
||||
`qa:lab:watch` は変更時にそのバンドルを再ビルドし、
|
||||
QA Labアセットのハッシュが変わるとブラウザは自動リロードされます。
|
||||
`qa:lab:up:fast` は事前ビルド済みイメージ上でDockerサービスを維持し、
|
||||
`extensions/qa-lab/web/dist` を `qa-lab` コンテナにバインドマウントします。`qa:lab:watch`
|
||||
は変更時にそのバンドルを再ビルドし、QA Labアセットのハッシュが変わると
|
||||
ブラウザは自動的にリロードされます。
|
||||
|
||||
実際のトランスポートを使うMatrixスモークレーンを実行するには、次を使用します:
|
||||
実際のトランスポートを使うMatrixスモークレーンを実行するには、次を使います:
|
||||
|
||||
```bash
|
||||
pnpm openclaw qa matrix
|
||||
```
|
||||
|
||||
このレーンは、Docker内に使い捨てのTuwunelホームサーバーを用意し、
|
||||
このレーンは、使い捨てのTuwunel homeserverをDockerで用意し、
|
||||
一時的なdriver、SUT、observerユーザーを登録し、1つのプライベートルームを作成してから、
|
||||
QA gateway child内で実際のMatrix Pluginを実行します。ライブトランスポートレーンは、
|
||||
child configをテスト対象のトランスポートに限定した状態に保つため、
|
||||
Matrixはchild config内で`qa-channel`なしで動作します。
|
||||
構造化レポートアーティファクトと、stdout/stderrを結合したログは、
|
||||
選択したMatrix QA出力ディレクトリに書き込まれます。
|
||||
実際のMatrix pluginをQA gateway child内で実行します。ライブトランスポートレーンは、
|
||||
child設定をテスト対象のトランスポートに限定して保つため、
|
||||
child設定内では `qa-channel` なしでMatrixが動作します。構造化レポートアーティファクトと、
|
||||
stdout/stderrをまとめたログを、選択したMatrix QA出力ディレクトリに書き出します。
|
||||
外側の `scripts/run-node.mjs` のビルド/ランチャー出力も取得するには、
|
||||
`OPENCLAW_RUN_NODE_OUTPUT_LOG=<path>` をリポジトリ内のログファイルに設定してください。
|
||||
`OPENCLAW_RUN_NODE_OUTPUT_LOG=<path>` をリポジトリ内のログファイルに設定します。
|
||||
|
||||
実際のトランスポートを使うTelegramスモークレーンを実行するには、次を使用します:
|
||||
実際のトランスポートを使うTelegramスモークレーンを実行するには、次を使います:
|
||||
|
||||
```bash
|
||||
pnpm openclaw qa telegram
|
||||
```
|
||||
|
||||
このレーンは、使い捨てサーバーを用意する代わりに、
|
||||
1つの実在するプライベートTelegramグループを対象にします。
|
||||
必要なのは `OPENCLAW_QA_TELEGRAM_GROUP_ID`、
|
||||
実際の1つのプライベートTelegramグループを対象にします。必要なのは
|
||||
`OPENCLAW_QA_TELEGRAM_GROUP_ID`、
|
||||
`OPENCLAW_QA_TELEGRAM_DRIVER_BOT_TOKEN`、
|
||||
`OPENCLAW_QA_TELEGRAM_SUT_BOT_TOKEN`、
|
||||
および同じプライベートグループ内にある2つの異なるボットです。
|
||||
`OPENCLAW_QA_TELEGRAM_SUT_BOT_TOKEN` と、
|
||||
同じプライベートグループ内にいる2つの異なるボットです。
|
||||
SUTボットにはTelegramユーザー名が必要で、
|
||||
ボット間観察は、両方のボットで `@BotFather` の
|
||||
Bot-to-Bot Communication Mode を有効にしていると最も良好に動作します。
|
||||
ボット同士の観測は、両方のボットで
|
||||
`@BotFather` の Bot-to-Bot Communication Mode が有効になっていると
|
||||
最も安定して動作します。
|
||||
|
||||
ライブトランスポートレーンは現在、それぞれが独自のシナリオリスト形状を考案するのではなく、
|
||||
より小さな1つの共通契約を共有します:
|
||||
ライブトランスポートレーンは現在、それぞれが独自のシナリオ一覧形式を発明する代わりに、
|
||||
より小さな1つの共通コントラクトを共有しています:
|
||||
|
||||
`qa-channel` は引き続き幅広い合成プロダクト動作スイートであり、
|
||||
`qa-channel` は依然として広範な合成プロダクト動作スイートであり、
|
||||
ライブトランスポートのカバレッジマトリクスには含まれません。
|
||||
|
||||
| レーン | Canary | メンションゲーティング | Allowlistブロック | トップレベル返信 | 再起動後の再開 | スレッド継続返信 | スレッド分離 | リアクション観察 | ヘルプコマンド |
|
||||
| -------- | ------ | -------------- | --------------- | --------------- | -------------- | ---------------- | ---------------- | -------------------- | ------------ |
|
||||
| Matrix | x | x | x | x | x | x | x | x | |
|
||||
| Telegram | x | | | | | | | | x |
|
||||
| レーン | Canary | メンションゲーティング | 許可リストブロック | トップレベル返信 | 再起動後の再開 | スレッドフォローアップ | スレッド分離 | リアクション観測 | ヘルプコマンド |
|
||||
| -------- | ------ | ---------------------- | ------------------ | ---------------- | -------------- | ---------------------- | ------------ | ---------------- | -------------- |
|
||||
| Matrix | x | x | x | x | x | x | x | x | |
|
||||
| Telegram | x | | | | | | | | x |
|
||||
|
||||
これにより、`qa-channel` は幅広いプロダクト動作スイートとして維持される一方で、
|
||||
Matrix、Telegram、将来のライブトランスポートは、
|
||||
明示的なトランスポート契約チェックリストを共有できます。
|
||||
これにより、`qa-channel` は広範なプロダクト動作スイートとして維持されつつ、
|
||||
Matrix、Telegram、将来のライブトランスポートが、
|
||||
明示的な1つのトランスポートコントラクトのチェックリストを共有できます。
|
||||
|
||||
DockerをQAパスに持ち込まずに、
|
||||
使い捨てLinux VMレーンを実行するには、次を使用します:
|
||||
QAパスにDockerを持ち込まずに、使い捨てのLinux VMレーンを実行するには、
|
||||
次を使います:
|
||||
|
||||
```bash
|
||||
pnpm openclaw qa suite --runner multipass --scenario channel-chat-baseline
|
||||
```
|
||||
|
||||
これにより新しいMultipassゲストが起動し、依存関係をインストールし、
|
||||
ゲスト内でOpenClawをビルドし、`qa suite` を実行したうえで、
|
||||
これにより新しいMultipass guestが起動し、依存関係をインストールし、
|
||||
guest内でOpenClawをビルドし、`qa suite` を実行してから、
|
||||
通常のQAレポートとサマリーをホスト上の `.artifacts/qa-e2e/...` にコピーして戻します。
|
||||
シナリオ選択の挙動は、ホスト上の `qa suite` と同じものを再利用します。
|
||||
ホスト実行とMultipassスイート実行はどちらも、
|
||||
デフォルトで分離されたgateway workerを使って複数の選択シナリオを並列実行し、
|
||||
最大64 workerまたは選択シナリオ数のいずれか小さい方まで使用します。
|
||||
ホスト上の `qa suite` と同じシナリオ選択動作を再利用します。
|
||||
ホストとMultipassのsuite実行は、デフォルトで分離されたgateway workerを使って、
|
||||
選択された複数のシナリオを並列実行し、
|
||||
最大64 workerまたは選択シナリオ数のいずれか少ない方まで動作します。
|
||||
worker数を調整するには `--concurrency <count>` を使い、
|
||||
直列実行には `--concurrency 1` を使ってください。
|
||||
ライブ実行では、ゲストにとって実用的なサポート対象のQA認証入力が転送されます:
|
||||
envベースのプロバイダーキー、QAライブプロバイダー設定パス、
|
||||
および存在する場合の `CODEX_HOME` です。
|
||||
ゲストがマウントされたワークスペースを通じて書き戻せるよう、
|
||||
`--output-dir` はリポジトリルート配下に置いてください。
|
||||
直列実行するには `--concurrency 1` を使います。
|
||||
ライブ実行では、guestに対して実用的なサポート済みQA認証入力が転送されます:
|
||||
envベースのprovider key、QA live provider設定パス、
|
||||
および存在する場合は `CODEX_HOME` です。guestが
|
||||
マウントされたワークスペース経由で書き戻せるように、
|
||||
`--output-dir` はリポジトリルート配下に保ってください。
|
||||
|
||||
## リポジトリ連動のシード
|
||||
|
||||
シードアセットは `qa/` にあります:
|
||||
|
||||
- `qa/scenarios/index.md`
|
||||
- `qa/scenarios/*.md`
|
||||
- `qa/scenarios/<theme>/*.md`
|
||||
|
||||
これらは意図的にgitに置かれており、
|
||||
QA計画が人間とエージェントの両方から見えるようになっています。
|
||||
これらは意図的にgitに置かれており、QAプランが人間にも
|
||||
エージェントにも見えるようになっています。
|
||||
|
||||
`qa-lab` は汎用的なMarkdownランナーのままであるべきです。
|
||||
各シナリオMarkdownファイルは1回のテスト実行の信頼できる唯一の情報源であり、
|
||||
次を定義する必要があります:
|
||||
`qa-lab` は汎用的なmarkdownランナーとして維持するべきです。各シナリオmarkdownファイルは
|
||||
1回のテスト実行における信頼できる唯一の情報源であり、次を定義する必要があります:
|
||||
|
||||
- シナリオメタデータ
|
||||
- docsおよびコード参照
|
||||
- 任意のPlugin要件
|
||||
- 任意のgateway configパッチ
|
||||
- 任意のカテゴリ、ケイパビリティ、レーン、リスクのメタデータ
|
||||
- docsとcodeの参照
|
||||
- 任意のplugin要件
|
||||
- 任意のgateway設定パッチ
|
||||
- 実行可能な `qa-flow`
|
||||
|
||||
`qa-flow` を支える再利用可能なランタイム面は、
|
||||
汎用的かつ横断的なままでかまいません。たとえば、
|
||||
Markdownシナリオは、埋め込みControl UIをGatewayの
|
||||
`browser.request` シーム経由で操作するブラウザ側ヘルパーと、
|
||||
トランスポート側ヘルパーを組み合わせてもよく、
|
||||
汎用的かつ横断的なままで構いません。たとえば、markdownシナリオは、
|
||||
埋め込みControl UIをGatewayの `browser.request` seam経由で駆動する
|
||||
ブラウザ側ヘルパーと、トランスポート側ヘルパーを組み合わせてもよく、
|
||||
そのために特別扱いのランナーを追加する必要はありません。
|
||||
|
||||
ベースライン一覧は、少なくとも次をカバーできるだけの広さを保つべきです:
|
||||
シナリオファイルは、ソースツリーのフォルダではなく、
|
||||
プロダクト機能ごとにグループ化するべきです。ファイルを移動しても
|
||||
シナリオIDは安定したままにし、実装トレーサビリティには
|
||||
`docsRefs` と `codeRefs` を使ってください。
|
||||
|
||||
ベースライン一覧は、次をカバーできる程度に広く保つべきです:
|
||||
|
||||
- DMとチャネルチャット
|
||||
- スレッド動作
|
||||
- メッセージアクションのライフサイクル
|
||||
- Cronコールバック
|
||||
- メモリーの再呼び出し
|
||||
- メモリの想起
|
||||
- モデル切り替え
|
||||
- サブエージェントへのハンドオフ
|
||||
- リポジトリ読解とdocs読解
|
||||
- subagent handoff
|
||||
- リポジトリ読み取りとdocs読み取り
|
||||
- Lobster Invadersのような小さなビルドタスク1件
|
||||
|
||||
## プロバイダーモックレーン
|
||||
## Providerモックレーン
|
||||
|
||||
`qa suite` には2つのローカルプロバイダーモックレーンがあります:
|
||||
`qa suite` には2つのローカルproviderモックレーンがあります:
|
||||
|
||||
- `mock-openai` は、シナリオ認識型のOpenClawモックです。
|
||||
これは、リポジトリ連動QAと同等性ゲート向けの、
|
||||
既定の決定論的モックレーンのままです。
|
||||
- `aimock` は、実験的なプロトコル、
|
||||
フィクスチャ、record/replay、chaosカバレッジのために
|
||||
AIMockベースのプロバイダーサーバーを起動します。
|
||||
これは追加的なものであり、`mock-openai` の
|
||||
シナリオディスパッチャーを置き換えるものではありません。
|
||||
- `mock-openai` はシナリオ認識型のOpenClawモックです。
|
||||
リポジトリ連動QAとパリティゲート向けの、
|
||||
デフォルトの決定的モックレーンのままです。
|
||||
- `aimock` は実験的なプロトコル、
|
||||
フィクスチャ、record/replay、chaosカバレッジ向けに
|
||||
AIMockベースのproviderサーバーを起動します。これは追加的なものであり、
|
||||
`mock-openai` シナリオディスパッチャーを置き換えるものではありません。
|
||||
|
||||
プロバイダーレーンの実装は `extensions/qa-lab/src/providers/` 配下にあります。
|
||||
各プロバイダーは、自身のデフォルト値、ローカルサーバー起動、
|
||||
gateway model config、auth-profileのステージング要件、
|
||||
およびlive/mockの機能フラグを持ちます。
|
||||
共有スイートとgatewayコードは、プロバイダー名で分岐するのではなく、
|
||||
プロバイダーレジストリを経由してルーティングするべきです。
|
||||
Providerレーン実装は `extensions/qa-lab/src/providers/` 配下にあります。
|
||||
各providerは、自身のデフォルト値、ローカルサーバー起動、
|
||||
gateway model設定、auth-profileステージング要件、
|
||||
およびlive/mockケイパビリティフラグを管理します。
|
||||
共有suiteコードとgatewayコードは、provider名で分岐するのではなく、
|
||||
provider registryを経由してルーティングするべきです。
|
||||
|
||||
## トランスポートアダプター
|
||||
|
||||
`qa-lab` はMarkdown QAシナリオ向けの汎用トランスポートシームを所有します。
|
||||
`qa-channel` はそのシーム上の最初のアダプターですが、
|
||||
`qa-lab` はmarkdown QAシナリオ向けの汎用トランスポートseamを所有します。
|
||||
`qa-channel` はそのseam上の最初のアダプターですが、
|
||||
設計目標はより広いものです:
|
||||
将来の実チャネルまたは合成チャネルも、
|
||||
将来の実チャネルまたは合成チャネルは、
|
||||
トランスポート固有のQAランナーを追加するのではなく、
|
||||
同じスイートランナーに接続できるようにするべきです。
|
||||
同じsuite runnerに接続できるようにするべきです。
|
||||
|
||||
アーキテクチャレベルでは、分担は次のとおりです:
|
||||
アーキテクチャレベルでの分担は次のとおりです:
|
||||
|
||||
- `qa-lab` は、汎用シナリオ実行、worker並列性、アーティファクト書き込み、レポート作成を所有する。
|
||||
- トランスポートアダプターは、gateway config、準備完了、受信および送信の観察、トランスポートアクション、正規化されたトランスポート状態を所有する。
|
||||
- `qa/scenarios/` 配下のMarkdownシナリオファイルがテスト実行を定義し、`qa-lab` がそれを実行する再利用可能なランタイム面を提供する。
|
||||
- `qa-lab` は汎用シナリオ実行、worker並列性、アーティファクト書き出し、レポートを所有します。
|
||||
- トランスポートアダプターはgateway設定、readiness、受信および送信の観測、トランスポートアクション、正規化されたトランスポート状態を所有します。
|
||||
- `qa/scenarios/` 配下のmarkdownシナリオファイルがテスト実行を定義し、それを実行する再利用可能なランタイム面は `qa-lab` が提供します。
|
||||
|
||||
新しいチャネルアダプター向けのメンテナー向け採用ガイダンスは、
|
||||
新しいチャネルアダプター向けのメンテナー向け導入ガイダンスは
|
||||
[Testing](/ja-JP/help/testing#adding-a-channel-to-qa) にあります。
|
||||
|
||||
## レポート
|
||||
|
||||
`qa-lab` は、観察されたバスタイムラインからMarkdownのプロトコルレポートをエクスポートします。
|
||||
このレポートは次に答えるべきです:
|
||||
`qa-lab` は、観測されたバスタイムラインからMarkdownのプロトコルレポートを
|
||||
エクスポートします。レポートは次に答えるべきです:
|
||||
|
||||
- 何がうまくいったか
|
||||
- 何が機能したか
|
||||
- 何が失敗したか
|
||||
- 何がブロックされたままだったか
|
||||
- どのフォローアップシナリオを追加する価値があるか
|
||||
|
||||
キャラクター性とスタイルのチェックについては、
|
||||
同じシナリオを複数のライブモデル参照で実行し、
|
||||
評価済みMarkdownレポートを書き出します:
|
||||
文字やスタイルのチェックについては、同じシナリオを複数のライブモデル参照で実行し、
|
||||
判定付きMarkdownレポートを書き出します:
|
||||
|
||||
```bash
|
||||
pnpm openclaw qa character-eval \
|
||||
@ -238,45 +241,41 @@ pnpm openclaw qa character-eval \
|
||||
```
|
||||
|
||||
このコマンドはDockerではなく、ローカルのQA gateway child processを実行します。
|
||||
character evalシナリオは `SOUL.md` を通じてペルソナを設定し、
|
||||
その後、チャット、ワークスペースヘルプ、
|
||||
小さなファイルタスクのような通常のユーザーターンを実行するべきです。
|
||||
候補モデルには、評価中であることを知らせてはいけません。
|
||||
このコマンドは各完全トランスクリプトを保持し、
|
||||
基本的な実行統計を記録したうえで、
|
||||
judge modelに対して、fast modeかつ `xhigh` 推論で、
|
||||
自然さ、雰囲気、ユーモアによって実行結果を順位付けさせます。
|
||||
プロバイダーを比較するときは `--blind-judge-models` を使用してください:
|
||||
judge promptは引き続きすべてのトランスクリプトと実行状態を受け取りますが、
|
||||
character evalシナリオでは `SOUL.md` を通じてペルソナを設定し、
|
||||
その後チャット、ワークスペース支援、小さなファイルタスクのような
|
||||
通常のユーザーターンを実行するべきです。
|
||||
候補モデルには、それが評価対象であることを伝えてはいけません。
|
||||
このコマンドは各完全トランスクリプトを保持し、基本的な実行統計を記録したうえで、
|
||||
judge modelにfast modeと `xhigh` reasoningで、
|
||||
自然さ、雰囲気、ユーモアに基づいて実行結果を順位付けさせます。
|
||||
providerを比較する際は `--blind-judge-models` を使ってください:
|
||||
judgeプロンプトには依然としてすべてのトランスクリプトと実行ステータスが渡されますが、
|
||||
候補参照は `candidate-01` のような中立ラベルに置き換えられます。
|
||||
レポートはパース後に順位を実際の参照へマッピングし直します。
|
||||
候補実行はデフォルトで `high` thinking を使用し、
|
||||
それをサポートするOpenAIモデルでは `xhigh` を使用します。
|
||||
特定の候補を上書きするには、
|
||||
`--model provider/model,thinking=<level>` をインラインで指定してください。
|
||||
レポートは、解析後に順位を実際の参照へ対応付けて戻します。
|
||||
候補実行はデフォルトで `high` thinking、
|
||||
それをサポートするOpenAIモデルでは `xhigh` になります。
|
||||
特定の候補を上書きするには
|
||||
`--model provider/model,thinking=<level>` をインラインで使います。
|
||||
`--thinking <level>` は引き続きグローバルなフォールバックを設定し、
|
||||
古い `--model-thinking <provider/model=level>` 形式も
|
||||
互換性のため維持されています。
|
||||
OpenAI候補参照はデフォルトでfast modeになっており、
|
||||
プロバイダーがサポートしている場合は優先処理が使われます。
|
||||
単一の候補またはjudgeで上書きが必要な場合は、
|
||||
互換性のため保持されています。
|
||||
OpenAI候補参照はデフォルトでfast modeとなるため、
|
||||
providerが対応している場合はpriority processingが使われます。
|
||||
単一の候補またはjudgeに上書きが必要な場合は、
|
||||
`,fast`、`,no-fast`、または `,fast=false` をインラインで追加してください。
|
||||
すべての候補モデルでfast modeを強制的に有効にしたい場合にのみ、
|
||||
`--fast` を渡してください。
|
||||
候補とjudgeの実行時間はベンチマーク分析のためレポートに記録されますが、
|
||||
judge promptでは速度で順位付けしないよう明示されています。
|
||||
候補とjudgeのモデル実行は、どちらもデフォルトで並列数16です。
|
||||
プロバイダー制限またはローカルgatewayの負荷により実行のノイズが大きすぎる場合は、
|
||||
すべての候補モデルに対してfast modeを強制的に有効にしたい場合にのみ
|
||||
`--fast` を渡します。候補とjudgeの所要時間は
|
||||
ベンチマーク分析のためレポートに記録されますが、
|
||||
judgeプロンプトでは速度で順位付けしないよう明示されています。
|
||||
候補実行とjudge model実行はどちらもデフォルトで並列数16です。
|
||||
providerの制限やローカルgatewayの負荷で実行が不安定になる場合は、
|
||||
`--concurrency` または `--judge-concurrency` を下げてください。
|
||||
候補の `--model` が指定されていない場合、
|
||||
character evalのデフォルトは
|
||||
`openai/gpt-5.4`、`openai/gpt-5.2`、`openai/gpt-5`、
|
||||
`anthropic/claude-opus-4-6`、`anthropic/claude-sonnet-4-6`、
|
||||
`zai/glm-5.1`、
|
||||
候補 `--model` が指定されない場合、character evalのデフォルトは
|
||||
`openai/gpt-5.4`、`openai/gpt-5.2`、`openai/gpt-5`、`anthropic/claude-opus-4-6`、
|
||||
`anthropic/claude-sonnet-4-6`、`zai/glm-5.1`、
|
||||
`moonshot/kimi-k2.5`、
|
||||
`google/gemini-3.1-pro-preview` です。
|
||||
judgeの `--judge-model` が指定されていない場合、
|
||||
judgeのデフォルトは
|
||||
`google/gemini-3.1-pro-preview` になります。
|
||||
judge `--judge-model` が指定されない場合、judgeのデフォルトは
|
||||
`openai/gpt-5.4,thinking=xhigh,fast` と
|
||||
`anthropic/claude-opus-4-6,thinking=high` です。
|
||||
|
||||
|
||||
@ -1,80 +1,80 @@
|
||||
---
|
||||
read_when:
|
||||
- システムプロンプトのテキスト、ツール一覧、または時刻/Heartbeat セクションの編集
|
||||
- システムプロンプトのテキスト、ツール一覧、または時刻/Heartbeat セクションの編集
|
||||
- ワークスペースのブートストラップや Skills の注入動作の変更
|
||||
summary: OpenClawのシステムプロンプトに何が含まれているか、およびそれがどのように組み立てられるか
|
||||
summary: OpenClaw のシステムプロンプトに含まれる内容と、その組み立て方法
|
||||
title: システムプロンプト
|
||||
x-i18n:
|
||||
generated_at: "2026-04-15T19:41:42Z"
|
||||
generated_at: "2026-04-18T04:40:07Z"
|
||||
model: gpt-5.4
|
||||
provider: openai
|
||||
source_hash: c740e4646bc4980567338237bfb55126af0df72499ca00a48e4848d9a3608ab4
|
||||
source_hash: e60705994cebdd9768926168cb1c6d17ab717d7ff02353a5d5e7478ba8191cab
|
||||
source_path: concepts/system-prompt.md
|
||||
workflow: 15
|
||||
---
|
||||
|
||||
# システムプロンプト
|
||||
|
||||
OpenClaw は、エージェントの各実行ごとにカスタムのシステムプロンプトを構築します。このプロンプトは **OpenClaw が所有** しており、pi-coding-agent のデフォルトプロンプトは使用しません。
|
||||
OpenClaw は、各エージェント実行ごとにカスタムのシステムプロンプトを構築します。このプロンプトは **OpenClaw が所有** しており、pi-coding-agent のデフォルトプロンプトは使用しません。
|
||||
|
||||
このプロンプトは OpenClaw によって組み立てられ、各エージェント実行に注入されます。
|
||||
|
||||
プロバイダ Plugin は、完全な OpenClaw 所有のプロンプトを置き換えることなく、キャッシュを意識したプロンプトガイダンスを提供できます。プロバイダランタイムでは次のことが可能です。
|
||||
プロバイダ Plugin は、OpenClaw が所有する完全なプロンプトを置き換えることなく、キャッシュを意識したプロンプトガイダンスを提供できます。プロバイダランタイムでは次のことが可能です。
|
||||
|
||||
- 少数の名前付きコアセクション(`interaction_style`、`tool_call_style`、`execution_bias`)を置き換える
|
||||
- 名前付きの少数のコアセクション(`interaction_style`、
|
||||
`tool_call_style`、`execution_bias`)を置き換える
|
||||
- プロンプトキャッシュ境界の上に **stable prefix** を注入する
|
||||
- プロンプトキャッシュ境界の下に **dynamic suffix** を注入する
|
||||
|
||||
モデルファミリー固有のチューニングには、プロバイダ所有の寄与を使ってください。従来の
|
||||
`before_prompt_build` によるプロンプト変更は、互換性維持や本当にグローバルなプロンプト変更のために残し、通常のプロバイダ動作には使わないでください。
|
||||
モデルファミリー固有のチューニングには、プロバイダ所有の貢献を使用してください。従来の
|
||||
`before_prompt_build` によるプロンプト変更は、互換性のため、または本当にグローバルなプロンプト変更のために維持し、通常のプロバイダ動作には使わないでください。
|
||||
|
||||
## 構造
|
||||
|
||||
このプロンプトは意図的にコンパクトで、固定セクションを使用します。
|
||||
|
||||
- **Tooling**: 構造化ツールの source-of-truth リマインダーと、ランタイムのツール使用ガイダンス。
|
||||
- **Safety**: 権力追求的な振る舞いや監督の回避を避けるための短いガードレールリマインダー。
|
||||
- **Skills**(利用可能な場合): 必要に応じてスキル指示を読み込む方法をモデルに伝えます。
|
||||
- **OpenClaw Self-Update**: `config.schema.lookup` を使った安全な設定確認方法、`config.patch` による設定パッチ、`config.apply` による完全設定置換、そして明示的なユーザー要求時にのみ `update.run` を実行する方法。owner-only の `gateway` ツールは、保護された exec パスに正規化される従来の `tools.bash.*` エイリアスを含め、`tools.exec.ask` / `tools.exec.security` の書き換えも拒否します。
|
||||
- **Tooling**: structured-tool の単一の正しい情報源であることのリマインダーと、ランタイムのツール使用ガイダンス。
|
||||
- **Safety**: 権力追求的な行動や監督の回避を避けるための短いガードレールのリマインダー。
|
||||
- **Skills**(利用可能な場合): 必要に応じて skill の指示を読み込む方法をモデルに伝えます。
|
||||
- **OpenClaw Self-Update**: `config.schema.lookup` で安全に設定を確認する方法、`config.patch` で設定にパッチを適用する方法、`config.apply` で完全な設定を置き換える方法、そして明示的なユーザー要求がある場合にのみ `update.run` を実行する方法。owner-only の `gateway` ツールも、保護された exec パスに正規化される従来の `tools.bash.*` エイリアスを含め、`tools.exec.ask` / `tools.exec.security` の書き換えを拒否します。
|
||||
- **Workspace**: 作業ディレクトリ(`agents.defaults.workspace`)。
|
||||
- **Documentation**: OpenClaw ドキュメントへのローカルパス(リポジトリまたは npm パッケージ)と、それを読むべきタイミング。
|
||||
- **Workspace Files (injected)**: ブートストラップファイルが以下に含まれることを示します。
|
||||
- **Sandbox**(有効な場合): サンドボックス化されたランタイム、サンドボックスのパス、昇格 exec が利用可能かどうかを示します。
|
||||
- **Current Date & Time**: ユーザーローカル時刻、タイムゾーン、時刻形式。
|
||||
- **Reply Tags**: 対応プロバイダ向けの任意の返信タグ構文。
|
||||
- **Heartbeats**: デフォルトエージェントで Heartbeat が有効な場合の Heartbeat プロンプトと ack 動作。
|
||||
- **Runtime**: ホスト、OS、node、モデル、repo ルート(検出された場合)、thinking レベル(1 行)。
|
||||
- **Reasoning**: 現在の可視性レベルと `/reasoning` 切り替えヒント。
|
||||
- **Workspace Files (injected)**: ブートストラップファイルが以下に含まれていることを示します。
|
||||
- **Sandbox**(有効な場合): サンドボックス化されたランタイム、サンドボックスパス、昇格された exec が利用可能かどうかを示します。
|
||||
- **Current Date & Time**: ユーザーのローカル時刻、タイムゾーン、時刻形式。
|
||||
- **Reply Tags**: サポートされているプロバイダ向けの任意の返信タグ構文。
|
||||
- **Heartbeats**: デフォルトエージェントで heartbeat が有効な場合の、heartbeat プロンプトと ack 動作。
|
||||
- **Runtime**: ホスト、OS、node、モデル、リポジトリルート(検出された場合)、thinking level(1 行)。
|
||||
- **Reasoning**: 現在の可視性レベルと `/reasoning` 切り替えのヒント。
|
||||
|
||||
Tooling セクションには、長時間実行される作業向けのランタイムガイダンスも含まれます。
|
||||
|
||||
- `exec` の sleep ループ、`yieldMs` の遅延トリック、`process` の繰り返しポーリングではなく、将来のフォローアップ(`check back later`、リマインダー、定期作業)には cron を使う
|
||||
- 将来のフォローアップ(`check back later`、リマインダー、定期作業)には `exec` の sleep ループ、`yieldMs` の遅延トリック、繰り返しの `process` ポーリングではなく cron を使う
|
||||
- `exec` / `process` は、今すぐ開始してバックグラウンドで継続実行されるコマンドにのみ使う
|
||||
- 自動完了ウェイクが有効な場合は、コマンドを一度だけ開始し、出力または失敗時の push ベースのウェイク経路に依存する
|
||||
- 実行中コマンドを確認する必要があるときのログ、状態、入力、介入には `process` を使う
|
||||
- タスクがより大きい場合は、`sessions_spawn` を優先する。サブエージェントの完了は push ベースで、依頼元へ自動通知される
|
||||
- 完了待ちのためだけに `subagents list` / `sessions_list` をループでポーリングしない
|
||||
- 自動完了 wake が有効な場合は、コマンドを一度だけ開始し、出力の発生または失敗時には push ベースの wake パスに依存する
|
||||
- 実行中コマンドの確認が必要な場合は、ログ、ステータス、入力、または介入のために `process` を使う
|
||||
- タスクがより大きい場合は、`sessions_spawn` を優先する。サブエージェントの完了は push ベースで、要求元に自動通知される
|
||||
- 完了待ちだけのために `subagents list` / `sessions_list` をループでポーリングしない
|
||||
|
||||
実験的な `update_plan` ツールが有効な場合、Tooling では、それを自明でない複数ステップ作業にのみ使い、`in_progress` ステップをちょうど 1 つ維持し、各更新後に計画全体を繰り返さないようモデルに伝えます。
|
||||
実験的な `update_plan` ツールが有効な場合、Tooling では、これを自明ではない複数ステップ作業にのみ使用し、`in_progress` ステップを常にちょうど 1 つ維持し、更新のたびに計画全体を繰り返さないようモデルに指示します。
|
||||
|
||||
システムプロンプト内の Safety ガードレールは助言的なものです。モデルの動作を導きますが、ポリシーを強制するものではありません。強制には、ツールポリシー、exec 承認、サンドボックス化、チャネル許可リストを使ってください。運用者は設計上これらを無効化できます。
|
||||
システムプロンプト内の Safety ガードレールは助言的なものです。これらはモデルの動作を導きますが、ポリシーを強制するものではありません。強制にはツールポリシー、exec 承認、サンドボックス化、チャネル allowlist を使用してください。オペレーターは設計上これらを無効化できます。
|
||||
|
||||
ネイティブの承認カード/ボタンがあるチャネルでは、ランタイムプロンプトはエージェントに対して、まずそのネイティブ承認 UI に依存するよう伝えます。手動の
|
||||
`/approve` コマンドを含めるのは、ツール結果がチャット承認を利用不可と示した場合、または手動承認のみが唯一の経路である場合だけです。
|
||||
ネイティブの承認カード/ボタンを持つチャネルでは、ランタイムプロンプトはまずそのネイティブ承認 UI に依存するようエージェントに伝えるようになりました。手動の `/approve` コマンドを含めるのは、ツール結果がチャット承認を利用できないと示す場合、または手動承認が唯一の経路である場合だけにする必要があります。
|
||||
|
||||
## プロンプトモード
|
||||
|
||||
OpenClaw はサブエージェント向けにより小さいシステムプロンプトをレンダリングできます。ランタイムは各実行に `promptMode` を設定します(ユーザー向け設定ではありません)。
|
||||
OpenClaw はサブエージェント向けにより小さなシステムプロンプトをレンダリングできます。ランタイムは各実行に `promptMode` を設定します(ユーザー向け設定ではありません)。
|
||||
|
||||
- `full`(デフォルト): 上記の全セクションを含みます。
|
||||
- `minimal`: サブエージェントで使われ、**Skills**、**Memory Recall**、**OpenClaw Self-Update**、**Model Aliases**、**User Identity**、**Reply Tags**、**Messaging**、**Silent Replies**、**Heartbeats** を省略します。Tooling、**Safety**、Workspace、Sandbox、Current Date & Time(既知の場合)、Runtime、および注入コンテキストは引き続き利用可能です。
|
||||
- `none`: ベースの識別 1 行のみを返します。
|
||||
- `full`(デフォルト): 上記のすべてのセクションを含みます。
|
||||
- `minimal`: サブエージェント用に使われます。**Skills**、**Memory Recall**、**OpenClaw Self-Update**、**Model Aliases**、**User Identity**、**Reply Tags**、**Messaging**、**Silent Replies**、**Heartbeats** を省略します。Tooling、**Safety**、Workspace、Sandbox、Current Date & Time(既知の場合)、Runtime、および注入されたコンテキストは引き続き利用可能です。
|
||||
- `none`: ベースの識別行のみを返します。
|
||||
|
||||
`promptMode=minimal` の場合、追加で注入されるプロンプトは **Group Chat Context** ではなく **Subagent Context** とラベル付けされます。
|
||||
`promptMode=minimal` の場合、追加の注入プロンプトには **Group Chat Context** ではなく **Subagent Context** というラベルが付けられます。
|
||||
|
||||
## ワークスペースのブートストラップ注入
|
||||
## ワークスペースブートストラップの注入
|
||||
|
||||
ブートストラップファイルはトリミングされ、**Project Context** の下に追加されます。これにより、モデルは明示的に読み取らなくても識別情報やプロファイルコンテキストを把握できます。
|
||||
ブートストラップファイルはトリミングされ、**Project Context** の下に追加されます。これにより、モデルは明示的な読み取りを必要とせずに、アイデンティティとプロファイルのコンテキストを把握できます。
|
||||
|
||||
- `AGENTS.md`
|
||||
- `SOUL.md`
|
||||
@ -83,34 +83,33 @@ OpenClaw はサブエージェント向けにより小さいシステムプロ
|
||||
- `USER.md`
|
||||
- `HEARTBEAT.md`
|
||||
- `BOOTSTRAP.md`(新規ワークスペースのみ)
|
||||
- `MEMORY.md` が存在する場合はそれを、存在しない場合は小文字のフォールバックとして `memory.md`
|
||||
- `MEMORY.md` が存在する場合はそれ、存在しない場合は小文字のフォールバックとして `memory.md`
|
||||
|
||||
これらのファイルはすべて、**ファイル固有のゲートが適用されない限り**、各ターンで **コンテキストウィンドウに注入** されます。`HEARTBEAT.md` は、通常実行では、デフォルトエージェントで Heartbeat が無効な場合、または
|
||||
`agents.defaults.heartbeat.includeSystemPromptSection` が false の場合に省略されます。注入ファイルは簡潔に保ってください。特に `MEMORY.md` は時間とともに大きくなりやすく、予想外にコンテキスト使用量が増えたり、Compaction がより頻繁に発生したりする原因になります。
|
||||
これらのファイルはすべて、**ファイル固有のゲートが適用される場合を除き**、毎ターン **コンテキストウィンドウに注入** されます。通常実行時の `HEARTBEAT.md` は、デフォルトエージェントで heartbeat が無効な場合、または
|
||||
`agents.defaults.heartbeat.includeSystemPromptSection` が false の場合は省略されます。注入されるファイルは簡潔に保ってください。特に `MEMORY.md` は、時間とともに肥大化して、予想外にコンテキスト使用量が増えたり、Compaction がより頻繁に発生したりする原因になります。
|
||||
|
||||
> **注:** `memory/*.md` の日次ファイルは、通常のブートストラップ Project Context の一部では **ありません**。通常ターンでは、これらは
|
||||
> `memory_search` と `memory_get` ツールを通じて必要時にアクセスされるため、モデルが明示的にそれらを読まない限りコンテキストウィンドウを消費しません。例外は素の `/new` および `/reset` ターンです。この最初のターンでは、ランタイムが最近の日次メモリを 1 回限りの起動コンテキストブロックとして先頭に追加することがあります。
|
||||
> **注:** `memory/*.md` の日次ファイルは、通常のブートストラップ Project Context には **含まれません**。通常のターンでは、これらは `memory_search` と `memory_get` ツールを通じて必要に応じてアクセスされるため、モデルが明示的にそれらを読まない限り、コンテキストウィンドウを消費しません。例外は素の `/new` および `/reset` ターンです。この最初のターンでは、ランタイムが最近の日次メモリをワンショットの起動コンテキストブロックとして前置できる場合があります。
|
||||
|
||||
大きなファイルはマーカー付きで切り詰められます。ファイルごとの最大サイズは
|
||||
`agents.defaults.bootstrapMaxChars`(デフォルト: 20000)で制御されます。ファイル横断で注入されるブートストラップコンテンツ総量は
|
||||
`agents.defaults.bootstrapTotalMaxChars`(デフォルト: 150000)で上限が設けられています。見つからないファイルは短い missing-file マーカーを注入します。切り詰めが発生した場合、OpenClaw は Project Context に警告ブロックを注入できます。これは
|
||||
`agents.defaults.bootstrapMaxChars`(デフォルト: 12000)で制御されます。ファイル全体で注入されるブートストラップコンテンツの合計は
|
||||
`agents.defaults.bootstrapTotalMaxChars`(デフォルト: 60000)で上限が設定されます。ファイルが見つからない場合は、短い missing-file マーカーが注入されます。切り詰めが発生した場合、OpenClaw は Project Context に警告ブロックを注入できます。これは
|
||||
`agents.defaults.bootstrapPromptTruncationWarning`(`off`、`once`、`always`;
|
||||
デフォルト: `once`)で制御します。
|
||||
|
||||
サブエージェントセッションでは `AGENTS.md` と `TOOLS.md` のみが注入されます(サブエージェントコンテキストを小さく保つため、他のブートストラップファイルは除外されます)。
|
||||
サブエージェントセッションでは `AGENTS.md` と `TOOLS.md` のみが注入されます(サブエージェントのコンテキストを小さく保つため、他のブートストラップファイルは除外されます)。
|
||||
|
||||
内部フックは `agent:bootstrap` を通じてこのステップを横取りし、注入されるブートストラップファイルを変更または置換できます(たとえば `SOUL.md` を別のペルソナに差し替えるなど)。
|
||||
内部 hook は `agent:bootstrap` を通じてこのステップに介入し、注入されるブートストラップファイルを変更または置き換えることができます(たとえば `SOUL.md` を別の persona に差し替えるなど)。
|
||||
|
||||
エージェントの話し方をより generic でなくしたい場合は、まず
|
||||
エージェントの話し方をより一般的でないものにしたい場合は、
|
||||
[SOUL.md Personality Guide](/ja-JP/concepts/soul) から始めてください。
|
||||
|
||||
各注入ファイルの寄与量(raw と injected、切り詰め、さらにツールスキーマのオーバーヘッド)を確認するには、`/context list` または `/context detail` を使ってください。[Context](/ja-JP/concepts/context) を参照してください。
|
||||
各注入ファイルの寄与量(生のサイズと注入後のサイズ、切り詰め、さらにツールスキーマのオーバーヘッド)を確認するには、`/context list` または `/context detail` を使用してください。[Context](/ja-JP/concepts/context) を参照してください。
|
||||
|
||||
## 時刻処理
|
||||
|
||||
ユーザーのタイムゾーンがわかっている場合、システムプロンプトには専用の **Current Date & Time** セクションが含まれます。プロンプトキャッシュを安定させるため、現在は **タイムゾーン** のみを含みます(動的な時計や時刻形式は含みません)。
|
||||
システムプロンプトには、ユーザーのタイムゾーンが既知の場合、専用の **Current Date & Time** セクションが含まれます。プロンプトキャッシュを安定させるため、ここには現在 **タイムゾーン** のみが含まれます(動的な時計や時刻形式は含みません)。
|
||||
|
||||
エージェントが現在時刻を必要とする場合は `session_status` を使ってください。ステータスカードにはタイムスタンプ行が含まれます。同じツールは、セッションごとのモデル上書きも任意で設定できます(`model=default` でクリアされます)。
|
||||
エージェントが現在時刻を必要とする場合は `session_status` を使用してください。ステータスカードにはタイムスタンプ行が含まれます。同じツールでは、セッションごとのモデルオーバーライドを任意で設定することもできます(`model=default` でクリアされます)。
|
||||
|
||||
設定項目:
|
||||
|
||||
@ -121,10 +120,10 @@ OpenClaw はサブエージェント向けにより小さいシステムプロ
|
||||
|
||||
## Skills
|
||||
|
||||
条件を満たすスキルが存在する場合、OpenClaw は **利用可能なスキル一覧** をコンパクトに注入します(`formatSkillsForPrompt`)。これには各スキルの **ファイルパス** が含まれます。プロンプトは、列挙された場所(ワークスペース、managed、または bundled)にある SKILL.md を `read` で読み込むようモデルに指示します。条件を満たすスキルがない場合、Skills セクションは省略されます。
|
||||
対象となる Skills が存在する場合、OpenClaw は **利用可能な Skills 一覧**(`formatSkillsForPrompt`)を簡潔に注入し、各 skill の **ファイルパス** を含めます。プロンプトは、モデルに対して、一覧にある場所(workspace、managed、または bundled)から `read` を使って SKILL.md を読み込むよう指示します。対象となる skill がない場合、Skills セクションは省略されます。
|
||||
|
||||
適格性には、スキルメタデータのゲート、ランタイム環境/設定チェック、そして `agents.defaults.skills` または
|
||||
`agents.list[].skills` が設定されている場合の有効なエージェントスキル許可リストが含まれます。
|
||||
対象判定には、skill メタデータのゲート、ランタイム環境/設定チェック、および `agents.defaults.skills` または
|
||||
`agents.list[].skills` が設定されている場合の有効なエージェント skill allowlist が含まれます。
|
||||
|
||||
```
|
||||
<available_skills>
|
||||
@ -136,20 +135,20 @@ OpenClaw はサブエージェント向けにより小さいシステムプロ
|
||||
</available_skills>
|
||||
```
|
||||
|
||||
これにより、ベースプロンプトを小さく保ちながら、対象を絞ったスキル利用を可能にします。
|
||||
これにより、ベースプロンプトを小さく保ちながら、対象を絞った skill 利用を可能にします。
|
||||
|
||||
スキル一覧の予算はスキルサブシステムが管理します。
|
||||
skills 一覧の予算は skills サブシステムが管理します。
|
||||
|
||||
- グローバルデフォルト: `skills.limits.maxSkillsPromptChars`
|
||||
- エージェントごとの上書き: `agents.list[].skillsLimits.maxSkillsPromptChars`
|
||||
- エージェント単位のオーバーライド: `agents.list[].skillsLimits.maxSkillsPromptChars`
|
||||
|
||||
一般的な境界付きランタイム抜粋は別のサーフェスを使います。
|
||||
一般的な境界付きランタイム抜粋には別のサーフェスが使われます。
|
||||
|
||||
- `agents.defaults.contextLimits.*`
|
||||
- `agents.list[].contextLimits.*`
|
||||
|
||||
この分離により、スキルのサイズ設定を、`memory_get`、ライブツール結果、Compaction 後の AGENTS.md リフレッシュなどのランタイム読み取り/注入サイズから分けて扱えます。
|
||||
この分離により、skills のサイズ管理を、`memory_get`、ライブツール結果、Compaction 後の AGENTS.md 再読み込みなどのランタイム読み取り/注入サイズ管理から切り離しています。
|
||||
|
||||
## Documentation
|
||||
|
||||
利用可能な場合、システムプロンプトには **Documentation** セクションが含まれ、ローカルの OpenClaw ドキュメントディレクトリ(リポジトリワークスペース内の `docs/` またはバンドルされた npm パッケージのドキュメント)を指し示します。さらに、公開ミラー、ソースリポジトリ、コミュニティ Discord、そしてスキル発見用の ClawHub([https://clawhub.ai](https://clawhub.ai))も記載されます。プロンプトは、OpenClaw の動作、コマンド、設定、またはアーキテクチャについては、まずローカルドキュメントを参照し、可能な場合は `openclaw status` を自分で実行するようモデルに指示します(アクセスできない場合にのみユーザーに尋ねます)。
|
||||
利用可能な場合、システムプロンプトには **Documentation** セクションが含まれ、ローカルの OpenClaw ドキュメントディレクトリ(リポジトリワークスペース内の `docs/` または同梱された npm パッケージの docs)を指し示します。また、公開ミラー、ソースリポジトリ、コミュニティ Discord、そして skill 発見のための ClawHub([https://clawhub.ai](https://clawhub.ai))についても記載します。プロンプトは、OpenClaw の動作、コマンド、設定、またはアーキテクチャについては、まずローカルドキュメントを参照するようモデルに指示し、可能であれば `openclaw status` を自分で実行し、アクセス権がない場合にのみユーザーに尋ねるようにします。
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -2,26 +2,26 @@
|
||||
read_when:
|
||||
- Gateway WSクライアントの実装または更新
|
||||
- プロトコルの不一致や接続失敗のデバッグ
|
||||
- プロトコルスキーマ/モデルの再生成
|
||||
summary: 'Gateway WebSocketプロトコル: ハンドシェイク、フレーム、バージョニング'
|
||||
- プロトコルスキーマ/モデルの再生成
|
||||
summary: Gateway WebSocketプロトコル:ハンドシェイク、フレーム、バージョニング
|
||||
title: Gatewayプロトコル
|
||||
x-i18n:
|
||||
generated_at: "2026-04-16T04:44:16Z"
|
||||
generated_at: "2026-04-18T04:40:12Z"
|
||||
model: gpt-5.4
|
||||
provider: openai
|
||||
source_hash: 683e61ebe993a2d739bc34860060b0e3eda36b5c57267a2bcc03d177ec612fb3
|
||||
source_hash: 4f0eebcfdd8c926c90b4753a6d96c59e3134ddb91740f65478f11eb75be85e41
|
||||
source_path: gateway/protocol.md
|
||||
workflow: 15
|
||||
---
|
||||
|
||||
# Gatewayプロトコル(WebSocket)
|
||||
|
||||
Gateway WSプロトコルは、OpenClawの**単一のコントロールプレーン + ノード転送**です。すべてのクライアント(CLI、web UI、macOSアプリ、iOS/Androidノード、ヘッドレスノード)はWebSocket経由で接続し、ハンドシェイク時に自身の**role** + **scope**を宣言します。
|
||||
Gateway WSプロトコルは、OpenClawの**単一のコントロールプレーン + Nodeトランスポート**です。すべてのクライアント(CLI、Web UI、macOSアプリ、iOS/Android Node、ヘッドレスNode)はWebSocket経由で接続し、ハンドシェイク時に自身の**role** + **scope**を宣言します。
|
||||
|
||||
## 転送
|
||||
## トランスポート
|
||||
|
||||
- WebSocket、JSONペイロードのテキストフレーム。
|
||||
- 最初のフレームは**必ず**`connect`リクエストでなければなりません。
|
||||
- WebSocket、JSONペイロードを持つテキストフレーム。
|
||||
- 最初のフレームは**必ず**`connect`リクエストである必要があります。
|
||||
|
||||
## ハンドシェイク(connect)
|
||||
|
||||
@ -92,9 +92,20 @@ Gateway → Client:
|
||||
}
|
||||
```
|
||||
|
||||
`server`、`features`、`snapshot`、`policy`はすべてスキーマ(`src/gateway/protocol/schema/frames.ts`)で必須です。`auth`と`canvasHostUrl`は任意です。
|
||||
`server`、`features`、`snapshot`、`policy`はすべてスキーマ(`src/gateway/protocol/schema/frames.ts`)で必須です。`canvasHostUrl`は任意です。`auth`は利用可能な場合にネゴシエートされたrole/scopesを報告し、Gatewayが発行した場合は`deviceToken`も含みます。
|
||||
|
||||
デバイストークンが発行される場合、`hello-ok`には次も含まれます:
|
||||
デバイストークンが発行されない場合でも、`hello-ok.auth`はネゴシエートされた権限を報告できます。
|
||||
|
||||
```json
|
||||
{
|
||||
"auth": {
|
||||
"role": "operator",
|
||||
"scopes": ["operator.read", "operator.write"]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
デバイストークンが発行された場合、`hello-ok`には次も含まれます。
|
||||
|
||||
```json
|
||||
{
|
||||
@ -106,7 +117,7 @@ Gateway → Client:
|
||||
}
|
||||
```
|
||||
|
||||
信頼済みブートストラップのハンドオフ中、`hello-ok.auth`には`deviceTokens`内に追加の制限付きroleエントリが含まれる場合もあります:
|
||||
信頼されたブートストラップのハンドオフ中、`hello-ok.auth`には`deviceTokens`内に追加の境界付きroleエントリが含まれることもあります。
|
||||
|
||||
```json
|
||||
{
|
||||
@ -125,7 +136,7 @@ Gateway → Client:
|
||||
}
|
||||
```
|
||||
|
||||
組み込みのnode/operatorブートストラップフローでは、主要なnodeトークンは`scopes: []`のままであり、引き渡されるoperatorトークンはブートストラップoperator allowlist(`operator.approvals`、`operator.read`、`operator.talk.secrets`、`operator.write`)に制限されたままです。ブートストラップのscopeチェックはroleプレフィックス付きのままです。operatorエントリはoperatorリクエストのみを満たし、operator以外のroleでも引き続き自身のroleプレフィックス配下のscopeが必要です。
|
||||
組み込みのnode/operatorブートストラップフローでは、プライマリNodeトークンは`scopes: []`のままで、ハンドオフされたoperatorトークンはブートストラップoperator許可リスト(`operator.approvals`、`operator.read`、`operator.talk.secrets`、`operator.write`)に制限されたままです。ブートストラップscopeチェックは引き続きroleプレフィックス付きです。operatorエントリはoperatorリクエストのみを満たし、非operatorロールは引き続き自身のroleプレフィックス配下のscopeを必要とします。
|
||||
|
||||
### Nodeの例
|
||||
|
||||
@ -164,18 +175,18 @@ Gateway → Client:
|
||||
|
||||
## フレーミング
|
||||
|
||||
- **リクエスト**: `{type:"req", id, method, params}`
|
||||
- **レスポンス**: `{type:"res", id, ok, payload|error}`
|
||||
- **イベント**: `{type:"event", event, payload, seq?, stateVersion?}`
|
||||
- **Request**: `{type:"req", id, method, params}`
|
||||
- **Response**: `{type:"res", id, ok, payload|error}`
|
||||
- **Event**: `{type:"event", event, payload, seq?, stateVersion?}`
|
||||
|
||||
副作用を持つメソッドには**idempotency keys**が必要です(スキーマを参照)。
|
||||
副作用を伴うメソッドには**冪等性キー**が必要です(スキーマを参照)。
|
||||
|
||||
## Roles + scopes
|
||||
|
||||
### Roles
|
||||
|
||||
- `operator` = コントロールプレーンクライアント(CLI/UI/automation)。
|
||||
- `node` = capabilityホスト(camera/screen/canvas/system.run)。
|
||||
- `operator` = コントロールプレーンクライアント(CLI/UI/自動化)。
|
||||
- `node` = 機能ホスト(camera/screen/canvas/system.run)。
|
||||
|
||||
### Scopes(operator)
|
||||
|
||||
@ -188,153 +199,152 @@ Gateway → Client:
|
||||
- `operator.pairing`
|
||||
- `operator.talk.secrets`
|
||||
|
||||
`includeSecrets: true`を指定した`talk.config`には`operator.talk.secrets`(または`operator.admin`)が必要です。
|
||||
`includeSecrets: true`を伴う`talk.config`には`operator.talk.secrets`(または`operator.admin`)が必要です。
|
||||
|
||||
Plugin登録済みのGateway RPCメソッドは独自のoperator scopeを要求できますが、予約済みのコア管理プレフィックス(`config.*`、`exec.approvals.*`、`wizard.*`、`update.*`)は常に`operator.admin`に解決されます。
|
||||
Plugin登録されたGateway RPCメソッドは独自のoperator scopeを要求できますが、予約済みのコア管理プレフィックス(`config.*`、`exec.approvals.*`、`wizard.*`、`update.*`)は常に`operator.admin`に解決されます。
|
||||
|
||||
メソッドscopeは最初のゲートにすぎません。`chat.send`経由で到達する一部のスラッシュコマンドには、その上により厳しいコマンドレベルのチェックが適用されます。たとえば、永続的な`/config set`と`/config unset`の書き込みには`operator.admin`が必要です。
|
||||
メソッドscopeは最初のゲートにすぎません。`chat.send`経由で到達する一部のスラッシュコマンドには、その上により厳しいコマンドレベルのチェックが適用されます。たとえば、永続的な`/config set`および`/config unset`の書き込みには`operator.admin`が必要です。
|
||||
|
||||
`node.pair.approve`にも、ベースのメソッドscopeに加えて追加の承認時scopeチェックがあります:
|
||||
`node.pair.approve`にも、ベースメソッドscopeに加えて追加の承認時scopeチェックがあります。
|
||||
|
||||
- コマンドなしのリクエスト: `operator.pairing`
|
||||
- exec以外のnodeコマンドを含むリクエスト: `operator.pairing` + `operator.write`
|
||||
- `system.run`、`system.run.prepare`、または`system.which`を含むリクエスト:
|
||||
`operator.pairing` + `operator.admin`
|
||||
- non-exec Nodeコマンドを含むリクエスト: `operator.pairing` + `operator.write`
|
||||
- `system.run`、`system.run.prepare`、または`system.which`を含むリクエスト: `operator.pairing` + `operator.admin`
|
||||
|
||||
### Caps/commands/permissions(node)
|
||||
|
||||
ノードは接続時にcapabilityクレームを宣言します:
|
||||
Nodeは接続時に機能クレームを宣言します。
|
||||
|
||||
- `caps`: 高レベルのcapabilityカテゴリ。
|
||||
- `commands`: invoke用のコマンドallowlist。
|
||||
- `permissions`: 細かなトグル(例: `screen.record`、`camera.capture`)。
|
||||
- `caps`: 高レベルな機能カテゴリ。
|
||||
- `commands`: invoke用のコマンド許可リスト。
|
||||
- `permissions`: 細粒度のトグル(例: `screen.record`、`camera.capture`)。
|
||||
|
||||
Gatewayはこれらを**クレーム**として扱い、サーバー側allowlistを適用します。
|
||||
Gatewayはこれらを**クレーム**として扱い、サーバー側の許可リストを強制します。
|
||||
|
||||
## プレゼンス
|
||||
|
||||
- `system-presence`は、デバイスIDをキーとしたエントリを返します。
|
||||
- プレゼンスエントリには`deviceId`、`roles`、`scopes`が含まれるため、UIはそのデバイスが**operator**と**node**の両方として接続している場合でも、デバイスごとに1行で表示できます。
|
||||
- `system-presence`はデバイスIDをキーとするエントリを返します。
|
||||
- プレゼンスエントリには`deviceId`、`roles`、`scopes`が含まれるため、UIは**operator**と**node**の両方として接続している場合でも、デバイスごとに1行で表示できます。
|
||||
|
||||
## 一般的なRPCメソッドファミリー
|
||||
## 一般的なRPCメソッド群
|
||||
|
||||
このページは生成された完全ダンプではありませんが、公開WSサーフェスは上記のハンドシェイク/認証の例よりも広範です。現在Gatewayが公開している主要なメソッドファミリーは以下です。
|
||||
このページは生成された完全なダンプではありませんが、公開WSサーフェスは上記のハンドシェイク/認証の例よりも広範です。以下は、Gatewayが現在公開している主なメソッド群です。
|
||||
|
||||
`hello-ok.features.methods`は、`src/gateway/server-methods-list.ts`とロード済みplugin/channelのメソッドエクスポートから構築される保守的なディスカバリー一覧です。これを機能ディスカバリーとして扱ってください。`src/gateway/server-methods/*.ts`に実装されている呼び出し可能なすべてのヘルパーの生成ダンプではありません。
|
||||
`hello-ok.features.methods`は、`src/gateway/server-methods-list.ts`とロードされたplugin/channelのメソッドexportから構築された保守的な検出リストです。これを機能検出として扱ってください。`src/gateway/server-methods/*.ts`で実装されているすべての呼び出し可能ヘルパーの生成ダンプではありません。
|
||||
|
||||
### Systemとidentity
|
||||
### システムとID
|
||||
|
||||
- `health`は、キャッシュ済みまたは新たにプローブされたgateway healthスナップショットを返します。
|
||||
- `status`は`/status`形式のgatewayサマリーを返します。機密フィールドは、admin scopeを持つoperatorクライアントにのみ含まれます。
|
||||
- `gateway.identity.get`は、relayおよびpairingフローで使われるgateway device identityを返します。
|
||||
- `system-presence`は、接続中のoperator/nodeデバイスの現在のプレゼンススナップショットを返します。
|
||||
- `system-event`はsystem eventを追加し、プレゼンスコンテキストを更新/ブロードキャストできます。
|
||||
- `health`は、キャッシュされた、または新たにプローブされたGatewayヘルススナップショットを返します。
|
||||
- `status`は`/status`スタイルのGatewayサマリーを返します。機微なフィールドは、admin scopeを持つoperatorクライアントにのみ含まれます。
|
||||
- `gateway.identity.get`は、relayおよびpairingフローで使用されるGatewayデバイスIDを返します。
|
||||
- `system-presence`は、接続中のoperator/Nodeデバイスの現在のプレゼンススナップショットを返します。
|
||||
- `system-event`はシステムイベントを追加し、プレゼンスコンテキストを更新/ブロードキャストできます。
|
||||
- `last-heartbeat`は、最新の永続化されたHeartbeatイベントを返します。
|
||||
- `set-heartbeats`は、Gateway上のHeartbeat処理を切り替えます。
|
||||
- `set-heartbeats`は、Gateway上でHeartbeat処理を切り替えます。
|
||||
|
||||
### Modelsとusage
|
||||
### モデルと使用状況
|
||||
|
||||
- `models.list`は、実行時に許可されたモデルカタログを返します。
|
||||
- `models.list`は、ランタイムで許可されたモデルカタログを返します。
|
||||
- `usage.status`は、プロバイダー使用量ウィンドウ/残りクォータのサマリーを返します。
|
||||
- `usage.cost`は、日付範囲に対する集計済みコスト使用量サマリーを返します。
|
||||
- `doctor.memory.status`は、アクティブなデフォルトagent workspaceにおけるvector-memory / embeddingの準備状況を返します。
|
||||
- `usage.cost`は、日付範囲の集計コスト使用量サマリーを返します。
|
||||
- `doctor.memory.status`は、アクティブなデフォルトエージェントワークスペースのベクトルメモリ/埋め込み準備状況を返します。
|
||||
- `sessions.usage`は、セッションごとの使用量サマリーを返します。
|
||||
- `sessions.usage.timeseries`は、1つのセッションの時系列使用量を返します。
|
||||
- `sessions.usage.logs`は、1つのセッションの使用量ログエントリを返します。
|
||||
|
||||
### Channelsとloginヘルパー
|
||||
### Channelsとログインヘルパー
|
||||
|
||||
- `channels.status`は、組み込み + バンドル済みchannel/pluginのステータスサマリーを返します。
|
||||
- `channels.logout`は、そのchannelがlogoutをサポートしている場合に特定のchannel/accountをlogoutします。
|
||||
- `web.login.start`は、現在のQR対応web channel providerのQR/web loginフローを開始します。
|
||||
- `web.login.wait`は、そのQR/web loginフローの完了を待ち、成功時にchannelを開始します。
|
||||
- `push.test`は、登録済みiOS nodeにテストAPNs pushを送信します。
|
||||
- `channels.status`は、組み込み + バンドルされたchannel/pluginのステータスサマリーを返します。
|
||||
- `channels.logout`は、そのchannelがログアウトをサポートしている場合に、特定のchannel/accountをログアウトします。
|
||||
- `web.login.start`は、現在のQR対応web channel providerに対するQR/webログインフローを開始します。
|
||||
- `web.login.wait`は、そのQR/webログインフローの完了を待機し、成功時にchannelを開始します。
|
||||
- `push.test`は、登録済みのiOS NodeにテストAPNsプッシュを送信します。
|
||||
- `voicewake.get`は、保存されているウェイクワードトリガーを返します。
|
||||
- `voicewake.set`は、ウェイクワードトリガーを更新し、変更をブロードキャストします。
|
||||
|
||||
### Messagingとlogs
|
||||
### メッセージングとログ
|
||||
|
||||
- `send`は、chat runner外でchannel/account/threadを対象にした送信を行う、直接のアウトバウンド配信RPCです。
|
||||
- `logs.tail`は、カーソル/制限および最大バイト制御付きで、設定済みgateway file-log tailを返します。
|
||||
- `send`は、chat runnerの外側でchannel/account/threadターゲット宛て送信を行うための直接の送信RPCです。
|
||||
- `logs.tail`は、設定されたGatewayファイルログの末尾を、cursor/limitおよびmax-byte制御付きで返します。
|
||||
|
||||
### TalkとTTS
|
||||
|
||||
- `talk.config`は、有効なTalk設定ペイロードを返します。`includeSecrets`には`operator.talk.secrets`(または`operator.admin`)が必要です。
|
||||
- `talk.mode`は、WebChat/Control UIクライアント向けに現在のTalkモード状態を設定/ブロードキャストします。
|
||||
- `talk.speak`は、アクティブなTalk speech providerを通じて音声合成します。
|
||||
- `tts.status`は、TTSの有効状態、アクティブなprovider、フォールバックprovider、およびprovider config状態を返します。
|
||||
- `tts.providers`は、表示可能なTTS provider一覧を返します。
|
||||
- `talk.mode`は、WebChat/Control UIクライアント向けの現在のTalk mode状態を設定/ブロードキャストします。
|
||||
- `talk.speak`は、アクティブなTalk speech providerを通じて音声を合成します。
|
||||
- `tts.status`は、TTS有効状態、アクティブprovider、フォールバックprovider、およびprovider設定状態を返します。
|
||||
- `tts.providers`は、表示可能なTTS providerインベントリを返します。
|
||||
- `tts.enable`と`tts.disable`は、TTS設定状態を切り替えます。
|
||||
- `tts.setProvider`は、優先TTS providerを更新します。
|
||||
- `tts.convert`は、単発のtext-to-speech変換を実行します。
|
||||
|
||||
### Secrets、config、update、wizard
|
||||
|
||||
- `secrets.reload`は、アクティブなSecretRefを再解決し、完全に成功した場合にのみ実行時secret状態を切り替えます。
|
||||
- `secrets.resolve`は、特定のcommand/targetセットに対するコマンド対象secret割り当てを解決します。
|
||||
- `config.get`は、現在のconfigスナップショットとハッシュを返します。
|
||||
- `config.set`は、検証済みconfigペイロードを書き込みます。
|
||||
- `config.patch`は、部分的なconfig更新をマージします。
|
||||
- `config.apply`は、完全なconfigペイロードを検証して置き換えます。
|
||||
- `config.schema`は、Control UIとCLIツールで使われるライブconfig schemaペイロードを返します。schema、`uiHints`、version、生成メタデータを含み、実行時にロード可能な場合はplugin + channel schemaメタデータも含みます。このschemaには、nested object、wildcard、array-item、および一致するフィールドドキュメントが存在する場合の`anyOf` / `oneOf` / `allOf`構成分岐を含め、UIで使われる同じラベルとヘルプテキストから導出されたフィールド`title` / `description`メタデータが含まれます。
|
||||
- `config.schema.lookup`は、1つのconfig pathに対するpathスコープのlookupペイロードを返します。正規化済みpath、浅いschema node、一致したhint + `hintPath`、およびUI/CLIのドリルダウン用の直下の子サマリーを返します。
|
||||
- lookup schema nodeは、ユーザー向けドキュメントと一般的な検証フィールドを保持します: `title`、`description`、`type`、`enum`、`const`、`format`、`pattern`、数値/文字列/配列/オブジェクトの制約、および`additionalProperties`、`deprecated`、`readOnly`、`writeOnly`のような真偽値フラグ。
|
||||
- 子サマリーは、`key`、正規化済み`path`、`type`、`required`、`hasChildren`、および一致した`hint` / `hintPath`を公開します。
|
||||
- `update.run`は、Gateway updateフローを実行し、update自体が成功した場合にのみ再起動をスケジュールします。
|
||||
- `wizard.start`、`wizard.next`、`wizard.status`、`wizard.cancel`は、オンボーディングウィザードをWS RPCで公開します。
|
||||
- `secrets.reload`は、アクティブなSecretRefを再解決し、完全に成功した場合にのみランタイムのシークレット状態を入れ替えます。
|
||||
- `secrets.resolve`は、特定のcommand/targetセットに対するコマンド対象シークレット割り当てを解決します。
|
||||
- `config.get`は、現在の設定スナップショットとハッシュを返します。
|
||||
- `config.set`は、検証済みの設定ペイロードを書き込みます。
|
||||
- `config.patch`は、部分的な設定更新をマージします。
|
||||
- `config.apply`は、完全な設定ペイロードを検証して置き換えます。
|
||||
- `config.schema`は、Control UIとCLIツールで使用されるライブ設定スキーマペイロードを返します。スキーマ、`uiHints`、バージョン、生成メタデータを含み、ランタイムがロードできる場合はplugin + channelのスキーマメタデータも含みます。このスキーマには、同じラベルとヘルプテキストから導出された`title` / `description`メタデータが含まれ、ネストされたオブジェクト、ワイルドカード、配列項目、および一致するフィールドドキュメントが存在する場合の`anyOf` / `oneOf` / `allOf`構成ブランチも含まれます。
|
||||
- `config.schema.lookup`は、1つの設定パスに対するパススコープのlookupペイロードを返します。正規化されたパス、浅いスキーマノード、一致したヒント + `hintPath`、およびUI/CLIドリルダウン用の直下の子サマリーを含みます。
|
||||
- Lookupスキーマノードは、ユーザー向けドキュメントと一般的な検証フィールドを保持します。`title`、`description`、`type`、`enum`、`const`、`format`、`pattern`、数値/文字列/配列/オブジェクトの境界、および`additionalProperties`、`deprecated`、`readOnly`、`writeOnly`などの真偽値フラグです。
|
||||
- 子サマリーは、`key`、正規化された`path`、`type`、`required`、`hasChildren`に加えて、一致した`hint` / `hintPath`を公開します。
|
||||
- `update.run`は、Gateway更新フローを実行し、更新自体が成功した場合にのみ再起動をスケジュールします。
|
||||
- `wizard.start`、`wizard.next`、`wizard.status`、`wizard.cancel`は、WS RPC経由でオンボーディングウィザードを公開します。
|
||||
|
||||
### 既存の主要ファミリー
|
||||
|
||||
#### Agentとworkspaceヘルパー
|
||||
#### Agentとワークスペースのヘルパー
|
||||
|
||||
- `agents.list`は、設定済みagentエントリを返します。
|
||||
- `agents.create`、`agents.update`、`agents.delete`は、agentレコードとworkspace接続を管理します。
|
||||
- `agents.files.list`、`agents.files.get`、`agents.files.set`は、agent向けに公開されるブートストラップworkspaceファイルを管理します。
|
||||
- `agent.identity.get`は、agentまたはsessionに対する有効なassistant identityを返します。
|
||||
- `agent.wait`は、実行の完了を待ち、利用可能であれば終端スナップショットを返します。
|
||||
- `agents.create`、`agents.update`、`agents.delete`は、agentレコードとワークスペース配線を管理します。
|
||||
- `agents.files.list`、`agents.files.get`、`agents.files.set`は、agentに公開されるブートストラップワークスペースファイルを管理します。
|
||||
- `agent.identity.get`は、agentまたはセッションに対する有効なアシスタントIDを返します。
|
||||
- `agent.wait`は、実行の完了を待機し、利用可能な場合は終端スナップショットを返します。
|
||||
|
||||
#### Session制御
|
||||
#### セッション制御
|
||||
|
||||
- `sessions.list`は、現在のセッションインデックスを返します。
|
||||
- `sessions.subscribe`と`sessions.unsubscribe`は、現在のWSクライアントに対するセッション変更イベント購読を切り替えます。
|
||||
- `sessions.messages.subscribe`と`sessions.messages.unsubscribe`は、1つのセッションに対するtranscript/messageイベント購読を切り替えます。
|
||||
- `sessions.preview`は、特定のセッションキーに対する制限付きtranscriptプレビューを返します。
|
||||
- `sessions.preview`は、特定のセッションキーに対する境界付きtranscriptプレビューを返します。
|
||||
- `sessions.resolve`は、セッションターゲットを解決または正規化します。
|
||||
- `sessions.create`は、新しいセッションエントリを作成します。
|
||||
- `sessions.send`は、既存のセッションにメッセージを送信します。
|
||||
- `sessions.steer`は、アクティブなセッション向けの割り込みして方向付けるバリアントです。
|
||||
- `sessions.abort`は、セッションのアクティブな処理を中止します。
|
||||
- `sessions.steer`は、アクティブなセッションに対する割り込みとsteerのバリアントです。
|
||||
- `sessions.abort`は、セッションのアクティブな作業を中止します。
|
||||
- `sessions.patch`は、セッションメタデータ/オーバーライドを更新します。
|
||||
- `sessions.reset`、`sessions.delete`、`sessions.compact`は、セッションメンテナンスを実行します。
|
||||
- `sessions.get`は、保存されている完全なセッション行を返します。
|
||||
- chat実行では引き続き`chat.history`、`chat.send`、`chat.abort`、`chat.inject`を使います。
|
||||
- `chat.history`は、UIクライアント向けに表示用に正規化されています。visible textからインラインdirectiveタグが削除され、プレーンテキストのtool-call XMLペイロード(`<tool_call>...</tool_call>`、`<function_call>...</function_call>`、`<tool_calls>...</tool_calls>`、`<function_calls>...</function_calls>`、および切り詰められたtool-callブロックを含む)と、漏れたASCII/全角のmodel control tokenが削除され、完全にsilent-tokenだけのassistant行(完全一致の`NO_REPLY` / `no_reply`など)は省略され、過大な行はプレースホルダーに置き換えられる場合があります。
|
||||
- `sessions.get`は、完全な保存済みセッション行を返します。
|
||||
- chat実行では引き続き`chat.history`、`chat.send`、`chat.abort`、`chat.inject`を使用します。
|
||||
- `chat.history`は、UIクライアント向けに表示正規化されています。インラインdirectiveタグは可視テキストから除去され、プレーンテキストのtool-call XMLペイロード(`<tool_call>...</tool_call>`、`<function_call>...</function_call>`、`<tool_calls>...</tool_calls>`、`<function_calls>...</function_calls>`、および切り詰められたtool-callブロックを含む)と漏出したASCII/全角のモデル制御トークンは除去され、正確な`NO_REPLY` / `no_reply`のような純粋なsilent-token assistant行は省略され、サイズの大きすぎる行はプレースホルダーに置き換えられることがあります。
|
||||
|
||||
#### デバイスペアリングとデバイストークン
|
||||
|
||||
- `device.pair.list`は、保留中および承認済みのペア済みデバイスを返します。
|
||||
- `device.pair.approve`、`device.pair.reject`、`device.pair.remove`は、デバイスペアリングレコードを管理します。
|
||||
- `device.token.rotate`は、承認済みのroleおよびscopeの範囲内でペア済みデバイストークンをローテーションします。
|
||||
- `device.token.revoke`は、ペア済みデバイストークンを無効化します。
|
||||
- `device.token.rotate`は、承認済みのroleおよびscope境界内でペア済みデバイストークンをローテーションします。
|
||||
- `device.token.revoke`は、ペア済みデバイストークンを失効させます。
|
||||
|
||||
#### Nodeのペアリング、invoke、保留中の作業
|
||||
|
||||
- `node.pair.request`、`node.pair.list`、`node.pair.approve`、`node.pair.reject`、`node.pair.verify`は、nodeのペアリングとブートストラップ検証を扱います。
|
||||
- `node.list`と`node.describe`は、既知/接続済みのnode状態を返します。
|
||||
- `node.rename`は、ペア済みnodeラベルを更新します。
|
||||
- `node.invoke`は、接続済みnodeにコマンドを転送します。
|
||||
- `node.pair.request`、`node.pair.list`、`node.pair.approve`、`node.pair.reject`、`node.pair.verify`は、Nodeペアリングとブートストラップ検証を扱います。
|
||||
- `node.list`と`node.describe`は、既知の/接続中のNode状態を返します。
|
||||
- `node.rename`は、ペア済みNodeラベルを更新します。
|
||||
- `node.invoke`は、接続中のNodeにコマンドを転送します。
|
||||
- `node.invoke.result`は、invokeリクエストの結果を返します。
|
||||
- `node.event`は、node由来のイベントをgatewayに戻します。
|
||||
- `node.event`は、Node起点のイベントをGatewayに戻します。
|
||||
- `node.canvas.capability.refresh`は、スコープ付きcanvas-capabilityトークンを更新します。
|
||||
- `node.pending.pull`と`node.pending.ack`は、接続済みnodeキューAPIです。
|
||||
- `node.pending.enqueue`と`node.pending.drain`は、オフライン/切断中のnode向けの永続的な保留作業を管理します。
|
||||
- `node.pending.pull`と`node.pending.ack`は、接続中NodeキューAPIです。
|
||||
- `node.pending.enqueue`と`node.pending.drain`は、オフライン/切断中のNode向けの永続的な保留作業を管理します。
|
||||
|
||||
#### 承認ファミリー
|
||||
|
||||
- `exec.approval.request`、`exec.approval.get`、`exec.approval.list`、`exec.approval.resolve`は、単発のexec承認リクエストと、保留中承認の参照/再生を扱います。
|
||||
- `exec.approval.waitDecision`は、1件の保留中exec承認を待機し、最終判断を返します(タイムアウト時は`null`)。
|
||||
- `exec.approvals.get`と`exec.approvals.set`は、gateway exec承認ポリシースナップショットを管理します。
|
||||
- `exec.approvals.node.get`と`exec.approvals.node.set`は、node relayコマンド経由でnodeローカルのexec承認ポリシーを管理します。
|
||||
- `exec.approval.request`、`exec.approval.get`、`exec.approval.list`、`exec.approval.resolve`は、単発のexec承認リクエストと、保留中承認のlookup/replayを扱います。
|
||||
- `exec.approval.waitDecision`は、1つの保留中exec承認を待機し、最終決定を返します(タイムアウト時は`null`)。
|
||||
- `exec.approvals.get`と`exec.approvals.set`は、Gateway exec承認ポリシースナップショットを管理します。
|
||||
- `exec.approvals.node.get`と`exec.approvals.node.set`は、Node relayコマンド経由でNodeローカルexec承認ポリシーを管理します。
|
||||
- `plugin.approval.request`、`plugin.approval.list`、`plugin.approval.waitDecision`、`plugin.approval.resolve`は、Plugin定義の承認フローを扱います。
|
||||
|
||||
#### その他の主要ファミリー
|
||||
@ -342,21 +352,21 @@ Gatewayはこれらを**クレーム**として扱い、サーバー側allowlist
|
||||
- automation:
|
||||
- `wake`は、即時または次回Heartbeat時のwakeテキスト注入をスケジュールします
|
||||
- `cron.list`、`cron.status`、`cron.add`、`cron.update`、`cron.remove`、`cron.run`、`cron.runs`
|
||||
- skills/tools: `commands.list`、`skills.*`、`tools.catalog`、`tools.effective`
|
||||
- Skills/tools: `commands.list`、`skills.*`、`tools.catalog`、`tools.effective`
|
||||
|
||||
### 一般的なイベントファミリー
|
||||
|
||||
- `chat`: `chat.inject`やその他のtranscript専用chatイベントなどのUI chat更新。
|
||||
- `session.message`と`session.tool`: 購読中セッション向けのtranscript/event-stream更新。
|
||||
- `session.message`と`session.tool`: 購読中セッション向けのtranscript/イベントストリーム更新。
|
||||
- `sessions.changed`: セッションインデックスまたはメタデータが変更されました。
|
||||
- `presence`: system presenceスナップショット更新。
|
||||
- `presence`: システムプレゼンススナップショット更新。
|
||||
- `tick`: 定期的なkeepalive / livenessイベント。
|
||||
- `health`: gateway healthスナップショット更新。
|
||||
- `health`: Gatewayヘルススナップショット更新。
|
||||
- `heartbeat`: Heartbeatイベントストリーム更新。
|
||||
- `cron`: cron実行/ジョブ変更イベント。
|
||||
- `shutdown`: gatewayシャットダウン通知。
|
||||
- `node.pair.requested` / `node.pair.resolved`: nodeペアリングのライフサイクル。
|
||||
- `node.invoke.request`: node invokeリクエストのブロードキャスト。
|
||||
- `cron`: Cron実行/ジョブ変更イベント。
|
||||
- `shutdown`: Gatewayシャットダウン通知。
|
||||
- `node.pair.requested` / `node.pair.resolved`: Nodeペアリングのライフサイクル。
|
||||
- `node.invoke.request`: Node invokeリクエストのブロードキャスト。
|
||||
- `device.pair.requested` / `device.pair.resolved`: ペア済みデバイスのライフサイクル。
|
||||
- `voicewake.changed`: ウェイクワードトリガー設定が変更されました。
|
||||
- `exec.approval.requested` / `exec.approval.resolved`: exec承認のライフサイクル。
|
||||
@ -364,125 +374,125 @@ Gatewayはこれらを**クレーム**として扱い、サーバー側allowlist
|
||||
|
||||
### Nodeヘルパーメソッド
|
||||
|
||||
- ノードは、auto-allowチェック用に現在のskill実行可能ファイル一覧を取得するために`skills.bins`を呼び出せます。
|
||||
- Nodeは、自動許可チェック用に現在のskill実行ファイル一覧を取得するために`skills.bins`を呼び出せます。
|
||||
|
||||
### Operatorヘルパーメソッド
|
||||
|
||||
- operatorは、agentの実行時コマンド一覧を取得するために`commands.list`(`operator.read`)を呼び出せます。
|
||||
- `agentId`は任意です。省略するとデフォルトagent workspaceを参照します。
|
||||
- `scope`は、主要な`name`がどのサーフェスを対象にするかを制御します:
|
||||
- `text`は、先頭の`/`を除いた主要なテキストコマンドトークンを返します
|
||||
- `native`およびデフォルトの`both`パスは、利用可能な場合にprovider対応のnative名を返します
|
||||
- `textAliases`は、`/model`や`/m`のような正確なスラッシュエイリアスを保持します。
|
||||
- `nativeName`は、存在する場合にprovider対応のnativeコマンド名を保持します。
|
||||
- `provider`は任意で、native命名とnative Pluginコマンドの可用性にのみ影響します。
|
||||
- Operatorは、agentのランタイムコマンドインベントリを取得するために`commands.list`(`operator.read`)を呼び出せます。
|
||||
- `agentId`は任意です。省略するとデフォルトagentワークスペースを読み取ります。
|
||||
- `scope`は、主`name`がどのサーフェスを対象にするかを制御します。
|
||||
- `text`は、先頭の`/`を除いた主textコマンドトークンを返します
|
||||
- `native`およびデフォルトの`both`パスは、利用可能な場合にprovider対応native名を返します
|
||||
- `textAliases`は、`/model`や`/m`のような正確なスラッシュ別名を保持します。
|
||||
- `nativeName`は、存在する場合にprovider対応nativeコマンド名を保持します。
|
||||
- `provider`は任意で、native名付けとnative Pluginコマンド可用性にのみ影響します。
|
||||
- `includeArgs=false`は、レスポンスからシリアライズ済み引数メタデータを省略します。
|
||||
- operatorは、agentの実行時ツールカタログを取得するために`tools.catalog`(`operator.read`)を呼び出せます。レスポンスには、グループ化されたツールと出所メタデータが含まれます:
|
||||
- Operatorは、agentのランタイムtoolカタログを取得するために`tools.catalog`(`operator.read`)を呼び出せます。レスポンスには、グループ化されたtoolsとprovenanceメタデータが含まれます。
|
||||
- `source`: `core`または`plugin`
|
||||
- `pluginId`: `source="plugin"`の場合のPlugin所有者
|
||||
- `optional`: Pluginツールが任意かどうか
|
||||
- operatorは、セッションの実行時有効ツール一覧を取得するために`tools.effective`(`operator.read`)を呼び出せます。
|
||||
- `pluginId`: `source="plugin"`のときのPlugin所有者
|
||||
- `optional`: Plugin toolが任意かどうか
|
||||
- Operatorは、セッションのランタイムで有効なtoolインベントリを取得するために`tools.effective`(`operator.read`)を呼び出せます。
|
||||
- `sessionKey`は必須です。
|
||||
- gatewayは、呼び出し元が指定したauthやdeliveryコンテキストを受け入れる代わりに、サーバー側でセッションから信頼できる実行時コンテキストを導出します。
|
||||
- レスポンスはセッションスコープであり、core、Plugin、channelツールを含め、現在アクティブな会話で今使えるものを反映します。
|
||||
- operatorは、agentの表示可能なskill一覧を取得するために`skills.status`(`operator.read`)を呼び出せます。
|
||||
- `agentId`は任意です。省略するとデフォルトagent workspaceを参照します。
|
||||
- レスポンスには、生のsecret値を公開せずに、適格性、不足要件、configチェック、サニタイズ済みインストールオプションが含まれます。
|
||||
- operatorは、ClawHubディスカバリーメタデータ向けに`skills.search`と`skills.detail`(`operator.read`)を呼び出せます。
|
||||
- operatorは、`skills.install`(`operator.admin`)を2つのモードで呼び出せます:
|
||||
- ClawHubモード: `{ source: "clawhub", slug, version?, force? }`は、skillフォルダーをデフォルトagent workspaceの`skills/`ディレクトリにインストールします。
|
||||
- Gateway installerモード: `{ name, installId, dangerouslyForceUnsafeInstall?, timeoutMs? }`は、gatewayホスト上で宣言済み`metadata.openclaw.install`アクションを実行します。
|
||||
- operatorは、`skills.update`(`operator.admin`)を2つのモードで呼び出せます:
|
||||
- ClawHubモードでは、デフォルトagent workspace内の1つの追跡対象slug、またはすべての追跡対象ClawHubインストールを更新します。
|
||||
- Configモードでは、`enabled`、`apiKey`、`env`などの`skills.entries.<skillKey>`値にパッチを適用します。
|
||||
- Gatewayは、呼び出し元から供給されたauthやdeliveryコンテキストを受け入れる代わりに、セッションから信頼できるランタイムコンテキストをサーバー側で導出します。
|
||||
- レスポンスはセッションスコープであり、core、Plugin、channel toolsを含めて、アクティブな会話が現在使用できるものを反映します。
|
||||
- Operatorは、agentの可視なskillインベントリを取得するために`skills.status`(`operator.read`)を呼び出せます。
|
||||
- `agentId`は任意です。省略するとデフォルトagentワークスペースを読み取ります。
|
||||
- レスポンスには、適格性、不足している要件、configチェック、生のシークレット値を公開しないサニタイズ済みinstallオプションが含まれます。
|
||||
- Operatorは、ClawHub検出メタデータのために`skills.search`と`skills.detail`(`operator.read`)を呼び出せます。
|
||||
- Operatorは、`skills.install`(`operator.admin`)を2つのモードで呼び出せます。
|
||||
- ClawHubモード: `{ source: "clawhub", slug, version?, force? }`は、デフォルトagentワークスペースの`skills/`ディレクトリにskillフォルダーをインストールします。
|
||||
- Gatewayインストーラーモード: `{ name, installId, dangerouslyForceUnsafeInstall?, timeoutMs? }`は、Gatewayホスト上で宣言された`metadata.openclaw.install`アクションを実行します。
|
||||
- Operatorは、`skills.update`(`operator.admin`)を2つのモードで呼び出せます。
|
||||
- ClawHubモードは、1つの追跡対象slug、またはデフォルトagentワークスペース内のすべての追跡対象ClawHubインストールを更新します。
|
||||
- Configモードは、`enabled`、`apiKey`、`env`などの`skills.entries.<skillKey>`値をパッチします。
|
||||
|
||||
## Exec承認
|
||||
|
||||
- execリクエストに承認が必要な場合、gatewayは`exec.approval.requested`をブロードキャストします。
|
||||
- operatorクライアントは、`exec.approval.resolve`を呼び出して解決します(`operator.approvals` scopeが必要です)。
|
||||
- `host=node`の場合、`exec.approval.request`には`systemRunPlan`(正規化された`argv`/`cwd`/`rawCommand`/sessionメタデータ)を含める必要があります。`systemRunPlan`が欠けているリクエストは拒否されます。
|
||||
- 承認後、転送される`node.invoke system.run`呼び出しは、その正規化された`systemRunPlan`を権威あるコマンド/cwd/sessionコンテキストとして再利用します。
|
||||
- 呼び出し元がprepareと最終承認済み`system.run`転送の間で`command`、`rawCommand`、`cwd`、`agentId`、または`sessionKey`を変更した場合、gatewayは変更されたペイロードを信用せずに実行を拒否します。
|
||||
- execリクエストに承認が必要な場合、Gatewayは`exec.approval.requested`をブロードキャストします。
|
||||
- Operatorクライアントは、`exec.approval.resolve`を呼び出して解決します(`operator.approvals` scopeが必要です)。
|
||||
- `host=node`の場合、`exec.approval.request`には`systemRunPlan`(正規化された`argv`/`cwd`/`rawCommand`/セッションメタデータ)が含まれている必要があります。`systemRunPlan`がないリクエストは拒否されます。
|
||||
- 承認後、転送された`node.invoke system.run`呼び出しは、その正規の`systemRunPlan`を権威あるcommand/cwd/sessionコンテキストとして再利用します。
|
||||
- 呼び出し元がprepareと最終承認済み`system.run`転送の間で`command`、`rawCommand`、`cwd`、`agentId`、`sessionKey`を変更した場合、Gatewayは変更されたペイロードを信用せず、その実行を拒否します。
|
||||
|
||||
## Agent deliveryフォールバック
|
||||
## Agent配信フォールバック
|
||||
|
||||
- `agent`リクエストには、アウトバウンド配信を要求するために`deliver=true`を含めることができます。
|
||||
- `bestEffortDeliver=false`は厳密な動作を維持します。未解決または内部専用のdeliveryターゲットは`INVALID_REQUEST`を返します。
|
||||
- `bestEffortDeliver=true`は、外部配信可能なルートを解決できない場合(たとえばinternal/webchatセッションや曖昧なマルチchannel設定)に、セッション専用実行へのフォールバックを許可します。
|
||||
- `agent`リクエストには、送信先配信を要求するための`deliver=true`を含めることができます。
|
||||
- `bestEffortDeliver=false`は厳密な動作を維持します。未解決または内部専用の配信先ターゲットは`INVALID_REQUEST`を返します。
|
||||
- `bestEffortDeliver=true`は、外部配信可能ルートを解決できない場合(たとえば内部/webchatセッションや曖昧なマルチchannel設定)に、セッション専用実行へのフォールバックを許可します。
|
||||
|
||||
## バージョニング
|
||||
|
||||
- `PROTOCOL_VERSION`は`src/gateway/protocol/schema/protocol-schemas.ts`にあります。
|
||||
- クライアントは`minProtocol` + `maxProtocol`を送信し、サーバーは不一致を拒否します。
|
||||
- スキーマ + モデルはTypeBox定義から生成されます:
|
||||
- スキーマ + モデルはTypeBox定義から生成されます。
|
||||
- `pnpm protocol:gen`
|
||||
- `pnpm protocol:gen:swift`
|
||||
- `pnpm protocol:check`
|
||||
|
||||
### クライアント定数
|
||||
|
||||
`src/gateway/client.ts`のリファレンスクライアントは、これらのデフォルト値を使用します。値はprotocol v3全体で安定しており、サードパーティクライアントにとって期待されるベースラインです。
|
||||
`src/gateway/client.ts`のリファレンスクライアントは、これらのデフォルト値を使用します。値はプロトコルv3全体で安定しており、サードパーティクライアントに期待されるベースラインです。
|
||||
|
||||
| 定数 | デフォルト | ソース |
|
||||
| --- | --- | --- |
|
||||
| ----------------------------------------- | ----------------------------------------------------- | ---------------------------------------------------------- |
|
||||
| `PROTOCOL_VERSION` | `3` | `src/gateway/protocol/schema/protocol-schemas.ts` |
|
||||
| リクエストタイムアウト(RPCごと) | `30_000` ms | `src/gateway/client.ts` (`requestTimeoutMs`) |
|
||||
| 事前認証 / connect-challengeタイムアウト | `10_000` ms | `src/gateway/handshake-timeouts.ts`(`250`–`10_000`にクランプ) |
|
||||
| preauth / connect-challengeタイムアウト | `10_000` ms | `src/gateway/handshake-timeouts.ts`(クランプ `250`–`10_000`) |
|
||||
| 初期再接続バックオフ | `1_000` ms | `src/gateway/client.ts` (`backoffMs`) |
|
||||
| 最大再接続バックオフ | `30_000` ms | `src/gateway/client.ts` (`scheduleReconnect`) |
|
||||
| device-token切断後の高速再試行クランプ | `250` ms | `src/gateway/client.ts` |
|
||||
| device-token close後の高速リトライクランプ | `250` ms | `src/gateway/client.ts` |
|
||||
| `terminate()`前の強制停止猶予 | `250` ms | `FORCE_STOP_TERMINATE_GRACE_MS` |
|
||||
| `stopAndWait()`のデフォルトタイムアウト | `1_000` ms | `STOP_AND_WAIT_TIMEOUT_MS` |
|
||||
| `stopAndWait()`デフォルトタイムアウト | `1_000` ms | `STOP_AND_WAIT_TIMEOUT_MS` |
|
||||
| デフォルトtick間隔(`hello-ok`前) | `30_000` ms | `src/gateway/client.ts` |
|
||||
| tick-timeout切断 | 無通信が`tickIntervalMs * 2`を超えた場合はコード`4000` | `src/gateway/client.ts` |
|
||||
| tickタイムアウトclose | 無通信が`tickIntervalMs * 2`を超えるとコード`4000` | `src/gateway/client.ts` |
|
||||
| `MAX_PAYLOAD_BYTES` | `25 * 1024 * 1024`(25 MB) | `src/gateway/server-constants.ts` |
|
||||
|
||||
サーバーは、有効な`policy.tickIntervalMs`、`policy.maxPayload`、`policy.maxBufferedBytes`を`hello-ok`で通知します。クライアントは、ハンドシェイク前のデフォルト値ではなく、これらの値を尊重する必要があります。
|
||||
サーバーは、有効な`policy.tickIntervalMs`、`policy.maxPayload`、`policy.maxBufferedBytes`を`hello-ok`で通知します。クライアントは、ハンドシェイク前のデフォルト値ではなく、それらの値に従うべきです。
|
||||
|
||||
## 認証
|
||||
|
||||
- 共有シークレットによるgateway認証は、設定された認証モードに応じて`connect.params.auth.token`または`connect.params.auth.password`を使います。
|
||||
- Tailscale Serve(`gateway.auth.allowTailscale: true`)や非loopbackの`gateway.auth.mode: "trusted-proxy"`のようなidentity付きモードでは、`connect.params.auth.*`ではなくリクエストヘッダーからconnect認証チェックを満たします。
|
||||
- private-ingressの`gateway.auth.mode: "none"`は共有シークレットのconnect認証を完全にスキップします。このモードを公開/信頼できないingressで公開しないでください。
|
||||
- ペアリング後、Gatewayは接続のrole + scopesにスコープされた**device token**を発行します。これは`hello-ok.auth.deviceToken`で返され、クライアントは今後の接続のためにこれを永続化する必要があります。
|
||||
- クライアントは、接続成功時には必ず主要な`hello-ok.auth.deviceToken`を永続化する必要があります。
|
||||
- その**保存済み**device tokenで再接続する場合は、そのトークンに対して保存済みの承認scopeセットも再利用する必要があります。これにより、すでに許可されているread/probe/statusアクセスが維持され、再接続時により狭い暗黙のadmin専用scopeへと黙って縮小されることを防げます。
|
||||
- クライアント側のconnect認証組み立て(`src/gateway/client.ts`内の`selectConnectAuth`):
|
||||
- `auth.password`は独立しており、設定されていれば常に転送されます。
|
||||
- `auth.token`は優先順で設定されます: まず明示的な共有トークン、次に明示的な`deviceToken`、その次に保存済みのデバイス単位トークン(`deviceId` + `role`をキーとする)。
|
||||
- `auth.bootstrapToken`は、上記のどれでも`auth.token`が解決されなかった場合にのみ送信されます。共有トークンまたは解決済みdevice tokenがあれば抑止されます。
|
||||
- one-shotの`AUTH_TOKEN_MISMATCH`再試行時の保存済みdevice tokenの自動昇格は、**trusted endpointsのみ**で有効です — loopback、またはピン留めされた`tlsFingerprint`を持つ`wss://`です。ピン留めなしの公開`wss://`は該当しません。
|
||||
- 追加の`hello-ok.auth.deviceTokens`エントリは、ブートストラップのハンドオフトークンです。`wss://`やloopback/local pairingのような信頼できる転送でブートストラップ認証を使って接続した場合にのみ永続化してください。
|
||||
- クライアントが明示的な**`deviceToken`**または明示的な**`scopes`**を指定した場合、その呼び出し元が要求したscopeセットが引き続き権威あるものです。キャッシュ済みscopeは、クライアントが保存済みのデバイス単位トークンを再利用している場合にのみ再利用されます。
|
||||
- device tokenは、`device.token.rotate`と`device.token.revoke`でローテーション/無効化できます(`operator.pairing` scopeが必要です)。
|
||||
- トークン発行/ローテーションは、そのデバイスのpairingエントリに記録された承認済みroleセットの範囲内に制限されます。トークンのローテーションによって、そのデバイスをpairing承認で一度も許可されていないroleへ拡張することはできません。
|
||||
- ペア済みデバイストークンセッションでは、呼び出し元が`operator.admin`も持っていない限り、デバイス管理は自分自身のスコープに限定されます。adminではない呼び出し元は、自分**自身の**デバイスエントリのみをremove/revoke/rotateできます。
|
||||
- `device.token.rotate`は、要求されたoperator scopeセットも、呼び出し元の現在のセッションscopeに照らしてチェックします。adminではない呼び出し元は、現在保持しているものより広いoperator scopeセットへトークンをローテーションできません。
|
||||
- 認証失敗には、`error.details.code`に加えて復旧ヒントが含まれます:
|
||||
- 共有シークレットGateway認証は、設定された認証モードに応じて`connect.params.auth.token`または`connect.params.auth.password`を使用します。
|
||||
- Tailscale Serve(`gateway.auth.allowTailscale: true`)や非loopbackの`gateway.auth.mode: "trusted-proxy"`のようなID保持モードでは、`connect.params.auth.*`ではなくリクエストヘッダーからconnect認証チェックを満たします。
|
||||
- プライベートingressの`gateway.auth.mode: "none"`は共有シークレットconnect認証を完全にスキップします。このモードを公開/信頼できないingressで公開しないでください。
|
||||
- ペアリング後、Gatewayは接続のrole + scopesにスコープされた**device token**を発行します。これは`hello-ok.auth.deviceToken`で返され、クライアントは将来の接続のためにそれを永続化する必要があります。
|
||||
- クライアントは、成功したconnectの後に常にプライマリ`hello-ok.auth.deviceToken`を永続化する必要があります。
|
||||
- その**保存済み**device tokenで再接続する場合、そのトークンに対して保存済みの承認scopeセットも再利用する必要があります。これにより、すでに付与されたread/probe/statusアクセスが保持され、再接続がより狭い暗黙のadmin専用scopeへ静かに縮小されることを防ぎます。
|
||||
- クライアント側のconnect認証組み立て(`src/gateway/client.ts`の`selectConnectAuth`):
|
||||
- `auth.password`は直交しており、設定されている場合は常に転送されます。
|
||||
- `auth.token`は優先順位順に設定されます。最初に明示的な共有トークン、次に明示的な`deviceToken`、最後に保存済みのデバイス単位トークン(`deviceId` + `role`でキー付け)。
|
||||
- `auth.bootstrapToken`は、上記のいずれでも`auth.token`が解決されなかった場合にのみ送信されます。共有トークンまたは解決済みのdevice tokenがあれば送信されません。
|
||||
- 保存済みdevice tokenの自動昇格は、ワンショットの`AUTH_TOKEN_MISMATCH`リトライ時でも**信頼されたエンドポイントのみ**で有効です — loopback、または固定された`tlsFingerprint`を持つ`wss://`です。ピン留めなしの公開`wss://`は該当しません。
|
||||
- 追加の`hello-ok.auth.deviceTokens`エントリはブートストラップ引き継ぎトークンです。`wss://`またはloopback/local pairingのような信頼されたトランスポート上でブートストラップ認証を使った接続の場合にのみ永続化してください。
|
||||
- クライアントが明示的な`deviceToken`または明示的な`scopes`を指定した場合、その呼び出し元要求のscopeセットが引き続き権威を持ちます。キャッシュ済みscopeが再利用されるのは、クライアントが保存済みのデバイス単位トークンを再利用している場合だけです。
|
||||
- Device tokenは`device.token.rotate`と`device.token.revoke`でローテーション/失効できます(`operator.pairing` scopeが必要です)。
|
||||
- トークンの発行/ローテーションは、そのデバイスのペアリングエントリに記録された承認済みroleセットの範囲内に制限されます。トークンのローテーションによって、ペアリング承認が一度も許可していないroleへそのデバイスを拡張することはできません。
|
||||
- ペア済みデバイストークンセッションでは、呼び出し元が`operator.admin`も持っていない限り、デバイス管理は自身のスコープに限定されます。非admin呼び出し元は、自分**自身**のデバイスエントリのみをremove/revoke/rotateできます。
|
||||
- `device.token.rotate`は、要求されたoperator scopeセットが呼び出し元の現在のセッションscopeに対して適切かどうかも確認します。非admin呼び出し元は、自分が現在保持しているより広いoperator scopeセットへトークンをローテーションできません。
|
||||
- 認証失敗には、`error.details.code`と回復ヒントが含まれます:
|
||||
- `error.details.canRetryWithDeviceToken`(boolean)
|
||||
- `error.details.recommendedNextStep`(`retry_with_device_token`、`update_auth_configuration`、`update_auth_credentials`、`wait_then_retry`、`review_auth_configuration`)
|
||||
- `AUTH_TOKEN_MISMATCH`に対するクライアント動作:
|
||||
- 信頼できるクライアントは、キャッシュ済みのデバイス単位トークンで1回だけ制限付き再試行を試みられます。
|
||||
- その再試行が失敗した場合、クライアントは自動再接続ループを停止し、operatorの対応ガイダンスを表示する必要があります。
|
||||
- 信頼されたクライアントは、キャッシュ済みのデバイス単位トークンで1回だけ制限付きリトライを試行できます。
|
||||
- そのリトライが失敗した場合、クライアントは自動再接続ループを停止し、オペレーターの対応ガイダンスを表示する必要があります。
|
||||
|
||||
## デバイスID + ペアリング
|
||||
|
||||
- ノードは、キーペアのフィンガープリントから導出された安定したデバイスID(`device.id`)を含める必要があります。
|
||||
- Nodeは、キーペアフィンガープリントから導出された安定したデバイスID(`device.id`)を含める必要があります。
|
||||
- Gatewayは、デバイス + roleごとにトークンを発行します。
|
||||
- 新しいデバイスIDには、ローカル自動承認が有効になっていない限り、ペアリング承認が必要です。
|
||||
- ローカル自動承認が有効でない限り、新しいデバイスIDにはペアリング承認が必要です。
|
||||
- ペアリング自動承認は、直接のlocal loopback接続を中心にしています。
|
||||
- OpenClawには、信頼済み共有シークレットのヘルパーフロー向けに、限定的なbackend/container-local self-connectパスもあります。
|
||||
- 同一ホストのtailnetまたはLAN接続も、ペアリング上は引き続きリモートとして扱われ、承認が必要です。
|
||||
- すべてのWSクライアントは、`connect`時に`device` IDを含める必要があります(operator + node)。
|
||||
Control UIがこれを省略できるのは次のモードのみです:
|
||||
- localhost専用の安全でないHTTP互換のための`gateway.controlUi.allowInsecureAuth=true`。
|
||||
- `gateway.auth.mode: "trusted-proxy"`によるoperator Control UI認証が成功している場合。
|
||||
- `gateway.controlUi.dangerouslyDisableDeviceAuth=true`(緊急用、重大なセキュリティ低下)。
|
||||
- すべての接続は、サーバーが提供する`connect.challenge` nonceに署名する必要があります。
|
||||
- OpenClawには、信頼された共有シークレットヘルパーフロー向けの限定的なバックエンド/コンテナローカル自己接続パスもあります。
|
||||
- 同一ホストのtailnetまたはLAN接続は、依然としてpairing上はリモートとして扱われ、承認が必要です。
|
||||
- すべてのWSクライアントは、`connect`中に`device` IDを含める必要があります(operator + node)。
|
||||
Control UIがこれを省略できるのは、次のモードのみです:
|
||||
- localhost専用の安全でないHTTP互換性のための`gateway.controlUi.allowInsecureAuth=true`。
|
||||
- 成功した`gateway.auth.mode: "trusted-proxy"` operator Control UI認証。
|
||||
- `gateway.controlUi.dangerouslyDisableDeviceAuth=true`(非常時用、深刻なセキュリティ低下)。
|
||||
- すべての接続は、サーバー提供の`connect.challenge` nonceに署名する必要があります。
|
||||
|
||||
### デバイス認証移行の診断
|
||||
### デバイス認証移行診断
|
||||
|
||||
従来のchallenge前署名動作をまだ使っているレガシークライアント向けに、`connect`は現在、安定した`error.details.reason`とともに`error.details.code`配下で`DEVICE_AUTH_*`詳細コードを返します。
|
||||
従来のchallenge前署名動作をまだ使用しているレガシークライアント向けに、`connect`は現在、安定した`error.details.reason`の下で`error.details.code`に`DEVICE_AUTH_*`詳細コードを返します。
|
||||
|
||||
一般的な移行失敗:
|
||||
|
||||
@ -491,23 +501,23 @@ Gatewayはこれらを**クレーム**として扱い、サーバー側allowlist
|
||||
| `device nonce required` | `DEVICE_AUTH_NONCE_REQUIRED` | `device-nonce-missing` | クライアントが`device.nonce`を省略した(または空で送信した)。 |
|
||||
| `device nonce mismatch` | `DEVICE_AUTH_NONCE_MISMATCH` | `device-nonce-mismatch` | クライアントが古い/誤ったnonceで署名した。 |
|
||||
| `device signature invalid` | `DEVICE_AUTH_SIGNATURE_INVALID` | `device-signature` | 署名ペイロードがv2ペイロードと一致しない。 |
|
||||
| `device signature expired` | `DEVICE_AUTH_SIGNATURE_EXPIRED` | `device-signature-stale` | 署名済みタイムスタンプが許容スキュー範囲外。 |
|
||||
| `device signature expired` | `DEVICE_AUTH_SIGNATURE_EXPIRED` | `device-signature-stale` | 署名済みタイムスタンプが許容されるスキュー範囲外。 |
|
||||
| `device identity mismatch` | `DEVICE_AUTH_DEVICE_ID_MISMATCH` | `device-id-mismatch` | `device.id`が公開鍵フィンガープリントと一致しない。 |
|
||||
| `device public key invalid` | `DEVICE_AUTH_PUBLIC_KEY_INVALID` | `device-public-key` | 公開鍵形式/正規化に失敗した。 |
|
||||
| `device public key invalid` | `DEVICE_AUTH_PUBLIC_KEY_INVALID` | `device-public-key` | 公開鍵の形式/正規化に失敗した。 |
|
||||
|
||||
移行先の目標:
|
||||
移行目標:
|
||||
|
||||
- 必ず`connect.challenge`を待ちます。
|
||||
- サーバーnonceを含むv2ペイロードに署名します。
|
||||
- 同じnonceを`connect.params.device.nonce`で送信します。
|
||||
- 推奨される署名ペイロードは`v3`で、device/client/role/scopes/token/nonceフィールドに加えて`platform`と`deviceFamily`も束縛します。
|
||||
- レガシー`v2`署名も互換性のため引き続き受け入れられますが、ペア済みデバイスのメタデータ固定は、再接続時のコマンドポリシーを引き続き制御します。
|
||||
- 常に`connect.challenge`を待機する。
|
||||
- サーバーnonceを含むv2ペイロードに署名する。
|
||||
- 同じnonceを`connect.params.device.nonce`で送信する。
|
||||
- 推奨される署名ペイロードは`v3`で、device/client/role/scopes/token/nonceフィールドに加えて`platform`と`deviceFamily`を束縛します。
|
||||
- レガシー`v2`署名も互換性のため引き続き受け入れられますが、ペア済みデバイスメタデータのピン留めは再接続時のコマンドポリシーを引き続き制御します。
|
||||
|
||||
## TLS + ピン留め
|
||||
|
||||
- WS接続でTLSがサポートされます。
|
||||
- クライアントは任意でgateway証明書フィンガープリントをピン留めできます(`gateway.tls`設定に加えて`gateway.remote.tlsFingerprint`またはCLIの`--tls-fingerprint`を参照)。
|
||||
- WS接続ではTLSがサポートされます。
|
||||
- クライアントは任意でGateway証明書フィンガープリントをピン留めできます(`gateway.tls` configおよび`gateway.remote.tlsFingerprint`またはCLI `--tls-fingerprint`を参照)。
|
||||
|
||||
## スコープ
|
||||
|
||||
このプロトコルは、**完全なgateway API**(status、channels、models、chat、agent、sessions、nodes、approvalsなど)を公開します。正確なサーフェスは、`src/gateway/protocol/schema.ts`内のTypeBoxスキーマで定義されています。
|
||||
このプロトコルは**完全なGateway API**(status、channels、models、chat、agent、sessions、nodes、approvalsなど)を公開します。正確なサーフェスは`src/gateway/protocol/schema.ts`のTypeBoxスキーマで定義されています。
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -1,76 +1,68 @@
|
||||
---
|
||||
read_when:
|
||||
- macOS appの機能を実装している場合
|
||||
- macOSでgatewayライフサイクルまたはnodeブリッジを変更している場合
|
||||
summary: OpenClaw macOS companion app(メニューバー + gatewayブローカー)
|
||||
title: macOS App
|
||||
- macOSアプリ機能の実装
|
||||
- macOSでのGatewayライフサイクルまたはNodeブリッジの変更
|
||||
summary: OpenClaw macOSコンパニオンアプリ(メニューバー + Gatewayブローカー)
|
||||
title: macOSアプリ
|
||||
x-i18n:
|
||||
generated_at: "2026-04-05T12:51:27Z"
|
||||
generated_at: "2026-04-18T04:40:13Z"
|
||||
model: gpt-5.4
|
||||
provider: openai
|
||||
source_hash: bfac937e352ede495f60af47edf3b8e5caa5b692ba0ea01d9fb0de9a44bbc135
|
||||
source_hash: d637df2f73ced110223c48ea3c934045d782e150a46495f434cf924a6a00baf0
|
||||
source_path: platforms/macos.md
|
||||
workflow: 15
|
||||
---
|
||||
|
||||
# OpenClaw macOS Companion(メニューバー + gatewayブローカー)
|
||||
# OpenClaw macOS Companion(メニューバー + Gatewayブローカー)
|
||||
|
||||
macOS appは、OpenClawの**メニューバーコンパニオン**です。権限を管理し、
|
||||
ローカルでGatewayを管理または接続し(launchdまたは手動)、macOSの
|
||||
機能をnodeとしてagentに公開します。
|
||||
macOSアプリは、OpenClawの**メニューバーコンパニオン**です。権限を管理し、ローカルでGatewayを管理または接続し(launchdまたは手動)、macOSの機能をノードとしてエージェントに公開します。
|
||||
|
||||
## 何をするか
|
||||
## できること
|
||||
|
||||
- メニューバーにネイティブ通知とステータスを表示します。
|
||||
- TCCプロンプト(Notifications、Accessibility、Screen Recording、Microphone、
|
||||
Speech Recognition、Automation/AppleScript)を管理します。
|
||||
- Gatewayを実行または接続します(localまたはremote)。
|
||||
- ネイティブ通知とステータスをメニューバーに表示します。
|
||||
- TCCプロンプト(通知、アクセシビリティ、画面収録、マイク、音声認識、Automation/AppleScript)を管理します。
|
||||
- Gatewayを実行または接続します(ローカルまたはリモート)。
|
||||
- macOS専用ツール(Canvas、Camera、Screen Recording、`system.run`)を公開します。
|
||||
- **remote** modeではローカルnode host serviceを開始し(launchd)、**local** modeでは停止します。
|
||||
- 必要に応じて **PeekabooBridge** をホストします。
|
||||
- 要求に応じてnpm、pnpm、またはbun経由でグローバルCLI(`openclaw`)をインストールします
|
||||
(appはnpm、次にpnpm、最後にbunを優先します。Nodeは引き続き推奨されるGatewayランタイムです)。
|
||||
- **remote**モードではローカルのノードホストサービスを起動し(launchd)、**local**モードでは停止します。
|
||||
- 必要に応じて、UIオートメーション用の**PeekabooBridge**をホストします。
|
||||
- リクエストに応じて、グローバルCLI(`openclaw`)をnpm、pnpm、またはbun経由でインストールします(アプリはnpm、次にpnpm、最後にbunを優先します。Nodeは引き続き推奨されるGatewayランタイムです)。
|
||||
|
||||
## local modeとremote mode
|
||||
## localモードとremoteモード
|
||||
|
||||
- **Local**(デフォルト): appは、実行中のローカルGatewayがあればそこへ接続します。
|
||||
なければ `openclaw gateway install` 経由でlaunchd serviceを有効化します。
|
||||
- **Remote**: appはSSH/Tailscale経由でGatewayへ接続し、ローカルprocessは決して起動しません。
|
||||
appはローカルの**node host service**を起動し、remote GatewayがこのMacへ到達できるようにします。
|
||||
appはGatewayを子プロセスとして起動しません。
|
||||
Gateway discoveryは現在、raw tailnet IPよりもTailscale MagicDNS名を優先するため、
|
||||
tailnet IPが変わったときでもMac appはより確実に復旧できます。
|
||||
- **Local**(デフォルト): 実行中のローカルGatewayがあればアプリはそれに接続します。ない場合は、`openclaw gateway install` を使ってlaunchdサービスを有効にします。
|
||||
- **Remote**: アプリはSSH/Tailscale経由でGatewayに接続し、ローカルプロセスを起動しません。
|
||||
アプリはローカルの**ノードホストサービス**を起動して、リモートGatewayがこのMacに到達できるようにします。
|
||||
アプリはGatewayを子プロセスとして起動しません。
|
||||
Gateway検出は現在、生のtailnet IPよりもTailscale MagicDNS名を優先するため、tailnet IPが変わった場合でもMacアプリはより確実に復旧できます。
|
||||
|
||||
## Launchd制御
|
||||
|
||||
appは、ユーザーごとのLaunchAgent `ai.openclaw.gateway`
|
||||
(`--profile`/`OPENCLAW_PROFILE` 使用時は `ai.openclaw.<profile>`。legacyな `com.openclaw.*` も引き続きunload対象)を管理します。
|
||||
アプリは、ユーザーごとのLaunchAgent `ai.openclaw.gateway` を管理します(`--profile`/`OPENCLAW_PROFILE`使用時は `ai.openclaw.<profile>`、従来の `com.openclaw.*` も引き続きアンロードされます)。
|
||||
|
||||
```bash
|
||||
launchctl kickstart -k gui/$UID/ai.openclaw.gateway
|
||||
launchctl bootout gui/$UID/ai.openclaw.gateway
|
||||
```
|
||||
|
||||
名前付きprofileで実行している場合は、ラベルを `ai.openclaw.<profile>` に置き換えてください。
|
||||
名前付きプロファイルを実行する場合は、ラベルを `ai.openclaw.<profile>` に置き換えてください。
|
||||
|
||||
LaunchAgentがインストールされていない場合は、appから有効化するか、
|
||||
`openclaw gateway install` を実行してください。
|
||||
LaunchAgentがインストールされていない場合は、アプリから有効にするか、`openclaw gateway install` を実行してください。
|
||||
|
||||
## Node capabilities(mac)
|
||||
## Nodeの機能(mac)
|
||||
|
||||
macOS appは自分自身をnodeとして提示します。一般的なコマンド:
|
||||
macOSアプリは自身をNodeとして提示します。よく使うコマンド:
|
||||
|
||||
- Canvas: `canvas.present`, `canvas.navigate`, `canvas.eval`, `canvas.snapshot`, `canvas.a2ui.*`
|
||||
- Camera: `camera.snap`, `camera.clip`
|
||||
- Screen: `screen.record`
|
||||
- Screen: `screen.snapshot`, `screen.record`
|
||||
- System: `system.run`, `system.notify`
|
||||
|
||||
nodeは `permissions` マップを報告し、agentsが何が許可されているか判断できるようにします。
|
||||
Nodeは、エージェントが何を許可するか判断できるように `permissions` マップを報告します。
|
||||
|
||||
Node service + app IPC:
|
||||
Nodeサービス + アプリIPC:
|
||||
|
||||
- ヘッドレスのnode host serviceが実行中(remote mode)であるとき、それはnodeとしてGateway WSへ接続します。
|
||||
- `system.run` はローカルUnix socket経由でmacOS app(UI/TCCコンテキスト)内で実行されます。プロンプトと出力はapp内にとどまります。
|
||||
- ヘッドレスのノードホストサービスが実行中の場合(remoteモード)、NodeとしてGateway WSに接続します。
|
||||
- `system.run` はローカルUnixソケット経由でmacOSアプリ内(UI/TCCコンテキスト)で実行されます。プロンプトと出力はアプリ内に留まります。
|
||||
|
||||
図(SCI):
|
||||
|
||||
@ -81,10 +73,10 @@ Gateway -> Node Service (WS)
|
||||
Mac App (UI + TCC + system.run)
|
||||
```
|
||||
|
||||
## Exec approvals(`system.run`)
|
||||
## 実行承認(system.run)
|
||||
|
||||
`system.run` は、macOS app内の**Exec approvals**(Settings → Exec approvals)で制御されます。
|
||||
Security + ask + allowlistは、Mac上の次の場所にローカル保存されます:
|
||||
`system.run` は、macOSアプリ内の**Exec approvals**(Settings → Exec approvals)で制御されます。
|
||||
セキュリティ + 確認 + 許可リストは、Mac上の以下にローカル保存されます:
|
||||
|
||||
```
|
||||
~/.openclaw/exec-approvals.json
|
||||
@ -111,120 +103,101 @@ Security + ask + allowlistは、Mac上の次の場所にローカル保存され
|
||||
|
||||
注意:
|
||||
|
||||
- `allowlist` エントリは、解決済みバイナリパスに対するglobパターンです。
|
||||
- shell制御または展開構文(`&&`, `||`, `;`, `|`, `` ` ``, `$`, `<`, `>`, `(`, `)`)を含む
|
||||
生のshell command textはallowlist missとして扱われ、明示的承認が必要です
|
||||
(またはshell binary自体をallowlistする必要があります)。
|
||||
- プロンプトで「Always Allow」を選ぶと、そのcommandがallowlistに追加されます。
|
||||
- `system.run` のenvironment overridesはフィルタされ(`PATH`, `DYLD_*`, `LD_*`, `NODE_OPTIONS`, `PYTHON*`, `PERL*`, `RUBYOPT`, `SHELLOPTS`, `PS4` を削除)、
|
||||
その後appのenvironmentとマージされます。
|
||||
- shell wrapper(`bash|sh|zsh ... -c/-lc`)では、request単位のenvironment overridesは、
|
||||
小さな明示allowlist(`TERM`, `LANG`, `LC_*`, `COLORTERM`, `NO_COLOR`, `FORCE_COLOR`)に絞られます。
|
||||
- allowlist modeでのallow-always判断では、既知のdispatch wrapper(`env`, `nice`, `nohup`, `stdbuf`, `timeout`)については、
|
||||
wrapper pathではなく内側の実行ファイルパスが永続化されます。安全にunwrapできない場合は、
|
||||
allowlistエントリは自動では永続化されません。
|
||||
- `allowlist` エントリーは、解決済みバイナリパスに対するglobパターンです。
|
||||
- シェル制御または展開構文(`&&`, `||`, `;`, `|`, `` ` ``, `$`, `<`, `>`, `(`, `)`)を含む生のシェルコマンドテキストは、allowlistミスとして扱われ、明示的な承認が必要です(またはシェルバイナリをallowlistに追加する必要があります)。
|
||||
- プロンプトで「Always Allow」を選ぶと、そのコマンドがallowlistに追加されます。
|
||||
- `system.run` の環境変数オーバーライドはフィルタリングされ(`PATH`, `DYLD_*`, `LD_*`, `NODE_OPTIONS`, `PYTHON*`, `PERL*`, `RUBYOPT`, `SHELLOPTS`, `PS4` を除外)、その後アプリの環境変数とマージされます。
|
||||
- シェルラッパー(`bash|sh|zsh ... -c/-lc`)では、リクエスト単位の環境変数オーバーライドは、小さな明示的allowlist(`TERM`, `LANG`, `LC_*`, `COLORTERM`, `NO_COLOR`, `FORCE_COLOR`)に縮小されます。
|
||||
- allowlistモードで「常に許可」を選択した場合、既知のディスパッチラッパー(`env`, `nice`, `nohup`, `stdbuf`, `timeout`)では、ラッパーパスではなく内部の実行ファイルパスが保存されます。安全にアンラップできない場合、allowlistエントリーは自動保存されません。
|
||||
|
||||
## ディープリンク
|
||||
|
||||
appはローカルアクション用に `openclaw://` URL schemeを登録します。
|
||||
アプリはローカルアクション用に `openclaw://` URLスキームを登録します。
|
||||
|
||||
### `openclaw://agent`
|
||||
|
||||
Gatewayの `agent` リクエストをトリガーします。
|
||||
__OC_I18N_900004__
|
||||
クエリパラメーター:
|
||||
クエリパラメータ:
|
||||
|
||||
- `message`(必須)
|
||||
- `sessionKey`(任意)
|
||||
- `thinking`(任意)
|
||||
- `deliver` / `to` / `channel`(任意)
|
||||
- `timeoutSeconds`(任意)
|
||||
- `key`(任意、unattended modeキー)
|
||||
- `key`(任意の無人モードキー)
|
||||
|
||||
安全性:
|
||||
|
||||
- `key` がない場合、appは確認を求めます。
|
||||
- `key` がない場合、appは確認プロンプトに対して短いメッセージ上限を適用し、`deliver` / `to` / `channel` は無視します。
|
||||
- 有効な `key` がある場合、その実行はunattendedになります(個人用automation向け)。
|
||||
- `key` がない場合、アプリは確認を求めます。
|
||||
- `key` がない場合、アプリは確認プロンプト用に短いメッセージ長制限を適用し、`deliver` / `to` / `channel` を無視します。
|
||||
- 有効な `key` がある場合、実行は無人で行われます(個人用オートメーション向け)。
|
||||
|
||||
## オンボーディングフロー(典型例)
|
||||
## オンボーディングフロー(一般的な流れ)
|
||||
|
||||
1. **OpenClaw.app** をインストールして起動します。
|
||||
2. 権限チェックリストを完了します(TCCプロンプト)。
|
||||
3. **Local** modeが有効で、Gatewayが動作していることを確認します。
|
||||
4. terminalアクセスが必要ならCLIをインストールします。
|
||||
1. **OpenClaw.app**をインストールして起動します。
|
||||
2. 権限チェックリスト(TCCプロンプト)を完了します。
|
||||
3. **Local**モードが有効で、Gatewayが実行中であることを確認します。
|
||||
4. ターミナルアクセスが必要ならCLIをインストールします。
|
||||
|
||||
## State dirの配置(macOS)
|
||||
## 状態ディレクトリの配置(macOS)
|
||||
|
||||
OpenClaw state dirをiCloudやその他のクラウド同期フォルダーに置くのは避けてください。
|
||||
同期バックエンドのパスは遅延を増やし、sessionsやcredentialsに対して
|
||||
ファイルロックや同期競合を起こすことがあります。
|
||||
OpenClawの状態ディレクトリは、iCloudやその他のクラウド同期フォルダに置かないでください。
|
||||
同期対応パスでは遅延が増える可能性があり、セッションや認証情報でファイルロックや同期競合が発生することがあります。
|
||||
|
||||
次のような、ローカルで非同期のstate pathを推奨します:
|
||||
次のような、同期されないローカル状態パスを推奨します:
|
||||
__OC_I18N_900005__
|
||||
`openclaw doctor` が次の配下にstateを検出した場合:
|
||||
`openclaw doctor` が以下の場所に状態を検出した場合:
|
||||
|
||||
- `~/Library/Mobile Documents/com~apple~CloudDocs/...`
|
||||
- `~/Library/CloudStorage/...`
|
||||
|
||||
警告を出し、ローカルパスへ戻すことを推奨します。
|
||||
警告を表示し、ローカルパスへの移動を推奨します。
|
||||
|
||||
## Build & 開発ワークフロー(ネイティブ)
|
||||
## ビルドと開発ワークフロー(ネイティブ)
|
||||
|
||||
- `cd apps/macos && swift build`
|
||||
- `swift run OpenClaw`(またはXcode)
|
||||
- appをパッケージ化: `scripts/package-mac-app.sh`
|
||||
- アプリをパッケージ化: `scripts/package-mac-app.sh`
|
||||
|
||||
## Gateway接続をデバッグする(macOS CLI)
|
||||
## Gateway接続のデバッグ(macOS CLI)
|
||||
|
||||
このデバッグCLIを使うと、appを起動せずに、
|
||||
macOS appが使うのと同じGateway WebSocketハンドシェイクとdiscovery
|
||||
ロジックを試せます。
|
||||
アプリを起動せずに、macOSアプリと同じGateway WebSocketハンドシェイクと検出ロジックをデバッグCLIで試せます。
|
||||
__OC_I18N_900006__
|
||||
connectオプション:
|
||||
接続オプション:
|
||||
|
||||
- `--url <ws://host:port>`: configを上書き
|
||||
- `--mode <local|remote>`: configから解決(デフォルト: configまたはlocal)
|
||||
- `--probe`: 新しいhealth probeを強制
|
||||
- `--url <ws://host:port>`: 設定を上書き
|
||||
- `--mode <local|remote>`: 設定から解決(デフォルト: 設定またはlocal)
|
||||
- `--probe`: 新しいヘルスプローブを強制
|
||||
- `--timeout <ms>`: リクエストタイムアウト(デフォルト: `15000`)
|
||||
- `--json`: 差分確認向けの構造化出力
|
||||
- `--json`: diff比較用の構造化出力
|
||||
|
||||
discoveryオプション:
|
||||
検出オプション:
|
||||
|
||||
- `--include-local`: 「local」として除外されるはずのgatewaysも含める
|
||||
- `--timeout <ms>`: discovery全体の待機時間(デフォルト: `2000`)
|
||||
- `--json`: 差分確認向けの構造化出力
|
||||
- `--include-local`: 「local」として除外されるGatewayも含める
|
||||
- `--timeout <ms>`: 全体の検出ウィンドウ(デフォルト: `2000`)
|
||||
- `--json`: diff比較用の構造化出力
|
||||
|
||||
ヒント: `openclaw gateway discover --json` と比較すると、
|
||||
macOS appのdiscoveryパイプライン(`local.` と設定済みwide-area domain、さらに
|
||||
wide-areaとTailscale Serveのフォールバック付き)が、
|
||||
Node CLIの `dns-sd` ベースdiscoveryと異なるかどうかを確認できます。
|
||||
ヒント: `openclaw gateway discover --json` と比較して、macOSアプリの検出パイプライン(`local.` に加えて、設定済みの広域ドメイン、そして広域およびTailscale Serveのフォールバック)が、Node CLIの `dns-sd` ベースの検出と異なるか確認してください。
|
||||
|
||||
## remote接続の内部構成(SSH tunnels)
|
||||
## リモート接続の配管(SSHトンネル)
|
||||
|
||||
macOS appが **Remote** modeで動作するとき、ローカルUI
|
||||
コンポーネントがremote Gatewayをlocalhost上にあるかのように扱えるよう、
|
||||
SSH tunnelを開きます。
|
||||
macOSアプリが**Remote**モードで実行されると、ローカルUIコンポーネントがリモートGatewayをlocalhost上にあるかのように扱えるよう、SSHトンネルを開きます。
|
||||
|
||||
### Control tunnel(Gateway WebSocket port)
|
||||
### 制御トンネル(Gateway WebSocketポート)
|
||||
|
||||
- **目的:** health checks、status、Web Chat、config、その他のcontrol-plane呼び出し。
|
||||
- **ローカルポート:** Gateway port(デフォルト `18789`)。常に固定です。
|
||||
- **リモートポート:** remote host上の同じGateway port。
|
||||
- **挙動:** ランダムなローカルポートは使いません。appは既存の健全なtunnelを再利用し、
|
||||
必要なら再起動します。
|
||||
- **SSH形状:** `ssh -N -L <local>:127.0.0.1:<remote>` に、BatchMode +
|
||||
ExitOnForwardFailure + keepaliveオプションを付けます。
|
||||
- **IP報告:** SSH tunnelはloopbackを使うため、gatewayから見えるnode
|
||||
IPは `127.0.0.1` になります。実際のclient IPを表示したい場合は、
|
||||
**Direct (ws/wss)** transportを使用してください([macOS remote access](/platforms/mac/remote) を参照)。
|
||||
- **目的:** ヘルスチェック、ステータス、Web Chat、設定、その他のコントロールプレーン呼び出し。
|
||||
- **ローカルポート:** Gatewayポート(デフォルト `18789`)、常に固定。
|
||||
- **リモートポート:** リモートホスト上の同じGatewayポート。
|
||||
- **動作:** ランダムなローカルポートは使いません。アプリは既存の正常なトンネルを再利用し、必要であれば再起動します。
|
||||
- **SSHの形:** `ssh -N -L <local>:127.0.0.1:<remote>` に、BatchMode + ExitOnForwardFailure + keepaliveオプションを付加。
|
||||
- **IPレポート:** SSHトンネルはloopbackを使うため、gatewayから見るノードIPは `127.0.0.1` になります。実際のクライアントIPを表示したい場合は、**Direct (ws/wss)** トランスポートを使用してください([macOS remote access](/ja-JP/platforms/mac/remote)を参照)。
|
||||
|
||||
セットアップ手順は [macOS remote access](/platforms/mac/remote) を参照してください。プロトコルの
|
||||
詳細は [Gateway protocol](/gateway/protocol) を参照してください。
|
||||
セットアップ手順については、[macOS remote access](/ja-JP/platforms/mac/remote)を参照してください。プロトコルの詳細については、[Gateway protocol](/ja-JP/gateway/protocol)を参照してください。
|
||||
|
||||
## 関連ドキュメント
|
||||
|
||||
- [Gateway runbook](/gateway)
|
||||
- [Gateway (macOS)](/platforms/mac/bundled-gateway)
|
||||
- [macOS permissions](/platforms/mac/permissions)
|
||||
- [Canvas](/platforms/mac/canvas)
|
||||
- [Gateway runbook](/ja-JP/gateway)
|
||||
- [Gateway(macOS)](/ja-JP/platforms/mac/bundled-gateway)
|
||||
- [macOS permissions](/ja-JP/platforms/mac/permissions)
|
||||
- [Canvas](/ja-JP/platforms/mac/canvas)
|
||||
|
||||
@ -1,87 +1,86 @@
|
||||
---
|
||||
read_when:
|
||||
- 新しいメッセージングチャネルPluginを構築しています
|
||||
- OpenClawをメッセージングプラットフォームに接続したいと考えています
|
||||
- ChannelPluginアダプターの表面を理解する必要があります
|
||||
- 新しいメッセージングチャネル Plugin を構築しています
|
||||
- OpenClaw をメッセージングプラットフォームに接続したいと考えています
|
||||
- ChannelPlugin アダプターの公開インターフェースを理解する必要があります
|
||||
sidebarTitle: Channel Plugins
|
||||
summary: OpenClaw向けメッセージングチャネルPluginを構築するためのステップごとのガイド
|
||||
title: チャネルPluginの構築
|
||||
summary: OpenClaw 向けメッセージングチャネル Plugin を構築するためのステップバイステップガイド
|
||||
title: チャネル Plugin の構築
|
||||
x-i18n:
|
||||
generated_at: "2026-04-15T19:41:39Z"
|
||||
generated_at: "2026-04-18T04:40:46Z"
|
||||
model: gpt-5.4
|
||||
provider: openai
|
||||
source_hash: 80e47e61d1e47738361692522b79aff276544446c58a7b41afe5296635dfad4b
|
||||
source_hash: 3dda53c969bc7356a450c2a5bf49fb82bf1283c23e301dec832d8724b11e724b
|
||||
source_path: plugins/sdk-channel-plugins.md
|
||||
workflow: 15
|
||||
---
|
||||
|
||||
# チャネルPluginの構築
|
||||
# チャネル Plugin の構築
|
||||
|
||||
このガイドでは、OpenClawをメッセージングプラットフォームに接続するチャネルpluginの構築方法を説明します。最終的には、DMセキュリティ、ペアリング、返信スレッド化、送信メッセージングを備えた動作するチャネルを完成させます。
|
||||
このガイドでは、OpenClaw をメッセージングプラットフォームに接続するチャネル Plugin の構築手順を説明します。最後には、DM セキュリティ、ペアリング、返信スレッド化、送信メッセージングを備えた動作するチャネルが完成します。
|
||||
|
||||
<Info>
|
||||
OpenClaw pluginをこれまでに一度も構築したことがない場合は、基本的なパッケージ構造とマニフェスト設定について、まず
|
||||
[はじめに](/ja-JP/plugins/building-plugins)を読んでください。
|
||||
OpenClaw Plugin をまだ一度も作成したことがない場合は、まず基本的なパッケージ構造とマニフェスト設定について [はじめに](/ja-JP/plugins/building-plugins) を読んでください。
|
||||
</Info>
|
||||
|
||||
## チャネルPluginの仕組み
|
||||
## チャネル Plugin の仕組み
|
||||
|
||||
チャネルpluginには、独自の送信・編集・リアクションツールは不要です。OpenClawは、コアに1つの共有`message`ツールを保持しています。pluginが担うのは次の項目です。
|
||||
チャネル Plugin には、独自の send/edit/react ツールは不要です。OpenClaw は、コアに1つの共有 `message` ツールを保持します。あなたの Plugin が担うのは次の部分です。
|
||||
|
||||
- **Config** — アカウント解決とセットアップウィザード
|
||||
- **Security** — DMポリシーと許可リスト
|
||||
- **Pairing** — DM承認フロー
|
||||
- **Session grammar** — プロバイダー固有の会話IDを、ベースチャット、スレッドID、親フォールバックにどのように対応付けるか
|
||||
- **Outbound** — テキスト、メディア、投票をプラットフォームへ送信すること
|
||||
- **Threading** — 返信をどのようにスレッド化するか
|
||||
- **設定** — アカウント解決とセットアップウィザード
|
||||
- **セキュリティ** — DM ポリシーと許可リスト
|
||||
- **ペアリング** — DM 承認フロー
|
||||
- **セッショングラマー** — プロバイダー固有の会話 ID を、どのようにベースチャット、スレッド ID、親フォールバックへ対応付けるか
|
||||
- **送信** — テキスト、メディア、投票をプラットフォームへ送信する処理
|
||||
- **スレッド化** — 返信をどのようにスレッド化するか
|
||||
|
||||
コアは、共有messageツール、プロンプト配線、外側のセッションキー形状、汎用的な`:thread:`管理、ディスパッチを担います。
|
||||
コアは、共有 message ツール、プロンプト配線、外側のセッションキー形状、汎用的な `:thread:` の管理、およびディスパッチを担います。
|
||||
|
||||
チャネルがメディアソースを運ぶmessage-toolパラメーターを追加する場合は、それらのパラメーター名を`describeMessageTool(...).mediaSourceParams`を通じて公開してください。コアはその明示的なリストを、サンドボックスパスの正規化と送信メディアアクセス方針に使用するため、plugin側でプロバイダー固有のアバター、添付ファイル、またはカバー画像パラメーターのために共有コアの特別扱いを追加する必要はありません。
|
||||
できれば、`{ "set-profile": ["avatarUrl", "avatarPath"] }`のようなアクションキー付きマップを返してください。そうすることで、無関係なアクションが別のアクションのメディア引数を継承しません。意図的にすべての公開アクションで共有されるパラメーターであれば、フラットな配列でも引き続き利用できます。
|
||||
チャネルでメディアソースを運ぶ message ツールのパラメーターを追加する場合は、それらのパラメーター名を `describeMessageTool(...).mediaSourceParams` を通じて公開してください。コアはその明示的な一覧を、サンドボックス内のパス正規化および送信時のメディアアクセスポリシーに使用するため、Plugin 側でプロバイダー固有の avatar、attachment、cover-image パラメーター向けの共有コア特例は不要です。
|
||||
できれば、`{ "set-profile": ["avatarUrl", "avatarPath"] }` のようなアクションキー付きマップを返してください。そうすることで、無関係なアクションが別のアクションのメディア引数を引き継がずに済みます。意図的にすべての公開アクションで共有するパラメーターであれば、フラットな配列でも動作します。
|
||||
|
||||
プラットフォームが会話IDの中に追加のスコープを保存する場合は、その解析をplugin内で`messaging.resolveSessionConversation(...)`を使って行ってください。これは、`rawId`をベース会話ID、任意のスレッドID、明示的な`baseConversationId`、および任意の`parentConversationCandidates`に対応付けるための正規のフックです。
|
||||
`parentConversationCandidates`を返す場合は、最も狭い親から最も広い/ベース会話までの順に並べてください。
|
||||
プラットフォームが会話 ID 内に追加スコープを保存する場合は、その解析を `messaging.resolveSessionConversation(...)` とともに Plugin 内に保持してください。これは、`rawId` をベース会話 ID、任意のスレッド ID、明示的な `baseConversationId`、および `parentConversationCandidates` へ対応付けるための正規フックです。
|
||||
`parentConversationCandidates` を返す場合は、最も狭い親から最も広い親/ベース会話の順に並べてください。
|
||||
|
||||
チャネルレジストリが起動する前に同じ解析を必要とする同梱pluginは、一致する`resolveSessionConversation(...)`エクスポートを持つトップレベルの`session-key-api.ts`ファイルも公開できます。コアは、実行時pluginレジストリがまだ利用できない場合に限って、このブートストラップ安全なサーフェスを使用します。
|
||||
チャネルレジストリの起動前に同じ解析が必要な同梱 Plugin は、対応する `resolveSessionConversation(...)` エクスポートを持つトップレベルの `session-key-api.ts` ファイルも公開できます。コアは、ランタイム Plugin レジストリがまだ利用できないときに限り、このブートストラップ安全な公開インターフェースを使用します。
|
||||
|
||||
`messaging.resolveParentConversationCandidates(...)`は、pluginが汎用/生のIDに加えて親フォールバックだけを必要とする場合の、レガシー互換フォールバックとして引き続き利用できます。両方のフックが存在する場合、コアはまず`resolveSessionConversation(...).parentConversationCandidates`を使用し、正規フックがそれらを省略した場合にのみ`resolveParentConversationCandidates(...)`へフォールバックします。
|
||||
`messaging.resolveParentConversationCandidates(...)` は、Plugin が汎用/raw ID の上に親フォールバックだけを必要とする場合の、レガシー互換フォールバックとして引き続き利用できます。両方のフックが存在する場合、コアはまず `resolveSessionConversation(...).parentConversationCandidates` を使用し、その正規フックがそれらを省略したときのみ `resolveParentConversationCandidates(...)` にフォールバックします。
|
||||
|
||||
## 承認とチャネル機能
|
||||
|
||||
ほとんどのチャネルpluginでは、承認固有のコードは不要です。
|
||||
ほとんどのチャネル Plugin では、承認専用コードは不要です。
|
||||
|
||||
- コアは、同一チャット内の`/approve`、共有承認ボタンのペイロード、汎用フォールバック配信を担います。
|
||||
- チャネルが承認固有の動作を必要とする場合は、チャネルplugin上で1つの`approvalCapability`オブジェクトを使うようにしてください。
|
||||
- `ChannelPlugin.approvals`は削除されました。承認の配信/ネイティブ/レンダリング/認証に関する情報は`approvalCapability`に置いてください。
|
||||
- `plugin.auth`はlogin/logout専用です。コアはもはやそのオブジェクトから承認認証フックを読み取りません。
|
||||
- `approvalCapability.authorizeActorAction`と`approvalCapability.getActionAvailabilityState`が、正規の承認認証シームです。
|
||||
- 同一チャット承認の認証可用性には`approvalCapability.getActionAvailabilityState`を使用してください。
|
||||
- チャネルがネイティブexec承認を公開する場合、開始サーフェス/ネイティブクライアント状態が同一チャット承認認証と異なるときは、`approvalCapability.getExecInitiatingSurfaceState`を使用してください。コアはこのexec固有フックを使って、開始チャネルがネイティブexec承認をサポートしているかどうかを判定し、`enabled`と`disabled`を区別し、ネイティブクライアントのフォールバック案内にそのチャネルを含めます。`createApproverRestrictedNativeApprovalCapability(...)`は、一般的なケース向けにこれを補います。
|
||||
- 重複するローカル承認プロンプトの非表示や、配信前の入力中インジケーター送信など、チャネル固有のペイロードライフサイクル動作には、`outbound.shouldSuppressLocalPayloadPrompt`または`outbound.beforeDeliverPayload`を使用してください。
|
||||
- `approvalCapability.delivery`は、ネイティブ承認ルーティングまたはフォールバック抑制にのみ使用してください。
|
||||
- チャネル所有のネイティブ承認情報には`approvalCapability.nativeRuntime`を使用してください。ホットなチャネルエントリーポイントでは、`createLazyChannelApprovalNativeRuntimeAdapter(...)`でこれを遅延化してください。これにより、コアが承認ライフサイクルを組み立てつつ、必要時に実行時モジュールをimportできます。
|
||||
- チャネルが共有レンダラーの代わりに本当にカスタム承認ペイロードを必要とする場合にのみ、`approvalCapability.render`を使用してください。
|
||||
- チャネルが、無効パスの返信でネイティブexec承認を有効化するために必要な正確なconfigノブを説明したい場合は、`approvalCapability.describeExecApprovalSetup`を使用してください。このフックは`{ channel, channelLabel, accountId }`を受け取ります。名前付きアカウントのチャネルは、トップレベルのデフォルトではなく、`channels.<channel>.accounts.<id>.execApprovals.*`のようなアカウントスコープ付きパスを描画する必要があります。
|
||||
- チャネルが既存configから安定したオーナー的DMアイデンティティを推論できる場合は、承認固有のコアロジックを追加せずに同一チャット`/approve`を制限するため、`openclaw/plugin-sdk/approval-runtime`の`createResolvedApproverActionAuthAdapter`を使用してください。
|
||||
- チャネルがネイティブ承認配信を必要とする場合、チャネルコードはターゲット正規化と転送/表示情報に集中させてください。`openclaw/plugin-sdk/approval-runtime`の`createChannelExecApprovalProfile`、`createChannelNativeOriginTargetResolver`、`createChannelApproverDmTargetResolver`、`createApproverRestrictedNativeApprovalCapability`を使用してください。チャネル固有の情報は`approvalCapability.nativeRuntime`の背後に置き、理想的には`createChannelApprovalNativeRuntimeAdapter(...)`または`createLazyChannelApprovalNativeRuntimeAdapter(...)`を通してください。そうすることで、コアがハンドラーを組み立て、リクエストフィルタリング、ルーティング、重複排除、有効期限、Gateway購読、別経路通知を担えます。`nativeRuntime`はいくつかのより小さなシームに分かれています。
|
||||
- `availability` — アカウントが設定されているか、およびリクエストを処理すべきかどうか
|
||||
- `presentation` — 共有承認ビューモデルを、保留/解決済み/期限切れのネイティブペイロードまたは最終アクションへ対応付ける
|
||||
- `transport` — ターゲットを準備し、ネイティブ承認メッセージを送信/更新/削除する
|
||||
- `interactions` — ネイティブボタンやリアクションのための任意のbind/unbind/clear-actionフック
|
||||
- コアは、同一チャット内の `/approve`、共有承認ボタンのペイロード、汎用フォールバック配信を担います。
|
||||
- チャネルで承認固有の挙動が必要な場合は、チャネル Plugin 上に1つの `approvalCapability` オブジェクトを置くのが望ましいです。
|
||||
- `ChannelPlugin.approvals` は削除されました。承認の配信/ネイティブ/レンダリング/認証に関する情報は `approvalCapability` に置いてください。
|
||||
- `plugin.auth` は login/logout 専用です。コアはそのオブジェクトから承認認証フックをもう読みません。
|
||||
- `approvalCapability.authorizeActorAction` と `approvalCapability.getActionAvailabilityState` が、承認認証の正規の公開インターフェースです。
|
||||
- 同一チャット内の承認認証の可用性には `approvalCapability.getActionAvailabilityState` を使用してください。
|
||||
- チャネルがネイティブ exec 承認を公開する場合は、開始サーフェス/ネイティブクライアントの状態が同一チャット承認認証と異なるときに `approvalCapability.getExecInitiatingSurfaceState` を使用してください。コアはこの exec 専用フックを使用して、`enabled` と `disabled` を区別し、開始チャネルがネイティブ exec 承認をサポートするかどうかを判断し、ネイティブクライアントのフォールバック案内にそのチャネルを含めます。`createApproverRestrictedNativeApprovalCapability(...)` は、この一般的なケースを埋めます。
|
||||
- 重複したローカル承認プロンプトを隠す、配信前に typing indicator を送る、といったチャネル固有のペイロードライフサイクル挙動には、`outbound.shouldSuppressLocalPayloadPrompt` または `outbound.beforeDeliverPayload` を使用してください。
|
||||
- `approvalCapability.delivery` は、ネイティブ承認のルーティングまたはフォールバック抑制にのみ使用してください。
|
||||
- `approvalCapability.nativeRuntime` は、チャネル所有のネイティブ承認情報に使用してください。ホットなチャネルエントリーポイントでは `createLazyChannelApprovalNativeRuntimeAdapter(...)` を使って遅延化し、必要時にランタイムモジュールを import できるようにしつつ、コアが承認ライフサイクルを組み立てられるようにしてください。
|
||||
- `approvalCapability.render` は、チャネルが共有レンダラーではなく本当にカスタム承認ペイロードを必要とする場合にのみ使用してください。
|
||||
- チャネルが、ネイティブ exec 承認を有効にするために必要な正確な設定項目を disabled 経路の返信で説明したい場合は、`approvalCapability.describeExecApprovalSetup` を使用してください。このフックは `{ channel, channelLabel, accountId }` を受け取ります。名前付きアカウントチャネルは、トップレベルのデフォルトではなく、`channels.<channel>.accounts.<id>.execApprovals.*` のようなアカウントスコープのパスをレンダリングしてください。
|
||||
- チャネルが既存設定から安定した owner 類似の DM ID を推測できる場合は、承認固有のコアロジックを追加せずに、同一チャット内の `/approve` を制限するために `openclaw/plugin-sdk/approval-runtime` の `createResolvedApproverActionAuthAdapter` を使用してください。
|
||||
- チャネルがネイティブ承認配信を必要とする場合は、チャネルコードをターゲット正規化とトランスポート/表示情報に集中させてください。`openclaw/plugin-sdk/approval-runtime` の `createChannelExecApprovalProfile`、`createChannelNativeOriginTargetResolver`、`createChannelApproverDmTargetResolver`、`createApproverRestrictedNativeApprovalCapability` を使用してください。チャネル固有の情報は `approvalCapability.nativeRuntime` の背後に置き、理想的には `createChannelApprovalNativeRuntimeAdapter(...)` または `createLazyChannelApprovalNativeRuntimeAdapter(...)` を介してください。そうすることで、コアがハンドラーを組み立て、リクエストのフィルタリング、ルーティング、重複排除、有効期限、Gateway 購読、別経路ルーティング通知を担えます。`nativeRuntime` は、いくつかの小さな公開インターフェースに分かれています。
|
||||
- `availability` — アカウントが設定済みかどうか、およびリクエストを処理すべきかどうか
|
||||
- `presentation` — 共有承認ビュー・モデルを pending/resolved/expired のネイティブペイロードや最終アクションへ変換
|
||||
- `transport` — ターゲットを準備し、ネイティブ承認メッセージを送信/更新/削除
|
||||
- `interactions` — ネイティブボタンやリアクション向けの任意の bind/unbind/clear-action フック
|
||||
- `observe` — 任意の配信診断フック
|
||||
- チャネルがクライアント、トークン、Boltアプリ、Webhook受信側のような実行時所有オブジェクトを必要とする場合は、`openclaw/plugin-sdk/channel-runtime-context`を通じて登録してください。汎用のruntime-contextレジストリにより、コアは承認固有のラッパー接着コードを追加せずに、チャネル起動状態からcapability駆動ハンドラーをブートストラップできます。
|
||||
- capability駆動シームだけではまだ表現力が足りない場合にのみ、下位レベルの`createChannelApprovalHandler`または`createChannelNativeApprovalRuntime`に手を伸ばしてください。
|
||||
- ネイティブ承認チャネルは、`accountId`と`approvalKind`の両方をそれらのヘルパーに渡す必要があります。`accountId`は複数アカウント承認ポリシーを正しいbotアカウントにスコープし、`approvalKind`はコア内のハードコード分岐なしでexec対plugin承認動作をチャネルで利用可能にします。
|
||||
- コアは現在、承認の再ルーティング通知も担います。チャネルpluginは、`createChannelNativeApprovalRuntime`から独自の「承認はDM/別チャネルへ送られました」フォローアップメッセージを送信すべきではありません。代わりに、共有承認capabilityヘルパーを通じて正確な発信元+承認者DMルーティングを公開し、開始チャットへ通知を投稿する前に実際の配信をコアに集約させてください。
|
||||
- 配信済み承認IDの種類は、エンドツーエンドで保持してください。ネイティブクライアントは、チャネルローカル状態からexec対plugin承認ルーティングを推測したり書き換えたりしてはいけません。
|
||||
- 異なる承認種別は、意図的に異なるネイティブサーフェスを公開できます。
|
||||
- チャネルが client、token、Bolt app、Webhook レシーバーのようなランタイム所有オブジェクトを必要とする場合は、`openclaw/plugin-sdk/channel-runtime-context` を通じて登録してください。汎用 runtime-context レジストリにより、コアは承認固有のラッパー glue を追加せずに、チャネル起動状態から capability 駆動ハンドラーをブートストラップできます。
|
||||
- capability 駆動の公開インターフェースではまだ表現力が足りない場合にのみ、より低レベルの `createChannelApprovalHandler` または `createChannelNativeApprovalRuntime` を使ってください。
|
||||
- ネイティブ承認チャネルでは、`accountId` と `approvalKind` の両方をそれらのヘルパー経由でルーティングする必要があります。`accountId` は複数アカウントの承認ポリシーを正しい bot アカウントにスコープし、`approvalKind` は exec と Plugin 承認の挙動を、コアにハードコードされた分岐なしでチャネル側で扱えるようにします。
|
||||
- コアは現在、承認の再ルーティング通知も担います。チャネル Plugin は `createChannelNativeApprovalRuntime` から独自の「承認は DM / 別チャネルへ送られました」というフォローアップメッセージを送るべきではありません。代わりに、共有承認 capability ヘルパーを通じて正確な送信元 + approver-DM ルーティングを公開し、実際の配信を集約したうえで、必要な通知を開始チャットへ投稿するかどうかはコアに任せてください。
|
||||
- 配信された承認 ID の種類は、最初から最後まで保持してください。ネイティブクライアントは、チャネルローカルの状態から exec と Plugin 承認のルーティングを推測したり書き換えたりしてはいけません。
|
||||
- 異なる承認種別は、意図的に異なるネイティブサーフェスを公開してよい場合があります。
|
||||
現在の同梱例:
|
||||
- Slackは、execとpluginの両方のIDに対してネイティブ承認ルーティングを利用可能に保っています。
|
||||
- Matrixは、execとpluginの承認で認証を異ならせつつ、同じネイティブDM/チャネルルーティングとリアクションUXを維持しています。
|
||||
- `createApproverRestrictedNativeApprovalAdapter`は互換ラッパーとして引き続き存在しますが、新しいコードではcapability builderを優先し、plugin上に`approvalCapability`を公開してください。
|
||||
- Slack は exec と Plugin の両方の ID について、ネイティブ承認ルーティングを利用可能なままにしています。
|
||||
- Matrix は exec と Plugin 承認の両方で同じネイティブ DM/チャネルルーティングと reaction UX を維持しつつ、承認種別ごとに auth だけは異なるようにできます。
|
||||
- `createApproverRestrictedNativeApprovalAdapter` は互換ラッパーとしてまだ存在しますが、新しいコードでは capability builder を優先し、Plugin 上で `approvalCapability` を公開してください。
|
||||
|
||||
ホットなチャネルエントリーポイントでは、そのファミリーの一部だけが必要な場合、より狭いruntimeサブパスを優先してください。
|
||||
ホットなチャネルエントリーポイントでは、そのファミリーの一部だけが必要な場合、より狭いランタイム subpath を優先してください。
|
||||
|
||||
- `openclaw/plugin-sdk/approval-auth-runtime`
|
||||
- `openclaw/plugin-sdk/approval-client-runtime`
|
||||
@ -93,84 +92,71 @@ x-i18n:
|
||||
- `openclaw/plugin-sdk/approval-reply-runtime`
|
||||
- `openclaw/plugin-sdk/channel-runtime-context`
|
||||
|
||||
同様に、より広い傘型サーフェスが不要な場合は、`openclaw/plugin-sdk/setup-runtime`、`openclaw/plugin-sdk/setup-adapter-runtime`、`openclaw/plugin-sdk/reply-runtime`、`openclaw/plugin-sdk/reply-dispatch-runtime`、`openclaw/plugin-sdk/reply-reference`、`openclaw/plugin-sdk/reply-chunking`を優先してください。
|
||||
同様に、より広い包括的な公開インターフェースが不要な場合は、`openclaw/plugin-sdk/setup-runtime`、`openclaw/plugin-sdk/setup-adapter-runtime`、`openclaw/plugin-sdk/reply-runtime`、`openclaw/plugin-sdk/reply-dispatch-runtime`、`openclaw/plugin-sdk/reply-reference`、`openclaw/plugin-sdk/reply-chunking` を優先してください。
|
||||
|
||||
セットアップについては、特に次のとおりです。
|
||||
セットアップについては特に以下の通りです。
|
||||
|
||||
- `openclaw/plugin-sdk/setup-runtime`は、runtime-safeなセットアップヘルパーを扱います:
|
||||
import-safeなセットアップパッチアダプター(`createPatchedAccountSetupAdapter`、
|
||||
`createEnvPatchedAccountSetupAdapter`,
|
||||
`createSetupInputPresenceValidator`)、lookup-note出力、
|
||||
`promptResolvedAllowFrom`、`splitSetupEntries`、委譲された
|
||||
setup-proxy builder
|
||||
- `openclaw/plugin-sdk/setup-adapter-runtime`は、`createEnvPatchedAccountSetupAdapter`向けの狭いenv対応アダプターシームです
|
||||
- `openclaw/plugin-sdk/channel-setup`は、オプションインストールのセットアップbuilderと、いくつかのセットアップ安全なプリミティブを扱います:
|
||||
`createOptionalChannelSetupSurface`, `createOptionalChannelSetupAdapter`,
|
||||
- `openclaw/plugin-sdk/setup-runtime` は、ランタイム安全なセットアップヘルパーをカバーします:
|
||||
import-safe なセットアップ patch アダプター(`createPatchedAccountSetupAdapter`、`createEnvPatchedAccountSetupAdapter`、`createSetupInputPresenceValidator`)、lookup-note 出力、`promptResolvedAllowFrom`、`splitSetupEntries`、および委譲セットアッププロキシ builder
|
||||
- `openclaw/plugin-sdk/setup-adapter-runtime` は、`createEnvPatchedAccountSetupAdapter` のための、より狭い env 対応アダプター公開インターフェースです
|
||||
- `openclaw/plugin-sdk/channel-setup` は、任意インストールのセットアップ builder と、いくつかのセットアップ安全な基本要素をカバーします:
|
||||
`createOptionalChannelSetupSurface`、`createOptionalChannelSetupAdapter`、
|
||||
|
||||
チャネルがenv駆動のセットアップまたは認証をサポートし、汎用の起動/configフローがruntimeロード前にそれらのenv名を知る必要がある場合は、pluginマニフェストで`channelEnvVars`として宣言してください。チャネルruntimeの`envVars`またはローカル定数は、運用者向けコピー専用にしてください。
|
||||
`createOptionalChannelSetupWizard`, `DEFAULT_ACCOUNT_ID`,
|
||||
`createTopLevelChannelDmPolicy`, `setSetupChannelEnabled`, および
|
||||
`splitSetupEntries`
|
||||
チャネルが env 駆動のセットアップや auth をサポートし、汎用的な起動/設定フローがランタイム読み込み前にその env 名を知る必要がある場合は、Plugin マニフェストで `channelEnvVars` に宣言してください。チャネルランタイムの `envVars` やローカル定数は、運用者向け説明文だけに使ってください。
|
||||
`createOptionalChannelSetupWizard`、`DEFAULT_ACCOUNT_ID`、`createTopLevelChannelDmPolicy`、`setSetupChannelEnabled`、および `splitSetupEntries`
|
||||
|
||||
- より重い共有セットアップ/configヘルパー、たとえば
|
||||
`moveSingleAccountChannelSectionToDefaultAccount(...)`も必要な場合にのみ、より広い`openclaw/plugin-sdk/setup`シームを使用してください
|
||||
- `moveSingleAccountChannelSectionToDefaultAccount(...)` のような、より重い共有セットアップ/設定ヘルパーも必要な場合にのみ、より広い `openclaw/plugin-sdk/setup` 公開インターフェースを使用してください
|
||||
|
||||
チャネルがセットアップサーフェス内で「まずこのpluginをインストールしてください」と告知したいだけなら、`createOptionalChannelSetupSurface(...)`を優先してください。生成されるアダプター/ウィザードはconfig書き込みと最終化でフェイルクローズし、検証、最終化、ドキュメントリンク文言の各所で同じインストール必須メッセージを再利用します。
|
||||
チャネルがセットアップ画面で「まずこの Plugin をインストールしてください」と案内したいだけであれば、`createOptionalChannelSetupSurface(...)` を優先してください。生成される adapter/wizard は、設定書き込みと最終確定に対して fail closed し、検証・finalize・docs リンク文面で同じインストール必須メッセージを再利用します。
|
||||
|
||||
その他のホットなチャネルパスでも、より広いレガシーサーフェスより狭いヘルパーを優先してください。
|
||||
そのほかのホットなチャネルパスでも、より広いレガシー公開インターフェースではなく、より狭いヘルパーを優先してください。
|
||||
|
||||
- `openclaw/plugin-sdk/account-core`、
|
||||
`openclaw/plugin-sdk/account-id`、
|
||||
`openclaw/plugin-sdk/account-resolution`、および
|
||||
`openclaw/plugin-sdk/account-helpers` は、複数アカウントconfigと
|
||||
デフォルトアカウントフォールバック向けです
|
||||
- `openclaw/plugin-sdk/account-core`
|
||||
- `openclaw/plugin-sdk/account-id`
|
||||
- `openclaw/plugin-sdk/account-resolution`
|
||||
- `openclaw/plugin-sdk/account-helpers` は、複数アカウント設定とデフォルトアカウントへのフォールバック向け
|
||||
- `openclaw/plugin-sdk/inbound-envelope` と
|
||||
`openclaw/plugin-sdk/inbound-reply-dispatch` は、受信ルート/エンベロープと
|
||||
record-and-dispatch配線向けです
|
||||
- `openclaw/plugin-sdk/messaging-targets` は、ターゲット解析/マッチング向けです
|
||||
`openclaw/plugin-sdk/inbound-reply-dispatch` は、受信ルート/エンベロープおよび record-and-dispatch 配線向け
|
||||
- `openclaw/plugin-sdk/messaging-targets` は、ターゲットの解析/マッチング向け
|
||||
- `openclaw/plugin-sdk/outbound-media` と
|
||||
`openclaw/plugin-sdk/outbound-runtime` は、メディア読み込みと送信
|
||||
アイデンティティ/送信デリゲート向けです
|
||||
- `openclaw/plugin-sdk/thread-bindings-runtime` は、スレッドバインディングのライフサイクル
|
||||
とアダプター登録向けです
|
||||
- `openclaw/plugin-sdk/agent-media-payload` は、レガシーなagent/media
|
||||
ペイロードのフィールドレイアウトが依然必要な場合にのみ使用してください
|
||||
- `openclaw/plugin-sdk/telegram-command-config` は、Telegramカスタムコマンドの
|
||||
正規化、重複/競合検証、およびフォールバック安定なコマンド
|
||||
config契約向けです
|
||||
`openclaw/plugin-sdk/outbound-runtime` は、メディア読み込みと送信 identity/send delegate 向け
|
||||
- `openclaw/plugin-sdk/thread-bindings-runtime` は、スレッドバインディングのライフサイクルと adapter 登録向け
|
||||
- `openclaw/plugin-sdk/agent-media-payload` は、レガシー agent/media ペイロードのフィールドレイアウトがまだ必要な場合のみ
|
||||
- `openclaw/plugin-sdk/telegram-command-config` は、Telegram カスタムコマンドの正規化、重複/競合検証、およびフォールバック安定なコマンド設定契約向け
|
||||
|
||||
認証専用チャネルは通常、デフォルトのパスで十分です。コアが承認を処理し、pluginは送信/認証capabilityを公開するだけです。Matrix、Slack、Telegram、カスタムチャット転送のようなネイティブ承認チャネルは、独自の承認ライフサイクルを実装するのではなく、共有ネイティブヘルパーを使うべきです。
|
||||
認証専用チャネルは通常、デフォルト経路で十分です。コアが承認を処理し、Plugin は送信/auth capability を公開するだけで済みます。Matrix、Slack、Telegram、およびカスタムチャット転送のようなネイティブ承認チャネルは、独自に承認ライフサイクルを実装するのではなく、共有ネイティブヘルパーを使用してください。
|
||||
|
||||
## 受信メンションポリシー
|
||||
|
||||
受信メンション処理は、次の2層に分けてください。
|
||||
|
||||
- plugin所有の証拠収集
|
||||
- Plugin 所有の証拠収集
|
||||
- 共有ポリシー評価
|
||||
|
||||
共有レイヤーには`openclaw/plugin-sdk/channel-inbound`を使用してください。
|
||||
メンションポリシーの判定には `openclaw/plugin-sdk/channel-mention-gating` を使用してください。
|
||||
より広い受信ヘルパーバレルが必要な場合にのみ `openclaw/plugin-sdk/channel-inbound` を使用してください。
|
||||
|
||||
pluginローカルロジックに適しているもの:
|
||||
Plugin ローカルロジックに向いているもの:
|
||||
|
||||
- botへの返信検出
|
||||
- bot引用の検出
|
||||
- bot への返信検出
|
||||
- bot の引用検出
|
||||
- スレッド参加チェック
|
||||
- サービス/システムメッセージの除外
|
||||
- bot参加を証明するために必要なプラットフォームネイティブキャッシュ
|
||||
- service/system メッセージの除外
|
||||
- bot 参加を証明するために必要なプラットフォームネイティブのキャッシュ
|
||||
|
||||
共有ヘルパーに適しているもの:
|
||||
共有ヘルパーに向いているもの:
|
||||
|
||||
- `requireMention`
|
||||
- 明示的メンション結果
|
||||
- 暗黙的メンション許可リスト
|
||||
- コマンドバイパス
|
||||
- 最終スキップ判定
|
||||
- 最終的なスキップ判定
|
||||
|
||||
推奨フロー:
|
||||
|
||||
1. ローカルのメンション情報を計算します。
|
||||
2. その情報を`resolveInboundMentionDecision({ facts, policy })`に渡します。
|
||||
3. 受信ゲートでは`decision.effectiveWasMentioned`、`decision.shouldBypassMention`、`decision.shouldSkip`を使用します。
|
||||
1. ローカルのメンション事実を計算する。
|
||||
2. その事実を `resolveInboundMentionDecision({ facts, policy })` に渡す。
|
||||
3. `decision.effectiveWasMentioned`、`decision.shouldBypassMention`、`decision.shouldSkip` を受信ゲートで使用する。
|
||||
|
||||
```typescript
|
||||
import {
|
||||
@ -209,7 +195,7 @@ const decision = resolveInboundMentionDecision({
|
||||
if (decision.shouldSkip) return;
|
||||
```
|
||||
|
||||
`api.runtime.channel.mentions`は、すでにruntime injectionに依存している同梱チャネルplugin向けに、同じ共有メンションヘルパーを公開します。
|
||||
`api.runtime.channel.mentions` は、すでにランタイム注入に依存している同梱チャネル Plugin 向けに、同じ共有メンションヘルパーを公開します。
|
||||
|
||||
- `buildMentionRegexes`
|
||||
- `matchesMentionPatterns`
|
||||
@ -217,15 +203,16 @@ if (decision.shouldSkip) return;
|
||||
- `implicitMentionKindWhen`
|
||||
- `resolveInboundMentionDecision`
|
||||
|
||||
古い`resolveMentionGating*`ヘルパーは、互換エクスポート専用として`openclaw/plugin-sdk/channel-inbound`に引き続き残っています。新しいコードでは`resolveInboundMentionDecision({ facts, policy })`を使用してください。
|
||||
`implicitMentionKindWhen` と `resolveInboundMentionDecision` だけが必要な場合は、無関係な受信ランタイムヘルパーの読み込みを避けるため、`openclaw/plugin-sdk/channel-mention-gating` から import してください。
|
||||
|
||||
古い `resolveMentionGating*` ヘルパーは、互換エクスポートとしてのみ `openclaw/plugin-sdk/channel-inbound` に残っています。新しいコードでは `resolveInboundMentionDecision({ facts, policy })` を使用してください。
|
||||
|
||||
## ウォークスルー
|
||||
|
||||
<Steps>
|
||||
<a id="step-1-package-and-manifest"></a>
|
||||
<Step title="パッケージとマニフェスト">
|
||||
標準のpluginファイルを作成します。`package.json`内の`channel`フィールドが、これをチャネルpluginにする要素です。完全なパッケージメタデータのサーフェスについては、
|
||||
[Plugin Setup and Config](/ja-JP/plugins/sdk-setup#openclaw-channel)を参照してください。
|
||||
標準の Plugin ファイルを作成します。`package.json` の `channel` フィールドによって、これがチャネル Plugin になります。完全なパッケージメタデータの公開インターフェースについては、[Plugin Setup and Config](/ja-JP/plugins/sdk-setup#openclaw-channel) を参照してください。
|
||||
|
||||
<CodeGroup>
|
||||
```json package.json
|
||||
@ -274,10 +261,10 @@ if (decision.shouldSkip) return;
|
||||
|
||||
</Step>
|
||||
|
||||
<Step title="チャネルpluginオブジェクトを構築する">
|
||||
`ChannelPlugin`インターフェースには、多数のオプションのアダプターサーフェスがあります。まずは最小限、つまり`id`と`setup`から始め、必要に応じてアダプターを追加してください。
|
||||
<Step title="チャネル Plugin オブジェクトを構築する">
|
||||
`ChannelPlugin` インターフェースには、多くの任意アダプター公開インターフェースがあります。最小構成である `id` と `setup` から始め、必要に応じてアダプターを追加してください。
|
||||
|
||||
`src/channel.ts`を作成します:
|
||||
`src/channel.ts` を作成します:
|
||||
|
||||
```typescript src/channel.ts
|
||||
import {
|
||||
@ -370,15 +357,15 @@ if (decision.shouldSkip) return;
|
||||
});
|
||||
```
|
||||
|
||||
<Accordion title="createChatChannelPluginが行ってくれること">
|
||||
低レベルのアダプターインターフェースを手動で実装する代わりに、宣言的なオプションを渡すと、builderがそれらを組み合わせます。
|
||||
<Accordion title="createChatChannelPlugin が代わりに行ってくれること">
|
||||
低レベルのアダプターインターフェースを手作業で実装する代わりに、宣言的なオプションを渡すことで、builder がそれらを組み立てます。
|
||||
|
||||
| オプション | 配線される内容 |
|
||||
| Option | 配線されるもの |
|
||||
| --- | --- |
|
||||
| `security.dm` | configフィールドからスコープ付きDMセキュリティリゾルバー |
|
||||
| `pairing.text` | コード交換を伴うテキストベースのDMペアリングフロー |
|
||||
| `threading` | reply-to-modeリゾルバー(固定、アカウントスコープ、またはカスタム) |
|
||||
| `outbound.attachedResults` | 結果メタデータ(メッセージID)を返す送信関数 |
|
||||
| `security.dm` | 設定フィールドからのスコープ付き DM セキュリティリゾルバー |
|
||||
| `pairing.text` | コード交換を伴うテキストベースの DM ペアリングフロー |
|
||||
| `threading` | reply-to モードのリゾルバー(固定、アカウントスコープ、またはカスタム) |
|
||||
| `outbound.attachedResults` | 結果メタデータ(message ID)を返す送信関数 |
|
||||
|
||||
完全な制御が必要な場合は、宣言的オプションの代わりに生のアダプターオブジェクトを渡すこともできます。
|
||||
</Accordion>
|
||||
@ -386,7 +373,7 @@ if (decision.shouldSkip) return;
|
||||
</Step>
|
||||
|
||||
<Step title="エントリーポイントを配線する">
|
||||
`index.ts`を作成します:
|
||||
`index.ts` を作成します:
|
||||
|
||||
```typescript index.ts
|
||||
import { defineChannelPluginEntry } from "openclaw/plugin-sdk/channel-core";
|
||||
@ -421,15 +408,14 @@ if (decision.shouldSkip) return;
|
||||
});
|
||||
```
|
||||
|
||||
チャネル所有のCLI descriptorは`registerCliMetadata(...)`に置いてください。これにより、OpenClawは完全なチャネルruntimeを起動せずにルートヘルプでそれらを表示でき、通常の完全ロードでも実際のコマンド登録に同じdescriptorを利用できます。`registerFull(...)`はruntime専用の処理に使ってください。
|
||||
`registerFull(...)`がGateway RPCメソッドを登録する場合は、plugin固有のプレフィックスを使用してください。コア管理名前空間(`config.*`、`exec.approvals.*`、`wizard.*`、`update.*`)は予約されており、常に`operator.admin`に解決されます。
|
||||
`defineChannelPluginEntry`は、この登録モード分割を自動的に処理します。すべてのオプションについては
|
||||
[Entry Points](/ja-JP/plugins/sdk-entrypoints#definechannelpluginentry)を参照してください。
|
||||
チャネル所有の CLI descriptor は `registerCliMetadata(...)` に置いてください。これにより、OpenClaw は完全なチャネルランタイムを有効化せずにそれらをルートヘルプに表示でき、通常の完全ロードでも実際のコマンド登録のために同じ descriptor を取得できます。`registerFull(...)` はランタイム専用の処理に保持してください。
|
||||
`registerFull(...)` が Gateway RPC メソッドを登録する場合は、Plugin 固有のプレフィックスを使用してください。コア管理 namespace(`config.*`、`exec.approvals.*`、`wizard.*`、`update.*`)は予約済みで、常に `operator.admin` に解決されます。
|
||||
`defineChannelPluginEntry` は登録モードの分割を自動的に処理します。すべてのオプションについては [Entry Points](/ja-JP/plugins/sdk-entrypoints#definechannelpluginentry) を参照してください。
|
||||
|
||||
</Step>
|
||||
|
||||
<Step title="セットアップエントリを追加する">
|
||||
オンボーディング中の軽量ロード用に`setup-entry.ts`を作成します:
|
||||
<Step title="セットアップエントリーを追加する">
|
||||
オンボーディング中の軽量ロード用に `setup-entry.ts` を作成します:
|
||||
|
||||
```typescript setup-entry.ts
|
||||
import { defineSetupPluginEntry } from "openclaw/plugin-sdk/channel-core";
|
||||
@ -438,15 +424,14 @@ if (decision.shouldSkip) return;
|
||||
export default defineSetupPluginEntry(acmeChatPlugin);
|
||||
```
|
||||
|
||||
OpenClawは、チャネルが無効または未設定のときに、完全なエントリの代わりにこれをロードします。これにより、セットアップフロー中に重いruntimeコードを引き込まずに済みます。詳細は[Setup and Config](/ja-JP/plugins/sdk-setup#setup-entry)を参照してください。
|
||||
OpenClaw は、チャネルが無効または未設定の場合に、完全なエントリーではなくこちらを読み込みます。これにより、セットアップフロー中に重いランタイムコードを引き込まずに済みます。詳細は [Setup and Config](/ja-JP/plugins/sdk-setup#setup-entry) を参照してください。
|
||||
|
||||
セットアップ安全なエクスポートをサイドカーモジュールに分離している同梱workspaceチャネルは、
|
||||
`openclaw/plugin-sdk/channel-entry-contract`の`defineBundledChannelSetupEntry(...)`を使用できます。これは、明示的なセットアップ時runtime setterも必要な場合に有効です。
|
||||
セットアップ安全なエクスポートを sidecar モジュールへ分離する同梱ワークスペースチャネルは、明示的なセットアップ時ランタイム setter も必要とする場合、`openclaw/plugin-sdk/channel-entry-contract` の `defineBundledChannelSetupEntry(...)` を使用できます。
|
||||
|
||||
</Step>
|
||||
|
||||
<Step title="受信メッセージを処理する">
|
||||
pluginは、プラットフォームからメッセージを受信し、それをOpenClawへ転送する必要があります。一般的なパターンは、リクエストを検証し、チャネルの受信ハンドラーを通じてディスパッチするWebhookです。
|
||||
Plugin は、プラットフォームからメッセージを受信し、それを OpenClaw に転送する必要があります。典型的なパターンは、リクエストを検証し、チャネルの受信ハンドラー経由でディスパッチする Webhook です。
|
||||
|
||||
```typescript
|
||||
registerFull(api) {
|
||||
@ -470,15 +455,14 @@ if (decision.shouldSkip) return;
|
||||
```
|
||||
|
||||
<Note>
|
||||
受信メッセージ処理はチャネル固有です。各チャネルpluginが独自の受信パイプラインを所有します。実際のパターンについては、同梱チャネルplugin
|
||||
(たとえばMicrosoft TeamsまたはGoogle Chatのpluginパッケージ)を見てください。
|
||||
受信メッセージ処理はチャネル固有です。各チャネル Plugin がそれぞれの受信パイプラインを所有します。実際のパターンについては、同梱チャネル Plugin(たとえば Microsoft Teams または Google Chat の Plugin パッケージ)を参照してください。
|
||||
</Note>
|
||||
|
||||
</Step>
|
||||
|
||||
<a id="step-6-test"></a>
|
||||
<Step title="テスト">
|
||||
`src/channel.test.ts`に同居テストを書いてください:
|
||||
`src/channel.test.ts` に同居テストを書いてください:
|
||||
|
||||
```typescript src/channel.test.ts
|
||||
import { describe, it, expect } from "vitest";
|
||||
@ -516,7 +500,7 @@ if (decision.shouldSkip) return;
|
||||
pnpm test -- <bundled-plugin-root>/acme-chat/
|
||||
```
|
||||
|
||||
共有テストヘルパーについては、[Testing](/ja-JP/plugins/sdk-testing)を参照してください。
|
||||
共有テストヘルパーについては、[Testing](/ja-JP/plugins/sdk-testing) を参照してください。
|
||||
|
||||
</Step>
|
||||
</Steps>
|
||||
@ -526,42 +510,42 @@ if (decision.shouldSkip) return;
|
||||
```
|
||||
<bundled-plugin-root>/acme-chat/
|
||||
├── package.json # openclaw.channel メタデータ
|
||||
├── openclaw.plugin.json # configスキーマを含むマニフェスト
|
||||
├── openclaw.plugin.json # 設定スキーマを含むマニフェスト
|
||||
├── index.ts # defineChannelPluginEntry
|
||||
├── setup-entry.ts # defineSetupPluginEntry
|
||||
├── api.ts # 公開エクスポート(任意)
|
||||
├── runtime-api.ts # 内部runtimeエクスポート(任意)
|
||||
├── runtime-api.ts # 内部ランタイムエクスポート(任意)
|
||||
└── src/
|
||||
├── channel.ts # createChatChannelPluginによるChannelPlugin
|
||||
├── channel.ts # createChatChannelPlugin による ChannelPlugin
|
||||
├── channel.test.ts # テスト
|
||||
├── client.ts # プラットフォームAPIクライアント
|
||||
└── runtime.ts # runtimeストア(必要な場合)
|
||||
├── client.ts # プラットフォーム API クライアント
|
||||
└── runtime.ts # ランタイムストア(必要な場合)
|
||||
```
|
||||
|
||||
## 高度なトピック
|
||||
|
||||
<CardGroup cols={2}>
|
||||
<Card title="スレッド化オプション" icon="git-branch" href="/ja-JP/plugins/sdk-entrypoints#registration-mode">
|
||||
固定、アカウントスコープ、またはカスタムの返信モード
|
||||
固定、アカウントスコープ、またはカスタムの reply モード
|
||||
</Card>
|
||||
<Card title="messageツール統合" icon="puzzle" href="/ja-JP/plugins/architecture#channel-plugins-and-the-shared-message-tool">
|
||||
describeMessageTool とアクションディスカバリー
|
||||
<Card title="message ツール統合" icon="puzzle" href="/ja-JP/plugins/architecture#channel-plugins-and-the-shared-message-tool">
|
||||
describeMessageTool とアクション検出
|
||||
</Card>
|
||||
<Card title="ターゲット解決" icon="crosshair" href="/ja-JP/plugins/architecture#channel-target-resolution">
|
||||
inferTargetChatType, looksLikeId, resolveTarget
|
||||
inferTargetChatType、looksLikeId、resolveTarget
|
||||
</Card>
|
||||
<Card title="runtimeヘルパー" icon="settings" href="/ja-JP/plugins/sdk-runtime">
|
||||
api.runtime を介したTTS、STT、メディア、subagent
|
||||
<Card title="ランタイムヘルパー" icon="settings" href="/ja-JP/plugins/sdk-runtime">
|
||||
api.runtime 経由の TTS、STT、メディア、subagent
|
||||
</Card>
|
||||
</CardGroup>
|
||||
|
||||
<Note>
|
||||
一部の同梱ヘルパーシームは、同梱pluginの保守と互換性のために引き続き存在します。これらは新しいチャネルpluginに推奨されるパターンではありません。その同梱pluginファミリーを直接保守しているのでない限り、共通SDKサーフェスの汎用的なchannel/setup/reply/runtimeサブパスを優先してください。
|
||||
一部の同梱ヘルパー公開インターフェースは、同梱 Plugin の保守と互換性のためにまだ存在しています。これらは新しいチャネル Plugin に推奨されるパターンではありません。その同梱 Plugin ファミリーを直接保守しているのでない限り、共通 SDK 公開インターフェースの汎用 channel/setup/reply/runtime subpath を優先してください。
|
||||
</Note>
|
||||
|
||||
## 次のステップ
|
||||
|
||||
- [Provider Plugins](/ja-JP/plugins/sdk-provider-plugins) — pluginがモデルも提供する場合
|
||||
- [SDK Overview](/ja-JP/plugins/sdk-overview) — 完全なサブパスimportリファレンス
|
||||
- [SDK Testing](/ja-JP/plugins/sdk-testing) — テストユーティリティと契約テスト
|
||||
- [Provider Plugins](/ja-JP/plugins/sdk-provider-plugins) — Plugin がモデルも提供する場合
|
||||
- [SDK Overview](/ja-JP/plugins/sdk-overview) — 完全な subpath import リファレンス
|
||||
- [SDK Testing](/ja-JP/plugins/sdk-testing) — テストユーティリティとコントラクトテスト
|
||||
- [Plugin Manifest](/ja-JP/plugins/manifest) — 完全なマニフェストスキーマ
|
||||
|
||||
@ -1,55 +1,73 @@
|
||||
---
|
||||
read_when:
|
||||
- どのSDKサブパスからインポートするかを把握する必要があります
|
||||
- OpenClawPluginApi上のすべての登録メソッドのリファレンスが必要です
|
||||
- 特定のSDKエクスポートを調べています
|
||||
- どのSDKサブパスからインポートすべきかを知る必要がある
|
||||
- OpenClawPluginApi のすべての登録メソッドのリファレンスが欲しい
|
||||
- 特定のSDKエクスポートを調べている
|
||||
sidebarTitle: SDK Overview
|
||||
summary: インポートマップ、登録APIリファレンス、およびSDKアーキテクチャ
|
||||
title: Plugin SDKの概要
|
||||
summary: インポートマップ、登録APIリファレンス、SDKアーキテクチャ
|
||||
title: Plugin SDK の概要
|
||||
x-i18n:
|
||||
generated_at: "2026-04-17T04:43:57Z"
|
||||
generated_at: "2026-04-18T04:40:48Z"
|
||||
model: gpt-5.4
|
||||
provider: openai
|
||||
source_hash: b177fdb6830f415d998a24812bc2c7db8124d3ba77b0174c9a67ac7d747f7e5a
|
||||
source_hash: 05d3d0022cca32d29c76f6cea01cdf4f88ac69ef0ef3d7fb8a60fbf9a6b9b331
|
||||
source_path: plugins/sdk-overview.md
|
||||
workflow: 15
|
||||
---
|
||||
|
||||
# Plugin SDKの概要
|
||||
# Plugin SDK の概要
|
||||
|
||||
plugin SDKは、Pluginとcoreの間にある型付きコントラクトです。このページは、**何をインポートするか**と**何を登録できるか**のリファレンスです。
|
||||
plugin SDKは、pluginとコアの間にある型付き契約です。このページは、**何をインポートするか** と **何を登録できるか** のリファレンスです。
|
||||
|
||||
<Tip>
|
||||
**ハウツーガイドをお探しですか?**
|
||||
- 最初のPluginですか? [はじめに](/ja-JP/plugins/building-plugins)から始めてください
|
||||
- Channel Pluginですか? [Channel Plugins](/ja-JP/plugins/sdk-channel-plugins)を参照してください
|
||||
- Provider Pluginですか? [Provider Plugins](/ja-JP/plugins/sdk-provider-plugins)を参照してください
|
||||
**ハウツーガイドを探していますか?**
|
||||
- 初めてのpluginですか? [はじめに](/ja-JP/plugins/building-plugins) から始めてください
|
||||
- Channel pluginですか? [Channel Plugins](/ja-JP/plugins/sdk-channel-plugins) を参照してください
|
||||
- Provider pluginですか? [Provider Plugins](/ja-JP/plugins/sdk-provider-plugins) を参照してください
|
||||
</Tip>
|
||||
|
||||
## インポート規約
|
||||
|
||||
必ず特定のサブパスからインポートしてください。
|
||||
必ず特定のサブパスからインポートしてください:
|
||||
|
||||
```typescript
|
||||
import { definePluginEntry } from "openclaw/plugin-sdk/plugin-entry";
|
||||
import { defineChannelPluginEntry } from "openclaw/plugin-sdk/channel-core";
|
||||
```
|
||||
|
||||
各サブパスは、小さく自己完結したモジュールです。これにより起動を高速に保ち、循環依存の問題を防げます。channel固有のentry/buildヘルパーには、`openclaw/plugin-sdk/channel-core`を優先してください。`openclaw/plugin-sdk/core`は、より広いアンブレラサーフェスと、`buildChannelConfigSchema`のような共有ヘルパー向けに使ってください。
|
||||
各サブパスは、小さく自己完結したモジュールです。これにより起動を高速に保ち、
|
||||
循環依存の問題を防ぎます。channel固有のエントリ/ビルドヘルパーについては、
|
||||
`openclaw/plugin-sdk/channel-core` を優先し、より広いアンブレラサーフェスや
|
||||
`buildChannelConfigSchema` のような共有ヘルパーには
|
||||
`openclaw/plugin-sdk/core` を使ってください。
|
||||
|
||||
`openclaw/plugin-sdk/slack`、`openclaw/plugin-sdk/discord`、`openclaw/plugin-sdk/signal`、`openclaw/plugin-sdk/whatsapp`のようなprovider名ベースの便利用seamや、channelブランドのhelper seamを追加したり依存したりしないでください。bundled Pluginは、自身の`api.ts`または`runtime-api.ts` barrel内で汎用的なSDKサブパスを組み合わせるべきであり、coreはそれらのPluginローカルbarrelを使うか、本当にcross-channelな必要がある場合にのみ狭い汎用SDKコントラクトを追加すべきです。
|
||||
`openclaw/plugin-sdk/slack`、`openclaw/plugin-sdk/discord`、
|
||||
`openclaw/plugin-sdk/signal`、`openclaw/plugin-sdk/whatsapp` のような
|
||||
provider名付きの便利用シームや、channelブランド付きのヘルパーシームを
|
||||
追加したり依存したりしないでください。バンドルされたpluginは、汎用的な
|
||||
SDKサブパスを自身の `api.ts` または `runtime-api.ts` バレル内で組み合わせるべきであり、コアはそれらのpluginローカルバレルを使うか、本当に
|
||||
チャネル横断の必要がある場合に限って狭い汎用SDK契約を追加すべきです。
|
||||
|
||||
生成されたexport mapには、`plugin-sdk/feishu`、`plugin-sdk/feishu-setup`、`plugin-sdk/zalo`、`plugin-sdk/zalo-setup`、`plugin-sdk/matrix*`のような、bundled Plugin用helper seamの小さなセットが依然として含まれています。これらのサブパスは、bundled Pluginの保守と互換性のためだけに存在します。意図的に以下の共通テーブルからは除外されており、新しいサードパーティPluginには推奨されるインポートパスではありません。
|
||||
生成されたエクスポートマップには、`plugin-sdk/feishu`、
|
||||
`plugin-sdk/feishu-setup`、`plugin-sdk/zalo`、
|
||||
`plugin-sdk/zalo-setup`、`plugin-sdk/matrix*` のような、
|
||||
少数のバンドルplugin用ヘルパーシームが依然として含まれています。これらの
|
||||
サブパスは、バンドルpluginの保守と互換性のためだけに存在します。意図的に
|
||||
下の共通テーブルからは除外されており、新しいサードパーティpluginに推奨される
|
||||
インポートパスではありません。
|
||||
|
||||
## サブパスリファレンス
|
||||
|
||||
目的別にグループ化した、最もよく使われるサブパスです。200以上あるサブパスの生成済み完全リストは`scripts/lib/plugin-sdk-entrypoints.json`にあります。
|
||||
目的別にまとめた、最も一般的に使われるサブパスです。200を超えるサブパスの
|
||||
生成済み完全一覧は `scripts/lib/plugin-sdk-entrypoints.json` にあります。
|
||||
|
||||
予約済みのbundled Plugin helper subpathも、その生成済みリストには引き続き表示されます。ドキュメントページで明示的に公開として案内されない限り、これらは実装詳細または互換性サーフェスとして扱ってください。
|
||||
予約済みのバンドルplugin用ヘルパーサブパスは、その生成済み一覧には依然として
|
||||
表示されます。ドキュメントページで明示的に公開として推奨されていない限り、
|
||||
それらは実装詳細/互換性サーフェスとして扱ってください。
|
||||
|
||||
### Plugin entry
|
||||
|
||||
| Subpath | 主なexports |
|
||||
| Subpath | 主なエクスポート |
|
||||
| --------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| `plugin-sdk/plugin-entry` | `definePluginEntry` |
|
||||
| `plugin-sdk/core` | `defineChannelPluginEntry`, `createChatChannelPlugin`, `createChannelPluginBase`, `defineSetupPluginEntry`, `buildChannelConfigSchema` |
|
||||
@ -58,284 +76,303 @@ import { defineChannelPluginEntry } from "openclaw/plugin-sdk/channel-core";
|
||||
|
||||
<AccordionGroup>
|
||||
<Accordion title="Channel subpaths">
|
||||
| Subpath | 主なexports |
|
||||
| Subpath | 主なエクスポート |
|
||||
| --- | --- |
|
||||
| `plugin-sdk/channel-core` | `defineChannelPluginEntry`, `defineSetupPluginEntry`, `createChatChannelPlugin`, `createChannelPluginBase` |
|
||||
| `plugin-sdk/config-schema` | ルート`openclaw.json` Zod schema export(`OpenClawSchema`) |
|
||||
| `plugin-sdk/channel-setup` | `createOptionalChannelSetupSurface`, `createOptionalChannelSetupAdapter`, `createOptionalChannelSetupWizard`、および`DEFAULT_ACCOUNT_ID`, `createTopLevelChannelDmPolicy`, `setSetupChannelEnabled`, `splitSetupEntries` |
|
||||
| `plugin-sdk/setup` | 共有setupウィザードヘルパー、allowlistプロンプト、setup status builder |
|
||||
| `plugin-sdk/config-schema` | ルート `openclaw.json` Zodスキーマエクスポート (`OpenClawSchema`) |
|
||||
| `plugin-sdk/channel-setup` | `createOptionalChannelSetupSurface`, `createOptionalChannelSetupAdapter`, `createOptionalChannelSetupWizard`, および `DEFAULT_ACCOUNT_ID`, `createTopLevelChannelDmPolicy`, `setSetupChannelEnabled`, `splitSetupEntries` |
|
||||
| `plugin-sdk/setup` | 共有セットアップウィザードヘルパー、allowlistプロンプト、セットアップステータスビルダー |
|
||||
| `plugin-sdk/setup-runtime` | `createPatchedAccountSetupAdapter`, `createEnvPatchedAccountSetupAdapter`, `createSetupInputPresenceValidator`, `noteChannelLookupFailure`, `noteChannelLookupSummary`, `promptResolvedAllowFrom`, `splitSetupEntries`, `createAllowlistSetupWizardProxy`, `createDelegatedSetupWizardProxy` |
|
||||
| `plugin-sdk/setup-adapter-runtime` | `createEnvPatchedAccountSetupAdapter` |
|
||||
| `plugin-sdk/setup-tools` | `formatCliCommand`, `detectBinary`, `extractArchive`, `resolveBrewExecutable`, `formatDocsLink`, `CONFIG_DIR` |
|
||||
| `plugin-sdk/account-core` | 複数アカウントconfig/action-gate helper、default-account fallback helper |
|
||||
| `plugin-sdk/account-id` | `DEFAULT_ACCOUNT_ID`、account-id正規化helper |
|
||||
| `plugin-sdk/account-resolution` | account lookup + default-fallback helper |
|
||||
| `plugin-sdk/account-helpers` | 狭いaccount-list/account-action helper |
|
||||
| `plugin-sdk/account-core` | マルチアカウント設定/アクションゲートヘルパー、デフォルトアカウントフォールバックヘルパー |
|
||||
| `plugin-sdk/account-id` | `DEFAULT_ACCOUNT_ID`、account-id正規化ヘルパー |
|
||||
| `plugin-sdk/account-resolution` | アカウント検索 + デフォルトフォールバックヘルパー |
|
||||
| `plugin-sdk/account-helpers` | 狭いaccount-list/account-actionヘルパー |
|
||||
| `plugin-sdk/channel-pairing` | `createChannelPairingController` |
|
||||
| `plugin-sdk/channel-reply-pipeline` | `createChannelReplyPipeline` |
|
||||
| `plugin-sdk/channel-config-helpers` | `createHybridChannelConfigAdapter` |
|
||||
| `plugin-sdk/channel-config-schema` | channel config schema type |
|
||||
| `plugin-sdk/telegram-command-config` | bundled-contract fallbackを備えたTelegram custom-command正規化/検証helper |
|
||||
| `plugin-sdk/channel-config-schema` | Channel設定スキーマ型 |
|
||||
| `plugin-sdk/telegram-command-config` | バンドル契約フォールバック付きのTelegramカスタムコマンド正規化/検証ヘルパー |
|
||||
| `plugin-sdk/command-gating` | 狭いコマンド認可ゲートヘルパー |
|
||||
| `plugin-sdk/channel-policy` | `resolveChannelGroupRequireMention` |
|
||||
| `plugin-sdk/channel-lifecycle` | `createAccountStatusSink` |
|
||||
| `plugin-sdk/inbound-envelope` | 共有inbound route + envelope builder helper |
|
||||
| `plugin-sdk/inbound-reply-dispatch` | 共有inbound record-and-dispatch helper |
|
||||
| `plugin-sdk/messaging-targets` | target解析/マッチングhelper |
|
||||
| `plugin-sdk/outbound-media` | 共有outbound media読み込みhelper |
|
||||
| `plugin-sdk/outbound-runtime` | outbound identity/send delegate helper |
|
||||
| `plugin-sdk/thread-bindings-runtime` | thread-binding lifecycleおよびadapter helper |
|
||||
| `plugin-sdk/agent-media-payload` | legacy agent media payload builder |
|
||||
| `plugin-sdk/conversation-runtime` | conversation/thread binding、pairing、およびconfigured-binding helper |
|
||||
| `plugin-sdk/runtime-config-snapshot` | runtime config snapshot helper |
|
||||
| `plugin-sdk/runtime-group-policy` | runtime group-policy解決helper |
|
||||
| `plugin-sdk/channel-status` | 共有channel status snapshot/summary helper |
|
||||
| `plugin-sdk/channel-config-primitives` | 狭いchannel config-schema primitive |
|
||||
| `plugin-sdk/channel-config-writes` | channel config-write認可helper |
|
||||
| `plugin-sdk/channel-plugin-common` | 共有channel plugin prelude export |
|
||||
| `plugin-sdk/allowlist-config-edit` | allowlist config edit/read helper |
|
||||
| `plugin-sdk/group-access` | 共有group-access decision helper |
|
||||
| `plugin-sdk/direct-dm` | 共有direct-DM auth/guard helper |
|
||||
| `plugin-sdk/interactive-runtime` | interactive reply payload正規化/reduction helper |
|
||||
| `plugin-sdk/channel-inbound` | inbound debounce、mention matching、mention-policy helper、およびenvelope helper |
|
||||
| `plugin-sdk/channel-send-result` | reply result type |
|
||||
| `plugin-sdk/inbound-envelope` | 共有の受信ルート + エンベロープビルダーヘルパー |
|
||||
| `plugin-sdk/inbound-reply-dispatch` | 共有の受信record-and-dispatchヘルパー |
|
||||
| `plugin-sdk/messaging-targets` | ターゲット解析/マッチングヘルパー |
|
||||
| `plugin-sdk/outbound-media` | 共有の送信メディア読み込みヘルパー |
|
||||
| `plugin-sdk/outbound-runtime` | 送信元identity/sendデリゲートヘルパー |
|
||||
| `plugin-sdk/poll-runtime` | 狭いpoll正規化ヘルパー |
|
||||
| `plugin-sdk/thread-bindings-runtime` | スレッドバインディングのライフサイクルおよびアダプタヘルパー |
|
||||
| `plugin-sdk/agent-media-payload` | 旧来のagentメディアペイロードビルダー |
|
||||
| `plugin-sdk/conversation-runtime` | 会話/スレッドバインディング、pairing、configured-bindingヘルパー |
|
||||
| `plugin-sdk/runtime-config-snapshot` | ランタイム設定スナップショットヘルパー |
|
||||
| `plugin-sdk/runtime-group-policy` | ランタイムgroup-policy解決ヘルパー |
|
||||
| `plugin-sdk/channel-status` | 共有channelステータススナップショット/サマリーヘルパー |
|
||||
| `plugin-sdk/channel-config-primitives` | 狭いchannel設定スキーマプリミティブ |
|
||||
| `plugin-sdk/channel-config-writes` | channel設定書き込み認可ヘルパー |
|
||||
| `plugin-sdk/channel-plugin-common` | 共有channel pluginプレリュードエクスポート |
|
||||
| `plugin-sdk/allowlist-config-edit` | allowlist設定の編集/読み取りヘルパー |
|
||||
| `plugin-sdk/group-access` | 共有group-access判定ヘルパー |
|
||||
| `plugin-sdk/direct-dm` | 共有direct-DM認証/ガードヘルパー |
|
||||
| `plugin-sdk/interactive-runtime` | 対話型返信ペイロードの正規化/削減ヘルパー |
|
||||
| `plugin-sdk/channel-inbound` | 受信デバウンス、メンションマッチング、mention-policyヘルパー、およびエンベロープヘルパーの互換性バレル |
|
||||
| `plugin-sdk/channel-mention-gating` | より広い受信ランタイムサーフェスを含まない、狭いmention-policyヘルパー |
|
||||
| `plugin-sdk/channel-location` | channel位置コンテキストおよびフォーマットヘルパー |
|
||||
| `plugin-sdk/channel-logging` | 受信ドロップおよびtyping/ack失敗のためのchannelロギングヘルパー |
|
||||
| `plugin-sdk/channel-send-result` | 返信結果型 |
|
||||
| `plugin-sdk/channel-actions` | `createMessageToolButtonsSchema`, `createMessageToolCardSchema` |
|
||||
| `plugin-sdk/channel-targets` | target解析/マッチングhelper |
|
||||
| `plugin-sdk/channel-contract` | channel contract type |
|
||||
| `plugin-sdk/channel-feedback` | feedback/reaction wiring |
|
||||
| `plugin-sdk/channel-secret-runtime` | `collectSimpleChannelFieldAssignments`, `getChannelSurface`, `pushAssignment`、およびsecret target typeのような狭いsecret-contract helper |
|
||||
| `plugin-sdk/channel-targets` | ターゲット解析/マッチングヘルパー |
|
||||
| `plugin-sdk/channel-contract` | Channel契約型 |
|
||||
| `plugin-sdk/channel-feedback` | フィードバック/リアクション接続 |
|
||||
| `plugin-sdk/channel-secret-runtime` | `collectSimpleChannelFieldAssignments`, `getChannelSurface`, `pushAssignment`、およびsecret target型のような狭いsecret-contractヘルパー |
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Provider subpaths">
|
||||
| Subpath | 主なexports |
|
||||
| Subpath | 主なエクスポート |
|
||||
| --- | --- |
|
||||
| `plugin-sdk/provider-entry` | `defineSingleProviderPluginEntry` |
|
||||
| `plugin-sdk/provider-setup` | 厳選されたlocal/self-hosted provider setup helper |
|
||||
| `plugin-sdk/self-hosted-provider-setup` | OpenAI互換のself-hosted provider setupに特化したhelper |
|
||||
| `plugin-sdk/cli-backend` | CLI backend default + watchdog定数 |
|
||||
| `plugin-sdk/provider-auth-runtime` | Provider Plugin向けruntime API key解決helper |
|
||||
| `plugin-sdk/provider-auth-api-key` | `upsertApiKeyProfile`などのAPI keyオンボーディング/profile-write helper |
|
||||
| `plugin-sdk/provider-auth-result` | 標準OAuth auth-result builder |
|
||||
| `plugin-sdk/provider-auth-login` | Provider Plugin向け共有interactive login helper |
|
||||
| `plugin-sdk/provider-env-vars` | provider auth env-var lookup helper |
|
||||
| `plugin-sdk/provider-setup` | 厳選されたローカル/セルフホストproviderセットアップヘルパー |
|
||||
| `plugin-sdk/self-hosted-provider-setup` | OpenAI互換セルフホストprovider向けの特化セットアップヘルパー |
|
||||
| `plugin-sdk/cli-backend` | CLIバックエンドのデフォルト + watchdog定数 |
|
||||
| `plugin-sdk/provider-auth-runtime` | provider plugin向けのランタイムAPIキー解決ヘルパー |
|
||||
| `plugin-sdk/provider-auth-api-key` | `upsertApiKeyProfile` などのAPIキーオンボーディング/プロファイル書き込みヘルパー |
|
||||
| `plugin-sdk/provider-auth-result` | 標準OAuth認証結果ビルダー |
|
||||
| `plugin-sdk/provider-auth-login` | provider plugin向けの共有対話型ログインヘルパー |
|
||||
| `plugin-sdk/provider-env-vars` | provider認証env-var検索ヘルパー |
|
||||
| `plugin-sdk/provider-auth` | `createProviderApiKeyAuthMethod`, `ensureApiKeyFromOptionEnvOrPrompt`, `upsertAuthProfile`, `upsertApiKeyProfile`, `writeOAuthCredentials` |
|
||||
| `plugin-sdk/provider-model-shared` | `ProviderReplayFamily`, `buildProviderReplayFamilyHooks`, `normalizeModelCompat`、共有replay-policy builder、provider-endpoint helper、および`normalizeNativeXaiModelId`のようなmodel-id正規化helper |
|
||||
| `plugin-sdk/provider-model-shared` | `ProviderReplayFamily`, `buildProviderReplayFamilyHooks`, `normalizeModelCompat`, 共有replay-policyビルダー、providerエンドポイントヘルパー、および `normalizeNativeXaiModelId` のようなmodel-id正規化ヘルパー |
|
||||
| `plugin-sdk/provider-catalog-shared` | `findCatalogTemplate`, `buildSingleProviderApiKeyCatalog`, `supportsNativeStreamingUsageCompat`, `applyProviderNativeStreamingUsageCompat` |
|
||||
| `plugin-sdk/provider-http` | 汎用provider HTTP/endpoint capability helper |
|
||||
| `plugin-sdk/provider-web-fetch-contract` | `enablePluginInConfig`や`WebFetchProviderPlugin`などの狭いweb-fetch config/selection contract helper |
|
||||
| `plugin-sdk/provider-web-fetch` | web-fetch provider registration/cache helper |
|
||||
| `plugin-sdk/provider-web-search-config-contract` | Plugin有効化wiringを必要としないprovider向けの狭いweb-search config/credential helper |
|
||||
| `plugin-sdk/provider-web-search-contract` | `createWebSearchProviderContractFields`, `enablePluginInConfig`, `resolveProviderWebSearchPluginConfig`、およびスコープ付きcredential setter/getterなどの狭いweb-search config/credential contract helper |
|
||||
| `plugin-sdk/provider-web-search` | web-search provider registration/cache/runtime helper |
|
||||
| `plugin-sdk/provider-tools` | `ProviderToolCompatFamily`, `buildProviderToolCompatFamilyHooks`, Gemini schema cleanup + diagnostics、および`resolveXaiModelCompatPatch` / `applyXaiModelCompat`のようなxAI互換helper |
|
||||
| `plugin-sdk/provider-usage` | `fetchClaudeUsage`など |
|
||||
| `plugin-sdk/provider-stream` | `ProviderStreamFamily`, `buildProviderStreamFamilyHooks`, `composeProviderStreamWrappers`、stream wrapper type、および共有Anthropic/Bedrock/Google/Kilocode/Moonshot/OpenAI/OpenRouter/Z.A.I/MiniMax/Copilot wrapper helper |
|
||||
| `plugin-sdk/provider-onboard` | オンボーディングconfig patch helper |
|
||||
| `plugin-sdk/global-singleton` | process-local singleton/map/cache helper |
|
||||
| `plugin-sdk/provider-http` | 汎用provider HTTP/エンドポイント機能ヘルパー |
|
||||
| `plugin-sdk/provider-web-fetch-contract` | `enablePluginInConfig` や `WebFetchProviderPlugin` のような、狭いweb-fetch設定/選択契約ヘルパー |
|
||||
| `plugin-sdk/provider-web-fetch` | web-fetch provider登録/キャッシュヘルパー |
|
||||
| `plugin-sdk/provider-web-search-config-contract` | plugin有効化接続を必要としないprovider向けの、狭いweb-search設定/認証情報ヘルパー |
|
||||
| `plugin-sdk/provider-web-search-contract` | `createWebSearchProviderContractFields`, `enablePluginInConfig`, `resolveProviderWebSearchPluginConfig`、およびスコープ付き認証情報setter/getterのような、狭いweb-search設定/認証情報契約ヘルパー |
|
||||
| `plugin-sdk/provider-web-search` | web-search provider登録/キャッシュ/ランタイムヘルパー |
|
||||
| `plugin-sdk/provider-tools` | `ProviderToolCompatFamily`, `buildProviderToolCompatFamilyHooks`, Geminiスキーマクリーンアップ + 診断、および `resolveXaiModelCompatPatch` / `applyXaiModelCompat` のようなxAI互換ヘルパー |
|
||||
| `plugin-sdk/provider-usage` | `fetchClaudeUsage` など |
|
||||
| `plugin-sdk/provider-stream` | `ProviderStreamFamily`, `buildProviderStreamFamilyHooks`, `composeProviderStreamWrappers`, ストリームラッパー型、および共有のAnthropic/Bedrock/Google/Kilocode/Moonshot/OpenAI/OpenRouter/Z.A.I/MiniMax/Copilotラッパーヘルパー |
|
||||
| `plugin-sdk/provider-onboard` | オンボーディング設定パッチヘルパー |
|
||||
| `plugin-sdk/global-singleton` | プロセスローカルsingleton/map/cacheヘルパー |
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="認証およびセキュリティのサブパス">
|
||||
| Subpath | 主なexports |
|
||||
<Accordion title="認証とセキュリティのサブパス">
|
||||
| Subpath | 主なエクスポート |
|
||||
| --- | --- |
|
||||
| `plugin-sdk/command-auth` | `resolveControlCommandGate`、command registry helper、sender-authorization helper |
|
||||
| `plugin-sdk/command-status` | `buildCommandsMessagePaginated`や`buildHelpMessage`などのcommand/help message builder |
|
||||
| `plugin-sdk/approval-auth-runtime` | approver解決およびsame-chat action-auth helper |
|
||||
| `plugin-sdk/approval-client-runtime` | native exec approval profile/filter helper |
|
||||
| `plugin-sdk/approval-delivery-runtime` | native approval capability/delivery adapter |
|
||||
| `plugin-sdk/approval-gateway-runtime` | 共有approval gateway-resolution helper |
|
||||
| `plugin-sdk/approval-handler-adapter-runtime` | ホットなchannel entrypoint向けの軽量native approval adapter読み込みhelper |
|
||||
| `plugin-sdk/approval-handler-runtime` | より広範なapproval handler runtime helper。より狭いadapter/gateway seamで十分な場合はそちらを優先してください |
|
||||
| `plugin-sdk/approval-native-runtime` | native approval target + account-binding helper |
|
||||
| `plugin-sdk/approval-reply-runtime` | exec/plugin approval reply payload helper |
|
||||
| `plugin-sdk/command-auth-native` | native command auth + native session-target helper |
|
||||
| `plugin-sdk/command-detection` | 共有command detection helper |
|
||||
| `plugin-sdk/command-surface` | command-body正規化およびcommand-surface helper |
|
||||
| `plugin-sdk/command-auth` | `resolveControlCommandGate`、コマンドレジストリヘルパー、送信者認可ヘルパー |
|
||||
| `plugin-sdk/command-status` | `buildCommandsMessagePaginated` や `buildHelpMessage` のようなコマンド/ヘルプメッセージビルダー |
|
||||
| `plugin-sdk/approval-auth-runtime` | 承認者解決および同一チャットのアクション認可ヘルパー |
|
||||
| `plugin-sdk/approval-client-runtime` | ネイティブexec承認プロファイル/フィルタヘルパー |
|
||||
| `plugin-sdk/approval-delivery-runtime` | ネイティブ承認機能/配信アダプタ |
|
||||
| `plugin-sdk/approval-gateway-runtime` | 共有承認Gateway解決ヘルパー |
|
||||
| `plugin-sdk/approval-handler-adapter-runtime` | ホットなchannelエントリポイント向けの軽量ネイティブ承認アダプタ読み込みヘルパー |
|
||||
| `plugin-sdk/approval-handler-runtime` | より広い承認ハンドラーランタイムヘルパー。狭いadapter/gatewayシームで十分な場合はそちらを優先してください |
|
||||
| `plugin-sdk/approval-native-runtime` | ネイティブ承認ターゲット + アカウントバインディングヘルパー |
|
||||
| `plugin-sdk/approval-reply-runtime` | exec/plugin承認返信ペイロードヘルパー |
|
||||
| `plugin-sdk/command-auth-native` | ネイティブコマンド認可 + ネイティブセッションターゲットヘルパー |
|
||||
| `plugin-sdk/command-detection` | 共有コマンド検出ヘルパー |
|
||||
| `plugin-sdk/command-surface` | コマンド本文の正規化およびコマンドサーフェスヘルパー |
|
||||
| `plugin-sdk/allow-from` | `formatAllowFromLowercase` |
|
||||
| `plugin-sdk/channel-secret-runtime` | channel/plugin secret surface向けの狭いsecret-contract collection helper |
|
||||
| `plugin-sdk/secret-ref-runtime` | secret-contract/config parsing向けの狭い`coerceSecretRef`およびSecretRef型付けhelper |
|
||||
| `plugin-sdk/security-runtime` | 共有trust、DM gating、external-content、およびsecret-collection helper |
|
||||
| `plugin-sdk/ssrf-policy` | host allowlistおよびprivate-network SSRF policy helper |
|
||||
| `plugin-sdk/ssrf-runtime` | pinned-dispatcher、SSRF-guarded fetch、およびSSRF policy helper |
|
||||
| `plugin-sdk/secret-input` | secret input parsing helper |
|
||||
| `plugin-sdk/webhook-ingress` | Webhook request/target helper |
|
||||
| `plugin-sdk/webhook-request-guards` | request body size/timeout helper |
|
||||
| `plugin-sdk/channel-secret-runtime` | channel/plugin secretサーフェス向けの狭いsecret-contract収集ヘルパー |
|
||||
| `plugin-sdk/secret-ref-runtime` | secret-contract/設定解析向けの、狭い `coerceSecretRef` および SecretRef 型ヘルパー |
|
||||
| `plugin-sdk/security-runtime` | 共有の信頼、DMゲーティング、外部コンテンツ、およびsecret収集ヘルパー |
|
||||
| `plugin-sdk/ssrf-policy` | ホストallowlistおよびプライベートネットワークSSRFポリシーヘルパー |
|
||||
| `plugin-sdk/ssrf-dispatcher` | 広いinfraランタイムサーフェスを含まない、狭いpinned-dispatcherヘルパー |
|
||||
| `plugin-sdk/ssrf-runtime` | pinned-dispatcher、SSRFガード付きfetch、およびSSRFポリシーヘルパー |
|
||||
| `plugin-sdk/secret-input` | secret入力解析ヘルパー |
|
||||
| `plugin-sdk/webhook-ingress` | Webhookリクエスト/ターゲットヘルパー |
|
||||
| `plugin-sdk/webhook-request-guards` | リクエスト本文サイズ/タイムアウトヘルパー |
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="ランタイムおよびストレージのサブパス">
|
||||
| Subpath | 主なexports |
|
||||
<Accordion title="ランタイムとストレージのサブパス">
|
||||
| Subpath | 主なエクスポート |
|
||||
| --- | --- |
|
||||
| `plugin-sdk/runtime` | 広範なruntime/logging/backup/plugin-install helper |
|
||||
| `plugin-sdk/runtime-env` | 狭いruntime env、logger、timeout、retry、およびbackoff helper |
|
||||
| `plugin-sdk/channel-runtime-context` | 汎用channel runtime-context登録およびlookup helper |
|
||||
| `plugin-sdk/runtime` | 広範なランタイム/ロギング/バックアップ/pluginインストールヘルパー |
|
||||
| `plugin-sdk/runtime-env` | 狭いランタイムenv、logger、timeout、retry、およびbackoffヘルパー |
|
||||
| `plugin-sdk/channel-runtime-context` | 汎用channelランタイムコンテキスト登録および検索ヘルパー |
|
||||
| `plugin-sdk/runtime-store` | `createPluginRuntimeStore` |
|
||||
| `plugin-sdk/plugin-runtime` | 共有plugin command/hook/http/interactive helper |
|
||||
| `plugin-sdk/hook-runtime` | 共有Webhook/internal hook pipeline helper |
|
||||
| `plugin-sdk/lazy-runtime` | `createLazyRuntimeModule`、`createLazyRuntimeMethod`、`createLazyRuntimeSurface`などのlazy runtime import/binding helper |
|
||||
| `plugin-sdk/process-runtime` | process exec helper |
|
||||
| `plugin-sdk/cli-runtime` | CLI formatting、wait、およびversion helper |
|
||||
| `plugin-sdk/gateway-runtime` | Gateway clientおよびchannel-status patch helper |
|
||||
| `plugin-sdk/config-runtime` | config load/write helper |
|
||||
| `plugin-sdk/telegram-command-config` | bundled Telegram contract surfaceが利用できない場合でも使える、Telegram command-name/description正規化およびduplicate/conflict check |
|
||||
| `plugin-sdk/approval-runtime` | exec/plugin approval helper、approval-capability builder、auth/profile helper、native routing/runtime helper |
|
||||
| `plugin-sdk/reply-runtime` | 共有inbound/reply runtime helper、chunking、dispatch、Heartbeat、reply planner |
|
||||
| `plugin-sdk/reply-dispatch-runtime` | 狭いreply dispatch/finalize helper |
|
||||
| `plugin-sdk/reply-history` | `buildHistoryContext`、`recordPendingHistoryEntry`、`clearHistoryEntriesIfEnabled`などの共有short-window reply-history helper |
|
||||
| `plugin-sdk/plugin-runtime` | 共有pluginコマンド/hook/http/interactiveヘルパー |
|
||||
| `plugin-sdk/hook-runtime` | 共有Webhook/internal hookパイプラインヘルパー |
|
||||
| `plugin-sdk/lazy-runtime` | `createLazyRuntimeModule`、`createLazyRuntimeMethod`、`createLazyRuntimeSurface` のような遅延ランタイムimport/バインディングヘルパー |
|
||||
| `plugin-sdk/process-runtime` | プロセスexecヘルパー |
|
||||
| `plugin-sdk/cli-runtime` | CLI整形、待機、およびバージョンヘルパー |
|
||||
| `plugin-sdk/gateway-runtime` | Gatewayクライアントおよびchannel-statusパッチヘルパー |
|
||||
| `plugin-sdk/config-runtime` | 設定の読み込み/書き込みヘルパー |
|
||||
| `plugin-sdk/telegram-command-config` | バンドルされたTelegram契約サーフェスが利用できない場合でも、Telegramコマンド名/説明の正規化および重複/競合チェック |
|
||||
| `plugin-sdk/text-autolink-runtime` | 広いtext-runtimeバレルを含まない、ファイル参照自動リンク検出 |
|
||||
| `plugin-sdk/approval-runtime` | exec/plugin承認ヘルパー、承認機能ビルダー、認可/プロファイルヘルパー、ネイティブルーティング/ランタイムヘルパー |
|
||||
| `plugin-sdk/reply-runtime` | 共有の受信/返信ランタイムヘルパー、チャンク化、ディスパッチ、Heartbeat、返信プランナー |
|
||||
| `plugin-sdk/reply-dispatch-runtime` | 狭い返信ディスパッチ/完了ヘルパー |
|
||||
| `plugin-sdk/reply-history` | `buildHistoryContext`、`recordPendingHistoryEntry`、`clearHistoryEntriesIfEnabled` のような共有短期ウィンドウ返信履歴ヘルパー |
|
||||
| `plugin-sdk/reply-reference` | `createReplyReferencePlanner` |
|
||||
| `plugin-sdk/reply-chunking` | 狭いtext/markdown chunking helper |
|
||||
| `plugin-sdk/session-store-runtime` | session store path + updated-at helper |
|
||||
| `plugin-sdk/state-paths` | state/OAuth dir path helper |
|
||||
| `plugin-sdk/routing` | `resolveAgentRoute`、`buildAgentSessionKey`、`resolveDefaultAgentBoundAccountId`などのroute/session-key/account binding helper |
|
||||
| `plugin-sdk/status-helpers` | 共有channel/account status summary helper、runtime-state default、およびissue metadata helper |
|
||||
| `plugin-sdk/target-resolver-runtime` | 共有target resolver helper |
|
||||
| `plugin-sdk/string-normalization-runtime` | slug/string正規化helper |
|
||||
| `plugin-sdk/request-url` | fetch/requestライクな入力から文字列URLを抽出 |
|
||||
| `plugin-sdk/run-command` | 正規化されたstdout/stderr結果を返すtimed command runner |
|
||||
| `plugin-sdk/param-readers` | 共通tool/CLI param reader |
|
||||
| `plugin-sdk/tool-payload` | tool result objectから正規化済みpayloadを抽出 |
|
||||
| `plugin-sdk/tool-send` | tool argsからcanonical send target fieldを抽出 |
|
||||
| `plugin-sdk/temp-path` | 共有temp-download path helper |
|
||||
| `plugin-sdk/logging-core` | subsystem loggerおよびredaction helper |
|
||||
| `plugin-sdk/markdown-table-runtime` | Markdown table mode helper |
|
||||
| `plugin-sdk/json-store` | 小さなJSON state read/write helper |
|
||||
| `plugin-sdk/file-lock` | 再入可能なfile-lock helper |
|
||||
| `plugin-sdk/persistent-dedupe` | disk-backed dedupe cache helper |
|
||||
| `plugin-sdk/acp-runtime` | ACP runtime/sessionおよびreply-dispatch helper |
|
||||
| `plugin-sdk/agent-config-primitives` | 狭いagent runtime config-schema primitive |
|
||||
| `plugin-sdk/boolean-param` | 緩いboolean param reader |
|
||||
| `plugin-sdk/dangerous-name-runtime` | dangerous-name matching解決helper |
|
||||
| `plugin-sdk/device-bootstrap` | device bootstrapおよびpairing token helper |
|
||||
| `plugin-sdk/extension-shared` | 共有passive-channel、status、およびambient proxy helper primitive |
|
||||
| `plugin-sdk/models-provider-runtime` | `/models` command/provider reply helper |
|
||||
| `plugin-sdk/skill-commands-runtime` | Skills command listing helper |
|
||||
| `plugin-sdk/native-command-registry` | native command registry/build/serialize helper |
|
||||
| `plugin-sdk/agent-harness` | 低レベルagent harness向けの実験的trusted-plugin surface: harness type、active-run steer/abort helper、OpenClaw tool bridge helper、およびattempt result utility |
|
||||
| `plugin-sdk/provider-zai-endpoint` | Z.A.I endpoint detection helper |
|
||||
| `plugin-sdk/infra-runtime` | system event/Heartbeat helper |
|
||||
| `plugin-sdk/collection-runtime` | 小さなbounded cache helper |
|
||||
| `plugin-sdk/diagnostic-runtime` | diagnostic flagおよびevent helper |
|
||||
| `plugin-sdk/error-runtime` | error graph、formatting、共有error classification helper、`isApprovalNotFoundError` |
|
||||
| `plugin-sdk/fetch-runtime` | wrapped fetch、proxy、およびpinned lookup helper |
|
||||
| `plugin-sdk/host-runtime` | hostnameおよびSCP host正規化helper |
|
||||
| `plugin-sdk/retry-runtime` | retry configおよびretry runner helper |
|
||||
| `plugin-sdk/agent-runtime` | agent dir/identity/workspace helper |
|
||||
| `plugin-sdk/directory-runtime` | config-backed directory query/dedup |
|
||||
| `plugin-sdk/reply-chunking` | 狭いテキスト/Markdownチャンク化ヘルパー |
|
||||
| `plugin-sdk/session-store-runtime` | セッションストアパス + updated-atヘルパー |
|
||||
| `plugin-sdk/state-paths` | state/OAuthディレクトリパスヘルパー |
|
||||
| `plugin-sdk/routing` | `resolveAgentRoute`、`buildAgentSessionKey`、`resolveDefaultAgentBoundAccountId` のようなルート/セッションキー/アカウントバインディングヘルパー |
|
||||
| `plugin-sdk/status-helpers` | 共有channel/accountステータスサマリーヘルパー、ランタイムstateデフォルト、およびissueメタデータヘルパー |
|
||||
| `plugin-sdk/target-resolver-runtime` | 共有ターゲットリゾルバヘルパー |
|
||||
| `plugin-sdk/string-normalization-runtime` | slug/文字列正規化ヘルパー |
|
||||
| `plugin-sdk/request-url` | fetch/request風入力から文字列URLを抽出 |
|
||||
| `plugin-sdk/run-command` | 正規化されたstdout/stderr結果を返す時間制限付きコマンドランナー |
|
||||
| `plugin-sdk/param-readers` | 共通tool/CLIパラメータリーダー |
|
||||
| `plugin-sdk/tool-payload` | tool結果オブジェクトから正規化済みペイロードを抽出 |
|
||||
| `plugin-sdk/tool-send` | tool引数から正規の送信ターゲットフィールドを抽出 |
|
||||
| `plugin-sdk/temp-path` | 共有一時ダウンロードパスヘルパー |
|
||||
| `plugin-sdk/logging-core` | サブシステムloggerおよびredactionヘルパー |
|
||||
| `plugin-sdk/markdown-table-runtime` | Markdown表モードヘルパー |
|
||||
| `plugin-sdk/json-store` | 小規模JSON state読み書きヘルパー |
|
||||
| `plugin-sdk/file-lock` | 再入可能ファイルロックヘルパー |
|
||||
| `plugin-sdk/persistent-dedupe` | ディスクバックdedupeキャッシュヘルパー |
|
||||
| `plugin-sdk/acp-runtime` | ACPランタイム/セッションおよびreply-dispatchヘルパー |
|
||||
| `plugin-sdk/acp-binding-resolve-runtime` | ライフサイクル起動importなしの読み取り専用ACPバインディング解決 |
|
||||
| `plugin-sdk/agent-config-primitives` | 狭いagentランタイム設定スキーマプリミティブ |
|
||||
| `plugin-sdk/boolean-param` | 緩いbooleanパラメータリーダー |
|
||||
| `plugin-sdk/dangerous-name-runtime` | 危険な名前のマッチング解決ヘルパー |
|
||||
| `plugin-sdk/device-bootstrap` | デバイスbootstrapおよびpairing tokenヘルパー |
|
||||
| `plugin-sdk/extension-shared` | 共有passive-channel、status、およびambient proxyヘルパープリミティブ |
|
||||
| `plugin-sdk/models-provider-runtime` | `/models` コマンド/provider返信ヘルパー |
|
||||
| `plugin-sdk/skill-commands-runtime` | skillコマンド一覧ヘルパー |
|
||||
| `plugin-sdk/native-command-registry` | ネイティブコマンドレジストリの構築/シリアライズヘルパー |
|
||||
| `plugin-sdk/agent-harness` | 低レベルagent harness向けの実験的trusted-pluginサーフェス: harness型、アクティブ実行のsteer/abortヘルパー、OpenClaw tool bridgeヘルパー、およびattempt resultユーティリティ |
|
||||
| `plugin-sdk/provider-zai-endpoint` | Z.A.Iエンドポイント検出ヘルパー |
|
||||
| `plugin-sdk/infra-runtime` | システムイベント/Heartbeatヘルパー |
|
||||
| `plugin-sdk/collection-runtime` | 小規模な有界キャッシュヘルパー |
|
||||
| `plugin-sdk/diagnostic-runtime` | 診断フラグおよびイベントヘルパー |
|
||||
| `plugin-sdk/error-runtime` | エラーグラフ、整形、共有エラー分類ヘルパー、`isApprovalNotFoundError` |
|
||||
| `plugin-sdk/fetch-runtime` | ラップされたfetch、proxy、およびpinned lookupヘルパー |
|
||||
| `plugin-sdk/runtime-fetch` | proxy/guarded-fetch importなしのdispatcher対応ランタイムfetch |
|
||||
| `plugin-sdk/response-limit-runtime` | 広いmediaランタイムサーフェスを含まない有界レスポンス本文リーダー |
|
||||
| `plugin-sdk/session-binding-runtime` | 設定済みbindingルーティングやpairingストアを含まない現在の会話binding state |
|
||||
| `plugin-sdk/session-store-runtime` | 広い設定書き込み/保守importを含まないセッションストア読み取りヘルパー |
|
||||
| `plugin-sdk/context-visibility-runtime` | 広い設定/セキュリティimportを含まないコンテキスト可視性解決および補助コンテキストフィルタリング |
|
||||
| `plugin-sdk/string-coerce-runtime` | Markdown/ロギングimportを含まない、狭いプリミティブrecord/文字列の強制変換および正規化ヘルパー |
|
||||
| `plugin-sdk/host-runtime` | ホスト名およびSCPホスト正規化ヘルパー |
|
||||
| `plugin-sdk/retry-runtime` | retry設定およびretry実行ヘルパー |
|
||||
| `plugin-sdk/agent-runtime` | agentディレクトリ/identity/workspaceヘルパー |
|
||||
| `plugin-sdk/directory-runtime` | 設定バックのディレクトリ照会/dedupe |
|
||||
| `plugin-sdk/keyed-async-queue` | `KeyedAsyncQueue` |
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Capabilityおよびテストのサブパス">
|
||||
| Subpath | 主なexports |
|
||||
<Accordion title="機能とテストのサブパス">
|
||||
| Subpath | 主なエクスポート |
|
||||
| --- | --- |
|
||||
| `plugin-sdk/media-runtime` | media payload builderに加え、共有media fetch/transform/store helper |
|
||||
| `plugin-sdk/media-generation-runtime` | 共有media-generation failover helper、candidate selection、およびmissing-model messaging |
|
||||
| `plugin-sdk/media-understanding` | media understanding provider typeおよびprovider向けimage/audio helper export |
|
||||
| `plugin-sdk/text-runtime` | assistant-visible-text stripping、markdown render/chunking/table helper、redaction helper、directive-tag helper、安全なtext utilityなどの共有text/markdown/logging helper |
|
||||
| `plugin-sdk/text-chunking` | outbound text chunking helper |
|
||||
| `plugin-sdk/speech` | speech provider typeおよびprovider向けdirective、registry、validation helper |
|
||||
| `plugin-sdk/speech-core` | 共有speech provider type、registry、directive、および正規化helper |
|
||||
| `plugin-sdk/realtime-transcription` | realtime transcription provider typeおよびregistry helper |
|
||||
| `plugin-sdk/realtime-voice` | realtime voice provider typeおよびregistry helper |
|
||||
| `plugin-sdk/image-generation` | image generation provider type |
|
||||
| `plugin-sdk/image-generation-core` | 共有image-generation type、failover、auth、およびregistry helper |
|
||||
| `plugin-sdk/music-generation` | music generation provider/request/result type |
|
||||
| `plugin-sdk/music-generation-core` | 共有music-generation type、failover helper、provider lookup、およびmodel-ref parsing |
|
||||
| `plugin-sdk/video-generation` | video generation provider/request/result type |
|
||||
| `plugin-sdk/video-generation-core` | 共有video-generation type、failover helper、provider lookup、およびmodel-ref parsing |
|
||||
| `plugin-sdk/webhook-targets` | Webhook target registryおよびroute-install helper |
|
||||
| `plugin-sdk/webhook-path` | Webhook path正規化helper |
|
||||
| `plugin-sdk/web-media` | 共有remote/local media読み込みhelper |
|
||||
| `plugin-sdk/zod` | Plugin SDK利用者向けにre-exportされた`zod` |
|
||||
| `plugin-sdk/testing` | `installCommonResolveTargetErrorCases`, `shouldAckReaction` |
|
||||
| `plugin-sdk/media-runtime` | メディアペイロードビルダーに加え、共有メディアfetch/変換/保存ヘルパー |
|
||||
| `plugin-sdk/media-generation-runtime` | 共有メディア生成failoverヘルパー、候補選択、および不足モデルメッセージ |
|
||||
| `plugin-sdk/media-understanding` | メディア理解provider型と、provider向け画像/音声ヘルパーエクスポート |
|
||||
| `plugin-sdk/text-runtime` | アシスタント可視テキストの除去、Markdownレンダリング/チャンク化/表ヘルパー、redactionヘルパー、directive-tagヘルパー、安全なテキストユーティリティなどの共有テキスト/Markdown/ロギングヘルパー |
|
||||
| `plugin-sdk/text-chunking` | 送信テキストチャンク化ヘルパー |
|
||||
| `plugin-sdk/speech` | 音声provider型と、provider向けdirective、registry、および検証ヘルパー |
|
||||
| `plugin-sdk/speech-core` | 共有音声provider型、registry、directive、および正規化ヘルパー |
|
||||
| `plugin-sdk/realtime-transcription` | リアルタイム文字起こしprovider型とregistryヘルパー |
|
||||
| `plugin-sdk/realtime-voice` | リアルタイム音声provider型とregistryヘルパー |
|
||||
| `plugin-sdk/image-generation` | 画像生成provider型 |
|
||||
| `plugin-sdk/image-generation-core` | 共有画像生成型、failover、認証、およびregistryヘルパー |
|
||||
| `plugin-sdk/music-generation` | 音楽生成provider/request/result型 |
|
||||
| `plugin-sdk/music-generation-core` | 共有音楽生成型、failoverヘルパー、provider検索、およびmodel-ref解析 |
|
||||
| `plugin-sdk/video-generation` | 動画生成provider/request/result型 |
|
||||
| `plugin-sdk/video-generation-core` | 共有動画生成型、failoverヘルパー、provider検索、およびmodel-ref解析 |
|
||||
| `plugin-sdk/webhook-targets` | Webhookターゲットregistryおよびroute-installヘルパー |
|
||||
| `plugin-sdk/webhook-path` | Webhookパス正規化ヘルパー |
|
||||
| `plugin-sdk/web-media` | 共有リモート/ローカルメディア読み込みヘルパー |
|
||||
| `plugin-sdk/zod` | plugin SDK利用者向けに再エクスポートされた `zod` |
|
||||
| `plugin-sdk/testing` | `installCommonResolveTargetErrorCases`、`shouldAckReaction` |
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="メモリのサブパス">
|
||||
| Subpath | 主なexports |
|
||||
| Subpath | 主なエクスポート |
|
||||
| --- | --- |
|
||||
| `plugin-sdk/memory-core` | manager/config/file/CLI helper向けのbundled memory-core helper surface |
|
||||
| `plugin-sdk/memory-core-engine-runtime` | memory index/search runtime facade |
|
||||
| `plugin-sdk/memory-core-host-engine-foundation` | memory host foundation engine export |
|
||||
| `plugin-sdk/memory-core-host-engine-embeddings` | memory host embedding contract、registry access、local provider、および汎用batch/remote helper |
|
||||
| `plugin-sdk/memory-core-host-engine-qmd` | memory host QMD engine export |
|
||||
| `plugin-sdk/memory-core-host-engine-storage` | memory host storage engine export |
|
||||
| `plugin-sdk/memory-core-host-multimodal` | memory host multimodal helper |
|
||||
| `plugin-sdk/memory-core-host-query` | memory host query helper |
|
||||
| `plugin-sdk/memory-core-host-secret` | memory host secret helper |
|
||||
| `plugin-sdk/memory-core-host-events` | memory host event journal helper |
|
||||
| `plugin-sdk/memory-core-host-status` | memory host status helper |
|
||||
| `plugin-sdk/memory-core-host-runtime-cli` | memory host CLI runtime helper |
|
||||
| `plugin-sdk/memory-core-host-runtime-core` | memory host core runtime helper |
|
||||
| `plugin-sdk/memory-core-host-runtime-files` | memory host file/runtime helper |
|
||||
| `plugin-sdk/memory-host-core` | memory host core runtime helperのvendor-neutral alias |
|
||||
| `plugin-sdk/memory-host-events` | memory host event journal helperのvendor-neutral alias |
|
||||
| `plugin-sdk/memory-host-files` | memory host file/runtime helperのvendor-neutral alias |
|
||||
| `plugin-sdk/memory-host-markdown` | memory隣接Plugin向けの共有managed-markdown helper |
|
||||
| `plugin-sdk/memory-host-search` | search-manager access向けのActive Memory runtime facade |
|
||||
| `plugin-sdk/memory-host-status` | memory host status helperのvendor-neutral alias |
|
||||
| `plugin-sdk/memory-lancedb` | bundled memory-lancedb helper surface |
|
||||
| `plugin-sdk/memory-core` | manager/config/file/CLIヘルパー向けのバンドルされたmemory-coreヘルパーサーフェス |
|
||||
| `plugin-sdk/memory-core-engine-runtime` | メモリインデックス/検索ランタイムファサード |
|
||||
| `plugin-sdk/memory-core-host-engine-foundation` | メモリホストfoundationエンジンエクスポート |
|
||||
| `plugin-sdk/memory-core-host-engine-embeddings` | メモリホスト埋め込み契約、registryアクセス、ローカルprovider、および汎用バッチ/リモートヘルパー |
|
||||
| `plugin-sdk/memory-core-host-engine-qmd` | メモリホストQMDエンジンエクスポート |
|
||||
| `plugin-sdk/memory-core-host-engine-storage` | メモリホストストレージエンジンエクスポート |
|
||||
| `plugin-sdk/memory-core-host-multimodal` | メモリホストマルチモーダルヘルパー |
|
||||
| `plugin-sdk/memory-core-host-query` | メモリホストクエリヘルパー |
|
||||
| `plugin-sdk/memory-core-host-secret` | メモリホストsecretヘルパー |
|
||||
| `plugin-sdk/memory-core-host-events` | メモリホストイベントジャーナルヘルパー |
|
||||
| `plugin-sdk/memory-core-host-status` | メモリホストステータスヘルパー |
|
||||
| `plugin-sdk/memory-core-host-runtime-cli` | メモリホストCLIランタイムヘルパー |
|
||||
| `plugin-sdk/memory-core-host-runtime-core` | メモリホストコアランタイムヘルパー |
|
||||
| `plugin-sdk/memory-core-host-runtime-files` | メモリホストファイル/ランタイムヘルパー |
|
||||
| `plugin-sdk/memory-host-core` | メモリホストコアランタイムヘルパーのベンダー中立エイリアス |
|
||||
| `plugin-sdk/memory-host-events` | メモリホストイベントジャーナルヘルパーのベンダー中立エイリアス |
|
||||
| `plugin-sdk/memory-host-files` | メモリホストファイル/ランタイムヘルパーのベンダー中立エイリアス |
|
||||
| `plugin-sdk/memory-host-markdown` | メモリ隣接plugin向けの共有managed-markdownヘルパー |
|
||||
| `plugin-sdk/memory-host-search` | 検索managerアクセス向けのActive Memoryランタイムファサード |
|
||||
| `plugin-sdk/memory-host-status` | メモリホストステータスヘルパーのベンダー中立エイリアス |
|
||||
| `plugin-sdk/memory-lancedb` | バンドルされたmemory-lancedbヘルパーサーフェス |
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="予約済みbundled-helperサブパス">
|
||||
<Accordion title="予約済みのバンドルhelperサブパス">
|
||||
| Family | 現在のサブパス | 想定用途 |
|
||||
| --- | --- | --- |
|
||||
| Browser | `plugin-sdk/browser-cdp`, `plugin-sdk/browser-config-runtime`, `plugin-sdk/browser-config-support`, `plugin-sdk/browser-control-auth`, `plugin-sdk/browser-node-runtime`, `plugin-sdk/browser-profiles`, `plugin-sdk/browser-security-runtime`, `plugin-sdk/browser-setup-tools`, `plugin-sdk/browser-support` | bundled browser Pluginサポートhelper(`browser-support`は互換性barrelのままです) |
|
||||
| Matrix | `plugin-sdk/matrix`, `plugin-sdk/matrix-helper`, `plugin-sdk/matrix-runtime-heavy`, `plugin-sdk/matrix-runtime-shared`, `plugin-sdk/matrix-runtime-surface`, `plugin-sdk/matrix-surface`, `plugin-sdk/matrix-thread-bindings` | bundled Matrix helper/runtime surface |
|
||||
| Line | `plugin-sdk/line`, `plugin-sdk/line-core`, `plugin-sdk/line-runtime`, `plugin-sdk/line-surface` | bundled LINE helper/runtime surface |
|
||||
| IRC | `plugin-sdk/irc`, `plugin-sdk/irc-surface` | bundled IRC helper surface |
|
||||
| channel固有helper | `plugin-sdk/googlechat`, `plugin-sdk/zalouser`, `plugin-sdk/bluebubbles`, `plugin-sdk/bluebubbles-policy`, `plugin-sdk/mattermost`, `plugin-sdk/mattermost-policy`, `plugin-sdk/feishu-conversation`, `plugin-sdk/msteams`, `plugin-sdk/nextcloud-talk`, `plugin-sdk/nostr`, `plugin-sdk/tlon`, `plugin-sdk/twitch` | bundled channel互換性/helper seam |
|
||||
| 認証/Plugin固有helper | `plugin-sdk/github-copilot-login`, `plugin-sdk/github-copilot-token`, `plugin-sdk/diagnostics-otel`, `plugin-sdk/diffs`, `plugin-sdk/llm-task`, `plugin-sdk/thread-ownership`, `plugin-sdk/voice-call` | bundled feature/Plugin helper seam。`plugin-sdk/github-copilot-token`は現在`DEFAULT_COPILOT_API_BASE_URL`、`deriveCopilotApiBaseUrlFromToken`、`resolveCopilotApiToken`をexportします |
|
||||
| Browser | `plugin-sdk/browser-cdp`, `plugin-sdk/browser-config-runtime`, `plugin-sdk/browser-config-support`, `plugin-sdk/browser-control-auth`, `plugin-sdk/browser-node-runtime`, `plugin-sdk/browser-profiles`, `plugin-sdk/browser-security-runtime`, `plugin-sdk/browser-setup-tools`, `plugin-sdk/browser-support` | バンドルされたbrowser pluginサポートヘルパー(`browser-support` は互換性バレルのままです) |
|
||||
| Matrix | `plugin-sdk/matrix`, `plugin-sdk/matrix-helper`, `plugin-sdk/matrix-runtime-heavy`, `plugin-sdk/matrix-runtime-shared`, `plugin-sdk/matrix-runtime-surface`, `plugin-sdk/matrix-surface`, `plugin-sdk/matrix-thread-bindings` | バンドルされたMatrixヘルパー/ランタイムサーフェス |
|
||||
| Line | `plugin-sdk/line`, `plugin-sdk/line-core`, `plugin-sdk/line-runtime`, `plugin-sdk/line-surface` | バンドルされたLINEヘルパー/ランタイムサーフェス |
|
||||
| IRC | `plugin-sdk/irc`, `plugin-sdk/irc-surface` | バンドルされたIRCヘルパーサーフェス |
|
||||
| Channel固有ヘルパー | `plugin-sdk/googlechat`, `plugin-sdk/zalouser`, `plugin-sdk/bluebubbles`, `plugin-sdk/bluebubbles-policy`, `plugin-sdk/mattermost`, `plugin-sdk/mattermost-policy`, `plugin-sdk/feishu-conversation`, `plugin-sdk/msteams`, `plugin-sdk/nextcloud-talk`, `plugin-sdk/nostr`, `plugin-sdk/tlon`, `plugin-sdk/twitch` | バンドルされたchannel互換性/helperシーム |
|
||||
| 認証/plugin固有ヘルパー | `plugin-sdk/github-copilot-login`, `plugin-sdk/github-copilot-token`, `plugin-sdk/diagnostics-otel`, `plugin-sdk/diffs`, `plugin-sdk/llm-task`, `plugin-sdk/thread-ownership`, `plugin-sdk/voice-call` | バンドルされた機能/pluginヘルパーシーム。`plugin-sdk/github-copilot-token` は現在 `DEFAULT_COPILOT_API_BASE_URL`、`deriveCopilotApiBaseUrlFromToken`、`resolveCopilotApiToken` をエクスポートします |
|
||||
</Accordion>
|
||||
</AccordionGroup>
|
||||
|
||||
## 登録API
|
||||
|
||||
`register(api)`コールバックは、次のメソッドを持つ`OpenClawPluginApi`オブジェクトを受け取ります。
|
||||
`register(api)` コールバックは、次のメソッドを持つ `OpenClawPluginApi` オブジェクトを受け取ります。
|
||||
|
||||
### Capability登録
|
||||
### 機能登録
|
||||
|
||||
| Method | 登録するもの |
|
||||
| ------------------------------------------------ | ----------------------------------- |
|
||||
| `api.registerProvider(...)` | テキスト推論(LLM) |
|
||||
| `api.registerAgentHarness(...)` | 実験的な低レベルagent executor |
|
||||
| `api.registerCliBackend(...)` | ローカルCLI推論backend |
|
||||
| `api.registerChannel(...)` | メッセージングchannel |
|
||||
| `api.registerSpeechProvider(...)` | text-to-speech / STT synthesis |
|
||||
| `api.registerRealtimeTranscriptionProvider(...)` | ストリーミングリアルタイム文字起こし |
|
||||
| `api.registerRealtimeVoiceProvider(...)` | 双方向リアルタイム音声セッション |
|
||||
| `api.registerMediaUnderstandingProvider(...)` | 画像/音声/動画解析 |
|
||||
| `api.registerImageGenerationProvider(...)` | 画像生成 |
|
||||
| `api.registerMusicGenerationProvider(...)` | 音楽生成 |
|
||||
| `api.registerVideoGenerationProvider(...)` | 動画生成 |
|
||||
| `api.registerWebFetchProvider(...)` | Web fetch / scrape provider |
|
||||
| `api.registerWebSearchProvider(...)` | Web検索 |
|
||||
| メソッド | 登録するもの |
|
||||
| -------------------------------------------------- | ------------------------------------- |
|
||||
| `api.registerProvider(...)` | テキスト推論(LLM) |
|
||||
| `api.registerAgentHarness(...)` | 実験的な低レベルagent実行器 |
|
||||
| `api.registerCliBackend(...)` | ローカルCLI推論バックエンド |
|
||||
| `api.registerChannel(...)` | メッセージングchannel |
|
||||
| `api.registerSpeechProvider(...)` | テキスト読み上げ / STT合成 |
|
||||
| `api.registerRealtimeTranscriptionProvider(...)` | ストリーミングのリアルタイム文字起こし |
|
||||
| `api.registerRealtimeVoiceProvider(...)` | 双方向リアルタイム音声セッション |
|
||||
| `api.registerMediaUnderstandingProvider(...)` | 画像/音声/動画解析 |
|
||||
| `api.registerImageGenerationProvider(...)` | 画像生成 |
|
||||
| `api.registerMusicGenerationProvider(...)` | 音楽生成 |
|
||||
| `api.registerVideoGenerationProvider(...)` | 動画生成 |
|
||||
| `api.registerWebFetchProvider(...)` | Web fetch / スクレイプprovider |
|
||||
| `api.registerWebSearchProvider(...)` | Web検索 |
|
||||
|
||||
### Toolsとcommands
|
||||
### ツールとコマンド
|
||||
|
||||
| Method | 登録するもの |
|
||||
| ------------------------------- | ------------------------------------------- |
|
||||
| `api.registerTool(tool, opts?)` | agent tool(必須または`{ optional: true }`) |
|
||||
| `api.registerCommand(def)` | カスタムcommand(LLMをバイパス) |
|
||||
| メソッド | 登録するもの |
|
||||
| --------------------------------- | -------------------------------------------- |
|
||||
| `api.registerTool(tool, opts?)` | agentツール(必須、または `{ optional: true }`) |
|
||||
| `api.registerCommand(def)` | カスタムコマンド(LLMをバイパスする) |
|
||||
|
||||
### インフラストラクチャ
|
||||
|
||||
| Method | 登録するもの |
|
||||
| ---------------------------------------------- | ------------------------------------- |
|
||||
| `api.registerHook(events, handler, opts?)` | イベントhook |
|
||||
| `api.registerHttpRoute(params)` | Gateway HTTP endpoint |
|
||||
| `api.registerGatewayMethod(name, handler)` | Gateway RPC method |
|
||||
| `api.registerCli(registrar, opts?)` | CLIサブコマンド |
|
||||
| `api.registerService(service)` | バックグラウンドサービス |
|
||||
| `api.registerInteractiveHandler(registration)` | interactive handler |
|
||||
| `api.registerMemoryPromptSupplement(builder)` | 加算的なmemory隣接prompt section |
|
||||
| `api.registerMemoryCorpusSupplement(adapter)` | 加算的なmemory search/read corpus |
|
||||
| メソッド | 登録するもの |
|
||||
| ------------------------------------------------ | ------------------------------------- |
|
||||
| `api.registerHook(events, handler, opts?)` | イベントhook |
|
||||
| `api.registerHttpRoute(params)` | Gateway HTTPエンドポイント |
|
||||
| `api.registerGatewayMethod(name, handler)` | Gateway RPCメソッド |
|
||||
| `api.registerCli(registrar, opts?)` | CLIサブコマンド |
|
||||
| `api.registerService(service)` | バックグラウンドサービス |
|
||||
| `api.registerInteractiveHandler(registration)` | 対話型ハンドラー |
|
||||
| `api.registerMemoryPromptSupplement(builder)` | 追加的なメモリ隣接プロンプトセクション |
|
||||
| `api.registerMemoryCorpusSupplement(adapter)` | 追加的なメモリ検索/読み取りコーパス |
|
||||
|
||||
予約済みのcore admin namespace(`config.*`、`exec.approvals.*`、`wizard.*`、`update.*`)は、Pluginがより狭いGateway method scopeを割り当てようとしても、常に`operator.admin`のままです。Plugin所有のmethodには、Plugin固有のprefixを優先してください。
|
||||
予約済みのコア管理namespace(`config.*`、`exec.approvals.*`、`wizard.*`、
|
||||
`update.*`)は、pluginがより狭いGatewayメソッドスコープを割り当てようとしても、
|
||||
常に `operator.admin` のままです。plugin所有メソッドには、plugin固有のprefixを
|
||||
優先してください。
|
||||
|
||||
### CLI登録メタデータ
|
||||
|
||||
`api.registerCli(registrar, opts?)`は、2種類のトップレベルメタデータを受け取ります。
|
||||
`api.registerCli(registrar, opts?)` は、2種類のトップレベルメタデータを受け取ります:
|
||||
|
||||
- `commands`: registrarが所有する明示的なcommand root
|
||||
- `descriptors`: ルートCLI help、routing、およびlazy Plugin CLI登録に使われるparse-time command descriptor
|
||||
- `commands`: registrarが所有する明示的なコマンドルート
|
||||
- `descriptors`: ルートCLIヘルプ、ルーティング、および遅延plugin CLI登録に使われる、解析時コマンド記述子
|
||||
|
||||
Plugin commandを通常のルートCLIパスでlazy-loadedのままにしたい場合は、そのregistrarが公開するすべてのトップレベルcommand rootをカバーする`descriptors`を指定してください。
|
||||
通常のルートCLIパスでpluginコマンドを遅延ロードのままにしたい場合は、
|
||||
そのregistrarが公開するすべてのトップレベルコマンドルートをカバーする
|
||||
`descriptors` を指定してください。
|
||||
|
||||
```typescript
|
||||
api.registerCli(
|
||||
@ -347,7 +384,7 @@ api.registerCli(
|
||||
descriptors: [
|
||||
{
|
||||
name: "matrix",
|
||||
description: "Matrixアカウント、認証、デバイス、およびprofile stateを管理する",
|
||||
description: "Matrixアカウント、検証、デバイス、およびプロファイル状態を管理する",
|
||||
hasSubcommands: true,
|
||||
},
|
||||
],
|
||||
@ -355,113 +392,130 @@ api.registerCli(
|
||||
);
|
||||
```
|
||||
|
||||
`commands`単体を使うのは、lazyなルートCLI登録が不要な場合だけにしてください。そのeager互換パスは引き続きサポートされていますが、parse-time lazy loadingのためのdescriptor-backed placeholderはインストールされません。
|
||||
ルートCLIの遅延登録が不要な場合にのみ、`commands` を単独で使ってください。
|
||||
この即時互換パスは引き続きサポートされますが、解析時の遅延ロード用に
|
||||
descriptorベースのプレースホルダーはインストールされません。
|
||||
|
||||
### CLI backend登録
|
||||
### CLIバックエンド登録
|
||||
|
||||
`api.registerCliBackend(...)`を使うと、Pluginが`codex-cli`のようなローカルAI CLI backendのdefault configを所有できます。
|
||||
`api.registerCliBackend(...)` により、pluginは `codex-cli` のようなローカル
|
||||
AI CLIバックエンドのデフォルト設定を所有できます。
|
||||
|
||||
- backendの`id`は、`codex-cli/gpt-5`のようなmodel ref内のprovider prefixになります。
|
||||
- backendの`config`は、`agents.defaults.cliBackends.<id>`と同じ形を使います。
|
||||
- ユーザーconfigが引き続き優先されます。OpenClawは、CLIを実行する前に、Plugin defaultの上に`agents.defaults.cliBackends.<id>`をマージします。
|
||||
- マージ後にbackendが互換性書き換えを必要とする場合(たとえば古いflag形状の正規化など)は、`normalizeConfig`を使ってください。
|
||||
- バックエンドの `id` は、`codex-cli/gpt-5` のようなmodel refにおけるprovider prefixになります。
|
||||
- バックエンドの `config` は `agents.defaults.cliBackends.<id>` と同じ形を使います。
|
||||
- ユーザー設定が引き続き優先されます。OpenClawはCLIを実行する前に、
|
||||
pluginデフォルトの上に `agents.defaults.cliBackends.<id>` をマージします。
|
||||
- マージ後にバックエンドで互換性書き換えが必要な場合
|
||||
(たとえば古いフラグ形状の正規化など)は、`normalizeConfig` を使ってください。
|
||||
|
||||
### 排他的スロット
|
||||
|
||||
| Method | 登録するもの |
|
||||
| ------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| `api.registerContextEngine(id, factory)` | Context engine(一度に1つだけ有効)。`assemble()`コールバックは`availableTools`と`citationsMode`を受け取るため、engineはそれに合わせてprompt追加を調整できます。 |
|
||||
| `api.registerMemoryCapability(capability)` | 統一memory capability |
|
||||
| `api.registerMemoryPromptSection(builder)` | memory prompt section builder |
|
||||
| `api.registerMemoryFlushPlan(resolver)` | memory flush plan resolver |
|
||||
| `api.registerMemoryRuntime(runtime)` | memory runtime adapter |
|
||||
| メソッド | 登録するもの |
|
||||
| -------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
||||
| `api.registerContextEngine(id, factory)` | コンテキストエンジン(一度に1つだけアクティブ)。`assemble()` コールバックは `availableTools` と `citationsMode` を受け取り、エンジンがプロンプト追加内容を調整できるようにします。 |
|
||||
| `api.registerMemoryCapability(capability)` | 統一メモリ機能 |
|
||||
| `api.registerMemoryPromptSection(builder)` | メモリプロンプトセクションビルダー |
|
||||
| `api.registerMemoryFlushPlan(resolver)` | メモリフラッシュプランリゾルバ |
|
||||
| `api.registerMemoryRuntime(runtime)` | メモリランタイムアダプタ |
|
||||
|
||||
### Memory embedding adapter
|
||||
### メモリ埋め込みアダプタ
|
||||
|
||||
| Method | 登録するもの |
|
||||
| ---------------------------------------------- | -------------------------------------------- |
|
||||
| `api.registerMemoryEmbeddingProvider(adapter)` | アクティブなPlugin向けmemory embedding adapter |
|
||||
| メソッド | 登録するもの |
|
||||
| ------------------------------------------------ | ---------------------------------------------- |
|
||||
| `api.registerMemoryEmbeddingProvider(adapter)` | アクティブplugin向けメモリ埋め込みアダプタ |
|
||||
|
||||
- `registerMemoryCapability`は、推奨される排他的memory-Plugin APIです。
|
||||
- `registerMemoryCapability`は、companion Pluginが特定のmemory Pluginのprivate layoutに入り込む代わりに、`openclaw/plugin-sdk/memory-host-core`を通じてexportされたmemory artifactを利用できるよう、`publicArtifacts.listArtifacts(...)`を公開することもできます。
|
||||
- `registerMemoryPromptSection`、`registerMemoryFlushPlan`、および`registerMemoryRuntime`は、legacy互換の排他的memory-Plugin APIです。
|
||||
- `registerMemoryEmbeddingProvider`を使うと、アクティブmemory Pluginは1つ以上のembedding adapter id(たとえば`openai`、`gemini`、またはPlugin定義のカスタムid)を登録できます。
|
||||
- `agents.defaults.memorySearch.provider`や`agents.defaults.memorySearch.fallback`のようなユーザーconfigは、それらの登録済みadapter idに対して解決されます。
|
||||
- `registerMemoryCapability` は、推奨される排他的メモリplugin APIです。
|
||||
- `registerMemoryCapability` は `publicArtifacts.listArtifacts(...)` も公開でき、
|
||||
companion pluginはそれにより、特定のメモリpluginの非公開レイアウトに入り込まずに
|
||||
`openclaw/plugin-sdk/memory-host-core` 経由でエクスポートされたメモリアーティファクトを利用できます。
|
||||
- `registerMemoryPromptSection`、`registerMemoryFlushPlan`、および
|
||||
`registerMemoryRuntime` は、旧来互換の排他的メモリplugin APIです。
|
||||
- `registerMemoryEmbeddingProvider` により、アクティブなメモリpluginは1つ以上の
|
||||
埋め込みアダプタid(たとえば `openai`、`gemini`、またはplugin定義のカスタムid)を登録できます。
|
||||
- `agents.defaults.memorySearch.provider` や
|
||||
`agents.defaults.memorySearch.fallback` のようなユーザー設定は、
|
||||
それらの登録済みアダプタidに対して解決されます。
|
||||
|
||||
### イベントとライフサイクル
|
||||
|
||||
| Method | 動作内容 |
|
||||
| -------------------------------------------- | ----------------------------- |
|
||||
| `api.on(hookName, handler, opts?)` | 型付きライフサイクルhook |
|
||||
| `api.onConversationBindingResolved(handler)` | conversation bindingコールバック |
|
||||
| メソッド | 動作 |
|
||||
| ---------------------------------------------- | ---- |
|
||||
| `api.on(hookName, handler, opts?)` | 型付きライフサイクルhook |
|
||||
| `api.onConversationBindingResolved(handler)` | 会話bindingコールバック |
|
||||
|
||||
### Hook決定セマンティクス
|
||||
### Hook判定セマンティクス
|
||||
|
||||
- `before_tool_call`: `{ block: true }`を返すと終端です。いずれかのhandlerがこれを設定すると、より低い優先度のhandlerはスキップされます。
|
||||
- `before_tool_call`: `{ block: false }`を返しても決定なしとして扱われます(`block`を省略した場合と同じ)であり、オーバーライドではありません。
|
||||
- `before_install`: `{ block: true }`を返すと終端です。いずれかのhandlerがこれを設定すると、より低い優先度のhandlerはスキップされます。
|
||||
- `before_install`: `{ block: false }`を返しても決定なしとして扱われます(`block`を省略した場合と同じ)であり、オーバーライドではありません。
|
||||
- `reply_dispatch`: `{ handled: true, ... }`を返すと終端です。いずれかのhandlerがdispatchを引き受けると、より低い優先度のhandlerとデフォルトのmodel dispatch pathはスキップされます。
|
||||
- `message_sending`: `{ cancel: true }`を返すと終端です。いずれかのhandlerがこれを設定すると、より低い優先度のhandlerはスキップされます。
|
||||
- `message_sending`: `{ cancel: false }`を返しても決定なしとして扱われます(`cancel`を省略した場合と同じ)であり、オーバーライドではありません。
|
||||
- `before_tool_call`: `{ block: true }` を返すと終端になります。いずれかのハンドラーがこれを設定すると、それより低優先度のハンドラーはスキップされます。
|
||||
- `before_tool_call`: `{ block: false }` を返しても未決定として扱われます(`block` を省略した場合と同じ)ので、上書きにはなりません。
|
||||
- `before_install`: `{ block: true }` を返すと終端になります。いずれかのハンドラーがこれを設定すると、それより低優先度のハンドラーはスキップされます。
|
||||
- `before_install`: `{ block: false }` を返しても未決定として扱われます(`block` を省略した場合と同じ)ので、上書きにはなりません。
|
||||
- `reply_dispatch`: `{ handled: true, ... }` を返すと終端になります。いずれかのハンドラーがディスパッチを引き受けると、それより低優先度のハンドラーとデフォルトのモデルディスパッチ経路はスキップされます。
|
||||
- `message_sending`: `{ cancel: true }` を返すと終端になります。いずれかのハンドラーがこれを設定すると、それより低優先度のハンドラーはスキップされます。
|
||||
- `message_sending`: `{ cancel: false }` を返しても未決定として扱われます(`cancel` を省略した場合と同じ)ので、上書きにはなりません。
|
||||
|
||||
### APIオブジェクトのフィールド
|
||||
|
||||
| Field | Type | 説明 |
|
||||
| ------------------------ | ------------------------- | -------------------------------------------------------------------------------------------- |
|
||||
| `api.id` | `string` | Plugin id |
|
||||
| `api.name` | `string` | 表示名 |
|
||||
| `api.version` | `string?` | Pluginバージョン(任意) |
|
||||
| `api.description` | `string?` | Pluginの説明(任意) |
|
||||
| `api.source` | `string` | Pluginソースパス |
|
||||
| `api.rootDir` | `string?` | Pluginルートディレクトリ(任意) |
|
||||
| `api.config` | `OpenClawConfig` | 現在のconfigスナップショット(利用可能な場合は、アクティブなインメモリruntimeスナップショット) |
|
||||
| `api.pluginConfig` | `Record<string, unknown>` | `plugins.entries.<id>.config`からのPlugin固有config |
|
||||
| `api.runtime` | `PluginRuntime` | [ランタイムヘルパー](/ja-JP/plugins/sdk-runtime) |
|
||||
| `api.logger` | `PluginLogger` | スコープ付きlogger(`debug`、`info`、`warn`、`error`) |
|
||||
| `api.registrationMode` | `PluginRegistrationMode` | 現在のload mode。`"setup-runtime"`は、軽量なfull-entry前のstartup/setupウィンドウです |
|
||||
| `api.resolvePath(input)` | `(string) => string` | Pluginルートからの相対パスを解決 |
|
||||
| Field | Type | 説明 |
|
||||
| ------------------------ | ------------------------- | ------------------------------------------------------------------------------------------- |
|
||||
| `api.id` | `string` | Plugin id |
|
||||
| `api.name` | `string` | 表示名 |
|
||||
| `api.version` | `string?` | Pluginバージョン(任意) |
|
||||
| `api.description` | `string?` | Plugin説明(任意) |
|
||||
| `api.source` | `string` | Pluginソースパス |
|
||||
| `api.rootDir` | `string?` | Pluginルートディレクトリ(任意) |
|
||||
| `api.config` | `OpenClawConfig` | 現在の設定スナップショット(利用可能な場合は、アクティブなメモリ内ランタイムスナップショット) |
|
||||
| `api.pluginConfig` | `Record<string, unknown>` | `plugins.entries.<id>.config` にあるplugin固有設定 |
|
||||
| `api.runtime` | `PluginRuntime` | [ランタイムヘルパー](/ja-JP/plugins/sdk-runtime) |
|
||||
| `api.logger` | `PluginLogger` | スコープ付きlogger(`debug`、`info`、`warn`、`error`) |
|
||||
| `api.registrationMode` | `PluginRegistrationMode` | 現在のロードモード。`"setup-runtime"` は、完全なエントリ起動/セットアップ前の軽量ウィンドウです |
|
||||
| `api.resolvePath(input)` | `(string) => string` | pluginルート基準でパスを解決する |
|
||||
|
||||
## 内部モジュール規約
|
||||
|
||||
Plugin内では、内部インポートにローカルbarrelファイルを使用してください。
|
||||
plugin内では、内部インポートにローカルバレルファイルを使ってください:
|
||||
|
||||
```
|
||||
my-plugin/
|
||||
api.ts # 外部利用者向けの公開export
|
||||
runtime-api.ts # 内部専用runtime export
|
||||
index.ts # Plugin entry point
|
||||
setup-entry.ts # 軽量なsetup専用entry(任意)
|
||||
api.ts # 外部利用者向けの公開エクスポート
|
||||
runtime-api.ts # 内部専用ランタイムエクスポート
|
||||
index.ts # Pluginエントリポイント
|
||||
setup-entry.ts # 軽量なセットアップ専用エントリ(任意)
|
||||
```
|
||||
|
||||
<Warning>
|
||||
本番コードから`openclaw/plugin-sdk/<your-plugin>`経由で自分自身のPluginを
|
||||
インポートしてはいけません。内部インポートは`./api.ts`または
|
||||
`./runtime-api.ts`を経由させてください。SDKパスは外部コントラクト専用です。
|
||||
本番コード内で、自分自身のpluginを `openclaw/plugin-sdk/<your-plugin>`
|
||||
経由でインポートしてはいけません。内部インポートは `./api.ts` または
|
||||
`./runtime-api.ts` を通してください。SDKパスは外部契約専用です。
|
||||
</Warning>
|
||||
|
||||
facade読み込みされたbundled Pluginの公開surface(`api.ts`、`runtime-api.ts`、`index.ts`、`setup-entry.ts`、および同様の公開entryファイル)は、OpenClawがすでに実行中であれば、現在はアクティブなruntime configスナップショットを優先します。まだruntimeスナップショットが存在しない場合は、ディスク上で解決されたconfigファイルにフォールバックします。
|
||||
ファサードロードされるバンドルplugin公開サーフェス(`api.ts`、`runtime-api.ts`、
|
||||
`index.ts`、`setup-entry.ts`、および同様の公開エントリファイル)は、OpenClawが
|
||||
すでに実行中であれば、現在のランタイム設定スナップショットを優先するように
|
||||
なりました。まだランタイムスナップショットが存在しない場合は、ディスク上の
|
||||
解決済み設定ファイルにフォールバックします。
|
||||
|
||||
Provider Pluginは、helperが意図的にprovider固有で、まだ汎用SDKサブパスに属していない場合、狭いPluginローカルのcontract barrelを公開することもできます。現在のbundled例として、Anthropic providerは、Anthropic beta-headerや`service_tier`ロジックを汎用`plugin-sdk/*`コントラクトに昇格させる代わりに、Claude stream helperを自身の公開`api.ts` / `contract-api.ts` seamに保持しています。
|
||||
Provider pluginは、helperが意図的にprovider固有で、まだ汎用SDKサブパスに属さない場合、狭いpluginローカル契約バレルを公開することもできます。現在のバンドル例として、Anthropic providerはClaudeストリームヘルパーを、自身の公開 `api.ts` / `contract-api.ts` シームに保持しており、Anthropicのベータヘッダーや `service_tier` ロジックを汎用の `plugin-sdk/*` 契約へ昇格させていません。
|
||||
|
||||
その他の現在のbundled例:
|
||||
現在のその他のバンドル例:
|
||||
|
||||
- `@openclaw/openai-provider`: `api.ts`はprovider builder、default-model helper、およびrealtime provider builderをexportします
|
||||
- `@openclaw/openrouter-provider`: `api.ts`はprovider builderに加えて、オンボーディング/config helperをexportします
|
||||
- `@openclaw/openai-provider`: `api.ts` はproviderビルダー、
|
||||
デフォルトモデルヘルパー、およびリアルタイムproviderビルダーをエクスポートします
|
||||
- `@openclaw/openrouter-provider`: `api.ts` はproviderビルダーに加えて
|
||||
オンボーディング/設定ヘルパーをエクスポートします
|
||||
|
||||
<Warning>
|
||||
extensionの本番コードでも、`openclaw/plugin-sdk/<other-plugin>`の
|
||||
インポートは避けるべきです。helperが本当に共有されるべきなら、
|
||||
2つのPluginを結合させるのではなく、`openclaw/plugin-sdk/speech`、
|
||||
`.../provider-model-shared`、または別のcapability指向surfaceのような
|
||||
中立的なSDKサブパスに昇格させてください。
|
||||
extensionの本番コードでも、`openclaw/plugin-sdk/<other-plugin>` の
|
||||
インポートは避けるべきです。helperが本当に共有されるべきものなら、2つのpluginを
|
||||
結合させるのではなく、`openclaw/plugin-sdk/speech`、
|
||||
`.../provider-model-shared`、または別の機能指向サーフェスのような
|
||||
中立的なSDKサブパスへ昇格させてください。
|
||||
</Warning>
|
||||
|
||||
## 関連
|
||||
|
||||
- [Entry Points](/ja-JP/plugins/sdk-entrypoints) — `definePluginEntry`および`defineChannelPluginEntry`のオプション
|
||||
- [ランタイムヘルパー](/ja-JP/plugins/sdk-runtime) — 完全な`api.runtime`名前空間リファレンス
|
||||
- [Setup and Config](/ja-JP/plugins/sdk-setup) — パッケージング、manifest、config schema
|
||||
- [Entry Points](/ja-JP/plugins/sdk-entrypoints) — `definePluginEntry` と `defineChannelPluginEntry` のオプション
|
||||
- [ランタイムヘルパー](/ja-JP/plugins/sdk-runtime) — 完全な `api.runtime` namespaceリファレンス
|
||||
- [セットアップと設定](/ja-JP/plugins/sdk-setup) — パッケージング、manifest、設定スキーマ
|
||||
- [Testing](/ja-JP/plugins/sdk-testing) — テストユーティリティとlintルール
|
||||
- [SDK Migration](/ja-JP/plugins/sdk-migration) — 非推奨surfaceからの移行
|
||||
- [Plugin Internals](/ja-JP/plugins/architecture) — 詳細なアーキテクチャとcapability model
|
||||
- [SDK Migration](/ja-JP/plugins/sdk-migration) — 非推奨サーフェスからの移行
|
||||
- [Plugin Internals](/ja-JP/plugins/architecture) — 詳細なアーキテクチャと機能モデル
|
||||
|
||||
@ -1,137 +1,137 @@
|
||||
---
|
||||
x-i18n:
|
||||
generated_at: "2026-04-08T04:42:35Z"
|
||||
generated_at: "2026-04-18T04:40:46Z"
|
||||
model: gpt-5.4
|
||||
provider: openai
|
||||
source_hash: 4a9066b2a939c5a9ba69141d75405f0e8097997b523164340e2f0e9a0d5060dd
|
||||
source_hash: dbb2c70c82da7f6f12d90e25666635ff4147c52e8a94135e902d1de4f5cbccca
|
||||
source_path: refactor/qa.md
|
||||
workflow: 15
|
||||
---
|
||||
|
||||
# QA リファクタリング
|
||||
# QAリファクタリング
|
||||
|
||||
ステータス: 基盤となる移行は着地済み。
|
||||
ステータス: 基盤となる移行は完了しました。
|
||||
|
||||
## 目標
|
||||
|
||||
OpenClaw QA を分割定義モデルから単一の信頼できる情報源へ移行する:
|
||||
OpenClaw QAを分割定義モデルから単一の信頼できる情報源へ移行します:
|
||||
|
||||
- シナリオメタデータ
|
||||
- モデルに送信されるプロンプト
|
||||
- セットアップとティアダウン
|
||||
- セットアップとクリーンアップ
|
||||
- ハーネスロジック
|
||||
- アサーションと成功条件
|
||||
- アーティファクトとレポートのヒント
|
||||
- アーティファクトとレポートヒント
|
||||
|
||||
望ましい最終状態は、TypeScript にほとんどの動作をハードコードするのではなく、強力なシナリオ定義ファイルを読み込む汎用 QA ハーネスです。
|
||||
目指す最終状態は、TypeScript内にほとんどの挙動をハードコードするのではなく、強力なシナリオ定義ファイルを読み込む汎用QAハーネスです。
|
||||
|
||||
## 現在の状態
|
||||
|
||||
現在の主要な信頼できる情報源は `qa/scenarios/index.md` と、`qa/scenarios/*.md` 配下のシナリオごとの 1 ファイルにあります。
|
||||
現在の主な信頼できる情報源は `qa/scenarios/index.md` と、各シナリオごとの `qa/scenarios/<theme>/*.md` にあります。
|
||||
|
||||
実装済み:
|
||||
|
||||
- `qa/scenarios/index.md`
|
||||
- 正式な QA パックメタデータ
|
||||
- オペレーター ID
|
||||
- 正式なQAパックメタデータ
|
||||
- オペレーターID
|
||||
- キックオフミッション
|
||||
- `qa/scenarios/*.md`
|
||||
- シナリオごとに 1 つの markdown ファイル
|
||||
- `qa/scenarios/<theme>/*.md`
|
||||
- シナリオごとに1つのMarkdownファイル
|
||||
- シナリオメタデータ
|
||||
- ハンドラーバインディング
|
||||
- シナリオ固有の実行設定
|
||||
- `extensions/qa-lab/src/scenario-catalog.ts`
|
||||
- markdown パックパーサー + zod バリデーション
|
||||
- Markdownパックパーサー + zod検証
|
||||
- `extensions/qa-lab/src/qa-agent-bootstrap.ts`
|
||||
- markdown パックからのプラン描画
|
||||
- Markdownパックからのプランレンダリング
|
||||
- `extensions/qa-lab/src/qa-agent-workspace.ts`
|
||||
- 互換性ファイル群に加えて `QA_SCENARIOS.md` を生成して配置
|
||||
- 生成された互換ファイルと `QA_SCENARIOS.md` をシード
|
||||
- `extensions/qa-lab/src/suite.ts`
|
||||
- markdown 定義のハンドラーバインディングを通じて実行可能なシナリオを選択
|
||||
- QA バスプロトコル + UI
|
||||
- 画像/動画/音声/ファイル描画用の汎用インライン添付ファイル
|
||||
- Markdownで定義されたハンドラーバインディングを通じて実行可能なシナリオを選択
|
||||
- QAバスプロトコル + UI
|
||||
- 画像/動画/音声/ファイル表示用の汎用インライン添付
|
||||
|
||||
分割されたまま残っている面:
|
||||
依然として分割されたままの面:
|
||||
|
||||
- `extensions/qa-lab/src/suite.ts`
|
||||
- 依然として実行可能なカスタムハンドラーロジックの大半を保持
|
||||
- 依然として実行可能なカスタムハンドラーロジックの大半を管理
|
||||
- `extensions/qa-lab/src/report.ts`
|
||||
- 依然として実行時出力からレポート構造を導出
|
||||
- 依然としてレポート構造を実行時出力から導出
|
||||
|
||||
つまり、信頼できる情報源の分割は修正されたものの、実行はまだ完全な宣言型ではなく、主にハンドラーバックのままです。
|
||||
つまり、信頼できる情報源の分割自体は解消されましたが、実行はまだ完全宣言的ではなく、主にハンドラーバックです。
|
||||
|
||||
## 実際のシナリオ面はどう見えるか
|
||||
## 実際のシナリオ面はどのようなものか
|
||||
|
||||
現在のスイートを読むと、いくつかの異なるシナリオクラスが見えてきます。
|
||||
現在のsuiteを読むと、いくつかの異なるシナリオクラスがあります。
|
||||
|
||||
### シンプルなインタラクション
|
||||
### シンプルなやり取り
|
||||
|
||||
- チャネルベースライン
|
||||
- DM ベースライン
|
||||
- スレッド化されたフォローアップ
|
||||
- DMベースライン
|
||||
- スレッドでのフォローアップ
|
||||
- モデル切り替え
|
||||
- 承認の継続実行
|
||||
- 承認フォロースルー
|
||||
- リアクション/編集/削除
|
||||
|
||||
### 設定とランタイムの変更
|
||||
|
||||
- 設定パッチによる Skill 無効化
|
||||
- 設定適用後の再起動ウェイクアップ
|
||||
- 再起動時の設定機能切り替え
|
||||
- ランタイムインベントリドリフトチェック
|
||||
- config patch skill disable
|
||||
- config apply restart wake-up
|
||||
- config restart capability flip
|
||||
- runtime inventory drift check
|
||||
|
||||
### ファイルシステムとリポジトリアサーション
|
||||
|
||||
- ソース/ドキュメント検出レポート
|
||||
- Lobster Invaders をビルド
|
||||
- 生成画像アーティファクトの検索
|
||||
- source/docs discovery report
|
||||
- build Lobster Invaders
|
||||
- generated image artifact lookup
|
||||
|
||||
### メモリオーケストレーション
|
||||
|
||||
- メモリリコール
|
||||
- チャネルコンテキストでのメモリツール
|
||||
- メモリ失敗フォールバック
|
||||
- セッションメモリランキング
|
||||
- スレッドメモリ分離
|
||||
- メモリ dreaming sweep
|
||||
- memory recall
|
||||
- channel context内のmemory tools
|
||||
- memory failure fallback
|
||||
- session memory ranking
|
||||
- thread memory isolation
|
||||
- memory dreaming sweep
|
||||
|
||||
### ツールと plugin 連携
|
||||
### ツールとPlugin統合
|
||||
|
||||
- MCP plugin-tools 呼び出し
|
||||
- Skill の可視性
|
||||
- Skill のホットインストール
|
||||
- ネイティブ画像生成
|
||||
- 画像ラウンドトリップ
|
||||
- 添付ファイルからの画像理解
|
||||
- MCP plugin-tools call
|
||||
- skill visibility
|
||||
- skill hot install
|
||||
- native image generation
|
||||
- image roundtrip
|
||||
- 添付からの画像理解
|
||||
|
||||
### マルチターンとマルチアクター
|
||||
|
||||
- サブエージェントのハンドオフ
|
||||
- サブエージェントのファンアウト統合
|
||||
- 再起動リカバリ系フロー
|
||||
- subagent handoff
|
||||
- subagent fanout synthesis
|
||||
- restart recovery style flows
|
||||
|
||||
これらのカテゴリは DSL 要件を左右するため重要です。プロンプト + 期待されるテキストの単純な一覧だけでは不十分です。
|
||||
これらのカテゴリはDSL要件を左右するため重要です。プロンプト + 期待テキストの単純な一覧だけでは不十分です。
|
||||
|
||||
## 方向性
|
||||
## 方針
|
||||
|
||||
### 単一の信頼できる情報源
|
||||
|
||||
`qa/scenarios/index.md` と `qa/scenarios/*.md` を、作成時の信頼できる情報源として使います。
|
||||
`qa/scenarios/index.md` と `qa/scenarios/<theme>/*.md` を、作成元の信頼できる情報源として使用します。
|
||||
|
||||
パックは次を維持するべきです:
|
||||
このパックは次を維持する必要があります:
|
||||
|
||||
- レビューで人が読みやすい
|
||||
- 機械解析可能
|
||||
- 次を駆動できるだけの豊かさを持つ:
|
||||
- スイート実行
|
||||
- QA ワークスペースのブートストラップ
|
||||
- QA Lab UI メタデータ
|
||||
- ドキュメント/検出プロンプト
|
||||
- レビュー時に人間が読みやすいこと
|
||||
- 機械で解析できること
|
||||
- 次を駆動できるだけの表現力があること:
|
||||
- suite実行
|
||||
- QAワークスペースのブートストラップ
|
||||
- QA Lab UIメタデータ
|
||||
- docs/discoveryプロンプト
|
||||
- レポート生成
|
||||
|
||||
### 推奨する記述フォーマット
|
||||
### 推奨する記述形式
|
||||
|
||||
トップレベルのフォーマットとして markdown を使い、その中に構造化 YAML を入れます。
|
||||
トップレベル形式としてMarkdownを使用し、その中に構造化YAMLを埋め込みます。
|
||||
|
||||
推奨形状:
|
||||
|
||||
@ -144,11 +144,11 @@ OpenClaw QA を分割定義モデルから単一の信頼できる情報源へ
|
||||
- code refs
|
||||
- model/provider overrides
|
||||
- prerequisites
|
||||
- 説明文セクション
|
||||
- prose sections
|
||||
- objective
|
||||
- notes
|
||||
- debugging hints
|
||||
- フェンス付き YAML ブロック
|
||||
- fenced YAML blocks
|
||||
- setup
|
||||
- steps
|
||||
- assertions
|
||||
@ -156,13 +156,13 @@ OpenClaw QA を分割定義モデルから単一の信頼できる情報源へ
|
||||
|
||||
これにより次が得られます:
|
||||
|
||||
- 巨大な JSON よりも優れた PR 可読性
|
||||
- 純粋な YAML よりも豊かなコンテキスト
|
||||
- 厳密なパースと zod バリデーション
|
||||
- 巨大なJSONより優れたPR可読性
|
||||
- 純粋なYAMLより豊かな文脈
|
||||
- 厳密な解析とzod検証
|
||||
|
||||
生の JSON は、中間的な生成形式としてのみ許容されます。
|
||||
生のJSONは、中間生成形式としてのみ許容されます。
|
||||
|
||||
## 提案されるシナリオファイル形状
|
||||
## 提案するシナリオファイル形状
|
||||
|
||||
例:
|
||||
|
||||
@ -187,7 +187,7 @@ codeRefs:
|
||||
|
||||
# Objective
|
||||
|
||||
生成されたメディアがフォローアップターンで再添付されることを確認する。
|
||||
Verify generated media is reattached on the follow-up turn.
|
||||
|
||||
# Setup
|
||||
|
||||
@ -208,7 +208,7 @@ codeRefs:
|
||||
- action: agent.send
|
||||
session: agent:qa:image-roundtrip
|
||||
message: |
|
||||
画像生成チェック: QA 用の灯台画像を生成し、それを 1 文の短い文で要約してください。
|
||||
Image generation check: generate a QA lighthouse image and summarize it in one short sentence.
|
||||
- action: artifact.capture
|
||||
kind: generated-image
|
||||
promptSnippet: Image generation check
|
||||
@ -216,7 +216,7 @@ codeRefs:
|
||||
- action: agent.send
|
||||
session: agent:qa:image-roundtrip
|
||||
message: |
|
||||
ラウンドトリップ画像検査チェック: 生成された灯台の添付画像を 1 文の短い文で説明してください。
|
||||
Roundtrip image inspection check: describe the generated lighthouse attachment in one short sentence.
|
||||
attachments:
|
||||
- fromArtifact: lighthouseImage
|
||||
```
|
||||
@ -235,9 +235,9 @@ codeRefs:
|
||||
```
|
||||
````
|
||||
|
||||
## DSL がカバーすべきランナー機能
|
||||
## DSLがカバーすべきランナー機能
|
||||
|
||||
現在のスイートに基づくと、汎用ランナーにはプロンプト実行以上のものが必要です。
|
||||
現在のsuiteに基づくと、汎用ランナーにはプロンプト実行以上の機能が必要です。
|
||||
|
||||
### 環境およびセットアップアクション
|
||||
|
||||
@ -273,7 +273,7 @@ codeRefs:
|
||||
- `artifact.captureGeneratedImage`
|
||||
- `artifact.capturePath`
|
||||
|
||||
### メモリおよび cron アクション
|
||||
### メモリおよびCronアクション
|
||||
|
||||
- `memory.indexForce`
|
||||
- `memory.searchCli`
|
||||
@ -283,7 +283,7 @@ codeRefs:
|
||||
- `cron.waitCompletion`
|
||||
- `sessionTranscript.write`
|
||||
|
||||
### MCP アクション
|
||||
### MCPアクション
|
||||
|
||||
- `mcp.callTool`
|
||||
|
||||
@ -305,135 +305,135 @@ codeRefs:
|
||||
|
||||
## 変数とアーティファクト参照
|
||||
|
||||
DSL は、保存された出力と後続参照をサポートする必要があります。
|
||||
DSLは、保存済み出力と後続参照をサポートする必要があります。
|
||||
|
||||
現在のスイートの例:
|
||||
現在のsuiteでの例:
|
||||
|
||||
- スレッドを作成し、その後 `threadId` を再利用する
|
||||
- セッションを作成し、その後 `sessionKey` を再利用する
|
||||
- 画像を生成し、次のターンでそのファイルを添付する
|
||||
- ウェイクマーカー文字列を生成し、それが後で現れることをアサートする
|
||||
- wake marker文字列を生成し、それが後で現れることを検証する
|
||||
|
||||
必要な機能:
|
||||
|
||||
- `saveAs`
|
||||
- `${vars.name}`
|
||||
- `${artifacts.name}`
|
||||
- パス、セッションキー、スレッド ID、マーカー、ツール出力の型付き参照
|
||||
- path、session key、thread id、marker、tool outputに対する型付き参照
|
||||
|
||||
変数サポートがなければ、ハーネスはシナリオロジックを TypeScript に逆流させ続けることになります。
|
||||
変数サポートがなければ、ハーネスはシナリオロジックをTypeScriptへ漏らし続けることになります。
|
||||
|
||||
## エスケープハッチとして残すべきもの
|
||||
|
||||
フェーズ 1 で完全に純粋な宣言型ランナーを実現するのは現実的ではありません。
|
||||
フェーズ1で完全に純粋な宣言的ランナーを実現するのは現実的ではありません。
|
||||
|
||||
一部のシナリオは本質的にオーケストレーション負荷が高いです:
|
||||
いくつかのシナリオは本質的にオーケストレーションが重いものです:
|
||||
|
||||
- memory dreaming sweep
|
||||
- 設定適用後の再起動ウェイクアップ
|
||||
- 再起動時の設定機能切り替え
|
||||
- タイムスタンプ/パスによる生成画像アーティファクト解決
|
||||
- discovery-report 評価
|
||||
- config apply restart wake-up
|
||||
- config restart capability flip
|
||||
- timestamp/pathによるgenerated image artifact resolution
|
||||
- discovery-report evaluation
|
||||
|
||||
これらは、当面は明示的なカスタムハンドラーを使うべきです。
|
||||
|
||||
推奨ルール:
|
||||
|
||||
- 85-90% は宣言型
|
||||
- 85〜90%は宣言的
|
||||
- 残りの難しい部分には明示的な `customHandler` ステップ
|
||||
- 名前付きで文書化されたカスタムハンドラーのみ
|
||||
- シナリオファイル内に匿名のインラインコードは禁止
|
||||
- カスタムハンドラーは名前付きかつ文書化されていること
|
||||
- シナリオファイル内に匿名インラインコードを置かないこと
|
||||
|
||||
これにより、進捗を維持しつつ汎用エンジンをクリーンに保てます。
|
||||
これにより、進捗を維持しながら汎用エンジンをクリーンに保てます。
|
||||
|
||||
## アーキテクチャ変更
|
||||
|
||||
### 現在
|
||||
|
||||
シナリオ markdown はすでに次の信頼できる情報源です:
|
||||
シナリオMarkdownは、すでに次に対する信頼できる情報源です:
|
||||
|
||||
- スイート実行
|
||||
- suite実行
|
||||
- ワークスペースブートストラップファイル
|
||||
- QA Lab UI シナリオカタログ
|
||||
- QA Lab UIシナリオカタログ
|
||||
- レポートメタデータ
|
||||
- discovery prompts
|
||||
- discoveryプロンプト
|
||||
|
||||
生成される互換性要素:
|
||||
生成される互換要素:
|
||||
|
||||
- シードされたワークスペースには依然として `QA_KICKOFF_TASK.md` が含まれる
|
||||
- シードされたワークスペースには依然として `QA_SCENARIO_PLAN.md` が含まれる
|
||||
- シードされたワークスペースには теперь `QA_SCENARIOS.md` も含まれる
|
||||
- シードされたワークスペースには引き続き `QA_KICKOFF_TASK.md` が含まれる
|
||||
- シードされたワークスペースには引き続き `QA_SCENARIO_PLAN.md` が含まれる
|
||||
- シードされたワークスペースには現在 `QA_SCENARIOS.md` も含まれる
|
||||
|
||||
## リファクタリング計画
|
||||
|
||||
### フェーズ 1: ローダーとスキーマ
|
||||
### Phase 1: loaderとschema
|
||||
|
||||
完了。
|
||||
|
||||
- `qa/scenarios/index.md` を追加
|
||||
- シナリオを `qa/scenarios/*.md` に分割
|
||||
- 名前付き markdown YAML パック内容用のパーサーを追加
|
||||
- zod でバリデーション
|
||||
- パース済みパックを使うようコンシューマーを切り替え
|
||||
- シナリオを `qa/scenarios/<theme>/*.md` に分割
|
||||
- 名前付きMarkdown YAMLパック内容用のパーサーを追加
|
||||
- zodで検証
|
||||
- 利用側を解析済みパックへ切り替え
|
||||
- リポジトリレベルの `qa/seed-scenarios.json` と `qa/QA_KICKOFF_TASK.md` を削除
|
||||
|
||||
### フェーズ 2: 汎用エンジン
|
||||
### Phase 2: 汎用エンジン
|
||||
|
||||
- `extensions/qa-lab/src/suite.ts` を次に分割:
|
||||
- `extensions/qa-lab/src/suite.ts` を以下に分割:
|
||||
- loader
|
||||
- engine
|
||||
- action registry
|
||||
- assertion registry
|
||||
- custom handlers
|
||||
- 既存のヘルパー関数はエンジン操作として維持
|
||||
- 既存のヘルパー関数をエンジン操作として維持
|
||||
|
||||
成果物:
|
||||
|
||||
- エンジンがシンプルな宣言型シナリオを実行する
|
||||
- エンジンがシンプルな宣言的シナリオを実行する
|
||||
|
||||
まずは主に prompt + wait + assert で構成されるシナリオから始める:
|
||||
まずは、主に prompt + wait + assert で構成されるシナリオから開始します:
|
||||
|
||||
- スレッド化されたフォローアップ
|
||||
- 添付ファイルからの画像理解
|
||||
- Skill の可視性と呼び出し
|
||||
- チャネルベースライン
|
||||
- threaded follow-up
|
||||
- image understanding from attachment
|
||||
- skill visibility and invocation
|
||||
- channel baseline
|
||||
|
||||
成果物:
|
||||
|
||||
- 汎用エンジン経由で出荷される、最初の実際の markdown 定義シナリオ
|
||||
- 最初の本格的なMarkdown定義シナリオが汎用エンジン経由で提供される
|
||||
|
||||
### フェーズ 4: 中程度のシナリオを移行
|
||||
### Phase 4: 中程度のシナリオを移行
|
||||
|
||||
- 画像生成ラウンドトリップ
|
||||
- チャネルコンテキストでのメモリツール
|
||||
- セッションメモリランキング
|
||||
- サブエージェントのハンドオフ
|
||||
- サブエージェントのファンアウト統合
|
||||
- image generation roundtrip
|
||||
- memory tools in channel context
|
||||
- session memory ranking
|
||||
- subagent handoff
|
||||
- subagent fanout synthesis
|
||||
|
||||
成果物:
|
||||
|
||||
- 変数、アーティファクト、ツールアサーション、request-log アサーションが実証される
|
||||
- variables、artifacts、tool assertions、request-log assertions が実証される
|
||||
|
||||
### フェーズ 5: 難しいシナリオはカスタムハンドラーに残す
|
||||
### Phase 5: 難しいシナリオはカスタムハンドラーに残す
|
||||
|
||||
- memory dreaming sweep
|
||||
- 設定適用後の再起動ウェイクアップ
|
||||
- 再起動時の設定機能切り替え
|
||||
- ランタイムインベントリドリフト
|
||||
- config apply restart wake-up
|
||||
- config restart capability flip
|
||||
- runtime inventory drift
|
||||
|
||||
成果物:
|
||||
|
||||
- 同じ記述フォーマットだが、必要な箇所に明示的な custom-step ブロックを使う
|
||||
- 記述形式は同じだが、必要な箇所に明示的なcustom-stepブロックを使う
|
||||
|
||||
### フェーズ 6: ハードコードされたシナリオマップを削除
|
||||
### Phase 6: ハードコードされたシナリオマップを削除
|
||||
|
||||
パックのカバレッジが十分になったら:
|
||||
|
||||
- `extensions/qa-lab/src/suite.ts` からシナリオ固有の TypeScript 分岐の大半を削除
|
||||
- `extensions/qa-lab/src/suite.ts` からシナリオ固有のTypeScript分岐の大半を削除する
|
||||
|
||||
## Fake Slack / リッチメディア対応
|
||||
## Fake Slack / リッチメディアサポート
|
||||
|
||||
現在の QA バスは text-first です。
|
||||
現在のQAバスはtext-firstです。
|
||||
|
||||
関連ファイル:
|
||||
|
||||
@ -443,17 +443,17 @@ DSL は、保存された出力と後続参照をサポートする必要があ
|
||||
- `extensions/qa-lab/src/bus-server.ts`
|
||||
- `extensions/qa-lab/web/src/ui-render.ts`
|
||||
|
||||
今日の QA バスが対応しているもの:
|
||||
現在QAバスがサポートしているもの:
|
||||
|
||||
- テキスト
|
||||
- リアクション
|
||||
- スレッド
|
||||
|
||||
まだインラインメディア添付ファイルはモデル化されていません。
|
||||
まだインラインメディア添付はモデル化されていません。
|
||||
|
||||
### 必要なトランスポート契約
|
||||
|
||||
汎用的な QA バス添付ファイルモデルを追加します:
|
||||
汎用QAバス添付モデルを追加します:
|
||||
|
||||
```ts
|
||||
type QaBusAttachment = {
|
||||
@ -472,67 +472,67 @@ type QaBusAttachment = {
|
||||
};
|
||||
```
|
||||
|
||||
そのうえで `attachments?: QaBusAttachment[]` を次に追加します:
|
||||
次に `attachments?: QaBusAttachment[]` を以下へ追加します:
|
||||
|
||||
- `QaBusMessage`
|
||||
- `QaBusInboundMessageInput`
|
||||
- `QaBusOutboundMessageInput`
|
||||
|
||||
### なぜまず汎用化なのか
|
||||
### なぜ先に汎用化するのか
|
||||
|
||||
Slack 専用のメディアモデルを作らないでください。
|
||||
Slack専用のメディアモデルは作らないでください。
|
||||
|
||||
代わりに:
|
||||
|
||||
- 1 つの汎用 QA トランスポートモデル
|
||||
- 1つの汎用QAトランスポートモデル
|
||||
- その上に複数のレンダラー
|
||||
- 現在の QA Lab チャット
|
||||
- 将来の fake Slack web
|
||||
- その他の fake transport views
|
||||
- 現在のQA Lab chat
|
||||
- 将来のfake Slack web
|
||||
- その他のfake transportビュー
|
||||
|
||||
これによりロジックの重複を防ぎ、メディアシナリオをトランスポート非依存に保てます。
|
||||
|
||||
### 必要な UI 作業
|
||||
### 必要なUI作業
|
||||
|
||||
QA UI を更新して次を描画します:
|
||||
QA UIを更新して以下をレンダリングします:
|
||||
|
||||
- インライン画像プレビュー
|
||||
- インライン音声プレーヤー
|
||||
- インライン動画プレーヤー
|
||||
- ファイル添付チップ
|
||||
|
||||
現在の UI はすでにスレッドとリアクションを描画できるため、添付ファイル描画は同じメッセージカードモデルに積み重ねられるはずです。
|
||||
現在のUIはすでにスレッドとリアクションをレンダリングできるため、添付レンダリングは同じメッセージカードモデルの上に重ねられるはずです。
|
||||
|
||||
### メディアトランスポートによって可能になるシナリオ作業
|
||||
### メディアトランスポートで可能になるシナリオ作業
|
||||
|
||||
添付ファイルが QA バスを流れるようになれば、より豊かな fake-chat シナリオを追加できます:
|
||||
添付がQAバスを流れるようになれば、より豊かなfake-chatシナリオを追加できます:
|
||||
|
||||
- fake Slack でのインライン画像返信
|
||||
- 音声添付ファイルの理解
|
||||
- 動画添付ファイルの理解
|
||||
- 混在添付ファイルの順序
|
||||
- fake Slackでのインライン画像返信
|
||||
- 音声添付の理解
|
||||
- 動画添付の理解
|
||||
- 混在添付の順序
|
||||
- メディアを保持したスレッド返信
|
||||
|
||||
## 推奨事項
|
||||
|
||||
次の実装チャンクは、次にするべきです:
|
||||
次に実装すべきまとまりは以下です:
|
||||
|
||||
1. markdown シナリオローダー + zod スキーマを追加
|
||||
2. markdown から現在のカタログを生成
|
||||
1. Markdownシナリオローダー + zod schemaを追加
|
||||
2. 現在のカタログをMarkdownから生成
|
||||
3. まずいくつかのシンプルなシナリオを移行
|
||||
4. 汎用 QA バス添付ファイル対応を追加
|
||||
5. QA UI でインライン画像を描画
|
||||
4. 汎用QAバス添付サポートを追加
|
||||
5. QA UIでインライン画像をレンダリング
|
||||
6. その後、音声と動画へ拡張
|
||||
|
||||
これは、両方の目標を実証する最小の道筋です:
|
||||
これは次の2つの目標を実証する最小の道筋です:
|
||||
|
||||
- 汎用的な markdown 定義 QA
|
||||
- より豊かな fake messaging surfaces
|
||||
- 汎用のMarkdown定義QA
|
||||
- より豊かなfake messaging surfaces
|
||||
|
||||
## 未解決の質問
|
||||
|
||||
- シナリオファイルで、変数補間付きの埋め込み markdown プロンプトテンプレートを許可するかどうか
|
||||
- setup/cleanup を名前付きセクションにするか、単なる順序付きアクションリストにするか
|
||||
- アーティファクト参照をスキーマ上で強く型付けするか、文字列ベースにするか
|
||||
- カスタムハンドラーを 1 つのレジストリに置くか、surface ごとのレジストリにするか
|
||||
- 移行期間中、生成される JSON 互換性ファイルを引き続きチェックインしておくべきかどうか
|
||||
- シナリオファイルで、変数補間付きの埋め込みMarkdownプロンプトテンプレートを許可すべきかどうか
|
||||
- setup/cleanupは名前付きセクションにすべきか、それとも単なる順序付きアクションリストにすべきか
|
||||
- アーティファクト参照はschema内で強く型付けすべきか、それとも文字列ベースにすべきか
|
||||
- カスタムハンドラーは1つのregistryに置くべきか、それともsurfaceごとのregistryにすべきか
|
||||
- 移行期間中、生成されたJSON互換ファイルを引き続きチェックインしておくべきかどうか
|
||||
|
||||
Loading…
Reference in New Issue
Block a user