@zhivex-ai/core 1.9.1 → 1.11.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/README.md +2 -0
- package/dist/agent-state.d.ts.map +1 -1
- package/dist/agent-state.js +28 -4
- package/dist/agent-state.js.map +1 -1
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +22 -7
- package/dist/agent.js.map +1 -1
- package/dist/api-stability.d.ts.map +1 -1
- package/dist/api-stability.js +9 -0
- package/dist/api-stability.js.map +1 -1
- package/dist/errors.d.ts +26 -0
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +25 -0
- package/dist/errors.js.map +1 -1
- package/dist/generate-text.d.ts.map +1 -1
- package/dist/generate-text.js +35 -5
- package/dist/generate-text.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/provider-conformance.d.ts +120 -0
- package/dist/provider-conformance.d.ts.map +1 -0
- package/dist/provider-conformance.js +505 -0
- package/dist/provider-conformance.js.map +1 -0
- package/dist/types.d.ts +17 -15
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,505 @@
|
|
|
1
|
+
import { ValidationError } from "./errors.js";
|
|
2
|
+
import { createRedactionPolicy } from "./safety-policy.js";
|
|
3
|
+
export const PROVIDER_CONFORMANCE_REPORT_SCHEMA_VERSION = 1;
|
|
4
|
+
export const PROVIDER_CONFORMANCE_STATUSES = [
|
|
5
|
+
"implemented",
|
|
6
|
+
"offline_passed",
|
|
7
|
+
"installed_passed",
|
|
8
|
+
"live_passed",
|
|
9
|
+
"skipped_missing_credentials",
|
|
10
|
+
"failed",
|
|
11
|
+
"stale"
|
|
12
|
+
];
|
|
13
|
+
export const PROVIDER_CONFORMANCE_EVIDENCE_LEVELS = [
|
|
14
|
+
"declared",
|
|
15
|
+
"offline",
|
|
16
|
+
"installed",
|
|
17
|
+
"live"
|
|
18
|
+
];
|
|
19
|
+
const statusSet = new Set(PROVIDER_CONFORMANCE_STATUSES);
|
|
20
|
+
const evidenceSet = new Set(PROVIDER_CONFORMANCE_EVIDENCE_LEVELS);
|
|
21
|
+
const passingStatusByEvidence = {
|
|
22
|
+
declared: "implemented",
|
|
23
|
+
offline: "offline_passed",
|
|
24
|
+
installed: "installed_passed",
|
|
25
|
+
live: "live_passed"
|
|
26
|
+
};
|
|
27
|
+
const isRecord = (value) => Boolean(value) && typeof value === "object" && !Array.isArray(value);
|
|
28
|
+
const requireRecord = (value, path) => {
|
|
29
|
+
if (!isRecord(value)) {
|
|
30
|
+
throw new ValidationError(`${path} must be an object.`);
|
|
31
|
+
}
|
|
32
|
+
return value;
|
|
33
|
+
};
|
|
34
|
+
const requireString = (value, path) => {
|
|
35
|
+
if (typeof value !== "string" || value.trim().length === 0) {
|
|
36
|
+
throw new ValidationError(`${path} must be a non-empty string.`);
|
|
37
|
+
}
|
|
38
|
+
return value.trim();
|
|
39
|
+
};
|
|
40
|
+
const optionalString = (value, path) => value === undefined ? undefined : requireString(value, path);
|
|
41
|
+
const requireLogicalEndpoint = (value, path) => {
|
|
42
|
+
const endpoint = requireString(value, path);
|
|
43
|
+
if (endpoint.includes("://") || endpoint.includes("@") || endpoint.includes("?") || endpoint.includes("#")) {
|
|
44
|
+
throw new ValidationError(`${path} must be a logical endpoint label, not a URL or tenant-bearing identifier.`);
|
|
45
|
+
}
|
|
46
|
+
return endpoint;
|
|
47
|
+
};
|
|
48
|
+
const requireBoolean = (value, path) => {
|
|
49
|
+
if (typeof value !== "boolean") {
|
|
50
|
+
throw new ValidationError(`${path} must be a boolean.`);
|
|
51
|
+
}
|
|
52
|
+
return value;
|
|
53
|
+
};
|
|
54
|
+
const requireNonNegativeInteger = (value, path) => {
|
|
55
|
+
if (!Number.isSafeInteger(value) || value < 0) {
|
|
56
|
+
throw new ValidationError(`${path} must be a non-negative safe integer.`);
|
|
57
|
+
}
|
|
58
|
+
return value;
|
|
59
|
+
};
|
|
60
|
+
const optionalNonNegativeNumber = (value, path) => {
|
|
61
|
+
if (value === undefined)
|
|
62
|
+
return undefined;
|
|
63
|
+
if (typeof value !== "number" || !Number.isFinite(value) || value < 0) {
|
|
64
|
+
throw new ValidationError(`${path} must be a non-negative finite number.`);
|
|
65
|
+
}
|
|
66
|
+
return value;
|
|
67
|
+
};
|
|
68
|
+
const requireIsoDate = (value, path) => {
|
|
69
|
+
const input = requireString(value, path);
|
|
70
|
+
const timestamp = Date.parse(input);
|
|
71
|
+
if (!Number.isFinite(timestamp)) {
|
|
72
|
+
throw new ValidationError(`${path} must be an ISO-8601 timestamp.`);
|
|
73
|
+
}
|
|
74
|
+
return new Date(timestamp).toISOString();
|
|
75
|
+
};
|
|
76
|
+
const resolveNow = (value) => {
|
|
77
|
+
if (value instanceof Date) {
|
|
78
|
+
if (!Number.isFinite(value.getTime()))
|
|
79
|
+
throw new ValidationError("now must be a valid date.");
|
|
80
|
+
return value.getTime();
|
|
81
|
+
}
|
|
82
|
+
if (value !== undefined) {
|
|
83
|
+
const timestamp = Date.parse(value);
|
|
84
|
+
if (!Number.isFinite(timestamp))
|
|
85
|
+
throw new ValidationError("now must be a valid date.");
|
|
86
|
+
return timestamp;
|
|
87
|
+
}
|
|
88
|
+
return Date.now();
|
|
89
|
+
};
|
|
90
|
+
const normalizeStringArray = (value, path, redact) => {
|
|
91
|
+
if (value === undefined)
|
|
92
|
+
return undefined;
|
|
93
|
+
if (!Array.isArray(value))
|
|
94
|
+
throw new ValidationError(`${path} must be an array.`);
|
|
95
|
+
return value.map((entry, index) => redact(requireString(entry, `${path}[${index}]`)));
|
|
96
|
+
};
|
|
97
|
+
const normalizeMetadata = (value, path, redactJson) => {
|
|
98
|
+
if (value === undefined)
|
|
99
|
+
return undefined;
|
|
100
|
+
const record = requireRecord(value, path);
|
|
101
|
+
const seen = new WeakSet();
|
|
102
|
+
const isJsonValue = (input) => {
|
|
103
|
+
if (input === null || typeof input === "string" || typeof input === "boolean")
|
|
104
|
+
return true;
|
|
105
|
+
if (typeof input === "number")
|
|
106
|
+
return Number.isFinite(input);
|
|
107
|
+
if (!input || typeof input !== "object")
|
|
108
|
+
return false;
|
|
109
|
+
if (seen.has(input))
|
|
110
|
+
return false;
|
|
111
|
+
seen.add(input);
|
|
112
|
+
const valid = Array.isArray(input)
|
|
113
|
+
? input.every(isJsonValue)
|
|
114
|
+
: Object.getPrototypeOf(input) === Object.prototype && Object.values(input).every(isJsonValue);
|
|
115
|
+
seen.delete(input);
|
|
116
|
+
return valid;
|
|
117
|
+
};
|
|
118
|
+
if (!isJsonValue(record)) {
|
|
119
|
+
throw new ValidationError(`${path} must contain only JSON-compatible values.`);
|
|
120
|
+
}
|
|
121
|
+
return redactJson(structuredClone(record));
|
|
122
|
+
};
|
|
123
|
+
const normalizeArtifact = (value, path) => {
|
|
124
|
+
const record = requireRecord(value, path);
|
|
125
|
+
const kind = requireString(record.kind, `${path}.kind`);
|
|
126
|
+
if (kind !== "checkout" && kind !== "installed") {
|
|
127
|
+
throw new ValidationError(`${path}.kind must be checkout or installed.`);
|
|
128
|
+
}
|
|
129
|
+
return {
|
|
130
|
+
kind,
|
|
131
|
+
packageName: requireString(record.packageName, `${path}.packageName`),
|
|
132
|
+
packageVersion: requireString(record.packageVersion, `${path}.packageVersion`),
|
|
133
|
+
integrity: optionalString(record.integrity, `${path}.integrity`)
|
|
134
|
+
};
|
|
135
|
+
};
|
|
136
|
+
const normalizeStatus = (value, path) => {
|
|
137
|
+
const status = requireString(value, path);
|
|
138
|
+
if (!statusSet.has(status)) {
|
|
139
|
+
throw new ValidationError(`${path} contains an unknown provider conformance status.`);
|
|
140
|
+
}
|
|
141
|
+
return status;
|
|
142
|
+
};
|
|
143
|
+
const normalizeEvidence = (value, path) => {
|
|
144
|
+
const evidence = requireString(value, path);
|
|
145
|
+
if (!evidenceSet.has(evidence)) {
|
|
146
|
+
throw new ValidationError(`${path} contains an unknown provider conformance evidence level.`);
|
|
147
|
+
}
|
|
148
|
+
return evidence;
|
|
149
|
+
};
|
|
150
|
+
const normalizeError = (value, path, redact) => {
|
|
151
|
+
if (value === undefined)
|
|
152
|
+
return undefined;
|
|
153
|
+
const record = requireRecord(value, path);
|
|
154
|
+
return {
|
|
155
|
+
code: redact(requireString(record.code, `${path}.code`)),
|
|
156
|
+
message: redact(requireString(record.message, `${path}.message`)),
|
|
157
|
+
retryable: requireBoolean(record.retryable, `${path}.retryable`)
|
|
158
|
+
};
|
|
159
|
+
};
|
|
160
|
+
const normalizeResult = (value, path, now, applyTtl, redaction) => {
|
|
161
|
+
const record = requireRecord(value, path);
|
|
162
|
+
const evidence = normalizeEvidence(record.evidence, `${path}.evidence`);
|
|
163
|
+
let status = normalizeStatus(record.status, `${path}.status`);
|
|
164
|
+
let observedStatus;
|
|
165
|
+
if (record.observedStatus !== undefined) {
|
|
166
|
+
const parsedObservedStatus = normalizeStatus(record.observedStatus, `${path}.observedStatus`);
|
|
167
|
+
if (parsedObservedStatus === "stale") {
|
|
168
|
+
throw new ValidationError(`${path}.observedStatus cannot itself be stale.`);
|
|
169
|
+
}
|
|
170
|
+
observedStatus = parsedObservedStatus;
|
|
171
|
+
}
|
|
172
|
+
const observedAt = requireIsoDate(record.observedAt, `${path}.observedAt`);
|
|
173
|
+
const expiresAt = requireIsoDate(record.expiresAt, `${path}.expiresAt`);
|
|
174
|
+
if (Date.parse(expiresAt) < Date.parse(observedAt)) {
|
|
175
|
+
throw new ValidationError(`${path}.expiresAt cannot precede observedAt.`);
|
|
176
|
+
}
|
|
177
|
+
if (status === "stale" && !observedStatus) {
|
|
178
|
+
throw new ValidationError(`${path}.observedStatus is required when status is stale.`);
|
|
179
|
+
}
|
|
180
|
+
if (status !== "stale" && observedStatus !== undefined) {
|
|
181
|
+
throw new ValidationError(`${path}.observedStatus is only allowed when status is stale.`);
|
|
182
|
+
}
|
|
183
|
+
if (applyTtl &&
|
|
184
|
+
status !== "failed" &&
|
|
185
|
+
status !== "skipped_missing_credentials" &&
|
|
186
|
+
status !== "stale" &&
|
|
187
|
+
Date.parse(expiresAt) <= now) {
|
|
188
|
+
observedStatus = status;
|
|
189
|
+
status = "stale";
|
|
190
|
+
}
|
|
191
|
+
if (status !== "failed" && record.error !== undefined) {
|
|
192
|
+
throw new ValidationError(`${path}.error is only allowed for failed results.`);
|
|
193
|
+
}
|
|
194
|
+
const error = normalizeError(record.error, `${path}.error`, redaction.redactText);
|
|
195
|
+
if (status === "failed" && !error) {
|
|
196
|
+
throw new ValidationError(`${path}.error is required for failed results.`);
|
|
197
|
+
}
|
|
198
|
+
const expectedPassingStatus = passingStatusByEvidence[evidence];
|
|
199
|
+
const effectiveStatus = status === "stale" ? observedStatus : status;
|
|
200
|
+
if (effectiveStatus !== undefined &&
|
|
201
|
+
status !== "failed" &&
|
|
202
|
+
status !== "skipped_missing_credentials" &&
|
|
203
|
+
effectiveStatus !== expectedPassingStatus) {
|
|
204
|
+
throw new ValidationError(`${path}.status is incompatible with its evidence level.`);
|
|
205
|
+
}
|
|
206
|
+
return {
|
|
207
|
+
capability: requireString(record.capability, `${path}.capability`),
|
|
208
|
+
evidence,
|
|
209
|
+
status,
|
|
210
|
+
observedStatus,
|
|
211
|
+
required: requireBoolean(record.required, `${path}.required`),
|
|
212
|
+
modelId: requireString(record.modelId, `${path}.modelId`),
|
|
213
|
+
endpoint: requireLogicalEndpoint(record.endpoint, `${path}.endpoint`),
|
|
214
|
+
artifact: normalizeArtifact(record.artifact, `${path}.artifact`),
|
|
215
|
+
observedAt,
|
|
216
|
+
expiresAt,
|
|
217
|
+
attempts: requireNonNegativeInteger(record.attempts, `${path}.attempts`),
|
|
218
|
+
durationMs: optionalNonNegativeNumber(record.durationMs, `${path}.durationMs`),
|
|
219
|
+
error,
|
|
220
|
+
missingRequirements: normalizeStringArray(record.missingRequirements, `${path}.missingRequirements`, redaction.redactText),
|
|
221
|
+
metadata: normalizeMetadata(record.metadata, `${path}.metadata`, redaction.redactJson)
|
|
222
|
+
};
|
|
223
|
+
};
|
|
224
|
+
const resultKey = (provider, result) => [provider, result.capability, result.evidence, result.artifact.kind].join("\u0000");
|
|
225
|
+
export const normalizeProviderConformanceReport = (value, options = {}) => {
|
|
226
|
+
const record = requireRecord(value, "report");
|
|
227
|
+
if (record.schemaVersion !== PROVIDER_CONFORMANCE_REPORT_SCHEMA_VERSION) {
|
|
228
|
+
throw new ValidationError(`Unsupported provider conformance report schema version ${String(record.schemaVersion)}.`);
|
|
229
|
+
}
|
|
230
|
+
const redaction = createRedactionPolicy({
|
|
231
|
+
includeEmails: true,
|
|
232
|
+
...options.redaction,
|
|
233
|
+
rules: [
|
|
234
|
+
{
|
|
235
|
+
name: "provider-conformance-token",
|
|
236
|
+
pattern: /\b(?:sk|pk|rk|api|token)[-_][A-Za-z0-9._-]{16,}\b/gi
|
|
237
|
+
},
|
|
238
|
+
...(options.redaction?.rules ?? [])
|
|
239
|
+
]
|
|
240
|
+
});
|
|
241
|
+
const now = resolveNow(options.now);
|
|
242
|
+
const applyTtl = options.applyTtl ?? true;
|
|
243
|
+
const source = requireRecord(record.source, "report.source");
|
|
244
|
+
const ciInput = source.ci;
|
|
245
|
+
let ci;
|
|
246
|
+
if (ciInput !== undefined) {
|
|
247
|
+
const ciRecord = requireRecord(ciInput, "report.source.ci");
|
|
248
|
+
ci = {
|
|
249
|
+
system: requireString(ciRecord.system, "report.source.ci.system"),
|
|
250
|
+
runId: requireString(ciRecord.runId, "report.source.ci.runId"),
|
|
251
|
+
runAttempt: optionalString(ciRecord.runAttempt, "report.source.ci.runAttempt"),
|
|
252
|
+
workflow: optionalString(ciRecord.workflow, "report.source.ci.workflow")
|
|
253
|
+
};
|
|
254
|
+
}
|
|
255
|
+
if (!Array.isArray(record.providers)) {
|
|
256
|
+
throw new ValidationError("report.providers must be an array.");
|
|
257
|
+
}
|
|
258
|
+
const seenProviders = new Set();
|
|
259
|
+
const seenResults = new Set();
|
|
260
|
+
const providers = record.providers.map((providerValue, providerIndex) => {
|
|
261
|
+
const providerRecord = requireRecord(providerValue, `report.providers[${providerIndex}]`);
|
|
262
|
+
const provider = requireString(providerRecord.provider, `report.providers[${providerIndex}].provider`);
|
|
263
|
+
if (seenProviders.has(provider)) {
|
|
264
|
+
throw new ValidationError(`report.providers contains duplicate provider ${provider}.`);
|
|
265
|
+
}
|
|
266
|
+
seenProviders.add(provider);
|
|
267
|
+
if (!Array.isArray(providerRecord.results)) {
|
|
268
|
+
throw new ValidationError(`report.providers[${providerIndex}].results must be an array.`);
|
|
269
|
+
}
|
|
270
|
+
const results = providerRecord.results.map((result, resultIndex) => normalizeResult(result, `report.providers[${providerIndex}].results[${resultIndex}]`, now, applyTtl, redaction));
|
|
271
|
+
for (const result of results) {
|
|
272
|
+
const key = resultKey(provider, result);
|
|
273
|
+
if (seenResults.has(key)) {
|
|
274
|
+
throw new ValidationError(`report.providers contains duplicate evidence for ${provider}/${result.capability}/${result.evidence}/${result.artifact.kind}.`);
|
|
275
|
+
}
|
|
276
|
+
seenResults.add(key);
|
|
277
|
+
}
|
|
278
|
+
return {
|
|
279
|
+
provider,
|
|
280
|
+
results: results.sort((left, right) => left.capability.localeCompare(right.capability) ||
|
|
281
|
+
left.evidence.localeCompare(right.evidence) ||
|
|
282
|
+
left.artifact.kind.localeCompare(right.artifact.kind))
|
|
283
|
+
};
|
|
284
|
+
});
|
|
285
|
+
const generatedAt = requireIsoDate(record.generatedAt, "report.generatedAt");
|
|
286
|
+
const expiresAt = requireIsoDate(record.expiresAt, "report.expiresAt");
|
|
287
|
+
if (Date.parse(expiresAt) < Date.parse(generatedAt)) {
|
|
288
|
+
throw new ValidationError("report.expiresAt cannot precede generatedAt.");
|
|
289
|
+
}
|
|
290
|
+
return {
|
|
291
|
+
schemaVersion: PROVIDER_CONFORMANCE_REPORT_SCHEMA_VERSION,
|
|
292
|
+
reportId: requireString(record.reportId, "report.reportId"),
|
|
293
|
+
generatedAt,
|
|
294
|
+
expiresAt,
|
|
295
|
+
generator: requireString(record.generator, "report.generator"),
|
|
296
|
+
source: {
|
|
297
|
+
repository: requireString(source.repository, "report.source.repository"),
|
|
298
|
+
gitSha: requireString(source.gitSha, "report.source.gitSha"),
|
|
299
|
+
runtime: requireString(source.runtime, "report.source.runtime"),
|
|
300
|
+
ci
|
|
301
|
+
},
|
|
302
|
+
providers: providers.sort((left, right) => left.provider.localeCompare(right.provider))
|
|
303
|
+
};
|
|
304
|
+
};
|
|
305
|
+
export const mergeProviderConformanceReports = (reports, options = {}) => {
|
|
306
|
+
if (reports.length === 0)
|
|
307
|
+
throw new ValidationError("At least one provider conformance report is required.");
|
|
308
|
+
const normalized = reports.map((report) => normalizeProviderConformanceReport(report, options));
|
|
309
|
+
const first = normalized[0];
|
|
310
|
+
for (const report of normalized.slice(1)) {
|
|
311
|
+
if (first.source.repository !== report.source.repository ||
|
|
312
|
+
first.source.gitSha !== report.source.gitSha) {
|
|
313
|
+
throw new ValidationError("Provider conformance reports must describe the same repository and git SHA.");
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
const providerResults = new Map();
|
|
317
|
+
for (const report of normalized) {
|
|
318
|
+
for (const provider of report.providers) {
|
|
319
|
+
const results = providerResults.get(provider.provider) ?? new Map();
|
|
320
|
+
for (const result of provider.results) {
|
|
321
|
+
results.set(resultKey(provider.provider, result), result);
|
|
322
|
+
}
|
|
323
|
+
providerResults.set(provider.provider, results);
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
const generatedAt = normalized
|
|
327
|
+
.map((report) => report.generatedAt)
|
|
328
|
+
.sort()
|
|
329
|
+
.at(-1);
|
|
330
|
+
const expiresAt = normalized
|
|
331
|
+
.map((report) => report.expiresAt)
|
|
332
|
+
.sort()
|
|
333
|
+
.at(-1);
|
|
334
|
+
return normalizeProviderConformanceReport({
|
|
335
|
+
...first,
|
|
336
|
+
reportId: `${first.reportId}-merged`,
|
|
337
|
+
generatedAt,
|
|
338
|
+
expiresAt,
|
|
339
|
+
providers: [...providerResults.entries()].map(([provider, results]) => ({
|
|
340
|
+
provider,
|
|
341
|
+
results: [...results.values()]
|
|
342
|
+
}))
|
|
343
|
+
}, options);
|
|
344
|
+
};
|
|
345
|
+
export const compareProviderConformanceReports = (baselineInput, currentInput, options = {}) => {
|
|
346
|
+
const baseline = normalizeProviderConformanceReport(baselineInput, { ...options, applyTtl: false });
|
|
347
|
+
const current = normalizeProviderConformanceReport(currentInput, { ...options, applyTtl: true });
|
|
348
|
+
const currentResults = new Map();
|
|
349
|
+
for (const provider of current.providers) {
|
|
350
|
+
for (const result of provider.results)
|
|
351
|
+
currentResults.set(resultKey(provider.provider, result), result);
|
|
352
|
+
}
|
|
353
|
+
const regressions = [];
|
|
354
|
+
const changes = [];
|
|
355
|
+
for (const provider of baseline.providers) {
|
|
356
|
+
for (const baselineResult of provider.results) {
|
|
357
|
+
const currentResult = currentResults.get(resultKey(provider.provider, baselineResult));
|
|
358
|
+
const expectedStatus = passingStatusByEvidence[baselineResult.evidence];
|
|
359
|
+
if (!currentResult || currentResult.status !== expectedStatus) {
|
|
360
|
+
regressions.push({
|
|
361
|
+
provider: provider.provider,
|
|
362
|
+
capability: baselineResult.capability,
|
|
363
|
+
evidence: baselineResult.evidence,
|
|
364
|
+
artifactKind: baselineResult.artifact.kind,
|
|
365
|
+
baselineStatus: baselineResult.status,
|
|
366
|
+
currentStatus: currentResult?.status ?? "missing",
|
|
367
|
+
baselineModelId: baselineResult.modelId,
|
|
368
|
+
currentModelId: currentResult?.modelId
|
|
369
|
+
});
|
|
370
|
+
continue;
|
|
371
|
+
}
|
|
372
|
+
const fields = ["modelId", "endpoint"];
|
|
373
|
+
for (const field of fields) {
|
|
374
|
+
if (baselineResult[field] !== currentResult[field]) {
|
|
375
|
+
changes.push({
|
|
376
|
+
provider: provider.provider,
|
|
377
|
+
capability: baselineResult.capability,
|
|
378
|
+
evidence: baselineResult.evidence,
|
|
379
|
+
artifactKind: baselineResult.artifact.kind,
|
|
380
|
+
field,
|
|
381
|
+
baseline: baselineResult[field],
|
|
382
|
+
current: currentResult[field]
|
|
383
|
+
});
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
if (baselineResult.artifact.packageVersion !== currentResult.artifact.packageVersion) {
|
|
387
|
+
changes.push({
|
|
388
|
+
provider: provider.provider,
|
|
389
|
+
capability: baselineResult.capability,
|
|
390
|
+
evidence: baselineResult.evidence,
|
|
391
|
+
artifactKind: baselineResult.artifact.kind,
|
|
392
|
+
field: "packageVersion",
|
|
393
|
+
baseline: baselineResult.artifact.packageVersion,
|
|
394
|
+
current: currentResult.artifact.packageVersion
|
|
395
|
+
});
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
return { ok: regressions.length === 0, regressions, changes };
|
|
400
|
+
};
|
|
401
|
+
export const evaluateProviderConformanceGate = (reportInput, options = {}) => {
|
|
402
|
+
const report = normalizeProviderConformanceReport(reportInput, { now: options.now });
|
|
403
|
+
const requirements = [...(options.requirements ?? [])];
|
|
404
|
+
for (const provider of report.providers) {
|
|
405
|
+
for (const result of provider.results) {
|
|
406
|
+
if (result.required) {
|
|
407
|
+
requirements.push({
|
|
408
|
+
provider: provider.provider,
|
|
409
|
+
capability: result.capability,
|
|
410
|
+
evidence: result.evidence,
|
|
411
|
+
artifactKind: result.artifact.kind
|
|
412
|
+
});
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
const uniqueRequirements = new Map(requirements.map((requirement) => [
|
|
417
|
+
[requirement.provider, requirement.capability, requirement.evidence, requirement.artifactKind ?? "*"].join("\u0000"),
|
|
418
|
+
requirement
|
|
419
|
+
]));
|
|
420
|
+
const issues = [];
|
|
421
|
+
for (const requirement of uniqueRequirements.values()) {
|
|
422
|
+
const provider = report.providers.find((entry) => entry.provider === requirement.provider);
|
|
423
|
+
const result = provider?.results.find((entry) => entry.capability === requirement.capability &&
|
|
424
|
+
entry.evidence === requirement.evidence &&
|
|
425
|
+
(!requirement.artifactKind || entry.artifact.kind === requirement.artifactKind));
|
|
426
|
+
if (!result) {
|
|
427
|
+
issues.push({
|
|
428
|
+
code: "missing_required_result",
|
|
429
|
+
provider: requirement.provider,
|
|
430
|
+
capability: requirement.capability,
|
|
431
|
+
evidence: requirement.evidence,
|
|
432
|
+
message: `Missing required ${requirement.evidence} evidence for ${requirement.provider}/${requirement.capability}.`
|
|
433
|
+
});
|
|
434
|
+
continue;
|
|
435
|
+
}
|
|
436
|
+
if (result.status !== passingStatusByEvidence[requirement.evidence]) {
|
|
437
|
+
issues.push({
|
|
438
|
+
code: "required_result_not_passed",
|
|
439
|
+
provider: requirement.provider,
|
|
440
|
+
capability: requirement.capability,
|
|
441
|
+
evidence: requirement.evidence,
|
|
442
|
+
status: result.status,
|
|
443
|
+
message: `Required ${requirement.evidence} evidence for ${requirement.provider}/${requirement.capability} is ${result.status}.`
|
|
444
|
+
});
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
const comparison = options.baseline
|
|
448
|
+
? compareProviderConformanceReports(options.baseline, report, { now: options.now })
|
|
449
|
+
: undefined;
|
|
450
|
+
for (const regression of comparison?.regressions ?? []) {
|
|
451
|
+
issues.push({
|
|
452
|
+
code: "baseline_regression",
|
|
453
|
+
provider: regression.provider,
|
|
454
|
+
capability: regression.capability,
|
|
455
|
+
evidence: regression.evidence,
|
|
456
|
+
status: regression.currentStatus === "missing" ? undefined : regression.currentStatus,
|
|
457
|
+
message: `Baseline regression for ${regression.provider}/${regression.capability}/${regression.evidence}: ${regression.currentStatus}.`
|
|
458
|
+
});
|
|
459
|
+
}
|
|
460
|
+
return { ok: issues.length === 0, issues, comparison };
|
|
461
|
+
};
|
|
462
|
+
const escapeMarkdown = (value) => value.replaceAll("|", "\\|").replaceAll("\n", " ");
|
|
463
|
+
export const renderProviderConformanceMarkdown = (reportInput, options = {}) => {
|
|
464
|
+
const report = normalizeProviderConformanceReport(reportInput, { now: options.now });
|
|
465
|
+
const results = report.providers.flatMap((provider) => provider.results.map((result) => ({ provider: provider.provider, ...result })));
|
|
466
|
+
const statusCounts = new Map();
|
|
467
|
+
for (const result of results)
|
|
468
|
+
statusCounts.set(result.status, (statusCounts.get(result.status) ?? 0) + 1);
|
|
469
|
+
const lines = [
|
|
470
|
+
"# Zhivex AI SDK Provider Conformance Report",
|
|
471
|
+
"",
|
|
472
|
+
`- Schema: ${report.schemaVersion}`,
|
|
473
|
+
`- Report: ${escapeMarkdown(report.reportId)}`,
|
|
474
|
+
`- Generated: ${report.generatedAt}`,
|
|
475
|
+
`- Expires: ${report.expiresAt}`,
|
|
476
|
+
`- Git SHA: ${escapeMarkdown(report.source.gitSha)}`,
|
|
477
|
+
`- Results: ${results.length}`,
|
|
478
|
+
`- Live passed: ${statusCounts.get("live_passed") ?? 0}`,
|
|
479
|
+
`- Installed passed: ${statusCounts.get("installed_passed") ?? 0}`,
|
|
480
|
+
`- Skipped credentials: ${statusCounts.get("skipped_missing_credentials") ?? 0}`,
|
|
481
|
+
`- Failed: ${statusCounts.get("failed") ?? 0}`,
|
|
482
|
+
`- Stale: ${statusCounts.get("stale") ?? 0}`,
|
|
483
|
+
"",
|
|
484
|
+
"| Provider | Capability | Evidence | Status | Model | Endpoint | Artifact | Package | Observed | Expires | Required |",
|
|
485
|
+
"| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |"
|
|
486
|
+
];
|
|
487
|
+
for (const result of results) {
|
|
488
|
+
lines.push(`| ${[
|
|
489
|
+
result.provider,
|
|
490
|
+
result.capability,
|
|
491
|
+
result.evidence,
|
|
492
|
+
result.status,
|
|
493
|
+
result.modelId,
|
|
494
|
+
result.endpoint,
|
|
495
|
+
result.artifact.kind,
|
|
496
|
+
`${result.artifact.packageName}@${result.artifact.packageVersion}`,
|
|
497
|
+
result.observedAt,
|
|
498
|
+
result.expiresAt,
|
|
499
|
+
result.required ? "yes" : "no"
|
|
500
|
+
].map((value) => escapeMarkdown(String(value))).join(" | ")} |`);
|
|
501
|
+
}
|
|
502
|
+
lines.push("", "Skipped results are not certifications. Stale or failed required evidence fails closed.", "");
|
|
503
|
+
return lines.join("\n");
|
|
504
|
+
};
|
|
505
|
+
//# sourceMappingURL=provider-conformance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-conformance.js","sourceRoot":"","sources":["../src/provider-conformance.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -1289,6 +1289,18 @@ export interface AgentStepResponse {
|
|
|
1289
1289
|
providerFinishReason?: string;
|
|
1290
1290
|
usage?: TokenUsage;
|
|
1291
1291
|
}
|
|
1292
|
+
export type ProviderToolCallErrorReason = "empty_arguments" | "invalid_json" | "arguments_too_large" | "incomplete_arguments" | "inconsistent_metadata" | "response_failed" | "response_incomplete" | "stream_truncated";
|
|
1293
|
+
/** Sanitized, durable projection of an agent failure. */
|
|
1294
|
+
export interface AgentRunError {
|
|
1295
|
+
message: string;
|
|
1296
|
+
diagnosticCode?: string;
|
|
1297
|
+
category?: "provider-tool-call";
|
|
1298
|
+
provider?: string;
|
|
1299
|
+
transport?: string;
|
|
1300
|
+
reason?: ProviderToolCallErrorReason;
|
|
1301
|
+
retryable?: boolean;
|
|
1302
|
+
effectsPossible?: boolean;
|
|
1303
|
+
}
|
|
1292
1304
|
export interface AgentStep {
|
|
1293
1305
|
index: number;
|
|
1294
1306
|
status: AgentStepStatus;
|
|
@@ -1297,9 +1309,7 @@ export interface AgentStep {
|
|
|
1297
1309
|
request: AgentStepRequest;
|
|
1298
1310
|
response?: AgentStepResponse;
|
|
1299
1311
|
toolResults: ToolExecutionResult[];
|
|
1300
|
-
error?:
|
|
1301
|
-
message: string;
|
|
1302
|
-
};
|
|
1312
|
+
error?: AgentRunError;
|
|
1303
1313
|
}
|
|
1304
1314
|
export interface AgentChildRun {
|
|
1305
1315
|
runId: string;
|
|
@@ -1315,9 +1325,7 @@ export interface AgentChildRun {
|
|
|
1315
1325
|
usage?: TokenUsage;
|
|
1316
1326
|
startedAt?: number;
|
|
1317
1327
|
updatedAt?: number;
|
|
1318
|
-
error?:
|
|
1319
|
-
message: string;
|
|
1320
|
-
};
|
|
1328
|
+
error?: AgentRunError;
|
|
1321
1329
|
metadata?: Record<string, JsonValue>;
|
|
1322
1330
|
/** Durable child state retained only while the parent must resume a child approval. */
|
|
1323
1331
|
resumeState?: AgentRunState;
|
|
@@ -1368,9 +1376,7 @@ export interface AgentRunState {
|
|
|
1368
1376
|
updatedAt?: number;
|
|
1369
1377
|
cancelledAt?: number;
|
|
1370
1378
|
cancellationReason?: string;
|
|
1371
|
-
error?:
|
|
1372
|
-
message: string;
|
|
1373
|
-
};
|
|
1379
|
+
error?: AgentRunError;
|
|
1374
1380
|
}
|
|
1375
1381
|
/**
|
|
1376
1382
|
* Logical isolation boundary for durable agent data. Applications should use
|
|
@@ -1847,9 +1853,7 @@ export interface AgentRunOutput<TOutput = unknown> {
|
|
|
1847
1853
|
steps: AgentStep[];
|
|
1848
1854
|
toolResults: ToolExecutionResult[];
|
|
1849
1855
|
state: AgentRunState;
|
|
1850
|
-
error?:
|
|
1851
|
-
message: string;
|
|
1852
|
-
};
|
|
1856
|
+
error?: AgentRunError;
|
|
1853
1857
|
}
|
|
1854
1858
|
export interface AgentSubAgentDefinition<TModel extends LanguageModel = LanguageModel> {
|
|
1855
1859
|
agent: AgentDefinition<TModel>;
|
|
@@ -1939,9 +1943,7 @@ export interface LiveAgentRunOutput {
|
|
|
1939
1943
|
messages: ModelMessage[];
|
|
1940
1944
|
toolResults: ToolExecutionResult[];
|
|
1941
1945
|
state: AgentRunState;
|
|
1942
|
-
error?:
|
|
1943
|
-
message: string;
|
|
1944
|
-
};
|
|
1946
|
+
error?: AgentRunError;
|
|
1945
1947
|
}
|
|
1946
1948
|
export interface AgentStreamResult<TOutput = unknown> {
|
|
1947
1949
|
eventStream: AsyncIterable<AgentStreamEvent>;
|