Skip to content

统一客户端

CursorClient 提供了一个统一的访问点,用于访问所有 Cursor IDE 的数据。它简化了多个 Reader 的管理,并提供了缓存、日志和资源管理等功能。

创建客户端

基本用法

go
package main

import (
    "log"
    cursor "github.com/vibe-coding-labs/go-cursor-sdk"
)

func main() {
    // 使用默认配置创建客户端
    client, err := cursor.NewCursorClient(nil)
    if err != nil {
        log.Fatal(err)
    }
    defer client.Close()
    
    // 使用客户端访问数据
    sessions, err := client.Sessions().ListSessions()
    if err != nil {
        log.Fatal(err)
    }
}

自定义配置

go
config := &cursor.ClientConfig{
    // 启用缓存
    EnableCache: true,
    CacheTTL:    5 * time.Minute,
    
    // 启用数据监听
    EnableWatcher: true,
    
    // 设置日志级别
    LogLevel: cursor.LogLevelInfo,
    
    // 自定义存储路径(可选)
    StoragePath: "/custom/path/to/cursor/storage",
}

client, err := cursor.NewCursorClient(config)
if err != nil {
    log.Fatal(err)
}
defer client.Close()

访问不同的 Reader

CursorClient 提供了便捷的方法来访问各种 Reader:

会话数据

go
// 访问会话 Reader
sessionReader := client.Sessions()
sessions, err := sessionReader.ListSessions()

Composer 数据

go
// 访问 Composer Reader
composerReader := client.Composers()
composers, err := composerReader.ListComposers()

统计数据

go
// 访问统计 Reader
statsReader := client.Stats()
stats, err := statsReader.GetDailyStats(time.Now())

配置数据

go
// 访问配置 Reader
configReader := client.Config()
userConfig, err := configReader.GetUserConfig()

终端历史

go
// 访问终端历史 Reader
terminalReader := client.TerminalHistory()
history, err := terminalReader.GetHistory()

MCP 服务

go
// 访问 MCP 服务 Reader
mcpReader := client.MCPService()
mcpData, err := mcpReader.GetMCPServiceData()

Agent 布局

go
// 访问 Agent 布局 Reader
layoutReader := client.AgentLayout()
layout, err := layoutReader.GetAgentLayout()

资源管理

CursorClient 会自动管理所有 Reader 的生命周期。当调用 Close() 方法时,所有打开的数据库连接和资源都会被正确释放。

go
client, err := cursor.NewCursorClient(config)
if err != nil {
    log.Fatal(err)
}

// 确保资源被释放
defer client.Close()

// 使用客户端...

错误处理

CursorClient 提供了详细的错误信息:

go
client, err := cursor.NewCursorClient(config)
if err != nil {
    switch {
    case errors.Is(err, cursor.ErrStorageNotFound):
        log.Fatal("Cursor 存储路径未找到")
    case errors.Is(err, cursor.ErrDatabaseOpen):
        log.Fatal("无法打开数据库")
    default:
        log.Fatal(err)
    }
}

完整示例

go
package main

import (
    "fmt"
    "log"
    "time"
    
    cursor "github.com/vibe-coding-labs/go-cursor-sdk"
)

func main() {
    // 创建配置
    config := &cursor.ClientConfig{
        EnableCache:   true,
        CacheTTL:      5 * time.Minute,
        EnableWatcher: false,
        LogLevel:      cursor.LogLevelInfo,
    }
    
    // 创建客户端
    client, err := cursor.NewCursorClient(config)
    if err != nil {
        log.Fatal(err)
    }
    defer client.Close()
    
    // 访问会话数据
    sessions, err := client.Sessions().ListSessions()
    if err != nil {
        log.Fatal(err)
    }
    fmt.Printf("找到 %d 个会话\n", len(sessions))
    
    // 访问 Composer 数据
    composers, err := client.Composers().ListComposers()
    if err != nil {
        log.Fatal(err)
    }
    fmt.Printf("找到 %d 个 Composer\n", len(composers))
    
    // 访问统计数据
    stats, err := client.Stats().GetStatsRange(
        time.Now().AddDate(0, 0, -7),
        time.Now(),
    )
    if err != nil {
        log.Fatal(err)
    }
    fmt.Printf("最近 7 天的统计数据:%d 条记录\n", len(stats))
    
    // 访问配置
    userConfig, err := client.Config().GetUserConfig()
    if err != nil {
        log.Fatal(err)
    }
    fmt.Printf("用户邮箱:%s\n", userConfig.Email)
}

下一步

Released under the MIT License.