claude-dev-cli 0.16.2__py3-none-any.whl → 0.18.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of claude-dev-cli might be problematic. Click here for more details.
- claude_dev_cli/__init__.py +1 -1
- claude_dev_cli/cli.py +424 -0
- claude_dev_cli/logging/__init__.py +6 -0
- claude_dev_cli/logging/logger.py +84 -0
- claude_dev_cli/logging/markdown_logger.py +131 -0
- claude_dev_cli/notifications/__init__.py +6 -0
- claude_dev_cli/notifications/notifier.py +69 -0
- claude_dev_cli/notifications/ntfy.py +87 -0
- claude_dev_cli/project/__init__.py +10 -0
- claude_dev_cli/project/bug_tracker.py +458 -0
- claude_dev_cli/project/context_gatherer.py +535 -0
- claude_dev_cli/project/executor.py +370 -0
- claude_dev_cli/tickets/__init__.py +7 -0
- claude_dev_cli/tickets/backend.py +229 -0
- claude_dev_cli/tickets/markdown.py +309 -0
- claude_dev_cli/tickets/repo_tickets.py +361 -0
- claude_dev_cli/vcs/__init__.py +6 -0
- claude_dev_cli/vcs/git.py +172 -0
- claude_dev_cli/vcs/manager.py +90 -0
- {claude_dev_cli-0.16.2.dist-info → claude_dev_cli-0.18.0.dist-info}/METADATA +335 -4
- {claude_dev_cli-0.16.2.dist-info → claude_dev_cli-0.18.0.dist-info}/RECORD +25 -8
- {claude_dev_cli-0.16.2.dist-info → claude_dev_cli-0.18.0.dist-info}/WHEEL +0 -0
- {claude_dev_cli-0.16.2.dist-info → claude_dev_cli-0.18.0.dist-info}/entry_points.txt +0 -0
- {claude_dev_cli-0.16.2.dist-info → claude_dev_cli-0.18.0.dist-info}/licenses/LICENSE +0 -0
- {claude_dev_cli-0.16.2.dist-info → claude_dev_cli-0.18.0.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
"""Git VCS manager implementation."""
|
|
2
|
+
|
|
3
|
+
import subprocess
|
|
4
|
+
from pathlib import Path
|
|
5
|
+
from typing import Optional, List
|
|
6
|
+
|
|
7
|
+
from claude_dev_cli.vcs.manager import VCSManager, CommitInfo
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class GitManager(VCSManager):
|
|
11
|
+
"""Git version control manager.
|
|
12
|
+
|
|
13
|
+
Supports conventional commits and co-author attribution.
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
def __init__(self, repo_path: Optional[Path] = None):
|
|
17
|
+
"""Initialize Git manager.
|
|
18
|
+
|
|
19
|
+
Args:
|
|
20
|
+
repo_path: Path to repository (default: current directory)
|
|
21
|
+
"""
|
|
22
|
+
self.repo_path = repo_path or Path.cwd()
|
|
23
|
+
|
|
24
|
+
def is_repository(self) -> bool:
|
|
25
|
+
"""Check if current directory is a Git repository."""
|
|
26
|
+
try:
|
|
27
|
+
result = subprocess.run(
|
|
28
|
+
["git", "rev-parse", "--git-dir"],
|
|
29
|
+
cwd=self.repo_path,
|
|
30
|
+
capture_output=True,
|
|
31
|
+
timeout=5
|
|
32
|
+
)
|
|
33
|
+
return result.returncode == 0
|
|
34
|
+
except (subprocess.TimeoutExpired, FileNotFoundError):
|
|
35
|
+
return False
|
|
36
|
+
|
|
37
|
+
def commit(
|
|
38
|
+
self,
|
|
39
|
+
message: str,
|
|
40
|
+
files: Optional[List[str]] = None,
|
|
41
|
+
co_author: Optional[str] = None
|
|
42
|
+
) -> CommitInfo:
|
|
43
|
+
"""Create a Git commit with optional co-author."""
|
|
44
|
+
# Add files
|
|
45
|
+
if files:
|
|
46
|
+
for file_path in files:
|
|
47
|
+
subprocess.run(
|
|
48
|
+
["git", "add", file_path],
|
|
49
|
+
cwd=self.repo_path,
|
|
50
|
+
timeout=10
|
|
51
|
+
)
|
|
52
|
+
else:
|
|
53
|
+
# Add all changes
|
|
54
|
+
subprocess.run(
|
|
55
|
+
["git", "add", "-A"],
|
|
56
|
+
cwd=self.repo_path,
|
|
57
|
+
timeout=10
|
|
58
|
+
)
|
|
59
|
+
|
|
60
|
+
# Build commit message with co-author
|
|
61
|
+
full_message = message
|
|
62
|
+
if co_author:
|
|
63
|
+
full_message = f"{message}\n\nCo-Authored-By: {co_author}"
|
|
64
|
+
|
|
65
|
+
# Create commit
|
|
66
|
+
result = subprocess.run(
|
|
67
|
+
["git", "commit", "-m", full_message],
|
|
68
|
+
cwd=self.repo_path,
|
|
69
|
+
capture_output=True,
|
|
70
|
+
text=True,
|
|
71
|
+
timeout=10
|
|
72
|
+
)
|
|
73
|
+
|
|
74
|
+
if result.returncode != 0:
|
|
75
|
+
raise RuntimeError(f"Commit failed: {result.stderr}")
|
|
76
|
+
|
|
77
|
+
# Get commit SHA
|
|
78
|
+
sha_result = subprocess.run(
|
|
79
|
+
["git", "rev-parse", "HEAD"],
|
|
80
|
+
cwd=self.repo_path,
|
|
81
|
+
capture_output=True,
|
|
82
|
+
text=True,
|
|
83
|
+
timeout=5
|
|
84
|
+
)
|
|
85
|
+
sha = sha_result.stdout.strip()
|
|
86
|
+
|
|
87
|
+
# Get author
|
|
88
|
+
author_result = subprocess.run(
|
|
89
|
+
["git", "log", "-1", "--pretty=format:%an <%ae>"],
|
|
90
|
+
cwd=self.repo_path,
|
|
91
|
+
capture_output=True,
|
|
92
|
+
text=True,
|
|
93
|
+
timeout=5
|
|
94
|
+
)
|
|
95
|
+
author = author_result.stdout.strip()
|
|
96
|
+
|
|
97
|
+
return CommitInfo(
|
|
98
|
+
sha=sha,
|
|
99
|
+
message=message,
|
|
100
|
+
author=author,
|
|
101
|
+
files=files or []
|
|
102
|
+
)
|
|
103
|
+
|
|
104
|
+
def create_branch(self, branch_name: str, from_branch: Optional[str] = None) -> bool:
|
|
105
|
+
"""Create a new Git branch."""
|
|
106
|
+
try:
|
|
107
|
+
cmd = ["git", "checkout", "-b", branch_name]
|
|
108
|
+
|
|
109
|
+
if from_branch:
|
|
110
|
+
cmd.append(from_branch)
|
|
111
|
+
|
|
112
|
+
result = subprocess.run(
|
|
113
|
+
cmd,
|
|
114
|
+
cwd=self.repo_path,
|
|
115
|
+
capture_output=True,
|
|
116
|
+
timeout=10
|
|
117
|
+
)
|
|
118
|
+
|
|
119
|
+
return result.returncode == 0
|
|
120
|
+
except subprocess.TimeoutExpired:
|
|
121
|
+
return False
|
|
122
|
+
|
|
123
|
+
def checkout(self, branch_name: str) -> bool:
|
|
124
|
+
"""Checkout a Git branch."""
|
|
125
|
+
try:
|
|
126
|
+
result = subprocess.run(
|
|
127
|
+
["git", "checkout", branch_name],
|
|
128
|
+
cwd=self.repo_path,
|
|
129
|
+
capture_output=True,
|
|
130
|
+
timeout=10
|
|
131
|
+
)
|
|
132
|
+
return result.returncode == 0
|
|
133
|
+
except subprocess.TimeoutExpired:
|
|
134
|
+
return False
|
|
135
|
+
|
|
136
|
+
def current_branch(self) -> str:
|
|
137
|
+
"""Get current Git branch name."""
|
|
138
|
+
try:
|
|
139
|
+
result = subprocess.run(
|
|
140
|
+
["git", "branch", "--show-current"],
|
|
141
|
+
cwd=self.repo_path,
|
|
142
|
+
capture_output=True,
|
|
143
|
+
text=True,
|
|
144
|
+
timeout=5
|
|
145
|
+
)
|
|
146
|
+
|
|
147
|
+
if result.returncode == 0:
|
|
148
|
+
return result.stdout.strip()
|
|
149
|
+
|
|
150
|
+
return "unknown"
|
|
151
|
+
except subprocess.TimeoutExpired:
|
|
152
|
+
return "unknown"
|
|
153
|
+
|
|
154
|
+
def push(self, remote: str = "origin", branch: Optional[str] = None) -> bool:
|
|
155
|
+
"""Push changes to remote."""
|
|
156
|
+
try:
|
|
157
|
+
branch_name = branch or self.current_branch()
|
|
158
|
+
|
|
159
|
+
result = subprocess.run(
|
|
160
|
+
["git", "push", remote, branch_name],
|
|
161
|
+
cwd=self.repo_path,
|
|
162
|
+
capture_output=True,
|
|
163
|
+
timeout=30
|
|
164
|
+
)
|
|
165
|
+
|
|
166
|
+
return result.returncode == 0
|
|
167
|
+
except subprocess.TimeoutExpired:
|
|
168
|
+
return False
|
|
169
|
+
|
|
170
|
+
def get_vcs_name(self) -> str:
|
|
171
|
+
"""Return VCS name."""
|
|
172
|
+
return "git"
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
"""Abstract VCS manager interface."""
|
|
2
|
+
|
|
3
|
+
from abc import ABC, abstractmethod
|
|
4
|
+
from pathlib import Path
|
|
5
|
+
from typing import Optional, List
|
|
6
|
+
from dataclasses import dataclass
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
@dataclass
|
|
10
|
+
class CommitInfo:
|
|
11
|
+
"""Information about a VCS commit."""
|
|
12
|
+
sha: str
|
|
13
|
+
message: str
|
|
14
|
+
author: str
|
|
15
|
+
files: List[str]
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class VCSManager(ABC):
|
|
19
|
+
"""Abstract base class for VCS operations."""
|
|
20
|
+
|
|
21
|
+
@abstractmethod
|
|
22
|
+
def is_repository(self) -> bool:
|
|
23
|
+
"""Check if current directory is a VCS repository."""
|
|
24
|
+
pass
|
|
25
|
+
|
|
26
|
+
@abstractmethod
|
|
27
|
+
def commit(
|
|
28
|
+
self,
|
|
29
|
+
message: str,
|
|
30
|
+
files: Optional[List[str]] = None,
|
|
31
|
+
co_author: Optional[str] = None
|
|
32
|
+
) -> CommitInfo:
|
|
33
|
+
"""Create a commit.
|
|
34
|
+
|
|
35
|
+
Args:
|
|
36
|
+
message: Commit message
|
|
37
|
+
files: Files to commit (None = all changed files)
|
|
38
|
+
co_author: Co-author attribution (e.g., "Name <email>")
|
|
39
|
+
|
|
40
|
+
Returns:
|
|
41
|
+
CommitInfo object
|
|
42
|
+
"""
|
|
43
|
+
pass
|
|
44
|
+
|
|
45
|
+
@abstractmethod
|
|
46
|
+
def create_branch(self, branch_name: str, from_branch: Optional[str] = None) -> bool:
|
|
47
|
+
"""Create a new branch.
|
|
48
|
+
|
|
49
|
+
Args:
|
|
50
|
+
branch_name: Name of new branch
|
|
51
|
+
from_branch: Base branch (None = current branch)
|
|
52
|
+
|
|
53
|
+
Returns:
|
|
54
|
+
True if successful
|
|
55
|
+
"""
|
|
56
|
+
pass
|
|
57
|
+
|
|
58
|
+
@abstractmethod
|
|
59
|
+
def checkout(self, branch_name: str) -> bool:
|
|
60
|
+
"""Checkout a branch.
|
|
61
|
+
|
|
62
|
+
Args:
|
|
63
|
+
branch_name: Branch to checkout
|
|
64
|
+
|
|
65
|
+
Returns:
|
|
66
|
+
True if successful
|
|
67
|
+
"""
|
|
68
|
+
pass
|
|
69
|
+
|
|
70
|
+
@abstractmethod
|
|
71
|
+
def current_branch(self) -> str:
|
|
72
|
+
"""Get current branch name."""
|
|
73
|
+
pass
|
|
74
|
+
|
|
75
|
+
@abstractmethod
|
|
76
|
+
def push(self, remote: str = "origin", branch: Optional[str] = None) -> bool:
|
|
77
|
+
"""Push changes to remote.
|
|
78
|
+
|
|
79
|
+
Args:
|
|
80
|
+
remote: Remote name
|
|
81
|
+
branch: Branch to push (None = current branch)
|
|
82
|
+
|
|
83
|
+
Returns:
|
|
84
|
+
True if successful
|
|
85
|
+
"""
|
|
86
|
+
pass
|
|
87
|
+
|
|
88
|
+
def get_vcs_name(self) -> str:
|
|
89
|
+
"""Get VCS system name."""
|
|
90
|
+
return self.__class__.__name__.replace('Manager', '').lower()
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: claude-dev-cli
|
|
3
|
-
Version: 0.
|
|
4
|
-
Summary: A powerful CLI tool for developers using Claude AI with multi-API routing, test generation, code review, and
|
|
3
|
+
Version: 0.18.0
|
|
4
|
+
Summary: A powerful CLI tool for developers using Claude AI with multi-API routing, test generation, code review, usage tracking, and project management automation
|
|
5
5
|
Author-email: Julio <thinmanj@users.noreply.github.com>
|
|
6
6
|
License: MIT
|
|
7
7
|
Project-URL: Homepage, https://github.com/thinmanj/claude-dev-cli
|
|
@@ -47,6 +47,23 @@ Requires-Dist: requests>=2.28.0; extra == "local"
|
|
|
47
47
|
Provides-Extra: all-providers
|
|
48
48
|
Requires-Dist: openai>=1.0.0; extra == "all-providers"
|
|
49
49
|
Requires-Dist: requests>=2.28.0; extra == "all-providers"
|
|
50
|
+
Provides-Extra: project-mgmt
|
|
51
|
+
Requires-Dist: repo-tickets>=0.8.0; extra == "project-mgmt"
|
|
52
|
+
Requires-Dist: python-docx>=0.8.11; extra == "project-mgmt"
|
|
53
|
+
Provides-Extra: notifications
|
|
54
|
+
Requires-Dist: requests>=2.28.0; extra == "notifications"
|
|
55
|
+
Requires-Dist: python-telegram-bot>=20.0; extra == "notifications"
|
|
56
|
+
Provides-Extra: vcs
|
|
57
|
+
Requires-Dist: GitPython>=3.1.0; extra == "vcs"
|
|
58
|
+
Provides-Extra: environment
|
|
59
|
+
Requires-Dist: docker>=6.0.0; extra == "environment"
|
|
60
|
+
Provides-Extra: all-pm
|
|
61
|
+
Requires-Dist: repo-tickets>=0.8.0; extra == "all-pm"
|
|
62
|
+
Requires-Dist: python-docx>=0.8.11; extra == "all-pm"
|
|
63
|
+
Requires-Dist: requests>=2.28.0; extra == "all-pm"
|
|
64
|
+
Requires-Dist: python-telegram-bot>=20.0; extra == "all-pm"
|
|
65
|
+
Requires-Dist: GitPython>=3.1.0; extra == "all-pm"
|
|
66
|
+
Requires-Dist: docker>=6.0.0; extra == "all-pm"
|
|
50
67
|
Provides-Extra: dev
|
|
51
68
|
Requires-Dist: pytest>=7.0.0; extra == "dev"
|
|
52
69
|
Requires-Dist: black>=23.0.0; extra == "dev"
|
|
@@ -68,10 +85,113 @@ Dynamic: license-file
|
|
|
68
85
|
[](https://github.com/thinmanj/homebrew-tap)
|
|
69
86
|
[](https://github.com/psf/black)
|
|
70
87
|
|
|
71
|
-
A powerful command-line tool for developers using Claude AI with multi-API routing, test generation, code review,
|
|
88
|
+
A powerful command-line tool for developers using Claude AI with multi-API routing, test generation, code review, comprehensive usage tracking, and **AI-powered project automation**.
|
|
72
89
|
|
|
73
90
|
## Features
|
|
74
91
|
|
|
92
|
+
### 🧠 Intelligent Context Gathering (v0.18.0+) ✨ **NEW**
|
|
93
|
+
|
|
94
|
+
**AI learns your codebase patterns before generating code:**
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
# Automatically gathers context (language, framework, conventions, similar code)
|
|
98
|
+
cdc ticket execute TASK-123 --commit --notify
|
|
99
|
+
|
|
100
|
+
# Skip context gathering for faster execution
|
|
101
|
+
cdc ticket execute TASK-456 --no-context
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
**What context is gathered:**
|
|
105
|
+
- 🗂️ Language & Framework (Python/Django, JS/React, Go, etc.)
|
|
106
|
+
- 📦 Dependencies (requirements.txt, package.json, go.mod)
|
|
107
|
+
- 📁 Directory Structure (models/, views/, controllers/, tests/)
|
|
108
|
+
- 📝 Naming Conventions (snake_case, camelCase, PascalCase)
|
|
109
|
+
- 🔍 Similar Existing Code (based on ticket keywords)
|
|
110
|
+
- ⚙️ Common Imports & Patterns
|
|
111
|
+
|
|
112
|
+
**Result:** AI generates code that follows YOUR project's patterns, not generic templates!
|
|
113
|
+
|
|
114
|
+
See [CONTEXT_INTELLIGENCE.md](CONTEXT_INTELLIGENCE.md) for full details.
|
|
115
|
+
|
|
116
|
+
### 🤖 AI-Powered Project Automation (v0.17.0+)
|
|
117
|
+
|
|
118
|
+
**Transform tickets into working code automatically:**
|
|
119
|
+
|
|
120
|
+
```bash
|
|
121
|
+
# Execute a ticket end-to-end: fetch → analyze → generate code → tests → commit
|
|
122
|
+
cdc ticket execute TASK-123 --commit --notify
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
**What happens:**
|
|
126
|
+
1. 📥 Fetches ticket from backend (repo-tickets, Jira, Linear, GitHub Issues)
|
|
127
|
+
2. 🧠 AI analyzes requirements and acceptance criteria
|
|
128
|
+
3. 💻 Generates production-ready implementation code
|
|
129
|
+
4. ✅ Generates comprehensive tests
|
|
130
|
+
5. 📝 Commits to git with conventional format + co-author
|
|
131
|
+
6. 🎫 Updates ticket status to "completed"
|
|
132
|
+
7. 📊 Logs all progress to `.cdc-logs/progress.md`
|
|
133
|
+
8. 🔔 Sends push notifications (FREE via ntfy.sh)
|
|
134
|
+
|
|
135
|
+
**Ticket Management:**
|
|
136
|
+
```bash
|
|
137
|
+
# Create tickets
|
|
138
|
+
cdc tickets create "Add user authentication" --priority high --type feature
|
|
139
|
+
|
|
140
|
+
# List tickets
|
|
141
|
+
cdc tickets list --status open
|
|
142
|
+
|
|
143
|
+
# Multi-backend support
|
|
144
|
+
cdc ticket execute TASK-456 --backend repo-tickets
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
**AI-Powered Bug Triage:**
|
|
148
|
+
```bash
|
|
149
|
+
# Report bugs with automatic severity/category classification
|
|
150
|
+
cdc bug report \
|
|
151
|
+
--title "App crashes on startup" \
|
|
152
|
+
--description "Application fails to launch" \
|
|
153
|
+
--expected "App should start normally" \
|
|
154
|
+
--actual "App crashes immediately" \
|
|
155
|
+
--steps "Open app" --steps "Wait 2 seconds" \
|
|
156
|
+
--environment production
|
|
157
|
+
|
|
158
|
+
# AI automatically assigns:
|
|
159
|
+
# ✅ Severity: CRITICAL (crash detected)
|
|
160
|
+
# ✅ Category: CRASH
|
|
161
|
+
# ✅ Priority: critical
|
|
162
|
+
# ✅ Sends urgent notification
|
|
163
|
+
# ✅ Detects duplicates
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
**Progress Tracking:**
|
|
167
|
+
```bash
|
|
168
|
+
# Initialize logging
|
|
169
|
+
cdc log init "My Project"
|
|
170
|
+
|
|
171
|
+
# Add entries
|
|
172
|
+
cdc log entry "Completed auth module" --ticket TASK-123 --level success
|
|
173
|
+
|
|
174
|
+
# Generate reports
|
|
175
|
+
cdc log report # Beautiful markdown summary with stats
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
**Features:**
|
|
179
|
+
- 🎫 **Ticket Backends**: repo-tickets, Jira, Linear, GitHub Issues, Markdown (fallback)
|
|
180
|
+
- 🤖 **Full AI Automation**: Requirements → Code → Tests → Commit → Deploy
|
|
181
|
+
- 🐛 **Smart Bug Triage**: AI classifies severity, category, priority
|
|
182
|
+
- 📊 **Progress Logging**: Markdown-based tracking with artifact linking
|
|
183
|
+
- 🔔 **Notifications**: FREE push notifications via ntfy.sh (no signup!)
|
|
184
|
+
- 🔄 **VCS Integration**: Git commits with co-author attribution
|
|
185
|
+
- 📝 **Structured Data**: BDD scenarios, acceptance criteria, stack traces
|
|
186
|
+
- 🔍 **Duplicate Detection**: Find similar bugs automatically
|
|
187
|
+
- ⚡ **Cost Optimization**: Use FREE local AI (Ollama) for code generation
|
|
188
|
+
|
|
189
|
+
**Install with project management:**
|
|
190
|
+
```bash
|
|
191
|
+
pip install 'claude-dev-cli[all-pm]' # All project management features
|
|
192
|
+
pip install 'claude-dev-cli[project-mgmt]' # Ticket management only
|
|
193
|
+
```
|
|
194
|
+
|
|
75
195
|
### 🌐 Multi-Provider AI Support (v0.14.0+)
|
|
76
196
|
- **Anthropic (Claude)**: GPT-4 class models with 200k context
|
|
77
197
|
- Haiku, Sonnet, Opus - full model family
|
|
@@ -262,6 +382,30 @@ pip install 'claude-dev-cli[toon]'
|
|
|
262
382
|
Adds:
|
|
263
383
|
- `toon-format>=0.1.0` - TOON encoding/decoding
|
|
264
384
|
|
|
385
|
+
**Project Management** (v0.17.0+ - ticket automation, bug triage):
|
|
386
|
+
|
|
387
|
+
```bash
|
|
388
|
+
# Core project management (tickets, logging)
|
|
389
|
+
pip install 'claude-dev-cli[project-mgmt]'
|
|
390
|
+
|
|
391
|
+
# With notifications
|
|
392
|
+
pip install 'claude-dev-cli[notifications]'
|
|
393
|
+
|
|
394
|
+
# With VCS integration
|
|
395
|
+
pip install 'claude-dev-cli[vcs]'
|
|
396
|
+
|
|
397
|
+
# All project management features
|
|
398
|
+
pip install 'claude-dev-cli[all-pm]'
|
|
399
|
+
```
|
|
400
|
+
|
|
401
|
+
Adds:
|
|
402
|
+
- `repo-tickets>=0.8.0` - Ticket management backend
|
|
403
|
+
- `python-docx>=0.8.11` - Document processing
|
|
404
|
+
- `requests>=2.28.0` - HTTP client for notifications
|
|
405
|
+
- `python-telegram-bot>=20.0` - Telegram notifications (optional)
|
|
406
|
+
- `GitPython>=3.1.0` - Git integration
|
|
407
|
+
- `docker>=6.0.0` - Docker environment support
|
|
408
|
+
|
|
265
409
|
**Syntax Highlighting** (enhanced diff display):
|
|
266
410
|
|
|
267
411
|
```bash
|
|
@@ -274,7 +418,7 @@ Adds:
|
|
|
274
418
|
**All Optional Features**:
|
|
275
419
|
|
|
276
420
|
```bash
|
|
277
|
-
pip install 'claude-dev-cli[generation,toon,plugins]'
|
|
421
|
+
pip install 'claude-dev-cli[generation,toon,plugins,all-pm]'
|
|
278
422
|
```
|
|
279
423
|
|
|
280
424
|
**Development Installation** (for contributors):
|
|
@@ -1274,6 +1418,193 @@ cdc usage --api personal
|
|
|
1274
1418
|
cdc usage --api client
|
|
1275
1419
|
```
|
|
1276
1420
|
|
|
1421
|
+
### Project Management & Automation (v0.17.0+)
|
|
1422
|
+
|
|
1423
|
+
#### Automated Ticket Execution
|
|
1424
|
+
|
|
1425
|
+
```bash
|
|
1426
|
+
# Create a ticket
|
|
1427
|
+
cdc tickets create "Implement user authentication API" \
|
|
1428
|
+
--description "JWT-based auth with email/password" \
|
|
1429
|
+
--priority high \
|
|
1430
|
+
--type feature
|
|
1431
|
+
|
|
1432
|
+
# Output: Created ticket: TASK-A1B2C3D4
|
|
1433
|
+
|
|
1434
|
+
# Execute the ticket with full AI automation
|
|
1435
|
+
cdc ticket execute TASK-A1B2C3D4 --commit --notify
|
|
1436
|
+
|
|
1437
|
+
# What happens:
|
|
1438
|
+
# 1. 📥 Fetches ticket and analyzes requirements
|
|
1439
|
+
# 2. 🧠 AI generates implementation plan
|
|
1440
|
+
# 3. 💻 Generates api/auth.py with login endpoint
|
|
1441
|
+
# 4. ✅ Generates tests/test_auth.py with all acceptance criteria
|
|
1442
|
+
# 5. 📝 Commits: "feat(TASK-A1B2C3D4): Implement user authentication API"
|
|
1443
|
+
# 6. 🎫 Updates ticket status to "completed"
|
|
1444
|
+
# 7. 📊 Logs to .cdc-logs/progress.md
|
|
1445
|
+
# 8. 🔔 Sends push notification
|
|
1446
|
+
|
|
1447
|
+
# Review progress
|
|
1448
|
+
cdc log report
|
|
1449
|
+
```
|
|
1450
|
+
|
|
1451
|
+
#### Bug Reporting with AI Triage
|
|
1452
|
+
|
|
1453
|
+
```bash
|
|
1454
|
+
# Report a bug - AI automatically classifies it
|
|
1455
|
+
cdc bug report \
|
|
1456
|
+
--title "App crashes when email contains + character" \
|
|
1457
|
+
--description "Users with + in email address cannot login" \
|
|
1458
|
+
--expected "All valid email addresses should work" \
|
|
1459
|
+
--actual "Server returns 500 error for emails with +" \
|
|
1460
|
+
--steps "Enter email test+user@example.com" \
|
|
1461
|
+
--steps "Click login" \
|
|
1462
|
+
--steps "App crashes" \
|
|
1463
|
+
--environment production
|
|
1464
|
+
|
|
1465
|
+
# AI automatically:
|
|
1466
|
+
# ✅ Severity: HIGH (functionality broken)
|
|
1467
|
+
# ✅ Category: FUNCTIONALITY
|
|
1468
|
+
# ✅ Priority: high
|
|
1469
|
+
# ✅ Creates ticket: BUG-XYZ123
|
|
1470
|
+
# ✅ Checks for duplicates
|
|
1471
|
+
# ✅ Sends notification if critical
|
|
1472
|
+
|
|
1473
|
+
# List all bugs
|
|
1474
|
+
cdc tickets list --status open
|
|
1475
|
+
|
|
1476
|
+
# Execute bug fix
|
|
1477
|
+
cdc ticket execute BUG-XYZ123 --commit
|
|
1478
|
+
```
|
|
1479
|
+
|
|
1480
|
+
#### Progress Tracking
|
|
1481
|
+
|
|
1482
|
+
```bash
|
|
1483
|
+
# Initialize logging for a project
|
|
1484
|
+
cdc log init "E-Commerce Platform"
|
|
1485
|
+
|
|
1486
|
+
# Add manual log entries
|
|
1487
|
+
cdc log entry "Started authentication module" --level info
|
|
1488
|
+
cdc log entry "Completed user registration" --ticket TASK-123 --level success
|
|
1489
|
+
cdc log entry "Found issue with password validation" --level warning
|
|
1490
|
+
|
|
1491
|
+
# Generate full progress report
|
|
1492
|
+
cdc log report
|
|
1493
|
+
|
|
1494
|
+
# Output:
|
|
1495
|
+
# # Progress Summary
|
|
1496
|
+
#
|
|
1497
|
+
# **Total Entries:** 15
|
|
1498
|
+
# **Successes:** ✅ 8
|
|
1499
|
+
# **Errors:** ❌ 1
|
|
1500
|
+
#
|
|
1501
|
+
# ## ✅ 2026-02-01 02:30:15
|
|
1502
|
+
# **Ticket:** TASK-123
|
|
1503
|
+
# Completed user registration
|
|
1504
|
+
# ...
|
|
1505
|
+
```
|
|
1506
|
+
|
|
1507
|
+
#### Using with repo-tickets Backend
|
|
1508
|
+
|
|
1509
|
+
```bash
|
|
1510
|
+
# Install repo-tickets integration
|
|
1511
|
+
pip install 'claude-dev-cli[all-pm]'
|
|
1512
|
+
|
|
1513
|
+
# Navigate to your project with repo-tickets
|
|
1514
|
+
cd my-project
|
|
1515
|
+
tickets init # Initialize repo-tickets if needed
|
|
1516
|
+
|
|
1517
|
+
# Create a ticket in repo-tickets
|
|
1518
|
+
tickets create "Add payment gateway integration"
|
|
1519
|
+
# Output: Created TICKET-456
|
|
1520
|
+
|
|
1521
|
+
# Execute it with AI
|
|
1522
|
+
cdc ticket execute TICKET-456 --backend repo-tickets --commit --notify
|
|
1523
|
+
|
|
1524
|
+
# AI will:
|
|
1525
|
+
# - Fetch ticket from repo-tickets
|
|
1526
|
+
# - Generate payment gateway code
|
|
1527
|
+
# - Generate tests
|
|
1528
|
+
# - Update repo-tickets status
|
|
1529
|
+
# - Commit to your repo
|
|
1530
|
+
```
|
|
1531
|
+
|
|
1532
|
+
#### Cost Optimization with Local AI
|
|
1533
|
+
|
|
1534
|
+
```bash
|
|
1535
|
+
# Use FREE local AI (Ollama) for code generation
|
|
1536
|
+
# Install Ollama first: https://ollama.ai
|
|
1537
|
+
|
|
1538
|
+
# Pull a code model
|
|
1539
|
+
cdc ollama pull codellama
|
|
1540
|
+
|
|
1541
|
+
# Execute ticket with local AI (zero cost!)
|
|
1542
|
+
cdc ticket execute TASK-789 --api local --commit
|
|
1543
|
+
|
|
1544
|
+
# Result: Code generated with $0.00 cost!
|
|
1545
|
+
```
|
|
1546
|
+
|
|
1547
|
+
#### Notifications Setup
|
|
1548
|
+
|
|
1549
|
+
```bash
|
|
1550
|
+
# Test notifications (uses ntfy.sh - FREE, no signup!)
|
|
1551
|
+
cdc notify test --topic my-project
|
|
1552
|
+
|
|
1553
|
+
# Check your phone or browser at: https://ntfy.sh/my-project
|
|
1554
|
+
# You'll see: "✅ claude-dev-cli notifications are working!"
|
|
1555
|
+
|
|
1556
|
+
# All ticket executions can send notifications:
|
|
1557
|
+
cdc ticket execute TASK-999 --commit --notify
|
|
1558
|
+
|
|
1559
|
+
# Critical bugs auto-notify:
|
|
1560
|
+
cdc bug report --title "Database connection fails" \
|
|
1561
|
+
--description "Cannot connect to production DB" \
|
|
1562
|
+
--expected "Should connect" \
|
|
1563
|
+
--actual "Connection timeout" \
|
|
1564
|
+
--environment production
|
|
1565
|
+
# 🚨 Sends URGENT notification automatically
|
|
1566
|
+
```
|
|
1567
|
+
|
|
1568
|
+
#### Complete Workflow Example
|
|
1569
|
+
|
|
1570
|
+
```bash
|
|
1571
|
+
# 1. Setup
|
|
1572
|
+
pip install 'claude-dev-cli[all-pm]'
|
|
1573
|
+
cdc log init "My Awesome Project"
|
|
1574
|
+
|
|
1575
|
+
# 2. Create tickets for your sprint
|
|
1576
|
+
cdc tickets create "User registration" --priority high
|
|
1577
|
+
cdc tickets create "User login" --priority high
|
|
1578
|
+
cdc tickets create "Password reset" --priority medium
|
|
1579
|
+
cdc tickets create "Email verification" --priority low
|
|
1580
|
+
|
|
1581
|
+
# 3. Execute tickets one by one
|
|
1582
|
+
cdc ticket execute TASK-001 --commit --notify
|
|
1583
|
+
cdc ticket execute TASK-002 --commit --notify
|
|
1584
|
+
|
|
1585
|
+
# 4. Bug is reported
|
|
1586
|
+
cdc bug report \
|
|
1587
|
+
--title "Registration fails for Gmail users" \
|
|
1588
|
+
--description "Gmail addresses rejected" \
|
|
1589
|
+
--expected "Should accept all emails" \
|
|
1590
|
+
--actual "Validation error"
|
|
1591
|
+
|
|
1592
|
+
# 5. Fix the bug
|
|
1593
|
+
cdc ticket execute BUG-001 --commit --notify
|
|
1594
|
+
|
|
1595
|
+
# 6. Review progress
|
|
1596
|
+
cdc log report
|
|
1597
|
+
cdc tickets list
|
|
1598
|
+
|
|
1599
|
+
# 7. All done! 🎉
|
|
1600
|
+
# - Code generated
|
|
1601
|
+
# - Tests written
|
|
1602
|
+
# - Tickets updated
|
|
1603
|
+
# - Commits made
|
|
1604
|
+
# - Team notified
|
|
1605
|
+
# - Progress logged
|
|
1606
|
+
```
|
|
1607
|
+
|
|
1277
1608
|
## Environment Variables
|
|
1278
1609
|
|
|
1279
1610
|
| Variable | Description |
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
claude_dev_cli/__init__.py,sha256=
|
|
2
|
-
claude_dev_cli/cli.py,sha256=
|
|
1
|
+
claude_dev_cli/__init__.py,sha256=wWaUbIAPXpAw5KfHf0BkHCBEXP08COIdTt0pH5Wy5a0,470
|
|
2
|
+
claude_dev_cli/cli.py,sha256=X2xdC3tfoyFchguCewyyy_Craa5NztifczcRU6UgODM,122676
|
|
3
3
|
claude_dev_cli/commands.py,sha256=RKGx2rv56PM6eErvA2uoQ20hY8babuI5jav8nCUyUOk,3964
|
|
4
4
|
claude_dev_cli/config.py,sha256=1pycr6LSEKc8yKA4CTavL7mH_JfZYszX9YvAE5Fx9gE,23719
|
|
5
5
|
claude_dev_cli/context.py,sha256=1TlLzpREFZDEIuU7RAtlkjxARKWZpnxHHvK283sUAZE,26714
|
|
@@ -15,20 +15,37 @@ claude_dev_cli/toon_utils.py,sha256=S3px2UvmNEaltmTa5K-h21n2c0CPvYjZc9mc7kHGqNQ,
|
|
|
15
15
|
claude_dev_cli/usage.py,sha256=7F92mVUenSsONZxmug3ZLbd-8l1qcbqCAzzLbsrJF5Y,7700
|
|
16
16
|
claude_dev_cli/warp_integration.py,sha256=PDufAJecl7uN0DGz6XW4uDSEeu7Ssg53DOIFKm-AXVg,6909
|
|
17
17
|
claude_dev_cli/workflows.py,sha256=tAo45rsY-GW6cKMAvb6r4IuTnQcepgbAyAbJzxw1QyU,14099
|
|
18
|
+
claude_dev_cli/logging/__init__.py,sha256=BmLpD-hG_Dw_gAjAjG4wuFl0koNbKX97chhXavDCFRQ,241
|
|
19
|
+
claude_dev_cli/logging/logger.py,sha256=Jr8yDItPc-DDTFBiUwOJeH1EjHej8lU4TB5Sih6pGT8,2101
|
|
20
|
+
claude_dev_cli/logging/markdown_logger.py,sha256=k7W9-bcv8XMp1qRWoJD2-VS9XhyXodixIChV2uPC4XQ,4021
|
|
21
|
+
claude_dev_cli/notifications/__init__.py,sha256=D0sAXO--_8K1h_7P6GdnwEim5QC88lFkWCLIQZ38ftY,270
|
|
22
|
+
claude_dev_cli/notifications/notifier.py,sha256=a3yX5bjqQp0cjiQ6iMQs8tEf3_oEGa7iXQgdgiJWm8w,1739
|
|
23
|
+
claude_dev_cli/notifications/ntfy.py,sha256=bPaFS8LaSRhOACU-47xT4NMgPOUAdrCTuNV-R0RktLM,2619
|
|
18
24
|
claude_dev_cli/plugins/__init__.py,sha256=BdiZlylBzEgnwK2tuEdn8cITxhAZRVbTnDbWhdDhgqs,1340
|
|
19
25
|
claude_dev_cli/plugins/base.py,sha256=H4HQet1I-a3WLCfE9F06Lp8NuFvVoIlou7sIgyJFK-c,1417
|
|
20
26
|
claude_dev_cli/plugins/diff_editor/__init__.py,sha256=gqR5S2TyIVuq-sK107fegsutQ7Z-sgAIEbtc71FhXIM,101
|
|
21
27
|
claude_dev_cli/plugins/diff_editor/plugin.py,sha256=M1bUoqpasD3ZNQo36Fu_8g92uySPZyG_ujMbj5UplsU,3073
|
|
22
28
|
claude_dev_cli/plugins/diff_editor/viewer.py,sha256=1IOXIKw_01ppJx5C1dQt9Kr6U1TdAHT8_iUT5r_q0NM,17169
|
|
29
|
+
claude_dev_cli/project/__init__.py,sha256=dXy7Ei-78b9lZmT2GFtOZHd6Nmm9yy77UObkQUTDX-0,440
|
|
30
|
+
claude_dev_cli/project/bug_tracker.py,sha256=-9Bkiyye1FvzmgMOE4nWhv_SLJuWuC6NwDlRLZ-gwws,16178
|
|
31
|
+
claude_dev_cli/project/context_gatherer.py,sha256=0VR8QN6enVXEusiUQwZShFaC2rhmoXVinpB_ECQcSak,22284
|
|
32
|
+
claude_dev_cli/project/executor.py,sha256=SYSPFTeduJELNsevcuo65ePgXZ_c6_rTkbDAmWnchL8,14472
|
|
23
33
|
claude_dev_cli/providers/__init__.py,sha256=QMD2V_fhvspaCqMQRK4A53yMjIioxDcOHGZuOUs0hRs,657
|
|
24
34
|
claude_dev_cli/providers/anthropic.py,sha256=cBD_vbwcQjyn4wFcv6A2mtCTncjX3rqNs2B5B8vp5jA,7396
|
|
25
35
|
claude_dev_cli/providers/base.py,sha256=KC2KQKGbR5_Oz_Xf5bjrGoEI-b3nfikRP5FXSy-4OP8,4640
|
|
26
36
|
claude_dev_cli/providers/factory.py,sha256=w9LXY1U7HZcDoYcGcRpFTcjl0IpzvO_7QaIl7yo1p5M,3978
|
|
27
37
|
claude_dev_cli/providers/ollama.py,sha256=DeetIbBmVifT2E5EIz7leZwsCWvP4kHwBkYfKCaCOjk,9642
|
|
28
38
|
claude_dev_cli/providers/openai.py,sha256=UV8XAYTzhcAaX9KgV4Dkm5UAt1EsEUQ2RFsJkg0x3CY,9405
|
|
29
|
-
claude_dev_cli
|
|
30
|
-
claude_dev_cli
|
|
31
|
-
claude_dev_cli
|
|
32
|
-
claude_dev_cli
|
|
33
|
-
claude_dev_cli
|
|
34
|
-
claude_dev_cli
|
|
39
|
+
claude_dev_cli/tickets/__init__.py,sha256=fhFp_sq89Hybuyvu5oZrnlj3qByCqN4kijr5rrmIJDE,319
|
|
40
|
+
claude_dev_cli/tickets/backend.py,sha256=tfiAxhfVi4haKmeMZ-YpLV2Q8TIKdsdNtkO9FtHgnhU,6318
|
|
41
|
+
claude_dev_cli/tickets/markdown.py,sha256=rv6jMQ5sPYdRLmdV6lDkupYMEG7ZbdPzM1fuZ0YIncA,11181
|
|
42
|
+
claude_dev_cli/tickets/repo_tickets.py,sha256=M_3s-bGrNbc7bbTwGJICK7P6x-nA1wwjhvaJQtcQ3Rg,11979
|
|
43
|
+
claude_dev_cli/vcs/__init__.py,sha256=UUdv-GCbejOEAPOGeoaGnZ1bXIOqvnx3QttexxlsQ3k,198
|
|
44
|
+
claude_dev_cli/vcs/git.py,sha256=lf_xuj0y3mkFXpvFsWa4UkjsPYKxGEs1rngm92C96BU,5096
|
|
45
|
+
claude_dev_cli/vcs/manager.py,sha256=ARXxrcIeO4zR8qrLCyyok_5JzbbeWgdXKnk-48UrA9k,2223
|
|
46
|
+
claude_dev_cli-0.18.0.dist-info/licenses/LICENSE,sha256=DGueuJwMJtMwgLO5mWlS0TaeBrFwQuNpNZ22PU9J2bw,1062
|
|
47
|
+
claude_dev_cli-0.18.0.dist-info/METADATA,sha256=g3G_9lmNXUlODAy9RvvJhFZ9lv449JyLpj-srfH2HNI,50423
|
|
48
|
+
claude_dev_cli-0.18.0.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
|
|
49
|
+
claude_dev_cli-0.18.0.dist-info/entry_points.txt,sha256=zymgUIIVpFTARkFmxAuW2A4BQsNITh_L0uU-XunytHg,85
|
|
50
|
+
claude_dev_cli-0.18.0.dist-info/top_level.txt,sha256=m7MF6LOIuTe41IT5Fgt0lc-DK1EgM4gUU_IZwWxK0pg,15
|
|
51
|
+
claude_dev_cli-0.18.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|