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,665 @@
|
|
|
1
|
+
"""
|
|
2
|
+
CLI error handler decorator for consistent, user-friendly error handling.
|
|
3
|
+
|
|
4
|
+
Provides a decorator that wraps CLI commands to catch exceptions and display
|
|
5
|
+
helpful error messages with codes and remediation hints.
|
|
6
|
+
|
|
7
|
+
Example output:
|
|
8
|
+
ERROR [CFG-001]
|
|
9
|
+
Configuration file not found
|
|
10
|
+
|
|
11
|
+
Details: ~/.raxe/config.yaml does not exist
|
|
12
|
+
|
|
13
|
+
Suggested Fix:
|
|
14
|
+
Run: raxe init
|
|
15
|
+
|
|
16
|
+
Learn More: https://docs.raxe.ai/errors/CFG-001
|
|
17
|
+
"""
|
|
18
|
+
|
|
19
|
+
import functools
|
|
20
|
+
import sys
|
|
21
|
+
from collections.abc import Callable
|
|
22
|
+
from dataclasses import dataclass
|
|
23
|
+
from typing import Any, TypeVar
|
|
24
|
+
|
|
25
|
+
import click
|
|
26
|
+
|
|
27
|
+
from raxe.cli.exit_codes import (
|
|
28
|
+
EXIT_AUTH_ERROR,
|
|
29
|
+
EXIT_CONFIG_ERROR,
|
|
30
|
+
EXIT_INVALID_INPUT,
|
|
31
|
+
EXIT_SCAN_ERROR,
|
|
32
|
+
EXIT_SUCCESS,
|
|
33
|
+
EXIT_THREAT_DETECTED,
|
|
34
|
+
)
|
|
35
|
+
from raxe.cli.output import console
|
|
36
|
+
from raxe.infrastructure.telemetry.credential_store import CredentialExpiredError
|
|
37
|
+
from raxe.sdk.exceptions import (
|
|
38
|
+
ConfigurationError,
|
|
39
|
+
DatabaseError,
|
|
40
|
+
ErrorCategory,
|
|
41
|
+
ErrorCode,
|
|
42
|
+
InfrastructureError,
|
|
43
|
+
RaxeBlockedError,
|
|
44
|
+
RaxeException,
|
|
45
|
+
RuleError,
|
|
46
|
+
SecurityException,
|
|
47
|
+
ValidationError,
|
|
48
|
+
credential_expired_error,
|
|
49
|
+
)
|
|
50
|
+
from raxe.utils.error_sanitizer import sanitize_error_message
|
|
51
|
+
|
|
52
|
+
F = TypeVar("F", bound=Callable[..., Any])
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
@dataclass(frozen=True)
|
|
56
|
+
class ErrorHelp:
|
|
57
|
+
"""Help text for a specific error type.
|
|
58
|
+
|
|
59
|
+
Attributes:
|
|
60
|
+
title: Short title for the error (displayed after error code)
|
|
61
|
+
suggested_fix: Command or action to fix the issue
|
|
62
|
+
learn_more_suffix: Suffix for the documentation URL
|
|
63
|
+
"""
|
|
64
|
+
|
|
65
|
+
title: str
|
|
66
|
+
suggested_fix: str
|
|
67
|
+
learn_more_suffix: str
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
# Mapping of ErrorCode to help text with actionable steps
|
|
71
|
+
ERROR_HELP_MAP: dict[ErrorCode, ErrorHelp] = {
|
|
72
|
+
# Configuration errors (CFG-001 to CFG-099)
|
|
73
|
+
ErrorCode.CFG_NOT_FOUND: ErrorHelp(
|
|
74
|
+
title="Configuration file not found",
|
|
75
|
+
suggested_fix="Run: raxe init",
|
|
76
|
+
learn_more_suffix="CFG-001",
|
|
77
|
+
),
|
|
78
|
+
ErrorCode.CFG_INVALID_FORMAT: ErrorHelp(
|
|
79
|
+
title="Invalid configuration format",
|
|
80
|
+
suggested_fix="Run: raxe config validate",
|
|
81
|
+
learn_more_suffix="CFG-002",
|
|
82
|
+
),
|
|
83
|
+
ErrorCode.CFG_MISSING_REQUIRED: ErrorHelp(
|
|
84
|
+
title="Missing required configuration",
|
|
85
|
+
suggested_fix="Run: raxe config show # to see current config",
|
|
86
|
+
learn_more_suffix="CFG-003",
|
|
87
|
+
),
|
|
88
|
+
ErrorCode.CFG_INVALID_VALUE: ErrorHelp(
|
|
89
|
+
title="Invalid configuration value",
|
|
90
|
+
suggested_fix="Check your ~/.raxe/config.yaml file",
|
|
91
|
+
learn_more_suffix="CFG-004",
|
|
92
|
+
),
|
|
93
|
+
ErrorCode.CFG_PERMISSION_DENIED: ErrorHelp(
|
|
94
|
+
title="Permission denied accessing configuration",
|
|
95
|
+
suggested_fix="Check file permissions on ~/.raxe/",
|
|
96
|
+
learn_more_suffix="CFG-005",
|
|
97
|
+
),
|
|
98
|
+
ErrorCode.CFG_INITIALIZATION_FAILED: ErrorHelp(
|
|
99
|
+
title="Configuration initialization failed",
|
|
100
|
+
suggested_fix="Run: raxe doctor # to diagnose issues",
|
|
101
|
+
learn_more_suffix="CFG-006",
|
|
102
|
+
),
|
|
103
|
+
# Rule errors (RULE-100 to RULE-199)
|
|
104
|
+
ErrorCode.RULE_NOT_FOUND: ErrorHelp(
|
|
105
|
+
title="Detection rule not found",
|
|
106
|
+
suggested_fix="Run: raxe rules list # to see available rules",
|
|
107
|
+
learn_more_suffix="RULE-100",
|
|
108
|
+
),
|
|
109
|
+
ErrorCode.RULE_INVALID_SYNTAX: ErrorHelp(
|
|
110
|
+
title="Invalid rule syntax",
|
|
111
|
+
suggested_fix="Run: raxe validate-rule <path> # to validate",
|
|
112
|
+
learn_more_suffix="RULE-101",
|
|
113
|
+
),
|
|
114
|
+
ErrorCode.RULE_INVALID_PATTERN: ErrorHelp(
|
|
115
|
+
title="Invalid regex pattern in rule",
|
|
116
|
+
suggested_fix="Test your regex at regex101.com",
|
|
117
|
+
learn_more_suffix="RULE-102",
|
|
118
|
+
),
|
|
119
|
+
ErrorCode.RULE_LOAD_FAILED: ErrorHelp(
|
|
120
|
+
title="Failed to load detection rules",
|
|
121
|
+
suggested_fix="Run: raxe doctor # to check rule loading",
|
|
122
|
+
learn_more_suffix="RULE-103",
|
|
123
|
+
),
|
|
124
|
+
ErrorCode.RULE_PACK_NOT_FOUND: ErrorHelp(
|
|
125
|
+
title="Rule pack not found",
|
|
126
|
+
suggested_fix="Run: raxe pack list # to see installed packs",
|
|
127
|
+
learn_more_suffix="RULE-104",
|
|
128
|
+
),
|
|
129
|
+
ErrorCode.RULE_PACK_INVALID: ErrorHelp(
|
|
130
|
+
title="Invalid rule pack format",
|
|
131
|
+
suggested_fix="Check pack structure and manifest.yaml",
|
|
132
|
+
learn_more_suffix="RULE-105",
|
|
133
|
+
),
|
|
134
|
+
ErrorCode.RULE_VERSION_MISMATCH: ErrorHelp(
|
|
135
|
+
title="Rule version mismatch",
|
|
136
|
+
suggested_fix="Update RAXE or rule pack to compatible version",
|
|
137
|
+
learn_more_suffix="RULE-106",
|
|
138
|
+
),
|
|
139
|
+
ErrorCode.RULE_DUPLICATE_ID: ErrorHelp(
|
|
140
|
+
title="Duplicate rule ID detected",
|
|
141
|
+
suggested_fix="Ensure all rule IDs are unique across packs",
|
|
142
|
+
learn_more_suffix="RULE-107",
|
|
143
|
+
),
|
|
144
|
+
# Security errors (SEC-200 to SEC-299)
|
|
145
|
+
ErrorCode.SEC_THREAT_DETECTED: ErrorHelp(
|
|
146
|
+
title="Security threat detected",
|
|
147
|
+
suggested_fix="Run: raxe scan <text> --explain # for details",
|
|
148
|
+
learn_more_suffix="SEC-200",
|
|
149
|
+
),
|
|
150
|
+
ErrorCode.SEC_BLOCKED_BY_POLICY: ErrorHelp(
|
|
151
|
+
title="Request blocked by security policy",
|
|
152
|
+
suggested_fix="Review policy or add suppression rule",
|
|
153
|
+
learn_more_suffix="SEC-201",
|
|
154
|
+
),
|
|
155
|
+
ErrorCode.SEC_CRITICAL_THREAT: ErrorHelp(
|
|
156
|
+
title="Critical security threat detected",
|
|
157
|
+
suggested_fix="Investigate immediately - potential attack",
|
|
158
|
+
learn_more_suffix="SEC-202",
|
|
159
|
+
),
|
|
160
|
+
ErrorCode.SEC_SIGNATURE_INVALID: ErrorHelp(
|
|
161
|
+
title="Invalid rule pack signature",
|
|
162
|
+
suggested_fix="Verify rule pack integrity and source",
|
|
163
|
+
learn_more_suffix="SEC-203",
|
|
164
|
+
),
|
|
165
|
+
ErrorCode.SEC_AUTH_FAILED: ErrorHelp(
|
|
166
|
+
title="Authentication failed",
|
|
167
|
+
suggested_fix="Get a permanent key at the console or run: raxe auth login",
|
|
168
|
+
learn_more_suffix="SEC-204",
|
|
169
|
+
),
|
|
170
|
+
ErrorCode.SEC_CREDENTIAL_EXPIRED: ErrorHelp(
|
|
171
|
+
title="API key has expired",
|
|
172
|
+
suggested_fix="Get a permanent key at the console or run: raxe auth login",
|
|
173
|
+
learn_more_suffix="SEC-206",
|
|
174
|
+
),
|
|
175
|
+
ErrorCode.SEC_PERMISSION_DENIED: ErrorHelp(
|
|
176
|
+
title="Permission denied",
|
|
177
|
+
suggested_fix="Contact administrator for access",
|
|
178
|
+
learn_more_suffix="SEC-205",
|
|
179
|
+
),
|
|
180
|
+
# Database errors (DB-300 to DB-399)
|
|
181
|
+
ErrorCode.DB_CONNECTION_FAILED: ErrorHelp(
|
|
182
|
+
title="Database connection failed",
|
|
183
|
+
suggested_fix="Run: raxe doctor # to diagnose database issues",
|
|
184
|
+
learn_more_suffix="DB-300",
|
|
185
|
+
),
|
|
186
|
+
ErrorCode.DB_QUERY_FAILED: ErrorHelp(
|
|
187
|
+
title="Database query failed",
|
|
188
|
+
suggested_fix="Run: raxe doctor # to check database health",
|
|
189
|
+
learn_more_suffix="DB-301",
|
|
190
|
+
),
|
|
191
|
+
ErrorCode.DB_MIGRATION_FAILED: ErrorHelp(
|
|
192
|
+
title="Database migration failed",
|
|
193
|
+
suggested_fix="Backup data and run: raxe init --force",
|
|
194
|
+
learn_more_suffix="DB-302",
|
|
195
|
+
),
|
|
196
|
+
ErrorCode.DB_INTEGRITY_ERROR: ErrorHelp(
|
|
197
|
+
title="Database integrity error",
|
|
198
|
+
suggested_fix="Database may be corrupted - restore from backup",
|
|
199
|
+
learn_more_suffix="DB-303",
|
|
200
|
+
),
|
|
201
|
+
ErrorCode.DB_NOT_INITIALIZED: ErrorHelp(
|
|
202
|
+
title="Database not initialized",
|
|
203
|
+
suggested_fix="Run: raxe init",
|
|
204
|
+
learn_more_suffix="DB-304",
|
|
205
|
+
),
|
|
206
|
+
ErrorCode.DB_LOCK_TIMEOUT: ErrorHelp(
|
|
207
|
+
title="Database lock timeout",
|
|
208
|
+
suggested_fix="Close other RAXE instances and retry",
|
|
209
|
+
learn_more_suffix="DB-305",
|
|
210
|
+
),
|
|
211
|
+
# Validation errors (VAL-400 to VAL-499)
|
|
212
|
+
ErrorCode.VAL_EMPTY_INPUT: ErrorHelp(
|
|
213
|
+
title="Empty input provided",
|
|
214
|
+
suggested_fix="Provide non-empty text to scan",
|
|
215
|
+
learn_more_suffix="VAL-400",
|
|
216
|
+
),
|
|
217
|
+
ErrorCode.VAL_INPUT_TOO_LONG: ErrorHelp(
|
|
218
|
+
title="Input exceeds maximum length",
|
|
219
|
+
suggested_fix="Split input into smaller chunks",
|
|
220
|
+
learn_more_suffix="VAL-401",
|
|
221
|
+
),
|
|
222
|
+
ErrorCode.VAL_INVALID_FORMAT: ErrorHelp(
|
|
223
|
+
title="Invalid input format",
|
|
224
|
+
suggested_fix="Check input format requirements",
|
|
225
|
+
learn_more_suffix="VAL-402",
|
|
226
|
+
),
|
|
227
|
+
ErrorCode.VAL_MISSING_FIELD: ErrorHelp(
|
|
228
|
+
title="Required field missing",
|
|
229
|
+
suggested_fix="Provide all required fields",
|
|
230
|
+
learn_more_suffix="VAL-403",
|
|
231
|
+
),
|
|
232
|
+
ErrorCode.VAL_TYPE_MISMATCH: ErrorHelp(
|
|
233
|
+
title="Type mismatch",
|
|
234
|
+
suggested_fix="Check data types match expected format",
|
|
235
|
+
learn_more_suffix="VAL-404",
|
|
236
|
+
),
|
|
237
|
+
ErrorCode.VAL_OUT_OF_RANGE: ErrorHelp(
|
|
238
|
+
title="Value out of allowed range",
|
|
239
|
+
suggested_fix="Use value within allowed range",
|
|
240
|
+
learn_more_suffix="VAL-405",
|
|
241
|
+
),
|
|
242
|
+
ErrorCode.VAL_INVALID_REGEX: ErrorHelp(
|
|
243
|
+
title="Invalid regular expression",
|
|
244
|
+
suggested_fix="Fix regex syntax - test at regex101.com",
|
|
245
|
+
learn_more_suffix="VAL-406",
|
|
246
|
+
),
|
|
247
|
+
ErrorCode.VAL_POLICY_INVALID: ErrorHelp(
|
|
248
|
+
title="Invalid policy configuration",
|
|
249
|
+
suggested_fix="Check policy file format and syntax",
|
|
250
|
+
learn_more_suffix="VAL-407",
|
|
251
|
+
),
|
|
252
|
+
# Infrastructure errors (INFRA-500 to INFRA-599)
|
|
253
|
+
ErrorCode.INFRA_NETWORK_ERROR: ErrorHelp(
|
|
254
|
+
title="Network error",
|
|
255
|
+
suggested_fix="Check network connectivity",
|
|
256
|
+
learn_more_suffix="INFRA-500",
|
|
257
|
+
),
|
|
258
|
+
ErrorCode.INFRA_TIMEOUT: ErrorHelp(
|
|
259
|
+
title="Operation timed out",
|
|
260
|
+
suggested_fix="Retry or increase timeout setting",
|
|
261
|
+
learn_more_suffix="INFRA-501",
|
|
262
|
+
),
|
|
263
|
+
ErrorCode.INFRA_SERVICE_UNAVAILABLE: ErrorHelp(
|
|
264
|
+
title="Service unavailable",
|
|
265
|
+
suggested_fix="Service may be down - retry later",
|
|
266
|
+
learn_more_suffix="INFRA-502",
|
|
267
|
+
),
|
|
268
|
+
ErrorCode.INFRA_RATE_LIMITED: ErrorHelp(
|
|
269
|
+
title="Rate limit exceeded",
|
|
270
|
+
suggested_fix="Wait and retry with backoff.\n Get a permanent key for higher limits via: raxe auth login",
|
|
271
|
+
learn_more_suffix="INFRA-503",
|
|
272
|
+
),
|
|
273
|
+
ErrorCode.INFRA_DISK_FULL: ErrorHelp(
|
|
274
|
+
title="Disk space exhausted",
|
|
275
|
+
suggested_fix="Free up disk space",
|
|
276
|
+
learn_more_suffix="INFRA-504",
|
|
277
|
+
),
|
|
278
|
+
ErrorCode.INFRA_MODEL_LOAD_FAILED: ErrorHelp(
|
|
279
|
+
title="Failed to load ML model",
|
|
280
|
+
suggested_fix="Run: pip install raxe[ml] # to install ML dependencies",
|
|
281
|
+
learn_more_suffix="INFRA-505",
|
|
282
|
+
),
|
|
283
|
+
ErrorCode.INFRA_CIRCUIT_BREAKER_OPEN: ErrorHelp(
|
|
284
|
+
title="Circuit breaker is open",
|
|
285
|
+
suggested_fix="Service recovering - retry in a few minutes",
|
|
286
|
+
learn_more_suffix="INFRA-506",
|
|
287
|
+
),
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
|
|
291
|
+
# Mapping of exception types to exit codes
|
|
292
|
+
EXCEPTION_EXIT_CODES: dict[type[Exception], int] = {
|
|
293
|
+
ConfigurationError: EXIT_CONFIG_ERROR,
|
|
294
|
+
ValidationError: EXIT_INVALID_INPUT,
|
|
295
|
+
RuleError: EXIT_CONFIG_ERROR,
|
|
296
|
+
DatabaseError: EXIT_SCAN_ERROR,
|
|
297
|
+
InfrastructureError: EXIT_SCAN_ERROR,
|
|
298
|
+
SecurityException: EXIT_THREAT_DETECTED,
|
|
299
|
+
RaxeBlockedError: EXIT_THREAT_DETECTED,
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
|
|
303
|
+
# Mapping of error categories to exit codes (fallback)
|
|
304
|
+
CATEGORY_EXIT_CODES: dict[ErrorCategory, int] = {
|
|
305
|
+
ErrorCategory.CFG: EXIT_CONFIG_ERROR,
|
|
306
|
+
ErrorCategory.VAL: EXIT_INVALID_INPUT,
|
|
307
|
+
ErrorCategory.RULE: EXIT_CONFIG_ERROR,
|
|
308
|
+
ErrorCategory.DB: EXIT_SCAN_ERROR,
|
|
309
|
+
ErrorCategory.INFRA: EXIT_SCAN_ERROR,
|
|
310
|
+
ErrorCategory.SEC: EXIT_THREAT_DETECTED,
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
|
|
314
|
+
# Base URL for error documentation
|
|
315
|
+
DOCS_BASE_URL = "https://docs.raxe.ai/errors"
|
|
316
|
+
|
|
317
|
+
|
|
318
|
+
def _get_exit_code(exc: Exception) -> int:
|
|
319
|
+
"""Determine the appropriate exit code for an exception.
|
|
320
|
+
|
|
321
|
+
Args:
|
|
322
|
+
exc: The exception to get exit code for
|
|
323
|
+
|
|
324
|
+
Returns:
|
|
325
|
+
Appropriate exit code for the exception type
|
|
326
|
+
"""
|
|
327
|
+
# First try exact type match
|
|
328
|
+
for exc_type, exit_code in EXCEPTION_EXIT_CODES.items():
|
|
329
|
+
if type(exc) is exc_type:
|
|
330
|
+
return exit_code
|
|
331
|
+
|
|
332
|
+
# Then try isinstance for inheritance
|
|
333
|
+
for exc_type, exit_code in EXCEPTION_EXIT_CODES.items():
|
|
334
|
+
if isinstance(exc, exc_type):
|
|
335
|
+
return exit_code
|
|
336
|
+
|
|
337
|
+
# If it's a RaxeException with an error code, use category
|
|
338
|
+
if isinstance(exc, RaxeException) and exc.code is not None:
|
|
339
|
+
category = exc.code.category
|
|
340
|
+
if category in CATEGORY_EXIT_CODES:
|
|
341
|
+
return CATEGORY_EXIT_CODES[category]
|
|
342
|
+
|
|
343
|
+
# Default to scan error
|
|
344
|
+
return EXIT_SCAN_ERROR
|
|
345
|
+
|
|
346
|
+
|
|
347
|
+
def _format_error_display(
|
|
348
|
+
error_code: str | None,
|
|
349
|
+
title: str,
|
|
350
|
+
details: str | None,
|
|
351
|
+
suggested_fix: str | None,
|
|
352
|
+
learn_more_url: str | None,
|
|
353
|
+
) -> None:
|
|
354
|
+
"""Format and display error with rich formatting.
|
|
355
|
+
|
|
356
|
+
Args:
|
|
357
|
+
error_code: Error code string (e.g., "CFG-001")
|
|
358
|
+
title: Error title/message
|
|
359
|
+
details: Optional error details
|
|
360
|
+
suggested_fix: Optional suggested fix command
|
|
361
|
+
learn_more_url: Optional documentation URL
|
|
362
|
+
"""
|
|
363
|
+
from rich.panel import Panel
|
|
364
|
+
from rich.text import Text
|
|
365
|
+
|
|
366
|
+
# Build error header
|
|
367
|
+
error_text = Text()
|
|
368
|
+
error_text.append("ERROR", style="red bold")
|
|
369
|
+
if error_code:
|
|
370
|
+
error_text.append(f" [{error_code}]", style="red")
|
|
371
|
+
|
|
372
|
+
console.print(Panel(error_text, border_style="red", width=80, padding=(0, 1)))
|
|
373
|
+
console.print()
|
|
374
|
+
|
|
375
|
+
# Title/message
|
|
376
|
+
console.print(f"[white]{title}[/white]")
|
|
377
|
+
|
|
378
|
+
# Details (if provided)
|
|
379
|
+
if details:
|
|
380
|
+
console.print()
|
|
381
|
+
console.print("[dim]Details:[/dim]")
|
|
382
|
+
console.print(f"[dim] {details}[/dim]")
|
|
383
|
+
|
|
384
|
+
# Suggested fix (if provided)
|
|
385
|
+
if suggested_fix:
|
|
386
|
+
console.print()
|
|
387
|
+
console.print("[yellow bold]Suggested Fix:[/yellow bold]")
|
|
388
|
+
console.print(f"[cyan] {suggested_fix}[/cyan]")
|
|
389
|
+
|
|
390
|
+
# Learn more URL (if provided)
|
|
391
|
+
if learn_more_url:
|
|
392
|
+
console.print()
|
|
393
|
+
console.print(f"[blue]Learn More:[/blue] [blue underline]{learn_more_url}[/blue underline]")
|
|
394
|
+
|
|
395
|
+
console.print()
|
|
396
|
+
|
|
397
|
+
|
|
398
|
+
def _handle_raxe_exception(exc: RaxeException) -> int:
|
|
399
|
+
"""Handle a RaxeException with proper error display.
|
|
400
|
+
|
|
401
|
+
Args:
|
|
402
|
+
exc: The RaxeException to handle
|
|
403
|
+
|
|
404
|
+
Returns:
|
|
405
|
+
Exit code to use
|
|
406
|
+
"""
|
|
407
|
+
# Get error code and details
|
|
408
|
+
error_code = exc.code.value if exc.code else None
|
|
409
|
+
error_help = ERROR_HELP_MAP.get(exc.code) if exc.code else None
|
|
410
|
+
|
|
411
|
+
# Determine title
|
|
412
|
+
if error_help:
|
|
413
|
+
title = error_help.title
|
|
414
|
+
elif exc.error:
|
|
415
|
+
title = exc.error.message
|
|
416
|
+
else:
|
|
417
|
+
title = str(exc)
|
|
418
|
+
|
|
419
|
+
# Sanitize any sensitive information from details
|
|
420
|
+
details = None
|
|
421
|
+
if exc.error and exc.error.details:
|
|
422
|
+
# Format details as key=value pairs, sanitized
|
|
423
|
+
detail_parts = []
|
|
424
|
+
for key, value in exc.error.details.items():
|
|
425
|
+
sanitized_value = sanitize_error_message(Exception(str(value)))
|
|
426
|
+
detail_parts.append(f"{key}={sanitized_value}")
|
|
427
|
+
details = ", ".join(detail_parts)
|
|
428
|
+
|
|
429
|
+
# Determine suggested fix
|
|
430
|
+
suggested_fix = None
|
|
431
|
+
if error_help:
|
|
432
|
+
suggested_fix = error_help.suggested_fix
|
|
433
|
+
elif exc.remediation:
|
|
434
|
+
suggested_fix = exc.remediation
|
|
435
|
+
|
|
436
|
+
# Determine learn more URL
|
|
437
|
+
learn_more_url = None
|
|
438
|
+
if error_help:
|
|
439
|
+
learn_more_url = f"{DOCS_BASE_URL}/{error_help.learn_more_suffix}"
|
|
440
|
+
elif exc.doc_url:
|
|
441
|
+
learn_more_url = exc.doc_url
|
|
442
|
+
|
|
443
|
+
# Display formatted error
|
|
444
|
+
_format_error_display(
|
|
445
|
+
error_code=error_code,
|
|
446
|
+
title=title,
|
|
447
|
+
details=details,
|
|
448
|
+
suggested_fix=suggested_fix,
|
|
449
|
+
learn_more_url=learn_more_url,
|
|
450
|
+
)
|
|
451
|
+
|
|
452
|
+
return _get_exit_code(exc)
|
|
453
|
+
|
|
454
|
+
|
|
455
|
+
def _handle_click_exception(exc: click.ClickException) -> int:
|
|
456
|
+
"""Handle Click exceptions (UsageError, BadParameter, etc.).
|
|
457
|
+
|
|
458
|
+
Args:
|
|
459
|
+
exc: The Click exception to handle
|
|
460
|
+
|
|
461
|
+
Returns:
|
|
462
|
+
Exit code to use
|
|
463
|
+
"""
|
|
464
|
+
# For Click exceptions, use the built-in formatting
|
|
465
|
+
# but wrap in our error display style
|
|
466
|
+
_format_error_display(
|
|
467
|
+
error_code=None,
|
|
468
|
+
title=exc.format_message(),
|
|
469
|
+
details=None,
|
|
470
|
+
suggested_fix="Run: raxe --help # for usage information",
|
|
471
|
+
learn_more_url=f"{DOCS_BASE_URL}/cli-usage",
|
|
472
|
+
)
|
|
473
|
+
return EXIT_INVALID_INPUT
|
|
474
|
+
|
|
475
|
+
|
|
476
|
+
def _handle_unexpected_exception(exc: Exception) -> int:
|
|
477
|
+
"""Handle unexpected exceptions with sanitized output.
|
|
478
|
+
|
|
479
|
+
Args:
|
|
480
|
+
exc: The unexpected exception to handle
|
|
481
|
+
|
|
482
|
+
Returns:
|
|
483
|
+
Exit code to use
|
|
484
|
+
"""
|
|
485
|
+
# Sanitize the error message to remove sensitive info
|
|
486
|
+
sanitized_message = sanitize_error_message(exc)
|
|
487
|
+
|
|
488
|
+
_format_error_display(
|
|
489
|
+
error_code=None,
|
|
490
|
+
title="An unexpected error occurred",
|
|
491
|
+
details=sanitized_message,
|
|
492
|
+
suggested_fix="Run: raxe doctor # to diagnose issues",
|
|
493
|
+
learn_more_url=f"{DOCS_BASE_URL}/troubleshooting",
|
|
494
|
+
)
|
|
495
|
+
|
|
496
|
+
return EXIT_SCAN_ERROR
|
|
497
|
+
|
|
498
|
+
|
|
499
|
+
def _handle_credential_expired_exception(exc: CredentialExpiredError) -> int:
|
|
500
|
+
"""Handle CredentialExpiredError with prominent error display.
|
|
501
|
+
|
|
502
|
+
Args:
|
|
503
|
+
exc: The CredentialExpiredError to handle
|
|
504
|
+
|
|
505
|
+
Returns:
|
|
506
|
+
Exit code EXIT_AUTH_ERROR (5)
|
|
507
|
+
"""
|
|
508
|
+
# Create a RaxeError from the CredentialExpiredError
|
|
509
|
+
raxe_error = credential_expired_error(
|
|
510
|
+
days_expired=exc.days_expired,
|
|
511
|
+
console_url=exc.console_url,
|
|
512
|
+
)
|
|
513
|
+
|
|
514
|
+
# Build details string
|
|
515
|
+
details = None
|
|
516
|
+
if exc.days_expired > 0:
|
|
517
|
+
details = f"Key expired {exc.days_expired} day(s) ago"
|
|
518
|
+
|
|
519
|
+
_format_error_display(
|
|
520
|
+
error_code=ErrorCode.SEC_CREDENTIAL_EXPIRED.value,
|
|
521
|
+
title=raxe_error.message,
|
|
522
|
+
details=details,
|
|
523
|
+
suggested_fix=raxe_error.remediation,
|
|
524
|
+
learn_more_url=f"{DOCS_BASE_URL}/SEC-206",
|
|
525
|
+
)
|
|
526
|
+
|
|
527
|
+
return EXIT_AUTH_ERROR
|
|
528
|
+
|
|
529
|
+
|
|
530
|
+
def handle_cli_error(func: F) -> F:
|
|
531
|
+
"""Decorator that provides consistent error handling for CLI commands.
|
|
532
|
+
|
|
533
|
+
Catches exceptions and displays user-friendly error messages with:
|
|
534
|
+
- Error code (if available)
|
|
535
|
+
- Human-readable message
|
|
536
|
+
- Details (sanitized to remove sensitive information)
|
|
537
|
+
- Suggested fix with actionable command
|
|
538
|
+
- Link to documentation
|
|
539
|
+
|
|
540
|
+
Usage:
|
|
541
|
+
@cli.command()
|
|
542
|
+
@handle_cli_error
|
|
543
|
+
def my_command():
|
|
544
|
+
# Command implementation that may raise exceptions
|
|
545
|
+
pass
|
|
546
|
+
|
|
547
|
+
Args:
|
|
548
|
+
func: The CLI command function to wrap
|
|
549
|
+
|
|
550
|
+
Returns:
|
|
551
|
+
Wrapped function with error handling
|
|
552
|
+
"""
|
|
553
|
+
|
|
554
|
+
@functools.wraps(func)
|
|
555
|
+
def wrapper(*args: Any, **kwargs: Any) -> Any:
|
|
556
|
+
try:
|
|
557
|
+
return func(*args, **kwargs)
|
|
558
|
+
except CredentialExpiredError as exc:
|
|
559
|
+
# Handle expired credentials with prominent error
|
|
560
|
+
exit_code = _handle_credential_expired_exception(exc)
|
|
561
|
+
sys.exit(exit_code)
|
|
562
|
+
except RaxeException as exc:
|
|
563
|
+
exit_code = _handle_raxe_exception(exc)
|
|
564
|
+
sys.exit(exit_code)
|
|
565
|
+
except click.ClickException as exc:
|
|
566
|
+
exit_code = _handle_click_exception(exc)
|
|
567
|
+
sys.exit(exit_code)
|
|
568
|
+
except KeyboardInterrupt:
|
|
569
|
+
console.print()
|
|
570
|
+
console.print("[yellow]Operation cancelled by user[/yellow]")
|
|
571
|
+
console.print()
|
|
572
|
+
sys.exit(EXIT_SUCCESS)
|
|
573
|
+
except Exception as exc:
|
|
574
|
+
exit_code = _handle_unexpected_exception(exc)
|
|
575
|
+
sys.exit(exit_code)
|
|
576
|
+
|
|
577
|
+
return wrapper # type: ignore[return-value]
|
|
578
|
+
|
|
579
|
+
|
|
580
|
+
def handle_cli_error_quiet(func: F) -> F:
|
|
581
|
+
"""Decorator variant for quiet mode (JSON output, minimal display).
|
|
582
|
+
|
|
583
|
+
Similar to handle_cli_error but outputs errors as JSON for CI/CD integration.
|
|
584
|
+
|
|
585
|
+
Usage:
|
|
586
|
+
@cli.command()
|
|
587
|
+
@handle_cli_error_quiet
|
|
588
|
+
def my_command():
|
|
589
|
+
# Command implementation
|
|
590
|
+
pass
|
|
591
|
+
|
|
592
|
+
Args:
|
|
593
|
+
func: The CLI command function to wrap
|
|
594
|
+
|
|
595
|
+
Returns:
|
|
596
|
+
Wrapped function with quiet error handling
|
|
597
|
+
"""
|
|
598
|
+
import json
|
|
599
|
+
|
|
600
|
+
@functools.wraps(func)
|
|
601
|
+
def wrapper(*args: Any, **kwargs: Any) -> Any:
|
|
602
|
+
try:
|
|
603
|
+
return func(*args, **kwargs)
|
|
604
|
+
except CredentialExpiredError as exc:
|
|
605
|
+
# Output credential expired error as JSON
|
|
606
|
+
error_output = {
|
|
607
|
+
"error": True,
|
|
608
|
+
"code": ErrorCode.SEC_CREDENTIAL_EXPIRED.value,
|
|
609
|
+
"message": str(exc),
|
|
610
|
+
"remediation": f"Get a permanent key at: {exc.console_url} or run: raxe auth login",
|
|
611
|
+
"days_expired": exc.days_expired,
|
|
612
|
+
}
|
|
613
|
+
click.echo(json.dumps(error_output, indent=2))
|
|
614
|
+
sys.exit(EXIT_AUTH_ERROR)
|
|
615
|
+
except RaxeException as exc:
|
|
616
|
+
# Output error as JSON
|
|
617
|
+
error_output = {
|
|
618
|
+
"error": True,
|
|
619
|
+
"code": exc.code.value if exc.code else None,
|
|
620
|
+
"message": str(exc),
|
|
621
|
+
"remediation": exc.remediation,
|
|
622
|
+
}
|
|
623
|
+
click.echo(json.dumps(error_output, indent=2))
|
|
624
|
+
sys.exit(_get_exit_code(exc))
|
|
625
|
+
except click.ClickException as exc:
|
|
626
|
+
error_output = {
|
|
627
|
+
"error": True,
|
|
628
|
+
"code": None,
|
|
629
|
+
"message": exc.format_message(),
|
|
630
|
+
"remediation": "Check command usage with --help",
|
|
631
|
+
}
|
|
632
|
+
click.echo(json.dumps(error_output, indent=2))
|
|
633
|
+
sys.exit(EXIT_INVALID_INPUT)
|
|
634
|
+
except KeyboardInterrupt:
|
|
635
|
+
error_output = {
|
|
636
|
+
"error": True,
|
|
637
|
+
"code": None,
|
|
638
|
+
"message": "Operation cancelled",
|
|
639
|
+
"remediation": None,
|
|
640
|
+
}
|
|
641
|
+
click.echo(json.dumps(error_output, indent=2))
|
|
642
|
+
sys.exit(EXIT_SUCCESS)
|
|
643
|
+
except Exception as exc:
|
|
644
|
+
sanitized_message = sanitize_error_message(exc)
|
|
645
|
+
error_output = {
|
|
646
|
+
"error": True,
|
|
647
|
+
"code": None,
|
|
648
|
+
"message": sanitized_message,
|
|
649
|
+
"remediation": "Run raxe doctor to diagnose issues",
|
|
650
|
+
}
|
|
651
|
+
click.echo(json.dumps(error_output, indent=2))
|
|
652
|
+
sys.exit(EXIT_SCAN_ERROR)
|
|
653
|
+
|
|
654
|
+
return wrapper # type: ignore[return-value]
|
|
655
|
+
|
|
656
|
+
|
|
657
|
+
__all__ = [
|
|
658
|
+
"CATEGORY_EXIT_CODES",
|
|
659
|
+
"DOCS_BASE_URL",
|
|
660
|
+
"ERROR_HELP_MAP",
|
|
661
|
+
"EXCEPTION_EXIT_CODES",
|
|
662
|
+
"ErrorHelp",
|
|
663
|
+
"handle_cli_error",
|
|
664
|
+
"handle_cli_error_quiet",
|
|
665
|
+
]
|