opencodebridge

package
v0.0.0-...-f5fff41 Latest Latest
Warning

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

Go to latest
Published: Mar 4, 2026 License: MIT Imports: 35 Imported by: 0

Documentation

Index

Constants

View Source
const (
	ToolStatusPending   = matrixevents.ToolStatusPending
	ToolStatusRunning   = matrixevents.ToolStatusRunning
	ToolStatusCompleted = matrixevents.ToolStatusCompleted
	ToolStatusFailed    = matrixevents.ToolStatusFailed
)
View Source
const (
	ResultStatusSuccess = matrixevents.ResultStatusSuccess
	ResultStatusError   = matrixevents.ResultStatusError
)
View Source
const (
	ToolTypeBuiltin = matrixevents.ToolTypeBuiltin
)

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) AbortSession

func (b *Bridge) AbortSession(ctx context.Context, instanceID, sessionID string) 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) 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) InstanceConfig

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

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)
	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
}

OpenCodeManager coordinates connections to OpenCode server instances, dispatches SSE events, and manages session lifecycle.

func NewOpenCodeManager

func NewOpenCodeManager(bridge *Bridge) *OpenCodeManager

func (*OpenCodeManager) AbortSession

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

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, directory 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.

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
	AwaitingPath   bool
}

PortalMeta is the OpenCode-specific view of portal metadata.

type ResultStatus

type ResultStatus = matrixevents.ResultStatus

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 = matrixevents.ToolStatus

type ToolType

type ToolType = matrixevents.ToolType

Jump to

Keyboard shortcuts

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