Documentation
¶
Index ¶
- Constants
- Variables
- func OpenCodeInstanceID(baseURL, username 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) Connect(ctx context.Context, baseURL, password, username string) (*OpenCodeInstance, int, error)
- func (b *Bridge) CreateSessionChat(ctx context.Context, instanceID, title string, pendingTitle bool) (*bridgev2.CreateChatResponse, error)
- func (b *Bridge) DisconnectAll()
- func (b *Bridge) DispatchInternalMessage(ctx context.Context, portal *bridgev2.Portal, meta *PortalMeta, body string) (id.EventID, bool, error)
- 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) Host() Host
- func (b *Bridge) InstanceConfig(instanceID string) *OpenCodeInstance
- func (b *Bridge) IsAvailable() bool
- func (b *Bridge) IsConnected(instanceID string) bool
- func (b *Bridge) Manager() *OpenCodeManager
- func (b *Bridge) RemoveInstance(ctx context.Context, instanceID string) error
- func (b *Bridge) RestoreConnections(ctx context.Context) error
- type Host
- type OpenCodeInstance
- type OpenCodeManager
- func (m *OpenCodeManager) Connect(ctx context.Context, baseURL, password, username string) (*openCodeInstance, int, error)
- func (m *OpenCodeManager) CreateSession(ctx context.Context, instanceID, title string) (*opencode.Session, error)
- func (m *OpenCodeManager) DeleteSession(ctx context.Context, instanceID, sessionID string) error
- func (m *OpenCodeManager) DisconnectAll()
- 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 ResultStatus
- type TimingInfo
- type ToolCallData
- type ToolDisplay
- type ToolResultData
- type ToolResultDisplay
- type ToolStatus
- type ToolType
Constants ¶
const ( BeeperAIToolCallKey = matrixevents.BeeperAIToolCallKey BeeperAIToolResultKey = matrixevents.BeeperAIToolResultKey )
Variables ¶
var ( ErrInstanceNotFound = bridgeError("OpenCode instance not found") )
Functions ¶
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) CreateSessionChat ¶
func (*Bridge) DisconnectAll ¶
func (b *Bridge) DisconnectAll()
func (*Bridge) DispatchInternalMessage ¶
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) IsAvailable ¶
func (*Bridge) IsConnected ¶
func (*Bridge) Manager ¶
func (b *Bridge) Manager() *OpenCodeManager
func (*Bridge) RemoveInstance ¶
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) 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. 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 (*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
}
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" )
Source Files
¶
- backfill.go
- bridge.go
- bridge_helpers.go
- cache.go
- mime.go
- opencode_delete.go
- opencode_ghost.go
- opencode_helpers.go
- opencode_identifiers.go
- opencode_internal.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
- tool_events.go
- trace.go