@vinaverse/server 0.1.0-alpha.21 → 0.1.0-alpha.22

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.
@@ -87,7 +87,7 @@ interface paths {
87
87
  * @description v1-draft.21 (VIN-246): the conversations a history screen lists, for one subject and one agent, on one side of the app (`experience_mode`, and for a business `business_scope_id`, as the conversation was bound when it started). Newest activity first; ties by `id`.
88
88
  * **Access.** A service key only, never a client secret: the app asks the tenant's backend, which checks the person and calls this. The key needs `conversations:read` (a key without scopes has every scope) and sees its own tenant and environment only.
89
89
  * **What is listed.** Only what the tenant's `transcript_retention` still keeps: a conversation past it, a deleted one (`deleteConversation`) or an erased subject's is never listed, nor one where nothing was said (a session opened and left). A subject Vinaverse holds nothing for gets an empty page, the same as one with no conversations, so the answer never says whether a subject exists.
90
- * **The title** is deterministic and never the person's words: from the conversation's last search intent (`title_source: intent`, for example "Haircut · Los Angeles", in the subject's locale), else the date it started (`title_source: date`). There is no preview of the messages.
90
+ * **The title** is deterministic and never the person's words, nor ever a date (v1-draft.45): the anchored object's title, else the professional or space it engaged with most, a registered task ("Business setup"), the last search's service and place ("Haircut · Los Angeles"), the label of the tenant's starter that opened it, else the side of the app it belongs to ("Home conversation"), in the subject's locale, with `title_source` saying which. There is no preview of the messages.
91
91
  * **Paging.** `next_cursor` is opaque and signed. It is bound to the filters, the key's tenant and environment, and expires after 24 hours: a cursor changed, used with other filters or expired is `400 invalid_request` at `/cursor`, and the caller starts again without it. An outage is `503 unavailable` (retryable), never an empty page: the app does not take it as "no conversations".
92
92
  */
93
93
  get: operations["listConversations"];
@@ -497,7 +497,7 @@ interface paths {
497
497
  put?: never;
498
498
  /**
499
499
  * @description Erases the subject's data: transcripts, screening texts, memory (v1-draft.27: the preferences and the last search; a choice not to be remembered is kept, as a keyed hash of the subject id only), indexes, the conversation state of its guided flows (recorded answers, remarks, transcript), and the explore suggestion decisions made for it, and revokes its open sessions. `subject.erased` follows.
500
- * Backups are not edited (v1-draft.39): the erasure is re-applied after every restore of Vinaverse's database, so a backup never brings it back, and backups expire within 35 days.
500
+ * Backups are not edited (v1-draft.39): the erasure is re-applied after every restore of Vinaverse's database, so a backup never brings it back, and backups expire within 35 days. `status: completed` means the live copies are gone; `backups_clear_by`, when present (v1-draft.48), is the day no backup holds them any more.
501
501
  * **A subject Vinaverse holds nothing for** (never seen, or already erased) is `404` with `code: not_found` and `type: https://docs.vinaverse.com/problems/subject-not-found`; a client matches on the `type` ending in `/problems/subject-not-found`. Only that answer means nothing is held, and nothing needs erasing. Vinaverse keeps no record of erased subjects to tell the two apart. Any other `404` (a wrong base URL, say) is not that answer, and the caller retries.
502
502
  */
503
503
  post: operations["eraseSubject"];
@@ -524,13 +524,20 @@ interface paths {
524
524
  * health fact or a never-store detail (v1-draft.39); a fact about someone else is the person's own note.
525
525
  * - `last_search`: the last open search intent (a service and a place, as the search resolved them, never the
526
526
  * person's words), for at most 7 days, which the agent may offer as a question.
527
+ * - `items` (v1-draft.48): every kept thing as one `MemoryItem`, of any type, newest first (`updated_at`); the
528
+ * app groups them by `type` and draws each label from `type` and `source` in its own language. `preferences`
529
+ * and `last_search` are the same `told` and `search` items in their earlier shape.
530
+ * - `off_types` (v1-draft.48): the types the person turned off; none of those is kept. - `deletions` (v1-draft.48): the newest 50 deletions the person asked for, each until every backup is clear
531
+ * of it; `deletions_total` counts them all.
527
532
  *
533
+ * **Paging** (v1-draft.48). A page holds up to 60 items, newest first; `next_cursor`, opaque, asks for the next page with `cursor`, and is null on the last. With a cursor, only `items` and `next_cursor` change; every other field is the same as on the first page. A cursor from another subject, side or business is `400` at `/cursor`.
528
534
  * Preferences and the last search belong to one side of the app: `experience_mode` (left out, `customer`) and, for a business, `business_scope_id`. A subject Vinaverse holds nothing for reads as remembered, with nothing kept. Erasing the subject (`eraseSubject`) removes preferences and the last search; a choice not to be remembered outlives it, kept as a keyed hash of the subject id only.
529
535
  */
530
536
  get: operations["getSubjectMemory"];
531
537
  /**
532
538
  * Let the agent remember a person, or not
533
539
  * @description v1-draft.27 (VIN-223): the person's choice, through the tenant's backend (a service key with `memory:write`). `remembered: false` is "don't remember me": on both sides of the app at once, it deletes the preferences and the last search, and from then on no session reads or writes memory for the person and no earlier conversation is mentioned to the agent. It outlives an erasure. `remembered: true` turns memory back on, with nothing restored. Idempotent: the same choice again changes nothing.
540
+ * `off_types` (v1-draft.48) turns single types off ("Don't learn from me": `learned`; "No summaries": `episode`; `search`): turning a type off deletes everything that type holds, at once, with a deletion status per item, and nothing of it is kept until it is turned back on; a type left out of the list is on. Left out of the body, the types stay as they were. `remembered: false` turns every type off, whatever the list.
534
541
  */
535
542
  put: operations["putSubjectMemory"];
536
543
  post?: never;
@@ -572,14 +579,64 @@ interface paths {
572
579
  post?: never;
573
580
  /**
574
581
  * Forget one thing the person asked the agent to remember
575
- * @description v1-draft.27 (VIN-223): a service key with `memory:write`. The preference is deleted everywhere; the agent no longer reads it from the next turn. Another subject's, an unknown or an already deleted preference is the same `404 not_found`.
582
+ * @description v1-draft.27 (VIN-223): a service key with `memory:write`. The preference is deleted everywhere; the agent no longer reads it from the next turn. Another subject's, an unknown or an already deleted preference is the same `404 not_found`. A forget is final: it is erased at once and never restored, not even from a backup; an app's Undo is a short delay before the call is sent, never a second call. The same as `forgetMemoryItem` on a `told` item (v1-draft.48).
576
583
  */
577
584
  delete: operations["deleteMemoryPreference"];
578
585
  options?: never;
579
586
  head?: never;
587
+ /**
588
+ * Correct one thing the person asked the agent to remember
589
+ * @description v1-draft.48 (VIN-223): a service key with `memory:write`. The person's corrected words replace the preference from the next turn; the earlier words stay in Vinaverse's history of the record and are never shown to the agent again. `revision` is the one the app showed: any other is `409 revision_conflict` with `current_revision`, so the app shows the current words first.
590
+ * A correction is refused, and nothing changes, as `400 invalid_request` at `/text` when the words are empty, longer than 200 characters, a health fact or a never-store detail (v1-draft.39), and as `403 feature_unavailable` when memory is not in use for the person (they turned it off, or have not acknowledged the current notice). Another subject's, an unknown or a deleted preference is `404 not_found`. A busy or unreachable store is `503`, to retry. No error carries the preference's words. The same as `correctMemoryItem` on a `told` item, which also corrects a `learned` one.
591
+ */
592
+ patch: operations["correctMemoryPreference"];
593
+ trace?: never;
594
+ };
595
+ "/v1/subjects/{subject_id}/memory/searches/{search_id}": {
596
+ parameters: {
597
+ query?: never;
598
+ header?: never;
599
+ path?: never;
600
+ cookie?: never;
601
+ };
602
+ get?: never;
603
+ put?: never;
604
+ post?: never;
605
+ /**
606
+ * Forget the person's kept search
607
+ * @description v1-draft.48 (VIN-223): a service key with `memory:write`. The kept search is deleted; the agent no longer offers it from the next turn. Another subject's, an unknown or an already deleted search is the same `404 not_found`. A forget is final: it is erased at once and never restored, not even from a backup; an app's Undo is a short delay before the call is sent, never a second call. The same as `forgetMemoryItem` on a `search` item.
608
+ */
609
+ delete: operations["deleteMemorySearch"];
610
+ options?: never;
611
+ head?: never;
580
612
  patch?: never;
581
613
  trace?: never;
582
614
  };
615
+ "/v1/subjects/{subject_id}/memory/items/{memory_item_id}": {
616
+ parameters: {
617
+ query?: never;
618
+ header?: never;
619
+ path?: never;
620
+ cookie?: never;
621
+ };
622
+ get?: never;
623
+ put?: never;
624
+ post?: never;
625
+ /**
626
+ * Forget one remembered item
627
+ * @description v1-draft.48 (VIN-223): a service key with `memory:write`. The item, of any type but `profile`, is deleted everywhere; the agent no longer uses it from the next turn, and it is listed in `SubjectMemory.deletions` until `backups_clear_by`. A forgotten `learned` item is never learned again. Forgetting a `business_fact` stops memory using it; the booking itself is the business's and is not deleted. A forget is final: it is erased at once and never restored, not even from a backup; an app's Undo is a short delay before the call is sent, never a second call. A `profile` item is disconnected in the profile, not forgotten here; it, another subject's, an unknown or an already deleted item is the same `404 not_found`.
628
+ */
629
+ delete: operations["forgetMemoryItem"];
630
+ options?: never;
631
+ head?: never;
632
+ /**
633
+ * Correct one remembered item in the person's own words
634
+ * @description v1-draft.48 (VIN-223): a service key with `memory:write`. Only an item with `editable: true` is corrected: a `told` item, or a `learned` one, which becomes a `told` item in the person's words. The words replace the item from the next turn; the earlier words stay in Vinaverse's history of the record and are never shown to the agent again. `revision` is the one the app showed: any other is `409 revision_conflict` with `current_revision`, so the app shows the current words first. Correcting a `learned` item while 20 `told` items are kept is `409 memory_limit_reached` ("Twenty things are kept already; forget one first."): the person forgets one, then corrects again.
635
+ * A correction is refused, and nothing changes, as `400 invalid_request` at `/text` when the words are empty, longer than 200 characters, a health fact or a never-store detail (an id, a card or bank number, a password, a criminal or immigration detail), and as `403 feature_unavailable` when memory is not in use for the person (they turned it off, or have not acknowledged the current notice). An item that is not editable (a search, an episode, a business fact, setup progress, a profile item), another subject's, an unknown or a deleted one is the same `404 not_found`. A busy or unreachable store is `503`, to retry. No error carries the item's words.
636
+ */
637
+ patch: operations["correctMemoryItem"];
638
+ trace?: never;
639
+ };
583
640
  "/v1/events": {
584
641
  parameters: {
585
642
  query?: never;
@@ -1413,11 +1470,11 @@ interface components {
1413
1470
  title: string;
1414
1471
  status: number;
1415
1472
  /** @enum {string} */
1416
- code: "invalid_request" | "unauthenticated" | "forbidden" | "feature_unavailable" | "not_found" | "idempotency_conflict" | "session_closed" | "payload_too_large" | "unprocessable_media" | "rate_limited" | "internal" | "unavailable" | "conversation_mismatch" | "conversation_expired" | "conversation_completed" | "context_stale";
1473
+ code: "invalid_request" | "unauthenticated" | "forbidden" | "feature_unavailable" | "not_found" | "idempotency_conflict" | "session_closed" | "payload_too_large" | "unprocessable_media" | "rate_limited" | "internal" | "unavailable" | "conversation_mismatch" | "conversation_expired" | "conversation_completed" | "context_stale" | "revision_conflict" | "memory_limit_reached";
1417
1474
  detail?: string;
1418
1475
  request_id: string;
1419
1476
  retryable: boolean;
1420
- /** @description v1-draft.23, with `context_stale` only, the session's screen-context revision now */
1477
+ /** @description v1-draft.23, with `context_stale`: the session's screen-context revision now; v1-draft.48, with `revision_conflict`: the memory preference's revision now */
1421
1478
  current_revision?: number;
1422
1479
  /** @description field-level problems for invalid_request */
1423
1480
  errors?: {
@@ -1461,7 +1518,7 @@ interface components {
1461
1518
  /** @enum {string} */
1462
1519
  Feature: "assistant" | "moderation_image" | "moderation_video" | "moderation_text" | "screening" | "document_check" | "insights" | "suggestions";
1463
1520
  /**
1464
- * @description `quotes`: grants pricing a cart before booking it (`tool-provider-v1.yaml` `get_quote`), read only; never granted to a `guest` (v1-draft.31). `business_setup`: grants the business's own read tools and its `propose` tools (`tool-provider-v1.yaml`, `x-effect: propose`), for the `business_setup` agent; never a write tool. Only a subject of type `professional`, `host` or `staff` may be granted it. `booking_proposals`: grants the tenant's `propose` tools for a client's bookings (a booking, a reschedule, a cancellation the client confirms in the tenant's app), for the customer agent; never a write tool. Only a subject of type `client` may be granted it (`docs/agents-guardrails-suggestions-writes.md` §3.4). These two are the only capabilities that carry `propose` tools: `create_proposal` and every tenant `propose` tool require one of them. `flows`: grants the guided-flow endpoints (`tool-provider-v1.yaml`, `/flows/*`). It names no flow and no record: the tenant limits the `tool_access` token itself to one flow and one record. `my_orders`: grants reading the customer's own kits and orders from a styling-kit retailer (`tool-provider-v1.yaml`, `list_my_kits`, `get_my_kit`, `list_my_orders`, `get_my_order`), read only. Like `my_bookings`, it is meant for a signed-in `client`, and the tenant answers for the token's customer only. `business_bookings`: grants reading the business's own bookings, those waiting for its answer and those coming up, read only. `payouts`: grants reading the state of the business's own payout account (not set up, under review, active), read only, never an amount or a bank detail. Only a subject of type `professional`, `host` or `staff` may be granted either (v1-draft.38).
1521
+ * @description `quotes`: grants pricing a cart before booking it (`tool-provider-v1.yaml` `get_quote`), read only; never granted to a `guest` (v1-draft.31). `business_setup`: grants the business's own read tools and its `propose` tools (`tool-provider-v1.yaml`, `x-effect: propose`), for the `business_setup` agent; never a write tool. Only a subject of type `professional`, `host` or `staff` may be granted it. `booking_proposals`: grants the tenant's `propose` tools for a client's bookings (a booking, a reschedule, a cancellation the client confirms in the tenant's app), for the customer agent; never a write tool. Only a subject of type `client` may be granted it (`docs/agents-guardrails-suggestions-writes.md` §3.4). These two are the only capabilities that carry `propose` tools: `create_proposal` and every tenant `propose` tool require one of them. `flows`: grants the guided-flow endpoints (`tool-provider-v1.yaml`, `/flows/*`). It names no flow and no record: the tenant limits the `tool_access` token itself to one flow and one record. `my_orders`: grants reading the customer's own kits and orders from a styling-kit retailer (`tool-provider-v1.yaml`, `list_my_kits`, `get_my_kit`, `list_my_orders`, `get_my_order`), read only. Like `my_bookings`, it is meant for a signed-in `client`, and the tenant answers for the token's customer only. `business_bookings`: grants reading the business's own bookings, those waiting for its answer and those coming up, read only. `payouts`: grants reading the state of the business's own payout account (tool-provider-v1 `PayoutAccount`: its state, what is missing, and what it earned that waits to be paid out), read only, never a bank or card detail or any other amount (v1-draft.43). Only a subject of type `professional`, `host` or `staff` may be granted either (v1-draft.38).
1465
1522
  * @enum {string}
1466
1523
  */
1467
1524
  Capability: "search" | "availability" | "quotes" | "my_bookings" | "policies" | "handoff" | "flows" | "business_setup" | "booking_proposals" | "my_orders" | "business_bookings" | "payouts";
@@ -1691,6 +1748,15 @@ interface components {
1691
1748
  value: string;
1692
1749
  }[];
1693
1750
  deep_link?: string;
1751
+ /** @description v1-draft.42, the object's photo as its screen shows it; the anchor card's `image` */
1752
+ image?: components["schemas"]["CardImage"];
1753
+ /** @description v1-draft.42, the object's state in the tenant's words with its tone; the anchor card's `status` */
1754
+ status?: {
1755
+ /** @description in Unicode code points */
1756
+ label: string;
1757
+ /** @enum {string} */
1758
+ tone: "neutral" | "info" | "success" | "warning" | "danger";
1759
+ };
1694
1760
  };
1695
1761
  /** @description v1-draft.37, one thing the person may do (`action`: a hand-off to the tenant's own screen, `open_action`) or ask (`explain`: answered from the manifest's template, filled from the anchor's facts). Eligibility comes only from here. An ineligible intent carries `reason`, a code; the words a person reads come from the templates. */
1696
1762
  AnchorIntent: {
@@ -1928,6 +1994,69 @@ interface components {
1928
1994
  cancelled: boolean;
1929
1995
  }[];
1930
1996
  };
1997
+ /** @description v1-draft.42, a `quote` card's facts: the lines the tenant's checkout will show, in its order, from its quote read (tool-provider `Quote`), byte for byte. The model never adds them up, and neither does a client: `total`, `due_now` and `due_later` are drawn only as given, and a client that cannot draw a line draws the card's `fallback` rather than a total without its lines. A `discount` line's `amount` is what comes off, never negative. */
1998
+ QuoteFacts: {
1999
+ /** @description the tenant's quote, carried by the checkout hand-off */
2000
+ quote_id: string;
2001
+ lines: {
2002
+ /** @description the checkout's own words: "Service", "Booking fee" */
2003
+ label: string;
2004
+ amount: components["schemas"]["Money"];
2005
+ /** @enum {string} */
2006
+ kind?: "price" | "option" | "fee" | "tax" | "deposit" | "discount";
2007
+ }[];
2008
+ total: components["schemas"]["Money"];
2009
+ due_now?: components["schemas"]["Money"];
2010
+ due_later?: components["schemas"]["Money"];
2011
+ /** @enum {string} */
2012
+ fee_paid_by?: "customer" | "professional";
2013
+ /**
2014
+ * Format: date-time
2015
+ * @description when the quoted price stops holding (`Quote.expires_at`)
2016
+ */
2017
+ valid_until?: string;
2018
+ /** @description the zone the times are stated in */
2019
+ zone?: string;
2020
+ appointment?: {
2021
+ /** Format: date-time */
2022
+ start: string;
2023
+ /** Format: date-time */
2024
+ end: string;
2025
+ };
2026
+ /** @description what cancelling costs, as the quote read states it */
2027
+ cancellation?: {
2028
+ /** Format: date-time */
2029
+ free_until?: string;
2030
+ fee_after?: components["schemas"]["Money"];
2031
+ };
2032
+ };
2033
+ /** @description v1-draft.42, a `time_slots` card's facts: what the open times are for, drawn above them. `zone` is the zone the slots are stated in, named once on the card. Selecting a slot prepares the tenant's checkout; it never books. */
2034
+ TimeSlotsFacts: {
2035
+ zone?: string;
2036
+ service?: {
2037
+ id?: string;
2038
+ name: string;
2039
+ duration_minutes?: number;
2040
+ };
2041
+ /** @enum {string} */
2042
+ place?: "at_professional" | "at_customer" | "other";
2043
+ /**
2044
+ * Format: date
2045
+ * @description the tool searched up to this day and found no open time: only then does a client say "No openings until …". A card with no slots and no `none_until` says the times could not be checked.
2046
+ */
2047
+ none_until?: string;
2048
+ };
2049
+ /** @description v1-draft.42, a `policy` card's facts, from the tenant's `get_policy` (tool-provider `Policy`): the version that answered, so an answer about a past transaction can name the terms in force, and the page to read in full. */
2050
+ PolicyFacts: {
2051
+ version: string;
2052
+ /**
2053
+ * Format: date-time
2054
+ * @description the version's date (`Policy.updated_at`)
2055
+ */
2056
+ effective_at?: string;
2057
+ /** Format: uri */
2058
+ url?: string;
2059
+ };
1931
2060
  /** @description v1-draft.37, the anchor as the person and the app see it (`Session.anchor`, `session.ready.anchor`): its identity and state, and the verified `anchor` card the app swaps in for the provisional one it drew from its screen. If a fact the app showed differs, the verified card wins and the app redraws. The same card is the conversation's first timeline item. No `facts`: the card's display strings are what is shown. */
1932
2061
  SessionAnchorView: {
1933
2062
  type: components["schemas"]["AnchorType"];
@@ -1954,6 +2083,15 @@ interface components {
1954
2083
  value: string;
1955
2084
  }[];
1956
2085
  deep_link?: string;
2086
+ /** @description v1-draft.42, the object's photo, the same one the app's own screen shows (the professional's or space's hero, the booking's professional), so the verified card keeps the photo the provisional one drew. The gateway copies it from `SessionAnchor.display.image`; the model never writes an anchor card */
2087
+ image?: components["schemas"]["CardImage"];
2088
+ /** @description v1-draft.42, the object's state in the tenant's words with its colour family (`Card.status_tone`), so the verified card keeps the pill the provisional one drew; copied from `SessionAnchor.display.status`, never a state the gateway worked out */
2089
+ status?: {
2090
+ /** @description in Unicode code points */
2091
+ label: string;
2092
+ /** @enum {string} */
2093
+ tone: "neutral" | "info" | "success" | "warning" | "danger";
2094
+ };
1957
2095
  };
1958
2096
  /** @description v1-draft.37, an `open_action` card's body: a hand-off to the tenant's own flow for an eligible `action` intent. The app opens `route` with `params`; **opening a screen is never doing the action**. The app reports what happened with `action.result`, echoing `action_id`, and the gateway re-reads the anchor before the agent states the outcome. `action_id` is minted by the gateway, one per hand-off across its retries: the tenant's write keys on it, so a double tap or a network retry is one action. `terms_digest` is the hash of the terms the person was shown; the tenant's write refuses changed terms. A build without the `open_action` capability gets `fallback_link` (the object's screen) as a plain link instead. */
1959
2097
  OpenAction: {
@@ -1973,7 +2111,7 @@ interface components {
1973
2111
  /** @description the object's screen; passes the deep-link rule */
1974
2112
  fallback_link: string;
1975
2113
  };
1976
- /** @description v1-draft.37, optional on `createSession`: what the person's app build supports, and the starter chips it showed, as its backend relays them. `shown_intents` are the intent ids of the chips on screen when the chat opened: with the `intent` a tap sends on `input.text`, they tell which chips a person saw and which they tapped. Only the ids are kept. Capabilities: `anchor_card`: it draws an `anchor` card. `intents`: it draws chips from anchor intent ids and sends `intent` on `input.text`. `open_action`: it draws an `open_action` card and opens its route. `action_result`: it sends `action.result` after a hand-off. Open: an unknown value is ignored, never refused. The gateway leaves out what the build lacks: no `open_action` means the action's `fallback_link` as a plain `links` card, no `intents` means the chips come as text, and a build with none still gets the anchored greeting and answers. */
2114
+ /** @description v1-draft.37, optional on `createSession`: what the person's app build supports, and the starter chips it showed, as its backend relays them. `shown_intents` are the intent ids of the chips on screen when the chat opened: with the `intent` a tap sends on `input.text`, they tell which chips a person saw and which they tapped. Only the ids are kept. Capabilities: `anchor_card`: it draws an `anchor` card. `intents`: it draws chips from anchor intent ids and sends `intent` on `input.text`. `open_action`: it draws an `open_action` card and opens its route. `action_result`: it sends `action.result` after a hand-off. `card_layouts` (v1-draft.42): it draws `CardGroup.layout` `strip`, `compare` and `map`. Open: an unknown value is ignored, never refused. The gateway leaves out what the build lacks: no `open_action` means the action's `fallback_link` as a plain `links` card, no `intents` means the chips come as text, and a build with none still gets the anchored greeting and answers. */
1977
2115
  SessionClient: {
1978
2116
  /**
1979
2117
  * @example [
@@ -2137,11 +2275,44 @@ interface components {
2137
2275
  width?: number;
2138
2276
  height?: number;
2139
2277
  };
2140
- /** @description v1-draft.20: the cards one turn draws together carry the same `id`. `layout` is a hint: `carousel` draws them in one horizontal row, `list` one under another. A client that does not know `group`, or a `layout` value, draws a list, as before. */
2278
+ /**
2279
+ * @description v1-draft.20: the cards one turn draws together carry the same `id`. `layout` is a hint: `carousel` draws them in one horizontal row, `list` one under another. A client that does not know `group`, or a `layout` value, draws a list, as before.
2280
+ * v1-draft.42 adds `strip` (the same as `carousel`, named for what it is: photos to browse by eye), `compare` (two cards of one kind side by side) and `map` (the cards' `area_point`s on the host's map, with the list under it), sent only to a client reporting `card_layouts`; any other gets `carousel` for `strip` and `list` for the others. `intent` says why the turn drew the group: `decide` (alternatives weighed on price, time or terms: a list) or `browse` (looks, spaces: a strip). Every card of a group repeats the same group fields; a client reads them from the first. `title` and `summary` draw a group as one titled card (a business's Today); `see_all` continues the same search on the tenant's own list; `constraints` are the search's applied choices, as chips; `partial` names what was not checked when one source failed, so a failed search is never shown as no results.
2281
+ */
2141
2282
  CardGroup: {
2142
2283
  id: string;
2143
2284
  /** @enum {string} */
2144
- layout: "list" | "carousel";
2285
+ layout: "list" | "carousel" | "strip" | "compare" | "map";
2286
+ /** @enum {string} */
2287
+ intent?: "decide" | "browse";
2288
+ /** @description in Unicode code points */
2289
+ title?: string;
2290
+ /** @description in Unicode code points */
2291
+ summary?: string;
2292
+ /** @description the tenant's own list with the same search; the link passes the deep-link rule, or `see_all` is dropped */
2293
+ see_all?: {
2294
+ /** @description in Unicode code points */
2295
+ label: string;
2296
+ deep_link: string;
2297
+ /** @description how many the search found, when the tenant knows */
2298
+ total?: number;
2299
+ };
2300
+ constraints?: {
2301
+ key: string;
2302
+ label: string;
2303
+ value: string;
2304
+ editable?: boolean;
2305
+ }[];
2306
+ partial?: {
2307
+ unchecked: string[];
2308
+ };
2309
+ };
2310
+ /** @description v1-draft.42, what the kit draws, as a message row with at most one button, when the card's kind or version is beyond it, the card fails its validator, or its renderer throws. Never a field dump. */
2311
+ CardFallback: {
2312
+ /** @description in Unicode code points; plain text, masked like the card's own text */
2313
+ text: string;
2314
+ /** @description one of the tenant's own destinations, held to the same rules as a `links` card's links */
2315
+ link?: components["schemas"]["CardLink"];
2145
2316
  };
2146
2317
  /** @description v1-draft.20, one link of a `links` card: one of the tenant's own destinations from its connector manifest (admin-v1 `Connector.help_links`), never a link the model wrote. */
2147
2318
  CardLink: {
@@ -2149,8 +2320,11 @@ interface components {
2149
2320
  label: string;
2150
2321
  /** @description an https page of the tenant's, or a deep link that passes the deep-link rule (`next_step`) */
2151
2322
  url: string;
2152
- /** @enum {string} */
2153
- purpose: "help" | "support" | "policy" | "contact" | "feedback";
2323
+ /**
2324
+ * @description what the page is for; `open` (v1-draft.42) is the object's own screen in the tenant's app, the link of a card's `fallback`. A client that does not know a purpose leaves that link out
2325
+ * @enum {string}
2326
+ */
2327
+ purpose: "help" | "support" | "policy" | "contact" | "feedback" | "open";
2154
2328
  };
2155
2329
  /** @description v1-draft.20, on a `links` card: the tenant's scope policy, at the version in force, that kept the agent from answering, and why. v1-draft.37: `policy_id` and `version` are required for the scope reasons and may be absent for `help`, which no scope policy decides. */
2156
2330
  ScopeProvenance: {
@@ -2237,6 +2411,46 @@ interface components {
2237
2411
  /** @description policy excerpt, handoff text, or what a `next_step` is for */
2238
2412
  body?: string;
2239
2413
  badges?: string[];
2414
+ /** @description v1-draft.42, the version of its kind's shape, one the build reads; absent means 1. A later draft that changes what a kind's fields mean raises it, and sends it only to a build that reports that version; any other build gets the earlier shape or the card's `fallback`. */
2415
+ kind_version?: number;
2416
+ fallback?: components["schemas"]["CardFallback"];
2417
+ /**
2418
+ * Format: date-time
2419
+ * @description v1-draft.42, when the tenant read what the card shows: the source revision of every fact on it. A card in the transcript is a snapshot as of then, never rewritten; a client says how old it is ("Checked 2 h ago") rather than presenting it as current.
2420
+ */
2421
+ as_of?: string;
2422
+ /**
2423
+ * @description v1-draft.42. `complete`: every field the kind's projection allows is present. `partial`: some could not be read, and an absent field means "not known", never zero or "nothing". `unavailable`: the read failed; the card carries only its identity (`id`, `kind`, `ref`) and `title`, no `facts`, and a client names the object and says its details could not load. The same meanings as `SessionAnchor.completeness`. Absent: `complete`, as before.
2424
+ * @enum {string}
2425
+ */
2426
+ completeness?: "complete" | "partial" | "unavailable";
2427
+ /**
2428
+ * @description v1-draft.42, the colour family of `status`, chosen by the tenant with its state word, so a client never works one out from the word. A client always draws the word with it, never the colour alone.
2429
+ * @enum {string}
2430
+ */
2431
+ status_tone?: "neutral" | "info" | "success" | "warning" | "danger";
2432
+ /** @description v1-draft.42, a placement the tenant was paid for; a client labels it, always */
2433
+ sponsored?: boolean;
2434
+ /** @description v1-draft.42, whether the person can take the card's main action now (renting a space, booking a class). Not eligible: `reason` says why, a code the tenant's copy words ("To rent a space, switch to Professional mode in Profile"), and `route` is where to fix it. A client shows the reason in place of the action, never a disabled button without one. Eligibility is the tenant's: the gateway never computes it. */
2435
+ eligibility?: {
2436
+ eligible: boolean;
2437
+ /**
2438
+ * @example wrong_mode
2439
+ * @example not_verified
2440
+ * @example tour_first
2441
+ * @example dates_taken
2442
+ */
2443
+ reason?: string;
2444
+ /** @description a route the connector manifest declares (admin-v1 `Connector.actions.routes`), such as `profile_mode_switch` */
2445
+ route?: string;
2446
+ };
2447
+ /** @description v1-draft.42, a `professional` or `workspace` card's area as one point, for a map preview (`group.layout: map`): the centre of the area, never the street. The gateway rounds both to two decimal places (about a kilometre) whatever the tenant sent. */
2448
+ area_point?: {
2449
+ lat: number;
2450
+ lng: number;
2451
+ };
2452
+ /** @description v1-draft.42, the card's facts typed per kind, the same shapes an anchor carries for the same object (`BookingFacts`, `ProfessionalFacts`, `WorkspaceFacts`, `ServiceFacts`), plus `QuoteFacts`, `TimeSlotsFacts` and `PolicyFacts`; none on any other kind. Bound to the tool result the card's `source` names: every value is the tenant's, byte for byte, and a client draws them by the contract's rules only (money from `Money`, times in the `zone` given). It never adds amounts up. Absent means "can't be worked out", never zero. A service the tenant prices once, whatever the place, carries that price in `Card.price` and its places in `facts.offered_at`; `facts.prices` is only for a tenant with a price per place. */
2453
+ facts?: Record<string, unknown>;
2240
2454
  actions: components["schemas"]["CardAction"][];
2241
2455
  source: {
2242
2456
  tool: string;
@@ -2323,7 +2537,7 @@ interface components {
2323
2537
  snippet?: string;
2324
2538
  /** Format: date-time */
2325
2539
  updated_at?: string;
2326
- } & (unknown & unknown & unknown & unknown & unknown & unknown & unknown);
2540
+ } & (unknown & unknown & unknown & unknown & unknown & unknown & unknown & unknown & unknown & unknown & unknown & unknown & unknown & unknown & unknown & unknown & unknown);
2327
2541
  /** @enum {string} */
2328
2542
  ValueUnit: "count" | "ppm" | "micros_usd" | "ms";
2329
2543
  MetricRef: {
@@ -2576,10 +2790,10 @@ interface components {
2576
2790
  business_scope_id?: components["schemas"]["BusinessScopeId"];
2577
2791
  title: string;
2578
2792
  /**
2579
- * @description `intent`: the last search intent (service and place); `date`: the day it started
2793
+ * @description what the title came from, in this order (v1-draft.45): `anchor`, the anchored object's title; `object`, the professional or space it engaged with most; `task`, a registered task; `intent`, the last search's service and place; `starter`, the label of the tenant's starter that opened it; `context`, the side of the app it belongs to. `date` (the day it started) is no longer sent
2580
2794
  * @enum {string}
2581
2795
  */
2582
- title_source: "intent" | "date";
2796
+ title_source: "anchor" | "object" | "task" | "intent" | "starter" | "context" | "date";
2583
2797
  /** Format: date-time */
2584
2798
  started_at: string;
2585
2799
  /** Format: date-time */
@@ -2591,9 +2805,11 @@ interface components {
2591
2805
  * @enum {string}
2592
2806
  */
2593
2807
  state: "open" | "ended";
2594
- /** @description v1-draft.37, what an anchored conversation is about: the anchor's type and its title as the person saw it (`SessionAnchor.title`), never message text. History groups conversations by it. */
2808
+ /** @description v1-draft.37, what an anchored conversation is about: the anchor's type and its title as the person saw it (`SessionAnchor.title`), never message text. History groups conversations by it. v1-draft.44: and the object's `id` (`SessionAnchor.id`, the tenant's tool id, never a name), so a past conversation about an object is continued under that object's own key and two objects with the same title stay apart. */
2595
2809
  anchor?: {
2596
2810
  kind: components["schemas"]["AnchorType"];
2811
+ /** @description v1-draft.44, the anchored object's id as the tenant's tools name it (`SessionAnchor.id`) */
2812
+ id?: string;
2597
2813
  title: string;
2598
2814
  };
2599
2815
  /** @description v1-draft.37, a preview of the conversation's last message, at most 120 code points, cut at a word with an ellipsis, made from the message as the timeline stores it: after digit masking and redaction, never from a withheld sentence. Never a refused message (`refusal: true`), and absent under the tenant's `transcript_retention` `none`. */
@@ -2673,14 +2889,16 @@ interface components {
2673
2889
  /** Format: date-time */
2674
2890
  at: string;
2675
2891
  };
2676
- /** @description v1-draft.27: one thing the person asked the agent to remember ("remember that I prefer mornings"), in the words the agent said back to the person, never inferred. Never a health fact or a never-store detail; a fact about someone else ("my daughter prefers short hair") is the person's own note (v1-draft.39). */
2892
+ /** @description v1-draft.27: one thing the person asked the agent to remember ("remember that I prefer mornings"), in the words the agent said back to the person, never inferred. Never a health fact or a never-store detail; a fact about someone else ("my daughter prefers short hair") is the person's own note (v1-draft.39). `revision` (v1-draft.48) goes up with each correction; a correction names the one the app showed. */
2677
2893
  MemoryPreference: {
2678
2894
  id: string;
2679
2895
  text: string;
2680
2896
  source: components["schemas"]["MemorySource"];
2897
+ revision: number;
2681
2898
  };
2682
- /** @description v1-draft.27: the last open search intent, as the search resolved it (a catalogue service's name, a place's name), never the person's words; kept 7 days from `at`. */
2899
+ /** @description v1-draft.27: the last open search intent, as the search resolved it (a catalogue service's name, a place's name), never the person's words; kept 7 days from `at`. Its `id` (v1-draft.48) is what `deleteMemorySearch` forgets. */
2683
2900
  LastSearch: {
2901
+ id: string;
2684
2902
  service?: string;
2685
2903
  area?: string;
2686
2904
  /** Format: date-time */
@@ -2690,12 +2908,103 @@ interface components {
2690
2908
  SubjectMemoryChoice: {
2691
2909
  /** @description `false`: "don't remember me", on both sides of the app */
2692
2910
  remembered: boolean;
2911
+ /** @description v1-draft.48, optional: the types the person turned off; turning a type off deletes what it holds. `remembered: false` turns every type off. */
2912
+ off_types?: components["schemas"]["MemoryOffType"][];
2693
2913
  };
2694
2914
  SubjectMemory: {
2695
2915
  remembered: boolean;
2696
2916
  notice_acknowledged?: components["schemas"]["MemoryNoticeVersion"];
2697
2917
  preferences: components["schemas"]["MemoryPreference"][];
2698
2918
  last_search?: components["schemas"]["LastSearch"];
2919
+ /** @description v1-draft.48, the newest 50 deletions the person asked for, each listed until `backups_clear_by` */
2920
+ deletions?: components["schemas"]["MemoryDeletion"][];
2921
+ /** @description v1-draft.48, the kept items of any type, newest first (`updated_at`), up to 60 a page */
2922
+ items?: components["schemas"]["MemoryItem"][];
2923
+ /** @description v1-draft.48, opaque; the next page of `items` (`getSubjectMemory` `cursor`); null on the last */
2924
+ next_cursor?: string | null;
2925
+ /** @description v1-draft.48, how many deletions are listed in all; `deletions` shows the newest 50 */
2926
+ deletions_total?: number;
2927
+ /** @description v1-draft.48, the types the person turned off */
2928
+ off_types?: components["schemas"]["MemoryOffType"][];
2929
+ };
2930
+ /**
2931
+ * @description v1-draft.48: `told`, what the person asked the agent to remember, in the words the agent said back (a fact about someone else is the person's own note); `search`, the last open search; `episode`, where a conversation left off, written by the agent; `learned`, a pattern noticed from what the person searched and booked across at least 3 conversations on at least 2 days, never health; `business_fact`, a fact the business's system holds about the person, kept as evidence; `setup`, a business owner's setup progress (Business mode); `profile`, a preference shared from the person's own Vinaverse profile under a grant. A client draws a type it does not know as a plain item.
2932
+ * @enum {string}
2933
+ */
2934
+ MemoryItemType: "told" | "search" | "episode" | "learned" | "business_fact" | "setup" | "profile";
2935
+ /**
2936
+ * @description v1-draft.48, a type the person may turn off on its own
2937
+ * @enum {string}
2938
+ */
2939
+ MemoryOffType: "learned" | "episode" | "search";
2940
+ /** @description v1-draft.48: a memory item's id; the prefix names the family (`mpf` told and learned, `msr` search, `mep` episode and setup, `mbf` business fact, `mgr` profile) */
2941
+ MemoryItemId: string;
2942
+ /** @description v1-draft.48: one remembered thing, whatever its type. The app draws its label from `type` and `source` in its own language. Never a health fact or a never-store detail. */
2943
+ MemoryItem: {
2944
+ id: components["schemas"]["MemoryItemId"];
2945
+ type: components["schemas"]["MemoryItemType"];
2946
+ /** @description what the agent knows, in plain words */
2947
+ text: string;
2948
+ source: {
2949
+ /** @enum {string} */
2950
+ kind: "conversation" | "search" | "booking" | "pattern" | "profile";
2951
+ /** @description the conversation it came from; null when there is none (a pattern, a profile) */
2952
+ conversation_id: components["schemas"]["ConversationId"] | null;
2953
+ /** Format: date-time */
2954
+ at: string;
2955
+ };
2956
+ /** @description how a `learned` item was learned; null for every other type */
2957
+ why: {
2958
+ conversations: number;
2959
+ /** Format: date-time */
2960
+ first_at: string;
2961
+ /** Format: date-time */
2962
+ last_at: string;
2963
+ } | null;
2964
+ /** @description whether the person may correct the words (`told`, `learned`) */
2965
+ editable: boolean;
2966
+ /** @description a correction sends the revision the screen showed */
2967
+ revision: number;
2968
+ /**
2969
+ * @description `customer`, the person's own; `business`, an owner's setup memory (Business mode only)
2970
+ * @enum {string}
2971
+ */
2972
+ side: "customer" | "business";
2973
+ /** Format: date-time */
2974
+ kept_at: string;
2975
+ /** Format: date-time */
2976
+ updated_at: string;
2977
+ /**
2978
+ * Format: date-time
2979
+ * @description when it goes by itself (a search, 7 days after it); otherwise null
2980
+ */
2981
+ expires_at: string | null;
2982
+ };
2983
+ /** @description v1-draft.48, the person's corrected words for one editable item, and the revision they saw; at most 200 characters, as a `told` item. */
2984
+ MemoryItemCorrection: {
2985
+ text: string;
2986
+ revision: number;
2987
+ };
2988
+ /** @description v1-draft.48, a remembered item a reply's sentences mention, as `MemoryItem` names it */
2989
+ MemoryUsed: {
2990
+ id: components["schemas"]["MemoryItemId"];
2991
+ type: components["schemas"]["MemoryItemType"];
2992
+ text: string;
2993
+ };
2994
+ /** @description v1-draft.48, the person's corrected words for one kept preference, and the revision they saw. */
2995
+ MemoryPreferenceCorrection: {
2996
+ text: string;
2997
+ revision: number;
2998
+ };
2999
+ /** @description v1-draft.48: one deletion the person asked for: removed at `requested_at` from everything Vinaverse serves, and gone from every backup by `backups_clear_by` (backups are never edited; the deletion is re-applied after any restore). Listed until `backups_clear_by`. A status never says "completed" alone while backups still hold it, and holds no text of what was deleted. The conversation where the item was said is not part of the deletion: it is kept until it expires (the tenant's `transcript_retention`, at most 30 days) or is deleted (`deleteConversation`). One deletion per forgotten item, named by the item's type (a preference forgotten through `deleteMemoryPreference` is `told`); a type turned off lists one per item it held. `all` is "don't remember me". A deletion never names the item it deleted: it has no item id, and never will. */
3000
+ MemoryDeletion: {
3001
+ id: string;
3002
+ /** @enum {string} */
3003
+ kind: "told" | "search" | "episode" | "learned" | "business_fact" | "setup" | "all";
3004
+ /** Format: date-time */
3005
+ requested_at: string;
3006
+ /** Format: date-time */
3007
+ backups_clear_by: string;
2699
3008
  };
2700
3009
  /** @description A time slot the person picked on a `time_slots` card (v1-draft.17, `docs/realtime-protocol.md` §6): the slot's `id`, and the `call_id` of the tool call the card came from (the card's `source.call_id`), so the runtime checks the pick against the evidence it holds for that call. Both are copied from the card; never built by the app. */
2701
3010
  SlotSelection: {
@@ -2964,6 +3273,8 @@ interface components {
2964
3273
  text: string;
2965
3274
  /** @description optional; spans of `text` with their source card or tool call */
2966
3275
  citations?: components["schemas"]["Citation"][];
3276
+ /** @description v1-draft.48, optional: the remembered items the reply's sentences mention, and only those, so the app or the kit shows "Remembered: …" under the reply with Edit and Forget. Absent when none. */
3277
+ memory_used?: components["schemas"]["MemoryUsed"][];
2967
3278
  } | {
2968
3279
  /** @constant */
2969
3280
  type: "handoff.created";
@@ -3471,8 +3782,10 @@ interface components {
3471
3782
  * it in Studio. Every field is optional: a field absent is the kit's own default (the `standard` preset), so an
3472
3783
  * app built before a field existed keeps working, except a field the gateway enforces (`edit`, `regenerate`,
3473
3784
  * `versions`, `fork`, `pins` stored on the server, `summary`), which resolves off when absent. That is about the
3474
- * resolved value; in a setting's `overrides` an absent field is the preset's value. A client ignores a field it
3475
- * does not know.
3785
+ * resolved value; in a setting's `overrides` an absent field is the preset's value, except `cards.kinds` and
3786
+ * `handoff.routes`: absent, they keep the list an earlier save stored, and on a first save they are every kind
3787
+ * or route available then (admin-v1 `ChatExperienceView.available`), so no save that leaves them out ever
3788
+ * widens them. A client ignores a field it does not know.
3476
3789
  *
3477
3790
  * **Resolved, not raw.** Inside a conversation the value is resolved: the tenant's preset with its changes
3478
3791
  * (admin-v1 `ChatExperienceSetting`), narrowed by what this server serves (a feature it does not serve yet
@@ -3881,14 +4194,21 @@ interface components {
3881
4194
  /** @description under consequential claims; default true */
3882
4195
  line?: boolean;
3883
4196
  };
3884
- /** @description memory in the chat (spec J); off whenever the person or the tenant turned memory off */
4197
+ /** @description memory in the chat (spec J); off whenever the person or the tenant turned memory off. `sheet` and `learned` (vinaverse-v1 v1-draft.48, admin-v1 v1-draft.33, VIN-223): the memory sheet ("What the agent remembers"), where the person sees, corrects and forgets what is kept, and its learned section. `page` is the same surface as `sheet` and is deprecated: it stays one draft as an alias, then goes. Migration: a setting that has `page` and no `sheet` resolves `sheet` to `page`'s value, so an old explicit `page: false` is `sheet: false`; the resolved value carries both, equal. Hiding any of these never deletes what is kept. */
3885
4198
  memory?: {
3886
- /** @description default true */
4199
+ /** @description the "Remembered" chips under a reply that used memory; default true */
3887
4200
  chips?: boolean;
3888
- /** @description "What the agent remembers"; default false */
4201
+ /**
4202
+ * @deprecated
4203
+ * @description deprecated alias of `sheet` (v1-draft.48), kept one draft: set without `sheet`, it is `sheet`'s value; resolved, it equals `sheet`
4204
+ */
3889
4205
  page?: boolean;
3890
4206
  /** @description a conversation kept out of memory; default true */
3891
4207
  per_conversation_off?: boolean;
4208
+ /** @description the memory sheet, to see, correct and forget items; replaces `page`, and takes `page`'s value when a setting has only `page`; default true */
4209
+ sheet?: boolean;
4210
+ /** @description the sheet's learned section; default true */
4211
+ learned?: boolean;
3892
4212
  };
3893
4213
  handoff?: {
3894
4214
  /** @description absent in a setting: every route the tenant has when it is saved (stored as that list) */
@@ -4170,6 +4490,8 @@ interface components {
4170
4490
  /** @description v1-draft.24, optional: the business the caller acts for; when given, the conversation must be bound to it, else `404`. With `experience_mode: business` and no `business_scope_id`, a conversation bound to a business does not match. */
4171
4491
  BindingBusinessScope: components["schemas"]["BusinessScopeId"];
4172
4492
  SubjectIdPath: components["schemas"]["SubjectId"];
4493
+ /** @description v1-draft.48, a `MemoryItem.id` */
4494
+ MemoryItemIdPath: components["schemas"]["MemoryItemId"];
4173
4495
  IdempotencyKey: string;
4174
4496
  /** @description Accepted, not required (declared in v1-draft.22). Scoped to the tenant and environment: the same key and request within 24 hours answers the first success again (`Idempotent-Replayed: true`); the same key with another request is `409 idempotency_conflict`. */
4175
4497
  OptionalIdempotencyKey: string;
@@ -4930,6 +5252,11 @@ interface operations {
4930
5252
  sessions_revoked: number;
4931
5253
  /** Format: date-time */
4932
5254
  deadline: string;
5255
+ /**
5256
+ * Format: date-time
5257
+ * @description v1-draft.48, optional: `completed` means the live copies are gone; backups are never edited, and no backup holds the erased data after this date (at most 35 days after the request).
5258
+ */
5259
+ backups_clear_by?: string;
4933
5260
  };
4934
5261
  };
4935
5262
  };
@@ -4955,6 +5282,8 @@ interface operations {
4955
5282
  experience_mode?: components["schemas"]["ExperienceMode"];
4956
5283
  /** @description the business the person acts for; only with `experience_mode=business` */
4957
5284
  business_scope_id?: components["schemas"]["BusinessScopeId"];
5285
+ /** @description v1-draft.48, optional; the `next_cursor` of the page before */
5286
+ cursor?: string;
4958
5287
  };
4959
5288
  header?: never;
4960
5289
  path: {
@@ -5064,6 +5393,124 @@ interface operations {
5064
5393
  503: components["responses"]["Problem"];
5065
5394
  };
5066
5395
  };
5396
+ correctMemoryPreference: {
5397
+ parameters: {
5398
+ query?: never;
5399
+ header?: never;
5400
+ path: {
5401
+ subject_id: components["parameters"]["SubjectIdPath"];
5402
+ preference_id: string;
5403
+ };
5404
+ cookie?: never;
5405
+ };
5406
+ requestBody: {
5407
+ content: {
5408
+ "application/json": components["schemas"]["MemoryPreferenceCorrection"];
5409
+ };
5410
+ };
5411
+ responses: {
5412
+ /** @description The preference as now kept, with its new `revision`. */
5413
+ 200: {
5414
+ headers: {
5415
+ [name: string]: unknown;
5416
+ };
5417
+ content: {
5418
+ "application/json": components["schemas"]["MemoryPreference"];
5419
+ };
5420
+ };
5421
+ 400: components["responses"]["Problem"];
5422
+ 401: components["responses"]["Problem"];
5423
+ 403: components["responses"]["Problem"];
5424
+ 404: components["responses"]["Problem"];
5425
+ 409: components["responses"]["Problem"];
5426
+ 503: components["responses"]["Problem"];
5427
+ };
5428
+ };
5429
+ deleteMemorySearch: {
5430
+ parameters: {
5431
+ query?: never;
5432
+ header?: never;
5433
+ path: {
5434
+ subject_id: components["parameters"]["SubjectIdPath"];
5435
+ search_id: string;
5436
+ };
5437
+ cookie?: never;
5438
+ };
5439
+ requestBody?: never;
5440
+ responses: {
5441
+ /** @description Forgotten. */
5442
+ 204: {
5443
+ headers: {
5444
+ [name: string]: unknown;
5445
+ };
5446
+ content?: never;
5447
+ };
5448
+ 401: components["responses"]["Problem"];
5449
+ 403: components["responses"]["Problem"];
5450
+ 404: components["responses"]["Problem"];
5451
+ 503: components["responses"]["Problem"];
5452
+ };
5453
+ };
5454
+ forgetMemoryItem: {
5455
+ parameters: {
5456
+ query?: never;
5457
+ header?: never;
5458
+ path: {
5459
+ subject_id: components["parameters"]["SubjectIdPath"];
5460
+ /** @description v1-draft.48, a `MemoryItem.id` */
5461
+ memory_item_id: components["parameters"]["MemoryItemIdPath"];
5462
+ };
5463
+ cookie?: never;
5464
+ };
5465
+ requestBody?: never;
5466
+ responses: {
5467
+ /** @description Forgotten. */
5468
+ 204: {
5469
+ headers: {
5470
+ [name: string]: unknown;
5471
+ };
5472
+ content?: never;
5473
+ };
5474
+ 401: components["responses"]["Problem"];
5475
+ 403: components["responses"]["Problem"];
5476
+ 404: components["responses"]["Problem"];
5477
+ 503: components["responses"]["Problem"];
5478
+ };
5479
+ };
5480
+ correctMemoryItem: {
5481
+ parameters: {
5482
+ query?: never;
5483
+ header?: never;
5484
+ path: {
5485
+ subject_id: components["parameters"]["SubjectIdPath"];
5486
+ /** @description v1-draft.48, a `MemoryItem.id` */
5487
+ memory_item_id: components["parameters"]["MemoryItemIdPath"];
5488
+ };
5489
+ cookie?: never;
5490
+ };
5491
+ requestBody: {
5492
+ content: {
5493
+ "application/json": components["schemas"]["MemoryItemCorrection"];
5494
+ };
5495
+ };
5496
+ responses: {
5497
+ /** @description The item as now kept, a `told` item with its new `revision`. */
5498
+ 200: {
5499
+ headers: {
5500
+ [name: string]: unknown;
5501
+ };
5502
+ content: {
5503
+ "application/json": components["schemas"]["MemoryItem"];
5504
+ };
5505
+ };
5506
+ 400: components["responses"]["Problem"];
5507
+ 401: components["responses"]["Problem"];
5508
+ 403: components["responses"]["Problem"];
5509
+ 404: components["responses"]["Problem"];
5510
+ 409: components["responses"]["Problem"];
5511
+ 503: components["responses"]["Problem"];
5512
+ };
5513
+ };
5067
5514
  sendEvents: {
5068
5515
  parameters: {
5069
5516
  query?: never;