@debugbundle/mcp 0.1.6 → 0.1.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/main.cjs +754 -113
- package/package.json +1 -1
package/dist/main.cjs
CHANGED
|
@@ -14470,6 +14470,7 @@ var AlertConditionTypeSchema = external_exports.enum([
|
|
|
14470
14470
|
var AlertSchema = external_exports.object({
|
|
14471
14471
|
alert_id: external_exports.string(),
|
|
14472
14472
|
project_id: external_exports.string(),
|
|
14473
|
+
created_by_user_id: external_exports.string(),
|
|
14473
14474
|
service_id: external_exports.string().nullable(),
|
|
14474
14475
|
channel: AlertChannelSchema,
|
|
14475
14476
|
condition_type: AlertConditionTypeSchema,
|
|
@@ -14595,7 +14596,7 @@ function createAlertApi(client) {
|
|
|
14595
14596
|
return expectAlert(
|
|
14596
14597
|
client.request({
|
|
14597
14598
|
method: "PATCH",
|
|
14598
|
-
path: `/v1/alerts/${input.alertId}`,
|
|
14599
|
+
path: `/v1/alerts/${input.alertId}${buildQuery({ project_id: input.projectId })}`,
|
|
14599
14600
|
bearerToken: input.bearerToken,
|
|
14600
14601
|
body
|
|
14601
14602
|
})
|
|
@@ -14604,7 +14605,7 @@ function createAlertApi(client) {
|
|
|
14604
14605
|
async deleteAlert(input) {
|
|
14605
14606
|
const response = await client.request({
|
|
14606
14607
|
method: "DELETE",
|
|
14607
|
-
path: `/v1/alerts/${input.alertId}`,
|
|
14608
|
+
path: `/v1/alerts/${input.alertId}${buildQuery({ project_id: input.projectId })}`,
|
|
14608
14609
|
bearerToken: input.bearerToken
|
|
14609
14610
|
});
|
|
14610
14611
|
if (response.status < 200 || response.status >= 300) {
|
|
@@ -14643,9 +14644,9 @@ var BillingSummarySchema = external_exports.object({
|
|
|
14643
14644
|
monthly_raw_ingested_events: BillingUsageMetricSchema,
|
|
14644
14645
|
retained_bundle_cap: BillingUsageMetricSchema,
|
|
14645
14646
|
monthly_remote_activations: BillingUsageMetricSchema,
|
|
14646
|
-
monthly_alert_deliveries: BillingUsageMetricSchema
|
|
14647
|
-
|
|
14648
|
-
|
|
14647
|
+
monthly_alert_deliveries: BillingUsageMetricSchema,
|
|
14648
|
+
monthly_webhook_deliveries: BillingUsageMetricSchema
|
|
14649
|
+
}).strict()
|
|
14649
14650
|
}).strict();
|
|
14650
14651
|
var BillingSummaryResponseSchema = external_exports.object({
|
|
14651
14652
|
billing: BillingSummarySchema
|
|
@@ -14758,6 +14759,7 @@ var ProjectGitHubRepoSchema = external_exports.object({
|
|
|
14758
14759
|
var GitHubDispatchRuleSchema = external_exports.object({
|
|
14759
14760
|
rule_id: external_exports.string(),
|
|
14760
14761
|
project_id: external_exports.string(),
|
|
14762
|
+
created_by_user_id: external_exports.string(),
|
|
14761
14763
|
name: external_exports.string(),
|
|
14762
14764
|
enabled: external_exports.boolean(),
|
|
14763
14765
|
event_types: external_exports.array(external_exports.string().min(1)),
|
|
@@ -14776,7 +14778,7 @@ var GitHubDispatchDeliverySchema = external_exports.object({
|
|
|
14776
14778
|
rule_name: external_exports.string(),
|
|
14777
14779
|
incident_id: external_exports.string(),
|
|
14778
14780
|
incident_title: external_exports.string(),
|
|
14779
|
-
status: external_exports.enum(["pending", "retrying", "delivered", "failed"]),
|
|
14781
|
+
status: external_exports.enum(["pending", "retrying", "delivered", "failed", "skipped"]),
|
|
14780
14782
|
attempt_count: external_exports.number().int(),
|
|
14781
14783
|
last_attempt_at: external_exports.string().nullable(),
|
|
14782
14784
|
last_error: external_exports.string().nullable(),
|
|
@@ -14913,19 +14915,21 @@ async function expectNoContent(responsePromise) {
|
|
|
14913
14915
|
function createGitHubManagementApi(client) {
|
|
14914
14916
|
return {
|
|
14915
14917
|
async getInstallation(input) {
|
|
14918
|
+
const query = input.projectId === void 0 ? "" : `?project_id=${encodeURIComponent(input.projectId)}`;
|
|
14916
14919
|
return expectInstallation(
|
|
14917
14920
|
client.request({
|
|
14918
14921
|
method: "GET",
|
|
14919
|
-
path:
|
|
14922
|
+
path: `/v1/github/installation${query}`,
|
|
14920
14923
|
bearerToken: input.bearerToken
|
|
14921
14924
|
})
|
|
14922
14925
|
);
|
|
14923
14926
|
},
|
|
14924
14927
|
async listRepositories(input) {
|
|
14928
|
+
const query = input.projectId === void 0 ? "" : `?project_id=${encodeURIComponent(input.projectId)}`;
|
|
14925
14929
|
return expectRepositories(
|
|
14926
14930
|
client.request({
|
|
14927
14931
|
method: "GET",
|
|
14928
|
-
path:
|
|
14932
|
+
path: `/v1/github/repositories${query}`,
|
|
14929
14933
|
bearerToken: input.bearerToken
|
|
14930
14934
|
})
|
|
14931
14935
|
);
|
|
@@ -15059,6 +15063,11 @@ var ProjectMetricsSchema = external_exports.object({
|
|
|
15059
15063
|
var ProjectRecordSchema = external_exports.object({
|
|
15060
15064
|
project_id: external_exports.string(),
|
|
15061
15065
|
organization_id: external_exports.string(),
|
|
15066
|
+
owner_user_id: external_exports.string(),
|
|
15067
|
+
owner_email: external_exports.string().email(),
|
|
15068
|
+
relationship: external_exports.enum(["owned", "shared"]),
|
|
15069
|
+
sharing_state: external_exports.enum(["private", "shared_by_you", "shared_with_you"]),
|
|
15070
|
+
effective_role: external_exports.enum(["owner", "admin", "member"]),
|
|
15062
15071
|
name: external_exports.string(),
|
|
15063
15072
|
slug: external_exports.string(),
|
|
15064
15073
|
environment_default: external_exports.string(),
|
|
@@ -15076,6 +15085,11 @@ var ProjectCreateResponseSchema = external_exports.object({
|
|
|
15076
15085
|
var DeletedProjectRecordSchema = external_exports.object({
|
|
15077
15086
|
project_id: external_exports.string(),
|
|
15078
15087
|
organization_id: external_exports.string(),
|
|
15088
|
+
owner_user_id: external_exports.string(),
|
|
15089
|
+
owner_email: external_exports.string().email(),
|
|
15090
|
+
relationship: external_exports.enum(["owned", "shared"]),
|
|
15091
|
+
sharing_state: external_exports.enum(["private", "shared_by_you", "shared_with_you"]),
|
|
15092
|
+
effective_role: external_exports.enum(["owner", "admin", "member"]),
|
|
15079
15093
|
name: external_exports.string(),
|
|
15080
15094
|
slug: external_exports.string(),
|
|
15081
15095
|
environment_default: external_exports.string(),
|
|
@@ -15226,6 +15240,34 @@ var IncidentSchema = external_exports.object({
|
|
|
15226
15240
|
matched_fields: external_exports.array(external_exports.string()),
|
|
15227
15241
|
incident_reason: IncidentReasonSchema.optional()
|
|
15228
15242
|
}).strict();
|
|
15243
|
+
var ImprovementSchema = external_exports.object({
|
|
15244
|
+
improvement_id: external_exports.string(),
|
|
15245
|
+
project_id: external_exports.string(),
|
|
15246
|
+
project_name: external_exports.string(),
|
|
15247
|
+
project_slug: external_exports.string(),
|
|
15248
|
+
service_id: external_exports.string().nullable(),
|
|
15249
|
+
service_name: external_exports.string(),
|
|
15250
|
+
service_runtime: external_exports.string().nullable(),
|
|
15251
|
+
service_framework: external_exports.string().nullable(),
|
|
15252
|
+
environment: external_exports.string(),
|
|
15253
|
+
kind: external_exports.enum(["warning_hotspot", "slow_request", "request_failure_pattern", "recurring_incident", "post_deploy_regression"]),
|
|
15254
|
+
status: external_exports.enum(["open", "resolved", "snoozed"]),
|
|
15255
|
+
severity: external_exports.enum(["low", "medium", "high", "critical"]),
|
|
15256
|
+
confidence: external_exports.number(),
|
|
15257
|
+
fingerprint: external_exports.string(),
|
|
15258
|
+
title: external_exports.string(),
|
|
15259
|
+
summary: external_exports.string(),
|
|
15260
|
+
occurrence_count: external_exports.number().int(),
|
|
15261
|
+
evidence: external_exports.record(external_exports.unknown()),
|
|
15262
|
+
first_detected_at: external_exports.string(),
|
|
15263
|
+
last_detected_at: external_exports.string(),
|
|
15264
|
+
resolved_at: external_exports.string().nullable(),
|
|
15265
|
+
snoozed_until: external_exports.string().nullable(),
|
|
15266
|
+
bundle_generation_number: external_exports.number().int(),
|
|
15267
|
+
bundle_created_at: external_exports.string().nullable(),
|
|
15268
|
+
bundle_updated_at: external_exports.string().nullable(),
|
|
15269
|
+
bundle_failure_reason: external_exports.string().nullable()
|
|
15270
|
+
}).strict();
|
|
15229
15271
|
var ServiceSchema = external_exports.object({
|
|
15230
15272
|
service_id: external_exports.string(),
|
|
15231
15273
|
project_id: external_exports.string(),
|
|
@@ -15248,6 +15290,9 @@ var IncidentsResponseSchema = external_exports.object({
|
|
|
15248
15290
|
var IncidentResponseSchema = external_exports.object({
|
|
15249
15291
|
incident: IncidentSchema
|
|
15250
15292
|
}).strict();
|
|
15293
|
+
var ImprovementResponseSchema = external_exports.object({
|
|
15294
|
+
improvement: ImprovementSchema
|
|
15295
|
+
}).strict();
|
|
15251
15296
|
var IncidentContextArtifactSchema = external_exports.object({
|
|
15252
15297
|
status: external_exports.enum(["ready", "pending", "failed"]),
|
|
15253
15298
|
body: external_exports.unknown().optional(),
|
|
@@ -15318,6 +15363,10 @@ var IncidentContextSchema = external_exports.object({
|
|
|
15318
15363
|
var ServicesResponseSchema = external_exports.object({
|
|
15319
15364
|
services: external_exports.array(ServiceSchema)
|
|
15320
15365
|
}).strict();
|
|
15366
|
+
var ImprovementsResponseSchema = external_exports.object({
|
|
15367
|
+
improvements: external_exports.array(ImprovementSchema),
|
|
15368
|
+
next_cursor: external_exports.string().nullable().optional()
|
|
15369
|
+
}).strict();
|
|
15321
15370
|
var LogsResponseSchema = external_exports.object({
|
|
15322
15371
|
logs: external_exports.array(LogSchema),
|
|
15323
15372
|
next_cursor: external_exports.string().nullable().optional()
|
|
@@ -15516,6 +15565,108 @@ function createRetrievalApi(client) {
|
|
|
15516
15565
|
bearerToken: input.bearerToken
|
|
15517
15566
|
})
|
|
15518
15567
|
);
|
|
15568
|
+
},
|
|
15569
|
+
async listImprovements(input) {
|
|
15570
|
+
const query = new URLSearchParams();
|
|
15571
|
+
if (input.projectId !== void 0) {
|
|
15572
|
+
query.set("project_id", input.projectId);
|
|
15573
|
+
}
|
|
15574
|
+
if (input.environment !== void 0) {
|
|
15575
|
+
query.set("environment", input.environment);
|
|
15576
|
+
}
|
|
15577
|
+
if (input.service !== void 0) {
|
|
15578
|
+
query.set("service", input.service);
|
|
15579
|
+
}
|
|
15580
|
+
if (input.status !== void 0) {
|
|
15581
|
+
query.set("status", input.status);
|
|
15582
|
+
}
|
|
15583
|
+
if (input.severity !== void 0) {
|
|
15584
|
+
query.set("severity", input.severity);
|
|
15585
|
+
}
|
|
15586
|
+
if (input.kind !== void 0) {
|
|
15587
|
+
query.set("kind", input.kind);
|
|
15588
|
+
}
|
|
15589
|
+
if (input.cursor !== void 0) {
|
|
15590
|
+
query.set("cursor", input.cursor);
|
|
15591
|
+
}
|
|
15592
|
+
if (input.limit !== void 0) {
|
|
15593
|
+
query.set("limit", String(input.limit));
|
|
15594
|
+
}
|
|
15595
|
+
const path = query.size > 0 ? `/v1/improvements?${query.toString()}` : "/v1/improvements";
|
|
15596
|
+
const parsed = await expectParsed(
|
|
15597
|
+
client.request({
|
|
15598
|
+
method: "GET",
|
|
15599
|
+
path,
|
|
15600
|
+
bearerToken: input.bearerToken
|
|
15601
|
+
}),
|
|
15602
|
+
ImprovementsResponseSchema
|
|
15603
|
+
);
|
|
15604
|
+
return {
|
|
15605
|
+
improvements: parsed.improvements,
|
|
15606
|
+
next_cursor: parsed.next_cursor ?? null
|
|
15607
|
+
};
|
|
15608
|
+
},
|
|
15609
|
+
async getImprovement(input) {
|
|
15610
|
+
const parsed = await expectParsed(
|
|
15611
|
+
client.request({
|
|
15612
|
+
method: "GET",
|
|
15613
|
+
path: `/v1/improvements/${input.improvementId}`,
|
|
15614
|
+
bearerToken: input.bearerToken
|
|
15615
|
+
}),
|
|
15616
|
+
ImprovementResponseSchema
|
|
15617
|
+
);
|
|
15618
|
+
return parsed.improvement;
|
|
15619
|
+
},
|
|
15620
|
+
async resolveImprovement(input) {
|
|
15621
|
+
const parsed = await expectParsed(
|
|
15622
|
+
client.request({
|
|
15623
|
+
method: "POST",
|
|
15624
|
+
path: `/v1/improvements/${input.improvementId}/resolve`,
|
|
15625
|
+
bearerToken: input.bearerToken
|
|
15626
|
+
}),
|
|
15627
|
+
ImprovementResponseSchema
|
|
15628
|
+
);
|
|
15629
|
+
return parsed.improvement;
|
|
15630
|
+
},
|
|
15631
|
+
async reopenImprovement(input) {
|
|
15632
|
+
const parsed = await expectParsed(
|
|
15633
|
+
client.request({
|
|
15634
|
+
method: "POST",
|
|
15635
|
+
path: `/v1/improvements/${input.improvementId}/reopen`,
|
|
15636
|
+
bearerToken: input.bearerToken
|
|
15637
|
+
}),
|
|
15638
|
+
ImprovementResponseSchema
|
|
15639
|
+
);
|
|
15640
|
+
return parsed.improvement;
|
|
15641
|
+
},
|
|
15642
|
+
async snoozeImprovement(input) {
|
|
15643
|
+
const parsed = await expectParsed(
|
|
15644
|
+
client.request({
|
|
15645
|
+
method: "POST",
|
|
15646
|
+
path: `/v1/improvements/${input.improvementId}/snooze`,
|
|
15647
|
+
bearerToken: input.bearerToken,
|
|
15648
|
+
body: { snoozed_until: input.snoozedUntil }
|
|
15649
|
+
}),
|
|
15650
|
+
ImprovementResponseSchema
|
|
15651
|
+
);
|
|
15652
|
+
return parsed.improvement;
|
|
15653
|
+
},
|
|
15654
|
+
async getImprovementBundle(input) {
|
|
15655
|
+
return await expectParsed(
|
|
15656
|
+
client.request({
|
|
15657
|
+
method: "GET",
|
|
15658
|
+
path: `/v1/projects/${input.projectId}/improvements/${input.improvementId}/bundle`,
|
|
15659
|
+
bearerToken: input.bearerToken
|
|
15660
|
+
}),
|
|
15661
|
+
external_exports.union([
|
|
15662
|
+
PendingStatusSchema,
|
|
15663
|
+
BundleSchema,
|
|
15664
|
+
external_exports.object({
|
|
15665
|
+
status: external_exports.literal("failed"),
|
|
15666
|
+
reason: external_exports.string()
|
|
15667
|
+
}).strict()
|
|
15668
|
+
])
|
|
15669
|
+
);
|
|
15519
15670
|
}
|
|
15520
15671
|
};
|
|
15521
15672
|
}
|
|
@@ -15849,6 +16000,7 @@ var WebhookFiltersSchema = external_exports.object({
|
|
|
15849
16000
|
var WebhookSchema = external_exports.object({
|
|
15850
16001
|
webhook_id: external_exports.string(),
|
|
15851
16002
|
project_id: external_exports.string(),
|
|
16003
|
+
created_by_user_id: external_exports.string(),
|
|
15852
16004
|
url: external_exports.string(),
|
|
15853
16005
|
events: external_exports.array(WebhookEventTypeSchema),
|
|
15854
16006
|
filters: WebhookFiltersSchema,
|
|
@@ -16019,7 +16171,7 @@ function createWebhookApi(client) {
|
|
|
16019
16171
|
return expectWebhook(
|
|
16020
16172
|
client.request({
|
|
16021
16173
|
method: "GET",
|
|
16022
|
-
path: `/v1/webhooks/${input.webhookId}`,
|
|
16174
|
+
path: `/v1/webhooks/${input.webhookId}${buildQuery3({ project_id: input.projectId })}`,
|
|
16023
16175
|
bearerToken: input.bearerToken
|
|
16024
16176
|
})
|
|
16025
16177
|
);
|
|
@@ -16041,7 +16193,7 @@ function createWebhookApi(client) {
|
|
|
16041
16193
|
return expectWebhook(
|
|
16042
16194
|
client.request({
|
|
16043
16195
|
method: "PATCH",
|
|
16044
|
-
path: `/v1/webhooks/${input.webhookId}`,
|
|
16196
|
+
path: `/v1/webhooks/${input.webhookId}${buildQuery3({ project_id: input.projectId })}`,
|
|
16045
16197
|
bearerToken: input.bearerToken,
|
|
16046
16198
|
body
|
|
16047
16199
|
})
|
|
@@ -16050,7 +16202,7 @@ function createWebhookApi(client) {
|
|
|
16050
16202
|
async deleteWebhook(input) {
|
|
16051
16203
|
const response = await client.request({
|
|
16052
16204
|
method: "DELETE",
|
|
16053
|
-
path: `/v1/webhooks/${input.webhookId}`,
|
|
16205
|
+
path: `/v1/webhooks/${input.webhookId}${buildQuery3({ project_id: input.projectId })}`,
|
|
16054
16206
|
bearerToken: input.bearerToken
|
|
16055
16207
|
});
|
|
16056
16208
|
if (response.status < 200 || response.status >= 300) {
|
|
@@ -16068,7 +16220,7 @@ function createWebhookApi(client) {
|
|
|
16068
16220
|
return expectWebhookTestDelivery(
|
|
16069
16221
|
client.request({
|
|
16070
16222
|
method: "POST",
|
|
16071
|
-
path: `/v1/webhooks/${input.webhookId}/test`,
|
|
16223
|
+
path: `/v1/webhooks/${input.webhookId}/test${buildQuery3({ project_id: input.projectId })}`,
|
|
16072
16224
|
bearerToken: input.bearerToken,
|
|
16073
16225
|
body
|
|
16074
16226
|
})
|
|
@@ -16078,7 +16230,7 @@ function createWebhookApi(client) {
|
|
|
16078
16230
|
return expectWebhookDeliveries(
|
|
16079
16231
|
client.request({
|
|
16080
16232
|
method: "GET",
|
|
16081
|
-
path: `/v1/webhooks/${input.webhookId}/deliveries${buildQuery3({ limit: input.limit })}`,
|
|
16233
|
+
path: `/v1/webhooks/${input.webhookId}/deliveries${buildQuery3({ project_id: input.projectId, limit: input.limit })}`,
|
|
16082
16234
|
bearerToken: input.bearerToken
|
|
16083
16235
|
})
|
|
16084
16236
|
);
|
|
@@ -16087,7 +16239,7 @@ function createWebhookApi(client) {
|
|
|
16087
16239
|
return expectRetryDelivery(
|
|
16088
16240
|
client.request({
|
|
16089
16241
|
method: "POST",
|
|
16090
|
-
path: `/v1/webhooks/${input.webhookId}/deliveries/${input.deliveryId}/retry`,
|
|
16242
|
+
path: `/v1/webhooks/${input.webhookId}/deliveries/${input.deliveryId}/retry${buildQuery3({ project_id: input.projectId })}`,
|
|
16091
16243
|
bearerToken: input.bearerToken,
|
|
16092
16244
|
body: {}
|
|
16093
16245
|
})
|
|
@@ -16298,6 +16450,7 @@ var CapturePolicyOverridesSchema = external_exports.object({
|
|
|
16298
16450
|
immediate_client_error_statuses: ImmediateClientErrorStatusesSchema.nullable()
|
|
16299
16451
|
});
|
|
16300
16452
|
var CapturePolicyResponseSchema = external_exports.object({
|
|
16453
|
+
access_mode: external_exports.enum(["manage", "preview"]),
|
|
16301
16454
|
policy: ResolvedCapturePolicySchema,
|
|
16302
16455
|
overrides: CapturePolicyOverridesSchema
|
|
16303
16456
|
});
|
|
@@ -16395,6 +16548,29 @@ function getRequestAnomalyThreshold(input) {
|
|
|
16395
16548
|
return null;
|
|
16396
16549
|
}
|
|
16397
16550
|
|
|
16551
|
+
// ../../packages/shared-types/src/improvement-settings.ts
|
|
16552
|
+
var ImprovementBundleSensitivityValues = [
|
|
16553
|
+
"high_confidence",
|
|
16554
|
+
"balanced",
|
|
16555
|
+
"verbose"
|
|
16556
|
+
];
|
|
16557
|
+
var ImprovementBundleSensitivitySchema = external_exports.enum(ImprovementBundleSensitivityValues);
|
|
16558
|
+
var ImprovementSettingsSchema = external_exports.object({
|
|
16559
|
+
automated_improvement_bundles_enabled: external_exports.boolean(),
|
|
16560
|
+
improvement_bundle_sensitivity: ImprovementBundleSensitivitySchema
|
|
16561
|
+
});
|
|
16562
|
+
var ImprovementSettingsResponseSchema = external_exports.object({
|
|
16563
|
+
access_mode: external_exports.enum(["manage", "preview"]),
|
|
16564
|
+
cloud_automation_available: external_exports.boolean(),
|
|
16565
|
+
settings: ImprovementSettingsSchema
|
|
16566
|
+
});
|
|
16567
|
+
var ImprovementSettingsUpdateSchema = external_exports.object({
|
|
16568
|
+
automated_improvement_bundles_enabled: external_exports.boolean().optional(),
|
|
16569
|
+
improvement_bundle_sensitivity: ImprovementBundleSensitivitySchema.optional()
|
|
16570
|
+
}).refine((input) => Object.keys(input).length > 0, {
|
|
16571
|
+
message: "At least one improvement settings field must be provided."
|
|
16572
|
+
});
|
|
16573
|
+
|
|
16398
16574
|
// ../../packages/shared-types/src/index.ts
|
|
16399
16575
|
function createUuidV4() {
|
|
16400
16576
|
const cryptoSource = globalThis.crypto;
|
|
@@ -17661,6 +17837,57 @@ function createCapturePolicyApi(httpClient) {
|
|
|
17661
17837
|
};
|
|
17662
17838
|
}
|
|
17663
17839
|
|
|
17840
|
+
// ../cli/src/improvement-settings-commands.ts
|
|
17841
|
+
var ImprovementSettingsApiError = class extends Error {
|
|
17842
|
+
status;
|
|
17843
|
+
constructor(status, message) {
|
|
17844
|
+
super(message);
|
|
17845
|
+
this.name = "ImprovementSettingsApiError";
|
|
17846
|
+
this.status = status;
|
|
17847
|
+
}
|
|
17848
|
+
};
|
|
17849
|
+
function toApiError2(status, body, fallback) {
|
|
17850
|
+
if (typeof body === "object" && body !== null && "error" in body && typeof body.error === "string") {
|
|
17851
|
+
return new ImprovementSettingsApiError(status, body.error);
|
|
17852
|
+
}
|
|
17853
|
+
return new ImprovementSettingsApiError(status, fallback);
|
|
17854
|
+
}
|
|
17855
|
+
function createImprovementSettingsApi(httpClient) {
|
|
17856
|
+
return {
|
|
17857
|
+
async getImprovementSettings(input) {
|
|
17858
|
+
const response = await httpClient.request({
|
|
17859
|
+
method: "GET",
|
|
17860
|
+
path: `/v1/projects/${encodeURIComponent(input.projectId)}/improvement-settings`,
|
|
17861
|
+
bearerToken: input.bearerToken
|
|
17862
|
+
});
|
|
17863
|
+
if (response.status !== 200) {
|
|
17864
|
+
throw toApiError2(response.status, response.body, "Failed to get improvement settings.");
|
|
17865
|
+
}
|
|
17866
|
+
const parsed = ImprovementSettingsResponseSchema.safeParse(response.body);
|
|
17867
|
+
if (!parsed.success) {
|
|
17868
|
+
throw new ImprovementSettingsApiError(500, "Invalid improvement settings response.");
|
|
17869
|
+
}
|
|
17870
|
+
return parsed.data;
|
|
17871
|
+
},
|
|
17872
|
+
async updateImprovementSettings(input) {
|
|
17873
|
+
const response = await httpClient.request({
|
|
17874
|
+
method: "PATCH",
|
|
17875
|
+
path: `/v1/projects/${encodeURIComponent(input.projectId)}/improvement-settings`,
|
|
17876
|
+
bearerToken: input.bearerToken,
|
|
17877
|
+
body: input.update
|
|
17878
|
+
});
|
|
17879
|
+
if (response.status !== 200) {
|
|
17880
|
+
throw toApiError2(response.status, response.body, "Failed to update improvement settings.");
|
|
17881
|
+
}
|
|
17882
|
+
const parsed = ImprovementSettingsResponseSchema.safeParse(response.body);
|
|
17883
|
+
if (!parsed.success) {
|
|
17884
|
+
throw new ImprovementSettingsApiError(500, "Invalid improvement settings response.");
|
|
17885
|
+
}
|
|
17886
|
+
return parsed.data;
|
|
17887
|
+
}
|
|
17888
|
+
};
|
|
17889
|
+
}
|
|
17890
|
+
|
|
17664
17891
|
// ../cli/src/member-commands.ts
|
|
17665
17892
|
var MemberApiError = class extends Error {
|
|
17666
17893
|
status;
|
|
@@ -17672,7 +17899,7 @@ var MemberApiError = class extends Error {
|
|
|
17672
17899
|
this.code = code;
|
|
17673
17900
|
}
|
|
17674
17901
|
};
|
|
17675
|
-
function
|
|
17902
|
+
function toApiError3(status, body) {
|
|
17676
17903
|
if (typeof body === "object" && body !== null && "error" in body && typeof body.error === "string") {
|
|
17677
17904
|
return new MemberApiError(status, body.error);
|
|
17678
17905
|
}
|
|
@@ -17683,68 +17910,68 @@ function createMemberApi(httpClient) {
|
|
|
17683
17910
|
async listMembers(input) {
|
|
17684
17911
|
const response = await httpClient.request({
|
|
17685
17912
|
method: "GET",
|
|
17686
|
-
path:
|
|
17913
|
+
path: `/v1/projects/${input.projectId}/members`,
|
|
17687
17914
|
bearerToken: input.bearerToken
|
|
17688
17915
|
});
|
|
17689
17916
|
if (response.status !== 200) {
|
|
17690
|
-
throw
|
|
17917
|
+
throw toApiError3(response.status, response.body);
|
|
17691
17918
|
}
|
|
17692
17919
|
return response.body;
|
|
17693
17920
|
},
|
|
17694
17921
|
async listInvites(input) {
|
|
17695
17922
|
const response = await httpClient.request({
|
|
17696
17923
|
method: "GET",
|
|
17697
|
-
path:
|
|
17924
|
+
path: `/v1/projects/${input.projectId}/invites`,
|
|
17698
17925
|
bearerToken: input.bearerToken
|
|
17699
17926
|
});
|
|
17700
17927
|
if (response.status !== 200) {
|
|
17701
|
-
throw
|
|
17928
|
+
throw toApiError3(response.status, response.body);
|
|
17702
17929
|
}
|
|
17703
17930
|
return response.body;
|
|
17704
17931
|
},
|
|
17705
17932
|
async inviteMember(input) {
|
|
17706
17933
|
const response = await httpClient.request({
|
|
17707
17934
|
method: "POST",
|
|
17708
|
-
path:
|
|
17935
|
+
path: `/v1/projects/${input.projectId}/invite`,
|
|
17709
17936
|
bearerToken: input.bearerToken,
|
|
17710
17937
|
body: { email: input.email, role: input.role }
|
|
17711
17938
|
});
|
|
17712
17939
|
if (response.status !== 201) {
|
|
17713
|
-
throw
|
|
17940
|
+
throw toApiError3(response.status, response.body);
|
|
17714
17941
|
}
|
|
17715
17942
|
return response.body;
|
|
17716
17943
|
},
|
|
17717
17944
|
async cancelInvite(input) {
|
|
17718
17945
|
const response = await httpClient.request({
|
|
17719
17946
|
method: "DELETE",
|
|
17720
|
-
path: `/v1/
|
|
17947
|
+
path: `/v1/projects/${input.projectId}/invites/${input.inviteId}`,
|
|
17721
17948
|
bearerToken: input.bearerToken
|
|
17722
17949
|
});
|
|
17723
17950
|
if (response.status !== 200) {
|
|
17724
|
-
throw
|
|
17951
|
+
throw toApiError3(response.status, response.body);
|
|
17725
17952
|
}
|
|
17726
17953
|
return response.body;
|
|
17727
17954
|
},
|
|
17728
17955
|
async updateMemberRole(input) {
|
|
17729
17956
|
const response = await httpClient.request({
|
|
17730
17957
|
method: "PATCH",
|
|
17731
|
-
path: `/v1/
|
|
17958
|
+
path: `/v1/projects/${input.projectId}/members/${input.userId}`,
|
|
17732
17959
|
bearerToken: input.bearerToken,
|
|
17733
17960
|
body: { role: input.role }
|
|
17734
17961
|
});
|
|
17735
17962
|
if (response.status !== 200) {
|
|
17736
|
-
throw
|
|
17963
|
+
throw toApiError3(response.status, response.body);
|
|
17737
17964
|
}
|
|
17738
17965
|
return response.body;
|
|
17739
17966
|
},
|
|
17740
17967
|
async removeMember(input) {
|
|
17741
17968
|
const response = await httpClient.request({
|
|
17742
17969
|
method: "DELETE",
|
|
17743
|
-
path: `/v1/
|
|
17970
|
+
path: `/v1/projects/${input.projectId}/members/${input.userId}`,
|
|
17744
17971
|
bearerToken: input.bearerToken
|
|
17745
17972
|
});
|
|
17746
17973
|
if (response.status !== 200) {
|
|
17747
|
-
throw
|
|
17974
|
+
throw toApiError3(response.status, response.body);
|
|
17748
17975
|
}
|
|
17749
17976
|
return response.body;
|
|
17750
17977
|
}
|
|
@@ -17762,7 +17989,7 @@ var ProbeApiError = class extends Error {
|
|
|
17762
17989
|
this.code = code;
|
|
17763
17990
|
}
|
|
17764
17991
|
};
|
|
17765
|
-
function
|
|
17992
|
+
function toApiError4(status, body) {
|
|
17766
17993
|
if (typeof body === "object" && body !== null && "error" in body && typeof body.error === "string") {
|
|
17767
17994
|
return new ProbeApiError(status, body.error);
|
|
17768
17995
|
}
|
|
@@ -17793,7 +18020,7 @@ function createProbeApi(httpClient) {
|
|
|
17793
18020
|
body
|
|
17794
18021
|
});
|
|
17795
18022
|
if (response.status !== 201) {
|
|
17796
|
-
throw
|
|
18023
|
+
throw toApiError4(response.status, response.body);
|
|
17797
18024
|
}
|
|
17798
18025
|
return response.body;
|
|
17799
18026
|
},
|
|
@@ -17804,7 +18031,7 @@ function createProbeApi(httpClient) {
|
|
|
17804
18031
|
bearerToken: input.bearerToken
|
|
17805
18032
|
});
|
|
17806
18033
|
if (response.status !== 200) {
|
|
17807
|
-
throw
|
|
18034
|
+
throw toApiError4(response.status, response.body);
|
|
17808
18035
|
}
|
|
17809
18036
|
return response.body;
|
|
17810
18037
|
},
|
|
@@ -17816,7 +18043,7 @@ function createProbeApi(httpClient) {
|
|
|
17816
18043
|
body: { activation_id: input.activationId }
|
|
17817
18044
|
});
|
|
17818
18045
|
if (response.status !== 200) {
|
|
17819
|
-
throw
|
|
18046
|
+
throw toApiError4(response.status, response.body);
|
|
17820
18047
|
}
|
|
17821
18048
|
return response.body;
|
|
17822
18049
|
}
|
|
@@ -19028,6 +19255,181 @@ var STORAGE_SCHEMA_MIGRATIONS = [
|
|
|
19028
19255
|
statements: [
|
|
19029
19256
|
"ALTER TABLE capture_policies ADD COLUMN IF NOT EXISTS immediate_client_error_statuses jsonb"
|
|
19030
19257
|
]
|
|
19258
|
+
}),
|
|
19259
|
+
defineStorageSchemaMigration({
|
|
19260
|
+
id: "202605150001_add_user_avatar_columns",
|
|
19261
|
+
description: "Add cached user avatar metadata for GitHub and Gravatar profile images.",
|
|
19262
|
+
statements: [
|
|
19263
|
+
"ALTER TABLE users ADD COLUMN IF NOT EXISTS avatar_source text",
|
|
19264
|
+
"ALTER TABLE users ADD COLUMN IF NOT EXISTS avatar_object_key text",
|
|
19265
|
+
"ALTER TABLE users ADD COLUMN IF NOT EXISTS avatar_content_type text",
|
|
19266
|
+
"ALTER TABLE users ADD COLUMN IF NOT EXISTS avatar_updated_at timestamptz"
|
|
19267
|
+
]
|
|
19268
|
+
}),
|
|
19269
|
+
defineStorageSchemaMigration({
|
|
19270
|
+
id: "202605170001_add_alert_email_digest_queue",
|
|
19271
|
+
description: "Add queued email alert digests and digest items for fixed-window alert batching.",
|
|
19272
|
+
statements: [
|
|
19273
|
+
`
|
|
19274
|
+
CREATE TABLE IF NOT EXISTS alert_email_digests (
|
|
19275
|
+
id uuid PRIMARY KEY,
|
|
19276
|
+
project_id uuid NOT NULL REFERENCES projects(id) ON DELETE CASCADE,
|
|
19277
|
+
recipient text NOT NULL,
|
|
19278
|
+
status text NOT NULL,
|
|
19279
|
+
next_attempt_at timestamptz,
|
|
19280
|
+
claimed_at timestamptz,
|
|
19281
|
+
last_error text,
|
|
19282
|
+
delivered_at timestamptz,
|
|
19283
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
19284
|
+
updated_at timestamptz NOT NULL DEFAULT now()
|
|
19285
|
+
)
|
|
19286
|
+
`,
|
|
19287
|
+
`
|
|
19288
|
+
CREATE UNIQUE INDEX IF NOT EXISTS alert_email_digests_project_recipient_pending_idx
|
|
19289
|
+
ON alert_email_digests (project_id, recipient)
|
|
19290
|
+
WHERE status = 'pending' AND claimed_at IS NULL
|
|
19291
|
+
`,
|
|
19292
|
+
`
|
|
19293
|
+
CREATE INDEX IF NOT EXISTS alert_email_digests_status_next_attempt_idx
|
|
19294
|
+
ON alert_email_digests (status, next_attempt_at)
|
|
19295
|
+
`,
|
|
19296
|
+
`
|
|
19297
|
+
CREATE TABLE IF NOT EXISTS alert_email_digest_items (
|
|
19298
|
+
id uuid PRIMARY KEY,
|
|
19299
|
+
digest_id uuid NOT NULL REFERENCES alert_email_digests(id) ON DELETE CASCADE,
|
|
19300
|
+
alert_id uuid NOT NULL REFERENCES alert_rules(id) ON DELETE CASCADE,
|
|
19301
|
+
project_id uuid NOT NULL REFERENCES projects(id) ON DELETE CASCADE,
|
|
19302
|
+
incident_id uuid NOT NULL REFERENCES incidents(id) ON DELETE CASCADE,
|
|
19303
|
+
condition_type text NOT NULL,
|
|
19304
|
+
dedupe_key text NOT NULL,
|
|
19305
|
+
payload jsonb NOT NULL,
|
|
19306
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
19307
|
+
UNIQUE (alert_id, incident_id, dedupe_key)
|
|
19308
|
+
)
|
|
19309
|
+
`,
|
|
19310
|
+
`
|
|
19311
|
+
CREATE INDEX IF NOT EXISTS alert_email_digest_items_digest_created_idx
|
|
19312
|
+
ON alert_email_digest_items (digest_id, created_at ASC)
|
|
19313
|
+
`
|
|
19314
|
+
]
|
|
19315
|
+
}),
|
|
19316
|
+
defineStorageSchemaMigration({
|
|
19317
|
+
id: "202605180001_add_skipped_github_dispatch_status",
|
|
19318
|
+
description: "Allow GitHub dispatch delivery history to record rate-limited skips without retrying them.",
|
|
19319
|
+
statements: [
|
|
19320
|
+
"ALTER TABLE github_dispatch_deliveries DROP CONSTRAINT IF EXISTS github_dispatch_deliveries_status_check",
|
|
19321
|
+
"ALTER TABLE github_dispatch_deliveries ADD CONSTRAINT github_dispatch_deliveries_status_check CHECK (status IN ('pending', 'retrying', 'delivered', 'failed', 'skipped'))"
|
|
19322
|
+
]
|
|
19323
|
+
}),
|
|
19324
|
+
defineStorageSchemaMigration({
|
|
19325
|
+
id: "202605180002_add_project_improvement_settings",
|
|
19326
|
+
description: "Add project-level automated improvement settings columns.",
|
|
19327
|
+
statements: [
|
|
19328
|
+
"ALTER TABLE projects ADD COLUMN IF NOT EXISTS automated_improvement_bundles_enabled boolean NOT NULL DEFAULT true",
|
|
19329
|
+
"ALTER TABLE projects ADD COLUMN IF NOT EXISTS improvement_bundle_sensitivity text NOT NULL DEFAULT 'balanced'",
|
|
19330
|
+
`
|
|
19331
|
+
ALTER TABLE projects
|
|
19332
|
+
DROP CONSTRAINT IF EXISTS projects_improvement_bundle_sensitivity_check
|
|
19333
|
+
`,
|
|
19334
|
+
`
|
|
19335
|
+
ALTER TABLE projects
|
|
19336
|
+
ADD CONSTRAINT projects_improvement_bundle_sensitivity_check
|
|
19337
|
+
CHECK (improvement_bundle_sensitivity IN ('high_confidence', 'balanced', 'verbose'))
|
|
19338
|
+
`
|
|
19339
|
+
]
|
|
19340
|
+
}),
|
|
19341
|
+
defineStorageSchemaMigration({
|
|
19342
|
+
id: "202605180003_add_improvement_opportunities_and_bundle_generation_shape",
|
|
19343
|
+
description: "Add hosted improvement opportunity storage and allow bundle generations to reference improvements directly.",
|
|
19344
|
+
statements: [
|
|
19345
|
+
`
|
|
19346
|
+
CREATE TABLE IF NOT EXISTS improvement_opportunities (
|
|
19347
|
+
id uuid PRIMARY KEY,
|
|
19348
|
+
project_id uuid NOT NULL REFERENCES projects(id) ON DELETE CASCADE,
|
|
19349
|
+
service_id uuid REFERENCES services(id) ON DELETE SET NULL,
|
|
19350
|
+
service_name text NOT NULL,
|
|
19351
|
+
environment text NOT NULL DEFAULT 'production',
|
|
19352
|
+
kind text NOT NULL,
|
|
19353
|
+
status text NOT NULL DEFAULT 'open',
|
|
19354
|
+
severity text NOT NULL,
|
|
19355
|
+
confidence numeric NOT NULL,
|
|
19356
|
+
fingerprint text NOT NULL,
|
|
19357
|
+
title text NOT NULL,
|
|
19358
|
+
summary text NOT NULL,
|
|
19359
|
+
occurrence_count integer NOT NULL DEFAULT 1,
|
|
19360
|
+
evidence jsonb NOT NULL,
|
|
19361
|
+
first_detected_at timestamptz NOT NULL,
|
|
19362
|
+
last_detected_at timestamptz NOT NULL,
|
|
19363
|
+
last_source_event_id uuid,
|
|
19364
|
+
related_incident_ids uuid[] NOT NULL DEFAULT '{}',
|
|
19365
|
+
bundle_generation_number integer NOT NULL DEFAULT 0,
|
|
19366
|
+
bundle_created_at timestamptz,
|
|
19367
|
+
bundle_updated_at timestamptz,
|
|
19368
|
+
bundle_source_event_id uuid,
|
|
19369
|
+
bundle_failure_reason text,
|
|
19370
|
+
resolved_at timestamptz,
|
|
19371
|
+
resolved_by_user_id uuid REFERENCES users(id) ON DELETE SET NULL,
|
|
19372
|
+
snoozed_until timestamptz,
|
|
19373
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
19374
|
+
updated_at timestamptz NOT NULL DEFAULT now(),
|
|
19375
|
+
UNIQUE (project_id, fingerprint)
|
|
19376
|
+
)
|
|
19377
|
+
`,
|
|
19378
|
+
`
|
|
19379
|
+
CREATE INDEX IF NOT EXISTS improvement_opportunities_project_status_detected_idx
|
|
19380
|
+
ON improvement_opportunities (project_id, status, last_detected_at DESC)
|
|
19381
|
+
`,
|
|
19382
|
+
`
|
|
19383
|
+
CREATE INDEX IF NOT EXISTS improvement_opportunities_project_kind_detected_idx
|
|
19384
|
+
ON improvement_opportunities (project_id, kind, last_detected_at DESC)
|
|
19385
|
+
`,
|
|
19386
|
+
`
|
|
19387
|
+
CREATE INDEX IF NOT EXISTS improvement_opportunities_project_service_env_idx
|
|
19388
|
+
ON improvement_opportunities (project_id, service_id, environment)
|
|
19389
|
+
`,
|
|
19390
|
+
`
|
|
19391
|
+
CREATE TABLE IF NOT EXISTS improvement_opportunity_events (
|
|
19392
|
+
improvement_opportunity_id uuid NOT NULL REFERENCES improvement_opportunities(id) ON DELETE CASCADE,
|
|
19393
|
+
event_id uuid NOT NULL,
|
|
19394
|
+
event_type text NOT NULL,
|
|
19395
|
+
occurred_at timestamptz NOT NULL,
|
|
19396
|
+
PRIMARY KEY (improvement_opportunity_id, event_id)
|
|
19397
|
+
)
|
|
19398
|
+
`,
|
|
19399
|
+
`
|
|
19400
|
+
CREATE INDEX IF NOT EXISTS improvement_opportunity_events_detected_idx
|
|
19401
|
+
ON improvement_opportunity_events (improvement_opportunity_id, occurred_at DESC, event_id DESC)
|
|
19402
|
+
`,
|
|
19403
|
+
"ALTER TABLE bundle_generations ALTER COLUMN incident_id DROP NOT NULL",
|
|
19404
|
+
"ALTER TABLE bundle_generations ADD COLUMN IF NOT EXISTS improvement_opportunity_id uuid REFERENCES improvement_opportunities(id) ON DELETE CASCADE",
|
|
19405
|
+
"ALTER TABLE bundle_generations DROP CONSTRAINT IF EXISTS bundle_generations_incident_id_source_event_id_key",
|
|
19406
|
+
"DROP INDEX IF EXISTS bundle_generations_incident_source_idx",
|
|
19407
|
+
"DROP INDEX IF EXISTS bundle_generations_improvement_source_idx",
|
|
19408
|
+
`
|
|
19409
|
+
CREATE UNIQUE INDEX IF NOT EXISTS bundle_generations_incident_source_idx
|
|
19410
|
+
ON bundle_generations (incident_id, source_event_id)
|
|
19411
|
+
WHERE incident_id IS NOT NULL
|
|
19412
|
+
`,
|
|
19413
|
+
`
|
|
19414
|
+
CREATE UNIQUE INDEX IF NOT EXISTS bundle_generations_improvement_source_idx
|
|
19415
|
+
ON bundle_generations (improvement_opportunity_id, source_event_id)
|
|
19416
|
+
WHERE improvement_opportunity_id IS NOT NULL
|
|
19417
|
+
`,
|
|
19418
|
+
"DROP INDEX IF EXISTS bundle_generations_improvement_generation_idx",
|
|
19419
|
+
`
|
|
19420
|
+
CREATE INDEX IF NOT EXISTS bundle_generations_improvement_generation_idx
|
|
19421
|
+
ON bundle_generations (improvement_opportunity_id, generation_number DESC)
|
|
19422
|
+
WHERE improvement_opportunity_id IS NOT NULL
|
|
19423
|
+
`,
|
|
19424
|
+
"ALTER TABLE bundle_generations DROP CONSTRAINT IF EXISTS bundle_generations_owner_check",
|
|
19425
|
+
`
|
|
19426
|
+
ALTER TABLE bundle_generations
|
|
19427
|
+
ADD CONSTRAINT bundle_generations_owner_check CHECK (
|
|
19428
|
+
(incident_id IS NOT NULL AND improvement_opportunity_id IS NULL AND bundle_type = 'failure')
|
|
19429
|
+
OR (incident_id IS NULL AND improvement_opportunity_id IS NOT NULL AND bundle_type = 'improvement')
|
|
19430
|
+
)
|
|
19431
|
+
`
|
|
19432
|
+
]
|
|
19031
19433
|
})
|
|
19032
19434
|
];
|
|
19033
19435
|
|
|
@@ -22074,6 +22476,7 @@ function createAlertMcpTools(api) {
|
|
|
22074
22476
|
try {
|
|
22075
22477
|
const requestInput = {
|
|
22076
22478
|
bearerToken: String(input["bearerToken"]),
|
|
22479
|
+
projectId: String(input["projectId"]),
|
|
22077
22480
|
alertId: String(input["alertId"])
|
|
22078
22481
|
};
|
|
22079
22482
|
if (typeof input["serviceId"] === "string") {
|
|
@@ -22108,6 +22511,7 @@ function createAlertMcpTools(api) {
|
|
|
22108
22511
|
return {
|
|
22109
22512
|
alert: await api.deleteAlert({
|
|
22110
22513
|
bearerToken: String(input["bearerToken"]),
|
|
22514
|
+
projectId: String(input["projectId"]),
|
|
22111
22515
|
alertId: String(input["alertId"])
|
|
22112
22516
|
})
|
|
22113
22517
|
};
|
|
@@ -22255,8 +22659,11 @@ function createGitHubMcpTools(api) {
|
|
|
22255
22659
|
async get_github_status(input) {
|
|
22256
22660
|
try {
|
|
22257
22661
|
const bearerToken = String(input["bearerToken"]);
|
|
22258
|
-
const installation = await api.getInstallation({ bearerToken });
|
|
22259
22662
|
const projectId = typeof input["projectId"] === "string" ? input["projectId"] : void 0;
|
|
22663
|
+
const installation = await api.getInstallation({
|
|
22664
|
+
bearerToken,
|
|
22665
|
+
...projectId === void 0 ? {} : { projectId }
|
|
22666
|
+
});
|
|
22260
22667
|
const repo = projectId === void 0 || api.getProjectRepo === void 0 ? void 0 : await api.getProjectRepo({ bearerToken, projectId });
|
|
22261
22668
|
return repo === void 0 ? { installation } : { installation, repo };
|
|
22262
22669
|
} catch (error) {
|
|
@@ -22267,7 +22674,8 @@ function createGitHubMcpTools(api) {
|
|
|
22267
22674
|
try {
|
|
22268
22675
|
return {
|
|
22269
22676
|
repositories: await api.listRepositories({
|
|
22270
|
-
bearerToken: String(input["bearerToken"])
|
|
22677
|
+
bearerToken: String(input["bearerToken"]),
|
|
22678
|
+
...typeof input["projectId"] === "string" ? { projectId: input["projectId"] } : {}
|
|
22271
22679
|
})
|
|
22272
22680
|
};
|
|
22273
22681
|
} catch (error) {
|
|
@@ -22403,8 +22811,134 @@ function createGitHubMcpTools(api) {
|
|
|
22403
22811
|
};
|
|
22404
22812
|
}
|
|
22405
22813
|
|
|
22406
|
-
// src/
|
|
22814
|
+
// src/improvement-tools.ts
|
|
22407
22815
|
function mapMcpError6(error) {
|
|
22816
|
+
if (error instanceof RetrievalApiError) {
|
|
22817
|
+
throw new Error(`mcp_tool_error:${error.code}`);
|
|
22818
|
+
}
|
|
22819
|
+
throw new Error("mcp_tool_error:unknown_error");
|
|
22820
|
+
}
|
|
22821
|
+
function requireBearerToken(input) {
|
|
22822
|
+
const bearerToken = input["bearerToken"];
|
|
22823
|
+
if (typeof bearerToken !== "string" || bearerToken.length === 0) {
|
|
22824
|
+
throw new RetrievalApiError(401, "auth_required");
|
|
22825
|
+
}
|
|
22826
|
+
return bearerToken;
|
|
22827
|
+
}
|
|
22828
|
+
function readString2(input, key) {
|
|
22829
|
+
const value = input[key];
|
|
22830
|
+
return typeof value === "string" ? value : "";
|
|
22831
|
+
}
|
|
22832
|
+
function createImprovementMcpTools(api) {
|
|
22833
|
+
return {
|
|
22834
|
+
async list_improvements(input) {
|
|
22835
|
+
try {
|
|
22836
|
+
return await api.listImprovements({
|
|
22837
|
+
bearerToken: requireBearerToken(input),
|
|
22838
|
+
...typeof input["projectId"] === "string" ? { projectId: input["projectId"] } : {},
|
|
22839
|
+
...typeof input["environment"] === "string" ? { environment: input["environment"] } : {},
|
|
22840
|
+
...typeof input["service"] === "string" ? { service: input["service"] } : {},
|
|
22841
|
+
...typeof input["status"] === "string" ? { status: input["status"] } : {},
|
|
22842
|
+
...typeof input["severity"] === "string" ? { severity: input["severity"] } : {},
|
|
22843
|
+
...typeof input["kind"] === "string" ? { kind: input["kind"] } : {},
|
|
22844
|
+
...typeof input["cursor"] === "string" ? { cursor: input["cursor"] } : {},
|
|
22845
|
+
...typeof input["limit"] === "number" ? { limit: input["limit"] } : {}
|
|
22846
|
+
});
|
|
22847
|
+
} catch (error) {
|
|
22848
|
+
mapMcpError6(error);
|
|
22849
|
+
}
|
|
22850
|
+
},
|
|
22851
|
+
async get_improvement(input) {
|
|
22852
|
+
try {
|
|
22853
|
+
return await api.getImprovement({
|
|
22854
|
+
bearerToken: requireBearerToken(input),
|
|
22855
|
+
improvementId: readString2(input, "improvementId")
|
|
22856
|
+
});
|
|
22857
|
+
} catch (error) {
|
|
22858
|
+
mapMcpError6(error);
|
|
22859
|
+
}
|
|
22860
|
+
},
|
|
22861
|
+
async get_improvement_bundle(input) {
|
|
22862
|
+
try {
|
|
22863
|
+
return await api.getImprovementBundle({
|
|
22864
|
+
bearerToken: requireBearerToken(input),
|
|
22865
|
+
projectId: readString2(input, "projectId"),
|
|
22866
|
+
improvementId: readString2(input, "improvementId")
|
|
22867
|
+
});
|
|
22868
|
+
} catch (error) {
|
|
22869
|
+
mapMcpError6(error);
|
|
22870
|
+
}
|
|
22871
|
+
},
|
|
22872
|
+
async resolve_improvement(input) {
|
|
22873
|
+
try {
|
|
22874
|
+
return await api.resolveImprovement({
|
|
22875
|
+
bearerToken: requireBearerToken(input),
|
|
22876
|
+
improvementId: readString2(input, "improvementId")
|
|
22877
|
+
});
|
|
22878
|
+
} catch (error) {
|
|
22879
|
+
mapMcpError6(error);
|
|
22880
|
+
}
|
|
22881
|
+
},
|
|
22882
|
+
async reopen_improvement(input) {
|
|
22883
|
+
try {
|
|
22884
|
+
return await api.reopenImprovement({
|
|
22885
|
+
bearerToken: requireBearerToken(input),
|
|
22886
|
+
improvementId: readString2(input, "improvementId")
|
|
22887
|
+
});
|
|
22888
|
+
} catch (error) {
|
|
22889
|
+
mapMcpError6(error);
|
|
22890
|
+
}
|
|
22891
|
+
},
|
|
22892
|
+
async snooze_improvement(input) {
|
|
22893
|
+
try {
|
|
22894
|
+
return await api.snoozeImprovement({
|
|
22895
|
+
bearerToken: requireBearerToken(input),
|
|
22896
|
+
improvementId: readString2(input, "improvementId"),
|
|
22897
|
+
snoozedUntil: readString2(input, "snoozedUntil")
|
|
22898
|
+
});
|
|
22899
|
+
} catch (error) {
|
|
22900
|
+
mapMcpError6(error);
|
|
22901
|
+
}
|
|
22902
|
+
}
|
|
22903
|
+
};
|
|
22904
|
+
}
|
|
22905
|
+
|
|
22906
|
+
// src/improvement-settings-tools.ts
|
|
22907
|
+
function mapMcpError7(error) {
|
|
22908
|
+
if (error instanceof ImprovementSettingsApiError) {
|
|
22909
|
+
throw new Error(`mcp_tool_error:${error.message}`);
|
|
22910
|
+
}
|
|
22911
|
+
throw new Error("mcp_tool_error:unknown_error");
|
|
22912
|
+
}
|
|
22913
|
+
function createImprovementSettingsMcpTools(api) {
|
|
22914
|
+
return {
|
|
22915
|
+
async get_improvement_settings(input) {
|
|
22916
|
+
try {
|
|
22917
|
+
return await api.getImprovementSettings({
|
|
22918
|
+
bearerToken: String(input["bearerToken"]),
|
|
22919
|
+
projectId: String(input["projectId"])
|
|
22920
|
+
});
|
|
22921
|
+
} catch (error) {
|
|
22922
|
+
mapMcpError7(error);
|
|
22923
|
+
}
|
|
22924
|
+
},
|
|
22925
|
+
async update_improvement_settings(input) {
|
|
22926
|
+
try {
|
|
22927
|
+
const update = typeof input["update"] === "object" && input["update"] !== null ? input["update"] : {};
|
|
22928
|
+
return await api.updateImprovementSettings({
|
|
22929
|
+
bearerToken: String(input["bearerToken"]),
|
|
22930
|
+
projectId: String(input["projectId"]),
|
|
22931
|
+
update
|
|
22932
|
+
});
|
|
22933
|
+
} catch (error) {
|
|
22934
|
+
mapMcpError7(error);
|
|
22935
|
+
}
|
|
22936
|
+
}
|
|
22937
|
+
};
|
|
22938
|
+
}
|
|
22939
|
+
|
|
22940
|
+
// src/member-tools.ts
|
|
22941
|
+
function mapMcpError8(error) {
|
|
22408
22942
|
if (error instanceof MemberApiError) {
|
|
22409
22943
|
throw new Error(`mcp_tool_error:${error.code}`);
|
|
22410
22944
|
}
|
|
@@ -22412,71 +22946,77 @@ function mapMcpError6(error) {
|
|
|
22412
22946
|
}
|
|
22413
22947
|
function createMemberMcpTools(api) {
|
|
22414
22948
|
return {
|
|
22415
|
-
async
|
|
22949
|
+
async list_project_members(input) {
|
|
22416
22950
|
try {
|
|
22417
22951
|
return await api.listMembers({
|
|
22418
|
-
bearerToken: String(input["bearerToken"])
|
|
22952
|
+
bearerToken: String(input["bearerToken"]),
|
|
22953
|
+
projectId: String(input["projectId"])
|
|
22419
22954
|
});
|
|
22420
22955
|
} catch (error) {
|
|
22421
|
-
|
|
22956
|
+
mapMcpError8(error);
|
|
22422
22957
|
}
|
|
22423
22958
|
},
|
|
22424
|
-
async
|
|
22959
|
+
async list_project_member_invites(input) {
|
|
22425
22960
|
try {
|
|
22426
22961
|
return await api.listInvites({
|
|
22427
|
-
bearerToken: String(input["bearerToken"])
|
|
22962
|
+
bearerToken: String(input["bearerToken"]),
|
|
22963
|
+
projectId: String(input["projectId"])
|
|
22428
22964
|
});
|
|
22429
22965
|
} catch (error) {
|
|
22430
|
-
|
|
22966
|
+
mapMcpError8(error);
|
|
22431
22967
|
}
|
|
22432
22968
|
},
|
|
22433
|
-
async
|
|
22969
|
+
async invite_project_member(input) {
|
|
22434
22970
|
try {
|
|
22435
22971
|
return await api.inviteMember({
|
|
22436
22972
|
bearerToken: String(input["bearerToken"]),
|
|
22973
|
+
projectId: String(input["projectId"]),
|
|
22437
22974
|
email: String(input["email"]),
|
|
22438
22975
|
role: String(input["role"])
|
|
22439
22976
|
});
|
|
22440
22977
|
} catch (error) {
|
|
22441
|
-
|
|
22978
|
+
mapMcpError8(error);
|
|
22442
22979
|
}
|
|
22443
22980
|
},
|
|
22444
|
-
async
|
|
22981
|
+
async cancel_project_member_invite(input) {
|
|
22445
22982
|
try {
|
|
22446
22983
|
return await api.cancelInvite({
|
|
22447
22984
|
bearerToken: String(input["bearerToken"]),
|
|
22985
|
+
projectId: String(input["projectId"]),
|
|
22448
22986
|
inviteId: String(input["inviteId"])
|
|
22449
22987
|
});
|
|
22450
22988
|
} catch (error) {
|
|
22451
|
-
|
|
22989
|
+
mapMcpError8(error);
|
|
22452
22990
|
}
|
|
22453
22991
|
},
|
|
22454
|
-
async
|
|
22992
|
+
async update_project_member_role(input) {
|
|
22455
22993
|
try {
|
|
22456
22994
|
return await api.updateMemberRole({
|
|
22457
22995
|
bearerToken: String(input["bearerToken"]),
|
|
22996
|
+
projectId: String(input["projectId"]),
|
|
22458
22997
|
userId: String(input["userId"]),
|
|
22459
22998
|
role: String(input["role"])
|
|
22460
22999
|
});
|
|
22461
23000
|
} catch (error) {
|
|
22462
|
-
|
|
23001
|
+
mapMcpError8(error);
|
|
22463
23002
|
}
|
|
22464
23003
|
},
|
|
22465
|
-
async
|
|
23004
|
+
async remove_project_member(input) {
|
|
22466
23005
|
try {
|
|
22467
23006
|
return await api.removeMember({
|
|
22468
23007
|
bearerToken: String(input["bearerToken"]),
|
|
23008
|
+
projectId: String(input["projectId"]),
|
|
22469
23009
|
userId: String(input["userId"])
|
|
22470
23010
|
});
|
|
22471
23011
|
} catch (error) {
|
|
22472
|
-
|
|
23012
|
+
mapMcpError8(error);
|
|
22473
23013
|
}
|
|
22474
23014
|
}
|
|
22475
23015
|
};
|
|
22476
23016
|
}
|
|
22477
23017
|
|
|
22478
23018
|
// src/probe-tools.ts
|
|
22479
|
-
function
|
|
23019
|
+
function mapMcpError9(error) {
|
|
22480
23020
|
if (error instanceof ProbeApiError) {
|
|
22481
23021
|
throw new Error(`mcp_tool_error:${error.code}`);
|
|
22482
23022
|
}
|
|
@@ -22505,7 +23045,7 @@ function createProbeMcpTools(api) {
|
|
|
22505
23045
|
}
|
|
22506
23046
|
return await api.activateProbe(requestInput);
|
|
22507
23047
|
} catch (error) {
|
|
22508
|
-
|
|
23048
|
+
mapMcpError9(error);
|
|
22509
23049
|
}
|
|
22510
23050
|
},
|
|
22511
23051
|
async list_active_probes(input) {
|
|
@@ -22515,7 +23055,7 @@ function createProbeMcpTools(api) {
|
|
|
22515
23055
|
projectId: String(input["projectId"])
|
|
22516
23056
|
});
|
|
22517
23057
|
} catch (error) {
|
|
22518
|
-
|
|
23058
|
+
mapMcpError9(error);
|
|
22519
23059
|
}
|
|
22520
23060
|
},
|
|
22521
23061
|
async deactivate_probe(input) {
|
|
@@ -22526,14 +23066,14 @@ function createProbeMcpTools(api) {
|
|
|
22526
23066
|
activationId: String(input["activationId"])
|
|
22527
23067
|
});
|
|
22528
23068
|
} catch (error) {
|
|
22529
|
-
|
|
23069
|
+
mapMcpError9(error);
|
|
22530
23070
|
}
|
|
22531
23071
|
}
|
|
22532
23072
|
};
|
|
22533
23073
|
}
|
|
22534
23074
|
|
|
22535
23075
|
// src/project-tools.ts
|
|
22536
|
-
function
|
|
23076
|
+
function mapMcpError10(error) {
|
|
22537
23077
|
if (error instanceof ProjectManagementApiError) {
|
|
22538
23078
|
throw new Error(`mcp_tool_error:${error.code}`);
|
|
22539
23079
|
}
|
|
@@ -22551,7 +23091,7 @@ function createProjectMcpTools(api) {
|
|
|
22551
23091
|
}
|
|
22552
23092
|
return { projects: await api.listProjects(requestInput) };
|
|
22553
23093
|
} catch (error) {
|
|
22554
|
-
|
|
23094
|
+
mapMcpError10(error);
|
|
22555
23095
|
}
|
|
22556
23096
|
},
|
|
22557
23097
|
async create_project(input) {
|
|
@@ -22566,7 +23106,7 @@ function createProjectMcpTools(api) {
|
|
|
22566
23106
|
}
|
|
22567
23107
|
return { project: await api.createProject(requestInput) };
|
|
22568
23108
|
} catch (error) {
|
|
22569
|
-
|
|
23109
|
+
mapMcpError10(error);
|
|
22570
23110
|
}
|
|
22571
23111
|
},
|
|
22572
23112
|
async update_project(input) {
|
|
@@ -22586,7 +23126,7 @@ function createProjectMcpTools(api) {
|
|
|
22586
23126
|
}
|
|
22587
23127
|
return { project: await api.updateProject(requestInput) };
|
|
22588
23128
|
} catch (error) {
|
|
22589
|
-
|
|
23129
|
+
mapMcpError10(error);
|
|
22590
23130
|
}
|
|
22591
23131
|
},
|
|
22592
23132
|
async delete_project(input) {
|
|
@@ -22598,7 +23138,7 @@ function createProjectMcpTools(api) {
|
|
|
22598
23138
|
})
|
|
22599
23139
|
};
|
|
22600
23140
|
} catch (error) {
|
|
22601
|
-
|
|
23141
|
+
mapMcpError10(error);
|
|
22602
23142
|
}
|
|
22603
23143
|
}
|
|
22604
23144
|
};
|
|
@@ -22805,7 +23345,7 @@ async function persistCloudArtifact(directoryPath, fileName, payload, dependenci
|
|
|
22805
23345
|
}
|
|
22806
23346
|
|
|
22807
23347
|
// src/retrieval-tools.ts
|
|
22808
|
-
function
|
|
23348
|
+
function mapMcpError11(error) {
|
|
22809
23349
|
if (error instanceof RetrievalApiError) {
|
|
22810
23350
|
throw new Error(`mcp_tool_error:${error.code}`);
|
|
22811
23351
|
}
|
|
@@ -22987,7 +23527,7 @@ function createRetrievalMcpTools(api) {
|
|
|
22987
23527
|
incidents: incidents.incidents.map((incident) => attachSourceToRecord(incident, "cloud"))
|
|
22988
23528
|
};
|
|
22989
23529
|
} catch (error) {
|
|
22990
|
-
|
|
23530
|
+
mapMcpError11(error);
|
|
22991
23531
|
}
|
|
22992
23532
|
},
|
|
22993
23533
|
async get_incident(input) {
|
|
@@ -23022,7 +23562,7 @@ function createRetrievalMcpTools(api) {
|
|
|
23022
23562
|
)
|
|
23023
23563
|
};
|
|
23024
23564
|
} catch (error) {
|
|
23025
|
-
|
|
23565
|
+
mapMcpError11(error);
|
|
23026
23566
|
}
|
|
23027
23567
|
},
|
|
23028
23568
|
async get_incident_context(input) {
|
|
@@ -23051,7 +23591,7 @@ function createRetrievalMcpTools(api) {
|
|
|
23051
23591
|
"cloud"
|
|
23052
23592
|
);
|
|
23053
23593
|
} catch (error) {
|
|
23054
|
-
|
|
23594
|
+
mapMcpError11(error);
|
|
23055
23595
|
}
|
|
23056
23596
|
},
|
|
23057
23597
|
async resolve_incident(input) {
|
|
@@ -23096,7 +23636,7 @@ function createRetrievalMcpTools(api) {
|
|
|
23096
23636
|
})()
|
|
23097
23637
|
};
|
|
23098
23638
|
} catch (error) {
|
|
23099
|
-
|
|
23639
|
+
mapMcpError11(error);
|
|
23100
23640
|
}
|
|
23101
23641
|
},
|
|
23102
23642
|
async reopen_incident(input) {
|
|
@@ -23141,7 +23681,7 @@ function createRetrievalMcpTools(api) {
|
|
|
23141
23681
|
})()
|
|
23142
23682
|
};
|
|
23143
23683
|
} catch (error) {
|
|
23144
|
-
|
|
23684
|
+
mapMcpError11(error);
|
|
23145
23685
|
}
|
|
23146
23686
|
},
|
|
23147
23687
|
async get_bundle(input) {
|
|
@@ -23172,7 +23712,7 @@ function createRetrievalMcpTools(api) {
|
|
|
23172
23712
|
}
|
|
23173
23713
|
);
|
|
23174
23714
|
} catch (error) {
|
|
23175
|
-
|
|
23715
|
+
mapMcpError11(error);
|
|
23176
23716
|
}
|
|
23177
23717
|
},
|
|
23178
23718
|
async get_logs(input) {
|
|
@@ -23192,7 +23732,7 @@ function createRetrievalMcpTools(api) {
|
|
|
23192
23732
|
}
|
|
23193
23733
|
return await api.getLogs(requestInput);
|
|
23194
23734
|
} catch (error) {
|
|
23195
|
-
|
|
23735
|
+
mapMcpError11(error);
|
|
23196
23736
|
}
|
|
23197
23737
|
},
|
|
23198
23738
|
async get_reproduction(input) {
|
|
@@ -23223,14 +23763,14 @@ function createRetrievalMcpTools(api) {
|
|
|
23223
23763
|
}
|
|
23224
23764
|
);
|
|
23225
23765
|
} catch (error) {
|
|
23226
|
-
|
|
23766
|
+
mapMcpError11(error);
|
|
23227
23767
|
}
|
|
23228
23768
|
}
|
|
23229
23769
|
};
|
|
23230
23770
|
}
|
|
23231
23771
|
|
|
23232
23772
|
// src/services-tools.ts
|
|
23233
|
-
function
|
|
23773
|
+
function mapMcpError12(error) {
|
|
23234
23774
|
if (error instanceof RetrievalApiError) {
|
|
23235
23775
|
throw new Error(`mcp_tool_error:${error.code}`);
|
|
23236
23776
|
}
|
|
@@ -23251,14 +23791,14 @@ function createServicesMcpTools(api) {
|
|
|
23251
23791
|
services: await api.listServices(requestInput)
|
|
23252
23792
|
};
|
|
23253
23793
|
} catch (error) {
|
|
23254
|
-
|
|
23794
|
+
mapMcpError12(error);
|
|
23255
23795
|
}
|
|
23256
23796
|
}
|
|
23257
23797
|
};
|
|
23258
23798
|
}
|
|
23259
23799
|
|
|
23260
23800
|
// src/setup-tools.ts
|
|
23261
|
-
function
|
|
23801
|
+
function mapMcpError13() {
|
|
23262
23802
|
throw new Error("mcp_tool_error:unknown_error");
|
|
23263
23803
|
}
|
|
23264
23804
|
function parseJsonOutput2(output) {
|
|
@@ -23273,7 +23813,7 @@ async function runJsonCommand2(command) {
|
|
|
23273
23813
|
const result = await command();
|
|
23274
23814
|
return parseJsonOutput2(result.output);
|
|
23275
23815
|
} catch {
|
|
23276
|
-
|
|
23816
|
+
mapMcpError13();
|
|
23277
23817
|
}
|
|
23278
23818
|
}
|
|
23279
23819
|
function createSetupMcpTools(commands) {
|
|
@@ -23332,7 +23872,7 @@ function createSetupMcpTools(commands) {
|
|
|
23332
23872
|
}
|
|
23333
23873
|
|
|
23334
23874
|
// src/slack-tools.ts
|
|
23335
|
-
function
|
|
23875
|
+
function mapMcpError14(error) {
|
|
23336
23876
|
if (error instanceof SlackApiError) {
|
|
23337
23877
|
throw new Error(`mcp_tool_error:${error.code}`);
|
|
23338
23878
|
}
|
|
@@ -23349,7 +23889,7 @@ function createSlackMcpTools(api) {
|
|
|
23349
23889
|
})
|
|
23350
23890
|
};
|
|
23351
23891
|
} catch (error) {
|
|
23352
|
-
|
|
23892
|
+
mapMcpError14(error);
|
|
23353
23893
|
}
|
|
23354
23894
|
},
|
|
23355
23895
|
async get_slack_connect_url(input) {
|
|
@@ -23362,7 +23902,7 @@ function createSlackMcpTools(api) {
|
|
|
23362
23902
|
})
|
|
23363
23903
|
};
|
|
23364
23904
|
} catch (error) {
|
|
23365
|
-
|
|
23905
|
+
mapMcpError14(error);
|
|
23366
23906
|
}
|
|
23367
23907
|
},
|
|
23368
23908
|
async test_slack_destination(input) {
|
|
@@ -23375,7 +23915,7 @@ function createSlackMcpTools(api) {
|
|
|
23375
23915
|
})
|
|
23376
23916
|
};
|
|
23377
23917
|
} catch (error) {
|
|
23378
|
-
|
|
23918
|
+
mapMcpError14(error);
|
|
23379
23919
|
}
|
|
23380
23920
|
},
|
|
23381
23921
|
async delete_slack_destination(input) {
|
|
@@ -23388,14 +23928,14 @@ function createSlackMcpTools(api) {
|
|
|
23388
23928
|
})
|
|
23389
23929
|
};
|
|
23390
23930
|
} catch (error) {
|
|
23391
|
-
|
|
23931
|
+
mapMcpError14(error);
|
|
23392
23932
|
}
|
|
23393
23933
|
}
|
|
23394
23934
|
};
|
|
23395
23935
|
}
|
|
23396
23936
|
|
|
23397
23937
|
// src/token-tools.ts
|
|
23398
|
-
function
|
|
23938
|
+
function mapMcpError15(error) {
|
|
23399
23939
|
if (error instanceof TokenManagementApiError) {
|
|
23400
23940
|
throw new Error(`mcp_tool_error:${error.code}`);
|
|
23401
23941
|
}
|
|
@@ -23416,7 +23956,7 @@ function createTokenMcpTools(api) {
|
|
|
23416
23956
|
tokens: await api.listProjectTokens(requestInput)
|
|
23417
23957
|
};
|
|
23418
23958
|
} catch (error) {
|
|
23419
|
-
|
|
23959
|
+
mapMcpError15(error);
|
|
23420
23960
|
}
|
|
23421
23961
|
},
|
|
23422
23962
|
async create_project_token(input) {
|
|
@@ -23429,7 +23969,7 @@ function createTokenMcpTools(api) {
|
|
|
23429
23969
|
})
|
|
23430
23970
|
};
|
|
23431
23971
|
} catch (error) {
|
|
23432
|
-
|
|
23972
|
+
mapMcpError15(error);
|
|
23433
23973
|
}
|
|
23434
23974
|
},
|
|
23435
23975
|
async revoke_project_token(input) {
|
|
@@ -23442,7 +23982,7 @@ function createTokenMcpTools(api) {
|
|
|
23442
23982
|
})
|
|
23443
23983
|
};
|
|
23444
23984
|
} catch (error) {
|
|
23445
|
-
|
|
23985
|
+
mapMcpError15(error);
|
|
23446
23986
|
}
|
|
23447
23987
|
},
|
|
23448
23988
|
async list_member_tokens(input) {
|
|
@@ -23457,7 +23997,7 @@ function createTokenMcpTools(api) {
|
|
|
23457
23997
|
tokens: await api.listMemberTokens(requestInput)
|
|
23458
23998
|
};
|
|
23459
23999
|
} catch (error) {
|
|
23460
|
-
|
|
24000
|
+
mapMcpError15(error);
|
|
23461
24001
|
}
|
|
23462
24002
|
},
|
|
23463
24003
|
async create_member_token(input) {
|
|
@@ -23469,7 +24009,7 @@ function createTokenMcpTools(api) {
|
|
|
23469
24009
|
})
|
|
23470
24010
|
};
|
|
23471
24011
|
} catch (error) {
|
|
23472
|
-
|
|
24012
|
+
mapMcpError15(error);
|
|
23473
24013
|
}
|
|
23474
24014
|
},
|
|
23475
24015
|
async revoke_member_token(input) {
|
|
@@ -23481,14 +24021,14 @@ function createTokenMcpTools(api) {
|
|
|
23481
24021
|
})
|
|
23482
24022
|
};
|
|
23483
24023
|
} catch (error) {
|
|
23484
|
-
|
|
24024
|
+
mapMcpError15(error);
|
|
23485
24025
|
}
|
|
23486
24026
|
}
|
|
23487
24027
|
};
|
|
23488
24028
|
}
|
|
23489
24029
|
|
|
23490
24030
|
// src/webhook-tools.ts
|
|
23491
|
-
function
|
|
24031
|
+
function mapMcpError16(error) {
|
|
23492
24032
|
if (error instanceof WebhookApiError) {
|
|
23493
24033
|
throw new Error(`mcp_tool_error:${error.code}`);
|
|
23494
24034
|
}
|
|
@@ -23509,7 +24049,7 @@ function createWebhookMcpTools(api) {
|
|
|
23509
24049
|
webhooks: await api.listWebhooks(requestInput)
|
|
23510
24050
|
};
|
|
23511
24051
|
} catch (error) {
|
|
23512
|
-
|
|
24052
|
+
mapMcpError16(error);
|
|
23513
24053
|
}
|
|
23514
24054
|
},
|
|
23515
24055
|
async create_webhook(input) {
|
|
@@ -23530,13 +24070,14 @@ function createWebhookMcpTools(api) {
|
|
|
23530
24070
|
webhook: await api.createWebhook(requestInput)
|
|
23531
24071
|
};
|
|
23532
24072
|
} catch (error) {
|
|
23533
|
-
|
|
24073
|
+
mapMcpError16(error);
|
|
23534
24074
|
}
|
|
23535
24075
|
},
|
|
23536
24076
|
async update_webhook(input) {
|
|
23537
24077
|
try {
|
|
23538
24078
|
const requestInput = {
|
|
23539
24079
|
bearerToken: String(input["bearerToken"]),
|
|
24080
|
+
projectId: String(input["projectId"]),
|
|
23540
24081
|
webhookId: String(input["webhookId"])
|
|
23541
24082
|
};
|
|
23542
24083
|
if (typeof input["url"] === "string") {
|
|
@@ -23555,7 +24096,7 @@ function createWebhookMcpTools(api) {
|
|
|
23555
24096
|
webhook: await api.updateWebhook(requestInput)
|
|
23556
24097
|
};
|
|
23557
24098
|
} catch (error) {
|
|
23558
|
-
|
|
24099
|
+
mapMcpError16(error);
|
|
23559
24100
|
}
|
|
23560
24101
|
},
|
|
23561
24102
|
async delete_webhook(input) {
|
|
@@ -23563,17 +24104,19 @@ function createWebhookMcpTools(api) {
|
|
|
23563
24104
|
return {
|
|
23564
24105
|
webhook: await api.deleteWebhook({
|
|
23565
24106
|
bearerToken: String(input["bearerToken"]),
|
|
24107
|
+
projectId: String(input["projectId"]),
|
|
23566
24108
|
webhookId: String(input["webhookId"])
|
|
23567
24109
|
})
|
|
23568
24110
|
};
|
|
23569
24111
|
} catch (error) {
|
|
23570
|
-
|
|
24112
|
+
mapMcpError16(error);
|
|
23571
24113
|
}
|
|
23572
24114
|
},
|
|
23573
24115
|
async test_webhook(input) {
|
|
23574
24116
|
try {
|
|
23575
24117
|
const requestInput = {
|
|
23576
24118
|
bearerToken: String(input["bearerToken"]),
|
|
24119
|
+
projectId: String(input["projectId"]),
|
|
23577
24120
|
webhookId: String(input["webhookId"])
|
|
23578
24121
|
};
|
|
23579
24122
|
if (input["eventType"] === "verification.passed" || input["eventType"] === "verification.failed") {
|
|
@@ -23583,13 +24126,14 @@ function createWebhookMcpTools(api) {
|
|
|
23583
24126
|
delivery: await api.testWebhook(requestInput)
|
|
23584
24127
|
};
|
|
23585
24128
|
} catch (error) {
|
|
23586
|
-
|
|
24129
|
+
mapMcpError16(error);
|
|
23587
24130
|
}
|
|
23588
24131
|
},
|
|
23589
24132
|
async list_webhook_deliveries(input) {
|
|
23590
24133
|
try {
|
|
23591
24134
|
const requestInput = {
|
|
23592
24135
|
bearerToken: String(input["bearerToken"]),
|
|
24136
|
+
projectId: String(input["projectId"]),
|
|
23593
24137
|
webhookId: String(input["webhookId"])
|
|
23594
24138
|
};
|
|
23595
24139
|
if (typeof input["limit"] === "number") {
|
|
@@ -23599,25 +24143,26 @@ function createWebhookMcpTools(api) {
|
|
|
23599
24143
|
deliveries: await api.listWebhookDeliveries(requestInput)
|
|
23600
24144
|
};
|
|
23601
24145
|
} catch (error) {
|
|
23602
|
-
|
|
24146
|
+
mapMcpError16(error);
|
|
23603
24147
|
}
|
|
23604
24148
|
},
|
|
23605
24149
|
async retry_webhook_delivery(input) {
|
|
23606
24150
|
try {
|
|
23607
24151
|
return await api.retryWebhookDelivery({
|
|
23608
24152
|
bearerToken: String(input["bearerToken"]),
|
|
24153
|
+
projectId: String(input["projectId"]),
|
|
23609
24154
|
webhookId: String(input["webhookId"]),
|
|
23610
24155
|
deliveryId: String(input["deliveryId"])
|
|
23611
24156
|
});
|
|
23612
24157
|
} catch (error) {
|
|
23613
|
-
|
|
24158
|
+
mapMcpError16(error);
|
|
23614
24159
|
}
|
|
23615
24160
|
}
|
|
23616
24161
|
};
|
|
23617
24162
|
}
|
|
23618
24163
|
|
|
23619
24164
|
// src/weekly-report-tools.ts
|
|
23620
|
-
function
|
|
24165
|
+
function mapMcpError17(error) {
|
|
23621
24166
|
if (error instanceof WeeklyReportApiError) {
|
|
23622
24167
|
throw new Error(`mcp_tool_error:${error.code}`);
|
|
23623
24168
|
}
|
|
@@ -23635,7 +24180,7 @@ function createWeeklyReportMcpTools(api) {
|
|
|
23635
24180
|
})
|
|
23636
24181
|
};
|
|
23637
24182
|
} catch (error) {
|
|
23638
|
-
|
|
24183
|
+
mapMcpError17(error);
|
|
23639
24184
|
}
|
|
23640
24185
|
},
|
|
23641
24186
|
async create_weekly_report_channel(input) {
|
|
@@ -23651,7 +24196,7 @@ function createWeeklyReportMcpTools(api) {
|
|
|
23651
24196
|
})
|
|
23652
24197
|
};
|
|
23653
24198
|
} catch (error) {
|
|
23654
|
-
|
|
24199
|
+
mapMcpError17(error);
|
|
23655
24200
|
}
|
|
23656
24201
|
},
|
|
23657
24202
|
async update_weekly_report_channel(input) {
|
|
@@ -23666,7 +24211,7 @@ function createWeeklyReportMcpTools(api) {
|
|
|
23666
24211
|
})
|
|
23667
24212
|
};
|
|
23668
24213
|
} catch (error) {
|
|
23669
|
-
|
|
24214
|
+
mapMcpError17(error);
|
|
23670
24215
|
}
|
|
23671
24216
|
},
|
|
23672
24217
|
async delete_weekly_report_channel(input) {
|
|
@@ -23678,7 +24223,7 @@ function createWeeklyReportMcpTools(api) {
|
|
|
23678
24223
|
})
|
|
23679
24224
|
};
|
|
23680
24225
|
} catch (error) {
|
|
23681
|
-
|
|
24226
|
+
mapMcpError17(error);
|
|
23682
24227
|
}
|
|
23683
24228
|
}
|
|
23684
24229
|
};
|
|
@@ -23726,6 +24271,7 @@ async function createDefaultMcpTools(input = {}) {
|
|
|
23726
24271
|
...retrievalApi,
|
|
23727
24272
|
getLogs: (requestInput) => retrievalApi.listLogs(requestInput)
|
|
23728
24273
|
}),
|
|
24274
|
+
...createImprovementMcpTools(retrievalApi),
|
|
23729
24275
|
...createServicesMcpTools(retrievalApi),
|
|
23730
24276
|
...createTokenMcpTools(createTokenManagementApi(httpClient)),
|
|
23731
24277
|
...createWebhookMcpTools(createWebhookApi(httpClient)),
|
|
@@ -23734,6 +24280,7 @@ async function createDefaultMcpTools(input = {}) {
|
|
|
23734
24280
|
...createAlertMcpTools(createAlertApi(httpClient)),
|
|
23735
24281
|
...createProjectMcpTools(createProjectManagementApi(httpClient)),
|
|
23736
24282
|
...createCapturePolicyMcpTools(createCapturePolicyApi(httpClient)),
|
|
24283
|
+
...createImprovementSettingsMcpTools(createImprovementSettingsApi(httpClient)),
|
|
23737
24284
|
...createProbeMcpTools(createProbeApi(httpClient)),
|
|
23738
24285
|
...createBillingMcpTools(createBillingApi(httpClient)),
|
|
23739
24286
|
...createMemberMcpTools(createMemberApi(httpClient)),
|
|
@@ -25056,6 +25603,10 @@ var incidentLookupInputSchema = external_exports.object({
|
|
|
25056
25603
|
source: sourceSchema,
|
|
25057
25604
|
incidentId: external_exports.string()
|
|
25058
25605
|
});
|
|
25606
|
+
var improvementLookupInputSchema = external_exports.object({
|
|
25607
|
+
bearerToken: external_exports.string(),
|
|
25608
|
+
improvementId: external_exports.string()
|
|
25609
|
+
});
|
|
25059
25610
|
var MCP_TOOL_CATALOG = [
|
|
25060
25611
|
{
|
|
25061
25612
|
name: "doctor",
|
|
@@ -25169,10 +25720,64 @@ var MCP_TOOL_CATALOG = [
|
|
|
25169
25720
|
limit: external_exports.number().optional()
|
|
25170
25721
|
})
|
|
25171
25722
|
},
|
|
25723
|
+
{
|
|
25724
|
+
name: "list_improvements",
|
|
25725
|
+
group: "improvements",
|
|
25726
|
+
description: "List hosted improvement opportunities for the current workspace or a specific project.",
|
|
25727
|
+
inputSchema: external_exports.object({
|
|
25728
|
+
bearerToken: external_exports.string(),
|
|
25729
|
+
projectId: external_exports.string().optional(),
|
|
25730
|
+
environment: external_exports.string().optional(),
|
|
25731
|
+
service: external_exports.string().optional(),
|
|
25732
|
+
status: external_exports.string().optional(),
|
|
25733
|
+
severity: external_exports.string().optional(),
|
|
25734
|
+
kind: external_exports.string().optional(),
|
|
25735
|
+
cursor: external_exports.string().optional(),
|
|
25736
|
+
limit: external_exports.number().optional()
|
|
25737
|
+
})
|
|
25738
|
+
},
|
|
25739
|
+
{
|
|
25740
|
+
name: "get_improvement",
|
|
25741
|
+
group: "improvements",
|
|
25742
|
+
description: "Fetch a single hosted improvement opportunity by id.",
|
|
25743
|
+
inputSchema: improvementLookupInputSchema
|
|
25744
|
+
},
|
|
25745
|
+
{
|
|
25746
|
+
name: "get_improvement_bundle",
|
|
25747
|
+
group: "improvements",
|
|
25748
|
+
description: "Fetch the hosted improvement bundle artifact for a project improvement opportunity.",
|
|
25749
|
+
inputSchema: external_exports.object({
|
|
25750
|
+
bearerToken: external_exports.string(),
|
|
25751
|
+
projectId: external_exports.string(),
|
|
25752
|
+
improvementId: external_exports.string()
|
|
25753
|
+
})
|
|
25754
|
+
},
|
|
25755
|
+
{
|
|
25756
|
+
name: "resolve_improvement",
|
|
25757
|
+
group: "improvements",
|
|
25758
|
+
description: "Resolve a hosted improvement opportunity.",
|
|
25759
|
+
inputSchema: improvementLookupInputSchema
|
|
25760
|
+
},
|
|
25761
|
+
{
|
|
25762
|
+
name: "reopen_improvement",
|
|
25763
|
+
group: "improvements",
|
|
25764
|
+
description: "Reopen a hosted improvement opportunity.",
|
|
25765
|
+
inputSchema: improvementLookupInputSchema
|
|
25766
|
+
},
|
|
25767
|
+
{
|
|
25768
|
+
name: "snooze_improvement",
|
|
25769
|
+
group: "improvements",
|
|
25770
|
+
description: "Snooze a hosted improvement opportunity until an ISO8601 timestamp.",
|
|
25771
|
+
inputSchema: external_exports.object({
|
|
25772
|
+
bearerToken: external_exports.string(),
|
|
25773
|
+
improvementId: external_exports.string(),
|
|
25774
|
+
snoozedUntil: external_exports.string()
|
|
25775
|
+
})
|
|
25776
|
+
},
|
|
25172
25777
|
{
|
|
25173
25778
|
name: "get_github_status",
|
|
25174
25779
|
group: "github",
|
|
25175
|
-
description: "Get the
|
|
25780
|
+
description: "Get the project GitHub App installation status and optional project repo assignment.",
|
|
25176
25781
|
inputSchema: external_exports.object({
|
|
25177
25782
|
bearerToken: external_exports.string(),
|
|
25178
25783
|
projectId: external_exports.string().optional()
|
|
@@ -25181,9 +25786,10 @@ var MCP_TOOL_CATALOG = [
|
|
|
25181
25786
|
{
|
|
25182
25787
|
name: "list_github_repositories",
|
|
25183
25788
|
group: "github",
|
|
25184
|
-
description: "List repositories available to the
|
|
25789
|
+
description: "List repositories available to the project GitHub App installation for owner/admin callers.",
|
|
25185
25790
|
inputSchema: external_exports.object({
|
|
25186
|
-
bearerToken: external_exports.string()
|
|
25791
|
+
bearerToken: external_exports.string(),
|
|
25792
|
+
projectId: external_exports.string().optional()
|
|
25187
25793
|
})
|
|
25188
25794
|
},
|
|
25189
25795
|
{
|
|
@@ -25249,7 +25855,7 @@ var MCP_TOOL_CATALOG = [
|
|
|
25249
25855
|
inputSchema: external_exports.object({
|
|
25250
25856
|
bearerToken: external_exports.string(),
|
|
25251
25857
|
projectId: external_exports.string(),
|
|
25252
|
-
status: external_exports.enum(["pending", "retrying", "delivered", "failed"]).optional(),
|
|
25858
|
+
status: external_exports.enum(["pending", "retrying", "delivered", "failed", "skipped"]).optional(),
|
|
25253
25859
|
limit: external_exports.number().optional()
|
|
25254
25860
|
})
|
|
25255
25861
|
},
|
|
@@ -25369,6 +25975,7 @@ var MCP_TOOL_CATALOG = [
|
|
|
25369
25975
|
description: "Update a webhook endpoint.",
|
|
25370
25976
|
inputSchema: external_exports.object({
|
|
25371
25977
|
bearerToken: external_exports.string(),
|
|
25978
|
+
projectId: external_exports.string(),
|
|
25372
25979
|
webhookId: external_exports.string(),
|
|
25373
25980
|
url: external_exports.string().optional(),
|
|
25374
25981
|
events: external_exports.array(external_exports.string()).optional(),
|
|
@@ -25382,6 +25989,7 @@ var MCP_TOOL_CATALOG = [
|
|
|
25382
25989
|
description: "Delete a webhook endpoint.",
|
|
25383
25990
|
inputSchema: external_exports.object({
|
|
25384
25991
|
bearerToken: external_exports.string(),
|
|
25992
|
+
projectId: external_exports.string(),
|
|
25385
25993
|
webhookId: external_exports.string()
|
|
25386
25994
|
})
|
|
25387
25995
|
},
|
|
@@ -25391,6 +25999,7 @@ var MCP_TOOL_CATALOG = [
|
|
|
25391
25999
|
description: "Queue a synthetic webhook delivery.",
|
|
25392
26000
|
inputSchema: external_exports.object({
|
|
25393
26001
|
bearerToken: external_exports.string(),
|
|
26002
|
+
projectId: external_exports.string(),
|
|
25394
26003
|
webhookId: external_exports.string(),
|
|
25395
26004
|
eventType: verificationEventTypeSchema.optional()
|
|
25396
26005
|
})
|
|
@@ -25401,6 +26010,7 @@ var MCP_TOOL_CATALOG = [
|
|
|
25401
26010
|
description: "List deliveries for a webhook endpoint.",
|
|
25402
26011
|
inputSchema: external_exports.object({
|
|
25403
26012
|
bearerToken: external_exports.string(),
|
|
26013
|
+
projectId: external_exports.string(),
|
|
25404
26014
|
webhookId: external_exports.string(),
|
|
25405
26015
|
limit: external_exports.number().optional()
|
|
25406
26016
|
})
|
|
@@ -25411,6 +26021,7 @@ var MCP_TOOL_CATALOG = [
|
|
|
25411
26021
|
description: "Retry a webhook delivery.",
|
|
25412
26022
|
inputSchema: external_exports.object({
|
|
25413
26023
|
bearerToken: external_exports.string(),
|
|
26024
|
+
projectId: external_exports.string(),
|
|
25414
26025
|
webhookId: external_exports.string(),
|
|
25415
26026
|
deliveryId: external_exports.string()
|
|
25416
26027
|
})
|
|
@@ -25529,6 +26140,7 @@ var MCP_TOOL_CATALOG = [
|
|
|
25529
26140
|
description: "Update an alert rule.",
|
|
25530
26141
|
inputSchema: external_exports.object({
|
|
25531
26142
|
bearerToken: external_exports.string(),
|
|
26143
|
+
projectId: external_exports.string(),
|
|
25532
26144
|
alertId: external_exports.string(),
|
|
25533
26145
|
serviceId: external_exports.string().nullable().optional(),
|
|
25534
26146
|
channel: external_exports.string().optional(),
|
|
@@ -25544,6 +26156,7 @@ var MCP_TOOL_CATALOG = [
|
|
|
25544
26156
|
description: "Delete an alert rule.",
|
|
25545
26157
|
inputSchema: external_exports.object({
|
|
25546
26158
|
bearerToken: external_exports.string(),
|
|
26159
|
+
projectId: external_exports.string(),
|
|
25547
26160
|
alertId: external_exports.string()
|
|
25548
26161
|
})
|
|
25549
26162
|
},
|
|
@@ -25614,6 +26227,28 @@ var MCP_TOOL_CATALOG = [
|
|
|
25614
26227
|
})
|
|
25615
26228
|
})
|
|
25616
26229
|
},
|
|
26230
|
+
{
|
|
26231
|
+
name: "get_improvement_settings",
|
|
26232
|
+
group: "improvement_settings",
|
|
26233
|
+
description: "Get automated improvement settings for a project.",
|
|
26234
|
+
inputSchema: external_exports.object({
|
|
26235
|
+
bearerToken: external_exports.string(),
|
|
26236
|
+
projectId: external_exports.string()
|
|
26237
|
+
})
|
|
26238
|
+
},
|
|
26239
|
+
{
|
|
26240
|
+
name: "update_improvement_settings",
|
|
26241
|
+
group: "improvement_settings",
|
|
26242
|
+
description: "Update automated improvement settings for a project.",
|
|
26243
|
+
inputSchema: external_exports.object({
|
|
26244
|
+
bearerToken: external_exports.string(),
|
|
26245
|
+
projectId: external_exports.string(),
|
|
26246
|
+
update: external_exports.object({
|
|
26247
|
+
automated_improvement_bundles_enabled: external_exports.boolean().optional(),
|
|
26248
|
+
improvement_bundle_sensitivity: external_exports.enum(["high_confidence", "balanced", "verbose"]).optional()
|
|
26249
|
+
})
|
|
26250
|
+
})
|
|
26251
|
+
},
|
|
25617
26252
|
{
|
|
25618
26253
|
name: "activate_probe",
|
|
25619
26254
|
group: "probes",
|
|
@@ -25682,56 +26317,62 @@ var MCP_TOOL_CATALOG = [
|
|
|
25682
26317
|
})
|
|
25683
26318
|
},
|
|
25684
26319
|
{
|
|
25685
|
-
name: "
|
|
26320
|
+
name: "list_project_members",
|
|
25686
26321
|
group: "members",
|
|
25687
|
-
description: "List
|
|
26322
|
+
description: "List members for a project.",
|
|
25688
26323
|
inputSchema: external_exports.object({
|
|
25689
|
-
bearerToken: external_exports.string()
|
|
26324
|
+
bearerToken: external_exports.string(),
|
|
26325
|
+
projectId: external_exports.string()
|
|
25690
26326
|
})
|
|
25691
26327
|
},
|
|
25692
26328
|
{
|
|
25693
|
-
name: "
|
|
26329
|
+
name: "list_project_member_invites",
|
|
25694
26330
|
group: "members",
|
|
25695
|
-
description: "List pending
|
|
26331
|
+
description: "List pending invites for a project.",
|
|
25696
26332
|
inputSchema: external_exports.object({
|
|
25697
|
-
bearerToken: external_exports.string()
|
|
26333
|
+
bearerToken: external_exports.string(),
|
|
26334
|
+
projectId: external_exports.string()
|
|
25698
26335
|
})
|
|
25699
26336
|
},
|
|
25700
26337
|
{
|
|
25701
|
-
name: "
|
|
26338
|
+
name: "invite_project_member",
|
|
25702
26339
|
group: "members",
|
|
25703
|
-
description: "Invite a
|
|
26340
|
+
description: "Invite a collaborator to a project.",
|
|
25704
26341
|
inputSchema: external_exports.object({
|
|
25705
26342
|
bearerToken: external_exports.string(),
|
|
26343
|
+
projectId: external_exports.string(),
|
|
25706
26344
|
email: external_exports.string(),
|
|
25707
26345
|
role: external_exports.string()
|
|
25708
26346
|
})
|
|
25709
26347
|
},
|
|
25710
26348
|
{
|
|
25711
|
-
name: "
|
|
26349
|
+
name: "cancel_project_member_invite",
|
|
25712
26350
|
group: "members",
|
|
25713
|
-
description: "Cancel a pending
|
|
26351
|
+
description: "Cancel a pending project invite.",
|
|
25714
26352
|
inputSchema: external_exports.object({
|
|
25715
26353
|
bearerToken: external_exports.string(),
|
|
26354
|
+
projectId: external_exports.string(),
|
|
25716
26355
|
inviteId: external_exports.string()
|
|
25717
26356
|
})
|
|
25718
26357
|
},
|
|
25719
26358
|
{
|
|
25720
|
-
name: "
|
|
26359
|
+
name: "update_project_member_role",
|
|
25721
26360
|
group: "members",
|
|
25722
|
-
description: "Update the role of
|
|
26361
|
+
description: "Update the role of a project collaborator.",
|
|
25723
26362
|
inputSchema: external_exports.object({
|
|
25724
26363
|
bearerToken: external_exports.string(),
|
|
26364
|
+
projectId: external_exports.string(),
|
|
25725
26365
|
userId: external_exports.string(),
|
|
25726
26366
|
role: external_exports.string()
|
|
25727
26367
|
})
|
|
25728
26368
|
},
|
|
25729
26369
|
{
|
|
25730
|
-
name: "
|
|
26370
|
+
name: "remove_project_member",
|
|
25731
26371
|
group: "members",
|
|
25732
|
-
description: "Remove a
|
|
26372
|
+
description: "Remove a collaborator from a project.",
|
|
25733
26373
|
inputSchema: external_exports.object({
|
|
25734
26374
|
bearerToken: external_exports.string(),
|
|
26375
|
+
projectId: external_exports.string(),
|
|
25735
26376
|
userId: external_exports.string()
|
|
25736
26377
|
})
|
|
25737
26378
|
},
|