@wildix/wilma-copilot-client 1.0.18 → 1.0.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/dist-cjs/WilmaCopilot.js +2 -0
  2. package/dist-cjs/auth/httpAuthSchemeProvider.js +6 -0
  3. package/dist-cjs/commands/ListSubscriptionsCommand.js +20 -0
  4. package/dist-cjs/commands/index.js +1 -0
  5. package/dist-cjs/models/enums.js +22 -7
  6. package/dist-cjs/schemas/schemas_0.js +165 -128
  7. package/dist-es/WilmaCopilot.js +2 -0
  8. package/dist-es/auth/httpAuthSchemeProvider.js +6 -0
  9. package/dist-es/commands/ListSubscriptionsCommand.js +16 -0
  10. package/dist-es/commands/index.js +1 -0
  11. package/dist-es/models/enums.js +21 -6
  12. package/dist-es/schemas/schemas_0.js +161 -124
  13. package/dist-types/WilmaCopilot.d.ts +8 -0
  14. package/dist-types/WilmaCopilotClient.d.ts +3 -2
  15. package/dist-types/commands/AttachProfileResourceCommand.d.ts +14 -10
  16. package/dist-types/commands/CreateIntentCommand.d.ts +2 -4
  17. package/dist-types/commands/CreateProfileCommand.d.ts +28 -20
  18. package/dist-types/commands/DeleteProfileResourceCommand.d.ts +14 -10
  19. package/dist-types/commands/GetIntentCommand.d.ts +1 -2
  20. package/dist-types/commands/GetProfileCommand.d.ts +14 -10
  21. package/dist-types/commands/GetProfileVersionCommand.d.ts +17 -16
  22. package/dist-types/commands/ListProfilesCommand.d.ts +16 -2
  23. package/dist-types/commands/ListSubscriptionsCommand.d.ts +106 -0
  24. package/dist-types/commands/PublishProfileVersionCommand.d.ts +17 -16
  25. package/dist-types/commands/RestoreProfileVersionToDraftCommand.d.ts +14 -10
  26. package/dist-types/commands/UpdateIntentCommand.d.ts +2 -4
  27. package/dist-types/commands/UpdateProfileCommand.d.ts +28 -20
  28. package/dist-types/commands/index.d.ts +1 -0
  29. package/dist-types/models/enums.d.ts +40 -9
  30. package/dist-types/models/models_0.d.ts +195 -79
  31. package/dist-types/schemas/schemas_0.d.ts +6 -2
  32. package/package.json +1 -1
@@ -41,7 +41,6 @@ declare const UpdateIntentCommand_base: {
41
41
  * description: "STRING_VALUE",
42
42
  * handlers: { // IntentHandlers
43
43
  * textMatch: { // IntentTextMatch
44
- * enabled: true || false, // required
45
44
  * options: [ // IntentTextMatchOptionsList
46
45
  * { // IntentTextMatchOption
47
46
  * id: "STRING_VALUE", // required
@@ -51,7 +50,6 @@ declare const UpdateIntentCommand_base: {
51
50
  * ],
52
51
  * },
53
52
  * aiMatch: { // IntentAiMatch
54
- * enabled: true || false, // required
55
53
  * instructions: "STRING_VALUE",
56
54
  * fields: [ // CopilotFieldsList
57
55
  * { // CopilotField
@@ -88,6 +86,7 @@ declare const UpdateIntentCommand_base: {
88
86
  * },
89
87
  * ],
90
88
  * },
89
+ * saidBy: "anyone" || "agent" || "customer",
91
90
  * },
92
91
  * conditions: "DOCUMENT_VALUE",
93
92
  * company: "STRING_VALUE",
@@ -102,7 +101,6 @@ declare const UpdateIntentCommand_base: {
102
101
  * // description: "STRING_VALUE",
103
102
  * // handlers: { // IntentHandlers
104
103
  * // textMatch: { // IntentTextMatch
105
- * // enabled: true || false, // required
106
104
  * // options: [ // IntentTextMatchOptionsList
107
105
  * // { // IntentTextMatchOption
108
106
  * // id: "STRING_VALUE", // required
@@ -112,7 +110,6 @@ declare const UpdateIntentCommand_base: {
112
110
  * // ],
113
111
  * // },
114
112
  * // aiMatch: { // IntentAiMatch
115
- * // enabled: true || false, // required
116
113
  * // instructions: "STRING_VALUE",
117
114
  * // fields: [ // CopilotFieldsList
118
115
  * // { // CopilotField
@@ -149,6 +146,7 @@ declare const UpdateIntentCommand_base: {
149
146
  * // },
150
147
  * // ],
151
148
  * // },
149
+ * // saidBy: "anyone" || "agent" || "customer",
152
150
  * // },
153
151
  * // conditions: "DOCUMENT_VALUE",
154
152
  * // createdAt: "STRING_VALUE", // required
@@ -39,17 +39,21 @@ declare const UpdateProfileCommand_base: {
39
39
  * const input = { // UpdateProfileInput
40
40
  * name: "STRING_VALUE", // required
41
41
  * description: "STRING_VALUE",
42
- * channel: "calls" || "chats" || "any", // required
42
+ * audience: [ // CopilotAudienceList
43
+ * { // CopilotAudienceEntry
44
+ * kind: "user" || "group" || "department" || "agent" || "queue" || "service" || "trunk", // required
45
+ * values: [ // StringList // required
46
+ * "STRING_VALUE",
47
+ * ],
48
+ * },
49
+ * ],
50
+ * stages: [ // CopilotStageList
51
+ * "before" || "during" || "after",
52
+ * ],
53
+ * channels: [ // CopilotChannelList
54
+ * "call" || "conference" || "chat",
55
+ * ],
43
56
  * conditions: "DOCUMENT_VALUE",
44
- * access: { // CopilotAccess
45
- * visibility: "explicit" || "organization",
46
- * grants: [ // CopilotGrantPrincipalList
47
- * { // CopilotGrantPrincipal Union: only one key present
48
- * userId: "STRING_VALUE",
49
- * groupId: "STRING_VALUE",
50
- * },
51
- * ],
52
- * },
53
57
  * company: "STRING_VALUE",
54
58
  * profileId: "STRING_VALUE", // required
55
59
  * revision: Number("int"), // required
@@ -60,17 +64,21 @@ declare const UpdateProfileCommand_base: {
60
64
  * // profile: { // Profile
61
65
  * // name: "STRING_VALUE", // required
62
66
  * // description: "STRING_VALUE",
63
- * // channel: "calls" || "chats" || "any", // required
67
+ * // audience: [ // CopilotAudienceList
68
+ * // { // CopilotAudienceEntry
69
+ * // kind: "user" || "group" || "department" || "agent" || "queue" || "service" || "trunk", // required
70
+ * // values: [ // StringList // required
71
+ * // "STRING_VALUE",
72
+ * // ],
73
+ * // },
74
+ * // ],
75
+ * // stages: [ // CopilotStageList
76
+ * // "before" || "during" || "after",
77
+ * // ],
78
+ * // channels: [ // CopilotChannelList
79
+ * // "call" || "conference" || "chat",
80
+ * // ],
64
81
  * // conditions: "DOCUMENT_VALUE",
65
- * // access: { // CopilotAccess
66
- * // visibility: "explicit" || "organization",
67
- * // grants: [ // CopilotGrantPrincipalList
68
- * // { // CopilotGrantPrincipal Union: only one key present
69
- * // userId: "STRING_VALUE",
70
- * // groupId: "STRING_VALUE",
71
- * // },
72
- * // ],
73
- * // },
74
82
  * // features: [ // CopilotFeaturesList
75
83
  * // { // CopilotFeature Union: only one key present
76
84
  * // csat: {},
@@ -23,6 +23,7 @@ export * from "./ListEvaluationsCommand";
23
23
  export * from "./ListIntentsCommand";
24
24
  export * from "./ListProfileVersionsCommand";
25
25
  export * from "./ListProfilesCommand";
26
+ export * from "./ListSubscriptionsCommand";
26
27
  export * from "./PublishProfileVersionCommand";
27
28
  export * from "./RestoreProfileVersionToDraftCommand";
28
29
  export * from "./UpdateAssetCommand";
@@ -153,33 +153,51 @@ export type ContextualKnowledgeSource = (typeof ContextualKnowledgeSource)[keyof
153
153
  * @public
154
154
  * @enum
155
155
  */
156
- export declare const CopilotVisibility: {
156
+ export declare const CopilotAudienceKind: {
157
157
  /**
158
- * Only the users and groups listed in `grants` are assisted by the profile.
158
+ * A Wilma AI agent handling the conversation itself, by `wildix.wilma.agents#AgentId`.
159
159
  */
160
- readonly EXPLICIT: "explicit";
160
+ readonly AGENT: "agent";
161
+ readonly DEPARTMENT: "department";
162
+ readonly GROUP: "group";
163
+ readonly QUEUE: "queue";
164
+ readonly SERVICE: "service";
165
+ readonly TRUNK: "trunk";
161
166
  /**
162
- * Everyone in the organization is assisted by the profile.
167
+ * A person, by email.
163
168
  */
164
- readonly ORGANIZATION: "organization";
169
+ readonly USER: "user";
165
170
  };
166
171
  /**
167
172
  * @public
168
173
  */
169
- export type CopilotVisibility = (typeof CopilotVisibility)[keyof typeof CopilotVisibility];
174
+ export type CopilotAudienceKind = (typeof CopilotAudienceKind)[keyof typeof CopilotAudienceKind];
170
175
  /**
171
176
  * @public
172
177
  * @enum
173
178
  */
174
179
  export declare const CopilotChannel: {
175
- readonly ANY: "any";
176
- readonly CALLS: "calls";
177
- readonly CHATS: "chats";
180
+ readonly CALL: "call";
181
+ readonly CHAT: "chat";
182
+ readonly CONFERENCE: "conference";
178
183
  };
179
184
  /**
180
185
  * @public
181
186
  */
182
187
  export type CopilotChannel = (typeof CopilotChannel)[keyof typeof CopilotChannel];
188
+ /**
189
+ * @public
190
+ * @enum
191
+ */
192
+ export declare const CopilotStage: {
193
+ readonly AFTER: "after";
194
+ readonly BEFORE: "before";
195
+ readonly DURING: "during";
196
+ };
197
+ /**
198
+ * @public
199
+ */
200
+ export type CopilotStage = (typeof CopilotStage)[keyof typeof CopilotStage];
183
201
  /**
184
202
  * @public
185
203
  * @enum
@@ -198,6 +216,19 @@ export declare const ProfileStatus: {
198
216
  * @public
199
217
  */
200
218
  export type ProfileStatus = (typeof ProfileStatus)[keyof typeof ProfileStatus];
219
+ /**
220
+ * @public
221
+ * @enum
222
+ */
223
+ export declare const CopilotSpeaker: {
224
+ readonly AGENT: "agent";
225
+ readonly ANYONE: "anyone";
226
+ readonly CUSTOMER: "customer";
227
+ };
228
+ /**
229
+ * @public
230
+ */
231
+ export type CopilotSpeaker = (typeof CopilotSpeaker)[keyof typeof CopilotSpeaker];
201
232
  /**
202
233
  * @public
203
234
  * @enum
@@ -1,5 +1,5 @@
1
1
  import type { DocumentType as __DocumentType } from "@smithy/types";
2
- import type { ActorType, AssetContentType, AssetIcon, AssetSeverity, AutomationOutputMode, ContextualKnowledgeMode, ContextualKnowledgeSource, CopilotChannel, CopilotVariableMode, CopilotVisibility, EvaluationWindow, IntentTextMatchMode, ProfileResourceType, ProfileStatus, SmartActionHandoverVariant, SmartActionResultMode } from "./enums";
2
+ import type { ActorType, AssetContentType, AssetIcon, AssetSeverity, AutomationOutputMode, ContextualKnowledgeMode, ContextualKnowledgeSource, CopilotAudienceKind, CopilotChannel, CopilotSpeaker, CopilotStage, CopilotVariableMode, EvaluationWindow, IntentTextMatchMode, ProfileResourceType, ProfileStatus, SmartActionHandoverVariant, SmartActionResultMode } from "./enums";
3
3
  /**
4
4
  * Who performed an action: an interactive user, an API key or an internal service.
5
5
  * @public
@@ -17,6 +17,39 @@ export interface Actor {
17
17
  */
18
18
  name?: string | undefined;
19
19
  }
20
+ /**
21
+ * One event type a tenant needs delivered, and the optional prefilter that narrows it.
22
+ * @public
23
+ */
24
+ export interface SubscriptionSelector {
25
+ /**
26
+ * A wda-stream event type, as the webhook envelope names it, e.g. 'call:live:progress',
27
+ * 'call:live:transcription', 'call:completed', 'call:summary:completed', 'chat:live:progress',
28
+ * 'conference:live:transcription'. Open-ended: a new wda-stream type needs no model change here.
29
+ * @public
30
+ */
31
+ event: string;
32
+ /**
33
+ * Producer-side prefilter over the event payload. Omitted means send every occurrence. See SubscriptionConditions.
34
+ * @public
35
+ */
36
+ conditions?: __DocumentType | undefined;
37
+ }
38
+ /**
39
+ * What one tenant needs delivered to the service's queue.
40
+ * @public
41
+ */
42
+ export interface Subscription {
43
+ company: string;
44
+ /**
45
+ * Event types one tenant needs, deduplicated across everything that asked for them. Two
46
+ * selectors never name the same event type: a type wanted both unconditionally and under
47
+ * conditions is returned once, unconditional — the union of what the tenant's configuration
48
+ * requires.
49
+ * @public
50
+ */
51
+ selectors: SubscriptionSelector[];
52
+ }
20
53
  /**
21
54
  * Binds an input variable of an agent or tool invocation to a value or a fill strategy.
22
55
  * @public
@@ -877,57 +910,27 @@ export interface AttachProfileResourceInput {
877
910
  resource: ProfileResource;
878
911
  }
879
912
  /**
880
- * A user or group access is granted to.
881
- * @public
882
- */
883
- export type CopilotGrantPrincipal = CopilotGrantPrincipal.GroupIdMember | CopilotGrantPrincipal.UserIdMember | CopilotGrantPrincipal.$UnknownMember;
884
- /**
913
+ * One audience entry: a kind, and the values of that kind the profile assists. An entry with no values does not narrow anything.
885
914
  * @public
886
915
  */
887
- export declare namespace CopilotGrantPrincipal {
888
- interface UserIdMember {
889
- userId: string;
890
- groupId?: never;
891
- $unknown?: never;
892
- }
893
- interface GroupIdMember {
894
- userId?: never;
895
- groupId: string;
896
- $unknown?: never;
897
- }
916
+ export interface CopilotAudienceEntry {
898
917
  /**
899
- * @public
900
- */
901
- interface $UnknownMember {
902
- userId?: never;
903
- groupId?: never;
904
- $unknown: [string, any];
905
- }
906
- /**
907
- * @deprecated unused in schema-serde mode.
918
+ * The kind of thing a profile is aimed at.
908
919
  *
909
- */
910
- interface Visitor<T> {
911
- userId: (value: string) => T;
912
- groupId: (value: string) => T;
913
- _: (name: string, value: any) => T;
914
- }
915
- }
916
- /**
917
- * Who the profile assists. There is no view/edit dimension — editing is gated by API auth scopes.
918
- * @public
919
- */
920
- export interface CopilotAccess {
921
- /**
922
- * Usage scope. Defaults to `organization`.
923
- * @public
924
- */
925
- visibility?: CopilotVisibility | undefined;
926
- /**
927
- * Users and groups assisted by the profile. Applies when visibility is `explicit`.
920
+ * Two families, and the difference decides which stages the entry can constrain.
921
+ * `user`, `group`, `department` and `agent` name **who is assisted** - a person for the first
922
+ * three, a Wilma AI agent for the last - and in the `before` stage the assisted party is
923
+ * whoever opened copilot, so they constrain every stage. `queue`, `service` and `trunk`
924
+ * describe a **live conversation**, which does not exist in `before` - so an entry of those
925
+ * kinds says nothing there.
926
+ *
927
+ * Values are the tenant's own routing objects: user emails for `user`, Wilma agent ids for
928
+ * `agent`, PBX group and department ids, queue and trunk names as `wda-stream` reports them,
929
+ * and x-bees service uris for `service`.
928
930
  * @public
929
931
  */
930
- grants?: CopilotGrantPrincipal[] | undefined;
932
+ kind: CopilotAudienceKind;
933
+ values: string[];
931
934
  }
932
935
  /**
933
936
  * The complete configuration of a profile, including draft lifecycle state. Referenced library resources are listed by id; a published version resolves them into an immutable snapshot.
@@ -937,20 +940,34 @@ export interface Profile {
937
940
  name: string;
938
941
  description?: string | undefined;
939
942
  /**
940
- * The conversation surface a copilot resource applies to. `calls` targets voice calls, `chats` targets chat conversations, `any` targets both.
943
+ * Who this profile assists - queues, groups, departments, users, AI agents, chat services
944
+ * and trunks. Empty or absent means everyone in the company. This is the profile's primary
945
+ * scope: an administrator reaches for "my refunds team", not for a conversation medium,
946
+ * and a queue already carries the medium, the skill and the line of business.
941
947
  * @public
942
948
  */
943
- channel: CopilotChannel;
949
+ audience?: CopilotAudienceEntry[] | undefined;
944
950
  /**
945
- * Conditions under which the profile matches a conversation. An empty tree always matches.
951
+ * Stages of a conversation this profile applies in. Empty or absent means every stage.
946
952
  * @public
947
953
  */
948
- conditions?: __DocumentType | undefined;
954
+ stages?: CopilotStage[] | undefined;
955
+ /**
956
+ * Conversation channels this profile applies to. Empty or absent means every channel.
957
+ *
958
+ * Only constrains the `during` and `after` stages - nothing is a call, a conference or a
959
+ * chat before it starts - so a profile whose `stages` are `before` alone applies whatever
960
+ * this says.
961
+ * @public
962
+ */
963
+ channels?: CopilotChannel[] | undefined;
949
964
  /**
950
- * Who the profile assists. Defaults to organization-wide.
965
+ * Conditions under which the profile matches a conversation. An empty tree always matches. Deprecated - see the deprecation note.
966
+ *
967
+ * @deprecated (since 2026-08) Profile conditions are resolved once, on the session's first event, so a rule over anything copilot has yet to detect never activates the profile. Use `audience` / `stages` / `channels` for what is known at that moment, and put everything conditional on the assets, intents and automations the profile carries, where conditions are re-evaluated as state changes. Still read for profiles authored before those members existed.
951
968
  * @public
952
969
  */
953
- access?: CopilotAccess | undefined;
970
+ conditions?: __DocumentType | undefined;
954
971
  /**
955
972
  * Copilot features enabled for this profile. Each list item is a typed feature and its configuration.
956
973
  * @public
@@ -1613,7 +1630,6 @@ export interface CreateEvaluationOutput {
1613
1630
  * @public
1614
1631
  */
1615
1632
  export interface IntentAiMatch {
1616
- enabled: boolean;
1617
1633
  /**
1618
1634
  * Prompt describing when this intent applies.
1619
1635
  * @public
@@ -1646,11 +1662,13 @@ export interface IntentTextMatchOption {
1646
1662
  * @public
1647
1663
  */
1648
1664
  export interface IntentTextMatch {
1649
- enabled: boolean;
1650
1665
  options?: IntentTextMatchOption[] | undefined;
1651
1666
  }
1652
1667
  /**
1653
1668
  * The detection handlers for an intent. Text matching is attempted first, then AI matching.
1669
+ *
1670
+ * An absent handler is a matcher that is off - which is what the `enabled` flag on each
1671
+ * handler used to say. An intent with neither handler set is never detected.
1654
1672
  * @public
1655
1673
  */
1656
1674
  export interface IntentHandlers {
@@ -1658,12 +1676,19 @@ export interface IntentHandlers {
1658
1676
  * Literal-text matching. Checked before AI matching; a text hit short-circuits semantic evaluation.
1659
1677
  * @public
1660
1678
  */
1661
- textMatch: IntentTextMatch;
1679
+ textMatch?: IntentTextMatch | undefined;
1662
1680
  /**
1663
1681
  * Semantic (AI) matching. Detects the intent from meaning and extracts structured fields into `intent.<name>.<field>`.
1664
1682
  * @public
1665
1683
  */
1666
- aiMatch: IntentAiMatch;
1684
+ aiMatch?: IntentAiMatch | undefined;
1685
+ /**
1686
+ * Whose lines both matchers read. Absent means `anyone`, which is how every intent
1687
+ * behaved before this member existed - matching over the whole transcript, so an intent
1688
+ * written about the customer also fires on the agent's own paraphrase of it.
1689
+ * @public
1690
+ */
1691
+ saidBy?: CopilotSpeaker | undefined;
1667
1692
  }
1668
1693
  /**
1669
1694
  * The editable definition of an intent.
@@ -1678,6 +1703,9 @@ export interface CreateIntentInput {
1678
1703
  description?: string | undefined;
1679
1704
  /**
1680
1705
  * The detection handlers for an intent. Text matching is attempted first, then AI matching.
1706
+ *
1707
+ * An absent handler is a matcher that is off - which is what the `enabled` flag on each
1708
+ * handler used to say. An intent with neither handler set is never detected.
1681
1709
  * @public
1682
1710
  */
1683
1711
  handlers: IntentHandlers;
@@ -1701,6 +1729,9 @@ export interface Intent {
1701
1729
  description?: string | undefined;
1702
1730
  /**
1703
1731
  * The detection handlers for an intent. Text matching is attempted first, then AI matching.
1732
+ *
1733
+ * An absent handler is a matcher that is off - which is what the `enabled` flag on each
1734
+ * handler used to say. An intent with neither handler set is never detected.
1704
1735
  * @public
1705
1736
  */
1706
1737
  handlers: IntentHandlers;
@@ -1754,20 +1785,34 @@ export interface CreateProfileInput {
1754
1785
  name: string;
1755
1786
  description?: string | undefined;
1756
1787
  /**
1757
- * The conversation surface a copilot resource applies to. `calls` targets voice calls, `chats` targets chat conversations, `any` targets both.
1788
+ * Who this profile assists - queues, groups, departments, users, AI agents, chat services
1789
+ * and trunks. Empty or absent means everyone in the company. This is the profile's primary
1790
+ * scope: an administrator reaches for "my refunds team", not for a conversation medium,
1791
+ * and a queue already carries the medium, the skill and the line of business.
1758
1792
  * @public
1759
1793
  */
1760
- channel: CopilotChannel;
1794
+ audience?: CopilotAudienceEntry[] | undefined;
1761
1795
  /**
1762
- * Conditions under which the profile matches a conversation. An empty tree always matches.
1796
+ * Stages of a conversation this profile applies in. Empty or absent means every stage.
1763
1797
  * @public
1764
1798
  */
1765
- conditions?: __DocumentType | undefined;
1799
+ stages?: CopilotStage[] | undefined;
1766
1800
  /**
1767
- * Who the profile assists. Defaults to organization-wide.
1801
+ * Conversation channels this profile applies to. Empty or absent means every channel.
1802
+ *
1803
+ * Only constrains the `during` and `after` stages - nothing is a call, a conference or a
1804
+ * chat before it starts - so a profile whose `stages` are `before` alone applies whatever
1805
+ * this says.
1768
1806
  * @public
1769
1807
  */
1770
- access?: CopilotAccess | undefined;
1808
+ channels?: CopilotChannel[] | undefined;
1809
+ /**
1810
+ * Conditions under which the profile matches a conversation. An empty tree always matches. Deprecated - see the deprecation note.
1811
+ *
1812
+ * @deprecated (since 2026-08) Profile conditions are resolved once, on the session's first event, so a rule over anything copilot has yet to detect never activates the profile. Use `audience` / `stages` / `channels` for what is known at that moment, and put everything conditional on the assets, intents and automations the profile carries, where conditions are re-evaluated as state changes. Still read for profiles authored before those members existed.
1813
+ * @public
1814
+ */
1815
+ conditions?: __DocumentType | undefined;
1771
1816
  /**
1772
1817
  * Copilot features enabled for this profile. Each list item is a typed feature and its configuration.
1773
1818
  * @public
@@ -2108,6 +2153,9 @@ export interface IntentSnapshot {
2108
2153
  description?: string | undefined;
2109
2154
  /**
2110
2155
  * The detection handlers for an intent. Text matching is attempted first, then AI matching.
2156
+ *
2157
+ * An absent handler is a matcher that is off - which is what the `enabled` flag on each
2158
+ * handler used to say. An intent with neither handler set is never detected.
2111
2159
  * @public
2112
2160
  */
2113
2161
  handlers: IntentHandlers;
@@ -2126,20 +2174,34 @@ export interface ProfileDefinitionSnapshot {
2126
2174
  name: string;
2127
2175
  description?: string | undefined;
2128
2176
  /**
2129
- * The conversation surface a copilot resource applies to. `calls` targets voice calls, `chats` targets chat conversations, `any` targets both.
2177
+ * Who this profile assists - queues, groups, departments, users, AI agents, chat services
2178
+ * and trunks. Empty or absent means everyone in the company. This is the profile's primary
2179
+ * scope: an administrator reaches for "my refunds team", not for a conversation medium,
2180
+ * and a queue already carries the medium, the skill and the line of business.
2130
2181
  * @public
2131
2182
  */
2132
- channel: CopilotChannel;
2183
+ audience?: CopilotAudienceEntry[] | undefined;
2133
2184
  /**
2134
- * Conditions under which the profile matches a conversation. An empty tree always matches.
2185
+ * Stages of a conversation this profile applies in. Empty or absent means every stage.
2135
2186
  * @public
2136
2187
  */
2137
- conditions?: __DocumentType | undefined;
2188
+ stages?: CopilotStage[] | undefined;
2189
+ /**
2190
+ * Conversation channels this profile applies to. Empty or absent means every channel.
2191
+ *
2192
+ * Only constrains the `during` and `after` stages - nothing is a call, a conference or a
2193
+ * chat before it starts - so a profile whose `stages` are `before` alone applies whatever
2194
+ * this says.
2195
+ * @public
2196
+ */
2197
+ channels?: CopilotChannel[] | undefined;
2138
2198
  /**
2139
- * Who the profile assists. Defaults to organization-wide.
2199
+ * Conditions under which the profile matches a conversation. An empty tree always matches. Deprecated - see the deprecation note.
2200
+ *
2201
+ * @deprecated (since 2026-08) Profile conditions are resolved once, on the session's first event, so a rule over anything copilot has yet to detect never activates the profile. Use `audience` / `stages` / `channels` for what is known at that moment, and put everything conditional on the assets, intents and automations the profile carries, where conditions are re-evaluated as state changes. Still read for profiles authored before those members existed.
2140
2202
  * @public
2141
2203
  */
2142
- access?: CopilotAccess | undefined;
2204
+ conditions?: __DocumentType | undefined;
2143
2205
  /**
2144
2206
  * Copilot features enabled for this profile at publish time, including their type-specific configuration.
2145
2207
  * @public
@@ -2241,12 +2303,12 @@ export interface IntentInfo {
2241
2303
  name: string;
2242
2304
  description?: string | undefined;
2243
2305
  /**
2244
- * Whether literal text matching is enabled.
2306
+ * Whether literal text matching is enabled, i.e. whether `handlers.textMatch` is set.
2245
2307
  * @public
2246
2308
  */
2247
2309
  textMatchEnabled: boolean;
2248
2310
  /**
2249
- * Whether semantic AI matching is enabled.
2311
+ * Whether semantic AI matching is enabled, i.e. whether `handlers.aiMatch` is set.
2250
2312
  * @public
2251
2313
  */
2252
2314
  aiMatchEnabled: boolean;
@@ -2389,10 +2451,15 @@ export interface ListProfilesInput {
2389
2451
  */
2390
2452
  status?: ProfileStatus | undefined;
2391
2453
  /**
2392
- * Filter by the conversation surface the profile applies to.
2454
+ * Filter by a conversation channel the profile applies to. A profile with no channels applies to every one, so it matches whatever is asked for here.
2393
2455
  * @public
2394
2456
  */
2395
2457
  channel?: CopilotChannel | undefined;
2458
+ /**
2459
+ * Filter by a stage the profile applies in. A profile with no stages applies in every one, so it matches whatever is asked for here.
2460
+ * @public
2461
+ */
2462
+ stage?: CopilotStage | undefined;
2396
2463
  /**
2397
2464
  * Filter by name or description.
2398
2465
  * @public
@@ -2434,10 +2501,24 @@ export interface ProfileInfo {
2434
2501
  name: string;
2435
2502
  description?: string | undefined;
2436
2503
  /**
2437
- * The conversation surface a copilot resource applies to. `calls` targets voice calls, `chats` targets chat conversations, `any` targets both.
2504
+ * The profile's targeting, so a list row can say what it applies to without reading the definition.
2438
2505
  * @public
2439
2506
  */
2440
- channel: CopilotChannel;
2507
+ audience?: CopilotAudienceEntry[] | undefined;
2508
+ /**
2509
+ * Stages a resource applies in. An empty or absent list means every stage.
2510
+ * @public
2511
+ */
2512
+ stages?: CopilotStage[] | undefined;
2513
+ /**
2514
+ * Conversation channels a resource applies to. An empty or absent list means every channel.
2515
+ *
2516
+ * A channel filter only constrains the `during` and `after` stages: in `before` there is
2517
+ * nothing to be a call, a conference or a chat, so a resource covering only `before` applies
2518
+ * whatever this list says.
2519
+ * @public
2520
+ */
2521
+ channels?: CopilotChannel[] | undefined;
2441
2522
  status: ProfileStatus;
2442
2523
  live: boolean;
2443
2524
  /**
@@ -2533,6 +2614,24 @@ export interface ListProfileVersionsOutput {
2533
2614
  */
2534
2615
  nextCursor?: string | undefined;
2535
2616
  }
2617
+ /**
2618
+ * @public
2619
+ */
2620
+ export interface ListSubscriptionsInput {
2621
+ }
2622
+ /**
2623
+ * The answer to 'what should I send you': one entry per tenant that needs anything at all, and
2624
+ * every tenant in one response — the producer holds a single routing table, and a listing it has
2625
+ * to assemble from several requests is one that can be applied half-built, which is
2626
+ * indistinguishable from a set of tenants that unsubscribed.
2627
+ *
2628
+ * A tenant absent from the listing needs nothing, and the producer sends it nothing. Ordering is
2629
+ * unspecified.
2630
+ * @public
2631
+ */
2632
+ export interface ListSubscriptionsOutput {
2633
+ subscriptions: Subscription[];
2634
+ }
2536
2635
  /**
2537
2636
  * @public
2538
2637
  */
@@ -2766,6 +2865,9 @@ export interface UpdateIntentInput {
2766
2865
  description?: string | undefined;
2767
2866
  /**
2768
2867
  * The detection handlers for an intent. Text matching is attempted first, then AI matching.
2868
+ *
2869
+ * An absent handler is a matcher that is off - which is what the `enabled` flag on each
2870
+ * handler used to say. An intent with neither handler set is never detected.
2769
2871
  * @public
2770
2872
  */
2771
2873
  handlers: IntentHandlers;
@@ -2800,20 +2902,34 @@ export interface UpdateProfileInput {
2800
2902
  name: string;
2801
2903
  description?: string | undefined;
2802
2904
  /**
2803
- * The conversation surface a copilot resource applies to. `calls` targets voice calls, `chats` targets chat conversations, `any` targets both.
2905
+ * Who this profile assists - queues, groups, departments, users, AI agents, chat services
2906
+ * and trunks. Empty or absent means everyone in the company. This is the profile's primary
2907
+ * scope: an administrator reaches for "my refunds team", not for a conversation medium,
2908
+ * and a queue already carries the medium, the skill and the line of business.
2804
2909
  * @public
2805
2910
  */
2806
- channel: CopilotChannel;
2911
+ audience?: CopilotAudienceEntry[] | undefined;
2807
2912
  /**
2808
- * Conditions under which the profile matches a conversation. An empty tree always matches.
2913
+ * Stages of a conversation this profile applies in. Empty or absent means every stage.
2809
2914
  * @public
2810
2915
  */
2811
- conditions?: __DocumentType | undefined;
2916
+ stages?: CopilotStage[] | undefined;
2812
2917
  /**
2813
- * Who the profile assists. Defaults to organization-wide.
2918
+ * Conversation channels this profile applies to. Empty or absent means every channel.
2919
+ *
2920
+ * Only constrains the `during` and `after` stages - nothing is a call, a conference or a
2921
+ * chat before it starts - so a profile whose `stages` are `before` alone applies whatever
2922
+ * this says.
2923
+ * @public
2924
+ */
2925
+ channels?: CopilotChannel[] | undefined;
2926
+ /**
2927
+ * Conditions under which the profile matches a conversation. An empty tree always matches. Deprecated - see the deprecation note.
2928
+ *
2929
+ * @deprecated (since 2026-08) Profile conditions are resolved once, on the session's first event, so a rule over anything copilot has yet to detect never activates the profile. Use `audience` / `stages` / `channels` for what is known at that moment, and put everything conditional on the assets, intents and automations the profile carries, where conditions are re-evaluated as state changes. Still read for profiles authored before those members existed.
2814
2930
  * @public
2815
2931
  */
2816
- access?: CopilotAccess | undefined;
2932
+ conditions?: __DocumentType | undefined;
2817
2933
  company?: string | undefined;
2818
2934
  profileId: string;
2819
2935
  /**