mcpField
O
opencode-bridge

opencode-bridge

github.com/different-ai開発24.3k628 回インストール今日更新
リポジトリ

opencode-bridge について

OpenWorkとOpenCodeを連携する開発スキルです。CLI呼び出し、SQLiteのセッションデータ参照、双方向MCPブリッジを扱い、関連機能を開発する人を対象としています。

主な機能

  1. 01CLI経由のOpenCodeプロンプト実行
  2. 02SQLiteからのセッションとメッセージの取得
  3. 03進捗ストリームと権限要求の中継
  4. 04OpenCodeへのOpenWorkツール公開

活用シーン

  1. 01OpenCodeのセッション履歴表示
  2. 02OpenWorkでの権限要求の表示
  3. 03タスク進捗のUIへの配信

MCP 対応

OpenWorkはMCPサーバーとして登録し、OpenCodeから接続できます。ブリッジは進捗ストリーム、権限要求、カスタムツールに対応します。

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/different-ai/openwork --skill opencode-bridge

インストール後、Claude Code で/opencode-bridgeを入力して読み込まれたか確認します。

詳細

概要

OpenWork は、次の 3 つの方法で OpenCode と通信します。

  1. CLI の呼び出し:プロンプトを指定して opencode を起動し、JSON レスポンスを取得します。
  2. データベースへのアクセス:OpenCode の SQLite データベースからセッションとメッセージを読み取ります。
  3. MCP ブリッジ:ストリーミングと権限のためのリアルタイム双方向通信です。

CLI の呼び出し

非対話モード
opencode -p "your prompt" -f json -q

レスポンスの内容を含む JSON を返します。

フラグ
フラグ説明
-p実行するプロンプト
-f出力形式(text、json)
-qQuiet モード(スピナーなし)
-c作業ディレクトリ
-dデバッグモード
レスポンスの例
{
  "content": "Here is the result...",
  "session_id": "abc123"
}

データベースへのアクセス

場所
~/.opencode/opencode.db

またはプロジェクト内:

.opencode/opencode.db
スキーマ(主要なテーブル)
sessions
CREATE TABLE sessions (
  id TEXT PRIMARY KEY,
  parent_session_id TEXT,
  title TEXT,
  message_count INTEGER,
  prompt_tokens INTEGER,
  completion_tokens INTEGER,
  summary_message_id TEXT,
  cost REAL,
  created_at INTEGER,
  updated_at INTEGER
);
messages
CREATE TABLE messages (
  id TEXT PRIMARY KEY,
  session_id TEXT,
  role TEXT,  -- 'user', 'assistant', 'tool'
  parts TEXT, -- JSON array of content parts
  model TEXT,
  created_at INTEGER,
  updated_at INTEGER
);
Rust(Tauri)からのクエリ
use tauri_plugin_sql::{Migration, MigrationKind};

#[tauri::command]
async fn list_sessions(db: tauri::State<'_, Database>) -> Result<Vec<Session>, String> {
    let sessions = sqlx::query_as::<_, Session>(
        "SELECT * FROM sessions ORDER BY updated_at DESC"
    )
    .fetch_all(&db.pool)
    .await
    .map_err(|e| e.to_string())?;
    
    Ok(sessions)
}
SolidJS からのクエリ
import Database from "@tauri-apps/plugin-sql";

const db = await Database.load("sqlite:~/.opencode/opencode.db");
const sessions = await db.select<Session[]>(
  "SELECT * FROM sessions ORDER BY updated_at DESC"
);

MCP ブリッジ(上級)

OpenWork は MCP サーバーとして登録でき、OpenCode はこれに接続します。

設定(opencode.json)
{
  "mcpServers": {
    "openwork": {
      "type": "stdio",
      "command": "openwork-mcp-bridge"
    }
  }
}
ユースケース
  • OpenWork の UI にリアルタイムの権限プロンプトを表示します。
  • 進捗状況をストリーミングで更新します。
  • OpenWork が提供するカスタムツール(ネイティブのファイル選択ダイアログなど)。

メッセージのコンテンツパーツ

メッセージには、さまざまなコンテンツタイプを含む parts JSON 配列が含まれます。

TextContent
{ "type": "text", "text": "Hello world" }
ToolCall
{
  "type": "tool_call",
  "id": "call_123",
  "name": "bash",
  "input": "{\"command\": \"ls\"}"
}
ToolResult
{
  "type": "tool_result",
  "tool_call_id": "call_123",
  "content": "file1.txt\nfile2.txt",
  "is_error": false
}
Finish
{
  "type": "finish",
  "reason": "end_turn",
  "time": 1704067200
}

よくある注意点

  • データベースは SQLite です。実行中の OpenCode との競合を避けるため、読み取り専用でアクセスしてください。
  • メッセージパーツは JSON エンコードされた文字列です。UI で解析してください。
  • セッション ID は UUID です。ツール呼び出し ID も UUID です。
  • コストの単位は USD です。トークン数は実数です。

初回セットアップ

OpenCode がインストールされていることを確認
which opencode
opencode --version
データベースが存在することを確認
ls ~/.opencode/opencode.db
CLI の呼び出しをテスト
opencode -p "Hello" -f json -q

コメント