agent-inspect 6.3.0 → 6.4.1
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 +12 -0
- package/README.md +2 -2
- package/package.json +2 -2
- package/packages/cli/dist/{chunk-YS2I722C.mjs → chunk-M6PC5KUT.mjs} +78 -31
- package/packages/cli/dist/chunk-M6PC5KUT.mjs.map +1 -0
- package/packages/cli/dist/index.cjs +153 -42
- package/packages/cli/dist/index.cjs.map +1 -1
- package/packages/cli/dist/index.mjs +88 -36
- package/packages/cli/dist/index.mjs.map +1 -1
- package/packages/cli/dist/{src-FVNE44UA.mjs → src-27LC2BB3.mjs} +8 -5
- package/packages/cli/dist/src-27LC2BB3.mjs.map +1 -0
- package/packages/core/dist/advanced.cjs +91 -35
- package/packages/core/dist/advanced.cjs.map +1 -1
- package/packages/core/dist/advanced.d.cts +36 -12
- package/packages/core/dist/advanced.d.ts +36 -12
- package/packages/core/dist/advanced.mjs +77 -24
- package/packages/core/dist/advanced.mjs.map +1 -1
- package/packages/core/dist/checks.cjs +113 -0
- package/packages/core/dist/checks.cjs.map +1 -1
- package/packages/core/dist/checks.d.cts +40 -599
- package/packages/core/dist/checks.d.ts +40 -599
- package/packages/core/dist/checks.mjs +1 -1
- package/packages/core/dist/{chunk-QLYOCCEF.mjs → chunk-EWHN6NA4.mjs} +114 -3
- package/packages/core/dist/chunk-EWHN6NA4.mjs.map +1 -0
- package/packages/core/dist/{context-DyKbkmd4.d.cts → context-BHAgRjOe.d.cts} +4 -4
- package/packages/core/dist/{context-BJ5UQLDi.d.ts → context-Blyjb5my.d.ts} +4 -4
- package/packages/core/dist/diff.d.cts +3 -3
- package/packages/core/dist/diff.d.ts +3 -3
- package/packages/core/dist/exporters.cjs +75 -0
- package/packages/core/dist/exporters.cjs.map +1 -1
- package/packages/core/dist/exporters.d.cts +29 -4
- package/packages/core/dist/exporters.d.ts +29 -4
- package/packages/core/dist/exporters.mjs +71 -1
- package/packages/core/dist/exporters.mjs.map +1 -1
- package/packages/core/dist/index-BblJEdYZ.d.ts +618 -0
- package/packages/core/dist/index-DyKk7iR9.d.cts +618 -0
- package/packages/core/dist/index.d.cts +7 -7
- package/packages/core/dist/index.d.ts +7 -7
- package/packages/core/dist/{inspect-event-IqwOHbGo.d.cts → inspect-event-DVg84S4v.d.cts} +1 -1
- package/packages/core/dist/{inspect-event-IqwOHbGo.d.ts → inspect-event-DVg84S4v.d.ts} +1 -1
- package/packages/core/dist/{log-config-CW8w5YQ9.d.cts → log-config-BG1WmWf2.d.cts} +1 -1
- package/packages/core/dist/{log-config-SRA4xTp8.d.ts → log-config-Ck0aT_Ou.d.ts} +1 -1
- package/packages/core/dist/logs.d.cts +3 -3
- package/packages/core/dist/logs.d.ts +3 -3
- package/packages/core/dist/{persisted-inspect-event-DruwqARZ.d.ts → persisted-inspect-event-ChE7pGb7.d.ts} +1 -1
- package/packages/core/dist/{persisted-inspect-event-Gd-W8vB7.d.cts → persisted-inspect-event-d-mSP8kd.d.cts} +1 -1
- package/packages/core/dist/persisted.d.cts +5 -5
- package/packages/core/dist/persisted.d.ts +5 -5
- package/packages/core/dist/readers.d.cts +2 -2
- package/packages/core/dist/readers.d.ts +2 -2
- package/packages/core/dist/{types-J3Xtuf9x.d.cts → types-B562HgN_.d.cts} +1 -1
- package/packages/core/dist/{types-J3Xtuf9x.d.ts → types-B562HgN_.d.ts} +1 -1
- package/packages/core/dist/{types-B1X87dUW.d.cts → types-BLX3tiOW.d.cts} +1 -1
- package/packages/core/dist/{types-BVkjSd0q.d.ts → types-MuwXSJ4b.d.ts} +1 -1
- package/packages/core/dist/writers.d.cts +2 -2
- package/packages/core/dist/writers.d.ts +2 -2
- package/packages/cli/dist/chunk-YS2I722C.mjs.map +0 -1
- package/packages/cli/dist/src-FVNE44UA.mjs.map +0 -1
- package/packages/core/dist/chunk-QLYOCCEF.mjs.map +0 -1
|
@@ -64,6 +64,117 @@ function outcomesMatchingStatus(outcomes, statuses) {
|
|
|
64
64
|
return outcomes.filter((outcome) => set.has(outcome.status));
|
|
65
65
|
}
|
|
66
66
|
|
|
67
|
+
// packages/core/src/checks/contract.ts
|
|
68
|
+
function contractFailFinding(ruleId, message, evidence, expected, actual) {
|
|
69
|
+
return {
|
|
70
|
+
ruleId,
|
|
71
|
+
severity: "error",
|
|
72
|
+
status: "fail",
|
|
73
|
+
message,
|
|
74
|
+
...expected !== void 0 ? { expected } : {},
|
|
75
|
+
...actual !== void 0 ? { actual } : {},
|
|
76
|
+
evidence: [...evidence]
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
function normalizeStatus(status) {
|
|
80
|
+
if (status === "success") return "ok";
|
|
81
|
+
if (status === "failed") return "error";
|
|
82
|
+
if (status === "running") return "running";
|
|
83
|
+
return "error";
|
|
84
|
+
}
|
|
85
|
+
function contractToRules(contract) {
|
|
86
|
+
const rules = [];
|
|
87
|
+
if (contract.run?.allowedStatuses?.length === 1) {
|
|
88
|
+
rules.push(
|
|
89
|
+
createRunStatusRule({
|
|
90
|
+
expected: normalizeStatus(contract.run.allowedStatuses[0]),
|
|
91
|
+
allowIncomplete: contract.run.requireCompleted === false
|
|
92
|
+
})
|
|
93
|
+
);
|
|
94
|
+
} else if (contract.run?.requireCompleted !== false) {
|
|
95
|
+
rules.push(createRunStatusRule({ allowIncomplete: false }));
|
|
96
|
+
}
|
|
97
|
+
if (contract.run?.maxDurationMs !== void 0) {
|
|
98
|
+
rules.push(createRunDurationRule({ maxDurationMs: contract.run.maxDurationMs }));
|
|
99
|
+
}
|
|
100
|
+
if (contract.run?.requireCompleted === true) {
|
|
101
|
+
rules.push(createStructureIncompleteRule({ requireEndedAtForStarted: true }));
|
|
102
|
+
}
|
|
103
|
+
if (contract.tools) {
|
|
104
|
+
rules.push(
|
|
105
|
+
createToolUsageRule({
|
|
106
|
+
...contract.tools.required ? { required: contract.tools.required } : {},
|
|
107
|
+
...contract.tools.forbidden ? { forbidden: contract.tools.forbidden } : {},
|
|
108
|
+
...contract.tools.allowed ? { allowed: contract.tools.allowed } : {},
|
|
109
|
+
...contract.tools.maxCalls !== void 0 ? { maxCount: contract.tools.maxCalls } : {}
|
|
110
|
+
})
|
|
111
|
+
);
|
|
112
|
+
const order = contract.tools.requiredOrder ?? [];
|
|
113
|
+
for (let i = 0; i < order.length - 1; i += 1) {
|
|
114
|
+
rules.push(createToolOrderingRule({ before: order[i], after: order[i + 1] }));
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
if (contract.llm) {
|
|
118
|
+
rules.push(
|
|
119
|
+
createLlmUsageRule({
|
|
120
|
+
...contract.llm.maxCalls !== void 0 ? { maxCalls: contract.llm.maxCalls } : {},
|
|
121
|
+
...contract.llm.maxTotalTokens !== void 0 ? { maxTotalTokens: contract.llm.maxTotalTokens } : {},
|
|
122
|
+
...contract.llm.allowedModels ? { allowedModels: contract.llm.allowedModels } : {}
|
|
123
|
+
})
|
|
124
|
+
);
|
|
125
|
+
}
|
|
126
|
+
if (contract.observations) {
|
|
127
|
+
const required = contract.observations.required ?? [];
|
|
128
|
+
if (required.length > 0) {
|
|
129
|
+
rules.push({
|
|
130
|
+
id: "contract.observation.required",
|
|
131
|
+
category: "run",
|
|
132
|
+
defaultSeverity: "error",
|
|
133
|
+
evaluate(context) {
|
|
134
|
+
const outcomes = extractOutcomesFromPersistedEvents(context.events);
|
|
135
|
+
const names = new Set(outcomes.map((item) => item.name));
|
|
136
|
+
const missing = required.filter((name) => !names.has(name));
|
|
137
|
+
if (missing.length === 0) return [];
|
|
138
|
+
return [
|
|
139
|
+
contractFailFinding(
|
|
140
|
+
"contract.observation.required",
|
|
141
|
+
`Required observations missing: ${missing.join(", ")}`,
|
|
142
|
+
context.selectedRun ? [{ runId: context.selectedRun.runId, kind: "RUN", name: context.selectedRun.name }] : [],
|
|
143
|
+
required,
|
|
144
|
+
[...names]
|
|
145
|
+
)
|
|
146
|
+
];
|
|
147
|
+
}
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
if (contract.observations.failOn?.length) {
|
|
151
|
+
rules.push(
|
|
152
|
+
createObservedOutcomeRule({
|
|
153
|
+
failOn: contract.observations.failOn.filter(
|
|
154
|
+
(status) => status === "failed" || status === "unknown" || status === "skipped"
|
|
155
|
+
)
|
|
156
|
+
})
|
|
157
|
+
);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
return rules;
|
|
161
|
+
}
|
|
162
|
+
function defineTraceContract(input) {
|
|
163
|
+
return {
|
|
164
|
+
...input.run ? { run: { ...input.run } } : {},
|
|
165
|
+
...input.tools ? { tools: { ...input.tools } } : {},
|
|
166
|
+
...input.llm ? { llm: { ...input.llm } } : {},
|
|
167
|
+
...input.observations ? { observations: { ...input.observations } } : {}
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
function evaluateTraceContract(input, contract, options = {}) {
|
|
171
|
+
const rules = contractToRules(contract);
|
|
172
|
+
return runTraceChecks(input, {
|
|
173
|
+
rules,
|
|
174
|
+
...options.runId !== void 0 ? { runId: options.runId } : {}
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
|
|
67
178
|
// packages/core/src/checks/index.ts
|
|
68
179
|
var SEVERITY_RANK = {
|
|
69
180
|
error: 0,
|
|
@@ -1734,6 +1845,8 @@ exports.createStructureRelationshipRule = createStructureRelationshipRule;
|
|
|
1734
1845
|
exports.createToolFailureRule = createToolFailureRule;
|
|
1735
1846
|
exports.createToolOrderingRule = createToolOrderingRule;
|
|
1736
1847
|
exports.createToolUsageRule = createToolUsageRule;
|
|
1848
|
+
exports.defineTraceContract = defineTraceContract;
|
|
1849
|
+
exports.evaluateTraceContract = evaluateTraceContract;
|
|
1737
1850
|
exports.runTraceChecks = runTraceChecks;
|
|
1738
1851
|
//# sourceMappingURL=checks.cjs.map
|
|
1739
1852
|
//# sourceMappingURL=checks.cjs.map
|