feat: forward AgentDelegation on PostMessage
Stage 8 Chat SDK support for Mira→Red Queen INVESTIGATE routing metadata. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
parent
2c1f9359fa
commit
a1a4108303
@ -134,6 +134,9 @@ type PostMessageRequest struct {
|
|||||||
Content string
|
Content string
|
||||||
ReplyToMessageID string
|
ReplyToMessageID string
|
||||||
IdempotencyKey string
|
IdempotencyKey string
|
||||||
|
// Optional machine-readable delegation metadata (AgentDelegation).
|
||||||
|
// Nil means no delegation; forwarded as-is to AgentPostMessage.
|
||||||
|
Delegation *pb.AgentDelegation
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Client) PostMessage(ctx context.Context, req PostMessageRequest) (*pb.PostMessageResponse, error) {
|
func (c *Client) PostMessage(ctx context.Context, req PostMessageRequest) (*pb.PostMessageResponse, error) {
|
||||||
@ -144,6 +147,7 @@ func (c *Client) PostMessage(ctx context.Context, req PostMessageRequest) (*pb.P
|
|||||||
TopicId: req.TopicID,
|
TopicId: req.TopicID,
|
||||||
Content: req.Content,
|
Content: req.Content,
|
||||||
IdempotencyKey: req.IdempotencyKey,
|
IdempotencyKey: req.IdempotencyKey,
|
||||||
|
Delegation: req.Delegation,
|
||||||
}
|
}
|
||||||
if req.ReplyToMessageID != "" {
|
if req.ReplyToMessageID != "" {
|
||||||
replyTo := req.ReplyToMessageID
|
replyTo := req.ReplyToMessageID
|
||||||
|
|||||||
@ -289,6 +289,42 @@ func TestPostMessageUsesAgentPostMessageAndPreservesIdempotencyKey(t *testing.T)
|
|||||||
if len(fake.postReqs) != 1 || fake.postReqs[0].GetIdempotencyKey() != "logical-key" {
|
if len(fake.postReqs) != 1 || fake.postReqs[0].GetIdempotencyKey() != "logical-key" {
|
||||||
t.Fatalf("AgentPostMessage reqs = %+v", fake.postReqs)
|
t.Fatalf("AgentPostMessage reqs = %+v", fake.postReqs)
|
||||||
}
|
}
|
||||||
|
if fake.postReqs[0].GetDelegation() != nil {
|
||||||
|
t.Fatalf("expected nil delegation, got %+v", fake.postReqs[0].GetDelegation())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestPostMessageForwardsDelegationMetadata(t *testing.T) {
|
||||||
|
fake := newFake()
|
||||||
|
c := newClientForTest(t, fake)
|
||||||
|
delegation := &pb.AgentDelegation{
|
||||||
|
TargetAuthorId: "22222222-2222-2222-2222-222222222222",
|
||||||
|
Kind: "INVESTIGATE",
|
||||||
|
}
|
||||||
|
_, err := c.PostMessage(context.Background(), PostMessageRequest{
|
||||||
|
TopicID: "topic",
|
||||||
|
Content: "please investigate",
|
||||||
|
IdempotencyKey: "deleg-key",
|
||||||
|
Delegation: delegation,
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
fake.mu.Lock()
|
||||||
|
defer fake.mu.Unlock()
|
||||||
|
if fake.genericPosts != 0 {
|
||||||
|
t.Fatal("generic PostMessage must not be called")
|
||||||
|
}
|
||||||
|
if len(fake.postReqs) != 1 {
|
||||||
|
t.Fatalf("AgentPostMessage reqs = %+v", fake.postReqs)
|
||||||
|
}
|
||||||
|
got := fake.postReqs[0].GetDelegation()
|
||||||
|
if got == nil {
|
||||||
|
t.Fatal("expected delegation to be forwarded")
|
||||||
|
}
|
||||||
|
if got.GetTargetAuthorId() != delegation.TargetAuthorId || got.GetKind() != delegation.Kind {
|
||||||
|
t.Fatalf("delegation = %+v, want %+v", got, delegation)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestOrderedCumulativeACKWithSequenceGaps(t *testing.T) {
|
func TestOrderedCumulativeACKWithSequenceGaps(t *testing.T) {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user