agent-inspect 6.12.2 → 6.13.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.
@@ -7,7 +7,7 @@ import { P as PersistedInspectEvent } from './persisted-inspect-event-d-mSP8kd.c
7
7
  import { Stats } from 'node:fs';
8
8
  import { b as ObservedOutcome } from './types-B562HgN_.cjs';
9
9
  export { O as ObservedOutcomeStatus } from './types-B562HgN_.cjs';
10
- import { a as TraceCheckResult, J as TraceCheckStatus } from './index-BOP33T4O.cjs';
10
+ import { b as TraceCheckResult, J as TraceCheckStatus } from './index-CmXMS-MF.cjs';
11
11
  import './writers.cjs';
12
12
  import './log-config-BG1WmWf2.cjs';
13
13
  import './readers.cjs';
@@ -7,7 +7,7 @@ import { P as PersistedInspectEvent } from './persisted-inspect-event-ChE7pGb7.j
7
7
  import { Stats } from 'node:fs';
8
8
  import { b as ObservedOutcome } from './types-B562HgN_.js';
9
9
  export { O as ObservedOutcomeStatus } from './types-B562HgN_.js';
10
- import { a as TraceCheckResult, J as TraceCheckStatus } from './index-CgCH8NE9.js';
10
+ import { b as TraceCheckResult, J as TraceCheckStatus } from './index-Bu_vOjql.js';
11
11
  import './writers.js';
12
12
  import './log-config-Ck0aT_Ou.js';
13
13
  import './readers.js';
@@ -1,4 +1,4 @@
1
- import { runTraceChecks, createRunStatusRule, createToolUsageRule, createRunDurationRule, createLlmUsageRule, createObservedOutcomeRule } from './chunk-KJICERSD.mjs';
1
+ import { runTraceChecks, createRunStatusRule, createToolUsageRule, createRunDurationRule, createLlmUsageRule, createObservedOutcomeRule } from './chunk-BS2QCAJX.mjs';
2
2
  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-ZWA5RWMV.mjs';
3
3
  import { buildRunTimeline, filterTraces, extractMetadata, buildRunSummary } from './chunk-LFWZEO2L.mjs';
4
4
  export { buildRunSummary, buildRunTimeline, buildRunWhatSummary, buildTraceStats, extractMetadata, filterTraces, renderRunWhat, renderTimeline, renderTraceStats } from './chunk-LFWZEO2L.mjs';
@@ -260,11 +260,16 @@ function projectLogicalEvents(events) {
260
260
  }
261
261
  if (!remapped) {
262
262
  if (!logicalById.has(originalParentId) && !logicalByRawId.has(originalParentId)) {
263
- diagnostics.push({
264
- code: "AI_LOGICAL_PARENT_UNRESOLVED",
265
- message: `Parent ${originalParentId} unresolved for ${event.eventId}.`,
266
- eventIds: [event.eventId]
267
- });
263
+ const mapping = event.attributes?.parentMapping;
264
+ const unresolved = mapping === "unresolved" || event.attributes?.parentUnresolved === true || event.attributes?.unresolvedParent === true || // LangGraph/framework scaffolding sentinel labels are not event ids.
265
+ /^LangGraph$/i.test(originalParentId) || originalParentId.startsWith("unresolved:");
266
+ if (!unresolved) {
267
+ diagnostics.push({
268
+ code: "AI_LOGICAL_PARENT_UNRESOLVED",
269
+ message: `Parent ${originalParentId} unresolved for ${event.eventId}.`,
270
+ eventIds: [event.eventId]
271
+ });
272
+ }
268
273
  }
269
274
  normalized.push(event);
270
275
  continue;
@@ -318,6 +323,62 @@ function pickString(record, keys) {
318
323
  return void 0;
319
324
  }
320
325
 
326
+ // packages/core/src/checks/trace-facts.ts
327
+ function summarizeSemanticParity(events) {
328
+ const projection = projectLogicalEvents(events);
329
+ const logical = projection.logicalEvents;
330
+ const finishedTools = logical.filter(
331
+ (event) => event.kind === "TOOL" && event.status !== "running"
332
+ );
333
+ const finishedToolNames = Object.freeze(
334
+ finishedTools.map((event) => resolveCanonicalToolName(event)).sort((a, b) => a.localeCompare(b))
335
+ );
336
+ return {
337
+ rawEventCount: events.length,
338
+ logicalEventCount: logical.length,
339
+ runningLogicalCount: logical.filter((event) => event.status === "running").length,
340
+ finishedToolNames,
341
+ finishedToolCount: finishedTools.length,
342
+ pairedCount: logical.filter((event) => event.projection.paired).length,
343
+ parentRemapCount: projection.diagnostics.filter(
344
+ (item) => item.code === "AI_LOGICAL_PARENT_REMAPPED"
345
+ ).length,
346
+ diagnostics: projection.diagnostics
347
+ };
348
+ }
349
+ function buildTraceFacts(events) {
350
+ const projection = projectLogicalEvents(events);
351
+ const toolsByName = /* @__PURE__ */ new Map();
352
+ const llmEvents = [];
353
+ const outcomeEvents = [];
354
+ for (const event of projection.logicalEvents) {
355
+ if (event.kind === "TOOL" && event.status !== "running") {
356
+ const name = resolveCanonicalToolName(event);
357
+ const list = toolsByName.get(name) ?? [];
358
+ list.push(event);
359
+ toolsByName.set(name, list);
360
+ }
361
+ if (event.kind === "LLM" && event.status !== "running") {
362
+ llmEvents.push(event);
363
+ }
364
+ if (event.kind === "OUTCOME") {
365
+ outcomeEvents.push(event);
366
+ }
367
+ }
368
+ for (const [name, list] of [...toolsByName.entries()]) {
369
+ toolsByName.set(name, Object.freeze([...list]));
370
+ }
371
+ return {
372
+ rawEvents: Object.freeze([...events]),
373
+ logicalEvents: projection.logicalEvents,
374
+ diagnostics: projection.diagnostics,
375
+ toolsByName,
376
+ llmEvents: Object.freeze(llmEvents),
377
+ outcomeEvents: Object.freeze(outcomeEvents),
378
+ summary: summarizeSemanticParity(events)
379
+ };
380
+ }
381
+
321
382
  // packages/core/src/checks/contract.ts
322
383
  function contractFailFinding(ruleId, message, evidence, expected, actual) {
323
384
  return {
@@ -409,10 +470,18 @@ function contractToRules(contract) {
409
470
  rules.push(createStructureIncompleteRule({ requireEndedAtForStarted: true }));
410
471
  }
411
472
  if (contract.tools) {
473
+ const required = [
474
+ ...contract.tools.required ?? [],
475
+ ...contract.tools.requiredTools ?? []
476
+ ];
477
+ const forbidden = [
478
+ ...contract.tools.forbidden ?? [],
479
+ ...contract.tools.forbiddenTools ?? []
480
+ ];
412
481
  rules.push(
413
482
  createToolUsageRule({
414
- ...contract.tools.required ? { required: contract.tools.required } : {},
415
- ...contract.tools.forbidden ? { forbidden: contract.tools.forbidden } : {},
483
+ ...required.length > 0 ? { required } : {},
484
+ ...forbidden.length > 0 ? { forbidden } : {},
416
485
  ...contract.tools.allowed ? { allowed: contract.tools.allowed } : {},
417
486
  ...contract.tools.maxCalls !== void 0 ? { maxCount: contract.tools.maxCalls } : {}
418
487
  })
@@ -2226,6 +2295,7 @@ function runTraceChecks(input, options = {}) {
2226
2295
  };
2227
2296
  }
2228
2297
 
2298
+ exports.buildTraceFacts = buildTraceFacts;
2229
2299
  exports.createBaselineRegressionRule = createBaselineRegressionRule;
2230
2300
  exports.createDecisionRule = createDecisionRule;
2231
2301
  exports.createGuardrailRule = createGuardrailRule;
@@ -2256,5 +2326,6 @@ exports.evaluateTraceContract = evaluateTraceContract;
2256
2326
  exports.projectLogicalEvents = projectLogicalEvents;
2257
2327
  exports.resolveCanonicalToolName = resolveCanonicalToolName;
2258
2328
  exports.runTraceChecks = runTraceChecks;
2329
+ exports.summarizeSemanticParity = summarizeSemanticParity;
2259
2330
  //# sourceMappingURL=checks.cjs.map
2260
2331
  //# sourceMappingURL=checks.cjs.map