agent-inspect 3.2.0 → 3.4.0
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 +12 -0
- package/README.md +1 -1
- package/docs/SCREENSHOTS.md +6 -1
- package/package.json +2 -2
- package/packages/cli/dist/index.cjs +435 -70
- package/packages/cli/dist/index.cjs.map +1 -1
- package/packages/cli/dist/index.mjs +436 -71
- package/packages/cli/dist/index.mjs.map +1 -1
- package/packages/core/dist/checks.cjs +105 -0
- package/packages/core/dist/checks.cjs.map +1 -1
- package/packages/core/dist/checks.d.cts +26 -1
- package/packages/core/dist/checks.d.ts +26 -1
- package/packages/core/dist/checks.mjs +103 -1
- package/packages/core/dist/checks.mjs.map +1 -1
|
@@ -580,6 +580,108 @@ function createRunDurationRule(options) {
|
|
|
580
580
|
}
|
|
581
581
|
};
|
|
582
582
|
}
|
|
583
|
+
function createMaxStepDurationRule(options) {
|
|
584
|
+
return {
|
|
585
|
+
id: "run.maxStepDuration",
|
|
586
|
+
category: "run",
|
|
587
|
+
defaultSeverity: "error",
|
|
588
|
+
evaluate(context) {
|
|
589
|
+
const over = context.events.filter((event) => {
|
|
590
|
+
const duration = eventDurationMs(event);
|
|
591
|
+
return duration !== void 0 && duration > options.maxDurationMs;
|
|
592
|
+
});
|
|
593
|
+
if (over.length === 0) return [];
|
|
594
|
+
return [
|
|
595
|
+
failFinding(
|
|
596
|
+
"run.maxStepDuration",
|
|
597
|
+
`${over.length} step(s) exceeded max duration ${options.maxDurationMs}ms.`,
|
|
598
|
+
over.map((event) => eventEvidence(event, "durationMs")),
|
|
599
|
+
{ maxDurationMs: options.maxDurationMs },
|
|
600
|
+
over.map((event) => ({
|
|
601
|
+
eventId: event.eventId,
|
|
602
|
+
name: event.name,
|
|
603
|
+
durationMs: eventDurationMs(event)
|
|
604
|
+
}))
|
|
605
|
+
)
|
|
606
|
+
];
|
|
607
|
+
}
|
|
608
|
+
};
|
|
609
|
+
}
|
|
610
|
+
function createStallDetectionRule(options = {}) {
|
|
611
|
+
const requireEndedAt = options.requireEndedAt === true;
|
|
612
|
+
return {
|
|
613
|
+
id: "run.stall",
|
|
614
|
+
category: "run",
|
|
615
|
+
defaultSeverity: "warning",
|
|
616
|
+
evaluate(context) {
|
|
617
|
+
const findings = [];
|
|
618
|
+
const running = context.events.filter((event) => event.status === "running");
|
|
619
|
+
if (running.length > 0) {
|
|
620
|
+
findings.push(
|
|
621
|
+
failFinding(
|
|
622
|
+
"run.stall",
|
|
623
|
+
`Found ${running.length} event(s) still running (possible stall).`,
|
|
624
|
+
running.map((event) => eventEvidence(event, "status")),
|
|
625
|
+
"no running events",
|
|
626
|
+
running.length
|
|
627
|
+
)
|
|
628
|
+
);
|
|
629
|
+
}
|
|
630
|
+
if (requireEndedAt) {
|
|
631
|
+
const incomplete = context.events.filter(
|
|
632
|
+
(event) => event.startedAt !== void 0 && event.endedAt === void 0 && event.status !== "running"
|
|
633
|
+
);
|
|
634
|
+
if (incomplete.length > 0) {
|
|
635
|
+
findings.push(
|
|
636
|
+
failFinding(
|
|
637
|
+
"run.stall",
|
|
638
|
+
`Found ${incomplete.length} started event(s) without endedAt.`,
|
|
639
|
+
incomplete.map((event) => eventEvidence(event, "endedAt")),
|
|
640
|
+
"endedAt for started events",
|
|
641
|
+
incomplete.length
|
|
642
|
+
)
|
|
643
|
+
);
|
|
644
|
+
}
|
|
645
|
+
}
|
|
646
|
+
return findings;
|
|
647
|
+
}
|
|
648
|
+
};
|
|
649
|
+
}
|
|
650
|
+
function createRequireCompletedRule() {
|
|
651
|
+
return {
|
|
652
|
+
id: "run.requireCompleted",
|
|
653
|
+
category: "run",
|
|
654
|
+
defaultSeverity: "error",
|
|
655
|
+
evaluate(context) {
|
|
656
|
+
const findings = [];
|
|
657
|
+
const runStatus = context.selectedRun?.status;
|
|
658
|
+
if (runStatus === "running") {
|
|
659
|
+
findings.push(
|
|
660
|
+
failFinding(
|
|
661
|
+
"run.requireCompleted",
|
|
662
|
+
"Run is still running.",
|
|
663
|
+
runEvidence(context.selectedRun),
|
|
664
|
+
"completed run",
|
|
665
|
+
runStatus
|
|
666
|
+
)
|
|
667
|
+
);
|
|
668
|
+
}
|
|
669
|
+
const running = context.events.filter((event) => event.status === "running");
|
|
670
|
+
if (running.length > 0) {
|
|
671
|
+
findings.push(
|
|
672
|
+
failFinding(
|
|
673
|
+
"run.requireCompleted",
|
|
674
|
+
`Run has ${running.length} incomplete running event(s).`,
|
|
675
|
+
running.map((event) => eventEvidence(event, "status")),
|
|
676
|
+
"no running events",
|
|
677
|
+
running.length
|
|
678
|
+
)
|
|
679
|
+
);
|
|
680
|
+
}
|
|
681
|
+
return findings;
|
|
682
|
+
}
|
|
683
|
+
};
|
|
684
|
+
}
|
|
583
685
|
function createRunEventCountRule(options) {
|
|
584
686
|
return {
|
|
585
687
|
id: "run.eventCount",
|
|
@@ -1513,6 +1615,8 @@ exports.createBaselineRegressionRule = createBaselineRegressionRule;
|
|
|
1513
1615
|
exports.createDecisionRule = createDecisionRule;
|
|
1514
1616
|
exports.createGuardrailRule = createGuardrailRule;
|
|
1515
1617
|
exports.createLlmUsageRule = createLlmUsageRule;
|
|
1618
|
+
exports.createMaxStepDurationRule = createMaxStepDurationRule;
|
|
1619
|
+
exports.createRequireCompletedRule = createRequireCompletedRule;
|
|
1516
1620
|
exports.createRetrievalRule = createRetrievalRule;
|
|
1517
1621
|
exports.createRunDepthRule = createRunDepthRule;
|
|
1518
1622
|
exports.createRunDurationRule = createRunDurationRule;
|
|
@@ -1522,6 +1626,7 @@ exports.createSafetyOversizedAttributeRule = createSafetyOversizedAttributeRule;
|
|
|
1522
1626
|
exports.createSafetyRawContentRule = createSafetyRawContentRule;
|
|
1523
1627
|
exports.createSafetyRedactionRule = createSafetyRedactionRule;
|
|
1524
1628
|
exports.createSafetySecretPatternRule = createSafetySecretPatternRule;
|
|
1629
|
+
exports.createStallDetectionRule = createStallDetectionRule;
|
|
1525
1630
|
exports.createStructureCycleRule = createStructureCycleRule;
|
|
1526
1631
|
exports.createStructureIncompleteRule = createStructureIncompleteRule;
|
|
1527
1632
|
exports.createStructureOrphanRule = createStructureOrphanRule;
|