@agent-inspect/mcp-server 6.31.5 → 6.31.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/{chunk-FUNPQPC3.mjs → chunk-J2LULLKC.mjs} +202 -53
- package/dist/chunk-J2LULLKC.mjs.map +1 -0
- package/dist/cli.cjs +200 -51
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.mjs +1 -1
- package/dist/index.cjs +200 -51
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +1 -1
- package/package.json +3 -3
- package/dist/chunk-FUNPQPC3.mjs.map +0 -1
|
@@ -208,7 +208,7 @@ var Redactor = class {
|
|
|
208
208
|
};
|
|
209
209
|
|
|
210
210
|
// packages/core/src/safety/credential-value-patterns.ts
|
|
211
|
-
var KEY_VALUE_SECRET_PATTERN = /\b(?:api[_-]?key|internal[_-]?token|access[_-]?token|auth[_-]?token|password|secret|token)=(?!\[(?:REDACTED(?::[^\]]*)?|HASH:[0-9a-f]{8})\](?![^\s"'
|
|
211
|
+
var KEY_VALUE_SECRET_PATTERN = /\b(?:api[_-]?key|internal[_-]?token|access[_-]?token|auth[_-]?token|password|secret|token)=(?!\[(?:REDACTED(?::[^\]]*)?|HASH:[0-9a-f]{8})\](?![^\s"'\\&#?]))([^\s"'\\]{8,})/i;
|
|
212
212
|
var HIGH_CONFIDENCE_CREDENTIAL_PATTERNS = [
|
|
213
213
|
/^(?:basic|bearer|digest|apikey)\s+[a-z0-9._~+/=-]+$/i,
|
|
214
214
|
/\bbearer\s+[a-z0-9._~+/=-]{12,}\b/i,
|
|
@@ -1488,6 +1488,8 @@ function filterTraces(traces, options) {
|
|
|
1488
1488
|
}
|
|
1489
1489
|
|
|
1490
1490
|
// packages/core/src/timeline.ts
|
|
1491
|
+
var ROOT_TIMELINE_DEPTH = 0;
|
|
1492
|
+
var MAX_TIMELINE_DEPTH = 1e3;
|
|
1491
1493
|
function finite(n) {
|
|
1492
1494
|
return typeof n === "number" && Number.isFinite(n);
|
|
1493
1495
|
}
|
|
@@ -1558,16 +1560,51 @@ function buildRunTimeline(events, options = {}) {
|
|
|
1558
1560
|
const computeDepth = (stepId) => {
|
|
1559
1561
|
const cached = depthCache.get(stepId);
|
|
1560
1562
|
if (cached !== void 0) return cached;
|
|
1561
|
-
const
|
|
1562
|
-
|
|
1563
|
-
|
|
1564
|
-
|
|
1565
|
-
|
|
1566
|
-
|
|
1563
|
+
const ancestry = [];
|
|
1564
|
+
const ancestryIndexes = /* @__PURE__ */ new Map();
|
|
1565
|
+
let currentStepId = stepId;
|
|
1566
|
+
let resolvedDepth;
|
|
1567
|
+
while (resolvedDepth === void 0) {
|
|
1568
|
+
const cachedDepth = depthCache.get(currentStepId);
|
|
1569
|
+
if (cachedDepth !== void 0) {
|
|
1570
|
+
resolvedDepth = cachedDepth;
|
|
1571
|
+
continue;
|
|
1572
|
+
}
|
|
1573
|
+
const cycleStart = ancestryIndexes.get(currentStepId);
|
|
1574
|
+
if (cycleStart !== void 0) {
|
|
1575
|
+
const cycleStepIds = ancestry.splice(cycleStart);
|
|
1576
|
+
for (const cycleStepId of cycleStepIds) {
|
|
1577
|
+
depthCache.set(cycleStepId, ROOT_TIMELINE_DEPTH);
|
|
1578
|
+
}
|
|
1579
|
+
resolvedDepth = ROOT_TIMELINE_DEPTH;
|
|
1580
|
+
continue;
|
|
1581
|
+
}
|
|
1582
|
+
const currentStep = steps.get(currentStepId);
|
|
1583
|
+
if (!currentStep) {
|
|
1584
|
+
resolvedDepth = ROOT_TIMELINE_DEPTH;
|
|
1585
|
+
continue;
|
|
1586
|
+
}
|
|
1587
|
+
ancestryIndexes.set(currentStepId, ancestry.length);
|
|
1588
|
+
ancestry.push(currentStepId);
|
|
1589
|
+
const parentId = currentStep.parentId;
|
|
1590
|
+
if (typeof parentId !== "string" || parentId.trim() === "" || !steps.has(parentId)) {
|
|
1591
|
+
ancestry.pop();
|
|
1592
|
+
depthCache.set(currentStepId, ROOT_TIMELINE_DEPTH);
|
|
1593
|
+
resolvedDepth = ROOT_TIMELINE_DEPTH;
|
|
1594
|
+
continue;
|
|
1595
|
+
}
|
|
1596
|
+
currentStepId = parentId;
|
|
1567
1597
|
}
|
|
1568
|
-
|
|
1569
|
-
|
|
1570
|
-
|
|
1598
|
+
ancestry.reverse();
|
|
1599
|
+
for (const ancestorStepId of ancestry) {
|
|
1600
|
+
resolvedDepth = Math.min(MAX_TIMELINE_DEPTH, resolvedDepth + 1);
|
|
1601
|
+
depthCache.set(ancestorStepId, resolvedDepth);
|
|
1602
|
+
}
|
|
1603
|
+
const resolvedStepDepth = depthCache.get(stepId);
|
|
1604
|
+
if (resolvedStepDepth === void 0) {
|
|
1605
|
+
throw new Error(`Failed to resolve timeline depth for step "${stepId}"`);
|
|
1606
|
+
}
|
|
1607
|
+
return resolvedStepDepth;
|
|
1571
1608
|
};
|
|
1572
1609
|
const entries = [];
|
|
1573
1610
|
for (const [stepId, s] of steps.entries()) {
|
|
@@ -3351,7 +3388,7 @@ var DEFAULT_SECRET_PATTERNS = [
|
|
|
3351
3388
|
// Keep in sync with packages/redact/src/key-value-secret.ts (KEY_VALUE_SECRET_PATTERN_SOURCE).
|
|
3352
3389
|
{
|
|
3353
3390
|
id: "key-value-secret",
|
|
3354
|
-
pattern: /\b(?:api[_-]?key|internal[_-]?token|access[_-]?token|auth[_-]?token|password|secret|token)=(?!\[(?:REDACTED(?::[^\]]*)?|HASH:[0-9a-f]{8})\](?![^\s"'
|
|
3391
|
+
pattern: /\b(?:api[_-]?key|internal[_-]?token|access[_-]?token|auth[_-]?token|password|secret|token)=(?!\[(?:REDACTED(?::[^\]]*)?|HASH:[0-9a-f]{8})\](?![^\s"'\\&#?]))([^\s"'\\]{8,})/i
|
|
3355
3392
|
}
|
|
3356
3393
|
];
|
|
3357
3394
|
function compareStrings(a, b) {
|
|
@@ -3666,9 +3703,6 @@ function limitFindings(findings, maxFindings) {
|
|
|
3666
3703
|
if (maxFindings === void 0 || findings.length <= maxFindings) return findings;
|
|
3667
3704
|
return findings.slice(0, Math.max(0, maxFindings));
|
|
3668
3705
|
}
|
|
3669
|
-
function hasRedactionMarker(value, markers) {
|
|
3670
|
-
return markers.some((marker) => value.includes(marker)) || /^\[HASH:[A-Za-z0-9_-]+\]$/.test(value);
|
|
3671
|
-
}
|
|
3672
3706
|
function isFullyRedactedValue(value, markers = ["[REDACTED]", "[REDACTED:"]) {
|
|
3673
3707
|
if (typeof value !== "string") return false;
|
|
3674
3708
|
const trimmed = value.trim();
|
|
@@ -3753,7 +3787,7 @@ function createSafetyRedactionRule(options = {}) {
|
|
|
3753
3787
|
for (const event of context.events) {
|
|
3754
3788
|
for (const entry of eventValueEntries(event, { includeSummaries: true, includeError: true })) {
|
|
3755
3789
|
if (!isSensitiveKey(entry.key ?? lastPathSegment(entry.path), sensitiveKeys)) continue;
|
|
3756
|
-
if (
|
|
3790
|
+
if (isFullyRedactedValue(entry.value, markers)) continue;
|
|
3757
3791
|
findings.push(
|
|
3758
3792
|
failFinding(
|
|
3759
3793
|
"safety.redaction",
|
|
@@ -5045,6 +5079,23 @@ function persistedInspectEventToInspectEvent(event) {
|
|
|
5045
5079
|
if (event.durationMs !== void 0 && Number.isFinite(event.durationMs) && event.durationMs >= 0) {
|
|
5046
5080
|
out.durationMs = event.durationMs;
|
|
5047
5081
|
}
|
|
5082
|
+
if (event.startedAt !== void 0) {
|
|
5083
|
+
const started = parseIsoToMs3(event.startedAt);
|
|
5084
|
+
if (!started.invalidTimestamp) {
|
|
5085
|
+
attrs2.startedAtMs = started.ms;
|
|
5086
|
+
out.timestamp = started.ms;
|
|
5087
|
+
}
|
|
5088
|
+
}
|
|
5089
|
+
if (event.endedAt !== void 0) {
|
|
5090
|
+
const ended = parseIsoToMs3(event.endedAt);
|
|
5091
|
+
if (!ended.invalidTimestamp) {
|
|
5092
|
+
attrs2.endedAtMs = ended.ms;
|
|
5093
|
+
if (out.durationMs === void 0 && typeof attrs2.startedAtMs === "number" && ended.ms >= attrs2.startedAtMs) {
|
|
5094
|
+
out.durationMs = ended.ms - attrs2.startedAtMs;
|
|
5095
|
+
}
|
|
5096
|
+
}
|
|
5097
|
+
}
|
|
5098
|
+
out.attributes = compactAttributes3(attrs2);
|
|
5048
5099
|
return out;
|
|
5049
5100
|
}
|
|
5050
5101
|
function persistedInspectEventsToInspectEvents(events, options) {
|
|
@@ -6106,20 +6157,38 @@ function extractOtlpDocument(root) {
|
|
|
6106
6157
|
function mapOtlpStatus(status) {
|
|
6107
6158
|
if (!isRecord10(status)) return void 0;
|
|
6108
6159
|
const rawCode = status.code;
|
|
6109
|
-
if (typeof rawCode
|
|
6110
|
-
|
|
6111
|
-
|
|
6112
|
-
|
|
6113
|
-
|
|
6114
|
-
|
|
6115
|
-
|
|
6116
|
-
|
|
6117
|
-
|
|
6118
|
-
|
|
6119
|
-
|
|
6120
|
-
|
|
6121
|
-
|
|
6160
|
+
if (typeof rawCode === "number" && Number.isFinite(rawCode)) {
|
|
6161
|
+
switch (rawCode) {
|
|
6162
|
+
case 0:
|
|
6163
|
+
return "unknown";
|
|
6164
|
+
case 1:
|
|
6165
|
+
return "ok";
|
|
6166
|
+
case 2:
|
|
6167
|
+
return "error";
|
|
6168
|
+
default:
|
|
6169
|
+
return "unknown";
|
|
6170
|
+
}
|
|
6171
|
+
}
|
|
6172
|
+
if (typeof rawCode === "string") {
|
|
6173
|
+
const trimmed = rawCode.trim();
|
|
6174
|
+
if (/^\d+$/.test(trimmed)) {
|
|
6175
|
+
return mapOtlpStatus({ code: Number(trimmed) });
|
|
6176
|
+
}
|
|
6177
|
+
switch (trimmed.toUpperCase()) {
|
|
6178
|
+
case "STATUS_CODE_OK":
|
|
6179
|
+
case "OK":
|
|
6180
|
+
return "ok";
|
|
6181
|
+
case "STATUS_CODE_ERROR":
|
|
6182
|
+
case "ERROR":
|
|
6183
|
+
return "error";
|
|
6184
|
+
case "STATUS_CODE_UNSET":
|
|
6185
|
+
case "UNSET":
|
|
6186
|
+
return "unknown";
|
|
6187
|
+
default:
|
|
6188
|
+
return "unknown";
|
|
6189
|
+
}
|
|
6122
6190
|
}
|
|
6191
|
+
return void 0;
|
|
6123
6192
|
}
|
|
6124
6193
|
function readOtlpKind(attributes, pathPrefix) {
|
|
6125
6194
|
const warnings = [];
|
|
@@ -6707,6 +6776,8 @@ var CONNECTION_PROTOCOLS = /* @__PURE__ */ new Set([
|
|
|
6707
6776
|
"amqps:"
|
|
6708
6777
|
]);
|
|
6709
6778
|
var CONNECTION_URI = /^(?:postgres|postgresql|mysql|mariadb|mongodb(?:\+srv)?|rediss?|amqps?):\/\/[^\s]+$/i;
|
|
6779
|
+
var CONNECTION_USERINFO = /^(postgres|postgresql|mysql|mariadb|mongodb(?:\+srv)?|rediss?|amqps?):\/\/([^@/?#]+)@(.+)$/i;
|
|
6780
|
+
var CONNECTION_HAS_USERINFO = /^(?:postgres|postgresql|mysql|mariadb|mongodb(?:\+srv)?|rediss?|amqps?):\/\/[^@/?#]+@/i;
|
|
6710
6781
|
var UUID_SEGMENT = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
|
|
6711
6782
|
var HEX_SEGMENT = /^[0-9a-f]{12,}$/i;
|
|
6712
6783
|
var NUMERIC_SEGMENT = /^\d{5,}$/;
|
|
@@ -6730,6 +6801,28 @@ function parseRedactableUrl(value) {
|
|
|
6730
6801
|
return void 0;
|
|
6731
6802
|
}
|
|
6732
6803
|
}
|
|
6804
|
+
function redactConnectionUserinfoFallback(value, replacement) {
|
|
6805
|
+
const trimmed = value.trim();
|
|
6806
|
+
const match = CONNECTION_USERINFO.exec(trimmed);
|
|
6807
|
+
if (match) {
|
|
6808
|
+
const [, scheme, , rest] = match;
|
|
6809
|
+
if (scheme && rest && rest.length > 0) {
|
|
6810
|
+
return {
|
|
6811
|
+
value: `${scheme}://${rest}`,
|
|
6812
|
+
credentialRedacted: true,
|
|
6813
|
+
identifiersMasked: false
|
|
6814
|
+
};
|
|
6815
|
+
}
|
|
6816
|
+
}
|
|
6817
|
+
if (looksLikeConnectionUri(trimmed) && CONNECTION_HAS_USERINFO.test(trimmed)) {
|
|
6818
|
+
return {
|
|
6819
|
+
value: replacement,
|
|
6820
|
+
credentialRedacted: true,
|
|
6821
|
+
identifiersMasked: false
|
|
6822
|
+
};
|
|
6823
|
+
}
|
|
6824
|
+
return void 0;
|
|
6825
|
+
}
|
|
6733
6826
|
function isHttpProtocol(protocol) {
|
|
6734
6827
|
return protocol === "http:" || protocol === "https:";
|
|
6735
6828
|
}
|
|
@@ -6771,9 +6864,11 @@ function redactUrlString(value, options) {
|
|
|
6771
6864
|
identifiersMasked: false
|
|
6772
6865
|
};
|
|
6773
6866
|
if (!looksLikeUrlForRedaction(value)) return unchanged;
|
|
6774
|
-
const url = parseRedactableUrl(value);
|
|
6775
|
-
if (!url) return unchanged;
|
|
6776
6867
|
const replacement = options.replacement ?? "[REDACTED]";
|
|
6868
|
+
const url = parseRedactableUrl(value);
|
|
6869
|
+
if (!url) {
|
|
6870
|
+
return redactConnectionUserinfoFallback(value, replacement) ?? unchanged;
|
|
6871
|
+
}
|
|
6777
6872
|
const idPlaceholder = options.idPlaceholder ?? "[id]";
|
|
6778
6873
|
const http = isHttpProtocol(url.protocol);
|
|
6779
6874
|
let credentialRedacted = url.username.length > 0 || url.password.length > 0;
|
|
@@ -7345,6 +7440,10 @@ function exportOpenInference(tree, options) {
|
|
|
7345
7440
|
warnings
|
|
7346
7441
|
};
|
|
7347
7442
|
}
|
|
7443
|
+
var OTLP_STATUS_CODE_UNSET = 0;
|
|
7444
|
+
var OTLP_STATUS_CODE_OK = 1;
|
|
7445
|
+
var OTLP_STATUS_CODE_ERROR = 2;
|
|
7446
|
+
var OTLP_SPAN_KIND_INTERNAL = 1;
|
|
7348
7447
|
function hexFrom2(seed, byteLen) {
|
|
7349
7448
|
return crypto.createHash("sha256").update(seed, "utf8").digest("hex").slice(0, byteLen * 2);
|
|
7350
7449
|
}
|
|
@@ -7357,7 +7456,19 @@ function stringAttr2(key, value) {
|
|
|
7357
7456
|
return { key, value: { stringValue: value } };
|
|
7358
7457
|
}
|
|
7359
7458
|
function intAttr(key, value) {
|
|
7360
|
-
return { key, value: { intValue: String(value) } };
|
|
7459
|
+
return { key, value: { intValue: String(Math.trunc(value)) } };
|
|
7460
|
+
}
|
|
7461
|
+
function doubleAttr(key, value) {
|
|
7462
|
+
return { key, value: { doubleValue: value } };
|
|
7463
|
+
}
|
|
7464
|
+
function boolAttr(key, value) {
|
|
7465
|
+
return { key, value: { boolValue: value } };
|
|
7466
|
+
}
|
|
7467
|
+
function numberAttr(key, value) {
|
|
7468
|
+
if (Number.isFinite(value) && !Number.isInteger(value)) {
|
|
7469
|
+
return doubleAttr(key, value);
|
|
7470
|
+
}
|
|
7471
|
+
return intAttr(key, value);
|
|
7361
7472
|
}
|
|
7362
7473
|
function genAiOperationName(kind) {
|
|
7363
7474
|
switch (kind) {
|
|
@@ -7371,10 +7482,27 @@ function genAiOperationName(kind) {
|
|
|
7371
7482
|
return void 0;
|
|
7372
7483
|
}
|
|
7373
7484
|
}
|
|
7485
|
+
function resolveSpanTimes(ev) {
|
|
7486
|
+
const startedAtMs = typeof ev.attributes?.startedAtMs === "number" && Number.isFinite(ev.attributes.startedAtMs) ? ev.attributes.startedAtMs : void 0;
|
|
7487
|
+
const endedAtMs = typeof ev.attributes?.endedAtMs === "number" && Number.isFinite(ev.attributes.endedAtMs) ? ev.attributes.endedAtMs : void 0;
|
|
7488
|
+
const startMs = startedAtMs ?? ev.timestamp;
|
|
7489
|
+
const startNs = String(unixNano2(startMs));
|
|
7490
|
+
if (endedAtMs !== void 0) {
|
|
7491
|
+
return { startNs, endNs: String(unixNano2(endedAtMs)) };
|
|
7492
|
+
}
|
|
7493
|
+
if (ev.durationMs !== void 0 && Number.isFinite(ev.durationMs)) {
|
|
7494
|
+
return {
|
|
7495
|
+
startNs,
|
|
7496
|
+
endNs: String(unixNano2(startMs) + unixNano2(ev.durationMs))
|
|
7497
|
+
};
|
|
7498
|
+
}
|
|
7499
|
+
return { startNs };
|
|
7500
|
+
}
|
|
7374
7501
|
function exportOtlpJson(tree, options) {
|
|
7375
7502
|
const warnings = [
|
|
7376
7503
|
"OTLP JSON export uses OTel GenAI-aligned attributes where applicable; experimental until verified against specific collectors.",
|
|
7377
|
-
"Not OTLP gRPC/protobuf \u2014 JSON mapping only. Generated locally; no network upload."
|
|
7504
|
+
"Not OTLP gRPC/protobuf \u2014 JSON mapping only. Generated locally; no network upload.",
|
|
7505
|
+
"Status and span kind use OTLP numeric enums (StatusCode 0/1/2, SpanKind INTERNAL=1)."
|
|
7378
7506
|
];
|
|
7379
7507
|
const traceId = hexFrom2(`trace:${tree.runId}`, 16);
|
|
7380
7508
|
const includeAttributes = options?.includeAttributes ?? false;
|
|
@@ -7386,11 +7514,7 @@ function exportOtlpJson(tree, options) {
|
|
|
7386
7514
|
const ev = n.event;
|
|
7387
7515
|
const spanId = hexFrom2(`${tree.runId}:${ev.eventId}`, 8);
|
|
7388
7516
|
const parentSpanId = ev.parentId ? hexFrom2(`${tree.runId}:${ev.parentId}`, 8) : void 0;
|
|
7389
|
-
const startNs =
|
|
7390
|
-
let endNs;
|
|
7391
|
-
if (ev.durationMs !== void 0 && Number.isFinite(ev.durationMs)) {
|
|
7392
|
-
endNs = String(unixNano2(ev.timestamp) + unixNano2(ev.durationMs));
|
|
7393
|
-
}
|
|
7517
|
+
const { startNs, endNs } = resolveSpanTimes(ev);
|
|
7394
7518
|
const attrs2 = [
|
|
7395
7519
|
stringAttr2("agent_inspect.kind", ev.kind),
|
|
7396
7520
|
stringAttr2("agent_inspect.confidence", ev.confidence),
|
|
@@ -7420,29 +7544,28 @@ function exportOtlpJson(tree, options) {
|
|
|
7420
7544
|
if (includeAttributes && meta && typeof meta === "object") {
|
|
7421
7545
|
for (const [k, v] of Object.entries(meta)) {
|
|
7422
7546
|
if (k === "tokens" || k === "model") continue;
|
|
7423
|
-
if (typeof v === "string"
|
|
7424
|
-
attrs2.push(
|
|
7425
|
-
|
|
7426
|
-
|
|
7427
|
-
|
|
7428
|
-
|
|
7429
|
-
);
|
|
7547
|
+
if (typeof v === "string") {
|
|
7548
|
+
attrs2.push(stringAttr2(`agent_inspect.preview.${k}`, v.slice(0, maxLen)));
|
|
7549
|
+
} else if (typeof v === "number" && Number.isFinite(v)) {
|
|
7550
|
+
attrs2.push(numberAttr(`agent_inspect.preview.${k}`, v));
|
|
7551
|
+
} else if (typeof v === "boolean") {
|
|
7552
|
+
attrs2.push(boolAttr(`agent_inspect.preview.${k}`, v));
|
|
7430
7553
|
}
|
|
7431
7554
|
}
|
|
7432
7555
|
}
|
|
7433
|
-
let statusCode =
|
|
7556
|
+
let statusCode = OTLP_STATUS_CODE_UNSET;
|
|
7434
7557
|
let statusMessage;
|
|
7435
7558
|
if (ev.status === "error") {
|
|
7436
|
-
statusCode =
|
|
7559
|
+
statusCode = OTLP_STATUS_CODE_ERROR;
|
|
7437
7560
|
statusMessage = meta && typeof meta.error === "object" && meta.error !== null ? String(meta.error.message ?? "error").slice(0, maxLen) : "error";
|
|
7438
7561
|
} else if (ev.status === "ok") {
|
|
7439
|
-
statusCode =
|
|
7562
|
+
statusCode = OTLP_STATUS_CODE_OK;
|
|
7440
7563
|
}
|
|
7441
7564
|
const spanJson = {
|
|
7442
7565
|
traceId,
|
|
7443
7566
|
spanId,
|
|
7444
7567
|
name: ev.name,
|
|
7445
|
-
kind:
|
|
7568
|
+
kind: OTLP_SPAN_KIND_INTERNAL,
|
|
7446
7569
|
startTimeUnixNano: startNs,
|
|
7447
7570
|
attributes: attrs2,
|
|
7448
7571
|
status: {
|
|
@@ -7565,7 +7688,7 @@ function isCredentialSensitiveKey2(key, sensitiveKeys) {
|
|
|
7565
7688
|
}
|
|
7566
7689
|
|
|
7567
7690
|
// packages/redact/src/key-value-secret.ts
|
|
7568
|
-
var KEY_VALUE_SECRET_PATTERN_SOURCE = String.raw`\b(?:api[_-]?key|internal[_-]?token|access[_-]?token|auth[_-]?token|password|secret|token)=(?!\[(?:REDACTED(?::[^\]]*)?|HASH:[0-9a-f]{8})\](?![^\s"'
|
|
7691
|
+
var KEY_VALUE_SECRET_PATTERN_SOURCE = String.raw`\b(?:api[_-]?key|internal[_-]?token|access[_-]?token|auth[_-]?token|password|secret|token)=(?!\[(?:REDACTED(?::[^\]]*)?|HASH:[0-9a-f]{8})\](?![^\s"'\\&#?]))([^\s"'\\]{8,})`;
|
|
7569
7692
|
var KEY_VALUE_SECRET_PATTERN2 = new RegExp(
|
|
7570
7693
|
KEY_VALUE_SECRET_PATTERN_SOURCE,
|
|
7571
7694
|
"i"
|
|
@@ -7590,6 +7713,8 @@ var CONNECTION_PROTOCOLS2 = /* @__PURE__ */ new Set([
|
|
|
7590
7713
|
"amqps:"
|
|
7591
7714
|
]);
|
|
7592
7715
|
var CONNECTION_URI2 = /^(?:postgres|postgresql|mysql|mariadb|mongodb(?:\+srv)?|rediss?|amqps?):\/\/[^\s]+$/i;
|
|
7716
|
+
var CONNECTION_USERINFO2 = /^(postgres|postgresql|mysql|mariadb|mongodb(?:\+srv)?|rediss?|amqps?):\/\/([^@/?#]+)@(.+)$/i;
|
|
7717
|
+
var CONNECTION_HAS_USERINFO2 = /^(?:postgres|postgresql|mysql|mariadb|mongodb(?:\+srv)?|rediss?|amqps?):\/\/[^@/?#]+@/i;
|
|
7593
7718
|
var UUID_SEGMENT2 = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
|
|
7594
7719
|
var HEX_SEGMENT2 = /^[0-9a-f]{12,}$/i;
|
|
7595
7720
|
var NUMERIC_SEGMENT2 = /^\d{5,}$/;
|
|
@@ -7613,6 +7738,28 @@ function parseRedactableUrl2(value) {
|
|
|
7613
7738
|
return void 0;
|
|
7614
7739
|
}
|
|
7615
7740
|
}
|
|
7741
|
+
function redactConnectionUserinfoFallback2(value, replacement) {
|
|
7742
|
+
const trimmed = value.trim();
|
|
7743
|
+
const match = CONNECTION_USERINFO2.exec(trimmed);
|
|
7744
|
+
if (match) {
|
|
7745
|
+
const [, scheme, , rest] = match;
|
|
7746
|
+
if (scheme && rest && rest.length > 0) {
|
|
7747
|
+
return {
|
|
7748
|
+
value: `${scheme}://${rest}`,
|
|
7749
|
+
credentialRedacted: true,
|
|
7750
|
+
identifiersMasked: false
|
|
7751
|
+
};
|
|
7752
|
+
}
|
|
7753
|
+
}
|
|
7754
|
+
if (looksLikeConnectionUri2(trimmed) && CONNECTION_HAS_USERINFO2.test(trimmed)) {
|
|
7755
|
+
return {
|
|
7756
|
+
value: replacement,
|
|
7757
|
+
credentialRedacted: true,
|
|
7758
|
+
identifiersMasked: false
|
|
7759
|
+
};
|
|
7760
|
+
}
|
|
7761
|
+
return void 0;
|
|
7762
|
+
}
|
|
7616
7763
|
function isHttpProtocol2(protocol) {
|
|
7617
7764
|
return protocol === "http:" || protocol === "https:";
|
|
7618
7765
|
}
|
|
@@ -7654,9 +7801,11 @@ function redactUrlString2(value, options) {
|
|
|
7654
7801
|
identifiersMasked: false
|
|
7655
7802
|
};
|
|
7656
7803
|
if (!looksLikeUrlForRedaction2(value)) return unchanged;
|
|
7657
|
-
const url = parseRedactableUrl2(value);
|
|
7658
|
-
if (!url) return unchanged;
|
|
7659
7804
|
const replacement = options.replacement ?? "[REDACTED]";
|
|
7805
|
+
const url = parseRedactableUrl2(value);
|
|
7806
|
+
if (!url) {
|
|
7807
|
+
return redactConnectionUserinfoFallback2(value, replacement) ?? unchanged;
|
|
7808
|
+
}
|
|
7660
7809
|
const idPlaceholder = options.idPlaceholder ?? "[id]";
|
|
7661
7810
|
const http = isHttpProtocol2(url.protocol);
|
|
7662
7811
|
let credentialRedacted = url.username.length > 0 || url.password.length > 0;
|
|
@@ -9081,5 +9230,5 @@ async function runReadOnlyMcpServer(options = {}) {
|
|
|
9081
9230
|
}
|
|
9082
9231
|
|
|
9083
9232
|
export { MCP_MAX_REQUEST_BYTES, MCP_PROTOCOL_VERSION, MCP_SERVER_INSTRUCTIONS, READ_ONLY_TOOLS, TRACE_DATA_UNTRUSTED_WARNING, callReadOnlyTool, createMcpServerContext, handleMcpProtocolLine, runReadOnlyMcpServer };
|
|
9084
|
-
//# sourceMappingURL=chunk-
|
|
9085
|
-
//# sourceMappingURL=chunk-
|
|
9233
|
+
//# sourceMappingURL=chunk-J2LULLKC.mjs.map
|
|
9234
|
+
//# sourceMappingURL=chunk-J2LULLKC.mjs.map
|