Documentation
¶
Index ¶
- Constants
- Variables
- func BuildDataPartMap(part opencode.Part) map[string]any
- func CanonicalGeneratedFiles(uiMessage map[string]any) []bridgeadapter.GeneratedFileRef
- func CanonicalReasoningText(uiMessage map[string]any) string
- func CanonicalToolCalls(uiMessage map[string]any) []bridgeadapter.ToolCallMetadata
- func OpenCodeInstanceID(baseURL, username string) string
- func OpenCodeManagedInstanceID(loginID, directory string) string
- func OpenCodeManagedLauncherID(loginID string) string
- func OpenCodePortalKey(loginID networkid.UserLoginID, instanceID, sessionID string) networkid.PortalKey
- func OpenCodeUserID(instanceID string) networkid.UserID
- func ParseOpenCodeGhostID(ghostID string) (string, bool)
- func ParseOpenCodeIdentifier(identifier string) (string, bool)
- type Bridge
- func (b *Bridge) AbortSession(ctx context.Context, instanceID, sessionID string) error
- func (b *Bridge) CreateSessionChat(ctx context.Context, instanceID, title string, pendingTitle bool) (*bridgev2.CreateChatResponse, error)
- func (b *Bridge) DisconnectAll()
- func (b *Bridge) DisplayName(instanceID string) string
- func (b *Bridge) EnsureGhostDisplayName(ctx context.Context, instanceID string)
- func (b *Bridge) FetchMessages(ctx context.Context, params bridgev2.FetchMessagesParams) (*bridgev2.FetchMessagesResponse, error)
- func (b *Bridge) HandleMatrixDeleteChat(ctx context.Context, msg *bridgev2.MatrixDeleteChat) error
- func (b *Bridge) HandleMatrixMessage(ctx context.Context, msg *bridgev2.MatrixMessage, portal *bridgev2.Portal, ...) (*bridgev2.MatrixMessageResponse, error)
- func (b *Bridge) InstanceConfig(instanceID string) *OpenCodeInstance
- func (b *Bridge) ReIDPortalToSession(ctx context.Context, portal *bridgev2.Portal, instanceID, sessionID string) (*bridgev2.Portal, error)
- func (b *Bridge) ResolveApprovalDecision(ctx context.Context, roomID id.RoomID, approvalID string, ...) error
- func (b *Bridge) RestoreConnections(ctx context.Context) error
- type GeneratedFileRef
- type Host
- type MessageMetadata
- type OpenCodeInstance
- type OpenCodeManager
- func (m *OpenCodeManager) AbortSession(ctx context.Context, instanceID, sessionID string) error
- func (m *OpenCodeManager) Connect(ctx context.Context, baseURL, password, username string) (*openCodeInstance, int, error)
- func (m *OpenCodeManager) CreateSession(ctx context.Context, instanceID, title, directory string) (*opencode.Session, error)
- func (m *OpenCodeManager) DeleteSession(ctx context.Context, instanceID, sessionID string) error
- func (m *OpenCodeManager) DisconnectAll()
- func (m *OpenCodeManager) EnsureManagedInstance(ctx context.Context, launcherID, workingDir string) (*openCodeInstance, error)
- func (m *OpenCodeManager) IsConnected(instanceID string) bool
- func (m *OpenCodeManager) RemoveInstance(ctx context.Context, instanceID string) error
- func (m *OpenCodeManager) RestoreConnections(ctx context.Context) error
- func (m *OpenCodeManager) SendMessage(ctx context.Context, instanceID, sessionID string, parts []opencode.PartInput, ...) error
- func (m *OpenCodeManager) UpdateSessionTitle(ctx context.Context, instanceID, sessionID, title string) (*opencode.Session, error)
- type PortalMeta
- type ToolCallMetadata
Constants ¶
const ( OpenCodeModeRemote = "remote" OpenCodeModeManagedLauncher = "managed_launcher" OpenCodeModeManaged = "managed" )
Variables ¶
var ( ErrInstanceNotFound = bridgeError("OpenCode instance not found") )
Functions ¶
func BuildDataPartMap ¶
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 ¶
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 OpenCodePortalKey ¶
func OpenCodePortalKey(loginID networkid.UserLoginID, instanceID, sessionID string) networkid.PortalKey
func OpenCodeUserID ¶
func ParseOpenCodeGhostID ¶
func ParseOpenCodeIdentifier ¶
Types ¶
type Bridge ¶
type Bridge struct {
// contains filtered or unexported fields
}
Bridge coordinates OpenCode sessions with Matrix rooms.
func (*Bridge) AbortSession ¶
func (*Bridge) CreateSessionChat ¶
func (*Bridge) DisconnectAll ¶
func (b *Bridge) DisconnectAll()
func (*Bridge) DisplayName ¶
func (*Bridge) EnsureGhostDisplayName ¶
func (*Bridge) FetchMessages ¶
func (b *Bridge) FetchMessages(ctx context.Context, params bridgev2.FetchMessagesParams) (*bridgev2.FetchMessagesResponse, error)
func (*Bridge) HandleMatrixDeleteChat ¶
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 (*Bridge) ResolveApprovalDecision ¶
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) CreateSession ¶
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 (*OpenCodeManager) UpdateSessionTitle ¶
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
Source Files
¶
- backfill.go
- backfill_canonical.go
- bridge.go
- cache.go
- canonical_extract.go
- message_metadata.go
- mime.go
- opencode_canonical_stream.go
- opencode_delete.go
- opencode_ghost.go
- opencode_helpers.go
- opencode_identifiers.go
- opencode_instance_state.go
- opencode_managed.go
- opencode_manager.go
- opencode_media.go
- opencode_messages.go
- opencode_parts.go
- opencode_portal.go
- opencode_text_stream.go
- opencode_tool_stream.go
- opencode_turn_stream.go
- stream_metadata.go