agentcert 0.1.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.
@@ -0,0 +1,150 @@
1
+ export function parseSchemaId(input) {
2
+ const value = input ?? "evidence-bundle";
3
+ if (value === "evidence-bundle" ||
4
+ value === "result" ||
5
+ value === "corpus-record" ||
6
+ value === "failure-review" ||
7
+ value === "classifier-eval" ||
8
+ value === "monitor-snapshot" ||
9
+ value === "robustness-lab") {
10
+ return value;
11
+ }
12
+ throw new Error(`Unsupported schema "${value}". Use evidence-bundle, result, corpus-record, failure-review, classifier-eval, monitor-snapshot, or robustness-lab.`);
13
+ }
14
+ export function validateAgentCertSchema(schema, input) {
15
+ const errors = [];
16
+ const value = object(input, "$", errors);
17
+ if (value) {
18
+ if (schema === "evidence-bundle")
19
+ validateEvidenceBundle(value, errors);
20
+ if (schema === "result")
21
+ validateResult(value, errors);
22
+ if (schema === "corpus-record")
23
+ validateCorpusRecord(value, errors);
24
+ if (schema === "failure-review")
25
+ validateFailureReview(value, errors);
26
+ if (schema === "classifier-eval")
27
+ validateClassifierEval(value, errors);
28
+ if (schema === "monitor-snapshot")
29
+ validateMonitorSnapshot(value, errors);
30
+ if (schema === "robustness-lab")
31
+ validateRobustnessLab(value, errors);
32
+ }
33
+ return { schema, valid: errors.length === 0, errors };
34
+ }
35
+ function validateEvidenceBundle(value, errors) {
36
+ requiredConst(value, "schemaName", "agentcert.evidence_bundle", errors);
37
+ requiredConst(value, "schemaVersion", "1", errors);
38
+ requiredConst(value, "schemaSemver", "1.0.0", errors);
39
+ requiredConst(value, "kind", "agentcert.evidence_bundle", errors);
40
+ requiredString(value, "runId", errors);
41
+ requiredString(value, "generatedAt", errors);
42
+ requiredObject(value, "subject", errors);
43
+ requiredObject(value, "verdict", errors);
44
+ requiredObject(value, "summary", errors);
45
+ requiredArray(value, "results", errors);
46
+ requiredArray(value, "evidence", errors);
47
+ requiredObject(value, "artifacts", errors);
48
+ requiredArray(value, "standards", errors);
49
+ }
50
+ function validateResult(value, errors) {
51
+ requiredConst(value, "schemaVersion", "1", errors);
52
+ requiredEnum(value, "product", ["mcpbench", "tripwire-ci", "onegent-runtime", "agentcert-cli"], errors);
53
+ requiredString(value, "runId", errors);
54
+ requiredString(value, "timestamp", errors);
55
+ requiredEnum(value, "phase", ["pre-release", "runtime"], errors);
56
+ requiredNumber(value, "score", errors);
57
+ requiredBoolean(value, "passed", errors);
58
+ requiredObject(value, "artifacts", errors);
59
+ requiredArray(value, "evidence", errors);
60
+ }
61
+ function validateCorpusRecord(value, errors) {
62
+ requiredConst(value, "schemaVersion", "1", errors);
63
+ requiredEnum(value, "kind", ["product_run", "scenario_run"], errors);
64
+ requiredString(value, "id", errors);
65
+ requiredString(value, "subject", errors);
66
+ requiredString(value, "agentName", errors);
67
+ requiredString(value, "agentVersion", errors);
68
+ requiredString(value, "runId", errors);
69
+ requiredBoolean(value, "passed", errors);
70
+ requiredArray(value, "failurePatterns", errors);
71
+ }
72
+ function validateFailureReview(value, errors) {
73
+ requiredConst(value, "schemaVersion", "1", errors);
74
+ requiredConst(value, "kind", "agentcert.failure_review", errors);
75
+ requiredString(value, "id", errors);
76
+ requiredString(value, "reviewedAt", errors);
77
+ requiredString(value, "reviewer", errors);
78
+ requiredEnum(value, "status", ["confirmed", "corrected"], errors);
79
+ requiredObject(value, "target", errors);
80
+ requiredString(value, "type", errors);
81
+ }
82
+ function validateClassifierEval(value, errors) {
83
+ requiredConst(value, "schemaVersion", "1", errors);
84
+ requiredConst(value, "kind", "agentcert.failure_classifier_evaluation", errors);
85
+ requiredNumber(value, "reviewedRows", errors);
86
+ requiredNumber(value, "correctRows", errors);
87
+ requiredNumber(value, "incorrectRows", errors);
88
+ requiredNumber(value, "precision", errors);
89
+ requiredNumber(value, "coverage", errors);
90
+ requiredArray(value, "byType", errors);
91
+ requiredArray(value, "confusion", errors);
92
+ }
93
+ function validateMonitorSnapshot(value, errors) {
94
+ requiredConst(value, "schemaVersion", "1", errors);
95
+ requiredConst(value, "kind", "agentcert.monitor_snapshot", errors);
96
+ requiredString(value, "generatedAt", errors);
97
+ requiredString(value, "subject", errors);
98
+ requiredObject(value, "summary", errors);
99
+ requiredObject(value, "filters", errors);
100
+ requiredArray(value, "lifecycle", errors);
101
+ requiredArray(value, "recentRuns", errors);
102
+ requiredArray(value, "failurePatterns", errors);
103
+ }
104
+ function validateRobustnessLab(value, errors) {
105
+ requiredConst(value, "schemaVersion", "1", errors);
106
+ requiredConst(value, "kind", "agentcert.real_agent_robustness_lab", errors);
107
+ requiredString(value, "generatedAt", errors);
108
+ requiredString(value, "name", errors);
109
+ requiredObject(value, "summary", errors);
110
+ requiredArray(value, "agents", errors);
111
+ requiredArray(value, "faults", errors);
112
+ requiredArray(value, "matrix", errors);
113
+ requiredArray(value, "limitations", errors);
114
+ }
115
+ function object(input, path, errors) {
116
+ if (!input || typeof input !== "object" || Array.isArray(input)) {
117
+ errors.push(`${path} must be an object.`);
118
+ return undefined;
119
+ }
120
+ return input;
121
+ }
122
+ function requiredConst(input, key, expected, errors) {
123
+ if (input[key] !== expected)
124
+ errors.push(`${key} must be ${JSON.stringify(expected)}.`);
125
+ }
126
+ function requiredString(input, key, errors) {
127
+ if (typeof input[key] !== "string" || input[key] === "")
128
+ errors.push(`${key} must be a non-empty string.`);
129
+ }
130
+ function requiredNumber(input, key, errors) {
131
+ if (typeof input[key] !== "number" || !Number.isFinite(input[key]))
132
+ errors.push(`${key} must be a finite number.`);
133
+ }
134
+ function requiredBoolean(input, key, errors) {
135
+ if (typeof input[key] !== "boolean")
136
+ errors.push(`${key} must be a boolean.`);
137
+ }
138
+ function requiredArray(input, key, errors) {
139
+ if (!Array.isArray(input[key]))
140
+ errors.push(`${key} must be an array.`);
141
+ }
142
+ function requiredObject(input, key, errors) {
143
+ if (!input[key] || typeof input[key] !== "object" || Array.isArray(input[key]))
144
+ errors.push(`${key} must be an object.`);
145
+ }
146
+ function requiredEnum(input, key, values, errors) {
147
+ if (typeof input[key] !== "string" || !values.includes(input[key])) {
148
+ errors.push(`${key} must be one of: ${values.join(", ")}.`);
149
+ }
150
+ }
package/dist/types.js ADDED
@@ -0,0 +1 @@
1
+ export {};
package/package.json ADDED
@@ -0,0 +1,31 @@
1
+ {
2
+ "name": "agentcert",
3
+ "version": "0.1.0",
4
+ "description": "Unified AgentCert evidence packet and report CLI.",
5
+ "type": "module",
6
+ "bin": {
7
+ "agentcert": "dist/cli.js"
8
+ },
9
+ "files": [
10
+ "dist",
11
+ "README.md",
12
+ "package.json"
13
+ ],
14
+ "scripts": {
15
+ "build": "node -e \"require('fs').rmSync('dist',{recursive:true,force:true})\" && tsc -p tsconfig.json",
16
+ "prepack": "npm run build",
17
+ "test": "vitest run tests",
18
+ "demo:report": "node dist/cli.js report --mcpbench ../../examples/reports/passing/results.json --out .agentcert/demo --subject demo-agent"
19
+ },
20
+ "engines": {
21
+ "node": ">=20"
22
+ },
23
+ "devDependencies": {
24
+ "@types/node": "^24.10.1",
25
+ "typescript": "^5.9.3",
26
+ "vitest": "^4.0.13"
27
+ },
28
+ "optionalDependencies": {
29
+ "pg": "^8.16.3"
30
+ }
31
+ }