Add inline persistent Agent mentions
TestFlight / Build and upload (push) Successful in 1m57s

This commit is contained in:
Sybil Agent
2026-10-29 18:28:52 -07:00
parent 35a6c537ad
commit 5d738f897b
23 changed files with 1772 additions and 44 deletions
+2 -1
View File
@@ -149,6 +149,7 @@ export type SearchRunRequest = {
};
export type CompletionRequestMessage = {
id?: string;
role: "system" | "user" | "assistant" | "tool";
content: string;
name?: string;
@@ -186,7 +187,7 @@ type CompletionResponse = {
};
type CompletionStreamHandlers = {
onMeta?: (payload: { chatId: string | null; callId: string | null; provider: Provider; model: string }) => void;
onMeta?: (payload: { chatId: string | null; callId: string | null; provider: Provider; model: string; agentAside?: boolean }) => void;
onToolCall?: (payload: ToolCallEvent) => void;
onDelta?: (payload: { text: string }) => void;
onDone?: (payload: { text: string; usage?: { inputTokens?: number; outputTokens?: number; totalTokens?: number } }) => void;
+13
View File
@@ -6,6 +6,8 @@ export type StreamingAssistantMetadata = {
kind: typeof STREAMING_ASSISTANT_METADATA_KIND;
ephemeralTrace: string | null;
traceRevision: number;
agentAside?: true;
status?: "sending" | "complete";
};
export type StreamingAttemptState = {
@@ -39,6 +41,8 @@ export function asStreamingAssistantMetadata(value: unknown): StreamingAssistant
typeof record.traceRevision === "number" && Number.isFinite(record.traceRevision)
? Math.max(0, Math.floor(record.traceRevision))
: 0,
...(record.agentAside === true ? { agentAside: true as const } : {}),
...(record.status === "sending" || record.status === "complete" ? { status: record.status } : {}),
};
}
@@ -98,6 +102,7 @@ export function setStreamingAssistantSegment(messages: Message[], assistantMessa
metadata: {
...metadata,
ephemeralTrace: null,
...(metadata.agentAside ? { status: "complete" as const } : {}),
} satisfies StreamingAssistantMetadata,
}));
}
@@ -128,6 +133,14 @@ export function finalizeStreamingAssistant(messages: Message[], assistantMessage
}));
}
export function markStreamingAssistantAsAgentAside(messages: Message[], assistantMessagePrefix: string) {
return updateStreamingAssistant(messages, assistantMessagePrefix, (message, metadata) => ({
...message,
name: "Sybil Agent",
metadata: { ...metadata, agentAside: true, status: "sending" },
}));
}
export function clearStreamingAssistantTrace(messages: Message[], assistantMessagePrefix: string) {
return updateStreamingAssistant(messages, assistantMessagePrefix, (message, metadata) => ({
...message,