Documentation
¶
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type AccessLevel ¶
type AccessLevel string
AccessLevel represents the level of access a user has to a conversation group.
const ( AccessLevelOwner AccessLevel = "owner" AccessLevelManager AccessLevel = "manager" AccessLevelWriter AccessLevel = "writer" AccessLevelReader AccessLevel = "reader" )
func (AccessLevel) IsAtLeast ¶
func (a AccessLevel) IsAtLeast(level AccessLevel) bool
IsAtLeast returns true if the access level is at least the given level.
type Attachment ¶
type Attachment struct {
ID uuid.UUID `json:"id" gorm:"primaryKey;type:uuid"`
StorageKey *string `json:"storageKey,omitempty"`
Filename *string `json:"filename,omitempty"`
ContentType string `json:"contentType" gorm:"not null"`
Size *int64 `json:"size,omitempty"`
SHA256 *string `json:"sha256,omitempty"`
UserID string `json:"userId" gorm:"not null"`
EntryID *uuid.UUID `json:"entryId,omitempty" gorm:"type:uuid"`
Status string `json:"status" gorm:"not null;default:'ready'"`
SourceURL *string `json:"sourceUrl,omitempty"`
ExpiresAt *time.Time `json:"expiresAt,omitempty"`
CreatedAt time.Time `json:"createdAt" gorm:"not null;default:now()"`
ArchivedAt *time.Time `json:"archivedAt,omitempty"`
}
Attachment represents file attachment metadata.
func (Attachment) TableName ¶
func (Attachment) TableName() string
type Conversation ¶
type Conversation struct {
ID uuid.UUID `json:"id" gorm:"primaryKey;type:uuid"`
Title []byte `json:"-" gorm:"type:bytea"` // encrypted
OwnerUserID string `json:"ownerUserId" gorm:"not null"`
ClientID string `json:"-" gorm:"not null"`
AgentID *string `json:"agentId,omitempty"`
Metadata map[string]interface{} `json:"metadata" gorm:"type:jsonb;serializer:json;not null;default:'{}'"` // JSONB
ConversationGroupID uuid.UUID `json:"-" gorm:"not null;type:uuid"`
ConversationGroup *ConversationGroup `json:"-" gorm:"foreignKey:ConversationGroupID"`
ForkedAtEntryID *uuid.UUID `json:"forkedAtEntryId,omitempty" gorm:"type:uuid"`
ForkedAtConversationID *uuid.UUID `json:"forkedAtConversationId,omitempty" gorm:"type:uuid"`
StartedByConversationID *uuid.UUID `json:"startedByConversationId,omitempty" gorm:"type:uuid"`
StartedByEntryID *uuid.UUID `json:"startedByEntryId,omitempty" gorm:"type:uuid"`
CreatedAt time.Time `json:"createdAt" gorm:"not null;default:now()"`
UpdatedAt time.Time `json:"updatedAt" gorm:"not null;default:now()"`
VectorizedAt *time.Time `json:"vectorizedAt,omitempty"`
ArchivedAt *time.Time `json:"archivedAt,omitempty"`
}
Conversation represents a single conversation within a group.
func (Conversation) TableName ¶
func (Conversation) TableName() string
type ConversationAncestryFilter ¶
type ConversationAncestryFilter string
ConversationAncestryFilter controls whether list operations return top-level or child conversations.
const ( ConversationAncestryRoots ConversationAncestryFilter = "roots" ConversationAncestryChildren ConversationAncestryFilter = "children" ConversationAncestryAll ConversationAncestryFilter = "all" )
type ConversationGroup ¶
type ConversationGroup struct {
ID uuid.UUID `json:"id" gorm:"primaryKey;type:uuid"`
CreatedAt time.Time `json:"createdAt" gorm:"not null;default:now()"`
ArchivedAt *time.Time `json:"archivedAt,omitempty"`
}
ConversationGroup is the root of a fork tree.
func (ConversationGroup) TableName ¶
func (ConversationGroup) TableName() string
type ConversationListMode ¶
type ConversationListMode string
ConversationListMode controls which conversations from each fork tree are returned.
const ( ListModeAll ConversationListMode = "all" ListModeRoots ConversationListMode = "roots" ListModeLatestFork ConversationListMode = "latest-fork" )
type ConversationMembership ¶
type ConversationMembership struct {
ConversationGroupID uuid.UUID `json:"-" gorm:"primaryKey;type:uuid"`
UserID string `json:"userId" gorm:"primaryKey"`
AccessLevel AccessLevel `json:"accessLevel" gorm:"not null"`
CreatedAt time.Time `json:"createdAt" gorm:"not null;default:now()"`
}
ConversationMembership tracks per-user access to a conversation group.
func (ConversationMembership) TableName ¶
func (ConversationMembership) TableName() string
type Entry ¶
type Entry struct {
ID uuid.UUID `json:"id" gorm:"primaryKey;type:uuid"`
ConversationID uuid.UUID `json:"conversationId" gorm:"not null;type:uuid"`
ConversationGroupID uuid.UUID `json:"-" gorm:"primaryKey;type:uuid"`
UserID *string `json:"userId,omitempty"`
ClientID *string `json:"clientId,omitempty"`
AgentID *string `json:"agentId,omitempty"`
Channel Channel `json:"channel" gorm:"not null"`
Epoch *int64 `json:"epoch,omitempty"`
ContentType string `json:"contentType" gorm:"not null"`
Content []byte `json:"-" gorm:"type:bytea;not null"` // encrypted
IndexedContent *string `json:"indexedContent,omitempty"`
IndexedAt *time.Time `json:"indexedAt,omitempty"`
CreatedAt time.Time `json:"createdAt" gorm:"not null;default:now()"`
}
Entry represents a message or context entry in a conversation.
func (Entry) MarshalJSON ¶
MarshalJSON serializes Entry to JSON, including the decrypted content as a raw JSON value. Content is stored as []byte with json:"-" to prevent GORM from leaking encrypted bytes, but API responses need to include the decrypted content.
func (*Entry) UnmarshalJSON ¶
UnmarshalJSON restores Entry from JSON including the decrypted content field. This keeps cache round-trips lossless for model.Entry values.
type Memory ¶
type Memory struct {
// ID is the primary key (UUID).
ID uuid.UUID `json:"id" gorm:"primaryKey;type:uuid;default:gen_random_uuid()"`
// Namespace is the RS-encoded namespace string (percent-encoded segments joined with \x1e).
// Clients always work with []string; this field is for storage only.
Namespace string `json:"-" gorm:"not null"`
// Key is the memory key, unique within a namespace (active rows only).
Key string `json:"key" gorm:"not null"`
// ValueEncrypted is the AES-256-GCM encrypted JSON value. Decrypted on read.
// NULL for tombstones (deleted/expired rows after eviction).
ValueEncrypted []byte `json:"-" gorm:"column:value_encrypted"`
// PolicyAttributes contains plaintext OPA-extracted attributes for server-side filtering.
// Never returned to clients.
PolicyAttributes map[string]interface{} `json:"-" gorm:"type:jsonb;serializer:json;column:policy_attributes"`
// IndexedContent contains caller-provided redacted text keyed by field path.
IndexedContent map[string]string `json:"-" gorm:"type:jsonb;serializer:json;column:indexed_content"`
// Kind records whether this row was a first write (0=add) or a subsequent write (1=update).
// Set at write time; never changed.
Kind int16 `json:"-" gorm:"not null;default:0;column:kind"`
// CreatedAt is when this row was written.
CreatedAt time.Time `json:"createdAt" gorm:"not null;default:now()"`
// ExpiresAt is the optional TTL expiry time. NULL means no expiry.
ExpiresAt *time.Time `json:"expiresAt" gorm:"column:expires_at"`
// ArchivedAt is set when the row is archived (superseded or key deleted).
ArchivedAt *time.Time `json:"-" gorm:"column:archived_at"`
// DeletedReason records why the row was deleted. NULL=active, 0=updated, 1=deleted, 2=expired.
DeletedReason *int16 `json:"-" gorm:"column:deleted_reason"`
// IndexedAt tracks vector index sync state. NULL means pending indexing.
IndexedAt *time.Time `json:"-" gorm:"column:indexed_at"`
}
Memory is a single namespaced episodic memory item. Each row in the memories table represents one write event. The active value of a (namespace, key) pair is the row where ArchivedAt IS NULL.
type MemoryVector ¶
type MemoryVector struct {
// MemoryID references the memories.id.
MemoryID uuid.UUID `gorm:"not null;primaryKey;column:memory_id"`
// FieldName is the JSON field name within the memory value that was embedded.
FieldName string `gorm:"not null;primaryKey;column:field_name"`
// Namespace is a redundant copy of the memory's encoded namespace for prefix filtering.
Namespace string `gorm:"not null;column:namespace"`
// PolicyAttributes is a redundant copy of the memory's policy_attributes for filtering.
PolicyAttributes map[string]interface{} `gorm:"type:jsonb;serializer:json;column:policy_attributes"`
}
MemoryVector stores the embedding for a single (memory_id, field_name) pair. One Memory can produce multiple MemoryVector rows (one per indexed field).
func (MemoryVector) TableName ¶
func (MemoryVector) TableName() string
TableName implements gorm.Tabler.
type OwnershipTransfer ¶
type OwnershipTransfer struct {
ID uuid.UUID `json:"id" gorm:"primaryKey;type:uuid"`
ConversationGroupID uuid.UUID `json:"-" gorm:"not null;type:uuid"`
FromUserID string `json:"fromUserId" gorm:"not null"`
ToUserID string `json:"toUserId" gorm:"not null"`
CreatedAt time.Time `json:"createdAt" gorm:"not null;default:now()"`
}
OwnershipTransfer represents a pending conversation ownership transfer.
func (OwnershipTransfer) TableName ¶
func (OwnershipTransfer) TableName() string
type Task ¶
type Task struct {
ID uuid.UUID `json:"id" gorm:"primaryKey;type:uuid"`
TaskName *string `json:"taskName,omitempty" gorm:"unique"`
TaskType string `json:"taskType" gorm:"not null"`
TaskBody map[string]interface{} `json:"taskBody" gorm:"type:jsonb;serializer:json;not null"`
CreatedAt time.Time `json:"createdAt" gorm:"not null;default:now()"`
RetryAt time.Time `json:"retryAt" gorm:"not null;default:now()"`
LastError *string `json:"lastError,omitempty"`
RetryCount int `json:"retryCount" gorm:"not null;default:0"`
}
Task represents a background task in the task queue.