agent-inspect 6.31.8 → 6.31.10

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.
Files changed (53) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +1 -1
  3. package/package.json +1 -1
  4. package/packages/cli/dist/{chunk-6FE47XSF.mjs → chunk-JCKC4ZRV.mjs} +212 -12
  5. package/packages/cli/dist/chunk-JCKC4ZRV.mjs.map +1 -0
  6. package/packages/cli/dist/index.cjs +215 -11
  7. package/packages/cli/dist/index.cjs.map +1 -1
  8. package/packages/cli/dist/index.mjs +4 -4
  9. package/packages/cli/dist/index.mjs.map +1 -1
  10. package/packages/cli/dist/{src-NXAYHG34.mjs → src-4UD7JNDR.mjs} +3 -3
  11. package/packages/cli/dist/{src-NXAYHG34.mjs.map → src-4UD7JNDR.mjs.map} +1 -1
  12. package/packages/core/dist/advanced.cjs +202 -15
  13. package/packages/core/dist/advanced.cjs.map +1 -1
  14. package/packages/core/dist/advanced.d.cts +1 -1
  15. package/packages/core/dist/advanced.d.ts +1 -1
  16. package/packages/core/dist/advanced.mjs +90 -15
  17. package/packages/core/dist/advanced.mjs.map +1 -1
  18. package/packages/core/dist/checks.cjs +79 -0
  19. package/packages/core/dist/checks.cjs.map +1 -1
  20. package/packages/core/dist/checks.d.cts +1 -1
  21. package/packages/core/dist/checks.d.ts +1 -1
  22. package/packages/core/dist/checks.mjs +3 -2
  23. package/packages/core/dist/{chunk-L5WLVBW4.mjs → chunk-AHUZNHFI.mjs} +4 -55
  24. package/packages/core/dist/chunk-AHUZNHFI.mjs.map +1 -0
  25. package/packages/core/dist/{chunk-2CCRUI42.mjs → chunk-CPQAOJW4.mjs} +72 -3
  26. package/packages/core/dist/chunk-CPQAOJW4.mjs.map +1 -0
  27. package/packages/core/dist/{chunk-2IRRUNIN.mjs → chunk-OAUNS5CS.mjs} +3 -3
  28. package/packages/core/dist/{chunk-2IRRUNIN.mjs.map → chunk-OAUNS5CS.mjs.map} +1 -1
  29. package/packages/core/dist/{chunk-IJJSPJXV.mjs → chunk-QOC3PJO3.mjs} +4 -4
  30. package/packages/core/dist/{chunk-IJJSPJXV.mjs.map → chunk-QOC3PJO3.mjs.map} +1 -1
  31. package/packages/core/dist/chunk-S6LQBLX5.mjs +67 -0
  32. package/packages/core/dist/chunk-S6LQBLX5.mjs.map +1 -0
  33. package/packages/core/dist/{chunk-VQUB3WRI.mjs → chunk-SSG3ICI4.mjs} +28 -3
  34. package/packages/core/dist/chunk-SSG3ICI4.mjs.map +1 -0
  35. package/packages/core/dist/index.cjs +89 -1
  36. package/packages/core/dist/index.cjs.map +1 -1
  37. package/packages/core/dist/index.mjs +3 -2
  38. package/packages/core/dist/index.mjs.map +1 -1
  39. package/packages/core/dist/persisted.cjs +11 -0
  40. package/packages/core/dist/persisted.cjs.map +1 -1
  41. package/packages/core/dist/persisted.mjs +4 -3
  42. package/packages/core/dist/persisted.mjs.map +1 -1
  43. package/packages/core/dist/{programmatic-gZTWLObB.d.cts → programmatic-BLlC7Ytq.d.cts} +1 -1
  44. package/packages/core/dist/{programmatic-gZTWLObB.d.ts → programmatic-BLlC7Ytq.d.ts} +1 -1
  45. package/packages/core/dist/readers.cjs +11 -0
  46. package/packages/core/dist/readers.cjs.map +1 -1
  47. package/packages/core/dist/readers.d.cts +1 -1
  48. package/packages/core/dist/readers.d.ts +1 -1
  49. package/packages/core/dist/readers.mjs +4 -3
  50. package/packages/cli/dist/chunk-6FE47XSF.mjs.map +0 -1
  51. package/packages/core/dist/chunk-2CCRUI42.mjs.map +0 -1
  52. package/packages/core/dist/chunk-L5WLVBW4.mjs.map +0 -1
  53. package/packages/core/dist/chunk-VQUB3WRI.mjs.map +0 -1
@@ -1269,7 +1269,7 @@ interface EvidenceCiPackageFiles {
1269
1269
  declare function buildEvidenceCiPackage(input: EvidenceCiPackageInput): EvidenceCiPackageFiles;
1270
1270
 
1271
1271
  type SuiteCaseStatus = "pass" | "fail" | "error" | "skipped";
1272
- type SuiteDiagnosticCode = "AI_SUITE_CONFIG_INVALID" | "AI_SUITE_CONFIG_LOAD_FAILED" | "AI_SUITE_CASE_TRACE_MISSING" | "AI_SUITE_CASE_CHECK_FAILED" | "AI_SUITE_CASE_EVAL_FAILED" | "AI_SUITE_CASE_OBSERVATION_FAILED" | "AI_SUITE_TRACE_UNREADABLE";
1272
+ type SuiteDiagnosticCode = "AI_SUITE_CONFIG_INVALID" | "AI_SUITE_CONFIG_LOAD_FAILED" | "AI_SUITE_CASE_TRACE_MISSING" | "AI_SUITE_CASE_CHECK_FAILED" | "AI_SUITE_CASE_EVAL_FAILED" | "AI_SUITE_CASE_OBSERVATION_FAILED" | "AI_SUITE_NO_ASSERTIONS" | "AI_SUITE_UNKNOWN_SELECTOR" | "AI_SUITE_TRACE_UNREADABLE";
1273
1273
  interface SuiteDiagnostic {
1274
1274
  code: SuiteDiagnosticCode;
1275
1275
  severity: "error" | "warning" | "info";
@@ -1269,7 +1269,7 @@ interface EvidenceCiPackageFiles {
1269
1269
  declare function buildEvidenceCiPackage(input: EvidenceCiPackageInput): EvidenceCiPackageFiles;
1270
1270
 
1271
1271
  type SuiteCaseStatus = "pass" | "fail" | "error" | "skipped";
1272
- type SuiteDiagnosticCode = "AI_SUITE_CONFIG_INVALID" | "AI_SUITE_CONFIG_LOAD_FAILED" | "AI_SUITE_CASE_TRACE_MISSING" | "AI_SUITE_CASE_CHECK_FAILED" | "AI_SUITE_CASE_EVAL_FAILED" | "AI_SUITE_CASE_OBSERVATION_FAILED" | "AI_SUITE_TRACE_UNREADABLE";
1272
+ type SuiteDiagnosticCode = "AI_SUITE_CONFIG_INVALID" | "AI_SUITE_CONFIG_LOAD_FAILED" | "AI_SUITE_CASE_TRACE_MISSING" | "AI_SUITE_CASE_CHECK_FAILED" | "AI_SUITE_CASE_EVAL_FAILED" | "AI_SUITE_CASE_OBSERVATION_FAILED" | "AI_SUITE_NO_ASSERTIONS" | "AI_SUITE_UNKNOWN_SELECTOR" | "AI_SUITE_TRACE_UNREADABLE";
1273
1273
  interface SuiteDiagnostic {
1274
1274
  code: SuiteDiagnosticCode;
1275
1275
  severity: "error" | "warning" | "info";
@@ -1,6 +1,6 @@
1
- import { extractSessionWorkflowMetadata, sessionKeyForRun, defineTraceContract, runTraceChecks, createRunStatusRule, createToolUsageRule, createRunDurationRule, createLlmUsageRule, createObservedOutcomeRule } from './chunk-2CCRUI42.mjs';
2
- export { extractSessionWorkflowMetadata, sessionKeyForRun } from './chunk-2CCRUI42.mjs';
3
- export { MAX_TERMINAL_DEPTH, MAX_TERMINAL_NAME_LENGTH, TERMINAL_INDENT, TraceDirectory, createInspector, createInspectorRuntime, formatTerminalName, getCurrentContext, getCurrentCorrelationMetadata, getCurrentDepth, getCurrentRunId, getCurrentRunName, getCurrentStepId, getIndent, getParentStepId, getTraceDirFromContext, getTraceSafetyFromContext, hasActiveContext, isAgentInspectEnabled, isSilentContext, maybeInspectRun, printError, printFailedAt, printRunComplete, printRunStart, printStepComplete, printStepStart, renderErrorLine, renderRunSummary, renderStepLine, resolveTraceDir, runWithContext, runWithStepContext } from './chunk-VQUB3WRI.mjs';
1
+ import { extractSessionWorkflowMetadata, sessionKeyForRun, defineTraceContract, runTraceChecks, createRunStatusRule, createToolUsageRule, createRunDurationRule, createRunDepthRule, createToolFailureRule, createLlmUsageRule, createObservedOutcomeRule } from './chunk-CPQAOJW4.mjs';
2
+ export { extractSessionWorkflowMetadata, sessionKeyForRun } from './chunk-CPQAOJW4.mjs';
3
+ export { MAX_TERMINAL_DEPTH, MAX_TERMINAL_NAME_LENGTH, TERMINAL_INDENT, TraceDirectory, createInspector, createInspectorRuntime, formatTerminalName, getCurrentContext, getCurrentCorrelationMetadata, getCurrentDepth, getCurrentRunId, getCurrentRunName, getCurrentStepId, getIndent, getParentStepId, getTraceDirFromContext, getTraceSafetyFromContext, hasActiveContext, isAgentInspectEnabled, isSilentContext, maybeInspectRun, printError, printFailedAt, printRunComplete, printRunStart, printStepComplete, printStepStart, renderErrorLine, renderRunSummary, renderStepLine, resolveTraceDir, runWithContext, runWithStepContext } from './chunk-SSG3ICI4.mjs';
4
4
  import { buildRunTimeline, filterTraces, extractMetadata, buildRunSummary } from './chunk-7YYS742B.mjs';
5
5
  export { buildRunSummary, buildRunTimeline, buildRunWhatSummary, buildTraceStats, extractMetadata, filterTraces, formatStepLabel, renderRunWhat, renderTimeline, renderTraceStats } from './chunk-7YYS742B.mjs';
6
6
  import { extractOutcomesFromTraceEvents, parseObservationFilter, summarizeObservedOutcomes, extractOutcomesFromPersistedEvents, renderObservedOutcomesHtml } from './chunk-N5PZAI6Q.mjs';
@@ -11,10 +11,11 @@ import { escapeHtml, flattenTree } from './chunk-CAWPF22J.mjs';
11
11
  import { resolveRedactionProfile, readTraceEventsFromFile, stringContainsHighConfidenceCredential } from './chunk-DK3OW6UI.mjs';
12
12
  export { DEFAULT_MAX_EVENT_BYTES, DEFAULT_MAX_METADATA_VALUE_LENGTH, DEFAULT_MAX_PREVIEW_LENGTH, getRunIdFromTraceFileName, initializeTraceFile, listTraceFiles, prepareMetadataForDisk, prepareTraceEventForDisk, readTraceEvents, readTraceFile, resolveRedactionProfile, resolveTraceSafetyOptions, serializeEvent, validateEvent, writeTraceEvent } from './chunk-DK3OW6UI.mjs';
13
13
  import { Redactor } from './chunk-VLVCLAPB.mjs';
14
- import { openTrace } from './chunk-IJJSPJXV.mjs';
15
- import './chunk-2IRRUNIN.mjs';
16
- import './chunk-L5WLVBW4.mjs';
14
+ import { openTrace } from './chunk-QOC3PJO3.mjs';
15
+ import './chunk-OAUNS5CS.mjs';
16
+ import './chunk-AHUZNHFI.mjs';
17
17
  import './chunk-S4YWKV4G.mjs';
18
+ import './chunk-S6LQBLX5.mjs';
18
19
  import './chunk-AK5EN4U2.mjs';
19
20
  import { parseDuration, isTraceEvent, getTraceFilePath } from './chunk-7DHSWDKB.mjs';
20
21
  export { DEFAULT_TRACE_DIR_NAME, FALLBACK_TRACE_DIR, MAX_NAME_LENGTH, RUNS_DIR_NAME, createRunId, createStepId, ensureTraceDir, formatDuration, formatError, formatTimestamp, getDefaultTraceDir, getTraceFilePath, isStepStatus, isStepType, isTraceEvent, parseDuration, parseTraceJsonl, truncateName, unknownTraceFormatMessage, warn } from './chunk-7DHSWDKB.mjs';
@@ -3626,21 +3627,48 @@ async function resolveSuiteCaseTrace(suiteCase, options) {
3626
3627
  reason: `no trace found for run id "${runKey}" under ${options.tracesDir}`
3627
3628
  };
3628
3629
  }
3630
+ var KNOWN_SUITE_SELECT_IDS = /* @__PURE__ */ new Set([
3631
+ "run.status",
3632
+ "run.duration",
3633
+ "run.depth",
3634
+ "outcome.status",
3635
+ "tool.usage",
3636
+ "tool.failures",
3637
+ "llm.usage"
3638
+ ]);
3629
3639
  function diagnostic3(code, message, severity = "error", caseId) {
3630
3640
  return { code, message, severity, ...caseId !== void 0 ? { caseId } : {} };
3631
3641
  }
3632
- function buildCaseRules(suiteCase, config) {
3642
+ function buildCaseAssertions(suiteCase, config) {
3633
3643
  const rules = [];
3634
3644
  const select = new Set(config.checks?.select ?? []);
3635
- if (select.has("run.status")) {
3645
+ const configDiagnostics = [];
3646
+ const evalConfig = config.eval;
3647
+ const declaredSelect = [...select];
3648
+ for (const id of declaredSelect) {
3649
+ if (!KNOWN_SUITE_SELECT_IDS.has(id)) {
3650
+ configDiagnostics.push(
3651
+ diagnostic3(
3652
+ "AI_SUITE_UNKNOWN_SELECTOR",
3653
+ `Unknown or unsupported suite check selector "${id}".`,
3654
+ "error",
3655
+ suiteCase.id
3656
+ )
3657
+ );
3658
+ }
3659
+ }
3660
+ if (select.has("run.status") || evalConfig?.requireSuccess === true) {
3636
3661
  rules.push(createRunStatusRule());
3662
+ select.add("run.status");
3637
3663
  }
3638
3664
  const requiredTools = [
3639
3665
  ...config.checks?.tool?.required ?? [],
3666
+ ...evalConfig?.requiredTools ?? [],
3640
3667
  ...suiteCase.requireTools ?? []
3641
3668
  ];
3642
3669
  const forbiddenTools = [
3643
3670
  ...config.checks?.tool?.forbidden ?? [],
3671
+ ...evalConfig?.forbiddenTools ?? [],
3644
3672
  ...suiteCase.forbidTools ?? []
3645
3673
  ];
3646
3674
  if (requiredTools.length > 0 || forbiddenTools.length > 0) {
@@ -3652,20 +3680,51 @@ function buildCaseRules(suiteCase, config) {
3652
3680
  );
3653
3681
  select.add("tool.usage");
3654
3682
  }
3655
- const maxDurationMs = suiteCase.maxDurationMs ?? config.checks?.run?.maxDurationMs ?? config.eval?.maxDurationMs;
3683
+ const maxDurationMs = suiteCase.maxDurationMs ?? config.checks?.run?.maxDurationMs ?? evalConfig?.maxDurationMs;
3656
3684
  if (maxDurationMs !== void 0) {
3657
3685
  rules.push(createRunDurationRule({ maxDurationMs }));
3658
3686
  select.add("run.duration");
3659
3687
  }
3660
- const llm = config.checks?.llm;
3661
- if (llm?.allowedModels !== void 0 || llm?.maxTotalTokens !== void 0) {
3662
- rules.push(createLlmUsageRule(llm));
3688
+ const maxDepth = config.checks?.run?.maxDepth ?? evalConfig?.maxDepth;
3689
+ if (maxDepth !== void 0) {
3690
+ rules.push(createRunDepthRule({ maxDepth }));
3691
+ select.add("run.depth");
3692
+ }
3693
+ if (evalConfig?.maxRetries !== void 0) {
3694
+ rules.push(createToolFailureRule({ maxRetries: evalConfig.maxRetries }));
3695
+ select.add("tool.failures");
3696
+ }
3697
+ const allowedModels = config.checks?.llm?.allowedModels;
3698
+ const maxTotalTokens = config.checks?.llm?.maxTotalTokens ?? evalConfig?.maxTotalTokens;
3699
+ if (allowedModels !== void 0 || maxTotalTokens !== void 0) {
3700
+ rules.push(
3701
+ createLlmUsageRule({
3702
+ ...allowedModels !== void 0 ? { allowedModels } : {},
3703
+ ...maxTotalTokens !== void 0 ? { maxTotalTokens } : {}
3704
+ })
3705
+ );
3663
3706
  select.add("llm.usage");
3664
3707
  }
3665
3708
  if (select.has("outcome.status")) {
3666
3709
  rules.push(createObservedOutcomeRule({ failOn: ["failed"] }));
3667
3710
  }
3668
- return { rules, select: [...select] };
3711
+ const observationCount = suiteCase.expectedObservations?.length ?? 0;
3712
+ if (rules.length === 0 && observationCount === 0 && configDiagnostics.length === 0) {
3713
+ configDiagnostics.push(
3714
+ diagnostic3(
3715
+ "AI_SUITE_NO_ASSERTIONS",
3716
+ `Suite case "${suiteCase.id}" declares no effective checks, eval controls, or expected observations.`,
3717
+ "error",
3718
+ suiteCase.id
3719
+ )
3720
+ );
3721
+ }
3722
+ return {
3723
+ rules,
3724
+ select: [...select],
3725
+ observationCount,
3726
+ configDiagnostics
3727
+ };
3669
3728
  }
3670
3729
  function outcomesFromRead(read) {
3671
3730
  const persistedOutcomes = extractOutcomesFromPersistedEvents(
@@ -3746,8 +3805,20 @@ async function runSuiteCase(suiteCase, config, options) {
3746
3805
  ]
3747
3806
  };
3748
3807
  }
3749
- const { rules, select } = buildCaseRules(suiteCase, config);
3750
- const checkResult = rules.length > 0 ? runTraceChecks({ read }, { rules, select }) : {
3808
+ const compiled = buildCaseAssertions(suiteCase, config);
3809
+ if (compiled.configDiagnostics.length > 0) {
3810
+ return {
3811
+ id: suiteCase.id,
3812
+ status: "error",
3813
+ tracePath: resolved.tracePath,
3814
+ ...resolved.runId !== void 0 ? { runId: resolved.runId } : {},
3815
+ checkOk: false,
3816
+ ...config.eval?.requireSuccess === true ? { evalOk: false } : {},
3817
+ message: compiled.configDiagnostics.map((item) => item.message).join("; "),
3818
+ diagnostics: compiled.configDiagnostics
3819
+ };
3820
+ }
3821
+ const checkResult = compiled.rules.length > 0 ? runTraceChecks({ read }, { rules: compiled.rules, select: compiled.select }) : {
3751
3822
  ok: true,
3752
3823
  status: "pass",
3753
3824
  format: read.format,
@@ -3775,6 +3846,9 @@ async function runSuiteCase(suiteCase, config, options) {
3775
3846
  ];
3776
3847
  const checkOk = checkResult.ok;
3777
3848
  const observationsOk = observationResult.ok;
3849
+ const evalOk = config.eval?.requireSuccess === true ? checkResult.findings.every(
3850
+ (finding) => finding.ruleId !== "run.status" || finding.status !== "fail"
3851
+ ) && checkResult.diagnostics.every((item) => item.severity !== "error") : void 0;
3778
3852
  const ok = checkOk && observationsOk;
3779
3853
  const status = ok ? "pass" : checkResult.status === "error" ? "error" : "fail";
3780
3854
  return {
@@ -3783,6 +3857,7 @@ async function runSuiteCase(suiteCase, config, options) {
3783
3857
  tracePath: resolved.tracePath,
3784
3858
  ...resolved.runId !== void 0 ? { runId: resolved.runId } : {},
3785
3859
  checkOk,
3860
+ ...evalOk !== void 0 ? { evalOk } : {},
3786
3861
  observationsOk,
3787
3862
  diagnostics,
3788
3863
  ...ok ? {} : {