@dbx-tools/shared-genie 0.6.211 → 0.6.213

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,200 @@
1
+ /**
2
+ * Browser-safe Genie Agent Mode SSE contracts.
3
+ *
4
+ * Schemas validate the stable Responses-style event envelope while preserving
5
+ * additive fields and output-item variants introduced by the beta API.
6
+ *
7
+ * @module
8
+ */
9
+ import { z } from "zod";
10
+ import { json, object } from "@dbx-tools/shared-core";
11
+ import { GenieMessageSchema, } from "./genie-model.js";
12
+ /** Agent Mode output content item with forward-compatible fields. */
13
+ export const GenieAgentContentSchema = z
14
+ .object({
15
+ type: z.string(),
16
+ text: z.string().optional(),
17
+ metadata: z.unknown().optional(),
18
+ })
19
+ .loose();
20
+ /** Agent Mode response output item with known projection fields. */
21
+ export const GenieAgentOutputItemSchema = z
22
+ .object({
23
+ type: z.string(),
24
+ id: z.string().optional(),
25
+ call_id: z.string().optional(),
26
+ name: z.string().optional(),
27
+ arguments: z.string().optional(),
28
+ output: z.string().optional(),
29
+ status: z.string().optional(),
30
+ content: z.array(GenieAgentContentSchema).optional(),
31
+ })
32
+ .loose();
33
+ /** Genie Agent Mode response carried by lifecycle events. */
34
+ export const GenieAgentResponseSchema = z
35
+ .object({
36
+ object: z.string().optional(),
37
+ id: z.string(),
38
+ model: z.string().optional(),
39
+ status: z.string(),
40
+ output: z.array(GenieAgentOutputItemSchema).optional(),
41
+ conversation_id: z.string().optional(),
42
+ created_at: z.number().optional(),
43
+ error: z.unknown().optional(),
44
+ })
45
+ .loose();
46
+ /** One SSE event from the Genie Agent Mode response stream. */
47
+ export const GenieAgentModeEventSchema = z
48
+ .object({
49
+ type: z.string(),
50
+ sequence_number: z.number().optional(),
51
+ output_index: z.number().optional(),
52
+ response: GenieAgentResponseSchema.optional(),
53
+ item: GenieAgentOutputItemSchema.optional(),
54
+ })
55
+ .loose();
56
+ /** Stateful pure reducer from Agent Mode SSE events to Genie message snapshots. */
57
+ export class GenieAgentModeProjection {
58
+ spaceId;
59
+ content;
60
+ items = new Map();
61
+ response;
62
+ constructor(spaceId, content) {
63
+ this.spaceId = spaceId;
64
+ this.content = content;
65
+ }
66
+ /** Apply one validated SSE event and return its projected snapshot. */
67
+ apply(event) {
68
+ if (event.response) {
69
+ this.response = event.response;
70
+ if (event.response.output) {
71
+ this.items.clear();
72
+ event.response.output.forEach((item, index) => {
73
+ this.items.set(agentItemKey(item, index), item);
74
+ });
75
+ }
76
+ }
77
+ if (event.item) {
78
+ this.items.set(agentItemKey(event.item, event.output_index), event.item);
79
+ }
80
+ if ((!event.response && !event.item) || !this.response)
81
+ return undefined;
82
+ return projectAgentModeMessage(this.spaceId, this.content, this.response, [
83
+ ...this.items.values(),
84
+ ]);
85
+ }
86
+ /** Current response id, once `response.created` has arrived. */
87
+ get responseId() {
88
+ return this.response?.id;
89
+ }
90
+ /** Current conversation id, once assigned by Genie. */
91
+ get conversationId() {
92
+ return this.response?.conversation_id;
93
+ }
94
+ /** Whether the latest response status is terminal. */
95
+ get terminal() {
96
+ return this.response ? isTerminalStatus(this.response.status) : false;
97
+ }
98
+ }
99
+ function isTerminalStatus(status) {
100
+ return status === "completed" || status === "failed" || status === "cancelled";
101
+ }
102
+ function agentItemKey(item, index) {
103
+ if (typeof item.id === "string")
104
+ return item.id;
105
+ if (typeof item.call_id === "string")
106
+ return item.call_id;
107
+ return String(typeof index === "number" ? index : (item.type ?? "item"));
108
+ }
109
+ /** Project one Agent Mode response snapshot onto the shared Genie message shape. */
110
+ export function projectAgentModeMessage(spaceId, content, response, items) {
111
+ const errorValue = object.isRecord(response.error) ? response.error : undefined;
112
+ const errorMessage = typeof errorValue?.message === "string"
113
+ ? errorValue.message
114
+ : typeof response.error === "string"
115
+ ? response.error
116
+ : undefined;
117
+ return GenieMessageSchema.parse({
118
+ id: response.id,
119
+ message_id: response.id,
120
+ space_id: spaceId,
121
+ conversation_id: response.conversation_id ?? "",
122
+ content,
123
+ status: agentModeStatus(response.status, items),
124
+ attachments: items.flatMap(itemAttachments),
125
+ ...(response.created_at !== undefined ? { created_timestamp: response.created_at } : {}),
126
+ ...(errorMessage ? { error: { error: errorMessage } } : {}),
127
+ });
128
+ }
129
+ function agentModeStatus(value, items) {
130
+ if (value === "completed")
131
+ return "COMPLETED";
132
+ if (value === "failed")
133
+ return "FAILED";
134
+ if (value === "cancelled")
135
+ return "CANCELLED";
136
+ if (items.some((item) => item.type === "function_call"))
137
+ return "EXECUTING_QUERY";
138
+ return "ASKING_AI";
139
+ }
140
+ function itemAttachments(item) {
141
+ const id = item.id ?? item.call_id;
142
+ if (item.type === "reasoning") {
143
+ const thoughts = contentText(item.content, "reasoning_text").map((thoughtContent) => ({
144
+ thought_type: "THOUGHT_TYPE_STEPS",
145
+ content: thoughtContent,
146
+ }));
147
+ return thoughts.length === 0
148
+ ? []
149
+ : [{ attachment_id: id, attachment_type: "query", query: { id, thoughts } }];
150
+ }
151
+ if (item.type === "function_call") {
152
+ const argumentsValue = json.parseRecord(item.arguments);
153
+ const query = typeof argumentsValue?.sql === "string"
154
+ ? argumentsValue.sql
155
+ : typeof argumentsValue?.query === "string"
156
+ ? argumentsValue.query
157
+ : undefined;
158
+ const title = typeof argumentsValue?.title === "string" ? argumentsValue.title : item.name;
159
+ return query
160
+ ? [
161
+ {
162
+ attachment_id: id,
163
+ attachment_type: "query",
164
+ query: {
165
+ id,
166
+ query,
167
+ ...(title ? { title } : {}),
168
+ },
169
+ },
170
+ ]
171
+ : [];
172
+ }
173
+ if (item.type === "function_call_output" && item.output !== undefined) {
174
+ return [textAttachment(id, item.output)];
175
+ }
176
+ if (item.type === "message") {
177
+ return (item.content ?? []).flatMap((part) => part.type === "output_text" && part.text
178
+ ? [textAttachment(id, part.text, part.metadata)]
179
+ : []);
180
+ }
181
+ return [];
182
+ }
183
+ function contentText(value, type) {
184
+ if (!value)
185
+ return [];
186
+ return value.flatMap((part) => (part.type === type && part.text ? [part.text] : []));
187
+ }
188
+ function textAttachment(id, content, metadata) {
189
+ return {
190
+ attachment_id: id,
191
+ attachment_type: "text",
192
+ text: {
193
+ id,
194
+ content,
195
+ purpose: "TEXT_ATTACHMENT_PURPOSE_ANSWER",
196
+ ...(metadata !== undefined ? { metadata } : {}),
197
+ },
198
+ };
199
+ }
200
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdlbnQtbW9kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hZ2VudC1tb2RlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O0dBT0c7QUFFSCxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sS0FBSyxDQUFDO0FBQ3hCLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFdEQsT0FBTyxFQUNMLGtCQUFrQixHQUluQixNQUFNLGtCQUFrQixDQUFDO0FBRTFCLHFFQUFxRTtBQUNyRSxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRyxDQUFDO0tBQ3JDLE1BQU0sQ0FBQztJQUNOLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO0lBQ2hCLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQzNCLFFBQVEsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxFQUFFO0NBQ2pDLENBQUM7S0FDRCxLQUFLLEVBQUUsQ0FBQztBQUVYLG9FQUFvRTtBQUNwRSxNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBRyxDQUFDO0tBQ3hDLE1BQU0sQ0FBQztJQUNOLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO0lBQ2hCLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQ3pCLE9BQU8sRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQzlCLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQzNCLFNBQVMsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQ2hDLE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQzdCLE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMs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QUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2hELENBQUMsQ0FBQyxFQUFFLENBQ1AsQ0FBQztJQUNKLENBQUM7SUFDRCxPQUFPLEVBQUUsQ0FBQztBQUNaLENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FDbEIsS0FBNEQsRUFDNUQsSUFBWTtJQUVaLElBQUksQ0FBQyxLQUFLO1FBQUUsT0FBTyxFQUFFLENBQUM7SUFDdEIsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3ZGLENBQUM7QUFFRCxTQUFTLGNBQWMsQ0FDckIsRUFBc0IsRUFDdEIsT0FBZSxFQUNmLFFBQWtCO0lBRWxCLE9BQU87UUFDTCxhQUFhLEVBQUUsRUFBRTtRQUNqQixlQUFlLEVBQUUsTUFBTTtRQUN2QixJQUFJLEVBQUU7WUFDSixFQUFFO1lBQ0YsT0FBTztZQUNQLE9BQU8sRUFBRSxnQ0FBZ0M7WUFDekMsR0FBRyxDQUFDLFFBQVEsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztTQUNoRDtLQUNGLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBCcm93c2VyLXNhZmUgR2VuaWUgQWdlbnQgTW9kZSBTU0UgY29udHJhY3RzLlxuICpcbiAqIFNjaGVtYXMgdmFsaWRhdGUgdGhlIHN0YWJsZSBSZXNwb25zZXMtc3R5bGUgZXZlbnQgZW52ZWxvcGUgd2hpbGUgcHJlc2VydmluZ1xuICogYWRkaXRpdmUgZmllbGRzIGFuZCBvdXRwdXQtaXRlbSB2YXJpYW50cyBpbnRyb2R1Y2VkIGJ5IHRoZSBiZXRhIEFQSS5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcbmltcG9ydCB7IGpzb24sIG9iamVjdCB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5cbmltcG9ydCB7XG4gIEdlbmllTWVzc2FnZVNjaGVtYSxcbiAgdHlwZSBHZW5pZUF0dGFjaG1lbnQsXG4gIHR5cGUgR2VuaWVNZXNzYWdlLFxuICB0eXBlIEdlbmllVGhvdWdodCxcbn0gZnJvbSBcIi4vZ2VuaWUtbW9kZWwudHNcIjtcblxuLyoqIEFnZW50IE1vZGUgb3V0cHV0IGNvbnRlbnQgaXRlbSB3aXRoIGZvcndhcmQtY29tcGF0aWJsZSBmaWVsZHMuICovXG5leHBvcnQgY29uc3QgR2VuaWVBZ2VudENvbnRlbnRTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIHR5cGU6IHouc3RyaW5nKCksXG4gICAgdGV4dDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIG1ldGFkYXRhOiB6LnVua25vd24oKS5vcHRpb25hbCgpLFxuICB9KVxuICAubG9vc2UoKTtcblxuLyoqIEFnZW50IE1vZGUgcmVzcG9uc2Ugb3V0cHV0IGl0ZW0gd2l0aCBrbm93biBwcm9qZWN0aW9uIGZpZWxkcy4gKi9cbmV4cG9ydCBjb25zdCBHZW5pZUFnZW50T3V0cHV0SXRlbVNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgdHlwZTogei5zdHJpbmcoKSxcbiAgICBpZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIGNhbGxfaWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBuYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgYXJndW1lbnRzOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgb3V0cHV0OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgc3RhdHVzOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgY29udGVudDogei5hcnJheShHZW5pZUFnZW50Q29udGVudFNjaGVtYSkub3B0aW9uYWwoKSxcbiAgfSlcbiAgLmxvb3NlKCk7XG5cbi8qKiBHZW5pZSBBZ2VudCBNb2RlIHJlc3BvbnNlIGNhcnJpZWQgYnkgbGlmZWN5Y2xlIGV2ZW50cy4gKi9cbmV4cG9ydCBjb25zdCBHZW5pZUFnZW50UmVzcG9uc2VTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIG9iamVjdDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIGlkOiB6LnN0cmluZygpLFxuICAgIG1vZGVsOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgc3RhdHVzOiB6LnN0cmluZygpLFxuICAgIG91dHB1dDogei5hcnJheShHZW5pZUFnZW50T3V0cHV0SXRlbVNjaGVtYSkub3B0aW9uYWwoKSxcbiAgICBjb252ZXJzYXRpb25faWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBjcmVhdGVkX2F0OiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gICAgZXJyb3I6IHoudW5rbm93bigpLm9wdGlvbmFsKCksXG4gIH0pXG4gIC5sb29zZSgpO1xuXG4vKiogT25lIFNTRSBldmVudCBmcm9tIHRoZSBHZW5pZSBBZ2VudCBNb2RlIHJlc3BvbnNlIHN0cmVhbS4gKi9cbmV4cG9ydCBjb25zdCBHZW5pZUFnZW50TW9kZUV2ZW50U2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICB0eXBlOiB6LnN0cmluZygpLFxuICAgIHNlcXVlbmNlX251bWJlcjogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICAgIG91dHB1dF9pbmRleDogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICAgIHJlc3BvbnNlOiBHZW5pZUFnZW50UmVzcG9uc2VTY2hlbWEub3B0aW9uYWwoKSxcbiAgICBpdGVtOiBHZW5pZUFnZW50T3V0cHV0SXRlbVNjaGVtYS5vcHRpb25hbCgpLFxuICB9KVxuICAubG9vc2UoKTtcblxuLyoqIFZhbGlkYXRlZCBBZ2VudCBNb2RlIHJlc3BvbnNlIG91dHB1dCBpdGVtLiAqL1xuZXhwb3J0IHR5cGUgR2VuaWVBZ2VudE91dHB1dEl0ZW0gPSB6LmluZmVyPHR5cGVvZiBHZW5pZUFnZW50T3V0cHV0SXRlbVNjaGVtYT47XG4vKiogVmFsaWRhdGVkIEFnZW50IE1vZGUgcmVzcG9uc2UuICovXG5leHBvcnQgdHlwZSBHZW5pZUFnZW50UmVzcG9uc2UgPSB6LmluZmVyPHR5cGVvZiBHZW5pZUFnZW50UmVzcG9uc2VTY2hlbWE+O1xuLyoqIFZhbGlkYXRlZCBBZ2VudCBNb2RlIFNTRSBldmVudC4gKi9cbmV4cG9ydCB0eXBlIEdlbmllQWdlbnRNb2RlRXZlbnQgPSB6LmluZmVyPHR5cGVvZiBHZW5pZUFnZW50TW9kZUV2ZW50U2NoZW1hPjtcblxuLyoqIFN0YXRlZnVsIHB1cmUgcmVkdWNlciBmcm9tIEFnZW50IE1vZGUgU1NFIGV2ZW50cyB0byBHZW5pZSBtZXNzYWdlIHNuYXBzaG90cy4gKi9cbmV4cG9ydCBjbGFzcyBHZW5pZUFnZW50TW9kZVByb2plY3Rpb24ge1xuICBwcml2YXRlIHJlYWRvbmx5IGl0ZW1zID0gbmV3IE1hcDxzdHJpbmcsIEdlbmllQWdlbnRPdXRwdXRJdGVtPigpO1xuICBwcml2YXRlIHJlc3BvbnNlOiBHZW5pZUFnZW50UmVzcG9uc2UgfCB1bmRlZmluZWQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBzcGFjZUlkOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb250ZW50OiBzdHJpbmcsXG4gICkge31cblxuICAvKiogQXBwbHkgb25lIHZhbGlkYXRlZCBTU0UgZXZlbnQgYW5kIHJldHVybiBpdHMgcHJvamVjdGVkIHNuYXBzaG90LiAqL1xuICBhcHBseShldmVudDogR2VuaWVBZ2VudE1vZGVFdmVudCk6IEdlbmllTWVzc2FnZSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKGV2ZW50LnJlc3BvbnNlKSB7XG4gICAgICB0aGlzLnJlc3BvbnNlID0gZXZlbnQucmVzcG9uc2U7XG4gICAgICBpZiAoZXZlbnQucmVzcG9uc2Uub3V0cHV0KSB7XG4gICAgICAgIHRoaXMuaXRlbXMuY2xlYXIoKTtcbiAgICAgICAgZXZlbnQucmVzcG9uc2Uub3V0cHV0LmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAgICAgdGhpcy5pdGVtcy5zZXQoYWdlbnRJdGVtS2V5KGl0ZW0sIGluZGV4KSwgaXRlbSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZXZlbnQuaXRlbSkge1xuICAgICAgdGhpcy5pdGVtcy5zZXQoYWdlbnRJdGVtS2V5KGV2ZW50Lml0ZW0sIGV2ZW50Lm91dHB1dF9pbmRleCksIGV2ZW50Lml0ZW0pO1xuICAgIH1cbiAgICBpZiAoKCFldmVudC5yZXNwb25zZSAmJiAhZXZlbnQuaXRlbSkgfHwgIXRoaXMucmVzcG9uc2UpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHByb2plY3RBZ2VudE1vZGVNZXNzYWdlKHRoaXMuc3BhY2VJZCwgdGhpcy5jb250ZW50LCB0aGlzLnJlc3BvbnNlLCBbXG4gICAgICAuLi50aGlzLml0ZW1zLnZhbHVlcygpLFxuICAgIF0pO1xuICB9XG5cbiAgLyoqIEN1cnJlbnQgcmVzcG9uc2UgaWQsIG9uY2UgYHJlc3BvbnNlLmNyZWF0ZWRgIGhhcyBhcnJpdmVkLiAqL1xuICBnZXQgcmVzcG9uc2VJZCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnJlc3BvbnNlPy5pZDtcbiAgfVxuXG4gIC8qKiBDdXJyZW50IGNvbnZlcnNhdGlvbiBpZCwgb25jZSBhc3NpZ25lZCBieSBHZW5pZS4gKi9cbiAgZ2V0IGNvbnZlcnNhdGlvbklkKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMucmVzcG9uc2U/LmNvbnZlcnNhdGlvbl9pZDtcbiAgfVxuXG4gIC8qKiBXaGV0aGVyIHRoZSBsYXRlc3QgcmVzcG9uc2Ugc3RhdHVzIGlzIHRlcm1pbmFsLiAqL1xuICBnZXQgdGVybWluYWwoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucmVzcG9uc2UgPyBpc1Rlcm1pbmFsU3RhdHVzKHRoaXMucmVzcG9uc2Uuc3RhdHVzKSA6IGZhbHNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzVGVybWluYWxTdGF0dXMoc3RhdHVzOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIHN0YXR1cyA9PT0gXCJjb21wbGV0ZWRcIiB8fCBzdGF0dXMgPT09IFwiZmFpbGVkXCIgfHwgc3RhdHVzID09PSBcImNhbmNlbGxlZFwiO1xufVxuXG5mdW5jdGlvbiBhZ2VudEl0ZW1LZXkoaXRlbTogR2VuaWVBZ2VudE91dHB1dEl0ZW0sIGluZGV4OiB1bmtub3duKTogc3RyaW5nIHtcbiAgaWYgKHR5cGVvZiBpdGVtLmlkID09PSBcInN0cmluZ1wiKSByZXR1cm4gaXRlbS5pZDtcbiAgaWYgKHR5cGVvZiBpdGVtLmNhbGxfaWQgPT09IFwic3RyaW5nXCIpIHJldHVybiBpdGVtLmNhbGxfaWQ7XG4gIHJldHVybiBTdHJpbmcodHlwZW9mIGluZGV4ID09PSBcIm51bWJlclwiID8gaW5kZXggOiAoaXRlbS50eXBlID8/IFwiaXRlbVwiKSk7XG59XG5cbi8qKiBQcm9qZWN0IG9uZSBBZ2VudCBNb2RlIHJlc3BvbnNlIHNuYXBzaG90IG9udG8gdGhlIHNoYXJlZCBHZW5pZSBtZXNzYWdlIHNoYXBlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb2plY3RBZ2VudE1vZGVNZXNzYWdlKFxuICBzcGFjZUlkOiBzdHJpbmcsXG4gIGNvbnRlbnQ6IHN0cmluZyxcbiAgcmVzcG9uc2U6IEdlbmllQWdlbnRSZXNwb25zZSxcbiAgaXRlbXM6IEdlbmllQWdlbnRPdXRwdXRJdGVtW10sXG4pOiBHZW5pZU1lc3NhZ2Uge1xuICBjb25zdCBlcnJvclZhbHVlID0gb2JqZWN0LmlzUmVjb3JkKHJlc3BvbnNlLmVycm9yKSA/IHJlc3BvbnNlLmVycm9yIDogdW5kZWZpbmVkO1xuICBjb25zdCBlcnJvck1lc3NhZ2UgPVxuICAgIHR5cGVvZiBlcnJvclZhbHVlPy5tZXNzYWdlID09PSBcInN0cmluZ1wiXG4gICAgICA/IGVycm9yVmFsdWUubWVzc2FnZVxuICAgICAgOiB0eXBlb2YgcmVzcG9uc2UuZXJyb3IgPT09IFwic3RyaW5nXCJcbiAgICAgICAgPyByZXNwb25zZS5lcnJvclxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgcmV0dXJuIEdlbmllTWVzc2FnZVNjaGVtYS5wYXJzZSh7XG4gICAgaWQ6IHJlc3BvbnNlLmlkLFxuICAgIG1lc3NhZ2VfaWQ6IHJlc3BvbnNlLmlkLFxuICAgIHNwYWNlX2lkOiBzcGFjZUlkLFxuICAgIGNvbnZlcnNhdGlvbl9pZDogcmVzcG9uc2UuY29udmVyc2F0aW9uX2lkID8/IFwiXCIsXG4gICAgY29udGVudCxcbiAgICBzdGF0dXM6IGFnZW50TW9kZVN0YXR1cyhyZXNwb25zZS5zdGF0dXMsIGl0ZW1zKSxcbiAgICBhdHRhY2htZW50czogaXRlbXMuZmxhdE1hcChpdGVtQXR0YWNobWVudHMpLFxuICAgIC4uLihyZXNwb25zZS5jcmVhdGVkX2F0ICE9PSB1bmRlZmluZWQgPyB7IGNyZWF0ZWRfdGltZXN0YW1wOiByZXNwb25zZS5jcmVhdGVkX2F0IH0gOiB7fSksXG4gICAgLi4uKGVycm9yTWVzc2FnZSA/IHsgZXJyb3I6IHsgZXJyb3I6IGVycm9yTWVzc2FnZSB9IH0gOiB7fSksXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBhZ2VudE1vZGVTdGF0dXModmFsdWU6IHN0cmluZywgaXRlbXM6IEdlbmllQWdlbnRPdXRwdXRJdGVtW10pOiBHZW5pZU1lc3NhZ2VbXCJzdGF0dXNcIl0ge1xuICBpZiAodmFsdWUgPT09IFwiY29tcGxldGVkXCIpIHJldHVybiBcIkNPTVBMRVRFRFwiO1xuICBpZiAodmFsdWUgPT09IFwiZmFpbGVkXCIpIHJldHVybiBcIkZBSUxFRFwiO1xuICBpZiAodmFsdWUgPT09IFwiY2FuY2VsbGVkXCIpIHJldHVybiBcIkNBTkNFTExFRFwiO1xuICBpZiAoaXRlbXMuc29tZSgoaXRlbSkgPT4gaXRlbS50eXBlID09PSBcImZ1bmN0aW9uX2NhbGxcIikpIHJldHVybiBcIkVYRUNVVElOR19RVUVSWVwiO1xuICByZXR1cm4gXCJBU0tJTkdfQUlcIjtcbn1cblxuZnVuY3Rpb24gaXRlbUF0dGFjaG1lbnRzKGl0ZW06IEdlbmllQWdlbnRPdXRwdXRJdGVtKTogR2VuaWVBdHRhY2htZW50W10ge1xuICBjb25zdCBpZCA9IGl0ZW0uaWQgPz8gaXRlbS5jYWxsX2lkO1xuICBpZiAoaXRlbS50eXBlID09PSBcInJlYXNvbmluZ1wiKSB7XG4gICAgY29uc3QgdGhvdWdodHMgPSBjb250ZW50VGV4dChpdGVtLmNvbnRlbnQsIFwicmVhc29uaW5nX3RleHRcIikubWFwKFxuICAgICAgKHRob3VnaHRDb250ZW50KTogR2VuaWVUaG91Z2h0ID0+ICh7XG4gICAgICAgIHRob3VnaHRfdHlwZTogXCJUSE9VR0hUX1RZUEVfU1RFUFNcIixcbiAgICAgICAgY29udGVudDogdGhvdWdodENvbnRlbnQsXG4gICAgICB9KSxcbiAgICApO1xuICAgIHJldHVybiB0aG91Z2h0cy5sZW5ndGggPT09IDBcbiAgICAgID8gW11cbiAgICAgIDogW3sgYXR0YWNobWVudF9pZDogaWQsIGF0dGFjaG1lbnRfdHlwZTogXCJxdWVyeVwiLCBxdWVyeTogeyBpZCwgdGhvdWdodHMgfSB9XTtcbiAgfVxuICBpZiAoaXRlbS50eXBlID09PSBcImZ1bmN0aW9uX2NhbGxcIikge1xuICAgIGNvbnN0IGFyZ3VtZW50c1ZhbHVlID0ganNvbi5wYXJzZVJlY29yZChpdGVtLmFyZ3VtZW50cyk7XG4gICAgY29uc3QgcXVlcnkgPVxuICAgICAgdHlwZW9mIGFyZ3VtZW50c1ZhbHVlPy5zcWwgPT09IFwic3RyaW5nXCJcbiAgICAgICAgPyBhcmd1bWVudHNWYWx1ZS5zcWxcbiAgICAgICAgOiB0eXBlb2YgYXJndW1lbnRzVmFsdWU/LnF1ZXJ5ID09PSBcInN0cmluZ1wiXG4gICAgICAgICAgPyBhcmd1bWVudHNWYWx1ZS5xdWVyeVxuICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IHRpdGxlID0gdHlwZW9mIGFyZ3VtZW50c1ZhbHVlPy50aXRsZSA9PT0gXCJzdHJpbmdcIiA/IGFyZ3VtZW50c1ZhbHVlLnRpdGxlIDogaXRlbS5uYW1lO1xuICAgIHJldHVybiBxdWVyeVxuICAgICAgPyBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYXR0YWNobWVudF9pZDogaWQsXG4gICAgICAgICAgICBhdHRhY2htZW50X3R5cGU6IFwicXVlcnlcIixcbiAgICAgICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgICBxdWVyeSxcbiAgICAgICAgICAgICAgLi4uKHRpdGxlID8geyB0aXRsZSB9IDoge30pLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICBdXG4gICAgICA6IFtdO1xuICB9XG4gIGlmIChpdGVtLnR5cGUgPT09IFwiZnVuY3Rpb25fY2FsbF9vdXRwdXRcIiAmJiBpdGVtLm91dHB1dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIFt0ZXh0QXR0YWNobWVudChpZCwgaXRlbS5vdXRwdXQpXTtcbiAgfVxuICBpZiAoaXRlbS50eXBlID09PSBcIm1lc3NhZ2VcIikge1xuICAgIHJldHVybiAoaXRlbS5jb250ZW50ID8/IFtdKS5mbGF0TWFwKChwYXJ0KSA9PlxuICAgICAgcGFydC50eXBlID09PSBcIm91dHB1dF90ZXh0XCIgJiYgcGFydC50ZXh0XG4gICAgICAgID8gW3RleHRBdHRhY2htZW50KGlkLCBwYXJ0LnRleHQsIHBhcnQubWV0YWRhdGEpXVxuICAgICAgICA6IFtdLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIFtdO1xufVxuXG5mdW5jdGlvbiBjb250ZW50VGV4dChcbiAgdmFsdWU6IHouaW5mZXI8dHlwZW9mIEdlbmllQWdlbnRDb250ZW50U2NoZW1hPltdIHwgdW5kZWZpbmVkLFxuICB0eXBlOiBzdHJpbmcsXG4pOiBzdHJpbmdbXSB7XG4gIGlmICghdmFsdWUpIHJldHVybiBbXTtcbiAgcmV0dXJuIHZhbHVlLmZsYXRNYXAoKHBhcnQpID0+IChwYXJ0LnR5cGUgPT09IHR5cGUgJiYgcGFydC50ZXh0ID8gW3BhcnQudGV4dF0gOiBbXSkpO1xufVxuXG5mdW5jdGlvbiB0ZXh0QXR0YWNobWVudChcbiAgaWQ6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgY29udGVudDogc3RyaW5nLFxuICBtZXRhZGF0YT86IHVua25vd24sXG4pOiBHZW5pZUF0dGFjaG1lbnQge1xuICByZXR1cm4ge1xuICAgIGF0dGFjaG1lbnRfaWQ6IGlkLFxuICAgIGF0dGFjaG1lbnRfdHlwZTogXCJ0ZXh0XCIsXG4gICAgdGV4dDoge1xuICAgICAgaWQsXG4gICAgICBjb250ZW50LFxuICAgICAgcHVycG9zZTogXCJURVhUX0FUVEFDSE1FTlRfUFVSUE9TRV9BTlNXRVJcIixcbiAgICAgIC4uLihtZXRhZGF0YSAhPT0gdW5kZWZpbmVkID8geyBtZXRhZGF0YSB9IDoge30pLFxuICAgIH0sXG4gIH07XG59XG4iXX0=
@@ -39,7 +39,6 @@
39
39
  */
40
40
  import { z } from "zod";
41
41
  import * as dashboards from "./dashboards.ts";
42
- declare const MessageStatusSchema: z.ZodUnion<readonly [z.ZodLiteral<"ASKING_AI">, z.ZodLiteral<"CANCELLED">, z.ZodLiteral<"COMPLETED">, z.ZodLiteral<"EXECUTING_QUERY">, z.ZodLiteral<"FAILED">, z.ZodLiteral<"FETCHING_METADATA">, z.ZodLiteral<"FILTERING_CONTEXT">, z.ZodLiteral<"PENDING_WAREHOUSE">, z.ZodLiteral<"QUERY_RESULT_EXPIRED">, z.ZodLiteral<"SUBMITTED">]>;
43
42
  /**
44
43
  * The SDK's `MessageStatus` type, re-exported so consumers of the
45
44
  * Genie contract get the full wire vocabulary from a single import
@@ -47,7 +46,8 @@ declare const MessageStatusSchema: z.ZodUnion<readonly [z.ZodLiteral<"ASKING_AI"
47
46
  * below.
48
47
  */
49
48
  export type MessageStatus = dashboards.MessageStatus;
50
- export { MessageStatusSchema };
49
+ /** Runtime validator for a raw Genie message status from the generated SDK contract. */
50
+ export declare const MessageStatusSchema: z.ZodUnion<readonly [z.ZodLiteral<"ASKING_AI">, z.ZodLiteral<"CANCELLED">, z.ZodLiteral<"COMPLETED">, z.ZodLiteral<"EXECUTING_QUERY">, z.ZodLiteral<"FAILED">, z.ZodLiteral<"FETCHING_METADATA">, z.ZodLiteral<"FILTERING_CONTEXT">, z.ZodLiteral<"PENDING_WAREHOUSE">, z.ZodLiteral<"QUERY_RESULT_EXPIRED">, z.ZodLiteral<"SUBMITTED">]>;
51
51
  /**
52
52
  * Genie's per-query "thoughts" surface. These appear on the
53
53
  * `/messages/{id}` wire under `attachments[i].query.thoughts[]` but
@@ -79,6 +79,7 @@ export declare const GenieThoughtSchema: z.ZodObject<{
79
79
  thought_type: z.ZodCustom<GenieThoughtType, GenieThoughtType>;
80
80
  content: z.ZodString;
81
81
  }, z.core.$strip>;
82
+ /** One typed reasoning entry attached to a Genie query. */
82
83
  export type GenieThought = z.infer<typeof GenieThoughtSchema>;
83
84
  /**
84
85
  * Discriminator for what's inside a `GenieAttachment`. Genie only
@@ -96,7 +97,9 @@ export type GenieThought = z.infer<typeof GenieThoughtSchema>;
96
97
  * the event-union discriminator key.
97
98
  */
98
99
  export declare const ATTACHMENT_TYPES: readonly ["query", "text", "suggested_questions"];
100
+ /** Attachment discriminator values understood by this package version. */
99
101
  export type KnownAttachmentType = (typeof ATTACHMENT_TYPES)[number];
102
+ /** Forward-compatible attachment discriminator, including future Genie values. */
100
103
  export type AttachmentType = KnownAttachmentType | (string & {});
101
104
  /**
102
105
  * `GenieQueryAttachment` widened with the `thoughts[]` field the
@@ -127,6 +130,7 @@ export declare const GenieQueryAttachmentSchema: z.ZodObject<{
127
130
  content: z.ZodString;
128
131
  }, z.core.$strip>>>;
129
132
  }, z.core.$strip>;
133
+ /** Query attachment widened with Genie's streamed reasoning thoughts. */
130
134
  export type GenieQueryAttachment = z.infer<typeof GenieQueryAttachmentSchema>;
131
135
  /**
132
136
  * Purpose attached to a Genie text response.
@@ -138,12 +142,17 @@ export type GenieQueryAttachment = z.infer<typeof GenieQueryAttachmentSchema>;
138
142
  * server-side enum change cannot invalidate an otherwise complete message.
139
143
  */
140
144
  export type GenieTextAttachmentPurpose = "FOLLOW_UP_QUESTION" | "TEXT_ATTACHMENT_PURPOSE_ANSWER" | (string & {});
141
- /** Text attachment schema widened for forward-compatible purpose values. */
145
+ /**
146
+ * Text attachment widened for forward-compatible purpose values and optional
147
+ * Agent Mode table metadata.
148
+ */
142
149
  export declare const GenieTextAttachmentSchema: z.ZodObject<{
143
150
  content: z.ZodOptional<z.ZodString>;
144
151
  id: z.ZodOptional<z.ZodString>;
145
152
  purpose: z.ZodOptional<z.ZodCustom<GenieTextAttachmentPurpose, GenieTextAttachmentPurpose>>;
153
+ metadata: z.ZodOptional<z.ZodUnknown>;
146
154
  }, z.core.$strip>;
155
+ /** Narrative text attachment, including its optional semantic purpose. */
147
156
  export type GenieTextAttachment = z.infer<typeof GenieTextAttachmentSchema>;
148
157
  /**
149
158
  * `GenieAttachment` with:
@@ -195,9 +204,11 @@ export declare const GenieAttachmentSchema: z.ZodObject<{
195
204
  content: z.ZodOptional<z.ZodString>;
196
205
  id: z.ZodOptional<z.ZodString>;
197
206
  purpose: z.ZodOptional<z.ZodCustom<GenieTextAttachmentPurpose, GenieTextAttachmentPurpose>>;
207
+ metadata: z.ZodOptional<z.ZodUnknown>;
198
208
  }, z.core.$strip>>;
199
209
  attachment_type: z.ZodOptional<z.ZodCustom<AttachmentType, AttachmentType>>;
200
210
  }, z.core.$strip>;
211
+ /** Genie message attachment with an optional computed discriminator. */
201
212
  export type GenieAttachment = z.infer<typeof GenieAttachmentSchema>;
202
213
  /**
203
214
  * `GenieMessage` widened with:
@@ -268,11 +279,13 @@ export declare const GenieMessageSchema: z.ZodObject<{
268
279
  content: z.ZodOptional<z.ZodString>;
269
280
  id: z.ZodOptional<z.ZodString>;
270
281
  purpose: z.ZodOptional<z.ZodCustom<GenieTextAttachmentPurpose, GenieTextAttachmentPurpose>>;
282
+ metadata: z.ZodOptional<z.ZodUnknown>;
271
283
  }, z.core.$strip>>;
272
284
  attachment_type: z.ZodOptional<z.ZodCustom<AttachmentType, AttachmentType>>;
273
285
  }, z.core.$strip>>>;
274
286
  auto_regenerate_count: z.ZodOptional<z.ZodNumber>;
275
287
  }, z.core.$strip>;
288
+ /** Genie message snapshot widened with typed attachments and regeneration count. */
276
289
  export type GenieMessage = z.infer<typeof GenieMessageSchema>;
277
290
  /**
278
291
  * Domain projection of {@link GenieMessageSchema} that drops every
@@ -338,6 +351,7 @@ export declare const GenieResponseSchema: z.ZodPipe<z.ZodObject<{
338
351
  content: z.ZodOptional<z.ZodString>;
339
352
  id: z.ZodOptional<z.ZodString>;
340
353
  purpose: z.ZodOptional<z.ZodCustom<GenieTextAttachmentPurpose, GenieTextAttachmentPurpose>>;
354
+ metadata: z.ZodOptional<z.ZodUnknown>;
341
355
  }, z.core.$strip>>;
342
356
  attachment_type: z.ZodOptional<z.ZodCustom<AttachmentType, AttachmentType>>;
343
357
  }, z.core.$strip>>>;
@@ -372,6 +386,7 @@ export declare const GenieResponseSchema: z.ZodPipe<z.ZodObject<{
372
386
  content?: string | undefined;
373
387
  id?: string | undefined;
374
388
  purpose?: GenieTextAttachmentPurpose | undefined;
389
+ metadata?: unknown;
375
390
  } | undefined;
376
391
  attachment_type?: AttachmentType | undefined;
377
392
  }[], {
@@ -427,11 +442,13 @@ export declare const GenieResponseSchema: z.ZodPipe<z.ZodObject<{
427
442
  content?: string | undefined;
428
443
  id?: string | undefined;
429
444
  purpose?: GenieTextAttachmentPurpose | undefined;
445
+ metadata?: unknown;
430
446
  } | undefined;
431
447
  attachment_type?: AttachmentType | undefined;
432
448
  }[] | undefined;
433
449
  auto_regenerate_count?: number | undefined;
434
450
  }>>;
451
+ /** Normalized attachment array extracted from a Genie message response. */
435
452
  export type GenieResponse = z.infer<typeof GenieResponseSchema>;
436
453
  /**
437
454
  * `GenieSpace` widened with an optional `serialized_space` field
@@ -452,6 +469,7 @@ export declare const GenieSpaceSchema: z.ZodObject<{
452
469
  warehouse_id: z.ZodOptional<z.ZodString>;
453
470
  serialized_space: z.ZodOptional<z.ZodString>;
454
471
  }, z.core.$strip>;
472
+ /** Genie space metadata with the identifiers required by chat consumers. */
455
473
  export type GenieSpace = z.infer<typeof GenieSpaceSchema>;
456
474
  /**
457
475
  * Terminal Genie message statuses. The polling loop in the chat
@@ -459,6 +477,7 @@ export type GenieSpace = z.infer<typeof GenieSpaceSchema>;
459
477
  * statuses.
460
478
  */
461
479
  export declare const TERMINAL_STATUSES: readonly ["COMPLETED", "FAILED", "CANCELLED"];
480
+ /** Message status that ends a Genie turn and produces a final result event. */
462
481
  export type TerminalStatus = (typeof TERMINAL_STATUSES)[number];
463
482
  /** Narrow `MessageStatus | undefined` to a {@link TerminalStatus}. */
464
483
  export declare function isTerminalStatus(s: MessageStatus | undefined): s is TerminalStatus;
@@ -505,6 +524,7 @@ export declare const GenieChatLocationSchema: z.ZodObject<{
505
524
  message_id: z.ZodOptional<z.ZodString>;
506
525
  attachment_id: z.ZodOptional<z.ZodString>;
507
526
  }, z.core.$strip>;
527
+ /** Conversation, message, and attachment coordinates shared by attachment events. */
508
528
  export type GenieChatLocation = z.infer<typeof GenieChatLocationSchema>;
509
529
  /**
510
530
  * Lifecycle event: the question this turn is asking Genie. Fires
@@ -532,6 +552,7 @@ export declare const QuestionEventSchema: z.ZodObject<{
532
552
  type: z.ZodLiteral<"question">;
533
553
  content: z.ZodString;
534
554
  }, z.core.$strip>;
555
+ /** Initial event carrying the user's question after Genie assigns a message id. */
535
556
  export type QuestionEvent = z.infer<typeof QuestionEventSchema>;
536
557
  /**
537
558
  * Lifecycle event: raw `GenieMessage` snapshot for the active
@@ -598,12 +619,14 @@ export declare const MessageEventSchema: z.ZodObject<{
598
619
  content: z.ZodOptional<z.ZodString>;
599
620
  id: z.ZodOptional<z.ZodString>;
600
621
  purpose: z.ZodOptional<z.ZodCustom<GenieTextAttachmentPurpose, GenieTextAttachmentPurpose>>;
622
+ metadata: z.ZodOptional<z.ZodUnknown>;
601
623
  }, z.core.$strip>>;
602
624
  attachment_type: z.ZodOptional<z.ZodCustom<AttachmentType, AttachmentType>>;
603
625
  }, z.core.$strip>>>;
604
626
  auto_regenerate_count: z.ZodOptional<z.ZodNumber>;
605
627
  }, z.core.$strip>;
606
628
  }, z.core.$strip>;
629
+ /** Raw Genie message snapshot emitted on every poll iteration. */
607
630
  export type MessageEvent = z.infer<typeof MessageEventSchema>;
608
631
  /**
609
632
  * Top-level `message.status` transitioned. Fires for every
@@ -619,6 +642,7 @@ export declare const StatusEventSchema: z.ZodObject<{
619
642
  status: z.ZodUnion<readonly [z.ZodLiteral<"ASKING_AI">, z.ZodLiteral<"CANCELLED">, z.ZodLiteral<"COMPLETED">, z.ZodLiteral<"EXECUTING_QUERY">, z.ZodLiteral<"FAILED">, z.ZodLiteral<"FETCHING_METADATA">, z.ZodLiteral<"FILTERING_CONTEXT">, z.ZodLiteral<"PENDING_WAREHOUSE">, z.ZodLiteral<"QUERY_RESULT_EXPIRED">, z.ZodLiteral<"SUBMITTED">]>;
620
643
  previous_status: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<"ASKING_AI">, z.ZodLiteral<"CANCELLED">, z.ZodLiteral<"COMPLETED">, z.ZodLiteral<"EXECUTING_QUERY">, z.ZodLiteral<"FAILED">, z.ZodLiteral<"FETCHING_METADATA">, z.ZodLiteral<"FILTERING_CONTEXT">, z.ZodLiteral<"PENDING_WAREHOUSE">, z.ZodLiteral<"QUERY_RESULT_EXPIRED">, z.ZodLiteral<"SUBMITTED">]>>;
621
644
  }, z.core.$strip>;
645
+ /** Message-status transition, including the previous status when available. */
622
646
  export type StatusEvent = z.infer<typeof StatusEventSchema>;
623
647
  /**
624
648
  * A new attachment slot appeared in `message.attachments[]`.
@@ -636,6 +660,7 @@ export declare const AttachmentEventSchema: z.ZodObject<{
636
660
  index: z.ZodNumber;
637
661
  attachment_type: z.ZodCustom<AttachmentType, AttachmentType>;
638
662
  }, z.core.$strip>;
663
+ /** Event emitted when a new typed attachment appears on the message. */
639
664
  export type AttachmentEvent = z.infer<typeof AttachmentEventSchema>;
640
665
  /**
641
666
  * A new reasoning step appeared on a query attachment
@@ -654,6 +679,7 @@ export declare const ThinkingEventSchema: z.ZodObject<{
654
679
  text: z.ZodString;
655
680
  thought_type: z.ZodCustom<GenieThoughtType, GenieThoughtType>;
656
681
  }, z.core.$strip>;
682
+ /** Incremental Genie reasoning event derived from query thoughts. */
657
683
  export type ThinkingEvent = z.infer<typeof ThinkingEventSchema>;
658
684
  /**
659
685
  * A text-attachment `content` field appeared or changed
@@ -668,6 +694,7 @@ export declare const TextEventSchema: z.ZodObject<{
668
694
  type: z.ZodLiteral<"text">;
669
695
  text: z.ZodString;
670
696
  }, z.core.$strip>;
697
+ /** Narrative answer fragment emitted from a Genie text attachment. */
671
698
  export type TextEvent = z.infer<typeof TextEventSchema>;
672
699
  /**
673
700
  * SQL was finalized on a query attachment
@@ -687,6 +714,7 @@ export declare const QueryEventSchema: z.ZodObject<{
687
714
  title: z.ZodOptional<z.ZodString>;
688
715
  description: z.ZodOptional<z.ZodString>;
689
716
  }, z.core.$strip>;
717
+ /** Finalized or rewritten SQL emitted for a Genie query attachment. */
690
718
  export type QueryEvent = z.infer<typeof QueryEventSchema>;
691
719
  /**
692
720
  * SQL was submitted to a SQL warehouse and a statement id was
@@ -703,6 +731,7 @@ export declare const StatementEventSchema: z.ZodObject<{
703
731
  type: z.ZodLiteral<"statement">;
704
732
  statement_id: z.ZodString;
705
733
  }, z.core.$strip>;
734
+ /** Event indicating that a query received an executable statement id. */
706
735
  export type StatementEvent = z.infer<typeof StatementEventSchema>;
707
736
  /**
708
737
  * Row count for a query attachment's result changed
@@ -720,6 +749,7 @@ export declare const RowsEventSchema: z.ZodObject<{
720
749
  previous_row_count: z.ZodOptional<z.ZodNumber>;
721
750
  statement_id: z.ZodOptional<z.ZodString>;
722
751
  }, z.core.$strip>;
752
+ /** Row-count transition for a Genie query result. */
723
753
  export type RowsEvent = z.infer<typeof RowsEventSchema>;
724
754
  /**
725
755
  * Genie produced a follow-up suggested-questions list
@@ -734,6 +764,7 @@ export declare const SuggestedQuestionsEventSchema: z.ZodObject<{
734
764
  type: z.ZodLiteral<"suggested_questions">;
735
765
  questions: z.ZodArray<z.ZodString>;
736
766
  }, z.core.$strip>;
767
+ /** Follow-up question list emitted when Genie adds or rewrites suggestions. */
737
768
  export type SuggestedQuestionsEvent = z.infer<typeof SuggestedQuestionsEventSchema>;
738
769
  /**
739
770
  * The active turn reached a terminal status. Always fires once
@@ -804,12 +835,14 @@ export declare const ResultEventSchema: z.ZodObject<{
804
835
  content: z.ZodOptional<z.ZodString>;
805
836
  id: z.ZodOptional<z.ZodString>;
806
837
  purpose: z.ZodOptional<z.ZodCustom<GenieTextAttachmentPurpose, GenieTextAttachmentPurpose>>;
838
+ metadata: z.ZodOptional<z.ZodUnknown>;
807
839
  }, z.core.$strip>>;
808
840
  attachment_type: z.ZodOptional<z.ZodCustom<AttachmentType, AttachmentType>>;
809
841
  }, z.core.$strip>>>;
810
842
  auto_regenerate_count: z.ZodOptional<z.ZodNumber>;
811
843
  }, z.core.$strip>;
812
844
  }, z.core.$strip>;
845
+ /** Final event for a Genie turn, carrying its terminal status and message snapshot. */
813
846
  export type ResultEvent = z.infer<typeof ResultEventSchema>;
814
847
  /**
815
848
  * Discriminated union yielded by `genieEventChat`. Each variant
@@ -909,6 +942,7 @@ export declare const GenieChatEventSchema: z.ZodDiscriminatedUnion<[z.ZodObject<
909
942
  content: z.ZodOptional<z.ZodString>;
910
943
  id: z.ZodOptional<z.ZodString>;
911
944
  purpose: z.ZodOptional<z.ZodCustom<GenieTextAttachmentPurpose, GenieTextAttachmentPurpose>>;
945
+ metadata: z.ZodOptional<z.ZodUnknown>;
912
946
  }, z.core.$strip>>;
913
947
  attachment_type: z.ZodOptional<z.ZodCustom<AttachmentType, AttachmentType>>;
914
948
  }, z.core.$strip>>>;
@@ -1039,12 +1073,14 @@ export declare const GenieChatEventSchema: z.ZodDiscriminatedUnion<[z.ZodObject<
1039
1073
  content: z.ZodOptional<z.ZodString>;
1040
1074
  id: z.ZodOptional<z.ZodString>;
1041
1075
  purpose: z.ZodOptional<z.ZodCustom<GenieTextAttachmentPurpose, GenieTextAttachmentPurpose>>;
1076
+ metadata: z.ZodOptional<z.ZodUnknown>;
1042
1077
  }, z.core.$strip>>;
1043
1078
  attachment_type: z.ZodOptional<z.ZodCustom<AttachmentType, AttachmentType>>;
1044
1079
  }, z.core.$strip>>>;
1045
1080
  auto_regenerate_count: z.ZodOptional<z.ZodNumber>;
1046
1081
  }, z.core.$strip>;
1047
1082
  }, z.core.$strip>], "type">;
1083
+ /** Ordered event union yielded by `genieEventChat`; failures are thrown, not emitted. */
1048
1084
  export type GenieChatEvent = z.infer<typeof GenieChatEventSchema>;
1049
1085
  /** Discriminator type for {@link GenieChatEvent}. */
1050
1086
  export type GenieChatEventType = GenieChatEvent["type"];