agent-inspect 6.31.17 → 6.31.19

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 (32) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +1 -1
  3. package/docs/COMPARE.md +1 -1
  4. package/package.json +2 -2
  5. package/packages/cli/dist/{chunk-USZJEEME.mjs → chunk-NALE36AJ.mjs} +154 -31
  6. package/packages/cli/dist/chunk-NALE36AJ.mjs.map +1 -0
  7. package/packages/cli/dist/index.cjs +208 -32
  8. package/packages/cli/dist/index.cjs.map +1 -1
  9. package/packages/cli/dist/index.mjs +58 -6
  10. package/packages/cli/dist/index.mjs.map +1 -1
  11. package/packages/cli/dist/{src-EY4EY456.mjs → src-IZIVBMCO.mjs} +3 -3
  12. package/packages/cli/dist/{src-EY4EY456.mjs.map → src-IZIVBMCO.mjs.map} +1 -1
  13. package/packages/core/dist/advanced.cjs +72 -4
  14. package/packages/core/dist/advanced.cjs.map +1 -1
  15. package/packages/core/dist/advanced.mjs +3 -3
  16. package/packages/core/dist/checks.cjs +86 -29
  17. package/packages/core/dist/checks.cjs.map +1 -1
  18. package/packages/core/dist/checks.mjs +1 -1
  19. package/packages/core/dist/{chunk-GTA6SNDK.mjs → chunk-2RSTU3OZ.mjs} +88 -31
  20. package/packages/core/dist/chunk-2RSTU3OZ.mjs.map +1 -0
  21. package/packages/core/dist/{chunk-NJUSSJX3.mjs → chunk-EIP5CNEL.mjs} +68 -2
  22. package/packages/core/dist/chunk-EIP5CNEL.mjs.map +1 -0
  23. package/packages/core/dist/exporters.cjs +54 -2
  24. package/packages/core/dist/exporters.cjs.map +1 -1
  25. package/packages/core/dist/exporters.mjs +54 -2
  26. package/packages/core/dist/exporters.mjs.map +1 -1
  27. package/packages/core/dist/readers.cjs +66 -0
  28. package/packages/core/dist/readers.cjs.map +1 -1
  29. package/packages/core/dist/readers.mjs +1 -1
  30. package/packages/cli/dist/chunk-USZJEEME.mjs.map +0 -1
  31. package/packages/core/dist/chunk-GTA6SNDK.mjs.map +0 -1
  32. package/packages/core/dist/chunk-NJUSSJX3.mjs.map +0 -1
@@ -1,5 +1,5 @@
1
- import { extractSessionWorkflowMetadata, sessionKeyForRun, defineTraceContract, runTraceChecks, createRunStatusRule, createToolUsageRule, createRunDurationRule, createRunDepthRule, createToolFailureRule, createLlmUsageRule, createObservedOutcomeRule } from './chunk-GTA6SNDK.mjs';
2
- export { extractSessionWorkflowMetadata, sessionKeyForRun } from './chunk-GTA6SNDK.mjs';
1
+ import { extractSessionWorkflowMetadata, sessionKeyForRun, defineTraceContract, runTraceChecks, createRunStatusRule, createToolUsageRule, createRunDurationRule, createRunDepthRule, createToolFailureRule, createLlmUsageRule, createObservedOutcomeRule } from './chunk-2RSTU3OZ.mjs';
2
+ export { extractSessionWorkflowMetadata, sessionKeyForRun } from './chunk-2RSTU3OZ.mjs';
3
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-6C244CAV.mjs';
4
4
  import { buildRunTimeline, filterTraces, extractMetadata, buildRunSummary } from './chunk-NX25C7JZ.mjs';
5
5
  export { buildRunSummary, buildRunTimeline, buildRunWhatSummary, buildTraceStats, extractMetadata, filterTraces, formatStepLabel, renderRunWhat, renderTimeline, renderTraceStats } from './chunk-NX25C7JZ.mjs';
@@ -11,7 +11,7 @@ import { escapeHtml, flattenTree } from './chunk-CAWPF22J.mjs';
11
11
  import { resolveRedactionProfile, readTraceEventsFromFile, stringContainsHighConfidenceCredential } from './chunk-EOXUEQB6.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-EOXUEQB6.mjs';
13
13
  import { Redactor } from './chunk-VLVCLAPB.mjs';
14
- import { openTrace } from './chunk-NJUSSJX3.mjs';
14
+ import { openTrace } from './chunk-EIP5CNEL.mjs';
15
15
  import './chunk-JE3TUFAQ.mjs';
16
16
  import { projectLogicalEvents } from './chunk-AHUZNHFI.mjs';
17
17
  import './chunk-S4YWKV4G.mjs';
@@ -872,7 +872,7 @@ function extractSessionWorkflowMetadata(record) {
872
872
  assignString("conversationId", record.conversationId);
873
873
  assignString("groupId", record.groupId);
874
874
  assignString("parentGroupId", record.parentGroupId);
875
- assignString("retryOf", record.retryOf);
875
+ assignString("retryOf", record.retryOf ?? record["agent_inspect.retry_of"]);
876
876
  assignString("retryReason", record.retryReason);
877
877
  assignString("handoffFrom", record.handoffFrom);
878
878
  assignString("handoffTo", record.handoffTo);
@@ -885,8 +885,8 @@ function extractSessionWorkflowMetadata(record) {
885
885
  assignString("toolCallId", record.toolCallId);
886
886
  assignString("mcpToolCallId", record.mcpToolCallId);
887
887
  assignString("linkedStepId", record.linkedStepId);
888
- assignString("operationId", record.operationId);
889
- assignString("attemptId", record.attemptId);
888
+ assignString("operationId", record.operationId ?? record["agent_inspect.operation_id"]);
889
+ assignString("attemptId", record.attemptId ?? record["agent_inspect.attempt_id"]);
890
890
  assignString("fallbackOf", record.fallbackOf);
891
891
  assignString("idempotencyKey", record.idempotencyKey);
892
892
  assignString("correlationId", record.correlationId);
@@ -897,7 +897,9 @@ function extractSessionWorkflowMetadata(record) {
897
897
  out.attempt = attempt;
898
898
  found = true;
899
899
  }
900
- const attemptNumber = finitePositiveInt(record.attemptNumber);
900
+ const attemptNumber = finitePositiveInt(
901
+ record.attemptNumber ?? record["agent_inspect.attempt_number"]
902
+ );
901
903
  if (attemptNumber !== void 0) {
902
904
  out.attemptNumber = attemptNumber;
903
905
  found = true;
@@ -1756,24 +1758,35 @@ function attemptIdOf(event) {
1756
1758
  return typeof value === "string" && value.trim() !== "" ? value : void 0;
1757
1759
  }
1758
1760
  function countOperationAttempts(members) {
1759
- const attemptIds = new Set(
1760
- members.map((event) => attemptIdOf(event)).filter((value) => value !== void 0)
1761
- );
1762
- if (attemptIds.size > 0) {
1763
- return attemptIds.size;
1761
+ const identified = /* @__PURE__ */ new Set();
1762
+ let unidentified = 0;
1763
+ for (const event of members) {
1764
+ if (event.kind !== "TOOL" && event.kind !== "LLM") continue;
1765
+ const id = attemptIdOf(event);
1766
+ if (id !== void 0) {
1767
+ identified.add(id);
1768
+ continue;
1769
+ }
1770
+ unidentified += 1;
1771
+ }
1772
+ if (identified.size > 0) {
1773
+ return identified.size + unidentified;
1764
1774
  }
1765
- const numbers = members.map((event) => attemptNumberOf(event)).filter((value) => value !== void 0).sort((a, b) => a - b);
1766
- if (numbers.length > 0) {
1767
- const unique = [...new Set(numbers)];
1768
- const min = unique[0];
1769
- const max = unique[unique.length - 1];
1770
- const contiguous = unique.length === max - min + 1 && unique.every((value, index) => value === min + index);
1771
- if (contiguous) {
1772
- return unique.length;
1775
+ const numbered = /* @__PURE__ */ new Set();
1776
+ let unnumbered = 0;
1777
+ for (const event of members) {
1778
+ if (event.kind !== "TOOL" && event.kind !== "LLM") continue;
1779
+ const num = attemptNumberOf(event);
1780
+ if (num !== void 0) {
1781
+ numbered.add(num);
1782
+ continue;
1773
1783
  }
1774
- return unique.length;
1784
+ unnumbered += 1;
1785
+ }
1786
+ if (numbered.size > 0) {
1787
+ return numbered.size + unnumbered;
1775
1788
  }
1776
- return members.filter((event) => event.kind === "TOOL" || event.kind === "LLM").length;
1789
+ return unnumbered;
1777
1790
  }
1778
1791
  function classifyRetryAttempt(event, priorOrdered, allMembers) {
1779
1792
  const workflow = workflowFor(event);
@@ -2048,8 +2061,42 @@ function eventEvidence2(event) {
2048
2061
  function eventTime2(event) {
2049
2062
  return event.startedAt ?? event.timestamp ?? "";
2050
2063
  }
2064
+ function parseComparableMs(value) {
2065
+ if (!value) return void 0;
2066
+ const parsed = Date.parse(value);
2067
+ return Number.isFinite(parsed) ? parsed : void 0;
2068
+ }
2069
+ function consumerStartMs(event) {
2070
+ return parseComparableMs(event.startedAt) ?? parseComparableMs(event.timestamp);
2071
+ }
2072
+ function resultAvailableMs(event) {
2073
+ const started = parseComparableMs(event.startedAt) ?? parseComparableMs(event.timestamp);
2074
+ const endedRaw = event.endedAt;
2075
+ const endedPresent = endedRaw !== void 0 && endedRaw !== null && String(endedRaw).trim() !== "";
2076
+ if (endedPresent) {
2077
+ const ended = parseComparableMs(typeof endedRaw === "string" ? endedRaw : String(endedRaw));
2078
+ if (ended === void 0) return void 0;
2079
+ if (started !== void 0 && ended < started) return void 0;
2080
+ return ended;
2081
+ }
2082
+ if (event.durationMs !== void 0) {
2083
+ if (!Number.isFinite(event.durationMs) || event.durationMs < 0) {
2084
+ return void 0;
2085
+ }
2086
+ if (started !== void 0) {
2087
+ return started + event.durationMs;
2088
+ }
2089
+ return void 0;
2090
+ }
2091
+ return parseComparableMs(event.timestamp);
2092
+ }
2051
2093
  function sortByTime2(events) {
2052
- return [...events].sort((a, b) => eventTime2(a).localeCompare(eventTime2(b)));
2094
+ return [...events].sort((a, b) => {
2095
+ const aMs = consumerStartMs(a) ?? 0;
2096
+ const bMs = consumerStartMs(b) ?? 0;
2097
+ if (aMs !== bMs) return aMs - bMs;
2098
+ return eventTime2(a).localeCompare(eventTime2(b));
2099
+ });
2053
2100
  }
2054
2101
  function errorCodeOf(event) {
2055
2102
  if (typeof event.error?.code === "string" && event.error.code.trim() !== "") {
@@ -2117,13 +2164,20 @@ function sameArguments(left, right) {
2117
2164
  }
2118
2165
  return { ok: true };
2119
2166
  }
2167
+ var UNEVALUABLE_WRITE_ERROR_CODES = /* @__PURE__ */ new Set([
2168
+ "TIMEOUT",
2169
+ "ETIMEDOUT",
2170
+ "UNKNOWN_COMPLETION",
2171
+ "DEADLINE_EXCEEDED"
2172
+ ]);
2120
2173
  function isUnevaluableWriteCompletion(event) {
2121
2174
  if (event.status === "running" || event.status === "unknown") return true;
2122
2175
  const attrs2 = event.attributes ?? {};
2123
2176
  if (attrs2.timeout === true) return true;
2177
+ if (attrs2.unknownCompletion === true) return true;
2124
2178
  if (attrs2.completionState === "unknown" || attrs2.completionState === "timeout") return true;
2125
2179
  const code = errorCodeOf(event)?.toUpperCase();
2126
- if (code === "TIMEOUT" || code === "UNKNOWN_COMPLETION" || code === "DEADLINE_EXCEEDED") {
2180
+ if (code && UNEVALUABLE_WRITE_ERROR_CODES.has(code)) {
2127
2181
  return true;
2128
2182
  }
2129
2183
  return false;
@@ -2171,14 +2225,17 @@ function collectExplicitReferences(event) {
2171
2225
  return refs;
2172
2226
  }
2173
2227
  function llmReferencesTool(llm, toolEvent, requireExplicit) {
2174
- if (!requireExplicit) {
2175
- return eventTime2(llm) >= eventTime2(toolEvent);
2176
- }
2177
- const refs = collectExplicitReferences(llm);
2178
- if (refs.has(toolEvent.eventId)) return true;
2179
- const toolCallId = workflowFor2(toolEvent).toolCallId;
2180
- if (toolCallId && refs.has(toolCallId)) return true;
2181
- return false;
2228
+ if (llm.runId !== toolEvent.runId) return false;
2229
+ if (requireExplicit) {
2230
+ const refs = collectExplicitReferences(llm);
2231
+ const toolCallId = workflowFor2(toolEvent).toolCallId;
2232
+ const hasRef = refs.has(toolEvent.eventId) || toolCallId !== void 0 && refs.has(toolCallId);
2233
+ if (!hasRef) return false;
2234
+ }
2235
+ const resultMs = resultAvailableMs(toolEvent);
2236
+ const consumerMs = consumerStartMs(llm);
2237
+ if (resultMs === void 0 || consumerMs === void 0) return false;
2238
+ return resultMs <= consumerMs;
2182
2239
  }
2183
2240
  function attemptIdOf2(event) {
2184
2241
  const value = workflowFor2(event).attemptId;