opencodebridge

package
v0.0.0-...-6c5c7c9 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 16, 2026 License: MIT Imports: 31 Imported by: 0

Documentation

Index

Constants

View Source
const (
	BeeperAIToolCallKey   = matrixevents.BeeperAIToolCallKey
	BeeperAIToolResultKey = matrixevents.BeeperAIToolResultKey
)

Variables

View Source
var (
	ErrUnavailable      = bridgeError("OpenCode integration is not available")
	ErrInstanceNotFound = bridgeError("OpenCode instance not found")
)

Functions

func OpenCodeInstanceID

func OpenCodeInstanceID(baseURL, username string) string

func OpenCodePortalKey

func OpenCodePortalKey(loginID networkid.UserLoginID, instanceID, sessionID string) networkid.PortalKey

func OpenCodeUserID

func OpenCodeUserID(instanceID string) networkid.UserID

func ParseOpenCodeGhostID

func ParseOpenCodeGhostID(ghostID string) (string, bool)

func ParseOpenCodeIdentifier

func ParseOpenCodeIdentifier(identifier string) (string, bool)

Types

type Bridge

type Bridge struct {
	// contains filtered or unexported fields
}

Bridge coordinates OpenCode sessions with Matrix rooms.

func NewBridge

func NewBridge(host Host) *Bridge

func (*Bridge) Connect

func (b *Bridge) Connect(ctx context.Context, baseURL, password, username string) (*OpenCodeInstance, int, error)

func (*Bridge) CreateSessionChat

func (b *Bridge) CreateSessionChat(ctx context.Context, instanceID, title string, pendingTitle bool) (*bridgev2.CreateChatResponse, error)

func (*Bridge) DisconnectAll

func (b *Bridge) DisconnectAll()

func (*Bridge) DispatchInternalMessage

func (b *Bridge) DispatchInternalMessage(
	ctx context.Context,
	portal *bridgev2.Portal,
	meta *PortalMeta,
	body string,
) (id.EventID, bool, error)

func (*Bridge) DisplayName

func (b *Bridge) DisplayName(instanceID string) string

func (*Bridge) EnsureGhostDisplayName

func (b *Bridge) EnsureGhostDisplayName(ctx context.Context, instanceID string)

func (*Bridge) FetchMessages

func (*Bridge) HandleMatrixDeleteChat

func (b *Bridge) HandleMatrixDeleteChat(ctx context.Context, msg *bridgev2.MatrixDeleteChat) error

HandleMatrixDeleteChat deletes the remote OpenCode session when a chat is deleted.

func (*Bridge) HandleMatrixMessage

func (b *Bridge) HandleMatrixMessage(ctx context.Context, msg *bridgev2.MatrixMessage, portal *bridgev2.Portal, meta *PortalMeta) (*bridgev2.MatrixMessageResponse, error)

func (*Bridge) Host

func (b *Bridge) Host() Host

func (*Bridge) InstanceConfig

func (b *Bridge) InstanceConfig(instanceID string) *OpenCodeInstance

func (*Bridge) IsAvailable

func (b *Bridge) IsAvailable() bool

func (*Bridge) IsConnected

func (b *Bridge) IsConnected(instanceID string) bool

func (*Bridge) Manager

func (b *Bridge) Manager() *OpenCodeManager

func (*Bridge) RemoveInstance

func (b *Bridge) RemoveInstance(ctx context.Context, instanceID string) error

func (*Bridge) RestoreConnections

func (b *Bridge) RestoreConnections(ctx context.Context) error

type Host

type Host interface {
	Log() *zerolog.Logger
	Login() *bridgev2.UserLogin
	BackgroundContext(ctx context.Context) context.Context
	SendSystemNotice(ctx context.Context, portal *bridgev2.Portal, msg string)
	SendPendingStatus(ctx context.Context, portal *bridgev2.Portal, evt *event.Event, msg string)
	SendSuccessStatus(ctx context.Context, portal *bridgev2.Portal, evt *event.Event)
	EmitOpenCodeStreamEvent(ctx context.Context, portal *bridgev2.Portal, turnID, agentID, targetEventID string, part map[string]any)
	FinishOpenCodeStream(turnID string)
	DownloadAndEncodeMedia(ctx context.Context, mediaURL string, file *event.EncryptedFileInfo, maxMB int) (string, string, error)
	SetRoomName(ctx context.Context, portal *bridgev2.Portal, name string) error
	SenderForOpenCode(instanceID string, fromMe bool) bridgev2.EventSender
	CleanupPortal(ctx context.Context, portal *bridgev2.Portal, reason string)
	PortalMeta(portal *bridgev2.Portal) *PortalMeta
	SetPortalMeta(portal *bridgev2.Portal, meta *PortalMeta)
	SavePortal(ctx context.Context, portal *bridgev2.Portal) error
	DefaultAgentID() string
	OpenCodeInstances() map[string]*OpenCodeInstance
	SaveOpenCodeInstances(ctx context.Context, instances map[string]*OpenCodeInstance) error
	HumanUserID(loginID networkid.UserLoginID) networkid.UserID
	RoomCapabilitiesEventType() event.Type
	RoomSettingsEventType() event.Type
}

Host provides the minimal surface area the OpenCode bridge needs to integrate with the surrounding connector.

type OpenCodeInstance

type OpenCodeInstance struct {
	ID       string `json:"id,omitempty"`
	URL      string `json:"url,omitempty"`
	Username string `json:"username,omitempty"`
	Password string `json:"password,omitempty"`
}

OpenCodeInstance stores connection details for an OpenCode server.

type OpenCodeManager

type OpenCodeManager struct {
	// contains filtered or unexported fields
}

func NewOpenCodeManager

func NewOpenCodeManager(bridge *Bridge) *OpenCodeManager

func (*OpenCodeManager) Connect

func (m *OpenCodeManager) Connect(ctx context.Context, baseURL, password, username string) (*openCodeInstance, int, error)

func (*OpenCodeManager) CreateSession

func (m *OpenCodeManager) CreateSession(ctx context.Context, instanceID, title string) (*opencode.Session, error)

func (*OpenCodeManager) DeleteSession

func (m *OpenCodeManager) DeleteSession(ctx context.Context, instanceID, sessionID string) error

func (*OpenCodeManager) DisconnectAll

func (m *OpenCodeManager) DisconnectAll()

DisconnectAll stops all in-memory OpenCode connections/event loops without modifying persisted instance metadata. Connections will be restored on next login connect.

func (*OpenCodeManager) IsConnected

func (m *OpenCodeManager) IsConnected(instanceID string) bool

func (*OpenCodeManager) RemoveInstance

func (m *OpenCodeManager) RemoveInstance(ctx context.Context, instanceID string) error

func (*OpenCodeManager) RestoreConnections

func (m *OpenCodeManager) RestoreConnections(ctx context.Context) error

func (*OpenCodeManager) SendMessage

func (m *OpenCodeManager) SendMessage(ctx context.Context, instanceID, sessionID string, parts []opencode.PartInput, eventID id.EventID) error

func (*OpenCodeManager) UpdateSessionTitle

func (m *OpenCodeManager) UpdateSessionTitle(ctx context.Context, instanceID, sessionID, title string) (*opencode.Session, error)

type PortalMeta

type PortalMeta struct {
	IsOpenCodeRoom bool
	InstanceID     string
	SessionID      string
	ReadOnly       bool
	TitlePending   bool
	Title          string
	TitleGenerated bool
	AgentID        string
	VerboseLevel   string
}

PortalMeta is the OpenCode-specific view of portal metadata.

type ResultStatus

type ResultStatus string

ResultStatus represents the status of a tool result.

const (
	ResultStatusSuccess ResultStatus = "success"
	ResultStatusError   ResultStatus = "error"
)

type TimingInfo

type TimingInfo struct {
	StartedAt    int64 `json:"started_at,omitempty"`
	FirstTokenAt int64 `json:"first_token_at,omitempty"`
	CompletedAt  int64 `json:"completed_at,omitempty"`
}

TimingInfo contains timing information for events.

type ToolCallData

type ToolCallData struct {
	CallID   string         `json:"call_id"`
	ToolName string         `json:"tool_name"`
	ToolType ToolType       `json:"tool_type"`
	Status   ToolStatus     `json:"status"`
	Input    map[string]any `json:"input,omitempty"`
	Display  *ToolDisplay   `json:"display,omitempty"`
	Timing   *TimingInfo    `json:"timing,omitempty"`
}

ToolCallData contains the tool call metadata.

type ToolDisplay

type ToolDisplay struct {
	Title     string `json:"title,omitempty"`
	Icon      string `json:"icon,omitempty"`
	Collapsed bool   `json:"collapsed,omitempty"`
}

ToolDisplay contains display hints for tool rendering.

type ToolResultData

type ToolResultData struct {
	CallID   string             `json:"call_id"`
	ToolName string             `json:"tool_name"`
	Status   ResultStatus       `json:"status"`
	Output   map[string]any     `json:"output,omitempty"`
	Display  *ToolResultDisplay `json:"display,omitempty"`
}

ToolResultData contains the tool result metadata.

type ToolResultDisplay

type ToolResultDisplay struct {
	Format          string `json:"format,omitempty"`
	Expandable      bool   `json:"expandable,omitempty"`
	DefaultExpanded bool   `json:"default_expanded,omitempty"`
	ShowStdout      bool   `json:"show_stdout,omitempty"`
	ShowArtifacts   bool   `json:"show_artifacts,omitempty"`
}

ToolResultDisplay contains display hints for tool result rendering.

type ToolStatus

type ToolStatus string

ToolStatus represents the state of a tool call.

const (
	ToolStatusPending   ToolStatus = "pending"
	ToolStatusRunning   ToolStatus = "running"
	ToolStatusCompleted ToolStatus = "completed"
	ToolStatusFailed    ToolStatus = "failed"
)

type ToolType

type ToolType string

ToolType identifies the category of tool.

const (
	ToolTypeBuiltin ToolType = "builtin"
)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL