作業ログ — Discord Bot 応答テキスト表示改善 & VPSデプロイ
2026-02-26
問題
- Botが IDEの生データ(内部thinking、CSS、英語テキスト)をそのまま Discord に表示していた
- ユーザーが求めているのは日本語の回答テキストのみ
DOM調査(CDP経由、5回実施)
- チャットパネル構造の特定:
.antigravity-agent-side-panel→.relative.flex.flex-col.gap-y-3.px-4 - ターン構造: 各ターンはクラスなしの
<div>直接子要素 .leading-relaxed.select-textが CSS スタイルシートを含んでいることを発見.isolate= task_boundary UI、overflow-y-auto max-h-[200px]= thinking コンテナflex-row my-2= メッセージ行(回答テキスト格納)
修正内容
ide_client.py — _GET_PROGRESS_JS リライト
- excludeSet 方式で不要要素を除外:
.isolate(task_boundary UI)[class*="max-h-"](thinking)[class*="bg-gray-500"](折りたたみ通知)[class*="overflow-y-auto"](thinkingコンテンツ)buttonwith “Thought for” text<STYLE>/<SCRIPT>タグ
- TreeWalker でクリーンテキスト抽出(除外サブツリーのテキスト不含)
String.fromCharCode(10)で改行生成(Python triple quote 内の\nエスケープ問題回避)- CSS構文フィルタリング:
border-style,prefers-color-scheme等
listener.py — _monitor_and_report 改善
responseTextフィールドで実回答のみ表示- Discord 文字数制限対応
local_poller.py — 進捗モニター追加
- IDE注入後に
monitor_progressで応答テキスト取得 - VPS Queue API に結果返却
VPSデプロイ更新
vps_deploy/bot.py— 完了通知フォーマット改善vps_deploy/cogs/listener.py— mission-control + スレッド対応追加- VPS (162.43.15.17) に scp + systemctl restart 実施
自動起動設定
- Windows タスクスケジューラ
AntiCrow-Pipeline登録(ログイン時自動実行) start_pipeline.ps1からRead-Host削除(バックグラウンド実行対応)
検証結果
- JS テスト: 日本語回答のみ取得成功
- Discord 表示: thinking/CSS/英語除外確認
- VPS Bot: active (running) 安定稼働
- パイプライン: キューポーリング正常動作
- タスクスケジューラ: Ready 状態
関連ファイル
- Discord-IDE連携パイプライン手順書
C:\ai_work\new_bot\utils\ide_client.pyC:\ai_work\new_bot\cogs\listener.pyC:\ai_work\new_bot\local_poller.pyC:\ai_work\new_bot\vps_deploy\
2026-02-26(追記)— IDE モデル切替連携
問題
- Discord の
/modelコマンドでモデルを変更しても、Bot 内部の state が変わるだけで IDE(Antigravity)のモデルセレクタには反映されなかった
DOM調査(CDP経由、2回実施)
-
パネル全体構造の特定
.antigravity-agent-side-panel内にrole="button" aria-haspopup="dialog"のモデルトリガーを発見- 現在のモデル表示:
<SPAN cls='min-w-0 select-none overflow-hidden text-ellipsis whitespace-nowrap'>
-
モデルオプション構造
- 各オプション:
<DIV cls='px-2 py-1 flex items-center justify-between cursor-pointer hover:bg-gray-500/10'> - オプション内のモデル名:
<SPAN cls='text-xs font-medium'> - 選択中のオプション:
bg-gray-500/20(hover ではなく固定背景)
- 各オプション:
-
利用可能なモデル一覧(調査時点)
- Gemini 3.1 Pro (High)
- Gemini 3.1 Pro (Low)
- Gemini 3 Flash
- Claude Sonnet 4.6 (Thinking)
- Claude Opus 4.6 (Thinking)
- GPT-OSS 120B (Medium)
実装内容
ide_client.py — switch_model() メソッド追加
- CDP
Runtime.evaluate+awaitPromise: trueで JS Promise を実行 - 処理フロー:
role="button" aria-haspopup="dialog"を検索 → モデル名にマッチするトリガーをクリック- 500ms 待機 → ポップオーバーが開く
cursor-pointer hover:bg-gray-500クラスの DIV から目的のモデル名を検索 → クリック- フォールバック:
text-xs font-mediumの SPAN →closest('[class*="cursor-pointer"]')で親をクリック
- 戻り値:
モデルを {to} に切り替えました (前: {from})形式
core_commands.py(ローカル版)— IDE 直接切替
/modelコマンド実行時にIDEClient.switch_model()を呼び出し- IDE 未接続時はエラーメッセージ表示(VPSモードではキュー経由)
vps_deploy/bot.py — Queue API エンドポイント追加
POST /queue/model— モデル切替リクエスト登録GET /queue/model— ポーリング用(取得すると消費される)
vps_deploy/cogs/core_commands.py — VPS版モデル変更
bot.model_switch_requestにモデル名をセット → Local Poller が拾う
local_poller.py — モデル切替ポーリング追加
- メインループ内で
GET /queue/modelを毎サイクルチェック - リクエストがあれば
ide.switch_model(model_name)を実行
修正が必要だった点
- モデル名の不一致: Bot 側
"Gemini 3.1 Pro (High) New"→ IDE 側"Gemini 3.1 Pro (High)"- 末尾の
Newを削除して完全一致させた
- 末尾の
- Local Poller 未再起動: コード更新後にパイプラインの再起動が必要だった
検証結果
-
switch_model("Gemini 3 Flash")テスト:Claude Opus 4.6 (Thinking) → Gemini 3 Flash切替成功 -
/modelコマンド → IDE 反映確認(ユーザー確認済み) - VPS Bot:
core_commands.pyロード成功、active (running) - パイプライン再起動後、ポーリング正常動作
関連ファイル(追加分)
C:\ai_work\new_bot\cogs\core_commands.pyC:\ai_work\new_bot\vps_deploy\cogs\core_commands.py
2026-02-26(追記2)— 汎用チャット ai-lab チャンネル実装
実装した機能
| 機能 | 方式 |
|---|---|
| フリー会話 | ai-lab チャンネルにメッセージ → Gemini API 直接応答(IDE不使用・高速) |
| 会話履歴 | 直近10ターンをメモリ保持、マルチターン対応 |
/search | Vault RAG検索(VPS→Queue→Local Poller→Vault検索→Gemini RAG→結果返却) |
/clear | 会話履歴リセット |
新規ファイル
cogs/ai_lab.py— ローカル版(Vault検索含む)vps_deploy/cogs/ai_lab.py— VPS版
修正したファイル
vps_deploy/bot.py
- ギルド指定
tree.sync()追加(即時コマンド反映) bot.search_requests+/queue/search,/queue/search/resultエンドポイント追加asyncio.Eventベースの非同期待ち方式
local_poller.py
vault_rag_search()関数追加: Vault ファイル検索 → スニペット抽出 → Gemini RAG- ポーリングループに
/queue/searchチェック追加
修正が必要だった点
- スラッシュコマンド未登録: VPS
bot.pyにtree.sync()が欠落 → 追加 - グローバル同期の遅延:
tree.sync()をギルド指定に変更(即時反映) /searchVPS版欠落: VPS に Vault がないため除外していたが、Queue 経由で対応
検証結果
- ai-lab チャンネルで Gemini 直接応答確認
-
/clear会話履歴リセット確認 -
/searchVault RAG 検索動作確認(ユーザー確認済み) - VPS
Synced 3 slash command(s)確認
2026-02-26(追記3)— エラー報告 & 実行ログ チャンネル実装
⚠️ エラー報告 incident-report
| 機能 | 内容 |
|---|---|
| 自動ヘルスチェック | 30秒間隔で IDE/VPS の死活監視 |
| 自動通知 | 障害検出→チャンネルに Embed 投稿、復旧時も通知 |
/status | IDE・VPS・キューの現在状態を表示 |
/incidents | インシデント履歴を表示 |
📋 実行ログ raw-logs
| 機能 | 内容 |
|---|---|
| 自動記録 | 指示送信・承認等をログチャンネルにリアルタイム投稿 |
/logs | キーワード検索(イベント種別・内容マッチ) |
/export-logs | Obsidian に .md でエクスポート(ローカルのみ) |
bot.post_log() | 他 cog からログ投稿可能な公開API |
新規ファイル
cogs/incident_report.py/vps_deploy/cogs/incident_report.pycogs/raw_logs.py/vps_deploy/cogs/raw_logs.py
検証結果
- 全6 cog ロード成功
-
Synced 8 slash command(s)確認
2026-02-27(追記4)— マルチエージェント オーケストレーター実装
概要
以前作成した監視アプリ(orchestrator_sys/)を Discord Bot に統合。
DiscordからAntigravityの複数ワーカーを管理できるようにした。
新コマンド
| コマンド | 機能 |
|---|---|
/workers | CDP + Win32 APIでアクティブなAntigravityワーカー一覧を表示 |
/launch | 指定パスで新しいAntigravityワーカーを起動 |
/assign | CDP経由でワーカーにタスクを送信 |
/tile | Win32 APIでウィンドウを2/3/4分割に自動配置 |
アーキテクチャ
Discord → VPS Queue API → Local Poller → Win32 API / CDP
VPSはQueue経由でローカルに転送、ローカルで実行。
新規・変更ファイル
cogs/orchestrator.py— ローカル版(直接Win32/CDP操作)vps_deploy/cogs/orchestrator.py— VPS版(Queue経由)vps_deploy/bot.py—/queue/orchestratorエンドポイント追加local_poller.py—_handle_orchestrator_action()追加
検証結果
- 全7 cog ロード成功
-
Synced 12 slash command(s)確認---
2026-03-04 — フォルダ整理に伴うパス更新 & Bot再起動
背景
ai_work ディレクトリ整理で new_bot → tools\bots\new_bot に移動されたため、関連ファイルの全パス更新が必要になった。
パス更新ファイル
| ファイル | 更新箇所 |
|---|---|
orchestrator_sys\task_manager.py | WORKER_SPACES |
orchestrator_sys\multi_ide_client.py | WORKER_SPACES |
cogs\orchestrator.py(ローカル版) | WORKSPACE_PRESETS |
vps_deploy\cogs\orchestrator.py(VPS版) | WORKSPACE_PRESETS |
orchestrator_sys\agent_coordinator.py | TASK_PREAMBLE レポートパス |
orchestrator_sys\dispatch_cli.py | 使い方ドキュメント内パス |
start_pipeline.ps1 | $BOT_DIR |
scripts\restart_bot.ps1 | $botDir |
AGENTS.md(メイン) | ワーカーパス + CLI |
workspaces\{A,B,C}-space\AGENTS.md | レポートパス + ワークスペースパス |
VPSデプロイ & 再起動
- 更新した
orchestrator.pyをscpでVPS(/opt/new_bot/cogs/)にデプロイ systemctl restart discord-botでサービス再起動- ローカル
start_pipeline.ps1を実行(CDP + SSHトンネル + PollerCDPで起動) - Discordからの疎通確認完了 ✅
関連ファイル
c:\ai_work\tools\bots\new_bot\start_pipeline.ps1c:\ai_work\tools\scripts\restart_bot.ps1c:\ai_work\tools\bots\new_bot\vps_deploy\cogs\orchestrator.py
2026-03-04(追記)— OpenClaw → Antigravity 自律指示パイプライン
概要
OpenClaw(ナナ)が24時間自律的にAntigravity IDEに指示を出す仕組みを構築。 AI組織設計ブループリントの Phase 2 に相当。
新規チャンネル
| 項目 | 値 |
|---|---|
| チャンネル名 | #nana-command |
| チャンネルID | 1478661504445321229 |
| 用途 | ナナ → Antigravity 専用指示チャンネル |
listener.py 変更内容
OPENCLAW_BOT_ID = 1472983666606211083定数追加#nana-commandチャンネル検出ロジック追加- ナナのBot IDからの投稿のみ
🤖リアクション付与 → キューに登録 - その他のBot投稿は無視(ユーザー専用チャンネルの保護)
- スレッド対応に
nana-commandの親チャンネル判定を追加
通信フロー
ナナ → #nana-command → Antipigeon listener → Queue → Local Poller → Antigravity IDE
電源設定変更
- PCスリープ無効化(AC電源時):
powercfg /change standby-timeout-ac 0 - ディスプレイオフ: 10分
- 休止状態: 無効
- 24時間パイプライン稼働を実現