@blamejs/exceptd-skills 0.12.7 → 0.12.8

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 (64) hide show
  1. package/AGENTS.md +14 -0
  2. package/CHANGELOG.md +67 -0
  3. package/bin/exceptd.js +189 -52
  4. package/data/_indexes/_meta.json +37 -37
  5. package/data/_indexes/activity-feed.json +26 -26
  6. package/data/_indexes/catalog-summaries.json +8 -8
  7. package/data/_indexes/chains.json +238 -0
  8. package/data/_indexes/frequency.json +63 -5
  9. package/data/_indexes/jurisdiction-map.json +13 -3
  10. package/data/_indexes/section-offsets.json +881 -845
  11. package/data/_indexes/summary-cards.json +2 -2
  12. package/data/_indexes/token-budget.json +145 -125
  13. package/data/atlas-ttps.json +189 -1
  14. package/data/cwe-catalog.json +290 -1
  15. package/data/d3fend-catalog.json +163 -1
  16. package/data/framework-control-gaps.json +243 -0
  17. package/data/playbooks/containers.json +23 -5
  18. package/data/playbooks/cred-stores.json +9 -9
  19. package/data/playbooks/crypto.json +8 -8
  20. package/data/playbooks/hardening.json +46 -10
  21. package/data/playbooks/library-author.json +16 -20
  22. package/data/playbooks/runtime.json +7 -7
  23. package/data/playbooks/sbom.json +11 -11
  24. package/data/playbooks/secrets.json +4 -4
  25. package/data/rfc-references.json +144 -0
  26. package/lib/refresh-external.js +25 -5
  27. package/lib/schemas/skill-frontmatter.schema.json +2 -2
  28. package/manifest-snapshot.json +1 -1
  29. package/manifest.json +67 -67
  30. package/package.json +2 -1
  31. package/sbom.cdx.json +6 -6
  32. package/scripts/check-sbom-currency.js +87 -0
  33. package/scripts/check-test-coverage.README.md +148 -0
  34. package/scripts/check-test-coverage.js +455 -0
  35. package/scripts/hooks/pre-commit.sh +19 -0
  36. package/scripts/predeploy.js +16 -30
  37. package/skills/age-gates-child-safety/skill.md +3 -0
  38. package/skills/ai-attack-surface/skill.md +4 -1
  39. package/skills/ai-c2-detection/skill.md +6 -1
  40. package/skills/ai-risk-management/skill.md +3 -0
  41. package/skills/api-security/skill.md +3 -0
  42. package/skills/attack-surface-pentest/skill.md +3 -0
  43. package/skills/cloud-security/skill.md +3 -0
  44. package/skills/container-runtime-security/skill.md +3 -0
  45. package/skills/coordinated-vuln-disclosure/skill.md +8 -1
  46. package/skills/defensive-countermeasure-mapping/skill.md +1 -1
  47. package/skills/dlp-gap-analysis/skill.md +3 -0
  48. package/skills/email-security-anti-phishing/skill.md +9 -1
  49. package/skills/identity-assurance/skill.md +6 -1
  50. package/skills/incident-response-playbook/skill.md +8 -2
  51. package/skills/kernel-lpe-triage/skill.md +24 -4
  52. package/skills/mcp-agent-trust/skill.md +4 -1
  53. package/skills/mlops-security/skill.md +3 -0
  54. package/skills/ot-ics-security/skill.md +3 -0
  55. package/skills/rag-pipeline-security/skill.md +3 -0
  56. package/skills/sector-energy/skill.md +3 -0
  57. package/skills/sector-federal-government/skill.md +3 -0
  58. package/skills/sector-financial/skill.md +3 -0
  59. package/skills/sector-healthcare/skill.md +3 -0
  60. package/skills/security-maturity-tiers/skill.md +19 -1
  61. package/skills/skill-update-loop/skill.md +32 -0
  62. package/skills/supply-chain-integrity/skill.md +3 -0
  63. package/skills/threat-modeling-methodology/skill.md +3 -0
  64. package/skills/webapp-security/skill.md +3 -0
@@ -509,7 +509,7 @@
509
509
  },
510
510
  "skill-update-loop": {
511
511
  "description": "Meta-skill for keeping all exceptd skills current — CISA KEV triggers, ATLAS version updates, framework amendments, forward_watch resolution, currency scoring",
512
- "threat_context_excerpt": null,
512
+ "threat_context_excerpt": "The threat context this skill defends against is not a specific adversary technique — it is the **drift attack against the platform's own currency**: an exceptd installation whose skills, catalogs, framework references, and ATLAS pins age silently between releases until the operator-facing analysis is calibrated to a threat model that no longer exists.",
513
513
  "produces": "```\n## Skill Update Loop Report\n\n**Date:** YYYY-MM-DD\n**Last Full Review:** [date from manifest.json]\n\n### Unprocessed Triggers\n| Trigger Type | Item | Affected Skills | Urgency |\n|---|---|---|---|\n\n### Skill Currency Scores\n| Skill | Last Review | Currency Score | Status |\n|---|---|---|---|\n\n### Prioritized Update Tasks\n[Ordered by urgency: specific skill, specific section, specific required change]\n\n### Forward Watch Status\n[Per skill's forward_watch items: resolved/pending/newly added]\n```\n\n---",
514
514
  "key_xrefs": {
515
515
  "cwe_refs": [],
@@ -787,7 +787,7 @@
787
787
  "defensive-countermeasure-mapping": {
788
788
  "description": "Map offensive findings (CVE / TTP / framework gap) to MITRE D3FEND defensive countermeasures with explicit defense-in-depth, least-privilege, and zero-trust layering",
789
789
  "threat_context_excerpt": "ATT&CK and ATLAS are now load-bearing in SOC detection engineering. Detection content is written against technique IDs; red-team reports are mapped to technique IDs; threat intel feeds emit technique IDs. The result: the offensive side of every blue-team discussion is technique-grained and crisp.",
790
- "produces": "```\n# Defensive Countermeasure Map — <input>\n\n## What this is\n<one-line classification + canonical reference>\nExample: \"CVE — Linux kernel LPE. Canonical: CVE-2026-31431 (Copy Fail).\"\n\n## Offensive technique set (input to D3FEND query)\n- <AML.Txxxx / Txxxx / CWE-xxx list, with one-line descriptions>\n\n## Defensive-coverage map\n| D3FEND ID | Name | Tactic (DiD layer) | Privilege scope | ZT posture | Deployed? | AI-pipeline applicable? | Framework controls partially mapped | Live-tunable? |\n|-----------|------|--------------------|-----------------|------------|-----------|----------------------- ...",
790
+ "produces": "```\n# Defensive Countermeasure Map — <input>\n\n## What this is\n<one-line classification + canonical reference>\nExample: \"CVE — Linux kernel LPE. Canonical: CVE-2026-31431 (Copy Fail).\"\n\n## Offensive technique set (input to D3FEND query)\n- <AML.T0001-or-similar / T0001-or-similar / CWE-<id> list, with one-line descriptions>\n\n## Defensive-coverage map\n| D3FEND ID | Name | Tactic (DiD layer) | Privilege scope | ZT posture | Deployed? | AI-pipeline applicable? | Framework controls partially mapped | Live-tunable? |\n|-----------|------|--------------------|-----------------|------------|-----------| ...",
791
791
  "key_xrefs": {
792
792
  "cwe_refs": [],
793
793
  "d3fend_refs": [
@@ -3,17 +3,17 @@
3
3
  "schema_version": "1.0.0",
4
4
  "tokenizer_note": "Character-density approximation: 1 token ≈ 4 chars. This is the canonical rule-of-thumb for OpenAI tokenizers on English+technical text. Claude's tokenizer is typically more efficient on prose; treat this as an upper-bound budget for both. Consumers with stricter precision needs should re-tokenize with their own tokenizer.",
5
5
  "approx_chars_per_token": 4,
6
- "total_chars": 1339318,
7
- "total_approx_tokens": 334832,
6
+ "total_chars": 1348369,
7
+ "total_approx_tokens": 337096,
8
8
  "skill_count": 38
9
9
  },
10
10
  "skills": {
11
11
  "kernel-lpe-triage": {
12
12
  "path": "skills/kernel-lpe-triage/skill.md",
13
- "bytes": 19039,
14
- "chars": 18941,
15
- "lines": 304,
16
- "approx_tokens": 4735,
13
+ "bytes": 21205,
14
+ "chars": 21099,
15
+ "lines": 324,
16
+ "approx_tokens": 5275,
17
17
  "approx_chars_per_token": 4,
18
18
  "sections": {
19
19
  "threat-context": {
@@ -36,10 +36,15 @@
36
36
  "chars": 614,
37
37
  "approx_tokens": 154
38
38
  },
39
+ "compliance-theater-check": {
40
+ "bytes": 2072,
41
+ "chars": 2064,
42
+ "approx_tokens": 516
43
+ },
39
44
  "analysis-procedure": {
40
- "bytes": 4591,
41
- "chars": 4589,
42
- "approx_tokens": 1147
45
+ "bytes": 4646,
46
+ "chars": 4644,
47
+ "approx_tokens": 1161
43
48
  },
44
49
  "output-format": {
45
50
  "bytes": 1407,
@@ -60,10 +65,10 @@
60
65
  },
61
66
  "ai-attack-surface": {
62
67
  "path": "skills/ai-attack-surface/skill.md",
63
- "bytes": 16241,
64
- "chars": 16215,
65
- "lines": 283,
66
- "approx_tokens": 4054,
68
+ "bytes": 16309,
69
+ "chars": 16283,
70
+ "lines": 286,
71
+ "approx_tokens": 4071,
67
72
  "approx_chars_per_token": 4,
68
73
  "sections": {
69
74
  "threat-context": {
@@ -105,10 +110,10 @@
105
110
  },
106
111
  "mcp-agent-trust": {
107
112
  "path": "skills/mcp-agent-trust/skill.md",
108
- "bytes": 19649,
109
- "chars": 19587,
110
- "lines": 327,
111
- "approx_tokens": 4897,
113
+ "bytes": 19717,
114
+ "chars": 19655,
115
+ "lines": 330,
116
+ "approx_tokens": 4914,
112
117
  "approx_chars_per_token": 4,
113
118
  "sections": {
114
119
  "threat-context": {
@@ -320,10 +325,10 @@
320
325
  },
321
326
  "rag-pipeline-security": {
322
327
  "path": "skills/rag-pipeline-security/skill.md",
323
- "bytes": 24056,
324
- "chars": 23915,
325
- "lines": 295,
326
- "approx_tokens": 5979,
328
+ "bytes": 24124,
329
+ "chars": 23983,
330
+ "lines": 298,
331
+ "approx_tokens": 5996,
327
332
  "approx_chars_per_token": 4,
328
333
  "sections": {
329
334
  "threat-context": {
@@ -395,10 +400,10 @@
395
400
  },
396
401
  "ai-c2-detection": {
397
402
  "path": "skills/ai-c2-detection/skill.md",
398
- "bytes": 29528,
399
- "chars": 29404,
400
- "lines": 441,
401
- "approx_tokens": 7351,
403
+ "bytes": 29630,
404
+ "chars": 29506,
405
+ "lines": 446,
406
+ "approx_tokens": 7377,
402
407
  "approx_chars_per_token": 4,
403
408
  "sections": {
404
409
  "threat-context": {
@@ -765,12 +770,22 @@
765
770
  },
766
771
  "skill-update-loop": {
767
772
  "path": "skills/skill-update-loop/skill.md",
768
- "bytes": 39993,
769
- "chars": 39897,
770
- "lines": 464,
771
- "approx_tokens": 9974,
773
+ "bytes": 42574,
774
+ "chars": 42470,
775
+ "lines": 496,
776
+ "approx_tokens": 10618,
772
777
  "approx_chars_per_token": 4,
773
778
  "sections": {
779
+ "threat-context": {
780
+ "bytes": 1510,
781
+ "chars": 1504,
782
+ "approx_tokens": 376
783
+ },
784
+ "ttp-mapping": {
785
+ "bytes": 1071,
786
+ "chars": 1069,
787
+ "approx_tokens": 267
788
+ },
774
789
  "why-skills-decay": {
775
790
  "bytes": 887,
776
791
  "chars": 887,
@@ -820,10 +835,10 @@
820
835
  },
821
836
  "security-maturity-tiers": {
822
837
  "path": "skills/security-maturity-tiers/skill.md",
823
- "bytes": 26953,
824
- "chars": 26795,
825
- "lines": 465,
826
- "approx_tokens": 6699,
838
+ "bytes": 29283,
839
+ "chars": 29119,
840
+ "lines": 483,
841
+ "approx_tokens": 7280,
827
842
  "approx_chars_per_token": 4,
828
843
  "sections": {
829
844
  "how-to-use-this-skill": {
@@ -837,9 +852,9 @@
837
852
  "approx_tokens": 128
838
853
  },
839
854
  "domain-kernel-lpe-copy-fail-dirty-frag-class": {
840
- "bytes": 4068,
841
- "chars": 4058,
842
- "approx_tokens": 1015
855
+ "bytes": 4081,
856
+ "chars": 4071,
857
+ "approx_tokens": 1018
843
858
  },
844
859
  "domain-ai-attack-surface": {
845
860
  "bytes": 2706,
@@ -866,6 +881,11 @@
866
881
  "chars": 985,
867
882
  "approx_tokens": 246
868
883
  },
884
+ "compliance-theater-check": {
885
+ "bytes": 2317,
886
+ "chars": 2311,
887
+ "approx_tokens": 578
888
+ },
869
889
  "the-anti-pattern-tier-3-security-theater": {
870
890
  "bytes": 644,
871
891
  "chars": 644,
@@ -940,10 +960,10 @@
940
960
  },
941
961
  "attack-surface-pentest": {
942
962
  "path": "skills/attack-surface-pentest/skill.md",
943
- "bytes": 32038,
944
- "chars": 31899,
945
- "lines": 382,
946
- "approx_tokens": 7975,
963
+ "bytes": 32110,
964
+ "chars": 31971,
965
+ "lines": 385,
966
+ "approx_tokens": 7993,
947
967
  "approx_chars_per_token": 4,
948
968
  "sections": {
949
969
  "threat-context": {
@@ -1040,10 +1060,10 @@
1040
1060
  },
1041
1061
  "dlp-gap-analysis": {
1042
1062
  "path": "skills/dlp-gap-analysis/skill.md",
1043
- "bytes": 40215,
1044
- "chars": 39956,
1045
- "lines": 338,
1046
- "approx_tokens": 9989,
1063
+ "bytes": 40295,
1064
+ "chars": 40036,
1065
+ "lines": 341,
1066
+ "approx_tokens": 10009,
1047
1067
  "approx_chars_per_token": 4,
1048
1068
  "sections": {
1049
1069
  "threat-context": {
@@ -1090,10 +1110,10 @@
1090
1110
  },
1091
1111
  "supply-chain-integrity": {
1092
1112
  "path": "skills/supply-chain-integrity/skill.md",
1093
- "bytes": 39667,
1094
- "chars": 39533,
1095
- "lines": 320,
1096
- "approx_tokens": 9883,
1113
+ "bytes": 39747,
1114
+ "chars": 39613,
1115
+ "lines": 323,
1116
+ "approx_tokens": 9903,
1097
1117
  "approx_chars_per_token": 4,
1098
1118
  "sections": {
1099
1119
  "threat-context": {
@@ -1140,10 +1160,10 @@
1140
1160
  },
1141
1161
  "defensive-countermeasure-mapping": {
1142
1162
  "path": "skills/defensive-countermeasure-mapping/skill.md",
1143
- "bytes": 32578,
1144
- "chars": 32442,
1163
+ "bytes": 32601,
1164
+ "chars": 32465,
1145
1165
  "lines": 301,
1146
- "approx_tokens": 8111,
1166
+ "approx_tokens": 8116,
1147
1167
  "approx_chars_per_token": 4,
1148
1168
  "sections": {
1149
1169
  "threat-context": {
@@ -1172,9 +1192,9 @@
1172
1192
  "approx_tokens": 1760
1173
1193
  },
1174
1194
  "output-format": {
1175
- "bytes": 4588,
1176
- "chars": 4560,
1177
- "approx_tokens": 1140
1195
+ "bytes": 4611,
1196
+ "chars": 4583,
1197
+ "approx_tokens": 1146
1178
1198
  },
1179
1199
  "compliance-theater-check": {
1180
1200
  "bytes": 2780,
@@ -1190,10 +1210,10 @@
1190
1210
  },
1191
1211
  "identity-assurance": {
1192
1212
  "path": "skills/identity-assurance/skill.md",
1193
- "bytes": 32767,
1194
- "chars": 32620,
1195
- "lines": 273,
1196
- "approx_tokens": 8155,
1213
+ "bytes": 32857,
1214
+ "chars": 32710,
1215
+ "lines": 278,
1216
+ "approx_tokens": 8178,
1197
1217
  "approx_chars_per_token": 4,
1198
1218
  "sections": {
1199
1219
  "threat-context": {
@@ -1245,10 +1265,10 @@
1245
1265
  },
1246
1266
  "ot-ics-security": {
1247
1267
  "path": "skills/ot-ics-security/skill.md",
1248
- "bytes": 36251,
1249
- "chars": 36055,
1250
- "lines": 341,
1251
- "approx_tokens": 9014,
1268
+ "bytes": 36323,
1269
+ "chars": 36127,
1270
+ "lines": 344,
1271
+ "approx_tokens": 9032,
1252
1272
  "approx_chars_per_token": 4,
1253
1273
  "sections": {
1254
1274
  "threat-context": {
@@ -1300,10 +1320,10 @@
1300
1320
  },
1301
1321
  "coordinated-vuln-disclosure": {
1302
1322
  "path": "skills/coordinated-vuln-disclosure/skill.md",
1303
- "bytes": 46794,
1304
- "chars": 46569,
1305
- "lines": 474,
1306
- "approx_tokens": 11642,
1323
+ "bytes": 46917,
1324
+ "chars": 46692,
1325
+ "lines": 481,
1326
+ "approx_tokens": 11673,
1307
1327
  "approx_chars_per_token": 4,
1308
1328
  "sections": {
1309
1329
  "threat-context": {
@@ -1355,10 +1375,10 @@
1355
1375
  },
1356
1376
  "threat-modeling-methodology": {
1357
1377
  "path": "skills/threat-modeling-methodology/skill.md",
1358
- "bytes": 30464,
1359
- "chars": 30287,
1360
- "lines": 313,
1361
- "approx_tokens": 7572,
1378
+ "bytes": 30544,
1379
+ "chars": 30367,
1380
+ "lines": 316,
1381
+ "approx_tokens": 7592,
1362
1382
  "approx_chars_per_token": 4,
1363
1383
  "sections": {
1364
1384
  "purpose": {
@@ -1415,10 +1435,10 @@
1415
1435
  },
1416
1436
  "webapp-security": {
1417
1437
  "path": "skills/webapp-security/skill.md",
1418
- "bytes": 28609,
1419
- "chars": 28437,
1420
- "lines": 282,
1421
- "approx_tokens": 7109,
1438
+ "bytes": 28689,
1439
+ "chars": 28517,
1440
+ "lines": 285,
1441
+ "approx_tokens": 7129,
1422
1442
  "approx_chars_per_token": 4,
1423
1443
  "sections": {
1424
1444
  "threat-context": {
@@ -1470,10 +1490,10 @@
1470
1490
  },
1471
1491
  "ai-risk-management": {
1472
1492
  "path": "skills/ai-risk-management/skill.md",
1473
- "bytes": 33503,
1474
- "chars": 33327,
1475
- "lines": 312,
1476
- "approx_tokens": 8332,
1493
+ "bytes": 33571,
1494
+ "chars": 33395,
1495
+ "lines": 315,
1496
+ "approx_tokens": 8349,
1477
1497
  "approx_chars_per_token": 4,
1478
1498
  "sections": {
1479
1499
  "purpose": {
@@ -1530,10 +1550,10 @@
1530
1550
  },
1531
1551
  "sector-healthcare": {
1532
1552
  "path": "skills/sector-healthcare/skill.md",
1533
- "bytes": 47318,
1534
- "chars": 47136,
1535
- "lines": 374,
1536
- "approx_tokens": 11784,
1553
+ "bytes": 47391,
1554
+ "chars": 47209,
1555
+ "lines": 377,
1556
+ "approx_tokens": 11802,
1537
1557
  "approx_chars_per_token": 4,
1538
1558
  "sections": {
1539
1559
  "threat-context": {
@@ -1585,10 +1605,10 @@
1585
1605
  },
1586
1606
  "sector-financial": {
1587
1607
  "path": "skills/sector-financial/skill.md",
1588
- "bytes": 49757,
1589
- "chars": 49594,
1590
- "lines": 399,
1591
- "approx_tokens": 12399,
1608
+ "bytes": 49827,
1609
+ "chars": 49664,
1610
+ "lines": 402,
1611
+ "approx_tokens": 12416,
1592
1612
  "approx_chars_per_token": 4,
1593
1613
  "sections": {
1594
1614
  "threat-context": {
@@ -1640,10 +1660,10 @@
1640
1660
  },
1641
1661
  "sector-federal-government": {
1642
1662
  "path": "skills/sector-federal-government/skill.md",
1643
- "bytes": 44031,
1644
- "chars": 43858,
1645
- "lines": 303,
1646
- "approx_tokens": 10965,
1663
+ "bytes": 44111,
1664
+ "chars": 43938,
1665
+ "lines": 306,
1666
+ "approx_tokens": 10985,
1647
1667
  "approx_chars_per_token": 4,
1648
1668
  "sections": {
1649
1669
  "threat-context": {
@@ -1695,10 +1715,10 @@
1695
1715
  },
1696
1716
  "sector-energy": {
1697
1717
  "path": "skills/sector-energy/skill.md",
1698
- "bytes": 53756,
1699
- "chars": 53550,
1700
- "lines": 410,
1701
- "approx_tokens": 13388,
1718
+ "bytes": 53821,
1719
+ "chars": 53615,
1720
+ "lines": 413,
1721
+ "approx_tokens": 13404,
1702
1722
  "approx_chars_per_token": 4,
1703
1723
  "sections": {
1704
1724
  "threat-context": {
@@ -1750,10 +1770,10 @@
1750
1770
  },
1751
1771
  "api-security": {
1752
1772
  "path": "skills/api-security/skill.md",
1753
- "bytes": 34581,
1754
- "chars": 34354,
1755
- "lines": 288,
1756
- "approx_tokens": 8589,
1773
+ "bytes": 34661,
1774
+ "chars": 34434,
1775
+ "lines": 291,
1776
+ "approx_tokens": 8609,
1757
1777
  "approx_chars_per_token": 4,
1758
1778
  "sections": {
1759
1779
  "threat-context": {
@@ -1805,10 +1825,10 @@
1805
1825
  },
1806
1826
  "cloud-security": {
1807
1827
  "path": "skills/cloud-security/skill.md",
1808
- "bytes": 55577,
1809
- "chars": 55341,
1810
- "lines": 385,
1811
- "approx_tokens": 13835,
1828
+ "bytes": 55647,
1829
+ "chars": 55411,
1830
+ "lines": 388,
1831
+ "approx_tokens": 13853,
1812
1832
  "approx_chars_per_token": 4,
1813
1833
  "sections": {
1814
1834
  "threat-context": {
@@ -1860,10 +1880,10 @@
1860
1880
  },
1861
1881
  "container-runtime-security": {
1862
1882
  "path": "skills/container-runtime-security/skill.md",
1863
- "bytes": 48744,
1864
- "chars": 48586,
1865
- "lines": 380,
1866
- "approx_tokens": 12147,
1883
+ "bytes": 48824,
1884
+ "chars": 48666,
1885
+ "lines": 383,
1886
+ "approx_tokens": 12167,
1867
1887
  "approx_chars_per_token": 4,
1868
1888
  "sections": {
1869
1889
  "threat-context": {
@@ -1915,10 +1935,10 @@
1915
1935
  },
1916
1936
  "mlops-security": {
1917
1937
  "path": "skills/mlops-security/skill.md",
1918
- "bytes": 43634,
1919
- "chars": 43352,
1920
- "lines": 326,
1921
- "approx_tokens": 10838,
1938
+ "bytes": 43702,
1939
+ "chars": 43420,
1940
+ "lines": 329,
1941
+ "approx_tokens": 10855,
1922
1942
  "approx_chars_per_token": 4,
1923
1943
  "sections": {
1924
1944
  "threat-context": {
@@ -1970,10 +1990,10 @@
1970
1990
  },
1971
1991
  "incident-response-playbook": {
1972
1992
  "path": "skills/incident-response-playbook/skill.md",
1973
- "bytes": 62895,
1974
- "chars": 62645,
1975
- "lines": 547,
1976
- "approx_tokens": 15661,
1993
+ "bytes": 63019,
1994
+ "chars": 62769,
1995
+ "lines": 553,
1996
+ "approx_tokens": 15692,
1977
1997
  "approx_chars_per_token": 4,
1978
1998
  "sections": {
1979
1999
  "threat-context": {
@@ -1987,9 +2007,9 @@
1987
2007
  "approx_tokens": 2541
1988
2008
  },
1989
2009
  "ttp-mapping": {
1990
- "bytes": 4740,
1991
- "chars": 4734,
1992
- "approx_tokens": 1184
2010
+ "bytes": 4755,
2011
+ "chars": 4749,
2012
+ "approx_tokens": 1187
1993
2013
  },
1994
2014
  "exploit-availability-matrix": {
1995
2015
  "bytes": 3811,
@@ -2025,10 +2045,10 @@
2025
2045
  },
2026
2046
  "email-security-anti-phishing": {
2027
2047
  "path": "skills/email-security-anti-phishing/skill.md",
2028
- "bytes": 26321,
2029
- "chars": 26223,
2030
- "lines": 207,
2031
- "approx_tokens": 6556,
2048
+ "bytes": 26463,
2049
+ "chars": 26365,
2050
+ "lines": 215,
2051
+ "approx_tokens": 6591,
2032
2052
  "approx_chars_per_token": 4,
2033
2053
  "sections": {
2034
2054
  "threat-context": {
@@ -2080,10 +2100,10 @@
2080
2100
  },
2081
2101
  "age-gates-child-safety": {
2082
2102
  "path": "skills/age-gates-child-safety/skill.md",
2083
- "bytes": 68846,
2084
- "chars": 68561,
2085
- "lines": 457,
2086
- "approx_tokens": 17140,
2103
+ "bytes": 68916,
2104
+ "chars": 68631,
2105
+ "lines": 460,
2106
+ "approx_tokens": 17158,
2087
2107
  "approx_chars_per_token": 4,
2088
2108
  "sections": {
2089
2109
  "threat-context": {