关于 opencode-bridge
用于在 OpenWork 中接入 OpenCode 的开发技能,涵盖 CLI 调用、SQLite 会话数据读取和双向 MCP 桥接,面向构建相关功能的开发者。
主要功能
- 01通过 CLI 执行 OpenCode 提示词
- 02从 SQLite 读取会话和消息
- 03桥接进度流与权限请求
- 04向 OpenCode 提供 OpenWork 工具
适用场景
- 01显示 OpenCode 会话历史
- 02在 OpenWork 中呈现权限请求
- 03向界面推送任务进度
MCP 相关
OpenWork 可注册为 MCP 服务,供 OpenCode 连接。桥接支持进度流、权限请求和自定义工具。
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ different-ai/ openwork --skill opencode-bridge安装后在 Claude Code 中输入/opencode-bridge确认已加载。
详细介绍
概述
OpenWork 通过三种机制与 OpenCode 通信:
- CLI 调用:使用提示词启动
opencode,并获取 JSON 响应。 - 数据库访问:读取 OpenCode 的 SQLite 数据库以获取会话和消息。
- 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