@blamejs/exceptd-skills 0.19.34 → 0.19.35
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/CHANGELOG.md +18 -0
- package/bin/exceptd.js +0 -5
- package/data/_indexes/_meta.json +2 -2
- package/lib/collectors/ai-api.js +150 -22
- package/lib/collectors/cicd-pipeline-compromise.js +73 -28
- package/lib/collectors/library-author.js +141 -5
- package/lib/collectors/sbom.js +96 -12
- package/lib/collectors/scan-excludes.js +3 -2
- package/lib/cve-regression-watcher.js +0 -3
- package/lib/framework-gap.js +5 -0
- package/lib/lint-skills.js +24 -4
- package/lib/playbook-runner.js +68 -14
- package/lib/prefetch.js +3 -2
- package/lib/refresh-external.js +0 -6
- package/lib/refresh-network.js +3 -4
- package/lib/scoring.js +8 -1
- package/lib/ttp-mapper.js +14 -3
- package/lib/upstream-check-cli.js +26 -1
- package/lib/validate-cve-catalog.js +9 -2
- package/lib/validate-playbooks.js +9 -11
- package/manifest.json +53 -53
- package/orchestrator/index.js +0 -1
- package/package.json +1 -1
- package/sbom.cdx.json +78 -78
- package/scripts/audit-perf.js +24 -13
- package/scripts/builders/theater-fingerprints.js +9 -4
- package/scripts/check-agents-md-collectors.js +15 -3
- package/scripts/check-codebase-patterns.js +16 -3
- package/scripts/check-manifest-snapshot.js +49 -8
- package/scripts/check-test-coverage.js +17 -1
- package/scripts/refresh-mitre-atlas.js +5 -1
- package/scripts/refresh-mitre-ics-attack.js +5 -1
- package/scripts/refresh-rfc-index.js +6 -1
- package/scripts/refresh-upstream-catalogs.js +25 -13
- package/scripts/release.js +0 -2
- package/scripts/run-e2e-scenarios.js +2 -2
- package/scripts/verify-shipped-tarball.js +0 -1
package/sbom.cdx.json
CHANGED
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
{
|
|
2
2
|
"bomFormat": "CycloneDX",
|
|
3
3
|
"specVersion": "1.6",
|
|
4
|
-
"serialNumber": "urn:uuid:
|
|
4
|
+
"serialNumber": "urn:uuid:1986def7-4bde-47df-9e73-f7b22733b9a7",
|
|
5
5
|
"version": 1,
|
|
6
6
|
"metadata": {
|
|
7
|
-
"timestamp": "2026-08-
|
|
7
|
+
"timestamp": "2026-08-25T00:00:00.000Z",
|
|
8
8
|
"tools": [
|
|
9
9
|
{
|
|
10
10
|
"vendor": "blamejs",
|
|
11
11
|
"name": "scripts/refresh-sbom.js",
|
|
12
|
-
"version": "0.19.
|
|
12
|
+
"version": "0.19.35"
|
|
13
13
|
}
|
|
14
14
|
],
|
|
15
15
|
"component": {
|
|
16
|
-
"bom-ref": "pkg:npm/@blamejs/exceptd-skills@0.19.
|
|
16
|
+
"bom-ref": "pkg:npm/@blamejs/exceptd-skills@0.19.35",
|
|
17
17
|
"type": "application",
|
|
18
18
|
"name": "@blamejs/exceptd-skills",
|
|
19
|
-
"version": "0.19.
|
|
19
|
+
"version": "0.19.35",
|
|
20
20
|
"description": "AI security skills grounded in mid-2026 threat reality, not stale framework documentation. 51 skills, 11 catalogs (1417 CVEs / 236 CWEs / 794 ATT&CK + ICS / 174 ATLAS / 468 D3FEND / 8889 RFCs), 35 jurisdictions, 10-class catalog gap detector + budget gate, real XML parser + canonical-form diff + content-pattern regression detection, Ed25519-signed.",
|
|
21
21
|
"licenses": [
|
|
22
22
|
{
|
|
@@ -25,17 +25,17 @@
|
|
|
25
25
|
}
|
|
26
26
|
}
|
|
27
27
|
],
|
|
28
|
-
"purl": "pkg:npm/%40blamejs/exceptd-skills@0.19.
|
|
28
|
+
"purl": "pkg:npm/%40blamejs/exceptd-skills@0.19.35",
|
|
29
29
|
"hashes": [
|
|
30
30
|
{
|
|
31
31
|
"alg": "SHA-256",
|
|
32
|
-
"content": "
|
|
32
|
+
"content": "47f53a6edbc62a1636e32e44a8317830349a33e33c3f74f08a636bfb7c3a0426"
|
|
33
33
|
}
|
|
34
34
|
],
|
|
35
35
|
"externalReferences": [
|
|
36
36
|
{
|
|
37
37
|
"type": "distribution",
|
|
38
|
-
"url": "https://www.npmjs.com/package/@blamejs/exceptd-skills/v/0.19.
|
|
38
|
+
"url": "https://www.npmjs.com/package/@blamejs/exceptd-skills/v/0.19.35"
|
|
39
39
|
},
|
|
40
40
|
{
|
|
41
41
|
"type": "vcs",
|
|
@@ -124,11 +124,11 @@
|
|
|
124
124
|
"hashes": [
|
|
125
125
|
{
|
|
126
126
|
"alg": "SHA-256",
|
|
127
|
-
"content": "
|
|
127
|
+
"content": "3a29def51427e2e41642101ba4c5f3978fe3caeac4899606b9a11676ecb498f0"
|
|
128
128
|
},
|
|
129
129
|
{
|
|
130
130
|
"alg": "SHA3-512",
|
|
131
|
-
"content": "
|
|
131
|
+
"content": "cfcc313a8e57a45148bb439b0deae40923eff9378791ca04f8aa4780862db8b5d566eb6164aeb71cfe66bf79f189a7ef0536b3ad75561f27b240b2f8b4093b5e"
|
|
132
132
|
}
|
|
133
133
|
]
|
|
134
134
|
},
|
|
@@ -289,11 +289,11 @@
|
|
|
289
289
|
"hashes": [
|
|
290
290
|
{
|
|
291
291
|
"alg": "SHA-256",
|
|
292
|
-
"content": "
|
|
292
|
+
"content": "0d5e33b71c62998040e11abc83b1acb5890d182994599f897a9e1e51e350b84e"
|
|
293
293
|
},
|
|
294
294
|
{
|
|
295
295
|
"alg": "SHA3-512",
|
|
296
|
-
"content": "
|
|
296
|
+
"content": "6dfa14ba90038354be28db61be05fe9f0a823838780e5071cc3e831770d1cc3371c5ff6733cc23d4e10c157d64e365c130f6cf2cf55b9fdc89b4af1f817157b8"
|
|
297
297
|
}
|
|
298
298
|
]
|
|
299
299
|
},
|
|
@@ -1054,11 +1054,11 @@
|
|
|
1054
1054
|
"hashes": [
|
|
1055
1055
|
{
|
|
1056
1056
|
"alg": "SHA-256",
|
|
1057
|
-
"content": "
|
|
1057
|
+
"content": "937ba899253de6194ef9cade0a294240ba4643888075d8e8ca823f75ea803e8d"
|
|
1058
1058
|
},
|
|
1059
1059
|
{
|
|
1060
1060
|
"alg": "SHA3-512",
|
|
1061
|
-
"content": "
|
|
1061
|
+
"content": "f11cfe357c0e26136b5e8df51b279ebf1e7e5f4c1f292b040b7ea4961503b6fa5d50dfdc66386f0ef5322cddbf175610cbe080e9128be1f4672d1d233a52f795"
|
|
1062
1062
|
}
|
|
1063
1063
|
]
|
|
1064
1064
|
},
|
|
@@ -1069,11 +1069,11 @@
|
|
|
1069
1069
|
"hashes": [
|
|
1070
1070
|
{
|
|
1071
1071
|
"alg": "SHA-256",
|
|
1072
|
-
"content": "
|
|
1072
|
+
"content": "1a910c6794418834f0640f6bd76ff6afa9297422dd410ea63295ee8ee5ad8bdb"
|
|
1073
1073
|
},
|
|
1074
1074
|
{
|
|
1075
1075
|
"alg": "SHA3-512",
|
|
1076
|
-
"content": "
|
|
1076
|
+
"content": "46da8cf6b841a699ba8eb006769cbcec8f1f1a7628904206626a4c115ad0897ba4a7697b8deecc4a200385e91734d3d1c52ba2c415649d15208a3facceb8dad7"
|
|
1077
1077
|
}
|
|
1078
1078
|
]
|
|
1079
1079
|
},
|
|
@@ -1189,11 +1189,11 @@
|
|
|
1189
1189
|
"hashes": [
|
|
1190
1190
|
{
|
|
1191
1191
|
"alg": "SHA-256",
|
|
1192
|
-
"content": "
|
|
1192
|
+
"content": "095bafbe8f30f4469203babfdddff2b3668d80666e01ad83b0610c0f2ec32efe"
|
|
1193
1193
|
},
|
|
1194
1194
|
{
|
|
1195
1195
|
"alg": "SHA3-512",
|
|
1196
|
-
"content": "
|
|
1196
|
+
"content": "e5da57eff30bf81912a5d52761494b9887e2b2892b503e4bd968db60444fc2900780f63f82930edbd79cfc8e9d7eab71949b35b0fc690ac65bb5e2d46dd1b14a"
|
|
1197
1197
|
}
|
|
1198
1198
|
]
|
|
1199
1199
|
},
|
|
@@ -1234,11 +1234,11 @@
|
|
|
1234
1234
|
"hashes": [
|
|
1235
1235
|
{
|
|
1236
1236
|
"alg": "SHA-256",
|
|
1237
|
-
"content": "
|
|
1237
|
+
"content": "900785616f8b70dd3af1b1ed2176571646e5925d2556f79179316e1b8aaebb1a"
|
|
1238
1238
|
},
|
|
1239
1239
|
{
|
|
1240
1240
|
"alg": "SHA3-512",
|
|
1241
|
-
"content": "
|
|
1241
|
+
"content": "c3f8246f4864c1c6588d5f0764fd392df0dca5e15014186d84400e4b87f37daa116792a7d2a264862b78e6f4cc6d5aaa0fb26a88591d572fcab1f7e718cb25eb"
|
|
1242
1242
|
}
|
|
1243
1243
|
]
|
|
1244
1244
|
},
|
|
@@ -1249,11 +1249,11 @@
|
|
|
1249
1249
|
"hashes": [
|
|
1250
1250
|
{
|
|
1251
1251
|
"alg": "SHA-256",
|
|
1252
|
-
"content": "
|
|
1252
|
+
"content": "c818b8a67bc16c858821f7a0c0367207160fa16bb7bb68365e9842f6b42a288a"
|
|
1253
1253
|
},
|
|
1254
1254
|
{
|
|
1255
1255
|
"alg": "SHA3-512",
|
|
1256
|
-
"content": "
|
|
1256
|
+
"content": "6b58f4e45f5ed71df3db363d8b6b67800522a5b1daffebc1b12284f6a9ab799ef6a3cbda553f205f15c10f8a0f91cb7f9b8bd6053448839a11b793e3e8c2b269"
|
|
1257
1257
|
}
|
|
1258
1258
|
]
|
|
1259
1259
|
},
|
|
@@ -1369,11 +1369,11 @@
|
|
|
1369
1369
|
"hashes": [
|
|
1370
1370
|
{
|
|
1371
1371
|
"alg": "SHA-256",
|
|
1372
|
-
"content": "
|
|
1372
|
+
"content": "c1601e21a7c1e0f4e4b9d35a2af60cfab2ef3f768488a7fd659b68f117b54565"
|
|
1373
1373
|
},
|
|
1374
1374
|
{
|
|
1375
1375
|
"alg": "SHA3-512",
|
|
1376
|
-
"content": "
|
|
1376
|
+
"content": "9b6403bffe7f632febb68d5e7099ec78e9ad3359a7a45a0832d6cbc50aaca986e246533942733a2c55fdc63e69c7fd37f4b5207ac1589d112e0a58e822ab9cc0"
|
|
1377
1377
|
}
|
|
1378
1378
|
]
|
|
1379
1379
|
},
|
|
@@ -1444,11 +1444,11 @@
|
|
|
1444
1444
|
"hashes": [
|
|
1445
1445
|
{
|
|
1446
1446
|
"alg": "SHA-256",
|
|
1447
|
-
"content": "
|
|
1447
|
+
"content": "d8b9c407dd91e4ef5341309eabd4fe0c09cb5d4a4af83b140e963d308d0694ee"
|
|
1448
1448
|
},
|
|
1449
1449
|
{
|
|
1450
1450
|
"alg": "SHA3-512",
|
|
1451
|
-
"content": "
|
|
1451
|
+
"content": "80748439e92f488bd0e7414ea3de17bc41c55ebfa170f931037cedf1dfcea1d6658f4a7694158ba2a7aa51e23124db7cce944f711b58981537f68c0c15b8c837"
|
|
1452
1452
|
}
|
|
1453
1453
|
]
|
|
1454
1454
|
},
|
|
@@ -1504,11 +1504,11 @@
|
|
|
1504
1504
|
"hashes": [
|
|
1505
1505
|
{
|
|
1506
1506
|
"alg": "SHA-256",
|
|
1507
|
-
"content": "
|
|
1507
|
+
"content": "14e603bf3ad8856d9648a910e91c3ebafb95e70cff82ddc69c00edf85f0fec66"
|
|
1508
1508
|
},
|
|
1509
1509
|
{
|
|
1510
1510
|
"alg": "SHA3-512",
|
|
1511
|
-
"content": "
|
|
1511
|
+
"content": "3d143e3b5b1a7c36f9c72a2ca9e5874e14cab156c92231c221a4dab198e59df72fd1cd599472794b17a5882794a16a0673044ca6bc6181aa1acd0fefb2ce2e69"
|
|
1512
1512
|
}
|
|
1513
1513
|
]
|
|
1514
1514
|
},
|
|
@@ -1519,11 +1519,11 @@
|
|
|
1519
1519
|
"hashes": [
|
|
1520
1520
|
{
|
|
1521
1521
|
"alg": "SHA-256",
|
|
1522
|
-
"content": "
|
|
1522
|
+
"content": "5779649b3bf3c39183128b22e6c15da1d3bf33d29a13f235219450491034de85"
|
|
1523
1523
|
},
|
|
1524
1524
|
{
|
|
1525
1525
|
"alg": "SHA3-512",
|
|
1526
|
-
"content": "
|
|
1526
|
+
"content": "c3b27c9c53246ff1bce4bf32f8958956df41c21747daff921b9e2c494e79877bd76bf9f6bf92c8b26d84f505643fdb31aa292f028c08ebdf87a3bd7cd998dd57"
|
|
1527
1527
|
}
|
|
1528
1528
|
]
|
|
1529
1529
|
},
|
|
@@ -1534,11 +1534,11 @@
|
|
|
1534
1534
|
"hashes": [
|
|
1535
1535
|
{
|
|
1536
1536
|
"alg": "SHA-256",
|
|
1537
|
-
"content": "
|
|
1537
|
+
"content": "d6d4f5607e97b35378ef9a10f209e28968d8f77db0761576e4ecdcef816e3cb2"
|
|
1538
1538
|
},
|
|
1539
1539
|
{
|
|
1540
1540
|
"alg": "SHA3-512",
|
|
1541
|
-
"content": "
|
|
1541
|
+
"content": "d158ce954808b56fb92e9d8cb8ab830bfb6d503166cc5a2821b5057b552646605bf522a0b6091ba45bfeca6a2c5d44407e38347970980a505bc16db79e20f74d"
|
|
1542
1542
|
}
|
|
1543
1543
|
]
|
|
1544
1544
|
},
|
|
@@ -1549,11 +1549,11 @@
|
|
|
1549
1549
|
"hashes": [
|
|
1550
1550
|
{
|
|
1551
1551
|
"alg": "SHA-256",
|
|
1552
|
-
"content": "
|
|
1552
|
+
"content": "008ea6c30cfcd5a8ffb9d58b0543115bc363ab128f0c5072f799427865d64bcb"
|
|
1553
1553
|
},
|
|
1554
1554
|
{
|
|
1555
1555
|
"alg": "SHA3-512",
|
|
1556
|
-
"content": "
|
|
1556
|
+
"content": "9e4cfa303844d55f130e360e5c0def64a7fa821ec58fe4faec7868a0d68f09d6ccc2b90093d68261450e014c9bef1a6e1356639a20ff383f8c63e862e0a1708f"
|
|
1557
1557
|
}
|
|
1558
1558
|
]
|
|
1559
1559
|
},
|
|
@@ -1564,11 +1564,11 @@
|
|
|
1564
1564
|
"hashes": [
|
|
1565
1565
|
{
|
|
1566
1566
|
"alg": "SHA-256",
|
|
1567
|
-
"content": "
|
|
1567
|
+
"content": "f7ff9715898453d7801af5a6bf46e557e8bfd9c94cba76993ade9a5e2f4b62cc"
|
|
1568
1568
|
},
|
|
1569
1569
|
{
|
|
1570
1570
|
"alg": "SHA3-512",
|
|
1571
|
-
"content": "
|
|
1571
|
+
"content": "a437bb5d905bb45046758a137178f029835ee4d8c1d557deb1b5a721ae7ceccd03a4a025e462916ff9d4292d13a36e6e3309936a21fc58b1680c4e37b26e1f4a"
|
|
1572
1572
|
}
|
|
1573
1573
|
]
|
|
1574
1574
|
},
|
|
@@ -1654,11 +1654,11 @@
|
|
|
1654
1654
|
"hashes": [
|
|
1655
1655
|
{
|
|
1656
1656
|
"alg": "SHA-256",
|
|
1657
|
-
"content": "
|
|
1657
|
+
"content": "e314bfb24c5f58856f76a15402018f0eecf3b248efa3d5fc9d23f5b8a1ebd91e"
|
|
1658
1658
|
},
|
|
1659
1659
|
{
|
|
1660
1660
|
"alg": "SHA3-512",
|
|
1661
|
-
"content": "
|
|
1661
|
+
"content": "21978cda80333b3e254513214e81d80536f926edf58d5b784dcc5d4446345f5cd05064ad7966938640269b67da2118cd32704260d436fdc1693e60f0d7e9741f"
|
|
1662
1662
|
}
|
|
1663
1663
|
]
|
|
1664
1664
|
},
|
|
@@ -1729,11 +1729,11 @@
|
|
|
1729
1729
|
"hashes": [
|
|
1730
1730
|
{
|
|
1731
1731
|
"alg": "SHA-256",
|
|
1732
|
-
"content": "
|
|
1732
|
+
"content": "566aa6b101e0239f924471a85f9d139d1d5c697ca6337833d8fd92ee96184fd0"
|
|
1733
1733
|
},
|
|
1734
1734
|
{
|
|
1735
1735
|
"alg": "SHA3-512",
|
|
1736
|
-
"content": "
|
|
1736
|
+
"content": "22d9e2eb5370e2571f4ca790fc933903b58904b62193578d9023817f44ec7cee2c3672552a677367fb57ee6f777848f39812aabf467fb27075f7420b42438a00"
|
|
1737
1737
|
}
|
|
1738
1738
|
]
|
|
1739
1739
|
},
|
|
@@ -1744,11 +1744,11 @@
|
|
|
1744
1744
|
"hashes": [
|
|
1745
1745
|
{
|
|
1746
1746
|
"alg": "SHA-256",
|
|
1747
|
-
"content": "
|
|
1747
|
+
"content": "f6b53244b6b51ce1fbf3a5f49ee41a3d64f51c653d3928770859d1d070c2dfda"
|
|
1748
1748
|
},
|
|
1749
1749
|
{
|
|
1750
1750
|
"alg": "SHA3-512",
|
|
1751
|
-
"content": "
|
|
1751
|
+
"content": "666a9551d21d6a64d8d638131ad95389ef63167fc22fce57b2daf75e17b673a1d3db66dcda41c376568dba67b1bf480a2907cbc5a495f45c99dc4347f730dcc0"
|
|
1752
1752
|
}
|
|
1753
1753
|
]
|
|
1754
1754
|
},
|
|
@@ -1789,11 +1789,11 @@
|
|
|
1789
1789
|
"hashes": [
|
|
1790
1790
|
{
|
|
1791
1791
|
"alg": "SHA-256",
|
|
1792
|
-
"content": "
|
|
1792
|
+
"content": "c88f7c0dba0ea7dc7cd66fa053f61a5e8375525947a5994aea6a8e093a4706ab"
|
|
1793
1793
|
},
|
|
1794
1794
|
{
|
|
1795
1795
|
"alg": "SHA3-512",
|
|
1796
|
-
"content": "
|
|
1796
|
+
"content": "b93059ec4dce12c44818dcc0e0528ad38e4678d85200506b4fa2c3face736cf5e5a7c0b19bb6e464d0e70b37133b187359cf156f00ca751a11e001ceba147e0b"
|
|
1797
1797
|
}
|
|
1798
1798
|
]
|
|
1799
1799
|
},
|
|
@@ -1834,11 +1834,11 @@
|
|
|
1834
1834
|
"hashes": [
|
|
1835
1835
|
{
|
|
1836
1836
|
"alg": "SHA-256",
|
|
1837
|
-
"content": "
|
|
1837
|
+
"content": "6bab22a195077870a95b4c48bf2d2a405cea9e76b1ed4079cc4ec3987607c649"
|
|
1838
1838
|
},
|
|
1839
1839
|
{
|
|
1840
1840
|
"alg": "SHA3-512",
|
|
1841
|
-
"content": "
|
|
1841
|
+
"content": "0a64791450d44ef5970a9695aecc55c6d21e3372afffe35d04785f25a89e16c9068cbef8c6b862f570e40beee5f0ed78a021c8c0f4c9ebb0aa386cf0feae7f31"
|
|
1842
1842
|
}
|
|
1843
1843
|
]
|
|
1844
1844
|
},
|
|
@@ -1954,11 +1954,11 @@
|
|
|
1954
1954
|
"hashes": [
|
|
1955
1955
|
{
|
|
1956
1956
|
"alg": "SHA-256",
|
|
1957
|
-
"content": "
|
|
1957
|
+
"content": "ec8d77f3c80b458eeb5901346be0e0f8fde9903da2de9ed85740372beddb8261"
|
|
1958
1958
|
},
|
|
1959
1959
|
{
|
|
1960
1960
|
"alg": "SHA3-512",
|
|
1961
|
-
"content": "
|
|
1961
|
+
"content": "23da9c54a28f10979d4e3f78e21decf7645bdc108bcd5b669654afbfeff810ed582c77011f7c638d3905583ec886b7a73a96d610b476e34e9c6b239e0688d456"
|
|
1962
1962
|
}
|
|
1963
1963
|
]
|
|
1964
1964
|
},
|
|
@@ -2014,11 +2014,11 @@
|
|
|
2014
2014
|
"hashes": [
|
|
2015
2015
|
{
|
|
2016
2016
|
"alg": "SHA-256",
|
|
2017
|
-
"content": "
|
|
2017
|
+
"content": "2be967bb17082508178226a139e06555f343219db9b0ae78c4c6560bba4779e0"
|
|
2018
2018
|
},
|
|
2019
2019
|
{
|
|
2020
2020
|
"alg": "SHA3-512",
|
|
2021
|
-
"content": "
|
|
2021
|
+
"content": "4f88474d91bb42a8a4eacb08c30b88fc8172eddaaa7b64ee5d6e8ff969a7be127acdef05fc4c30d57c4c06c07972424b4a91bd920a51854127e9055df03bcdb0"
|
|
2022
2022
|
}
|
|
2023
2023
|
]
|
|
2024
2024
|
},
|
|
@@ -2074,11 +2074,11 @@
|
|
|
2074
2074
|
"hashes": [
|
|
2075
2075
|
{
|
|
2076
2076
|
"alg": "SHA-256",
|
|
2077
|
-
"content": "
|
|
2077
|
+
"content": "76856116747f44fd34973e9363aa6b408bc9bf789ac2e041c8262972a518aefa"
|
|
2078
2078
|
},
|
|
2079
2079
|
{
|
|
2080
2080
|
"alg": "SHA3-512",
|
|
2081
|
-
"content": "
|
|
2081
|
+
"content": "bc25166a2c625ee7152f9acff8ce055040c6a4aa5505bb26c22b0781239dafc6b1db289c291649c42c563616009c3d48f1265ee2194b341d941cd25bca8ee1dc"
|
|
2082
2082
|
}
|
|
2083
2083
|
]
|
|
2084
2084
|
},
|
|
@@ -2119,11 +2119,11 @@
|
|
|
2119
2119
|
"hashes": [
|
|
2120
2120
|
{
|
|
2121
2121
|
"alg": "SHA-256",
|
|
2122
|
-
"content": "
|
|
2122
|
+
"content": "2d6410d043f9e16d329c34c74de8dcea4ea20af4077ba4d640e77f059952d322"
|
|
2123
2123
|
},
|
|
2124
2124
|
{
|
|
2125
2125
|
"alg": "SHA3-512",
|
|
2126
|
-
"content": "
|
|
2126
|
+
"content": "4232faa85a9d8c3fce36ffe16fd2737fb9443ef03eeaddfa7ef56763bd85edb7ef8a78df699a9507818e6866b98b75e51f27e070ca1ddf6bf1b6d3cc0a514b29"
|
|
2127
2127
|
}
|
|
2128
2128
|
]
|
|
2129
2129
|
},
|
|
@@ -2344,11 +2344,11 @@
|
|
|
2344
2344
|
"hashes": [
|
|
2345
2345
|
{
|
|
2346
2346
|
"alg": "SHA-256",
|
|
2347
|
-
"content": "
|
|
2347
|
+
"content": "0ae0ad5c8d8cc84ac40bc795898993a6235f9dad37c1cb5fb57750bd28f55d35"
|
|
2348
2348
|
},
|
|
2349
2349
|
{
|
|
2350
2350
|
"alg": "SHA3-512",
|
|
2351
|
-
"content": "
|
|
2351
|
+
"content": "f8c2cda8eba828f7c45eeff2debe20391875e4e20d932578ca37a066d78f4193f88232c3d155513ff106622b029aa48ef89ba49ae264b130e2085228ac883288"
|
|
2352
2352
|
}
|
|
2353
2353
|
]
|
|
2354
2354
|
},
|
|
@@ -2374,11 +2374,11 @@
|
|
|
2374
2374
|
"hashes": [
|
|
2375
2375
|
{
|
|
2376
2376
|
"alg": "SHA-256",
|
|
2377
|
-
"content": "
|
|
2377
|
+
"content": "4d4c40649da0b2b2b30dc8e417eda3430ae38a2cdf41daea898b0efc64ab694c"
|
|
2378
2378
|
},
|
|
2379
2379
|
{
|
|
2380
2380
|
"alg": "SHA3-512",
|
|
2381
|
-
"content": "
|
|
2381
|
+
"content": "f7b74927138248e05eb798fc15e77f31c0eb89d8d03ad165a403c00612f02f4b9c96ee9a80b8d83132fb54d0ae118bedfd977c9978031e24b867e25a50cc3583"
|
|
2382
2382
|
}
|
|
2383
2383
|
]
|
|
2384
2384
|
},
|
|
@@ -2434,11 +2434,11 @@
|
|
|
2434
2434
|
"hashes": [
|
|
2435
2435
|
{
|
|
2436
2436
|
"alg": "SHA-256",
|
|
2437
|
-
"content": "
|
|
2437
|
+
"content": "70925e80fd26e7e54914ac4abe826e13f30eb1444d6c010afc67df30dc72affe"
|
|
2438
2438
|
},
|
|
2439
2439
|
{
|
|
2440
2440
|
"alg": "SHA3-512",
|
|
2441
|
-
"content": "
|
|
2441
|
+
"content": "2f04f27ee58ad510158c7fe9f239b191109b699262257f50827125206da4d96eab38e1f1b9be5d084c8895d0f9a5b910d57175479d4930c87d91ed9b14e95551"
|
|
2442
2442
|
}
|
|
2443
2443
|
]
|
|
2444
2444
|
},
|
|
@@ -2479,11 +2479,11 @@
|
|
|
2479
2479
|
"hashes": [
|
|
2480
2480
|
{
|
|
2481
2481
|
"alg": "SHA-256",
|
|
2482
|
-
"content": "
|
|
2482
|
+
"content": "abd745cdb42513ebc6c37627cedb252d55ba1fadf173d1ec5a4bd3938d8847f6"
|
|
2483
2483
|
},
|
|
2484
2484
|
{
|
|
2485
2485
|
"alg": "SHA3-512",
|
|
2486
|
-
"content": "
|
|
2486
|
+
"content": "ef8d127a2870768b6dd3385f202acf470f605922856d571b2a459ff3cdc484ec732de735e2dd6edd180d2b68ac8ffa615c391f29bc090b2ebed433c847031c09"
|
|
2487
2487
|
}
|
|
2488
2488
|
]
|
|
2489
2489
|
},
|
|
@@ -2539,11 +2539,11 @@
|
|
|
2539
2539
|
"hashes": [
|
|
2540
2540
|
{
|
|
2541
2541
|
"alg": "SHA-256",
|
|
2542
|
-
"content": "
|
|
2542
|
+
"content": "932fcec68b22663093a80f7212b9c23fe49e4d7be6e27b2cc78ed8cab2d73bf6"
|
|
2543
2543
|
},
|
|
2544
2544
|
{
|
|
2545
2545
|
"alg": "SHA3-512",
|
|
2546
|
-
"content": "
|
|
2546
|
+
"content": "33fe9f353d5a486718b99f4c57e9351397107ba0fb5b9949cf25868cba268d6c055d4ff080b8e39b6cc60423311b3a626eca6cbd0a589bb84929a9c5a2e3fdff"
|
|
2547
2547
|
}
|
|
2548
2548
|
]
|
|
2549
2549
|
},
|
|
@@ -2674,11 +2674,11 @@
|
|
|
2674
2674
|
"hashes": [
|
|
2675
2675
|
{
|
|
2676
2676
|
"alg": "SHA-256",
|
|
2677
|
-
"content": "
|
|
2677
|
+
"content": "259d1bc2a527cb558ba7a8da40350c387eebcf99884e148dc78a1c6341bb767e"
|
|
2678
2678
|
},
|
|
2679
2679
|
{
|
|
2680
2680
|
"alg": "SHA3-512",
|
|
2681
|
-
"content": "
|
|
2681
|
+
"content": "e5e2e45bed00c5927da0df9f86c2a1dc0e7868677082b2be4bc3529c8760a6d00c56143c1586582c63c7d11ea4841c761f11423593348fa1763b6d4345687ba9"
|
|
2682
2682
|
}
|
|
2683
2683
|
]
|
|
2684
2684
|
},
|
|
@@ -2719,11 +2719,11 @@
|
|
|
2719
2719
|
"hashes": [
|
|
2720
2720
|
{
|
|
2721
2721
|
"alg": "SHA-256",
|
|
2722
|
-
"content": "
|
|
2722
|
+
"content": "a39c41ae121284380d423801df7f908173e61db758ca82890830395d6b08b312"
|
|
2723
2723
|
},
|
|
2724
2724
|
{
|
|
2725
2725
|
"alg": "SHA3-512",
|
|
2726
|
-
"content": "
|
|
2726
|
+
"content": "e5e2a1b7a756466083e321039a1f9ed35babd705f6853523a94748a225013f4acbacf4bebddc6554cd532aeef012dcccee318adaab71b58adcb28165b3eac238"
|
|
2727
2727
|
}
|
|
2728
2728
|
]
|
|
2729
2729
|
},
|
|
@@ -2749,11 +2749,11 @@
|
|
|
2749
2749
|
"hashes": [
|
|
2750
2750
|
{
|
|
2751
2751
|
"alg": "SHA-256",
|
|
2752
|
-
"content": "
|
|
2752
|
+
"content": "757bd0ae24b1a3ef5788b442dd116b6968cd9e74fe7f7819200ca95db757dd44"
|
|
2753
2753
|
},
|
|
2754
2754
|
{
|
|
2755
2755
|
"alg": "SHA3-512",
|
|
2756
|
-
"content": "
|
|
2756
|
+
"content": "3bd9b736bea8586c846d4aa7a66f8574dd70f619ccd67e55d460f5d2b08dc4cd94266e57816f723813ce36b251fdc0c03813223d1896f7c9b1e70605203cdb09"
|
|
2757
2757
|
}
|
|
2758
2758
|
]
|
|
2759
2759
|
},
|
|
@@ -2779,11 +2779,11 @@
|
|
|
2779
2779
|
"hashes": [
|
|
2780
2780
|
{
|
|
2781
2781
|
"alg": "SHA-256",
|
|
2782
|
-
"content": "
|
|
2782
|
+
"content": "978745f0491f9044cea105347fb1acef23bb52e28491f2edb96dc457f3dad2f1"
|
|
2783
2783
|
},
|
|
2784
2784
|
{
|
|
2785
2785
|
"alg": "SHA3-512",
|
|
2786
|
-
"content": "
|
|
2786
|
+
"content": "4bb14a5e73163996a345bac10ba30e850fe204914a914db5421258dcd78dbc8ae45706a6b7a35298efa76b44b0792b28a995201f8b7fe14e5eecf0a5c42bb137"
|
|
2787
2787
|
}
|
|
2788
2788
|
]
|
|
2789
2789
|
},
|
|
@@ -2794,11 +2794,11 @@
|
|
|
2794
2794
|
"hashes": [
|
|
2795
2795
|
{
|
|
2796
2796
|
"alg": "SHA-256",
|
|
2797
|
-
"content": "
|
|
2797
|
+
"content": "2c34af0ec0188cc5edf56260eeb42d4a8f8a31ecd1a34d04ebbfe2c3b0ffa1f8"
|
|
2798
2798
|
},
|
|
2799
2799
|
{
|
|
2800
2800
|
"alg": "SHA3-512",
|
|
2801
|
-
"content": "
|
|
2801
|
+
"content": "9d9f0e5c6fdc5308fee06649017f70d02bb8dc8c8feb8bb5a06d75e6f7cddaab56b8759e5b7f17269999fcacd8e439db735516df4d6a9b2be9dd692088fbaaec"
|
|
2802
2802
|
}
|
|
2803
2803
|
]
|
|
2804
2804
|
},
|
|
@@ -2809,11 +2809,11 @@
|
|
|
2809
2809
|
"hashes": [
|
|
2810
2810
|
{
|
|
2811
2811
|
"alg": "SHA-256",
|
|
2812
|
-
"content": "
|
|
2812
|
+
"content": "4a9411e8e8b156773bd35829ae2336eec73a63cd5b1c777bbd48131d9d86722c"
|
|
2813
2813
|
},
|
|
2814
2814
|
{
|
|
2815
2815
|
"alg": "SHA3-512",
|
|
2816
|
-
"content": "
|
|
2816
|
+
"content": "7540f8c1f0906a5c76a65a9b30d1ee2612b5df5dd8b8a5c1e8d06e036c9c93bea8045630a9c09508550970a6908db24076ff0324b208313795241457caf7829e"
|
|
2817
2817
|
}
|
|
2818
2818
|
]
|
|
2819
2819
|
},
|
|
@@ -2869,11 +2869,11 @@
|
|
|
2869
2869
|
"hashes": [
|
|
2870
2870
|
{
|
|
2871
2871
|
"alg": "SHA-256",
|
|
2872
|
-
"content": "
|
|
2872
|
+
"content": "9c605a2b49d0c83833974e49bcb497acc667fc968677b01fce109c784bf37b0e"
|
|
2873
2873
|
},
|
|
2874
2874
|
{
|
|
2875
2875
|
"alg": "SHA3-512",
|
|
2876
|
-
"content": "
|
|
2876
|
+
"content": "2ecb406f05ee36be266dddfc20bab7f0503e52561e8553d6788e4e3ab148cdc15d10556e01cded0d80c01f7eafe609e2c71f74b7d304a38ef84e919fc09285fe"
|
|
2877
2877
|
}
|
|
2878
2878
|
]
|
|
2879
2879
|
},
|
package/scripts/audit-perf.js
CHANGED
|
@@ -97,23 +97,34 @@ bench("xref: which skills cite CWE-79? (linear scan)", () => {
|
|
|
97
97
|
return skills.filter((s) => (s.cwe_refs || []).includes(refSet)).map((s) => s.name);
|
|
98
98
|
});
|
|
99
99
|
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
);
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
const
|
|
109
|
-
|
|
110
|
-
|
|
100
|
+
// CVE entry → its CWE refs → the skills citing any of them → their ATLAS refs
|
|
101
|
+
// and framework gaps. An unknown id resolves to no entry and yields empty sets,
|
|
102
|
+
// which is what makes this a measurement of the lookup rather than of the corpus.
|
|
103
|
+
function multiHopChain(catalog, allSkills, cveId) {
|
|
104
|
+
const entry = catalog[cveId];
|
|
105
|
+
if (!entry) return { cwes: [], atlases: [], fws: [], citing: [] };
|
|
106
|
+
// The seed stays fixed while the skills are scanned: a skill qualifies by
|
|
107
|
+
// citing one of the CVE's OWN weaknesses, never one another skill dragged in.
|
|
108
|
+
const seed = new Set(entry.cwe_refs || []);
|
|
109
|
+
const cwes = new Set(seed);
|
|
110
|
+
const atlases = new Set(entry.atlas_refs || []);
|
|
111
|
+
const fws = new Set(Object.keys(entry.framework_control_gaps || {}));
|
|
112
|
+
const citing = [];
|
|
113
|
+
for (const s of allSkills) {
|
|
114
|
+
if (!(s.cwe_refs || []).some((c) => seed.has(c))) continue;
|
|
115
|
+
citing.push(s.name);
|
|
111
116
|
for (const c of s.cwe_refs || []) cwes.add(c);
|
|
112
117
|
for (const a of s.atlas_refs || []) atlases.add(a);
|
|
113
118
|
for (const f of s.framework_gaps || []) fws.add(f);
|
|
114
119
|
}
|
|
115
|
-
return { cwes: [...cwes], atlases: [...atlases], fws: [...fws] };
|
|
116
|
-
}
|
|
120
|
+
return { cwes: [...cwes], atlases: [...atlases], fws: [...fws], citing };
|
|
121
|
+
}
|
|
122
|
+
// Seeded from a CVE whose weaknesses several skills actually cite, so the row
|
|
123
|
+
// times a join that unions real skill refs instead of terminating at the seed.
|
|
124
|
+
const CHAIN_CVE_ID = "CVE-2026-46817";
|
|
125
|
+
bench(`multi-hop chain: ${CHAIN_CVE_ID} → CWE → ATLAS → frameworks`, () =>
|
|
126
|
+
multiHopChain(catalogObjs["cve-catalog.json"], skills, CHAIN_CVE_ID)
|
|
127
|
+
);
|
|
117
128
|
|
|
118
129
|
bench(`watchlist aggregator (full scan, ${skills.length} skills)`, () => {
|
|
119
130
|
const watch = new Set();
|
|
@@ -135,12 +135,14 @@ function pullField(body, label) {
|
|
|
135
135
|
return m ? m[1].trim() : null;
|
|
136
136
|
}
|
|
137
137
|
|
|
138
|
-
|
|
138
|
+
// `patternMap` defaults to the curated map; an explicit one lets a test drive
|
|
139
|
+
// the builder with a pattern set of a different size.
|
|
140
|
+
function buildTheaterFingerprints({ root, patternMap = PATTERN_CONTROL_MAP }) {
|
|
139
141
|
const skillPath = path.join(root, "skills/compliance-theater/skill.md");
|
|
140
142
|
const body = fs.readFileSync(skillPath, "utf8");
|
|
141
143
|
|
|
142
144
|
const out = {};
|
|
143
|
-
for (const [num, meta] of Object.entries(
|
|
145
|
+
for (const [num, meta] of Object.entries(patternMap)) {
|
|
144
146
|
const patternBody = extractPatternBodyFromSkill(body, Number(num));
|
|
145
147
|
out[`pattern-${num}`] = {
|
|
146
148
|
pattern_number: Number(num),
|
|
@@ -169,11 +171,14 @@ function buildTheaterFingerprints({ root }) {
|
|
|
169
171
|
}
|
|
170
172
|
}
|
|
171
173
|
|
|
174
|
+
const patternCount = Object.keys(out).length;
|
|
172
175
|
return {
|
|
173
176
|
_meta: {
|
|
174
177
|
schema_version: "1.0.0",
|
|
175
|
-
|
|
176
|
-
pattern_count
|
|
178
|
+
// Counted from the built set, not written out, so adding a pattern cannot
|
|
179
|
+
// leave this prose contradicting pattern_count in the shipped index.
|
|
180
|
+
source: `skills/compliance-theater/skill.md (${patternCount} documented patterns)`,
|
|
181
|
+
pattern_count: patternCount,
|
|
177
182
|
},
|
|
178
183
|
patterns: out,
|
|
179
184
|
by_control: byControl,
|
|
@@ -35,8 +35,20 @@ function findReservedFixtures(dir) {
|
|
|
35
35
|
}
|
|
36
36
|
}
|
|
37
37
|
|
|
38
|
+
// Repo-relative POSIX form of <dir>/<file> for a diagnostic, falling back to the
|
|
39
|
+
// literal path when `dir` sits outside the repo (a test-only override dir).
|
|
40
|
+
function collectorDisplayPath(dir, file) {
|
|
41
|
+
const abs = path.join(dir, file);
|
|
42
|
+
const rel = path.relative(ROOT, abs).split(path.sep).join("/");
|
|
43
|
+
return rel && !rel.startsWith("..") ? rel : abs.split(path.sep).join("/");
|
|
44
|
+
}
|
|
45
|
+
|
|
38
46
|
// Classify every <dir>/*.js: a collector requires cleanly and exports collect();
|
|
39
47
|
// a require that throws becomes a load error rather than a silent omission.
|
|
48
|
+
//
|
|
49
|
+
// collectorFiles entries keep the literal `lib/collectors/` prefix whatever `dir`
|
|
50
|
+
// is: they are compared against the paths AGENTS.md enumerates, which always name
|
|
51
|
+
// the shipped location. Only the load-error diagnostic names the real path.
|
|
40
52
|
function classifyCollectors(dir) {
|
|
41
53
|
const jsFiles = fs.readdirSync(dir)
|
|
42
54
|
.filter((f) => f.endsWith(".js") && !isReservedFixture(f))
|
|
@@ -48,7 +60,7 @@ function classifyCollectors(dir) {
|
|
|
48
60
|
try {
|
|
49
61
|
mod = require(path.join(dir, f));
|
|
50
62
|
} catch (e) {
|
|
51
|
-
loadErrors.push(
|
|
63
|
+
loadErrors.push(`${collectorDisplayPath(dir, f)}: ${e.message.split("\n")[0]}`);
|
|
52
64
|
continue;
|
|
53
65
|
}
|
|
54
66
|
if (typeof mod.collect === "function") {
|
|
@@ -106,7 +118,7 @@ function main() {
|
|
|
106
118
|
|
|
107
119
|
if (loadErrors.length > 0) {
|
|
108
120
|
console.error(
|
|
109
|
-
`[check-agents-md-collectors] cannot load ${loadErrors.length} module(s) in
|
|
121
|
+
`[check-agents-md-collectors] cannot load ${loadErrors.length} module(s) in ${collectorDisplayPath(COLLECTOR_DIR, "")}/ ` +
|
|
110
122
|
`- a require-time failure must not be silently excluded from the count + enumeration check:\n ` +
|
|
111
123
|
loadErrors.join("\n ")
|
|
112
124
|
);
|
|
@@ -163,4 +175,4 @@ if (require.main === module) {
|
|
|
163
175
|
main();
|
|
164
176
|
}
|
|
165
177
|
|
|
166
|
-
module.exports = { classifyCollectors };
|
|
178
|
+
module.exports = { classifyCollectors, collectorDisplayPath };
|