Repository navigation
Expand file tree
/
Copy pathjson-event.ts
More file actions
40 lines (33 loc) · 1.47 KB
/
Copy pathjson-event.ts
File metadata and controls
40 lines (33 loc) · 1.47 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
import type { AgentSessionEvent } from "../core/agent-session.ts";
type WithoutPartial<T> = T extends { partial: unknown } ? Omit<T, "partial"> : T;
type ToJsonEvent<T> = T extends {
type: "message_update";
assistantMessageEvent: infer TAssistantMessageEvent;
}
? {
type: "message_update";
assistantMessageEvent: WithoutPartial<TAssistantMessageEvent>;
}
: T;
/** Session event shape emitted by the JSON and RPC stdout protocols. */
export type JsonAgentSessionEvent = ToJsonEvent<AgentSessionEvent>;
type MessageUpdateEvent = Extract<AgentSessionEvent, { type: "message_update" }>;
type JsonMessageUpdateEvent = Extract<JsonAgentSessionEvent, { type: "message_update" }>;
/**
* Remove cumulative assistant snapshots from streaming wire events.
* `message_start` provides the initial message, deltas build it, and
* `message_end` provides the final authoritative message.
*/
export function toJsonEvent(event: MessageUpdateEvent): JsonMessageUpdateEvent;
export function toJsonEvent(event: AgentSessionEvent): JsonAgentSessionEvent;
export function toJsonEvent(event: AgentSessionEvent): JsonAgentSessionEvent {
if (event.type !== "message_update") {
return event;
}
const assistantMessageEvent = event.assistantMessageEvent;
if (!("partial" in assistantMessageEvent)) {
return { type: "message_update", assistantMessageEvent };
}
const { partial: _partial, ...deltaEvent } = assistantMessageEvent;
return { type: "message_update", assistantMessageEvent: deltaEvent };
}