@pam-ai/pam-ordo-contracts 3.12.0 → 3.14.0

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.
package/README.md CHANGED
@@ -9,7 +9,7 @@ Pin consumers to an exact npm version:
9
9
  ```json
10
10
  {
11
11
  "dependencies": {
12
- "@pam-ai/pam-ordo-contracts": "3.12.0"
12
+ "@pam-ai/pam-ordo-contracts": "3.13.0"
13
13
  }
14
14
  }
15
15
  ```
@@ -40,6 +40,12 @@ Conversation AI consumers import `ConversationAiSnapshotV1`. It is a
40
40
  replace-in-place snapshot keyed by rooftop and canonical Customer identity; it
41
41
  is not a source-of-truth Interaction record or a version-history API.
42
42
 
43
+ Reach out consumers use `CreateInboxCustomerCommand` for an explicit
44
+ create-only Customer request and `SendInboxMessageCommand` for the
45
+ Conversation-aware Telnyx SMS operation. Directory reads, Customer creation,
46
+ calls, and messages remain separate capabilities; a consumer must never infer
47
+ one grant from another.
48
+
43
49
  The public npm artifact contains compiled TypeScript declarations, bundled OpenAPI, and shared fixtures. Consumers do not need GitHub repository credentials.
44
50
 
45
51
  New DASH-273 verification runners must use the canonical v2 manifest exported at
@@ -111,6 +111,46 @@ export interface paths {
111
111
  patch?: never;
112
112
  trace?: never;
113
113
  };
114
+ "/v1/inbox/commands/create-customer": {
115
+ parameters: {
116
+ query?: never;
117
+ header?: never;
118
+ path?: never;
119
+ cookie?: never;
120
+ };
121
+ get?: never;
122
+ put?: never;
123
+ /**
124
+ * Create a new rooftop Customer for Reach out
125
+ * @description Creates a Customer only when the submitted mobile number is not already owned or quarantined at the selected rooftop. This is not an upsert: a number already owned by another Customer returns a conflict and is never silently merged. Ordo authorizes the User and delegates canonical Customer creation to pam-customers-service. Requires CREATE_CUSTOMER.
126
+ */
127
+ post: operations["createInboxCustomer"];
128
+ delete?: never;
129
+ options?: never;
130
+ head?: never;
131
+ patch?: never;
132
+ trace?: never;
133
+ };
134
+ "/v1/inbox/commands/send-message": {
135
+ parameters: {
136
+ query?: never;
137
+ header?: never;
138
+ path?: never;
139
+ cookie?: never;
140
+ };
141
+ get?: never;
142
+ put?: never;
143
+ /**
144
+ * Send a Telnyx SMS and find or create its canonical Conversation
145
+ * @description Sends an outbound Customer SMS through the Ordo boundary. The caller names the canonical Customer, not a telephone number or provider. Ordo resolves or creates the Conversation, applies the explicit ownership disposition, and records the operation before delegating delivery to the Telnyx-only Comms path. An outbound-only Conversation may remain Closed with no active WorkCycle. Requires MESSAGE_CUSTOMER. Unknown provider outcomes are returned explicitly and are never blindly resent.
146
+ */
147
+ post: operations["sendInboxMessage"];
148
+ delete?: never;
149
+ options?: never;
150
+ head?: never;
151
+ patch?: never;
152
+ trace?: never;
153
+ };
114
154
  "/v1/inbox/commands/assign": {
115
155
  parameters: {
116
156
  query?: never;
@@ -162,6 +202,46 @@ export interface paths {
162
202
  patch?: never;
163
203
  trace?: never;
164
204
  };
205
+ "/v1/inbox/commands/hold-pam": {
206
+ parameters: {
207
+ query?: never;
208
+ header?: never;
209
+ path?: never;
210
+ cookie?: never;
211
+ };
212
+ get?: never;
213
+ put?: never;
214
+ /**
215
+ * Stop Pam answering this Customer's texts
216
+ * @description Places a hold on Pam's automatic text replies for this Conversation. The hold is a lease rather than a switch: the messaging authority expires it on its own, and the resulting expiry is published as PamAutoReplyV1.pausedUntil. Governs texting only and never inbound telephone calls. Requires HOLD_PAM_AUTO_REPLY. A Conversation with no messaging record — one provisioned from an accepted repair order, for instance — has nothing to hold and is refused rather than silently accepted.
217
+ */
218
+ post: operations["holdConversationPamAutoReply"];
219
+ delete?: never;
220
+ options?: never;
221
+ head?: never;
222
+ patch?: never;
223
+ trace?: never;
224
+ };
225
+ "/v1/inbox/commands/resume-pam": {
226
+ parameters: {
227
+ query?: never;
228
+ header?: never;
229
+ path?: never;
230
+ cookie?: never;
231
+ };
232
+ get?: never;
233
+ put?: never;
234
+ /**
235
+ * Let Pam answer this Customer's texts again
236
+ * @description Releases a hold before its lease expires. Accepted on a Conversation that is already ACTIVE so a reader who has lost track of the lease is never stuck; the operation is idempotent by operationId like every other command here. Requires HOLD_PAM_AUTO_REPLY.
237
+ */
238
+ post: operations["resumeConversationPamAutoReply"];
239
+ delete?: never;
240
+ options?: never;
241
+ head?: never;
242
+ patch?: never;
243
+ trace?: never;
244
+ };
165
245
  "/v1/inbox/commands/set-reminder": {
166
246
  parameters: {
167
247
  query?: never;
@@ -420,7 +500,7 @@ export interface components {
420
500
  * @description A single Ordo product capability. Capabilities are the only authorization vocabulary for Ordo surfaces. They are not a second half of the dashboard's resource/action permission model and do not divide the work with it. Resource permissions govern legacy dashboard surfaces and nothing else; capabilities govern Ordo surfaces and nothing else; neither is a fallback or an outer gate for the other. A same-named resource is a coincidence of vocabulary rather than a related grant, so REPAIR_ORDERS:READ says nothing about VIEW_OPEN_REPAIR_ORDERS and a User may hold either without the other. Resolved per rooftop by pam-permissions-service from the User's role, and enforced by pam-ordo-service. The distribution across personas is the approved capability contract in section 3.3 of the Ordo Product and Engineering Specification.
421
501
  * @enum {string}
422
502
  */
423
- OrdoCapability: "VIEW_OWN_INBOX" | "VIEW_TEAM_INBOX" | "VIEW_CUSTOMER_DIRECTORY" | "CALL_CUSTOMER" | "SWITCH_ROOFTOP" | "VIEW_ANY_ROOFTOP_CONVERSATION" | "VIEW_OPEN_REPAIR_ORDERS" | "VIEW_ALL_OPEN_REPAIR_ORDERS" | "ASSIGN_OWNED_WORK" | "ASSIGN_ANY_WORK" | "CLOSE_OWNED_WORK" | "CLOSE_ANY_WORK" | "RESOLVE_NEEDS_ATTENTION" | "MENTION_USERS" | "ADD_CUSTOMER_NOTE" | "DELETE_ANY_CUSTOMER_NOTE";
503
+ OrdoCapability: "VIEW_OWN_INBOX" | "VIEW_TEAM_INBOX" | "VIEW_CUSTOMER_DIRECTORY" | "CALL_CUSTOMER" | "CREATE_CUSTOMER" | "MESSAGE_CUSTOMER" | "SWITCH_ROOFTOP" | "VIEW_ANY_ROOFTOP_CONVERSATION" | "VIEW_OPEN_REPAIR_ORDERS" | "VIEW_ALL_OPEN_REPAIR_ORDERS" | "ASSIGN_OWNED_WORK" | "ASSIGN_ANY_WORK" | "CLOSE_OWNED_WORK" | "CLOSE_ANY_WORK" | "RESOLVE_NEEDS_ATTENTION" | "MENTION_USERS" | "ADD_CUSTOMER_NOTE" | "DELETE_ANY_CUSTOMER_NOTE" | "HOLD_PAM_AUTO_REPLY";
424
504
  /** @description A configured target for one stable rooftop User identity. */
425
505
  InboxPolicyUserTargetV1: {
426
506
  /**
@@ -671,7 +751,7 @@ export interface components {
671
751
  channels: string[];
672
752
  };
673
753
  /** @enum {string} */
674
- AvailableAction: "ASSIGN" | "SNOOZE" | "UNSNOOZE" | "SET_REMINDER" | "CLEAR_REMINDER" | "CLOSE" | "RESOLVE_ATTENTION" | "ADD_INTERNAL_COMMENT";
754
+ AvailableAction: "ASSIGN" | "SNOOZE" | "UNSNOOZE" | "SET_REMINDER" | "CLEAR_REMINDER" | "CLOSE" | "RESOLVE_ATTENTION" | "ADD_INTERNAL_COMMENT" | "SEND_MESSAGE" | "HOLD_PAM" | "RESUME_PAM";
675
755
  InboxRow: {
676
756
  /** Format: uuid */
677
757
  conversationId: string;
@@ -736,6 +816,8 @@ export interface components {
736
816
  openRepairOrder?: components["schemas"]["RepairOrderRef"] | null;
737
817
  /** @description The Customer's most recent Conversation, or null when they have none. Null is a fact about the Customer rather than a hydration gap. */
738
818
  conversationId: string | null;
819
+ /** @description Stable current owner identity used to render the colleague-owned Reach out choice. Optional during the additive rollout; null means the current WorkCycle is unassigned or there is no current WorkCycle. */
820
+ ownerUserId?: string | null;
739
821
  relationship: components["schemas"]["ContactRelationship"];
740
822
  availability: components["schemas"]["Availability"];
741
823
  };
@@ -768,9 +850,15 @@ export interface components {
768
850
  mentions?: components["schemas"]["MentionRef"][];
769
851
  /**
770
852
  * Format: uuid
771
- * @description WorkCycle that was active when this Interaction was ingested, mirroring conversation_interaction_refs.work_cycle_id. Null is authoritative and means the Interaction belongs to no cycle, which is expected for RO transitions and other non-work events. Optional only to keep this addition a minor version; every producer emits it unconditionally and pam-ordo-service asserts that in its contract tests, so consumers should treat an absent field as a producer defect rather than a supported state. Consumers must never infer cycle membership from interaction timestamps.
853
+ * @description WorkCycle that was active when this Interaction was ingested, mirroring conversation_interaction_refs.work_cycle_id. Null is authoritative and means the Interaction belongs to no cycle. That is UNCOMMON rather than expected: an RO transition is attributed to the active cycle like any other activity, and because a cycle cannot be closed while a repair order is still linked and open, an RO_OPENED and its RO_CLOSED necessarily fall in the same cycle. A null here means no cycle was open when the Interaction arrived — an RO raised on a resolved Conversation, or the tested race where a Close commits first. Earlier revisions of this description said null was expected for RO transitions, which contradicted the sentence above it and led at least one consumer to treat a cycle-scoped read as unusable for repair-order events. Optional only to keep this addition a minor version; every producer emits it unconditionally and pam-ordo-service asserts that in its contract tests, so consumers should treat an absent field as a producer defect rather than a supported state. Consumers must never infer cycle membership from interaction timestamps.
772
854
  */
773
855
  workCycleId?: string | null;
856
+ /** @description The system that mastered this Interaction, mirroring conversation_interaction_refs.source_system — `pam_messaging_dynamodb` for SMS, `pam_call_metadata` for calls and voicemails, and null for anything Ordo authored itself, such as an internal comment. Published so a consumer can tell WHICH external authority governs a Conversation's messaging without inferring it from a channel string. */
857
+ sourceSystem?: string | null;
858
+ /** @description The exact native locator of the mastering record, when the source system uses one. Published for the same reason the column that stores it carries the comment "exact native locator, never reconstructed from a current phone alias": a consumer that rebuilds this key from the Customer's current telephone number addresses the wrong thread whenever that number has been corrected, and cannot address one at all when the number is withheld or failed to hydrate. */
859
+ sourceLocator?: components["schemas"]["SourceLocatorV1"] | null;
860
+ /** @description Present only on an Interaction of kind `ro_event`, and never null on one. Before this field a repair-order Interaction arrived with kind `ro_event`, a null body and nothing else, so a reader could tell that SOMETHING had happened to a repair order but neither which one nor whether it had opened or closed. */
861
+ repairOrder?: components["schemas"]["InteractionRepairOrderRefV1"] | null;
774
862
  sequenceNumber: number;
775
863
  kind: string;
776
864
  channel?: string | null;
@@ -797,6 +885,40 @@ export interface components {
797
885
  vin: components["schemas"]["HydratedText"];
798
886
  availability: components["schemas"]["Availability"];
799
887
  };
888
+ /** @description Where a mastered record actually lives, in the shape its own system uses. Today only the DynamoDB-backed messaging source supplies one; a source that addresses records by a plain identifier has none, and its Interactions carry null. */
889
+ SourceLocatorV1: {
890
+ /** @description The item-collection key. For `pam_messaging_dynamodb` this is `DEALER#{clientOrgId}#FROM#{customerE164}`, which is the same key the conversation-level state record uses, so a consumer holding it can address the Conversation's messaging state without deriving anything. */
891
+ partitionKey: string;
892
+ /** @description The individual record within the collection, when the source has one. */
893
+ sortKey?: string | null;
894
+ };
895
+ /** @description Which repair order moved, and which way. The vocabulary is the producer's own `ProducerRepairOrderTransitionV1.transition`; this republishes it on the read model rather than inventing a second one. */
896
+ InteractionRepairOrderRefV1: {
897
+ /** @enum {string} */
898
+ transition: "RO_OPENED" | "RO_CLOSED";
899
+ sourceSystem: string;
900
+ externalId: string;
901
+ /** @description The number a reader recognises. Hydrated, and therefore able to be unavailable on its own: the transition is known from the Interaction itself and stays readable when the Customer-facing number does not resolve. */
902
+ displayNumber: components["schemas"]["HydratedText"];
903
+ };
904
+ /**
905
+ * @description Whether Pam is answering this Customer's texts, and until when.
906
+ * A LEASE RATHER THAN A SWITCH, because that is what the systems underneath actually implement: a hold placed by a human expires on its own after a fixed window and Pam resumes. Publishing a bare boolean would let a consumer draw "paused" over a Conversation Pam had already started answering again, which is worse than drawing nothing — the reader believes they own the thread.
907
+ * SCOPED TO TEXT. Nothing here governs whether Pam answers an inbound telephone call. A consumer must not label this control with a word that claims more than texting.
908
+ */
909
+ PamAutoReplyV1: {
910
+ /**
911
+ * @description `UNKNOWN` is a real answer and not an error: the messaging authority may be unreachable, or the Conversation may have no messaging record at all, which is the normal state of one provisioned from an accepted repair order or a reach-out. A consumer must not render `UNKNOWN` as either of the other two.
912
+ * @enum {string}
913
+ */
914
+ state: "ACTIVE" | "PAUSED" | "UNKNOWN";
915
+ /**
916
+ * Format: date-time
917
+ * @description When a `PAUSED` hold lapses. Null while `ACTIVE`, and null on a `PAUSED` state whose authority does not expire holds. A consumer comparing this to the current time is computing the same thing the authority computes when it decides whether to suppress a reply.
918
+ */
919
+ pausedUntil?: string | null;
920
+ availability: components["schemas"]["Availability"];
921
+ };
800
922
  RepairOrderRef: {
801
923
  sourceSystem: string;
802
924
  externalId: string;
@@ -818,6 +940,8 @@ export interface components {
818
940
  reminder: components["schemas"]["Reminder"] | null;
819
941
  attention: components["schemas"]["AttentionSummary"] | null;
820
942
  overdue: components["schemas"]["OverdueSummary"];
943
+ /** @description Optional so this addition stays a minor version. An absent field means this deployment does not resolve the messaging authority at all, which a consumer should treat the same way it treats `UNKNOWN` — draw no control rather than an inert one. */
944
+ pamAutoReply?: components["schemas"]["PamAutoReplyV1"];
821
945
  customerDisplayName: components["schemas"]["HydratedText"];
822
946
  /** @description The Customer's contact telephone number, for placing an outbound call. Optional because no producer can supply it yet: Ordo stores a Customer reference and no payload, so this arrives with external Customer hydration. Absent and `{ value: null }` mean different things - absent is a producer that does not publish the field, null with an availability is a source that could not supply it. */
823
947
  customerPhone?: components["schemas"]["HydratedText"];
@@ -1347,6 +1471,8 @@ export interface components {
1347
1471
  /** Format: uuid */
1348
1472
  throughInteractionRefId: string;
1349
1473
  };
1474
+ /** @description Conversation-scoped rather than WorkCycle-scoped, and deliberately carrying no expectedVersion. Whether Pam answers a Customer's texts is a property of the Conversation's messaging, not of the work in front of an advisor: a Conversation with no open cycle still receives texts, and a hold that could only be placed while a cycle happened to be open would be unavailable in exactly the state — a resolved thread the Customer is still writing to — where a human most wants it. There is no version to guard either, because the authority underneath is a lease that expires on its own; the operationId carries idempotency, as it does for Customer notes. */
1475
+ PamAutoReplyCommand: components["schemas"]["ConversationOperationEnvelope"];
1350
1476
  AddCustomerNoteCommand: components["schemas"]["ConversationOperationEnvelope"] & {
1351
1477
  body: string;
1352
1478
  };
@@ -1355,6 +1481,74 @@ export interface components {
1355
1481
  noteId: string;
1356
1482
  expectedNoteVersion: number;
1357
1483
  };
1484
+ InboxCustomerIdentity: {
1485
+ /** @constant */
1486
+ sourceSystem: "pam_customers_service";
1487
+ /** Format: uuid */
1488
+ customerId: string;
1489
+ };
1490
+ /** @description Optional structured vehicle information for a newly created Customer. At least one field is required when the object is present. It creates Customer context only and never implies an open repair order. */
1491
+ NewCustomerVehicleInput: {
1492
+ year?: number;
1493
+ make?: string;
1494
+ model?: string;
1495
+ vin?: string;
1496
+ };
1497
+ CreateInboxCustomerCommand: {
1498
+ operationId: string;
1499
+ clientOrgId: string;
1500
+ firstName: string;
1501
+ lastName?: string;
1502
+ /** @description Normalized E.164 mobile number. */
1503
+ mobileNumber: string;
1504
+ vehicle?: components["schemas"]["NewCustomerVehicleInput"];
1505
+ };
1506
+ CreateInboxCustomerResult: {
1507
+ data: {
1508
+ operationId: string;
1509
+ applied: boolean;
1510
+ replayed: boolean;
1511
+ customer: components["schemas"]["InboxCustomerIdentity"];
1512
+ /** Format: uuid */
1513
+ vehicleId: string | null;
1514
+ };
1515
+ };
1516
+ /**
1517
+ * @description PRESERVE leaves an existing owner unchanged. TAKE explicitly requests assignment to the authenticated User when an active WorkCycle exists; it never creates a WorkCycle merely to assign it.
1518
+ * @enum {string}
1519
+ */
1520
+ OutboundMessageOwnershipDisposition: "PRESERVE" | "TAKE";
1521
+ SendInboxMessageCommand: {
1522
+ operationId: string;
1523
+ clientOrgId: string;
1524
+ customer: components["schemas"]["InboxCustomerIdentity"];
1525
+ /**
1526
+ * Format: uuid
1527
+ * @description The Conversation observed by the caller, or null when contact search reported NONE. Ordo revalidates it against the canonical Customer and safely finds or creates the Conversation under its tenant lock.
1528
+ */
1529
+ conversationId: string | null;
1530
+ body: string;
1531
+ ownershipDisposition: components["schemas"]["OutboundMessageOwnershipDisposition"];
1532
+ };
1533
+ /** @enum {string} */
1534
+ OutboundMessageDeliveryState: "PENDING" | "ACCEPTED" | "FAILED" | "UNKNOWN";
1535
+ SendInboxMessageResult: {
1536
+ data: {
1537
+ operationId: string;
1538
+ applied: boolean;
1539
+ replayed: boolean;
1540
+ /** Format: uuid */
1541
+ conversationId: string;
1542
+ conversationCreated: boolean;
1543
+ /** Format: uuid */
1544
+ deliveryId: string;
1545
+ deliveryState: components["schemas"]["OutboundMessageDeliveryState"];
1546
+ /** Format: uuid */
1547
+ workCycleId: string | null;
1548
+ resultingVersion: number | null;
1549
+ ownershipDisposition: components["schemas"]["OutboundMessageOwnershipDisposition"];
1550
+ };
1551
+ };
1358
1552
  CommandResult: {
1359
1553
  data: {
1360
1554
  operationId: string;
@@ -1482,6 +1676,26 @@ export interface components {
1482
1676
  "application/json": components["schemas"]["NotificationCommandResult"];
1483
1677
  };
1484
1678
  };
1679
+ /** @description Created or idempotently replayed canonical Customer result. */
1680
+ InboxCustomerCreated: {
1681
+ headers: {
1682
+ "x-correlation-id": components["headers"]["CorrelationId"];
1683
+ [name: string]: unknown;
1684
+ };
1685
+ content: {
1686
+ "application/json": components["schemas"]["CreateInboxCustomerResult"];
1687
+ };
1688
+ };
1689
+ /** @description Submitted or idempotently replayed outbound-message result. */
1690
+ InboxMessageSubmitted: {
1691
+ headers: {
1692
+ "x-correlation-id": components["headers"]["CorrelationId"];
1693
+ [name: string]: unknown;
1694
+ };
1695
+ content: {
1696
+ "application/json": components["schemas"]["SendInboxMessageResult"];
1697
+ };
1698
+ };
1485
1699
  /** @description Invalid input. */
1486
1700
  BadRequest: {
1487
1701
  headers: {
@@ -1606,6 +1820,11 @@ export interface components {
1606
1820
  "application/json": components["schemas"]["AdvanceReadCursorCommand"];
1607
1821
  };
1608
1822
  };
1823
+ PamAutoReplyCommand: {
1824
+ content: {
1825
+ "application/json": components["schemas"]["PamAutoReplyCommand"];
1826
+ };
1827
+ };
1609
1828
  AddCustomerNoteCommand: {
1610
1829
  content: {
1611
1830
  "application/json": components["schemas"]["AddCustomerNoteCommand"];
@@ -1621,6 +1840,16 @@ export interface components {
1621
1840
  "application/json": components["schemas"]["NotificationCommand"];
1622
1841
  };
1623
1842
  };
1843
+ CreateInboxCustomerCommand: {
1844
+ content: {
1845
+ "application/json": components["schemas"]["CreateInboxCustomerCommand"];
1846
+ };
1847
+ };
1848
+ SendInboxMessageCommand: {
1849
+ content: {
1850
+ "application/json": components["schemas"]["SendInboxMessageCommand"];
1851
+ };
1852
+ };
1624
1853
  };
1625
1854
  headers: {
1626
1855
  /** @description Stable request correlation identifier. */
@@ -1852,6 +2081,49 @@ export interface operations {
1852
2081
  503: components["responses"]["ServiceUnavailable"];
1853
2082
  };
1854
2083
  };
2084
+ createInboxCustomer: {
2085
+ parameters: {
2086
+ query?: never;
2087
+ header: {
2088
+ /** @description Authorized rooftop context. For commands this value must match body.clientOrgId; neither value is trusted without DASH-233 resolution. */
2089
+ "x-client-org-id": components["parameters"]["ClientOrgId"];
2090
+ };
2091
+ path?: never;
2092
+ cookie?: never;
2093
+ };
2094
+ requestBody: components["requestBodies"]["CreateInboxCustomerCommand"];
2095
+ responses: {
2096
+ 200: components["responses"]["InboxCustomerCreated"];
2097
+ 400: components["responses"]["BadRequest"];
2098
+ 401: components["responses"]["Unauthorized"];
2099
+ 403: components["responses"]["Forbidden"];
2100
+ 409: components["responses"]["Conflict"];
2101
+ 500: components["responses"]["InternalError"];
2102
+ 503: components["responses"]["ServiceUnavailable"];
2103
+ };
2104
+ };
2105
+ sendInboxMessage: {
2106
+ parameters: {
2107
+ query?: never;
2108
+ header: {
2109
+ /** @description Authorized rooftop context. For commands this value must match body.clientOrgId; neither value is trusted without DASH-233 resolution. */
2110
+ "x-client-org-id": components["parameters"]["ClientOrgId"];
2111
+ };
2112
+ path?: never;
2113
+ cookie?: never;
2114
+ };
2115
+ requestBody: components["requestBodies"]["SendInboxMessageCommand"];
2116
+ responses: {
2117
+ 200: components["responses"]["InboxMessageSubmitted"];
2118
+ 400: components["responses"]["BadRequest"];
2119
+ 401: components["responses"]["Unauthorized"];
2120
+ 403: components["responses"]["Forbidden"];
2121
+ 404: components["responses"]["NotFound"];
2122
+ 409: components["responses"]["Conflict"];
2123
+ 500: components["responses"]["InternalError"];
2124
+ 503: components["responses"]["ServiceUnavailable"];
2125
+ };
2126
+ };
1855
2127
  assignConversation: {
1856
2128
  parameters: {
1857
2129
  query?: never;
@@ -1921,6 +2193,52 @@ export interface operations {
1921
2193
  503: components["responses"]["ServiceUnavailable"];
1922
2194
  };
1923
2195
  };
2196
+ holdConversationPamAutoReply: {
2197
+ parameters: {
2198
+ query?: never;
2199
+ header: {
2200
+ /** @description Authorized rooftop context. For commands this value must match body.clientOrgId; neither value is trusted without DASH-233 resolution. */
2201
+ "x-client-org-id": components["parameters"]["ClientOrgId"];
2202
+ };
2203
+ path?: never;
2204
+ cookie?: never;
2205
+ };
2206
+ requestBody: components["requestBodies"]["PamAutoReplyCommand"];
2207
+ responses: {
2208
+ 200: components["responses"]["CommandApplied"];
2209
+ 400: components["responses"]["BadRequest"];
2210
+ 401: components["responses"]["Unauthorized"];
2211
+ 403: components["responses"]["Forbidden"];
2212
+ 404: components["responses"]["NotFound"];
2213
+ 409: components["responses"]["Conflict"];
2214
+ 500: components["responses"]["InternalError"];
2215
+ 501: components["responses"]["NotImplemented"];
2216
+ 503: components["responses"]["ServiceUnavailable"];
2217
+ };
2218
+ };
2219
+ resumeConversationPamAutoReply: {
2220
+ parameters: {
2221
+ query?: never;
2222
+ header: {
2223
+ /** @description Authorized rooftop context. For commands this value must match body.clientOrgId; neither value is trusted without DASH-233 resolution. */
2224
+ "x-client-org-id": components["parameters"]["ClientOrgId"];
2225
+ };
2226
+ path?: never;
2227
+ cookie?: never;
2228
+ };
2229
+ requestBody: components["requestBodies"]["PamAutoReplyCommand"];
2230
+ responses: {
2231
+ 200: components["responses"]["CommandApplied"];
2232
+ 400: components["responses"]["BadRequest"];
2233
+ 401: components["responses"]["Unauthorized"];
2234
+ 403: components["responses"]["Forbidden"];
2235
+ 404: components["responses"]["NotFound"];
2236
+ 409: components["responses"]["Conflict"];
2237
+ 500: components["responses"]["InternalError"];
2238
+ 501: components["responses"]["NotImplemented"];
2239
+ 503: components["responses"]["ServiceUnavailable"];
2240
+ };
2241
+ };
1924
2242
  setConversationReminder: {
1925
2243
  parameters: {
1926
2244
  query?: never;