@arizeai/phoenix-cli 1.15.2 → 1.16.1

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.
Files changed (40) hide show
  1. package/README.md +2 -1
  2. package/build/pxi/App.d.ts +9 -2
  3. package/build/pxi/App.d.ts.map +1 -1
  4. package/build/pxi/App.js +935 -35
  5. package/build/pxi/App.js.map +1 -1
  6. package/build/pxi/client.d.ts +36 -21
  7. package/build/pxi/client.d.ts.map +1 -1
  8. package/build/pxi/client.js +373 -36
  9. package/build/pxi/client.js.map +1 -1
  10. package/build/pxi/commands.d.ts +10 -1
  11. package/build/pxi/commands.d.ts.map +1 -1
  12. package/build/pxi/commands.js +27 -2
  13. package/build/pxi/commands.js.map +1 -1
  14. package/build/pxi/compaction.d.ts +19 -0
  15. package/build/pxi/compaction.d.ts.map +1 -0
  16. package/build/pxi/compaction.js +24 -0
  17. package/build/pxi/compaction.js.map +1 -0
  18. package/build/pxi/index.d.ts +5 -5
  19. package/build/pxi/index.d.ts.map +1 -1
  20. package/build/pxi/index.js +7 -6
  21. package/build/pxi/index.js.map +1 -1
  22. package/build/pxi/options.d.ts +1 -1
  23. package/build/pxi/options.d.ts.map +1 -1
  24. package/build/pxi/options.js +5 -1
  25. package/build/pxi/options.js.map +1 -1
  26. package/build/pxi/preflight.d.ts +51 -4
  27. package/build/pxi/preflight.d.ts.map +1 -1
  28. package/build/pxi/preflight.js +100 -4
  29. package/build/pxi/preflight.js.map +1 -1
  30. package/build/pxi/tokenUsage.d.ts +3 -3
  31. package/build/pxi/tokenUsage.d.ts.map +1 -1
  32. package/build/pxi/tokenUsage.js +2 -1
  33. package/build/pxi/tokenUsage.js.map +1 -1
  34. package/build/pxi/toolPresentation.d.ts +1 -1
  35. package/build/pxi/toolPresentation.d.ts.map +1 -1
  36. package/build/pxi/toolPresentation.js +4 -1
  37. package/build/pxi/toolPresentation.js.map +1 -1
  38. package/build/pxi/types.d.ts +116 -58
  39. package/build/pxi/types.d.ts.map +1 -1
  40. package/package.json +3 -3
@@ -1,14 +1,50 @@
1
+ import { formatApiError, HttpError, } from "@arizeai/phoenix-client";
1
2
  import { DefaultChatTransport, readUIMessageStream, } from "ai";
2
3
  import { createOAuthFetch, hasOAuthCredentials } from "../authFetch.js";
4
+ import { createPhoenixClient } from "../client.js";
3
5
  import { formatPxiRuntimeError } from "./preflight.js";
6
+ const AGENT_SESSION_CHAT_PATH = "/v1/agent_sessions/{session_id}/chat";
7
+ const AGENT_SESSION_PAGE_LIMIT = 100;
4
8
  /**
5
- * Chat client for the Phoenix server-agent endpoint.
6
- *
7
- * This wires the Vercel AI SDK's {@link DefaultChatTransport} to Phoenix's
8
- * `/agents/server/sessions/{id}/chat` route: it builds the request URL, auth
9
- * headers, and request body, then streams the assistant reply back as a series
10
- * of {@link PxiMessage} snapshots.
9
+ * Error code the chat endpoint returns (HTTP 409) while another client's turn
10
+ * holds the session lock.
11
11
  */
12
+ const SESSION_BUSY_ERROR_CODE = "agent_session_busy";
13
+ /** Whether an error is the chat endpoint's session-busy (HTTP 409) rejection. */
14
+ export function isSessionBusyError({ error }) {
15
+ return (error instanceof Error && error.message.includes(SESSION_BUSY_ERROR_CODE));
16
+ }
17
+ /**
18
+ * Error code the chat endpoint returns (HTTP 409) when the send's
19
+ * `lastMessageId` no longer matches the persisted transcript — another client
20
+ * appended to the session and this client is rendering a stale transcript.
21
+ */
22
+ const SESSION_MESSAGES_STALE_ERROR_CODE = "agent_session_messages_stale";
23
+ /** Whether an error is the chat endpoint's stale-transcript (HTTP 409) rejection. */
24
+ export function isSessionMessagesStaleError({ error, }) {
25
+ return (error instanceof Error &&
26
+ error.message.includes(SESSION_MESSAGES_STALE_ERROR_CODE));
27
+ }
28
+ /**
29
+ * Error code the chat and compact endpoints return (HTTP 409) when the request
30
+ * asserts a model the session is no longer on — another client moved it. The
31
+ * transcript is unaffected, so this is distinct from
32
+ * {@link SESSION_MESSAGES_STALE_ERROR_CODE}: the user needs to be told their model
33
+ * changed, not that messages were refreshed.
34
+ */
35
+ const SESSION_MODEL_STALE_ERROR_CODE = "agent_session_model_stale";
36
+ /** Whether an error is the stale-model (HTTP 409) rejection. */
37
+ export function isSessionModelStaleError({ error, }) {
38
+ return (error instanceof Error &&
39
+ error.message.includes(SESSION_MODEL_STALE_ERROR_CODE));
40
+ }
41
+ /**
42
+ * Error code the compact endpoint returns (HTTP 409) when there are no
43
+ * complete turns to compact — nothing new has finished since the latest
44
+ * checkpoint, or a concurrent request's checkpoint already covers them. A
45
+ * benign no-op, not a failure.
46
+ */
47
+ const SESSION_ALREADY_COMPACT_ERROR_CODE = "agent_session_already_compact";
12
48
  function trimTrailingSlash(value) {
13
49
  return value.replace(/\/+$/, "");
14
50
  }
@@ -28,12 +64,248 @@ function toLocalISOWithOffset(date) {
28
64
  const localIso = localDate.toISOString().slice(0, -1);
29
65
  return `${localIso}${sign}${offsetHours}:${offsetRemainderMinutes}`;
30
66
  }
67
+ /** Build the agent-session chat URL. */
68
+ export function buildAgentSessionChatUrl({ endpoint, agentSessionId, }) {
69
+ const path = AGENT_SESSION_CHAT_PATH.replace("{session_id}", encodeURIComponent(agentSessionId));
70
+ return `${trimTrailingSlash(endpoint)}${path}`;
71
+ }
72
+ /** Pull a printable error message out of an error response body, if any. */
73
+ async function readErrorDetail({ response, }) {
74
+ try {
75
+ return formatApiError(await response.json());
76
+ }
77
+ catch {
78
+ return null;
79
+ }
80
+ }
81
+ /** Create an `AgentSession`. */
82
+ export async function createAgentSession({ config, temporary, model, fetchImpl, }) {
83
+ const client = createPhoenixClient({ config, fetch: fetchImpl });
84
+ let agentSessionId;
85
+ try {
86
+ const { data: payload } = await client.POST("/v1/agent_sessions", {
87
+ body: { title: "", is_ephemeral: temporary, model },
88
+ });
89
+ agentSessionId = payload?.data.id;
90
+ }
91
+ catch (error) {
92
+ if (error instanceof HttpError) {
93
+ const detail = await readErrorDetail({ response: error.response });
94
+ throw new Error(`Could not create a PXI chat session: HTTP ${error.status} ${error.statusText} from ${error.url}.${detail ? ` ${detail}` : ""}`);
95
+ }
96
+ throw error;
97
+ }
98
+ if (!agentSessionId) {
99
+ throw new Error("Could not create a PXI chat session because Phoenix returned no session id.");
100
+ }
101
+ return {
102
+ id: agentSessionId,
103
+ title: "",
104
+ updatedAt: new Date().toISOString(),
105
+ isTemporary: temporary,
106
+ messages: [],
107
+ model,
108
+ };
109
+ }
31
110
  /**
32
- * Build the chat URL for a session, tolerating a trailing slash on the
33
- * configured endpoint and URL-encoding the session id.
111
+ * Fetch one page of a session's persisted transcript, oldest message first.
34
112
  */
35
- export function buildServerAgentChatUrl({ endpoint, sessionId, }) {
36
- return `${trimTrailingSlash(endpoint)}/agents/server/sessions/${encodeURIComponent(sessionId)}/chat`;
113
+ async function fetchAgentSessionMessagesPage({ client, sessionId, cursor, }) {
114
+ const { data: payload } = await client.GET("/v1/agent_sessions/{session_id}/messages", {
115
+ params: {
116
+ path: { session_id: sessionId },
117
+ query: cursor === null ? {} : { cursor },
118
+ },
119
+ });
120
+ if (!payload) {
121
+ throw new Error("Could not restore the selected PXI session because Phoenix returned no data.");
122
+ }
123
+ return {
124
+ messages: payload.data,
125
+ nextCursor: payload.next_cursor ?? null,
126
+ };
127
+ }
128
+ /** Create the session-management client used by the TUI. */
129
+ export function createPxiSessionClient({ config, fetch: fetchOverride, }) {
130
+ const fetchImpl = fetchOverride ??
131
+ (hasOAuthCredentials(config)
132
+ ? createOAuthFetch({ config })
133
+ : globalThis.fetch);
134
+ return {
135
+ createSession: ({ temporary, model }) => createAgentSession({ config, temporary, model, fetchImpl }),
136
+ async listSessions() {
137
+ const client = createPhoenixClient({ config, fetch: fetchImpl });
138
+ const sessions = [];
139
+ let cursor;
140
+ do {
141
+ const { data: payload } = await client.GET("/v1/agent_sessions", {
142
+ params: {
143
+ query: { cursor, limit: AGENT_SESSION_PAGE_LIMIT },
144
+ },
145
+ });
146
+ if (!payload) {
147
+ throw new Error("Could not load PXI sessions because Phoenix returned no data.");
148
+ }
149
+ sessions.push(...payload.data.map(({ id, title, updated_at, is_ephemeral }) => ({
150
+ id,
151
+ title,
152
+ updatedAt: updated_at,
153
+ isTemporary: is_ephemeral,
154
+ })));
155
+ cursor = payload.next_cursor ?? undefined;
156
+ } while (cursor);
157
+ return sessions;
158
+ },
159
+ async getSession({ sessionId }) {
160
+ const client = createPhoenixClient({ config, fetch: fetchImpl });
161
+ const { data: payload } = await client.GET("/v1/agent_sessions/{session_id}", {
162
+ params: {
163
+ path: { session_id: sessionId },
164
+ },
165
+ });
166
+ if (!payload) {
167
+ throw new Error("Could not restore the selected PXI session because Phoenix returned no data.");
168
+ }
169
+ const session = payload.data;
170
+ const messages = [];
171
+ let cursor = null;
172
+ do {
173
+ const page = await fetchAgentSessionMessagesPage({
174
+ client,
175
+ sessionId,
176
+ cursor,
177
+ });
178
+ messages.push(...page.messages);
179
+ cursor = page.nextCursor;
180
+ } while (cursor !== null);
181
+ return {
182
+ id: session.id,
183
+ title: session.title,
184
+ updatedAt: session.updated_at,
185
+ isTemporary: session.is_ephemeral,
186
+ isActive: session.is_active === true,
187
+ // Derived from the transcript actually applied, not the metadata
188
+ // response: the two requests aren't atomic, so the transcript can
189
+ // advance in between. The polling loop self-corrects next tick.
190
+ lastMessageId: messages.at(-1)?.id ?? null,
191
+ messages,
192
+ model: session.model,
193
+ };
194
+ },
195
+ async getSessionSyncState({ sessionId }) {
196
+ const client = createPhoenixClient({ config, fetch: fetchImpl });
197
+ const { data: payload } = await client.GET("/v1/agent_sessions/{session_id}", {
198
+ params: {
199
+ path: { session_id: sessionId },
200
+ },
201
+ });
202
+ if (!payload) {
203
+ throw new Error("Could not check the PXI session for updates because Phoenix " +
204
+ "returned no data.");
205
+ }
206
+ const session = payload.data;
207
+ return {
208
+ isActive: session.is_active === true,
209
+ updatedAt: session.updated_at,
210
+ lastMessageId: session.last_message_id ?? null,
211
+ };
212
+ },
213
+ async patchSessionModel({ sessionId, model }) {
214
+ const client = createPhoenixClient({ config, fetch: fetchImpl });
215
+ try {
216
+ const { data: payload } = await client.PATCH("/v1/agent_sessions/{session_id}", {
217
+ params: {
218
+ path: { session_id: sessionId },
219
+ },
220
+ body: { model },
221
+ });
222
+ if (!payload) {
223
+ throw new Error("Could not change the session's model because Phoenix returned no data.");
224
+ }
225
+ return payload.data.model;
226
+ }
227
+ catch (error) {
228
+ if (error instanceof HttpError) {
229
+ const detail = await readErrorDetail({ response: error.response });
230
+ throw new Error(`Could not change the session's model: HTTP ${error.status} ${error.statusText}.${detail ? ` ${detail}` : ""}`);
231
+ }
232
+ throw error;
233
+ }
234
+ },
235
+ async compactSession({ sessionId, model }) {
236
+ const client = createPhoenixClient({ config, fetch: fetchImpl });
237
+ try {
238
+ const { data: payload } = await client.POST("/v1/agent_sessions/{session_id}/compact", {
239
+ params: {
240
+ path: { session_id: sessionId },
241
+ },
242
+ body: { model },
243
+ });
244
+ if (!payload) {
245
+ throw new Error("Could not compact the PXI session because Phoenix returned no data.");
246
+ }
247
+ return {
248
+ compacted: true,
249
+ compactionMessage: payload.data,
250
+ };
251
+ }
252
+ catch (error) {
253
+ if (error instanceof HttpError) {
254
+ const code = await readConflictCode({ response: error.response });
255
+ if (code === SESSION_ALREADY_COMPACT_ERROR_CODE) {
256
+ return { compacted: false, compactionMessage: null };
257
+ }
258
+ throw await buildCompactionHttpError({ error });
259
+ }
260
+ throw error;
261
+ }
262
+ },
263
+ };
264
+ }
265
+ /**
266
+ * Read the `code` discriminator out of a conflict response body, if any. The
267
+ * response is cloned so the caller can still consume the body.
268
+ */
269
+ async function readConflictCode({ response, }) {
270
+ try {
271
+ const body = await response.clone().json();
272
+ if (body !== null && typeof body === "object") {
273
+ const record = body;
274
+ if (typeof record.code === "string") {
275
+ return record.code;
276
+ }
277
+ }
278
+ }
279
+ catch {
280
+ // Not JSON.
281
+ }
282
+ return null;
283
+ }
284
+ /**
285
+ * Translate a compaction HTTP failure into a printable error. A 409 whose body
286
+ * carries the session-busy or session-stale code is rethrown with that code in
287
+ * the message so {@link isSessionBusyError} / {@link isSessionMessagesStaleError}
288
+ * recognize it and the UI can enter its busy state or refresh the session.
289
+ */
290
+ async function buildCompactionHttpError({ error, }) {
291
+ const code = await readConflictCode({ response: error.response });
292
+ let detail = null;
293
+ try {
294
+ detail = formatApiError(await error.response.clone().json());
295
+ }
296
+ catch {
297
+ // Not JSON: fall through to the status-line message.
298
+ }
299
+ if (code === SESSION_BUSY_ERROR_CODE) {
300
+ return new Error(SESSION_BUSY_ERROR_CODE);
301
+ }
302
+ if (code === SESSION_MESSAGES_STALE_ERROR_CODE) {
303
+ return new Error(SESSION_MESSAGES_STALE_ERROR_CODE);
304
+ }
305
+ if (code === SESSION_MODEL_STALE_ERROR_CODE) {
306
+ return new Error(SESSION_MODEL_STALE_ERROR_CODE);
307
+ }
308
+ return new Error(`Could not compact the conversation: HTTP ${error.status} ${error.statusText}.${detail ? ` ${detail}` : ""}`);
37
309
  }
38
310
  /**
39
311
  * Assemble request headers from the config: any custom headers first, then a
@@ -77,19 +349,16 @@ export function buildPxiContexts({ enableWebAccess, enableSubagents, enableGraph
77
349
  },
78
350
  ];
79
351
  }
80
- /**
81
- * Assemble the full chat request body from the conversation so far and the
82
- * resolved runtime options — session id, trace settings, edit permission,
83
- * capability contexts, and model selection.
84
- */
85
- export function buildPxiChatRequest({ messages, options, }) {
352
+ /** Shared request fields derived from the resolved runtime options. */
353
+ function buildPxiRequestBase({ options }) {
86
354
  return {
87
355
  id: options.sessionId,
88
- messages,
89
356
  trigger: "submit-message",
90
- ingestTraces: options.ingestTraces,
357
+ // The CLI drives the headless agent rather than the browser assistant.
358
+ headless: true,
359
+ recordLocalTraces: options.ingestTraces,
91
360
  exportRemoteTraces: options.exportRemoteTraces,
92
- attachUserId: options.attachUserId,
361
+ instrumentUserId: options.attachUserId,
93
362
  editPermission: options.editPermission,
94
363
  contexts: buildPxiContexts({
95
364
  enableWebAccess: options.enableWebAccess,
@@ -99,28 +368,73 @@ export function buildPxiChatRequest({ messages, options, }) {
99
368
  model: options.modelSelection,
100
369
  };
101
370
  }
102
- /**
103
- * Create the AI SDK transport pointed at the configured Phoenix server-agent
104
- * endpoint. Each outgoing turn is rebuilt through {@link buildPxiChatRequest},
105
- * so per-request context (like the current time) stays fresh. Throws if no
106
- * endpoint is configured. `fetch` is injectable for testing.
107
- */
108
- export function createServerAgentTransport({ options, fetch, }) {
109
- if (!options.config.endpoint) {
371
+ /** Assemble the chat request. */
372
+ export function buildPxiChatRequest({ messages, options, }) {
373
+ const message = messages.at(-1);
374
+ if (!message) {
375
+ throw new Error("A chat submit request requires a message to send");
376
+ }
377
+ if (message.role !== "user") {
378
+ // The chat contract only accepts user messages; client tool results are
379
+ // submitted as `toolOutputs`, which the CLI never produces because it
380
+ // executes no client tools.
381
+ throw new Error("A chat submit request requires a trailing user message");
382
+ }
383
+ // The send's optimistic-concurrency check: the id of the last transcript
384
+ // message this client believes is persisted. The new user message at the
385
+ // tail is the turn being submitted, so the message before it is the
386
+ // persisted tail. Null while the transcript is empty.
387
+ const lastMessageId = messages.at(-2)?.id ?? null;
388
+ return {
389
+ ...buildPxiRequestBase({ options }),
390
+ message,
391
+ lastMessageId,
392
+ };
393
+ }
394
+ /** Create the AI SDK transport pointed at the configured Phoenix endpoint. */
395
+ export function createServerAgentTransport({ options, agentSessionId, fetch, }) {
396
+ const endpoint = options.config.endpoint;
397
+ if (!endpoint) {
110
398
  throw new Error("Phoenix endpoint not configured.");
111
399
  }
112
400
  const transportFetch = fetch ??
113
401
  (hasOAuthCredentials(options.config)
114
402
  ? createOAuthFetch({ config: options.config })
115
403
  : undefined);
404
+ // The server session is created lazily on the first send and reused for the
405
+ // rest of the chat. A failed creation clears the cached promise so the next
406
+ // send can retry instead of being stuck on the rejection.
407
+ let agentSessionIdPromise = agentSessionId
408
+ ? Promise.resolve(agentSessionId)
409
+ : null;
410
+ const getAgentSessionId = () => {
411
+ agentSessionIdPromise ??= createAgentSession({
412
+ config: options.config,
413
+ temporary: false,
414
+ model: options.modelSelection,
415
+ fetchImpl: transportFetch,
416
+ })
417
+ .then((session) => session.id)
418
+ .catch((error) => {
419
+ agentSessionIdPromise = null;
420
+ throw error;
421
+ });
422
+ return agentSessionIdPromise;
423
+ };
116
424
  return new DefaultChatTransport({
117
- api: buildServerAgentChatUrl({
118
- endpoint: options.config.endpoint,
119
- sessionId: options.sessionId,
425
+ api: buildAgentSessionChatUrl({
426
+ endpoint,
427
+ // Placeholder only: prepareSendMessagesRequest overrides the URL with
428
+ // the server-created session id on every send.
429
+ agentSessionId: "placeholder",
120
430
  }),
121
431
  headers: buildPxiHeaders({ config: options.config }),
122
432
  fetch: transportFetch,
123
- prepareSendMessagesRequest: ({ messages }) => ({
433
+ prepareSendMessagesRequest: async ({ messages }) => ({
434
+ api: buildAgentSessionChatUrl({
435
+ endpoint,
436
+ agentSessionId: await getAgentSessionId(),
437
+ }),
124
438
  body: buildPxiChatRequest({ messages, options }),
125
439
  }),
126
440
  });
@@ -131,9 +445,20 @@ export function createServerAgentTransport({ options, fetch, }) {
131
445
  * arrives. Resolves with the final, complete message (or `null` if the stream
132
446
  * produced nothing).
133
447
  */
134
- export async function streamAssistantMessage({ stream, onAssistantMessage, }) {
448
+ export async function streamAssistantMessage({ stream, onAssistantMessage, onSessionTitle, }) {
135
449
  let finalMessage = null;
136
- for await (const message of readUIMessageStream({ stream })) {
450
+ const observedStream = stream.pipeThrough(new TransformStream({
451
+ transform(chunk, controller) {
452
+ if (chunk.type === "data-session-summary" &&
453
+ typeof chunk.data === "string") {
454
+ onSessionTitle?.(chunk.data);
455
+ }
456
+ controller.enqueue(chunk);
457
+ },
458
+ }));
459
+ for await (const message of readUIMessageStream({
460
+ stream: observedStream,
461
+ })) {
137
462
  finalMessage = message;
138
463
  onAssistantMessage(message);
139
464
  }
@@ -146,9 +471,9 @@ export async function streamAssistantMessage({ stream, onAssistantMessage, }) {
146
471
  * message (e.g. how to fix missing credentials). The transport defaults to a
147
472
  * real server-agent transport but is injectable for testing.
148
473
  */
149
- export function createPxiChatClient({ options, transport = createServerAgentTransport({ options }), }) {
474
+ export function createPxiChatClient({ options, agentSessionId, transport = createServerAgentTransport({ options, agentSessionId }), }) {
150
475
  return {
151
- async sendMessage({ messages, abortSignal, onAssistantMessage }) {
476
+ async sendMessage({ messages, abortSignal, onAssistantMessage, onSessionTitle, }) {
152
477
  try {
153
478
  const stream = await transport.sendMessages({
154
479
  trigger: "submit-message",
@@ -157,9 +482,21 @@ export function createPxiChatClient({ options, transport = createServerAgentTran
157
482
  messages,
158
483
  abortSignal,
159
484
  });
160
- return await streamAssistantMessage({ stream, onAssistantMessage });
485
+ return await streamAssistantMessage({
486
+ stream,
487
+ onAssistantMessage,
488
+ onSessionTitle,
489
+ });
161
490
  }
162
491
  catch (error) {
492
+ // Session-conflict rejections (HTTP 409: another client's turn holds
493
+ // the lock, or this client's transcript went stale) are not
494
+ // model/provider failures: rethrow them unwrapped so the UI can enter
495
+ // its busy state or refresh the transcript.
496
+ if (isSessionBusyError({ error }) ||
497
+ isSessionMessagesStaleError({ error })) {
498
+ throw error;
499
+ }
163
500
  throw formatPxiRuntimeError({
164
501
  error,
165
502
  modelSelection: options.modelSelection,
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/pxi/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/pxi/client.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,SAAS,GAGV,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,oBAAoB,EACpB,mBAAmB,GAEpB,MAAM,IAAI,CAAC;AAEZ,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAEhD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAepD,MAAM,uBAAuB,GAC3B,sCAA8D,CAAC;AACjE,MAAM,wBAAwB,GAAG,GAAG,CAAC;AAOrC;;;GAGG;AACH,MAAM,uBAAuB,GAC3B,oBAAuD,CAAC;AAE1D,iFAAiF;AACjF,MAAM,UAAU,kBAAkB,CAAC,EAAE,KAAK,EAAsB;IAC9D,OAAO,CACL,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CAC1E,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,iCAAiC,GACrC,8BAAiE,CAAC;AAEpE,qFAAqF;AACrF,MAAM,UAAU,2BAA2B,CAAC,EAC1C,KAAK,GAGN;IACC,OAAO,CACL,KAAK,YAAY,KAAK;QACtB,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,iCAAiC,CAAC,CAC1D,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,8BAA8B,GAClC,2BAA8D,CAAC;AAEjE,gEAAgE;AAChE,MAAM,UAAU,wBAAwB,CAAC,EACvC,KAAK,GAGN;IACC,OAAO,CACL,KAAK,YAAY,KAAK;QACtB,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,8BAA8B,CAAC,CACvD,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,kCAAkC,GACtC,+BAAkE,CAAC;AAErE,SAAS,iBAAiB,CAAC,KAAa;IACtC,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AACnC,CAAC;AAED;;;;;GAKG;AACH,SAAS,oBAAoB,CAAC,IAAU;IACtC,MAAM,aAAa,GAAG,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAChD,MAAM,IAAI,GAAG,aAAa,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IAC5C,MAAM,qBAAqB,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IACtD,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,qBAAqB,GAAG,EAAE,CAAC,CAAC,CAAC,QAAQ,CACzE,CAAC,EACD,GAAG,CACJ,CAAC;IACF,MAAM,sBAAsB,GAAG,MAAM,CAAC,qBAAqB,GAAG,EAAE,CAAC,CAAC,QAAQ,CACxE,CAAC,EACD,GAAG,CACJ,CAAC;IACF,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,iBAAiB,EAAE,GAAG,KAAK,CAAC,CAAC;IAC9E,MAAM,QAAQ,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACtD,OAAO,GAAG,QAAQ,GAAG,IAAI,GAAG,WAAW,IAAI,sBAAsB,EAAE,CAAC;AACtE,CAAC;AAED,wCAAwC;AACxC,MAAM,UAAU,wBAAwB,CAAC,EACvC,QAAQ,EACR,cAAc,GAIf;IACC,MAAM,IAAI,GAAG,uBAAuB,CAAC,OAAO,CAC1C,cAAc,EACd,kBAAkB,CAAC,cAAc,CAAC,CACnC,CAAC;IACF,OAAO,GAAG,iBAAiB,CAAC,QAAQ,CAAC,GAAG,IAAI,EAAE,CAAC;AACjD,CAAC;AAED,4EAA4E;AAC5E,KAAK,UAAU,eAAe,CAAC,EAC7B,QAAQ,GAGT;IACC,IAAI,CAAC;QACH,OAAO,cAAc,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IAC/C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,gCAAgC;AAChC,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,EACvC,MAAM,EACN,SAAS,EACT,KAAK,EACL,SAAS,GAMV;IACC,MAAM,MAAM,GAAG,mBAAmB,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IACjE,IAAI,cAAkC,CAAC;IACvC,IAAI,CAAC;QACH,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,oBAAoB,EAAE;YAChE,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,YAAY,EAAE,SAAS,EAAE,KAAK,EAAE;SACpD,CAAC,CAAC;QACH,cAAc,GAAG,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC;IACpC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,SAAS,EAAE,CAAC;YAC/B,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;YACnE,MAAM,IAAI,KAAK,CACb,6CAA6C,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,UAAU,SAAS,KAAK,CAAC,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAChI,CAAC;QACJ,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;IACD,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CACb,6EAA6E,CAC9E,CAAC;IACJ,CAAC;IACD,OAAO;QACL,EAAE,EAAE,cAAc;QAClB,KAAK,EAAE,EAAE;QACT,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,WAAW,EAAE,SAAS;QACtB,QAAQ,EAAE,EAAE;QACZ,KAAK;KACN,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,6BAA6B,CAAC,EAC3C,MAAM,EACN,SAAS,EACT,MAAM,GAKP;IACC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,GAAG,CACxC,0CAA0C,EAC1C;QACE,MAAM,EAAE;YACN,IAAI,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE;YAC/B,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE;SACzC;KACF,CACF,CAAC;IACF,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACb,8EAA8E,CAC/E,CAAC;IACJ,CAAC;IACD,OAAO;QACL,QAAQ,EAAE,OAAO,CAAC,IAAoB;QACtC,UAAU,EAAE,OAAO,CAAC,WAAW,IAAI,IAAI;KACxC,CAAC;AACJ,CAAC;AAED,4DAA4D;AAC5D,MAAM,UAAU,sBAAsB,CAAC,EACrC,MAAM,EACN,KAAK,EAAE,aAAa,GAIrB;IACC,MAAM,SAAS,GACb,aAAa;QACb,CAAC,mBAAmB,CAAC,MAAM,CAAC;YAC1B,CAAC,CAAC,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;YAC9B,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IACxB,OAAO;QACL,aAAa,EAAE,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE,CACtC,kBAAkB,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;QAC7D,KAAK,CAAC,YAAY;YAChB,MAAM,MAAM,GAAG,mBAAmB,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;YACjE,MAAM,QAAQ,GAAwB,EAAE,CAAC;YACzC,IAAI,MAA0B,CAAC;YAC/B,GAAG,CAAC;gBACF,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,oBAAoB,EAAE;oBAC/D,MAAM,EAAE;wBACN,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,wBAAwB,EAAE;qBACnD;iBACF,CAAC,CAAC;gBACH,IAAI,CAAC,OAAO,EAAE,CAAC;oBACb,MAAM,IAAI,KAAK,CACb,+DAA+D,CAChE,CAAC;gBACJ,CAAC;gBACD,QAAQ,CAAC,IAAI,CACX,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CACjB,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,EAAqB,EAAE,CAAC,CAAC;oBAC/D,EAAE;oBACF,KAAK;oBACL,SAAS,EAAE,UAAU;oBACrB,WAAW,EAAE,YAAY;iBAC1B,CAAC,CACH,CACF,CAAC;gBACF,MAAM,GAAG,OAAO,CAAC,WAAW,IAAI,SAAS,CAAC;YAC5C,CAAC,QAAQ,MAAM,EAAE;YACjB,OAAO,QAAQ,CAAC;QAClB,CAAC;QACD,KAAK,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE;YAC5B,MAAM,MAAM,GAAG,mBAAmB,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;YACjE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,GAAG,CACxC,iCAAiC,EACjC;gBACE,MAAM,EAAE;oBACN,IAAI,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE;iBAChC;aACF,CACF,CAAC;YACF,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM,IAAI,KAAK,CACb,8EAA8E,CAC/E,CAAC;YACJ,CAAC;YACD,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;YAC7B,MAAM,QAAQ,GAAiB,EAAE,CAAC;YAClC,IAAI,MAAM,GAAkB,IAAI,CAAC;YACjC,GAAG,CAAC;gBACF,MAAM,IAAI,GAAG,MAAM,6BAA6B,CAAC;oBAC/C,MAAM;oBACN,SAAS;oBACT,MAAM;iBACP,CAAC,CAAC;gBACH,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAChC,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC;YAC3B,CAAC,QAAQ,MAAM,KAAK,IAAI,EAAE;YAC1B,OAAO;gBACL,EAAE,EAAE,OAAO,CAAC,EAAE;gBACd,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,SAAS,EAAE,OAAO,CAAC,UAAU;gBAC7B,WAAW,EAAE,OAAO,CAAC,YAAY;gBACjC,QAAQ,EAAE,OAAO,CAAC,SAAS,KAAK,IAAI;gBACpC,iEAAiE;gBACjE,kEAAkE;gBAClE,gEAAgE;gBAChE,aAAa,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,IAAI;gBAC1C,QAAQ;gBACR,KAAK,EAAE,OAAO,CAAC,KAAK;aACrB,CAAC;QACJ,CAAC;QACD,KAAK,CAAC,mBAAmB,CAAC,EAAE,SAAS,EAAE;YACrC,MAAM,MAAM,GAAG,mBAAmB,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;YACjE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,GAAG,CACxC,iCAAiC,EACjC;gBACE,MAAM,EAAE;oBACN,IAAI,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE;iBAChC;aACF,CACF,CAAC;YACF,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM,IAAI,KAAK,CACb,8DAA8D;oBAC5D,mBAAmB,CACtB,CAAC;YACJ,CAAC;YACD,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;YAC7B,OAAO;gBACL,QAAQ,EAAE,OAAO,CAAC,SAAS,KAAK,IAAI;gBACpC,SAAS,EAAE,OAAO,CAAC,UAAU;gBAC7B,aAAa,EAAE,OAAO,CAAC,eAAe,IAAI,IAAI;aAC/C,CAAC;QACJ,CAAC;QACD,KAAK,CAAC,iBAAiB,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE;YAC1C,MAAM,MAAM,GAAG,mBAAmB,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;YACjE,IAAI,CAAC;gBACH,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,KAAK,CAC1C,iCAAiC,EACjC;oBACE,MAAM,EAAE;wBACN,IAAI,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE;qBAChC;oBACD,IAAI,EAAE,EAAE,KAAK,EAAE;iBAChB,CACF,CAAC;gBACF,IAAI,CAAC,OAAO,EAAE,CAAC;oBACb,MAAM,IAAI,KAAK,CACb,wEAAwE,CACzE,CAAC;gBACJ,CAAC;gBACD,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;YAC5B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,KAAK,YAAY,SAAS,EAAE,CAAC;oBAC/B,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;oBACnE,MAAM,IAAI,KAAK,CACb,8CAA8C,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,UAAU,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAC/G,CAAC;gBACJ,CAAC;gBACD,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;QACD,KAAK,CAAC,cAAc,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE;YACvC,MAAM,MAAM,GAAG,mBAAmB,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;YACjE,IAAI,CAAC;gBACH,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CACzC,yCAAyC,EACzC;oBACE,MAAM,EAAE;wBACN,IAAI,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE;qBAChC;oBACD,IAAI,EAAE,EAAE,KAAK,EAAE;iBAChB,CACF,CAAC;gBACF,IAAI,CAAC,OAAO,EAAE,CAAC;oBACb,MAAM,IAAI,KAAK,CACb,qEAAqE,CACtE,CAAC;gBACJ,CAAC;gBACD,OAAO;oBACL,SAAS,EAAE,IAAI;oBACf,iBAAiB,EAAE,OAAO,CAAC,IAAkB;iBAC9C,CAAC;YACJ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,KAAK,YAAY,SAAS,EAAE,CAAC;oBAC/B,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;oBAClE,IAAI,IAAI,KAAK,kCAAkC,EAAE,CAAC;wBAChD,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC;oBACvD,CAAC;oBACD,MAAM,MAAM,wBAAwB,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;gBAClD,CAAC;gBACD,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,gBAAgB,CAAC,EAC9B,QAAQ,GAGT;IACC,IAAI,CAAC;QACH,MAAM,IAAI,GAAY,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC;QACpD,IAAI,IAAI,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC9C,MAAM,MAAM,GAAG,IAA0B,CAAC;YAC1C,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACpC,OAAO,MAAM,CAAC,IAAI,CAAC;YACrB,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,YAAY;IACd,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;GAKG;AACH,KAAK,UAAU,wBAAwB,CAAC,EACtC,KAAK,GAGN;IACC,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;IAClE,IAAI,MAAM,GAAkB,IAAI,CAAC;IACjC,IAAI,CAAC;QACH,MAAM,GAAG,cAAc,CAAC,MAAM,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;IAC/D,CAAC;IAAC,MAAM,CAAC;QACP,qDAAqD;IACvD,CAAC;IACD,IAAI,IAAI,KAAK,uBAAuB,EAAE,CAAC;QACrC,OAAO,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAC5C,CAAC;IACD,IAAI,IAAI,KAAK,iCAAiC,EAAE,CAAC;QAC/C,OAAO,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;IACtD,CAAC;IACD,IAAI,IAAI,KAAK,8BAA8B,EAAE,CAAC;QAC5C,OAAO,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IACnD,CAAC;IACD,OAAO,IAAI,KAAK,CACd,4CAA4C,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,UAAU,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAC7G,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,EAC9B,MAAM,GAGP;IACC,OAAO;QACL,GAAG,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;QACzB,GAAG,CAAC,MAAM,CAAC,MAAM;YACf,CAAC,CAAC,EAAE,aAAa,EAAE,UAAU,MAAM,CAAC,MAAM,EAAE,EAAE;YAC9C,CAAC,CAAC,MAAM,CAAC,WAAW;gBAClB,CAAC,CAAC,EAAE,aAAa,EAAE,UAAU,MAAM,CAAC,WAAW,CAAC,WAAW,EAAE,EAAE;gBAC/D,CAAC,CAAC,EAAE,CAAC;KACV,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,EAC/B,eAAe,EACf,eAAe,EACf,sBAAsB,EACtB,GAAG,GAAG,IAAI,IAAI,EAAE,EAChB,QAAQ,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC,eAAe,EAAE,CAAC,QAAQ,GAO5D;IACC,OAAO;QACL;YACE,IAAI,EAAE,KAAK;YACX,eAAe,EAAE,oBAAoB,CAAC,GAAG,CAAC;YAC1C,QAAQ;SACT;QACD;YACE,IAAI,EAAE,SAAS;YACf,gBAAgB,EAAE,sBAAsB;SACzC;QACD;YACE,IAAI,EAAE,YAAY;YAClB,OAAO,EAAE,eAAe;SACzB;QACD;YACE,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,eAAe;SACzB;KACF,CAAC;AACJ,CAAC;AAED,uEAAuE;AACvE,SAAS,mBAAmB,CAAC,EAAE,OAAO,EAAkC;IACtE,OAAO;QACL,EAAE,EAAE,OAAO,CAAC,SAAS;QACrB,OAAO,EAAE,gBAAyB;QAClC,uEAAuE;QACvE,QAAQ,EAAE,IAAI;QACd,iBAAiB,EAAE,OAAO,CAAC,YAAY;QACvC,kBAAkB,EAAE,OAAO,CAAC,kBAAkB;QAC9C,gBAAgB,EAAE,OAAO,CAAC,YAAY;QACtC,cAAc,EAAE,OAAO,CAAC,cAAc;QACtC,QAAQ,EAAE,gBAAgB,CAAC;YACzB,eAAe,EAAE,OAAO,CAAC,eAAe;YACxC,eAAe,EAAE,OAAO,CAAC,eAAe;YACxC,sBAAsB,EAAE,OAAO,CAAC,sBAAsB;SACvD,CAAC;QACF,KAAK,EAAE,OAAO,CAAC,cAAc;KAC9B,CAAC;AACJ,CAAC;AAED,iCAAiC;AACjC,MAAM,UAAU,mBAAmB,CAAC,EAClC,QAAQ,EACR,OAAO,GAIR;IACC,MAAM,OAAO,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAChC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;IACtE,CAAC;IACD,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC5B,wEAAwE;QACxE,sEAAsE;QACtE,4BAA4B;QAC5B,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;IAC5E,CAAC;IACD,yEAAyE;IACzE,yEAAyE;IACzE,oEAAoE;IACpE,sDAAsD;IACtD,MAAM,aAAa,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,IAAI,CAAC;IAClD,OAAO;QACL,GAAG,mBAAmB,CAAC,EAAE,OAAO,EAAE,CAAC;QACnC,OAAO;QACP,aAAa;KACd,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,0BAA0B,CAAC,EACzC,OAAO,EACP,cAAc,EACd,KAAK,GAKN;IACC,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC;IACzC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IACtD,CAAC;IAED,MAAM,cAAc,GAClB,KAAK;QACL,CAAC,mBAAmB,CAAC,OAAO,CAAC,MAAM,CAAC;YAClC,CAAC,CAAC,gBAAgB,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;YAC9C,CAAC,CAAC,SAAS,CAAC,CAAC;IAEjB,4EAA4E;IAC5E,4EAA4E;IAC5E,0DAA0D;IAC1D,IAAI,qBAAqB,GAA2B,cAAc;QAChE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC;QACjC,CAAC,CAAC,IAAI,CAAC;IACT,MAAM,iBAAiB,GAAG,GAAoB,EAAE;QAC9C,qBAAqB,KAAK,kBAAkB,CAAC;YAC3C,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,SAAS,EAAE,KAAK;YAChB,KAAK,EAAE,OAAO,CAAC,cAAc;YAC7B,SAAS,EAAE,cAAc;SAC1B,CAAC;aACC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;aAC7B,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;YACxB,qBAAqB,GAAG,IAAI,CAAC;YAC7B,MAAM,KAAK,CAAC;QACd,CAAC,CAAC,CAAC;QACL,OAAO,qBAAqB,CAAC;IAC/B,CAAC,CAAC;IAEF,OAAO,IAAI,oBAAoB,CAAa;QAC1C,GAAG,EAAE,wBAAwB,CAAC;YAC5B,QAAQ;YACR,sEAAsE;YACtE,+CAA+C;YAC/C,cAAc,EAAE,aAAa;SAC9B,CAAC;QACF,OAAO,EAAE,eAAe,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;QACpD,KAAK,EAAE,cAAc;QACrB,0BAA0B,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;YACnD,GAAG,EAAE,wBAAwB,CAAC;gBAC5B,QAAQ;gBACR,cAAc,EAAE,MAAM,iBAAiB,EAAE;aAC1C,CAAC;YACF,IAAI,EAAE,mBAAmB,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;SACjD,CAAC;KACH,CAAC,CAAC;AACL,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,EAC3C,MAAM,EACN,kBAAkB,EAClB,cAAc,GAKf;IACC,IAAI,YAAY,GAAsB,IAAI,CAAC;IAC3C,MAAM,cAAc,GAAG,MAAM,CAAC,WAAW,CACvC,IAAI,eAAe,CAAiC;QAClD,SAAS,CAAC,KAAK,EAAE,UAAU;YACzB,IACE,KAAK,CAAC,IAAI,KAAK,sBAAsB;gBACrC,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,EAC9B,CAAC;gBACD,cAAc,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC/B,CAAC;YACD,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;KACF,CAAC,CACH,CAAC;IACF,IAAI,KAAK,EAAE,MAAM,OAAO,IAAI,mBAAmB,CAAa;QAC1D,MAAM,EAAE,cAAc;KACvB,CAAC,EAAE,CAAC;QACH,YAAY,GAAG,OAAO,CAAC;QACvB,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAC9B,CAAC;IACD,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CAAC,EAClC,OAAO,EACP,cAAc,EACd,SAAS,GAAG,0BAA0B,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,GAKpE;IACC,OAAO;QACL,KAAK,CAAC,WAAW,CAAC,EAChB,QAAQ,EACR,WAAW,EACX,kBAAkB,EAClB,cAAc,GACf;YACC,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,YAAY,CAAC;oBAC1C,OAAO,EAAE,gBAAgB;oBACzB,MAAM,EAAE,OAAO,CAAC,SAAS;oBACzB,SAAS,EAAE,SAAS;oBACpB,QAAQ;oBACR,WAAW;iBACZ,CAAC,CAAC;gBACH,OAAO,MAAM,sBAAsB,CAAC;oBAClC,MAAM;oBACN,kBAAkB;oBAClB,cAAc;iBACf,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,qEAAqE;gBACrE,4DAA4D;gBAC5D,sEAAsE;gBACtE,4CAA4C;gBAC5C,IACE,kBAAkB,CAAC,EAAE,KAAK,EAAE,CAAC;oBAC7B,2BAA2B,CAAC,EAAE,KAAK,EAAE,CAAC,EACtC,CAAC;oBACD,MAAM,KAAK,CAAC;gBACd,CAAC;gBACD,MAAM,qBAAqB,CAAC;oBAC1B,KAAK;oBACL,cAAc,EAAE,OAAO,CAAC,cAAc;iBACvC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC;AAED,mEAAmE;AACnE,MAAM,UAAU,iBAAiB,CAAC,EAAE,IAAI,EAAoB;IAC1D,OAAO;QACL,EAAE,EAAE,MAAM,CAAC,UAAU,EAAE;QACvB,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;KAChC,CAAC;AACJ,CAAC"}
@@ -5,7 +5,16 @@
5
5
  * instantly and never consume a network round-trip.
6
6
  */
7
7
  export type CommandContext = {
8
- clearMessages: () => void;
8
+ startNewSession: (options: {
9
+ temporary: boolean;
10
+ }) => void;
11
+ openModelPicker: () => void;
12
+ openSessionPicker: () => void;
13
+ /**
14
+ * Compact older conversation context into a checkpoint summary. Any text
15
+ * after the command is sent as a follow-up message once compaction finishes.
16
+ */
17
+ compactSession: (pendingText?: string) => void;
9
18
  exit: () => void;
10
19
  };
11
20
  export type PxiCommand = {
@@ -1 +1 @@
1
- {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/pxi/commands.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,MAAM,cAAc,GAAG;IAC3B,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,IAAI,EAAE,MAAM,IAAI,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,mEAAmE;IACnE,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,cAAc,KAAK,IAAI,CAAC;CACtD,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,UAAU,EAkBtC,CAAC;AAIF,MAAM,MAAM,kBAAkB,GAC1B;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACjC;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,GACnB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAErB;;;;;GAKG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,cAAc,GAClB,kBAAkB,CAoBpB;AAED,uFAAuF;AACvF,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAKhE;AAED,kFAAkF;AAClF,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,EAAE,CAG7D"}
1
+ {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/pxi/commands.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,MAAM,cAAc,GAAG;IAC3B,eAAe,EAAE,CAAC,OAAO,EAAE;QAAE,SAAS,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAC;IAC3D,eAAe,EAAE,MAAM,IAAI,CAAC;IAC5B,iBAAiB,EAAE,MAAM,IAAI,CAAC;IAC9B;;;OAGG;IACH,cAAc,EAAE,CAAC,WAAW,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/C,IAAI,EAAE,MAAM,IAAI,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,mEAAmE;IACnE,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,cAAc,KAAK,IAAI,CAAC;CACtD,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,UAAU,EA2CtC,CAAC;AAIF,MAAM,MAAM,kBAAkB,GAC1B;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACjC;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,GACnB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAErB;;;;;GAKG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,cAAc,GAClB,kBAAkB,CAoBpB;AAED,uFAAuF;AACvF,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAKhE;AAED,kFAAkF;AAClF,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,EAAE,CAG7D"}
@@ -7,8 +7,33 @@
7
7
  export const SLASH_COMMANDS = [
8
8
  {
9
9
  name: "clear",
10
- description: "Clear the conversation history",
11
- handler: (_args, ctx) => ctx.clearMessages(),
10
+ description: "Start a new persisted session (alias for /new)",
11
+ handler: (_args, ctx) => ctx.startNewSession({ temporary: false }),
12
+ },
13
+ {
14
+ name: "compact",
15
+ description: "Compact older conversation context",
16
+ handler: (args, ctx) => ctx.compactSession(args || undefined),
17
+ },
18
+ {
19
+ name: "model",
20
+ description: "Switch models for this session",
21
+ handler: (_args, ctx) => ctx.openModelPicker(),
22
+ },
23
+ {
24
+ name: "new",
25
+ description: "Start a new persisted session",
26
+ handler: (_args, ctx) => ctx.startNewSession({ temporary: false }),
27
+ },
28
+ {
29
+ name: "sessions",
30
+ description: "Browse and restore persisted sessions",
31
+ handler: (_args, ctx) => ctx.openSessionPicker(),
32
+ },
33
+ {
34
+ name: "temporary",
35
+ description: "Start a new temporary session",
36
+ handler: (_args, ctx) => ctx.startNewSession({ temporary: true }),
12
37
  },
13
38
  {
14
39
  name: "exit",
@@ -1 +1 @@
1
- {"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/pxi/commands.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAcH,MAAM,CAAC,MAAM,cAAc,GAAiB;IAC1C;QACE,IAAI,EAAE,OAAO;QACb,WAAW,EAAE,gCAAgC;QAC7C,OAAO,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,aAAa,EAAE;KAC7C;IACD;QACE,IAAI,EAAE,MAAM;QACZ,WAAW,EAAE,UAAU;QACvB,OAAO,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE;KACpC;IACD;QACE,IAAI,EAAE,MAAM;QACZ,WAAW,EAAE,+BAA+B;QAC5C,OAAO,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;YACvB,wDAAwD;QAC1D,CAAC;KACF;CACF,CAAC;AAEF,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAOpE;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAC7B,KAAa,EACb,GAAmB;IAEnB,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;IAChD,MAAM,UAAU,GAAG,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC7C,MAAM,IAAI,GAAG,CACX,UAAU,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CACrE,CAAC,WAAW,EAAE,CAAC;IAChB,MAAM,IAAI,GACR,UAAU,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAErE,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QACpB,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAC1B,CAAC;IAED,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACtC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IACnC,CAAC;IAED,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAC3B,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;AAC7B,CAAC;AAED,uFAAuF;AACvF,MAAM,UAAU,mBAAmB,CAAC,KAAa;IAC/C,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACxC,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC5B,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACrC,OAAO,UAAU,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;AAC9D,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,gBAAgB,CAAC,MAAc;IAC7C,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;IACnC,OAAO,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;AAChE,CAAC"}
1
+ {"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/pxi/commands.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import type { PxiMessage } from "./types.js";
2
+ /**
3
+ * Compaction checkpoints in the PXI transcript.
4
+ *
5
+ * Compacting a session persists a checkpoint message that summarizes every
6
+ * prior turn; the server then loads model history from the latest checkpoint
7
+ * onward. On the wire a checkpoint is an ordinary user-role message flagged by
8
+ * `metadata.phoenix.isCompactionMessage`, so the transcript renders it distinctly
9
+ * rather than as something the user typed.
10
+ */
11
+ /** Whether a transcript message is a compaction checkpoint. */
12
+ export declare function isCompactionMessage({ message, }: {
13
+ message: PxiMessage;
14
+ }): boolean;
15
+ /** The checkpoint's summary text — the concatenated text parts. */
16
+ export declare function getCompactionSummary({ message, }: {
17
+ message: PxiMessage;
18
+ }): string;
19
+ //# sourceMappingURL=compaction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compaction.d.ts","sourceRoot":"","sources":["../../src/pxi/compaction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE1C;;;;;;;;GAQG;AAEH,+DAA+D;AAC/D,wBAAgB,mBAAmB,CAAC,EAClC,OAAO,GACR,EAAE;IACD,OAAO,EAAE,UAAU,CAAC;CACrB,GAAG,OAAO,CAOV;AAED,mEAAmE;AACnE,wBAAgB,oBAAoB,CAAC,EACnC,OAAO,GACR,EAAE;IACD,OAAO,EAAE,UAAU,CAAC;CACrB,GAAG,MAAM,CAKT"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Compaction checkpoints in the PXI transcript.
3
+ *
4
+ * Compacting a session persists a checkpoint message that summarizes every
5
+ * prior turn; the server then loads model history from the latest checkpoint
6
+ * onward. On the wire a checkpoint is an ordinary user-role message flagged by
7
+ * `metadata.phoenix.isCompactionMessage`, so the transcript renders it distinctly
8
+ * rather than as something the user typed.
9
+ */
10
+ /** Whether a transcript message is a compaction checkpoint. */
11
+ export function isCompactionMessage({ message, }) {
12
+ const phoenixMetadata = message.metadata?.phoenix;
13
+ return (message.role === "user" &&
14
+ phoenixMetadata?.type === "user" &&
15
+ phoenixMetadata.isCompactionMessage === true);
16
+ }
17
+ /** The checkpoint's summary text — the concatenated text parts. */
18
+ export function getCompactionSummary({ message, }) {
19
+ return message.parts
20
+ .filter((part) => part.type === "text")
21
+ .map((part) => part.text)
22
+ .join("");
23
+ }
24
+ //# sourceMappingURL=compaction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compaction.js","sourceRoot":"","sources":["../../src/pxi/compaction.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AAEH,+DAA+D;AAC/D,MAAM,UAAU,mBAAmB,CAAC,EAClC,OAAO,GAGR;IACC,MAAM,eAAe,GAAG,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC;IAClD,OAAO,CACL,OAAO,CAAC,IAAI,KAAK,MAAM;QACvB,eAAe,EAAE,IAAI,KAAK,MAAM;QAChC,eAAe,CAAC,mBAAmB,KAAK,IAAI,CAC7C,CAAC;AACJ,CAAC;AAED,mEAAmE;AACnE,MAAM,UAAU,oBAAoB,CAAC,EACnC,OAAO,GAGR;IACC,OAAO,OAAO,CAAC,KAAK;SACjB,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC;SACtC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;SACxB,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC"}