agentverify 1.0.0 → 1.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.
- package/README.md +6 -5
- package/dist/{chunk-JWWQ7MRK.mjs → chunk-YOD7H7MC.mjs} +2 -2
- package/dist/cli.js +26 -24
- package/dist/cli.mjs +25 -23
- package/dist/sdk.d.mts +3 -3
- package/dist/sdk.d.ts +3 -3
- package/dist/sdk.js +2 -2
- package/dist/sdk.mjs +1 -1
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -15,7 +15,7 @@ npm install -g agentverify
|
|
|
15
15
|
### Scan a directory
|
|
16
16
|
|
|
17
17
|
```bash
|
|
18
|
-
agentverify scan ./agents --key
|
|
18
|
+
agentverify scan ./agents --key YOUR_KEY
|
|
19
19
|
```
|
|
20
20
|
|
|
21
21
|
### Scan a single file
|
|
@@ -51,9 +51,9 @@ const result = await scan(
|
|
|
51
51
|
{ apiKey: process.env.AGENTVERIFY_API_KEY }
|
|
52
52
|
)
|
|
53
53
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
54
|
+
result.verdict // 'VERIFIED' | 'NOT VERIFIED'
|
|
55
|
+
result.riskScore // 0-100
|
|
56
|
+
result.findings // Array of security findings
|
|
57
57
|
```
|
|
58
58
|
|
|
59
59
|
### Scan multiple files
|
|
@@ -79,8 +79,9 @@ const results = await scanMany(
|
|
|
79
79
|
|
|
80
80
|
## Get your API key
|
|
81
81
|
|
|
82
|
-
Sign up at https://agentverify
|
|
82
|
+
Sign up at https://aimodularity.com/agentverify/dashboard and go to Dashboard -> API
|
|
83
83
|
|
|
84
84
|
## License
|
|
85
85
|
|
|
86
86
|
MIT — AI Blockchain Ventures LLC
|
|
87
|
+
hello@aiblockchainventures.com
|
|
@@ -5,7 +5,7 @@ async function scan(input, options) {
|
|
|
5
5
|
const { apiKey, apiUrl = DEFAULT_API_URL, timeout = DEFAULT_TIMEOUT } = options;
|
|
6
6
|
if (!apiKey) {
|
|
7
7
|
throw new Error(
|
|
8
|
-
"API key required. Generate one at https://
|
|
8
|
+
"API key required. Generate one at https://aimodularity.com/agentverify/dashboard"
|
|
9
9
|
);
|
|
10
10
|
}
|
|
11
11
|
if (!input.content || input.content.trim().length === 0) {
|
|
@@ -30,7 +30,7 @@ async function scan(input, options) {
|
|
|
30
30
|
});
|
|
31
31
|
if (response.status === 401) {
|
|
32
32
|
throw new Error(
|
|
33
|
-
"Invalid API key. Generate one at https://
|
|
33
|
+
"Invalid API key. Generate one at https://aimodularity.com/agentverify/dashboard"
|
|
34
34
|
);
|
|
35
35
|
}
|
|
36
36
|
if (response.status === 400) {
|
package/dist/cli.js
CHANGED
|
@@ -12,7 +12,7 @@ async function scan(input, options) {
|
|
|
12
12
|
const { apiKey, apiUrl = DEFAULT_API_URL, timeout = DEFAULT_TIMEOUT } = options;
|
|
13
13
|
if (!apiKey) {
|
|
14
14
|
throw new Error(
|
|
15
|
-
"API key required. Generate one at https://
|
|
15
|
+
"API key required. Generate one at https://aimodularity.com/agentverify/dashboard"
|
|
16
16
|
);
|
|
17
17
|
}
|
|
18
18
|
if (!input.content || input.content.trim().length === 0) {
|
|
@@ -37,7 +37,7 @@ async function scan(input, options) {
|
|
|
37
37
|
});
|
|
38
38
|
if (response.status === 401) {
|
|
39
39
|
throw new Error(
|
|
40
|
-
"Invalid API key. Generate one at https://
|
|
40
|
+
"Invalid API key. Generate one at https://aimodularity.com/agentverify/dashboard"
|
|
41
41
|
);
|
|
42
42
|
}
|
|
43
43
|
if (response.status === 400) {
|
|
@@ -60,7 +60,7 @@ async function scan(input, options) {
|
|
|
60
60
|
}
|
|
61
61
|
|
|
62
62
|
// src/cli.ts
|
|
63
|
-
var VERSION = "1.
|
|
63
|
+
var VERSION = "1.1.0";
|
|
64
64
|
var API_URL = "https://agentverify-api.agentverify.workers.dev/v1/scan";
|
|
65
65
|
var c = {
|
|
66
66
|
reset: "\x1B[0m",
|
|
@@ -73,6 +73,8 @@ var c = {
|
|
|
73
73
|
white: "\x1B[37m",
|
|
74
74
|
gray: "\x1B[90m"
|
|
75
75
|
};
|
|
76
|
+
var write = (value = "") => process.stdout.write(`${value}
|
|
77
|
+
`);
|
|
76
78
|
var SUPPORTED_EXTENSIONS = /* @__PURE__ */ new Set([".js", ".ts", ".py", ".json", ".yaml", ".yml", ".md", ".mjs", ".cjs"]);
|
|
77
79
|
var SKIP_DIRS = /* @__PURE__ */ new Set(["node_modules", ".git", "dist", "build", ".next", "vendor", "coverage", ".cache"]);
|
|
78
80
|
function collectFiles(dir) {
|
|
@@ -125,7 +127,7 @@ function parseArgs(argv) {
|
|
|
125
127
|
return result;
|
|
126
128
|
}
|
|
127
129
|
function printHelp() {
|
|
128
|
-
|
|
130
|
+
write(`
|
|
129
131
|
${c.bold}${c.cyan}Agent Verify${c.reset} ${c.gray}v${VERSION}${c.reset}
|
|
130
132
|
${c.gray}Execution trust analysis for AI agents${c.reset}
|
|
131
133
|
|
|
@@ -157,7 +159,7 @@ ${c.bold}Examples:${c.reset}
|
|
|
157
159
|
agentverify scan . --key av_your_key --json
|
|
158
160
|
|
|
159
161
|
${c.bold}Get your API key:${c.reset}
|
|
160
|
-
https://
|
|
162
|
+
https://aimodularity.com/agentverify/dashboard
|
|
161
163
|
|
|
162
164
|
${c.bold}Docs:${c.reset}
|
|
163
165
|
https://github.com/AI-Blockchain-Ventures/agentverify
|
|
@@ -170,9 +172,9 @@ function printVerdict(result, fileName) {
|
|
|
170
172
|
const score = verified ? `${c.green}${result.riskScore}/100${c.reset}` : result.riskScore >= 50 ? `${c.yellow}${result.riskScore}/100${c.reset}` : `${c.red}${result.riskScore}/100${c.reset}`;
|
|
171
173
|
const findings = result.findings.length > 0 ? `${c.gray}\u2014 ${result.findings.length} finding${result.findings.length === 1 ? "" : "s"}${c.reset}` : "";
|
|
172
174
|
const name = fileName.padEnd(30);
|
|
173
|
-
|
|
175
|
+
write(` ${icon} ${verdict} ${name} score: ${score} ${findings}`);
|
|
174
176
|
if (result.saved && result.reportId) {
|
|
175
|
-
|
|
177
|
+
write(` ${c.gray}\u2192 Report: https://aimodularity.com/agentverify/report?id=${result.reportId}${c.reset}`);
|
|
176
178
|
}
|
|
177
179
|
}
|
|
178
180
|
async function runScan(args) {
|
|
@@ -181,7 +183,7 @@ async function runScan(args) {
|
|
|
181
183
|
${c.red}Error:${c.reset} API key required
|
|
182
184
|
`);
|
|
183
185
|
console.error(` Set with --key av_your_key or AGENTVERIFY_API_KEY env var`);
|
|
184
|
-
console.error(` Get your key at https://
|
|
186
|
+
console.error(` Get your key at https://aimodularity.com/agentverify/dashboard
|
|
185
187
|
`);
|
|
186
188
|
process.exit(1);
|
|
187
189
|
}
|
|
@@ -190,14 +192,14 @@ ${c.red}Error:${c.reset} API key required
|
|
|
190
192
|
files = [args.file];
|
|
191
193
|
} else {
|
|
192
194
|
const dir = args.dir;
|
|
193
|
-
|
|
195
|
+
write(`
|
|
194
196
|
${c.bold}Agent Verify${c.reset} ${c.gray}v${VERSION}${c.reset}`);
|
|
195
|
-
|
|
197
|
+
write(`${c.gray}Scanning ${dir}...${c.reset}
|
|
196
198
|
`);
|
|
197
199
|
files = collectFiles(dir);
|
|
198
200
|
if (files.length === 0) {
|
|
199
|
-
|
|
200
|
-
|
|
201
|
+
write(`${c.yellow}No agent files found in ${dir}${c.reset}`);
|
|
202
|
+
write(`${c.gray}Supported: .js .ts .py .json .yaml .yml .md${c.reset}
|
|
201
203
|
`);
|
|
202
204
|
process.exit(0);
|
|
203
205
|
}
|
|
@@ -233,7 +235,7 @@ ${c.bold}Agent Verify${c.reset} ${c.gray}v${VERSION}${c.reset}`);
|
|
|
233
235
|
const relPath = (0, import_path.relative)(args.dir, filePath);
|
|
234
236
|
const errMsg = outcome.reason instanceof Error ? outcome.reason.message : String(outcome.reason);
|
|
235
237
|
if (!args.json) {
|
|
236
|
-
|
|
238
|
+
write(` ${c.yellow}\u26A0${c.reset} ${c.yellow}WARNING${c.reset} ${relPath.padEnd(30)} ${c.gray}${errMsg}${c.reset}`);
|
|
237
239
|
}
|
|
238
240
|
jsonResults.push({ file: relPath, result: null, error: errMsg });
|
|
239
241
|
errors++;
|
|
@@ -241,26 +243,26 @@ ${c.bold}Agent Verify${c.reset} ${c.gray}v${VERSION}${c.reset}`);
|
|
|
241
243
|
}
|
|
242
244
|
}
|
|
243
245
|
if (args.json) {
|
|
244
|
-
|
|
246
|
+
write(JSON.stringify({ results: jsonResults, summary: { total: files.length, verified, notVerified, errors } }, null, 2));
|
|
245
247
|
return;
|
|
246
248
|
}
|
|
247
|
-
|
|
249
|
+
write(`
|
|
248
250
|
${c.gray}${"\u2500".repeat(60)}${c.reset}`);
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
if (notVerified > 0)
|
|
253
|
-
if (errors > 0)
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
${c.gray}View reports: https://
|
|
251
|
+
write(`${c.bold}Agent Verify Scan Complete${c.reset}`);
|
|
252
|
+
write(`${c.gray}Files scanned:${c.reset} ${files.length}`);
|
|
253
|
+
write(`${c.green}Verified:${c.reset} ${verified}`);
|
|
254
|
+
if (notVerified > 0) write(`${c.red}Not Verified:${c.reset} ${notVerified}`);
|
|
255
|
+
if (errors > 0) write(`${c.yellow}Errors:${c.reset} ${errors}`);
|
|
256
|
+
write(`${c.gray}${"\u2500".repeat(60)}${c.reset}`);
|
|
257
|
+
write(`
|
|
258
|
+
${c.gray}View reports: https://aimodularity.com/agentverify/dashboard${c.reset}
|
|
257
259
|
`);
|
|
258
260
|
if (notVerified > 0) process.exit(1);
|
|
259
261
|
}
|
|
260
262
|
async function main() {
|
|
261
263
|
const args = parseArgs(process.argv);
|
|
262
264
|
if (args.version) {
|
|
263
|
-
|
|
265
|
+
write(`agentverify v${VERSION}`);
|
|
264
266
|
process.exit(0);
|
|
265
267
|
}
|
|
266
268
|
if (args.help || !args.command) {
|
package/dist/cli.mjs
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
scan
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-YOD7H7MC.mjs";
|
|
5
5
|
|
|
6
6
|
// src/cli.ts
|
|
7
7
|
import { readFileSync, readdirSync, statSync } from "fs";
|
|
8
8
|
import { join, relative, extname } from "path";
|
|
9
|
-
var VERSION = "1.
|
|
9
|
+
var VERSION = "1.1.0";
|
|
10
10
|
var API_URL = "https://agentverify-api.agentverify.workers.dev/v1/scan";
|
|
11
11
|
var c = {
|
|
12
12
|
reset: "\x1B[0m",
|
|
@@ -19,6 +19,8 @@ var c = {
|
|
|
19
19
|
white: "\x1B[37m",
|
|
20
20
|
gray: "\x1B[90m"
|
|
21
21
|
};
|
|
22
|
+
var write = (value = "") => process.stdout.write(`${value}
|
|
23
|
+
`);
|
|
22
24
|
var SUPPORTED_EXTENSIONS = /* @__PURE__ */ new Set([".js", ".ts", ".py", ".json", ".yaml", ".yml", ".md", ".mjs", ".cjs"]);
|
|
23
25
|
var SKIP_DIRS = /* @__PURE__ */ new Set(["node_modules", ".git", "dist", "build", ".next", "vendor", "coverage", ".cache"]);
|
|
24
26
|
function collectFiles(dir) {
|
|
@@ -71,7 +73,7 @@ function parseArgs(argv) {
|
|
|
71
73
|
return result;
|
|
72
74
|
}
|
|
73
75
|
function printHelp() {
|
|
74
|
-
|
|
76
|
+
write(`
|
|
75
77
|
${c.bold}${c.cyan}Agent Verify${c.reset} ${c.gray}v${VERSION}${c.reset}
|
|
76
78
|
${c.gray}Execution trust analysis for AI agents${c.reset}
|
|
77
79
|
|
|
@@ -103,7 +105,7 @@ ${c.bold}Examples:${c.reset}
|
|
|
103
105
|
agentverify scan . --key av_your_key --json
|
|
104
106
|
|
|
105
107
|
${c.bold}Get your API key:${c.reset}
|
|
106
|
-
https://
|
|
108
|
+
https://aimodularity.com/agentverify/dashboard
|
|
107
109
|
|
|
108
110
|
${c.bold}Docs:${c.reset}
|
|
109
111
|
https://github.com/AI-Blockchain-Ventures/agentverify
|
|
@@ -116,9 +118,9 @@ function printVerdict(result, fileName) {
|
|
|
116
118
|
const score = verified ? `${c.green}${result.riskScore}/100${c.reset}` : result.riskScore >= 50 ? `${c.yellow}${result.riskScore}/100${c.reset}` : `${c.red}${result.riskScore}/100${c.reset}`;
|
|
117
119
|
const findings = result.findings.length > 0 ? `${c.gray}\u2014 ${result.findings.length} finding${result.findings.length === 1 ? "" : "s"}${c.reset}` : "";
|
|
118
120
|
const name = fileName.padEnd(30);
|
|
119
|
-
|
|
121
|
+
write(` ${icon} ${verdict} ${name} score: ${score} ${findings}`);
|
|
120
122
|
if (result.saved && result.reportId) {
|
|
121
|
-
|
|
123
|
+
write(` ${c.gray}\u2192 Report: https://aimodularity.com/agentverify/report?id=${result.reportId}${c.reset}`);
|
|
122
124
|
}
|
|
123
125
|
}
|
|
124
126
|
async function runScan(args) {
|
|
@@ -127,7 +129,7 @@ async function runScan(args) {
|
|
|
127
129
|
${c.red}Error:${c.reset} API key required
|
|
128
130
|
`);
|
|
129
131
|
console.error(` Set with --key av_your_key or AGENTVERIFY_API_KEY env var`);
|
|
130
|
-
console.error(` Get your key at https://
|
|
132
|
+
console.error(` Get your key at https://aimodularity.com/agentverify/dashboard
|
|
131
133
|
`);
|
|
132
134
|
process.exit(1);
|
|
133
135
|
}
|
|
@@ -136,14 +138,14 @@ ${c.red}Error:${c.reset} API key required
|
|
|
136
138
|
files = [args.file];
|
|
137
139
|
} else {
|
|
138
140
|
const dir = args.dir;
|
|
139
|
-
|
|
141
|
+
write(`
|
|
140
142
|
${c.bold}Agent Verify${c.reset} ${c.gray}v${VERSION}${c.reset}`);
|
|
141
|
-
|
|
143
|
+
write(`${c.gray}Scanning ${dir}...${c.reset}
|
|
142
144
|
`);
|
|
143
145
|
files = collectFiles(dir);
|
|
144
146
|
if (files.length === 0) {
|
|
145
|
-
|
|
146
|
-
|
|
147
|
+
write(`${c.yellow}No agent files found in ${dir}${c.reset}`);
|
|
148
|
+
write(`${c.gray}Supported: .js .ts .py .json .yaml .yml .md${c.reset}
|
|
147
149
|
`);
|
|
148
150
|
process.exit(0);
|
|
149
151
|
}
|
|
@@ -179,7 +181,7 @@ ${c.bold}Agent Verify${c.reset} ${c.gray}v${VERSION}${c.reset}`);
|
|
|
179
181
|
const relPath = relative(args.dir, filePath);
|
|
180
182
|
const errMsg = outcome.reason instanceof Error ? outcome.reason.message : String(outcome.reason);
|
|
181
183
|
if (!args.json) {
|
|
182
|
-
|
|
184
|
+
write(` ${c.yellow}\u26A0${c.reset} ${c.yellow}WARNING${c.reset} ${relPath.padEnd(30)} ${c.gray}${errMsg}${c.reset}`);
|
|
183
185
|
}
|
|
184
186
|
jsonResults.push({ file: relPath, result: null, error: errMsg });
|
|
185
187
|
errors++;
|
|
@@ -187,26 +189,26 @@ ${c.bold}Agent Verify${c.reset} ${c.gray}v${VERSION}${c.reset}`);
|
|
|
187
189
|
}
|
|
188
190
|
}
|
|
189
191
|
if (args.json) {
|
|
190
|
-
|
|
192
|
+
write(JSON.stringify({ results: jsonResults, summary: { total: files.length, verified, notVerified, errors } }, null, 2));
|
|
191
193
|
return;
|
|
192
194
|
}
|
|
193
|
-
|
|
195
|
+
write(`
|
|
194
196
|
${c.gray}${"\u2500".repeat(60)}${c.reset}`);
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
if (notVerified > 0)
|
|
199
|
-
if (errors > 0)
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
${c.gray}View reports: https://
|
|
197
|
+
write(`${c.bold}Agent Verify Scan Complete${c.reset}`);
|
|
198
|
+
write(`${c.gray}Files scanned:${c.reset} ${files.length}`);
|
|
199
|
+
write(`${c.green}Verified:${c.reset} ${verified}`);
|
|
200
|
+
if (notVerified > 0) write(`${c.red}Not Verified:${c.reset} ${notVerified}`);
|
|
201
|
+
if (errors > 0) write(`${c.yellow}Errors:${c.reset} ${errors}`);
|
|
202
|
+
write(`${c.gray}${"\u2500".repeat(60)}${c.reset}`);
|
|
203
|
+
write(`
|
|
204
|
+
${c.gray}View reports: https://aimodularity.com/agentverify/dashboard${c.reset}
|
|
203
205
|
`);
|
|
204
206
|
if (notVerified > 0) process.exit(1);
|
|
205
207
|
}
|
|
206
208
|
async function main() {
|
|
207
209
|
const args = parseArgs(process.argv);
|
|
208
210
|
if (args.version) {
|
|
209
|
-
|
|
211
|
+
write(`agentverify v${VERSION}`);
|
|
210
212
|
process.exit(0);
|
|
211
213
|
}
|
|
212
214
|
if (args.help || !args.command) {
|
package/dist/sdk.d.mts
CHANGED
|
@@ -39,9 +39,9 @@ interface ScanOptions {
|
|
|
39
39
|
* { apiKey: process.env.AGENTVERIFY_API_KEY }
|
|
40
40
|
* )
|
|
41
41
|
*
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
*
|
|
42
|
+
* result.verdict // 'VERIFIED' | 'NOT VERIFIED'
|
|
43
|
+
* result.riskScore // 0-100
|
|
44
|
+
* result.findings // Array of findings
|
|
45
45
|
*/
|
|
46
46
|
declare function scan(input: ScanInput, options: ScanOptions): Promise<ScanResult>;
|
|
47
47
|
/**
|
package/dist/sdk.d.ts
CHANGED
|
@@ -39,9 +39,9 @@ interface ScanOptions {
|
|
|
39
39
|
* { apiKey: process.env.AGENTVERIFY_API_KEY }
|
|
40
40
|
* )
|
|
41
41
|
*
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
*
|
|
42
|
+
* result.verdict // 'VERIFIED' | 'NOT VERIFIED'
|
|
43
|
+
* result.riskScore // 0-100
|
|
44
|
+
* result.findings // Array of findings
|
|
45
45
|
*/
|
|
46
46
|
declare function scan(input: ScanInput, options: ScanOptions): Promise<ScanResult>;
|
|
47
47
|
/**
|
package/dist/sdk.js
CHANGED
|
@@ -30,7 +30,7 @@ async function scan(input, options) {
|
|
|
30
30
|
const { apiKey, apiUrl = DEFAULT_API_URL, timeout = DEFAULT_TIMEOUT } = options;
|
|
31
31
|
if (!apiKey) {
|
|
32
32
|
throw new Error(
|
|
33
|
-
"API key required. Generate one at https://
|
|
33
|
+
"API key required. Generate one at https://aimodularity.com/agentverify/dashboard"
|
|
34
34
|
);
|
|
35
35
|
}
|
|
36
36
|
if (!input.content || input.content.trim().length === 0) {
|
|
@@ -55,7 +55,7 @@ async function scan(input, options) {
|
|
|
55
55
|
});
|
|
56
56
|
if (response.status === 401) {
|
|
57
57
|
throw new Error(
|
|
58
|
-
"Invalid API key. Generate one at https://
|
|
58
|
+
"Invalid API key. Generate one at https://aimodularity.com/agentverify/dashboard"
|
|
59
59
|
);
|
|
60
60
|
}
|
|
61
61
|
if (response.status === 400) {
|
package/dist/sdk.mjs
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agentverify",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"description": "CLI and SDK for Agent Verify — execution trust analysis for AI agents",
|
|
5
5
|
"bin": {
|
|
6
6
|
"agentverify": "./dist/cli.js"
|
|
@@ -27,13 +27,13 @@
|
|
|
27
27
|
"ai", "agents", "security", "verification", "a2spa",
|
|
28
28
|
"agent-security", "llm", "ai-safety", "cli"
|
|
29
29
|
],
|
|
30
|
-
"author": "AI Blockchain Ventures LLC",
|
|
30
|
+
"author": "AI Blockchain Ventures LLC <hello@aiblockchainventures.com>",
|
|
31
31
|
"license": "MIT",
|
|
32
32
|
"repository": {
|
|
33
33
|
"type": "git",
|
|
34
34
|
"url": "https://github.com/AI-Blockchain-Ventures/agentverify"
|
|
35
35
|
},
|
|
36
|
-
"homepage": "https://agentverify
|
|
36
|
+
"homepage": "https://aimodularity.com/agentverify",
|
|
37
37
|
"devDependencies": {
|
|
38
38
|
"tsup": "^8.0.0",
|
|
39
39
|
"typescript": "^5.0.0",
|