opmsec 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.
Files changed (57) hide show
  1. package/.env.example +14 -0
  2. package/.pnp.cjs +9953 -0
  3. package/.pnp.loader.mjs +2126 -0
  4. package/README.md +266 -0
  5. package/bun.lock +620 -0
  6. package/bunfig.toml +6 -0
  7. package/docker-compose.yml +10 -0
  8. package/package.json +39 -0
  9. package/packages/cli/package.json +7 -0
  10. package/packages/cli/src/commands/audit.tsx +142 -0
  11. package/packages/cli/src/commands/author-view.tsx +247 -0
  12. package/packages/cli/src/commands/info.tsx +109 -0
  13. package/packages/cli/src/commands/install.tsx +362 -0
  14. package/packages/cli/src/commands/passthrough.tsx +36 -0
  15. package/packages/cli/src/commands/push.tsx +321 -0
  16. package/packages/cli/src/components/AgentScores.tsx +32 -0
  17. package/packages/cli/src/components/AuthorInfo.tsx +45 -0
  18. package/packages/cli/src/components/Header.tsx +24 -0
  19. package/packages/cli/src/components/PackageCard.tsx +48 -0
  20. package/packages/cli/src/components/RiskBadge.tsx +32 -0
  21. package/packages/cli/src/components/ScanReport.tsx +50 -0
  22. package/packages/cli/src/components/StatusLine.tsx +30 -0
  23. package/packages/cli/src/index.tsx +111 -0
  24. package/packages/cli/src/services/avatar.ts +10 -0
  25. package/packages/cli/src/services/chainpatrol.ts +25 -0
  26. package/packages/cli/src/services/contract.ts +182 -0
  27. package/packages/cli/src/services/ens.ts +143 -0
  28. package/packages/cli/src/services/fileverse.ts +36 -0
  29. package/packages/cli/src/services/osv.ts +141 -0
  30. package/packages/cli/src/services/signature.ts +22 -0
  31. package/packages/cli/src/services/version.ts +10 -0
  32. package/packages/contracts/contracts/OPMRegistry.sol +253 -0
  33. package/packages/contracts/hardhat.config.ts +32 -0
  34. package/packages/contracts/package-lock.json +7772 -0
  35. package/packages/contracts/package.json +10 -0
  36. package/packages/contracts/scripts/deploy.ts +28 -0
  37. package/packages/contracts/test/OPMRegistry.test.ts +101 -0
  38. package/packages/contracts/tsconfig.json +11 -0
  39. package/packages/core/package.json +7 -0
  40. package/packages/core/src/abi.ts +629 -0
  41. package/packages/core/src/constants.ts +30 -0
  42. package/packages/core/src/index.ts +5 -0
  43. package/packages/core/src/prompt.ts +111 -0
  44. package/packages/core/src/types.ts +104 -0
  45. package/packages/core/src/utils.ts +50 -0
  46. package/packages/scanner/package.json +6 -0
  47. package/packages/scanner/src/agents/agent-configs.ts +24 -0
  48. package/packages/scanner/src/agents/base-agent.ts +75 -0
  49. package/packages/scanner/src/index.ts +25 -0
  50. package/packages/scanner/src/queue/memory-queue.ts +91 -0
  51. package/packages/scanner/src/services/contract-writer.ts +34 -0
  52. package/packages/scanner/src/services/fileverse.ts +89 -0
  53. package/packages/scanner/src/services/npm-registry.ts +159 -0
  54. package/packages/scanner/src/services/openrouter.ts +86 -0
  55. package/packages/scanner/src/services/osv.ts +87 -0
  56. package/packages/scanner/src/services/report-formatter.ts +134 -0
  57. package/tsconfig.json +23 -0
@@ -0,0 +1,629 @@
1
+ export const OPM_REGISTRY_ABI = [
2
+ {
3
+ "inputs": [],
4
+ "stateMutability": "nonpayable",
5
+ "type": "constructor"
6
+ },
7
+ {
8
+ "anonymous": false,
9
+ "inputs": [
10
+ {
11
+ "indexed": false,
12
+ "internalType": "address",
13
+ "name": "agent",
14
+ "type": "address"
15
+ },
16
+ {
17
+ "indexed": false,
18
+ "internalType": "bool",
19
+ "name": "status",
20
+ "type": "bool"
21
+ }
22
+ ],
23
+ "name": "AgentAuthorized",
24
+ "type": "event"
25
+ },
26
+ {
27
+ "anonymous": false,
28
+ "inputs": [
29
+ {
30
+ "indexed": false,
31
+ "internalType": "address",
32
+ "name": "addr",
33
+ "type": "address"
34
+ },
35
+ {
36
+ "indexed": false,
37
+ "internalType": "string",
38
+ "name": "ensName",
39
+ "type": "string"
40
+ }
41
+ ],
42
+ "name": "AuthorRegistered",
43
+ "type": "event"
44
+ },
45
+ {
46
+ "anonymous": false,
47
+ "inputs": [
48
+ {
49
+ "indexed": false,
50
+ "internalType": "string",
51
+ "name": "name",
52
+ "type": "string"
53
+ },
54
+ {
55
+ "indexed": false,
56
+ "internalType": "string",
57
+ "name": "version",
58
+ "type": "string"
59
+ },
60
+ {
61
+ "indexed": false,
62
+ "internalType": "address",
63
+ "name": "author",
64
+ "type": "address"
65
+ },
66
+ {
67
+ "indexed": false,
68
+ "internalType": "string",
69
+ "name": "ensName",
70
+ "type": "string"
71
+ }
72
+ ],
73
+ "name": "PackageRegistered",
74
+ "type": "event"
75
+ },
76
+ {
77
+ "anonymous": false,
78
+ "inputs": [
79
+ {
80
+ "indexed": false,
81
+ "internalType": "string",
82
+ "name": "name",
83
+ "type": "string"
84
+ },
85
+ {
86
+ "indexed": false,
87
+ "internalType": "string",
88
+ "name": "version",
89
+ "type": "string"
90
+ },
91
+ {
92
+ "indexed": false,
93
+ "internalType": "string",
94
+ "name": "uri",
95
+ "type": "string"
96
+ }
97
+ ],
98
+ "name": "ReportURISet",
99
+ "type": "event"
100
+ },
101
+ {
102
+ "anonymous": false,
103
+ "inputs": [
104
+ {
105
+ "indexed": false,
106
+ "internalType": "string",
107
+ "name": "name",
108
+ "type": "string"
109
+ },
110
+ {
111
+ "indexed": false,
112
+ "internalType": "string",
113
+ "name": "version",
114
+ "type": "string"
115
+ },
116
+ {
117
+ "indexed": false,
118
+ "internalType": "address",
119
+ "name": "agent",
120
+ "type": "address"
121
+ },
122
+ {
123
+ "indexed": false,
124
+ "internalType": "uint8",
125
+ "name": "riskScore",
126
+ "type": "uint8"
127
+ },
128
+ {
129
+ "indexed": false,
130
+ "internalType": "string",
131
+ "name": "reasoning",
132
+ "type": "string"
133
+ }
134
+ ],
135
+ "name": "ScoreSubmitted",
136
+ "type": "event"
137
+ },
138
+ {
139
+ "inputs": [],
140
+ "name": "HIGH_RISK_THRESHOLD",
141
+ "outputs": [
142
+ {
143
+ "internalType": "uint8",
144
+ "name": "",
145
+ "type": "uint8"
146
+ }
147
+ ],
148
+ "stateMutability": "view",
149
+ "type": "function"
150
+ },
151
+ {
152
+ "inputs": [],
153
+ "name": "MEDIUM_RISK_THRESHOLD",
154
+ "outputs": [
155
+ {
156
+ "internalType": "uint8",
157
+ "name": "",
158
+ "type": "uint8"
159
+ }
160
+ ],
161
+ "stateMutability": "view",
162
+ "type": "function"
163
+ },
164
+ {
165
+ "inputs": [
166
+ {
167
+ "internalType": "address",
168
+ "name": "",
169
+ "type": "address"
170
+ }
171
+ ],
172
+ "name": "authorizedAgents",
173
+ "outputs": [
174
+ {
175
+ "internalType": "bool",
176
+ "name": "",
177
+ "type": "bool"
178
+ }
179
+ ],
180
+ "stateMutability": "view",
181
+ "type": "function"
182
+ },
183
+ {
184
+ "inputs": [
185
+ {
186
+ "internalType": "address",
187
+ "name": "",
188
+ "type": "address"
189
+ }
190
+ ],
191
+ "name": "authors",
192
+ "outputs": [
193
+ {
194
+ "internalType": "address",
195
+ "name": "addr",
196
+ "type": "address"
197
+ },
198
+ {
199
+ "internalType": "string",
200
+ "name": "ensName",
201
+ "type": "string"
202
+ },
203
+ {
204
+ "internalType": "uint256",
205
+ "name": "reputationTotal",
206
+ "type": "uint256"
207
+ },
208
+ {
209
+ "internalType": "uint256",
210
+ "name": "reputationCount",
211
+ "type": "uint256"
212
+ },
213
+ {
214
+ "internalType": "uint256",
215
+ "name": "packagesPublished",
216
+ "type": "uint256"
217
+ }
218
+ ],
219
+ "stateMutability": "view",
220
+ "type": "function"
221
+ },
222
+ {
223
+ "inputs": [
224
+ {
225
+ "internalType": "bytes32",
226
+ "name": "",
227
+ "type": "bytes32"
228
+ }
229
+ ],
230
+ "name": "ensToAuthor",
231
+ "outputs": [
232
+ {
233
+ "internalType": "address",
234
+ "name": "",
235
+ "type": "address"
236
+ }
237
+ ],
238
+ "stateMutability": "view",
239
+ "type": "function"
240
+ },
241
+ {
242
+ "inputs": [
243
+ {
244
+ "internalType": "string",
245
+ "name": "name",
246
+ "type": "string"
247
+ },
248
+ {
249
+ "internalType": "string",
250
+ "name": "version",
251
+ "type": "string"
252
+ }
253
+ ],
254
+ "name": "getAggregateScore",
255
+ "outputs": [
256
+ {
257
+ "internalType": "uint8",
258
+ "name": "",
259
+ "type": "uint8"
260
+ }
261
+ ],
262
+ "stateMutability": "view",
263
+ "type": "function"
264
+ },
265
+ {
266
+ "inputs": [
267
+ {
268
+ "internalType": "address",
269
+ "name": "addr",
270
+ "type": "address"
271
+ }
272
+ ],
273
+ "name": "getAuthorByAddress",
274
+ "outputs": [
275
+ {
276
+ "components": [
277
+ {
278
+ "internalType": "address",
279
+ "name": "addr",
280
+ "type": "address"
281
+ },
282
+ {
283
+ "internalType": "string",
284
+ "name": "ensName",
285
+ "type": "string"
286
+ },
287
+ {
288
+ "internalType": "uint256",
289
+ "name": "reputationTotal",
290
+ "type": "uint256"
291
+ },
292
+ {
293
+ "internalType": "uint256",
294
+ "name": "reputationCount",
295
+ "type": "uint256"
296
+ },
297
+ {
298
+ "internalType": "uint256",
299
+ "name": "packagesPublished",
300
+ "type": "uint256"
301
+ }
302
+ ],
303
+ "internalType": "struct OPMRegistry.AuthorProfile",
304
+ "name": "",
305
+ "type": "tuple"
306
+ }
307
+ ],
308
+ "stateMutability": "view",
309
+ "type": "function"
310
+ },
311
+ {
312
+ "inputs": [
313
+ {
314
+ "internalType": "string",
315
+ "name": "ensName",
316
+ "type": "string"
317
+ }
318
+ ],
319
+ "name": "getAuthorByENS",
320
+ "outputs": [
321
+ {
322
+ "components": [
323
+ {
324
+ "internalType": "address",
325
+ "name": "addr",
326
+ "type": "address"
327
+ },
328
+ {
329
+ "internalType": "string",
330
+ "name": "ensName",
331
+ "type": "string"
332
+ },
333
+ {
334
+ "internalType": "uint256",
335
+ "name": "reputationTotal",
336
+ "type": "uint256"
337
+ },
338
+ {
339
+ "internalType": "uint256",
340
+ "name": "reputationCount",
341
+ "type": "uint256"
342
+ },
343
+ {
344
+ "internalType": "uint256",
345
+ "name": "packagesPublished",
346
+ "type": "uint256"
347
+ }
348
+ ],
349
+ "internalType": "struct OPMRegistry.AuthorProfile",
350
+ "name": "",
351
+ "type": "tuple"
352
+ }
353
+ ],
354
+ "stateMutability": "view",
355
+ "type": "function"
356
+ },
357
+ {
358
+ "inputs": [
359
+ {
360
+ "internalType": "address",
361
+ "name": "addr",
362
+ "type": "address"
363
+ }
364
+ ],
365
+ "name": "getAuthorReputation",
366
+ "outputs": [
367
+ {
368
+ "internalType": "uint256",
369
+ "name": "",
370
+ "type": "uint256"
371
+ }
372
+ ],
373
+ "stateMutability": "view",
374
+ "type": "function"
375
+ },
376
+ {
377
+ "inputs": [
378
+ {
379
+ "internalType": "string",
380
+ "name": "name",
381
+ "type": "string"
382
+ },
383
+ {
384
+ "internalType": "string",
385
+ "name": "version",
386
+ "type": "string"
387
+ }
388
+ ],
389
+ "name": "getPackageInfo",
390
+ "outputs": [
391
+ {
392
+ "internalType": "address",
393
+ "name": "author",
394
+ "type": "address"
395
+ },
396
+ {
397
+ "internalType": "bytes32",
398
+ "name": "checksum",
399
+ "type": "bytes32"
400
+ },
401
+ {
402
+ "internalType": "bytes",
403
+ "name": "sig",
404
+ "type": "bytes"
405
+ },
406
+ {
407
+ "internalType": "string",
408
+ "name": "ensName",
409
+ "type": "string"
410
+ },
411
+ {
412
+ "internalType": "string",
413
+ "name": "reportURI",
414
+ "type": "string"
415
+ },
416
+ {
417
+ "internalType": "uint8",
418
+ "name": "aggregateScore",
419
+ "type": "uint8"
420
+ },
421
+ {
422
+ "internalType": "bool",
423
+ "name": "exists",
424
+ "type": "bool"
425
+ }
426
+ ],
427
+ "stateMutability": "view",
428
+ "type": "function"
429
+ },
430
+ {
431
+ "inputs": [
432
+ {
433
+ "internalType": "string",
434
+ "name": "name",
435
+ "type": "string"
436
+ },
437
+ {
438
+ "internalType": "uint8",
439
+ "name": "lookback",
440
+ "type": "uint8"
441
+ }
442
+ ],
443
+ "name": "getSafestVersion",
444
+ "outputs": [
445
+ {
446
+ "internalType": "string",
447
+ "name": "",
448
+ "type": "string"
449
+ }
450
+ ],
451
+ "stateMutability": "view",
452
+ "type": "function"
453
+ },
454
+ {
455
+ "inputs": [
456
+ {
457
+ "internalType": "string",
458
+ "name": "name",
459
+ "type": "string"
460
+ },
461
+ {
462
+ "internalType": "string",
463
+ "name": "version",
464
+ "type": "string"
465
+ }
466
+ ],
467
+ "name": "getScores",
468
+ "outputs": [
469
+ {
470
+ "components": [
471
+ {
472
+ "internalType": "address",
473
+ "name": "agent",
474
+ "type": "address"
475
+ },
476
+ {
477
+ "internalType": "uint8",
478
+ "name": "riskScore",
479
+ "type": "uint8"
480
+ },
481
+ {
482
+ "internalType": "string",
483
+ "name": "reasoning",
484
+ "type": "string"
485
+ }
486
+ ],
487
+ "internalType": "struct OPMRegistry.AgentScore[]",
488
+ "name": "",
489
+ "type": "tuple[]"
490
+ }
491
+ ],
492
+ "stateMutability": "view",
493
+ "type": "function"
494
+ },
495
+ {
496
+ "inputs": [
497
+ {
498
+ "internalType": "string",
499
+ "name": "name",
500
+ "type": "string"
501
+ }
502
+ ],
503
+ "name": "getVersions",
504
+ "outputs": [
505
+ {
506
+ "internalType": "string[]",
507
+ "name": "",
508
+ "type": "string[]"
509
+ }
510
+ ],
511
+ "stateMutability": "view",
512
+ "type": "function"
513
+ },
514
+ {
515
+ "inputs": [],
516
+ "name": "owner",
517
+ "outputs": [
518
+ {
519
+ "internalType": "address",
520
+ "name": "",
521
+ "type": "address"
522
+ }
523
+ ],
524
+ "stateMutability": "view",
525
+ "type": "function"
526
+ },
527
+ {
528
+ "inputs": [
529
+ {
530
+ "internalType": "string",
531
+ "name": "name",
532
+ "type": "string"
533
+ },
534
+ {
535
+ "internalType": "string",
536
+ "name": "version",
537
+ "type": "string"
538
+ },
539
+ {
540
+ "internalType": "bytes32",
541
+ "name": "checksum",
542
+ "type": "bytes32"
543
+ },
544
+ {
545
+ "internalType": "bytes",
546
+ "name": "sig",
547
+ "type": "bytes"
548
+ },
549
+ {
550
+ "internalType": "string",
551
+ "name": "ensName",
552
+ "type": "string"
553
+ }
554
+ ],
555
+ "name": "registerPackage",
556
+ "outputs": [],
557
+ "stateMutability": "nonpayable",
558
+ "type": "function"
559
+ },
560
+ {
561
+ "inputs": [
562
+ {
563
+ "internalType": "address",
564
+ "name": "agent",
565
+ "type": "address"
566
+ },
567
+ {
568
+ "internalType": "bool",
569
+ "name": "status",
570
+ "type": "bool"
571
+ }
572
+ ],
573
+ "name": "setAgent",
574
+ "outputs": [],
575
+ "stateMutability": "nonpayable",
576
+ "type": "function"
577
+ },
578
+ {
579
+ "inputs": [
580
+ {
581
+ "internalType": "string",
582
+ "name": "name",
583
+ "type": "string"
584
+ },
585
+ {
586
+ "internalType": "string",
587
+ "name": "version",
588
+ "type": "string"
589
+ },
590
+ {
591
+ "internalType": "string",
592
+ "name": "uri",
593
+ "type": "string"
594
+ }
595
+ ],
596
+ "name": "setReportURI",
597
+ "outputs": [],
598
+ "stateMutability": "nonpayable",
599
+ "type": "function"
600
+ },
601
+ {
602
+ "inputs": [
603
+ {
604
+ "internalType": "string",
605
+ "name": "name",
606
+ "type": "string"
607
+ },
608
+ {
609
+ "internalType": "string",
610
+ "name": "version",
611
+ "type": "string"
612
+ },
613
+ {
614
+ "internalType": "uint8",
615
+ "name": "riskScore",
616
+ "type": "uint8"
617
+ },
618
+ {
619
+ "internalType": "string",
620
+ "name": "reasoning",
621
+ "type": "string"
622
+ }
623
+ ],
624
+ "name": "submitScore",
625
+ "outputs": [],
626
+ "stateMutability": "nonpayable",
627
+ "type": "function"
628
+ }
629
+ ] as const;
@@ -0,0 +1,30 @@
1
+ export const HIGH_RISK_THRESHOLD = 70;
2
+ export const MEDIUM_RISK_THRESHOLD = 40;
3
+
4
+ export const OPENROUTER_MODELS = {
5
+ agent1: 'anthropic/claude-sonnet-4-20250514',
6
+ agent2: 'google/gemini-2.5-flash',
7
+ agent3: 'deepseek/deepseek-chat',
8
+ } as const;
9
+
10
+ export const OPENAI_MODELS = {
11
+ agent1: 'gpt-4.1',
12
+ agent2: 'gpt-4.1-mini',
13
+ agent3: 'gpt-4.1-nano',
14
+ } as const;
15
+
16
+ export const OPENROUTER_API_URL = 'https://openrouter.ai/api/v1/chat/completions';
17
+ export const OPENAI_API_URL = 'https://api.openai.com/v1/chat/completions';
18
+
19
+ export const BASE_SEPOLIA_CHAIN_ID = 84532;
20
+ export const BASE_SEPOLIA_RPC = 'https://sepolia.base.org';
21
+
22
+ export const NPM_REGISTRY_URL = 'https://registry.npmjs.org';
23
+
24
+ export const CHAINPATROL_API_URL = 'https://app.chainpatrol.io/api/v2';
25
+
26
+ export const SCANNABLE_EXTENSIONS = ['.js', '.ts', '.mjs', '.cjs', '.json'];
27
+
28
+ export const MAX_FILE_SIZE_BYTES = 100_000;
29
+ export const MAX_TOTAL_CODE_CHARS = 200_000;
30
+ export const VERSION_LOOKBACK = 3;
@@ -0,0 +1,5 @@
1
+ export * from './types';
2
+ export * from './constants';
3
+ export * from './utils';
4
+ export * from './prompt';
5
+ export { OPM_REGISTRY_ABI } from './abi';