@blamejs/exceptd-skills 0.16.21 → 0.16.23
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/ARCHITECTURE.md +2 -2
- package/CHANGELOG.md +28 -0
- package/CONTEXT.md +9 -9
- package/README.md +3 -3
- package/agents/skill-updater.md +1 -1
- package/agents/source-validator.md +3 -4
- package/agents/threat-researcher.md +1 -1
- package/bin/exceptd.js +19 -7
- package/data/_indexes/_meta.json +10 -10
- package/data/_indexes/activity-feed.json +12 -12
- package/data/_indexes/chains.json +70084 -3852
- package/data/_indexes/frequency.json +492 -163
- package/data/_indexes/section-offsets.json +16 -16
- package/data/_indexes/summary-cards.json +272 -106
- package/data/_indexes/token-budget.json +10 -10
- package/data/_indexes/trigger-table.json +15 -6
- package/data/_indexes/xref.json +218 -26
- package/data/cve-catalog.json +10 -10
- package/data/cwe-catalog.json +1 -0
- package/lib/auto-discovery.js +39 -1
- package/lib/collectors/scan-excludes.js +4 -1
- package/lib/cve-cli.js +9 -1
- package/lib/cve-curation.js +8 -1
- package/lib/exit-codes.js +2 -0
- package/lib/flag-suggest.js +1 -1
- package/lib/lint-skills.js +70 -0
- package/lib/playbook-runner.js +59 -11
- package/lib/prefetch.js +24 -1
- package/lib/refresh-external.js +56 -5
- package/lib/rfc-cli.js +8 -1
- package/lib/scoring.js +36 -8
- package/lib/validate-cve-catalog.js +36 -14
- package/lib/validate-package.js +8 -0
- package/lib/validate-playbooks.js +42 -0
- package/lib/verify.js +4 -3
- package/manifest-snapshot.json +4 -2
- package/manifest-snapshot.sha256 +1 -1
- package/manifest.json +57 -54
- package/orchestrator/index.js +48 -4
- package/orchestrator/scanner.js +53 -5
- package/package.json +1 -1
- package/sbom.cdx.json +80 -80
- package/scripts/build-indexes.js +42 -8
- package/scripts/check-sbom-currency.js +72 -0
- package/scripts/release.js +22 -15
- package/skills/exploit-scoring/skill.md +8 -8
- package/sources/validators/cve-validator.js +6 -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:14e75496-5212-46a1-a643-4fe20a9cc336",
|
|
5
5
|
"version": 1,
|
|
6
6
|
"metadata": {
|
|
7
|
-
"timestamp": "
|
|
7
|
+
"timestamp": "2037-02-11T01:59:50.000Z",
|
|
8
8
|
"tools": [
|
|
9
9
|
{
|
|
10
10
|
"vendor": "blamejs",
|
|
11
11
|
"name": "scripts/refresh-sbom.js",
|
|
12
|
-
"version": "0.16.
|
|
12
|
+
"version": "0.16.23"
|
|
13
13
|
}
|
|
14
14
|
],
|
|
15
15
|
"component": {
|
|
16
|
-
"bom-ref": "pkg:npm/@blamejs/exceptd-skills@0.16.
|
|
16
|
+
"bom-ref": "pkg:npm/@blamejs/exceptd-skills@0.16.23",
|
|
17
17
|
"type": "application",
|
|
18
18
|
"name": "@blamejs/exceptd-skills",
|
|
19
|
-
"version": "0.16.
|
|
19
|
+
"version": "0.16.23",
|
|
20
20
|
"description": "AI security skills grounded in mid-2026 threat reality, not stale framework documentation. 51 skills, 11 catalogs (439 CVEs / 177 CWEs / 805 ATT&CK + ICS / 170 ATLAS / 468 D3FEND / 8888 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.16.
|
|
28
|
+
"purl": "pkg:npm/%40blamejs/exceptd-skills@0.16.23",
|
|
29
29
|
"hashes": [
|
|
30
30
|
{
|
|
31
31
|
"alg": "SHA-256",
|
|
32
|
-
"content": "
|
|
32
|
+
"content": "48dc8fd171d88671dc7a8341de642d552731acc908f911f0f79ae011d0260549"
|
|
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.16.
|
|
38
|
+
"url": "https://www.npmjs.com/package/@blamejs/exceptd-skills/v/0.16.23"
|
|
39
39
|
},
|
|
40
40
|
{
|
|
41
41
|
"type": "vcs",
|
|
@@ -101,11 +101,11 @@
|
|
|
101
101
|
"hashes": [
|
|
102
102
|
{
|
|
103
103
|
"alg": "SHA-256",
|
|
104
|
-
"content": "
|
|
104
|
+
"content": "674279dd37162e6d10ef2be6022ecd86cde248b954def993be8b993ec29660b8"
|
|
105
105
|
},
|
|
106
106
|
{
|
|
107
107
|
"alg": "SHA3-512",
|
|
108
|
-
"content": "
|
|
108
|
+
"content": "c4ebbfc044463be4c843c6bc01e0533d16fa52a540478b0acc344afc63606a4f23f934a3e9a97ea8673550e48e0d5b70346458b68c3d48c63dd7b893e9c34718"
|
|
109
109
|
}
|
|
110
110
|
]
|
|
111
111
|
},
|
|
@@ -116,11 +116,11 @@
|
|
|
116
116
|
"hashes": [
|
|
117
117
|
{
|
|
118
118
|
"alg": "SHA-256",
|
|
119
|
-
"content": "
|
|
119
|
+
"content": "64d379ea8b621732ebdc9322ec31c739495d837b100d0ff81e9566c0d9e1b3b4"
|
|
120
120
|
},
|
|
121
121
|
{
|
|
122
122
|
"alg": "SHA3-512",
|
|
123
|
-
"content": "
|
|
123
|
+
"content": "1fbe1b7ce74d758248c760775643c41787945ecc439a81be99aeeb24ea7cd312f3b06bbf3f1aea6ba81cc570c3804f78675b89c196d866fd268d3b872ef52faa"
|
|
124
124
|
}
|
|
125
125
|
]
|
|
126
126
|
},
|
|
@@ -131,11 +131,11 @@
|
|
|
131
131
|
"hashes": [
|
|
132
132
|
{
|
|
133
133
|
"alg": "SHA-256",
|
|
134
|
-
"content": "
|
|
134
|
+
"content": "c65fbe5e378e3c00aa4204bc91ba1f9b55f6fdd3ed9dceff8fd1976f18bbf214"
|
|
135
135
|
},
|
|
136
136
|
{
|
|
137
137
|
"alg": "SHA3-512",
|
|
138
|
-
"content": "
|
|
138
|
+
"content": "06ab6d47d304f62db2a8ea33e4e09cc1758f1ca2d3312a197d93d6af87fddcc42d850084d4749fd766eb88c7f78307e911acd5781f4a000ba0c2476da6bba36c"
|
|
139
139
|
}
|
|
140
140
|
]
|
|
141
141
|
},
|
|
@@ -176,11 +176,11 @@
|
|
|
176
176
|
"hashes": [
|
|
177
177
|
{
|
|
178
178
|
"alg": "SHA-256",
|
|
179
|
-
"content": "
|
|
179
|
+
"content": "9eddfe30961abf6262a026c2d447561e6b51b57a81785a6bf045d035672dd544"
|
|
180
180
|
},
|
|
181
181
|
{
|
|
182
182
|
"alg": "SHA3-512",
|
|
183
|
-
"content": "
|
|
183
|
+
"content": "52d4d172392febeed44bcdb639d7fe47c59c9d6fa7427154d14eb5d33201e8e9825f3ad87469961fe2fca999a81632950768733741e2108c0b0bd5235d039b74"
|
|
184
184
|
}
|
|
185
185
|
]
|
|
186
186
|
},
|
|
@@ -236,11 +236,11 @@
|
|
|
236
236
|
"hashes": [
|
|
237
237
|
{
|
|
238
238
|
"alg": "SHA-256",
|
|
239
|
-
"content": "
|
|
239
|
+
"content": "5abe59107bb7ec2d3cd7ca39a71190ed95c5045609dfa755caac3305f087d6e1"
|
|
240
240
|
},
|
|
241
241
|
{
|
|
242
242
|
"alg": "SHA3-512",
|
|
243
|
-
"content": "
|
|
243
|
+
"content": "10ed25dfc75cabebf34c9e0f661389ed47fc32270c4333415cd3ecb14126857180be12b23142fc23baf398d142585a60555ca9a2fb17616e5c98788da3b1c186"
|
|
244
244
|
}
|
|
245
245
|
]
|
|
246
246
|
},
|
|
@@ -251,11 +251,11 @@
|
|
|
251
251
|
"hashes": [
|
|
252
252
|
{
|
|
253
253
|
"alg": "SHA-256",
|
|
254
|
-
"content": "
|
|
254
|
+
"content": "69bb42525e8f5bb8b913b9406d3d263277663a1e5f59f79b13dc603ddaf90652"
|
|
255
255
|
},
|
|
256
256
|
{
|
|
257
257
|
"alg": "SHA3-512",
|
|
258
|
-
"content": "
|
|
258
|
+
"content": "232addf35c1df6f3c3bcd7574c764991f8f649ff860fe035b831972cc37f84426766bc828337bc12564f12f1b038cdc89b62744c5b3210f457006d0b7ab91617"
|
|
259
259
|
}
|
|
260
260
|
]
|
|
261
261
|
},
|
|
@@ -266,11 +266,11 @@
|
|
|
266
266
|
"hashes": [
|
|
267
267
|
{
|
|
268
268
|
"alg": "SHA-256",
|
|
269
|
-
"content": "
|
|
269
|
+
"content": "d8cbcf17f175a6be248c57a02d3be3492c4aa348b88a6f3b4f8bec6e2dc751b7"
|
|
270
270
|
},
|
|
271
271
|
{
|
|
272
272
|
"alg": "SHA3-512",
|
|
273
|
-
"content": "
|
|
273
|
+
"content": "60ade875c8e16503e4d28b302fde3019247290ddb01a79a876d111d80607d18f7de7b96963258df0f6baf45ceebab5dd3dc9897a396b2999ca42bedbd7a78621"
|
|
274
274
|
}
|
|
275
275
|
]
|
|
276
276
|
},
|
|
@@ -281,11 +281,11 @@
|
|
|
281
281
|
"hashes": [
|
|
282
282
|
{
|
|
283
283
|
"alg": "SHA-256",
|
|
284
|
-
"content": "
|
|
284
|
+
"content": "c09d3eafa28abe02063d8281796edcc59cbc6f9e682b815d4a26dca09c5bdaa5"
|
|
285
285
|
},
|
|
286
286
|
{
|
|
287
287
|
"alg": "SHA3-512",
|
|
288
|
-
"content": "
|
|
288
|
+
"content": "92a91075eac9b73177ebb0a2ff7d314083a1728de17eab9de339970d274a012b7e8c7eed92842e983bd0563258881d8e805814903b751fb6a1a402f4acf1e854"
|
|
289
289
|
}
|
|
290
290
|
]
|
|
291
291
|
},
|
|
@@ -326,11 +326,11 @@
|
|
|
326
326
|
"hashes": [
|
|
327
327
|
{
|
|
328
328
|
"alg": "SHA-256",
|
|
329
|
-
"content": "
|
|
329
|
+
"content": "51d8425a49e5cc0375d0a154a83a16816e99c3141a5bbafe6383607ca11be240"
|
|
330
330
|
},
|
|
331
331
|
{
|
|
332
332
|
"alg": "SHA3-512",
|
|
333
|
-
"content": "
|
|
333
|
+
"content": "d72f81bda45d041179f54044811d65afaab3ac7050aa6b8625fc03a3f0d1666b7bb8a129dddfa9fef503701c0affc6228f23ea75ca8ab14c228bd349706a906f"
|
|
334
334
|
}
|
|
335
335
|
]
|
|
336
336
|
},
|
|
@@ -341,11 +341,11 @@
|
|
|
341
341
|
"hashes": [
|
|
342
342
|
{
|
|
343
343
|
"alg": "SHA-256",
|
|
344
|
-
"content": "
|
|
344
|
+
"content": "b398003b68b0d9539d13a5536e933005149fd05f3d33978297c870987542cd86"
|
|
345
345
|
},
|
|
346
346
|
{
|
|
347
347
|
"alg": "SHA3-512",
|
|
348
|
-
"content": "
|
|
348
|
+
"content": "4aa248dade3ef67261aa1df9ad71ad526269693058c2adaa421e8e6d9a3356a5faa98e9f6975095633e2fe2f4993f5b49e9e649e67dffc73e69fd211ebddbe1c"
|
|
349
349
|
}
|
|
350
350
|
]
|
|
351
351
|
},
|
|
@@ -986,11 +986,11 @@
|
|
|
986
986
|
"hashes": [
|
|
987
987
|
{
|
|
988
988
|
"alg": "SHA-256",
|
|
989
|
-
"content": "
|
|
989
|
+
"content": "d575b76128fa4a54802b3fa08145036d24dff1300812c054cf39957b3c597f48"
|
|
990
990
|
},
|
|
991
991
|
{
|
|
992
992
|
"alg": "SHA3-512",
|
|
993
|
-
"content": "
|
|
993
|
+
"content": "d2b274e3b7d0d055e20ab6d8af01499df0971ca4e895a6f397237d02e1c88c45de3ed386716b93d3f7c1a499df131ab6bda4d4e2f4e29f1611f512d27828080d"
|
|
994
994
|
}
|
|
995
995
|
]
|
|
996
996
|
},
|
|
@@ -1241,11 +1241,11 @@
|
|
|
1241
1241
|
"hashes": [
|
|
1242
1242
|
{
|
|
1243
1243
|
"alg": "SHA-256",
|
|
1244
|
-
"content": "
|
|
1244
|
+
"content": "f8eeaf27ccd0b96bbf47ed9777e8ae695a32f8e24ae84daee9f2e3006a620daf"
|
|
1245
1245
|
},
|
|
1246
1246
|
{
|
|
1247
1247
|
"alg": "SHA3-512",
|
|
1248
|
-
"content": "
|
|
1248
|
+
"content": "dd0d6a0d5314212787100d05aab34c7412f9d2f5a49375bef10c47b8032eaed3043cd4b3ed80c9f3967ee5db4dcc1b2ac72658392e87c0f1c044401e2f83d676"
|
|
1249
1249
|
}
|
|
1250
1250
|
]
|
|
1251
1251
|
},
|
|
@@ -1286,11 +1286,11 @@
|
|
|
1286
1286
|
"hashes": [
|
|
1287
1287
|
{
|
|
1288
1288
|
"alg": "SHA-256",
|
|
1289
|
-
"content": "
|
|
1289
|
+
"content": "931082e1797c58ed40932cafad60b1299a98c068df53f46f55ec1750f31f5c45"
|
|
1290
1290
|
},
|
|
1291
1291
|
{
|
|
1292
1292
|
"alg": "SHA3-512",
|
|
1293
|
-
"content": "
|
|
1293
|
+
"content": "2e69823f5db625c99cdf3b8d982e56b2fa509a3ec0c4eeecf3643368ae8d73f9f564b36456ac1359fa744a59fd010ee909f1d39d5186e5e6a269016672c71082"
|
|
1294
1294
|
}
|
|
1295
1295
|
]
|
|
1296
1296
|
},
|
|
@@ -1301,11 +1301,11 @@
|
|
|
1301
1301
|
"hashes": [
|
|
1302
1302
|
{
|
|
1303
1303
|
"alg": "SHA-256",
|
|
1304
|
-
"content": "
|
|
1304
|
+
"content": "53a1f31532b4bc988e38e362d9048a5fef790f2ee479899d84059eaa3656785e"
|
|
1305
1305
|
},
|
|
1306
1306
|
{
|
|
1307
1307
|
"alg": "SHA3-512",
|
|
1308
|
-
"content": "
|
|
1308
|
+
"content": "229f115d814a473fe69661ab8840307ff3e06dce72c628b821cdced5a8412d89220c4ca9168f2b15be418501747f33accb0a86857b2018a95e1eb8018f09de39"
|
|
1309
1309
|
}
|
|
1310
1310
|
]
|
|
1311
1311
|
},
|
|
@@ -1346,11 +1346,11 @@
|
|
|
1346
1346
|
"hashes": [
|
|
1347
1347
|
{
|
|
1348
1348
|
"alg": "SHA-256",
|
|
1349
|
-
"content": "
|
|
1349
|
+
"content": "d5df82af4dbd6ae940dbba7cc8263ca483e05bc962f0ca548b569e3f601207a5"
|
|
1350
1350
|
},
|
|
1351
1351
|
{
|
|
1352
1352
|
"alg": "SHA3-512",
|
|
1353
|
-
"content": "
|
|
1353
|
+
"content": "098bbd2dfa16d60bc33bf164ca5aa482486029a8dde7c200ff4bf5b0d8a8cd699c8c10bfe5bfa6ce10cda97139f95614aee8f0e969181dc587ce6b6ae237bc9f"
|
|
1354
1354
|
}
|
|
1355
1355
|
]
|
|
1356
1356
|
},
|
|
@@ -1361,11 +1361,11 @@
|
|
|
1361
1361
|
"hashes": [
|
|
1362
1362
|
{
|
|
1363
1363
|
"alg": "SHA-256",
|
|
1364
|
-
"content": "
|
|
1364
|
+
"content": "20355d2bb703aa27bccc58aa64c7a1bf0156ee1e6741f065ad06d232d04e40ad"
|
|
1365
1365
|
},
|
|
1366
1366
|
{
|
|
1367
1367
|
"alg": "SHA3-512",
|
|
1368
|
-
"content": "
|
|
1368
|
+
"content": "b9527fcb91677473717098496613f00941d3cf6996d3e41908c89c3bfc1f19009c85695c063b36d977debac929b4cc4c46cd1df115c20d743c40bd460dfedc82"
|
|
1369
1369
|
}
|
|
1370
1370
|
]
|
|
1371
1371
|
},
|
|
@@ -1436,11 +1436,11 @@
|
|
|
1436
1436
|
"hashes": [
|
|
1437
1437
|
{
|
|
1438
1438
|
"alg": "SHA-256",
|
|
1439
|
-
"content": "
|
|
1439
|
+
"content": "b6b3ac05cb9b5d0c86a1966656e4e0ea5b7d2b187c12f73853c2fedba1d61185"
|
|
1440
1440
|
},
|
|
1441
1441
|
{
|
|
1442
1442
|
"alg": "SHA3-512",
|
|
1443
|
-
"content": "
|
|
1443
|
+
"content": "256ca28b696c261766f47c57328088dc87c89d56998064d10072ee6f1ffe597d8f4ff565e6599ca947d0ede47020a272e7ce5f565fa5ded54f1e95b11a5b4022"
|
|
1444
1444
|
}
|
|
1445
1445
|
]
|
|
1446
1446
|
},
|
|
@@ -1451,11 +1451,11 @@
|
|
|
1451
1451
|
"hashes": [
|
|
1452
1452
|
{
|
|
1453
1453
|
"alg": "SHA-256",
|
|
1454
|
-
"content": "
|
|
1454
|
+
"content": "073d49a5fab93952d448296415dc1fd8657d1503734c95b1db4bf5dc63c495e7"
|
|
1455
1455
|
},
|
|
1456
1456
|
{
|
|
1457
1457
|
"alg": "SHA3-512",
|
|
1458
|
-
"content": "
|
|
1458
|
+
"content": "3dd95056b99b1a00eb4f317686af138f9574f363cb90bcd5f914478da7e3d3c2b6b42b1e4406cf9521e95140c2edf3b57ab9245da44c381aaae96c609e87cb1a"
|
|
1459
1459
|
}
|
|
1460
1460
|
]
|
|
1461
1461
|
},
|
|
@@ -1466,11 +1466,11 @@
|
|
|
1466
1466
|
"hashes": [
|
|
1467
1467
|
{
|
|
1468
1468
|
"alg": "SHA-256",
|
|
1469
|
-
"content": "
|
|
1469
|
+
"content": "e3e678c7dcdfab46c02fa81ebc8714daf151cd26ac02612cab7e387677638f85"
|
|
1470
1470
|
},
|
|
1471
1471
|
{
|
|
1472
1472
|
"alg": "SHA3-512",
|
|
1473
|
-
"content": "
|
|
1473
|
+
"content": "0fa092d5b83583ef17787bd72bc7155a262e521f3274789a577190feaf5158a4d829f1677a8b2c1bf13b276f9dd39549aac296f844ee1af352dbc88ea864daa5"
|
|
1474
1474
|
}
|
|
1475
1475
|
]
|
|
1476
1476
|
},
|
|
@@ -1481,11 +1481,11 @@
|
|
|
1481
1481
|
"hashes": [
|
|
1482
1482
|
{
|
|
1483
1483
|
"alg": "SHA-256",
|
|
1484
|
-
"content": "
|
|
1484
|
+
"content": "218780f3bd9ebfa07ae5dae99f28f98f7d80462bbc4826dfae3456e5737fd3da"
|
|
1485
1485
|
},
|
|
1486
1486
|
{
|
|
1487
1487
|
"alg": "SHA3-512",
|
|
1488
|
-
"content": "
|
|
1488
|
+
"content": "a89c45de464e1310f05d5ad6247aa78c0a85d8454461185e137c0925f151da1f5c1e50b7e914e092ae56f51a28c8d6b37594d6631a96352042d0d5627c5eb0b0"
|
|
1489
1489
|
}
|
|
1490
1490
|
]
|
|
1491
1491
|
},
|
|
@@ -1511,11 +1511,11 @@
|
|
|
1511
1511
|
"hashes": [
|
|
1512
1512
|
{
|
|
1513
1513
|
"alg": "SHA-256",
|
|
1514
|
-
"content": "
|
|
1514
|
+
"content": "4516ffb68586635ff74d65bf73bd5eb9f0dec7cd07799a8117e5d1a70cf19b96"
|
|
1515
1515
|
},
|
|
1516
1516
|
{
|
|
1517
1517
|
"alg": "SHA3-512",
|
|
1518
|
-
"content": "
|
|
1518
|
+
"content": "7dae96c95b073f04e33fdfc834f910fb242ea187a02f87aba805c2f09fc83ed8b64eff02ea4b53560291e96ac2a842af933fd154e7ec5b597a2f8e9c756b1188"
|
|
1519
1519
|
}
|
|
1520
1520
|
]
|
|
1521
1521
|
},
|
|
@@ -1586,11 +1586,11 @@
|
|
|
1586
1586
|
"hashes": [
|
|
1587
1587
|
{
|
|
1588
1588
|
"alg": "SHA-256",
|
|
1589
|
-
"content": "
|
|
1589
|
+
"content": "a8060a33a09bf90b1b9b8b212df217f7918f5edb7984e08071997e39b548716a"
|
|
1590
1590
|
},
|
|
1591
1591
|
{
|
|
1592
1592
|
"alg": "SHA3-512",
|
|
1593
|
-
"content": "
|
|
1593
|
+
"content": "068c678005d8e020f09c36ca7f3207889e911b479ffd8d4f2115bb1dd910def25f6bbfd81d7f299853581096414625e3cdbb47260eff4f4ab50ba715ee891994"
|
|
1594
1594
|
}
|
|
1595
1595
|
]
|
|
1596
1596
|
},
|
|
@@ -1721,11 +1721,11 @@
|
|
|
1721
1721
|
"hashes": [
|
|
1722
1722
|
{
|
|
1723
1723
|
"alg": "SHA-256",
|
|
1724
|
-
"content": "
|
|
1724
|
+
"content": "bc25508f8e773b64dd7ad575c7a7075cb25e5eae198605f228dbd8a40c7a0cd2"
|
|
1725
1725
|
},
|
|
1726
1726
|
{
|
|
1727
1727
|
"alg": "SHA3-512",
|
|
1728
|
-
"content": "
|
|
1728
|
+
"content": "5e7d78ab311e4f4de57793ace6065bfa9699d0aa3a35d70a0d1d629a96ab51bed4460e86e391eddf198151cdcd6c02491c64ad5a89ea3cbb905092e43a0782a1"
|
|
1729
1729
|
}
|
|
1730
1730
|
]
|
|
1731
1731
|
},
|
|
@@ -1751,11 +1751,11 @@
|
|
|
1751
1751
|
"hashes": [
|
|
1752
1752
|
{
|
|
1753
1753
|
"alg": "SHA-256",
|
|
1754
|
-
"content": "
|
|
1754
|
+
"content": "51953bfa4da6f34f27d1739b0ad4f3f948090f3a43a823eaf19d1f340018a9d9"
|
|
1755
1755
|
},
|
|
1756
1756
|
{
|
|
1757
1757
|
"alg": "SHA3-512",
|
|
1758
|
-
"content": "
|
|
1758
|
+
"content": "39d4d803a5a448010785efbf3df0a1c454ccdfce1150c35d4a31d50da0948b14223c2f34ef97f31d385cd02a83af58d296c866dfaca432e1598e5173cb650d8e"
|
|
1759
1759
|
}
|
|
1760
1760
|
]
|
|
1761
1761
|
},
|
|
@@ -1766,11 +1766,11 @@
|
|
|
1766
1766
|
"hashes": [
|
|
1767
1767
|
{
|
|
1768
1768
|
"alg": "SHA-256",
|
|
1769
|
-
"content": "
|
|
1769
|
+
"content": "9e034e2169c9d10a5fd46d7c0870a5df6982a07a674bd20442bd9b14e2dd4d0c"
|
|
1770
1770
|
},
|
|
1771
1771
|
{
|
|
1772
1772
|
"alg": "SHA3-512",
|
|
1773
|
-
"content": "
|
|
1773
|
+
"content": "05e672ddfb4e0d21ac8d175fd9830a9e2dbd29d2b63c13da1c6db99a3b7fd2684c3deb2daabb7ca91023d8c4b7bf7aa755dbac6e8adc067577b185be453777fa"
|
|
1774
1774
|
}
|
|
1775
1775
|
]
|
|
1776
1776
|
},
|
|
@@ -1796,11 +1796,11 @@
|
|
|
1796
1796
|
"hashes": [
|
|
1797
1797
|
{
|
|
1798
1798
|
"alg": "SHA-256",
|
|
1799
|
-
"content": "
|
|
1799
|
+
"content": "daea15b9bc962fad92105fc99c2885c99e07e2de0bb6316e976316c3a2928fb2"
|
|
1800
1800
|
},
|
|
1801
1801
|
{
|
|
1802
1802
|
"alg": "SHA3-512",
|
|
1803
|
-
"content": "
|
|
1803
|
+
"content": "a333b3208019e58a4397f9b0bed14609c0702fc52ec099e2c8f50753df335d27f274b247836e55e9b427d21017cc85705e4605b3fe3e3d93829ca90855d51a36"
|
|
1804
1804
|
}
|
|
1805
1805
|
]
|
|
1806
1806
|
},
|
|
@@ -1856,11 +1856,11 @@
|
|
|
1856
1856
|
"hashes": [
|
|
1857
1857
|
{
|
|
1858
1858
|
"alg": "SHA-256",
|
|
1859
|
-
"content": "
|
|
1859
|
+
"content": "507b7d47541c9a338602aee3fcedac2233ca1c0046bd41735adbf5b87cd0f50b"
|
|
1860
1860
|
},
|
|
1861
1861
|
{
|
|
1862
1862
|
"alg": "SHA3-512",
|
|
1863
|
-
"content": "
|
|
1863
|
+
"content": "e5510e81a61c968eb882d7b04cf8abeabe81e5ee094db4c442708de6d5fc57717e6e5bb733f05a5f17f3d474d22c0854b5f0cc3f0f93f0ad2a83bd33bb53ac7a"
|
|
1864
1864
|
}
|
|
1865
1865
|
]
|
|
1866
1866
|
},
|
|
@@ -1871,11 +1871,11 @@
|
|
|
1871
1871
|
"hashes": [
|
|
1872
1872
|
{
|
|
1873
1873
|
"alg": "SHA-256",
|
|
1874
|
-
"content": "
|
|
1874
|
+
"content": "1e9b7b0ea9e29f4b678957a284a9b1988e3debfe9296b86f3c489a2b0f47818b"
|
|
1875
1875
|
},
|
|
1876
1876
|
{
|
|
1877
1877
|
"alg": "SHA3-512",
|
|
1878
|
-
"content": "
|
|
1878
|
+
"content": "b916d03299c82027b01cbb14757629130f5e7ab1c6b4bc2e056090bc56e531991b12386d0559afd8891801c69895b203498f2f4ebde190b49c7b3ba556afbd63"
|
|
1879
1879
|
}
|
|
1880
1880
|
]
|
|
1881
1881
|
},
|
|
@@ -1886,11 +1886,11 @@
|
|
|
1886
1886
|
"hashes": [
|
|
1887
1887
|
{
|
|
1888
1888
|
"alg": "SHA-256",
|
|
1889
|
-
"content": "
|
|
1889
|
+
"content": "21596a8c5ccaf4893d6762e847de34652724f8a34503722e44642c3a613eb9e7"
|
|
1890
1890
|
},
|
|
1891
1891
|
{
|
|
1892
1892
|
"alg": "SHA3-512",
|
|
1893
|
-
"content": "
|
|
1893
|
+
"content": "1e524ec44efb2b47ec7a8e4bf080b819904c87a19daa4fd47207671c150b7c36d1edc0c929390075846db36f8f0b0ebdb2a5164dc725d08e05eb1d1c13925f40"
|
|
1894
1894
|
}
|
|
1895
1895
|
]
|
|
1896
1896
|
},
|
|
@@ -1946,11 +1946,11 @@
|
|
|
1946
1946
|
"hashes": [
|
|
1947
1947
|
{
|
|
1948
1948
|
"alg": "SHA-256",
|
|
1949
|
-
"content": "
|
|
1949
|
+
"content": "87b5529a2399de365ff9c6e155f18eda81514fcb4e01a31ccc0a88e468a5b9f1"
|
|
1950
1950
|
},
|
|
1951
1951
|
{
|
|
1952
1952
|
"alg": "SHA3-512",
|
|
1953
|
-
"content": "
|
|
1953
|
+
"content": "7f884669649d4de5dee578a9c35af8af676a76725f53a107d04abf4978274575cf87dc8315dc18d9f90bfb2cd1b38d547e4892b1e54b0e1cf3b267b476f66409"
|
|
1954
1954
|
}
|
|
1955
1955
|
]
|
|
1956
1956
|
},
|
|
@@ -1976,11 +1976,11 @@
|
|
|
1976
1976
|
"hashes": [
|
|
1977
1977
|
{
|
|
1978
1978
|
"alg": "SHA-256",
|
|
1979
|
-
"content": "
|
|
1979
|
+
"content": "0c2d66b550582c6cc999e8f51577daec4f5159f213f0c662a9eb2a3207bcca06"
|
|
1980
1980
|
},
|
|
1981
1981
|
{
|
|
1982
1982
|
"alg": "SHA3-512",
|
|
1983
|
-
"content": "
|
|
1983
|
+
"content": "59b42b9a5da8a54ed01d6afb5c241fca09ff7a3b8bde91b4f4a98f7c3fe7f2dc697b666b587676032ce7f8edc88b549e1759d14fd68eae51e25e0be35c9693d1"
|
|
1984
1984
|
}
|
|
1985
1985
|
]
|
|
1986
1986
|
},
|
|
@@ -2081,11 +2081,11 @@
|
|
|
2081
2081
|
"hashes": [
|
|
2082
2082
|
{
|
|
2083
2083
|
"alg": "SHA-256",
|
|
2084
|
-
"content": "
|
|
2084
|
+
"content": "6e2b39f275866812938a5e9b7105eb7dfb201a45c2cb6ea64ba60e5ad37600e6"
|
|
2085
2085
|
},
|
|
2086
2086
|
{
|
|
2087
2087
|
"alg": "SHA3-512",
|
|
2088
|
-
"content": "
|
|
2088
|
+
"content": "4eaee5df87cc6565d8b4e708bd0219135a901f570f34bc8e15f37e9f42d7270a464ffee895743a05b9b4fd446b4147a6f8fd36de546342e5724e7dbed0536e8f"
|
|
2089
2089
|
}
|
|
2090
2090
|
]
|
|
2091
2091
|
},
|
|
@@ -2381,11 +2381,11 @@
|
|
|
2381
2381
|
"hashes": [
|
|
2382
2382
|
{
|
|
2383
2383
|
"alg": "SHA-256",
|
|
2384
|
-
"content": "
|
|
2384
|
+
"content": "0dfd0589ba86278f1b04d1deb98429b64f5714e3a9d51c35b1bff1eca2e11ac5"
|
|
2385
2385
|
},
|
|
2386
2386
|
{
|
|
2387
2387
|
"alg": "SHA3-512",
|
|
2388
|
-
"content": "
|
|
2388
|
+
"content": "ee4b3a028a1b98c3a5d8071f25ff254cbe12c21d46292f3de42f2ac92b5e70ae2da1062a94cdf45ac0fd68d01e6641e824e6175aa5423d1f5957cdf9b83ec296"
|
|
2389
2389
|
}
|
|
2390
2390
|
]
|
|
2391
2391
|
},
|
|
@@ -2621,11 +2621,11 @@
|
|
|
2621
2621
|
"hashes": [
|
|
2622
2622
|
{
|
|
2623
2623
|
"alg": "SHA-256",
|
|
2624
|
-
"content": "
|
|
2624
|
+
"content": "b83bc09879538531d0707a2debb3a7540604898df2949033c84dc8b1498c631f"
|
|
2625
2625
|
},
|
|
2626
2626
|
{
|
|
2627
2627
|
"alg": "SHA3-512",
|
|
2628
|
-
"content": "
|
|
2628
|
+
"content": "b631e5ce6525b28c298f186870d0f540a1f9b0828ce68387c917f755252560c0cb8ad84a4d5b3a43d7e3736a370df798a7b894f7f5c15fcf236342ddfff29fc8"
|
|
2629
2629
|
}
|
|
2630
2630
|
]
|
|
2631
2631
|
},
|
|
@@ -2936,11 +2936,11 @@
|
|
|
2936
2936
|
"hashes": [
|
|
2937
2937
|
{
|
|
2938
2938
|
"alg": "SHA-256",
|
|
2939
|
-
"content": "
|
|
2939
|
+
"content": "628f4853e8d6b6ac2ad8ad159f1c9d74c392727f4ebf9bc1d7d8e43074b08a3a"
|
|
2940
2940
|
},
|
|
2941
2941
|
{
|
|
2942
2942
|
"alg": "SHA3-512",
|
|
2943
|
-
"content": "
|
|
2943
|
+
"content": "7c9a97074a3bb8f1a367a253ad46cc90dfe398e7d764f3abc5693430d44fd9f208b43765f970459a30e7f296ee1e8fbc1a895958a346769c67dfdec8dc64709a"
|
|
2944
2944
|
}
|
|
2945
2945
|
]
|
|
2946
2946
|
},
|
|
@@ -3476,11 +3476,11 @@
|
|
|
3476
3476
|
"hashes": [
|
|
3477
3477
|
{
|
|
3478
3478
|
"alg": "SHA-256",
|
|
3479
|
-
"content": "
|
|
3479
|
+
"content": "c96c23ae03353ed1c7ebf3a31be2cc3fe9caaa7c35762ae5b1f3a371744b4eaa"
|
|
3480
3480
|
},
|
|
3481
3481
|
{
|
|
3482
3482
|
"alg": "SHA3-512",
|
|
3483
|
-
"content": "
|
|
3483
|
+
"content": "b95a1b4b43a94a8f20e9d0e5454d5da290cd0b66be60e3ffb9f9c8d80af51bd081b44fd974f49171d3a02279a4560c4c675190b2aea1d6c3a26d5fda14877523"
|
|
3484
3484
|
}
|
|
3485
3485
|
]
|
|
3486
3486
|
},
|
package/scripts/build-indexes.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* scripts/build-indexes.js
|
|
4
4
|
*
|
|
5
5
|
* Produces pre-computed indexes under `data/_indexes/` so AI consumers
|
|
6
|
-
* and downstream tooling don't have to scan
|
|
6
|
+
* and downstream tooling don't have to scan every skill + catalog
|
|
7
7
|
* to answer routine cross-reference questions.
|
|
8
8
|
*
|
|
9
9
|
* Outputs (17 total):
|
|
@@ -56,6 +56,7 @@
|
|
|
56
56
|
const fs = require("fs");
|
|
57
57
|
const path = require("path");
|
|
58
58
|
const crypto = require("crypto");
|
|
59
|
+
const lint = require("../lib/lint-skills.js");
|
|
59
60
|
|
|
60
61
|
const ROOT = path.join(__dirname, "..");
|
|
61
62
|
const ABS = (p) => path.join(ROOT, p);
|
|
@@ -109,15 +110,47 @@ Examples:
|
|
|
109
110
|
|
|
110
111
|
// --- Source loading (shared in-memory snapshot) -------------------------
|
|
111
112
|
|
|
113
|
+
// Cross-reference fields the derived indexes key on. The manifest carries a
|
|
114
|
+
// cache of these, but the skill frontmatter is the authoritative source — the
|
|
115
|
+
// linter and staleness gate read frontmatter. Overlaying the parsed
|
|
116
|
+
// frontmatter onto each skill record here means the indexes reflect the skill
|
|
117
|
+
// bodies even when the manifest cache has drifted (e.g. dropping UK-CAF / AU
|
|
118
|
+
// control mappings from framework_gaps). Array fields are overlaid only when
|
|
119
|
+
// present in frontmatter; description is a scalar.
|
|
120
|
+
const FRONTMATTER_ARRAY_FIELDS = [
|
|
121
|
+
"framework_gaps", "d3fend_refs", "cwe_refs", "atlas_refs",
|
|
122
|
+
"attack_refs", "rfc_refs", "triggers", "data_deps",
|
|
123
|
+
];
|
|
124
|
+
const FRONTMATTER_SCALAR_FIELDS = ["description"];
|
|
125
|
+
|
|
126
|
+
function authoritativeSkill(entry, body) {
|
|
127
|
+
const { frontmatter } = lint.extractFrontmatterBlock(body);
|
|
128
|
+
const fm = lint.parseFrontmatter(frontmatter);
|
|
129
|
+
const merged = { ...entry };
|
|
130
|
+
for (const field of FRONTMATTER_ARRAY_FIELDS) {
|
|
131
|
+
if (Array.isArray(fm[field])) merged[field] = fm[field];
|
|
132
|
+
}
|
|
133
|
+
for (const field of FRONTMATTER_SCALAR_FIELDS) {
|
|
134
|
+
if (typeof fm[field] === "string") merged[field] = fm[field];
|
|
135
|
+
}
|
|
136
|
+
return merged;
|
|
137
|
+
}
|
|
138
|
+
|
|
112
139
|
function loadSources() {
|
|
113
140
|
const manifest = readJson(ABS("manifest.json"));
|
|
114
|
-
const skills = manifest.skills;
|
|
115
|
-
const skillNames = new Set(skills.map((s) => s.name));
|
|
116
141
|
const catalogFiles = fs.readdirSync(ABS("data")).filter((f) => f.endsWith(".json")).map((f) => "data/" + f);
|
|
117
142
|
|
|
118
143
|
// Per-skill body cache so multiple builders don't re-read the same file.
|
|
119
144
|
const skillBodies = {};
|
|
120
|
-
for (const s of skills) skillBodies[s.name] = fs.readFileSync(ABS(s.path), "utf8");
|
|
145
|
+
for (const s of manifest.skills) skillBodies[s.name] = fs.readFileSync(ABS(s.path), "utf8");
|
|
146
|
+
|
|
147
|
+
// Build the skill records from the authoritative frontmatter, falling back
|
|
148
|
+
// to the manifest cache for fields frontmatter doesn't carry (signatures,
|
|
149
|
+
// dlp_refs, etc.). Downstream builders read cross-reference arrays from
|
|
150
|
+
// these records, so this is the single point that keeps the indexes aligned
|
|
151
|
+
// with the skill bodies.
|
|
152
|
+
const skills = manifest.skills.map((s) => authoritativeSkill(s, skillBodies[s.name]));
|
|
153
|
+
const skillNames = new Set(skills.map((s) => s.name));
|
|
121
154
|
|
|
122
155
|
const ctx = {
|
|
123
156
|
root: ROOT,
|
|
@@ -157,7 +190,7 @@ const OUTPUTS = [
|
|
|
157
190
|
{
|
|
158
191
|
name: "xref",
|
|
159
192
|
file: "xref.json",
|
|
160
|
-
deps: [isManifest],
|
|
193
|
+
deps: [isManifest, isAnySkillBody],
|
|
161
194
|
build: (ctx) => {
|
|
162
195
|
const xref = {
|
|
163
196
|
cwe_refs: {}, d3fend_refs: {}, framework_gaps: {},
|
|
@@ -181,7 +214,7 @@ const OUTPUTS = [
|
|
|
181
214
|
{
|
|
182
215
|
name: "trigger-table",
|
|
183
216
|
file: "trigger-table.json",
|
|
184
|
-
deps: [isManifest],
|
|
217
|
+
deps: [isManifest, isAnySkillBody],
|
|
185
218
|
build: (ctx) => {
|
|
186
219
|
const t = {};
|
|
187
220
|
for (const s of ctx.skills) {
|
|
@@ -279,6 +312,7 @@ const OUTPUTS = [
|
|
|
279
312
|
file: "chains.json",
|
|
280
313
|
deps: [
|
|
281
314
|
isManifest,
|
|
315
|
+
isAnySkillBody,
|
|
282
316
|
isCatalog("cve-catalog"),
|
|
283
317
|
isCatalog("cwe-catalog"),
|
|
284
318
|
isCatalog("framework-control-gaps"),
|
|
@@ -429,7 +463,7 @@ const OUTPUTS = [
|
|
|
429
463
|
{
|
|
430
464
|
name: "frequency",
|
|
431
465
|
file: "frequency.json",
|
|
432
|
-
deps: [isManifest, isAnyCatalog],
|
|
466
|
+
deps: [isManifest, isAnySkillBody, isAnyCatalog],
|
|
433
467
|
build: (ctx) => {
|
|
434
468
|
const { buildFrequency } = require("./builders/frequency");
|
|
435
469
|
return buildFrequency({
|
|
@@ -445,7 +479,7 @@ const OUTPUTS = [
|
|
|
445
479
|
{
|
|
446
480
|
name: "activity-feed",
|
|
447
481
|
file: "activity-feed.json",
|
|
448
|
-
deps: [isManifest, isAnyCatalog],
|
|
482
|
+
deps: [isManifest, isAnySkillBody, isAnyCatalog],
|
|
449
483
|
build: (ctx) => {
|
|
450
484
|
const { buildActivityFeed } = require("./builders/activity-feed");
|
|
451
485
|
return buildActivityFeed({ root: ctx.root, manifest: ctx.manifest, skills: ctx.skills, catalogFiles: ctx.catalogFiles });
|