AhmadHassan-BTed/AutoSwarm-Shadow-Adapter

Zero-modification Human-in-the-Loop adapter for OpenOPC's agentic DAG runtime.

AutoSwarm‑Shadow‑Adapter

概要 – AutoSwarm AIエージェントオーケストレーションフレームワーク用のプラグインで、DAGベースのワークフローが、ステップが人間のレビュアー(「Carbon」従業員)または外部GPUワーカー(「Silicon」BYOCワーカー)を必要とする場合に、非ブロッキングで一時停止できるようにします。一時停止は、保留中のタスクを独立したSQLite WALデータベースに格納し、直ちにAWAITING_HUMAN状態を返す軽量なShadowModeAdapterによって処理されるため、並列DAGの残りは実行を継続します。


主な機能

機能 説明
非ブロッキングインターセプト タスクを50ミリ秒未満でキャプチャし、shadow_tasks.dbに格納して、エンジンスレッドを解放します。
人間およびリモートワーカーポータル FastAPIベースのREST API + React 19 + Tailwind UI(http://localhost:8800)で、人間がタスクをクレームし、マークダウンブリーフを表示し、最大5ファイル(合計≤50MB)をアップロードできます。
BYOCコンピュート リモートノードはshadow-workerデーモンを実行し、JWTで認証し、タスクを取得し、ローカルモデル(Ollama、Anthropic、OpenAIなど)を実行して結果をプッシュバックします。
監査対応の永続化 すべての提出物はタイムスタンプ、属性、不変に保存されます。SQLite WALはクラッシュ耐性と状態回復を保証します。
コア変更なし アダプターはAutoSwarmのADAPTER_CLASSES["shadow"]レジストリに自己登録します。メインのAutoSwarmコードベースへの変更は不要です。
企業成果物レジストリ アップロードされた成果物はSHA-256ハッシュとともにCorporateArtifactsに保存され、下流のエージェントが検索可能になります。

動作の仕組み(高レベルフロー)

  1. AutoSwarmが作業アイテムを作成し、ロールに対してpreferred_external_agent: shadowを確認します。
  2. ShadowModeAdapterがタスクをインターセプトし、マークダウンブリーフを作成し、shadow_tasks.dbにレコードを書き込み、AWAITING_HUMANを返します。
  3. 人間またはシリコンワーカーがReactポータルにログイン(またはshadow-workerを実行)して、保留中のタスクをクレームします。
  4. ワーカーはコンテキストを確認し、解決ノートを書き、オプションでファイルをアップロードします。
  5. アダプターはAutoSwarmのネイティブstore.db(WALモード)にPhase.APPROVEDを書き込み、ネイティブのDAGフックをトリガーします。
  6. 下流ノードは自動的に再開し、新しくアップロードされた成果物を入力の一部として受け取ります。

クイックスタート(Python 3.10+)

# 1️⃣ PyPIからパッケージをインストール
pip install AutoSwarm-shadow-adapter

# 2️⃣ AutoSwarmエントリポイントにアダプターを登録
#    (例:AutoSwarmアプリケーションのmain.py)
from opc.layer3_agent.adapters.registry import ADAPTER_CLASSES
from shadow_adapter import ShadowModeAdapter, start_server_in_thread

ADAPTER_CLASSES["shadow"] = ShadowModeAdapter   # プラグイン登録
start_server_in_thread(port=8800)               # FastAPI + React UIを起動

# 3️⃣ 通常のAutoSwarm DAGを通常どおり実行します。

別プロセスを希望する場合は、サイドカーサーバーを実行するだけです: shadow-serve --port 8800。


リモートシリコンワーカー(BYOC)

# 例: Ollamaを使用するリモートGPUワークステーション
export OLLAMA_HOST="http://localhost:11434"
shadow-worker \
  --server-url http://192.168.1.100:8800 \
  --username dev_node_1 \
  --password secret123 \
  --role senior_developer \
  --provider ollama \
  --model llama3.3:70b

デーモンはAPIを継続的にポーリングし、roleに一致するタスクをクレームし、指定されたモデルをローカルで実行し、結果をポストバックします。


設定(環境変数 / .env)

変数 必須? デフォルト 意味
SHADOW_JWT_SECRET はい – JWTトークンの署名用シークレット(≥32文字)。
SHADOW_DB_PATH いいえ ./shadow_tasks.db 分離されたSQLite WAL DBのパス。
SHADOW_OPC_STORE_PATH いいえ .opc/projects/default/store.db AutoSwarmのメインストアDBのパス(アダプターが再開フェーズを書き込む場所)。
SHADOW_UPLOAD_DIR いいえ ./shadow_uploads アップロードされたファイルが保存されるディレクトリ。
SHADOW_MAX_FILES_PER_SUBMISSION いいえ 5 タスクあたりの最大ファイル数。
SHADOW_MAX_FILE_SIZE_MB いいえ 10 ファイルあたりの最大サイズ。
SHADOW_MAX_TOTAL_UPLOAD_SIZE_MB いいえ 50 提出あたりの最大ペイロード合計。
SHADOW_API_PORT いいえ 8800 FastAPIサーバーとReact SPAのポート。

誰がこれを使うべきか?

  • フリーランサーまたは個人創業者 – 重い処理をリモートGPUノードにアウトソーシングしつつ、最終的な人間の承認を保持したい人。
  • 企業 – 並列AI作業を停止させずに、監査グレードのヒューマン・イン・ザ・ループチェックポイント(SOC 2、ISO 27001、GDPR)を必要とする企業。
  • チーム – 複数のクライアント契約を同時に実行し、キュー方式の「ヒューマン・アズ・ア・サービス」レイヤーを必要とするチーム。

制限と考慮事項

  • アダプターはAutoSwarm(対象とする特定のDAGエンジン)でのみ動作します。他のフレームワーク用の汎用HITLレイヤーではありません。
  • 人間のタスクは別のSQLite WALに保存されます。長期的な保持が必要な場合は、shadow_tasks.dbをバックアップする必要があります。
  • ファイルアップロードは5×10MB(設定可能)に制限されています – 大きなバイナリアセットには外部ストレージが必要です。
  • セキュリティはJWT + bcryptに依存しています。SHADOW_JWT_SECRETを保護し、本番環境ではポータルをTLSの背後で実行する必要があります。

開発とテスト

# カバレッジ付きのフルテストスイート(55テスト)を実行
pytest tests/ -v --cov=shadow_adapter --cov-report=term-missing

# クイックデモ用にAutoSwarmエンジンをシミュレート
python tests/mock_AutoSwarm_engine.py

リポジトリには、型チェック済みコード、プロパティベースのファズテスト、エンジン再起動や同時タスク負荷をアダプターが乗り切ることを検証する統合テストが含まれています。


リンク


AutoSwarmコミュニティのために構築されました – AIエージェントと実際の人間が、ワークフローをデッドロックさせることなく協力できるようにする、非侵襲的なヒューマン・イン・ザ・ループブリッジです。

関連

  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト