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:
Kaien 2026-08-10 17:40:12 +03:00
parent 2c1f9359fa
commit a1a4108303
2 changed files with 40 additions and 0 deletions

View File

@ -134,6 +134,9 @@ type PostMessageRequest struct {
Content string
ReplyToMessageID 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) {
@ -144,6 +147,7 @@ func (c *Client) PostMessage(ctx context.Context, req PostMessageRequest) (*pb.P
TopicId: req.TopicID,
Content: req.Content,
IdempotencyKey: req.IdempotencyKey,
Delegation: req.Delegation,
}
if req.ReplyToMessageID != "" {
replyTo := req.ReplyToMessageID

View File

@ -289,6 +289,42 @@ func TestPostMessageUsesAgentPostMessageAndPreservesIdempotencyKey(t *testing.T)
if len(fake.postReqs) != 1 || fake.postReqs[0].GetIdempotencyKey() != "logical-key" {
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) {