bus

package
v0.2.4 Latest Latest
Warning

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

Go to latest
Published: Mar 25, 2026 License: MIT Imports: 5 Imported by: 1

Documentation

Index

Constants

This section is empty.

Variables

View Source
var ErrBusClosed = errors.New("message bus closed")

ErrBusClosed is returned when publishing to a closed MessageBus.

Functions

This section is empty.

Types

type InboundMessage

type InboundMessage struct {
	Channel    string            `json:"channel"`
	SenderID   string            `json:"sender_id"`
	Sender     SenderInfo        `json:"sender"`
	ChatID     string            `json:"chat_id"`
	Content    string            `json:"content"`
	Media      []string          `json:"media,omitempty"`
	Peer       Peer              `json:"peer"`                  // routing peer
	MessageID  string            `json:"message_id,omitempty"`  // platform message ID
	MediaScope string            `json:"media_scope,omitempty"` // media lifecycle scope
	SessionKey string            `json:"session_key"`
	Metadata   map[string]string `json:"metadata,omitempty"`
}

type MediaPart added in v0.2.0

type MediaPart struct {
	Type        string `json:"type"`                   // "image" | "audio" | "video" | "file"
	Ref         string `json:"ref"`                    // media store ref, e.g. "media://abc123"
	Caption     string `json:"caption,omitempty"`      // optional caption text
	Filename    string `json:"filename,omitempty"`     // original filename hint
	ContentType string `json:"content_type,omitempty"` // MIME type hint
}

MediaPart describes a single media attachment to send.

type MessageBus

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

func NewMessageBus

func NewMessageBus() *MessageBus

func (*MessageBus) Close

func (mb *MessageBus) Close()

func (*MessageBus) GetStreamer added in v0.2.4

func (mb *MessageBus) GetStreamer(ctx context.Context, channel, chatID string) (Streamer, bool)

GetStreamer returns a Streamer for the given channel+chatID via the delegate.

func (*MessageBus) InboundChan added in v0.2.4

func (mb *MessageBus) InboundChan() <-chan InboundMessage

func (*MessageBus) OutboundChan added in v0.2.4

func (mb *MessageBus) OutboundChan() <-chan OutboundMessage

func (*MessageBus) OutboundMediaChan added in v0.2.4

func (mb *MessageBus) OutboundMediaChan() <-chan OutboundMediaMessage

func (*MessageBus) PublishInbound

func (mb *MessageBus) PublishInbound(ctx context.Context, msg InboundMessage) error

func (*MessageBus) PublishOutbound

func (mb *MessageBus) PublishOutbound(ctx context.Context, msg OutboundMessage) error

func (*MessageBus) PublishOutboundMedia added in v0.2.0

func (mb *MessageBus) PublishOutboundMedia(ctx context.Context, msg OutboundMediaMessage) error

func (*MessageBus) SetStreamDelegate added in v0.2.4

func (mb *MessageBus) SetStreamDelegate(d StreamDelegate)

SetStreamDelegate registers a StreamDelegate (typically the channel Manager).

type OutboundMediaMessage added in v0.2.0

type OutboundMediaMessage struct {
	Channel string      `json:"channel"`
	ChatID  string      `json:"chat_id"`
	Parts   []MediaPart `json:"parts"`
}

OutboundMediaMessage carries media attachments from Agent to channels via the bus.

type OutboundMessage

type OutboundMessage struct {
	Channel          string `json:"channel"`
	ChatID           string `json:"chat_id"`
	Content          string `json:"content"`
	ReplyToMessageID string `json:"reply_to_message_id,omitempty"`
}

type Peer added in v0.2.0

type Peer struct {
	Kind string `json:"kind"` // "direct" | "group" | "channel" | ""
	ID   string `json:"id"`
}

Peer identifies the routing peer for a message (direct, group, channel, etc.)

type SenderInfo added in v0.2.0

type SenderInfo struct {
	Platform    string `json:"platform,omitempty"`     // "telegram", "discord", "slack", ...
	PlatformID  string `json:"platform_id,omitempty"`  // raw platform ID, e.g. "123456"
	CanonicalID string `json:"canonical_id,omitempty"` // "platform:id" format
	Username    string `json:"username,omitempty"`     // username (e.g. @alice)
	DisplayName string `json:"display_name,omitempty"` // display name
}

SenderInfo provides structured sender identity information.

type StreamDelegate added in v0.2.4

type StreamDelegate interface {
	// GetStreamer returns a Streamer for the given channel+chatID if the channel
	// supports streaming. Returns nil, false if streaming is unavailable.
	GetStreamer(ctx context.Context, channel, chatID string) (Streamer, bool)
}

StreamDelegate is implemented by the channel Manager to provide streaming capabilities to the agent loop without tight coupling.

type Streamer added in v0.2.4

type Streamer interface {
	Update(ctx context.Context, content string) error
	Finalize(ctx context.Context, content string) error
	Cancel(ctx context.Context)
}

Streamer pushes incremental content to a streaming-capable channel. Defined here so the agent loop can use it without importing pkg/channels.

Jump to

Keyboard shortcuts

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