raxe 0.4.6__py3-none-any.whl
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.
- raxe/__init__.py +101 -0
- raxe/application/__init__.py +48 -0
- raxe/application/ab_testing.py +170 -0
- raxe/application/analytics/__init__.py +30 -0
- raxe/application/analytics/achievement_service.py +444 -0
- raxe/application/analytics/repositories.py +172 -0
- raxe/application/analytics/retention_service.py +267 -0
- raxe/application/analytics/statistics_service.py +419 -0
- raxe/application/analytics/streak_service.py +283 -0
- raxe/application/apply_policy.py +291 -0
- raxe/application/eager_l2.py +503 -0
- raxe/application/preloader.py +353 -0
- raxe/application/scan_merger.py +321 -0
- raxe/application/scan_pipeline.py +1059 -0
- raxe/application/scan_pipeline_async.py +403 -0
- raxe/application/session_tracker.py +458 -0
- raxe/application/telemetry_manager.py +357 -0
- raxe/application/telemetry_orchestrator.py +1210 -0
- raxe/async_sdk/__init__.py +34 -0
- raxe/async_sdk/cache.py +286 -0
- raxe/async_sdk/client.py +556 -0
- raxe/async_sdk/wrappers/__init__.py +23 -0
- raxe/async_sdk/wrappers/openai.py +238 -0
- raxe/cli/__init__.py +21 -0
- raxe/cli/auth.py +1047 -0
- raxe/cli/branding.py +235 -0
- raxe/cli/config.py +334 -0
- raxe/cli/custom_rules.py +458 -0
- raxe/cli/doctor.py +686 -0
- raxe/cli/error_handler.py +665 -0
- raxe/cli/event.py +648 -0
- raxe/cli/exit_codes.py +57 -0
- raxe/cli/expiry_warning.py +302 -0
- raxe/cli/export.py +183 -0
- raxe/cli/history.py +247 -0
- raxe/cli/l2_formatter.py +872 -0
- raxe/cli/main.py +1137 -0
- raxe/cli/models.py +590 -0
- raxe/cli/output.py +403 -0
- raxe/cli/privacy.py +84 -0
- raxe/cli/profiler.py +262 -0
- raxe/cli/progress.py +379 -0
- raxe/cli/progress_context.py +101 -0
- raxe/cli/repl.py +394 -0
- raxe/cli/rules.py +542 -0
- raxe/cli/setup_wizard.py +721 -0
- raxe/cli/stats.py +292 -0
- raxe/cli/suppress.py +501 -0
- raxe/cli/telemetry.py +1384 -0
- raxe/cli/test.py +130 -0
- raxe/cli/tune.py +315 -0
- raxe/cli/validate.py +218 -0
- raxe/domain/__init__.py +30 -0
- raxe/domain/analytics/__init__.py +97 -0
- raxe/domain/analytics/achievements.py +306 -0
- raxe/domain/analytics/models.py +120 -0
- raxe/domain/analytics/retention.py +168 -0
- raxe/domain/analytics/statistics.py +207 -0
- raxe/domain/analytics/streaks.py +173 -0
- raxe/domain/engine/__init__.py +15 -0
- raxe/domain/engine/executor.py +396 -0
- raxe/domain/engine/matcher.py +212 -0
- raxe/domain/inline_suppression.py +176 -0
- raxe/domain/ml/__init__.py +133 -0
- raxe/domain/ml/embedding_cache.py +309 -0
- raxe/domain/ml/gemma_detector.py +921 -0
- raxe/domain/ml/gemma_models.py +346 -0
- raxe/domain/ml/l2_config.py +428 -0
- raxe/domain/ml/l2_output_schema.py +443 -0
- raxe/domain/ml/manifest_loader.py +309 -0
- raxe/domain/ml/manifest_schema.py +345 -0
- raxe/domain/ml/model_metadata.py +263 -0
- raxe/domain/ml/model_registry.py +786 -0
- raxe/domain/ml/protocol.py +282 -0
- raxe/domain/ml/scoring_models.py +419 -0
- raxe/domain/ml/stub_detector.py +397 -0
- raxe/domain/ml/threat_scorer.py +757 -0
- raxe/domain/ml/tokenizer_registry.py +372 -0
- raxe/domain/ml/voting/__init__.py +89 -0
- raxe/domain/ml/voting/config.py +595 -0
- raxe/domain/ml/voting/engine.py +465 -0
- raxe/domain/ml/voting/head_voters.py +378 -0
- raxe/domain/ml/voting/models.py +222 -0
- raxe/domain/models.py +82 -0
- raxe/domain/packs/__init__.py +17 -0
- raxe/domain/packs/models.py +304 -0
- raxe/domain/policies/__init__.py +20 -0
- raxe/domain/policies/evaluator.py +212 -0
- raxe/domain/policies/models.py +223 -0
- raxe/domain/rules/__init__.py +32 -0
- raxe/domain/rules/custom.py +286 -0
- raxe/domain/rules/models.py +273 -0
- raxe/domain/rules/schema.py +166 -0
- raxe/domain/rules/validator.py +556 -0
- raxe/domain/suppression.py +801 -0
- raxe/domain/suppression_factory.py +174 -0
- raxe/domain/telemetry/__init__.py +116 -0
- raxe/domain/telemetry/backpressure.py +424 -0
- raxe/domain/telemetry/event_creator.py +362 -0
- raxe/domain/telemetry/events.py +1282 -0
- raxe/domain/telemetry/priority.py +263 -0
- raxe/domain/telemetry/scan_telemetry_builder.py +670 -0
- raxe/infrastructure/__init__.py +25 -0
- raxe/infrastructure/analytics/__init__.py +18 -0
- raxe/infrastructure/analytics/aggregator.py +484 -0
- raxe/infrastructure/analytics/aggregator_optimized.py +184 -0
- raxe/infrastructure/analytics/engine.py +748 -0
- raxe/infrastructure/analytics/repository.py +409 -0
- raxe/infrastructure/analytics/streaks.py +467 -0
- raxe/infrastructure/analytics/views.py +178 -0
- raxe/infrastructure/cloud/__init__.py +9 -0
- raxe/infrastructure/config/__init__.py +56 -0
- raxe/infrastructure/config/endpoints.py +641 -0
- raxe/infrastructure/config/scan_config.py +352 -0
- raxe/infrastructure/config/yaml_config.py +459 -0
- raxe/infrastructure/database/__init__.py +10 -0
- raxe/infrastructure/database/connection.py +200 -0
- raxe/infrastructure/database/models.py +325 -0
- raxe/infrastructure/database/scan_history.py +764 -0
- raxe/infrastructure/ml/__init__.py +0 -0
- raxe/infrastructure/ml/download_progress.py +438 -0
- raxe/infrastructure/ml/model_downloader.py +457 -0
- raxe/infrastructure/models/__init__.py +16 -0
- raxe/infrastructure/models/discovery.py +461 -0
- raxe/infrastructure/packs/__init__.py +13 -0
- raxe/infrastructure/packs/loader.py +407 -0
- raxe/infrastructure/packs/registry.py +381 -0
- raxe/infrastructure/policies/__init__.py +16 -0
- raxe/infrastructure/policies/api_client.py +256 -0
- raxe/infrastructure/policies/validator.py +227 -0
- raxe/infrastructure/policies/yaml_loader.py +250 -0
- raxe/infrastructure/rules/__init__.py +18 -0
- raxe/infrastructure/rules/custom_loader.py +224 -0
- raxe/infrastructure/rules/versioning.py +222 -0
- raxe/infrastructure/rules/yaml_loader.py +286 -0
- raxe/infrastructure/security/__init__.py +31 -0
- raxe/infrastructure/security/auth.py +145 -0
- raxe/infrastructure/security/policy_validator.py +124 -0
- raxe/infrastructure/security/signatures.py +171 -0
- raxe/infrastructure/suppression/__init__.py +36 -0
- raxe/infrastructure/suppression/composite_repository.py +154 -0
- raxe/infrastructure/suppression/sqlite_repository.py +231 -0
- raxe/infrastructure/suppression/yaml_composite_repository.py +156 -0
- raxe/infrastructure/suppression/yaml_repository.py +510 -0
- raxe/infrastructure/telemetry/__init__.py +79 -0
- raxe/infrastructure/telemetry/acquisition.py +179 -0
- raxe/infrastructure/telemetry/config.py +254 -0
- raxe/infrastructure/telemetry/credential_store.py +947 -0
- raxe/infrastructure/telemetry/dual_queue.py +1123 -0
- raxe/infrastructure/telemetry/flush_helper.py +343 -0
- raxe/infrastructure/telemetry/flush_scheduler.py +776 -0
- raxe/infrastructure/telemetry/health_client.py +394 -0
- raxe/infrastructure/telemetry/hook.py +347 -0
- raxe/infrastructure/telemetry/queue.py +520 -0
- raxe/infrastructure/telemetry/sender.py +476 -0
- raxe/infrastructure/tracking/__init__.py +13 -0
- raxe/infrastructure/tracking/usage.py +389 -0
- raxe/integrations/__init__.py +55 -0
- raxe/integrations/availability.py +143 -0
- raxe/integrations/registry.py +122 -0
- raxe/integrations/utils.py +135 -0
- raxe/mcp/__init__.py +62 -0
- raxe/mcp/cli.py +97 -0
- raxe/mcp/server.py +409 -0
- raxe/monitoring/__init__.py +51 -0
- raxe/monitoring/metrics.py +372 -0
- raxe/monitoring/profiler.py +388 -0
- raxe/monitoring/server.py +136 -0
- raxe/packs/core/v1.0.0/pack.yaml +1394 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-001@1.0.0.yaml +49 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-006@1.0.0.yaml +48 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-014@1.0.0.yaml +54 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-017@1.0.0.yaml +52 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-022@1.0.0.yaml +67 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-023@1.0.0.yaml +91 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-024@1.0.0.yaml +80 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-025@1.0.0.yaml +81 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-026@1.0.0.yaml +50 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-027@1.0.0.yaml +77 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-028@1.0.0.yaml +52 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-029@1.0.0.yaml +51 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-030@1.0.0.yaml +55 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-033@1.0.0.yaml +50 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-034@1.0.0.yaml +50 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-035@1.0.0.yaml +50 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-046@1.0.0.yaml +50 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-047@1.0.0.yaml +50 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-048@1.0.0.yaml +50 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-049@1.0.0.yaml +50 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-050@1.0.0.yaml +50 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-068@1.0.0.yaml +50 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-078@1.0.0.yaml +50 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-2001@1.0.0.yaml +35 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-2004@1.0.0.yaml +39 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-201@1.0.0.yaml +43 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-202@1.0.0.yaml +47 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-203@1.0.0.yaml +46 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-3007@1.0.0.yaml +44 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-3016@1.0.0.yaml +44 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-3026@1.0.0.yaml +39 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-3027@1.0.0.yaml +64 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-3028@1.0.0.yaml +51 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-3029@1.0.0.yaml +53 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-3030@1.0.0.yaml +50 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-3031@1.0.0.yaml +50 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-3032@1.0.0.yaml +50 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-3033@1.0.0.yaml +56 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-3034@1.0.0.yaml +50 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-79@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-80@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-81@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-82@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-83@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-84@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-85@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-86@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-87@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-88@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-89@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-90@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-91@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-92@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-93@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-94@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-95@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-96@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-97@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/PI/pi-98@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-001@1.0.0.yaml +48 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-007@1.0.0.yaml +48 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-015@1.0.0.yaml +56 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-016@1.0.0.yaml +46 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-017@1.0.0.yaml +57 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-021@1.0.0.yaml +46 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-022@1.0.0.yaml +46 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-023@1.0.0.yaml +78 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-024@1.0.0.yaml +46 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-025@1.0.0.yaml +93 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-026@1.0.0.yaml +81 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-027@1.0.0.yaml +82 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-028@1.0.0.yaml +46 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-033@1.0.0.yaml +48 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-036@1.0.0.yaml +47 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-037@1.0.0.yaml +44 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-052@1.0.0.yaml +43 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-054@1.0.0.yaml +44 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-056@1.0.0.yaml +43 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-065@1.0.0.yaml +46 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-075@1.0.0.yaml +45 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-079@1.0.0.yaml +44 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-1080@1.0.0.yaml +41 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-1090@1.0.0.yaml +41 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-1104@1.0.0.yaml +44 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-1105@1.0.0.yaml +41 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-1112@1.0.0.yaml +44 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-201@1.0.0.yaml +47 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-202@1.0.0.yaml +42 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-203@1.0.0.yaml +43 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-204@1.0.0.yaml +47 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-205@1.0.0.yaml +44 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-206@1.0.0.yaml +47 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-207@1.0.0.yaml +46 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-208@1.0.0.yaml +42 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-209@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-210@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-211@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-212@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-213@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-214@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-215@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-216@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-217@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-218@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-219@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-220@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-221@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-222@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-223@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-224@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-225@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-226@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-227@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-228@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-229@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-230@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-231@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-232@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-233@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-234@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-235@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-236@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-237@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/cmd/cmd-238@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-001@1.0.0.yaml +48 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-013@1.0.0.yaml +46 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-019@1.0.0.yaml +43 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-020@1.0.0.yaml +47 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-024@1.0.0.yaml +46 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-029@1.0.0.yaml +44 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-038@1.0.0.yaml +44 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-044@1.0.0.yaml +46 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-067@1.0.0.yaml +42 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-069@1.0.0.yaml +42 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-100@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-101@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-102@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-103@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-104@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-105@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-106@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-107@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-108@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-109@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-110@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-111@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-112@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-113@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-114@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-115@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-116@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-117@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-118@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-119@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-120@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-201@1.0.0.yaml +37 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-202@1.0.0.yaml +41 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-203@1.0.0.yaml +41 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-3004@1.0.0.yaml +40 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-3006@1.0.0.yaml +40 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-3011@1.0.0.yaml +40 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-5016@1.0.0.yaml +46 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-6001@1.0.0.yaml +53 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-6002@1.0.0.yaml +41 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-70@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-71@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-72@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-73@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-74@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-75@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-76@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-77@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-78@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-79@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-80@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-81@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-82@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-83@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-84@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-85@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-86@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-87@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-88@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-89@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-90@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-91@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-92@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-93@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-94@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-95@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-96@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-97@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-98@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/enc/enc-99@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-001@1.0.0.yaml +73 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-002@1.0.0.yaml +71 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-003@1.0.0.yaml +65 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-004@1.0.0.yaml +73 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-101@1.0.0.yaml +47 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-102@1.0.0.yaml +47 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-103@1.0.0.yaml +47 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-104@1.0.0.yaml +47 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-105@1.0.0.yaml +48 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-106@1.0.0.yaml +40 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-107@1.0.0.yaml +47 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-108@1.0.0.yaml +47 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-109@1.0.0.yaml +50 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-110@1.0.0.yaml +56 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-111@1.0.0.yaml +49 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-112@1.0.0.yaml +53 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-113@1.0.0.yaml +52 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-114@1.0.0.yaml +52 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-115@1.0.0.yaml +52 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-116@1.0.0.yaml +53 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-117@1.0.0.yaml +54 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-118@1.0.0.yaml +52 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-119@1.0.0.yaml +51 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-120@1.0.0.yaml +52 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-121@1.0.0.yaml +51 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-122@1.0.0.yaml +51 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-123@1.0.0.yaml +52 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-124@1.0.0.yaml +53 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-125@1.0.0.yaml +53 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-126@1.0.0.yaml +53 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-127@1.0.0.yaml +53 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-128@1.0.0.yaml +53 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-129@1.0.0.yaml +51 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-130@1.0.0.yaml +51 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-131@1.0.0.yaml +51 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-132@1.0.0.yaml +51 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-133@1.0.0.yaml +53 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-134@1.0.0.yaml +51 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-135@1.0.0.yaml +51 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-136@1.0.0.yaml +51 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-137@1.0.0.yaml +51 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-138@1.0.0.yaml +51 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-139@1.0.0.yaml +51 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-140@1.0.0.yaml +51 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-141@1.0.0.yaml +41 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-142@1.0.0.yaml +37 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-143@1.0.0.yaml +37 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-144@1.0.0.yaml +37 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-145@1.0.0.yaml +37 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-146@1.0.0.yaml +37 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-147@1.0.0.yaml +37 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-148@1.0.0.yaml +37 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-149@1.0.0.yaml +37 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-150@1.0.0.yaml +37 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-151@1.0.0.yaml +37 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-152@1.0.0.yaml +37 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-153@1.0.0.yaml +37 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-154@1.0.0.yaml +37 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-155@1.0.0.yaml +37 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-156@1.0.0.yaml +37 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-157@1.0.0.yaml +37 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-158@1.0.0.yaml +37 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-159@1.0.0.yaml +37 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-160@1.0.0.yaml +37 -0
- raxe/packs/core/v1.0.0/rules/hc/hc-161@1.0.0.yaml +37 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-001@1.0.0.yaml +47 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-009@1.0.0.yaml +47 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-020@1.0.0.yaml +47 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-021@1.0.0.yaml +46 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-022@1.0.0.yaml +47 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-028@1.0.0.yaml +43 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-033@1.0.0.yaml +46 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-034@1.0.0.yaml +46 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-036@1.0.0.yaml +41 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-039@1.0.0.yaml +41 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-056@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-066@1.0.0.yaml +37 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-076@1.0.0.yaml +37 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-098@1.0.0.yaml +46 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-103@1.0.0.yaml +47 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-104@1.0.0.yaml +52 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-105@1.0.0.yaml +56 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-110@1.0.0.yaml +56 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-111@1.0.0.yaml +57 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-112@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-113@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-114@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-115@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-116@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-117@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-118@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-119@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-120@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-121@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-122@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-123@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-124@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-125@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-126@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-127@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-128@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-129@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-130@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-131@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-132@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-133@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-134@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-135@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-136@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-137@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-138@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-139@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-140@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-141@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-142@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-143@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-144@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-145@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-146@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-147@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-148@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-149@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-150@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-151@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-152@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-153@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-154@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-155@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-156@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-157@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-158@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-159@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-160@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-161@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-162@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-201@1.0.0.yaml +40 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-202@1.0.0.yaml +41 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-203@1.0.0.yaml +51 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-204@1.0.0.yaml +50 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-205@1.0.0.yaml +50 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-206@1.0.0.yaml +50 -0
- raxe/packs/core/v1.0.0/rules/jb/jb-207@1.0.0.yaml +49 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-001@1.0.0.yaml +48 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-009@1.0.0.yaml +48 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-012@1.0.0.yaml +48 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-017@1.0.0.yaml +48 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-022@1.0.0.yaml +47 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-025@1.0.0.yaml +47 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-027@1.0.0.yaml +47 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-028@1.0.0.yaml +47 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-034@1.0.0.yaml +47 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-037@1.0.0.yaml +47 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-040@1.0.0.yaml +47 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-041@1.0.0.yaml +47 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-044@1.0.0.yaml +47 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-050@1.0.0.yaml +57 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-051@1.0.0.yaml +53 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-052@1.0.0.yaml +52 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-053@1.0.0.yaml +56 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-054@1.0.0.yaml +53 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-055@1.0.0.yaml +51 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-056@1.0.0.yaml +51 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-058@1.0.0.yaml +47 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-2015@1.0.0.yaml +41 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-2025@1.0.0.yaml +35 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-2026@1.0.0.yaml +39 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-2035@1.0.0.yaml +39 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-2037@1.0.0.yaml +39 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-2042@1.0.0.yaml +39 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3001@1.0.0.yaml +39 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3002@1.0.0.yaml +41 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3003@1.0.0.yaml +36 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3004@1.0.0.yaml +41 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3005@1.0.0.yaml +39 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3006@1.0.0.yaml +35 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3007@1.0.0.yaml +37 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3008@1.0.0.yaml +35 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3009@1.0.0.yaml +42 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3010@1.0.0.yaml +39 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3011@1.0.0.yaml +35 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3012@1.0.0.yaml +35 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3013@1.0.0.yaml +36 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3014@1.0.0.yaml +36 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3015@1.0.0.yaml +42 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3016@1.0.0.yaml +42 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3017@1.0.0.yaml +40 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3018@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3019@1.0.0.yaml +40 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3020@1.0.0.yaml +40 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3021@1.0.0.yaml +39 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3022@1.0.0.yaml +36 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3023@1.0.0.yaml +41 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3024@1.0.0.yaml +37 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3025@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3026@1.0.0.yaml +42 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3027@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3028@1.0.0.yaml +42 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3029@1.0.0.yaml +36 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3030@1.0.0.yaml +42 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3031@1.0.0.yaml +37 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3032@1.0.0.yaml +42 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3033@1.0.0.yaml +39 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3034@1.0.0.yaml +40 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3035@1.0.0.yaml +43 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3036@1.0.0.yaml +41 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3037@1.0.0.yaml +35 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3038@1.0.0.yaml +35 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3039@1.0.0.yaml +35 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3040@1.0.0.yaml +41 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3041@1.0.0.yaml +39 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3042@1.0.0.yaml +36 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3043@1.0.0.yaml +35 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3044@1.0.0.yaml +43 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3045@1.0.0.yaml +36 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3046@1.0.0.yaml +37 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3047@1.0.0.yaml +36 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3048@1.0.0.yaml +36 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3049@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3050@1.0.0.yaml +44 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3051@1.0.0.yaml +35 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3052@1.0.0.yaml +36 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3053@1.0.0.yaml +35 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3054@1.0.0.yaml +35 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3055@1.0.0.yaml +40 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3056@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3057@1.0.0.yaml +40 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3058@1.0.0.yaml +43 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3059@1.0.0.yaml +42 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3060@1.0.0.yaml +42 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3061@1.0.0.yaml +50 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3062@1.0.0.yaml +50 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3063@1.0.0.yaml +54 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3064@1.0.0.yaml +78 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3065@1.0.0.yaml +84 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3066@1.0.0.yaml +84 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3067@1.0.0.yaml +88 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3068@1.0.0.yaml +94 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3069@1.0.0.yaml +90 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3070@1.0.0.yaml +99 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3071@1.0.0.yaml +91 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3072@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3073@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3074@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3075@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3076@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3077@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3078@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3079@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3080@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3081@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3082@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3083@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3084@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/pii/pii-3085@1.0.0.yaml +38 -0
- raxe/packs/core/v1.0.0/rules/rag/rag-016@1.0.0.yaml +47 -0
- raxe/packs/core/v1.0.0/rules/rag/rag-028@1.0.0.yaml +47 -0
- raxe/packs/core/v1.0.0/rules/rag/rag-042@1.0.0.yaml +47 -0
- raxe/packs/core/v1.0.0/rules/rag/rag-044@1.0.0.yaml +47 -0
- raxe/packs/core/v1.0.0/rules/rag/rag-045@1.0.0.yaml +47 -0
- raxe/packs/core/v1.0.0/rules/rag/rag-050@1.0.0.yaml +47 -0
- raxe/packs/core/v1.0.0/rules/rag/rag-201@1.0.0.yaml +41 -0
- raxe/packs/core/v1.0.0/rules/rag/rag-202@1.0.0.yaml +41 -0
- raxe/packs/core/v1.0.0/rules/rag/rag-3001@1.0.0.yaml +41 -0
- raxe/packs/core/v1.0.0/rules/rag/rag-3006@1.0.0.yaml +41 -0
- raxe/packs/core/v1.0.0/rules/rag/rag-3009@1.0.0.yaml +41 -0
- raxe/packs/core/v1.0.0/rules/rag/rag-3012@1.0.0.yaml +41 -0
- raxe/plugins/__init__.py +98 -0
- raxe/plugins/custom_rules.py +380 -0
- raxe/plugins/loader.py +389 -0
- raxe/plugins/manager.py +538 -0
- raxe/plugins/protocol.py +428 -0
- raxe/py.typed +0 -0
- raxe/sdk/__init__.py +77 -0
- raxe/sdk/agent_scanner.py +1918 -0
- raxe/sdk/client.py +1603 -0
- raxe/sdk/decorator.py +175 -0
- raxe/sdk/exceptions.py +859 -0
- raxe/sdk/integrations/__init__.py +277 -0
- raxe/sdk/integrations/agent_scanner.py +71 -0
- raxe/sdk/integrations/autogen.py +872 -0
- raxe/sdk/integrations/crewai.py +1368 -0
- raxe/sdk/integrations/dspy.py +845 -0
- raxe/sdk/integrations/extractors.py +363 -0
- raxe/sdk/integrations/huggingface.py +395 -0
- raxe/sdk/integrations/langchain.py +948 -0
- raxe/sdk/integrations/litellm.py +484 -0
- raxe/sdk/integrations/llamaindex.py +1049 -0
- raxe/sdk/integrations/portkey.py +831 -0
- raxe/sdk/suppression_context.py +215 -0
- raxe/sdk/wrappers/__init__.py +163 -0
- raxe/sdk/wrappers/anthropic.py +310 -0
- raxe/sdk/wrappers/openai.py +221 -0
- raxe/sdk/wrappers/vertexai.py +484 -0
- raxe/utils/__init__.py +12 -0
- raxe/utils/error_sanitizer.py +135 -0
- raxe/utils/logging.py +241 -0
- raxe/utils/performance.py +414 -0
- raxe/utils/profiler.py +339 -0
- raxe/utils/validators.py +170 -0
- raxe-0.4.6.dist-info/METADATA +471 -0
- raxe-0.4.6.dist-info/RECORD +668 -0
- raxe-0.4.6.dist-info/WHEEL +5 -0
- raxe-0.4.6.dist-info/entry_points.txt +2 -0
- raxe-0.4.6.dist-info/licenses/LICENSE +56 -0
- raxe-0.4.6.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
version: 1.0.0
|
|
2
|
+
rule_id: rag-3006
|
|
3
|
+
family: RAG
|
|
4
|
+
sub_family: corrupt_actions
|
|
5
|
+
name: Detects 'tamper' attacks on RAG components
|
|
6
|
+
description: Detects 'tamper' attacks on RAG components
|
|
7
|
+
severity: critical
|
|
8
|
+
confidence: 0.95
|
|
9
|
+
patterns:
|
|
10
|
+
- pattern: (?i)\btamper\s+with\s+(the\s+)?(?:index|vector\s+store|embeddings?|knowledge\s+base)
|
|
11
|
+
flags:
|
|
12
|
+
- IGNORECASE
|
|
13
|
+
timeout: 5.0
|
|
14
|
+
- pattern: (?i)\btampering\s+with\s+(the\s+)?(?:RAG|retrieval)\s+(?:system|data)
|
|
15
|
+
flags:
|
|
16
|
+
- IGNORECASE
|
|
17
|
+
timeout: 5.0
|
|
18
|
+
examples:
|
|
19
|
+
should_match:
|
|
20
|
+
- tamper with the index
|
|
21
|
+
- tamper with the vector store
|
|
22
|
+
- tampering with the RAG system
|
|
23
|
+
- Tamper with knowledge base
|
|
24
|
+
should_not_match:
|
|
25
|
+
- Tamper-proof design
|
|
26
|
+
- Tamper detection
|
|
27
|
+
- Anti-tamper mechanisms
|
|
28
|
+
metrics:
|
|
29
|
+
precision: null
|
|
30
|
+
recall: null
|
|
31
|
+
f1_score: null
|
|
32
|
+
last_evaluated: null
|
|
33
|
+
metadata:
|
|
34
|
+
created: '2025-11-09'
|
|
35
|
+
updated: '2025-11-09'
|
|
36
|
+
author: raxe-ce
|
|
37
|
+
legacy_rx_id: RX-RAG-3006
|
|
38
|
+
rule_hash: sha256:98051b9d4cae5a6b9441f21b4b7f354385c91228eb0c8ce441ba4665abf892c6
|
|
39
|
+
risk_explanation: Tampering attacks alter existing documents or indices to change retrieval behavior. Unlike poisoning, these attacks modify authentic content to inject misinformation while maintaining apparent legitimacy.
|
|
40
|
+
remediation_advice: Use cryptographic hashing and digital signatures for document integrity. Implement version control and change tracking. Deploy anomaly detection for document modifications. Maintain backup copies of authoritative sources.
|
|
41
|
+
docs_url: https://github.com/raxe-ai/raxe-ce/wiki/RAG-3006-'Tamper'-Attacks-On
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
version: 1.0.0
|
|
2
|
+
rule_id: rag-3009
|
|
3
|
+
family: RAG
|
|
4
|
+
sub_family: overwhelm_actions
|
|
5
|
+
name: Detects 'flood' attacks on RAG components
|
|
6
|
+
description: Detects 'flood' attacks on RAG components
|
|
7
|
+
severity: critical
|
|
8
|
+
confidence: 0.97
|
|
9
|
+
patterns:
|
|
10
|
+
- pattern: (?i)\bflood\s+(the\s+)?(?:index|vector\s+store|knowledge\s+base)(?:\s+with)?
|
|
11
|
+
flags:
|
|
12
|
+
- IGNORECASE
|
|
13
|
+
timeout: 5.0
|
|
14
|
+
- pattern: (?i)\bflooding\s+(the\s+)?(?:RAG|retrieval)\s+(?:system|database)
|
|
15
|
+
flags:
|
|
16
|
+
- IGNORECASE
|
|
17
|
+
timeout: 5.0
|
|
18
|
+
examples:
|
|
19
|
+
should_match:
|
|
20
|
+
- flood the index with malicious data
|
|
21
|
+
- flood the vector store with noise
|
|
22
|
+
- flooding the RAG system
|
|
23
|
+
- Flood knowledge base
|
|
24
|
+
should_not_match:
|
|
25
|
+
- Flood control mechanisms
|
|
26
|
+
- Rate limiting to prevent flooding
|
|
27
|
+
- Network flood protection
|
|
28
|
+
metrics:
|
|
29
|
+
precision: null
|
|
30
|
+
recall: null
|
|
31
|
+
f1_score: null
|
|
32
|
+
last_evaluated: null
|
|
33
|
+
metadata:
|
|
34
|
+
created: '2025-11-09'
|
|
35
|
+
updated: '2025-11-09'
|
|
36
|
+
author: raxe-ce
|
|
37
|
+
legacy_rx_id: RX-RAG-3009
|
|
38
|
+
rule_hash: sha256:34686647c26a9804530de69b5a92ff0060f3de69ab037163bf2c453afbf52d33
|
|
39
|
+
risk_explanation: Flooding attacks overwhelm RAG systems with massive volumes of content to degrade performance or obscure authentic information. This denial-of-service technique can make systems unusable or unreliable.
|
|
40
|
+
remediation_advice: Implement rate limiting and resource quotas for document ingestion. Use anomaly detection for unusual ingestion patterns. Deploy capacity management and scaling controls. Apply access controls and authentication for knowledge base updates.
|
|
41
|
+
docs_url: https://github.com/raxe-ai/raxe-ce/wiki/RAG-3009-'Flood'-Attacks-On
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
version: 1.0.0
|
|
2
|
+
rule_id: rag-3012
|
|
3
|
+
family: RAG
|
|
4
|
+
sub_family: inject_actions
|
|
5
|
+
name: Detects 'insert malicious' attacks on RAG components
|
|
6
|
+
description: Detects 'insert malicious' attacks on RAG components
|
|
7
|
+
severity: critical
|
|
8
|
+
confidence: 0.97
|
|
9
|
+
patterns:
|
|
10
|
+
- pattern: (?i)\binsert\s+(?:malicious|fake|false|misleading)\s+(?:data|documents?|entries)\s+(?:into|in)\s+(?:the\s+)?(?:index|vector\s+store|knowledge\s+base)
|
|
11
|
+
flags:
|
|
12
|
+
- IGNORECASE
|
|
13
|
+
timeout: 5.0
|
|
14
|
+
- pattern: (?i)\binserting\s+(?:malicious|fake)\s+(?:data|content)\s+(?:into|in)\s+(?:the\s+)?(?:RAG|retrieval)
|
|
15
|
+
flags:
|
|
16
|
+
- IGNORECASE
|
|
17
|
+
timeout: 5.0
|
|
18
|
+
examples:
|
|
19
|
+
should_match:
|
|
20
|
+
- insert malicious data into the index
|
|
21
|
+
- insert fake documents in the vector store
|
|
22
|
+
- inserting malicious data into RAG
|
|
23
|
+
- Insert false entries into knowledge base
|
|
24
|
+
should_not_match:
|
|
25
|
+
- Insert data into database
|
|
26
|
+
- Insert operation
|
|
27
|
+
- SQL INSERT statement
|
|
28
|
+
metrics:
|
|
29
|
+
precision: null
|
|
30
|
+
recall: null
|
|
31
|
+
f1_score: null
|
|
32
|
+
last_evaluated: null
|
|
33
|
+
metadata:
|
|
34
|
+
created: '2025-11-09'
|
|
35
|
+
updated: '2025-11-09'
|
|
36
|
+
author: raxe-ce
|
|
37
|
+
legacy_rx_id: RX-RAG-3012
|
|
38
|
+
rule_hash: sha256:833423c521994c6d07c2db3966f125d70cd1097927953c5f74667e8c08e2d9e1
|
|
39
|
+
risk_explanation: Injection of malicious documents specifically crafted to be retrieved in response to targeted queries. These attacks combine content optimization with malicious payloads to achieve precise targeting.
|
|
40
|
+
remediation_advice: Implement content validation and security scanning for all documents. Use provenance tracking and source authentication. Deploy retrieval quality monitoring. Apply machine learning models to detect malicious content patterns.
|
|
41
|
+
docs_url: https://github.com/raxe-ai/raxe-ce/wiki/RAG-3012-'Insert-Malicious'-Attacks
|
raxe/plugins/__init__.py
ADDED
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
"""RAXE Plugin System.
|
|
2
|
+
|
|
3
|
+
Enables extensibility through custom detectors, actions, and transforms.
|
|
4
|
+
|
|
5
|
+
The plugin system allows users to extend RAXE with:
|
|
6
|
+
- Custom detection logic (DetectorPlugin)
|
|
7
|
+
- Custom actions (ActionPlugin) - webhooks, logging, alerts
|
|
8
|
+
- Text transformation (TransformPlugin)
|
|
9
|
+
- Custom YAML-based rules (CustomRule)
|
|
10
|
+
|
|
11
|
+
Quick Start:
|
|
12
|
+
Creating a detector plugin:
|
|
13
|
+
|
|
14
|
+
```python
|
|
15
|
+
# ~/.raxe/plugins/my_detector/plugin.py
|
|
16
|
+
from raxe.plugins import DetectorPlugin, PluginMetadata, PluginPriority
|
|
17
|
+
from raxe.domain.models import Detection, Severity
|
|
18
|
+
|
|
19
|
+
class MyDetector(DetectorPlugin):
|
|
20
|
+
@property
|
|
21
|
+
def metadata(self):
|
|
22
|
+
return PluginMetadata(
|
|
23
|
+
name="my_detector",
|
|
24
|
+
version="0.0.1",
|
|
25
|
+
author="Me",
|
|
26
|
+
description="My custom detector",
|
|
27
|
+
priority=PluginPriority.NORMAL,
|
|
28
|
+
requires=["raxe>=1.0.0"],
|
|
29
|
+
tags=["detector"]
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
def on_init(self, config):
|
|
33
|
+
self.enabled = config.get("enabled", True)
|
|
34
|
+
|
|
35
|
+
def detect(self, text, context=None):
|
|
36
|
+
if "bad_pattern" in text:
|
|
37
|
+
return [Detection(
|
|
38
|
+
rule_id="my_001",
|
|
39
|
+
severity=Severity.HIGH,
|
|
40
|
+
confidence=0.9,
|
|
41
|
+
message="Bad pattern detected"
|
|
42
|
+
)]
|
|
43
|
+
return []
|
|
44
|
+
|
|
45
|
+
plugin = MyDetector() # Required!
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
Enable in config (~/.raxe/config.yaml):
|
|
49
|
+
|
|
50
|
+
```yaml
|
|
51
|
+
plugins:
|
|
52
|
+
enabled:
|
|
53
|
+
- my_detector
|
|
54
|
+
my_detector:
|
|
55
|
+
enabled: true
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
Architecture:
|
|
59
|
+
- Protocol-based design (typing.Protocol)
|
|
60
|
+
- Clean separation from domain layer
|
|
61
|
+
- Fail-safe error handling
|
|
62
|
+
- Performance tracking
|
|
63
|
+
- Timeout enforcement
|
|
64
|
+
|
|
65
|
+
For more information, see docs/plugins/README.md
|
|
66
|
+
"""
|
|
67
|
+
|
|
68
|
+
from raxe.plugins.custom_rules import CustomRule, CustomRuleLoader
|
|
69
|
+
from raxe.plugins.loader import PluginInfo, PluginLoader
|
|
70
|
+
from raxe.plugins.manager import PluginManager, PluginMetrics
|
|
71
|
+
from raxe.plugins.protocol import (
|
|
72
|
+
ActionPlugin,
|
|
73
|
+
DetectorPlugin,
|
|
74
|
+
PluginMetadata,
|
|
75
|
+
PluginPriority,
|
|
76
|
+
RaxePlugin,
|
|
77
|
+
TransformPlugin,
|
|
78
|
+
)
|
|
79
|
+
|
|
80
|
+
__all__ = [
|
|
81
|
+
"ActionPlugin",
|
|
82
|
+
# Custom rules
|
|
83
|
+
"CustomRule",
|
|
84
|
+
"CustomRuleLoader",
|
|
85
|
+
"DetectorPlugin",
|
|
86
|
+
"PluginInfo",
|
|
87
|
+
# Loading
|
|
88
|
+
"PluginLoader",
|
|
89
|
+
# Management
|
|
90
|
+
"PluginManager",
|
|
91
|
+
# Metadata
|
|
92
|
+
"PluginMetadata",
|
|
93
|
+
"PluginMetrics",
|
|
94
|
+
"PluginPriority",
|
|
95
|
+
# Core protocols
|
|
96
|
+
"RaxePlugin",
|
|
97
|
+
"TransformPlugin",
|
|
98
|
+
]
|
|
@@ -0,0 +1,380 @@
|
|
|
1
|
+
"""Custom Rule Framework.
|
|
2
|
+
|
|
3
|
+
Allows users to define custom detection rules in YAML format.
|
|
4
|
+
Rules are loaded from ~/.raxe/rules/ and executed alongside
|
|
5
|
+
core detection rules.
|
|
6
|
+
|
|
7
|
+
Example rule file (~/.raxe/rules/my_rule.yaml):
|
|
8
|
+
```yaml
|
|
9
|
+
id: "CUSTOM_001"
|
|
10
|
+
name: "API Key Detection"
|
|
11
|
+
description: "Detects hardcoded API keys"
|
|
12
|
+
version: "0.0.1"
|
|
13
|
+
author: "security-team"
|
|
14
|
+
|
|
15
|
+
pattern:
|
|
16
|
+
type: "regex"
|
|
17
|
+
value: "(api[_-]?key)\\s*[:=]\\s*['\"][a-zA-Z0-9]{32,}['\"]"
|
|
18
|
+
flags: ["IGNORECASE"]
|
|
19
|
+
|
|
20
|
+
severity: "HIGH"
|
|
21
|
+
confidence: 0.9
|
|
22
|
+
category: "SECURITY"
|
|
23
|
+
|
|
24
|
+
tags:
|
|
25
|
+
- "api-key"
|
|
26
|
+
- "credentials"
|
|
27
|
+
|
|
28
|
+
metadata:
|
|
29
|
+
cwe_id: "CWE-798"
|
|
30
|
+
|
|
31
|
+
conditions:
|
|
32
|
+
min_length: 20
|
|
33
|
+
max_length: 100000
|
|
34
|
+
|
|
35
|
+
actions:
|
|
36
|
+
block: true
|
|
37
|
+
alert: true
|
|
38
|
+
log: true
|
|
39
|
+
```
|
|
40
|
+
"""
|
|
41
|
+
|
|
42
|
+
import logging
|
|
43
|
+
import re
|
|
44
|
+
from dataclasses import dataclass
|
|
45
|
+
from datetime import datetime, timezone
|
|
46
|
+
from pathlib import Path
|
|
47
|
+
from typing import Any
|
|
48
|
+
|
|
49
|
+
from raxe.domain.engine.executor import Detection
|
|
50
|
+
from raxe.domain.engine.matcher import Match
|
|
51
|
+
from raxe.domain.rules.models import Severity
|
|
52
|
+
|
|
53
|
+
logger = logging.getLogger(__name__)
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
@dataclass(frozen=True)
|
|
57
|
+
class CustomRule:
|
|
58
|
+
"""User-defined custom detection rule.
|
|
59
|
+
|
|
60
|
+
Represents a custom rule loaded from YAML configuration.
|
|
61
|
+
Rules can use regex patterns and include metadata for
|
|
62
|
+
categorization and policy enforcement.
|
|
63
|
+
|
|
64
|
+
Attributes:
|
|
65
|
+
id: Unique rule identifier (e.g., "CUSTOM_001")
|
|
66
|
+
name: Human-readable rule name
|
|
67
|
+
description: What the rule detects
|
|
68
|
+
pattern: Compiled regex pattern
|
|
69
|
+
severity: Threat severity level
|
|
70
|
+
confidence: Detection confidence (0.0-1.0)
|
|
71
|
+
category: Rule category (SECURITY, PII, etc.)
|
|
72
|
+
tags: List of tags for categorization
|
|
73
|
+
metadata: Additional metadata (CWE ID, etc.)
|
|
74
|
+
conditions: Conditions for rule application
|
|
75
|
+
actions: Actions to take when rule matches
|
|
76
|
+
"""
|
|
77
|
+
|
|
78
|
+
id: str
|
|
79
|
+
name: str
|
|
80
|
+
description: str
|
|
81
|
+
pattern: re.Pattern[str]
|
|
82
|
+
severity: Severity
|
|
83
|
+
confidence: float
|
|
84
|
+
category: str
|
|
85
|
+
tags: tuple[str, ...]
|
|
86
|
+
metadata: dict[str, Any]
|
|
87
|
+
conditions: dict[str, Any]
|
|
88
|
+
actions: dict[str, bool]
|
|
89
|
+
|
|
90
|
+
def __post_init__(self) -> None:
|
|
91
|
+
"""Validate rule after construction."""
|
|
92
|
+
if not self.id:
|
|
93
|
+
raise ValueError("Rule ID cannot be empty")
|
|
94
|
+
if not (0.0 <= self.confidence <= 1.0):
|
|
95
|
+
raise ValueError(
|
|
96
|
+
f"Confidence must be 0.0-1.0, got {self.confidence}"
|
|
97
|
+
)
|
|
98
|
+
|
|
99
|
+
@classmethod
|
|
100
|
+
def from_dict(cls, data: dict[str, Any]) -> "CustomRule":
|
|
101
|
+
"""Create custom rule from dictionary.
|
|
102
|
+
|
|
103
|
+
Args:
|
|
104
|
+
data: Rule data from YAML
|
|
105
|
+
|
|
106
|
+
Returns:
|
|
107
|
+
CustomRule instance
|
|
108
|
+
|
|
109
|
+
Raises:
|
|
110
|
+
ValueError: If data is invalid
|
|
111
|
+
"""
|
|
112
|
+
# Compile pattern
|
|
113
|
+
pattern_config = data.get("pattern", {})
|
|
114
|
+
if not pattern_config:
|
|
115
|
+
raise ValueError("Rule must have 'pattern' field")
|
|
116
|
+
|
|
117
|
+
pattern_type = pattern_config.get("type", "regex")
|
|
118
|
+
if pattern_type != "regex":
|
|
119
|
+
raise ValueError(f"Unsupported pattern type: {pattern_type}")
|
|
120
|
+
|
|
121
|
+
pattern_value = pattern_config.get("value")
|
|
122
|
+
if not pattern_value:
|
|
123
|
+
raise ValueError("Pattern must have 'value' field")
|
|
124
|
+
|
|
125
|
+
# Compile regex with flags
|
|
126
|
+
flags = 0
|
|
127
|
+
for flag_name in pattern_config.get("flags", []):
|
|
128
|
+
if hasattr(re, flag_name):
|
|
129
|
+
flags |= getattr(re, flag_name)
|
|
130
|
+
else:
|
|
131
|
+
logger.warning(f"Unknown regex flag: {flag_name}")
|
|
132
|
+
|
|
133
|
+
try:
|
|
134
|
+
pattern = re.compile(pattern_value, flags)
|
|
135
|
+
except re.error as e:
|
|
136
|
+
raise ValueError(f"Invalid regex pattern: {e}") from e
|
|
137
|
+
|
|
138
|
+
# Parse severity
|
|
139
|
+
severity_str = data.get("severity", "MEDIUM")
|
|
140
|
+
try:
|
|
141
|
+
severity = Severity[severity_str.upper()]
|
|
142
|
+
except KeyError:
|
|
143
|
+
raise ValueError(
|
|
144
|
+
f"Invalid severity: {severity_str}. "
|
|
145
|
+
f"Must be one of: {[s.name for s in Severity]}"
|
|
146
|
+
) from None
|
|
147
|
+
|
|
148
|
+
# Create rule
|
|
149
|
+
return cls(
|
|
150
|
+
id=data["id"],
|
|
151
|
+
name=data["name"],
|
|
152
|
+
description=data["description"],
|
|
153
|
+
pattern=pattern,
|
|
154
|
+
severity=severity,
|
|
155
|
+
confidence=data.get("confidence", 0.8),
|
|
156
|
+
category=data.get("category", "CUSTOM"),
|
|
157
|
+
tags=tuple(data.get("tags", [])),
|
|
158
|
+
metadata=data.get("metadata", {}),
|
|
159
|
+
conditions=data.get("conditions", {}),
|
|
160
|
+
actions=data.get("actions", {}),
|
|
161
|
+
)
|
|
162
|
+
|
|
163
|
+
def should_apply(self, text: str) -> bool:
|
|
164
|
+
"""Check if rule should be applied to text.
|
|
165
|
+
|
|
166
|
+
Evaluates conditions like min/max length.
|
|
167
|
+
|
|
168
|
+
Args:
|
|
169
|
+
text: Text to check
|
|
170
|
+
|
|
171
|
+
Returns:
|
|
172
|
+
True if rule should be applied
|
|
173
|
+
"""
|
|
174
|
+
text_len = len(text)
|
|
175
|
+
|
|
176
|
+
# Check minimum length
|
|
177
|
+
min_len = self.conditions.get("min_length", 0)
|
|
178
|
+
if text_len < min_len:
|
|
179
|
+
return False
|
|
180
|
+
|
|
181
|
+
# Check maximum length
|
|
182
|
+
max_len = self.conditions.get("max_length", float("inf"))
|
|
183
|
+
if text_len > max_len:
|
|
184
|
+
return False
|
|
185
|
+
|
|
186
|
+
return True
|
|
187
|
+
|
|
188
|
+
def match(self, text: str) -> bool:
|
|
189
|
+
"""Check if pattern matches text.
|
|
190
|
+
|
|
191
|
+
Args:
|
|
192
|
+
text: Text to match against
|
|
193
|
+
|
|
194
|
+
Returns:
|
|
195
|
+
True if pattern matches
|
|
196
|
+
"""
|
|
197
|
+
return self.pattern.search(text) is not None
|
|
198
|
+
|
|
199
|
+
|
|
200
|
+
class CustomRuleLoader:
|
|
201
|
+
"""Loads and manages custom user-defined rules.
|
|
202
|
+
|
|
203
|
+
Scans ~/.raxe/rules/ for YAML rule definitions and loads them
|
|
204
|
+
for use in detection. Rules are compiled once and cached for
|
|
205
|
+
performance.
|
|
206
|
+
|
|
207
|
+
Example:
|
|
208
|
+
```python
|
|
209
|
+
loader = CustomRuleLoader()
|
|
210
|
+
loader.load_rules()
|
|
211
|
+
|
|
212
|
+
# Use in detection
|
|
213
|
+
detections = loader.detect("api_key=secret123...")
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
Attributes:
|
|
217
|
+
rules_dir: Directory containing rule YAML files
|
|
218
|
+
rules: List of loaded custom rules
|
|
219
|
+
"""
|
|
220
|
+
|
|
221
|
+
def __init__(self, rules_dir: Path | None = None):
|
|
222
|
+
"""Initialize custom rule loader.
|
|
223
|
+
|
|
224
|
+
Args:
|
|
225
|
+
rules_dir: Directory containing rule files
|
|
226
|
+
(default: ~/.raxe/rules/)
|
|
227
|
+
"""
|
|
228
|
+
self.rules_dir = rules_dir or (Path.home() / ".raxe" / "rules")
|
|
229
|
+
self.rules: list[CustomRule] = []
|
|
230
|
+
logger.debug(f"CustomRuleLoader initialized (dir={self.rules_dir})")
|
|
231
|
+
|
|
232
|
+
def load_rules(self) -> None:
|
|
233
|
+
"""Load all custom rules from directory.
|
|
234
|
+
|
|
235
|
+
Scans for *.yaml files in rules_dir and loads them.
|
|
236
|
+
Invalid rules are logged but don't prevent loading others.
|
|
237
|
+
"""
|
|
238
|
+
if not self.rules_dir.exists():
|
|
239
|
+
logger.info(
|
|
240
|
+
f"Custom rules directory does not exist: {self.rules_dir}. "
|
|
241
|
+
f"Create it to add custom rules."
|
|
242
|
+
)
|
|
243
|
+
return
|
|
244
|
+
|
|
245
|
+
logger.info(f"Loading custom rules from {self.rules_dir}")
|
|
246
|
+
loaded_count = 0
|
|
247
|
+
error_count = 0
|
|
248
|
+
|
|
249
|
+
for rule_file in self.rules_dir.glob("*.yaml"):
|
|
250
|
+
try:
|
|
251
|
+
rule = self._load_rule_file(rule_file)
|
|
252
|
+
self.rules.append(rule)
|
|
253
|
+
loaded_count += 1
|
|
254
|
+
logger.debug(f"Loaded custom rule: {rule.id} ({rule.name})")
|
|
255
|
+
except Exception as e:
|
|
256
|
+
error_count += 1
|
|
257
|
+
logger.warning(f"Failed to load rule {rule_file}: {e}")
|
|
258
|
+
|
|
259
|
+
logger.info(
|
|
260
|
+
f"Loaded {loaded_count} custom rules "
|
|
261
|
+
f"({error_count} failed)"
|
|
262
|
+
)
|
|
263
|
+
|
|
264
|
+
def _load_rule_file(self, path: Path) -> CustomRule:
|
|
265
|
+
"""Load a single rule file.
|
|
266
|
+
|
|
267
|
+
Args:
|
|
268
|
+
path: Path to YAML rule file
|
|
269
|
+
|
|
270
|
+
Returns:
|
|
271
|
+
Loaded CustomRule
|
|
272
|
+
|
|
273
|
+
Raises:
|
|
274
|
+
ValueError: If rule file is invalid
|
|
275
|
+
"""
|
|
276
|
+
try:
|
|
277
|
+
import yaml
|
|
278
|
+
except ImportError:
|
|
279
|
+
raise ImportError(
|
|
280
|
+
"PyYAML is required for custom rules. "
|
|
281
|
+
"Install with: pip install pyyaml"
|
|
282
|
+
) from None
|
|
283
|
+
|
|
284
|
+
# Load YAML
|
|
285
|
+
with open(path) as f:
|
|
286
|
+
data = yaml.safe_load(f)
|
|
287
|
+
|
|
288
|
+
if not data:
|
|
289
|
+
raise ValueError("Empty rule file")
|
|
290
|
+
|
|
291
|
+
# Create rule from data
|
|
292
|
+
return CustomRule.from_dict(data)
|
|
293
|
+
|
|
294
|
+
def detect(self, text: str) -> list[Detection]:
|
|
295
|
+
"""Apply custom rules to text.
|
|
296
|
+
|
|
297
|
+
Runs all loaded rules against the text and returns
|
|
298
|
+
detections for any matches.
|
|
299
|
+
|
|
300
|
+
Args:
|
|
301
|
+
text: Text to scan
|
|
302
|
+
|
|
303
|
+
Returns:
|
|
304
|
+
List of detections
|
|
305
|
+
|
|
306
|
+
Note:
|
|
307
|
+
Rules are only applied if their conditions are met
|
|
308
|
+
(e.g., min/max length).
|
|
309
|
+
"""
|
|
310
|
+
detections: list[Detection] = []
|
|
311
|
+
|
|
312
|
+
for rule in self.rules:
|
|
313
|
+
# Check if rule should apply
|
|
314
|
+
if not rule.should_apply(text):
|
|
315
|
+
continue
|
|
316
|
+
|
|
317
|
+
# Check if pattern matches
|
|
318
|
+
if rule.match(text):
|
|
319
|
+
# Create a simple Match object for the detection
|
|
320
|
+
match = Match(
|
|
321
|
+
pattern="custom_rule",
|
|
322
|
+
text=text[:100], # Include first 100 chars as context
|
|
323
|
+
start=0,
|
|
324
|
+
end=min(100, len(text))
|
|
325
|
+
)
|
|
326
|
+
|
|
327
|
+
detection = Detection(
|
|
328
|
+
rule_id=rule.id,
|
|
329
|
+
rule_version="0.0.1", # Default version for custom rules
|
|
330
|
+
severity=rule.severity,
|
|
331
|
+
confidence=rule.confidence,
|
|
332
|
+
matches=[match],
|
|
333
|
+
detected_at=datetime.now(timezone.utc).isoformat(),
|
|
334
|
+
detection_layer="PLUGIN",
|
|
335
|
+
category=rule.category,
|
|
336
|
+
message=f"{rule.name}: {rule.description}",
|
|
337
|
+
)
|
|
338
|
+
detections.append(detection)
|
|
339
|
+
|
|
340
|
+
logger.debug(
|
|
341
|
+
f"Custom rule matched: {rule.id} "
|
|
342
|
+
f"(severity={rule.severity.name})"
|
|
343
|
+
)
|
|
344
|
+
|
|
345
|
+
return detections
|
|
346
|
+
|
|
347
|
+
def get_rule(self, rule_id: str) -> CustomRule | None:
|
|
348
|
+
"""Get a rule by ID.
|
|
349
|
+
|
|
350
|
+
Args:
|
|
351
|
+
rule_id: Rule identifier
|
|
352
|
+
|
|
353
|
+
Returns:
|
|
354
|
+
CustomRule or None if not found
|
|
355
|
+
"""
|
|
356
|
+
for rule in self.rules:
|
|
357
|
+
if rule.id == rule_id:
|
|
358
|
+
return rule
|
|
359
|
+
return None
|
|
360
|
+
|
|
361
|
+
def list_rules(self) -> list[CustomRule]:
|
|
362
|
+
"""Get all loaded rules.
|
|
363
|
+
|
|
364
|
+
Returns:
|
|
365
|
+
List of custom rules
|
|
366
|
+
"""
|
|
367
|
+
return self.rules.copy()
|
|
368
|
+
|
|
369
|
+
def reload(self) -> None:
|
|
370
|
+
"""Reload all rules from disk.
|
|
371
|
+
|
|
372
|
+
Clears existing rules and loads fresh from directory.
|
|
373
|
+
Useful for hot-reloading configuration changes.
|
|
374
|
+
"""
|
|
375
|
+
self.rules = []
|
|
376
|
+
self.load_rules()
|
|
377
|
+
logger.info(f"Reloaded {len(self.rules)} custom rules")
|
|
378
|
+
|
|
379
|
+
|
|
380
|
+
__all__ = ["CustomRule", "CustomRuleLoader"]
|