codespy-ai 0.1.0__tar.gz → 0.1.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.
- {codespy_ai-0.1.0 → codespy_ai-0.1.1}/PKG-INFO +64 -4
- {codespy_ai-0.1.0 → codespy_ai-0.1.1}/README.md +63 -3
- {codespy_ai-0.1.0 → codespy_ai-0.1.1}/pyproject.toml +1 -1
- {codespy_ai-0.1.0 → codespy_ai-0.1.1}/LICENSE +0 -0
- {codespy_ai-0.1.0 → codespy_ai-0.1.1}/src/codespy/__init__.py +0 -0
- {codespy_ai-0.1.0 → codespy_ai-0.1.1}/src/codespy/agents/__init__.py +0 -0
- {codespy_ai-0.1.0 → codespy_ai-0.1.1}/src/codespy/agents/cost_tracker.py +0 -0
- {codespy_ai-0.1.0 → codespy_ai-0.1.1}/src/codespy/agents/dspy_config.py +0 -0
- {codespy_ai-0.1.0 → codespy_ai-0.1.1}/src/codespy/agents/reviewer/__init__.py +0 -0
- {codespy_ai-0.1.0 → codespy_ai-0.1.1}/src/codespy/agents/reviewer/models.py +0 -0
- {codespy_ai-0.1.0 → codespy_ai-0.1.1}/src/codespy/agents/reviewer/modules/__init__.py +0 -0
- {codespy_ai-0.1.0 → codespy_ai-0.1.1}/src/codespy/agents/reviewer/modules/bug_detector.py +0 -0
- {codespy_ai-0.1.0 → codespy_ai-0.1.1}/src/codespy/agents/reviewer/modules/deduplicator.py +0 -0
- {codespy_ai-0.1.0 → codespy_ai-0.1.1}/src/codespy/agents/reviewer/modules/doc_reviewer.py +0 -0
- {codespy_ai-0.1.0 → codespy_ai-0.1.1}/src/codespy/agents/reviewer/modules/domain_expert.py +0 -0
- {codespy_ai-0.1.0 → codespy_ai-0.1.1}/src/codespy/agents/reviewer/modules/helpers.py +0 -0
- {codespy_ai-0.1.0 → codespy_ai-0.1.1}/src/codespy/agents/reviewer/modules/scope_identifier.py +0 -0
- {codespy_ai-0.1.0 → codespy_ai-0.1.1}/src/codespy/agents/reviewer/modules/security_auditor.py +0 -0
- {codespy_ai-0.1.0 → codespy_ai-0.1.1}/src/codespy/agents/reviewer/reporters/__init__.py +0 -0
- {codespy_ai-0.1.0 → codespy_ai-0.1.1}/src/codespy/agents/reviewer/reporters/base.py +0 -0
- {codespy_ai-0.1.0 → codespy_ai-0.1.1}/src/codespy/agents/reviewer/reporters/github_pr.py +0 -0
- {codespy_ai-0.1.0 → codespy_ai-0.1.1}/src/codespy/agents/reviewer/reporters/stdout.py +0 -0
- {codespy_ai-0.1.0 → codespy_ai-0.1.1}/src/codespy/agents/reviewer/reviewer.py +0 -0
- {codespy_ai-0.1.0 → codespy_ai-0.1.1}/src/codespy/cli.py +0 -0
- {codespy_ai-0.1.0 → codespy_ai-0.1.1}/src/codespy/config.py +0 -0
- {codespy_ai-0.1.0 → codespy_ai-0.1.1}/src/codespy/config_dspy.py +0 -0
- {codespy_ai-0.1.0 → codespy_ai-0.1.1}/src/codespy/config_git.py +0 -0
- {codespy_ai-0.1.0 → codespy_ai-0.1.1}/src/codespy/config_io.py +0 -0
- {codespy_ai-0.1.0 → codespy_ai-0.1.1}/src/codespy/config_llm.py +0 -0
- {codespy_ai-0.1.0 → codespy_ai-0.1.1}/src/codespy/tools/__init__.py +0 -0
- {codespy_ai-0.1.0 → codespy_ai-0.1.1}/src/codespy/tools/cyber/__init__.py +0 -0
- {codespy_ai-0.1.0 → codespy_ai-0.1.1}/src/codespy/tools/cyber/osv/__init__.py +0 -0
- {codespy_ai-0.1.0 → codespy_ai-0.1.1}/src/codespy/tools/cyber/osv/client.py +0 -0
- {codespy_ai-0.1.0 → codespy_ai-0.1.1}/src/codespy/tools/cyber/osv/models.py +0 -0
- {codespy_ai-0.1.0 → codespy_ai-0.1.1}/src/codespy/tools/cyber/osv/server.py +0 -0
- {codespy_ai-0.1.0 → codespy_ai-0.1.1}/src/codespy/tools/filesystem/__init__.py +0 -0
- {codespy_ai-0.1.0 → codespy_ai-0.1.1}/src/codespy/tools/filesystem/client.py +0 -0
- {codespy_ai-0.1.0 → codespy_ai-0.1.1}/src/codespy/tools/filesystem/models.py +0 -0
- {codespy_ai-0.1.0 → codespy_ai-0.1.1}/src/codespy/tools/filesystem/server.py +0 -0
- {codespy_ai-0.1.0 → codespy_ai-0.1.1}/src/codespy/tools/github/__init__.py +0 -0
- {codespy_ai-0.1.0 → codespy_ai-0.1.1}/src/codespy/tools/github/client.py +0 -0
- {codespy_ai-0.1.0 → codespy_ai-0.1.1}/src/codespy/tools/github/models.py +0 -0
- {codespy_ai-0.1.0 → codespy_ai-0.1.1}/src/codespy/tools/github/server.py +0 -0
- {codespy_ai-0.1.0 → codespy_ai-0.1.1}/src/codespy/tools/mcp_utils.py +0 -0
- {codespy_ai-0.1.0 → codespy_ai-0.1.1}/src/codespy/tools/parsers/__init__.py +0 -0
- {codespy_ai-0.1.0 → codespy_ai-0.1.1}/src/codespy/tools/parsers/ripgrep/__init__.py +0 -0
- {codespy_ai-0.1.0 → codespy_ai-0.1.1}/src/codespy/tools/parsers/ripgrep/client.py +0 -0
- {codespy_ai-0.1.0 → codespy_ai-0.1.1}/src/codespy/tools/parsers/ripgrep/server.py +0 -0
- {codespy_ai-0.1.0 → codespy_ai-0.1.1}/src/codespy/tools/parsers/treesitter/__init__.py +0 -0
- {codespy_ai-0.1.0 → codespy_ai-0.1.1}/src/codespy/tools/parsers/treesitter/base_extractor.py +0 -0
- {codespy_ai-0.1.0 → codespy_ai-0.1.1}/src/codespy/tools/parsers/treesitter/extractors/__init__.py +0 -0
- {codespy_ai-0.1.0 → codespy_ai-0.1.1}/src/codespy/tools/parsers/treesitter/extractors/go.py +0 -0
- {codespy_ai-0.1.0 → codespy_ai-0.1.1}/src/codespy/tools/parsers/treesitter/extractors/java.py +0 -0
- {codespy_ai-0.1.0 → codespy_ai-0.1.1}/src/codespy/tools/parsers/treesitter/extractors/javascript.py +0 -0
- {codespy_ai-0.1.0 → codespy_ai-0.1.1}/src/codespy/tools/parsers/treesitter/extractors/kotlin.py +0 -0
- {codespy_ai-0.1.0 → codespy_ai-0.1.1}/src/codespy/tools/parsers/treesitter/extractors/objc.py +0 -0
- {codespy_ai-0.1.0 → codespy_ai-0.1.1}/src/codespy/tools/parsers/treesitter/extractors/python.py +0 -0
- {codespy_ai-0.1.0 → codespy_ai-0.1.1}/src/codespy/tools/parsers/treesitter/extractors/rust.py +0 -0
- {codespy_ai-0.1.0 → codespy_ai-0.1.1}/src/codespy/tools/parsers/treesitter/extractors/swift.py +0 -0
- {codespy_ai-0.1.0 → codespy_ai-0.1.1}/src/codespy/tools/parsers/treesitter/extractors/terraform.py +0 -0
- {codespy_ai-0.1.0 → codespy_ai-0.1.1}/src/codespy/tools/parsers/treesitter/models.py +0 -0
- {codespy_ai-0.1.0 → codespy_ai-0.1.1}/src/codespy/tools/parsers/treesitter/parser.py +0 -0
- {codespy_ai-0.1.0 → codespy_ai-0.1.1}/src/codespy/tools/parsers/treesitter/server.py +0 -0
- {codespy_ai-0.1.0 → codespy_ai-0.1.1}/src/codespy/tools/web/__init__.py +0 -0
- {codespy_ai-0.1.0 → codespy_ai-0.1.1}/src/codespy/tools/web/client.py +0 -0
- {codespy_ai-0.1.0 → codespy_ai-0.1.1}/src/codespy/tools/web/models.py +0 -0
- {codespy_ai-0.1.0 → codespy_ai-0.1.1}/src/codespy/tools/web/server.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: codespy-ai
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.1
|
|
4
4
|
Summary: Code review agent powered by DSPy
|
|
5
5
|
License: MIT
|
|
6
6
|
License-File: LICENSE
|
|
@@ -52,7 +52,7 @@ Description-Content-Type: text/markdown
|
|
|
52
52
|
<img src="assets/codespy-logo.png" alt="CodeSpy logo">
|
|
53
53
|
</p>
|
|
54
54
|
|
|
55
|
-
<h1 align="center">
|
|
55
|
+
<h1 align="center">Code<a href="https://github.com/khezen/codespy">Spy</a></h1>
|
|
56
56
|
|
|
57
57
|
<p align="center">
|
|
58
58
|
<strong>Automated code reviews for teams who care about correctness.</strong>
|
|
@@ -113,6 +113,7 @@ Built for **engineering teams that care about correctness, security, and control
|
|
|
113
113
|
- 💰 **Cost Tracking** - Track LLM calls, tokens, and costs per review
|
|
114
114
|
- 🤖 **Model Agnostic** - Works with OpenAI, AWS Bedrock, Anthropic, Ollama, and more via LiteLLM
|
|
115
115
|
- 🐳 **Docker Ready** - Run locally or in the cloud with Docker
|
|
116
|
+
- 🔌 **GitHub Action** - One-line integration for automatic PR reviews
|
|
116
117
|
|
|
117
118
|
---
|
|
118
119
|
|
|
@@ -124,6 +125,13 @@ Built for **engineering teams that care about correctness, security, and control
|
|
|
124
125
|
pip install codespy-ai
|
|
125
126
|
```
|
|
126
127
|
|
|
128
|
+
### Using Homebrew (macOS/Linux)
|
|
129
|
+
|
|
130
|
+
```bash
|
|
131
|
+
brew tap khezen/codespy
|
|
132
|
+
brew install codespy
|
|
133
|
+
```
|
|
134
|
+
|
|
127
135
|
### Using Docker
|
|
128
136
|
|
|
129
137
|
```bash
|
|
@@ -221,6 +229,59 @@ docker run --rm \
|
|
|
221
229
|
ghcr.io/khezen/codespy:0.1.0 review https://github.com/owner/repo/pull/123
|
|
222
230
|
```
|
|
223
231
|
|
|
232
|
+
### GitHub Action
|
|
233
|
+
|
|
234
|
+
Add CodeSpy to your repository for automatic PR reviews:
|
|
235
|
+
|
|
236
|
+
```yaml
|
|
237
|
+
# .github/workflows/codespy-review.yml
|
|
238
|
+
name: CodeSpy Code Review
|
|
239
|
+
|
|
240
|
+
on:
|
|
241
|
+
pull_request:
|
|
242
|
+
types: [opened, synchronize, reopened]
|
|
243
|
+
|
|
244
|
+
jobs:
|
|
245
|
+
review:
|
|
246
|
+
runs-on: ubuntu-latest
|
|
247
|
+
permissions:
|
|
248
|
+
contents: read
|
|
249
|
+
pull-requests: write
|
|
250
|
+
|
|
251
|
+
steps:
|
|
252
|
+
- name: Run CodeSpy Review
|
|
253
|
+
uses: khezen/codespy@v1
|
|
254
|
+
with:
|
|
255
|
+
model: 'claude-sonnet-4-5-20250929'
|
|
256
|
+
anthropic-api-key: ${{ secrets.ANTHROPIC_API_KEY }}
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
**Available Providers:**
|
|
260
|
+
|
|
261
|
+
```yaml
|
|
262
|
+
# OpenAI
|
|
263
|
+
- uses: khezen/codespy@v1
|
|
264
|
+
with:
|
|
265
|
+
model: 'gpt-5'
|
|
266
|
+
openai-api-key: ${{ secrets.OPENAI_API_KEY }}
|
|
267
|
+
|
|
268
|
+
# AWS Bedrock
|
|
269
|
+
- uses: khezen/codespy@v1
|
|
270
|
+
with:
|
|
271
|
+
model: 'bedrock/us.anthropic.claude-sonnet-4-5-20250929-v1:0'
|
|
272
|
+
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
|
273
|
+
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
|
274
|
+
aws-region: 'us-east-1'
|
|
275
|
+
|
|
276
|
+
# Google Gemini
|
|
277
|
+
- uses: khezen/codespy@v1
|
|
278
|
+
with:
|
|
279
|
+
model: 'gemini/gemini-2.5-pro'
|
|
280
|
+
gemini-api-key: ${{ secrets.GEMINI_API_KEY }}
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
See [`.github/workflows/codespy-review.yml.example`](.github/workflows/codespy-review.yml.example) for more examples.
|
|
284
|
+
|
|
224
285
|
---
|
|
225
286
|
|
|
226
287
|
## Configuration
|
|
@@ -234,9 +295,8 @@ Priority: Environment Variables > YAML Config > Defaults
|
|
|
234
295
|
### Setup
|
|
235
296
|
|
|
236
297
|
```bash
|
|
237
|
-
# Copy the example
|
|
298
|
+
# Copy the example file
|
|
238
299
|
cp .env.example .env
|
|
239
|
-
cp codespy.example.yaml codespy.yaml # Optional, for advanced config
|
|
240
300
|
```
|
|
241
301
|
|
|
242
302
|
### GitHub Token
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
<img src="assets/codespy-logo.png" alt="CodeSpy logo">
|
|
3
3
|
</p>
|
|
4
4
|
|
|
5
|
-
<h1 align="center">
|
|
5
|
+
<h1 align="center">Code<a href="https://github.com/khezen/codespy">Spy</a></h1>
|
|
6
6
|
|
|
7
7
|
<p align="center">
|
|
8
8
|
<strong>Automated code reviews for teams who care about correctness.</strong>
|
|
@@ -63,6 +63,7 @@ Built for **engineering teams that care about correctness, security, and control
|
|
|
63
63
|
- 💰 **Cost Tracking** - Track LLM calls, tokens, and costs per review
|
|
64
64
|
- 🤖 **Model Agnostic** - Works with OpenAI, AWS Bedrock, Anthropic, Ollama, and more via LiteLLM
|
|
65
65
|
- 🐳 **Docker Ready** - Run locally or in the cloud with Docker
|
|
66
|
+
- 🔌 **GitHub Action** - One-line integration for automatic PR reviews
|
|
66
67
|
|
|
67
68
|
---
|
|
68
69
|
|
|
@@ -74,6 +75,13 @@ Built for **engineering teams that care about correctness, security, and control
|
|
|
74
75
|
pip install codespy-ai
|
|
75
76
|
```
|
|
76
77
|
|
|
78
|
+
### Using Homebrew (macOS/Linux)
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
brew tap khezen/codespy
|
|
82
|
+
brew install codespy
|
|
83
|
+
```
|
|
84
|
+
|
|
77
85
|
### Using Docker
|
|
78
86
|
|
|
79
87
|
```bash
|
|
@@ -171,6 +179,59 @@ docker run --rm \
|
|
|
171
179
|
ghcr.io/khezen/codespy:0.1.0 review https://github.com/owner/repo/pull/123
|
|
172
180
|
```
|
|
173
181
|
|
|
182
|
+
### GitHub Action
|
|
183
|
+
|
|
184
|
+
Add CodeSpy to your repository for automatic PR reviews:
|
|
185
|
+
|
|
186
|
+
```yaml
|
|
187
|
+
# .github/workflows/codespy-review.yml
|
|
188
|
+
name: CodeSpy Code Review
|
|
189
|
+
|
|
190
|
+
on:
|
|
191
|
+
pull_request:
|
|
192
|
+
types: [opened, synchronize, reopened]
|
|
193
|
+
|
|
194
|
+
jobs:
|
|
195
|
+
review:
|
|
196
|
+
runs-on: ubuntu-latest
|
|
197
|
+
permissions:
|
|
198
|
+
contents: read
|
|
199
|
+
pull-requests: write
|
|
200
|
+
|
|
201
|
+
steps:
|
|
202
|
+
- name: Run CodeSpy Review
|
|
203
|
+
uses: khezen/codespy@v1
|
|
204
|
+
with:
|
|
205
|
+
model: 'claude-sonnet-4-5-20250929'
|
|
206
|
+
anthropic-api-key: ${{ secrets.ANTHROPIC_API_KEY }}
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
**Available Providers:**
|
|
210
|
+
|
|
211
|
+
```yaml
|
|
212
|
+
# OpenAI
|
|
213
|
+
- uses: khezen/codespy@v1
|
|
214
|
+
with:
|
|
215
|
+
model: 'gpt-5'
|
|
216
|
+
openai-api-key: ${{ secrets.OPENAI_API_KEY }}
|
|
217
|
+
|
|
218
|
+
# AWS Bedrock
|
|
219
|
+
- uses: khezen/codespy@v1
|
|
220
|
+
with:
|
|
221
|
+
model: 'bedrock/us.anthropic.claude-sonnet-4-5-20250929-v1:0'
|
|
222
|
+
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
|
223
|
+
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
|
224
|
+
aws-region: 'us-east-1'
|
|
225
|
+
|
|
226
|
+
# Google Gemini
|
|
227
|
+
- uses: khezen/codespy@v1
|
|
228
|
+
with:
|
|
229
|
+
model: 'gemini/gemini-2.5-pro'
|
|
230
|
+
gemini-api-key: ${{ secrets.GEMINI_API_KEY }}
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
See [`.github/workflows/codespy-review.yml.example`](.github/workflows/codespy-review.yml.example) for more examples.
|
|
234
|
+
|
|
174
235
|
---
|
|
175
236
|
|
|
176
237
|
## Configuration
|
|
@@ -184,9 +245,8 @@ Priority: Environment Variables > YAML Config > Defaults
|
|
|
184
245
|
### Setup
|
|
185
246
|
|
|
186
247
|
```bash
|
|
187
|
-
# Copy the example
|
|
248
|
+
# Copy the example file
|
|
188
249
|
cp .env.example .env
|
|
189
|
-
cp codespy.example.yaml codespy.yaml # Optional, for advanced config
|
|
190
250
|
```
|
|
191
251
|
|
|
192
252
|
### GitHub Token
|
|
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
|
{codespy_ai-0.1.0 → codespy_ai-0.1.1}/src/codespy/agents/reviewer/modules/scope_identifier.py
RENAMED
|
File without changes
|
{codespy_ai-0.1.0 → codespy_ai-0.1.1}/src/codespy/agents/reviewer/modules/security_auditor.py
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
|
{codespy_ai-0.1.0 → codespy_ai-0.1.1}/src/codespy/tools/parsers/treesitter/base_extractor.py
RENAMED
|
File without changes
|
{codespy_ai-0.1.0 → codespy_ai-0.1.1}/src/codespy/tools/parsers/treesitter/extractors/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{codespy_ai-0.1.0 → codespy_ai-0.1.1}/src/codespy/tools/parsers/treesitter/extractors/java.py
RENAMED
|
File without changes
|
{codespy_ai-0.1.0 → codespy_ai-0.1.1}/src/codespy/tools/parsers/treesitter/extractors/javascript.py
RENAMED
|
File without changes
|
{codespy_ai-0.1.0 → codespy_ai-0.1.1}/src/codespy/tools/parsers/treesitter/extractors/kotlin.py
RENAMED
|
File without changes
|
{codespy_ai-0.1.0 → codespy_ai-0.1.1}/src/codespy/tools/parsers/treesitter/extractors/objc.py
RENAMED
|
File without changes
|
{codespy_ai-0.1.0 → codespy_ai-0.1.1}/src/codespy/tools/parsers/treesitter/extractors/python.py
RENAMED
|
File without changes
|
{codespy_ai-0.1.0 → codespy_ai-0.1.1}/src/codespy/tools/parsers/treesitter/extractors/rust.py
RENAMED
|
File without changes
|
{codespy_ai-0.1.0 → codespy_ai-0.1.1}/src/codespy/tools/parsers/treesitter/extractors/swift.py
RENAMED
|
File without changes
|
{codespy_ai-0.1.0 → codespy_ai-0.1.1}/src/codespy/tools/parsers/treesitter/extractors/terraform.py
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
|