@connexum/agent-standards 0.1.0-beta.1 → 0.1.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +13 -0
- package/catalogue/fit.json +707 -0
- package/dist/fit.d.ts +122 -0
- package/dist/fit.d.ts.map +1 -0
- package/dist/fit.js +163 -0
- package/dist/fit.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -18,3 +18,16 @@ const report = scoreAgent({ industry: 'healthcare', dataClasses: ['phi'], region
|
|
|
18
18
|
```
|
|
19
19
|
|
|
20
20
|
End-state item D1 (any stack) and D3 (any agent): the scan that every stack runs. First consumer: the AOL spoke's Secure agent builder (CliniVantIQ); the catalogue replaces the spoke's local copy.
|
|
21
|
+
|
|
22
|
+
## Which packs an agent needs (0.1.0-beta.2)
|
|
23
|
+
|
|
24
|
+
`fleetFit(packs, agents)` grades every My-CC pack for every scanned agent, and every requirement in it:
|
|
25
|
+
|
|
26
|
+
- **Sector from the scan.** `inferIndustry` reads the agent's purpose, tools, data classes and connections (or a declared industry). A legal agent never gets healthcare packs; a pharmacy agent never gets aerospace packs.
|
|
27
|
+
- **Region.** A law applies only where the agent's people are (`us`, `us-ca`, `eu`, `uk`, ...).
|
|
28
|
+
- **Required only with evidence.** A law is *required* only when the scan found on the agent what the law regulates (a requirement touches a capability the agent has: PHI, privileged material, parts, billing, research subjects, a device, cardholder or personal data, ...). A sector or region match without that evidence is *recommended*, with the reason. Standards and frameworks are recommendations.
|
|
29
|
+
- **Per requirement.** Required, recommended or not needed for that agent; a requirement needing a capability the agent lacks is not needed, with the reason; My-CC's own rule enforcement wins where present (block = required, warn = recommended).
|
|
30
|
+
- **Overlaps.** A requirement names the other fitted packs that cover the same control (minimum necessary, audit, consent, ...), so one control can satisfy several.
|
|
31
|
+
- **Scanned only.** `scanned: false` marks packs no scanned agent needs.
|
|
32
|
+
|
|
33
|
+
Rules and patterns: `catalogue/fit.json`, shared byte-for-byte with the Python twin.
|
|
@@ -0,0 +1,707 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "2026-10-20",
|
|
3
|
+
"note": "How the first scan decides, for every My-CC pack, whether an agent needs it, and for every requirement in a pack, whether it is required, recommended or not needed for that agent. The agent's sector comes from what the scan reads (purpose, tools, data classes, connections); a declared industry wins over the inferred one. A pack is fit when its sector matches the agent's (cross-industry and AI-specific packs fit every agent) and its jurisdiction covers where the agent's people are. Within a fit pack, a requirement that needs a capability the agent does not have (physical parts, cardholder data, PHI, ...) is not needed, with the reason. My-CC's own enforcement wins where a rule carries one (block = required, warn = recommended). Patterns are case-insensitive regular expressions shared by both languages. Overlaps: when two packs that fit the same agent both ask for the same thing (minimum necessary, de-identification, audit, access, breach notice, risk assessment, human oversight, consent and rights, vendor contracts, encryption), each requirement names the other packs that also cover it, so one control can satisfy several. Required means a law in force where the agent's people are, in the agent's sector or cross-industry, AND the scan found on the agent what the law regulates (a requirement of the pack touches a capability the agent has: PHI, privileged material, parts, billing, research subjects, a device, cardholder or personal data, ...). A sector match without that evidence is a recommendation, with the reason. Packs, and requirements, are only ever graded for agents that were scanned.",
|
|
4
|
+
"industries": [
|
|
5
|
+
{
|
|
6
|
+
"id": "Pharmaceutical",
|
|
7
|
+
"signals": [
|
|
8
|
+
"formulary",
|
|
9
|
+
"\\bdrug",
|
|
10
|
+
"\\bndc\\b",
|
|
11
|
+
"\\bgpi",
|
|
12
|
+
"medi-span",
|
|
13
|
+
"pharmac",
|
|
14
|
+
"rebate",
|
|
15
|
+
"p&t",
|
|
16
|
+
"biosimilar",
|
|
17
|
+
"\\bfda\\b",
|
|
18
|
+
"prescri",
|
|
19
|
+
"quantity limit"
|
|
20
|
+
]
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"id": "Healthcare",
|
|
24
|
+
"signals": [
|
|
25
|
+
"\\bphi\\b",
|
|
26
|
+
"patient",
|
|
27
|
+
"clinical",
|
|
28
|
+
"\\behr\\b",
|
|
29
|
+
"hospital",
|
|
30
|
+
"prior auth",
|
|
31
|
+
"medical",
|
|
32
|
+
"health plan",
|
|
33
|
+
"\\bmember",
|
|
34
|
+
"claims?\\b",
|
|
35
|
+
"denial",
|
|
36
|
+
"appeal"
|
|
37
|
+
]
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"id": "Legal",
|
|
41
|
+
"signals": [
|
|
42
|
+
"legal",
|
|
43
|
+
"case law",
|
|
44
|
+
"litigation",
|
|
45
|
+
"court",
|
|
46
|
+
"attorney",
|
|
47
|
+
"privileged",
|
|
48
|
+
"matter\\b",
|
|
49
|
+
"docket",
|
|
50
|
+
"brief\\b",
|
|
51
|
+
"discovery"
|
|
52
|
+
]
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
"id": "Fintech",
|
|
56
|
+
"signals": [
|
|
57
|
+
"payment",
|
|
58
|
+
"cardholder",
|
|
59
|
+
"\\bcard\\b",
|
|
60
|
+
"transaction",
|
|
61
|
+
"\\bkyc\\b",
|
|
62
|
+
"\\baml\\b",
|
|
63
|
+
"wallet",
|
|
64
|
+
"\\bloan",
|
|
65
|
+
"credit"
|
|
66
|
+
]
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
"id": "Financial",
|
|
70
|
+
"signals": [
|
|
71
|
+
"bank",
|
|
72
|
+
"securities",
|
|
73
|
+
"trading",
|
|
74
|
+
"portfolio",
|
|
75
|
+
"broker",
|
|
76
|
+
"ledger"
|
|
77
|
+
]
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
"id": "Education",
|
|
81
|
+
"signals": [
|
|
82
|
+
"student",
|
|
83
|
+
"school",
|
|
84
|
+
"course",
|
|
85
|
+
"\\bgrade",
|
|
86
|
+
"ferpa",
|
|
87
|
+
"learner",
|
|
88
|
+
"curriculum"
|
|
89
|
+
]
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
"id": "Government",
|
|
93
|
+
"signals": [
|
|
94
|
+
"agency",
|
|
95
|
+
"public sector",
|
|
96
|
+
"citizen",
|
|
97
|
+
"federal",
|
|
98
|
+
"municipal"
|
|
99
|
+
]
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
"id": "Aerospace",
|
|
103
|
+
"signals": [
|
|
104
|
+
"aircraft",
|
|
105
|
+
"aviation",
|
|
106
|
+
"airworthiness",
|
|
107
|
+
"\\bfaa\\b",
|
|
108
|
+
"\\beasa\\b",
|
|
109
|
+
"avionics"
|
|
110
|
+
]
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
"id": "Defense",
|
|
114
|
+
"signals": [
|
|
115
|
+
"defen[cs]e",
|
|
116
|
+
"\\bitar\\b",
|
|
117
|
+
"classified",
|
|
118
|
+
"\\bdod\\b",
|
|
119
|
+
"military"
|
|
120
|
+
]
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
"id": "Industrial / OT",
|
|
124
|
+
"signals": [
|
|
125
|
+
"\\bplc\\b",
|
|
126
|
+
"scada",
|
|
127
|
+
"\\bics\\b",
|
|
128
|
+
"plant floor",
|
|
129
|
+
"sensor",
|
|
130
|
+
"operational technology"
|
|
131
|
+
]
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
"id": "Automotive",
|
|
135
|
+
"signals": [
|
|
136
|
+
"vehicle",
|
|
137
|
+
"automotive",
|
|
138
|
+
"\\becu\\b",
|
|
139
|
+
"26262"
|
|
140
|
+
]
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
"id": "Retail / Consumer",
|
|
144
|
+
"signals": [
|
|
145
|
+
"retail",
|
|
146
|
+
"shopper",
|
|
147
|
+
"e-?commerce",
|
|
148
|
+
"loyalty",
|
|
149
|
+
"storefront"
|
|
150
|
+
]
|
|
151
|
+
},
|
|
152
|
+
{
|
|
153
|
+
"id": "Cybersecurity",
|
|
154
|
+
"signals": [
|
|
155
|
+
"vulnerabilit",
|
|
156
|
+
"\\bsiem\\b",
|
|
157
|
+
"threat",
|
|
158
|
+
"incident response",
|
|
159
|
+
"\\bcve\\b"
|
|
160
|
+
]
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
"id": "Medical Device / SaMD",
|
|
164
|
+
"signals": [
|
|
165
|
+
"\\bsamd\\b",
|
|
166
|
+
"medical device",
|
|
167
|
+
"510\\(k\\)"
|
|
168
|
+
]
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
"id": "Medical Laboratory / Clinical Diagnostics",
|
|
172
|
+
"signals": [
|
|
173
|
+
"lab result",
|
|
174
|
+
"specimen",
|
|
175
|
+
"\\bclia\\b",
|
|
176
|
+
"diagnostic"
|
|
177
|
+
]
|
|
178
|
+
},
|
|
179
|
+
{
|
|
180
|
+
"id": "Hospital IT / Medical Device Networks",
|
|
181
|
+
"signals": [
|
|
182
|
+
"hospital network",
|
|
183
|
+
"biomed",
|
|
184
|
+
"\\bpacs\\b"
|
|
185
|
+
]
|
|
186
|
+
}
|
|
187
|
+
],
|
|
188
|
+
"related": {
|
|
189
|
+
"Pharmaceutical": [
|
|
190
|
+
"Healthcare"
|
|
191
|
+
],
|
|
192
|
+
"Medical Device / SaMD": [
|
|
193
|
+
"Healthcare"
|
|
194
|
+
],
|
|
195
|
+
"Medical Laboratory / Clinical Diagnostics": [
|
|
196
|
+
"Healthcare"
|
|
197
|
+
],
|
|
198
|
+
"Hospital IT / Medical Device Networks": [
|
|
199
|
+
"Healthcare"
|
|
200
|
+
],
|
|
201
|
+
"Fintech": [
|
|
202
|
+
"Financial"
|
|
203
|
+
],
|
|
204
|
+
"Financial": [
|
|
205
|
+
"Fintech"
|
|
206
|
+
]
|
|
207
|
+
},
|
|
208
|
+
"everySector": [
|
|
209
|
+
"Cross-Industry",
|
|
210
|
+
"AI-Specific"
|
|
211
|
+
],
|
|
212
|
+
"regionSectors": {
|
|
213
|
+
"US": "us",
|
|
214
|
+
"EU": "eu",
|
|
215
|
+
"UK": "uk",
|
|
216
|
+
"APAC": "apac"
|
|
217
|
+
},
|
|
218
|
+
"regions": [
|
|
219
|
+
[
|
|
220
|
+
"^(global|international)",
|
|
221
|
+
"global"
|
|
222
|
+
],
|
|
223
|
+
[
|
|
224
|
+
"colorado|us-co",
|
|
225
|
+
"us-co"
|
|
226
|
+
],
|
|
227
|
+
[
|
|
228
|
+
"california|us-ca",
|
|
229
|
+
"us-ca"
|
|
230
|
+
],
|
|
231
|
+
[
|
|
232
|
+
"illinois|us-il",
|
|
233
|
+
"us-il"
|
|
234
|
+
],
|
|
235
|
+
[
|
|
236
|
+
"texas|us-tx",
|
|
237
|
+
"us-tx"
|
|
238
|
+
],
|
|
239
|
+
[
|
|
240
|
+
"new york",
|
|
241
|
+
"us-ny"
|
|
242
|
+
],
|
|
243
|
+
[
|
|
244
|
+
"florida",
|
|
245
|
+
"us-fl"
|
|
246
|
+
],
|
|
247
|
+
[
|
|
248
|
+
"utah|us-ut",
|
|
249
|
+
"us-ut"
|
|
250
|
+
],
|
|
251
|
+
[
|
|
252
|
+
"maryland|us-md",
|
|
253
|
+
"us-md"
|
|
254
|
+
],
|
|
255
|
+
[
|
|
256
|
+
"tennessee|us-tn",
|
|
257
|
+
"us-tn"
|
|
258
|
+
],
|
|
259
|
+
[
|
|
260
|
+
"^us|united states",
|
|
261
|
+
"us"
|
|
262
|
+
],
|
|
263
|
+
[
|
|
264
|
+
"^(eu|european|de\\b|fr\\b)",
|
|
265
|
+
"eu"
|
|
266
|
+
],
|
|
267
|
+
[
|
|
268
|
+
"^(uk|gb|united kingdom)",
|
|
269
|
+
"uk"
|
|
270
|
+
],
|
|
271
|
+
[
|
|
272
|
+
"^(au|nz|cn|china|jp|japan|kr|sg|th|vn|in\\b|hk|apac)",
|
|
273
|
+
"apac"
|
|
274
|
+
],
|
|
275
|
+
[
|
|
276
|
+
"^(ca\\b|canada)",
|
|
277
|
+
"ca"
|
|
278
|
+
],
|
|
279
|
+
[
|
|
280
|
+
"^(br\\b|brazil)",
|
|
281
|
+
"br"
|
|
282
|
+
]
|
|
283
|
+
],
|
|
284
|
+
"capabilities": [
|
|
285
|
+
{
|
|
286
|
+
"id": "physical_goods",
|
|
287
|
+
"label": "physical parts or goods",
|
|
288
|
+
"requirement": [
|
|
289
|
+
"\\bparts\\b",
|
|
290
|
+
"manufactur",
|
|
291
|
+
"weld",
|
|
292
|
+
"heat treat",
|
|
293
|
+
"\\bndt\\b",
|
|
294
|
+
"plating",
|
|
295
|
+
"composites",
|
|
296
|
+
"\\bfod\\b",
|
|
297
|
+
"traveller",
|
|
298
|
+
"\\bspc\\b",
|
|
299
|
+
"serialized",
|
|
300
|
+
"lot-controlled",
|
|
301
|
+
"counterfeit",
|
|
302
|
+
"special processes",
|
|
303
|
+
"incoming inspection",
|
|
304
|
+
"airworthiness",
|
|
305
|
+
"warranty",
|
|
306
|
+
"on-time delivery",
|
|
307
|
+
"\\bppm\\b",
|
|
308
|
+
"first-pass yield",
|
|
309
|
+
"nadcap",
|
|
310
|
+
"product realisation",
|
|
311
|
+
"product safety",
|
|
312
|
+
"purchasing controls"
|
|
313
|
+
],
|
|
314
|
+
"agent": [
|
|
315
|
+
"\\bparts (list|inventory|traceab|lookup)",
|
|
316
|
+
"parts\\.",
|
|
317
|
+
"inventory",
|
|
318
|
+
"shipment",
|
|
319
|
+
"manufacturing (line|process|plant|floor)",
|
|
320
|
+
"production line",
|
|
321
|
+
"warehouse",
|
|
322
|
+
"bill of materials"
|
|
323
|
+
]
|
|
324
|
+
},
|
|
325
|
+
{
|
|
326
|
+
"id": "cardholder",
|
|
327
|
+
"label": "cardholder data",
|
|
328
|
+
"requirement": [
|
|
329
|
+
"cardholder",
|
|
330
|
+
"\\bpan\\b",
|
|
331
|
+
"payment card"
|
|
332
|
+
],
|
|
333
|
+
"agent": [
|
|
334
|
+
"cardholder",
|
|
335
|
+
"payment card",
|
|
336
|
+
"\\bpan\\b"
|
|
337
|
+
],
|
|
338
|
+
"dataClass": "cardholder"
|
|
339
|
+
},
|
|
340
|
+
{
|
|
341
|
+
"id": "phi",
|
|
342
|
+
"label": "protected health information",
|
|
343
|
+
"requirement": [
|
|
344
|
+
"\\bphi\\b",
|
|
345
|
+
"protected health",
|
|
346
|
+
"medical record",
|
|
347
|
+
"\\behr\\b",
|
|
348
|
+
"business associate",
|
|
349
|
+
"\\bbaa\\b"
|
|
350
|
+
],
|
|
351
|
+
"agent": [
|
|
352
|
+
"\\bphi\\b",
|
|
353
|
+
"patient record",
|
|
354
|
+
"\\behr\\b"
|
|
355
|
+
],
|
|
356
|
+
"dataClass": "phi"
|
|
357
|
+
},
|
|
358
|
+
{
|
|
359
|
+
"id": "personal",
|
|
360
|
+
"label": "personal data",
|
|
361
|
+
"requirement": [
|
|
362
|
+
"personal data",
|
|
363
|
+
"data subject",
|
|
364
|
+
"\\bpii\\b",
|
|
365
|
+
"right to erasure",
|
|
366
|
+
"\\bdpia\\b"
|
|
367
|
+
],
|
|
368
|
+
"agent": [
|
|
369
|
+
"personal data",
|
|
370
|
+
"\\bpii\\b",
|
|
371
|
+
"customer record"
|
|
372
|
+
],
|
|
373
|
+
"dataClass": "pii",
|
|
374
|
+
"impliedBy": [
|
|
375
|
+
"phi",
|
|
376
|
+
"cardholder"
|
|
377
|
+
]
|
|
378
|
+
},
|
|
379
|
+
{
|
|
380
|
+
"id": "minors",
|
|
381
|
+
"label": "data about children or students",
|
|
382
|
+
"requirement": [
|
|
383
|
+
"\\bchild",
|
|
384
|
+
"minors?\\b",
|
|
385
|
+
"coppa",
|
|
386
|
+
"student record"
|
|
387
|
+
],
|
|
388
|
+
"agent": [
|
|
389
|
+
"student",
|
|
390
|
+
"\\bchild",
|
|
391
|
+
"minor"
|
|
392
|
+
]
|
|
393
|
+
},
|
|
394
|
+
{
|
|
395
|
+
"id": "ot_hardware",
|
|
396
|
+
"label": "operational technology or hardware",
|
|
397
|
+
"requirement": [
|
|
398
|
+
"\\bplc\\b",
|
|
399
|
+
"scada",
|
|
400
|
+
"firmware",
|
|
401
|
+
"safety instrumented",
|
|
402
|
+
"\\bot network"
|
|
403
|
+
],
|
|
404
|
+
"agent": [
|
|
405
|
+
"\\bplc\\b",
|
|
406
|
+
"scada",
|
|
407
|
+
"firmware"
|
|
408
|
+
]
|
|
409
|
+
},
|
|
410
|
+
{
|
|
411
|
+
"id": "model_training",
|
|
412
|
+
"label": "training or fine-tuning a model",
|
|
413
|
+
"requirement": [
|
|
414
|
+
"training data",
|
|
415
|
+
"fine-tun",
|
|
416
|
+
"dataset curation",
|
|
417
|
+
"model training"
|
|
418
|
+
],
|
|
419
|
+
"agent": [
|
|
420
|
+
"fine-tun",
|
|
421
|
+
"training data",
|
|
422
|
+
"train(s|ing)? (a |the )?model"
|
|
423
|
+
]
|
|
424
|
+
},
|
|
425
|
+
{
|
|
426
|
+
"id": "privileged",
|
|
427
|
+
"label": "privileged or attorney-client material",
|
|
428
|
+
"requirement": [
|
|
429
|
+
"privileged",
|
|
430
|
+
"attorney-client",
|
|
431
|
+
"client confiden"
|
|
432
|
+
],
|
|
433
|
+
"agent": [
|
|
434
|
+
"privileged",
|
|
435
|
+
"attorney-client"
|
|
436
|
+
],
|
|
437
|
+
"dataClass": "privileged"
|
|
438
|
+
},
|
|
439
|
+
{
|
|
440
|
+
"id": "clinical_research",
|
|
441
|
+
"label": "clinical research or human subjects",
|
|
442
|
+
"requirement": [
|
|
443
|
+
"\\birb\\b",
|
|
444
|
+
"clinical (trial|investigation|study)",
|
|
445
|
+
"human subjects?",
|
|
446
|
+
"informed consent",
|
|
447
|
+
"research subject"
|
|
448
|
+
],
|
|
449
|
+
"agent": [
|
|
450
|
+
"clinical trial",
|
|
451
|
+
"research subject",
|
|
452
|
+
"\\birb\\b",
|
|
453
|
+
"study protocol"
|
|
454
|
+
]
|
|
455
|
+
},
|
|
456
|
+
{
|
|
457
|
+
"id": "medical_device",
|
|
458
|
+
"label": "a regulated medical device or SaMD",
|
|
459
|
+
"requirement": [
|
|
460
|
+
"medical device",
|
|
461
|
+
"\\bsamd\\b",
|
|
462
|
+
"510\\(k\\)",
|
|
463
|
+
"62304",
|
|
464
|
+
"device master record",
|
|
465
|
+
"design history file",
|
|
466
|
+
"\\bqsr\\b",
|
|
467
|
+
"\\bqmsr\\b",
|
|
468
|
+
"premarket"
|
|
469
|
+
],
|
|
470
|
+
"agent": [
|
|
471
|
+
"medical device",
|
|
472
|
+
"\\bsamd\\b",
|
|
473
|
+
"device firmware"
|
|
474
|
+
]
|
|
475
|
+
},
|
|
476
|
+
{
|
|
477
|
+
"id": "billing",
|
|
478
|
+
"label": "billing, claims or payments to providers",
|
|
479
|
+
"requirement": [
|
|
480
|
+
"billing",
|
|
481
|
+
"claims? submission",
|
|
482
|
+
"reimbursement",
|
|
483
|
+
"kickback",
|
|
484
|
+
"\\bstark\\b",
|
|
485
|
+
"referral",
|
|
486
|
+
"surprise bill",
|
|
487
|
+
"good faith estimate",
|
|
488
|
+
"coding (accuracy|compliance)",
|
|
489
|
+
"\\bcpt\\b",
|
|
490
|
+
"\\bicd-10"
|
|
491
|
+
],
|
|
492
|
+
"agent": [
|
|
493
|
+
"billing",
|
|
494
|
+
"claims? submission",
|
|
495
|
+
"reimbursement",
|
|
496
|
+
"\\bcpt\\b"
|
|
497
|
+
]
|
|
498
|
+
},
|
|
499
|
+
{
|
|
500
|
+
"id": "drug_supply",
|
|
501
|
+
"label": "drug dispensing, distribution or the supply chain",
|
|
502
|
+
"requirement": [
|
|
503
|
+
"\\bdscsa\\b",
|
|
504
|
+
"\\b340b\\b",
|
|
505
|
+
"dispens",
|
|
506
|
+
"wholesale",
|
|
507
|
+
"distribution",
|
|
508
|
+
"serialization",
|
|
509
|
+
"transaction (history|information|statement)",
|
|
510
|
+
"covered entity purchas"
|
|
511
|
+
],
|
|
512
|
+
"agent": [
|
|
513
|
+
"dispens",
|
|
514
|
+
"\\bdscsa\\b",
|
|
515
|
+
"wholesale",
|
|
516
|
+
"340b"
|
|
517
|
+
]
|
|
518
|
+
},
|
|
519
|
+
{
|
|
520
|
+
"id": "manufacturing",
|
|
521
|
+
"label": "manufacturing, laboratory or trial operations (GxP)",
|
|
522
|
+
"requirement": [
|
|
523
|
+
"\\bgmp\\b",
|
|
524
|
+
"\\bglp\\b",
|
|
525
|
+
"\\bgcp\\b",
|
|
526
|
+
"batch record",
|
|
527
|
+
"laboratory practice",
|
|
528
|
+
"manufacturing practice",
|
|
529
|
+
"validation of (computeri[sz]ed )?systems used in"
|
|
530
|
+
],
|
|
531
|
+
"agent": [
|
|
532
|
+
"\\bgmp\\b",
|
|
533
|
+
"batch record",
|
|
534
|
+
"laboratory"
|
|
535
|
+
]
|
|
536
|
+
},
|
|
537
|
+
{
|
|
538
|
+
"id": "financial_reporting",
|
|
539
|
+
"label": "financial reporting controls",
|
|
540
|
+
"requirement": [
|
|
541
|
+
"financial reporting",
|
|
542
|
+
"\\bicfr\\b",
|
|
543
|
+
"ssae",
|
|
544
|
+
"\\bsoc 1\\b",
|
|
545
|
+
"general ledger"
|
|
546
|
+
],
|
|
547
|
+
"agent": [
|
|
548
|
+
"financial reporting",
|
|
549
|
+
"general ledger",
|
|
550
|
+
"\\bicfr\\b"
|
|
551
|
+
]
|
|
552
|
+
},
|
|
553
|
+
{
|
|
554
|
+
"id": "consumer",
|
|
555
|
+
"label": "consumer-facing claims or marketing",
|
|
556
|
+
"requirement": [
|
|
557
|
+
"deceptive",
|
|
558
|
+
"unfair",
|
|
559
|
+
"advertis",
|
|
560
|
+
"consumer (protection|claims)",
|
|
561
|
+
"endorsement",
|
|
562
|
+
"dark pattern"
|
|
563
|
+
],
|
|
564
|
+
"agent": [
|
|
565
|
+
"consumer",
|
|
566
|
+
"marketing",
|
|
567
|
+
"advertis",
|
|
568
|
+
"customer-facing"
|
|
569
|
+
]
|
|
570
|
+
},
|
|
571
|
+
{
|
|
572
|
+
"id": "interoperability",
|
|
573
|
+
"label": "patient access or interoperability APIs",
|
|
574
|
+
"requirement": [
|
|
575
|
+
"patient access api",
|
|
576
|
+
"\\bfhir\\b",
|
|
577
|
+
"interoperab",
|
|
578
|
+
"provider directory",
|
|
579
|
+
"payer-to-payer"
|
|
580
|
+
],
|
|
581
|
+
"agent": [
|
|
582
|
+
"\\bfhir\\b",
|
|
583
|
+
"patient access",
|
|
584
|
+
"interoperab"
|
|
585
|
+
]
|
|
586
|
+
},
|
|
587
|
+
{
|
|
588
|
+
"id": "conditions_of_participation",
|
|
589
|
+
"label": "operating a hospital or provider facility",
|
|
590
|
+
"requirement": [
|
|
591
|
+
"conditions of participation",
|
|
592
|
+
"\\bcop\\b",
|
|
593
|
+
"medical staff",
|
|
594
|
+
"nursing services",
|
|
595
|
+
"discharge planning"
|
|
596
|
+
],
|
|
597
|
+
"agent": [
|
|
598
|
+
"hospital operations",
|
|
599
|
+
"discharge",
|
|
600
|
+
"nursing"
|
|
601
|
+
]
|
|
602
|
+
}
|
|
603
|
+
],
|
|
604
|
+
"lawTypes": [
|
|
605
|
+
"Law or regulation"
|
|
606
|
+
],
|
|
607
|
+
"overlaps": [
|
|
608
|
+
{
|
|
609
|
+
"id": "minimum_necessary",
|
|
610
|
+
"label": "minimum necessary / data minimisation",
|
|
611
|
+
"patterns": [
|
|
612
|
+
"minimum necessary",
|
|
613
|
+
"minimi[sz]ation",
|
|
614
|
+
"data minimi",
|
|
615
|
+
"only the data"
|
|
616
|
+
]
|
|
617
|
+
},
|
|
618
|
+
{
|
|
619
|
+
"id": "deidentification",
|
|
620
|
+
"label": "de-identification / pseudonymisation",
|
|
621
|
+
"patterns": [
|
|
622
|
+
"de-?identif",
|
|
623
|
+
"pseudonymi",
|
|
624
|
+
"anonymi",
|
|
625
|
+
"safe harbor"
|
|
626
|
+
]
|
|
627
|
+
},
|
|
628
|
+
{
|
|
629
|
+
"id": "audit",
|
|
630
|
+
"label": "audit trail and logging",
|
|
631
|
+
"patterns": [
|
|
632
|
+
"audit",
|
|
633
|
+
"logging",
|
|
634
|
+
"record of processing",
|
|
635
|
+
"records of processing",
|
|
636
|
+
"traceab"
|
|
637
|
+
]
|
|
638
|
+
},
|
|
639
|
+
{
|
|
640
|
+
"id": "access",
|
|
641
|
+
"label": "access control",
|
|
642
|
+
"patterns": [
|
|
643
|
+
"access control",
|
|
644
|
+
"least privilege",
|
|
645
|
+
"logical access",
|
|
646
|
+
"authori[sz]ation",
|
|
647
|
+
"authentication"
|
|
648
|
+
]
|
|
649
|
+
},
|
|
650
|
+
{
|
|
651
|
+
"id": "breach",
|
|
652
|
+
"label": "breach or incident notification",
|
|
653
|
+
"patterns": [
|
|
654
|
+
"breach",
|
|
655
|
+
"incident (notification|response)",
|
|
656
|
+
"notify"
|
|
657
|
+
]
|
|
658
|
+
},
|
|
659
|
+
{
|
|
660
|
+
"id": "risk",
|
|
661
|
+
"label": "risk or impact assessment",
|
|
662
|
+
"patterns": [
|
|
663
|
+
"risk (assessment|management)",
|
|
664
|
+
"impact assessment",
|
|
665
|
+
"\\bdpia\\b",
|
|
666
|
+
"\\bfmea\\b"
|
|
667
|
+
]
|
|
668
|
+
},
|
|
669
|
+
{
|
|
670
|
+
"id": "human_oversight",
|
|
671
|
+
"label": "human oversight of automated decisions",
|
|
672
|
+
"patterns": [
|
|
673
|
+
"human (oversight|review|in the loop)",
|
|
674
|
+
"automated decision",
|
|
675
|
+
"right to (contest|appeal)"
|
|
676
|
+
]
|
|
677
|
+
},
|
|
678
|
+
{
|
|
679
|
+
"id": "consent_rights",
|
|
680
|
+
"label": "consent and individual rights",
|
|
681
|
+
"patterns": [
|
|
682
|
+
"consent",
|
|
683
|
+
"opt-?out",
|
|
684
|
+
"right to (know|delete|erasure|access)",
|
|
685
|
+
"data subject"
|
|
686
|
+
]
|
|
687
|
+
},
|
|
688
|
+
{
|
|
689
|
+
"id": "vendor",
|
|
690
|
+
"label": "vendor and contract controls",
|
|
691
|
+
"patterns": [
|
|
692
|
+
"business associate",
|
|
693
|
+
"\\bbaa\\b",
|
|
694
|
+
"processor agreement",
|
|
695
|
+
"\\bdpa\\b",
|
|
696
|
+
"vendor"
|
|
697
|
+
]
|
|
698
|
+
},
|
|
699
|
+
{
|
|
700
|
+
"id": "encryption",
|
|
701
|
+
"label": "encryption",
|
|
702
|
+
"patterns": [
|
|
703
|
+
"encrypt"
|
|
704
|
+
]
|
|
705
|
+
}
|
|
706
|
+
]
|
|
707
|
+
}
|
package/dist/fit.d.ts
ADDED
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
interface FitCatalogue {
|
|
2
|
+
version: string;
|
|
3
|
+
note: string;
|
|
4
|
+
industries: Array<{
|
|
5
|
+
id: string;
|
|
6
|
+
signals: string[];
|
|
7
|
+
}>;
|
|
8
|
+
related: Record<string, string[]>;
|
|
9
|
+
everySector: string[];
|
|
10
|
+
regionSectors: Record<string, string>;
|
|
11
|
+
regions: Array<[string, string]>;
|
|
12
|
+
capabilities: Array<{
|
|
13
|
+
id: string;
|
|
14
|
+
label: string;
|
|
15
|
+
requirement: string[];
|
|
16
|
+
agent: string[];
|
|
17
|
+
dataClass?: string;
|
|
18
|
+
impliedBy?: string[];
|
|
19
|
+
}>;
|
|
20
|
+
lawTypes: string[];
|
|
21
|
+
overlaps: Array<{
|
|
22
|
+
id: string;
|
|
23
|
+
label: string;
|
|
24
|
+
patterns: string[];
|
|
25
|
+
}>;
|
|
26
|
+
}
|
|
27
|
+
export declare function loadFitCatalogue(): FitCatalogue;
|
|
28
|
+
/** What the scan reads about an agent, on any stack. */
|
|
29
|
+
export interface AgentSignals {
|
|
30
|
+
agentId: string;
|
|
31
|
+
purpose?: string;
|
|
32
|
+
tools?: string[];
|
|
33
|
+
dataClasses?: string[];
|
|
34
|
+
text?: string[];
|
|
35
|
+
regions?: string[];
|
|
36
|
+
declaredIndustry?: string | null;
|
|
37
|
+
boundPacks?: string[];
|
|
38
|
+
capabilities?: string[];
|
|
39
|
+
}
|
|
40
|
+
/** A pack as My-CC publishes it (the fields the fit reads). */
|
|
41
|
+
export interface PackInput {
|
|
42
|
+
id: string;
|
|
43
|
+
name: string;
|
|
44
|
+
vertical: string | null;
|
|
45
|
+
jurisdiction: string | null;
|
|
46
|
+
region: string | null;
|
|
47
|
+
type: string;
|
|
48
|
+
crossIndustry?: boolean;
|
|
49
|
+
requirements: Array<{
|
|
50
|
+
id: string;
|
|
51
|
+
text: string;
|
|
52
|
+
enforcement?: string | null;
|
|
53
|
+
}>;
|
|
54
|
+
}
|
|
55
|
+
export interface IndustryInference {
|
|
56
|
+
industries: string[];
|
|
57
|
+
declared: boolean;
|
|
58
|
+
evidence: Record<string, string[]>;
|
|
59
|
+
why: string;
|
|
60
|
+
}
|
|
61
|
+
export type PackLevel = 'installed' | 'required' | 'recommended' | 'not_needed';
|
|
62
|
+
export type ReqLevel = 'required' | 'recommended' | 'not_needed';
|
|
63
|
+
export interface RequirementFit {
|
|
64
|
+
id: string;
|
|
65
|
+
text: string;
|
|
66
|
+
level: ReqLevel;
|
|
67
|
+
why: string;
|
|
68
|
+
}
|
|
69
|
+
export interface PackFitResult {
|
|
70
|
+
packId: string;
|
|
71
|
+
agentId: string;
|
|
72
|
+
level: PackLevel;
|
|
73
|
+
why: string;
|
|
74
|
+
requirements: RequirementFit[];
|
|
75
|
+
}
|
|
76
|
+
/** The agent's sector(s) from what the scan reads. A declared industry wins. An industry needs two distinct signals and at least half the top score. */
|
|
77
|
+
export declare function inferIndustry(s: AgentSignals): IndustryInference;
|
|
78
|
+
/** The agent's capabilities: from its data classes, from what the scan reads, or supplied. */
|
|
79
|
+
export declare function inferCapabilities(s: AgentSignals): string[];
|
|
80
|
+
export declare function regionKey(jurisdiction: string | null | undefined): string;
|
|
81
|
+
/** Does this agent need this pack, and which of its requirements? */
|
|
82
|
+
export declare function packFit(pack: PackInput, s: AgentSignals, pre?: {
|
|
83
|
+
industry?: IndustryInference;
|
|
84
|
+
capabilities?: string[];
|
|
85
|
+
}): PackFitResult;
|
|
86
|
+
export interface FleetPackFit {
|
|
87
|
+
packId: string;
|
|
88
|
+
installed: string[];
|
|
89
|
+
required: string[];
|
|
90
|
+
recommended: string[];
|
|
91
|
+
notNeeded: string[];
|
|
92
|
+
scanned: boolean;
|
|
93
|
+
requirements: Array<{
|
|
94
|
+
id: string;
|
|
95
|
+
text: string;
|
|
96
|
+
required: string[];
|
|
97
|
+
recommended: string[];
|
|
98
|
+
notNeeded: string[];
|
|
99
|
+
topics: string[];
|
|
100
|
+
alsoIn: string[];
|
|
101
|
+
}>;
|
|
102
|
+
byAgent: Record<string, {
|
|
103
|
+
level: PackLevel;
|
|
104
|
+
why: string;
|
|
105
|
+
requirements: Record<string, {
|
|
106
|
+
level: ReqLevel;
|
|
107
|
+
why: string;
|
|
108
|
+
}>;
|
|
109
|
+
}>;
|
|
110
|
+
}
|
|
111
|
+
/** Every pack against every agent: which agents need it, at which level, and each requirement per agent. */
|
|
112
|
+
export declare function fleetFit(packs: PackInput[], agents: AgentSignals[]): FleetPackFit[];
|
|
113
|
+
/** Which shared control areas a requirement covers (minimum necessary, audit, consent, ...), for overlaps across packs. */
|
|
114
|
+
export declare function overlapTopics(text: string): string[];
|
|
115
|
+
/** The type My-CC's catalogue implies for a pack (law, contract, certification, best practice, framework). */
|
|
116
|
+
export declare function packType(p: {
|
|
117
|
+
name: string;
|
|
118
|
+
framework?: string | null;
|
|
119
|
+
subcategory?: string | null;
|
|
120
|
+
}): string;
|
|
121
|
+
export {};
|
|
122
|
+
//# sourceMappingURL=fit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fit.d.ts","sourceRoot":"","sources":["../src/fit.ts"],"names":[],"mappings":"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"}
|
package/dist/fit.js
ADDED
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.loadFitCatalogue = loadFitCatalogue;
|
|
4
|
+
exports.inferIndustry = inferIndustry;
|
|
5
|
+
exports.inferCapabilities = inferCapabilities;
|
|
6
|
+
exports.regionKey = regionKey;
|
|
7
|
+
exports.packFit = packFit;
|
|
8
|
+
exports.fleetFit = fleetFit;
|
|
9
|
+
exports.overlapTopics = overlapTopics;
|
|
10
|
+
exports.packType = packType;
|
|
11
|
+
const node_fs_1 = require("node:fs");
|
|
12
|
+
const node_path_1 = require("node:path");
|
|
13
|
+
let cached = null;
|
|
14
|
+
function loadFitCatalogue() { return (cached ??= JSON.parse((0, node_fs_1.readFileSync)((0, node_path_1.join)(__dirname, '..', 'catalogue', 'fit.json'), 'utf8'))); }
|
|
15
|
+
const rx = (p) => new RegExp(p, 'i');
|
|
16
|
+
function haystack(s) { return [s.purpose ?? '', ...(s.tools ?? []), ...(s.dataClasses ?? []), ...(s.text ?? [])].join(' \n '); }
|
|
17
|
+
/** The agent's sector(s) from what the scan reads. A declared industry wins. An industry needs two distinct signals and at least half the top score. */
|
|
18
|
+
function inferIndustry(s) {
|
|
19
|
+
const cat = loadFitCatalogue();
|
|
20
|
+
if (s.declaredIndustry)
|
|
21
|
+
return { industries: [s.declaredIndustry, ...(cat.related[s.declaredIndustry] ?? [])], declared: true, evidence: {}, why: `declared: ${s.declaredIndustry}` };
|
|
22
|
+
const h = haystack(s);
|
|
23
|
+
const evidence = {};
|
|
24
|
+
for (const ind of cat.industries) {
|
|
25
|
+
const hits = ind.signals.map((p) => h.match(rx(p))?.[0]?.toLowerCase()).filter((x) => Boolean(x));
|
|
26
|
+
if (hits.length)
|
|
27
|
+
evidence[ind.id] = [...new Set(hits)];
|
|
28
|
+
}
|
|
29
|
+
const scored = Object.entries(evidence).filter(([, v]) => v.length >= 2).sort((a, b) => b[1].length - a[1].length);
|
|
30
|
+
if (!scored.length)
|
|
31
|
+
return { industries: [], declared: false, evidence, why: 'no sector signal in the purpose, tools or data; only cross-industry packs apply' };
|
|
32
|
+
const top = scored[0][1].length;
|
|
33
|
+
const picked = scored.filter(([, v]) => v.length * 2 >= top).map(([k]) => k);
|
|
34
|
+
const withRelated = [...new Set(picked.flatMap((k) => [k, ...(cat.related[k] ?? [])]))];
|
|
35
|
+
return { industries: withRelated, declared: false, evidence, why: picked.map((k) => `${k} (${evidence[k].join(', ')})`).join('; ') };
|
|
36
|
+
}
|
|
37
|
+
/** The agent's capabilities: from its data classes, from what the scan reads, or supplied. */
|
|
38
|
+
function inferCapabilities(s) {
|
|
39
|
+
const cat = loadFitCatalogue();
|
|
40
|
+
const h = haystack(s);
|
|
41
|
+
const classes = (s.dataClasses ?? []).map((c) => c.toLowerCase());
|
|
42
|
+
const out = new Set(s.capabilities ?? []);
|
|
43
|
+
for (const c of cat.capabilities)
|
|
44
|
+
if ((c.dataClass && classes.includes(c.dataClass)) || c.agent.some((p) => rx(p).test(h)))
|
|
45
|
+
out.add(c.id);
|
|
46
|
+
for (const c of cat.capabilities)
|
|
47
|
+
if (c.impliedBy?.some((i) => out.has(i)))
|
|
48
|
+
out.add(c.id);
|
|
49
|
+
return [...out];
|
|
50
|
+
}
|
|
51
|
+
function regionKey(jurisdiction) {
|
|
52
|
+
const j = (jurisdiction ?? 'global').trim();
|
|
53
|
+
for (const [p, k] of loadFitCatalogue().regions)
|
|
54
|
+
if (rx(p).test(j))
|
|
55
|
+
return k;
|
|
56
|
+
return 'other';
|
|
57
|
+
}
|
|
58
|
+
function regionFits(packRegion, agentRegions) {
|
|
59
|
+
if (packRegion === 'global')
|
|
60
|
+
return true;
|
|
61
|
+
if (packRegion === 'us')
|
|
62
|
+
return agentRegions.some((r) => r === 'us' || r.startsWith('us-'));
|
|
63
|
+
return agentRegions.includes(packRegion);
|
|
64
|
+
}
|
|
65
|
+
const normPack = (s) => s.trim().toLowerCase().replace(/@.*$/, '').replace(/_/g, '-');
|
|
66
|
+
/** Does this agent need this pack, and which of its requirements? */
|
|
67
|
+
function packFit(pack, s, pre) {
|
|
68
|
+
const cat = loadFitCatalogue();
|
|
69
|
+
const ind = pre?.industry ?? inferIndustry(s);
|
|
70
|
+
const caps = pre?.capabilities ?? inferCapabilities(s);
|
|
71
|
+
const regions = (s.regions?.length ? s.regions : ['us']).map((r) => r.toLowerCase());
|
|
72
|
+
const pr = regionKey(pack.jurisdiction ?? pack.region);
|
|
73
|
+
const bound = (s.boundPacks ?? []).some((b) => normPack(b) === normPack(pack.id));
|
|
74
|
+
const sector = pack.vertical ?? '';
|
|
75
|
+
const regionSector = cat.regionSectors[sector];
|
|
76
|
+
let level;
|
|
77
|
+
let why;
|
|
78
|
+
const isLaw = cat.lawTypes.includes(pack.type);
|
|
79
|
+
if (bound) {
|
|
80
|
+
level = 'installed';
|
|
81
|
+
why = 'bound to the agent in My-CC';
|
|
82
|
+
}
|
|
83
|
+
else if (!regionFits(pr, regions)) {
|
|
84
|
+
level = 'not_needed';
|
|
85
|
+
why = `applies in ${pack.jurisdiction ?? pack.region ?? pr}; this agent's people are in ${regions.join(', ')}`;
|
|
86
|
+
}
|
|
87
|
+
else if (regionSector || cat.everySector.includes(sector) || pack.crossIndustry || ind.industries.includes(sector)) {
|
|
88
|
+
level = isLaw ? 'required' : 'recommended';
|
|
89
|
+
why = regionSector ? `regional pack for ${pack.jurisdiction ?? sector}, where this agent's people are` : cat.everySector.includes(sector) || pack.crossIndustry ? `${sector || 'cross-industry'}: applies to every agent${isLaw ? ' where in force' : ''}` : `sector ${sector} matches this agent (${ind.why})`;
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
level = 'not_needed';
|
|
93
|
+
why = `sector ${sector || 'unknown'}; this agent is ${ind.industries.length ? ind.industries.join(', ') : 'not in a regulated sector'}`;
|
|
94
|
+
}
|
|
95
|
+
const requirements = pack.requirements.map((r) => {
|
|
96
|
+
if (level === 'not_needed')
|
|
97
|
+
return { id: r.id, text: r.text, level: 'not_needed', why: 'the pack is not needed by this agent' };
|
|
98
|
+
const needs = cat.capabilities.find((c) => c.requirement.some((p) => rx(p).test(r.text)) && !caps.includes(c.id));
|
|
99
|
+
if (needs)
|
|
100
|
+
return { id: r.id, text: r.text, level: 'not_needed', why: `needs ${needs.label}; this agent has none` };
|
|
101
|
+
if (r.enforcement === 'block' || r.enforcement === 'human-attestation')
|
|
102
|
+
return level === 'recommended' ? { id: r.id, text: r.text, level: 'recommended', why: `recommended for this agent; My-CC enforces it as ${r.enforcement} once the pack is installed` } : { id: r.id, text: r.text, level: 'required', why: `My-CC enforcement: ${r.enforcement}` };
|
|
103
|
+
if (r.enforcement)
|
|
104
|
+
return { id: r.id, text: r.text, level: 'recommended', why: `My-CC enforcement: ${r.enforcement}` };
|
|
105
|
+
return level === 'installed' || level === 'required' ? { id: r.id, text: r.text, level: 'required', why: level === 'installed' ? 'the pack is bound to this agent' : `${pack.type}: in force where this agent operates` } : { id: r.id, text: r.text, level: 'recommended', why: `${pack.type}: recommended for this agent` };
|
|
106
|
+
});
|
|
107
|
+
// A law is required only when the scan found on the agent what the law regulates: at least one requirement of the
|
|
108
|
+
// pack touches a capability the agent HAS (PHI, privileged material, parts, billing, ...). A sector or region match
|
|
109
|
+
// without that evidence is a recommendation, never a requirement. Requirements needing a capability the agent lacks
|
|
110
|
+
// are not needed either way (set above).
|
|
111
|
+
const subject = [...new Set(pack.requirements.flatMap((r) => cat.capabilities.filter((c) => caps.includes(c.id) && c.requirement.some((p) => rx(p).test(r.text))).map((c) => c.label)))];
|
|
112
|
+
if (level === 'required' && !subject.length) {
|
|
113
|
+
const lacks = [...new Set(requirements.filter((r) => r.why.startsWith('needs ')).map((r) => r.why.replace(/^needs /, '').replace(/; this agent has none$/, '')))];
|
|
114
|
+
level = 'recommended';
|
|
115
|
+
why = `${why}; recommended, not required: the scan found nothing on this agent that the pack regulates${lacks.length ? ` (it covers ${lacks.join(', ')})` : ''}`;
|
|
116
|
+
for (const r of requirements)
|
|
117
|
+
if (r.level === 'required') {
|
|
118
|
+
r.level = 'recommended';
|
|
119
|
+
r.why = r.why.startsWith('My-CC enforcement') ? `recommended for this agent; ${r.why.replace('My-CC enforcement: ', 'My-CC enforces it as ')} once the pack is installed` : 'recommended: the pack is a recommendation for this agent';
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
else if (level === 'required')
|
|
123
|
+
why = `${why}; the agent has ${subject.join(', ')}`;
|
|
124
|
+
return { packId: pack.id, agentId: s.agentId, level, why, requirements };
|
|
125
|
+
}
|
|
126
|
+
/** Every pack against every agent: which agents need it, at which level, and each requirement per agent. */
|
|
127
|
+
function fleetFit(packs, agents) {
|
|
128
|
+
const pre = new Map(agents.map((a) => [a.agentId, { industry: inferIndustry(a), capabilities: inferCapabilities(a) }]));
|
|
129
|
+
const all = packs.map((p) => ({ p, fits: agents.map((a) => packFit(p, a, pre.get(a.agentId))) }));
|
|
130
|
+
const fitted = all.filter((x) => x.fits.some((f) => f.level !== 'not_needed'));
|
|
131
|
+
const topicIndex = new Map();
|
|
132
|
+
for (const { p } of fitted)
|
|
133
|
+
for (const r of p.requirements)
|
|
134
|
+
for (const t of overlapTopics(r.text)) {
|
|
135
|
+
if (!topicIndex.has(t))
|
|
136
|
+
topicIndex.set(t, new Set());
|
|
137
|
+
topicIndex.get(t).add(p.id);
|
|
138
|
+
}
|
|
139
|
+
return all.map(({ p, fits }) => {
|
|
140
|
+
const ids = (l) => fits.filter((f) => f.level === l).map((f) => f.agentId);
|
|
141
|
+
return {
|
|
142
|
+
packId: p.id, installed: ids('installed'), required: ids('required'), recommended: ids('recommended'), notNeeded: ids('not_needed'), scanned: fits.some((f) => f.level !== 'not_needed'),
|
|
143
|
+
requirements: p.requirements.map((r, i) => { const at = (l) => fits.filter((f) => f.requirements[i].level === l).map((f) => f.agentId); const topics = overlapTopics(r.text); const alsoIn = [...new Set(topics.flatMap((t) => [...(topicIndex.get(t) ?? [])]))].filter((x) => x !== p.id).sort(); return { id: r.id, text: r.text, required: at('required'), recommended: at('recommended'), notNeeded: at('not_needed'), topics, alsoIn }; }),
|
|
144
|
+
byAgent: Object.fromEntries(fits.map((f) => [f.agentId, { level: f.level, why: f.why, requirements: Object.fromEntries(f.requirements.map((r) => [r.id, { level: r.level, why: r.why }])) }])),
|
|
145
|
+
};
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
/** Which shared control areas a requirement covers (minimum necessary, audit, consent, ...), for overlaps across packs. */
|
|
149
|
+
function overlapTopics(text) { return loadFitCatalogue().overlaps.filter((o) => o.patterns.some((p) => rx(p).test(text))).map((o) => o.id); }
|
|
150
|
+
/** The type My-CC's catalogue implies for a pack (law, contract, certification, best practice, framework). */
|
|
151
|
+
function packType(p) {
|
|
152
|
+
const n = `${p.name} ${p.framework ?? ''} ${p.subcategory ?? ''}`.toLowerCase();
|
|
153
|
+
if (/tenant|contract|baseline/.test(n))
|
|
154
|
+
return 'Contract';
|
|
155
|
+
if (/iso|certification|aiuc/.test(n))
|
|
156
|
+
return 'Certification';
|
|
157
|
+
if (/owasp|best practice|guidance|identity|mcp/.test(n))
|
|
158
|
+
return 'Best practice';
|
|
159
|
+
if (/framework|rmf|nist/.test(n))
|
|
160
|
+
return 'Framework';
|
|
161
|
+
return 'Law or regulation';
|
|
162
|
+
}
|
|
163
|
+
//# sourceMappingURL=fit.js.map
|
package/dist/fit.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fit.js","sourceRoot":"","sources":["../src/fit.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -2,4 +2,5 @@ export * from './types.js';
|
|
|
2
2
|
export { loadCatalogue, frameworkById } from './catalogue.js';
|
|
3
3
|
export { applicability, fits, boundPackFor } from './applicability.js';
|
|
4
4
|
export { scoreAgent, standardsLines } from './score.js';
|
|
5
|
+
export { loadFitCatalogue, inferIndustry, inferCapabilities, regionKey, packFit, fleetFit, packType, overlapTopics, type AgentSignals, type PackInput, type IndustryInference, type PackLevel, type ReqLevel, type RequirementFit, type PackFitResult, type FleetPackFit } from './fit.js';
|
|
5
6
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAC7D,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACtE,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAC7D,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACtE,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AACvD,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,iBAAiB,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,YAAY,EAAE,KAAK,SAAS,EAAE,KAAK,iBAAiB,EAAE,KAAK,SAAS,EAAE,KAAK,QAAQ,EAAE,KAAK,cAAc,EAAE,KAAK,aAAa,EAAE,KAAK,YAAY,EAAE,MAAM,UAAU,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -14,7 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
exports.standardsLines = exports.scoreAgent = exports.boundPackFor = exports.fits = exports.applicability = exports.frameworkById = exports.loadCatalogue = void 0;
|
|
17
|
+
exports.overlapTopics = exports.packType = exports.fleetFit = exports.packFit = exports.regionKey = exports.inferCapabilities = exports.inferIndustry = exports.loadFitCatalogue = exports.standardsLines = exports.scoreAgent = exports.boundPackFor = exports.fits = exports.applicability = exports.frameworkById = exports.loadCatalogue = void 0;
|
|
18
18
|
__exportStar(require("./types.js"), exports);
|
|
19
19
|
var catalogue_js_1 = require("./catalogue.js");
|
|
20
20
|
Object.defineProperty(exports, "loadCatalogue", { enumerable: true, get: function () { return catalogue_js_1.loadCatalogue; } });
|
|
@@ -26,4 +26,13 @@ Object.defineProperty(exports, "boundPackFor", { enumerable: true, get: function
|
|
|
26
26
|
var score_js_1 = require("./score.js");
|
|
27
27
|
Object.defineProperty(exports, "scoreAgent", { enumerable: true, get: function () { return score_js_1.scoreAgent; } });
|
|
28
28
|
Object.defineProperty(exports, "standardsLines", { enumerable: true, get: function () { return score_js_1.standardsLines; } });
|
|
29
|
+
var fit_js_1 = require("./fit.js");
|
|
30
|
+
Object.defineProperty(exports, "loadFitCatalogue", { enumerable: true, get: function () { return fit_js_1.loadFitCatalogue; } });
|
|
31
|
+
Object.defineProperty(exports, "inferIndustry", { enumerable: true, get: function () { return fit_js_1.inferIndustry; } });
|
|
32
|
+
Object.defineProperty(exports, "inferCapabilities", { enumerable: true, get: function () { return fit_js_1.inferCapabilities; } });
|
|
33
|
+
Object.defineProperty(exports, "regionKey", { enumerable: true, get: function () { return fit_js_1.regionKey; } });
|
|
34
|
+
Object.defineProperty(exports, "packFit", { enumerable: true, get: function () { return fit_js_1.packFit; } });
|
|
35
|
+
Object.defineProperty(exports, "fleetFit", { enumerable: true, get: function () { return fit_js_1.fleetFit; } });
|
|
36
|
+
Object.defineProperty(exports, "packType", { enumerable: true, get: function () { return fit_js_1.packType; } });
|
|
37
|
+
Object.defineProperty(exports, "overlapTopics", { enumerable: true, get: function () { return fit_js_1.overlapTopics; } });
|
|
29
38
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,6CAA0B;AAC1B,+CAA6D;AAApD,6GAAA,aAAa,OAAA;AAAE,6GAAA,aAAa,OAAA;AACrC,uDAAsE;AAA7D,iHAAA,aAAa,OAAA;AAAE,wGAAA,IAAI,OAAA;AAAE,gHAAA,YAAY,OAAA;AAC1C,uCAAuD;AAA9C,sGAAA,UAAU,OAAA;AAAE,0GAAA,cAAc,OAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,6CAA0B;AAC1B,+CAA6D;AAApD,6GAAA,aAAa,OAAA;AAAE,6GAAA,aAAa,OAAA;AACrC,uDAAsE;AAA7D,iHAAA,aAAa,OAAA;AAAE,wGAAA,IAAI,OAAA;AAAE,gHAAA,YAAY,OAAA;AAC1C,uCAAuD;AAA9C,sGAAA,UAAU,OAAA;AAAE,0GAAA,cAAc,OAAA;AACnC,mCAA0R;AAAjR,0GAAA,gBAAgB,OAAA;AAAE,uGAAA,aAAa,OAAA;AAAE,2GAAA,iBAAiB,OAAA;AAAE,mGAAA,SAAS,OAAA;AAAE,iGAAA,OAAO,OAAA;AAAE,kGAAA,QAAQ,OAAA;AAAE,kGAAA,QAAQ,OAAA;AAAE,uGAAA,aAAa,OAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@connexum/agent-standards",
|
|
3
|
-
"version": "0.1.0-beta.
|
|
3
|
+
"version": "0.1.0-beta.2",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Standards coverage for any agent on any stack: on the first scan and every scan after, score the agent against OWASP LLM, OWASP Agentic and the My-CC runtime always, and against the frameworks whose My-CC pack is bound to it (HIPAA, PCI DSS, GDPR, EU AI Act, Colorado AI Act, SOC 2, ISO/IEC 42001, NIST AI RMF); frameworks that fit the agent's industry, data or regions but are not bound are documented as recommended, not scored; frameworks that do not fit are omitted with the reason. One catalogue JSON drives this package and its Python twin (connexum-agent-standards); a missing fact is 'not checked', never a pass.",
|
|
6
6
|
"main": "dist/index.js",
|