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
|
@@ -10,6 +10,59 @@ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
|
10
10
|
var path__default = /*#__PURE__*/_interopDefault(path);
|
|
11
11
|
var os__default = /*#__PURE__*/_interopDefault(os);
|
|
12
12
|
|
|
13
|
+
// packages/core/src/diagnostics/programmatic.ts
|
|
14
|
+
var PROGRAMMATIC_DIAGNOSTIC_SPECS = Object.freeze({
|
|
15
|
+
AI_TRACE_INPUT_INVALID: {
|
|
16
|
+
code: "AI_TRACE_INPUT_INVALID",
|
|
17
|
+
summary: 'Expected { type: "file", path }, { type: "directory", path }, { type: "string", content }, { type: "buffer", content }, or { type: "stdin" }.',
|
|
18
|
+
remediation: "For a file path, use openTraceFile(path).",
|
|
19
|
+
relatedCodes: ["invalid_input"]
|
|
20
|
+
},
|
|
21
|
+
AI_TRACE_FORMAT_UNSUPPORTED: {
|
|
22
|
+
code: "AI_TRACE_FORMAT_UNSUPPORTED",
|
|
23
|
+
summary: "No trace reader could detect the input format.",
|
|
24
|
+
remediation: "Pass an AgentInspect JSONL file via openTraceFile, or set options.format to a registered reader.",
|
|
25
|
+
relatedCodes: ["unsupported_format"]
|
|
26
|
+
},
|
|
27
|
+
AI_TRACE_FORMAT_AMBIGUOUS: {
|
|
28
|
+
code: "AI_TRACE_FORMAT_AMBIGUOUS",
|
|
29
|
+
summary: "Multiple trace readers matched the input with equal confidence.",
|
|
30
|
+
remediation: "Set options.format explicitly to disambiguate the reader.",
|
|
31
|
+
relatedCodes: ["ambiguous_format"]
|
|
32
|
+
},
|
|
33
|
+
AI_TRACE_FACTS_INPUT_NOT_NORMALIZED: {
|
|
34
|
+
code: "AI_TRACE_FACTS_INPUT_NOT_NORMALIZED",
|
|
35
|
+
summary: "TraceFacts requires TraceReadResult or PersistedInspectEvent[].",
|
|
36
|
+
remediation: "Use openTraceFile() to normalize a JSONL trace first."
|
|
37
|
+
},
|
|
38
|
+
AI_TRACE_CONTRACT_RUN_SELECTION_REQUIRED: {
|
|
39
|
+
code: "AI_TRACE_CONTRACT_RUN_SELECTION_REQUIRED",
|
|
40
|
+
summary: "Multiple runs are available; select a run before executing checks.",
|
|
41
|
+
remediation: "Pass options.runId or TraceCheckInput.selectedRun.",
|
|
42
|
+
relatedCodes: ["AI_CHECK_RUN_SELECTION_REQUIRED"]
|
|
43
|
+
},
|
|
44
|
+
AI_TRACE_RELATIONSHIP_SELF_PARENT: {
|
|
45
|
+
code: "AI_TRACE_RELATIONSHIP_SELF_PARENT",
|
|
46
|
+
summary: "A parentId equals its own event/step id.",
|
|
47
|
+
remediation: "Reject at capture (AI_LANGGRAPH_SELF_PARENT_REJECTED) or drop via logical projection; do not invent replacement parents.",
|
|
48
|
+
relatedCodes: [
|
|
49
|
+
"AI_LANGGRAPH_SELF_PARENT_REJECTED",
|
|
50
|
+
"AI_LOGICAL_SELF_PARENT_REMOVED"
|
|
51
|
+
]
|
|
52
|
+
},
|
|
53
|
+
AI_TRACE_RELATIONSHIP_CYCLE: {
|
|
54
|
+
code: "AI_TRACE_RELATIONSHIP_CYCLE",
|
|
55
|
+
summary: "Trace contains a parentId cycle.",
|
|
56
|
+
remediation: "Use visibility-first tree linking for legacy fixtures; prefer acyclic capture for new adapter output.",
|
|
57
|
+
relatedCodes: ["structure.cycle"]
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
function formatProgrammaticDiagnostic(code, detail) {
|
|
61
|
+
const spec = PROGRAMMATIC_DIAGNOSTIC_SPECS[code];
|
|
62
|
+
const summary = detail?.trim() ? detail.trim() : spec.summary;
|
|
63
|
+
return `${code}: ${summary} Remediation: ${spec.remediation}`;
|
|
64
|
+
}
|
|
65
|
+
|
|
13
66
|
// packages/core/src/outcomes/types.ts
|
|
14
67
|
var OUTCOME_ATTRIBUTE_STATUS_KEY = "outcomeStatus";
|
|
15
68
|
var OUTCOME_ATTRIBUTE_EXPECTATION_KEY = "expectation";
|
|
@@ -329,7 +382,10 @@ function projectLogicalEvents(events) {
|
|
|
329
382
|
if (originalParentId === event.eventId) {
|
|
330
383
|
diagnostics.push({
|
|
331
384
|
code: "AI_LOGICAL_SELF_PARENT_REMOVED",
|
|
332
|
-
message:
|
|
385
|
+
message: formatProgrammaticDiagnostic(
|
|
386
|
+
"AI_TRACE_RELATIONSHIP_SELF_PARENT",
|
|
387
|
+
`Removed self-parent edge on ${event.eventId}.`
|
|
388
|
+
),
|
|
333
389
|
eventIds: [event.eventId]
|
|
334
390
|
});
|
|
335
391
|
const { parentId: _drop, ...rest } = event;
|
|
@@ -361,7 +417,10 @@ function projectLogicalEvents(events) {
|
|
|
361
417
|
if (nextParent === event.eventId) {
|
|
362
418
|
diagnostics.push({
|
|
363
419
|
code: "AI_LOGICAL_SELF_PARENT_REMOVED",
|
|
364
|
-
message:
|
|
420
|
+
message: formatProgrammaticDiagnostic(
|
|
421
|
+
"AI_TRACE_RELATIONSHIP_SELF_PARENT",
|
|
422
|
+
`Removed self-parent edge on ${event.eventId} (was ${originalParentId}).`
|
|
423
|
+
),
|
|
365
424
|
eventIds: [event.eventId]
|
|
366
425
|
});
|
|
367
426
|
const { parentId: _drop, ...rest } = event;
|
|
@@ -447,7 +506,45 @@ function summarizeSemanticParity(events) {
|
|
|
447
506
|
diagnostics: projection.diagnostics
|
|
448
507
|
};
|
|
449
508
|
}
|
|
450
|
-
|
|
509
|
+
var TRACE_FACTS_INPUT_NOT_NORMALIZED = formatProgrammaticDiagnostic(
|
|
510
|
+
"AI_TRACE_FACTS_INPUT_NOT_NORMALIZED"
|
|
511
|
+
);
|
|
512
|
+
function isTraceReadResult(input) {
|
|
513
|
+
if (typeof input !== "object" || input === null || Array.isArray(input)) {
|
|
514
|
+
return false;
|
|
515
|
+
}
|
|
516
|
+
const record = input;
|
|
517
|
+
return Array.isArray(record.events) && Array.isArray(record.runs) && typeof record.format === "string" && Array.isArray(record.warnings);
|
|
518
|
+
}
|
|
519
|
+
function looksLikeRawV01TraceEvents(input) {
|
|
520
|
+
if (!Array.isArray(input) || input.length === 0) return false;
|
|
521
|
+
const first = input[0];
|
|
522
|
+
if (typeof first !== "object" || first === null) return false;
|
|
523
|
+
const row = first;
|
|
524
|
+
return typeof row.event === "string" && (row.schemaVersion === "0.1" || row.eventId === void 0);
|
|
525
|
+
}
|
|
526
|
+
function isPersistedInspectEventArray(input) {
|
|
527
|
+
if (!Array.isArray(input)) return false;
|
|
528
|
+
if (input.length === 0) return true;
|
|
529
|
+
const first = input[0];
|
|
530
|
+
if (typeof first !== "object" || first === null) return false;
|
|
531
|
+
const row = first;
|
|
532
|
+
return typeof row.eventId === "string" && (row.schemaVersion === "0.2" || row.schemaVersion === "1.0" || row.schemaVersion === "0.1") && typeof row.event !== "string";
|
|
533
|
+
}
|
|
534
|
+
function resolveTraceFactsEvents(input) {
|
|
535
|
+
if (isTraceReadResult(input)) {
|
|
536
|
+
return input.events;
|
|
537
|
+
}
|
|
538
|
+
if (looksLikeRawV01TraceEvents(input)) {
|
|
539
|
+
throw new TypeError(TRACE_FACTS_INPUT_NOT_NORMALIZED);
|
|
540
|
+
}
|
|
541
|
+
if (isPersistedInspectEventArray(input)) {
|
|
542
|
+
return input;
|
|
543
|
+
}
|
|
544
|
+
throw new TypeError(TRACE_FACTS_INPUT_NOT_NORMALIZED);
|
|
545
|
+
}
|
|
546
|
+
function buildTraceFacts(input) {
|
|
547
|
+
const events = resolveTraceFactsEvents(input);
|
|
451
548
|
const projection = projectLogicalEvents(events);
|
|
452
549
|
const toolsByName = /* @__PURE__ */ new Map();
|
|
453
550
|
const llmEvents = [];
|
|
@@ -652,6 +749,9 @@ function evaluateTraceContract(input, contract, options = {}) {
|
|
|
652
749
|
...options.runId !== void 0 ? { runId: options.runId } : {}
|
|
653
750
|
});
|
|
654
751
|
}
|
|
752
|
+
function evaluateTraceContractRead(read, contract, options = {}) {
|
|
753
|
+
return evaluateTraceContract({ read }, contract, options);
|
|
754
|
+
}
|
|
655
755
|
|
|
656
756
|
// packages/core/src/checks/index.ts
|
|
657
757
|
var SEVERITY_RANK = {
|
|
@@ -828,7 +928,13 @@ function resolveSelectedRun(input, runId) {
|
|
|
828
928
|
if (input.read.runs.length === 0) {
|
|
829
929
|
return {
|
|
830
930
|
diagnostics: [
|
|
831
|
-
diagnostic(
|
|
931
|
+
diagnostic(
|
|
932
|
+
"AI_CHECK_RUN_SELECTION_REQUIRED",
|
|
933
|
+
formatProgrammaticDiagnostic(
|
|
934
|
+
"AI_TRACE_CONTRACT_RUN_SELECTION_REQUIRED",
|
|
935
|
+
"No runs are available for checks."
|
|
936
|
+
)
|
|
937
|
+
)
|
|
832
938
|
]
|
|
833
939
|
};
|
|
834
940
|
}
|
|
@@ -836,7 +942,7 @@ function resolveSelectedRun(input, runId) {
|
|
|
836
942
|
diagnostics: [
|
|
837
943
|
diagnostic(
|
|
838
944
|
"AI_CHECK_RUN_SELECTION_REQUIRED",
|
|
839
|
-
"
|
|
945
|
+
formatProgrammaticDiagnostic("AI_TRACE_CONTRACT_RUN_SELECTION_REQUIRED")
|
|
840
946
|
)
|
|
841
947
|
]
|
|
842
948
|
};
|
|
@@ -1717,7 +1823,7 @@ function createStructureCycleRule() {
|
|
|
1717
1823
|
findings.push(
|
|
1718
1824
|
failFinding(
|
|
1719
1825
|
"structure.cycle",
|
|
1720
|
-
"
|
|
1826
|
+
formatProgrammaticDiagnostic("AI_TRACE_RELATIONSHIP_CYCLE"),
|
|
1721
1827
|
cycle.map((item) => eventEvidence(item, "parentId")),
|
|
1722
1828
|
"acyclic parentId graph",
|
|
1723
1829
|
cycle.map((item) => item.eventId).sort()
|
|
@@ -2385,6 +2491,7 @@ function runTraceChecks(input, options = {}) {
|
|
|
2385
2491
|
};
|
|
2386
2492
|
}
|
|
2387
2493
|
|
|
2494
|
+
exports.PROGRAMMATIC_DIAGNOSTIC_SPECS = PROGRAMMATIC_DIAGNOSTIC_SPECS;
|
|
2388
2495
|
exports.buildTraceFacts = buildTraceFacts;
|
|
2389
2496
|
exports.createBaselineRegressionRule = createBaselineRegressionRule;
|
|
2390
2497
|
exports.createDecisionRule = createDecisionRule;
|
|
@@ -2413,6 +2520,8 @@ exports.createToolOrderingRule = createToolOrderingRule;
|
|
|
2413
2520
|
exports.createToolUsageRule = createToolUsageRule;
|
|
2414
2521
|
exports.defineTraceContract = defineTraceContract;
|
|
2415
2522
|
exports.evaluateTraceContract = evaluateTraceContract;
|
|
2523
|
+
exports.evaluateTraceContractRead = evaluateTraceContractRead;
|
|
2524
|
+
exports.formatProgrammaticDiagnostic = formatProgrammaticDiagnostic;
|
|
2416
2525
|
exports.projectLogicalEvents = projectLogicalEvents;
|
|
2417
2526
|
exports.resolveCanonicalToolName = resolveCanonicalToolName;
|
|
2418
2527
|
exports.runTraceChecks = runTraceChecks;
|