agent-inspect 6.14.2 → 6.16.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 +14 -6
- package/README.md +2 -2
- package/docs/API.md +19 -3
- package/package.json +2 -2
- package/packages/cli/dist/{chunk-AACUXCHT.mjs → chunk-LFSBMUCD.mjs} +115 -10
- package/packages/cli/dist/chunk-LFSBMUCD.mjs.map +1 -0
- package/packages/cli/dist/index.cjs +126 -10
- package/packages/cli/dist/index.cjs.map +1 -1
- package/packages/cli/dist/index.mjs +4 -4
- package/packages/cli/dist/index.mjs.map +1 -1
- package/packages/cli/dist/{src-ABTS4GO4.mjs → src-5J2HPOJ3.mjs} +3 -3
- package/packages/cli/dist/{src-ABTS4GO4.mjs.map → src-5J2HPOJ3.mjs.map} +1 -1
- package/packages/core/dist/advanced.cjs +114 -7
- package/packages/core/dist/advanced.cjs.map +1 -1
- package/packages/core/dist/advanced.d.cts +2 -2
- package/packages/core/dist/advanced.d.ts +2 -2
- package/packages/core/dist/advanced.mjs +3 -2
- package/packages/core/dist/advanced.mjs.map +1 -1
- package/packages/core/dist/checks.cjs +115 -6
- package/packages/core/dist/checks.cjs.map +1 -1
- package/packages/core/dist/checks.d.cts +16 -6
- package/packages/core/dist/checks.d.ts +16 -6
- package/packages/core/dist/checks.mjs +2 -1
- package/packages/core/dist/chunk-FWK3Q3OJ.mjs +56 -0
- package/packages/core/dist/chunk-FWK3Q3OJ.mjs.map +1 -0
- package/packages/core/dist/{chunk-5N2OBM7S.mjs → chunk-HT54OLPE.mjs} +53 -6
- package/packages/core/dist/chunk-HT54OLPE.mjs.map +1 -0
- package/packages/core/dist/{chunk-BHMXLDLK.mjs → chunk-NF4ZHNTC.mjs} +63 -9
- package/packages/core/dist/chunk-NF4ZHNTC.mjs.map +1 -0
- package/packages/core/dist/index-B259NKkH.d.cts +102 -0
- package/packages/core/dist/index-B9ZGvUVL.d.ts +102 -0
- package/packages/core/dist/{index-D9HBequ_.d.ts → index-BsCcOKxy.d.ts} +1 -1
- package/packages/core/dist/{index-BY6XZ5aG.d.cts → index-Xk9X-yjY.d.cts} +1 -1
- package/packages/core/dist/readers.cjs +108 -3
- package/packages/core/dist/readers.cjs.map +1 -1
- package/packages/core/dist/readers.d.cts +27 -78
- package/packages/core/dist/readers.d.ts +27 -78
- package/packages/core/dist/readers.mjs +2 -1
- package/packages/cli/dist/chunk-AACUXCHT.mjs.map +0 -1
- package/packages/core/dist/chunk-5N2OBM7S.mjs.map +0 -1
- package/packages/core/dist/chunk-BHMXLDLK.mjs.map +0 -1
|
@@ -6354,6 +6354,64 @@ var init_resolve2 = __esm({
|
|
|
6354
6354
|
}
|
|
6355
6355
|
});
|
|
6356
6356
|
|
|
6357
|
+
// packages/core/src/diagnostics/programmatic.ts
|
|
6358
|
+
function formatProgrammaticDiagnostic(code, detail) {
|
|
6359
|
+
const spec = PROGRAMMATIC_DIAGNOSTIC_SPECS[code];
|
|
6360
|
+
const summary = detail?.trim() ? detail.trim() : spec.summary;
|
|
6361
|
+
return `${code}: ${summary} Remediation: ${spec.remediation}`;
|
|
6362
|
+
}
|
|
6363
|
+
var PROGRAMMATIC_DIAGNOSTIC_SPECS;
|
|
6364
|
+
var init_programmatic = __esm({
|
|
6365
|
+
"packages/core/src/diagnostics/programmatic.ts"() {
|
|
6366
|
+
PROGRAMMATIC_DIAGNOSTIC_SPECS = Object.freeze({
|
|
6367
|
+
AI_TRACE_INPUT_INVALID: {
|
|
6368
|
+
code: "AI_TRACE_INPUT_INVALID",
|
|
6369
|
+
summary: 'Expected { type: "file", path }, { type: "directory", path }, { type: "string", content }, { type: "buffer", content }, or { type: "stdin" }.',
|
|
6370
|
+
remediation: "For a file path, use openTraceFile(path).",
|
|
6371
|
+
relatedCodes: ["invalid_input"]
|
|
6372
|
+
},
|
|
6373
|
+
AI_TRACE_FORMAT_UNSUPPORTED: {
|
|
6374
|
+
code: "AI_TRACE_FORMAT_UNSUPPORTED",
|
|
6375
|
+
summary: "No trace reader could detect the input format.",
|
|
6376
|
+
remediation: "Pass an AgentInspect JSONL file via openTraceFile, or set options.format to a registered reader.",
|
|
6377
|
+
relatedCodes: ["unsupported_format"]
|
|
6378
|
+
},
|
|
6379
|
+
AI_TRACE_FORMAT_AMBIGUOUS: {
|
|
6380
|
+
code: "AI_TRACE_FORMAT_AMBIGUOUS",
|
|
6381
|
+
summary: "Multiple trace readers matched the input with equal confidence.",
|
|
6382
|
+
remediation: "Set options.format explicitly to disambiguate the reader.",
|
|
6383
|
+
relatedCodes: ["ambiguous_format"]
|
|
6384
|
+
},
|
|
6385
|
+
AI_TRACE_FACTS_INPUT_NOT_NORMALIZED: {
|
|
6386
|
+
code: "AI_TRACE_FACTS_INPUT_NOT_NORMALIZED",
|
|
6387
|
+
summary: "TraceFacts requires TraceReadResult or PersistedInspectEvent[].",
|
|
6388
|
+
remediation: "Use openTraceFile() to normalize a JSONL trace first."
|
|
6389
|
+
},
|
|
6390
|
+
AI_TRACE_CONTRACT_RUN_SELECTION_REQUIRED: {
|
|
6391
|
+
code: "AI_TRACE_CONTRACT_RUN_SELECTION_REQUIRED",
|
|
6392
|
+
summary: "Multiple runs are available; select a run before executing checks.",
|
|
6393
|
+
remediation: "Pass options.runId or TraceCheckInput.selectedRun.",
|
|
6394
|
+
relatedCodes: ["AI_CHECK_RUN_SELECTION_REQUIRED"]
|
|
6395
|
+
},
|
|
6396
|
+
AI_TRACE_RELATIONSHIP_SELF_PARENT: {
|
|
6397
|
+
code: "AI_TRACE_RELATIONSHIP_SELF_PARENT",
|
|
6398
|
+
summary: "A parentId equals its own event/step id.",
|
|
6399
|
+
remediation: "Reject at capture (AI_LANGGRAPH_SELF_PARENT_REJECTED) or drop via logical projection; do not invent replacement parents.",
|
|
6400
|
+
relatedCodes: [
|
|
6401
|
+
"AI_LANGGRAPH_SELF_PARENT_REJECTED",
|
|
6402
|
+
"AI_LOGICAL_SELF_PARENT_REMOVED"
|
|
6403
|
+
]
|
|
6404
|
+
},
|
|
6405
|
+
AI_TRACE_RELATIONSHIP_CYCLE: {
|
|
6406
|
+
code: "AI_TRACE_RELATIONSHIP_CYCLE",
|
|
6407
|
+
summary: "Trace contains a parentId cycle.",
|
|
6408
|
+
remediation: "Use visibility-first tree linking for legacy fixtures; prefer acyclic capture for new adapter output.",
|
|
6409
|
+
relatedCodes: ["structure.cycle"]
|
|
6410
|
+
}
|
|
6411
|
+
});
|
|
6412
|
+
}
|
|
6413
|
+
});
|
|
6414
|
+
|
|
6357
6415
|
// packages/core/src/safety/sensitive-key.ts
|
|
6358
6416
|
function normalizeSensitiveKey(value) {
|
|
6359
6417
|
return value.toLowerCase().replace(/[^a-z0-9_]/g, "");
|
|
@@ -6624,7 +6682,10 @@ function projectLogicalEvents(events) {
|
|
|
6624
6682
|
if (originalParentId === event.eventId) {
|
|
6625
6683
|
diagnostics.push({
|
|
6626
6684
|
code: "AI_LOGICAL_SELF_PARENT_REMOVED",
|
|
6627
|
-
message:
|
|
6685
|
+
message: formatProgrammaticDiagnostic(
|
|
6686
|
+
"AI_TRACE_RELATIONSHIP_SELF_PARENT",
|
|
6687
|
+
`Removed self-parent edge on ${event.eventId}.`
|
|
6688
|
+
),
|
|
6628
6689
|
eventIds: [event.eventId]
|
|
6629
6690
|
});
|
|
6630
6691
|
const { parentId: _drop, ...rest } = event;
|
|
@@ -6656,7 +6717,10 @@ function projectLogicalEvents(events) {
|
|
|
6656
6717
|
if (nextParent === event.eventId) {
|
|
6657
6718
|
diagnostics.push({
|
|
6658
6719
|
code: "AI_LOGICAL_SELF_PARENT_REMOVED",
|
|
6659
|
-
message:
|
|
6720
|
+
message: formatProgrammaticDiagnostic(
|
|
6721
|
+
"AI_TRACE_RELATIONSHIP_SELF_PARENT",
|
|
6722
|
+
`Removed self-parent edge on ${event.eventId} (was ${originalParentId}).`
|
|
6723
|
+
),
|
|
6660
6724
|
eventIds: [event.eventId]
|
|
6661
6725
|
});
|
|
6662
6726
|
const { parentId: _drop, ...rest } = event;
|
|
@@ -6720,6 +6784,7 @@ function pickString(record, keys) {
|
|
|
6720
6784
|
}
|
|
6721
6785
|
var init_logical_events = __esm({
|
|
6722
6786
|
"packages/core/src/checks/logical-events.ts"() {
|
|
6787
|
+
init_programmatic();
|
|
6723
6788
|
}
|
|
6724
6789
|
});
|
|
6725
6790
|
|
|
@@ -6748,7 +6813,11 @@ function summarizeSemanticParity(events) {
|
|
|
6748
6813
|
}
|
|
6749
6814
|
var init_trace_facts = __esm({
|
|
6750
6815
|
"packages/core/src/checks/trace-facts.ts"() {
|
|
6816
|
+
init_programmatic();
|
|
6751
6817
|
init_logical_events();
|
|
6818
|
+
formatProgrammaticDiagnostic(
|
|
6819
|
+
"AI_TRACE_FACTS_INPUT_NOT_NORMALIZED"
|
|
6820
|
+
);
|
|
6752
6821
|
}
|
|
6753
6822
|
});
|
|
6754
6823
|
|
|
@@ -6859,7 +6928,13 @@ function resolveSelectedRun(input3, runId) {
|
|
|
6859
6928
|
if (input3.read.runs.length === 0) {
|
|
6860
6929
|
return {
|
|
6861
6930
|
diagnostics: [
|
|
6862
|
-
diagnostic3(
|
|
6931
|
+
diagnostic3(
|
|
6932
|
+
"AI_CHECK_RUN_SELECTION_REQUIRED",
|
|
6933
|
+
formatProgrammaticDiagnostic(
|
|
6934
|
+
"AI_TRACE_CONTRACT_RUN_SELECTION_REQUIRED",
|
|
6935
|
+
"No runs are available for checks."
|
|
6936
|
+
)
|
|
6937
|
+
)
|
|
6863
6938
|
]
|
|
6864
6939
|
};
|
|
6865
6940
|
}
|
|
@@ -6867,7 +6942,7 @@ function resolveSelectedRun(input3, runId) {
|
|
|
6867
6942
|
diagnostics: [
|
|
6868
6943
|
diagnostic3(
|
|
6869
6944
|
"AI_CHECK_RUN_SELECTION_REQUIRED",
|
|
6870
|
-
"
|
|
6945
|
+
formatProgrammaticDiagnostic("AI_TRACE_CONTRACT_RUN_SELECTION_REQUIRED")
|
|
6871
6946
|
)
|
|
6872
6947
|
]
|
|
6873
6948
|
};
|
|
@@ -7596,7 +7671,7 @@ function createStructureCycleRule() {
|
|
|
7596
7671
|
findings.push(
|
|
7597
7672
|
failFinding(
|
|
7598
7673
|
"structure.cycle",
|
|
7599
|
-
"
|
|
7674
|
+
formatProgrammaticDiagnostic("AI_TRACE_RELATIONSHIP_CYCLE"),
|
|
7600
7675
|
cycle.map((item) => eventEvidence(item, "parentId")),
|
|
7601
7676
|
"acyclic parentId graph",
|
|
7602
7677
|
cycle.map((item) => item.eventId).sort()
|
|
@@ -8163,11 +8238,13 @@ function runTraceChecks(input3, options = {}) {
|
|
|
8163
8238
|
var SEVERITY_RANK, STATUS_RANK, CONFIDENCE_RANK, DEFAULT_SENSITIVE_KEYS, DEFAULT_RAW_CONTENT_KEYS, DEFAULT_SAFE_RAW_CONTENT_PATH_PREFIXES, SAFE_USAGE_LEAF_KEYS, DEFAULT_SECRET_PATTERNS;
|
|
8164
8239
|
var init_checks2 = __esm({
|
|
8165
8240
|
"packages/core/src/checks/index.ts"() {
|
|
8241
|
+
init_programmatic();
|
|
8166
8242
|
init_outcomes();
|
|
8167
8243
|
init_sensitive_key();
|
|
8168
8244
|
init_logical_events();
|
|
8169
8245
|
init_logical_events();
|
|
8170
8246
|
init_trace_facts();
|
|
8247
|
+
init_programmatic();
|
|
8171
8248
|
init_sensitive_key();
|
|
8172
8249
|
init_contract();
|
|
8173
8250
|
SEVERITY_RANK = {
|
|
@@ -8860,6 +8937,35 @@ var init_tree_bridge = __esm({
|
|
|
8860
8937
|
init_to_inspect_event();
|
|
8861
8938
|
}
|
|
8862
8939
|
});
|
|
8940
|
+
function isTraceInput(input3) {
|
|
8941
|
+
if (typeof input3 !== "object" || input3 === null || Array.isArray(input3)) {
|
|
8942
|
+
return false;
|
|
8943
|
+
}
|
|
8944
|
+
const record = input3;
|
|
8945
|
+
switch (record.type) {
|
|
8946
|
+
case "file":
|
|
8947
|
+
case "directory":
|
|
8948
|
+
return typeof record.path === "string";
|
|
8949
|
+
case "string":
|
|
8950
|
+
return typeof record.content === "string";
|
|
8951
|
+
case "buffer":
|
|
8952
|
+
return Buffer.isBuffer(record.content);
|
|
8953
|
+
case "stdin":
|
|
8954
|
+
return true;
|
|
8955
|
+
default:
|
|
8956
|
+
return false;
|
|
8957
|
+
}
|
|
8958
|
+
}
|
|
8959
|
+
function assertTraceInput(input3) {
|
|
8960
|
+
if (isTraceInput(input3)) return;
|
|
8961
|
+
throw new TraceReadError("invalid_input", TRACE_INPUT_INVALID_MESSAGE, [
|
|
8962
|
+
{
|
|
8963
|
+
code: "AI_TRACE_INPUT_INVALID",
|
|
8964
|
+
message: TRACE_INPUT_INVALID_MESSAGE,
|
|
8965
|
+
severity: "error"
|
|
8966
|
+
}
|
|
8967
|
+
]);
|
|
8968
|
+
}
|
|
8863
8969
|
function normalizeCandidate(reader, candidate) {
|
|
8864
8970
|
const confidence = Number.isFinite(candidate.confidence) ? Math.max(0, Math.min(1, candidate.confidence)) : 0;
|
|
8865
8971
|
return {
|
|
@@ -10006,6 +10112,7 @@ function mapOtlpEventsToPersisted(document) {
|
|
|
10006
10112
|
};
|
|
10007
10113
|
}
|
|
10008
10114
|
async function detectTraceFormat(input3, options = {}) {
|
|
10115
|
+
assertTraceInput(input3);
|
|
10009
10116
|
const readers = options.readers ?? DEFAULT_TRACE_READERS;
|
|
10010
10117
|
if (options.format !== void 0) {
|
|
10011
10118
|
const reader = findReaderByFormat(options.format, readers);
|
|
@@ -10102,19 +10209,20 @@ async function detectTraceFormat(input3, options = {}) {
|
|
|
10102
10209
|
};
|
|
10103
10210
|
}
|
|
10104
10211
|
async function readTrace(input3, options = {}) {
|
|
10212
|
+
assertTraceInput(input3);
|
|
10105
10213
|
const readers = options.readers ?? DEFAULT_TRACE_READERS;
|
|
10106
10214
|
const detection = await detectTraceFormat(input3, options);
|
|
10107
10215
|
if (detection.status === "unsupported" || detection.format === void 0) {
|
|
10108
10216
|
throw new TraceReadError(
|
|
10109
10217
|
"unsupported_format",
|
|
10110
|
-
"
|
|
10218
|
+
formatProgrammaticDiagnostic("AI_TRACE_FORMAT_UNSUPPORTED"),
|
|
10111
10219
|
detection.warnings
|
|
10112
10220
|
);
|
|
10113
10221
|
}
|
|
10114
10222
|
if (detection.status === "ambiguous") {
|
|
10115
10223
|
throw new TraceReadError(
|
|
10116
10224
|
"ambiguous_format",
|
|
10117
|
-
"
|
|
10225
|
+
formatProgrammaticDiagnostic("AI_TRACE_FORMAT_AMBIGUOUS"),
|
|
10118
10226
|
detection.warnings
|
|
10119
10227
|
);
|
|
10120
10228
|
}
|
|
@@ -10122,7 +10230,10 @@ async function readTrace(input3, options = {}) {
|
|
|
10122
10230
|
if (!reader) {
|
|
10123
10231
|
throw new TraceReadError(
|
|
10124
10232
|
"unsupported_format",
|
|
10125
|
-
|
|
10233
|
+
formatProgrammaticDiagnostic(
|
|
10234
|
+
"AI_TRACE_FORMAT_UNSUPPORTED",
|
|
10235
|
+
`No trace reader is registered for format "${detection.format}".`
|
|
10236
|
+
),
|
|
10126
10237
|
detection.warnings
|
|
10127
10238
|
);
|
|
10128
10239
|
}
|
|
@@ -10151,12 +10262,13 @@ async function readTrace(input3, options = {}) {
|
|
|
10151
10262
|
function openTrace(input3, options = {}) {
|
|
10152
10263
|
return readTrace(input3, options);
|
|
10153
10264
|
}
|
|
10154
|
-
var DEFAULT_MAX_TRACE_INPUT_BYTES, MIN_DETECTION_CONFIDENCE, AMBIGUOUS_CONFIDENCE_DELTA, resolvedInputCache, OPENINFERENCE_READER_FORMAT, OTLP_READER_FORMAT, OPENINFERENCE_SPAN_KEYS, OPENINFERENCE_SENSITIVE_ATTRIBUTE_KEYS, OTLP_SPAN_KEYS, TraceReadError, openInferenceJsonReader, otlpJsonReader, agentInspectJsonlReader, DEFAULT_TRACE_READERS;
|
|
10265
|
+
var DEFAULT_MAX_TRACE_INPUT_BYTES, MIN_DETECTION_CONFIDENCE, AMBIGUOUS_CONFIDENCE_DELTA, resolvedInputCache, OPENINFERENCE_READER_FORMAT, OTLP_READER_FORMAT, OPENINFERENCE_SPAN_KEYS, OPENINFERENCE_SENSITIVE_ATTRIBUTE_KEYS, OTLP_SPAN_KEYS, TraceReadError, TRACE_INPUT_INVALID_MESSAGE, openInferenceJsonReader, otlpJsonReader, agentInspectJsonlReader, DEFAULT_TRACE_READERS;
|
|
10155
10266
|
var init_readers = __esm({
|
|
10156
10267
|
"packages/core/src/readers/index.ts"() {
|
|
10157
10268
|
init_read_trace();
|
|
10158
10269
|
init_from_trace_event();
|
|
10159
10270
|
init_tree_bridge();
|
|
10271
|
+
init_programmatic();
|
|
10160
10272
|
DEFAULT_MAX_TRACE_INPUT_BYTES = 10 * 1024 * 1024;
|
|
10161
10273
|
MIN_DETECTION_CONFIDENCE = 0.5;
|
|
10162
10274
|
AMBIGUOUS_CONFIDENCE_DELTA = 0.05;
|
|
@@ -10230,6 +10342,9 @@ var init_readers = __esm({
|
|
|
10230
10342
|
this.warnings = warnings;
|
|
10231
10343
|
}
|
|
10232
10344
|
};
|
|
10345
|
+
TRACE_INPUT_INVALID_MESSAGE = formatProgrammaticDiagnostic(
|
|
10346
|
+
"AI_TRACE_INPUT_INVALID"
|
|
10347
|
+
);
|
|
10233
10348
|
openInferenceJsonReader = {
|
|
10234
10349
|
format: OPENINFERENCE_READER_FORMAT,
|
|
10235
10350
|
name: "OpenInference JSON",
|
|
@@ -12370,7 +12485,7 @@ var init_src = __esm({
|
|
|
12370
12485
|
});
|
|
12371
12486
|
|
|
12372
12487
|
// package.json
|
|
12373
|
-
var version = "6.
|
|
12488
|
+
var version = "6.16.0";
|
|
12374
12489
|
|
|
12375
12490
|
// packages/cli/src/list.ts
|
|
12376
12491
|
init_advanced();
|
|
@@ -12700,6 +12815,7 @@ init_tree_bridge();
|
|
|
12700
12815
|
|
|
12701
12816
|
// packages/core/src/entries/readers.ts
|
|
12702
12817
|
init_readers();
|
|
12818
|
+
init_programmatic();
|
|
12703
12819
|
|
|
12704
12820
|
// packages/cli/src/read-run.ts
|
|
12705
12821
|
function mapReaderFormat(format) {
|