スタンドアロン WebUI
対象
Sharelife WebUI は AstrBot Dashboard に埋め込まなくても独立して動作します。 このページでは、公開 / member 側で実際に使えるフローだけを扱います。
- Spotlight 形式のマーケット検索
- ローカルインストール管理
- template アップロードと profile-pack 投稿
- member 側のタスク / 結果追跡
特権 moderation と operator フローは非公開 docs にのみ記載します。
設定
json
{
"webui": {
"enabled": true,
"host": "127.0.0.1",
"port": 8106,
"cors": {
"allow_origins": ""
},
"security_headers": {
"enabled": true,
"X-Content-Type-Options": "nosniff",
"X-Frame-Options": "DENY",
"Referrer-Policy": "no-referrer",
"Permissions-Policy": "camera=(), microphone=(), geolocation=()",
"Content-Security-Policy": "default-src 'self'; base-uri 'self'; frame-ancestors 'none'; object-src 'none'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; connect-src 'self'; form-action 'self'"
},
"auth": {
"member_password": "",
"token_ttl_seconds": 7200,
"allow_query_token": false,
"allow_anonymous_member": false,
"anonymous_member_user_id": "webui-user",
"anonymous_member_allowlist": [
"POST /api/trial",
"GET /api/trial/status",
"POST /api/templates/install",
"GET /api/member/installations",
"POST /api/member/installations/refresh",
"GET /api/preferences",
"POST /api/preferences/mode",
"POST /api/preferences/observe"
],
"login_rate_limit_window_seconds": 60,
"login_rate_limit_max_attempts": 10,
"api_rate_limit_window_seconds": 60,
"api_rate_limit_max_requests": 600
},
"observability": {
"metrics_max_paths": 128,
"metrics_overflow_path_label": "/__other__"
}
}
}認証の挙動
- 認証フィールドが空なら、公開 / member サーフェスはそのまま利用できます。
member_passwordを設定すると、保護された member 操作にログインが必要になります。GET /api/ui/capabilitiesはログイン前でも読めるため、UI はこれを基準に保護操作を制御します。- query token は既定で無効です。
Authorization: Bearer <token>を使ってください。 - ログイン試行は
login_rate_limit_*で制限されます。 - API リクエストは
api_rate_limit_*(client + role + path単位)で制御されます。 - 既定レスポンスには
security_headersが付き、Content-Security-Policyも含まれます。 allow_anonymous_member=trueを使う場合でも、匿名で使えるのは allowlist に載った API だけで、要求はanonymous_member_user_idに固定されます。- 特権認証、secret 材料、backup/restore runbook は非公開 docs に残します。
- standalone での「ローカル AstrBot 設定取り込み」は既定で無効です(安全優先)。必要時のみ明示的に有効化してください。
- CLI:
python3 scripts/run_sharelife_webui_standalone.py --enable-local-astrbot-import - 環境変数:
SHARELIFE_ENABLE_LOCAL_ASTRBOT_IMPORT=1 - 匿名主体によるローカル取り込みを許可する場合:
--allow-anonymous-local-astrbot-import/SHARELIFE_ALLOW_ANONYMOUS_LOCAL_ASTRBOT_IMPORT=1
- ローカル AstrBot 自動検出には任意の path hint を指定できます。
SHARELIFE_ASTRBOT_CONFIG_PATH=/absolute/path/to/cmd_config.jsonSHARELIFE_ASTRBOT_CONFIG_PATH=/path/a:/path/b(Windows は;)SHARELIFE_ASTRBOT_SEARCH_ROOTS=/path/root-a:/path/root-b(Windows は;)SHARELIFE_ASTRBOT_HOME=/path/to/astrbot
起動とルート
- プラグイン起動時に WebUI の起動を試みます。
/sharelife_webuiを実行して URL を確認します。- 公開 / member 向けルート:
/統合エントリ/membermember コンソール/market独立マーケットページ
- 制限付き operator ルートは存在しますが、公開 docs では説明しません。
コンテナ quick start
bash
docker compose up -d --buildその後 http://127.0.0.1:8106 を開きます。 データは ./output/docker-data に永続化されます。 Compose は既定で state_store.backend=sqlite を使用し、DB は ./output/docker-data/sharelife_state.sqlite3 に保存されます。
Member ワークフロー
1. マーケット検索 + トライアル状態
/memberと/marketはどちらも Spotlight 形式の検索から始まります。- 検索結果はカタログカード、詳細、比較パネルに反映されます。
トライアル状態(Trial Status)はnot_started|active|expiredとttl_seconds/remaining_secondsを表示します。
2. ローカルインストール管理
- まずローカルインストール一覧を読み込みます。
ローカル既存設定を更新相当の操作で可視状態を同期します。- 各インストール項目では次を扱えます。
再インストールアンインストール
- インストール操作は次を受け取ります。
preflightforce_reinstallsource_preference=auto|uploaded_submission|generated
3. Template アップロードフロー
/memberのアップロード領域を開きます。- ファイルを選択するか、生成済み package を利用します。
- template package の直接アップロード上限は
20 MiBです。 - upload オプション:
scan_mode=strict|balancedvisibility=community|privatereplace_existing=true|false
- 投稿後は
My Submissionsで詳細を確認し、自分の原本 package をダウンロードします。
4. Profile-Pack 投稿フロー
- profile-pack artifact を準備し、
artifact_idを取得します。 /memberでは import draft card から直接 Upload Details を開き、レビューしてから投稿できます。- Upload Details は draft 単位でレビュー状態(
selected unit/node、section 選択、replace_existing)を保持し、同一ブラウザセッション中の modal 再オープンやページ再読込でも失われません。 /memberまたは/marketから投稿します。- submit オプション:
pack_typeselected_sectionsredaction_modereplace_existing
- 投稿後は
My Profile-Pack Submissionsで詳細と自分の export を確認します。
5. 能力ゲートとエラーモデル
- ボタン単位の操作はすべて
/api/ui/capabilitiesによってバックエンドポリシーからゲートされます。 - 認証 / 制限 / 内部エラーは次の形で統一されます:
{"ok": false, "error": {"code": "...", "message": "..."}} - owner 不一致は
permission_deniedを返します。 - template アップロード超過は
package_too_largeを返します。 prompt_injection_detectedのようなリスク検知は、無言削除ではなく審査シグナルとして表示されます。
公開 / 非公開の境界
- 公開 docs は検索、インストール、アップロード、自分の投稿管理だけを扱います。
- 審査操作、特権 apply/rollback、secret 処理、backup/restore SOP は公開しません。
トラブルシューティング
401: 認証が有効で、現在の member 操作にログインが必要です。permission_denied: 現在の token では対象user_idまたは操作にアクセスできません。package_too_large: template アップロードが20 MiBを超えました。prompt_injection_detected: package は高リスクとしてマークされ、審査へ回されました。- ロケール表示が壊れた場合は
sharelife.uiLocaleを削除して再読込してください。 - developer mode の状態が壊れた場合は
sharelife.developerModeを削除して再読込してください。