Opslane API参考:深入理解命令、服务和数据模型
【免费下载链接】opslaneRun multiple Claude Code sessions in parallel项目地址: https://gitcode.com/gh_mirrors/op/opslane
概述
Opslane是一款强大的桌面应用,专为并行管理多个Claude Code会话而设计。通过Docker容器实现隔离,并提供"同步到本地"的工作流,让开发者能够在现有开发环境中测试变更。本文将深入探讨Opslane的API结构,包括核心命令、服务架构和数据模型,帮助开发者更好地理解和使用这个强大的工具。
核心命令详解
会话管理命令
创建新会话
invoke('create_session', { name, repoPath, baseBranch })创建一个新的Claude Code会话,该命令会立即在数据库中创建会话记录,并在后台启动Docker容器设置。会话创建后会返回会话对象,前端可以立即导航到会话页面并显示乐观更新。
获取会话详情
invoke('get_session', { sessionId })通过会话ID获取单个会话的详细信息,包括状态、容器ID、分支信息等。
列出所有会话
invoke('list_sessions', { limit, offset })获取所有活跃会话的列表,支持分页参数limit和offset。
删除会话
invoke('delete_session', { sessionId })删除指定会话并清理相关的Docker容器资源。删除成功后会触发"session-deleted"事件,前端可以据此更新会话列表。
消息操作命令
发送消息
invoke('send_message', { sessionId, content, model })向指定会话发送消息,支持指定模型(如"sonnet"、"opus"或"haiku")。该命令返回一个接收器,用于流式接收Claude的响应。
获取消息历史
invoke('get_messages', { sessionId })获取指定会话的消息历史记录,包括用户消息、助手响应和工具使用记录。
同步操作命令
同步到本地
invoke('sync_to_local', { sessionId })将指定会话的变更同步到本地仓库,方便在本地开发环境中测试变更。
取消当前同步
invoke('unsync_current')取消当前的同步状态,恢复本地仓库的干净状态。
应用并保留变更
invoke('apply_and_keep', { sessionId, commitMessage })将同步的变更提交到本地仓库,并取消同步状态。
服务架构
前端服务
前端基于React 19和TypeScript构建,采用Tailwind CSS进行样式设计,使用Zustand进行状态管理,React Query处理数据获取和缓存。核心组件包括会话列表、聊天界面、差异查看器和同步状态指示器。
前端通过Tauri的IPC机制与后端通信,主要使用以下钩子:
useTauriCommand.ts- Tauri IPC命令的包装器useSession.ts- 会话操作相关的钩子useSyncState.ts- 同步状态跟踪钩子useMessages.ts- 消息操作钩子
后端服务
后端使用Rust编写,基于Tauri 2.0框架,主要包含以下服务模块:
ClaudeService
src-tauri/src/services/claude_service.rs负责管理与Claude Code的交互,包括发送消息、处理流式响应和解析消息历史。核心方法包括:
send_message- 向Claude发送消息并返回流接收器get_message_history- 获取会话的消息历史
DockerService
管理Docker容器的生命周期,包括创建、启动、停止和删除容器,以及执行容器内命令。
SessionManager
src-tauri/src/commands/sessions.rs处理会话的创建、查询、更新和删除,协调容器设置和状态跟踪。
SyncCoordinator
处理会话与本地仓库的同步逻辑,包括应用变更、检测冲突和恢复干净状态。
数据模型
会话模型
会话是Opslane的核心实体,包含以下主要字段:
pub struct Session { pub id: String, pub name: String, pub project_id: String, pub local_repo_path: String, pub base_branch: String, pub container_id: Option<String>, pub container_branch: String, pub status: String, // created, running, idle, synced, completed, error pub created_at: String, pub updated_at: String, pub last_activity: Option<String>, pub message_count: i32, pub files_changed: i32, pub is_archived: bool, }消息模型
消息记录用户与Claude的交互,包含以下类型:
pub enum ContentBlock { Text { text: String }, ToolUse { id: String, name: String, input: JsonValue }, ToolResult { tool_use_id: String, content: String, is_error: bool }, Thinking { thinking: String, signature: Option<String> }, FileHistorySnapshot { message_id: String, tracked_files: JsonValue, is_snapshot_update: bool }, }同步状态模型
跟踪当前同步状态,确保一次只有一个会话同步到本地:
pub struct SyncState { pub synced_session_id: Option<String>, pub stash_id: Option<String>, pub synced_at: Option<String>, }事件系统
Opslane使用事件驱动架构,前端可以监听以下关键事件:
会话事件
session-created- 新会话创建时触发session-status-changed- 会话状态更新时触发session-deleted- 会话删除时触发session-archived- 会话归档时触发session-unarchived- 会话取消归档时触发
同步事件
sync:state-changed- 同步状态变更时触发
消息流事件
session:${sessionId}:stream- 接收Claude的流式输出session:${sessionId}:status- 会话状态更新
错误处理
Opslane API提供了全面的错误处理机制,主要错误类型包括:
- 会话操作错误(创建、删除、更新失败)
- 容器管理错误(Docker不可用、容器创建失败)
- 同步错误(冲突检测、应用失败)
- 消息处理错误(发送失败、解析错误)
错误信息通常包含详细的描述,帮助开发者诊断问题。例如,当Docker不可用时,会返回明确的错误消息并建议安装Docker Desktop。
使用示例
创建并使用会话
// 创建会话 const session = await invoke('create_session', { name: '新功能开发', project_id: 'project-123', repoPath: '/path/to/local/repo', baseBranch: 'main' }); // 监听会话状态变化 listen('session-status-changed', (event) => { if (event.payload.session_id === session.id) { console.log('会话状态更新:', event.payload.status); if (event.payload.status === 'ready') { // 会话准备就绪,可以发送消息 sendFirstMessage(session.id); } } }); // 发送消息 async function sendFirstMessage(sessionId) { const receiver = await invoke('send_message', { sessionId, content: '帮我实现一个用户认证功能', model: 'sonnet' }); // 处理流式响应 receiver.on('message', (event) => { if (event.type === 'text_delta') { updateChatUI(event.content); } else if (event.type === 'complete') { console.log('消息处理完成'); } }); }同步会话变更
// 同步会话到本地 async function syncSession(sessionId) { try { await invoke('sync_to_local', { sessionId }); showNotification('会话已成功同步到本地仓库'); // 监听同步状态变化 listen('sync:state-changed', (event) => { updateSyncStatusUI(event.payload); }); } catch (error) { showError('同步失败:', error); } } // 应用并保留变更 async function applyChanges(sessionId, commitMessage) { try { await invoke('apply_and_keep', { sessionId, commitMessage }); showNotification('变更已成功提交到本地仓库'); } catch (error) { showError('提交失败:', error); } }总结
Opslane提供了一套全面的API,使开发者能够轻松管理多个Claude Code会话,实现与本地开发环境的无缝集成。通过理解核心命令、服务架构和数据模型,开发者可以充分利用Opslane的强大功能,提高开发效率。无论是创建会话、发送消息还是同步变更,Opslane的API都提供了简洁而强大的接口,帮助开发者更高效地使用AI辅助开发工具。
如果你想深入了解更多细节,可以查阅项目的官方文档:docs/和架构规范:specs/architecture.md。
【免费下载链接】opslaneRun multiple Claude Code sessions in parallel项目地址: https://gitcode.com/gh_mirrors/op/opslane
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考