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.
Files changed (59) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +2 -2
  3. package/package.json +2 -2
  4. package/packages/cli/dist/{chunk-YS2I722C.mjs → chunk-M6PC5KUT.mjs} +78 -31
  5. package/packages/cli/dist/chunk-M6PC5KUT.mjs.map +1 -0
  6. package/packages/cli/dist/index.cjs +153 -42
  7. package/packages/cli/dist/index.cjs.map +1 -1
  8. package/packages/cli/dist/index.mjs +88 -36
  9. package/packages/cli/dist/index.mjs.map +1 -1
  10. package/packages/cli/dist/{src-FVNE44UA.mjs → src-27LC2BB3.mjs} +8 -5
  11. package/packages/cli/dist/src-27LC2BB3.mjs.map +1 -0
  12. package/packages/core/dist/advanced.cjs +91 -35
  13. package/packages/core/dist/advanced.cjs.map +1 -1
  14. package/packages/core/dist/advanced.d.cts +36 -12
  15. package/packages/core/dist/advanced.d.ts +36 -12
  16. package/packages/core/dist/advanced.mjs +77 -24
  17. package/packages/core/dist/advanced.mjs.map +1 -1
  18. package/packages/core/dist/checks.cjs +113 -0
  19. package/packages/core/dist/checks.cjs.map +1 -1
  20. package/packages/core/dist/checks.d.cts +40 -599
  21. package/packages/core/dist/checks.d.ts +40 -599
  22. package/packages/core/dist/checks.mjs +1 -1
  23. package/packages/core/dist/{chunk-QLYOCCEF.mjs → chunk-EWHN6NA4.mjs} +114 -3
  24. package/packages/core/dist/chunk-EWHN6NA4.mjs.map +1 -0
  25. package/packages/core/dist/{context-DyKbkmd4.d.cts → context-BHAgRjOe.d.cts} +4 -4
  26. package/packages/core/dist/{context-BJ5UQLDi.d.ts → context-Blyjb5my.d.ts} +4 -4
  27. package/packages/core/dist/diff.d.cts +3 -3
  28. package/packages/core/dist/diff.d.ts +3 -3
  29. package/packages/core/dist/exporters.cjs +75 -0
  30. package/packages/core/dist/exporters.cjs.map +1 -1
  31. package/packages/core/dist/exporters.d.cts +29 -4
  32. package/packages/core/dist/exporters.d.ts +29 -4
  33. package/packages/core/dist/exporters.mjs +71 -1
  34. package/packages/core/dist/exporters.mjs.map +1 -1
  35. package/packages/core/dist/index-BblJEdYZ.d.ts +618 -0
  36. package/packages/core/dist/index-DyKk7iR9.d.cts +618 -0
  37. package/packages/core/dist/index.d.cts +7 -7
  38. package/packages/core/dist/index.d.ts +7 -7
  39. package/packages/core/dist/{inspect-event-IqwOHbGo.d.cts → inspect-event-DVg84S4v.d.cts} +1 -1
  40. package/packages/core/dist/{inspect-event-IqwOHbGo.d.ts → inspect-event-DVg84S4v.d.ts} +1 -1
  41. package/packages/core/dist/{log-config-CW8w5YQ9.d.cts → log-config-BG1WmWf2.d.cts} +1 -1
  42. package/packages/core/dist/{log-config-SRA4xTp8.d.ts → log-config-Ck0aT_Ou.d.ts} +1 -1
  43. package/packages/core/dist/logs.d.cts +3 -3
  44. package/packages/core/dist/logs.d.ts +3 -3
  45. package/packages/core/dist/{persisted-inspect-event-DruwqARZ.d.ts → persisted-inspect-event-ChE7pGb7.d.ts} +1 -1
  46. package/packages/core/dist/{persisted-inspect-event-Gd-W8vB7.d.cts → persisted-inspect-event-d-mSP8kd.d.cts} +1 -1
  47. package/packages/core/dist/persisted.d.cts +5 -5
  48. package/packages/core/dist/persisted.d.ts +5 -5
  49. package/packages/core/dist/readers.d.cts +2 -2
  50. package/packages/core/dist/readers.d.ts +2 -2
  51. package/packages/core/dist/{types-J3Xtuf9x.d.cts → types-B562HgN_.d.cts} +1 -1
  52. package/packages/core/dist/{types-J3Xtuf9x.d.ts → types-B562HgN_.d.ts} +1 -1
  53. package/packages/core/dist/{types-B1X87dUW.d.cts → types-BLX3tiOW.d.cts} +1 -1
  54. package/packages/core/dist/{types-BVkjSd0q.d.ts → types-MuwXSJ4b.d.ts} +1 -1
  55. package/packages/core/dist/writers.d.cts +2 -2
  56. package/packages/core/dist/writers.d.ts +2 -2
  57. package/packages/cli/dist/chunk-YS2I722C.mjs.map +0 -1
  58. package/packages/cli/dist/src-FVNE44UA.mjs.map +0 -1
  59. 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