@gravity-rail/sdk 0.16.0 → 0.17.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.
Files changed (36) hide show
  1. package/dist/{chunk-4B7T6MBH.js → chunk-CEFOCGYO.js} +300 -64
  2. package/dist/chunk-CEFOCGYO.js.map +1 -0
  3. package/dist/{chunk-GP6ICMWF.js → chunk-PJFEGUHM.js} +8 -1
  4. package/dist/chunk-PJFEGUHM.js.map +1 -0
  5. package/dist/{client-3xYGmF3t.d.ts → client-8xakCsVs.d.cts} +1030 -179
  6. package/dist/{client-BhO_UFFz.d.cts → client-ASnNEN1U.d.ts} +1030 -179
  7. package/dist/helpers.cjs +7 -0
  8. package/dist/helpers.cjs.map +1 -1
  9. package/dist/helpers.d.cts +2 -2
  10. package/dist/helpers.d.ts +2 -2
  11. package/dist/helpers.js +1 -1
  12. package/dist/index.cjs +354 -61
  13. package/dist/index.cjs.map +1 -1
  14. package/dist/index.d.cts +23 -5
  15. package/dist/index.d.ts +23 -5
  16. package/dist/index.js +73 -2
  17. package/dist/index.js.map +1 -1
  18. package/dist/internal.cjs +360 -63
  19. package/dist/internal.cjs.map +1 -1
  20. package/dist/internal.d.cts +33 -7
  21. package/dist/internal.d.ts +33 -7
  22. package/dist/internal.js +61 -4
  23. package/dist/internal.js.map +1 -1
  24. package/dist/{revision-state-Dx8gCQIj.d.cts → revision-state-BDsQo_xD.d.cts} +2 -2
  25. package/dist/{revision-state-Dma10N9s.d.ts → revision-state-Cz3mcUHc.d.ts} +2 -2
  26. package/dist/schemas.cjs +170 -216
  27. package/dist/schemas.cjs.map +1 -1
  28. package/dist/schemas.d.cts +2 -2
  29. package/dist/schemas.d.ts +2 -2
  30. package/dist/schemas.js +170 -209
  31. package/dist/schemas.js.map +1 -1
  32. package/dist/{tasks-vupYoJgG.d.cts → tasks-Z4GcIqgO.d.cts} +190 -73
  33. package/dist/{tasks-vupYoJgG.d.ts → tasks-Z4GcIqgO.d.ts} +190 -73
  34. package/package.json +2 -2
  35. package/dist/chunk-4B7T6MBH.js.map +0 -1
  36. package/dist/chunk-GP6ICMWF.js.map +0 -1
package/dist/index.cjs CHANGED
@@ -88,6 +88,7 @@ __export(src_exports, {
88
88
  MemberType: () => MemberType,
89
89
  MenuItemResponseItemType: () => MenuItemResponseItemType,
90
90
  MenuItemType: () => MenuItemResponseItemType,
91
+ MergeMemberRolesRequestAccessStrategy: () => MergeMemberRolesRequestAccessStrategy,
91
92
  ModelProvider: () => ModelProvider,
92
93
  ModelType: () => ModelType,
93
94
  NO_ASSISTANT_PARTICIPANT_CHAT_TYPES: () => NO_ASSISTANT_PARTICIPANT_CHAT_TYPES,
@@ -151,11 +152,14 @@ __export(src_exports, {
151
152
  WorkflowAccessWarningResourceType: () => WorkflowAccessWarningResourceType,
152
153
  WorkflowBuilder: () => WorkflowBuilder,
153
154
  WorkflowResourceType: () => WorkflowAccessWarningResourceType,
155
+ WorkflowRoutingMode: () => WorkflowRoutingMode,
154
156
  WorkspaceBuilder: () => WorkspaceBuilder,
155
157
  WorkspaceBuilderResource: () => WorkspaceBuilderResource,
156
158
  WorkspaceFeature: () => WorkspaceFeature,
157
159
  WorkspaceProvisionStatus: () => WorkspaceProvisionStatus,
160
+ archivedMemberConflictId: () => archivedMemberConflictId,
158
161
  areDependenciesSatisfied: () => areDependenciesSatisfied,
162
+ asIdentifiedMemberContactConflict: () => asIdentifiedMemberContactConflict,
159
163
  canPreviewVoice: () => canPreviewVoice,
160
164
  clearRegistry: () => clearRegistry,
161
165
  createWorkspaceClient: () => createWorkspaceClient,
@@ -179,9 +183,12 @@ __export(src_exports, {
179
183
  getTTSProvider: () => getTTSProvider,
180
184
  getVoiceModelId: () => getVoiceModelId,
181
185
  initializeFeatures: () => initializeFeatures,
186
+ isAccountContactConflict: () => isAccountContactConflict,
182
187
  isAgentNoteOrigin: () => isAgentNoteOrigin,
183
188
  isChatType: () => isChatType,
184
189
  isFeatureAvailable: () => isFeatureAvailable,
190
+ isIdentifiedMemberContactConflict: () => isIdentifiedMemberContactConflict,
191
+ isMemberContactConflict: () => isMemberContactConflict,
185
192
  isPositiveRating: () => isPositiveRating,
186
193
  isRegistryInitialized: () => isRegistryInitialized,
187
194
  isSMSDeliveryFailureStatus: () => isSMSDeliveryFailureStatus,
@@ -226,6 +233,13 @@ var ApiError = class extends Error {
226
233
  * Populated when the backend returns a WorkflowValidationErrorResponse.
227
234
  */
228
235
  validationErrors;
236
+ /**
237
+ * The raw structured `detail` object when the backend returned one (a body
238
+ * with `error: true` or a `code`). Declared here rather than bolted on with
239
+ * `as any` at the throw site so consumers can narrow it with a type guard —
240
+ * see `isMemberContactConflict` in `types/member-types`.
241
+ */
242
+ errorData;
229
243
  constructor(message, statusCode, errors, validationErrors) {
230
244
  super(message);
231
245
  this.statusCode = statusCode;
@@ -2067,7 +2081,7 @@ var ChatsApi = class extends BaseApiClient {
2067
2081
  `w/${wid}/chats/${chatId}/skills`
2068
2082
  );
2069
2083
  }
2070
- /** List built-in skills that can be selected before starting a Manager Chat. */
2084
+ /** List built-in skills selectable before a Manager Chat (and on Routine manager tasks). */
2071
2085
  async getManagerSkills(wid) {
2072
2086
  return this.fetch(`w/${wid}/chats/manager/skills`);
2073
2087
  }
@@ -2580,6 +2594,32 @@ var DashboardsApi = class extends BaseApiClient {
2580
2594
  `w/${wid}/dashboards/stats/workflow-assignments`
2581
2595
  );
2582
2596
  }
2597
+ /**
2598
+ * Current saved-configuration health across every family (Workflow
2599
+ * configuration, Journey authoring, Workflow access, Routine → Workflow
2600
+ * access, and the workspace lint).
2601
+ *
2602
+ * Requires ALL of `workflows:read`, `journeys:read`, `automations:read`,
2603
+ * `datatypes:read`, `members:read`, and `member_roles:read` — a pruned
2604
+ * subset would render as "all configuration is healthy".
2605
+ *
2606
+ * `page`/`pageSize` bound the response only; every family is evaluated in
2607
+ * full before the issue list is sliced. `check`/`severity` narrow the issue
2608
+ * list server-side, before pagination — filtering a single page in the
2609
+ * client cannot find a match that lives on a later one. `summary` and
2610
+ * `checks` are always workspace-global.
2611
+ */
2612
+ async getConfigurationHealth(wid, options) {
2613
+ const params = new URLSearchParams();
2614
+ if (options?.page !== void 0) params.append("page", options.page.toString());
2615
+ if (options?.pageSize !== void 0) params.append("pageSize", options.pageSize.toString());
2616
+ if (options?.check !== void 0) params.append("check", options.check);
2617
+ if (options?.severity !== void 0) params.append("severity", options.severity);
2618
+ const query = params.toString();
2619
+ return this.fetch(
2620
+ `w/${wid}/configuration-health${query ? `?${query}` : ""}`
2621
+ );
2622
+ }
2583
2623
  };
2584
2624
 
2585
2625
  // src/api/data-types.ts
@@ -4774,12 +4814,34 @@ var MembersApi = class extends BaseApiClient {
4774
4814
  body: JSON.stringify(memberRole)
4775
4815
  });
4776
4816
  }
4777
- /** Delete a member role. */
4817
+ /** Delete a member role. Default roles (``systemKey`` set) return 403. */
4778
4818
  async deleteMemberRole(wid, id) {
4779
4819
  return this.fetch(`w/${wid}/member-roles/${id}`, {
4780
4820
  method: "DELETE"
4781
4821
  });
4782
4822
  }
4823
+ /**
4824
+ * Describe legacy duplicate default roles in this workspace. Read-only.
4825
+ *
4826
+ * Workspaces seeded by older versions of the product can carry the same
4827
+ * default role under several spellings ("manager" next to "Manager"). This
4828
+ * reports which ones should be merged and exactly how many members and
4829
+ * references each merge would move.
4830
+ */
4831
+ async getMemberRoleCleanupPlan(wid) {
4832
+ return this.fetch(`w/${wid}/member-roles/cleanup-plan`);
4833
+ }
4834
+ /**
4835
+ * Move every member and reference from one role to another, then delete the
4836
+ * source role. Requires `member_roles:admin`. The source cannot be a default
4837
+ * role.
4838
+ */
4839
+ async mergeMemberRoles(wid, request) {
4840
+ return this.fetch(`w/${wid}/member-roles/cleanup/merge`, {
4841
+ method: "POST",
4842
+ body: JSON.stringify(request)
4843
+ });
4844
+ }
4783
4845
  // Import/Export Members API
4784
4846
  /**
4785
4847
  * Read-only preview classifying each CSV row before any write (GRA-5545).
@@ -5082,46 +5144,6 @@ var MembersApi = class extends BaseApiClient {
5082
5144
  }
5083
5145
  };
5084
5146
 
5085
- // src/api/milestones.ts
5086
- var MilestonesApi = class extends BaseApiClient {
5087
- /** List milestones in a workspace with optional pagination and sorting. */
5088
- async getMilestones(wid, options = {}) {
5089
- const params = new URLSearchParams();
5090
- if (options.page) params.append("page", options.page.toString());
5091
- if (options.pageSize) params.append("pageSize", options.pageSize.toString());
5092
- if (options.sortBy) params.append("sortBy", options.sortBy);
5093
- if (options.sortOrder) params.append("sortOrder", options.sortOrder);
5094
- if (options.search) params.append("search", options.search);
5095
- return this.fetch(
5096
- `w/${wid}/milestones${params.toString() ? `?${params.toString()}` : ""}`
5097
- );
5098
- }
5099
- /** Get a single milestone by ID. */
5100
- async getMilestone(wid, id) {
5101
- return this.fetch(`w/${wid}/milestones/${id}`);
5102
- }
5103
- /** Create a new milestone in a workspace. */
5104
- async createMilestone(wid, milestone) {
5105
- return this.fetch(`w/${wid}/milestones`, {
5106
- method: "POST",
5107
- body: JSON.stringify(milestone)
5108
- });
5109
- }
5110
- /** Update an existing milestone with partial data. */
5111
- async updateMilestone(wid, id, milestone) {
5112
- return this.fetch(`w/${wid}/milestones/${id}`, {
5113
- method: "PUT",
5114
- body: JSON.stringify(milestone)
5115
- });
5116
- }
5117
- /** Delete a milestone by ID. */
5118
- async deleteMilestone(wid, id) {
5119
- return this.fetch(`w/${wid}/milestones/${id}`, {
5120
- method: "DELETE"
5121
- });
5122
- }
5123
- };
5124
-
5125
5147
  // src/api/motd.ts
5126
5148
  var MotdApi = class extends BaseApiClient {
5127
5149
  /**
@@ -5307,6 +5329,23 @@ var MondayIntegrationApi = class extends BaseApiClient {
5307
5329
  }
5308
5330
  };
5309
5331
 
5332
+ // src/api/intervention-requests.ts
5333
+ var InterventionRequestsApi = class extends BaseApiClient {
5334
+ /** List intervention requests in a workspace, newest first. */
5335
+ async getInterventionRequests(wid, params = {}) {
5336
+ const query = new URLSearchParams();
5337
+ if (params.kind) query.set("kind", params.kind);
5338
+ if (params.openOnly) query.set("openOnly", "true");
5339
+ if (params.chatId !== void 0) query.set("chatId", String(params.chatId));
5340
+ if (params.unroutedOnly) query.set("unroutedOnly", "true");
5341
+ if (params.limit !== void 0) query.set("limit", String(params.limit));
5342
+ const qs = query.toString();
5343
+ return this.fetch(
5344
+ `w/${wid}/intervention-requests${qs ? `?${qs}` : ""}`
5345
+ );
5346
+ }
5347
+ };
5348
+
5310
5349
  // src/api/notification-rules.ts
5311
5350
  var NotificationRulesApi = class extends BaseApiClient {
5312
5351
  /** List all notification rules in a workspace. */
@@ -5430,6 +5469,41 @@ var OrgApi = class extends BaseApiClient {
5430
5469
  async getCurrentOrgMember(orgIdOrUuid) {
5431
5470
  return this.fetch(`o/${orgIdOrUuid}/me`);
5432
5471
  }
5472
+ /**
5473
+ * Update the settings an org admin owns: name, slug and contact details.
5474
+ *
5475
+ * Deliberately NOT the admin organization update — `primary` and
5476
+ * `enforceCreditLimit` are superuser-only and are not fields on this
5477
+ * endpoint's request model at all.
5478
+ */
5479
+ async updateOrganizationSettings(orgIdOrUuid, data) {
5480
+ return this.fetch(`o/${orgIdOrUuid}`, {
5481
+ method: "PATCH",
5482
+ body: JSON.stringify(data)
5483
+ });
5484
+ }
5485
+ /**
5486
+ * Read this organization's SSO configuration.
5487
+ *
5488
+ * Org-scoped (`org:admin`), unlike the SSO fields on the superuser admin
5489
+ * organization update — an org admin owns their own identity provider.
5490
+ */
5491
+ async getOrgSsoConfig(orgIdOrUuid) {
5492
+ return this.fetch(`o/${orgIdOrUuid}/sso`);
5493
+ }
5494
+ /** Configure this organization's SSO. Requires `org:admin`. */
5495
+ async updateOrgSsoConfig(orgIdOrUuid, data) {
5496
+ return this.fetch(`o/${orgIdOrUuid}/sso`, {
5497
+ method: "PUT",
5498
+ body: JSON.stringify(data)
5499
+ });
5500
+ }
5501
+ /** Remove this organization's SSO configuration. Requires `org:admin`. */
5502
+ async deleteOrgSsoConfig(orgIdOrUuid) {
5503
+ return this.fetch(`o/${orgIdOrUuid}/sso`, {
5504
+ method: "DELETE"
5505
+ });
5506
+ }
5433
5507
  /**
5434
5508
  * Get the billing customer UUID for an organization.
5435
5509
  */
@@ -5550,6 +5624,22 @@ var OrgApi = class extends BaseApiClient {
5550
5624
  async getOrganizationWorkspace(orgIdOrUuid, workspaceUuid) {
5551
5625
  return this.fetch(`o/${orgIdOrUuid}/workspaces/${workspaceUuid}`);
5552
5626
  }
5627
+ /**
5628
+ * Workspace cards for the organization page: identity plus the GLB-side
5629
+ * counts. Any org member may call it — members get the workspaces they
5630
+ * belong to, org:read holders get all of them.
5631
+ */
5632
+ async getOrganizationWorkspaceSummaries(orgIdOrUuid) {
5633
+ return this.fetch(`o/${orgIdOrUuid}/workspaces/summary`);
5634
+ }
5635
+ /**
5636
+ * Workspace-schema aggregates for one card, plus the caller's own member
5637
+ * role. Separate from the list because it opens a session against the
5638
+ * workspace's own schema — each card fetches its own.
5639
+ */
5640
+ async getOrganizationWorkspaceStats(orgIdOrUuid, workspaceUuid) {
5641
+ return this.fetch(`o/${orgIdOrUuid}/workspaces/${workspaceUuid}/stats`);
5642
+ }
5553
5643
  /**
5554
5644
  * Create a workspace in an organization.
5555
5645
  */
@@ -6480,6 +6570,67 @@ var PersonasApi = class extends BaseApiClient {
6480
6570
  }
6481
6571
  };
6482
6572
 
6573
+ // src/api/metrics.ts
6574
+ var MetricsApi = class extends BaseApiClient {
6575
+ /** List metric definitions in the workspace, paginated. */
6576
+ async listMetrics(wid, params) {
6577
+ const q = new URLSearchParams();
6578
+ if (params?.page !== void 0) q.set("page", String(params.page));
6579
+ if (params?.pageSize !== void 0) q.set("pageSize", String(params.pageSize));
6580
+ if (params?.includeArchived !== void 0)
6581
+ q.set("includeArchived", String(params.includeArchived));
6582
+ if (params?.source) q.set("source", params.source);
6583
+ const qs = q.toString() ? `?${q.toString()}` : "";
6584
+ return this.fetch(`w/${wid}/metrics${qs}`);
6585
+ }
6586
+ async getMetric(wid, id) {
6587
+ return this.fetch(`w/${wid}/metrics/${id}`);
6588
+ }
6589
+ async createMetric(wid, data) {
6590
+ return this.fetch(`w/${wid}/metrics`, {
6591
+ method: "POST",
6592
+ body: JSON.stringify(data)
6593
+ });
6594
+ }
6595
+ async updateMetric(wid, id, data) {
6596
+ return this.fetch(`w/${wid}/metrics/${id}`, {
6597
+ method: "PUT",
6598
+ body: JSON.stringify(data)
6599
+ });
6600
+ }
6601
+ /** Soft-archive a metric (observations retained). */
6602
+ async deleteMetric(wid, id) {
6603
+ return this.fetch(`w/${wid}/metrics/${id}`, { method: "DELETE" });
6604
+ }
6605
+ async listMetricObservations(wid, metricId, params) {
6606
+ const q = new URLSearchParams();
6607
+ q.set("start", params.start);
6608
+ q.set("end", params.end);
6609
+ if (params.page !== void 0) q.set("page", String(params.page));
6610
+ if (params.pageSize !== void 0) q.set("pageSize", String(params.pageSize));
6611
+ return this.fetch(
6612
+ `w/${wid}/metrics/${metricId}/observations?${q.toString()}`
6613
+ );
6614
+ }
6615
+ async getMetricSeries(wid, metricId, params) {
6616
+ const q = new URLSearchParams();
6617
+ q.set("start", params.start);
6618
+ q.set("end", params.end);
6619
+ if (params.bucket) q.set("bucket", params.bucket);
6620
+ if (params.aggregation) q.set("aggregation", params.aggregation);
6621
+ return this.fetch(
6622
+ `w/${wid}/metrics/${metricId}/series?${q.toString()}`
6623
+ );
6624
+ }
6625
+ /** On-demand compute of enabled chat-source metrics for one chat. */
6626
+ async computeChatMetrics(wid, data) {
6627
+ return this.fetch(`w/${wid}/metrics/compute-for-chat`, {
6628
+ method: "POST",
6629
+ body: JSON.stringify(data)
6630
+ });
6631
+ }
6632
+ };
6633
+
6483
6634
  // src/api/queries.ts
6484
6635
  var QueriesApi = class extends BaseApiClient {
6485
6636
  /** Queryable namespace: native fields, operators per type, DataType record fields. */
@@ -8706,6 +8857,12 @@ var MemberImportPreviewRowAction = {
8706
8857
  error: "error"
8707
8858
  };
8708
8859
 
8860
+ // src/types/generated/member_role.ts
8861
+ var MergeMemberRolesRequestAccessStrategy = {
8862
+ union: "union",
8863
+ target_only: "target_only"
8864
+ };
8865
+
8709
8866
  // src/types/member-types.ts
8710
8867
  var MemberType = /* @__PURE__ */ ((MemberType2) => {
8711
8868
  MemberType2["ANONYMOUS"] = "anonymous";
@@ -8714,6 +8871,37 @@ var MemberType = /* @__PURE__ */ ((MemberType2) => {
8714
8871
  MemberType2["AGENT"] = "agent";
8715
8872
  return MemberType2;
8716
8873
  })(MemberType || {});
8874
+ function structuredErrorDetail(error) {
8875
+ if (!error || typeof error !== "object") return null;
8876
+ const detail = error.errorData;
8877
+ if (!detail || typeof detail !== "object") return null;
8878
+ return detail;
8879
+ }
8880
+ function isMemberContactConflict(error) {
8881
+ const d = structuredErrorDetail(error);
8882
+ if (!d || d.code !== "MEMBER_CONTACT_CONFLICT") return null;
8883
+ if (d.conflictingMemberId !== null && typeof d.conflictingMemberId !== "number") {
8884
+ return null;
8885
+ }
8886
+ return d;
8887
+ }
8888
+ function isAccountContactConflict(error) {
8889
+ const d = structuredErrorDetail(error);
8890
+ if (!d || d.code !== "ACCOUNT_CONTACT_CONFLICT") return null;
8891
+ return d;
8892
+ }
8893
+ function archivedMemberConflictId(error) {
8894
+ const d = structuredErrorDetail(error);
8895
+ if (!d || d.code !== "ARCHIVED_MEMBER_CONFLICT") return null;
8896
+ return typeof d.archivedMemberId === "number" ? d.archivedMemberId : null;
8897
+ }
8898
+ function isIdentifiedMemberContactConflict(conflict) {
8899
+ return !!conflict && conflict.conflictingMemberId !== null;
8900
+ }
8901
+ function asIdentifiedMemberContactConflict(error) {
8902
+ const conflict = isMemberContactConflict(error);
8903
+ return isIdentifiedMemberContactConflict(conflict) ? conflict : null;
8904
+ }
8717
8905
 
8718
8906
  // src/types/mcp-server-types.ts
8719
8907
  var McpServerState = /* @__PURE__ */ ((McpServerState2) => {
@@ -9756,11 +9944,11 @@ function createApiModules(apiKey, baseUrl, customFetch) {
9756
9944
  connectionSync: new ConnectionSyncApi(apiKey, baseUrl, customFetch),
9757
9945
  mcpServers: new McpServersApi(apiKey, baseUrl, customFetch),
9758
9946
  members: new MembersApi(apiKey, baseUrl, customFetch),
9759
- milestones: new MilestonesApi(apiKey, baseUrl, customFetch),
9760
9947
  motd: new MotdApi(apiKey, baseUrl, customFetch),
9761
9948
  trackedLinks: new TrackedLinksApi(apiKey, baseUrl, customFetch),
9762
9949
  confluence: new ConfluenceApi(apiKey, baseUrl, customFetch),
9763
9950
  mondayIntegration: new MondayIntegrationApi(apiKey, baseUrl, customFetch),
9951
+ interventionRequests: new InterventionRequestsApi(apiKey, baseUrl, customFetch),
9764
9952
  notificationRules: new NotificationRulesApi(apiKey, baseUrl, customFetch),
9765
9953
  oauth: new OAuthApi(apiKey, baseUrl, customFetch),
9766
9954
  operatorGroups: new OperatorApi(apiKey, baseUrl, customFetch),
@@ -9770,6 +9958,7 @@ function createApiModules(apiKey, baseUrl, customFetch) {
9770
9958
  pronunciations: new PronunciationsApi(apiKey, baseUrl, customFetch),
9771
9959
  qualifications: new QualificationsApi(apiKey, baseUrl, customFetch),
9772
9960
  personas: new PersonasApi(apiKey, baseUrl, customFetch),
9961
+ metrics: new MetricsApi(apiKey, baseUrl, customFetch),
9773
9962
  queries: new QueriesApi(apiKey, baseUrl, customFetch),
9774
9963
  reports: new ReportsApi(apiKey, baseUrl, customFetch),
9775
9964
  salesforce: new SalesforceApi(apiKey, baseUrl, customFetch),
@@ -9883,7 +10072,6 @@ var WORKSPACE_METHOD_NAMES = [
9883
10072
  "createMemberMemory",
9884
10073
  "createMemberRole",
9885
10074
  "createMenuItem",
9886
- "createMilestone",
9887
10075
  "createNotificationRule",
9888
10076
  "createOperatorGroup",
9889
10077
  "createPage",
@@ -9950,7 +10138,6 @@ var WORKSPACE_METHOD_NAMES = [
9950
10138
  "deleteMemberMemory",
9951
10139
  "deleteMemberRole",
9952
10140
  "deleteMenuItem",
9953
- "deleteMilestone",
9954
10141
  "deleteMondayConnection",
9955
10142
  "deleteNotificationRule",
9956
10143
  "deleteOperatorGroup",
@@ -10101,6 +10288,7 @@ var WORKSPACE_METHOD_NAMES = [
10101
10288
  "getChatsNeedsResponse",
10102
10289
  "getChildThreadMessages",
10103
10290
  "getClientWorkspace",
10291
+ "getConfigurationHealth",
10104
10292
  "getConfluenceStatus",
10105
10293
  "getConnectionSyncCapabilities",
10106
10294
  "getConnectionSyncCheckpoint",
@@ -10227,6 +10415,7 @@ var WORKSPACE_METHOD_NAMES = [
10227
10415
  "getMemberMemory",
10228
10416
  "getMemberRecordCounts",
10229
10417
  "getMemberRole",
10418
+ "getMemberRoleCleanupPlan",
10230
10419
  "getMemberRoleByUuid",
10231
10420
  "getMemberRoles",
10232
10421
  "getMemberSyncLinks",
@@ -10235,8 +10424,6 @@ var WORKSPACE_METHOD_NAMES = [
10235
10424
  "getMembersMessageActivity",
10236
10425
  "getMenuItems",
10237
10426
  "getMessageTiming",
10238
- "getMilestone",
10239
- "getMilestones",
10240
10427
  "getMondayConnectionBoardColumns",
10241
10428
  "getMondayConnectionBoardGroups",
10242
10429
  "getMondayConnectionBoards",
@@ -10399,6 +10586,14 @@ var WORKSPACE_METHOD_NAMES = [
10399
10586
  "listHealthiePatients",
10400
10587
  "listHealthieProviders",
10401
10588
  "listPersonas",
10589
+ "listMetrics",
10590
+ "getMetric",
10591
+ "createMetric",
10592
+ "updateMetric",
10593
+ "deleteMetric",
10594
+ "listMetricObservations",
10595
+ "getMetricSeries",
10596
+ "computeChatMetrics",
10402
10597
  "listPushSubscriptions",
10403
10598
  "listSalesforceObjects",
10404
10599
  "listScenarios",
@@ -10409,6 +10604,7 @@ var WORKSPACE_METHOD_NAMES = [
10409
10604
  "markEmailAsRead",
10410
10605
  "markEmailAsUnread",
10411
10606
  "markNotificationAsRead",
10607
+ "mergeMemberRoles",
10412
10608
  "previewImportMembers",
10413
10609
  "previewImportWorkspace",
10414
10610
  "previewRoutineWorkflowAccess",
@@ -10537,7 +10733,6 @@ var WORKSPACE_METHOD_NAMES = [
10537
10733
  "updateMemberLabel",
10538
10734
  "updateMemberRole",
10539
10735
  "updateMenuItem",
10540
- "updateMilestone",
10541
10736
  "updateMondaySyncConfig",
10542
10737
  "updateNotificationRule",
10543
10738
  "updateOperatorGroup",
@@ -10722,6 +10917,7 @@ function bindDashboardsMethods(target, dashboards) {
10722
10917
  target.deleteDashboard = dashboards.deleteDashboard.bind(dashboards);
10723
10918
  target.getDashboardChannelStats = dashboards.getDashboardChannelStats.bind(dashboards);
10724
10919
  target.getDashboardWorkflowAssignmentStats = dashboards.getDashboardWorkflowAssignmentStats.bind(dashboards);
10920
+ target.getConfigurationHealth = dashboards.getConfigurationHealth.bind(dashboards);
10725
10921
  }
10726
10922
 
10727
10923
  // src/client/bindings/motd.ts
@@ -11142,7 +11338,7 @@ function bindWorkflowsMethods(target, workflows, workflowNotes, voice, superviso
11142
11338
  }
11143
11339
 
11144
11340
  // src/client/bindings/calendars.ts
11145
- function bindCalendarsMethods(target, calendars, milestones) {
11341
+ function bindCalendarsMethods(target, calendars) {
11146
11342
  target.getCalendars = calendars.getCalendars.bind(calendars);
11147
11343
  target.getCalendar = calendars.getCalendar.bind(calendars);
11148
11344
  target.createCalendar = calendars.createCalendar.bind(calendars);
@@ -11174,11 +11370,6 @@ function bindCalendarsMethods(target, calendars, milestones) {
11174
11370
  target.linkCalendarToGoogle = calendars.linkCalendarToGoogle.bind(calendars);
11175
11371
  target.unlinkCalendarFromGoogle = calendars.unlinkCalendarFromGoogle.bind(calendars);
11176
11372
  target.syncCalendarWithGoogle = calendars.syncCalendarWithGoogle.bind(calendars);
11177
- target.getMilestones = milestones.getMilestones.bind(milestones);
11178
- target.getMilestone = milestones.getMilestone.bind(milestones);
11179
- target.createMilestone = milestones.createMilestone.bind(milestones);
11180
- target.updateMilestone = milestones.updateMilestone.bind(milestones);
11181
- target.deleteMilestone = milestones.deleteMilestone.bind(milestones);
11182
11373
  }
11183
11374
 
11184
11375
  // src/client/bindings/communications.ts
@@ -11535,6 +11726,11 @@ function bindOrgMethods(target, org) {
11535
11726
  target.updateBusinessProfile = org.updateBusinessProfile.bind(org);
11536
11727
  target.submitBusinessProfile = org.submitBusinessProfile.bind(org);
11537
11728
  target.cancelBusinessProfile = org.cancelBusinessProfile.bind(org);
11729
+ target.listLegalEntities = org.listLegalEntities.bind(org);
11730
+ target.getLegalEntity = org.getLegalEntity.bind(org);
11731
+ target.createLegalEntity = org.createLegalEntity.bind(org);
11732
+ target.getVoiceTrustProducts = org.getVoiceTrustProducts.bind(org);
11733
+ target.syncVoiceTrustProducts = org.syncVoiceTrustProducts.bind(org);
11538
11734
  target.createOrganizationWorkspace = org.createOrganizationWorkspace.bind(org);
11539
11735
  target.getOrgBillingCustomer = org.getOrgBillingCustomer.bind(org);
11540
11736
  }
@@ -11618,6 +11814,18 @@ function bindPersonasMethods(target, personas) {
11618
11814
  target.deletePersona = personas.deletePersona.bind(personas);
11619
11815
  }
11620
11816
 
11817
+ // src/client/bindings/metrics.ts
11818
+ function bindMetricsMethods(target, metrics) {
11819
+ target.listMetrics = metrics.listMetrics.bind(metrics);
11820
+ target.getMetric = metrics.getMetric.bind(metrics);
11821
+ target.createMetric = metrics.createMetric.bind(metrics);
11822
+ target.updateMetric = metrics.updateMetric.bind(metrics);
11823
+ target.deleteMetric = metrics.deleteMetric.bind(metrics);
11824
+ target.listMetricObservations = metrics.listMetricObservations.bind(metrics);
11825
+ target.getMetricSeries = metrics.getMetricSeries.bind(metrics);
11826
+ target.computeChatMetrics = metrics.computeChatMetrics.bind(metrics);
11827
+ }
11828
+
11621
11829
  // src/client/bindings/queries.ts
11622
11830
  function bindQueriesMethods(target, queries) {
11623
11831
  target.getQueryFields = queries.getQueryFields.bind(queries);
@@ -11826,6 +12034,8 @@ var GravityRailClient = class {
11826
12034
  createMemberRole;
11827
12035
  updateMemberRole;
11828
12036
  deleteMemberRole;
12037
+ getMemberRoleCleanupPlan;
12038
+ mergeMemberRoles;
11829
12039
  // Member Fields
11830
12040
  getMemberFields;
11831
12041
  getMemberFieldDefinitions;
@@ -11886,6 +12096,15 @@ var GravityRailClient = class {
11886
12096
  createPersona;
11887
12097
  updatePersona;
11888
12098
  deletePersona;
12099
+ // Metrics API (customer-defined outcome metrics)
12100
+ listMetrics;
12101
+ getMetric;
12102
+ createMetric;
12103
+ updateMetric;
12104
+ deleteMetric;
12105
+ listMetricObservations;
12106
+ getMetricSeries;
12107
+ computeChatMetrics;
11889
12108
  // Dashboards API
11890
12109
  getDashboards;
11891
12110
  getDashboard;
@@ -11894,6 +12113,7 @@ var GravityRailClient = class {
11894
12113
  deleteDashboard;
11895
12114
  getDashboardChannelStats;
11896
12115
  getDashboardWorkflowAssignmentStats;
12116
+ getConfigurationHealth;
11897
12117
  // MOTD API
11898
12118
  getMotd;
11899
12119
  // Tracked Links analytics (#10934)
@@ -12047,6 +12267,11 @@ var GravityRailClient = class {
12047
12267
  updateBusinessProfile;
12048
12268
  submitBusinessProfile;
12049
12269
  cancelBusinessProfile;
12270
+ listLegalEntities;
12271
+ getLegalEntity;
12272
+ createLegalEntity;
12273
+ getVoiceTrustProducts;
12274
+ syncVoiceTrustProducts;
12050
12275
  createOrganizationWorkspace;
12051
12276
  getOrgBillingCustomer;
12052
12277
  getVapidPublicKey;
@@ -12308,11 +12533,6 @@ var GravityRailClient = class {
12308
12533
  linkCalendarToGoogle;
12309
12534
  unlinkCalendarFromGoogle;
12310
12535
  syncCalendarWithGoogle;
12311
- getMilestones;
12312
- getMilestone;
12313
- createMilestone;
12314
- updateMilestone;
12315
- deleteMilestone;
12316
12536
  // Communications API
12317
12537
  getPhoneNumbers;
12318
12538
  getAvailablePhoneNumbers;
@@ -12692,6 +12912,7 @@ var GravityRailClient = class {
12692
12912
  bindAgentsMethods(this, apis.agents);
12693
12913
  bindQualificationsMethods(this, apis.qualifications);
12694
12914
  bindPersonasMethods(this, apis.personas);
12915
+ bindMetricsMethods(this, apis.metrics);
12695
12916
  bindQueriesMethods(this, apis.queries);
12696
12917
  bindDashboardsMethods(this, apis.dashboards);
12697
12918
  bindMotdMethods(this, apis.motd);
@@ -12708,7 +12929,7 @@ var GravityRailClient = class {
12708
12929
  bindFilesMethods(this, apis.files);
12709
12930
  bindEventsMethods(this, apis.events);
12710
12931
  bindWorkflowsMethods(this, apis.workflows, apis.workflowNotes, apis.voice, apis.supervisors);
12711
- bindCalendarsMethods(this, apis.calendars, apis.milestones);
12932
+ bindCalendarsMethods(this, apis.calendars);
12712
12933
  bindCommunicationsMethods(this, apis.phoneNumbers, apis.inboxes, apis.notificationRules);
12713
12934
  bindToolkitsMethods(
12714
12935
  this,
@@ -13663,6 +13884,16 @@ var TaskBuilder = class extends WorkspaceBuilderResource {
13663
13884
  description;
13664
13885
  transitions = [];
13665
13886
  eventRules = [];
13887
+ /** Child task ids the server already has, recorded when this task is adopted. */
13888
+ existingChildIds = /* @__PURE__ */ new Set();
13889
+ /** Record the edges an adopted task already carries, so a re-run adds only what is missing. */
13890
+ adopt(existing) {
13891
+ super.adopt(existing);
13892
+ for (const child of existing.childTasks ?? []) {
13893
+ const id = child.taskId ?? child.id;
13894
+ if (typeof id === "number") this.existingChildIds.add(id);
13895
+ }
13896
+ }
13666
13897
  transitionsTo(child, when, autoNext = false, required = false, celCondition) {
13667
13898
  if (child === this) {
13668
13899
  throw new Error(`Task '${this.name}' cannot transition to itself`);
@@ -13973,7 +14204,53 @@ ${"=".repeat(50)}`);
13973
14204
  writeLine("\n Journey warnings:");
13974
14205
  for (const problem of problems) writeLine(` ! ${problem}`);
13975
14206
  }
14207
+ /**
14208
+ * Problems that make the plan unwritable, found before the first write.
14209
+ *
14210
+ * The API validates each CEL when you save it, and its diagnosis is right —
14211
+ * but it fires per-write, so a plan whose edges reference a non-collection
14212
+ * form gets four labels, two forms, a workflow and six tasks created before
14213
+ * the seventh call rejects it. The operator is left with a half-built
14214
+ * program to hand-repair. Checking here costs nothing and writes nothing.
14215
+ *
14216
+ * Deliberately narrow: only cross-resource facts the builder can see with
14217
+ * certainty. Per-field CEL schema checking stays server-side, where the
14218
+ * real validator lives — duplicating it here would drift.
14219
+ */
14220
+ preflight() {
14221
+ const problems = [];
14222
+ const forms = this.resources.filter(
14223
+ (resource) => resource instanceof FormBuilder
14224
+ );
14225
+ const collectionBySlug = new Map(forms.map((form) => [form.slug, form.collection]));
14226
+ const reference = /assignment\.collections\.([A-Za-z0-9_]+)/g;
14227
+ for (const resource of this.sortedResources()) {
14228
+ if (!(resource instanceof TaskBuilder)) continue;
14229
+ for (const transition of resource.transitions) {
14230
+ const cel = transition.celCondition;
14231
+ if (!cel) continue;
14232
+ for (const [, slug] of cel.matchAll(reference)) {
14233
+ if (!collectionBySlug.has(slug)) continue;
14234
+ if (!collectionBySlug.get(slug)) {
14235
+ problems.push(
14236
+ `task '${transition.parent.name}' \u2192 '${transition.child.name}': CEL reads assignment.collections.${slug}, but this plan creates '${slug}' as a non-collection form. Declare it with { collection: true }.`
14237
+ );
14238
+ }
14239
+ }
14240
+ }
14241
+ }
14242
+ return [...new Set(problems)];
14243
+ }
13976
14244
  async apply() {
14245
+ const problems = this.preflight();
14246
+ if (problems.length) {
14247
+ writeLine("\nPlan rejected \u2014 nothing was created:");
14248
+ for (const problem of problems) writeLine(` ! ${problem}`);
14249
+ throw new Error(
14250
+ `Plan has ${problems.length} problem(s) and was not applied:
14251
+ ` + problems.map((problem) => ` - ${problem}`).join("\n")
14252
+ );
14253
+ }
13977
14254
  const resources = this.sortedResources();
13978
14255
  await this.resolveExisting(resources);
13979
14256
  const summary = {};
@@ -14160,6 +14437,7 @@ Done! Created ${count} resources.`);
14160
14437
  const childTasks = transitions.flatMap((transition) => {
14161
14438
  const taskId = transition.child._id;
14162
14439
  if (taskId === void 0 || taskId === parent._id) return [];
14440
+ if (parent.existingChildIds.has(taskId)) return [];
14163
14441
  return [
14164
14442
  {
14165
14443
  taskId,
@@ -14682,7 +14960,9 @@ var AbilityConfigIssueCode = {
14682
14960
  invalid_state: "invalid_state",
14683
14961
  feature_disabled: "feature_disabled",
14684
14962
  missing_connection: "missing_connection",
14685
- external_drift: "external_drift"
14963
+ external_drift: "external_drift",
14964
+ missing_task_instructions: "missing_task_instructions",
14965
+ no_qualification_scenarios: "no_qualification_scenarios"
14686
14966
  };
14687
14967
  var AbilityConfigIssueSeverity = {
14688
14968
  warning: "warning",
@@ -14695,6 +14975,12 @@ var WorkflowAccessWarningResourceType = {
14695
14975
  calendar: "calendar"
14696
14976
  };
14697
14977
 
14978
+ // src/types/generated/workflow.ts
14979
+ var WorkflowRoutingMode = {
14980
+ open_world: "open_world",
14981
+ strict: "strict"
14982
+ };
14983
+
14698
14984
  // src/types/widget-domain-types.ts
14699
14985
  var WIDGET_SLUGS = ["chat", "operator", "operator-tools", "chat-app"];
14700
14986
 
@@ -15697,6 +15983,7 @@ function getRevisionState(workflow, revision) {
15697
15983
  MemberType,
15698
15984
  MenuItemResponseItemType,
15699
15985
  MenuItemType,
15986
+ MergeMemberRolesRequestAccessStrategy,
15700
15987
  ModelProvider,
15701
15988
  ModelType,
15702
15989
  NO_ASSISTANT_PARTICIPANT_CHAT_TYPES,
@@ -15760,11 +16047,14 @@ function getRevisionState(workflow, revision) {
15760
16047
  WorkflowAccessWarningResourceType,
15761
16048
  WorkflowBuilder,
15762
16049
  WorkflowResourceType,
16050
+ WorkflowRoutingMode,
15763
16051
  WorkspaceBuilder,
15764
16052
  WorkspaceBuilderResource,
15765
16053
  WorkspaceFeature,
15766
16054
  WorkspaceProvisionStatus,
16055
+ archivedMemberConflictId,
15767
16056
  areDependenciesSatisfied,
16057
+ asIdentifiedMemberContactConflict,
15768
16058
  canPreviewVoice,
15769
16059
  clearRegistry,
15770
16060
  createWorkspaceClient,
@@ -15788,9 +16078,12 @@ function getRevisionState(workflow, revision) {
15788
16078
  getTTSProvider,
15789
16079
  getVoiceModelId,
15790
16080
  initializeFeatures,
16081
+ isAccountContactConflict,
15791
16082
  isAgentNoteOrigin,
15792
16083
  isChatType,
15793
16084
  isFeatureAvailable,
16085
+ isIdentifiedMemberContactConflict,
16086
+ isMemberContactConflict,
15794
16087
  isPositiveRating,
15795
16088
  isRegistryInitialized,
15796
16089
  isSMSDeliveryFailureStatus,