detectkit 0.62.0__tar.gz → 0.62.1__tar.gz

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. {detectkit-0.62.0/detectkit.egg-info → detectkit-0.62.1}/PKG-INFO +3 -2
  2. {detectkit-0.62.0 → detectkit-0.62.1}/README.md +2 -1
  3. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/__init__.py +1 -1
  4. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/cli/assets/claude/rules/cli.md +7 -0
  5. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/cli/assets/claude/rules/overview.md +3 -2
  6. {detectkit-0.62.0 → detectkit-0.62.1/detectkit.egg-info}/PKG-INFO +3 -2
  7. {detectkit-0.62.0 → detectkit-0.62.1}/LICENSE +0 -0
  8. {detectkit-0.62.0 → detectkit-0.62.1}/MANIFEST.in +0 -0
  9. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/alerting/__init__.py +0 -0
  10. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/alerting/channels/__init__.py +0 -0
  11. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/alerting/channels/base.py +0 -0
  12. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/alerting/channels/branding.py +0 -0
  13. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/alerting/channels/discord.py +0 -0
  14. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/alerting/channels/email.py +0 -0
  15. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/alerting/channels/factory.py +0 -0
  16. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/alerting/channels/googlechat.py +0 -0
  17. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/alerting/channels/mattermost.py +0 -0
  18. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/alerting/channels/ntfy.py +0 -0
  19. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/alerting/channels/slack.py +0 -0
  20. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/alerting/channels/teams.py +0 -0
  21. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/alerting/channels/telegram.py +0 -0
  22. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/alerting/channels/webhook.py +0 -0
  23. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/alerting/orchestrator/__init__.py +0 -0
  24. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/alerting/orchestrator/_base.py +0 -0
  25. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/alerting/orchestrator/_cooldown.py +0 -0
  26. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/alerting/orchestrator/_decision.py +0 -0
  27. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/alerting/orchestrator/_dispatch.py +0 -0
  28. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/alerting/orchestrator/_recovery.py +0 -0
  29. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/alerting/orchestrator/_replay.py +0 -0
  30. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/alerting/orchestrator/_types.py +0 -0
  31. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/alerting/orchestrator/orchestrator.py +0 -0
  32. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/autotune/__init__.py +0 -0
  33. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/autotune/_base.py +0 -0
  34. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/autotune/_types.py +0 -0
  35. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/autotune/autotuner.py +0 -0
  36. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/autotune/axis_spec.py +0 -0
  37. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/autotune/config_emitter.py +0 -0
  38. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/autotune/crossval.py +0 -0
  39. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/autotune/detector_select.py +0 -0
  40. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/autotune/distribution.py +0 -0
  41. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/autotune/grid_search.py +0 -0
  42. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/autotune/labels.py +0 -0
  43. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/autotune/result.py +0 -0
  44. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/autotune/runner.py +0 -0
  45. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/autotune/scoring.py +0 -0
  46. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/autotune/seasonality_search.py +0 -0
  47. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/autotune/settings.py +0 -0
  48. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/autotune/window_select.py +0 -0
  49. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/cli/__init__.py +0 -0
  50. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/cli/_output.py +0 -0
  51. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/cli/assets/claude/CLAUDE.section.md +0 -0
  52. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/cli/assets/claude/rules/alerting.md +0 -0
  53. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/cli/assets/claude/rules/autotune.md +0 -0
  54. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/cli/assets/claude/rules/detectors.md +0 -0
  55. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/cli/assets/claude/rules/metrics.md +0 -0
  56. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/cli/assets/claude/rules/project.md +0 -0
  57. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/cli/assets/claude/skills/dtk-autotune/SKILL.md +0 -0
  58. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/cli/assets/claude/skills/dtk-feedback/SKILL.md +0 -0
  59. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/cli/assets/claude/skills/dtk-new-metric/SKILL.md +0 -0
  60. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/cli/assets/claude/skills/dtk-setup-project/SKILL.md +0 -0
  61. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/cli/assets/claude/skills/dtk-tune/SKILL.md +0 -0
  62. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/cli/commands/__init__.py +0 -0
  63. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/cli/commands/autotune.py +0 -0
  64. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/cli/commands/clean.py +0 -0
  65. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/cli/commands/init.py +0 -0
  66. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/cli/commands/init_claude.py +0 -0
  67. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/cli/commands/mcp.py +0 -0
  68. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/cli/commands/osi.py +0 -0
  69. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/cli/commands/run.py +0 -0
  70. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/cli/commands/test_alert.py +0 -0
  71. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/cli/commands/tune.py +0 -0
  72. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/cli/commands/ui.py +0 -0
  73. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/cli/commands/unlock.py +0 -0
  74. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/cli/main.py +0 -0
  75. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/config/__init__.py +0 -0
  76. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/config/metric_config.py +0 -0
  77. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/config/metric_io.py +0 -0
  78. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/config/profile.py +0 -0
  79. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/config/project_config.py +0 -0
  80. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/config/validator.py +0 -0
  81. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/core/__init__.py +0 -0
  82. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/core/interval.py +0 -0
  83. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/core/models.py +0 -0
  84. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/database/__init__.py +0 -0
  85. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/database/_sql_manager.py +0 -0
  86. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/database/clickhouse_manager.py +0 -0
  87. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/database/duckdb_manager.py +0 -0
  88. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/database/internal_tables/__init__.py +0 -0
  89. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/database/internal_tables/_alert_states.py +0 -0
  90. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/database/internal_tables/_autotune_runs.py +0 -0
  91. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/database/internal_tables/_base.py +0 -0
  92. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/database/internal_tables/_datapoints.py +0 -0
  93. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/database/internal_tables/_detections.py +0 -0
  94. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/database/internal_tables/_maintenance.py +0 -0
  95. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/database/internal_tables/_metrics.py +0 -0
  96. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/database/internal_tables/_schema.py +0 -0
  97. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/database/internal_tables/_tasks.py +0 -0
  98. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/database/internal_tables/manager.py +0 -0
  99. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/database/manager.py +0 -0
  100. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/database/mysql_manager.py +0 -0
  101. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/database/postgres_manager.py +0 -0
  102. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/database/tables.py +0 -0
  103. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/detectors/__init__.py +0 -0
  104. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/detectors/base.py +0 -0
  105. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/detectors/factory.py +0 -0
  106. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/detectors/seasonality.py +0 -0
  107. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/detectors/statistical/__init__.py +0 -0
  108. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/detectors/statistical/_windowed.py +0 -0
  109. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/detectors/statistical/autoreg.py +0 -0
  110. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/detectors/statistical/iqr.py +0 -0
  111. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/detectors/statistical/mad.py +0 -0
  112. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/detectors/statistical/manual_bounds.py +0 -0
  113. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/detectors/statistical/zscore.py +0 -0
  114. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/loaders/__init__.py +0 -0
  115. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/loaders/errors.py +0 -0
  116. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/loaders/metric_loader.py +0 -0
  117. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/loaders/query_template.py +0 -0
  118. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/mcp/__init__.py +0 -0
  119. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/mcp/context.py +0 -0
  120. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/mcp/errors.py +0 -0
  121. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/mcp/serialize.py +0 -0
  122. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/mcp/server.py +0 -0
  123. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/mcp/tools.py +0 -0
  124. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/orchestration/__init__.py +0 -0
  125. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/orchestration/error_dispatch.py +0 -0
  126. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/orchestration/task_manager/__init__.py +0 -0
  127. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/orchestration/task_manager/_alert_step.py +0 -0
  128. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/orchestration/task_manager/_base.py +0 -0
  129. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/orchestration/task_manager/_detect_step.py +0 -0
  130. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/orchestration/task_manager/_load_step.py +0 -0
  131. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/orchestration/task_manager/_types.py +0 -0
  132. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/orchestration/task_manager/manager.py +0 -0
  133. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/reporting/__init__.py +0 -0
  134. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/reporting/assets/report.js +0 -0
  135. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/reporting/builder.py +0 -0
  136. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/reporting/html_report.py +0 -0
  137. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/semantic/__init__.py +0 -0
  138. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/semantic/errors.py +0 -0
  139. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/semantic/exporter.py +0 -0
  140. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/semantic/importer.py +0 -0
  141. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/semantic/osi_model.py +0 -0
  142. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/semantic/query_gen.py +0 -0
  143. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/tuning/__init__.py +0 -0
  144. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/tuning/assets/tune.js +0 -0
  145. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/tuning/config_writer.py +0 -0
  146. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/tuning/html.py +0 -0
  147. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/tuning/payload.py +0 -0
  148. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/tuning/server.py +0 -0
  149. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/ui/__init__.py +0 -0
  150. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/ui/assets/ui.js +0 -0
  151. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/ui/html.py +0 -0
  152. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/ui/jobs.py +0 -0
  153. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/ui/metric_files.py +0 -0
  154. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/ui/overview.py +0 -0
  155. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/ui/server.py +0 -0
  156. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/utils/__init__.py +0 -0
  157. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/utils/datetime_utils.py +0 -0
  158. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/utils/env_interpolation.py +0 -0
  159. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/utils/json_utils.py +0 -0
  160. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit/utils/stats.py +0 -0
  161. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit.egg-info/SOURCES.txt +0 -0
  162. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit.egg-info/dependency_links.txt +0 -0
  163. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit.egg-info/entry_points.txt +0 -0
  164. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit.egg-info/requires.txt +0 -0
  165. {detectkit-0.62.0 → detectkit-0.62.1}/detectkit.egg-info/top_level.txt +0 -0
  166. {detectkit-0.62.0 → detectkit-0.62.1}/pyproject.toml +0 -0
  167. {detectkit-0.62.0 → detectkit-0.62.1}/requirements.txt +0 -0
  168. {detectkit-0.62.0 → detectkit-0.62.1}/setup.cfg +0 -0
  169. {detectkit-0.62.0 → detectkit-0.62.1}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: detectkit
3
- Version: 0.62.0
3
+ Version: 0.62.1
4
4
  Summary: Metric monitoring with automatic anomaly detection
5
5
  Author: detectkit team
6
6
  License: MIT
@@ -110,7 +110,7 @@ Dynamic: license-file
110
110
  - **Hybrid mode** — read metric SQL from a billed-per-query warehouse while all pipeline state lives in a cheap local database
111
111
  - **Idempotent** — resume from interruptions, no duplicate processing
112
112
  - **CLI** — `dtk init`, `dtk run --select`, `dtk unlock`, `dtk clean`, tag-based selectors
113
- - **AI-native onboarding** — `dtk init-claude` sets up Claude Code context (CLAUDE.md + rules + three skills) so an assistant can scaffold metrics, configure databases, and file feedback upstream
113
+ - **AI-native onboarding** — `dtk init-claude` sets up Claude Code context (CLAUDE.md + rules + five skills) so an assistant can scaffold metrics, configure databases, and file feedback upstream
114
114
 
115
115
  ## Installation
116
116
 
@@ -122,6 +122,7 @@ With database drivers:
122
122
 
123
123
  ```bash
124
124
  pip install detectkit[clickhouse] # ClickHouse
125
+ pip install detectkit[duckdb] # DuckDB - single file, no server
125
126
  pip install detectkit[all-db] # All databases
126
127
  ```
127
128
 
@@ -28,7 +28,7 @@
28
28
  - **Hybrid mode** — read metric SQL from a billed-per-query warehouse while all pipeline state lives in a cheap local database
29
29
  - **Idempotent** — resume from interruptions, no duplicate processing
30
30
  - **CLI** — `dtk init`, `dtk run --select`, `dtk unlock`, `dtk clean`, tag-based selectors
31
- - **AI-native onboarding** — `dtk init-claude` sets up Claude Code context (CLAUDE.md + rules + three skills) so an assistant can scaffold metrics, configure databases, and file feedback upstream
31
+ - **AI-native onboarding** — `dtk init-claude` sets up Claude Code context (CLAUDE.md + rules + five skills) so an assistant can scaffold metrics, configure databases, and file feedback upstream
32
32
 
33
33
  ## Installation
34
34
 
@@ -40,6 +40,7 @@ With database drivers:
40
40
 
41
41
  ```bash
42
42
  pip install detectkit[clickhouse] # ClickHouse
43
+ pip install detectkit[duckdb] # DuckDB - single file, no server
43
44
  pip install detectkit[all-db] # All databases
44
45
  ```
45
46
 
@@ -4,7 +4,7 @@ detectk - Anomaly Detection for Time-Series Metrics
4
4
  A Python library for data analysts and engineers to monitor metrics with automatic anomaly detection.
5
5
  """
6
6
 
7
- __version__ = "0.62.0"
7
+ __version__ = "0.62.1"
8
8
 
9
9
  from detectkit.core.interval import Interval
10
10
  from detectkit.core.models import ColumnDefinition, TableModel
@@ -458,6 +458,13 @@ fail their step when `dtk run` / `dtk autotune` / `dtk clean` exits non-zero
458
458
  (see "Exit codes" above), and can additionally parse `dtk run --json`'s stdout
459
459
  summary for per-metric detail.
460
460
 
461
+ On GitHub Actions specifically, detectkit ships a ready-made composite action
462
+ instead of hand-rolling those steps: `uses: alexeiveselov92/detectkit@vX.Y.Z`
463
+ installs detectkit from PyPI and runs `dtk run` / `dtk autotune` / `dtk clean`
464
+ in a given project directory. It surfaces the 0/1/2 exit-code contract (see
465
+ "Exit codes" above) as the job's own outcome, and exposes the
466
+ `dtk run --json` summary as an action output for downstream steps to consume.
467
+
461
468
  ## Troubleshooting
462
469
 
463
470
  - **"Metric not found"** — selector doesn't match. Use the bare name
@@ -4,8 +4,9 @@ detectkit is a Python library and CLI (`dtk`) for monitoring time-series
4
4
  metrics with automatic anomaly detection and multi-channel alerting. It is
5
5
  **dbt-like**: metrics live as YAML + SQL in a project directory, and you run
6
6
  them with one command. Core logic is pure numpy (no pandas). **ClickHouse,
7
- PostgreSQL and MySQL are all fully supported** — only the connection and the SQL
8
- dialect of your metric queries differ between them.
7
+ PostgreSQL, MySQL/MariaDB and DuckDB are all fully supported** — only the
8
+ connection and the SQL dialect of your metric queries differ between them
9
+ (DuckDB additionally needs no server at all — just a local file).
9
10
 
10
11
  ## The pipeline: load → detect → alert
11
12
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: detectkit
3
- Version: 0.62.0
3
+ Version: 0.62.1
4
4
  Summary: Metric monitoring with automatic anomaly detection
5
5
  Author: detectkit team
6
6
  License: MIT
@@ -110,7 +110,7 @@ Dynamic: license-file
110
110
  - **Hybrid mode** — read metric SQL from a billed-per-query warehouse while all pipeline state lives in a cheap local database
111
111
  - **Idempotent** — resume from interruptions, no duplicate processing
112
112
  - **CLI** — `dtk init`, `dtk run --select`, `dtk unlock`, `dtk clean`, tag-based selectors
113
- - **AI-native onboarding** — `dtk init-claude` sets up Claude Code context (CLAUDE.md + rules + three skills) so an assistant can scaffold metrics, configure databases, and file feedback upstream
113
+ - **AI-native onboarding** — `dtk init-claude` sets up Claude Code context (CLAUDE.md + rules + five skills) so an assistant can scaffold metrics, configure databases, and file feedback upstream
114
114
 
115
115
  ## Installation
116
116
 
@@ -122,6 +122,7 @@ With database drivers:
122
122
 
123
123
  ```bash
124
124
  pip install detectkit[clickhouse] # ClickHouse
125
+ pip install detectkit[duckdb] # DuckDB - single file, no server
125
126
  pip install detectkit[all-db] # All databases
126
127
  ```
127
128
 
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes