truthound-dashboard 1.3.1__py3-none-any.whl → 1.4.1__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.
Files changed (169) hide show
  1. truthound_dashboard/api/alerts.py +258 -0
  2. truthound_dashboard/api/anomaly.py +1302 -0
  3. truthound_dashboard/api/cross_alerts.py +352 -0
  4. truthound_dashboard/api/deps.py +143 -0
  5. truthound_dashboard/api/drift_monitor.py +540 -0
  6. truthound_dashboard/api/lineage.py +1151 -0
  7. truthound_dashboard/api/maintenance.py +363 -0
  8. truthound_dashboard/api/middleware.py +373 -1
  9. truthound_dashboard/api/model_monitoring.py +805 -0
  10. truthound_dashboard/api/notifications_advanced.py +2452 -0
  11. truthound_dashboard/api/plugins.py +2096 -0
  12. truthound_dashboard/api/profile.py +211 -14
  13. truthound_dashboard/api/reports.py +853 -0
  14. truthound_dashboard/api/router.py +147 -0
  15. truthound_dashboard/api/rule_suggestions.py +310 -0
  16. truthound_dashboard/api/schema_evolution.py +231 -0
  17. truthound_dashboard/api/sources.py +47 -3
  18. truthound_dashboard/api/triggers.py +190 -0
  19. truthound_dashboard/api/validations.py +13 -0
  20. truthound_dashboard/api/validators.py +333 -4
  21. truthound_dashboard/api/versioning.py +309 -0
  22. truthound_dashboard/api/websocket.py +301 -0
  23. truthound_dashboard/core/__init__.py +27 -0
  24. truthound_dashboard/core/anomaly.py +1395 -0
  25. truthound_dashboard/core/anomaly_explainer.py +633 -0
  26. truthound_dashboard/core/cache.py +206 -0
  27. truthound_dashboard/core/cached_services.py +422 -0
  28. truthound_dashboard/core/charts.py +352 -0
  29. truthound_dashboard/core/connections.py +1069 -42
  30. truthound_dashboard/core/cross_alerts.py +837 -0
  31. truthound_dashboard/core/drift_monitor.py +1477 -0
  32. truthound_dashboard/core/drift_sampling.py +669 -0
  33. truthound_dashboard/core/i18n/__init__.py +42 -0
  34. truthound_dashboard/core/i18n/detector.py +173 -0
  35. truthound_dashboard/core/i18n/messages.py +564 -0
  36. truthound_dashboard/core/lineage.py +971 -0
  37. truthound_dashboard/core/maintenance.py +443 -5
  38. truthound_dashboard/core/model_monitoring.py +1043 -0
  39. truthound_dashboard/core/notifications/channels.py +1020 -1
  40. truthound_dashboard/core/notifications/deduplication/__init__.py +143 -0
  41. truthound_dashboard/core/notifications/deduplication/policies.py +274 -0
  42. truthound_dashboard/core/notifications/deduplication/service.py +400 -0
  43. truthound_dashboard/core/notifications/deduplication/stores.py +2365 -0
  44. truthound_dashboard/core/notifications/deduplication/strategies.py +422 -0
  45. truthound_dashboard/core/notifications/dispatcher.py +43 -0
  46. truthound_dashboard/core/notifications/escalation/__init__.py +149 -0
  47. truthound_dashboard/core/notifications/escalation/backends.py +1384 -0
  48. truthound_dashboard/core/notifications/escalation/engine.py +429 -0
  49. truthound_dashboard/core/notifications/escalation/models.py +336 -0
  50. truthound_dashboard/core/notifications/escalation/scheduler.py +1187 -0
  51. truthound_dashboard/core/notifications/escalation/state_machine.py +330 -0
  52. truthound_dashboard/core/notifications/escalation/stores.py +2896 -0
  53. truthound_dashboard/core/notifications/events.py +49 -0
  54. truthound_dashboard/core/notifications/metrics/__init__.py +115 -0
  55. truthound_dashboard/core/notifications/metrics/base.py +528 -0
  56. truthound_dashboard/core/notifications/metrics/collectors.py +583 -0
  57. truthound_dashboard/core/notifications/routing/__init__.py +169 -0
  58. truthound_dashboard/core/notifications/routing/combinators.py +184 -0
  59. truthound_dashboard/core/notifications/routing/config.py +375 -0
  60. truthound_dashboard/core/notifications/routing/config_parser.py +867 -0
  61. truthound_dashboard/core/notifications/routing/engine.py +382 -0
  62. truthound_dashboard/core/notifications/routing/expression_engine.py +1269 -0
  63. truthound_dashboard/core/notifications/routing/jinja2_engine.py +774 -0
  64. truthound_dashboard/core/notifications/routing/rules.py +625 -0
  65. truthound_dashboard/core/notifications/routing/validator.py +678 -0
  66. truthound_dashboard/core/notifications/service.py +2 -0
  67. truthound_dashboard/core/notifications/stats_aggregator.py +850 -0
  68. truthound_dashboard/core/notifications/throttling/__init__.py +83 -0
  69. truthound_dashboard/core/notifications/throttling/builder.py +311 -0
  70. truthound_dashboard/core/notifications/throttling/stores.py +1859 -0
  71. truthound_dashboard/core/notifications/throttling/throttlers.py +633 -0
  72. truthound_dashboard/core/openlineage.py +1028 -0
  73. truthound_dashboard/core/plugins/__init__.py +39 -0
  74. truthound_dashboard/core/plugins/docs/__init__.py +39 -0
  75. truthound_dashboard/core/plugins/docs/extractor.py +703 -0
  76. truthound_dashboard/core/plugins/docs/renderers.py +804 -0
  77. truthound_dashboard/core/plugins/hooks/__init__.py +63 -0
  78. truthound_dashboard/core/plugins/hooks/decorators.py +367 -0
  79. truthound_dashboard/core/plugins/hooks/manager.py +403 -0
  80. truthound_dashboard/core/plugins/hooks/protocols.py +265 -0
  81. truthound_dashboard/core/plugins/lifecycle/__init__.py +41 -0
  82. truthound_dashboard/core/plugins/lifecycle/hot_reload.py +584 -0
  83. truthound_dashboard/core/plugins/lifecycle/machine.py +419 -0
  84. truthound_dashboard/core/plugins/lifecycle/states.py +266 -0
  85. truthound_dashboard/core/plugins/loader.py +504 -0
  86. truthound_dashboard/core/plugins/registry.py +810 -0
  87. truthound_dashboard/core/plugins/reporter_executor.py +588 -0
  88. truthound_dashboard/core/plugins/sandbox/__init__.py +59 -0
  89. truthound_dashboard/core/plugins/sandbox/code_validator.py +243 -0
  90. truthound_dashboard/core/plugins/sandbox/engines.py +770 -0
  91. truthound_dashboard/core/plugins/sandbox/protocols.py +194 -0
  92. truthound_dashboard/core/plugins/sandbox.py +617 -0
  93. truthound_dashboard/core/plugins/security/__init__.py +68 -0
  94. truthound_dashboard/core/plugins/security/analyzer.py +535 -0
  95. truthound_dashboard/core/plugins/security/policies.py +311 -0
  96. truthound_dashboard/core/plugins/security/protocols.py +296 -0
  97. truthound_dashboard/core/plugins/security/signing.py +842 -0
  98. truthound_dashboard/core/plugins/security.py +446 -0
  99. truthound_dashboard/core/plugins/validator_executor.py +401 -0
  100. truthound_dashboard/core/plugins/versioning/__init__.py +51 -0
  101. truthound_dashboard/core/plugins/versioning/constraints.py +377 -0
  102. truthound_dashboard/core/plugins/versioning/dependencies.py +541 -0
  103. truthound_dashboard/core/plugins/versioning/semver.py +266 -0
  104. truthound_dashboard/core/profile_comparison.py +601 -0
  105. truthound_dashboard/core/report_history.py +570 -0
  106. truthound_dashboard/core/reporters/__init__.py +57 -0
  107. truthound_dashboard/core/reporters/base.py +296 -0
  108. truthound_dashboard/core/reporters/csv_reporter.py +155 -0
  109. truthound_dashboard/core/reporters/html_reporter.py +598 -0
  110. truthound_dashboard/core/reporters/i18n/__init__.py +65 -0
  111. truthound_dashboard/core/reporters/i18n/base.py +494 -0
  112. truthound_dashboard/core/reporters/i18n/catalogs.py +930 -0
  113. truthound_dashboard/core/reporters/json_reporter.py +160 -0
  114. truthound_dashboard/core/reporters/junit_reporter.py +233 -0
  115. truthound_dashboard/core/reporters/markdown_reporter.py +207 -0
  116. truthound_dashboard/core/reporters/pdf_reporter.py +209 -0
  117. truthound_dashboard/core/reporters/registry.py +272 -0
  118. truthound_dashboard/core/rule_generator.py +2088 -0
  119. truthound_dashboard/core/scheduler.py +822 -12
  120. truthound_dashboard/core/schema_evolution.py +858 -0
  121. truthound_dashboard/core/services.py +152 -9
  122. truthound_dashboard/core/statistics.py +718 -0
  123. truthound_dashboard/core/streaming_anomaly.py +883 -0
  124. truthound_dashboard/core/triggers/__init__.py +45 -0
  125. truthound_dashboard/core/triggers/base.py +226 -0
  126. truthound_dashboard/core/triggers/evaluators.py +609 -0
  127. truthound_dashboard/core/triggers/factory.py +363 -0
  128. truthound_dashboard/core/unified_alerts.py +870 -0
  129. truthound_dashboard/core/validation_limits.py +509 -0
  130. truthound_dashboard/core/versioning.py +709 -0
  131. truthound_dashboard/core/websocket/__init__.py +59 -0
  132. truthound_dashboard/core/websocket/manager.py +512 -0
  133. truthound_dashboard/core/websocket/messages.py +130 -0
  134. truthound_dashboard/db/__init__.py +30 -0
  135. truthound_dashboard/db/models.py +3375 -3
  136. truthound_dashboard/main.py +22 -0
  137. truthound_dashboard/schemas/__init__.py +396 -1
  138. truthound_dashboard/schemas/anomaly.py +1258 -0
  139. truthound_dashboard/schemas/base.py +4 -0
  140. truthound_dashboard/schemas/cross_alerts.py +334 -0
  141. truthound_dashboard/schemas/drift_monitor.py +890 -0
  142. truthound_dashboard/schemas/lineage.py +428 -0
  143. truthound_dashboard/schemas/maintenance.py +154 -0
  144. truthound_dashboard/schemas/model_monitoring.py +374 -0
  145. truthound_dashboard/schemas/notifications_advanced.py +1363 -0
  146. truthound_dashboard/schemas/openlineage.py +704 -0
  147. truthound_dashboard/schemas/plugins.py +1293 -0
  148. truthound_dashboard/schemas/profile.py +420 -34
  149. truthound_dashboard/schemas/profile_comparison.py +242 -0
  150. truthound_dashboard/schemas/reports.py +285 -0
  151. truthound_dashboard/schemas/rule_suggestion.py +434 -0
  152. truthound_dashboard/schemas/schema_evolution.py +164 -0
  153. truthound_dashboard/schemas/source.py +117 -2
  154. truthound_dashboard/schemas/triggers.py +511 -0
  155. truthound_dashboard/schemas/unified_alerts.py +223 -0
  156. truthound_dashboard/schemas/validation.py +25 -1
  157. truthound_dashboard/schemas/validators/__init__.py +11 -0
  158. truthound_dashboard/schemas/validators/base.py +151 -0
  159. truthound_dashboard/schemas/versioning.py +152 -0
  160. truthound_dashboard/static/index.html +2 -2
  161. {truthound_dashboard-1.3.1.dist-info → truthound_dashboard-1.4.1.dist-info}/METADATA +147 -23
  162. truthound_dashboard-1.4.1.dist-info/RECORD +239 -0
  163. truthound_dashboard/static/assets/index-BZG20KuF.js +0 -586
  164. truthound_dashboard/static/assets/index-D_HyZ3pb.css +0 -1
  165. truthound_dashboard/static/assets/unmerged_dictionaries-CtpqQBm0.js +0 -1
  166. truthound_dashboard-1.3.1.dist-info/RECORD +0 -110
  167. {truthound_dashboard-1.3.1.dist-info → truthound_dashboard-1.4.1.dist-info}/WHEEL +0 -0
  168. {truthound_dashboard-1.3.1.dist-info → truthound_dashboard-1.4.1.dist-info}/entry_points.txt +0 -0
  169. {truthound_dashboard-1.3.1.dist-info → truthound_dashboard-1.4.1.dist-info}/licenses/LICENSE +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: truthound-dashboard
3
- Version: 1.3.1
3
+ Version: 1.4.1
4
4
  Summary: Open-source data quality dashboard - GX Cloud alternative
5
5
  Author-email: Truthound Team <team@truthound.dev>
6
6
  License-Expression: Apache-2.0
@@ -23,6 +23,7 @@ Requires-Dist: apscheduler>=3.10.0
23
23
  Requires-Dist: cryptography>=41.0.0
24
24
  Requires-Dist: fastapi>=0.110.0
25
25
  Requires-Dist: httpx>=0.26.0
26
+ Requires-Dist: jinja2>=3.1.0
26
27
  Requires-Dist: polars>=0.20.0
27
28
  Requires-Dist: pydantic-settings>=2.1.0
28
29
  Requires-Dist: pydantic>=2.5.0
@@ -40,6 +41,8 @@ Requires-Dist: pytest-asyncio>=0.21.0; extra == 'dev'
40
41
  Requires-Dist: pytest-cov>=4.1.0; extra == 'dev'
41
42
  Requires-Dist: pytest>=7.4.0; extra == 'dev'
42
43
  Requires-Dist: ruff>=0.1.0; extra == 'dev'
44
+ Provides-Extra: redis
45
+ Requires-Dist: redis>=5.0.0; extra == 'redis'
43
46
  Provides-Extra: translate
44
47
  Description-Content-Type: text/markdown
45
48
 
@@ -48,10 +51,6 @@ Description-Content-Type: text/markdown
48
51
 
49
52
  # truthound-dashboard
50
53
 
51
- > **⚠️ Under Active Development**
52
- >
53
- > The [truthound](https://github.com/seadonggyun4/truthound) core library has recently undergone significant API improvements and feature enhancements. This dashboard project is currently being updated to fully support these changes. Some features may not yet reflect the latest truthound capabilities. We appreciate your patience as we work to bring full compatibility.
54
-
55
54
  [![PyPI version](https://img.shields.io/pypi/v/truthound-dashboard.svg)](https://pypi.org/project/truthound-dashboard/)
56
55
  [![Python 3.11+](https://img.shields.io/badge/python-3.11+-blue.svg)](https://www.python.org/downloads/)
57
56
  [![License: Apache 2.0](https://img.shields.io/badge/License-Apache%202.0-orange.svg)](https://opensource.org/licenses/Apache-2.0)
@@ -60,7 +59,11 @@ Description-Content-Type: text/markdown
60
59
 
61
60
  A web-based data quality monitoring dashboard for [truthound](https://github.com/seadonggyun4/truthound).
62
61
 
63
- [Documentation](https://truthound.netlify.app) | [PyPI](https://pypi.org/project/truthound-dashboard/)
62
+ [Documentation](https://truthound.netlify.app) | [PyPI](https://pypi.org/project/truthound-dashboard/) | [Live Demo](https://truthound-dashborad.vercel.app/)
63
+
64
+ > **Try the Live Demo**: Experience the full dashboard interface with mock data at [truthound-dashborad.vercel.app](https://truthound-dashborad.vercel.app/). No installation required!
65
+ >
66
+ > **Note**: The demo page displays in English only. Language selection is not available in the demo due to Intlayer's runtime requirements. When you install and run truthound-dashboard locally, full multi-language support (English, Korean, and AI-translated languages) works as expected.
64
67
 
65
68
  ## Overview
66
69
  <img width="300" height="300" alt="Truthound_icon" src="https://github.com/user-attachments/assets/90d9e806-8895-45ec-97dc-f8300da4d997" />
@@ -80,14 +83,18 @@ truthound-dashboard provides a graphical interface for managing data sources, ex
80
83
  | Slack Notifications | Available | Available |
81
84
  | Email Notifications | Available | Available |
82
85
  | Webhook Notifications | Available | Available |
83
- | Drift Detection | Available | Available (8 methods) |
86
+ | Drift Detection | Available | Available (5 methods) |
84
87
  | Data Profiling | Available | Available |
85
88
  | PII Scan | Available | Available (GDPR/CCPA/LGPD) |
86
89
  | Data Masking | Available | Available (redact/hash/fake) |
87
- | Business Glossary | Available | Available |
88
- | Data Catalog | Available | Available |
90
+ | Anomaly Detection | Limited | Available (6 algorithms) |
91
+ | Data Lineage | Available | Available (3 viz options) |
92
+ | Model Monitoring | Available | Available |
93
+ | Reports & Export | Available | Available (6 formats) |
94
+ | Plugins Marketplace | Not Available | Available |
95
+ | Maintenance Tools | Limited | Available |
89
96
  | Dark Mode | Available | Available |
90
- | Multi-language (en/ko) | Not Available | Available |
97
+ | Multi-language | Limited | 2 languages (en, ko) + AI translation CLI |
91
98
  | License | Commercial | Apache 2.0 |
92
99
 
93
100
  ## Requirements
@@ -124,9 +131,10 @@ The dashboard interface is accessible at `http://localhost:8765`.
124
131
  ## Implemented Features
125
132
 
126
133
  ### Data Source Management
127
- - Supported file formats: CSV, Parquet
128
- - Supported databases: PostgreSQL, MySQL, Snowflake, BigQuery
129
- - Connection validation
134
+ - Supported file formats: CSV, Parquet, JSON
135
+ - Supported databases (13 connectors): PostgreSQL, MySQL, SQLite, BigQuery, Snowflake, Redshift, Databricks, Oracle, SQL Server, Spark
136
+ - Connection validation and management UI
137
+ - Dynamic configuration forms per source type
130
138
 
131
139
  ### Schema Management
132
140
  - Automated schema generation using `th.learn`
@@ -139,10 +147,82 @@ The dashboard interface is accessible at `http://localhost:8765`.
139
147
  - Persistent storage of validation results
140
148
  - Issue classification by severity (Critical, High, Medium, Low)
141
149
  - Advanced options: column filtering, min_severity, parallel execution, SQL pushdown
150
+ - ML-based caching layer for expensive operations
151
+
152
+ ### Anomaly Detection
153
+ - 6 ML algorithms: IsolationForest, LocalOutlierFactor, DBSCAN, OneClassSVM, EllipticEnvelope, Ensemble
154
+ - Streaming anomaly detection support
155
+ - Explainability with feature contribution analysis
156
+ - Batch detection with progress tracking
157
+ - Algorithm comparison and agreement scoring
158
+
159
+ ### Drift Monitoring
160
+ - 5 detection methods: Kolmogorov-Smirnov, Population Stability Index (PSI), Chi-Square, Jensen-Shannon, Auto
161
+ - 4 sampling strategies: Random, Stratified, Reservoir, Systematic
162
+ - Column-level distribution comparison
163
+ - Drift trend visualization and alerting
164
+ - Root cause analysis and remediation suggestions
165
+
166
+ ### Data Lineage
167
+ - Interactive lineage graph visualization (D3.js/Mermaid/Cytoscape)
168
+ - Column-level lineage tracking
169
+ - Impact analysis (upstream/downstream)
170
+ - OpenLineage standard integration
171
+ - Webhook support for lineage events
172
+ - Performance optimization with lazy loading and virtualization
173
+
174
+ ### Schema Evolution
175
+ - Automatic schema change detection
176
+ - Breaking vs non-breaking change classification
177
+ - Version timeline and comparison
178
+ - Change notification support
179
+
180
+ ### Profile Comparison
181
+ - Profile-to-profile comparison
182
+ - Time-series trend analysis
183
+ - Quality metric visualization (null%, unique%)
184
+ - Historical profile snapshots
185
+
186
+ ### Rule Suggestions
187
+ - Profile-based automatic rule generation
188
+ - Confidence scoring (high/medium/low)
189
+ - Bulk rule application
190
+ - Category-based filtering (completeness, uniqueness, distribution, string, datetime)
191
+
192
+ ### Reports & Export
193
+ - 6 formats: HTML, PDF, CSV, JSON, Excel, Markdown
194
+ - Customizable themes for HTML/PDF reports
195
+ - Statistics dashboard (total reports, size, downloads, avg generation time)
196
+ - Search and filtering (by name, format, status)
197
+ - Report lifecycle management with automatic expiration
198
+ - Download tracking and batch cleanup
199
+ - Integration with validation schedules and notifications
200
+
201
+ ### Plugins & Extensions
202
+ - Plugin marketplace for community extensions
203
+ - 4 plugin types: Validators, Reporters, Connectors, Transformers
204
+ - 4 security levels: Trusted, Verified, Unverified, Sandboxed
205
+ - Custom validator creation with UI (severity, category, parameters)
206
+ - Custom reporter creation with template support
207
+ - Plugin lifecycle management (install, enable, disable, uninstall)
208
+ - Filter by type and status
209
+
210
+ ### Maintenance & System Health
211
+ - Auto maintenance scheduling with enable/disable toggle
212
+ - Retention policies with configurable ranges:
213
+ - Validation history: 1-365 days
214
+ - Profile snapshots: 1-100 per source
215
+ - Notification logs: 1-365 days
216
+ - Manual operations: cleanup, vacuum, cache clear
217
+ - Cache statistics monitoring (total, valid, expired entries, hit rate)
218
+ - Database optimization (VACUUM/ANALYZE)
219
+ - Real-time configuration updates
142
220
 
143
221
  ### Validation History
144
222
  - Historical record of validation results
145
223
  - Trend visualization
224
+ - Result versioning with 4 strategies (Incremental, Semantic, Timestamp, GitLike)
225
+ - Version comparison and rollback support
146
226
 
147
227
  ### Scheduling
148
228
  - Cron-based scheduling using APScheduler
@@ -153,11 +233,47 @@ The dashboard interface is accessible at `http://localhost:8765`.
153
233
  - Configurable notification rules based on validation outcomes
154
234
  - Notification delivery logs
155
235
 
236
+ ### Advanced Notifications
237
+ - 9 provider channels: Slack, Email, Webhook, Discord, Telegram, PagerDuty, OpsGenie, Microsoft Teams, GitHub
238
+ - Rule-based routing with 11+ rule types (severity, issue count, pass rate, time window, tag, data asset, metadata, status, error)
239
+ - Deduplication: 4 window strategies (Sliding, Tumbling, Session, Adaptive), 6 policies
240
+ - Throttling: 5 methods (TokenBucket, LeakyBucket, FixedWindow, SlidingWindow, Adaptive)
241
+ - Multi-level escalation with state machine
242
+ - Incident management and acknowledgment
243
+
244
+ ### Unified Alerts
245
+ - Cross-feature alert aggregation (validation, drift, anomaly, schema changes)
246
+ - Severity-based filtering (Critical, High, Medium, Low)
247
+ - Alert correlation and grouping
248
+ - Action tracking (acknowledged, resolved)
249
+
250
+ ### Cross-Table Validation
251
+ - Referential integrity checks
252
+ - Foreign key validation
253
+ - SQL-based cross-table queries
254
+ - Automated trigger configuration
255
+
256
+ ### Model Monitoring
257
+ - ML model performance tracking
258
+ - Metric monitoring (accuracy, precision, recall, F1, AUC-ROC)
259
+ - Alert rules for model degradation
260
+ - Model registration and versioning
261
+
262
+ ### Automated Triggers
263
+ - Data change detection triggers
264
+ - Composite triggers (AND/OR combinations)
265
+ - Cron-based scheduling
266
+ - Interval-based execution
267
+ - Preview and testing support
268
+
156
269
  ### Drift Detection
157
270
  - Dataset comparison using `th.compare`
158
- - 8 detection methods: auto, ks, psi, chi2, js, kl, wasserstein, cvm, anderson
159
- - Multiple testing correction: bonferroni, holm, bh
160
- - Column-level drift analysis with statistical metrics
271
+ - 5 detection methods: Kolmogorov-Smirnov (KS), Population Stability Index (PSI), Chi-Square, Jensen-Shannon (JS), Auto
272
+ - 4 sampling strategies: Random, Stratified, Reservoir, Systematic
273
+ - Column-level distribution comparison with visualizations
274
+ - Drift trend monitoring and alerting
275
+ - Root cause analysis and remediation suggestions
276
+ - Large dataset support with chunked processing
161
277
 
162
278
  ### Data Profiling
163
279
  - Statistical profiling using `th.profile`
@@ -195,21 +311,29 @@ The dashboard interface is accessible at `http://localhost:8765`.
195
311
  - Activity feed for tracking changes
196
312
 
197
313
  ### User Interface
198
- - Light and dark theme support
199
- - Internationalization: English, Korean
200
- - AI-powered translation for additional languages
314
+ - Light and dark theme support with system preference detection
315
+ - Internationalization: 2 built-in languages (English, Korean)
316
+ - AI-powered translation CLI to expand to 15+ languages (OpenAI, Anthropic, Mistral, Ollama)
317
+ - Type-safe translations using Intlayer framework
318
+ - Comprehensive E2E test coverage (197+ tests) for all features
201
319
 
202
320
  ## Internationalization
203
321
 
204
- truthound-dashboard implements internationalization using [Intlayer](https://intlayer.org), a modern i18n framework that provides type-safe translations with component-level content declaration. This architecture enables seamless multi-language support while maintaining code maintainability.
322
+ truthound-dashboard implements internationalization using [Intlayer](https://intlayer.org), a modern i18n framework that provides type-safe translations with component-level content declaration.
323
+
324
+ ### Built-in Languages
205
325
 
206
- ### Default Languages
326
+ The dashboard ships with **2 fully translated languages**:
327
+ - **English (en)** - Complete UI translation
328
+ - **Korean (ko)** - Complete UI translation
207
329
 
208
- The application ships with English and Korean translations. These languages are immediately available without additional configuration.
330
+ These languages are immediately available without additional configuration or setup.
209
331
 
210
332
  ### Extending Language Support
211
333
 
212
- For projects requiring additional language support, the `translate` command enables AI-powered translation of the user interface.
334
+ The dashboard can be extended to support 15+ additional languages using the AI-powered `translate` command. This CLI tool translates all UI content files from the built-in English and Korean to your target language.
335
+
336
+ **Note:** Additional languages are not included in the default installation and must be generated using the translation CLI before deployment.
213
337
 
214
338
  #### Supported AI Providers
215
339
 
@@ -0,0 +1,239 @@
1
+ truthound_dashboard/__init__.py,sha256=bzN84Y01SlEh5F8KkV-fGqPR82_tA0leAP6PyCXk8PY,504
2
+ truthound_dashboard/__main__.py,sha256=Zq98OmYZm4NJ7n2yG5Qr07fkSiwMEQQE20gG1fpW7wo,133
3
+ truthound_dashboard/cli.py,sha256=1x7AN2g9H5pZ4sG2PakCpSdBYnviknJv7LRIauAPzgU,19348
4
+ truthound_dashboard/config.py,sha256=fBSxoGitTe-9SeKkkQHtqNTcVxws5fvJ0YhF0EMuqG4,4089
5
+ truthound_dashboard/main.py,sha256=CuKB0Fueca4hfXLD8ONcDg6xnie71GToy0LjDiFZJrw,8847
6
+ truthound_dashboard/api/__init__.py,sha256=rnbuYRDgh0GcqkR-d9Trkc8L0O34K4tMH6flyeQ9U98,361
7
+ truthound_dashboard/api/alerts.py,sha256=uqrJJbQZZsjI7J3KYGANJDjhyAZP3v6nUhDR-UsU02o,7788
8
+ truthound_dashboard/api/anomaly.py,sha256=Isf3aoyoiLeZWjc-opPaMI0yG6WCehlfZita-jRsrjU,41482
9
+ truthound_dashboard/api/catalog.py,sha256=qQlsM4ubzjvI6rXwSY5214C-W93Ai-Xu1YjGVs1OoxE,10928
10
+ truthound_dashboard/api/collaboration.py,sha256=DxfpdUl_e8NfvDzv6-uwR32NN3Us7lLkzcif8RhvKyg,4720
11
+ truthound_dashboard/api/cross_alerts.py,sha256=e4HbJQbPKi6syaXqNGa4a9s0ATqtIUy36q59gq_aimk,9869
12
+ truthound_dashboard/api/deps.py,sha256=8rkHfe4zWEyv6CJCmXVn41t2zJNdS0KUvPeNoJEZ_80,8544
13
+ truthound_dashboard/api/drift.py,sha256=BYr_Iw2beKY0DNakoWTiLSEeXOnBUhmvBVvAsuewPWA,5725
14
+ truthound_dashboard/api/drift_monitor.py,sha256=BxaemeJFa4v1Q-fhmkKza9FcrX3gtuLYudZH6lVBABA,17235
15
+ truthound_dashboard/api/error_handlers.py,sha256=agovu0-CgMevgSvHh2aQnPjFpu1Wul_e67Vh9FAX_vM,8682
16
+ truthound_dashboard/api/glossary.py,sha256=Zdks7iHC9OLovgMJ28TELaET74OTQmUjP2TEwRLC8K4,10705
17
+ truthound_dashboard/api/health.py,sha256=84UPWmnS-9Fqs39SyRD2gu4QPE3ZJkaqkp5qCHkizsw,1927
18
+ truthound_dashboard/api/history.py,sha256=b6fy1pZfuwBqk3Yfeqnu8kaQcdNgWFMT7-0_29jLGOI,1792
19
+ truthound_dashboard/api/lineage.py,sha256=A8aq9zH7pDyucEstbwttyYrrbl--EWfNrUeOgqZVNtc,34982
20
+ truthound_dashboard/api/maintenance.py,sha256=amZEIGndy9bQRLaB_cPsFhfZFdaj5HzfpCnGxQU_UvM,10925
21
+ truthound_dashboard/api/mask.py,sha256=vIxTRI0LGYu49krwUS0iT4Y3maFJ6jo1QUerOdRr7LQ,4269
22
+ truthound_dashboard/api/middleware.py,sha256=JukJWCv1aCgDmkbiv8d9vlBZ1Ii_ETI_bjnCa-scnqE,32331
23
+ truthound_dashboard/api/model_monitoring.py,sha256=rIoFyg78Hnac0OXQ2fAN56WsNeFBfBKdZVaSNXPjHUs,26604
24
+ truthound_dashboard/api/notifications.py,sha256=U1_VvgzAI3x5aKRg3zces1UwpbN9g-Tt6WFaOJziNfc,16800
25
+ truthound_dashboard/api/notifications_advanced.py,sha256=sXsjrL2TJ1rAdFeo9jJb9bS9yU0KJPM1Kr-xr3uGFvc,86681
26
+ truthound_dashboard/api/plugins.py,sha256=VqzKtwHXac8D7hwwiR732fbs9r5kZVKE2E5Uy_xCBeI,64457
27
+ truthound_dashboard/api/profile.py,sha256=v422ArP9fSemE1TJZ0RaUeHUARHZp1dOYT_gqMuAbI8,8814
28
+ truthound_dashboard/api/reports.py,sha256=JgIyVPMHydIw4gO8rmAEPB6KKIqpdM84krs5udLNy-8,26526
29
+ truthound_dashboard/api/router.py,sha256=78K1oCCj2i7yO36u6yLaFv7CahrEKOuPbppPgeR1BUM,6395
30
+ truthound_dashboard/api/rule_suggestions.py,sha256=BzvMRSbuDdBAyXOZ59WJTzG3pfqEeK-emByM_LMCF78,9376
31
+ truthound_dashboard/api/rules.py,sha256=6xcE5g7w9e_mt4M_XS7egIa16zcynYmXctmyayAKICs,7453
32
+ truthound_dashboard/api/scan.py,sha256=ew2NYqq_lpl0mMA6CE9ajqViUSgjLiR1oGtRQsyvFTw,4827
33
+ truthound_dashboard/api/schedules.py,sha256=NMLU0szgZ2lGvVGuSJuEACZvc2qoeN65H-d2ANprj6E,8716
34
+ truthound_dashboard/api/schema_evolution.py,sha256=CR0l28KcU6jq9rlxRak-huDFmdNoTtJkxjsMZtnjzv4,6292
35
+ truthound_dashboard/api/schemas.py,sha256=vo9_X9nW2mn1NQKVu5-UZWV6T9STz5y4XIiJzSeyl1Y,4389
36
+ truthound_dashboard/api/sources.py,sha256=MNE2_ip-gdqbuwxKBe0AyQWGufimaS-pm2ljnr9u9xo,7171
37
+ truthound_dashboard/api/triggers.py,sha256=WA1mVOC7MyZEqR2ef6k-gRciwBFpMOK7L4BL0rT188o,5347
38
+ truthound_dashboard/api/validations.py,sha256=SKh4JmCwnIstrGWRyF0vk_atkoESd1t-oM5a5Wr-nU0,5375
39
+ truthound_dashboard/api/validators.py,sha256=gtiNGXhdIDpx0yUuZ0eED0INATNLio-_J4vv8J6A-PM,13246
40
+ truthound_dashboard/api/versioning.py,sha256=OpONUqKtbR13taFD0kQ4rZevcWLpe1-mdTL_27dUCiI,9951
41
+ truthound_dashboard/api/websocket.py,sha256=juc16AH9ZgG39IG8doYMBN5l_3ighlJ1L2RQIXNjMg0,8813
42
+ truthound_dashboard/core/__init__.py,sha256=Pw3Ldnu1Okaztp7G0yZq5sbJaouiG_DOhMA1dhEAUbs,7693
43
+ truthound_dashboard/core/anomaly.py,sha256=RRHN6D1xB-Gi8TluftLlZ_YwEtVFy2Vz5mONcBAjraA,46743
44
+ truthound_dashboard/core/anomaly_explainer.py,sha256=VDU7zGH4I59g1jZEgZ8opNMMmW5Cy_GLEHmE4NmJ9oU,22637
45
+ truthound_dashboard/core/base.py,sha256=Jp2NFNCacIt2DStGOSvyUYnx1wV-FqDkX9gLroCbo5I,5293
46
+ truthound_dashboard/core/cache.py,sha256=6LBvu-gdDoGylE2H7_-i-JvlXoQuKPwbXmcdGdAGfmk,21007
47
+ truthound_dashboard/core/cached_services.py,sha256=VwZ9qbg5ljyIbF3Ql7fpV6T3waWzYxATPmtC1dQQ7qk,11729
48
+ truthound_dashboard/core/charts.py,sha256=JzhVVMowR4znoXLqKglLBYiwEdUbKGDQ8HFV5PKbv-Q,10226
49
+ truthound_dashboard/core/connections.py,sha256=3Fg3IKy64pyzJPrljMl12UjAPVh7DiUci6Krnm0dvB4,47311
50
+ truthound_dashboard/core/cross_alerts.py,sha256=JB6aHIsfG4QczkdjIJ9CuITbH5J07-9lOfx789hsHW4,28666
51
+ truthound_dashboard/core/drift_monitor.py,sha256=dTXq9UqFxMcE2vTzVcwTufTtB4iU2AYUZVhLL1W3dao,54592
52
+ truthound_dashboard/core/drift_sampling.py,sha256=gLnFxmZjh7lwm_EATWcg0YE9iLq4MttyZcegufqUjxM,21835
53
+ truthound_dashboard/core/encryption.py,sha256=QMSbCPLtl9Vz2Cuxi8mZhEM_PlHzAxflGGEMRAXiByg,11130
54
+ truthound_dashboard/core/exceptions.py,sha256=VibhsFV9rtmT9VZ7gs63sZlsEGPTLP0CjxizglFUoHg,19336
55
+ truthound_dashboard/core/lineage.py,sha256=cpMI3N_Wm092Kgi3H2ADd1t86PlNMn3ZgdeIyUcx0_g,31085
56
+ truthound_dashboard/core/logging.py,sha256=Vom2C8ras6-3n7DYurKMyOqqv1L4ELq7iMTBOz_Rfyo,13392
57
+ truthound_dashboard/core/maintenance.py,sha256=bMXVJwu__KoEQJa_ti3nDxkwm0K3mYeQ1saDbq4EfyQ,33809
58
+ truthound_dashboard/core/model_monitoring.py,sha256=B5GCKsdSVzVOCIibp4aj8OYNe_TQaXcwkWR3mh73Ghw,33279
59
+ truthound_dashboard/core/openlineage.py,sha256=YFbG6NCQaLtJbydfuDZhrcFBJGafjcyB51fXHCh05yw,33136
60
+ truthound_dashboard/core/profile_comparison.py,sha256=H3ruQA0qcDBuELRyjn-U_E0Lb6p5K4sEMFKtajb_vtc,21919
61
+ truthound_dashboard/core/report_history.py,sha256=BBIQPEA68Gel8lFoh45UIA-lZUGSf3s0i17Fy_CFU3c,17534
62
+ truthound_dashboard/core/rule_generator.py,sha256=YAKU27k3U3D9j1dB1cshQNKZ6iFzgb2nsms8ugbBrvQ,80445
63
+ truthound_dashboard/core/sampling.py,sha256=K1GMFiHSDCvj1_xXVNG5Zl9rs0RfYry9Ew6u1FOHkJo,18445
64
+ truthound_dashboard/core/scheduler.py,sha256=4VZpvVnWBC9xoSd2_K-Y2GV_E-5wTzne64SVryKXVzI,40104
65
+ truthound_dashboard/core/schema_evolution.py,sha256=WhT4IrZTKcN3JWvKM3pDAWyyYaOcGxu50cd4fCrHn3w,27883
66
+ truthound_dashboard/core/services.py,sha256=QIVoV5VCGXKPj7j2UCrqTg82QgVs-IeOFnR1LrByAFA,62907
67
+ truthound_dashboard/core/statistics.py,sha256=wKTbyJJ-dDjRHrLFku6d1O-xYs7iGh_CksSiwiXFiIc,20918
68
+ truthound_dashboard/core/streaming_anomaly.py,sha256=u8G3Tb23DXVmDqjjXpRXq7w1G2g6hgb8hVOY_owPs6c,27349
69
+ truthound_dashboard/core/truthound_adapter.py,sha256=2eMuxxs1_VDLTCeajEiL6gCEXNXp3IxqZ7dJesa5aAM,36229
70
+ truthound_dashboard/core/unified_alerts.py,sha256=D0wH1KOeISvUbBLETA6mfyV3tHAkusXspUGWCKqM81w,30243
71
+ truthound_dashboard/core/validation_limits.py,sha256=ZtLp838kyV0vu3UnyBjS_jWM4_aLG5OpZorXhG-s-5o,17199
72
+ truthound_dashboard/core/versioning.py,sha256=igy-FfqeBCIc2V4SCZCWeONNOhLRTZZOwciNlkBroo4,22777
73
+ truthound_dashboard/core/i18n/__init__.py,sha256=tHatypmhKKc0Y4PQ2BWDnLLX4lWu_S1XdXkn0WX-3zw,1079
74
+ truthound_dashboard/core/i18n/detector.py,sha256=tcybGMRWuAaFwJhQ2IBoYtp3Knj8dnXttCfWywt_too,4856
75
+ truthound_dashboard/core/i18n/messages.py,sha256=dwEURuNvRwxpzbUc81aw57prEs3LXsyjRbN_OcE1gjk,24239
76
+ truthound_dashboard/core/notifications/__init__.py,sha256=zWE_fEKM-9KRxHtc68YCy9cKJLBQl1KxDrsfm6vazHM,1579
77
+ truthound_dashboard/core/notifications/base.py,sha256=9XoNRoECeFGq5bkJkorZefQ-pmwmgJxpZcWZg_PlaDc,12128
78
+ truthound_dashboard/core/notifications/channels.py,sha256=Yu3Tn8QxADxLy1DBvtrD-jwlcW-nrCb1tTX-P5MiFLw,53821
79
+ truthound_dashboard/core/notifications/dispatcher.py,sha256=U3j-3k9qsWh-ttgQaPEKXWRwWV4U5x9qWJbTr3sg4FI,15602
80
+ truthound_dashboard/core/notifications/events.py,sha256=7MiZX6V1k5F4_ub19lK3rd9G5NAWKFMUYuYxhEgTVt8,6501
81
+ truthound_dashboard/core/notifications/service.py,sha256=6QY7VOjeCgXkIIQZPmP4Yad7cw79Z9L8NSA4CnLTFkk,21229
82
+ truthound_dashboard/core/notifications/stats_aggregator.py,sha256=9DcxKgZ8xpXjyjQ1xi0JW4Q7PCRIc7vGxkm78vnJX7I,28310
83
+ truthound_dashboard/core/notifications/deduplication/__init__.py,sha256=9l7WzLANlHmInBjlpdD0K0A_TzlpCRpXEAPXN3H6w44,4194
84
+ truthound_dashboard/core/notifications/deduplication/policies.py,sha256=-dOS7sAnC_8XRWu0JgrQZuWyHL9hhVqEKNmXwtQ8RF0,8341
85
+ truthound_dashboard/core/notifications/deduplication/service.py,sha256=_3OQFsSal9QPPhfZvabwp3pr7QX6rA8s_ZQgBXQLUoE,12440
86
+ truthound_dashboard/core/notifications/deduplication/stores.py,sha256=CYRoNFjopTLy4sY1PJKZB1wwbtGC51XUflsYoor8c-4,78245
87
+ truthound_dashboard/core/notifications/deduplication/strategies.py,sha256=qjRFPtSYtMjnNUYL98YlR-g0sSePaVpjadwYKlg8nqA,13732
88
+ truthound_dashboard/core/notifications/escalation/__init__.py,sha256=AIarS19BFGa57JR26f1NXXICReWA1BOlrSS3vqDw83g,3922
89
+ truthound_dashboard/core/notifications/escalation/backends.py,sha256=oEW980bUN24V-nFzVaxucaw_jnD11g921IGBXRs7Hv0,46037
90
+ truthound_dashboard/core/notifications/escalation/engine.py,sha256=Tq2T2QBHjelRZTsk2f1NDsFMd9cRIuV6v5-5iB74U6I,13310
91
+ truthound_dashboard/core/notifications/escalation/models.py,sha256=vb1MYW0qOlZ2kr4n0R96pCRZP4fKIdYJcOSOjwUih-Y,11258
92
+ truthound_dashboard/core/notifications/escalation/scheduler.py,sha256=FCCC4BLxeml-fwmxYNG6R5r8vkX26pw3jfxco0hXjWU,40975
93
+ truthound_dashboard/core/notifications/escalation/state_machine.py,sha256=yD50FX7JVoV5cayJXYhQsy8wImyeeNQgUmjAE4bYolk,9475
94
+ truthound_dashboard/core/notifications/escalation/stores.py,sha256=FBOXhbMkQgFOwYls9QjJNundv8BQYQtuxTPOQe6HujM,99375
95
+ truthound_dashboard/core/notifications/metrics/__init__.py,sha256=pSXSeboGmhwLXTFL5WA9O9qg32zcf7B8yi_Y6I-X-4s,3382
96
+ truthound_dashboard/core/notifications/metrics/base.py,sha256=lENdy50D0C9VUvXlQHCvWItDJUOCMDi-N8TqqgRzRRE,15964
97
+ truthound_dashboard/core/notifications/metrics/collectors.py,sha256=fC2-hcFWr_u6-LxIWkTBnp2etrUMSaXcESdVv8Nu-oE,18209
98
+ truthound_dashboard/core/notifications/routing/__init__.py,sha256=9pMf_o_JkXQRKQhx0f95WI9FM53BNIJtmq6LEoUkmdo,4259
99
+ truthound_dashboard/core/notifications/routing/combinators.py,sha256=WaECXlj_cytnhzUq6ktGTEPG3Ebt2orAI2XoWFmLRAM,4970
100
+ truthound_dashboard/core/notifications/routing/config.py,sha256=sPvyP0utmtXeV44iPrrWsHmx9fo-6CGbQ4aj1paG8N0,11088
101
+ truthound_dashboard/core/notifications/routing/config_parser.py,sha256=FXTeGYVDDGW1qfed-LeBdCxfT7LFt7dlObQ0Vg_ogQU,27439
102
+ truthound_dashboard/core/notifications/routing/engine.py,sha256=1HMLJGx-k6s957V00uYMKx6l5Bi1mx1PshfKU83E13k,11652
103
+ truthound_dashboard/core/notifications/routing/expression_engine.py,sha256=MTCqVXKSgfRip_A8e-L-JU4CF1SnNxik67FFb-MOELQ,41219
104
+ truthound_dashboard/core/notifications/routing/jinja2_engine.py,sha256=ZYRvzJ9OyxpJVgXuA6VcIwX3TP4Cy5-EjQCaup7s_FQ,24260
105
+ truthound_dashboard/core/notifications/routing/rules.py,sha256=ThLykcfdJjz1v1bDz8nWXxO7tyWbYBslv7T3rXq-RsM,18228
106
+ truthound_dashboard/core/notifications/routing/validator.py,sha256=CPAKdUE2TR62xw4yQe45HANXYNCLR-uPwOd5EnAc2Is,23096
107
+ truthound_dashboard/core/notifications/throttling/__init__.py,sha256=ge_I1qCG8wLnBRzHhE66zEA7QaLp_8ascG4q9hYTQWQ,2001
108
+ truthound_dashboard/core/notifications/throttling/builder.py,sha256=qr_47Zv_Kn2kPW-BOwSVNMRB6z8jnnXd8CpSQox6Qb4,8357
109
+ truthound_dashboard/core/notifications/throttling/stores.py,sha256=iQiZ_pRdedti-6DXBhaWreNvo4GigEhxVCnzGIcI-20,61556
110
+ truthound_dashboard/core/notifications/throttling/throttlers.py,sha256=sbXmocdxBRTEGS3zreoRqtnAKN1awJnkKAmxsG1J4wM,19779
111
+ truthound_dashboard/core/phase5/__init__.py,sha256=-TNyj28lQC1YjoUtBBJj3ztksN65820Y-BWZRGIEOWA,447
112
+ truthound_dashboard/core/phase5/activity.py,sha256=cHheGj0-1zzWk_L0XdbJvTE8J24JVa3OnjP5Ulqieck,4281
113
+ truthound_dashboard/core/phase5/catalog.py,sha256=hLVaIHxe9BxNp2Tdf7Ru-IIH-xDqUOOitN17zQmLuis,24241
114
+ truthound_dashboard/core/phase5/collaboration.py,sha256=5c2UXVZDGGTkAZ3N3onagNof-hza31tE1ak8t5uM4o0,8331
115
+ truthound_dashboard/core/phase5/glossary.py,sha256=6v3hYXpCQTZ5xaFwBM0IrXMiOeW4giNldHIjdY88ROA,24751
116
+ truthound_dashboard/core/plugins/__init__.py,sha256=lVHwP95jKBrYks7uy3c7JaI1zr2tXfwx4VdWvA6si4Y,1007
117
+ truthound_dashboard/core/plugins/loader.py,sha256=-hM8jR8Dp015_0DBYGs5f65ZbQDNvVZH5AeMxDrZprU,15834
118
+ truthound_dashboard/core/plugins/registry.py,sha256=7DjHTbXItIla52_cj5_6NFQkoY2wwxbAX5y7IXVWkwk,25191
119
+ truthound_dashboard/core/plugins/reporter_executor.py,sha256=oybeBivTLcH8PX2sq775otDY3VadLbMPbtYGD8KTTiI,17187
120
+ truthound_dashboard/core/plugins/sandbox.py,sha256=gDYE5gAQzmdJ2ghfE8G4HPJtfNuUgBroKvg5-stHEqQ,17503
121
+ truthound_dashboard/core/plugins/security.py,sha256=58I0_UIe0UisZ2L28vH0N2PV4ljZKp6t--Y0gLrdAns,13378
122
+ truthound_dashboard/core/plugins/validator_executor.py,sha256=7E3LEve5PU35PQAGalvwd4e7FGITeK_vjSM8P3klQbY,12342
123
+ truthound_dashboard/core/plugins/docs/__init__.py,sha256=Zctl7Nz3YE1sEHflZHojldiJqIb7VVWp5LGcajJm-eg,739
124
+ truthound_dashboard/core/plugins/docs/extractor.py,sha256=Bt4x3tBIwapQDFkHeIqx-f_6efLfAvgvcOhly_oZQwY,24228
125
+ truthound_dashboard/core/plugins/docs/renderers.py,sha256=NYBHT12iIoug6C7uNoS2IWjyADa-QGFKedwoPRi8gGo,26618
126
+ truthound_dashboard/core/plugins/hooks/__init__.py,sha256=3_U92_JS00TdvLICWdzkotMPq22If8vtS7QhFXxrscA,1402
127
+ truthound_dashboard/core/plugins/hooks/decorators.py,sha256=8pW68xB9Qlq9DrkF1Sp8wlKFyerwPMWa4l0LhUbmAv0,11406
128
+ truthound_dashboard/core/plugins/hooks/manager.py,sha256=-jgTGGyqsQiSL6PVfQEJBaoSIiq8N5jaP_xKmlC4rmk,11945
129
+ truthound_dashboard/core/plugins/hooks/protocols.py,sha256=8SgUCLfQbniKzT8T6NNa0vVd2LXMePDCejeRhM_aIs0,7529
130
+ truthound_dashboard/core/plugins/lifecycle/__init__.py,sha256=cgg-rZj-ZOgUgLwWAtzJ5gF539WR_xd3lRbWNt2rq2w,758
131
+ truthound_dashboard/core/plugins/lifecycle/hot_reload.py,sha256=jY5gLBKt_OXF9KppuwNAcok1iVI_BYUkoBWUerpCQf4,18576
132
+ truthound_dashboard/core/plugins/lifecycle/machine.py,sha256=_m5kYdzFNat2Kkfzi66bvIv7kPim7s16KI59EOBtSxc,12959
133
+ truthound_dashboard/core/plugins/lifecycle/states.py,sha256=I1p8xV2GRyveEypwJGQ3pCjBWzCuGnX-DzBdzmyqx2w,6917
134
+ truthound_dashboard/core/plugins/sandbox/__init__.py,sha256=U6v3fnosgHZdmUci73gxP3erR78G1uVmlSd5Pu48Jl8,1272
135
+ truthound_dashboard/core/plugins/sandbox/code_validator.py,sha256=PRpScZbUmWkbbLi2pbQkkrvobQv3XTx2e2ZcuY_5Qn0,7664
136
+ truthound_dashboard/core/plugins/sandbox/engines.py,sha256=Gt14Fv1JFE9k1pOytGQEhMq49gFfYfzeaIBUsNOF0qM,24174
137
+ truthound_dashboard/core/plugins/sandbox/protocols.py,sha256=TVEnpzII81-lySsQaJmHRJ8IbY00YAbh-gemke1UBx8,7220
138
+ truthound_dashboard/core/plugins/security/__init__.py,sha256=bwqvZViNhZP7WD2htc0Zr0DG8s1EscwWuteIKF0vLVA,1440
139
+ truthound_dashboard/core/plugins/security/analyzer.py,sha256=pwj9SW_8-L-kEzJ3LLHOZrs6X0JCGVjUv7JV8mn7avk,18159
140
+ truthound_dashboard/core/plugins/security/policies.py,sha256=pjbkPJ2mvDSzi7cosY-RxzsycHTcxwDulC5eOr28sYE,11114
141
+ truthound_dashboard/core/plugins/security/protocols.py,sha256=vEtSnQLJtXdcrjLhznnf75mcE0OztHXpp9qHd1UqYRs,10362
142
+ truthound_dashboard/core/plugins/security/signing.py,sha256=6fBZ6XM348EUEclpJYZthRfIWoJ2Ho9clUkz0fFzNuE,25975
143
+ truthound_dashboard/core/plugins/versioning/__init__.py,sha256=Iw-1iVNrq9I3kfqzUI3RW2uqxyvPdJX2o9xJvpit6Vc,1063
144
+ truthound_dashboard/core/plugins/versioning/constraints.py,sha256=eGX_-KbJJ9CWc7u2UlWrBQ1VTvsW-KBBRSLBxBMJuPc,10839
145
+ truthound_dashboard/core/plugins/versioning/dependencies.py,sha256=gacGIe2xHNnps6JYhHWugUfvClhMBmpFkEVrwYV00Os,16839
146
+ truthound_dashboard/core/plugins/versioning/semver.py,sha256=8zBWYxXTpuTRsUiu6VrEkNiK3_01fQBX73JZn4LjIAg,8019
147
+ truthound_dashboard/core/reporters/__init__.py,sha256=sabF7o5vbo1iQLclWbchK9ajQGVNB61LOESU4CK6ZHw,1470
148
+ truthound_dashboard/core/reporters/base.py,sha256=9BYdWO6gUNX7bMmg9gNvuod_q-iRlRCwsaVA6vKjYqw,8652
149
+ truthound_dashboard/core/reporters/csv_reporter.py,sha256=vn6lVO3yzXveE3SYYyMN9jC4vRZKh679s6x3AOj0fIs,4921
150
+ truthound_dashboard/core/reporters/html_reporter.py,sha256=r7CScjtSQrvVJDZFbMwH7bFI1EZLF9xAAF1h5blmNbQ,18321
151
+ truthound_dashboard/core/reporters/json_reporter.py,sha256=oo_qXvili7M-EWu2rrdFXRf92fyO9Xj3cU2q6YuT8-w,4924
152
+ truthound_dashboard/core/reporters/junit_reporter.py,sha256=DmTL9Hj3W3G5pVTSyQ4sxM8OY-6yFcs9TnZ1g6GahCM,8945
153
+ truthound_dashboard/core/reporters/markdown_reporter.py,sha256=8Z39eX4BVts9lbpqqJmZ1NW1rkRhugpt2POD13UDHbk,6190
154
+ truthound_dashboard/core/reporters/pdf_reporter.py,sha256=aUwn2VTNUCmqBAPYpYffDMFw-JaROABbmEHevxybK3E,5785
155
+ truthound_dashboard/core/reporters/registry.py,sha256=tiFFZoufrxnWdX-PsQ42njUKvljoqes5Kk-G2jS8cOk,8134
156
+ truthound_dashboard/core/reporters/i18n/__init__.py,sha256=FxckZQMiQ6-lN3JzOndeJzp2yaswpewaerg8a9W47Go,1553
157
+ truthound_dashboard/core/reporters/i18n/base.py,sha256=89V_vM1xiKiZu1BRRGfi96bmuQFF_wQkiptlnqb3rMc,16308
158
+ truthound_dashboard/core/reporters/i18n/catalogs.py,sha256=ny7V60Oot1MKh9gkkZ_YpA1qaoPB42abDFDBIYutRcM,35321
159
+ truthound_dashboard/core/triggers/__init__.py,sha256=nxAO37X_S7CLw7CQFMwjEsaRmKbGvZvILvIggKMF5qI,1077
160
+ truthound_dashboard/core/triggers/base.py,sha256=r6BHa2cHWdkPVk0HRHFJyN8woOh-M8P9NIH5kwhw_d0,6486
161
+ truthound_dashboard/core/triggers/evaluators.py,sha256=xLzwXF2pM4OQWz8_8z00k-IfSAHiCABtQVjVckkd-7g,21722
162
+ truthound_dashboard/core/triggers/factory.py,sha256=JeUPEhZQQYXEaVlABwdMSR9R4GJlGOaNwM3NTQ_c640,11847
163
+ truthound_dashboard/core/websocket/__init__.py,sha256=tZx9jk3i__ZUb9K16tc--zf5OVvgA6Sh_Zhlh9PjX-s,1505
164
+ truthound_dashboard/core/websocket/manager.py,sha256=y_pLWwE93ee6N2gIqKaiGvyfnVw62nL8fTyROjYUFRg,14847
165
+ truthound_dashboard/core/websocket/messages.py,sha256=_AwY_rm1gSb1AmyMgBeVCYm5MRKnxkZbTfivevQGi4s,3929
166
+ truthound_dashboard/db/__init__.py,sha256=AzuuU-pWTnYqH_WUCS7coniWK81j1r7go9cGTPcvWl4,2957
167
+ truthound_dashboard/db/base.py,sha256=nj6DbYxAl5JoY0hC5rtM7pshOKpe-OH-AFsQqPGQzsM,2832
168
+ truthound_dashboard/db/database.py,sha256=yQ9FsQSi29HvvW0t6BrkyX5YcHijRJEjGTTGfcCCw10,5078
169
+ truthound_dashboard/db/models.py,sha256=Wv93Xk5Dxhq5nF4WDHWrMPp6xbpY_ZaOmHmsfQdeBbc,175626
170
+ truthound_dashboard/db/repository.py,sha256=48AJd65rwTSt1XqTN4vUeJ8nk416buE254JqipDCEEE,6890
171
+ truthound_dashboard/schemas/__init__.py,sha256=e3SXeKquiVFFYW8yc7-lOa70nXQg8qyMqwbFxOI4eb0,16500
172
+ truthound_dashboard/schemas/anomaly.py,sha256=6UEbL-O6f9qoZjvebzQ8s0UQ-T5_RE45AsdWXLIDm-4,45825
173
+ truthound_dashboard/schemas/base.py,sha256=Q54unYOGWv_k3fhT8hHzVA6nwLhfDAF-ws71-IZscqg,3061
174
+ truthound_dashboard/schemas/catalog.py,sha256=Gc0ky7kuWyo7naJqyyJe-S9JDF5Ge_c9oeVpUEarQqw,10556
175
+ truthound_dashboard/schemas/collaboration.py,sha256=xUsfK7PuNyCjD8vx4CqfktuYqkYY8oyJMe-JPJgo4uc,4873
176
+ truthound_dashboard/schemas/cross_alerts.py,sha256=1tatU5MKwp72F4uHTDelHb1lIcAEkh030-IWzn9clX8,10528
177
+ truthound_dashboard/schemas/drift.py,sha256=lvrTkYzxB9YxOYHNm40KThEM0cEjKw9UZk0i8REAqG0,8353
178
+ truthound_dashboard/schemas/drift_monitor.py,sha256=t6roREKJuxyZItRWUy1jEj19en1LPI_B79vMj4BwKkU,27901
179
+ truthound_dashboard/schemas/glossary.py,sha256=pY35k4zIf_4FYsdElD5fZJdJsPPQCn0Kk-EdwF8OCmI,10240
180
+ truthound_dashboard/schemas/history.py,sha256=OVzBmbw7uz0C4IWt43P8QxNl9_OO_-WZRdA7L44_9yo,2771
181
+ truthound_dashboard/schemas/lineage.py,sha256=ADrloeXqzWmgPH_x6L6wBaStjlhy2BY4AY2Vqp8CGQs,12633
182
+ truthound_dashboard/schemas/maintenance.py,sha256=FjD04Psq7QoNXPN23MKHJdqm7wgPlL3tnt-6QiVIKoY,4899
183
+ truthound_dashboard/schemas/mask.py,sha256=qOWMUEv2KNqACG4LcVN5n6Xq_hPqXmdM34JachB_SC0,6412
184
+ truthound_dashboard/schemas/model_monitoring.py,sha256=J0gbFnqzgUMPSPSCVgZJ1v_jx1Sc7pdU7e7AuQ5SYUg,14272
185
+ truthound_dashboard/schemas/notifications_advanced.py,sha256=yhQj-18_VsEhyLBfFGMsaGXkIl-pKfSuh2cUtxunkUo,45649
186
+ truthound_dashboard/schemas/openlineage.py,sha256=uLH5oIVKGfWiXRhTq8AggPlSgtB_gmPrJneUgXpXLqo,21675
187
+ truthound_dashboard/schemas/plugins.py,sha256=teCOO_N477MqpWvoHDLaUue9caRiKMudrCV_kiKzXjY,40318
188
+ truthound_dashboard/schemas/profile.py,sha256=q4r6p7CJ9bCC-fN3q4n6sKYbkZMffmGvFhijCAC75_k,18525
189
+ truthound_dashboard/schemas/profile_comparison.py,sha256=tDZhVs7fsUgSCDpec_V5v3Kn3LWOAxODvajzgtLtA2s,9173
190
+ truthound_dashboard/schemas/reports.py,sha256=2tuBJWAJ2jbLRvRE-4-vS4KSwKSrqVm1QUoPz1sO9nM,10916
191
+ truthound_dashboard/schemas/rule.py,sha256=eIx9CdQ-gC6i-BpVsX714y-l0-TWY6VOVr0nSTkn_bk,5207
192
+ truthound_dashboard/schemas/rule_suggestion.py,sha256=Ml_uX3MdQIagWCON9fpJ9BiRixgEO27Bqoct82jluEM,15149
193
+ truthound_dashboard/schemas/scan.py,sha256=v4kvUaoHSvrnPAOE-6KY_IABo5Kuk99jljujT36ggoM,9032
194
+ truthound_dashboard/schemas/schedule.py,sha256=JkXPPqkhkIldBp_JwMD73Vlvq2h4Gq1BighnUVQdjuc,2796
195
+ truthound_dashboard/schemas/schema.py,sha256=u6CI3wvK-h075zrjYVO-SsZ2Cdodjd1HdDSIPJ6abno,4980
196
+ truthound_dashboard/schemas/schema_evolution.py,sha256=al110n2SgM0xxpohWSdQMuEq6dRbIZRb0EvQV-nUJiE,5837
197
+ truthound_dashboard/schemas/source.py,sha256=3Wx17KlUzV5YBOIagt6ekYVeWAwbfC-gwkUr5asltl8,7809
198
+ truthound_dashboard/schemas/triggers.py,sha256=dIJghugFTccrKp1deCgoEP6UVQEEqIGeXXElBwK1Jls,16123
199
+ truthound_dashboard/schemas/unified_alerts.py,sha256=x9efcfy71hxPho6rpGwOmoJXgW3sdJ8ZrqA4YAwti78,7576
200
+ truthound_dashboard/schemas/validation.py,sha256=xyKZlF2ftIfaHwM1Gx8JFdaDdWf5dthw5_89rZeSkn4,9625
201
+ truthound_dashboard/schemas/validators.py,sha256=viqMl-6f8Bnp1488__PHeQUrK5yEFwUO6Z1EXtMoJ1k,1502
202
+ truthound_dashboard/schemas/versioning.py,sha256=gZob-ToosgYTHibf93FqNoIgum_gJMTYtdK-PbFwO_g,5617
203
+ truthound_dashboard/schemas/validators/__init__.py,sha256=rHePThM54k9t-y8lA5zp-2W1TWGNwhoZjdSITjnbFAE,1762
204
+ truthound_dashboard/schemas/validators/aggregate_validators.py,sha256=mJDiHHL8QlUOjtfVCgizTYVAXeoz3apyxndiWV7ArNM,8247
205
+ truthound_dashboard/schemas/validators/anomaly_validators.py,sha256=xYKi3BiH9FTAqHk7ETvPkbT21aAkqkrlC6kdD0S9Cvs,25557
206
+ truthound_dashboard/schemas/validators/base.py,sha256=EME6vAC3XsVmBrlUQjbB__5V6bP3XEc6D3lOOlprbkg,15531
207
+ truthound_dashboard/schemas/validators/completeness_validators.py,sha256=SfvYvErk88syGGMJqy3iSGVvSwqWhgIQZEU4VRzN3oQ,9650
208
+ truthound_dashboard/schemas/validators/cross_table_validators.py,sha256=TrBc6kPhvCjcqEMwFYz1MYBYYV5ULeCHoS8ogp3WIbI,14720
209
+ truthound_dashboard/schemas/validators/datetime_validators.py,sha256=KqUgXgxlUJOFC5Xz2QzuDzyZXn7jsZ-S2Fm978b8-n0,8278
210
+ truthound_dashboard/schemas/validators/distribution_validators.py,sha256=0foHX8aqFmtP9IoecSZa9uKF_so1Zaef3kC5rynhx0k,14442
211
+ truthound_dashboard/schemas/validators/drift_validators.py,sha256=IUp75AK-D7yq3KIL-zMCYNzCKXrBxqBe4KOLkZaR46Y,21602
212
+ truthound_dashboard/schemas/validators/geospatial_validators.py,sha256=EVyG0DjBi2ImJXY5C1va5YUieLhLsRmpAgn0Hp3brFU,16706
213
+ truthound_dashboard/schemas/validators/multi_column_validators.py,sha256=-fVAtahptvIqG686o1YR_lg7OSZHfCv5CGlwwgyPwJk,25586
214
+ truthound_dashboard/schemas/validators/privacy_validators.py,sha256=KGAeQum91ayP3WIPBCVhajspUctqWS8HyfotDsL26x8,20121
215
+ truthound_dashboard/schemas/validators/query_validators.py,sha256=bVoD7JneRSKyJENs4NDMQI8TgVmj_uomuvt4l2MlEK8,18018
216
+ truthound_dashboard/schemas/validators/registry.py,sha256=_3praUHNT1V_mZcufqro48dfEg9oR8MrEjy2Z0X6jKw,9304
217
+ truthound_dashboard/schemas/validators/schema_validators.py,sha256=o7f-6pvjX95D29gDkHpQh4PvvGd2p0wsvknqY_16gkc,15290
218
+ truthound_dashboard/schemas/validators/string_validators.py,sha256=28Jm-6ioe4N2QQzC7Nqu4VJje8ZCUWb-m4bX-3Ysvjk,13064
219
+ truthound_dashboard/schemas/validators/table_validators.py,sha256=hIt5LcGZ05QZMKPNI5J5SEWfUJfejeO7e1Q7DP3nX8k,13967
220
+ truthound_dashboard/schemas/validators/uniqueness_validators.py,sha256=Y23ts3FAAuhluXqz8bdFW8VMN5HZIOM7Nz9Hub0ehRw,12110
221
+ truthound_dashboard/static/favicon.ico,sha256=T9BJXnpyq6t6lpFHd6ivEimWF2uGFzwxDeTDyz2UVmQ,15406
222
+ truthound_dashboard/static/index.html,sha256=FOVfkV8SOJJNTbA_BPnOQxcdW3KBbFRxZ23jKspIVpo,568
223
+ truthound_dashboard/static/assets/logo--IpBiMPK.png,sha256=c7ne4oaZ1BpQR5yP2TVYoAE1s1vS7lRPxgWP1pzUMYE,213715
224
+ truthound_dashboard/translate/__init__.py,sha256=Mv_xtMk4SaBGUsMgJqhwARnkJkZdq4OhJi5HdpdsBnw,1458
225
+ truthound_dashboard/translate/config_updater.py,sha256=AtJ7ero4cHKwUYQRDbGaPAlLmcyBv0IeBewdiTo0X8c,12038
226
+ truthound_dashboard/translate/exceptions.py,sha256=kPxCN2n_wYl3m6jVg_DRO8pagr55YpPU2e3Dt0YVQhc,3244
227
+ truthound_dashboard/translate/translator.py,sha256=2S35k_cJC1TXy-1XpAIDJZPI5_hKimeX3mNZ3osazik,14228
228
+ truthound_dashboard/translate/providers/__init__.py,sha256=zhG3eycCO2LCl9AVtRqvtqkIrjsTUqaftsN6YhZCpVw,1187
229
+ truthound_dashboard/translate/providers/anthropic.py,sha256=rBF2ueKqVunGrCYSyIDZGTzra1mK7-FOh7vACqg7nis,4522
230
+ truthound_dashboard/translate/providers/base.py,sha256=gYMjv5x1ICpZ-jFzv28tsJc7uTvkm8EVgDlTznbvAVQ,6490
231
+ truthound_dashboard/translate/providers/mistral.py,sha256=j0oh_mGksdMuIfbuZKq0yon6G6oabbO7fTgQzsKEZ7k,4692
232
+ truthound_dashboard/translate/providers/ollama.py,sha256=XlAHE14VvdSPKFbrJIbB3KUHzrgQm0Zj08snL71otUQ,7286
233
+ truthound_dashboard/translate/providers/openai.py,sha256=AeaOfRjNgCIgBdcX1gcYqqf41fXeEIyN3AiLAOy3SZc,6760
234
+ truthound_dashboard/translate/providers/registry.py,sha256=iwfcWYJ2uKfwWjsalhV4jSoyZC7bSeujK6sTMuylMMY,6474
235
+ truthound_dashboard-1.4.1.dist-info/METADATA,sha256=_ZI-OI3RfBZiKkrHAQ4fj7C_P2lViRAhibQgXmCWnAM,18613
236
+ truthound_dashboard-1.4.1.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
237
+ truthound_dashboard-1.4.1.dist-info/entry_points.txt,sha256=Xq8qadJ-Sqk4_0Ss_rhCqCv7uxPZZdwO3WUnbK0r6Hw,135
238
+ truthound_dashboard-1.4.1.dist-info/licenses/LICENSE,sha256=qrBWTDMS8ZvwVJl3Yo2n8_AxOos3s8S9pcOzLW5Nivg,10763
239
+ truthound_dashboard-1.4.1.dist-info/RECORD,,