opencodebridge

package
v0.0.0-...-c29cf6f Latest Latest
Warning

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

Go to latest
Published: Mar 10, 2026 License: MIT Imports: 42 Imported by: 0

Documentation

Index

Constants

View Source
const (
	OpenCodeModeRemote          = "remote"
	OpenCodeModeManagedLauncher = "managed_launcher"
	OpenCodeModeManaged         = "managed"
)

Variables

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

Functions

func BuildDataPartMap

func BuildDataPartMap(part opencode.Part) map[string]any

BuildDataPartMap builds a map representation of an opencode data part for streaming or backfill. Returns nil for unknown part types.

func CanonicalGeneratedFiles

func CanonicalGeneratedFiles(uiMessage map[string]any) []bridgeadapter.GeneratedFileRef

CanonicalGeneratedFiles extracts file references from a canonical UI message.

func CanonicalReasoningText

func CanonicalReasoningText(uiMessage map[string]any) string

CanonicalReasoningText extracts and joins all reasoning-type text from a canonical UI message.

func CanonicalToolCalls

func CanonicalToolCalls(uiMessage map[string]any) []bridgeadapter.ToolCallMetadata

CanonicalToolCalls extracts tool call metadata from a canonical UI message.

func OpenCodeInstanceID

func OpenCodeInstanceID(baseURL, username string) string

func OpenCodeManagedInstanceID

func OpenCodeManagedInstanceID(loginID, directory string) string

func OpenCodeManagedLauncherID

func OpenCodeManagedLauncherID(loginID 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) ReIDPortalToSession

func (b *Bridge) ReIDPortalToSession(ctx context.Context, portal *bridgev2.Portal, instanceID, sessionID string) (*bridgev2.Portal, error)

func (*Bridge) ResolveApprovalDecision

func (b *Bridge) ResolveApprovalDecision(ctx context.Context, roomID id.RoomID, approvalID string, approved, always bool, reason string, decidedBy id.UserID) error

func (*Bridge) RestoreConnections

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

type GeneratedFileRef

type GeneratedFileRef = bridgeadapter.GeneratedFileRef

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 MessageMetadata

type MessageMetadata struct {
	bridgeadapter.BaseMessageMetadata
	SessionID       string  `json:"session_id,omitempty"`
	MessageID       string  `json:"message_id,omitempty"`
	ParentMessageID string  `json:"parent_message_id,omitempty"`
	Agent           string  `json:"agent,omitempty"`
	ModelID         string  `json:"model_id,omitempty"`
	ProviderID      string  `json:"provider_id,omitempty"`
	Mode            string  `json:"mode,omitempty"`
	ErrorText       string  `json:"error_text,omitempty"`
	Cost            float64 `json:"cost,omitempty"`
	TotalTokens     int64   `json:"total_tokens,omitempty"`
}

func (*MessageMetadata) CopyFrom

func (mm *MessageMetadata) CopyFrom(other any)

type OpenCodeInstance

type OpenCodeInstance struct {
	ID               string `json:"id,omitempty"`
	Mode             string `json:"mode,omitempty"`
	URL              string `json:"url,omitempty"`
	Username         string `json:"username,omitempty"`
	Password         string `json:"password,omitempty"`
	HasPassword      bool   `json:"has_password,omitempty"`
	BinaryPath       string `json:"binary_path,omitempty"`
	DefaultDirectory string `json:"default_directory,omitempty"`
	WorkingDirectory string `json:"working_directory,omitempty"`
	LauncherID       string `json:"launcher_id,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) EnsureManagedInstance

func (m *OpenCodeManager) EnsureManagedInstance(ctx context.Context, launcherID, workingDir string) (*openCodeInstance, error)

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 ToolCallMetadata

type ToolCallMetadata = bridgeadapter.ToolCallMetadata

Jump to

Keyboard shortcuts

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