agent-inspect 6.31.31 → 6.31.32
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/CHANGELOG.md +6 -0
- package/README.md +1 -1
- package/docs/CLI.md +3 -1
- package/docs/TRACE-CONTRACTS.md +2 -0
- package/package.json +1 -1
- package/packages/cli/dist/{chunk-4GTOJ3G2.mjs → chunk-PEGM6T2X.mjs} +82 -9
- package/packages/cli/dist/chunk-PEGM6T2X.mjs.map +1 -0
- package/packages/cli/dist/index.cjs +100 -11
- package/packages/cli/dist/index.cjs.map +1 -1
- package/packages/cli/dist/index.mjs +23 -7
- package/packages/cli/dist/index.mjs.map +1 -1
- package/packages/cli/dist/{src-BF74ZVDF.mjs → src-CWUJTMRD.mjs} +3 -3
- package/packages/cli/dist/{src-BF74ZVDF.mjs.map → src-CWUJTMRD.mjs.map} +1 -1
- package/packages/core/dist/advanced.cjs +4 -0
- package/packages/core/dist/advanced.cjs.map +1 -1
- package/packages/core/dist/advanced.d.cts +2 -2
- package/packages/core/dist/advanced.d.ts +2 -2
- package/packages/core/dist/advanced.mjs +9 -9
- package/packages/core/dist/checks.cjs +76 -7
- package/packages/core/dist/checks.cjs.map +1 -1
- package/packages/core/dist/checks.d.cts +2 -2
- package/packages/core/dist/checks.d.ts +2 -2
- package/packages/core/dist/checks.mjs +3 -3
- package/packages/core/dist/{chunk-BYNAJPNH.mjs → chunk-6G67ZN72.mjs} +79 -10
- package/packages/core/dist/chunk-6G67ZN72.mjs.map +1 -0
- package/packages/core/dist/{chunk-76QIWWJ5.mjs → chunk-6S666BF4.mjs} +3 -3
- package/packages/core/dist/{chunk-76QIWWJ5.mjs.map → chunk-6S666BF4.mjs.map} +1 -1
- package/packages/core/dist/{chunk-QMO3ITYF.mjs → chunk-FBPDF7HO.mjs} +3 -3
- package/packages/core/dist/{chunk-QMO3ITYF.mjs.map → chunk-FBPDF7HO.mjs.map} +1 -1
- package/packages/core/dist/{chunk-XM27TZLD.mjs → chunk-RB6WANSW.mjs} +6 -2
- package/packages/core/dist/chunk-RB6WANSW.mjs.map +1 -0
- package/packages/core/dist/{chunk-JTJN4KBJ.mjs → chunk-VIEJJ5JB.mjs} +4 -4
- package/packages/core/dist/{chunk-JTJN4KBJ.mjs.map → chunk-VIEJJ5JB.mjs.map} +1 -1
- package/packages/core/dist/exporters.cjs +4 -0
- package/packages/core/dist/exporters.cjs.map +1 -1
- package/packages/core/dist/exporters.mjs +3 -3
- package/packages/core/dist/{index-DACU4Dy1.d.cts → index-Ceyw5x7b.d.cts} +4 -2
- package/packages/core/dist/{index-b4tIGrzq.d.ts → index-K5Cinf1r.d.ts} +4 -2
- package/packages/core/dist/index.cjs +4 -0
- package/packages/core/dist/index.cjs.map +1 -1
- package/packages/core/dist/index.mjs +4 -4
- package/packages/core/dist/writers.cjs +4 -0
- package/packages/core/dist/writers.cjs.map +1 -1
- package/packages/core/dist/writers.mjs +1 -1
- package/packages/cli/dist/chunk-4GTOJ3G2.mjs.map +0 -1
- package/packages/core/dist/chunk-BYNAJPNH.mjs.map +0 -1
- package/packages/core/dist/chunk-XM27TZLD.mjs.map +0 -1
|
@@ -268,6 +268,10 @@ var init_credential_value_patterns = __esm({
|
|
|
268
268
|
/\b[a-z0-9_.-]+=[^;\s]+(?:;\s*[a-z0-9_.-]+=[^;\s]+)+/i,
|
|
269
269
|
/\beyJ[a-zA-Z0-9_-]{8,}\.[a-zA-Z0-9_-]{8,}\.[a-zA-Z0-9_-]{8,}\b/,
|
|
270
270
|
/\b(?:sk-(?:proj-)?[a-zA-Z0-9_-]{16,}|sk-ant-[a-zA-Z0-9_-]{16,}|AIza[0-9A-Za-z_-]{20,})\b/,
|
|
271
|
+
// Stripe secret / restricted keys use underscores (not sk-). Keep in sync with
|
|
272
|
+
// packages/redact/src/index.ts + packages/core/src/checks DEFAULT_SECRET_PATTERNS (#520).
|
|
273
|
+
/\b(?:sk|rk)_(?:live|test)_[A-Za-z0-9]{16,}\b/,
|
|
274
|
+
/\bxox[abposr]-[A-Za-z0-9-]{10,}\b/,
|
|
271
275
|
/\b(?:ghp|gho|ghu|ghs|ghr)_[A-Za-z0-9_]{20,}\b/,
|
|
272
276
|
/\b(?:AKIA|ASIA)[A-Z0-9]{16}\b/,
|
|
273
277
|
/-----BEGIN [A-Z ]*PRIVATE KEY-----[\s\S]*-----END [A-Z ]*PRIVATE KEY-----/,
|
|
@@ -5933,6 +5937,56 @@ function eventEndMs(event) {
|
|
|
5933
5937
|
}
|
|
5934
5938
|
return void 0;
|
|
5935
5939
|
}
|
|
5940
|
+
function rowIndexByEventId(events) {
|
|
5941
|
+
const index = /* @__PURE__ */ new Map();
|
|
5942
|
+
for (const [position, event] of events.entries()) {
|
|
5943
|
+
if (!index.has(event.eventId)) index.set(event.eventId, position);
|
|
5944
|
+
}
|
|
5945
|
+
return index;
|
|
5946
|
+
}
|
|
5947
|
+
function recordedRowSpan(rowIndex, event) {
|
|
5948
|
+
const sourceIds = "sourceEventIds" in event && Array.isArray(event.sourceEventIds) ? event.sourceEventIds : [event.eventId];
|
|
5949
|
+
const rows = [];
|
|
5950
|
+
for (const id of sourceIds) {
|
|
5951
|
+
const row = typeof id === "string" ? rowIndex.get(id) : void 0;
|
|
5952
|
+
if (row === void 0) return void 0;
|
|
5953
|
+
rows.push(row);
|
|
5954
|
+
}
|
|
5955
|
+
if (rows.length === 0) return void 0;
|
|
5956
|
+
return { first: Math.min(...rows), last: Math.max(...rows) };
|
|
5957
|
+
}
|
|
5958
|
+
function recordedTieOrder(context, tiedBefore, tiedAfter) {
|
|
5959
|
+
const rowIndex = rowIndexByEventId(context.events);
|
|
5960
|
+
let lastFinished;
|
|
5961
|
+
let firstStarted;
|
|
5962
|
+
for (const event of tiedBefore) {
|
|
5963
|
+
const span = recordedRowSpan(rowIndex, event);
|
|
5964
|
+
if (span === void 0) return { inOrder: void 0 };
|
|
5965
|
+
if (lastFinished === void 0 || span.last > lastFinished.row) {
|
|
5966
|
+
lastFinished = { event, row: span.last };
|
|
5967
|
+
}
|
|
5968
|
+
}
|
|
5969
|
+
for (const event of tiedAfter) {
|
|
5970
|
+
const span = recordedRowSpan(rowIndex, event);
|
|
5971
|
+
if (span === void 0) return { inOrder: void 0 };
|
|
5972
|
+
if (firstStarted === void 0 || span.first < firstStarted.row) {
|
|
5973
|
+
firstStarted = { event, row: span.first };
|
|
5974
|
+
}
|
|
5975
|
+
}
|
|
5976
|
+
if (lastFinished === void 0 || firstStarted === void 0) return { inOrder: void 0 };
|
|
5977
|
+
return {
|
|
5978
|
+
inOrder: lastFinished.row < firstStarted.row,
|
|
5979
|
+
lastFinishedBefore: lastFinished.event,
|
|
5980
|
+
firstStartedAfter: firstStarted.event
|
|
5981
|
+
};
|
|
5982
|
+
}
|
|
5983
|
+
function tieResolution(order) {
|
|
5984
|
+
return order.inOrder === void 0 ? "recorded-order-unavailable" : "recorded-order";
|
|
5985
|
+
}
|
|
5986
|
+
function tieMessage(order, beforeLabel, afterLabel) {
|
|
5987
|
+
if (order === void 0 || order.inOrder === true) return "";
|
|
5988
|
+
return order.inOrder === void 0 ? " Their timestamps tie at the same millisecond and the recorded event order could not be resolved." : ` Their timestamps tie at the same millisecond; the recorded event order shows ${afterLabel} started before ${beforeLabel} finished.`;
|
|
5989
|
+
}
|
|
5936
5990
|
function normalizedKey(value) {
|
|
5937
5991
|
return value.toLowerCase().replace(/[^a-z0-9_]/g, "");
|
|
5938
5992
|
}
|
|
@@ -6512,16 +6566,18 @@ function createStepOrderingRule(options) {
|
|
|
6512
6566
|
)
|
|
6513
6567
|
];
|
|
6514
6568
|
}
|
|
6515
|
-
|
|
6569
|
+
const tie = beforeEnd === afterStart ? recordedTieOrder(context, [beforeEvent], [afterEvent]) : void 0;
|
|
6570
|
+
if (beforeEnd > afterStart || tie !== void 0 && tie.inOrder !== true) {
|
|
6516
6571
|
return [
|
|
6517
6572
|
failFinding(
|
|
6518
6573
|
ruleId,
|
|
6519
|
-
`${subject} ${beforeLabel} must finish before ${afterLabel} starts
|
|
6574
|
+
`${subject} ${beforeLabel} must finish before ${afterLabel} starts.${tieMessage(tie, beforeLabel, afterLabel)}`,
|
|
6520
6575
|
[eventEvidence(beforeEvent), eventEvidence(afterEvent)],
|
|
6521
6576
|
expected,
|
|
6522
6577
|
{
|
|
6523
6578
|
beforeEndedAt: new Date(beforeEnd).toISOString(),
|
|
6524
|
-
afterStartedAt: new Date(afterStart).toISOString()
|
|
6579
|
+
afterStartedAt: new Date(afterStart).toISOString(),
|
|
6580
|
+
...tie !== void 0 ? { resolvedBy: tieResolution(tie) } : {}
|
|
6525
6581
|
}
|
|
6526
6582
|
)
|
|
6527
6583
|
];
|
|
@@ -6584,16 +6640,27 @@ function createStepOrderingRule(options) {
|
|
|
6584
6640
|
)
|
|
6585
6641
|
];
|
|
6586
6642
|
}
|
|
6587
|
-
|
|
6643
|
+
const tiedEnd = latestBefore.end;
|
|
6644
|
+
const tiedStart = earliestAfter.start;
|
|
6645
|
+
const tie = tiedEnd === tiedStart ? recordedTieOrder(
|
|
6646
|
+
context,
|
|
6647
|
+
beforeEvents.filter((event) => eventEndMs(event) === tiedEnd),
|
|
6648
|
+
afterEvents.filter((event) => eventStartMs(event) === tiedStart)
|
|
6649
|
+
) : void 0;
|
|
6650
|
+
if (latestBefore.end > earliestAfter.start || tie !== void 0 && tie.inOrder !== true) {
|
|
6588
6651
|
return [
|
|
6589
6652
|
failFinding(
|
|
6590
6653
|
ruleId,
|
|
6591
|
-
bothTools ? `Every ${options.before.name} tool call must finish before any ${options.after.name} tool call starts.` : `Every ${beforeLabel} must finish before any ${afterLabel} starts
|
|
6592
|
-
[
|
|
6654
|
+
(bothTools ? `Every ${options.before.name} tool call must finish before any ${options.after.name} tool call starts.` : `Every ${beforeLabel} must finish before any ${afterLabel} starts.`) + tieMessage(tie, beforeLabel, afterLabel),
|
|
6655
|
+
[
|
|
6656
|
+
eventEvidence(tie?.lastFinishedBefore ?? latestBefore.event),
|
|
6657
|
+
eventEvidence(tie?.firstStartedAfter ?? earliestAfter.event)
|
|
6658
|
+
],
|
|
6593
6659
|
expected,
|
|
6594
6660
|
{
|
|
6595
6661
|
latestBeforeEndedAt: new Date(latestBefore.end).toISOString(),
|
|
6596
|
-
earliestAfterStartedAt: new Date(earliestAfter.start).toISOString()
|
|
6662
|
+
earliestAfterStartedAt: new Date(earliestAfter.start).toISOString(),
|
|
6663
|
+
...tie !== void 0 ? { resolvedBy: tieResolution(tie) } : {}
|
|
6597
6664
|
}
|
|
6598
6665
|
)
|
|
6599
6666
|
];
|
|
@@ -7540,6 +7607,12 @@ var init_checks2 = __esm({
|
|
|
7540
7607
|
DEFAULT_SECRET_PATTERNS = [
|
|
7541
7608
|
{ id: "bearer-token", pattern: /Bearer\s+[A-Za-z0-9._~+/-]{12,}=*/ },
|
|
7542
7609
|
{ id: "openai-key", pattern: /sk-[A-Za-z0-9_-]{16,}/ },
|
|
7610
|
+
// Stripe + Slack: keep in sync with packages/redact + credential-value-patterns (#520).
|
|
7611
|
+
{
|
|
7612
|
+
id: "stripe-key",
|
|
7613
|
+
pattern: /\b(?:sk|rk)_(?:live|test)_[A-Za-z0-9]{16,}\b/
|
|
7614
|
+
},
|
|
7615
|
+
{ id: "slack-token", pattern: /\bxox[abposr]-[A-Za-z0-9-]{10,}\b/ },
|
|
7543
7616
|
{ id: "aws-access-key", pattern: /AKIA[0-9A-Z]{16}/ },
|
|
7544
7617
|
{ id: "github-token", pattern: /gh[opsu]_[A-Za-z0-9_]{20,}/ },
|
|
7545
7618
|
// Keep in sync with packages/redact/src/key-value-secret.ts (KEY_VALUE_SECRET_PATTERN_SOURCE).
|
|
@@ -17304,7 +17377,7 @@ var init_src = __esm({
|
|
|
17304
17377
|
});
|
|
17305
17378
|
|
|
17306
17379
|
// package.json
|
|
17307
|
-
var version = "6.31.
|
|
17380
|
+
var version = "6.31.32";
|
|
17308
17381
|
|
|
17309
17382
|
// packages/cli/src/list.ts
|
|
17310
17383
|
init_advanced();
|
|
@@ -22499,6 +22572,18 @@ var credentialDetectors = [
|
|
|
22499
22572
|
pattern: /\b(?:sk-(?:proj-)?[a-zA-Z0-9_-]{16,}|sk-ant-[a-zA-Z0-9_-]{16,}|AIza[0-9A-Za-z_-]{20,})\b/,
|
|
22500
22573
|
severity: "error"
|
|
22501
22574
|
}),
|
|
22575
|
+
// Stripe secret/restricted keys (underscore form). Keep in sync with
|
|
22576
|
+
// packages/core/src/safety/credential-value-patterns.ts + checks DEFAULT_SECRET_PATTERNS (#520).
|
|
22577
|
+
patternDetector({
|
|
22578
|
+
id: "value.stripeSecretKey",
|
|
22579
|
+
pattern: /\b(?:sk|rk)_(?:live|test)_[A-Za-z0-9]{16,}\b/,
|
|
22580
|
+
severity: "error"
|
|
22581
|
+
}),
|
|
22582
|
+
patternDetector({
|
|
22583
|
+
id: "value.slackToken",
|
|
22584
|
+
pattern: /\bxox[abposr]-[A-Za-z0-9-]{10,}\b/,
|
|
22585
|
+
severity: "error"
|
|
22586
|
+
}),
|
|
22502
22587
|
patternDetector({
|
|
22503
22588
|
id: "value.githubToken",
|
|
22504
22589
|
pattern: /\b(?:ghp|gho|ghu|ghs|ghr)_[A-Za-z0-9_]{20,}\b/,
|
|
@@ -24264,8 +24349,9 @@ function parseEvidenceFormat(value) {
|
|
|
24264
24349
|
`Unsupported --evidence-format "${value}". Use directory, html, or zip.`
|
|
24265
24350
|
);
|
|
24266
24351
|
}
|
|
24267
|
-
function
|
|
24268
|
-
|
|
24352
|
+
function residualStatusToEvidenceSafe(status) {
|
|
24353
|
+
if (status === "SAFE_WITH_WARNINGS") return "SAFE WITH WARNINGS";
|
|
24354
|
+
return status;
|
|
24269
24355
|
}
|
|
24270
24356
|
function stableJson2(value) {
|
|
24271
24357
|
return `${JSON.stringify(value, null, 2)}
|
|
@@ -24305,7 +24391,10 @@ async function writeLocalEvidence(input3) {
|
|
|
24305
24391
|
combined += redacted.content.endsWith("\n") ? redacted.content : `${redacted.content}
|
|
24306
24392
|
`;
|
|
24307
24393
|
}
|
|
24308
|
-
const
|
|
24394
|
+
const residual = await assessResidualFromContent(combined, {
|
|
24395
|
+
format: "agent-inspect-jsonl"
|
|
24396
|
+
});
|
|
24397
|
+
const assessmentStatus = residualStatusToEvidenceSafe(residual.status);
|
|
24309
24398
|
const evidencePackage = buildEvidenceCiPackage({
|
|
24310
24399
|
generatorVersion: version,
|
|
24311
24400
|
runIds: input3.runIds,
|