@debugbundle/mcp 0.1.3 → 0.1.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.
- package/README.md +1 -1
- package/dist/main.cjs +130 -53
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -30,7 +30,7 @@ debugbundle-mcp
|
|
|
30
30
|
}
|
|
31
31
|
```
|
|
32
32
|
|
|
33
|
-
The server uses stdio transport and exposes the same DebugBundle incident, incident-context, bundle, webhook, alert, token, project, member, billing, GitHub, probe, and diagnostic tools documented at https://debugbundle.com/docs/mcp. Hosted verification supports the active V1 proof path through `verify_cloud` with `trigger5xx: true`, incident triage can start with the one-call `get_incident_context` tool, and `doctor` accepts `privacy: true` to return the same deterministic redaction preview as `debugbundle doctor --privacy`.
|
|
33
|
+
The server uses stdio transport and exposes the same DebugBundle incident, incident-context, bundle, webhook, alert, token, project, member, billing, GitHub, probe, and diagnostic tools documented at https://debugbundle.com/docs/mcp. Hosted verification supports the active V1 proof path through `verify_cloud` with `trigger5xx: true` and the configured-client-error proof path with `trigger4xxStatus: 403`, incident triage can start with the one-call `get_incident_context` tool, and `doctor` accepts `privacy: true` to return the same deterministic redaction preview as `debugbundle doctor --privacy`.
|
|
34
34
|
|
|
35
35
|
## Authentication
|
|
36
36
|
|
package/dist/main.cjs
CHANGED
|
@@ -16276,6 +16276,31 @@ var CaptureProbeEventsValues = ["buffer_only", "standalone_when_activated"];
|
|
|
16276
16276
|
var CaptureProbeEventsSchema = external_exports.enum(CaptureProbeEventsValues);
|
|
16277
16277
|
var RequestSignalClassificationValues = ["incident_signal", "context_signal"];
|
|
16278
16278
|
var RequestSignalClassificationSchema = external_exports.enum(RequestSignalClassificationValues);
|
|
16279
|
+
var RECOMMENDED_IMMEDIATE_CLIENT_ERROR_STATUSES = [401, 403, 409, 422];
|
|
16280
|
+
var ImmediateClientErrorStatusSchema = external_exports.number().int().min(400).max(499);
|
|
16281
|
+
function normalizeImmediateClientErrorStatuses(statuses) {
|
|
16282
|
+
return Array.from(new Set(statuses)).sort((left, right) => left - right);
|
|
16283
|
+
}
|
|
16284
|
+
var ImmediateClientErrorStatusesSchema = external_exports.array(ImmediateClientErrorStatusSchema).max(12).transform((statuses) => normalizeImmediateClientErrorStatuses(statuses));
|
|
16285
|
+
var ResolvedCapturePolicySchema = external_exports.object({
|
|
16286
|
+
preset: CapturePresetSchema,
|
|
16287
|
+
capture_logs: CaptureLogsSchema,
|
|
16288
|
+
capture_request_events: CaptureRequestEventsSchema,
|
|
16289
|
+
capture_breadcrumbs: CaptureBreadcrumbsSchema,
|
|
16290
|
+
capture_probe_events: CaptureProbeEventsSchema,
|
|
16291
|
+
immediate_client_error_statuses: ImmediateClientErrorStatusesSchema
|
|
16292
|
+
});
|
|
16293
|
+
var CapturePolicyOverridesSchema = external_exports.object({
|
|
16294
|
+
capture_logs: CaptureLogsSchema.nullable(),
|
|
16295
|
+
capture_request_events: CaptureRequestEventsSchema.nullable(),
|
|
16296
|
+
capture_breadcrumbs: CaptureBreadcrumbsSchema.nullable(),
|
|
16297
|
+
capture_probe_events: CaptureProbeEventsSchema.nullable(),
|
|
16298
|
+
immediate_client_error_statuses: ImmediateClientErrorStatusesSchema.nullable()
|
|
16299
|
+
});
|
|
16300
|
+
var CapturePolicyResponseSchema = external_exports.object({
|
|
16301
|
+
policy: ResolvedCapturePolicySchema,
|
|
16302
|
+
overrides: CapturePolicyOverridesSchema
|
|
16303
|
+
});
|
|
16279
16304
|
var CapturePolicySchema = external_exports.object({
|
|
16280
16305
|
project_id: external_exports.string().uuid(),
|
|
16281
16306
|
preset: CapturePresetSchema,
|
|
@@ -16283,6 +16308,7 @@ var CapturePolicySchema = external_exports.object({
|
|
|
16283
16308
|
capture_request_events: CaptureRequestEventsSchema.nullable(),
|
|
16284
16309
|
capture_breadcrumbs: CaptureBreadcrumbsSchema.nullable(),
|
|
16285
16310
|
capture_probe_events: CaptureProbeEventsSchema.nullable(),
|
|
16311
|
+
immediate_client_error_statuses: ImmediateClientErrorStatusesSchema.nullable(),
|
|
16286
16312
|
updated_at: external_exports.string().datetime()
|
|
16287
16313
|
});
|
|
16288
16314
|
var CapturePolicyUpdateSchema = external_exports.object({
|
|
@@ -16290,21 +16316,48 @@ var CapturePolicyUpdateSchema = external_exports.object({
|
|
|
16290
16316
|
capture_logs: CaptureLogsSchema.nullable().optional(),
|
|
16291
16317
|
capture_request_events: CaptureRequestEventsSchema.nullable().optional(),
|
|
16292
16318
|
capture_breadcrumbs: CaptureBreadcrumbsSchema.nullable().optional(),
|
|
16293
|
-
capture_probe_events: CaptureProbeEventsSchema.nullable().optional()
|
|
16319
|
+
capture_probe_events: CaptureProbeEventsSchema.nullable().optional(),
|
|
16320
|
+
immediate_client_error_statuses: ImmediateClientErrorStatusesSchema.nullable().optional()
|
|
16294
16321
|
});
|
|
16322
|
+
var PRESET_DEFAULTS = {
|
|
16323
|
+
minimal: {
|
|
16324
|
+
capture_logs: "error",
|
|
16325
|
+
capture_request_events: "failures_only",
|
|
16326
|
+
capture_breadcrumbs: "local_only",
|
|
16327
|
+
capture_probe_events: "buffer_only",
|
|
16328
|
+
immediate_client_error_statuses: []
|
|
16329
|
+
},
|
|
16330
|
+
balanced: {
|
|
16331
|
+
capture_logs: "warning",
|
|
16332
|
+
capture_request_events: "failures_only",
|
|
16333
|
+
capture_breadcrumbs: "exception_only",
|
|
16334
|
+
capture_probe_events: "buffer_only",
|
|
16335
|
+
immediate_client_error_statuses: []
|
|
16336
|
+
},
|
|
16337
|
+
investigative: {
|
|
16338
|
+
capture_logs: "info",
|
|
16339
|
+
capture_request_events: "all",
|
|
16340
|
+
capture_breadcrumbs: "standalone",
|
|
16341
|
+
capture_probe_events: "standalone_when_activated",
|
|
16342
|
+
immediate_client_error_statuses: [...RECOMMENDED_IMMEDIATE_CLIENT_ERROR_STATUSES]
|
|
16343
|
+
}
|
|
16344
|
+
};
|
|
16295
16345
|
var BALANCED_IMMEDIATE_REQUEST_STATUSES = /* @__PURE__ */ new Set([408, 423, 424, 425, 429]);
|
|
16296
16346
|
var INVESTIGATIVE_IMMEDIATE_REQUEST_STATUSES = /* @__PURE__ */ new Set([...BALANCED_IMMEDIATE_REQUEST_STATUSES, 409]);
|
|
16297
16347
|
var BALANCED_STANDARD_ANOMALY_STATUSES = /* @__PURE__ */ new Set([401, 403, 404, 409, 422]);
|
|
16298
16348
|
var BALANCED_HIGH_VOLUME_ANOMALY_STATUSES = /* @__PURE__ */ new Set([400, 410]);
|
|
16299
16349
|
var INVESTIGATIVE_ANOMALY_STATUSES = /* @__PURE__ */ new Set([...BALANCED_STANDARD_ANOMALY_STATUSES, ...BALANCED_HIGH_VOLUME_ANOMALY_STATUSES]);
|
|
16300
16350
|
function classifyRequestStatus(input) {
|
|
16301
|
-
const { responseStatus, capturePreset } = input;
|
|
16351
|
+
const { responseStatus, capturePreset, immediateClientErrorStatuses = [] } = input;
|
|
16302
16352
|
if (responseStatus === null || !Number.isFinite(responseStatus)) {
|
|
16303
16353
|
return "context_signal";
|
|
16304
16354
|
}
|
|
16305
16355
|
if (responseStatus >= 500) {
|
|
16306
16356
|
return "incident_signal";
|
|
16307
16357
|
}
|
|
16358
|
+
if (immediateClientErrorStatuses.includes(responseStatus)) {
|
|
16359
|
+
return "incident_signal";
|
|
16360
|
+
}
|
|
16308
16361
|
if (capturePreset === "investigative") {
|
|
16309
16362
|
return INVESTIGATIVE_IMMEDIATE_REQUEST_STATUSES.has(responseStatus) ? "incident_signal" : "context_signal";
|
|
16310
16363
|
}
|
|
@@ -17558,16 +17611,6 @@ function createCliHttpClient(input, dependencies) {
|
|
|
17558
17611
|
}
|
|
17559
17612
|
|
|
17560
17613
|
// ../cli/src/capture-policy-commands.ts
|
|
17561
|
-
var ResolvedCapturePolicySchema = external_exports.object({
|
|
17562
|
-
preset: CapturePresetSchema,
|
|
17563
|
-
capture_logs: CaptureLogsSchema,
|
|
17564
|
-
capture_request_events: CaptureRequestEventsSchema,
|
|
17565
|
-
capture_breadcrumbs: CaptureBreadcrumbsSchema,
|
|
17566
|
-
capture_probe_events: CaptureProbeEventsSchema
|
|
17567
|
-
});
|
|
17568
|
-
var CapturePolicyResponseSchema = external_exports.object({
|
|
17569
|
-
policy: ResolvedCapturePolicySchema
|
|
17570
|
-
});
|
|
17571
17614
|
var CapturePolicyApiError = class extends Error {
|
|
17572
17615
|
status;
|
|
17573
17616
|
constructor(status, message) {
|
|
@@ -17597,7 +17640,7 @@ function createCapturePolicyApi(httpClient) {
|
|
|
17597
17640
|
if (!parsed.success) {
|
|
17598
17641
|
throw new CapturePolicyApiError(500, "Invalid capture policy response.");
|
|
17599
17642
|
}
|
|
17600
|
-
return parsed.data
|
|
17643
|
+
return parsed.data;
|
|
17601
17644
|
},
|
|
17602
17645
|
async updateCapturePolicy(input) {
|
|
17603
17646
|
const response = await httpClient.request({
|
|
@@ -17613,7 +17656,7 @@ function createCapturePolicyApi(httpClient) {
|
|
|
17613
17656
|
if (!parsed.success) {
|
|
17614
17657
|
throw new CapturePolicyApiError(500, "Invalid capture policy response.");
|
|
17615
17658
|
}
|
|
17616
|
-
return parsed.data
|
|
17659
|
+
return parsed.data;
|
|
17617
17660
|
}
|
|
17618
17661
|
};
|
|
17619
17662
|
}
|
|
@@ -18041,7 +18084,7 @@ function getRequestResponseStatus(payload) {
|
|
|
18041
18084
|
const status = payload?.["response_status"];
|
|
18042
18085
|
return typeof status === "number" && Number.isFinite(status) ? status : null;
|
|
18043
18086
|
}
|
|
18044
|
-
function classifyEvent(eventType, logLevel, probeActivationId, payload, capturePreset = "minimal") {
|
|
18087
|
+
function classifyEvent(eventType, logLevel, probeActivationId, payload, capturePreset = "minimal", immediateClientErrorStatuses = []) {
|
|
18045
18088
|
switch (eventType) {
|
|
18046
18089
|
case "backend_exception":
|
|
18047
18090
|
case "frontend_exception":
|
|
@@ -18053,7 +18096,7 @@ function classifyEvent(eventType, logLevel, probeActivationId, payload, captureP
|
|
|
18053
18096
|
return "context_signal";
|
|
18054
18097
|
case "request_event": {
|
|
18055
18098
|
const responseStatus = getRequestResponseStatus(payload);
|
|
18056
|
-
return classifyRequestStatus({ responseStatus, capturePreset });
|
|
18099
|
+
return classifyRequestStatus({ responseStatus, capturePreset, immediateClientErrorStatuses });
|
|
18057
18100
|
}
|
|
18058
18101
|
case "frontend_breadcrumb":
|
|
18059
18102
|
case "deploy_metadata":
|
|
@@ -18978,6 +19021,13 @@ var STORAGE_SCHEMA_MIGRATIONS = [
|
|
|
18978
19021
|
ON slack_destinations (organization_id, is_active, created_at)
|
|
18979
19022
|
`
|
|
18980
19023
|
]
|
|
19024
|
+
}),
|
|
19025
|
+
defineStorageSchemaMigration({
|
|
19026
|
+
id: "202605140001_add_capture_policy_immediate_client_error_statuses",
|
|
19027
|
+
description: "Add nullable immediate client error status overrides to capture policies.",
|
|
19028
|
+
statements: [
|
|
19029
|
+
"ALTER TABLE capture_policies ADD COLUMN IF NOT EXISTS immediate_client_error_statuses jsonb"
|
|
19030
|
+
]
|
|
18981
19031
|
})
|
|
18982
19032
|
];
|
|
18983
19033
|
|
|
@@ -21075,7 +21125,7 @@ function formatResult(input, exitCode, checks, errors, incidentId) {
|
|
|
21075
21125
|
};
|
|
21076
21126
|
}
|
|
21077
21127
|
function buildCloudSuggestedActions(status, incidentId, mode = "passive_recent_incident") {
|
|
21078
|
-
if (status === "healthy" && incidentId !== void 0 && mode === "active_5xx") {
|
|
21128
|
+
if (status === "healthy" && incidentId !== void 0 && (mode === "active_5xx" || mode === "active_4xx")) {
|
|
21079
21129
|
return [
|
|
21080
21130
|
`Run debugbundle inspect ${incidentId} --source cloud to inspect why the incident fired.`,
|
|
21081
21131
|
`Run debugbundle bundle ${incidentId} --source cloud to fetch the generated debug bundle.`
|
|
@@ -21145,11 +21195,11 @@ function localFailureStepName(checks) {
|
|
|
21145
21195
|
function cloudVerificationRunId(now) {
|
|
21146
21196
|
return now.toISOString().replace(/[-:.TZ]/g, "").slice(0, 14);
|
|
21147
21197
|
}
|
|
21148
|
-
function requestFailureReason() {
|
|
21198
|
+
function requestFailureReason(responseStatus) {
|
|
21149
21199
|
const incidentReason = deriveIncidentReasonFromSignal({
|
|
21150
21200
|
event_type: "request_event",
|
|
21151
21201
|
event_class: "incident_signal",
|
|
21152
|
-
response_status:
|
|
21202
|
+
response_status: responseStatus
|
|
21153
21203
|
});
|
|
21154
21204
|
if (incidentReason === null) {
|
|
21155
21205
|
throw new Error("request_failure_reason_unavailable");
|
|
@@ -21158,6 +21208,9 @@ function requestFailureReason() {
|
|
|
21158
21208
|
}
|
|
21159
21209
|
function buildCloudVerificationEvent(input) {
|
|
21160
21210
|
const runId = cloudVerificationRunId(input.now);
|
|
21211
|
+
const is5xxVerification = input.responseStatus >= 500;
|
|
21212
|
+
const routeTemplate = is5xxVerification ? "/debugbundle/verify/cloud" : `/debugbundle/verify/cloud/client-error/${input.responseStatus}`;
|
|
21213
|
+
const verificationLabel = is5xxVerification ? "true" : `client-error-${input.responseStatus}`;
|
|
21161
21214
|
return createEventEnvelope({
|
|
21162
21215
|
event_type: "request_event",
|
|
21163
21216
|
sdk_name: "debugbundle-cli",
|
|
@@ -21171,28 +21224,39 @@ function buildCloudVerificationEvent(input) {
|
|
|
21171
21224
|
occurred_at: input.now.toISOString(),
|
|
21172
21225
|
payload: {
|
|
21173
21226
|
method: "GET",
|
|
21174
|
-
path:
|
|
21175
|
-
route_template:
|
|
21227
|
+
path: routeTemplate,
|
|
21228
|
+
route_template: routeTemplate,
|
|
21176
21229
|
query: {
|
|
21177
21230
|
debugbundle_verification: true,
|
|
21178
|
-
run_id: runId
|
|
21231
|
+
run_id: runId,
|
|
21232
|
+
synthetic_status: input.responseStatus
|
|
21179
21233
|
},
|
|
21180
21234
|
headers: {
|
|
21181
|
-
"x-debugbundle-verification":
|
|
21235
|
+
"x-debugbundle-verification": verificationLabel
|
|
21182
21236
|
},
|
|
21183
|
-
response_status:
|
|
21237
|
+
response_status: input.responseStatus,
|
|
21184
21238
|
duration_ms: 37,
|
|
21185
21239
|
response_headers: {
|
|
21186
|
-
"x-debugbundle-verification":
|
|
21240
|
+
"x-debugbundle-verification": verificationLabel
|
|
21187
21241
|
},
|
|
21188
21242
|
response_body: {
|
|
21189
|
-
error: "debugbundle_cloud_verification",
|
|
21243
|
+
error: is5xxVerification ? "debugbundle_cloud_verification" : "debugbundle_cloud_client_error_verification",
|
|
21190
21244
|
synthetic: true,
|
|
21191
|
-
run_id: runId
|
|
21245
|
+
run_id: runId,
|
|
21246
|
+
response_status: input.responseStatus
|
|
21192
21247
|
}
|
|
21193
21248
|
}
|
|
21194
21249
|
});
|
|
21195
21250
|
}
|
|
21251
|
+
function validateActiveCloudVerificationInput(input) {
|
|
21252
|
+
if (input.trigger5xx === true && input.trigger4xxStatus !== void 0) {
|
|
21253
|
+
return "Choose either --trigger-5xx or --trigger-4xx, not both.";
|
|
21254
|
+
}
|
|
21255
|
+
if (input.trigger4xxStatus !== void 0 && (input.trigger4xxStatus < 400 || input.trigger4xxStatus > 499)) {
|
|
21256
|
+
return "--trigger-4xx must be an integer status between 400 and 499.";
|
|
21257
|
+
}
|
|
21258
|
+
return null;
|
|
21259
|
+
}
|
|
21196
21260
|
async function sendEventsToApi(input, dependencies = {}) {
|
|
21197
21261
|
const fetchImpl = dependencies.fetchImpl ?? fetch;
|
|
21198
21262
|
const baseUrl = input.baseUrl.endsWith("/") ? input.baseUrl.slice(0, -1) : input.baseUrl;
|
|
@@ -21384,6 +21448,15 @@ async function verifyCloudCommand(input, dependencies = {}) {
|
|
|
21384
21448
|
const checks = [];
|
|
21385
21449
|
const environment = input.environment ?? "production";
|
|
21386
21450
|
const maxAgeMinutes = input.maxAgeMinutes ?? 15;
|
|
21451
|
+
const activeInputError = validateActiveCloudVerificationInput(input);
|
|
21452
|
+
if (activeInputError !== null) {
|
|
21453
|
+
checks.push({
|
|
21454
|
+
name: "trigger-input",
|
|
21455
|
+
status: "error",
|
|
21456
|
+
message: activeInputError
|
|
21457
|
+
});
|
|
21458
|
+
return formatCloudResult(input, 4, checks, [activeInputError]);
|
|
21459
|
+
}
|
|
21387
21460
|
const readAuthState = dependencies.readAuthState ?? readCliAuthState;
|
|
21388
21461
|
let authState;
|
|
21389
21462
|
try {
|
|
@@ -21416,7 +21489,7 @@ async function verifyCloudCommand(input, dependencies = {}) {
|
|
|
21416
21489
|
requestInput,
|
|
21417
21490
|
dependencies.fetchImpl === void 0 ? {} : { fetchImpl: dependencies.fetchImpl }
|
|
21418
21491
|
));
|
|
21419
|
-
if (input.trigger5xx === true) {
|
|
21492
|
+
if (input.trigger5xx === true || input.trigger4xxStatus !== void 0) {
|
|
21420
21493
|
const verificationStartedAt = now();
|
|
21421
21494
|
const runId = cloudVerificationRunId(verificationStartedAt);
|
|
21422
21495
|
const serviceName = input.service ?? `debugbundle-verify-cloud-${runId}`;
|
|
@@ -21424,16 +21497,20 @@ async function verifyCloudCommand(input, dependencies = {}) {
|
|
|
21424
21497
|
const pollAttempts = dependencies.pollAttempts ?? 6;
|
|
21425
21498
|
const pollIntervalMs = dependencies.pollIntervalMs ?? 2e3;
|
|
21426
21499
|
const sleep = dependencies.sleep ?? ((milliseconds) => new Promise((resolve) => setTimeout(resolve, milliseconds)));
|
|
21500
|
+
const responseStatus = input.trigger4xxStatus ?? 503;
|
|
21501
|
+
const activeMode = input.trigger4xxStatus !== void 0 ? "active_4xx" : "active_5xx";
|
|
21502
|
+
const activeCheckName = input.trigger4xxStatus !== void 0 ? "active-4xx-event" : "active-5xx-event";
|
|
21503
|
+
const statusLabel = input.trigger4xxStatus !== void 0 ? `${responseStatus}` : "5xx";
|
|
21427
21504
|
const verification = {
|
|
21428
|
-
mode:
|
|
21505
|
+
mode: activeMode,
|
|
21429
21506
|
bundle_status: "unknown",
|
|
21430
|
-
classification_reason: requestFailureReason()
|
|
21507
|
+
classification_reason: requestFailureReason(responseStatus)
|
|
21431
21508
|
};
|
|
21432
21509
|
const errors = [];
|
|
21433
21510
|
let exitCode = 0;
|
|
21434
21511
|
let tokenId = null;
|
|
21435
21512
|
let incidentId;
|
|
21436
|
-
let activeStep =
|
|
21513
|
+
let activeStep = activeCheckName;
|
|
21437
21514
|
try {
|
|
21438
21515
|
const token = await createProjectToken({
|
|
21439
21516
|
bearerToken: authState.bearer_token,
|
|
@@ -21447,7 +21524,8 @@ async function verifyCloudCommand(input, dependencies = {}) {
|
|
|
21447
21524
|
const event = buildCloudVerificationEvent({
|
|
21448
21525
|
now: verificationStartedAt,
|
|
21449
21526
|
serviceName,
|
|
21450
|
-
environment
|
|
21527
|
+
environment,
|
|
21528
|
+
responseStatus
|
|
21451
21529
|
});
|
|
21452
21530
|
const ingestion = await sendEvents({
|
|
21453
21531
|
baseUrl: authState.base_url,
|
|
@@ -21456,12 +21534,12 @@ async function verifyCloudCommand(input, dependencies = {}) {
|
|
|
21456
21534
|
});
|
|
21457
21535
|
verification.accepted_event_count = ingestion.accepted;
|
|
21458
21536
|
if (ingestion.accepted < 1 || ingestion.rejected > 0 || ingestion.errors.length > 0) {
|
|
21459
|
-
throw new Error(`Synthetic
|
|
21537
|
+
throw new Error(`Synthetic ${statusLabel} ingestion was not fully accepted: accepted=${ingestion.accepted}, rejected=${ingestion.rejected}.`);
|
|
21460
21538
|
}
|
|
21461
21539
|
checks.push({
|
|
21462
|
-
name:
|
|
21540
|
+
name: activeCheckName,
|
|
21463
21541
|
status: "ok",
|
|
21464
|
-
message:
|
|
21542
|
+
message: `Sent synthetic ${statusLabel} request_event through cloud ingestion.`
|
|
21465
21543
|
});
|
|
21466
21544
|
activeStep = "incident-retrieval";
|
|
21467
21545
|
for (let attempt = 1; attempt <= pollAttempts; attempt += 1) {
|
|
@@ -21479,7 +21557,7 @@ async function verifyCloudCommand(input, dependencies = {}) {
|
|
|
21479
21557
|
if (candidate !== void 0) {
|
|
21480
21558
|
incidentId = candidate.incident_id;
|
|
21481
21559
|
verification.incident_id = candidate.incident_id;
|
|
21482
|
-
verification.classification_reason = candidate.incident_reason ?? requestFailureReason();
|
|
21560
|
+
verification.classification_reason = candidate.incident_reason ?? requestFailureReason(responseStatus);
|
|
21483
21561
|
break;
|
|
21484
21562
|
}
|
|
21485
21563
|
if (attempt < pollAttempts) {
|
|
@@ -21487,12 +21565,12 @@ async function verifyCloudCommand(input, dependencies = {}) {
|
|
|
21487
21565
|
}
|
|
21488
21566
|
}
|
|
21489
21567
|
if (incidentId === void 0) {
|
|
21490
|
-
throw new Error(
|
|
21568
|
+
throw new Error(`Synthetic ${statusLabel} request was accepted but no matching cloud incident was visible yet.`);
|
|
21491
21569
|
}
|
|
21492
21570
|
checks.push({
|
|
21493
21571
|
name: "incident-retrieval",
|
|
21494
21572
|
status: "ok",
|
|
21495
|
-
message: `Retrieved cloud incident ${incidentId} for the synthetic
|
|
21573
|
+
message: `Retrieved cloud incident ${incidentId} for the synthetic ${statusLabel} request.`
|
|
21496
21574
|
});
|
|
21497
21575
|
activeStep = "bundle-status";
|
|
21498
21576
|
const bundle = await getBundle({
|
|
@@ -22142,12 +22220,10 @@ function createCapturePolicyMcpTools(api) {
|
|
|
22142
22220
|
return {
|
|
22143
22221
|
async get_capture_policy(input) {
|
|
22144
22222
|
try {
|
|
22145
|
-
return {
|
|
22146
|
-
|
|
22147
|
-
|
|
22148
|
-
|
|
22149
|
-
})
|
|
22150
|
-
};
|
|
22223
|
+
return await api.getCapturePolicy({
|
|
22224
|
+
bearerToken: String(input["bearerToken"]),
|
|
22225
|
+
projectId: String(input["projectId"])
|
|
22226
|
+
});
|
|
22151
22227
|
} catch (error) {
|
|
22152
22228
|
mapMcpError4(error);
|
|
22153
22229
|
}
|
|
@@ -22155,13 +22231,11 @@ function createCapturePolicyMcpTools(api) {
|
|
|
22155
22231
|
async update_capture_policy(input) {
|
|
22156
22232
|
try {
|
|
22157
22233
|
const update = typeof input["update"] === "object" && input["update"] !== null ? input["update"] : {};
|
|
22158
|
-
return {
|
|
22159
|
-
|
|
22160
|
-
|
|
22161
|
-
|
|
22162
|
-
|
|
22163
|
-
})
|
|
22164
|
-
};
|
|
22234
|
+
return await api.updateCapturePolicy({
|
|
22235
|
+
bearerToken: String(input["bearerToken"]),
|
|
22236
|
+
projectId: String(input["projectId"]),
|
|
22237
|
+
update
|
|
22238
|
+
});
|
|
22165
22239
|
} catch (error) {
|
|
22166
22240
|
mapMcpError4(error);
|
|
22167
22241
|
}
|
|
@@ -23236,6 +23310,7 @@ function createSetupMcpTools(commands) {
|
|
|
23236
23310
|
...typeof input["environment"] === "string" ? { environment: input["environment"] } : {},
|
|
23237
23311
|
...typeof input["maxAgeMinutes"] === "number" ? { maxAgeMinutes: input["maxAgeMinutes"] } : {},
|
|
23238
23312
|
...input["trigger5xx"] === true ? { trigger5xx: true } : {},
|
|
23313
|
+
...typeof input["trigger4xxStatus"] === "number" ? { trigger4xxStatus: input["trigger4xxStatus"] } : {},
|
|
23239
23314
|
...typeof input["authFilePath"] === "string" ? { authFilePath: input["authFilePath"] } : {},
|
|
23240
23315
|
json: true
|
|
23241
23316
|
})
|
|
@@ -25008,13 +25083,14 @@ var MCP_TOOL_CATALOG = [
|
|
|
25008
25083
|
{
|
|
25009
25084
|
name: "verify_cloud",
|
|
25010
25085
|
group: "setup",
|
|
25011
|
-
description: "Verify
|
|
25086
|
+
description: "Verify hosted ingestion or actively prove hosted incident creation.",
|
|
25012
25087
|
inputSchema: external_exports.object({
|
|
25013
25088
|
projectId: external_exports.string(),
|
|
25014
25089
|
service: external_exports.string().optional(),
|
|
25015
25090
|
environment: external_exports.string().optional(),
|
|
25016
25091
|
maxAgeMinutes: external_exports.number().optional(),
|
|
25017
25092
|
trigger5xx: external_exports.boolean().optional(),
|
|
25093
|
+
trigger4xxStatus: external_exports.number().int().min(400).max(499).optional(),
|
|
25018
25094
|
authFilePath: external_exports.string().optional()
|
|
25019
25095
|
})
|
|
25020
25096
|
},
|
|
@@ -25533,7 +25609,8 @@ var MCP_TOOL_CATALOG = [
|
|
|
25533
25609
|
capture_logs: external_exports.string().nullable().optional(),
|
|
25534
25610
|
capture_request_events: external_exports.string().nullable().optional(),
|
|
25535
25611
|
capture_breadcrumbs: external_exports.string().nullable().optional(),
|
|
25536
|
-
capture_probe_events: external_exports.string().nullable().optional()
|
|
25612
|
+
capture_probe_events: external_exports.string().nullable().optional(),
|
|
25613
|
+
immediate_client_error_statuses: external_exports.array(external_exports.number().int().min(400).max(499)).nullable().optional()
|
|
25537
25614
|
})
|
|
25538
25615
|
})
|
|
25539
25616
|
},
|