@zuplo/lint-win32-x64 7.8.23 → 7.8.25

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.
@@ -13,31 +13,13 @@
13
13
  "if": {
14
14
  "properties": {
15
15
  "policyType": {
16
- "const": "ai-gateway-anthropic-to-openai-inbound"
17
- }
18
- },
19
- "required": ["policyType"]
20
- },
21
- "then": {
22
- "properties": {
23
- "handler": {
24
- "properties": {
25
- "options": {
26
- "type": "object",
27
- "properties": {},
28
- "required": [],
29
- "additionalProperties": false
30
- }
31
- }
32
- }
33
- }
34
- }
35
- },
36
- {
37
- "if": {
38
- "properties": {
39
- "policyType": {
40
- "const": "ai-gateway-auth-inbound"
16
+ "enum": [
17
+ "ai-gateway-akamai-firewall",
18
+ "ai-gateway-akamai-firewall-inbound",
19
+ "akamai-ai-firewall-v2",
20
+ "akamai-ai-firewall-v2-inbound",
21
+ "akamai-ai-firewall-inbound-v2"
22
+ ]
41
23
  }
42
24
  },
43
25
  "required": ["policyType"]
@@ -48,29 +30,85 @@
48
30
  "properties": {
49
31
  "options": {
50
32
  "type": "object",
51
- "additionalProperties": false,
52
- "required": [],
53
33
  "properties": {
54
- "cacheTtlSeconds": {
55
- "type": "number",
56
- "default": 60,
57
- "description": "The time to cache authentication results for a particular key. Higher values will decrease latency. Cached results will be valid until the cache expires even in the event the key is deleted, etc."
34
+ "configurationId": {
35
+ "type": "string",
36
+ "title": "Configuration ID",
37
+ "description": "The configuration ID of the AI Firewall."
58
38
  },
59
- "authHeader": {
39
+ "api-key": {
60
40
  "type": "string",
61
- "default": "Authorization",
62
- "x-show-example": false,
41
+ "title": "API Key",
42
+ "description": "The API key for the AI Firewall."
43
+ },
44
+ "applicationId": {
45
+ "type": "string",
46
+ "title": "Application ID",
47
+ "description": "The application ID to identify this usage of the AI Firewall (optional)."
48
+ },
49
+ "streamingAccumulation": {
50
+ "type": "object",
51
+ "title": "Streaming Accumulation Settings",
63
52
  "x-advanced": true,
64
- "description": "The name of the header with the key."
53
+ "description": "Configuration for accumulating and validating streaming responses.",
54
+ "properties": {
55
+ "enabled": {
56
+ "type": "boolean",
57
+ "title": "Enable Streaming Accumulation",
58
+ "description": "Enable accumulation and validation of streaming responses.",
59
+ "default": true
60
+ },
61
+ "eventsInterval": {
62
+ "type": "number",
63
+ "title": "Events Interval",
64
+ "description": "Number of SSE events to accumulate before checking with Akamai (default: 5).",
65
+ "minimum": 1,
66
+ "maximum": 100,
67
+ "default": 5
68
+ },
69
+ "checkIntervalMs": {
70
+ "type": "number",
71
+ "title": "Check Interval (ms)",
72
+ "description": "Time interval in milliseconds for periodic checks (alternative to chunk count).",
73
+ "minimum": 100,
74
+ "maximum": 10000
75
+ }
76
+ },
77
+ "additionalProperties": false
65
78
  },
66
- "authScheme": {
79
+ "endpoints": {
80
+ "type": "array",
81
+ "title": "Applicable Endpoints",
82
+ "x-advanced": true,
83
+ "description": "The endpoint shapes this policy applies to. Omit to apply to all (openai-chat, openai-responses, anthropic-messages).",
84
+ "items": {
85
+ "type": "string",
86
+ "enum": [
87
+ "openai-chat",
88
+ "openai-responses",
89
+ "anthropic-messages"
90
+ ]
91
+ }
92
+ },
93
+ "onUnknownShape": {
67
94
  "type": "string",
68
- "default": "Bearer",
69
- "x-show-example": false,
95
+ "title": "On Unknown Shape",
70
96
  "x-advanced": true,
71
- "description": "The scheme used on the header."
97
+ "description": "What to do when the request shape cannot be inspected. As a guardrail, this policy defaults to 'deny' (fail closed) so uninspectable content is never served.",
98
+ "enum": ["deny", "skip"],
99
+ "default": "deny"
100
+ },
101
+ "onError": {
102
+ "type": "string",
103
+ "title": "On Firewall Error",
104
+ "x-advanced": true,
105
+ "description": "What to do when the Akamai detect call itself fails (invalid API key, rate limit, outage). 'block' (the default) fails closed and returns a 502 so unverified content is never served; 'allow' fails open and lets the request through without inspection.",
106
+ "enum": ["block", "allow"],
107
+ "default": "block"
72
108
  }
73
- }
109
+ },
110
+ "required": ["configurationId", "api-key"],
111
+ "additionalProperties": false
74
112
  }
75
113
  }
76
114
  }
@@ -81,7 +119,12 @@
81
119
  "if": {
82
120
  "properties": {
83
121
  "policyType": {
84
- "enum": ["ai-gateway-auth-v2", "ai-gateway-auth-v2-inbound"]
122
+ "enum": [
123
+ "ai-gateway-auth",
124
+ "ai-gateway-auth-inbound",
125
+ "ai-gateway-auth-v2",
126
+ "ai-gateway-auth-v2-inbound"
127
+ ]
85
128
  }
86
129
  },
87
130
  "required": ["policyType"]
@@ -151,6 +194,8 @@
151
194
  "properties": {
152
195
  "policyType": {
153
196
  "enum": [
197
+ "ai-gateway-configuration-executor",
198
+ "ai-gateway-configuration-executor-inbound",
154
199
  "ai-gateway-configuration-executor-v2",
155
200
  "ai-gateway-configuration-executor-v2-inbound"
156
201
  ]
@@ -171,7 +216,7 @@
171
216
  "type": "number",
172
217
  "default": 10,
173
218
  "minimum": 2,
174
- "description": "The time in seconds to cache app configurations loaded by app_id. Defaults to 10 seconds when omitted. Higher values decrease latency; lower values pick up portal changes sooner. Cached results remain valid until the cache expires even if the configuration changes in the portal. This cache is only used when neither ai-gateway-auth-v2-inbound nor ai-gateway-configuration-loader-v2-inbound already loaded the configuration for the request."
219
+ "description": "The time in seconds to cache app configurations loaded by app_id. Defaults to 10 seconds when omitted. Higher values decrease latency; lower values pick up portal changes sooner. Cached results remain valid until the cache expires even if the configuration changes in the portal. This cache is only used when neither ai-gateway-auth-inbound nor ai-gateway-configuration-loader-inbound already loaded the configuration for the request."
175
220
  }
176
221
  }
177
222
  }
@@ -185,6 +230,8 @@
185
230
  "properties": {
186
231
  "policyType": {
187
232
  "enum": [
233
+ "ai-gateway-configuration-loader",
234
+ "ai-gateway-configuration-loader-inbound",
188
235
  "ai-gateway-configuration-loader-v2",
189
236
  "ai-gateway-configuration-loader-v2-inbound"
190
237
  ]
@@ -205,7 +252,7 @@
205
252
  "type": "number",
206
253
  "default": 10,
207
254
  "minimum": 2,
208
- "description": "The time in seconds to cache app configurations loaded by app_id. Defaults to 10 seconds when omitted. Higher values decrease latency; lower values pick up portal changes sooner. Cached results remain valid until the cache expires even if the configuration changes in the portal. When ai-gateway-auth-v2-inbound already loaded the configuration for the request, this cache is not used."
255
+ "description": "The time in seconds to cache app configurations loaded by app_id. Defaults to 10 seconds when omitted. Higher values decrease latency; lower values pick up portal changes sooner. Cached results remain valid until the cache expires even if the configuration changes in the portal. When ai-gateway-auth-inbound already loaded the configuration for the request, this cache is not used."
209
256
  }
210
257
  }
211
258
  }
@@ -349,6 +396,8 @@
349
396
  "properties": {
350
397
  "policyType": {
351
398
  "enum": [
399
+ "ai-gateway-fallback-model",
400
+ "ai-gateway-fallback-model-inbound",
352
401
  "ai-gateway-fallback-model-v2",
353
402
  "ai-gateway-fallback-model-v2-inbound"
354
403
  ]
@@ -374,11 +423,11 @@
374
423
  "properties": {
375
424
  "completions": {
376
425
  "title": "Completions Fallbacks",
377
- "$ref": "#/$defs/ai-gateway-fallback-model-v2/capabilityFallbacks"
426
+ "$ref": "#/$defs/ai-gateway-fallback-model/capabilityFallbacks"
378
427
  },
379
428
  "embeddings": {
380
429
  "title": "Embeddings Fallbacks",
381
- "$ref": "#/$defs/ai-gateway-fallback-model-v2/capabilityFallbacks"
430
+ "$ref": "#/$defs/ai-gateway-fallback-model/capabilityFallbacks"
382
431
  }
383
432
  }
384
433
  },
@@ -402,8 +451,11 @@
402
451
  "properties": {
403
452
  "policyType": {
404
453
  "enum": [
405
- "ai-gateway-internal-only",
406
- "ai-gateway-internal-only-inbound"
454
+ "ai-gateway-galileo-tracing",
455
+ "ai-gateway-galileo-tracing-inbound",
456
+ "galileo-tracing-v2",
457
+ "galileo-tracing-v2-inbound",
458
+ "galileo-tracing-inbound-v2"
407
459
  ]
408
460
  }
409
461
  },
@@ -415,9 +467,49 @@
415
467
  "properties": {
416
468
  "options": {
417
469
  "type": "object",
418
- "additionalProperties": false,
419
- "required": [],
420
- "properties": {}
470
+ "properties": {
471
+ "apiKey": {
472
+ "description": "The Galileo API key for authentication.",
473
+ "type": "string"
474
+ },
475
+ "projectId": {
476
+ "description": "The Galileo project ID (UUID) for organizing traces.",
477
+ "type": "string"
478
+ },
479
+ "logStreamId": {
480
+ "description": "The Galileo log stream ID (UUID) for organizing traces.",
481
+ "type": "string"
482
+ },
483
+ "baseUrl": {
484
+ "x-advanced": true,
485
+ "description": "The base URL for the Galileo API (optional, defaults to https://api.galileo.ai).",
486
+ "type": "string"
487
+ },
488
+ "endpoints": {
489
+ "type": "array",
490
+ "title": "Applicable Endpoints",
491
+ "x-advanced": true,
492
+ "description": "The endpoint shapes this policy applies to. Omit to apply to all (openai-chat, openai-responses, anthropic-messages).",
493
+ "items": {
494
+ "type": "string",
495
+ "enum": [
496
+ "openai-chat",
497
+ "openai-responses",
498
+ "anthropic-messages"
499
+ ]
500
+ }
501
+ },
502
+ "onUnknownShape": {
503
+ "type": "string",
504
+ "title": "On Unknown Shape",
505
+ "x-advanced": true,
506
+ "description": "What to do on a shape the policy cannot read. As an observer this defaults to 'skip' (fail open — pass through untraced).",
507
+ "enum": ["deny", "skip"],
508
+ "default": "skip"
509
+ }
510
+ },
511
+ "required": ["apiKey", "projectId", "logStreamId"],
512
+ "additionalProperties": false
421
513
  }
422
514
  }
423
515
  }
@@ -428,7 +520,10 @@
428
520
  "if": {
429
521
  "properties": {
430
522
  "policyType": {
431
- "enum": ["ai-gateway-metering", "ai-gateway-metering-inbound"]
523
+ "enum": [
524
+ "ai-gateway-internal-only",
525
+ "ai-gateway-internal-only-inbound"
526
+ ]
432
527
  }
433
528
  },
434
529
  "required": ["policyType"]
@@ -441,13 +536,7 @@
441
536
  "type": "object",
442
537
  "additionalProperties": false,
443
538
  "required": [],
444
- "properties": {
445
- "throwOnFailure": {
446
- "type": "boolean",
447
- "default": false,
448
- "description": "If true, the policy will throw an error in the event there is a problem connecting to the metering service."
449
- }
450
- }
539
+ "properties": {}
451
540
  }
452
541
  }
453
542
  }
@@ -459,6 +548,8 @@
459
548
  "properties": {
460
549
  "policyType": {
461
550
  "enum": [
551
+ "ai-gateway-metering",
552
+ "ai-gateway-metering-inbound",
462
553
  "ai-gateway-metering-v2",
463
554
  "ai-gateway-metering-v2-inbound"
464
555
  ]
@@ -485,7 +576,7 @@
485
576
  "maxItems": 5,
486
577
  "description": "Budget rules for this application. Each rule budgets the whole app (\"app\") or each distinct value of an expression (\"expression\"), with warn and block thresholds per meter and period.",
487
578
  "items": {
488
- "$ref": "#/$defs/ai-gateway-metering-v2/meteringBudgetRule"
579
+ "$ref": "#/$defs/ai-gateway-metering/meteringBudgetRule"
489
580
  }
490
581
  },
491
582
  "limits": {
@@ -498,13 +589,13 @@
498
589
  "additionalProperties": false,
499
590
  "properties": {
500
591
  "costs": {
501
- "$ref": "#/$defs/ai-gateway-metering-v2/quotaLimit"
592
+ "$ref": "#/$defs/ai-gateway-metering/quotaLimit"
502
593
  },
503
594
  "tokens": {
504
- "$ref": "#/$defs/ai-gateway-metering-v2/quotaLimit"
595
+ "$ref": "#/$defs/ai-gateway-metering/quotaLimit"
505
596
  },
506
597
  "requests": {
507
- "$ref": "#/$defs/ai-gateway-metering-v2/quotaLimit"
598
+ "$ref": "#/$defs/ai-gateway-metering/quotaLimit"
508
599
  }
509
600
  }
510
601
  }
@@ -520,6 +611,8 @@
520
611
  "properties": {
521
612
  "policyType": {
522
613
  "enum": [
614
+ "ai-gateway-model-filtering",
615
+ "ai-gateway-model-filtering-inbound",
523
616
  "ai-gateway-model-filtering-v2",
524
617
  "ai-gateway-model-filtering-v2-inbound"
525
618
  ]
@@ -558,7 +651,7 @@
558
651
  "description": "Models clients may select; the first entry is the default when model is omitted.",
559
652
  "minItems": 1,
560
653
  "items": {
561
- "$ref": "#/$defs/ai-gateway-model-filtering-v2/modelRef"
654
+ "$ref": "#/$defs/ai-gateway-model-filtering/modelRef"
562
655
  }
563
656
  }
564
657
  }
@@ -574,7 +667,7 @@
574
667
  "description": "Models rejected in open-but-filtered mode.",
575
668
  "minItems": 1,
576
669
  "items": {
577
- "$ref": "#/$defs/ai-gateway-model-filtering-v2/modelRef"
670
+ "$ref": "#/$defs/ai-gateway-model-filtering/modelRef"
578
671
  }
579
672
  }
580
673
  }
@@ -595,7 +688,7 @@
595
688
  "title": "Allowed Models",
596
689
  "minItems": 1,
597
690
  "items": {
598
- "$ref": "#/$defs/ai-gateway-model-filtering-v2/modelRef"
691
+ "$ref": "#/$defs/ai-gateway-model-filtering/modelRef"
599
692
  }
600
693
  }
601
694
  }
@@ -610,7 +703,7 @@
610
703
  "title": "Blocked Models",
611
704
  "minItems": 1,
612
705
  "items": {
613
- "$ref": "#/$defs/ai-gateway-model-filtering-v2/modelRef"
706
+ "$ref": "#/$defs/ai-gateway-model-filtering/modelRef"
614
707
  }
615
708
  }
616
709
  }
@@ -727,7 +820,13 @@
727
820
  "if": {
728
821
  "properties": {
729
822
  "policyType": {
730
- "const": "ai-gateway-openai-to-anthropic-outbound"
823
+ "enum": [
824
+ "ai-gateway-opik-tracing",
825
+ "ai-gateway-opik-tracing-inbound",
826
+ "comet-opik-tracing-v2",
827
+ "comet-opik-tracing-v2-inbound",
828
+ "comet-opik-tracing-inbound-v2"
829
+ ]
731
830
  }
732
831
  },
733
832
  "required": ["policyType"]
@@ -738,8 +837,48 @@
738
837
  "properties": {
739
838
  "options": {
740
839
  "type": "object",
741
- "properties": {},
742
- "required": [],
840
+ "properties": {
841
+ "apiKey": {
842
+ "description": "The Comet Opik API key for authentication.",
843
+ "type": "string"
844
+ },
845
+ "projectName": {
846
+ "description": "The Comet Opik project name for organizing traces.",
847
+ "type": "string"
848
+ },
849
+ "workspace": {
850
+ "description": "The Comet Opik workspace name.",
851
+ "type": "string"
852
+ },
853
+ "baseUrl": {
854
+ "x-advanced": true,
855
+ "description": "The base URL for the Comet Opik API (optional, defaults to https://www.comet.com/opik/api).",
856
+ "type": "string"
857
+ },
858
+ "endpoints": {
859
+ "type": "array",
860
+ "title": "Applicable Endpoints",
861
+ "x-advanced": true,
862
+ "description": "The endpoint shapes this policy applies to. Omit to apply to all (openai-chat, openai-responses, anthropic-messages).",
863
+ "items": {
864
+ "type": "string",
865
+ "enum": [
866
+ "openai-chat",
867
+ "openai-responses",
868
+ "anthropic-messages"
869
+ ]
870
+ }
871
+ },
872
+ "onUnknownShape": {
873
+ "type": "string",
874
+ "title": "On Unknown Shape",
875
+ "x-advanced": true,
876
+ "description": "What to do on a shape the policy cannot read. As an observer this defaults to 'skip' (fail open — pass through untraced).",
877
+ "enum": ["deny", "skip"],
878
+ "default": "skip"
879
+ }
880
+ },
881
+ "required": ["apiKey", "projectName", "workspace"],
743
882
  "additionalProperties": false
744
883
  }
745
884
  }
@@ -873,61 +1012,16 @@
873
1012
  }
874
1013
  }
875
1014
  },
876
- {
877
- "if": {
878
- "properties": {
879
- "policyType": {
880
- "const": "ai-gateway-semantic-cache-inbound"
881
- }
882
- },
883
- "required": ["policyType"]
884
- },
885
- "then": {
886
- "properties": {
887
- "handler": {
888
- "properties": {
889
- "options": {
890
- "type": "object",
891
- "additionalProperties": false,
892
- "required": [],
893
- "properties": {}
894
- }
895
- }
896
- }
897
- }
898
- }
899
- },
900
- {
901
- "if": {
902
- "properties": {
903
- "policyType": {
904
- "const": "ai-gateway-semantic-cache-outbound"
905
- }
906
- },
907
- "required": ["policyType"]
908
- },
909
- "then": {
910
- "properties": {
911
- "handler": {
912
- "properties": {
913
- "options": {
914
- "type": "object",
915
- "additionalProperties": false,
916
- "required": [],
917
- "properties": {}
918
- }
919
- }
920
- }
921
- }
922
- }
923
- },
924
1015
  {
925
1016
  "if": {
926
1017
  "properties": {
927
1018
  "policyType": {
928
1019
  "enum": [
1020
+ "ai-gateway-semantic-cache",
1021
+ "ai-gateway-semantic-cache-inbound",
929
1022
  "ai-gateway-semantic-cache-v2",
930
- "ai-gateway-semantic-cache-v2-inbound"
1023
+ "ai-gateway-semantic-cache-v2-inbound",
1024
+ "ai-gateway-semantic-cache-inbound-v2"
931
1025
  ]
932
1026
  }
933
1027
  },
@@ -1131,242 +1225,37 @@
1131
1225
  "items": {
1132
1226
  "type": "string"
1133
1227
  }
1134
- }
1135
- ],
1136
- "x-advanced": true
1137
- },
1138
- "minConfidenceForRouting": {
1139
- "type": "number",
1140
- "title": "Minimum Confidence For Routing",
1141
- "description": "Minimum confidence (0–1) required before applying model routing. Unknown intents are capped strictly below this threshold.",
1142
- "minimum": 0,
1143
- "maximum": 1,
1144
- "default": 0.5,
1145
- "x-advanced": true
1146
- },
1147
- "classifierTimeoutMs": {
1148
- "type": "integer",
1149
- "title": "Classifier Timeout (ms)",
1150
- "description": "Timeout configured for the classifier task. When exceeded, the request is forwarded without classification to the original model.",
1151
- "minimum": 1,
1152
- "maximum": 120000,
1153
- "default": 8000,
1154
- "x-advanced": true
1155
- },
1156
- "maxPromptChars": {
1157
- "type": "integer",
1158
- "title": "Max Prompt Characters",
1159
- "description": "Maximum characters of user message sent to the classifier. Longer messages get truncated.",
1160
- "minimum": 1,
1161
- "default": 8000,
1162
- "x-advanced": true
1163
- }
1164
- }
1165
- }
1166
- }
1167
- }
1168
- }
1169
- }
1170
- },
1171
- {
1172
- "if": {
1173
- "properties": {
1174
- "policyType": {
1175
- "const": "ai-gateway-usage-tracker"
1176
- }
1177
- },
1178
- "required": ["policyType"]
1179
- },
1180
- "then": {
1181
- "properties": {
1182
- "handler": {
1183
- "properties": {
1184
- "options": {
1185
- "type": "object",
1186
- "additionalProperties": false,
1187
- "required": [],
1188
- "properties": {}
1189
- }
1190
- }
1191
- }
1192
- }
1193
- }
1194
- },
1195
- {
1196
- "if": {
1197
- "properties": {
1198
- "policyType": {
1199
- "const": "akamai-ai-firewall"
1200
- }
1201
- },
1202
- "required": ["policyType"]
1203
- },
1204
- "then": {
1205
- "properties": {
1206
- "handler": {
1207
- "properties": {
1208
- "options": {
1209
- "type": "object",
1210
- "properties": {
1211
- "configurationId": {
1212
- "type": "string",
1213
- "title": "Configuration ID",
1214
- "description": "The configuration ID of the AI Firewall."
1215
- },
1216
- "api-key": {
1217
- "type": "string",
1218
- "title": "API Key",
1219
- "description": "The API key for the AI Firewall."
1220
- },
1221
- "applicationId": {
1222
- "type": "string",
1223
- "title": "Application ID",
1224
- "description": "The application ID to identify this usage of the AI Firewall (optional)."
1225
- },
1226
- "streamingAccumulation": {
1227
- "type": "object",
1228
- "title": "Streaming Accumulation Settings",
1229
- "x-advanced": true,
1230
- "description": "Configuration for accumulating and validating streaming responses.",
1231
- "properties": {
1232
- "enabled": {
1233
- "type": "boolean",
1234
- "title": "Enable Streaming Accumulation",
1235
- "description": "Enable accumulation and validation of streaming responses.",
1236
- "default": true
1237
- },
1238
- "eventsInterval": {
1239
- "type": "number",
1240
- "title": "Events Interval",
1241
- "description": "Number of SSE events to accumulate before checking with Akamai (default: 5).",
1242
- "minimum": 1,
1243
- "maximum": 100,
1244
- "default": 5
1245
- },
1246
- "checkIntervalMs": {
1247
- "type": "number",
1248
- "title": "Check Interval (ms)",
1249
- "description": "Time interval in milliseconds for periodic checks (alternative to chunk count).",
1250
- "minimum": 100,
1251
- "maximum": 10000
1252
- }
1253
- },
1254
- "additionalProperties": false
1255
- },
1256
- "onError": {
1257
- "type": "string",
1258
- "title": "On Firewall Error",
1259
- "x-advanced": true,
1260
- "description": "What to do when the Akamai detect call itself fails (invalid API key, rate limit, outage). 'block' (the default) fails closed and returns a 502 so unverified content is never served; 'allow' fails open and lets the request through without inspection. An onError value in the AI Gateway app configuration takes precedence over this option.",
1261
- "enum": ["block", "allow"],
1262
- "default": "block"
1263
- }
1264
- },
1265
- "required": ["configurationId", "api-key"],
1266
- "additionalProperties": false
1267
- }
1268
- }
1269
- }
1270
- }
1271
- }
1272
- },
1273
- {
1274
- "if": {
1275
- "properties": {
1276
- "policyType": {
1277
- "enum": [
1278
- "akamai-ai-firewall-v2",
1279
- "akamai-ai-firewall-v2-inbound"
1280
- ]
1281
- }
1282
- },
1283
- "required": ["policyType"]
1284
- },
1285
- "then": {
1286
- "properties": {
1287
- "handler": {
1288
- "properties": {
1289
- "options": {
1290
- "type": "object",
1291
- "properties": {
1292
- "configurationId": {
1293
- "type": "string",
1294
- "title": "Configuration ID",
1295
- "description": "The configuration ID of the AI Firewall."
1296
- },
1297
- "api-key": {
1298
- "type": "string",
1299
- "title": "API Key",
1300
- "description": "The API key for the AI Firewall."
1301
- },
1302
- "applicationId": {
1303
- "type": "string",
1304
- "title": "Application ID",
1305
- "description": "The application ID to identify this usage of the AI Firewall (optional)."
1306
- },
1307
- "streamingAccumulation": {
1308
- "type": "object",
1309
- "title": "Streaming Accumulation Settings",
1310
- "x-advanced": true,
1311
- "description": "Configuration for accumulating and validating streaming responses.",
1312
- "properties": {
1313
- "enabled": {
1314
- "type": "boolean",
1315
- "title": "Enable Streaming Accumulation",
1316
- "description": "Enable accumulation and validation of streaming responses.",
1317
- "default": true
1318
- },
1319
- "eventsInterval": {
1320
- "type": "number",
1321
- "title": "Events Interval",
1322
- "description": "Number of SSE events to accumulate before checking with Akamai (default: 5).",
1323
- "minimum": 1,
1324
- "maximum": 100,
1325
- "default": 5
1326
- },
1327
- "checkIntervalMs": {
1328
- "type": "number",
1329
- "title": "Check Interval (ms)",
1330
- "description": "Time interval in milliseconds for periodic checks (alternative to chunk count).",
1331
- "minimum": 100,
1332
- "maximum": 10000
1333
- }
1334
- },
1335
- "additionalProperties": false
1336
- },
1337
- "endpoints": {
1338
- "type": "array",
1339
- "title": "Applicable Endpoints",
1340
- "x-advanced": true,
1341
- "description": "The endpoint shapes this policy applies to. Omit to apply to all (openai-chat, openai-responses, anthropic-messages).",
1342
- "items": {
1343
- "type": "string",
1344
- "enum": [
1345
- "openai-chat",
1346
- "openai-responses",
1347
- "anthropic-messages"
1348
- ]
1349
- }
1228
+ }
1229
+ ],
1230
+ "x-advanced": true
1350
1231
  },
1351
- "onUnknownShape": {
1352
- "type": "string",
1353
- "title": "On Unknown Shape",
1354
- "x-advanced": true,
1355
- "description": "What to do when the request shape cannot be inspected. As a guardrail, this policy defaults to 'deny' (fail closed) so uninspectable content is never served.",
1356
- "enum": ["deny", "skip"],
1357
- "default": "deny"
1232
+ "minConfidenceForRouting": {
1233
+ "type": "number",
1234
+ "title": "Minimum Confidence For Routing",
1235
+ "description": "Minimum confidence (0–1) required before applying model routing. Unknown intents are capped strictly below this threshold.",
1236
+ "minimum": 0,
1237
+ "maximum": 1,
1238
+ "default": 0.5,
1239
+ "x-advanced": true
1358
1240
  },
1359
- "onError": {
1360
- "type": "string",
1361
- "title": "On Firewall Error",
1362
- "x-advanced": true,
1363
- "description": "What to do when the Akamai detect call itself fails (invalid API key, rate limit, outage). 'block' (the default) fails closed and returns a 502 so unverified content is never served; 'allow' fails open and lets the request through without inspection.",
1364
- "enum": ["block", "allow"],
1365
- "default": "block"
1241
+ "classifierTimeoutMs": {
1242
+ "type": "integer",
1243
+ "title": "Classifier Timeout (ms)",
1244
+ "description": "Timeout configured for the classifier task. When exceeded, the request is forwarded without classification to the original model.",
1245
+ "minimum": 1,
1246
+ "maximum": 120000,
1247
+ "default": 8000,
1248
+ "x-advanced": true
1249
+ },
1250
+ "maxPromptChars": {
1251
+ "type": "integer",
1252
+ "title": "Max Prompt Characters",
1253
+ "description": "Maximum characters of user message sent to the classifier. Longer messages get truncated.",
1254
+ "minimum": 1,
1255
+ "default": 8000,
1256
+ "x-advanced": true
1366
1257
  }
1367
- },
1368
- "required": ["configurationId", "api-key"],
1369
- "additionalProperties": false
1258
+ }
1370
1259
  }
1371
1260
  }
1372
1261
  }
@@ -2706,115 +2595,6 @@
2706
2595
  }
2707
2596
  }
2708
2597
  },
2709
- {
2710
- "if": {
2711
- "properties": {
2712
- "policyType": {
2713
- "const": "comet-opik-tracing-inbound"
2714
- }
2715
- },
2716
- "required": ["policyType"]
2717
- },
2718
- "then": {
2719
- "properties": {
2720
- "handler": {
2721
- "properties": {
2722
- "options": {
2723
- "type": "object",
2724
- "properties": {
2725
- "apiKey": {
2726
- "description": "The Comet Opik API key for authentication.",
2727
- "type": "string"
2728
- },
2729
- "projectName": {
2730
- "description": "The Comet Opik project name for organizing traces.",
2731
- "type": "string"
2732
- },
2733
- "workspace": {
2734
- "description": "The Comet Opik workspace name.",
2735
- "type": "string"
2736
- },
2737
- "baseUrl": {
2738
- "x-advanced": true,
2739
- "description": "The base URL for the Comet Opik API (optional, defaults to https://www.comet.com/opik/api).",
2740
- "type": "string"
2741
- }
2742
- },
2743
- "required": ["apiKey", "projectName", "workspace"],
2744
- "additionalProperties": false
2745
- }
2746
- }
2747
- }
2748
- }
2749
- }
2750
- },
2751
- {
2752
- "if": {
2753
- "properties": {
2754
- "policyType": {
2755
- "enum": [
2756
- "comet-opik-tracing-v2",
2757
- "comet-opik-tracing-v2-inbound"
2758
- ]
2759
- }
2760
- },
2761
- "required": ["policyType"]
2762
- },
2763
- "then": {
2764
- "properties": {
2765
- "handler": {
2766
- "properties": {
2767
- "options": {
2768
- "type": "object",
2769
- "properties": {
2770
- "apiKey": {
2771
- "description": "The Comet Opik API key for authentication.",
2772
- "type": "string"
2773
- },
2774
- "projectName": {
2775
- "description": "The Comet Opik project name for organizing traces.",
2776
- "type": "string"
2777
- },
2778
- "workspace": {
2779
- "description": "The Comet Opik workspace name.",
2780
- "type": "string"
2781
- },
2782
- "baseUrl": {
2783
- "x-advanced": true,
2784
- "description": "The base URL for the Comet Opik API (optional, defaults to https://www.comet.com/opik/api).",
2785
- "type": "string"
2786
- },
2787
- "endpoints": {
2788
- "type": "array",
2789
- "title": "Applicable Endpoints",
2790
- "x-advanced": true,
2791
- "description": "The endpoint shapes this policy applies to. Omit to apply to all (openai-chat, openai-responses, anthropic-messages).",
2792
- "items": {
2793
- "type": "string",
2794
- "enum": [
2795
- "openai-chat",
2796
- "openai-responses",
2797
- "anthropic-messages"
2798
- ]
2799
- }
2800
- },
2801
- "onUnknownShape": {
2802
- "type": "string",
2803
- "title": "On Unknown Shape",
2804
- "x-advanced": true,
2805
- "description": "What to do on a shape the policy cannot read. As an observer this defaults to 'skip' (fail open — pass through untraced).",
2806
- "enum": ["deny", "skip"],
2807
- "default": "skip"
2808
- }
2809
- },
2810
- "required": ["apiKey", "projectName", "workspace"],
2811
- "additionalProperties": false
2812
- }
2813
- }
2814
- }
2815
- }
2816
- }
2817
- },
2818
2598
  {
2819
2599
  "if": {
2820
2600
  "properties": {
@@ -3486,112 +3266,6 @@
3486
3266
  }
3487
3267
  }
3488
3268
  },
3489
- {
3490
- "if": {
3491
- "properties": {
3492
- "policyType": {
3493
- "const": "galileo-tracing-inbound"
3494
- }
3495
- },
3496
- "required": ["policyType"]
3497
- },
3498
- "then": {
3499
- "properties": {
3500
- "handler": {
3501
- "properties": {
3502
- "options": {
3503
- "type": "object",
3504
- "properties": {
3505
- "apiKey": {
3506
- "description": "The Galileo API key for authentication.",
3507
- "type": "string"
3508
- },
3509
- "projectId": {
3510
- "description": "The Galileo project ID (UUID) for organizing traces.",
3511
- "type": "string"
3512
- },
3513
- "logStreamId": {
3514
- "description": "The Galileo log stream ID (UUID) for organizing traces.",
3515
- "type": "string"
3516
- },
3517
- "baseUrl": {
3518
- "x-advanced": true,
3519
- "description": "The base URL for the Galileo API (optional, defaults to https://api.galileo.ai).",
3520
- "type": "string"
3521
- }
3522
- },
3523
- "required": ["apiKey", "projectId", "logStreamId"],
3524
- "additionalProperties": false
3525
- }
3526
- }
3527
- }
3528
- }
3529
- }
3530
- },
3531
- {
3532
- "if": {
3533
- "properties": {
3534
- "policyType": {
3535
- "enum": ["galileo-tracing-v2", "galileo-tracing-v2-inbound"]
3536
- }
3537
- },
3538
- "required": ["policyType"]
3539
- },
3540
- "then": {
3541
- "properties": {
3542
- "handler": {
3543
- "properties": {
3544
- "options": {
3545
- "type": "object",
3546
- "properties": {
3547
- "apiKey": {
3548
- "description": "The Galileo API key for authentication.",
3549
- "type": "string"
3550
- },
3551
- "projectId": {
3552
- "description": "The Galileo project ID (UUID) for organizing traces.",
3553
- "type": "string"
3554
- },
3555
- "logStreamId": {
3556
- "description": "The Galileo log stream ID (UUID) for organizing traces.",
3557
- "type": "string"
3558
- },
3559
- "baseUrl": {
3560
- "x-advanced": true,
3561
- "description": "The base URL for the Galileo API (optional, defaults to https://api.galileo.ai).",
3562
- "type": "string"
3563
- },
3564
- "endpoints": {
3565
- "type": "array",
3566
- "title": "Applicable Endpoints",
3567
- "x-advanced": true,
3568
- "description": "The endpoint shapes this policy applies to. Omit to apply to all (openai-chat, openai-responses, anthropic-messages).",
3569
- "items": {
3570
- "type": "string",
3571
- "enum": [
3572
- "openai-chat",
3573
- "openai-responses",
3574
- "anthropic-messages"
3575
- ]
3576
- }
3577
- },
3578
- "onUnknownShape": {
3579
- "type": "string",
3580
- "title": "On Unknown Shape",
3581
- "x-advanced": true,
3582
- "description": "What to do on a shape the policy cannot read. As an observer this defaults to 'skip' (fail open — pass through untraced).",
3583
- "enum": ["deny", "skip"],
3584
- "default": "skip"
3585
- }
3586
- },
3587
- "required": ["apiKey", "projectId", "logStreamId"],
3588
- "additionalProperties": false
3589
- }
3590
- }
3591
- }
3592
- }
3593
- }
3594
- },
3595
3269
  {
3596
3270
  "if": {
3597
3271
  "properties": {
@@ -9551,7 +9225,7 @@
9551
9225
  "additionalProperties": true
9552
9226
  }
9553
9227
  },
9554
- "ai-gateway-fallback-model-v2": {
9228
+ "ai-gateway-fallback-model": {
9555
9229
  "modelRef": {
9556
9230
  "type": "string",
9557
9231
  "title": "Provider and Model",
@@ -9566,17 +9240,17 @@
9566
9240
  "fallback": {
9567
9241
  "title": "Fallback Model",
9568
9242
  "description": "The model attempted after a retryable error or timeout.",
9569
- "$ref": "#/$defs/ai-gateway-fallback-model-v2/modelRef"
9243
+ "$ref": "#/$defs/ai-gateway-fallback-model/modelRef"
9570
9244
  },
9571
9245
  "quotaFallback": {
9572
9246
  "title": "Quota Fallback Model",
9573
9247
  "description": "The model selected after a usage-limit-exceeded signal.",
9574
- "$ref": "#/$defs/ai-gateway-fallback-model-v2/modelRef"
9248
+ "$ref": "#/$defs/ai-gateway-fallback-model/modelRef"
9575
9249
  }
9576
9250
  }
9577
9251
  }
9578
9252
  },
9579
- "ai-gateway-metering-v2": {
9253
+ "ai-gateway-metering": {
9580
9254
  "meteringBudgetRule": {
9581
9255
  "type": "object",
9582
9256
  "additionalProperties": false,
@@ -9598,7 +9272,7 @@
9598
9272
  "maxItems": 24,
9599
9273
  "description": "Thresholds this rule enforces. Add one entry per meter, period, and action you want.",
9600
9274
  "items": {
9601
- "$ref": "#/$defs/ai-gateway-metering-v2/meteringBudgetRuleMeter"
9275
+ "$ref": "#/$defs/ai-gateway-metering/meteringBudgetRuleMeter"
9602
9276
  }
9603
9277
  }
9604
9278
  }
@@ -9659,7 +9333,7 @@
9659
9333
  "minimum": 0
9660
9334
  },
9661
9335
  "warning": {
9662
- "$ref": "#/$defs/ai-gateway-metering-v2/warningSettings"
9336
+ "$ref": "#/$defs/ai-gateway-metering/warningSettings"
9663
9337
  }
9664
9338
  }
9665
9339
  },
@@ -9669,15 +9343,15 @@
9669
9343
  "additionalProperties": false,
9670
9344
  "properties": {
9671
9345
  "daily": {
9672
- "$ref": "#/$defs/ai-gateway-metering-v2/quotaSettings"
9346
+ "$ref": "#/$defs/ai-gateway-metering/quotaSettings"
9673
9347
  },
9674
9348
  "monthly": {
9675
- "$ref": "#/$defs/ai-gateway-metering-v2/quotaSettings"
9349
+ "$ref": "#/$defs/ai-gateway-metering/quotaSettings"
9676
9350
  }
9677
9351
  }
9678
9352
  }
9679
9353
  },
9680
- "ai-gateway-model-filtering-v2": {
9354
+ "ai-gateway-model-filtering": {
9681
9355
  "modelRef": {
9682
9356
  "type": "string",
9683
9357
  "title": "Provider and Model",
package/bin/version.txt CHANGED
@@ -1 +1 @@
1
- 7.8.23
1
+ 7.8.25
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zuplo/lint-win32-x64",
3
- "version": "7.8.23",
3
+ "version": "7.8.25",
4
4
  "description": "The win32-x64 binary for zuplo-lint, the Zuplo API linter.",
5
5
  "repository": "https://github.com/zuplo/zuplo",
6
6
  "author": "Zuplo, Inc.",