@kadoa/mcp 0.6.5 → 0.6.6

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 (2) hide show
  1. package/dist/index.js +366 -39
  2. package/package.json +2 -2
package/dist/index.js CHANGED
@@ -36708,6 +36708,50 @@ function mapWorkflow(raw) {
36708
36708
  daily: (raw.daily ?? []).map(mapDailyPoint)
36709
36709
  };
36710
36710
  }
36711
+ function toCreateSupportIssueRequest(options) {
36712
+ const {
36713
+ workflowId,
36714
+ title,
36715
+ description,
36716
+ category,
36717
+ subcategory,
36718
+ jobId,
36719
+ copilotSessionId
36720
+ } = options;
36721
+ return {
36722
+ workflowId,
36723
+ title,
36724
+ description,
36725
+ category: category ?? "workflow_issue",
36726
+ ...subcategory !== undefined && { subcategory },
36727
+ ...jobId !== undefined && { jobId },
36728
+ ...copilotSessionId !== undefined && { copilotSessionId }
36729
+ };
36730
+ }
36731
+ function mapCreateSupportIssueResponse(data) {
36732
+ if (data.skipped) {
36733
+ return {
36734
+ status: "skipped",
36735
+ supportRequestId: data.supportRequestId,
36736
+ reason: data.reason ?? data.code ?? "skipped"
36737
+ };
36738
+ }
36739
+ return {
36740
+ status: "accepted",
36741
+ supportRequestId: data.supportRequestId
36742
+ };
36743
+ }
36744
+ function mapExistingSupportIssue(error) {
36745
+ if (!(error instanceof KadoaHttpException) || error.httpStatus !== 409)
36746
+ return;
36747
+ const body = error.responseBody ?? {};
36748
+ return {
36749
+ status: "existing",
36750
+ supportRequestId: body.supportRequestId,
36751
+ issueIdentifier: body.issueId,
36752
+ message: body.error ?? "Workflow already has an open support issue"
36753
+ };
36754
+ }
36711
36755
  function mapWorkspaceDetails(raw) {
36712
36756
  const workspace = raw.workspace;
36713
36757
  if (!workspace?.id || !workspace.type) {
@@ -36948,6 +36992,7 @@ function createAxiosInstance(params) {
36948
36992
  function createClientDomains(params) {
36949
36993
  const { client } = params;
36950
36994
  const activityService = new ActivityService(client);
36995
+ const supportService = new SupportService(client);
36951
36996
  const assistantService = new AssistantService(client.apis.agent);
36952
36997
  const changesService = new ChangesService(client);
36953
36998
  const userService = new UserService(client);
@@ -36977,6 +37022,7 @@ function createClientDomains(params) {
36977
37022
  return {
36978
37023
  activity: activityService,
36979
37024
  assistant: assistantService,
37025
+ support: supportService,
36980
37026
  changes: changesService,
36981
37027
  extractionBuilderService,
36982
37028
  extraction: extractionService,
@@ -37184,8 +37230,8 @@ var import_debug, __require2, createLogger = (namespace) => import_debug.default
37184
37230
  return needsSerialization ? JSON.stringify(value !== undefined ? value : {}, replaceWithSerializableTypeIfNeeded) : value || "";
37185
37231
  }, toPathString = function(url) {
37186
37232
  return url.pathname + url.search + url.hash;
37187
- }, createRequestFunction = function(axiosArgs, globalAxios14, BASE_PATH2, configuration) {
37188
- return (axios2 = globalAxios14, basePath = BASE_PATH2) => {
37233
+ }, createRequestFunction = function(axiosArgs, globalAxios15, BASE_PATH2, configuration) {
37234
+ return (axios2 = globalAxios15, basePath = BASE_PATH2) => {
37189
37235
  const axiosRequestArgs = { ...axiosArgs.options, url: (axios2.defaults.baseURL ? "" : configuration?.basePath ?? basePath) + axiosArgs.url };
37190
37236
  return axios2.request(axiosRequestArgs);
37191
37237
  };
@@ -39359,7 +39405,163 @@ var import_debug, __require2, createLogger = (namespace) => import_debug.default
39359
39405
  return (axios2, basePath) => createRequestFunction(localVarAxiosArgs, axios_default, BASE_PATH, configuration)(axios2, localVarOperationServerBasePath || basePath);
39360
39406
  }
39361
39407
  };
39362
- }, ScrapeApi, TemplatesApiAxiosParamCreator = function(configuration) {
39408
+ }, ScrapeApi, SupportApiAxiosParamCreator = function(configuration) {
39409
+ return {
39410
+ v4SupportAttachmentsPost: async (files, options = {}) => {
39411
+ const localVarPath = `/v4/support/attachments`;
39412
+ const localVarUrlObj = new URL$1(localVarPath, DUMMY_BASE_URL);
39413
+ let baseOptions;
39414
+ if (configuration) {
39415
+ baseOptions = configuration.baseOptions;
39416
+ }
39417
+ const localVarRequestOptions = { method: "POST", ...baseOptions, ...options };
39418
+ const localVarHeaderParameter = {};
39419
+ const localVarQueryParameter = {};
39420
+ const localVarFormParams = new (configuration && configuration.formDataCtor || FormData);
39421
+ await setApiKeyToObject(localVarHeaderParameter, "x-api-key", configuration);
39422
+ if (files) {
39423
+ files.forEach((element) => {
39424
+ localVarFormParams.append("files", element);
39425
+ });
39426
+ }
39427
+ localVarHeaderParameter["Content-Type"] = "multipart/form-data";
39428
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
39429
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
39430
+ localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };
39431
+ localVarRequestOptions.data = localVarFormParams;
39432
+ return {
39433
+ url: toPathString(localVarUrlObj),
39434
+ options: localVarRequestOptions
39435
+ };
39436
+ },
39437
+ v4SupportIssuesGet: async (includeResolved, workflowId, options = {}) => {
39438
+ const localVarPath = `/v4/support/issues`;
39439
+ const localVarUrlObj = new URL$1(localVarPath, DUMMY_BASE_URL);
39440
+ let baseOptions;
39441
+ if (configuration) {
39442
+ baseOptions = configuration.baseOptions;
39443
+ }
39444
+ const localVarRequestOptions = { method: "GET", ...baseOptions, ...options };
39445
+ const localVarHeaderParameter = {};
39446
+ const localVarQueryParameter = {};
39447
+ await setApiKeyToObject(localVarHeaderParameter, "x-api-key", configuration);
39448
+ if (includeResolved !== undefined) {
39449
+ localVarQueryParameter["includeResolved"] = includeResolved;
39450
+ }
39451
+ if (workflowId !== undefined) {
39452
+ localVarQueryParameter["workflowId"] = workflowId;
39453
+ }
39454
+ localVarHeaderParameter["Accept"] = "application/json";
39455
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
39456
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
39457
+ localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };
39458
+ return {
39459
+ url: toPathString(localVarUrlObj),
39460
+ options: localVarRequestOptions
39461
+ };
39462
+ },
39463
+ v4SupportIssuesIssueIdPatch: async (issueId, v4SupportIssuesIssueIdPatchRequest, options = {}) => {
39464
+ assertParamExists("v4SupportIssuesIssueIdPatch", "issueId", issueId);
39465
+ assertParamExists("v4SupportIssuesIssueIdPatch", "v4SupportIssuesIssueIdPatchRequest", v4SupportIssuesIssueIdPatchRequest);
39466
+ const localVarPath = `/v4/support/issues/{issueId}`.replace(`{${"issueId"}}`, encodeURIComponent(String(issueId)));
39467
+ const localVarUrlObj = new URL$1(localVarPath, DUMMY_BASE_URL);
39468
+ let baseOptions;
39469
+ if (configuration) {
39470
+ baseOptions = configuration.baseOptions;
39471
+ }
39472
+ const localVarRequestOptions = { method: "PATCH", ...baseOptions, ...options };
39473
+ const localVarHeaderParameter = {};
39474
+ const localVarQueryParameter = {};
39475
+ await setApiKeyToObject(localVarHeaderParameter, "x-api-key", configuration);
39476
+ localVarHeaderParameter["Content-Type"] = "application/json";
39477
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
39478
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
39479
+ localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };
39480
+ localVarRequestOptions.data = serializeDataIfNeeded(v4SupportIssuesIssueIdPatchRequest, localVarRequestOptions, configuration);
39481
+ return {
39482
+ url: toPathString(localVarUrlObj),
39483
+ options: localVarRequestOptions
39484
+ };
39485
+ },
39486
+ v4SupportIssuesPost: async (v4SupportIssuesPostRequest, options = {}) => {
39487
+ assertParamExists("v4SupportIssuesPost", "v4SupportIssuesPostRequest", v4SupportIssuesPostRequest);
39488
+ const localVarPath = `/v4/support/issues`;
39489
+ const localVarUrlObj = new URL$1(localVarPath, DUMMY_BASE_URL);
39490
+ let baseOptions;
39491
+ if (configuration) {
39492
+ baseOptions = configuration.baseOptions;
39493
+ }
39494
+ const localVarRequestOptions = { method: "POST", ...baseOptions, ...options };
39495
+ const localVarHeaderParameter = {};
39496
+ const localVarQueryParameter = {};
39497
+ await setApiKeyToObject(localVarHeaderParameter, "x-api-key", configuration);
39498
+ localVarHeaderParameter["Content-Type"] = "application/json";
39499
+ localVarHeaderParameter["Accept"] = "application/json";
39500
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
39501
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
39502
+ localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };
39503
+ localVarRequestOptions.data = serializeDataIfNeeded(v4SupportIssuesPostRequest, localVarRequestOptions, configuration);
39504
+ return {
39505
+ url: toPathString(localVarUrlObj),
39506
+ options: localVarRequestOptions
39507
+ };
39508
+ },
39509
+ v4SupportStatesGet: async (options = {}) => {
39510
+ const localVarPath = `/v4/support/states`;
39511
+ const localVarUrlObj = new URL$1(localVarPath, DUMMY_BASE_URL);
39512
+ let baseOptions;
39513
+ if (configuration) {
39514
+ baseOptions = configuration.baseOptions;
39515
+ }
39516
+ const localVarRequestOptions = { method: "GET", ...baseOptions, ...options };
39517
+ const localVarHeaderParameter = {};
39518
+ const localVarQueryParameter = {};
39519
+ await setApiKeyToObject(localVarHeaderParameter, "x-api-key", configuration);
39520
+ localVarHeaderParameter["Accept"] = "application/json";
39521
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
39522
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
39523
+ localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };
39524
+ return {
39525
+ url: toPathString(localVarUrlObj),
39526
+ options: localVarRequestOptions
39527
+ };
39528
+ }
39529
+ };
39530
+ }, SupportApiFp = function(configuration) {
39531
+ const localVarAxiosParamCreator = SupportApiAxiosParamCreator(configuration);
39532
+ return {
39533
+ async v4SupportAttachmentsPost(files, options) {
39534
+ const localVarAxiosArgs = await localVarAxiosParamCreator.v4SupportAttachmentsPost(files, options);
39535
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
39536
+ const localVarOperationServerBasePath = operationServerMap["SupportApi.v4SupportAttachmentsPost"]?.[localVarOperationServerIndex]?.url;
39537
+ return (axios2, basePath) => createRequestFunction(localVarAxiosArgs, axios_default, BASE_PATH, configuration)(axios2, localVarOperationServerBasePath || basePath);
39538
+ },
39539
+ async v4SupportIssuesGet(includeResolved, workflowId, options) {
39540
+ const localVarAxiosArgs = await localVarAxiosParamCreator.v4SupportIssuesGet(includeResolved, workflowId, options);
39541
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
39542
+ const localVarOperationServerBasePath = operationServerMap["SupportApi.v4SupportIssuesGet"]?.[localVarOperationServerIndex]?.url;
39543
+ return (axios2, basePath) => createRequestFunction(localVarAxiosArgs, axios_default, BASE_PATH, configuration)(axios2, localVarOperationServerBasePath || basePath);
39544
+ },
39545
+ async v4SupportIssuesIssueIdPatch(issueId, v4SupportIssuesIssueIdPatchRequest, options) {
39546
+ const localVarAxiosArgs = await localVarAxiosParamCreator.v4SupportIssuesIssueIdPatch(issueId, v4SupportIssuesIssueIdPatchRequest, options);
39547
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
39548
+ const localVarOperationServerBasePath = operationServerMap["SupportApi.v4SupportIssuesIssueIdPatch"]?.[localVarOperationServerIndex]?.url;
39549
+ return (axios2, basePath) => createRequestFunction(localVarAxiosArgs, axios_default, BASE_PATH, configuration)(axios2, localVarOperationServerBasePath || basePath);
39550
+ },
39551
+ async v4SupportIssuesPost(v4SupportIssuesPostRequest, options) {
39552
+ const localVarAxiosArgs = await localVarAxiosParamCreator.v4SupportIssuesPost(v4SupportIssuesPostRequest, options);
39553
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
39554
+ const localVarOperationServerBasePath = operationServerMap["SupportApi.v4SupportIssuesPost"]?.[localVarOperationServerIndex]?.url;
39555
+ return (axios2, basePath) => createRequestFunction(localVarAxiosArgs, axios_default, BASE_PATH, configuration)(axios2, localVarOperationServerBasePath || basePath);
39556
+ },
39557
+ async v4SupportStatesGet(options) {
39558
+ const localVarAxiosArgs = await localVarAxiosParamCreator.v4SupportStatesGet(options);
39559
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
39560
+ const localVarOperationServerBasePath = operationServerMap["SupportApi.v4SupportStatesGet"]?.[localVarOperationServerIndex]?.url;
39561
+ return (axios2, basePath) => createRequestFunction(localVarAxiosArgs, axios_default, BASE_PATH, configuration)(axios2, localVarOperationServerBasePath || basePath);
39562
+ }
39563
+ };
39564
+ }, SupportApi, TemplatesApiAxiosParamCreator = function(configuration) {
39363
39565
  return {
39364
39566
  v4TemplatesFromWorkflowPost: async (saveFromWorkflowBody, options = {}) => {
39365
39567
  const localVarPath = `/v4/templates/from-workflow`;
@@ -42501,7 +42703,7 @@ var import_debug, __require2, createLogger = (namespace) => import_debug.default
42501
42703
  const response = await this.api.v5WorkspacesWorkspaceIdObservabilityGet(toObservabilityRequest(workspaceId, options), { timeout: OBSERVABILITY_REQUEST_TIMEOUT_MS });
42502
42704
  return mapObservabilityOverview(response.data);
42503
42705
  }
42504
- }, PUBLIC_API_URI, WSS_API_URI, REALTIME_API_URI, SDK_VERSION = "0.43.0", SDK_NAME = "kadoa-node-sdk", SDK_LANGUAGE = "node", debug8, isDrainControlMessage = (message) => message.type === "control.draining", isRealtimeEvent = (message) => message.type !== "heartbeat" && message.type !== "control.draining", _Realtime = class _Realtime {
42706
+ }, PUBLIC_API_URI, WSS_API_URI, REALTIME_API_URI, SDK_VERSION = "0.44.0", SDK_NAME = "kadoa-node-sdk", SDK_LANGUAGE = "node", debug8, isDrainControlMessage = (message) => message.type === "control.draining", isRealtimeEvent = (message) => message.type !== "heartbeat" && message.type !== "control.draining", _Realtime = class _Realtime {
42505
42707
  constructor(config) {
42506
42708
  this.drainingSockets = /* @__PURE__ */ new Set;
42507
42709
  this.lastHeartbeat = Date.now();
@@ -42839,7 +43041,28 @@ var import_debug, __require2, createLogger = (namespace) => import_debug.default
42839
43041
  });
42840
43042
  return response.data;
42841
43043
  }
42842
- }, debug9, TemplatesService = class {
43044
+ }, debug9, SupportService = class {
43045
+ constructor(client) {
43046
+ this.client = client;
43047
+ }
43048
+ get supportApi() {
43049
+ return this.client.apis.support;
43050
+ }
43051
+ async createIssue(options) {
43052
+ debug9("create support issue for workflow %s", options.workflowId);
43053
+ try {
43054
+ const response = await this.supportApi.v4SupportIssuesPost({
43055
+ v4SupportIssuesPostRequest: toCreateSupportIssueRequest(options)
43056
+ });
43057
+ return mapCreateSupportIssueResponse(response.data);
43058
+ } catch (error) {
43059
+ const existing = mapExistingSupportIssue(error);
43060
+ if (existing)
43061
+ return existing;
43062
+ throw error;
43063
+ }
43064
+ }
43065
+ }, debug10, TemplatesService = class {
42843
43066
  constructor(client) {
42844
43067
  this.client = client;
42845
43068
  }
@@ -42847,12 +43070,12 @@ var import_debug, __require2, createLogger = (namespace) => import_debug.default
42847
43070
  return this.client.apis.templates;
42848
43071
  }
42849
43072
  async list() {
42850
- debug9("Listing all templates");
43073
+ debug10("Listing all templates");
42851
43074
  const response = await this.templatesApi.v4TemplatesGet();
42852
43075
  return response.data.data ?? [];
42853
43076
  }
42854
43077
  async get(templateId) {
42855
- debug9("Fetching template with ID: %s", templateId);
43078
+ debug10("Fetching template with ID: %s", templateId);
42856
43079
  const response = await this.templatesApi.v4TemplatesTemplateIdGet({
42857
43080
  templateId
42858
43081
  });
@@ -42866,7 +43089,7 @@ var import_debug, __require2, createLogger = (namespace) => import_debug.default
42866
43089
  return template;
42867
43090
  }
42868
43091
  async create(body) {
42869
- debug9("Creating template with name: %s", body.name);
43092
+ debug10("Creating template with name: %s", body.name);
42870
43093
  const response = await this.templatesApi.v4TemplatesPost({
42871
43094
  createTemplateBody: body
42872
43095
  });
@@ -42879,7 +43102,7 @@ var import_debug, __require2, createLogger = (namespace) => import_debug.default
42879
43102
  return template;
42880
43103
  }
42881
43104
  async update(templateId, body) {
42882
- debug9("Updating template with ID: %s", templateId);
43105
+ debug10("Updating template with ID: %s", templateId);
42883
43106
  const response = await this.templatesApi.v4TemplatesTemplateIdPut({
42884
43107
  templateId,
42885
43108
  updateTemplateBody: body
@@ -42894,13 +43117,13 @@ var import_debug, __require2, createLogger = (namespace) => import_debug.default
42894
43117
  return template;
42895
43118
  }
42896
43119
  async delete(templateId) {
42897
- debug9("Deleting template with ID: %s", templateId);
43120
+ debug10("Deleting template with ID: %s", templateId);
42898
43121
  await this.templatesApi.v4TemplatesTemplateIdDelete({
42899
43122
  templateId
42900
43123
  });
42901
43124
  }
42902
43125
  async createVersion(templateId, body) {
42903
- debug9("Creating version for template: %s", templateId);
43126
+ debug10("Creating version for template: %s", templateId);
42904
43127
  const response = await this.templatesApi.v4TemplatesTemplateIdVersionsPost({
42905
43128
  templateId,
42906
43129
  createTemplateVersionBody: body
@@ -42915,7 +43138,7 @@ var import_debug, __require2, createLogger = (namespace) => import_debug.default
42915
43138
  return version;
42916
43139
  }
42917
43140
  async linkWorkflows(templateId, body) {
42918
- debug9("Linking %d workflow(s) to template: %s", body.workflowIds?.length ?? 0, templateId);
43141
+ debug10("Linking %d workflow(s) to template: %s", body.workflowIds?.length ?? 0, templateId);
42919
43142
  try {
42920
43143
  const response = await this.templatesApi.v4TemplatesTemplateIdLinkPost({
42921
43144
  templateId,
@@ -42940,14 +43163,14 @@ var import_debug, __require2, createLogger = (namespace) => import_debug.default
42940
43163
  }
42941
43164
  }
42942
43165
  async getLinkedWorkflows(templateId) {
42943
- debug9("Listing workflows linked to template: %s", templateId);
43166
+ debug10("Listing workflows linked to template: %s", templateId);
42944
43167
  const response = await this.templatesApi.v4TemplatesTemplateIdWorkflowsGet({
42945
43168
  templateId
42946
43169
  });
42947
43170
  return response.data.data ?? [];
42948
43171
  }
42949
43172
  async applyVersion(templateId, body) {
42950
- debug9("Applying template %s version %d to %d workflow(s)", templateId, body.targetVersion, body.workflowIds?.length ?? 0);
43173
+ debug10("Applying template %s version %d to %d workflow(s)", templateId, body.targetVersion, body.workflowIds?.length ?? 0);
42951
43174
  const response = await this.templatesApi.v4TemplatesTemplateIdApplyPost({
42952
43175
  templateId,
42953
43176
  applyTemplateUpdateBody: body
@@ -42955,7 +43178,7 @@ var import_debug, __require2, createLogger = (namespace) => import_debug.default
42955
43178
  return response.data;
42956
43179
  }
42957
43180
  async unlinkWorkflows(templateId, body) {
42958
- debug9("Unlinking %d workflow(s) from template: %s", body.workflowIds?.length ?? 0, templateId);
43181
+ debug10("Unlinking %d workflow(s) from template: %s", body.workflowIds?.length ?? 0, templateId);
42959
43182
  const response = await this.templatesApi.v4TemplatesTemplateIdUnlinkPost({
42960
43183
  templateId,
42961
43184
  unlinkWorkflowsBody: body
@@ -42963,14 +43186,14 @@ var import_debug, __require2, createLogger = (namespace) => import_debug.default
42963
43186
  return response.data;
42964
43187
  }
42965
43188
  async listSchemas(templateId) {
42966
- debug9("Listing schemas for template: %s", templateId);
43189
+ debug10("Listing schemas for template: %s", templateId);
42967
43190
  const response = await this.templatesApi.v4TemplatesTemplateIdSchemasGet({
42968
43191
  templateId
42969
43192
  });
42970
43193
  return response.data.data ?? [];
42971
43194
  }
42972
43195
  async createFromWorkflow(body) {
42973
- debug9("Creating template from workflow: %s", body.workflowId);
43196
+ debug10("Creating template from workflow: %s", body.workflowId);
42974
43197
  const response = await this.templatesApi.v4TemplatesFromWorkflowPost({
42975
43198
  saveFromWorkflowBody: body
42976
43199
  });
@@ -42983,7 +43206,7 @@ var import_debug, __require2, createLogger = (namespace) => import_debug.default
42983
43206
  }
42984
43207
  return result;
42985
43208
  }
42986
- }, debug10, UsageService = class {
43209
+ }, debug11, UsageService = class {
42987
43210
  constructor(client) {
42988
43211
  this.client = client;
42989
43212
  }
@@ -42991,28 +43214,28 @@ var import_debug, __require2, createLogger = (namespace) => import_debug.default
42991
43214
  return this.client.apis.workspaces;
42992
43215
  }
42993
43216
  async getWorkspaceDetails(workspaceId) {
42994
- debug10("get workspace details %s", workspaceId);
43217
+ debug11("get workspace details %s", workspaceId);
42995
43218
  const response = await this.api.v5WorkspacesWorkspaceIdDetailsGet({
42996
43219
  workspaceId
42997
43220
  });
42998
43221
  return mapWorkspaceDetails(response.data);
42999
43222
  }
43000
43223
  async getQuotas(workspaceId) {
43001
- debug10("get quotas %s", workspaceId);
43224
+ debug11("get quotas %s", workspaceId);
43002
43225
  const response = await this.api.v5WorkspacesWorkspaceIdQuotasGet({
43003
43226
  workspaceId
43004
43227
  });
43005
43228
  return mapQuotas(response.data);
43006
43229
  }
43007
43230
  async listBillableWorkflows(workspaceId) {
43008
- debug10("list billable workflows %s", workspaceId);
43231
+ debug11("list billable workflows %s", workspaceId);
43009
43232
  const response = await this.api.v5WorkspacesWorkspaceIdBillableWorkflowsGet({
43010
43233
  workspaceId
43011
43234
  });
43012
43235
  return mapBillableWorkflows(response.data);
43013
43236
  }
43014
43237
  async getActiveSeries(workspaceId, options) {
43015
- debug10("get active series %s %o", workspaceId, options);
43238
+ debug11("get active series %s %o", workspaceId, options);
43016
43239
  const response = await this.api.v5WorkspacesWorkspaceIdMonthlyActiveGet({
43017
43240
  workspaceId,
43018
43241
  days: options?.days
@@ -43020,7 +43243,7 @@ var import_debug, __require2, createLogger = (namespace) => import_debug.default
43020
43243
  return mapActiveSeries(response.data);
43021
43244
  }
43022
43245
  async getPeriodSeries(workspaceId, options) {
43023
- debug10("get period series %s %o", workspaceId, options);
43246
+ debug11("get period series %s %o", workspaceId, options);
43024
43247
  const response = await this.api.v5WorkspacesWorkspaceIdPeriodSeriesGet({
43025
43248
  workspaceId,
43026
43249
  days: options?.days
@@ -43028,7 +43251,7 @@ var import_debug, __require2, createLogger = (namespace) => import_debug.default
43028
43251
  return mapPeriodSeries(response.data);
43029
43252
  }
43030
43253
  async getActivityUsage(workspaceId, options) {
43031
- debug10("get activity usage %s %o", workspaceId, options);
43254
+ debug11("get activity usage %s %o", workspaceId, options);
43032
43255
  const response = await this.api.v5WorkspacesWorkspaceIdActivityUsageGet({
43033
43256
  workspaceId,
43034
43257
  days: options?.days
@@ -43313,7 +43536,7 @@ var import_debug, __require2, createLogger = (namespace) => import_debug.default
43313
43536
  }
43314
43537
  return response.data.data;
43315
43538
  }
43316
- }, debug11, VariablesService = class {
43539
+ }, debug12, VariablesService = class {
43317
43540
  constructor(client) {
43318
43541
  this.client = client;
43319
43542
  }
@@ -43325,7 +43548,7 @@ var import_debug, __require2, createLogger = (namespace) => import_debug.default
43325
43548
  return response.data.variables ?? [];
43326
43549
  }
43327
43550
  async get(variableId) {
43328
- debug11("Fetching variable with ID: %s", variableId);
43551
+ debug12("Fetching variable with ID: %s", variableId);
43329
43552
  const response = await this.variablesApi.v4VariablesVariableIdGet({
43330
43553
  variableId
43331
43554
  });
@@ -43339,7 +43562,7 @@ var import_debug, __require2, createLogger = (namespace) => import_debug.default
43339
43562
  return variable;
43340
43563
  }
43341
43564
  async create(body) {
43342
- debug11("Creating variable with key: %s", body.key);
43565
+ debug12("Creating variable with key: %s", body.key);
43343
43566
  const response = await this.variablesApi.v4VariablesPost({
43344
43567
  createVariableBody: body
43345
43568
  });
@@ -43352,7 +43575,7 @@ var import_debug, __require2, createLogger = (namespace) => import_debug.default
43352
43575
  return variable;
43353
43576
  }
43354
43577
  async update(variableId, body) {
43355
- debug11("Updating variable with ID: %s", variableId);
43578
+ debug12("Updating variable with ID: %s", variableId);
43356
43579
  const response = await this.variablesApi.v4VariablesVariableIdPatch({
43357
43580
  variableId,
43358
43581
  updateVariableBody: body
@@ -43367,12 +43590,12 @@ var import_debug, __require2, createLogger = (namespace) => import_debug.default
43367
43590
  return variable;
43368
43591
  }
43369
43592
  async delete(variableId) {
43370
- debug11("Deleting variable with ID: %s", variableId);
43593
+ debug12("Deleting variable with ID: %s", variableId);
43371
43594
  await this.variablesApi.v4VariablesVariableIdDelete({
43372
43595
  variableId
43373
43596
  });
43374
43597
  }
43375
- }, JobStateEnum, WorkflowStatusFilter, TERMINAL_JOB_STATES, TERMINAL_RUN_STATES2, debug12, WorkflowsCoreService = class {
43598
+ }, JobStateEnum, WorkflowStatusFilter, TERMINAL_JOB_STATES, TERMINAL_RUN_STATES2, debug13, WorkflowsCoreService = class {
43376
43599
  constructor(workflowsApi) {
43377
43600
  this.workflowsApi = workflowsApi;
43378
43601
  }
@@ -43527,7 +43750,7 @@ var import_debug, __require2, createLogger = (namespace) => import_debug.default
43527
43750
  async wait(id, options) {
43528
43751
  const result = await pollUntil(async () => {
43529
43752
  const current = await this.get(id);
43530
- debug12("workflow %s state: %s", id, current.runState);
43753
+ debug13("workflow %s state: %s", id, current.runState);
43531
43754
  return current;
43532
43755
  }, (current) => {
43533
43756
  if (options?.targetState && current.state === options.targetState) {
@@ -43573,7 +43796,7 @@ var import_debug, __require2, createLogger = (namespace) => import_debug.default
43573
43796
  async waitForJobCompletion(workflowId, jobId, options) {
43574
43797
  const result = await pollUntil(async () => {
43575
43798
  const current = await this.getJobStatus(workflowId, jobId);
43576
- debug12("workflow run %s state: %s", jobId, current.state);
43799
+ debug13("workflow run %s state: %s", jobId, current.state);
43577
43800
  return current;
43578
43801
  }, (current) => {
43579
43802
  if (options?.targetStatus && current.state === options.targetStatus) {
@@ -43606,6 +43829,9 @@ var import_debug, __require2, createLogger = (namespace) => import_debug.default
43606
43829
  get activity() {
43607
43830
  return this.get(ActivityApi);
43608
43831
  }
43832
+ get support() {
43833
+ return this.get(SupportApi);
43834
+ }
43609
43835
  get agent() {
43610
43836
  return this.get(AgentApi);
43611
43837
  }
@@ -43666,6 +43892,7 @@ var import_debug, __require2, createLogger = (namespace) => import_debug.default
43666
43892
  const domains = createClientDomains({ client: this });
43667
43893
  this.activity = domains.activity;
43668
43894
  this.assistant = domains.assistant;
43895
+ this.support = domains.support;
43669
43896
  this.changes = domains.changes;
43670
43897
  this.user = domains.user;
43671
43898
  this.extraction = domains.extraction;
@@ -43763,6 +43990,7 @@ var init_dist3 = __esm(() => {
43763
43990
  });
43764
43991
  logger = {
43765
43992
  activity: createLogger("activity"),
43993
+ support: createLogger("support"),
43766
43994
  changes: createLogger("changes"),
43767
43995
  client: createLogger("client"),
43768
43996
  wss: createLogger("wss"),
@@ -44227,6 +44455,23 @@ var init_dist3 = __esm(() => {
44227
44455
  return ScrapeApiFp(this.configuration).v4ScrapePost(requestParameters.v4ScrapePostRequest, options).then((request) => request(this.axios, this.basePath));
44228
44456
  }
44229
44457
  };
44458
+ SupportApi = class extends BaseAPI {
44459
+ v4SupportAttachmentsPost(requestParameters = {}, options) {
44460
+ return SupportApiFp(this.configuration).v4SupportAttachmentsPost(requestParameters.files, options).then((request) => request(this.axios, this.basePath));
44461
+ }
44462
+ v4SupportIssuesGet(requestParameters = {}, options) {
44463
+ return SupportApiFp(this.configuration).v4SupportIssuesGet(requestParameters.includeResolved, requestParameters.workflowId, options).then((request) => request(this.axios, this.basePath));
44464
+ }
44465
+ v4SupportIssuesIssueIdPatch(requestParameters, options) {
44466
+ return SupportApiFp(this.configuration).v4SupportIssuesIssueIdPatch(requestParameters.issueId, requestParameters.v4SupportIssuesIssueIdPatchRequest, options).then((request) => request(this.axios, this.basePath));
44467
+ }
44468
+ v4SupportIssuesPost(requestParameters, options) {
44469
+ return SupportApiFp(this.configuration).v4SupportIssuesPost(requestParameters.v4SupportIssuesPostRequest, options).then((request) => request(this.axios, this.basePath));
44470
+ }
44471
+ v4SupportStatesGet(options) {
44472
+ return SupportApiFp(this.configuration).v4SupportStatesGet(options).then((request) => request(this.axios, this.basePath));
44473
+ }
44474
+ };
44230
44475
  TemplatesApi = class extends BaseAPI {
44231
44476
  v4TemplatesFromWorkflowPost(requestParameters = {}, options) {
44232
44477
  return TemplatesApiFp(this.configuration).v4TemplatesFromWorkflowPost(requestParameters.saveFromWorkflowBody, options).then((request) => request(this.axios, this.basePath));
@@ -44522,8 +44767,9 @@ This is the main page content.`
44522
44767
  _Realtime.DEFAULT_RECONNECT_DELAY_MS = 5000;
44523
44768
  _Realtime.MAX_RECONNECT_DELAY_MS = 60000;
44524
44769
  Realtime = _Realtime;
44525
- debug9 = logger.templates;
44526
- debug10 = logger.usage;
44770
+ debug9 = logger.support;
44771
+ debug10 = logger.templates;
44772
+ debug11 = logger.usage;
44527
44773
  DEFAULT_POLLING_OPTIONS = {
44528
44774
  pollIntervalMs: 1e4,
44529
44775
  timeoutMs: 5 * 60 * 1000
@@ -44532,7 +44778,7 @@ This is the main page content.`
44532
44778
  ABORTED: "ABORTED",
44533
44779
  TIMEOUT: "TIMEOUT"
44534
44780
  };
44535
- debug11 = logger.variables;
44781
+ debug12 = logger.variables;
44536
44782
  JobStateEnum = {
44537
44783
  Finished: "FINISHED",
44538
44784
  Failed: "FAILED",
@@ -44562,7 +44808,7 @@ This is the main page content.`
44562
44808
  "STOPPED",
44563
44809
  "CANCELLED"
44564
44810
  ]);
44565
- debug12 = logger.workflow;
44811
+ debug13 = logger.workflow;
44566
44812
  });
44567
44813
 
44568
44814
  // src/client.ts
@@ -45011,6 +45257,23 @@ function shapeObservabilityWorkflows(workflows, limit) {
45011
45257
  function observabilityUptime(successfulRuns, failedRuns, reported) {
45012
45258
  return successfulRuns + failedRuns === 0 ? null : reported;
45013
45259
  }
45260
+ function supportTicketSkipMessage(reason) {
45261
+ return (reason && SUPPORT_TICKET_SKIP_MESSAGES[reason]) ?? "No support ticket was filed because this workflow isn't eligible for a support ticket right now.";
45262
+ }
45263
+ function supportTicketCreationDisabled(error) {
45264
+ if (!KadoaHttpException.isInstance(error))
45265
+ return;
45266
+ const httpError = error;
45267
+ if (httpError.httpStatus !== 403)
45268
+ return;
45269
+ const body = httpError.responseBody;
45270
+ if (typeof body !== "object" || body === null)
45271
+ return;
45272
+ const { code, reason } = body;
45273
+ if (code !== "SUPPORT_TICKET_CREATION_DISABLED")
45274
+ return;
45275
+ return typeof reason === "string" ? { reason } : {};
45276
+ }
45014
45277
  function registerTools(server, ctx, capabilities) {
45015
45278
  function withErrorHandling(name, handler) {
45016
45279
  return async (...args) => {
@@ -46324,6 +46587,65 @@ function registerTools(server, ctx, capabilities) {
46324
46587
  message: `${args.channelType} notification channel created successfully.`
46325
46588
  });
46326
46589
  }));
46590
+ server.registerTool("create_support_ticket", {
46591
+ description: "File a support ticket for one workflow so the Kadoa team investigates it. " + "Only file after the user has agreed. If the workflow already has an open ticket, that ticket is " + "returned instead of a duplicate. Filing never pauses the workflow.",
46592
+ inputSchema: {
46593
+ workflowId: string2().describe("The workflow the problem is about"),
46594
+ title: string2().describe("One-line summary of the problem"),
46595
+ description: string2().describe("What is wrong, what was observed, and what was already tried"),
46596
+ category: _enum(["bug", "feature", "workflow_issue", "template_issue", "integration", "billing", "data_diff"]).optional().describe("Support category; defaults to a workflow issue"),
46597
+ jobId: string2().optional().describe("The failing run's id (from list_workflow_runs). Required when filing from the Kadoa Assistant.")
46598
+ },
46599
+ annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: false }
46600
+ }, withErrorHandling("create_support_ticket", async (args) => {
46601
+ const copilotSessionId = ctx.principal.actor?.sessionId;
46602
+ let result;
46603
+ try {
46604
+ result = await ctx.client.support.createIssue({
46605
+ workflowId: args.workflowId,
46606
+ title: args.title,
46607
+ description: args.description,
46608
+ ...args.category && { category: args.category },
46609
+ ...args.jobId && { jobId: args.jobId },
46610
+ ...copilotSessionId && { copilotSessionId }
46611
+ });
46612
+ } catch (error) {
46613
+ const disabled = supportTicketCreationDisabled(error);
46614
+ if (!disabled)
46615
+ throw error;
46616
+ return jsonResult({
46617
+ success: false,
46618
+ status: "unavailable",
46619
+ reason: disabled.reason,
46620
+ message: "Support tickets can't be filed from the Kadoa Assistant for this workspace. " + "To get help with this workflow, contact Kadoa support through the dashboard."
46621
+ });
46622
+ }
46623
+ if (result.status === "existing") {
46624
+ const ticket = result.issueIdentifier ?? result.supportRequestId ?? "an open ticket";
46625
+ return jsonResult({
46626
+ success: true,
46627
+ status: "existing",
46628
+ supportRequestId: result.supportRequestId,
46629
+ issueIdentifier: result.issueIdentifier,
46630
+ message: `A support ticket is already open for this workflow: ${ticket}. No duplicate was filed.`
46631
+ });
46632
+ }
46633
+ if (result.status === "skipped") {
46634
+ return jsonResult({
46635
+ success: false,
46636
+ status: "skipped",
46637
+ supportRequestId: result.supportRequestId,
46638
+ reason: result.reason,
46639
+ message: supportTicketSkipMessage(result.reason)
46640
+ });
46641
+ }
46642
+ return jsonResult({
46643
+ success: true,
46644
+ status: "accepted",
46645
+ supportRequestId: result.supportRequestId,
46646
+ message: "Support ticket filed. The Kadoa team will investigate."
46647
+ });
46648
+ }));
46327
46649
  server.registerTool("delete_notification_channel", {
46328
46650
  description: "Delete a notification channel by ID. " + "Call first without confirmed=true to preview, then with confirmed=true after user agrees.",
46329
46651
  inputSchema: {
@@ -46882,7 +47204,7 @@ function registerTools(server, ctx, capabilities) {
46882
47204
  });
46883
47205
  }));
46884
47206
  }
46885
- var SchemaFieldShape, SchemaValidationAttributionShape, SchemaValidationPresenceRule, SchemaValidationUniquenessRule, SchemaValidationStringLengthRule, SchemaValidationStringFormatRule, SchemaValidationFieldRulesSchema, SchemaValidationRulesSchema, LocationSchema, MonitoringValueOperators, MonitoringValuelessOperators, MonitoringConditionOperatorSchema, MonitoringConditionSchema, MonitoringSchema, RESUMABLE_ASSISTANT_STATUSES, ACTIVE_ASSISTANT_STATUSES, IDLE_ASSISTANT_STATUSES, CLOSED_ASSISTANT_STATUSES, DASHBOARD_BASE_URL = "https://www.kadoa.com", WORKFLOW_AUDIT_WATCHED_KEYS, ACTIVITY_DEFAULT_LIMIT = 25, ACTIVITY_MAX_LIMIT = 200, HEALTH_SEVERITY;
47207
+ var SchemaFieldShape, SchemaValidationAttributionShape, SchemaValidationPresenceRule, SchemaValidationUniquenessRule, SchemaValidationStringLengthRule, SchemaValidationStringFormatRule, SchemaValidationFieldRulesSchema, SchemaValidationRulesSchema, LocationSchema, MonitoringValueOperators, MonitoringValuelessOperators, MonitoringConditionOperatorSchema, MonitoringConditionSchema, MonitoringSchema, RESUMABLE_ASSISTANT_STATUSES, ACTIVE_ASSISTANT_STATUSES, IDLE_ASSISTANT_STATUSES, CLOSED_ASSISTANT_STATUSES, DASHBOARD_BASE_URL = "https://www.kadoa.com", WORKFLOW_AUDIT_WATCHED_KEYS, ACTIVITY_DEFAULT_LIMIT = 25, ACTIVITY_MAX_LIMIT = 200, HEALTH_SEVERITY, SUPPORT_TICKET_SKIP_MESSAGES;
46886
47208
  var init_tools = __esm(() => {
46887
47209
  init_dist3();
46888
47210
  init_zod();
@@ -47077,6 +47399,11 @@ var init_tools = __esm(() => {
47077
47399
  "navigationMode"
47078
47400
  ];
47079
47401
  HEALTH_SEVERITY = { down: 0, degraded: 1, idle: 2, healthy: 3 };
47402
+ SUPPORT_TICKET_SKIP_MESSAGES = {
47403
+ RUN_JOB_REQUIRED: "No support ticket was filed because it must name the failing run. " + "Look the run up with list_workflow_runs and try again with its jobId.",
47404
+ RUN_PARKED_FOR_REVIEW: "No support ticket was filed because this run is already waiting for review by the Kadoa team.",
47405
+ RUN_HARD_BLOCKER_EVIDENCE_REQUIRED: "No support ticket was filed because the run does not show a failure the Kadoa team can act on yet."
47406
+ };
47080
47407
  });
47081
47408
 
47082
47409
  // package.json
@@ -47084,7 +47411,7 @@ var package_default;
47084
47411
  var init_package = __esm(() => {
47085
47412
  package_default = {
47086
47413
  name: "@kadoa/mcp",
47087
- version: "0.6.5",
47414
+ version: "0.6.6",
47088
47415
  description: "Kadoa MCP Server — manage workflows from Claude Desktop, Cursor, and other MCP clients",
47089
47416
  type: "module",
47090
47417
  main: "dist/index.js",
@@ -47110,7 +47437,7 @@ var init_package = __esm(() => {
47110
47437
  prepublishOnly: "bun run check-types && bun run test:unit && bun run build"
47111
47438
  },
47112
47439
  dependencies: {
47113
- "@kadoa/node-sdk": "^0.43.0",
47440
+ "@kadoa/node-sdk": "^0.44.0",
47114
47441
  "@modelcontextprotocol/client": "2.0.0",
47115
47442
  "@modelcontextprotocol/express": "2.0.0",
47116
47443
  "@modelcontextprotocol/node": "2.0.0",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kadoa/mcp",
3
- "version": "0.6.5",
3
+ "version": "0.6.6",
4
4
  "description": "Kadoa MCP Server — manage workflows from Claude Desktop, Cursor, and other MCP clients",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -26,7 +26,7 @@
26
26
  "prepublishOnly": "bun run check-types && bun run test:unit && bun run build"
27
27
  },
28
28
  "dependencies": {
29
- "@kadoa/node-sdk": "^0.43.0",
29
+ "@kadoa/node-sdk": "^0.44.0",
30
30
  "@modelcontextprotocol/client": "2.0.0",
31
31
  "@modelcontextprotocol/express": "2.0.0",
32
32
  "@modelcontextprotocol/node": "2.0.0",