作業ログ — Discord Bot 応答テキスト表示改善 & VPSデプロイ

2026-02-26

問題

  • Botが IDEの生データ(内部thinking、CSS、英語テキスト)をそのまま Discord に表示していた
  • ユーザーが求めているのは日本語の回答テキストのみ

DOM調査(CDP経由、5回実施)

  1. チャットパネル構造の特定: .antigravity-agent-side-panel.relative.flex.flex-col.gap-y-3.px-4
  2. ターン構造: 各ターンはクラスなしの <div> 直接子要素
  3. .leading-relaxed.select-text が CSS スタイルシートを含んでいることを発見
  4. .isolate = task_boundary UI、overflow-y-auto max-h-[200px] = thinking コンテナ
  5. 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コンテンツ)
    • button with “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 状態

関連ファイル


2026-02-26(追記)— IDE モデル切替連携

問題

  • Discord の /model コマンドでモデルを変更しても、Bot 内部の state が変わるだけで IDE(Antigravity)のモデルセレクタには反映されなかった

DOM調査(CDP経由、2回実施)

  1. パネル全体構造の特定

    • .antigravity-agent-side-panel 内に role="button" aria-haspopup="dialog" のモデルトリガーを発見
    • 現在のモデル表示: <SPAN cls='min-w-0 select-none overflow-hidden text-ellipsis whitespace-nowrap'>
  2. モデルオプション構造

    • 各オプション: <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 ではなく固定背景)
  3. 利用可能なモデル一覧(調査時点)

    • 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.pyswitch_model() メソッド追加

  • CDP Runtime.evaluate + awaitPromise: true で JS Promise を実行
  • 処理フロー:
    1. role="button" aria-haspopup="dialog" を検索 → モデル名にマッチするトリガーをクリック
    2. 500ms 待機 → ポップオーバーが開く
    3. cursor-pointer hover:bg-gray-500 クラスの DIV から目的のモデル名を検索 → クリック
    4. フォールバック: 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.py
  • C:\ai_work\new_bot\vps_deploy\cogs\core_commands.py

2026-02-26(追記2)— 汎用チャット ai-lab チャンネル実装

実装した機能

機能方式
フリー会話ai-lab チャンネルにメッセージ → Gemini API 直接応答(IDE不使用・高速)
会話履歴直近10ターンをメモリ保持、マルチターン対応
/searchVault 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.pytree.sync() が欠落 → 追加
  • グローバル同期の遅延: tree.sync() をギルド指定に変更(即時反映)
  • /search VPS版欠落: VPS に Vault がないため除外していたが、Queue 経由で対応

検証結果

  • ai-lab チャンネルで Gemini 直接応答確認
  • /clear 会話履歴リセット確認
  • /search Vault RAG 検索動作確認(ユーザー確認済み)
  • VPS Synced 3 slash command(s) 確認

2026-02-26(追記3)— エラー報告 & 実行ログ チャンネル実装

⚠️ エラー報告 incident-report

機能内容
自動ヘルスチェック30秒間隔で IDE/VPS の死活監視
自動通知障害検出→チャンネルに Embed 投稿、復旧時も通知
/statusIDE・VPS・キューの現在状態を表示
/incidentsインシデント履歴を表示

📋 実行ログ raw-logs

機能内容
自動記録指示送信・承認等をログチャンネルにリアルタイム投稿
/logsキーワード検索(イベント種別・内容マッチ)
/export-logsObsidian に .md でエクスポート(ローカルのみ)
bot.post_log()他 cog からログ投稿可能な公開API

新規ファイル

  • cogs/incident_report.py / vps_deploy/cogs/incident_report.py
  • cogs/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の複数ワーカーを管理できるようにした。

新コマンド

コマンド機能
/workersCDP + Win32 APIでアクティブなAntigravityワーカー一覧を表示
/launch指定パスで新しいAntigravityワーカーを起動
/assignCDP経由でワーカーにタスクを送信
/tileWin32 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_bottools\bots\new_bot に移動されたため、関連ファイルの全パス更新が必要になった。

パス更新ファイル

ファイル更新箇所
orchestrator_sys\task_manager.pyWORKER_SPACES
orchestrator_sys\multi_ide_client.pyWORKER_SPACES
cogs\orchestrator.py(ローカル版)WORKSPACE_PRESETS
vps_deploy\cogs\orchestrator.py(VPS版)WORKSPACE_PRESETS
orchestrator_sys\agent_coordinator.pyTASK_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.pyscp で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.ps1
  • c:\ai_work\tools\scripts\restart_bot.ps1
  • c:\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
チャンネルID1478661504445321229
用途ナナ → 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時間パイプライン稼働を実現