detectkit 0.13.1__tar.gz → 0.14.0__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.
- {detectkit-0.13.1/detectkit.egg-info → detectkit-0.14.0}/PKG-INFO +2 -2
- {detectkit-0.13.1 → detectkit-0.14.0}/README.md +1 -1
- {detectkit-0.13.1 → detectkit-0.14.0}/detectkit/__init__.py +1 -1
- {detectkit-0.13.1 → detectkit-0.14.0}/detectkit/cli/assets/claude/CLAUDE.section.md +6 -1
- detectkit-0.14.0/detectkit/cli/assets/claude/skills/dtk-feedback/SKILL.md +155 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/detectkit/cli/commands/init_claude.py +2 -1
- {detectkit-0.13.1 → detectkit-0.14.0/detectkit.egg-info}/PKG-INFO +2 -2
- {detectkit-0.13.1 → detectkit-0.14.0}/detectkit.egg-info/SOURCES.txt +1 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/LICENSE +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/MANIFEST.in +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/detectkit/alerting/__init__.py +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/detectkit/alerting/channels/__init__.py +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/detectkit/alerting/channels/base.py +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/detectkit/alerting/channels/branding.py +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/detectkit/alerting/channels/email.py +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/detectkit/alerting/channels/factory.py +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/detectkit/alerting/channels/mattermost.py +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/detectkit/alerting/channels/slack.py +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/detectkit/alerting/channels/telegram.py +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/detectkit/alerting/channels/webhook.py +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/detectkit/alerting/orchestrator/__init__.py +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/detectkit/alerting/orchestrator/_base.py +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/detectkit/alerting/orchestrator/_cooldown.py +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/detectkit/alerting/orchestrator/_decision.py +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/detectkit/alerting/orchestrator/_dispatch.py +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/detectkit/alerting/orchestrator/_recovery.py +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/detectkit/alerting/orchestrator/_types.py +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/detectkit/alerting/orchestrator/orchestrator.py +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/detectkit/cli/__init__.py +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/detectkit/cli/_output.py +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/detectkit/cli/assets/claude/rules/alerting.md +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/detectkit/cli/assets/claude/rules/cli.md +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/detectkit/cli/assets/claude/rules/detectors.md +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/detectkit/cli/assets/claude/rules/metrics.md +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/detectkit/cli/assets/claude/rules/overview.md +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/detectkit/cli/assets/claude/rules/project.md +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/detectkit/cli/assets/claude/skills/dtk-new-metric/SKILL.md +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/detectkit/cli/assets/claude/skills/dtk-setup-project/SKILL.md +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/detectkit/cli/commands/__init__.py +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/detectkit/cli/commands/clean.py +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/detectkit/cli/commands/init.py +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/detectkit/cli/commands/run.py +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/detectkit/cli/commands/test_alert.py +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/detectkit/cli/commands/unlock.py +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/detectkit/cli/main.py +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/detectkit/config/__init__.py +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/detectkit/config/metric_config.py +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/detectkit/config/profile.py +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/detectkit/config/project_config.py +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/detectkit/config/validator.py +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/detectkit/core/__init__.py +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/detectkit/core/interval.py +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/detectkit/core/models.py +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/detectkit/database/__init__.py +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/detectkit/database/_sql_manager.py +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/detectkit/database/clickhouse_manager.py +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/detectkit/database/internal_tables/__init__.py +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/detectkit/database/internal_tables/_alert_states.py +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/detectkit/database/internal_tables/_base.py +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/detectkit/database/internal_tables/_datapoints.py +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/detectkit/database/internal_tables/_detections.py +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/detectkit/database/internal_tables/_maintenance.py +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/detectkit/database/internal_tables/_metrics.py +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/detectkit/database/internal_tables/_schema.py +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/detectkit/database/internal_tables/_tasks.py +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/detectkit/database/internal_tables/manager.py +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/detectkit/database/manager.py +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/detectkit/database/mysql_manager.py +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/detectkit/database/postgres_manager.py +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/detectkit/database/tables.py +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/detectkit/detectors/__init__.py +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/detectkit/detectors/base.py +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/detectkit/detectors/factory.py +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/detectkit/detectors/seasonality.py +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/detectkit/detectors/statistical/__init__.py +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/detectkit/detectors/statistical/_windowed.py +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/detectkit/detectors/statistical/iqr.py +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/detectkit/detectors/statistical/mad.py +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/detectkit/detectors/statistical/manual_bounds.py +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/detectkit/detectors/statistical/zscore.py +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/detectkit/loaders/__init__.py +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/detectkit/loaders/metric_loader.py +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/detectkit/loaders/query_template.py +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/detectkit/orchestration/__init__.py +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/detectkit/orchestration/error_dispatch.py +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/detectkit/orchestration/task_manager/__init__.py +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/detectkit/orchestration/task_manager/_alert_step.py +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/detectkit/orchestration/task_manager/_base.py +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/detectkit/orchestration/task_manager/_detect_step.py +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/detectkit/orchestration/task_manager/_load_step.py +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/detectkit/orchestration/task_manager/_types.py +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/detectkit/orchestration/task_manager/manager.py +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/detectkit/utils/__init__.py +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/detectkit/utils/datetime_utils.py +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/detectkit/utils/env_interpolation.py +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/detectkit/utils/json_utils.py +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/detectkit/utils/stats.py +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/detectkit.egg-info/dependency_links.txt +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/detectkit.egg-info/entry_points.txt +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/detectkit.egg-info/requires.txt +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/detectkit.egg-info/top_level.txt +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/pyproject.toml +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/requirements.txt +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/setup.cfg +0 -0
- {detectkit-0.13.1 → detectkit-0.14.0}/setup.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: detectkit
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.14.0
|
|
4
4
|
Summary: Metric monitoring with automatic anomaly detection
|
|
5
5
|
Author: detectkit team
|
|
6
6
|
License: MIT
|
|
@@ -87,7 +87,7 @@ Dynamic: license-file
|
|
|
87
87
|
- **Database agnostic** — ClickHouse, PostgreSQL, MySQL
|
|
88
88
|
- **Idempotent** — resume from interruptions, no duplicate processing
|
|
89
89
|
- **CLI** — `dtk init`, `dtk run --select`, `dtk unlock`, `dtk clean`, tag-based selectors
|
|
90
|
-
- **AI-native onboarding** — `dtk init-claude` sets up Claude Code context (CLAUDE.md + rules +
|
|
90
|
+
- **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
|
|
91
91
|
|
|
92
92
|
## Installation
|
|
93
93
|
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
- **Database agnostic** — ClickHouse, PostgreSQL, MySQL
|
|
20
20
|
- **Idempotent** — resume from interruptions, no duplicate processing
|
|
21
21
|
- **CLI** — `dtk init`, `dtk run --select`, `dtk unlock`, `dtk clean`, tag-based selectors
|
|
22
|
-
- **AI-native onboarding** — `dtk init-claude` sets up Claude Code context (CLAUDE.md + rules +
|
|
22
|
+
- **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
|
|
23
23
|
|
|
24
24
|
## Installation
|
|
25
25
|
|
|
@@ -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.
|
|
7
|
+
__version__ = "0.14.0"
|
|
8
8
|
|
|
9
9
|
from detectkit.core.interval import Interval
|
|
10
10
|
from detectkit.core.models import ColumnDefinition, TableModel
|
|
@@ -26,7 +26,7 @@ version — **read the relevant one on demand** instead of guessing:
|
|
|
26
26
|
| Choosing/tuning detectors, preprocessing, trends, seasonality | `.claude/rules/detectkit/detectors.md` |
|
|
27
27
|
| Alert rules (quorum/direction/consecutive), cooldown, recovery, templates | `.claude/rules/detectkit/alerting.md` |
|
|
28
28
|
|
|
29
|
-
###
|
|
29
|
+
### Skills
|
|
30
30
|
|
|
31
31
|
- **First-time setup** — use the **`dtk-setup-project`** skill to configure the
|
|
32
32
|
database connection in `profiles.yml` (the `dtk init` placeholder ships example
|
|
@@ -34,6 +34,11 @@ version — **read the relevant one on demand** instead of guessing:
|
|
|
34
34
|
channel.
|
|
35
35
|
- **A new metric** — use the **`dtk-new-metric`** skill; it walks the config out
|
|
36
36
|
to a YAML file that validates and is ready to run.
|
|
37
|
+
- **Hit a detectkit bug, or have feedback** — once you've ruled out a local
|
|
38
|
+
config fix (see the gotchas below), use the **`dtk-feedback`** skill to file a
|
|
39
|
+
redacted bug report, feature request, or comment as a GitHub issue on the
|
|
40
|
+
upstream repo. It auto-collects the diagnostic context, strips every secret,
|
|
41
|
+
and never submits without showing you the exact text first.
|
|
37
42
|
|
|
38
43
|
### Gotchas that bite (keep these in mind)
|
|
39
44
|
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: dtk-feedback
|
|
3
|
+
description: >-
|
|
4
|
+
Report a detectkit bug, request a feature, or send feedback to the maintainers
|
|
5
|
+
as a GitHub issue on the upstream repo (alexeiveselov92/detectkit). Use when a
|
|
6
|
+
dtk command errors or behaves unexpectedly and it looks like a detectkit defect
|
|
7
|
+
(not the user's config), when the user wishes detectkit did something it
|
|
8
|
+
doesn't, or when they ask to report/file an issue, send feedback, or contact
|
|
9
|
+
the maintainers. Auto-collects diagnostic context, redacts all secrets, and
|
|
10
|
+
never submits without explicit confirmation.
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# Send feedback to the detectkit maintainers
|
|
14
|
+
|
|
15
|
+
Turn a problem, a wish, or a comment into a clear GitHub issue on the upstream
|
|
16
|
+
repo **`alexeiveselov92/detectkit`** — carrying the diagnostic context
|
|
17
|
+
maintainers need and **leaking no secrets**. You are filing a *public* issue on
|
|
18
|
+
the user's behalf: never submit anything without showing the exact text and
|
|
19
|
+
getting an explicit "yes".
|
|
20
|
+
|
|
21
|
+
This skill is the procedure; the reference for ruling out config problems lives
|
|
22
|
+
under `.claude/rules/detectkit/`.
|
|
23
|
+
|
|
24
|
+
## Step 0 — Decide whether this belongs upstream
|
|
25
|
+
|
|
26
|
+
- **Bug** — a `dtk` command errors or produces clearly wrong output, **and**
|
|
27
|
+
you've ruled out a local config/usage mistake (Step 1).
|
|
28
|
+
- **Feature request** — the user needs detectkit to do something it doesn't.
|
|
29
|
+
- **Feedback / question** — a comment, confusion, or rough edge worth surfacing.
|
|
30
|
+
|
|
31
|
+
Do **not** open an issue for the user's own SQL, data, database, or
|
|
32
|
+
configuration mistakes — those are fixed locally with the rules files, not
|
|
33
|
+
reported as detectkit bugs. Only genuine detectkit behavior goes upstream.
|
|
34
|
+
|
|
35
|
+
## Step 1 — Rule out config first (for "it doesn't work")
|
|
36
|
+
|
|
37
|
+
Before calling something a bug, confirm it isn't a configuration or usage
|
|
38
|
+
problem. Read the matching `.claude/rules/detectkit/` file and check the usual
|
|
39
|
+
gotchas:
|
|
40
|
+
|
|
41
|
+
- the loading query filters on `{{ dtk_start_time }}` **and** `{{ dtk_end_time }}`;
|
|
42
|
+
- metric `name` is unique across the project;
|
|
43
|
+
- `profiles.yml` has the right location fields (`internal_database`/`data_database`,
|
|
44
|
+
or Postgres schemas) and a `default_profile` that exists;
|
|
45
|
+
- `alert_cooldown` is set; channels referenced by metrics exist.
|
|
46
|
+
|
|
47
|
+
If a local fix exists, **do that and stop** — don't file an issue. Escalate only
|
|
48
|
+
what is genuinely a detectkit defect.
|
|
49
|
+
|
|
50
|
+
## Step 2 — Gather context (do this for the user, don't make them dig)
|
|
51
|
+
|
|
52
|
+
Collect automatically:
|
|
53
|
+
|
|
54
|
+
- `dtk --version` — the detectkit version (**always** include it).
|
|
55
|
+
- Python version (`python3 --version`) and OS.
|
|
56
|
+
- The database backend **type only** (`clickhouse` / `postgres` / `mysql`) from
|
|
57
|
+
`profiles.yml`'s `type:` — never the host, port, or credentials.
|
|
58
|
+
|
|
59
|
+
For a **bug**, also gather:
|
|
60
|
+
|
|
61
|
+
- the exact command that was run;
|
|
62
|
+
- the full error message / traceback;
|
|
63
|
+
- what the user expected vs. what happened;
|
|
64
|
+
- a **minimal reproduction** — the failing metric YAML and/or SQL, with every
|
|
65
|
+
secret stripped (Step 3).
|
|
66
|
+
|
|
67
|
+
## Step 3 — Redact secrets (mandatory — before anything is shown or sent)
|
|
68
|
+
|
|
69
|
+
This is a public issue. Strip from every snippet you include:
|
|
70
|
+
|
|
71
|
+
- passwords, tokens, `bot_token`, `smtp_password`, API keys;
|
|
72
|
+
- `webhook_url`s, `chat_id`s, email addresses;
|
|
73
|
+
- hostnames, IPs, ports, and real database / schema / table names;
|
|
74
|
+
- the resolved value of anything inside `{{ env_var('…') }}` or `${…}` — keep the
|
|
75
|
+
`env_var(...)` shape, drop the value.
|
|
76
|
+
|
|
77
|
+
Replace with placeholders like `<redacted>`, `<your-host>`, `<your_table>` while
|
|
78
|
+
keeping the structure intact so the bug is still reproducible. **If you're not
|
|
79
|
+
sure whether something is sensitive, redact it.**
|
|
80
|
+
|
|
81
|
+
## Step 4 — Search for duplicates
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
gh issue list --repo alexeiveselov92/detectkit --search "<keywords>" --state all
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
If a matching issue already exists, offer to **add a comment** or a 👍 reaction
|
|
88
|
+
instead of opening a new one:
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
gh issue comment <number> --repo alexeiveselov92/detectkit --body "<note>"
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
This gives maintainers signal on frequency instead of a pile of duplicates.
|
|
95
|
+
|
|
96
|
+
## Step 5 — Draft the issue
|
|
97
|
+
|
|
98
|
+
Write a specific title (the actual symptom in a few words, not "bug"). Pick the
|
|
99
|
+
body template by type:
|
|
100
|
+
|
|
101
|
+
- **Bug** — `Summary` / `Environment` (detectkit version, Python, OS, backend) /
|
|
102
|
+
`Steps to reproduce` / `Expected` / `Actual` (with the traceback in a fenced
|
|
103
|
+
code block) / `Minimal config` (redacted).
|
|
104
|
+
- **Feature request** — `Problem` (the underlying need, not just the proposed
|
|
105
|
+
fix) / `Proposed behavior` / `Alternatives considered`.
|
|
106
|
+
- **Feedback** — free-form, concrete and respectful.
|
|
107
|
+
|
|
108
|
+
End the body with an attribution marker so maintainers can see it came through
|
|
109
|
+
the assistant funnel and on which version:
|
|
110
|
+
|
|
111
|
+
```
|
|
112
|
+
_Filed via the dtk init-claude assistant (detectkit <version>)._
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
## Step 6 — Preview and confirm (no silent submits)
|
|
116
|
+
|
|
117
|
+
Show the user the **full** title and body exactly as they will be posted, and
|
|
118
|
+
the target repo. Ask them to confirm: secrets redacted? right repo? Proceed to
|
|
119
|
+
Step 7 only on an explicit "yes". If they want edits, revise and re-preview.
|
|
120
|
+
|
|
121
|
+
## Step 7 — Submit
|
|
122
|
+
|
|
123
|
+
**Preferred — `gh` CLI** (check it's installed and authenticated first with
|
|
124
|
+
`gh auth status`). Write the body to a temp file to avoid shell-escaping the
|
|
125
|
+
markdown/traceback:
|
|
126
|
+
|
|
127
|
+
```bash
|
|
128
|
+
gh issue create --repo alexeiveselov92/detectkit \
|
|
129
|
+
--title "<title>" --body-file <tmpfile>
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
Tag the issue so maintainers can triage assistant-filed reports: add the type
|
|
133
|
+
label (`--label bug` / `--label enhancement`) **and** `--label "via:assistant"`.
|
|
134
|
+
Labels must already exist on the repo, so if `gh` reports an unknown label,
|
|
135
|
+
**retry without the failing label(s)** — never fail the report over a missing
|
|
136
|
+
label. (Attribution also lives in the Step 5 body marker, so maintainers can
|
|
137
|
+
filter with `in:body "Filed via the dtk init-claude assistant"` even before the
|
|
138
|
+
`via:assistant` label exists.) Return the issue URL to the user.
|
|
139
|
+
|
|
140
|
+
**Fallback — no `gh`, or not authenticated.** Build a prefilled "new issue" URL
|
|
141
|
+
and hand it to the user to open and submit in their browser:
|
|
142
|
+
|
|
143
|
+
```
|
|
144
|
+
https://github.com/alexeiveselov92/detectkit/issues/new?title=<url-encoded>&body=<url-encoded>
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
URL-encode both fields. If the body is too long for a URL, give the user the
|
|
148
|
+
title plus the body text to paste, and the plain link
|
|
149
|
+
`https://github.com/alexeiveselov92/detectkit/issues/new`.
|
|
150
|
+
|
|
151
|
+
## Step 8 — Close the loop
|
|
152
|
+
|
|
153
|
+
Give the user the issue URL (or the prefilled link), mention they can subscribe
|
|
154
|
+
for updates, and — if you also worked around the bug locally — restate that
|
|
155
|
+
local fix so they're unblocked right now, not just waiting on the issue.
|
|
@@ -11,7 +11,8 @@ It writes three things into the target directory:
|
|
|
11
11
|
injected/refreshed between HTML-comment markers (existing content is kept).
|
|
12
12
|
- ``.claude/rules/detectkit/`` — the reference docs the assistant reads on
|
|
13
13
|
demand (overview, cli, project, metrics, detectors, alerting).
|
|
14
|
-
- ``.claude/skills/`` — user-facing skills (``dtk-
|
|
14
|
+
- ``.claude/skills/`` — user-facing skills (``dtk-setup-project``,
|
|
15
|
+
``dtk-new-metric``, ``dtk-feedback``).
|
|
15
16
|
|
|
16
17
|
The source of truth for all of the above lives in ``detectkit/cli/assets/claude``
|
|
17
18
|
and ships with the package, so re-running this command after upgrading detectkit
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: detectkit
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.14.0
|
|
4
4
|
Summary: Metric monitoring with automatic anomaly detection
|
|
5
5
|
Author: detectkit team
|
|
6
6
|
License: MIT
|
|
@@ -87,7 +87,7 @@ Dynamic: license-file
|
|
|
87
87
|
- **Database agnostic** — ClickHouse, PostgreSQL, MySQL
|
|
88
88
|
- **Idempotent** — resume from interruptions, no duplicate processing
|
|
89
89
|
- **CLI** — `dtk init`, `dtk run --select`, `dtk unlock`, `dtk clean`, tag-based selectors
|
|
90
|
-
- **AI-native onboarding** — `dtk init-claude` sets up Claude Code context (CLAUDE.md + rules +
|
|
90
|
+
- **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
|
|
91
91
|
|
|
92
92
|
## Installation
|
|
93
93
|
|
|
@@ -39,6 +39,7 @@ detectkit/cli/assets/claude/rules/detectors.md
|
|
|
39
39
|
detectkit/cli/assets/claude/rules/metrics.md
|
|
40
40
|
detectkit/cli/assets/claude/rules/overview.md
|
|
41
41
|
detectkit/cli/assets/claude/rules/project.md
|
|
42
|
+
detectkit/cli/assets/claude/skills/dtk-feedback/SKILL.md
|
|
42
43
|
detectkit/cli/assets/claude/skills/dtk-new-metric/SKILL.md
|
|
43
44
|
detectkit/cli/assets/claude/skills/dtk-setup-project/SKILL.md
|
|
44
45
|
detectkit/cli/commands/__init__.py
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{detectkit-0.13.1 → detectkit-0.14.0}/detectkit/cli/assets/claude/skills/dtk-new-metric/SKILL.md
RENAMED
|
File without changes
|
{detectkit-0.13.1 → detectkit-0.14.0}/detectkit/cli/assets/claude/skills/dtk-setup-project/SKILL.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|