@lumavox/client 0.0.0-stage → 0.1.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.
@@ -0,0 +1,776 @@
1
+ export type ClientOptions = {
2
+ baseUrl: `${string}://${string}` | (string & {});
3
+ };
4
+ export type ErrorResponse = {
5
+ error: ErrorInfo;
6
+ };
7
+ export type ErrorInfo = {
8
+ /**
9
+ * Machine-readable error category
10
+ */
11
+ type: string;
12
+ /**
13
+ * Human-readable explanation
14
+ */
15
+ message: string;
16
+ /**
17
+ * Echo of X-Request-Id — include when reporting issues
18
+ */
19
+ request_id: string;
20
+ /**
21
+ * Field-level validation errors (422 only)
22
+ */
23
+ details?: Array<{
24
+ [key: string]: string;
25
+ }> | null;
26
+ };
27
+ export type SessionDetail = {
28
+ agent_id: string;
29
+ created_at: string;
30
+ /**
31
+ * Who this conversation is with. Send it again to open another conversation with the same person, carrying their memory.
32
+ */
33
+ end_user_id: string;
34
+ id: string;
35
+ /**
36
+ * The conversation so far, oldest first.
37
+ *
38
+ * **The most recent 50 by default**, not the whole transcript — a long conversation is not something a caller can be handed in one response. `next_before` says whether there are older ones and how to reach them; `limit` on `GET /v1/agent/sessions/{session_id}` raises or lowers the page, up to 200.
39
+ *
40
+ * **Empty on a new conversation, including for an agent that has an opening line**. The opening line — generated or scripted — is the first turn on `/v1/agent/stream`, so it is written when a client connects rather than when the session is created. Opening a session makes no model call and no speech call of any kind.
41
+ */
42
+ messages: Array<MessageInfo>;
43
+ /**
44
+ * Pass as `before` on `GET /v1/agent/sessions/{session_id}` to read the page of **older** messages.
45
+ *
46
+ * Null when `messages` reaches the beginning of the conversation — so paging is `while (next_before) fetch(before: next_before)` and never ends on an empty page.
47
+ *
48
+ * It is a `seq`, the position of the oldest message returned, and `before` is exclusive. Positions are sparse — a conversation greeted twice has a gap — so nothing that counts rows can be substituted for it.
49
+ */
50
+ next_before?: number | null;
51
+ /**
52
+ * How this agent stands with this person, as the conversation opens.
53
+ *
54
+ * **Null when the agent has `relation_enabled` off**, which is not the same as "they have no history": the counters run for every pair regardless, and returning one for an agent that keeps none would show a relationship the model is not being told about.
55
+ *
56
+ * It belongs to the **person**, not the conversation, so it carries across every session with the same `end_user_id`. Here so that rendering it at conversation start needs no second call; `GET /v1/agent/relations` is still how you read it any other time, and the socket's `relation` event is how you learn it moved mid-turn — which is rare, and is the only time it changes.
57
+ */
58
+ relation?: RelationInfo | null;
59
+ /**
60
+ * True when this is a conversation that already existed rather than a new one — see `resume` on the request.
61
+ *
62
+ * Worth branching on: a resumed session arrives with its `messages` already populated and its `turn_seq` past zero, so a client that assumed an empty transcript will render nothing until the next turn.
63
+ */
64
+ resumed?: boolean;
65
+ title: string | null;
66
+ turn_seq: number;
67
+ updated_at: string;
68
+ };
69
+ export type MessageInfo = {
70
+ content: string;
71
+ created_at: string;
72
+ id: string;
73
+ /**
74
+ * On a reply: what the agent looked up in its knowledge for it — each lookup's query, outcome and the entries it found, with their scores. Null when nothing was looked up.
75
+ */
76
+ knowledge?: MessageKnowledge | null;
77
+ /**
78
+ * How the agent said it felt when it wrote this reply, when the agent reports moods. Null on user messages, on agents with emotion off, and on any reply where the model did not report a usable one.
79
+ */
80
+ mood?: string | null;
81
+ /**
82
+ * How strongly, 0 to 1. Null when the model gave a label without a number — the label is the half it gets right.
83
+ */
84
+ mood_intensity?: number | null;
85
+ /**
86
+ * `user` or `assistant`.
87
+ */
88
+ role: string;
89
+ };
90
+ export type MessageKnowledge = {
91
+ lookups?: Array<KnowledgeLookupInfo>;
92
+ /**
93
+ * How the agent read its knowledge on this turn: `lookup` or `prompt`.
94
+ */
95
+ mode: string;
96
+ };
97
+ export type KnowledgeLookupInfo = {
98
+ hits?: Array<KnowledgeCitation>;
99
+ /**
100
+ * `found`, `none` (nothing relevant enough), or `failed` (the lookup itself could not be done).
101
+ */
102
+ outcome: string;
103
+ query: string;
104
+ /**
105
+ * `first` — looked up before the reply; `tool` — the model asked for it.
106
+ */
107
+ via: string;
108
+ };
109
+ export type KnowledgeCitation = {
110
+ entry_id: string;
111
+ score: number;
112
+ title: string;
113
+ };
114
+ export type RelationInfo = {
115
+ agent_id: string;
116
+ /**
117
+ * The agent's name, so a list of these is readable without resolving ids.
118
+ */
119
+ agent_name: string | null;
120
+ /**
121
+ * Separate sessions, ever. A stronger signal of familiarity than `turns` — twenty short visits is a longer acquaintance than one long conversation.
122
+ */
123
+ conversations: number;
124
+ /**
125
+ * How much the agent has told **them** about itself, -1 to 1 — the asymmetric half of knowing each other, and the one nothing can count.
126
+ *
127
+ * Deliberately not part of `tier`: an agent can have opened up to somebody it has come to dislike, and folding this into affection would make that state unrepresentable.
128
+ */
129
+ disclosure: number;
130
+ /**
131
+ * The person, as `eu_...`.
132
+ */
133
+ end_user_id: string;
134
+ first_met_at?: string | null;
135
+ last_seen_at?: string | null;
136
+ /**
137
+ * One line the model wrote about them. **Replaced, not appended** — it is rendered into every future prompt for this pair, so it is bounded by design.
138
+ */
139
+ note?: string | null;
140
+ /**
141
+ * How many times the model has recorded a change. Zero on a long history means the tool is not being called, which is the first thing to check when a relationship is not moving.
142
+ */
143
+ recorded: number;
144
+ /**
145
+ * The relationship as the model is told it — bands and counted phrases, never numbers. **Empty string** when there is nothing worth saying yet, in which case nothing about them is added to the prompt at all — which is a real state and not a missing value.
146
+ */
147
+ summary: string;
148
+ /**
149
+ * What the agent would call this relationship, and what it is actually told: **Despised, Disliked, Acquaintances, Friends** or **Good Friends**.
150
+ *
151
+ * Derived on every read from the axes below and never stored, so it cannot go stale. The rule is one sentence: *warmth and trust set the direction, familiarity sets how far it can go* — a first conversation caps at Acquaintances however well it went, and the ceiling rises as they talk. Dislike is not capped: an agent can take against somebody on one remark.
152
+ */
153
+ tier: string;
154
+ /**
155
+ * -1 to 1, on the same scale.
156
+ */
157
+ trust: number;
158
+ /**
159
+ * Turns exchanged, ever. Counted, not judged.
160
+ */
161
+ turns: number;
162
+ /**
163
+ * -1 to 1. Zero is indifference, which is where every relationship starts.
164
+ */
165
+ warmth: number;
166
+ };
167
+ export type SessionCreateRequest = {
168
+ /**
169
+ * Which agent this conversation is with.
170
+ */
171
+ agent_id: string;
172
+ /**
173
+ * Optional, and only ever the token's own end user — their id from `POST /v1/end-users`, or your own id for them.
174
+ *
175
+ * **A conversation is always the person the ephemeral token was minted for**: the token says who is talking, so this can only confirm it, and naming anybody else is a **403**. What the agent remembers about them — durable facts and the standing relationship — is theirs, and carries into every conversation with any of your agents.
176
+ *
177
+ * Set once, when the session opens. It cannot change afterwards.
178
+ */
179
+ end_user_id?: string | null;
180
+ /**
181
+ * Whether to continue this person's most recent conversation with this agent instead of starting a new one.
182
+ *
183
+ * **Unset is the useful default**: it resumes when this person has a conversation with this agent from the last 7 days to continue, and starts a new one otherwise. That matches what 'open a conversation with this person' usually means, and it stops an integration that opens a session per page load from scattering somebody's history across a dozen fragments.
184
+ *
185
+ * `false` always starts a new conversation — this is what a 'new chat' button should send. `true` is the same as leaving it unset; it exists so the intent can be stated rather than implied.
186
+ *
187
+ * Nothing is lost by starting fresh: durable facts and the standing relationship belong to the *person*, not the conversation, and are carried into every new one.
188
+ *
189
+ * The response's `resumed` says which happened.
190
+ */
191
+ resume?: boolean | null;
192
+ /**
193
+ * Optional label.
194
+ */
195
+ title?: string | null;
196
+ };
197
+ export type SessionInfo = {
198
+ agent_id: string;
199
+ created_at: string;
200
+ /**
201
+ * Who this conversation is with. Send it again to open another conversation with the same person, carrying their memory.
202
+ */
203
+ end_user_id: string;
204
+ id: string;
205
+ title: string | null;
206
+ turn_seq: number;
207
+ updated_at: string;
208
+ };
209
+ export type CompactionInfo = {
210
+ /**
211
+ * The last message this summary covers. Anything after it is still sent to the model verbatim.
212
+ */
213
+ after_seq: number;
214
+ /**
215
+ * Durable facts written to long-term memory by this call. Zero when extraction was not asked for, or when there was nothing worth keeping.
216
+ */
217
+ facts_stored?: number;
218
+ input_tokens?: number | null;
219
+ /**
220
+ * What produced the summary.
221
+ */
222
+ model?: string | null;
223
+ output_tokens?: number | null;
224
+ session_id: string;
225
+ /**
226
+ * What the next turn will start from.
227
+ */
228
+ summary: string;
229
+ /**
230
+ * `manual` or `automatic`.
231
+ */
232
+ trigger: string;
233
+ };
234
+ export type CompactRequest = {
235
+ /**
236
+ * Whether to also extract durable facts about the end user, in the same model call.
237
+ *
238
+ * Unset uses the agent's own setting.
239
+ */
240
+ extract_facts?: boolean | null;
241
+ };
242
+ export type FactList = {
243
+ end_user_id: string;
244
+ facts: Array<FactInfo>;
245
+ };
246
+ export type FactInfo = {
247
+ /**
248
+ * Which agent was being talked to when this was learned.
249
+ */
250
+ agent_id?: string | null;
251
+ created_at?: string | null;
252
+ id: string;
253
+ text: string;
254
+ updated_at?: string | null;
255
+ };
256
+ export type ForgottenFacts = {
257
+ deleted: number;
258
+ end_user_id: string;
259
+ };
260
+ export type RelationList = {
261
+ relations: Array<RelationInfo>;
262
+ /**
263
+ * Relations matching the filter, ignoring `limit`. Larger than the list means it was truncated — this endpoint returns the most recently active first and has no cursor, so narrow by `end_user_id` rather than paging if you are looking for somebody specific.
264
+ */
265
+ total: number;
266
+ };
267
+ export type ListSessionsData = {
268
+ body?: never;
269
+ path?: never;
270
+ query?: {
271
+ limit?: number;
272
+ offset?: number | null;
273
+ };
274
+ url: '/v1/agent/sessions';
275
+ };
276
+ export type ListSessionsErrors = {
277
+ /**
278
+ * Validation Exception
279
+ */
280
+ 400: {
281
+ status_code: number;
282
+ detail: string;
283
+ extra?: {
284
+ [key: string]: unknown;
285
+ } | Array<unknown> | null;
286
+ };
287
+ /**
288
+ * Missing or invalid API token
289
+ */
290
+ 401: ErrorResponse;
291
+ /**
292
+ * The token is valid but its scopes do not cover this capability
293
+ */
294
+ 403: ErrorResponse;
295
+ /**
296
+ * Request failed validation
297
+ */
298
+ 422: ErrorResponse;
299
+ /**
300
+ * Rate limit exceeded
301
+ */
302
+ 429: ErrorResponse;
303
+ };
304
+ export type ListSessionsError = ListSessionsErrors[keyof ListSessionsErrors];
305
+ export type ListSessionsResponses = {
306
+ /**
307
+ * Conversations for this agent or end user, newest first
308
+ */
309
+ 200: Array<SessionInfo>;
310
+ };
311
+ export type ListSessionsResponse = ListSessionsResponses[keyof ListSessionsResponses];
312
+ export type CreateSessionData = {
313
+ body: SessionCreateRequest;
314
+ path?: never;
315
+ query?: never;
316
+ url: '/v1/agent/sessions';
317
+ };
318
+ export type CreateSessionErrors = {
319
+ /**
320
+ * Validation Exception
321
+ */
322
+ 400: {
323
+ status_code: number;
324
+ detail: string;
325
+ extra?: {
326
+ [key: string]: unknown;
327
+ } | Array<unknown> | null;
328
+ };
329
+ /**
330
+ * Missing or invalid API token
331
+ */
332
+ 401: ErrorResponse;
333
+ /**
334
+ * An ephemeral token, for an agent or person it is not bound to
335
+ */
336
+ 403: unknown;
337
+ /**
338
+ * Unknown agent id
339
+ */
340
+ 404: unknown;
341
+ /**
342
+ * Request failed validation
343
+ */
344
+ 422: ErrorResponse;
345
+ /**
346
+ * Rate limit exceeded
347
+ */
348
+ 429: ErrorResponse;
349
+ };
350
+ export type CreateSessionError = CreateSessionErrors[keyof CreateSessionErrors];
351
+ export type CreateSessionResponses = {
352
+ /**
353
+ * The conversation — new or continued, per `resumed`
354
+ */
355
+ 201: SessionDetail;
356
+ };
357
+ export type CreateSessionResponse = CreateSessionResponses[keyof CreateSessionResponses];
358
+ export type DeleteSessionData = {
359
+ body?: never;
360
+ path: {
361
+ session_id: string;
362
+ };
363
+ query?: never;
364
+ url: '/v1/agent/sessions/{session_id}';
365
+ };
366
+ export type DeleteSessionErrors = {
367
+ /**
368
+ * Validation Exception
369
+ */
370
+ 400: {
371
+ status_code: number;
372
+ detail: string;
373
+ extra?: {
374
+ [key: string]: unknown;
375
+ } | Array<unknown> | null;
376
+ };
377
+ /**
378
+ * Missing or invalid API token
379
+ */
380
+ 401: ErrorResponse;
381
+ /**
382
+ * The token is valid but its scopes do not cover this capability
383
+ */
384
+ 403: ErrorResponse;
385
+ /**
386
+ * Unknown session id
387
+ */
388
+ 404: unknown;
389
+ /**
390
+ * Request failed validation
391
+ */
392
+ 422: ErrorResponse;
393
+ /**
394
+ * Rate limit exceeded
395
+ */
396
+ 429: ErrorResponse;
397
+ };
398
+ export type DeleteSessionError = DeleteSessionErrors[keyof DeleteSessionErrors];
399
+ export type DeleteSessionResponses = {
400
+ /**
401
+ * The session and its messages are gone
402
+ */
403
+ 200: SessionInfo;
404
+ };
405
+ export type DeleteSessionResponse = DeleteSessionResponses[keyof DeleteSessionResponses];
406
+ export type GetSessionDetailData = {
407
+ body?: never;
408
+ path: {
409
+ session_id: string;
410
+ };
411
+ query?: {
412
+ /**
413
+ * How many messages to return, counting back from the newest. The page itself is ordered oldest-first regardless.
414
+ */
415
+ limit?: number;
416
+ /**
417
+ * Return only messages before this `seq`, exclusive. Take it from the previous response's `next_before`.
418
+ */
419
+ before?: number | null;
420
+ };
421
+ url: '/v1/agent/sessions/{session_id}';
422
+ };
423
+ export type GetSessionDetailErrors = {
424
+ /**
425
+ * Validation Exception
426
+ */
427
+ 400: {
428
+ status_code: number;
429
+ detail: string;
430
+ extra?: {
431
+ [key: string]: unknown;
432
+ } | Array<unknown> | null;
433
+ };
434
+ /**
435
+ * Missing or invalid API token
436
+ */
437
+ 401: ErrorResponse;
438
+ /**
439
+ * The token is valid but its scopes do not cover this capability
440
+ */
441
+ 403: ErrorResponse;
442
+ /**
443
+ * Unknown session id
444
+ */
445
+ 404: unknown;
446
+ /**
447
+ * Request failed validation
448
+ */
449
+ 422: ErrorResponse;
450
+ /**
451
+ * Rate limit exceeded
452
+ */
453
+ 429: ErrorResponse;
454
+ };
455
+ export type GetSessionDetailError = GetSessionDetailErrors[keyof GetSessionDetailErrors];
456
+ export type GetSessionDetailResponses = {
457
+ /**
458
+ * The conversation and one page of its messages
459
+ */
460
+ 200: SessionDetail;
461
+ };
462
+ export type GetSessionDetailResponse = GetSessionDetailResponses[keyof GetSessionDetailResponses];
463
+ export type CompactData = {
464
+ body: CompactRequest;
465
+ path: {
466
+ session_id: string;
467
+ };
468
+ query?: never;
469
+ url: '/v1/agent/sessions/{session_id}/compact';
470
+ };
471
+ export type CompactErrors = {
472
+ /**
473
+ * Validation Exception
474
+ */
475
+ 400: {
476
+ status_code: number;
477
+ detail: string;
478
+ extra?: {
479
+ [key: string]: unknown;
480
+ } | Array<unknown> | null;
481
+ };
482
+ /**
483
+ * Missing or invalid API token
484
+ */
485
+ 401: ErrorResponse;
486
+ /**
487
+ * The token is valid but its scopes do not cover this capability
488
+ */
489
+ 403: ErrorResponse;
490
+ /**
491
+ * Unknown session id
492
+ */
493
+ 404: unknown;
494
+ /**
495
+ * A turn was processed while this was running
496
+ */
497
+ 409: unknown;
498
+ /**
499
+ * Request failed validation
500
+ */
501
+ 422: ErrorResponse;
502
+ /**
503
+ * Rate limit exceeded
504
+ */
505
+ 429: ErrorResponse;
506
+ /**
507
+ * The model provider failed or timed out
508
+ */
509
+ 502: unknown;
510
+ /**
511
+ * GEMINI_API_KEY is not configured
512
+ */
513
+ 503: unknown;
514
+ };
515
+ export type CompactError = CompactErrors[keyof CompactErrors];
516
+ export type CompactResponses = {
517
+ /**
518
+ * The summary that replaced the turns it covers
519
+ */
520
+ 200: CompactionInfo;
521
+ };
522
+ export type CompactResponse = CompactResponses[keyof CompactResponses];
523
+ export type ExtractData = {
524
+ body?: never;
525
+ path: {
526
+ session_id: string;
527
+ };
528
+ query?: never;
529
+ url: '/v1/agent/sessions/{session_id}/extract';
530
+ };
531
+ export type ExtractErrors = {
532
+ /**
533
+ * Validation Exception
534
+ */
535
+ 400: {
536
+ status_code: number;
537
+ detail: string;
538
+ extra?: {
539
+ [key: string]: unknown;
540
+ } | Array<unknown> | null;
541
+ };
542
+ /**
543
+ * Missing or invalid API token
544
+ */
545
+ 401: ErrorResponse;
546
+ /**
547
+ * The token is valid but its scopes do not cover this capability
548
+ */
549
+ 403: ErrorResponse;
550
+ /**
551
+ * Unknown session id
552
+ */
553
+ 404: unknown;
554
+ /**
555
+ * A turn was processed while this was running
556
+ */
557
+ 409: unknown;
558
+ /**
559
+ * Request failed validation
560
+ */
561
+ 422: ErrorResponse;
562
+ /**
563
+ * Rate limit exceeded
564
+ */
565
+ 429: ErrorResponse;
566
+ /**
567
+ * The model provider failed or timed out
568
+ */
569
+ 502: unknown;
570
+ /**
571
+ * GEMINI_API_KEY is not configured
572
+ */
573
+ 503: unknown;
574
+ };
575
+ export type ExtractError = ExtractErrors[keyof ExtractErrors];
576
+ export type ExtractResponses = {
577
+ /**
578
+ * The facts pulled out of the conversation and stored
579
+ */
580
+ 200: CompactionInfo;
581
+ };
582
+ export type ExtractResponse = ExtractResponses[keyof ExtractResponses];
583
+ export type ForgetUserFactsData = {
584
+ body?: never;
585
+ path?: never;
586
+ query?: {
587
+ end_user_id?: string;
588
+ };
589
+ url: '/v1/agent/facts';
590
+ };
591
+ export type ForgetUserFactsErrors = {
592
+ /**
593
+ * Validation Exception
594
+ */
595
+ 400: {
596
+ status_code: number;
597
+ detail: string;
598
+ extra?: {
599
+ [key: string]: unknown;
600
+ } | Array<unknown> | null;
601
+ };
602
+ /**
603
+ * Missing or invalid API token
604
+ */
605
+ 401: ErrorResponse;
606
+ /**
607
+ * The token is valid but its scopes do not cover this capability
608
+ */
609
+ 403: ErrorResponse;
610
+ /**
611
+ * Unknown end user id
612
+ */
613
+ 404: unknown;
614
+ /**
615
+ * Request failed validation
616
+ */
617
+ 422: ErrorResponse;
618
+ /**
619
+ * Rate limit exceeded
620
+ */
621
+ 429: ErrorResponse;
622
+ };
623
+ export type ForgetUserFactsError = ForgetUserFactsErrors[keyof ForgetUserFactsErrors];
624
+ export type ForgetUserFactsResponses = {
625
+ /**
626
+ * How many stored facts were deleted
627
+ */
628
+ 200: ForgottenFacts;
629
+ };
630
+ export type ForgetUserFactsResponse = ForgetUserFactsResponses[keyof ForgetUserFactsResponses];
631
+ export type ListFactsData = {
632
+ body?: never;
633
+ path?: never;
634
+ query?: {
635
+ end_user_id?: string;
636
+ };
637
+ url: '/v1/agent/facts';
638
+ };
639
+ export type ListFactsErrors = {
640
+ /**
641
+ * Validation Exception
642
+ */
643
+ 400: {
644
+ status_code: number;
645
+ detail: string;
646
+ extra?: {
647
+ [key: string]: unknown;
648
+ } | Array<unknown> | null;
649
+ };
650
+ /**
651
+ * Missing or invalid API token
652
+ */
653
+ 401: ErrorResponse;
654
+ /**
655
+ * The token is valid but its scopes do not cover this capability
656
+ */
657
+ 403: ErrorResponse;
658
+ /**
659
+ * Unknown end user id
660
+ */
661
+ 404: unknown;
662
+ /**
663
+ * Request failed validation
664
+ */
665
+ 422: ErrorResponse;
666
+ /**
667
+ * Rate limit exceeded
668
+ */
669
+ 429: ErrorResponse;
670
+ };
671
+ export type ListFactsError = ListFactsErrors[keyof ListFactsErrors];
672
+ export type ListFactsResponses = {
673
+ /**
674
+ * What the platform remembers about this end user
675
+ */
676
+ 200: FactList;
677
+ };
678
+ export type ListFactsResponse = ListFactsResponses[keyof ListFactsResponses];
679
+ export type ForgetFactData = {
680
+ body?: never;
681
+ path: {
682
+ fact_id: string;
683
+ };
684
+ query?: never;
685
+ url: '/v1/agent/facts/{fact_id}';
686
+ };
687
+ export type ForgetFactErrors = {
688
+ /**
689
+ * Validation Exception
690
+ */
691
+ 400: {
692
+ status_code: number;
693
+ detail: string;
694
+ extra?: {
695
+ [key: string]: unknown;
696
+ } | Array<unknown> | null;
697
+ };
698
+ /**
699
+ * Missing or invalid API token
700
+ */
701
+ 401: ErrorResponse;
702
+ /**
703
+ * The token is valid but its scopes do not cover this capability
704
+ */
705
+ 403: ErrorResponse;
706
+ /**
707
+ * No such fact for this organisation
708
+ */
709
+ 404: unknown;
710
+ /**
711
+ * Request failed validation
712
+ */
713
+ 422: ErrorResponse;
714
+ /**
715
+ * Rate limit exceeded
716
+ */
717
+ 429: ErrorResponse;
718
+ };
719
+ export type ForgetFactError = ForgetFactErrors[keyof ForgetFactErrors];
720
+ export type ForgetFactResponses = {
721
+ /**
722
+ * The fact is gone
723
+ */
724
+ 200: ForgottenFacts;
725
+ };
726
+ export type ForgetFactResponse = ForgetFactResponses[keyof ForgetFactResponses];
727
+ export type ListRelationsData = {
728
+ body?: never;
729
+ path?: never;
730
+ query?: {
731
+ agent_id?: string;
732
+ end_user_id?: string;
733
+ limit?: number | null;
734
+ };
735
+ url: '/v1/agent/relations';
736
+ };
737
+ export type ListRelationsErrors = {
738
+ /**
739
+ * Validation Exception
740
+ */
741
+ 400: {
742
+ status_code: number;
743
+ detail: string;
744
+ extra?: {
745
+ [key: string]: unknown;
746
+ } | Array<unknown> | null;
747
+ };
748
+ /**
749
+ * Missing or invalid API token
750
+ */
751
+ 401: ErrorResponse;
752
+ /**
753
+ * The token is valid but its scopes do not cover this capability
754
+ */
755
+ 403: ErrorResponse;
756
+ /**
757
+ * Unknown agent id, or unknown end user id
758
+ */
759
+ 404: unknown;
760
+ /**
761
+ * Request failed validation
762
+ */
763
+ 422: ErrorResponse;
764
+ /**
765
+ * Rate limit exceeded
766
+ */
767
+ 429: ErrorResponse;
768
+ };
769
+ export type ListRelationsError = ListRelationsErrors[keyof ListRelationsErrors];
770
+ export type ListRelationsResponses = {
771
+ /**
772
+ * How the agent feels about each person, most recent first
773
+ */
774
+ 200: RelationList;
775
+ };
776
+ export type ListRelationsResponse = ListRelationsResponses[keyof ListRelationsResponses];