truthound-dashboard 1.4.4__py3-none-any.whl → 1.5.0__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.
- truthound_dashboard/api/alerts.py +75 -86
- truthound_dashboard/api/anomaly.py +7 -13
- truthound_dashboard/api/cross_alerts.py +38 -52
- truthound_dashboard/api/drift.py +49 -59
- truthound_dashboard/api/drift_monitor.py +234 -79
- truthound_dashboard/api/enterprise_sampling.py +498 -0
- truthound_dashboard/api/history.py +57 -5
- truthound_dashboard/api/lineage.py +3 -48
- truthound_dashboard/api/maintenance.py +104 -49
- truthound_dashboard/api/mask.py +1 -2
- truthound_dashboard/api/middleware.py +2 -1
- truthound_dashboard/api/model_monitoring.py +435 -311
- truthound_dashboard/api/notifications.py +227 -191
- truthound_dashboard/api/notifications_advanced.py +21 -20
- truthound_dashboard/api/observability.py +586 -0
- truthound_dashboard/api/plugins.py +2 -433
- truthound_dashboard/api/profile.py +199 -37
- truthound_dashboard/api/quality_reporter.py +701 -0
- truthound_dashboard/api/reports.py +7 -16
- truthound_dashboard/api/router.py +66 -0
- truthound_dashboard/api/rule_suggestions.py +5 -5
- truthound_dashboard/api/scan.py +17 -19
- truthound_dashboard/api/schedules.py +85 -50
- truthound_dashboard/api/schema_evolution.py +6 -6
- truthound_dashboard/api/schema_watcher.py +667 -0
- truthound_dashboard/api/sources.py +98 -27
- truthound_dashboard/api/tiering.py +1323 -0
- truthound_dashboard/api/triggers.py +14 -11
- truthound_dashboard/api/validations.py +12 -11
- truthound_dashboard/api/versioning.py +1 -6
- truthound_dashboard/core/__init__.py +129 -3
- truthound_dashboard/core/actions/__init__.py +62 -0
- truthound_dashboard/core/actions/custom.py +426 -0
- truthound_dashboard/core/actions/notifications.py +910 -0
- truthound_dashboard/core/actions/storage.py +472 -0
- truthound_dashboard/core/actions/webhook.py +281 -0
- truthound_dashboard/core/anomaly.py +262 -67
- truthound_dashboard/core/anomaly_explainer.py +4 -3
- truthound_dashboard/core/backends/__init__.py +67 -0
- truthound_dashboard/core/backends/base.py +299 -0
- truthound_dashboard/core/backends/errors.py +191 -0
- truthound_dashboard/core/backends/factory.py +423 -0
- truthound_dashboard/core/backends/mock_backend.py +451 -0
- truthound_dashboard/core/backends/truthound_backend.py +718 -0
- truthound_dashboard/core/checkpoint/__init__.py +87 -0
- truthound_dashboard/core/checkpoint/adapters.py +814 -0
- truthound_dashboard/core/checkpoint/checkpoint.py +491 -0
- truthound_dashboard/core/checkpoint/runner.py +270 -0
- truthound_dashboard/core/connections.py +437 -10
- truthound_dashboard/core/converters/__init__.py +14 -0
- truthound_dashboard/core/converters/truthound.py +620 -0
- truthound_dashboard/core/cross_alerts.py +540 -320
- truthound_dashboard/core/datasource_factory.py +1672 -0
- truthound_dashboard/core/drift_monitor.py +216 -20
- truthound_dashboard/core/enterprise_sampling.py +1291 -0
- truthound_dashboard/core/interfaces/__init__.py +225 -0
- truthound_dashboard/core/interfaces/actions.py +652 -0
- truthound_dashboard/core/interfaces/base.py +247 -0
- truthound_dashboard/core/interfaces/checkpoint.py +676 -0
- truthound_dashboard/core/interfaces/protocols.py +664 -0
- truthound_dashboard/core/interfaces/reporters.py +650 -0
- truthound_dashboard/core/interfaces/routing.py +646 -0
- truthound_dashboard/core/interfaces/triggers.py +619 -0
- truthound_dashboard/core/lineage.py +407 -71
- truthound_dashboard/core/model_monitoring.py +431 -3
- truthound_dashboard/core/notifications/base.py +4 -0
- truthound_dashboard/core/notifications/channels.py +501 -1203
- truthound_dashboard/core/notifications/deduplication/__init__.py +81 -115
- truthound_dashboard/core/notifications/deduplication/service.py +131 -348
- truthound_dashboard/core/notifications/dispatcher.py +202 -11
- truthound_dashboard/core/notifications/escalation/__init__.py +119 -106
- truthound_dashboard/core/notifications/escalation/engine.py +168 -358
- truthound_dashboard/core/notifications/routing/__init__.py +88 -128
- truthound_dashboard/core/notifications/routing/engine.py +90 -317
- truthound_dashboard/core/notifications/stats_aggregator.py +246 -1
- truthound_dashboard/core/notifications/throttling/__init__.py +67 -50
- truthound_dashboard/core/notifications/throttling/builder.py +117 -255
- truthound_dashboard/core/notifications/truthound_adapter.py +842 -0
- truthound_dashboard/core/phase5/collaboration.py +1 -1
- truthound_dashboard/core/plugins/lifecycle/__init__.py +0 -13
- truthound_dashboard/core/quality_reporter.py +1359 -0
- truthound_dashboard/core/report_history.py +0 -6
- truthound_dashboard/core/reporters/__init__.py +175 -14
- truthound_dashboard/core/reporters/adapters.py +943 -0
- truthound_dashboard/core/reporters/base.py +0 -3
- truthound_dashboard/core/reporters/builtin/__init__.py +18 -0
- truthound_dashboard/core/reporters/builtin/csv_reporter.py +111 -0
- truthound_dashboard/core/reporters/builtin/html_reporter.py +270 -0
- truthound_dashboard/core/reporters/builtin/json_reporter.py +127 -0
- truthound_dashboard/core/reporters/compat.py +266 -0
- truthound_dashboard/core/reporters/csv_reporter.py +2 -35
- truthound_dashboard/core/reporters/factory.py +526 -0
- truthound_dashboard/core/reporters/interfaces.py +745 -0
- truthound_dashboard/core/reporters/registry.py +1 -10
- truthound_dashboard/core/scheduler.py +165 -0
- truthound_dashboard/core/schema_evolution.py +3 -3
- truthound_dashboard/core/schema_watcher.py +1528 -0
- truthound_dashboard/core/services.py +595 -76
- truthound_dashboard/core/store_manager.py +810 -0
- truthound_dashboard/core/streaming_anomaly.py +169 -4
- truthound_dashboard/core/tiering.py +1309 -0
- truthound_dashboard/core/triggers/evaluators.py +178 -8
- truthound_dashboard/core/truthound_adapter.py +2620 -197
- truthound_dashboard/core/unified_alerts.py +23 -20
- truthound_dashboard/db/__init__.py +8 -0
- truthound_dashboard/db/database.py +8 -2
- truthound_dashboard/db/models.py +944 -25
- truthound_dashboard/db/repository.py +2 -0
- truthound_dashboard/main.py +11 -0
- truthound_dashboard/schemas/__init__.py +177 -16
- truthound_dashboard/schemas/base.py +44 -23
- truthound_dashboard/schemas/collaboration.py +19 -6
- truthound_dashboard/schemas/cross_alerts.py +19 -3
- truthound_dashboard/schemas/drift.py +61 -55
- truthound_dashboard/schemas/drift_monitor.py +67 -23
- truthound_dashboard/schemas/enterprise_sampling.py +653 -0
- truthound_dashboard/schemas/lineage.py +0 -33
- truthound_dashboard/schemas/mask.py +10 -8
- truthound_dashboard/schemas/model_monitoring.py +89 -10
- truthound_dashboard/schemas/notifications_advanced.py +13 -0
- truthound_dashboard/schemas/observability.py +453 -0
- truthound_dashboard/schemas/plugins.py +0 -280
- truthound_dashboard/schemas/profile.py +154 -247
- truthound_dashboard/schemas/quality_reporter.py +403 -0
- truthound_dashboard/schemas/reports.py +2 -2
- truthound_dashboard/schemas/rule_suggestion.py +8 -1
- truthound_dashboard/schemas/scan.py +4 -24
- truthound_dashboard/schemas/schedule.py +11 -3
- truthound_dashboard/schemas/schema_watcher.py +727 -0
- truthound_dashboard/schemas/source.py +17 -2
- truthound_dashboard/schemas/tiering.py +822 -0
- truthound_dashboard/schemas/triggers.py +16 -0
- truthound_dashboard/schemas/unified_alerts.py +7 -0
- truthound_dashboard/schemas/validation.py +0 -13
- truthound_dashboard/schemas/validators/base.py +41 -21
- truthound_dashboard/schemas/validators/business_rule_validators.py +244 -0
- truthound_dashboard/schemas/validators/localization_validators.py +273 -0
- truthound_dashboard/schemas/validators/ml_feature_validators.py +308 -0
- truthound_dashboard/schemas/validators/profiling_validators.py +275 -0
- truthound_dashboard/schemas/validators/referential_validators.py +312 -0
- truthound_dashboard/schemas/validators/registry.py +93 -8
- truthound_dashboard/schemas/validators/timeseries_validators.py +389 -0
- truthound_dashboard/schemas/versioning.py +1 -6
- truthound_dashboard/static/index.html +2 -2
- truthound_dashboard-1.5.0.dist-info/METADATA +309 -0
- {truthound_dashboard-1.4.4.dist-info → truthound_dashboard-1.5.0.dist-info}/RECORD +149 -148
- truthound_dashboard/core/plugins/hooks/__init__.py +0 -63
- truthound_dashboard/core/plugins/hooks/decorators.py +0 -367
- truthound_dashboard/core/plugins/hooks/manager.py +0 -403
- truthound_dashboard/core/plugins/hooks/protocols.py +0 -265
- truthound_dashboard/core/plugins/lifecycle/hot_reload.py +0 -584
- truthound_dashboard/core/reporters/junit_reporter.py +0 -233
- truthound_dashboard/core/reporters/markdown_reporter.py +0 -207
- truthound_dashboard/core/reporters/pdf_reporter.py +0 -209
- truthound_dashboard/static/assets/_baseUniq-BcrSP13d.js +0 -1
- truthound_dashboard/static/assets/arc-DlYjKwIL.js +0 -1
- truthound_dashboard/static/assets/architectureDiagram-VXUJARFQ-Bb2drbQM.js +0 -36
- truthound_dashboard/static/assets/blockDiagram-VD42YOAC-BlsPG1CH.js +0 -122
- truthound_dashboard/static/assets/c4Diagram-YG6GDRKO-B9JdUoaC.js +0 -10
- truthound_dashboard/static/assets/channel-Q6mHF1Hd.js +0 -1
- truthound_dashboard/static/assets/chunk-4BX2VUAB-DmyoPVuJ.js +0 -1
- truthound_dashboard/static/assets/chunk-55IACEB6-Bcz6Siv8.js +0 -1
- truthound_dashboard/static/assets/chunk-B4BG7PRW-Br3G5Rum.js +0 -165
- truthound_dashboard/static/assets/chunk-DI55MBZ5-DuM9c23u.js +0 -220
- truthound_dashboard/static/assets/chunk-FMBD7UC4-DNU-5mvT.js +0 -15
- truthound_dashboard/static/assets/chunk-QN33PNHL-Im2yNcmS.js +0 -1
- truthound_dashboard/static/assets/chunk-QZHKN3VN-kZr8XFm1.js +0 -1
- truthound_dashboard/static/assets/chunk-TZMSLE5B-Q__360q_.js +0 -1
- truthound_dashboard/static/assets/classDiagram-2ON5EDUG-vtixxUyK.js +0 -1
- truthound_dashboard/static/assets/classDiagram-v2-WZHVMYZB-vtixxUyK.js +0 -1
- truthound_dashboard/static/assets/clone-BOt2LwD0.js +0 -1
- truthound_dashboard/static/assets/cose-bilkent-S5V4N54A-CBDw6iac.js +0 -1
- truthound_dashboard/static/assets/dagre-6UL2VRFP-XdKqmmY9.js +0 -4
- truthound_dashboard/static/assets/diagram-PSM6KHXK-DAZ8nx9V.js +0 -24
- truthound_dashboard/static/assets/diagram-QEK2KX5R-BRvDTbGD.js +0 -43
- truthound_dashboard/static/assets/diagram-S2PKOQOG-bQcczUkl.js +0 -24
- truthound_dashboard/static/assets/erDiagram-Q2GNP2WA-DPje7VMN.js +0 -60
- truthound_dashboard/static/assets/flowDiagram-NV44I4VS-B7BVtFVS.js +0 -162
- truthound_dashboard/static/assets/ganttDiagram-JELNMOA3-D6WKSS7U.js +0 -267
- truthound_dashboard/static/assets/gitGraphDiagram-NY62KEGX-D3vtVd3y.js +0 -65
- truthound_dashboard/static/assets/graph-BKgNKZVp.js +0 -1
- truthound_dashboard/static/assets/index-C6JSrkHo.css +0 -1
- truthound_dashboard/static/assets/index-DkU82VsU.js +0 -1800
- truthound_dashboard/static/assets/infoDiagram-WHAUD3N6-DnNCT429.js +0 -2
- truthound_dashboard/static/assets/journeyDiagram-XKPGCS4Q-DGiMozqS.js +0 -139
- truthound_dashboard/static/assets/kanban-definition-3W4ZIXB7-BV2gUgli.js +0 -89
- truthound_dashboard/static/assets/katex-Cu_Erd72.js +0 -261
- truthound_dashboard/static/assets/layout-DI2MfQ5G.js +0 -1
- truthound_dashboard/static/assets/min-DYdgXVcT.js +0 -1
- truthound_dashboard/static/assets/mindmap-definition-VGOIOE7T-C7x4ruxz.js +0 -68
- truthound_dashboard/static/assets/pieDiagram-ADFJNKIX-CAJaAB9f.js +0 -30
- truthound_dashboard/static/assets/quadrantDiagram-AYHSOK5B-DeqwDI46.js +0 -7
- truthound_dashboard/static/assets/requirementDiagram-UZGBJVZJ-e3XDpZIM.js +0 -64
- truthound_dashboard/static/assets/sankeyDiagram-TZEHDZUN-CNnAv5Ux.js +0 -10
- truthound_dashboard/static/assets/sequenceDiagram-WL72ISMW-Dsne-Of3.js +0 -145
- truthound_dashboard/static/assets/stateDiagram-FKZM4ZOC-Ee0sQXyb.js +0 -1
- truthound_dashboard/static/assets/stateDiagram-v2-4FDKWEC3-B26KqW_W.js +0 -1
- truthound_dashboard/static/assets/timeline-definition-IT6M3QCI-DZYi2yl3.js +0 -61
- truthound_dashboard/static/assets/treemap-KMMF4GRG-CY3f8In2.js +0 -128
- truthound_dashboard/static/assets/unmerged_dictionaries-Dd7xcPWG.js +0 -1
- truthound_dashboard/static/assets/xychartDiagram-PRI3JC2R-CS7fydZZ.js +0 -7
- truthound_dashboard-1.4.4.dist-info/METADATA +0 -507
- {truthound_dashboard-1.4.4.dist-info → truthound_dashboard-1.5.0.dist-info}/WHEEL +0 -0
- {truthound_dashboard-1.4.4.dist-info → truthound_dashboard-1.5.0.dist-info}/entry_points.txt +0 -0
- {truthound_dashboard-1.4.4.dist-info → truthound_dashboard-1.5.0.dist-info}/licenses/LICENSE +0 -0
|
@@ -78,12 +78,9 @@ class ValidatorParamType(str, Enum):
|
|
|
78
78
|
class ReporterOutputFormat(str, Enum):
|
|
79
79
|
"""Output format for custom reporters."""
|
|
80
80
|
|
|
81
|
-
PDF = "pdf"
|
|
82
81
|
HTML = "html"
|
|
83
82
|
JSON = "json"
|
|
84
83
|
CSV = "csv"
|
|
85
|
-
EXCEL = "excel"
|
|
86
|
-
MARKDOWN = "markdown"
|
|
87
84
|
CUSTOM = "custom"
|
|
88
85
|
|
|
89
86
|
|
|
@@ -865,54 +862,6 @@ class PluginTransitionResponse(BaseSchema):
|
|
|
865
862
|
error: str | None = None
|
|
866
863
|
|
|
867
864
|
|
|
868
|
-
# =============================================================================
|
|
869
|
-
# Plugin Hot Reload
|
|
870
|
-
# =============================================================================
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
class ReloadStrategy(str, Enum):
|
|
874
|
-
"""Strategy for handling hot reloads."""
|
|
875
|
-
|
|
876
|
-
IMMEDIATE = "immediate"
|
|
877
|
-
DEBOUNCED = "debounced"
|
|
878
|
-
MANUAL = "manual"
|
|
879
|
-
SCHEDULED = "scheduled"
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
class HotReloadConfigRequest(BaseSchema):
|
|
883
|
-
"""Request to configure hot reload for a plugin."""
|
|
884
|
-
|
|
885
|
-
strategy: ReloadStrategy = Field(default=ReloadStrategy.DEBOUNCED)
|
|
886
|
-
debounce_delay_ms: int = Field(default=500, ge=0, le=5000)
|
|
887
|
-
watch_paths: list[str] = Field(default_factory=list)
|
|
888
|
-
enabled: bool = True
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
class HotReloadStatus(BaseSchema):
|
|
892
|
-
"""Hot reload status for a plugin."""
|
|
893
|
-
|
|
894
|
-
plugin_id: str
|
|
895
|
-
enabled: bool = False
|
|
896
|
-
watching: bool = False
|
|
897
|
-
strategy: ReloadStrategy = ReloadStrategy.MANUAL
|
|
898
|
-
has_pending_reload: bool = False
|
|
899
|
-
last_reload_at: datetime | None = None
|
|
900
|
-
last_reload_duration_ms: float | None = None
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
class HotReloadResult(BaseSchema):
|
|
904
|
-
"""Result of a hot reload operation."""
|
|
905
|
-
|
|
906
|
-
success: bool
|
|
907
|
-
plugin_id: str
|
|
908
|
-
old_version: str = ""
|
|
909
|
-
new_version: str = ""
|
|
910
|
-
duration_ms: float = 0
|
|
911
|
-
error: str | None = None
|
|
912
|
-
rolled_back: bool = False
|
|
913
|
-
changes: list[str] = Field(default_factory=list)
|
|
914
|
-
|
|
915
|
-
|
|
916
865
|
# =============================================================================
|
|
917
866
|
# Plugin Dependencies
|
|
918
867
|
# =============================================================================
|
|
@@ -979,235 +928,6 @@ class DependencyResolutionResponse(BaseSchema):
|
|
|
979
928
|
error: str | None = None
|
|
980
929
|
|
|
981
930
|
|
|
982
|
-
# =============================================================================
|
|
983
|
-
# Plugin Security - Extended
|
|
984
|
-
# =============================================================================
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
class IsolationLevel(str, Enum):
|
|
988
|
-
"""Sandbox isolation levels."""
|
|
989
|
-
|
|
990
|
-
NONE = "none"
|
|
991
|
-
PROCESS = "process"
|
|
992
|
-
CONTAINER = "container"
|
|
993
|
-
|
|
994
|
-
|
|
995
|
-
class SignatureAlgorithm(str, Enum):
|
|
996
|
-
"""Supported signature algorithms."""
|
|
997
|
-
|
|
998
|
-
SHA256 = "sha256"
|
|
999
|
-
SHA512 = "sha512"
|
|
1000
|
-
HMAC_SHA256 = "hmac_sha256"
|
|
1001
|
-
HMAC_SHA512 = "hmac_sha512"
|
|
1002
|
-
RSA_SHA256 = "rsa_sha256"
|
|
1003
|
-
ED25519 = "ed25519"
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
class TrustedSigner(BaseSchema):
|
|
1007
|
-
"""A trusted signer in the trust store."""
|
|
1008
|
-
|
|
1009
|
-
signer_id: str
|
|
1010
|
-
name: str
|
|
1011
|
-
public_key: str
|
|
1012
|
-
algorithm: SignatureAlgorithm
|
|
1013
|
-
added_at: datetime
|
|
1014
|
-
expires_at: datetime | None = None
|
|
1015
|
-
is_active: bool = True
|
|
1016
|
-
trust_level: SecurityLevel = SecurityLevel.VERIFIED
|
|
1017
|
-
|
|
1018
|
-
|
|
1019
|
-
class TrustStoreResponse(BaseSchema):
|
|
1020
|
-
"""Response containing trust store information."""
|
|
1021
|
-
|
|
1022
|
-
signers: list[TrustedSigner] = Field(default_factory=list)
|
|
1023
|
-
total_signers: int = 0
|
|
1024
|
-
last_updated: datetime | None = None
|
|
1025
|
-
|
|
1026
|
-
|
|
1027
|
-
class AddSignerRequest(BaseSchema):
|
|
1028
|
-
"""Request to add a signer to the trust store."""
|
|
1029
|
-
|
|
1030
|
-
signer_id: str
|
|
1031
|
-
name: str
|
|
1032
|
-
public_key: str
|
|
1033
|
-
algorithm: SignatureAlgorithm = SignatureAlgorithm.ED25519
|
|
1034
|
-
expires_at: datetime | None = None
|
|
1035
|
-
trust_level: SecurityLevel = SecurityLevel.VERIFIED
|
|
1036
|
-
|
|
1037
|
-
|
|
1038
|
-
class SecurityPolicyPreset(str, Enum):
|
|
1039
|
-
"""Pre-defined security policy presets."""
|
|
1040
|
-
|
|
1041
|
-
DEVELOPMENT = "development"
|
|
1042
|
-
TESTING = "testing"
|
|
1043
|
-
STANDARD = "standard"
|
|
1044
|
-
ENTERPRISE = "enterprise"
|
|
1045
|
-
STRICT = "strict"
|
|
1046
|
-
AIRGAPPED = "airgapped"
|
|
1047
|
-
|
|
1048
|
-
|
|
1049
|
-
class SecurityPolicyConfig(BaseSchema):
|
|
1050
|
-
"""Full security policy configuration."""
|
|
1051
|
-
|
|
1052
|
-
preset: SecurityPolicyPreset = SecurityPolicyPreset.STANDARD
|
|
1053
|
-
isolation_level: IsolationLevel = IsolationLevel.PROCESS
|
|
1054
|
-
require_signature: bool = True
|
|
1055
|
-
min_signatures: int = Field(default=1, ge=0, le=10)
|
|
1056
|
-
allowed_signers: list[str] = Field(default_factory=list)
|
|
1057
|
-
blocked_modules: list[str] = Field(default_factory=list)
|
|
1058
|
-
memory_limit_mb: int = Field(default=256, ge=64, le=4096)
|
|
1059
|
-
cpu_time_limit_sec: int = Field(default=30, ge=1, le=600)
|
|
1060
|
-
network_enabled: bool = False
|
|
1061
|
-
filesystem_read: bool = False
|
|
1062
|
-
filesystem_write: bool = False
|
|
1063
|
-
|
|
1064
|
-
|
|
1065
|
-
class SecurityAnalysisRequest(BaseSchema):
|
|
1066
|
-
"""Request to analyze plugin security."""
|
|
1067
|
-
|
|
1068
|
-
plugin_id: str
|
|
1069
|
-
code: str | None = None
|
|
1070
|
-
deep_analysis: bool = Field(default=False, description="Perform deep AST analysis")
|
|
1071
|
-
|
|
1072
|
-
|
|
1073
|
-
class CodeAnalysisResult(BaseSchema):
|
|
1074
|
-
"""Result of code security analysis."""
|
|
1075
|
-
|
|
1076
|
-
is_safe: bool
|
|
1077
|
-
issues: list[str] = Field(default_factory=list)
|
|
1078
|
-
warnings: list[str] = Field(default_factory=list)
|
|
1079
|
-
blocked_constructs: list[str] = Field(default_factory=list)
|
|
1080
|
-
detected_imports: list[str] = Field(default_factory=list)
|
|
1081
|
-
detected_permissions: list[str] = Field(default_factory=list)
|
|
1082
|
-
complexity_score: int = Field(default=0, ge=0, le=100)
|
|
1083
|
-
|
|
1084
|
-
|
|
1085
|
-
class ExtendedSecurityReport(SecurityReport):
|
|
1086
|
-
"""Extended security report with detailed analysis."""
|
|
1087
|
-
|
|
1088
|
-
code_analysis: CodeAnalysisResult | None = None
|
|
1089
|
-
signature_count: int = 0
|
|
1090
|
-
trust_level: SecurityLevel = SecurityLevel.UNVERIFIED
|
|
1091
|
-
can_run_in_sandbox: bool = True
|
|
1092
|
-
code_hash: str = ""
|
|
1093
|
-
recommendations: list[str] = Field(default_factory=list)
|
|
1094
|
-
|
|
1095
|
-
|
|
1096
|
-
class VerifySignatureRequest(BaseSchema):
|
|
1097
|
-
"""Request to verify plugin signature."""
|
|
1098
|
-
|
|
1099
|
-
plugin_id: str
|
|
1100
|
-
signature: str
|
|
1101
|
-
content_hash: str
|
|
1102
|
-
algorithm: SignatureAlgorithm = SignatureAlgorithm.ED25519
|
|
1103
|
-
|
|
1104
|
-
|
|
1105
|
-
class VerifySignatureResponse(BaseSchema):
|
|
1106
|
-
"""Response from signature verification."""
|
|
1107
|
-
|
|
1108
|
-
is_valid: bool
|
|
1109
|
-
signer_id: str | None = None
|
|
1110
|
-
signer_name: str | None = None
|
|
1111
|
-
signed_at: datetime | None = None
|
|
1112
|
-
error: str | None = None
|
|
1113
|
-
|
|
1114
|
-
|
|
1115
|
-
# =============================================================================
|
|
1116
|
-
# Plugin Hooks
|
|
1117
|
-
# =============================================================================
|
|
1118
|
-
|
|
1119
|
-
|
|
1120
|
-
class HookType(str, Enum):
|
|
1121
|
-
"""Types of hooks in the plugin system."""
|
|
1122
|
-
|
|
1123
|
-
BEFORE_VALIDATION = "before_validation"
|
|
1124
|
-
AFTER_VALIDATION = "after_validation"
|
|
1125
|
-
ON_ISSUE_FOUND = "on_issue_found"
|
|
1126
|
-
BEFORE_PROFILE = "before_profile"
|
|
1127
|
-
AFTER_PROFILE = "after_profile"
|
|
1128
|
-
BEFORE_COMPARE = "before_compare"
|
|
1129
|
-
AFTER_COMPARE = "after_compare"
|
|
1130
|
-
ON_PLUGIN_LOAD = "on_plugin_load"
|
|
1131
|
-
ON_PLUGIN_UNLOAD = "on_plugin_unload"
|
|
1132
|
-
ON_PLUGIN_ERROR = "on_plugin_error"
|
|
1133
|
-
BEFORE_NOTIFICATION = "before_notification"
|
|
1134
|
-
AFTER_NOTIFICATION = "after_notification"
|
|
1135
|
-
ON_SCHEDULE_RUN = "on_schedule_run"
|
|
1136
|
-
ON_DATA_SOURCE_CONNECT = "on_data_source_connect"
|
|
1137
|
-
ON_SCHEMA_CHANGE = "on_schema_change"
|
|
1138
|
-
CUSTOM = "custom"
|
|
1139
|
-
|
|
1140
|
-
|
|
1141
|
-
class HookPriority(str, Enum):
|
|
1142
|
-
"""Priority levels for hook execution."""
|
|
1143
|
-
|
|
1144
|
-
HIGHEST = "highest"
|
|
1145
|
-
HIGH = "high"
|
|
1146
|
-
NORMAL = "normal"
|
|
1147
|
-
LOW = "low"
|
|
1148
|
-
LOWEST = "lowest"
|
|
1149
|
-
|
|
1150
|
-
|
|
1151
|
-
class HookRegistration(BaseSchema):
|
|
1152
|
-
"""A registered hook."""
|
|
1153
|
-
|
|
1154
|
-
id: str
|
|
1155
|
-
hook_type: HookType
|
|
1156
|
-
plugin_id: str
|
|
1157
|
-
function_name: str
|
|
1158
|
-
priority: HookPriority = HookPriority.NORMAL
|
|
1159
|
-
is_async: bool = False
|
|
1160
|
-
is_enabled: bool = True
|
|
1161
|
-
description: str | None = None
|
|
1162
|
-
|
|
1163
|
-
|
|
1164
|
-
class HookListResponse(BaseSchema):
|
|
1165
|
-
"""Response listing registered hooks."""
|
|
1166
|
-
|
|
1167
|
-
hooks: list[HookRegistration] = Field(default_factory=list)
|
|
1168
|
-
total: int = 0
|
|
1169
|
-
by_type: dict[str, int] = Field(default_factory=dict)
|
|
1170
|
-
|
|
1171
|
-
|
|
1172
|
-
class RegisterHookRequest(BaseSchema):
|
|
1173
|
-
"""Request to register a new hook."""
|
|
1174
|
-
|
|
1175
|
-
hook_type: HookType
|
|
1176
|
-
plugin_id: str
|
|
1177
|
-
function_name: str
|
|
1178
|
-
priority: HookPriority = HookPriority.NORMAL
|
|
1179
|
-
description: str | None = None
|
|
1180
|
-
|
|
1181
|
-
|
|
1182
|
-
class UnregisterHookRequest(BaseSchema):
|
|
1183
|
-
"""Request to unregister a hook."""
|
|
1184
|
-
|
|
1185
|
-
hook_id: str
|
|
1186
|
-
|
|
1187
|
-
|
|
1188
|
-
class HookExecutionResult(BaseSchema):
|
|
1189
|
-
"""Result of hook execution."""
|
|
1190
|
-
|
|
1191
|
-
hook_id: str
|
|
1192
|
-
plugin_id: str
|
|
1193
|
-
success: bool
|
|
1194
|
-
result: Any = None
|
|
1195
|
-
error: str | None = None
|
|
1196
|
-
execution_time_ms: float = 0
|
|
1197
|
-
modified_data: bool = False
|
|
1198
|
-
|
|
1199
|
-
|
|
1200
|
-
class HookExecutionSummary(BaseSchema):
|
|
1201
|
-
"""Summary of all hook executions for an event."""
|
|
1202
|
-
|
|
1203
|
-
hook_type: HookType
|
|
1204
|
-
total_hooks: int
|
|
1205
|
-
successful: int
|
|
1206
|
-
failed: int
|
|
1207
|
-
total_time_ms: float
|
|
1208
|
-
results: list[HookExecutionResult] = Field(default_factory=list)
|
|
1209
|
-
|
|
1210
|
-
|
|
1211
931
|
# =============================================================================
|
|
1212
932
|
# Plugin Documentation
|
|
1213
933
|
# =============================================================================
|