agent-inspect 6.31.16 → 6.31.18

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 (42) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +1 -1
  3. package/SECURITY.md +1 -0
  4. package/docs/COMPARE.md +11 -0
  5. package/package.json +2 -2
  6. package/packages/cli/dist/{chunk-ZAYVAHIH.mjs → chunk-AHARYDFO.mjs} +62 -28
  7. package/packages/cli/dist/chunk-AHARYDFO.mjs.map +1 -0
  8. package/packages/cli/dist/index.cjs +122 -32
  9. package/packages/cli/dist/index.cjs.map +1 -1
  10. package/packages/cli/dist/index.mjs +64 -9
  11. package/packages/cli/dist/index.mjs.map +1 -1
  12. package/packages/cli/dist/{src-KP4UIFK5.mjs → src-YNZZ2KYR.mjs} +3 -3
  13. package/packages/cli/dist/{src-KP4UIFK5.mjs.map → src-YNZZ2KYR.mjs.map} +1 -1
  14. package/packages/core/dist/advanced.cjs +1 -1
  15. package/packages/core/dist/advanced.cjs.map +1 -1
  16. package/packages/core/dist/advanced.mjs +9 -9
  17. package/packages/core/dist/checks.cjs +59 -25
  18. package/packages/core/dist/checks.cjs.map +1 -1
  19. package/packages/core/dist/checks.mjs +3 -3
  20. package/packages/core/dist/{chunk-SSG3ICI4.mjs → chunk-6C244CAV.mjs} +4 -4
  21. package/packages/core/dist/{chunk-SSG3ICI4.mjs.map → chunk-6C244CAV.mjs.map} +1 -1
  22. package/packages/core/dist/{chunk-N5PZAI6Q.mjs → chunk-77UZIMMD.mjs} +3 -3
  23. package/packages/core/dist/{chunk-N5PZAI6Q.mjs.map → chunk-77UZIMMD.mjs.map} +1 -1
  24. package/packages/core/dist/{chunk-DK3OW6UI.mjs → chunk-EOXUEQB6.mjs} +3 -3
  25. package/packages/core/dist/chunk-EOXUEQB6.mjs.map +1 -0
  26. package/packages/core/dist/{chunk-CCYKNAOD.mjs → chunk-FRBBZUEP.mjs} +62 -28
  27. package/packages/core/dist/chunk-FRBBZUEP.mjs.map +1 -0
  28. package/packages/core/dist/{chunk-M3RJD3BP.mjs → chunk-NX25C7JZ.mjs} +3 -3
  29. package/packages/core/dist/{chunk-M3RJD3BP.mjs.map → chunk-NX25C7JZ.mjs.map} +1 -1
  30. package/packages/core/dist/exporters.cjs +55 -3
  31. package/packages/core/dist/exporters.cjs.map +1 -1
  32. package/packages/core/dist/exporters.mjs +57 -5
  33. package/packages/core/dist/exporters.mjs.map +1 -1
  34. package/packages/core/dist/index.cjs +1 -1
  35. package/packages/core/dist/index.cjs.map +1 -1
  36. package/packages/core/dist/index.mjs +4 -4
  37. package/packages/core/dist/writers.cjs +1 -1
  38. package/packages/core/dist/writers.cjs.map +1 -1
  39. package/packages/core/dist/writers.mjs +1 -1
  40. package/packages/cli/dist/chunk-ZAYVAHIH.mjs.map +0 -1
  41. package/packages/core/dist/chunk-CCYKNAOD.mjs.map +0 -1
  42. package/packages/core/dist/chunk-DK3OW6UI.mjs.map +0 -1
@@ -1,15 +1,15 @@
1
- import { extractSessionWorkflowMetadata, sessionKeyForRun, defineTraceContract, runTraceChecks, createRunStatusRule, createToolUsageRule, createRunDurationRule, createRunDepthRule, createToolFailureRule, createLlmUsageRule, createObservedOutcomeRule } from './chunk-CCYKNAOD.mjs';
2
- export { extractSessionWorkflowMetadata, sessionKeyForRun } from './chunk-CCYKNAOD.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
- import { buildRunTimeline, filterTraces, extractMetadata, buildRunSummary } from './chunk-M3RJD3BP.mjs';
5
- export { buildRunSummary, buildRunTimeline, buildRunWhatSummary, buildTraceStats, extractMetadata, filterTraces, formatStepLabel, renderRunWhat, renderTimeline, renderTraceStats } from './chunk-M3RJD3BP.mjs';
6
- import { extractOutcomesFromTraceEvents, parseObservationFilter, summarizeObservedOutcomes, extractOutcomesFromPersistedEvents, renderObservedOutcomesHtml } from './chunk-N5PZAI6Q.mjs';
7
- export { extractOutcomesFromPersistedEvents, extractOutcomesFromTraceEvents } from './chunk-N5PZAI6Q.mjs';
1
+ import { extractSessionWorkflowMetadata, sessionKeyForRun, defineTraceContract, runTraceChecks, createRunStatusRule, createToolUsageRule, createRunDurationRule, createRunDepthRule, createToolFailureRule, createLlmUsageRule, createObservedOutcomeRule } from './chunk-FRBBZUEP.mjs';
2
+ export { extractSessionWorkflowMetadata, sessionKeyForRun } from './chunk-FRBBZUEP.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-6C244CAV.mjs';
4
+ import { buildRunTimeline, filterTraces, extractMetadata, buildRunSummary } from './chunk-NX25C7JZ.mjs';
5
+ export { buildRunSummary, buildRunTimeline, buildRunWhatSummary, buildTraceStats, extractMetadata, filterTraces, formatStepLabel, renderRunWhat, renderTimeline, renderTraceStats } from './chunk-NX25C7JZ.mjs';
6
+ import { extractOutcomesFromTraceEvents, parseObservationFilter, summarizeObservedOutcomes, extractOutcomesFromPersistedEvents, renderObservedOutcomesHtml } from './chunk-77UZIMMD.mjs';
7
+ export { extractOutcomesFromPersistedEvents, extractOutcomesFromTraceEvents } from './chunk-77UZIMMD.mjs';
8
8
  import { diffTraceEvents, renderRunDiff } from './chunk-F7STQ5JF.mjs';
9
9
  import './chunk-BT7CATSD.mjs';
10
10
  import { escapeHtml, flattenTree } from './chunk-CAWPF22J.mjs';
11
- import { resolveRedactionProfile, readTraceEventsFromFile, stringContainsHighConfidenceCredential } from './chunk-DK3OW6UI.mjs';
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';
11
+ import { resolveRedactionProfile, readTraceEventsFromFile, stringContainsHighConfidenceCredential } from './chunk-EOXUEQB6.mjs';
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
14
  import { openTrace } from './chunk-NJUSSJX3.mjs';
15
15
  import './chunk-JE3TUFAQ.mjs';
@@ -1756,24 +1756,26 @@ function attemptIdOf(event) {
1756
1756
  return typeof value === "string" && value.trim() !== "" ? value : void 0;
1757
1757
  }
1758
1758
  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;
1759
+ const identified = /* @__PURE__ */ new Set();
1760
+ let unidentified = 0;
1761
+ for (const event of members) {
1762
+ if (event.kind !== "TOOL" && event.kind !== "LLM") continue;
1763
+ const id = attemptIdOf(event);
1764
+ if (id !== void 0) {
1765
+ identified.add(id);
1766
+ continue;
1767
+ }
1768
+ unidentified += 1;
1769
+ }
1770
+ if (identified.size > 0) {
1771
+ return identified.size + unidentified;
1764
1772
  }
1765
1773
  const numbers = members.map((event) => attemptNumberOf(event)).filter((value) => value !== void 0).sort((a, b) => a - b);
1766
1774
  if (numbers.length > 0) {
1767
1775
  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;
1773
- }
1774
1776
  return unique.length;
1775
1777
  }
1776
- return members.filter((event) => event.kind === "TOOL" || event.kind === "LLM").length;
1778
+ return unidentified;
1777
1779
  }
1778
1780
  function classifyRetryAttempt(event, priorOrdered, allMembers) {
1779
1781
  const workflow = workflowFor(event);
@@ -2048,8 +2050,30 @@ function eventEvidence2(event) {
2048
2050
  function eventTime2(event) {
2049
2051
  return event.startedAt ?? event.timestamp ?? "";
2050
2052
  }
2053
+ function parseComparableMs(value) {
2054
+ if (!value) return void 0;
2055
+ const parsed = Date.parse(value);
2056
+ return Number.isFinite(parsed) ? parsed : void 0;
2057
+ }
2058
+ function consumerStartMs(event) {
2059
+ return parseComparableMs(event.startedAt) ?? parseComparableMs(event.timestamp);
2060
+ }
2061
+ function resultAvailableMs(event) {
2062
+ const ended = parseComparableMs(event.endedAt);
2063
+ if (ended !== void 0) return ended;
2064
+ const started = parseComparableMs(event.startedAt) ?? parseComparableMs(event.timestamp);
2065
+ if (started !== void 0 && event.durationMs !== void 0 && Number.isFinite(event.durationMs)) {
2066
+ return started + event.durationMs;
2067
+ }
2068
+ return parseComparableMs(event.timestamp);
2069
+ }
2051
2070
  function sortByTime2(events) {
2052
- return [...events].sort((a, b) => eventTime2(a).localeCompare(eventTime2(b)));
2071
+ return [...events].sort((a, b) => {
2072
+ const aMs = consumerStartMs(a) ?? 0;
2073
+ const bMs = consumerStartMs(b) ?? 0;
2074
+ if (aMs !== bMs) return aMs - bMs;
2075
+ return eventTime2(a).localeCompare(eventTime2(b));
2076
+ });
2053
2077
  }
2054
2078
  function errorCodeOf(event) {
2055
2079
  if (typeof event.error?.code === "string" && event.error.code.trim() !== "") {
@@ -2117,13 +2141,20 @@ function sameArguments(left, right) {
2117
2141
  }
2118
2142
  return { ok: true };
2119
2143
  }
2144
+ var UNEVALUABLE_WRITE_ERROR_CODES = /* @__PURE__ */ new Set([
2145
+ "TIMEOUT",
2146
+ "ETIMEDOUT",
2147
+ "UNKNOWN_COMPLETION",
2148
+ "DEADLINE_EXCEEDED"
2149
+ ]);
2120
2150
  function isUnevaluableWriteCompletion(event) {
2121
2151
  if (event.status === "running" || event.status === "unknown") return true;
2122
2152
  const attrs2 = event.attributes ?? {};
2123
2153
  if (attrs2.timeout === true) return true;
2154
+ if (attrs2.unknownCompletion === true) return true;
2124
2155
  if (attrs2.completionState === "unknown" || attrs2.completionState === "timeout") return true;
2125
2156
  const code = errorCodeOf(event)?.toUpperCase();
2126
- if (code === "TIMEOUT" || code === "UNKNOWN_COMPLETION" || code === "DEADLINE_EXCEEDED") {
2157
+ if (code && UNEVALUABLE_WRITE_ERROR_CODES.has(code)) {
2127
2158
  return true;
2128
2159
  }
2129
2160
  return false;
@@ -2171,14 +2202,17 @@ function collectExplicitReferences(event) {
2171
2202
  return refs;
2172
2203
  }
2173
2204
  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;
2205
+ if (llm.runId !== toolEvent.runId) return false;
2206
+ if (requireExplicit) {
2207
+ const refs = collectExplicitReferences(llm);
2208
+ const toolCallId = workflowFor2(toolEvent).toolCallId;
2209
+ const hasRef = refs.has(toolEvent.eventId) || toolCallId !== void 0 && refs.has(toolCallId);
2210
+ if (!hasRef) return false;
2211
+ }
2212
+ const resultMs = resultAvailableMs(toolEvent);
2213
+ const consumerMs = consumerStartMs(llm);
2214
+ if (resultMs === void 0 || consumerMs === void 0) return false;
2215
+ return resultMs <= consumerMs;
2182
2216
  }
2183
2217
  function attemptIdOf2(event) {
2184
2218
  const value = workflowFor2(event).attemptId;
@@ -3735,7 +3769,7 @@ var DEFAULT_SECRET_PATTERNS = [
3735
3769
  // Keep in sync with packages/redact/src/key-value-secret.ts (KEY_VALUE_SECRET_PATTERN_SOURCE).
3736
3770
  {
3737
3771
  id: "key-value-secret",
3738
- pattern: /\b(?:api[_-]?key|internal[_-]?token|access[_-]?token|auth[_-]?token|password|secret|token)=(?!\[(?:REDACTED(?::[^\]]*)?|HASH:[0-9a-f]{8})\](?![^\s"'\\&#?]))([^\s"'\\]{8,})/i
3772
+ pattern: /\b(?:api[_-]?key|internal[_-]?token|access[_-]?token|auth[_-]?token|password|secret|token)=(?!\[(?:REDACTED|HASH:(?:[0-9a-f]{8}|unknown))\](?![^\s"'\\&#?]))([^\s"'\\]{8,})/i
3739
3773
  }
3740
3774
  ];
3741
3775
  function compareStrings(a, b) {
@@ -4179,8 +4213,8 @@ function isFullyRedactedValue(value, markers = ["[REDACTED]", "[REDACTED:"]) {
4179
4213
  if (typeof value !== "string") return false;
4180
4214
  const trimmed = value.trim();
4181
4215
  if (trimmed.length === 0) return false;
4182
- if (/^\[HASH:[A-Za-z0-9_-]+\]$/.test(trimmed)) return true;
4183
- if (/^\[REDACTED:[^\]]*\]$/.test(trimmed)) return true;
4216
+ if (trimmed === "[HASH:unknown]") return true;
4217
+ if (/^\[HASH:[0-9a-f]{8}\]$/.test(trimmed)) return true;
4184
4218
  for (const marker of markers) {
4185
4219
  if (marker.endsWith(":")) continue;
4186
4220
  if (trimmed === marker) return true;