@debugbundle/cli 1.5.2 → 1.5.4
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 +300 -64
- package/package.json +1 -1
package/dist/main.cjs
CHANGED
|
@@ -15405,11 +15405,16 @@ var ServiceSchema = external_exports.object({
|
|
|
15405
15405
|
environment: external_exports.string().min(1)
|
|
15406
15406
|
});
|
|
15407
15407
|
var CorrelationSchema = external_exports.object({
|
|
15408
|
-
request_id: external_exports.string().nullable(),
|
|
15409
|
-
trace_id: external_exports.string().nullable(),
|
|
15410
|
-
session_id: external_exports.string().nullable(),
|
|
15411
|
-
user_id_hash: external_exports.string().nullable()
|
|
15412
|
-
}).strict()
|
|
15408
|
+
request_id: external_exports.string().nullable().optional(),
|
|
15409
|
+
trace_id: external_exports.string().nullable().optional(),
|
|
15410
|
+
session_id: external_exports.string().nullable().optional(),
|
|
15411
|
+
user_id_hash: external_exports.string().nullable().optional()
|
|
15412
|
+
}).strict().transform((value) => ({
|
|
15413
|
+
request_id: value.request_id ?? null,
|
|
15414
|
+
trace_id: value.trace_id ?? null,
|
|
15415
|
+
session_id: value.session_id ?? null,
|
|
15416
|
+
user_id_hash: value.user_id_hash ?? null
|
|
15417
|
+
}));
|
|
15413
15418
|
var InlineProbeDataItemSchema = external_exports.object({
|
|
15414
15419
|
label: external_exports.string().min(1),
|
|
15415
15420
|
data: external_exports.record(external_exports.string(), external_exports.unknown()),
|
|
@@ -15589,7 +15594,8 @@ var EnvelopeBaseSchema = external_exports.object({
|
|
|
15589
15594
|
sdk_version: external_exports.string().min(1),
|
|
15590
15595
|
service: ServiceSchema,
|
|
15591
15596
|
occurred_at: external_exports.string().datetime(),
|
|
15592
|
-
correlation: CorrelationSchema.optional()
|
|
15597
|
+
correlation: CorrelationSchema.optional(),
|
|
15598
|
+
context: external_exports.record(external_exports.string(), external_exports.unknown()).optional()
|
|
15593
15599
|
}).strict();
|
|
15594
15600
|
var EventEnvelopeSchema = external_exports.discriminatedUnion("event_type", [
|
|
15595
15601
|
EnvelopeBaseSchema.extend({ event_type: external_exports.literal("backend_exception"), payload: BackendExceptionPayloadSchema }),
|
|
@@ -15618,6 +15624,7 @@ function createEventEnvelope(input2) {
|
|
|
15618
15624
|
session_id: null,
|
|
15619
15625
|
user_id_hash: null
|
|
15620
15626
|
},
|
|
15627
|
+
context: input2.context,
|
|
15621
15628
|
payload: input2.payload
|
|
15622
15629
|
};
|
|
15623
15630
|
return EventEnvelopeSchema.parse(candidate);
|
|
@@ -15985,8 +15992,8 @@ function buildSkill() {
|
|
|
15985
15992
|
"When the user reports a bug, runtime failure, production incident, regression, broken deploy, or unknown error, start here before reading arbitrary source files.",
|
|
15986
15993
|
"",
|
|
15987
15994
|
"1. Run `debugbundle doctor --json` to learn whether the project is local-only or connected and whether the local scaffold is healthy.",
|
|
15988
|
-
"2. If `debugbundle doctor --json` reports `mode=local-only`, start with `debugbundle incidents --source local --status
|
|
15989
|
-
"3. If `debugbundle doctor --json` reports `mode=connected` and the target environment is cloud-enabled, check both `debugbundle incidents --source local --status
|
|
15995
|
+
"2. If `debugbundle doctor --json` reports `mode=local-only`, start with `debugbundle incidents --source local --status active --json`.",
|
|
15996
|
+
"3. If `debugbundle doctor --json` reports `mode=connected` and the target environment is cloud-enabled, check both `debugbundle incidents --source local --status active --json` and `debugbundle incidents --source cloud --status active --json` unless the user explicitly scoped the issue to local-only development. For user-reported production incidents, check cloud incidents after local incidents and explicitly report whether each source had matches.",
|
|
15990
15997
|
"4. Inspect the chosen incident with `debugbundle inspect <incident-id> --source <local|cloud> --json` and `debugbundle explain <incident-id> --source <local|cloud> --json`.",
|
|
15991
15998
|
"5. Fetch evidence before editing code: `debugbundle bundle <incident-id> --source <local|cloud> --json` and `debugbundle reproduce <incident-id> --source <local|cloud> --json`.",
|
|
15992
15999
|
"6. If local SDK or relay events have landed but no bundle exists yet, run `debugbundle process --preset <minimal|balanced|investigative> --json` and then list incidents again.",
|
|
@@ -16006,7 +16013,7 @@ function buildSkill() {
|
|
|
16006
16013
|
"2. Inspect the incident bundle and reproduction artifact before proposing a fix.",
|
|
16007
16014
|
"3. Run `debugbundle analyze --type improvement --local` after local processing when you need a deterministic change plan.",
|
|
16008
16015
|
"4. Apply the narrowest fix, then validate it with the repository test workflow from `.debugbundle/profile.json`.",
|
|
16009
|
-
"5. When the fix is confirmed, or when the incident was intentionally generated for smoke, verification, or dogfooding, resolve it with `debugbundle resolve <incident-id> [incident-id ...]` or MCP `resolve_incident` / `resolve_incidents` so the
|
|
16016
|
+
"5. When the fix is confirmed, or when the incident was intentionally generated for smoke, verification, or dogfooding, resolve it with `debugbundle resolve <incident-id> [incident-id ...]` or MCP `resolve_incident` / `resolve_incidents` so the needs-attention queue stays actionable.",
|
|
16010
16017
|
"",
|
|
16011
16018
|
"## Investigation Controls",
|
|
16012
16019
|
"",
|
|
@@ -16118,7 +16125,7 @@ function buildCliReference() {
|
|
|
16118
16125
|
"",
|
|
16119
16126
|
"## Investigation",
|
|
16120
16127
|
"",
|
|
16121
|
-
"- `debugbundle incidents [--source <local|cloud>] [--project-id <id>] [--environment <name>] [--service <name>] [--status <
|
|
16128
|
+
"- `debugbundle incidents [--source <local|cloud>] [--project-id <id>] [--environment <name>] [--service <name>] [--status <active|open|resolved|regressed|all>] [--severity <severity>] [--cursor <cursor>] [--limit <n>] [--json]`",
|
|
16122
16129
|
"- `debugbundle inspect <incident-id> [--source <local|cloud>] [--json]`",
|
|
16123
16130
|
"- `debugbundle explain <incident-id> [--source <local|cloud>] [--json]`",
|
|
16124
16131
|
"- `debugbundle bundle <incident-id> [--source <local|cloud>] [--json]`",
|
|
@@ -16208,15 +16215,15 @@ function buildCliReference() {
|
|
|
16208
16215
|
"Review open incidents and resolve the intentionally generated ones:",
|
|
16209
16216
|
"",
|
|
16210
16217
|
"```bash",
|
|
16211
|
-
"debugbundle incidents --status
|
|
16218
|
+
"debugbundle incidents --status active --json",
|
|
16212
16219
|
"debugbundle resolve <incident-id> [incident-id ...]",
|
|
16213
|
-
"debugbundle incidents --status
|
|
16220
|
+
"debugbundle incidents --status active --json",
|
|
16214
16221
|
"```",
|
|
16215
16222
|
"",
|
|
16216
16223
|
"If you want a title-based batch cleanup and have `jq` available:",
|
|
16217
16224
|
"",
|
|
16218
16225
|
"```bash",
|
|
16219
|
-
"debugbundle incidents --status
|
|
16226
|
+
"debugbundle incidents --status active --json \\",
|
|
16220
16227
|
` | jq -r '.incidents[] | select(.title | test("smoke test|dogfood|verification|synthetic"; "i")) | .incident_id' \\`,
|
|
16221
16228
|
" | xargs debugbundle resolve",
|
|
16222
16229
|
"```",
|
|
@@ -16295,10 +16302,10 @@ function buildMcpReference() {
|
|
|
16295
16302
|
"",
|
|
16296
16303
|
"## Smoke-Test Cleanup Recipe",
|
|
16297
16304
|
"",
|
|
16298
|
-
'1. Call `list_incidents` with `status: "
|
|
16305
|
+
'1. Call `list_incidents` with `status: "active"`.',
|
|
16299
16306
|
"2. Filter incidents whose titles show they were intentionally generated for smoke, dogfood, verification, or synthetic checks.",
|
|
16300
16307
|
"3. Call `resolve_incidents` for verified synthetic incidents, or `resolve_incident` for a single incident.",
|
|
16301
|
-
"4. Call `list_incidents` again and confirm the
|
|
16308
|
+
"4. Call `list_incidents` again and confirm the needs-attention queue only contains actionable failures.",
|
|
16302
16309
|
""
|
|
16303
16310
|
].join("\n");
|
|
16304
16311
|
}
|
|
@@ -16881,7 +16888,7 @@ var IncidentReasonSchema = external_exports.object({
|
|
|
16881
16888
|
event_type: external_exports.enum(["backend_exception", "frontend_exception", "request_event", "log_event"]),
|
|
16882
16889
|
event_class: external_exports.literal("incident_signal"),
|
|
16883
16890
|
matched_policy: external_exports.string()
|
|
16884
|
-
})
|
|
16891
|
+
});
|
|
16885
16892
|
var IncidentSchema = external_exports.object({
|
|
16886
16893
|
incident_id: external_exports.string(),
|
|
16887
16894
|
project_id: external_exports.string(),
|
|
@@ -16904,7 +16911,7 @@ var IncidentSchema = external_exports.object({
|
|
|
16904
16911
|
regressed_at: external_exports.string().nullable(),
|
|
16905
16912
|
matched_fields: external_exports.array(external_exports.string()),
|
|
16906
16913
|
incident_reason: IncidentReasonSchema.optional()
|
|
16907
|
-
})
|
|
16914
|
+
});
|
|
16908
16915
|
var ImprovementSchema = external_exports.object({
|
|
16909
16916
|
improvement_id: external_exports.string(),
|
|
16910
16917
|
project_id: external_exports.string(),
|
|
@@ -16934,7 +16941,7 @@ var ImprovementSchema = external_exports.object({
|
|
|
16934
16941
|
bundle_created_at: external_exports.string().nullable(),
|
|
16935
16942
|
bundle_updated_at: external_exports.string().nullable(),
|
|
16936
16943
|
bundle_failure_reason: external_exports.string().nullable()
|
|
16937
|
-
})
|
|
16944
|
+
});
|
|
16938
16945
|
var ServiceSchema3 = external_exports.object({
|
|
16939
16946
|
service_id: external_exports.string(),
|
|
16940
16947
|
project_id: external_exports.string(),
|
|
@@ -16942,37 +16949,37 @@ var ServiceSchema3 = external_exports.object({
|
|
|
16942
16949
|
runtime: external_exports.string().nullable(),
|
|
16943
16950
|
framework: external_exports.string().nullable(),
|
|
16944
16951
|
environment: external_exports.string()
|
|
16945
|
-
})
|
|
16952
|
+
});
|
|
16946
16953
|
var LogSchema = external_exports.object({
|
|
16947
16954
|
event_id: external_exports.string(),
|
|
16948
16955
|
event_type: external_exports.string(),
|
|
16949
16956
|
occurred_at: external_exports.string(),
|
|
16950
16957
|
is_sampled: external_exports.boolean(),
|
|
16951
16958
|
level: external_exports.string().nullable()
|
|
16952
|
-
})
|
|
16959
|
+
});
|
|
16953
16960
|
var IncidentsResponseSchema = external_exports.object({
|
|
16954
16961
|
incidents: external_exports.array(IncidentSchema),
|
|
16955
16962
|
next_cursor: external_exports.string().nullable().optional()
|
|
16956
|
-
})
|
|
16963
|
+
});
|
|
16957
16964
|
var IncidentResponseSchema = external_exports.object({
|
|
16958
16965
|
incident: IncidentSchema
|
|
16959
|
-
})
|
|
16966
|
+
});
|
|
16960
16967
|
var BulkIncidentResponseSchema = external_exports.object({
|
|
16961
16968
|
incidents: external_exports.array(IncidentSchema)
|
|
16962
|
-
})
|
|
16969
|
+
});
|
|
16963
16970
|
var ImprovementResponseSchema = external_exports.object({
|
|
16964
16971
|
improvement: ImprovementSchema
|
|
16965
|
-
})
|
|
16972
|
+
});
|
|
16966
16973
|
var IncidentContextArtifactSchema = external_exports.object({
|
|
16967
16974
|
status: external_exports.enum(["ready", "pending", "failed"]),
|
|
16968
16975
|
body: external_exports.unknown().optional(),
|
|
16969
16976
|
reason: external_exports.string().nullable().optional()
|
|
16970
|
-
})
|
|
16977
|
+
});
|
|
16971
16978
|
var IncidentContextLogsSchema = external_exports.object({
|
|
16972
16979
|
source: external_exports.enum(["retrieval", "bundle_context", "none"]),
|
|
16973
16980
|
items: external_exports.array(external_exports.unknown()),
|
|
16974
16981
|
next_cursor: external_exports.string().nullable()
|
|
16975
|
-
})
|
|
16982
|
+
});
|
|
16976
16983
|
var IncidentContextDeploySchema = external_exports.object({
|
|
16977
16984
|
latest_deployment_id: external_exports.string().nullable(),
|
|
16978
16985
|
commit_sha: external_exports.string().nullable(),
|
|
@@ -16980,23 +16987,23 @@ var IncidentContextDeploySchema = external_exports.object({
|
|
|
16980
16987
|
branch: external_exports.string().nullable(),
|
|
16981
16988
|
deployed_at: external_exports.string().nullable(),
|
|
16982
16989
|
regression_window: external_exports.boolean().nullable()
|
|
16983
|
-
})
|
|
16990
|
+
});
|
|
16984
16991
|
var IncidentContextGroupingSchema = external_exports.object({
|
|
16985
16992
|
fingerprint: external_exports.string(),
|
|
16986
16993
|
fingerprint_version: external_exports.string(),
|
|
16987
16994
|
matched_fields: external_exports.array(external_exports.string())
|
|
16988
|
-
})
|
|
16995
|
+
});
|
|
16989
16996
|
var IncidentContextVisibilitySchema = external_exports.object({
|
|
16990
16997
|
grouping: external_exports.string(),
|
|
16991
16998
|
bundle_regeneration: external_exports.string(),
|
|
16992
16999
|
spike_detection: external_exports.string(),
|
|
16993
17000
|
notification_cooldown: external_exports.string()
|
|
16994
|
-
})
|
|
17001
|
+
});
|
|
16995
17002
|
var IncidentContextRedactionSchema = external_exports.object({
|
|
16996
17003
|
redacted: external_exports.boolean(),
|
|
16997
17004
|
fields: external_exports.array(external_exports.string()),
|
|
16998
17005
|
notes: external_exports.string().nullable()
|
|
16999
|
-
})
|
|
17006
|
+
});
|
|
17000
17007
|
var IncidentContextPrimarySignalSchema = external_exports.object({
|
|
17001
17008
|
kind: IncidentReasonSchema.shape.kind.nullable(),
|
|
17002
17009
|
event_type: external_exports.string().nullable(),
|
|
@@ -17016,7 +17023,14 @@ var IncidentContextPrimarySignalSchema = external_exports.object({
|
|
|
17016
17023
|
line: external_exports.number().nullable(),
|
|
17017
17024
|
function: external_exports.string().nullable()
|
|
17018
17025
|
}).nullable()
|
|
17019
|
-
})
|
|
17026
|
+
});
|
|
17027
|
+
var IncidentContextBrowserSignalSchema = external_exports.object({
|
|
17028
|
+
browser_event_kind: external_exports.string().nullable(),
|
|
17029
|
+
browser_event_opaque: external_exports.boolean().nullable(),
|
|
17030
|
+
browser_event_message: external_exports.string().nullable(),
|
|
17031
|
+
client_kind: external_exports.enum(["human", "bot", "unknown"]),
|
|
17032
|
+
bot_family: external_exports.string().nullable()
|
|
17033
|
+
});
|
|
17020
17034
|
var IncidentContextSchema = external_exports.object({
|
|
17021
17035
|
incident: IncidentSchema,
|
|
17022
17036
|
incident_reason: IncidentReasonSchema.nullable(),
|
|
@@ -17028,22 +17042,23 @@ var IncidentContextSchema = external_exports.object({
|
|
|
17028
17042
|
grouping: IncidentContextGroupingSchema,
|
|
17029
17043
|
visibility: IncidentContextVisibilitySchema,
|
|
17030
17044
|
redaction: IncidentContextRedactionSchema.nullable(),
|
|
17045
|
+
browser_signal: IncidentContextBrowserSignalSchema.nullable().optional(),
|
|
17031
17046
|
suggested_next_checks: external_exports.array(external_exports.string())
|
|
17032
|
-
})
|
|
17047
|
+
});
|
|
17033
17048
|
var ServicesResponseSchema = external_exports.object({
|
|
17034
17049
|
services: external_exports.array(ServiceSchema3)
|
|
17035
|
-
})
|
|
17050
|
+
});
|
|
17036
17051
|
var ImprovementsResponseSchema = external_exports.object({
|
|
17037
17052
|
improvements: external_exports.array(ImprovementSchema),
|
|
17038
17053
|
next_cursor: external_exports.string().nullable().optional()
|
|
17039
|
-
})
|
|
17054
|
+
});
|
|
17040
17055
|
var LogsResponseSchema = external_exports.object({
|
|
17041
17056
|
logs: external_exports.array(LogSchema),
|
|
17042
17057
|
next_cursor: external_exports.string().nullable().optional()
|
|
17043
|
-
})
|
|
17058
|
+
});
|
|
17044
17059
|
var PendingStatusSchema = external_exports.object({
|
|
17045
17060
|
status: external_exports.literal("pending")
|
|
17046
|
-
})
|
|
17061
|
+
});
|
|
17047
17062
|
var BundleSchema = external_exports.object({
|
|
17048
17063
|
bundle_version: external_exports.number().int()
|
|
17049
17064
|
}).passthrough();
|
|
@@ -17051,14 +17066,14 @@ var ReproductionArtifactsSchema2 = external_exports.object({
|
|
|
17051
17066
|
curl: external_exports.string().nullable().optional(),
|
|
17052
17067
|
httpie: external_exports.string().nullable().optional(),
|
|
17053
17068
|
json_spec: external_exports.unknown().nullable().optional()
|
|
17054
|
-
})
|
|
17069
|
+
});
|
|
17055
17070
|
var ReproductionSchema = external_exports.object({
|
|
17056
17071
|
possible: external_exports.boolean(),
|
|
17057
17072
|
confidence: external_exports.number(),
|
|
17058
17073
|
reason: external_exports.string(),
|
|
17059
17074
|
artifacts: ReproductionArtifactsSchema2.nullable(),
|
|
17060
17075
|
feasibility_reference: external_exports.unknown().nullable()
|
|
17061
|
-
})
|
|
17076
|
+
});
|
|
17062
17077
|
var BundleResponseSchema = external_exports.union([PendingStatusSchema, BundleSchema]);
|
|
17063
17078
|
var ReproductionResponseSchema = external_exports.union([PendingStatusSchema, ReproductionSchema]);
|
|
17064
17079
|
var ApiErrorResponseSchema = external_exports.object({
|
|
@@ -17135,6 +17150,9 @@ function createRetrievalApi(client) {
|
|
|
17135
17150
|
if (input2.firstSeenAfter !== void 0) {
|
|
17136
17151
|
query.set("first_seen_after", input2.firstSeenAfter);
|
|
17137
17152
|
}
|
|
17153
|
+
if (input2.attentionAfter !== void 0) {
|
|
17154
|
+
query.set("attention_after", input2.attentionAfter);
|
|
17155
|
+
}
|
|
17138
17156
|
if (input2.cursor !== void 0) {
|
|
17139
17157
|
query.set("cursor", input2.cursor);
|
|
17140
17158
|
}
|
|
@@ -17385,7 +17403,7 @@ function createRetrievalApi(client) {
|
|
|
17385
17403
|
status: external_exports.literal("failed"),
|
|
17386
17404
|
reason: external_exports.string(),
|
|
17387
17405
|
related_incident_ids: external_exports.array(external_exports.string()).optional()
|
|
17388
|
-
})
|
|
17406
|
+
})
|
|
17389
17407
|
])
|
|
17390
17408
|
);
|
|
17391
17409
|
}
|
|
@@ -17891,6 +17909,167 @@ function redact(payload, options) {
|
|
|
17891
17909
|
|
|
17892
17910
|
// ../../packages/event-normalizer/src/index.ts
|
|
17893
17911
|
var FINGERPRINT_VERSION = "v1";
|
|
17912
|
+
var PAYLOAD_ALLOWED_KEYS = {
|
|
17913
|
+
backend_exception: /* @__PURE__ */ new Set(["name", "message", "stack", "handled", "request", "response", "runtime", "probe_data"]),
|
|
17914
|
+
request_event: /* @__PURE__ */ new Set([
|
|
17915
|
+
"method",
|
|
17916
|
+
"path",
|
|
17917
|
+
"query",
|
|
17918
|
+
"headers",
|
|
17919
|
+
"body",
|
|
17920
|
+
"response_status",
|
|
17921
|
+
"duration_ms",
|
|
17922
|
+
"route_template",
|
|
17923
|
+
"response_headers",
|
|
17924
|
+
"response_body"
|
|
17925
|
+
]),
|
|
17926
|
+
log_event: /* @__PURE__ */ new Set(["level", "message", "attributes"]),
|
|
17927
|
+
frontend_breadcrumb: /* @__PURE__ */ new Set(["breadcrumb_type", "route", "data"]),
|
|
17928
|
+
frontend_exception: /* @__PURE__ */ new Set([
|
|
17929
|
+
"name",
|
|
17930
|
+
"message",
|
|
17931
|
+
"stack",
|
|
17932
|
+
"route",
|
|
17933
|
+
"browser",
|
|
17934
|
+
"breadcrumbs",
|
|
17935
|
+
"device",
|
|
17936
|
+
"browser_event",
|
|
17937
|
+
"rejection_reason",
|
|
17938
|
+
"dom_context",
|
|
17939
|
+
"probe_data"
|
|
17940
|
+
]),
|
|
17941
|
+
deploy_metadata: /* @__PURE__ */ new Set(["commit_sha", "version", "branch", "environment", "deployed_at"]),
|
|
17942
|
+
error_suppressed: /* @__PURE__ */ new Set(["fingerprint", "suppressed_count", "window_seconds", "first_seen", "last_seen"]),
|
|
17943
|
+
probe_event: /* @__PURE__ */ new Set(["label", "data", "activation_id", "probe_label_pattern"])
|
|
17944
|
+
};
|
|
17945
|
+
function isRecord3(candidate) {
|
|
17946
|
+
return typeof candidate === "object" && candidate !== null && !Array.isArray(candidate);
|
|
17947
|
+
}
|
|
17948
|
+
function cloneRecord(candidate) {
|
|
17949
|
+
return { ...candidate };
|
|
17950
|
+
}
|
|
17951
|
+
function readString2(candidate) {
|
|
17952
|
+
if (typeof candidate === "string") {
|
|
17953
|
+
return candidate;
|
|
17954
|
+
}
|
|
17955
|
+
if (typeof candidate === "number" || typeof candidate === "boolean") {
|
|
17956
|
+
return String(candidate);
|
|
17957
|
+
}
|
|
17958
|
+
return null;
|
|
17959
|
+
}
|
|
17960
|
+
function readNonNegativeNumber(candidate, fallback) {
|
|
17961
|
+
if (typeof candidate === "number" && Number.isFinite(candidate) && candidate >= 0) {
|
|
17962
|
+
return candidate;
|
|
17963
|
+
}
|
|
17964
|
+
if (typeof candidate === "string" && candidate.trim().length > 0) {
|
|
17965
|
+
const parsed = Number(candidate);
|
|
17966
|
+
if (Number.isFinite(parsed) && parsed >= 0) {
|
|
17967
|
+
return parsed;
|
|
17968
|
+
}
|
|
17969
|
+
}
|
|
17970
|
+
return fallback;
|
|
17971
|
+
}
|
|
17972
|
+
function normalizeMap(candidate) {
|
|
17973
|
+
return isRecord3(candidate) ? cloneRecord(candidate) : {};
|
|
17974
|
+
}
|
|
17975
|
+
function mergeContext(baseContext, incomingContext) {
|
|
17976
|
+
if (!isRecord3(incomingContext)) {
|
|
17977
|
+
return baseContext;
|
|
17978
|
+
}
|
|
17979
|
+
return {
|
|
17980
|
+
...baseContext,
|
|
17981
|
+
...incomingContext
|
|
17982
|
+
};
|
|
17983
|
+
}
|
|
17984
|
+
function normalizeCorrelation(candidate) {
|
|
17985
|
+
if (!isRecord3(candidate)) {
|
|
17986
|
+
return void 0;
|
|
17987
|
+
}
|
|
17988
|
+
return {
|
|
17989
|
+
request_id: readString2(candidate["request_id"]),
|
|
17990
|
+
trace_id: readString2(candidate["trace_id"]),
|
|
17991
|
+
session_id: readString2(candidate["session_id"]),
|
|
17992
|
+
user_id_hash: readString2(candidate["user_id_hash"])
|
|
17993
|
+
};
|
|
17994
|
+
}
|
|
17995
|
+
function normalizeBackendExceptionPayload(payload) {
|
|
17996
|
+
const request = normalizeMap(payload["request"]);
|
|
17997
|
+
payload["request"] = {
|
|
17998
|
+
method: readString2(request["method"]) ?? "UNKNOWN",
|
|
17999
|
+
path: readString2(request["path"]) ?? "/",
|
|
18000
|
+
query: normalizeMap(request["query"]),
|
|
18001
|
+
headers: normalizeMap(request["headers"]),
|
|
18002
|
+
..."body" in request ? { body: request["body"] ?? null } : {}
|
|
18003
|
+
};
|
|
18004
|
+
const response = normalizeMap(payload["response"]);
|
|
18005
|
+
payload["response"] = {
|
|
18006
|
+
status_code: readNonNegativeNumber(response["status_code"], 0),
|
|
18007
|
+
..."headers" in response ? { headers: normalizeMap(response["headers"]) } : {},
|
|
18008
|
+
..."body" in response ? { body: response["body"] } : {}
|
|
18009
|
+
};
|
|
18010
|
+
}
|
|
18011
|
+
function normalizeRequestEventPayload(payload) {
|
|
18012
|
+
payload["query"] = normalizeMap(payload["query"]);
|
|
18013
|
+
payload["headers"] = normalizeMap(payload["headers"]);
|
|
18014
|
+
payload["response_status"] = readNonNegativeNumber(payload["response_status"], 0);
|
|
18015
|
+
payload["duration_ms"] = readNonNegativeNumber(payload["duration_ms"], 0);
|
|
18016
|
+
}
|
|
18017
|
+
function normalizePayloadExtras(input2) {
|
|
18018
|
+
const allowedKeys = PAYLOAD_ALLOWED_KEYS[input2.eventType];
|
|
18019
|
+
if (allowedKeys === void 0) {
|
|
18020
|
+
return input2.context;
|
|
18021
|
+
}
|
|
18022
|
+
let context = input2.context;
|
|
18023
|
+
for (const key of Object.keys(input2.payload)) {
|
|
18024
|
+
if (allowedKeys.has(key)) {
|
|
18025
|
+
continue;
|
|
18026
|
+
}
|
|
18027
|
+
context = mergeContext(context, { [key]: input2.payload[key] });
|
|
18028
|
+
delete input2.payload[key];
|
|
18029
|
+
}
|
|
18030
|
+
return context;
|
|
18031
|
+
}
|
|
18032
|
+
function normalizeCompatibleEventCandidate(candidate) {
|
|
18033
|
+
if (!isRecord3(candidate)) {
|
|
18034
|
+
return candidate;
|
|
18035
|
+
}
|
|
18036
|
+
const event = cloneRecord(candidate);
|
|
18037
|
+
const eventType = typeof event["event_type"] === "string" ? event["event_type"] : "";
|
|
18038
|
+
let context = normalizeMap(event["context"]);
|
|
18039
|
+
if (typeof event["sdk_language"] === "string") {
|
|
18040
|
+
context = mergeContext(context, { sdk_language: event["sdk_language"] });
|
|
18041
|
+
delete event["sdk_language"];
|
|
18042
|
+
}
|
|
18043
|
+
const correlation = normalizeCorrelation(event["correlation"]);
|
|
18044
|
+
if (correlation !== void 0) {
|
|
18045
|
+
event["correlation"] = correlation;
|
|
18046
|
+
}
|
|
18047
|
+
if (isRecord3(event["payload"])) {
|
|
18048
|
+
const payload = cloneRecord(event["payload"]);
|
|
18049
|
+
context = mergeContext(context, payload["context"]);
|
|
18050
|
+
delete payload["context"];
|
|
18051
|
+
if (eventType === "backend_exception") {
|
|
18052
|
+
normalizeBackendExceptionPayload(payload);
|
|
18053
|
+
}
|
|
18054
|
+
if (eventType === "request_event") {
|
|
18055
|
+
const attributes = isRecord3(payload["attributes"]) ? payload["attributes"] : null;
|
|
18056
|
+
if (typeof payload["route_template"] !== "string" && typeof attributes?.["route_template"] === "string") {
|
|
18057
|
+
payload["route_template"] = attributes["route_template"];
|
|
18058
|
+
}
|
|
18059
|
+
context = mergeContext(context, attributes);
|
|
18060
|
+
delete payload["attributes"];
|
|
18061
|
+
normalizeRequestEventPayload(payload);
|
|
18062
|
+
}
|
|
18063
|
+
context = normalizePayloadExtras({ eventType, payload, context });
|
|
18064
|
+
event["payload"] = payload;
|
|
18065
|
+
}
|
|
18066
|
+
if (Object.keys(context).length > 0) {
|
|
18067
|
+
event["context"] = context;
|
|
18068
|
+
} else {
|
|
18069
|
+
delete event["context"];
|
|
18070
|
+
}
|
|
18071
|
+
return event;
|
|
18072
|
+
}
|
|
17894
18073
|
function inferMatchedFields(event) {
|
|
17895
18074
|
const matchedFields = ["environment", "normalized_message"];
|
|
17896
18075
|
if (event.error_type !== null) {
|
|
@@ -18135,7 +18314,7 @@ function stableJson(value) {
|
|
|
18135
18314
|
return `{${pairs.join(",")}}`;
|
|
18136
18315
|
}
|
|
18137
18316
|
function validateEvent(candidate) {
|
|
18138
|
-
return EventEnvelopeSchema.safeParse(candidate);
|
|
18317
|
+
return EventEnvelopeSchema.safeParse(normalizeCompatibleEventCandidate(candidate));
|
|
18139
18318
|
}
|
|
18140
18319
|
function normalizeEvent(event) {
|
|
18141
18320
|
const redactedPayload = redact(event.payload).redacted;
|
|
@@ -18293,7 +18472,7 @@ var AVAILABILITY_CHECK_BOOTSTRAP_STATEMENTS = [
|
|
|
18293
18472
|
method text NOT NULL CHECK (method IN ('GET', 'HEAD')),
|
|
18294
18473
|
expected_status_min integer NOT NULL DEFAULT 200 CHECK (expected_status_min BETWEEN 100 AND 599),
|
|
18295
18474
|
expected_status_max integer NOT NULL DEFAULT 399 CHECK (expected_status_max BETWEEN 100 AND 599),
|
|
18296
|
-
timeout_ms integer NOT NULL DEFAULT
|
|
18475
|
+
timeout_ms integer NOT NULL DEFAULT 2500 CHECK (timeout_ms BETWEEN 500 AND 5000),
|
|
18297
18476
|
interval_seconds integer NOT NULL CHECK (interval_seconds >= 30),
|
|
18298
18477
|
failure_threshold integer NOT NULL DEFAULT 3 CHECK (failure_threshold BETWEEN 1 AND 10),
|
|
18299
18478
|
recovery_threshold integer NOT NULL DEFAULT 2 CHECK (recovery_threshold BETWEEN 1 AND 10),
|
|
@@ -19792,6 +19971,16 @@ var AVAILABILITY_CHECK_STORAGE_SCHEMA_MIGRATIONS = [
|
|
|
19792
19971
|
ON availability_check_daily_rollups (project_id, day DESC)
|
|
19793
19972
|
`
|
|
19794
19973
|
]
|
|
19974
|
+
}),
|
|
19975
|
+
defineAvailabilityCheckStorageSchemaMigration({
|
|
19976
|
+
id: "202606180001_lower_availability_check_timeout_default",
|
|
19977
|
+
description: "Lower the database default timeout for newly inserted availability checks while preserving existing rows and the explicit 5000ms maximum.",
|
|
19978
|
+
statements: [
|
|
19979
|
+
`
|
|
19980
|
+
ALTER TABLE availability_checks
|
|
19981
|
+
ALTER COLUMN timeout_ms SET DEFAULT 2500
|
|
19982
|
+
`
|
|
19983
|
+
]
|
|
19795
19984
|
})
|
|
19796
19985
|
];
|
|
19797
19986
|
|
|
@@ -20787,9 +20976,13 @@ function parseLocalIncident(candidate) {
|
|
|
20787
20976
|
throw createReadError(400, "invalid_local_state");
|
|
20788
20977
|
}
|
|
20789
20978
|
const resolvedAt = candidate["resolved_at"];
|
|
20979
|
+
const regressedAt = candidate["regressed_at"];
|
|
20790
20980
|
if (resolvedAt !== void 0 && resolvedAt !== null && typeof resolvedAt !== "string") {
|
|
20791
20981
|
throw createReadError(400, "invalid_local_state");
|
|
20792
20982
|
}
|
|
20983
|
+
if (regressedAt !== void 0 && regressedAt !== null && typeof regressedAt !== "string") {
|
|
20984
|
+
throw createReadError(400, "invalid_local_state");
|
|
20985
|
+
}
|
|
20793
20986
|
if (typeof candidate["occurrence_count"] !== "number" || typeof candidate["generation_number"] !== "number") {
|
|
20794
20987
|
throw createReadError(400, "invalid_local_state");
|
|
20795
20988
|
}
|
|
@@ -20824,6 +21017,7 @@ function parseLocalIncident(candidate) {
|
|
|
20824
21017
|
severity: candidate["severity"],
|
|
20825
21018
|
status: candidate["status"],
|
|
20826
21019
|
...resolvedAt === void 0 ? {} : { resolved_at: resolvedAt },
|
|
21020
|
+
...regressedAt === void 0 ? {} : { regressed_at: regressedAt },
|
|
20827
21021
|
first_seen_at: candidate["first_seen_at"],
|
|
20828
21022
|
last_seen_at: candidate["last_seen_at"],
|
|
20829
21023
|
occurrence_count: candidate["occurrence_count"],
|
|
@@ -20925,8 +21119,16 @@ async function listLocalIncidents(input2, dependencies) {
|
|
|
20925
21119
|
if (input2.status === void 0 || input2.status === "all") {
|
|
20926
21120
|
return true;
|
|
20927
21121
|
}
|
|
21122
|
+
if (input2.status === "active") {
|
|
21123
|
+
return incident.status === "open";
|
|
21124
|
+
}
|
|
20928
21125
|
return incident.status === input2.status;
|
|
20929
|
-
}).filter((incident) => input2.severity === void 0 ? true : incident.severity === input2.severity).filter((incident) => input2.firstSeenAfter === void 0 ? true : incident.first_seen_at >= input2.firstSeenAfter).
|
|
21126
|
+
}).filter((incident) => input2.severity === void 0 ? true : incident.severity === input2.severity).filter((incident) => input2.firstSeenAfter === void 0 ? true : incident.first_seen_at >= input2.firstSeenAfter).filter((incident) => {
|
|
21127
|
+
if (input2.attentionAfter === void 0) {
|
|
21128
|
+
return true;
|
|
21129
|
+
}
|
|
21130
|
+
return incident.first_seen_at >= input2.attentionAfter || incident.regressed_at != null && incident.regressed_at >= input2.attentionAfter;
|
|
21131
|
+
}).sort(sortIncidentsDescending);
|
|
20930
21132
|
const startIndex = input2.cursor === void 0 ? 0 : incidents.findIndex((incident) => buildCursor(incident) === input2.cursor) + 1;
|
|
20931
21133
|
const pagedIncidents = input2.limit === void 0 ? incidents.slice(startIndex) : incidents.slice(startIndex, startIndex + input2.limit);
|
|
20932
21134
|
const hasMore = input2.limit !== void 0 && startIndex + input2.limit < incidents.length;
|
|
@@ -21486,6 +21688,7 @@ var ProjectColorTagResponseSchema2 = external_exports.unknown().transform((value
|
|
|
21486
21688
|
var ProjectMetricsSchema = external_exports.object({
|
|
21487
21689
|
open_incidents: external_exports.number().int().nonnegative().default(0),
|
|
21488
21690
|
regressed_incidents: external_exports.number().int().nonnegative().default(0),
|
|
21691
|
+
attention_incidents_today: external_exports.number().int().nonnegative().default(0),
|
|
21489
21692
|
opened_incidents_today: external_exports.number().int().nonnegative().default(0),
|
|
21490
21693
|
opened_incidents_month: external_exports.number().int().nonnegative().default(0),
|
|
21491
21694
|
monthly_bundle_requests: external_exports.number().int().nonnegative(),
|
|
@@ -26891,7 +27094,7 @@ var ProfileSchema2 = external_exports.object({
|
|
|
26891
27094
|
framework: external_exports.string().min(1)
|
|
26892
27095
|
}))
|
|
26893
27096
|
});
|
|
26894
|
-
function
|
|
27097
|
+
function isRecord4(value) {
|
|
26895
27098
|
return typeof value === "object" && value !== null;
|
|
26896
27099
|
}
|
|
26897
27100
|
function slugify2(value) {
|
|
@@ -26981,7 +27184,7 @@ async function ingestCommand(input2, dependencies = {}) {
|
|
|
26981
27184
|
})
|
|
26982
27185
|
};
|
|
26983
27186
|
} catch (error) {
|
|
26984
|
-
const message =
|
|
27187
|
+
const message = isRecord4(error) && typeof error["message"] === "string" ? error["message"] : "Failed to ingest log file.";
|
|
26985
27188
|
return {
|
|
26986
27189
|
exitCode: 1,
|
|
26987
27190
|
output: message
|
|
@@ -28379,6 +28582,16 @@ function mapErrorToExitCode2(error) {
|
|
|
28379
28582
|
}
|
|
28380
28583
|
return 1;
|
|
28381
28584
|
}
|
|
28585
|
+
function formatRetrievalErrorOutput(error) {
|
|
28586
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
28587
|
+
if (error instanceof RetrievalApiError && error.status === 200 && error.code === "invalid_response_shape") {
|
|
28588
|
+
return [
|
|
28589
|
+
message,
|
|
28590
|
+
"The cloud API returned a success response that this CLI version could not parse. Update DebugBundle CLI and retry: npm install -g @debugbundle/cli@latest"
|
|
28591
|
+
].join("\n");
|
|
28592
|
+
}
|
|
28593
|
+
return message;
|
|
28594
|
+
}
|
|
28382
28595
|
function formatIncidentTable(incidents) {
|
|
28383
28596
|
if (incidents.length === 0) {
|
|
28384
28597
|
return "No incidents found.";
|
|
@@ -28485,7 +28698,7 @@ function formatLogsTable(logs) {
|
|
|
28485
28698
|
function mapErrorToResult(error) {
|
|
28486
28699
|
return {
|
|
28487
28700
|
exitCode: mapErrorToExitCode2(error),
|
|
28488
|
-
output:
|
|
28701
|
+
output: formatRetrievalErrorOutput(error)
|
|
28489
28702
|
};
|
|
28490
28703
|
}
|
|
28491
28704
|
function mapUnsupportedReopenResult() {
|
|
@@ -28521,6 +28734,7 @@ async function listAllCloudIncidents(input2, api) {
|
|
|
28521
28734
|
...input2.status === void 0 ? {} : { status: input2.status },
|
|
28522
28735
|
...input2.severity === void 0 ? {} : { severity: input2.severity },
|
|
28523
28736
|
...input2.firstSeenAfter === void 0 ? {} : { firstSeenAfter: input2.firstSeenAfter },
|
|
28737
|
+
...input2.attentionAfter === void 0 ? {} : { attentionAfter: input2.attentionAfter },
|
|
28524
28738
|
...cursor === void 0 ? {} : { cursor }
|
|
28525
28739
|
});
|
|
28526
28740
|
incidents.push(
|
|
@@ -28542,7 +28756,8 @@ async function mapCombinedIncidentListResult(input2, api, dependencies) {
|
|
|
28542
28756
|
...input2.service === void 0 ? {} : { service: input2.service },
|
|
28543
28757
|
...input2.status === void 0 ? {} : { status: input2.status },
|
|
28544
28758
|
...input2.severity === void 0 ? {} : { severity: input2.severity },
|
|
28545
|
-
...input2.firstSeenAfter === void 0 ? {} : { firstSeenAfter: input2.firstSeenAfter }
|
|
28759
|
+
...input2.firstSeenAfter === void 0 ? {} : { firstSeenAfter: input2.firstSeenAfter },
|
|
28760
|
+
...input2.attentionAfter === void 0 ? {} : { attentionAfter: input2.attentionAfter }
|
|
28546
28761
|
},
|
|
28547
28762
|
dependencies
|
|
28548
28763
|
);
|
|
@@ -28554,7 +28769,8 @@ async function mapCombinedIncidentListResult(input2, api, dependencies) {
|
|
|
28554
28769
|
...input2.service === void 0 ? {} : { service: input2.service },
|
|
28555
28770
|
...input2.status === void 0 ? {} : { status: input2.status },
|
|
28556
28771
|
...input2.severity === void 0 ? {} : { severity: input2.severity },
|
|
28557
|
-
...input2.firstSeenAfter === void 0 ? {} : { firstSeenAfter: input2.firstSeenAfter }
|
|
28772
|
+
...input2.firstSeenAfter === void 0 ? {} : { firstSeenAfter: input2.firstSeenAfter },
|
|
28773
|
+
...input2.attentionAfter === void 0 ? {} : { attentionAfter: input2.attentionAfter }
|
|
28558
28774
|
},
|
|
28559
28775
|
api
|
|
28560
28776
|
);
|
|
@@ -28573,8 +28789,15 @@ async function mapCombinedIncidentListResult(input2, api, dependencies) {
|
|
|
28573
28789
|
function mapAuthOrRetrievalError(error) {
|
|
28574
28790
|
return mapCliAuthErrorToResult(error) ?? mapErrorToResult(error);
|
|
28575
28791
|
}
|
|
28792
|
+
function resolveIncidentListStatusFilter(status) {
|
|
28793
|
+
if (status === "all") {
|
|
28794
|
+
return void 0;
|
|
28795
|
+
}
|
|
28796
|
+
return status ?? "active";
|
|
28797
|
+
}
|
|
28576
28798
|
async function listIncidentsCommand(input2, api) {
|
|
28577
28799
|
try {
|
|
28800
|
+
const statusFilter = resolveIncidentListStatusFilter(input2.status);
|
|
28578
28801
|
const requestInput = {
|
|
28579
28802
|
bearerToken: input2.bearerToken
|
|
28580
28803
|
};
|
|
@@ -28587,8 +28810,8 @@ async function listIncidentsCommand(input2, api) {
|
|
|
28587
28810
|
if (input2.service !== void 0) {
|
|
28588
28811
|
requestInput.service = input2.service;
|
|
28589
28812
|
}
|
|
28590
|
-
if (
|
|
28591
|
-
requestInput.status =
|
|
28813
|
+
if (statusFilter !== void 0) {
|
|
28814
|
+
requestInput.status = statusFilter;
|
|
28592
28815
|
}
|
|
28593
28816
|
if (input2.severity !== void 0) {
|
|
28594
28817
|
requestInput.severity = input2.severity;
|
|
@@ -28596,6 +28819,9 @@ async function listIncidentsCommand(input2, api) {
|
|
|
28596
28819
|
if (input2.firstSeenAfter !== void 0) {
|
|
28597
28820
|
requestInput.firstSeenAfter = input2.firstSeenAfter;
|
|
28598
28821
|
}
|
|
28822
|
+
if (input2.attentionAfter !== void 0) {
|
|
28823
|
+
requestInput.attentionAfter = input2.attentionAfter;
|
|
28824
|
+
}
|
|
28599
28825
|
if (input2.cursor !== void 0) {
|
|
28600
28826
|
requestInput.cursor = input2.cursor;
|
|
28601
28827
|
}
|
|
@@ -28614,10 +28840,11 @@ async function listIncidentsCommand(input2, api) {
|
|
|
28614
28840
|
output: formatIncidentTable(incidents.incidents)
|
|
28615
28841
|
};
|
|
28616
28842
|
} catch (error) {
|
|
28617
|
-
return { exitCode: mapErrorToExitCode2(error), output:
|
|
28843
|
+
return { exitCode: mapErrorToExitCode2(error), output: formatRetrievalErrorOutput(error) };
|
|
28618
28844
|
}
|
|
28619
28845
|
}
|
|
28620
28846
|
async function listIncidentsWithAuthCommand(input2, dependencies) {
|
|
28847
|
+
const statusFilter = resolveIncidentListStatusFilter(input2.status);
|
|
28621
28848
|
if (await shouldUseLocalRetrieval(input2.source, dependencies)) {
|
|
28622
28849
|
try {
|
|
28623
28850
|
const incidents = await listLocalIncidents(
|
|
@@ -28625,9 +28852,10 @@ async function listIncidentsWithAuthCommand(input2, dependencies) {
|
|
|
28625
28852
|
...input2.projectId === void 0 ? {} : { projectId: input2.projectId },
|
|
28626
28853
|
...input2.environment === void 0 ? {} : { environment: input2.environment },
|
|
28627
28854
|
...input2.service === void 0 ? {} : { service: input2.service },
|
|
28628
|
-
...
|
|
28855
|
+
...statusFilter === void 0 ? {} : { status: statusFilter },
|
|
28629
28856
|
...input2.severity === void 0 ? {} : { severity: input2.severity },
|
|
28630
28857
|
...input2.firstSeenAfter === void 0 ? {} : { firstSeenAfter: input2.firstSeenAfter },
|
|
28858
|
+
...input2.attentionAfter === void 0 ? {} : { attentionAfter: input2.attentionAfter },
|
|
28631
28859
|
...input2.cursor === void 0 ? {} : { cursor: input2.cursor },
|
|
28632
28860
|
...input2.limit === void 0 ? {} : { limit: input2.limit }
|
|
28633
28861
|
},
|
|
@@ -28650,9 +28878,10 @@ async function listIncidentsWithAuthCommand(input2, dependencies) {
|
|
|
28650
28878
|
...input2.projectId === void 0 ? {} : { projectId: input2.projectId },
|
|
28651
28879
|
...input2.environment === void 0 ? {} : { environment: input2.environment },
|
|
28652
28880
|
...input2.service === void 0 ? {} : { service: input2.service },
|
|
28653
|
-
...
|
|
28881
|
+
...statusFilter === void 0 ? {} : { status: statusFilter },
|
|
28654
28882
|
...input2.severity === void 0 ? {} : { severity: input2.severity },
|
|
28655
28883
|
...input2.firstSeenAfter === void 0 ? {} : { firstSeenAfter: input2.firstSeenAfter },
|
|
28884
|
+
...input2.attentionAfter === void 0 ? {} : { attentionAfter: input2.attentionAfter },
|
|
28656
28885
|
...input2.cursor === void 0 ? {} : { cursor: input2.cursor },
|
|
28657
28886
|
...input2.limit === void 0 ? {} : { limit: input2.limit },
|
|
28658
28887
|
...input2.json === void 0 ? {} : { json: input2.json }
|
|
@@ -28691,6 +28920,9 @@ async function listIncidentsWithAuthCommand(input2, dependencies) {
|
|
|
28691
28920
|
if (input2.firstSeenAfter !== void 0) {
|
|
28692
28921
|
commandInput.firstSeenAfter = input2.firstSeenAfter;
|
|
28693
28922
|
}
|
|
28923
|
+
if (input2.attentionAfter !== void 0) {
|
|
28924
|
+
commandInput.attentionAfter = input2.attentionAfter;
|
|
28925
|
+
}
|
|
28694
28926
|
if (input2.cursor !== void 0) {
|
|
28695
28927
|
commandInput.cursor = input2.cursor;
|
|
28696
28928
|
}
|
|
@@ -28728,7 +28960,7 @@ async function getIncidentCommand(input2, api) {
|
|
|
28728
28960
|
output: formatIncidentDetail(incident)
|
|
28729
28961
|
};
|
|
28730
28962
|
} catch (error) {
|
|
28731
|
-
return { exitCode: mapErrorToExitCode2(error), output:
|
|
28963
|
+
return { exitCode: mapErrorToExitCode2(error), output: formatRetrievalErrorOutput(error) };
|
|
28732
28964
|
}
|
|
28733
28965
|
}
|
|
28734
28966
|
async function readLocalIncidentContext(input2, dependencies) {
|
|
@@ -28774,7 +29006,7 @@ async function getIncidentContextCommand(input2, api) {
|
|
|
28774
29006
|
output: input2.json ? JSON.stringify(context) : formatIncidentContextDetail(context)
|
|
28775
29007
|
};
|
|
28776
29008
|
} catch (error) {
|
|
28777
|
-
return { exitCode: mapErrorToExitCode2(error), output:
|
|
29009
|
+
return { exitCode: mapErrorToExitCode2(error), output: formatRetrievalErrorOutput(error) };
|
|
28778
29010
|
}
|
|
28779
29011
|
}
|
|
28780
29012
|
async function getIncidentContextWithAuthCommand(input2, dependencies) {
|
|
@@ -28899,7 +29131,7 @@ async function resolveIncidentCommand(input2, api) {
|
|
|
28899
29131
|
output: formatIncidentDetail(incident)
|
|
28900
29132
|
};
|
|
28901
29133
|
} catch (error) {
|
|
28902
|
-
return { exitCode: mapErrorToExitCode2(error), output:
|
|
29134
|
+
return { exitCode: mapErrorToExitCode2(error), output: formatRetrievalErrorOutput(error) };
|
|
28903
29135
|
}
|
|
28904
29136
|
}
|
|
28905
29137
|
async function resolveIncidentWithAuthCommand(input2, dependencies) {
|
|
@@ -29074,7 +29306,7 @@ async function reopenIncidentCommand(input2, api) {
|
|
|
29074
29306
|
output: formatIncidentDetail(incident)
|
|
29075
29307
|
};
|
|
29076
29308
|
} catch (error) {
|
|
29077
|
-
return { exitCode: mapErrorToExitCode2(error), output:
|
|
29309
|
+
return { exitCode: mapErrorToExitCode2(error), output: formatRetrievalErrorOutput(error) };
|
|
29078
29310
|
}
|
|
29079
29311
|
}
|
|
29080
29312
|
async function reopenIncidentWithAuthCommand(input2, dependencies) {
|
|
@@ -29220,7 +29452,7 @@ async function getBundleCommand(input2, api) {
|
|
|
29220
29452
|
output: input2.json ? JSON.stringify(bundle) : formatObjectOutput(bundle)
|
|
29221
29453
|
};
|
|
29222
29454
|
} catch (error) {
|
|
29223
|
-
return { exitCode: mapErrorToExitCode2(error), output:
|
|
29455
|
+
return { exitCode: mapErrorToExitCode2(error), output: formatRetrievalErrorOutput(error) };
|
|
29224
29456
|
}
|
|
29225
29457
|
}
|
|
29226
29458
|
async function getBundleWithAuthCommand(input2, dependencies) {
|
|
@@ -29292,7 +29524,7 @@ async function getLogsCommand(input2, api) {
|
|
|
29292
29524
|
output: input2.json ? JSON.stringify(logs) : formatLogsTable(logs.logs)
|
|
29293
29525
|
};
|
|
29294
29526
|
} catch (error) {
|
|
29295
|
-
return { exitCode: mapErrorToExitCode2(error), output:
|
|
29527
|
+
return { exitCode: mapErrorToExitCode2(error), output: formatRetrievalErrorOutput(error) };
|
|
29296
29528
|
}
|
|
29297
29529
|
}
|
|
29298
29530
|
async function getLogsWithAuthCommand(input2, dependencies) {
|
|
@@ -29330,7 +29562,7 @@ async function getReproductionCommand(input2, api) {
|
|
|
29330
29562
|
output: input2.json ? JSON.stringify(reproduction) : formatObjectOutput(reproduction)
|
|
29331
29563
|
};
|
|
29332
29564
|
} catch (error) {
|
|
29333
|
-
return { exitCode: mapErrorToExitCode2(error), output:
|
|
29565
|
+
return { exitCode: mapErrorToExitCode2(error), output: formatRetrievalErrorOutput(error) };
|
|
29334
29566
|
}
|
|
29335
29567
|
}
|
|
29336
29568
|
async function getReproductionWithAuthCommand(input2, dependencies) {
|
|
@@ -30415,7 +30647,7 @@ var CLI_USAGE_LINES = [
|
|
|
30415
30647
|
" debugbundle login --github-device [--label <label>] [--base-url <url>] [--auth-file <path>] [--json]",
|
|
30416
30648
|
" debugbundle profile validate [--json]",
|
|
30417
30649
|
" debugbundle whoami [--auth-file <path>] [--json]",
|
|
30418
|
-
" debugbundle incidents [--source <local|cloud>] [--project-id <id>] [--environment <name>] [--service <name>] [--status <
|
|
30650
|
+
" debugbundle incidents [--source <local|cloud>] [--project-id <id>] [--environment <name>] [--service <name>] [--status <active|open|resolved|regressed|all>] [--severity <severity>] [--first-seen-after <ISO8601>] [--attention-after <ISO8601>] [--cursor <cursor>] [--limit <n>] [--auth-file <path>] [--json]",
|
|
30419
30651
|
" debugbundle inspect <incident-id> [--source <local|cloud>] [--auth-file <path>] [--json]",
|
|
30420
30652
|
" debugbundle explain <incident-id> [--source <local|cloud>] [--auth-file <path>] [--json]",
|
|
30421
30653
|
" debugbundle resolve <incident-id> [incident-id ...] [--source <local|cloud>] [--auth-file <path>] [--json]",
|
|
@@ -34043,7 +34275,7 @@ async function handleHealthCommand(parsedArgv, dependencies) {
|
|
|
34043
34275
|
method,
|
|
34044
34276
|
expectedStatusMin: readIntegerOption(parsedArgv, "expected-status-min") ?? 200,
|
|
34045
34277
|
expectedStatusMax: readIntegerOption(parsedArgv, "expected-status-max") ?? 399,
|
|
34046
|
-
timeoutMs: readIntegerOption(parsedArgv, "timeout-ms") ??
|
|
34278
|
+
timeoutMs: readIntegerOption(parsedArgv, "timeout-ms") ?? 2500,
|
|
34047
34279
|
intervalSeconds,
|
|
34048
34280
|
failureThreshold: readIntegerOption(parsedArgv, "failure-threshold") ?? 3,
|
|
34049
34281
|
recoveryThreshold: readIntegerOption(parsedArgv, "recovery-threshold") ?? 2,
|
|
@@ -34142,7 +34374,7 @@ async function handleHealthCommand(parsedArgv, dependencies) {
|
|
|
34142
34374
|
method,
|
|
34143
34375
|
expectedStatusMin: readIntegerOption(parsedArgv, "expected-status-min") ?? 200,
|
|
34144
34376
|
expectedStatusMax: readIntegerOption(parsedArgv, "expected-status-max") ?? 399,
|
|
34145
|
-
timeoutMs: readIntegerOption(parsedArgv, "timeout-ms") ??
|
|
34377
|
+
timeoutMs: readIntegerOption(parsedArgv, "timeout-ms") ?? 2500
|
|
34146
34378
|
})
|
|
34147
34379
|
);
|
|
34148
34380
|
}
|
|
@@ -36910,7 +37142,7 @@ async function handleCaptureRuleCommand2(parsedArgv, dependencies) {
|
|
|
36910
37142
|
// package.json
|
|
36911
37143
|
var package_default = {
|
|
36912
37144
|
name: "@debugbundle/cli",
|
|
36913
|
-
version: "1.5.
|
|
37145
|
+
version: "1.5.4",
|
|
36914
37146
|
private: false,
|
|
36915
37147
|
description: "Command-line interface for DebugBundle",
|
|
36916
37148
|
license: "AGPL-3.0-only",
|
|
@@ -37201,7 +37433,7 @@ ${formatUsage()}`
|
|
|
37201
37433
|
return await (dependencies.whoamiCommand ?? whoamiCommand)(appendCommonAuthOptions(parsedArgv, {}));
|
|
37202
37434
|
}
|
|
37203
37435
|
if (command === "incidents") {
|
|
37204
|
-
expectNoUnknownOptions(parsedArgv, ["auth-file", "json", "source", "project-id", "environment", "service", "status", "severity", "first-seen-after", "cursor", "limit"]);
|
|
37436
|
+
expectNoUnknownOptions(parsedArgv, ["auth-file", "json", "source", "project-id", "environment", "service", "status", "severity", "first-seen-after", "attention-after", "cursor", "limit"]);
|
|
37205
37437
|
ensureNoExtraPositionals(parsedArgv, 1);
|
|
37206
37438
|
const input2 = appendCommonAuthOptions(parsedArgv, {});
|
|
37207
37439
|
const source = readRetrievalSource(parsedArgv);
|
|
@@ -37232,6 +37464,10 @@ ${formatUsage()}`
|
|
|
37232
37464
|
if (firstSeenAfter !== void 0) {
|
|
37233
37465
|
input2.firstSeenAfter = firstSeenAfter;
|
|
37234
37466
|
}
|
|
37467
|
+
const attentionAfter = readStringOption(parsedArgv, "attention-after");
|
|
37468
|
+
if (attentionAfter !== void 0) {
|
|
37469
|
+
input2.attentionAfter = attentionAfter;
|
|
37470
|
+
}
|
|
37235
37471
|
const cursor = readStringOption(parsedArgv, "cursor");
|
|
37236
37472
|
if (cursor !== void 0) {
|
|
37237
37473
|
input2.cursor = cursor;
|