mcpField
O
opencode-bridge

opencode-bridge

github.com/different-ai开发24.3k628 次安装今天更新
代码仓库

关于 opencode-bridge

用于在 OpenWork 中接入 OpenCode 的开发技能,涵盖 CLI 调用、SQLite 会话数据读取和双向 MCP 桥接,面向构建相关功能的开发者。

主要功能

  1. 01通过 CLI 执行 OpenCode 提示词
  2. 02从 SQLite 读取会话和消息
  3. 03桥接进度流与权限请求
  4. 04向 OpenCode 提供 OpenWork 工具

适用场景

  1. 01显示 OpenCode 会话历史
  2. 02在 OpenWork 中呈现权限请求
  3. 03向界面推送任务进度

MCP 相关

OpenWork 可注册为 MCP 服务,供 OpenCode 连接。桥接支持进度流、权限请求和自定义工具。

安装

复制下面的命令,在终端中运行。

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

安装后在 Claude Code 中输入/opencode-bridge确认已加载。

详细介绍

概述

OpenWork 通过三种机制与 OpenCode 通信:

  1. CLI 调用:使用提示词启动 opencode,并获取 JSON 响应。
  2. 数据库访问:读取 OpenCode 的 SQLite 数据库以获取会话和消息。
  3. MCP 桥接:用于流式传输和权限控制的实时双向通信。

CLI 调用

非交互模式
opencode -p "your prompt" -f json -q

返回包含响应内容的 JSON。

标志
标志说明
-p要执行的提示词
-f输出格式(text、json)
-q静默模式(不显示加载动画)
-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

评论

支持 Markdown