プラグインリリースの受け入れ
ファーストパーティのプラグインがリリースで受け入れられるのは、オペレーターが、Rust ツールチェーンのないマシン上で、公開済みの zeroclaw バイナリに対してプラグインを名前指定でインストールでき、組み込み機能ではなくそのプラグインが処理を行っていることを示せる場合です。本ページは、その証明の手順書であり、証拠のテンプレートでもあります。実例として Discord チャネルプラグインを使用します。別のパッケージの場合は、その名前、エイリアス、必須キー、および送信先を置き換えてください。
1回の実行で確認できるのは、公開済みのホストビルド1つにおける、パッケージ1バージョンの動作のみです。他のターゲット、他のホストバージョン、高負荷時の動作については、何も示しません。
この内容をいつ実行するか
リリースが公開され、パッケージバージョンがレジストリに登録された後に実行してください。リリースがサポートすると宣言している各パッケージバージョンについて1回ずつ実行します。どちらかの側が変更された場合(新しいパッケージバージョン、またはプラグインインターフェースを変更するホストのリリース)には、再度実行してください。
始める前に
- 成果物。 64ビットターゲット向けに公開された
zeroclawCLI アーカイブで、そのプラグインホストは.wasmコンポーネントをコンパイルします。まず Release artifact verification を使って確認してください。x86_64 Linux のアーカイブを新規コンテナで実行するのが、ツールチェーンが一切関与していないことを示す最も簡単な方法です。 - クリーンな環境。 Rust ツールチェインも、以前の実行から残った設定もない状態です。
- プラットフォームのテスト用アカウント。 Discordの場合は、小規模なテスト用サーバーに専用のボットアプリケーションを用意します(本番用ボットは使用しないこと)。Message Content Intentを有効にし、ボットを招待しておきます(Discordクイックスタートを参照)。さらにテスター用の2つ目のDiscordアカウントも用意します。テスト終了後にはボットトークンをリセットする予定を立ててください。
- モデルプロバイダー。 設定済みの任意のプロバイダーで動作します。スクリプト化されたローカルプロバイダーを使うと、エージェントの応答を再現可能にできます。
- 証拠ファイル。 証拠テンプレートをコピーし、作業を進めながら記入してください。
Bot token は、マスク表示された zeroclaw config set のプロンプトにのみ入力してください。ファイル、コマンドライン、シェル履歴、スクリーンショット、証跡のいずれにも絶対に残さないでください。
1. 環境を記録する
command -v cargo rustc || echo "no Rust toolchain"
sha256sum zeroclaw-<target>.tar.gz
zeroclaw --version
zeroclaw plugin search discord
インストールによって解決されるアーカイブ名とダイジェスト、バージョン文字列、およびレジストリエントリ(名前、バージョン、アーカイブURL、sha256)を記録してください。
2. 名前を指定してインストールし、インスタンスをバインドする
zeroclaw plugin install discord --channel-alias acceptance --egress declared
zeroclaw config set plugins.entries.zpi1_WyJkaXNjb3JkIiwiY2hhbm5lbCIsImFjY2VwdGFuY2UiXQ.config.bot_token
zeroclaw config set plugins.enabled true
zeroclaw plugin info discord
インストール時にバインディングと付与されたホストが出力されます。plugin info は、このホストでパッケージが読み込めること、および上記のインスタンスキーが存在することを報告する必要があります。その後、手動で:
- 有効なエージェントの1つで、
channelsにplugin.acceptanceを追加する; channel = "plugin.acceptance"を持ち、external_peersにテスターの数値の Discord ユーザー ID を保持するピアグループを追加します。
Discord ページに両方が示されています。[channels.discord.<alias>] テーブルはどこにも設定せず、その後デーモンを起動してください。証跡として config.toml のコピーを保管してください。シークレットは暗号化されたままです。
3. プラグインを動作確認する
テンプレートを順に進め、予期しないことも含めて、観察した内容を記録してください。以下で挙げるログレコードはデーモンの構造化ログに含まれており、ダッシュボードの Logs ページと GET /api/logs がこのログを読み取ります(観測性を参照)。全体を通して合成のメッセージテキストを使用してください。
証拠テンプレート
| Claim | 対応 | 証拠 | Result |
|---|---|---|---|
| インストール時にツールチェーンを指定せず、名前で指定してインストール | 手順1と2 | command -v の出力、インストール出力、レジストリエントリ、アーカイブのダイジェスト | |
| Loads on this host | zeroclaw plugin info discord | その読み込み判定 | |
| Inbound(受信)はプラグイン経由で処理されます | The tester sends a message | channel inbound message レコード(zeroclaw.channel = plugin.acceptance) | |
| Outbound(送信)はプラグイン経由で行われます | エージェントが返信します | plugin.acceptance の reply delivered レコード。個人情報を伏せた返信のスクリーンショット | |
| 組み込みのチャネルは何も処理しませんでした | 起動時の出力と/healthを確認する | チャンネル一覧には plugin.acceptance が表示され、discord.* は表示されません。/health には channel:plugin.acceptance が表示され、channel:discord.* は表示されません。設定ファイルのコピーには [channels.discord] テーブルがありません | |
| ネガティブコントロール | channels.plugin.acceptance.enabled を false に設定し、再起動してメッセージを送信する | 受信レコードも返信もありません。true に戻し、次の行の前にもう一度再起動してください。 | |
| 再接続 | マシンのネットワークを少なくとも2分間切断し、その後復旧させる | 次のメッセージに返信があります。プラグインがセッションを再開したか、新しいセッションを開始したかを記録してください | |
| シャットダウン | デーモンを停止 | プロセスは正常に終了します。ボットがオフラインと表示されるまでにかかる時間をメモしてください。 | |
| 拒否された宛先 | インスタンスの egress_hosts から *.discord.gg を削除し、再起動 | ゲートウェイが接続されず、ボットはオフラインのままで、受信メッセージも一切届きません。拒否された WebSocket 接続を記録するホストでは、plugin_egress_denied レコードも書き込まれ、そこには transport = websocket、拒否されたホスト、そして remedy コマンドが含まれます。v0.8.6 ではこのレコードは一切書き込まれません。 | |
| Grantを復元しました | *.discord.gg を元に戻し、同じマシンから POST /admin/reload を実行して、実行中のデーモンに完全な再起動なしで適用してください(リモートデーモンのリロードを参照)。zeroclaw config set や config.toml の編集で変更を保存しても、それだけでは実行中のデーモンには反映されません。 | ボットは再接続します。所要時間を記録してください。 | |
| 拒否された送信者 | ピアグループ外のアカウントから送信 | plugin_channel_sender_denied レコードがあり、返信がないこと | |
| プラットフォームの権限がありません | 1つのチャンネルでボットのメッセージを送信権限を削除し、そのチャンネルでボットにメッセージを送信してください | 送信失敗がログに記録されました。デーモンは稼働したままで、再接続ループはありません。 | |
| 無効なトークン | マスクされた config set プロンプトで、構文的に有効だが無効または失効したトークンを設定し、その後に再起動する | プラグインは Discord による認証拒否を報告し、バックオフします。5 分間のログに再接続ループはありません。configure() によってローカルで拒否された不正な形式のトークンでは、プラットフォームの認証やバックオフは検証されません。 | |
| 信頼ポリシーが有効です | plugins.security.signature_mode を strict に設定し、パッケージの発行元の鍵を信頼せずに再起動する | デーモンはそのパッケージをスキップし、署名拒否をログに記録します。plugin.acceptance は起動しません。CLI は拒否されたパッケージを Plugin discord not found または No plugins installed と報告するため、理由はデーモンのログで確認してください。以前のモードを復元してください。 |
投稿前に機密情報を伏せてください
channel inbound message と reply delivered のレコードには、メッセージ本文と送信者のユーザーIDが含まれています。何かを投稿する前に:
- ユーザー、サーバー、チャンネルのIDをプレースホルダーに置き換えてください;
- 合成メッセージのテキストのみを残す
- 設定のコピー内にあるすべての
enc2:の値を<encrypted>に置き換える; - スクリーンショットをテスト対象のメッセージ部分にトリミングする
トークンは、秘匿化されているかどうかにかかわらず、証拠の中に一切現れません。
証拠を投稿する
リリースの追跡用 issue に次の内容を投稿してください: 成果物名とダイジェスト、zeroclaw --version の出力、レジストリエントリとパッケージのバージョン、手順 1 と 2 で実行した正確なコマンド、記入済みの表、および前回受け入れられた実行以降にパッケージまたはホストを変更したプルリクエストへのリンク。
クリーンアップ
- デーモンを停止し、
zeroclaw plugin remove discordを実行してください。削除を実行しても、インスタンスの[[plugins.entries]]行と[channels.plugin.acceptance]バインディングは残り、両方が出力されます。それらを手動で削除してください。 - Discord Developer Portalでボットトークンをリセットし、実行で使用していたトークンが無効になるようにしてください。