@pam-ai/pam-ordo-contracts 3.49.0 → 3.51.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.
@@ -1241,7 +1241,7 @@ export interface components {
1241
1241
  };
1242
1242
  /** @enum {string} */
1243
1243
  RealtimeQueryAreaV1: "inbox" | "conversation" | "customer_notes" | "notifications";
1244
- /** @description Refetch instruction, never canonical state. eventId deduplicates repeated delivery. aggregateVersion is only a hint for the named aggregate and must not suppress independent comment, note, label, or recipient changes. A scope-only invalidation deliberately omits Conversation and aggregate identity, including when a formerly visible Conversation is no longer authorized. Notification areas are recipient-only. No source payloads, message bodies, Customer information, or subscription credentials belong in this frame. */
1244
+ /** @description Refetch instruction, never canonical state. eventId deduplicates repeated delivery. aggregateVersion is only a hint for the named aggregate and must not suppress independent comment, note, label, or recipient changes. A scope-only invalidation deliberately omits Conversation and aggregate identity, including when a formerly visible Conversation is no longer authorized. Notification areas are recipient-only. No source payloads, message bodies, Customer information, or subscription credentials belong in this frame. A notification frame may carry the recipient's unread total after the change (unreadCount), the version that total was read at (unreadVersion), and what kind of change it was (notificationChange), so the badge and tab title can move without a request. They are hints; the notification list stays authoritative. */
1245
1245
  RealtimeInvalidationV1: {
1246
1246
  /** @constant */
1247
1247
  schemaVersion: 1;
@@ -1253,6 +1253,15 @@ export interface components {
1253
1253
  areas: components["schemas"]["RealtimeQueryAreaV1"][];
1254
1254
  /** Format: uuid */
1255
1255
  conversationId?: string;
1256
+ /** @description Recipient's visible unread notification total after this change, as NotificationListResponse.unreadCount would report it. Only present when areas includes notifications. Older clients ignore it. */
1257
+ unreadCount?: number;
1258
+ /** @description The recipient's notification state version unreadCount was read at. It only grows. Frames can arrive out of order, so a client keeps the count with the highest version it has seen, from frames and from NotificationListResponse.meta.unreadVersion alike, and ignores an older one. A snoozed notification waking changes the count without a new version, so two counts at one version can disagree; neither is known to be newer, and a client re-reads the list. */
1259
+ unreadVersion?: number;
1260
+ /**
1261
+ * @description What changed for the recipient. created means at least one new notification row exists, which a client cannot tell from the total alone (a read and a new notification together leave it unchanged). Only present when areas includes notifications.
1262
+ * @enum {string}
1263
+ */
1264
+ notificationChange?: "created" | "read" | "dismissed" | "snoozed";
1256
1265
  aggregate?: {
1257
1266
  /** @enum {string} */
1258
1267
  type: "conversation" | "work_cycle" | "attention_cycle" | "notification" | "customer_note";
@@ -1710,6 +1719,36 @@ export interface components {
1710
1719
  medianMinutes: number | null;
1711
1720
  sampleCount: number;
1712
1721
  };
1722
+ /** @description Customer-facing outbound events sent by a human user in [from,to), attributed to the actual sender. Excludes Pam, system, internal and producer-marked automated interactions. Voicemail is separate and must not be added to calls without an explicit display definition. Counts use the existing Team scope. */
1723
+ ReportingHumanOutboundByKind: {
1724
+ call: number;
1725
+ sms: number;
1726
+ voicemail: number;
1727
+ };
1728
+ ReportingHistoryOwner: {
1729
+ userId: string;
1730
+ distinctConversationsHeld: number;
1731
+ };
1732
+ /** @description Earliest persisted overlapping assignment in the authorized population is observation evidence, never a completeness watermark. Current storage cannot certify historical ingestion or historical roster membership. */
1733
+ ReportingHistoryCoverage: {
1734
+ /** @enum {string} */
1735
+ status: "unverified";
1736
+ earliestAssignmentAt: string | null;
1737
+ /** @enum {string} */
1738
+ reason: "historical_coverage_unverified";
1739
+ };
1740
+ /** @description Distinct Conversations with a positive-duration assignment interval intersecting [from,to) and its WorkCycle lifetime. Owners are intersected with the current authorized roster (not a reconstructed historical roster). Unassigned work is excluded. Team total deduplicates across owners and WorkCycles; owner totals deduplicate within each owner, so their sum can exceed the team total. Counts describe persisted evidence only. Consumers must not present an exact historical total when complete is false. No current-owner proxy is used. */
1741
+ ReportingHistory: {
1742
+ distinctConversationsHeld: number;
1743
+ byOwner: components["schemas"]["ReportingHistoryOwner"][];
1744
+ /** @enum {string} */
1745
+ definitionVersion: "assignment-overlap-current-roster-v1";
1746
+ /** @enum {boolean} */
1747
+ complete: false;
1748
+ coverage: components["schemas"]["ReportingHistoryCoverage"];
1749
+ /** @description False when the 500-owner response bound omitted owner rows; the team total is not truncated. */
1750
+ ownersComplete?: boolean;
1751
+ };
1713
1752
  /** @description One person's line in the Reporting table. Listed when they own open work in scope now, or sent customer-facing outbound in the window. Queue fields are right now; outbound and reply are the window's. */
1714
1753
  ReportingOwnerRollup: {
1715
1754
  userId: string;
@@ -1721,12 +1760,14 @@ export interface components {
1721
1760
  /** @description Customer-facing outbound this person sent in the window. */
1722
1761
  outbound: number;
1723
1762
  reply: components["schemas"]["ReportingReplyStats"];
1763
+ humanOutboundByKind?: components["schemas"]["ReportingHumanOutboundByKind"];
1724
1764
  };
1725
1765
  /** @description Customer-facing outbound in the window - calls and texts, never internal notes or system interactions - and reply time across everyone who answered. */
1726
1766
  ReportingMessageMetrics: {
1727
1767
  outbound: number;
1728
1768
  outboundByPam: number;
1729
1769
  reply: components["schemas"]["ReportingReplyStats"];
1770
+ humanOutboundByKind?: components["schemas"]["ReportingHumanOutboundByKind"];
1730
1771
  };
1731
1772
  ReportingSummary: {
1732
1773
  clientOrgId: string;
@@ -1739,6 +1780,11 @@ export interface components {
1739
1780
  live?: components["schemas"]["ReportingQueueCounts"];
1740
1781
  owners?: components["schemas"]["ReportingOwnerRollup"][];
1741
1782
  messages?: components["schemas"]["ReportingMessageMetrics"];
1783
+ history?: components["schemas"]["ReportingHistory"];
1784
+ /** @description Requested sections whose source query failed. They are omitted, never zero-filled; independently successful sections remain available. */
1785
+ unavailableSections?: ("LIVE" | "OWNERS" | "MESSAGES" | "HISTORY")[];
1786
+ /** @description False when the 500-owner response bound omitted owner rows. Missing on older producers; do not assume completeness. */
1787
+ ownersComplete?: boolean;
1742
1788
  };
1743
1789
  ReportingSummaryResponse: {
1744
1790
  data: components["schemas"]["ReportingSummary"];
@@ -2161,6 +2207,8 @@ export interface components {
2161
2207
  meta: {
2162
2208
  /** @description Opaque keyset cursor. */
2163
2209
  nextCursor: string | null;
2210
+ /** @description The recipient's notification state version unreadCount was read at; the same clock as RealtimeInvalidationV1.unreadVersion. */
2211
+ unreadVersion?: number;
2164
2212
  };
2165
2213
  };
2166
2214
  BulkHydrationReferenceV1: {
@@ -3699,8 +3747,8 @@ export interface operations {
3699
3747
  teamId?: components["parameters"]["ReportingTeamId"];
3700
3748
  /** @description Same meaning as departments on GET /v1/inbox/conversations with scope TEAM_INBOX, including the attribution of unassigned work to BDC. A service manager's page sends SERVICE. */
3701
3749
  departments?: components["parameters"]["ReportingDepartments"];
3702
- /** @description Sections to compute. Absent computes all three. */
3703
- include?: ("LIVE" | "OWNERS" | "MESSAGES")[];
3750
+ /** @description Sections to compute. Absent computes LIVE, OWNERS and MESSAGES. HISTORY is opt-in. */
3751
+ include?: ("LIVE" | "OWNERS" | "MESSAGES" | "HISTORY")[];
3704
3752
  };
3705
3753
  header: {
3706
3754
  /** @description Authorized rooftop context. For commands this value must match body.clientOrgId; neither value is trusted without DASH-233 resolution. */
@@ -4119,6 +4167,8 @@ export interface operations {
4119
4167
  header: {
4120
4168
  /** @description Authorized rooftop context. For commands this value must match body.clientOrgId; neither value is trusted without DASH-233 resolution. */
4121
4169
  "x-client-org-id": components["parameters"]["ClientOrgId"];
4170
+ /** @description The ETag of a page this client already holds. When nothing that page depends on can have changed, the response is 304 with no body. */
4171
+ "If-None-Match"?: string;
4122
4172
  };
4123
4173
  path?: never;
4124
4174
  cookie?: never;
@@ -4129,12 +4179,26 @@ export interface operations {
4129
4179
  200: {
4130
4180
  headers: {
4131
4181
  "x-correlation-id": components["headers"]["CorrelationId"];
4182
+ /** @description Weak validator for this page, scoped to the viewer, rooftop, cursor, and limit. Opaque; clients must not parse it. */
4183
+ ETag?: string;
4184
+ /** @description Private to the viewer and revalidated on every use. */
4185
+ "Cache-Control"?: "private, no-cache";
4132
4186
  [name: string]: unknown;
4133
4187
  };
4134
4188
  content: {
4135
4189
  "application/json": components["schemas"]["NotificationListResponse"];
4136
4190
  };
4137
4191
  };
4192
+ /** @description The page named by If-None-Match is still current. No body; reuse the held page. */
4193
+ 304: {
4194
+ headers: {
4195
+ "x-correlation-id": components["headers"]["CorrelationId"];
4196
+ /** @description The same validator the request sent. */
4197
+ ETag?: string;
4198
+ [name: string]: unknown;
4199
+ };
4200
+ content?: never;
4201
+ };
4138
4202
  400: components["responses"]["BadRequest"];
4139
4203
  401: components["responses"]["Unauthorized"];
4140
4204
  403: components["responses"]["Forbidden"];