-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathremote_events.go
More file actions
87 lines (71 loc) · 2.31 KB
/
remote_events.go
File metadata and controls
87 lines (71 loc) · 2.31 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
package agentremote
import (
"context"
"fmt"
"time"
"github.com/google/uuid"
"github.com/rs/zerolog"
"maunium.net/go/mautrix/bridgev2"
"maunium.net/go/mautrix/bridgev2/database"
"maunium.net/go/mautrix/bridgev2/networkid"
"github.com/beeper/agentremote/turns"
)
var (
_ bridgev2.RemoteEdit = (*RemoteEdit)(nil)
_ bridgev2.RemoteEventWithTimestamp = (*RemoteEdit)(nil)
_ bridgev2.RemoteEventWithStreamOrder = (*RemoteEdit)(nil)
)
// RemoteEdit is a bridge-agnostic RemoteEdit implementation backed by pre-built content.
type RemoteEdit struct {
Portal networkid.PortalKey
Sender bridgev2.EventSender
TargetMessage networkid.MessageID
Timestamp time.Time
// StreamOrder overrides timestamp-based ordering when the caller has a stable upstream order.
StreamOrder int64
PreBuilt *bridgev2.ConvertedEdit
// LogKey is the zerolog field name used in AddLogContext (e.g. "ai_edit_target", "codex_edit_target").
LogKey string
}
func (e *RemoteEdit) GetType() bridgev2.RemoteEventType {
return bridgev2.RemoteEventEdit
}
func (e *RemoteEdit) GetPortalKey() networkid.PortalKey {
return e.Portal
}
func (e *RemoteEdit) AddLogContext(c zerolog.Context) zerolog.Context {
return c.Str(e.LogKey, string(e.TargetMessage))
}
func (e *RemoteEdit) GetSender() bridgev2.EventSender {
return e.Sender
}
func (e *RemoteEdit) GetTargetMessage() networkid.MessageID {
return e.TargetMessage
}
func (e *RemoteEdit) GetTimestamp() time.Time {
if e.Timestamp.IsZero() {
e.Timestamp = time.Now()
}
return e.Timestamp
}
func (e *RemoteEdit) GetStreamOrder() int64 {
if e.StreamOrder != 0 {
return e.StreamOrder
}
return e.GetTimestamp().UnixMilli()
}
func (e *RemoteEdit) ConvertEdit(_ context.Context, _ *bridgev2.Portal, _ bridgev2.MatrixAPI, existing []*database.Message) (*bridgev2.ConvertedEdit, error) {
if e.PreBuilt != nil && len(existing) > 0 {
for i := range e.PreBuilt.ModifiedParts {
if e.PreBuilt.ModifiedParts[i].Part == nil && i < len(existing) {
e.PreBuilt.ModifiedParts[i].Part = existing[i]
}
}
}
turns.EnsureDontRenderEdited(e.PreBuilt)
return e.PreBuilt, nil
}
// NewMessageID generates a unique message ID in the format "prefix:uuid".
func NewMessageID(prefix string) networkid.MessageID {
return networkid.MessageID(fmt.Sprintf("%s:%s", prefix, uuid.NewString()))
}