gitsense-radar 0.2.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.
- gitsense_radar-0.2.0/.github/workflows/ci.yml +37 -0
- gitsense_radar-0.2.0/.github/workflows/publish.yml +25 -0
- gitsense_radar-0.2.0/.gitignore +9 -0
- gitsense_radar-0.2.0/LICENSE +21 -0
- gitsense_radar-0.2.0/PKG-INFO +267 -0
- gitsense_radar-0.2.0/README.md +240 -0
- gitsense_radar-0.2.0/README_CN.md +236 -0
- gitsense_radar-0.2.0/gitsense/__init__.py +3 -0
- gitsense_radar-0.2.0/gitsense/__main__.py +3 -0
- gitsense_radar-0.2.0/gitsense/cli.py +272 -0
- gitsense_radar-0.2.0/gitsense/finder.py +183 -0
- gitsense_radar-0.2.0/gitsense/github_client.py +85 -0
- gitsense_radar-0.2.0/gitsense/radar.py +356 -0
- gitsense_radar-0.2.0/pyproject.toml +47 -0
- gitsense_radar-0.2.0/tests/test_finder.py +71 -0
- gitsense_radar-0.2.0/tests/test_radar.py +204 -0
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
on:
|
|
3
|
+
push:
|
|
4
|
+
branches: [main]
|
|
5
|
+
pull_request:
|
|
6
|
+
branches: [main]
|
|
7
|
+
jobs:
|
|
8
|
+
test:
|
|
9
|
+
runs-on: ${{ matrix.os }}
|
|
10
|
+
strategy:
|
|
11
|
+
fail-fast: false
|
|
12
|
+
matrix:
|
|
13
|
+
os: [ubuntu-latest, windows-latest]
|
|
14
|
+
python-version: ["3.10", "3.11", "3.12", "3.13"]
|
|
15
|
+
steps:
|
|
16
|
+
- uses: actions/checkout@v6
|
|
17
|
+
- uses: actions/setup-python@v6
|
|
18
|
+
with:
|
|
19
|
+
python-version: ${{ matrix.python-version }}
|
|
20
|
+
cache: pip
|
|
21
|
+
- run: python -m pip install -U pip
|
|
22
|
+
- run: python -m pip install -e ".[dev]"
|
|
23
|
+
- run: python -m ruff check .
|
|
24
|
+
- run: python -m pytest tests/ -v
|
|
25
|
+
- run: python -m compileall -q gitsense tests
|
|
26
|
+
|
|
27
|
+
package:
|
|
28
|
+
runs-on: ubuntu-latest
|
|
29
|
+
steps:
|
|
30
|
+
- uses: actions/checkout@v6
|
|
31
|
+
- uses: actions/setup-python@v6
|
|
32
|
+
with:
|
|
33
|
+
python-version: "3.13"
|
|
34
|
+
cache: pip
|
|
35
|
+
- run: python -m pip install -U pip build twine
|
|
36
|
+
- run: python -m build
|
|
37
|
+
- run: python -m twine check dist/*
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
name: Publish
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
release:
|
|
5
|
+
types: [published]
|
|
6
|
+
workflow_dispatch:
|
|
7
|
+
|
|
8
|
+
permissions:
|
|
9
|
+
contents: read
|
|
10
|
+
id-token: write
|
|
11
|
+
|
|
12
|
+
jobs:
|
|
13
|
+
publish:
|
|
14
|
+
runs-on: ubuntu-latest
|
|
15
|
+
environment: pypi
|
|
16
|
+
steps:
|
|
17
|
+
- uses: actions/checkout@v6
|
|
18
|
+
- uses: actions/setup-python@v6
|
|
19
|
+
with:
|
|
20
|
+
python-version: "3.13"
|
|
21
|
+
cache: pip
|
|
22
|
+
- run: python -m pip install -U pip build twine
|
|
23
|
+
- run: python -m build
|
|
24
|
+
- run: python -m twine check dist/*
|
|
25
|
+
- uses: pypa/gh-action-pypi-publish@release/v1
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Yufeng He
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: gitsense-radar
|
|
3
|
+
Version: 0.2.0
|
|
4
|
+
Summary: AI-powered open source contribution finder and repo radar
|
|
5
|
+
Project-URL: Homepage, https://github.com/he-yufeng/GitSense
|
|
6
|
+
Project-URL: Repository, https://github.com/he-yufeng/GitSense
|
|
7
|
+
Author-email: Yufeng He <40085740+he-yufeng@users.noreply.github.com>
|
|
8
|
+
License-Expression: MIT
|
|
9
|
+
License-File: LICENSE
|
|
10
|
+
Keywords: agent,ai,contribution,github,llm,maintainer,open-source,pr
|
|
11
|
+
Classifier: Development Status :: 4 - Beta
|
|
12
|
+
Classifier: Intended Audience :: Developers
|
|
13
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
14
|
+
Classifier: Programming Language :: Python :: 3
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
18
|
+
Requires-Python: >=3.10
|
|
19
|
+
Requires-Dist: click>=8.0
|
|
20
|
+
Requires-Dist: httpx>=0.24
|
|
21
|
+
Requires-Dist: openai>=1.0
|
|
22
|
+
Requires-Dist: rich>=13.0
|
|
23
|
+
Provides-Extra: dev
|
|
24
|
+
Requires-Dist: pytest>=7.0; extra == 'dev'
|
|
25
|
+
Requires-Dist: ruff>=0.4; extra == 'dev'
|
|
26
|
+
Description-Content-Type: text/markdown
|
|
27
|
+
|
|
28
|
+
<div align="center">
|
|
29
|
+
|
|
30
|
+
# GitSense
|
|
31
|
+
|
|
32
|
+
**Find your next open source contribution, then check whether the repo is worth your PR.**
|
|
33
|
+
|
|
34
|
+
Tell it your skills → it searches GitHub for open issues you can fix → ranks them by match → scores repos by maintainer responsiveness and PR merge patterns.
|
|
35
|
+
|
|
36
|
+
[](LICENSE)
|
|
37
|
+
[](https://www.python.org/downloads/)
|
|
38
|
+
[](https://github.com/he-yufeng/GitSense/actions)
|
|
39
|
+
|
|
40
|
+
**[English](README.md) | [中文](README_CN.md)**
|
|
41
|
+
|
|
42
|
+
</div>
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## The Problem
|
|
47
|
+
|
|
48
|
+
You want to contribute to open source, but finding the right issue is painful. You scroll through hundreds of issues on GitHub, most of which are either claimed, too vague, out of your skill range, or just not worth the effort. By the time you find something decent, you've burned an hour on browsing alone.
|
|
49
|
+
|
|
50
|
+
**GitSense** does the searching for you. It queries GitHub for open, unassigned issues across thousands of repos, then uses an LLM to rank them by how well they match YOUR specific skills and tell you exactly how to get started.
|
|
51
|
+
|
|
52
|
+
The new Radar mode answers the next question: is this repo actually worth your PR? It checks public PR history, stale backlog, outsider merge ratio, and maintainer response time before you invest a weekend in a repo that might ignore good work.
|
|
53
|
+
|
|
54
|
+
## Quick Start
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
pip install gitsense-radar
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
# Find issues matching your skills
|
|
62
|
+
gitsense find --skills python,llm,cuda
|
|
63
|
+
|
|
64
|
+
# Target repos with 500+ stars
|
|
65
|
+
gitsense find --skills rust,wasm --stars 500
|
|
66
|
+
|
|
67
|
+
# Filter by label
|
|
68
|
+
gitsense find --skills python --labels bug
|
|
69
|
+
|
|
70
|
+
# Prefer recently active, low-noise issues
|
|
71
|
+
gitsense find --skills python,llm --updated-days 30 --max-comments 10
|
|
72
|
+
|
|
73
|
+
# Scan a specific repo
|
|
74
|
+
gitsense scan vllm-project/vllm --skills python,cuda
|
|
75
|
+
|
|
76
|
+
# Score repos before spending a weekend on a PR
|
|
77
|
+
gitsense radar vllm-project/vllm microsoft/qlib --skills python,llm --out radar.md
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
## Demo
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
$ gitsense find --skills python,llm,cuda --stars 1000
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
```
|
|
87
|
+
Found 24 candidates.
|
|
88
|
+
Ranking with gpt-4o-mini...
|
|
89
|
+
|
|
90
|
+
╭──────────── GitSense Results ────────────╮
|
|
91
|
+
│ Skills: python, llm, cuda │
|
|
92
|
+
│ Results: 8 issues ranked by match │
|
|
93
|
+
╰──────────────────────────────────────────╯
|
|
94
|
+
|
|
95
|
+
1. [9/10] vllm-project/vllm
|
|
96
|
+
Fix CUDA graph memory leak in speculative decoding
|
|
97
|
+
https://github.com/vllm-project/vllm/issues/36200
|
|
98
|
+
Labels: bug, good first issue
|
|
99
|
+
Perfect match — requires CUDA + Python + LLM inference knowledge.
|
|
100
|
+
How to start: Look at vllm/spec_decode/worker.py, the graph
|
|
101
|
+
capture context isn't releasing GPU memory on exception paths.
|
|
102
|
+
|
|
103
|
+
2. [8/10] triton-lang/triton
|
|
104
|
+
Type inference fails for constexpr in nested loops
|
|
105
|
+
https://github.com/triton-lang/triton/issues/9650
|
|
106
|
+
Labels: bug
|
|
107
|
+
Strong match — Python compiler internals, related to GPU kernels.
|
|
108
|
+
How to start: Check code_generator.py visit_For, similar to #9547.
|
|
109
|
+
|
|
110
|
+
3. [7/10] huggingface/transformers
|
|
111
|
+
...
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
## How It Works
|
|
115
|
+
|
|
116
|
+
1. **Search** — Builds targeted GitHub search queries from your skills (e.g. `python is:issue is:open no:assignee stars:>=100`). Searches across all of GitHub, not just repos you follow.
|
|
117
|
+
|
|
118
|
+
2. **Filter** — Deduplicates results, skips archived / already-assigned / stale issues by default, and can drop noisy threads with too many comments.
|
|
119
|
+
|
|
120
|
+
3. **Rank** — Sends the candidates to an LLM along with your skill profile. The LLM scores each issue 1-10 on match quality and provides:
|
|
121
|
+
- Why it's a good match (or not)
|
|
122
|
+
- A concrete hint on how to approach the fix
|
|
123
|
+
|
|
124
|
+
4. **Display** — Renders ranked results in a clean terminal UI with Rich.
|
|
125
|
+
|
|
126
|
+
5. **Radar** — Scores target repos from public PR signals: recent merged PRs, open/stale PR backlog, median merge time, maintainer response time, outside contributor merge ratio, and skill fit.
|
|
127
|
+
|
|
128
|
+
## Usage
|
|
129
|
+
|
|
130
|
+
### Find across all of GitHub
|
|
131
|
+
|
|
132
|
+
```bash
|
|
133
|
+
# Basic — search by skills
|
|
134
|
+
gitsense find --skills python,fastapi,postgres
|
|
135
|
+
|
|
136
|
+
# High-star repos only
|
|
137
|
+
gitsense find --skills go,kubernetes --stars 5000
|
|
138
|
+
|
|
139
|
+
# Bug fixes only
|
|
140
|
+
gitsense find --skills typescript,react --labels bug
|
|
141
|
+
|
|
142
|
+
# Skip LLM ranking (faster, just raw results)
|
|
143
|
+
gitsense find --skills python --no-llm
|
|
144
|
+
|
|
145
|
+
# Use a specific model
|
|
146
|
+
gitsense find --skills python --model anthropic/claude-sonnet-4
|
|
147
|
+
|
|
148
|
+
# Show more results
|
|
149
|
+
gitsense find --skills python --limit 15
|
|
150
|
+
|
|
151
|
+
# Focus on fresh issues and avoid long unresolved debates
|
|
152
|
+
gitsense find --skills python,llm --updated-days 30 --max-comments 10
|
|
153
|
+
|
|
154
|
+
# Include assigned issues when you are intentionally scanning a repo backlog
|
|
155
|
+
gitsense find --skills python --include-assigned
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
### Scan a specific repo
|
|
159
|
+
|
|
160
|
+
```bash
|
|
161
|
+
# List all open unassigned issues
|
|
162
|
+
gitsense scan pytorch/pytorch
|
|
163
|
+
|
|
164
|
+
# Filter by your skills
|
|
165
|
+
gitsense scan HKUDS/LightRAG --skills python,rag
|
|
166
|
+
|
|
167
|
+
# Scan only recently active issues
|
|
168
|
+
gitsense scan vllm-project/vllm --skills python,cuda --updated-days 14
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
### Score repos before opening a PR
|
|
172
|
+
|
|
173
|
+
```bash
|
|
174
|
+
# Compare a few target repos
|
|
175
|
+
gitsense radar vllm-project/vllm microsoft/qlib MoonshotAI/kimi-cli --skills python,llm
|
|
176
|
+
|
|
177
|
+
# Use a file, one owner/repo per line
|
|
178
|
+
gitsense radar --targets targets.txt --skills python,agents --out radar.md
|
|
179
|
+
|
|
180
|
+
# Treat PRs older than two weeks as stale
|
|
181
|
+
gitsense radar stanfordnlp/dspy --stale-days 14
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
Radar is not a prediction oracle. It is a fast triage pass for contributors who care about ROI: recent merge velocity, maintainer response time, stale PR ratio, outsider-friendliness, and whether the repo matches your skill stack.
|
|
185
|
+
|
|
186
|
+
## Configuration
|
|
187
|
+
|
|
188
|
+
### GitHub Token (recommended)
|
|
189
|
+
|
|
190
|
+
Without a token you get 10 requests/minute. With a token, 30/minute:
|
|
191
|
+
|
|
192
|
+
```bash
|
|
193
|
+
export GITHUB_TOKEN=your-github-token
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
### LLM Provider
|
|
197
|
+
|
|
198
|
+
GitSense uses an OpenAI-compatible API for ranking. Without an API key, it still works — you just don't get skill-match scoring.
|
|
199
|
+
|
|
200
|
+
```bash
|
|
201
|
+
# OpenAI
|
|
202
|
+
export OPENAI_API_KEY=your-openai-key
|
|
203
|
+
|
|
204
|
+
# OpenRouter (100+ models)
|
|
205
|
+
export OPENROUTER_API_KEY=your-openrouter-key
|
|
206
|
+
|
|
207
|
+
# Local (Ollama)
|
|
208
|
+
export OPENAI_BASE_URL=http://localhost:11434/v1
|
|
209
|
+
export OPENAI_API_KEY=ollama
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
## Who Is This For?
|
|
213
|
+
|
|
214
|
+
- **Developers building their open source resume** — Find high-impact issues in popular repos that match your skills, so your contributions actually get noticed.
|
|
215
|
+
- **Job seekers targeting specific companies** — `gitsense scan microsoft/autogen --skills python,agents` to find issues in repos you want on your resume.
|
|
216
|
+
- **Hackathon participants** — Quickly find bugs you can fix in a few hours.
|
|
217
|
+
- **Experienced developers looking for side projects** — Discover interesting challenges across the ecosystem that match your expertise.
|
|
218
|
+
|
|
219
|
+
## FAQ
|
|
220
|
+
|
|
221
|
+
**Does this replace looking at issues manually?**
|
|
222
|
+
No. GitSense is a first-pass filter that saves you the time of scrolling through hundreds of issues. You should still read the issue thread and understand the codebase before committing to a contribution.
|
|
223
|
+
|
|
224
|
+
**How accurate is the LLM ranking?**
|
|
225
|
+
The LLM is good at matching keywords and assessing complexity from issue descriptions. It can't tell you whether the maintainers will actually merge your PR or how the codebase is structured. Think of it as a smart sort, not an oracle.
|
|
226
|
+
|
|
227
|
+
**Does this cost money?**
|
|
228
|
+
GitHub search is free (rate-limited without a token). LLM ranking costs whatever your provider charges per call — typically $0.001-0.01 per search with gpt-4o-mini. Use `--no-llm` to skip ranking entirely.
|
|
229
|
+
|
|
230
|
+
## Roadmap
|
|
231
|
+
|
|
232
|
+
- [ ] Profile mode: read your GitHub profile to auto-detect skills
|
|
233
|
+
- [ ] Watch mode: get daily/weekly digests of new matching issues
|
|
234
|
+
- [x] Repo radar: assess maintainer responsiveness before you invest time
|
|
235
|
+
- [ ] PR success prediction: estimate merge probability for a specific draft PR
|
|
236
|
+
|
|
237
|
+
## Contributing
|
|
238
|
+
|
|
239
|
+
Contributions welcome. If GitSense helped you find your first open source contribution, that's the best feedback possible.
|
|
240
|
+
|
|
241
|
+
## Release
|
|
242
|
+
|
|
243
|
+
Releases are published through GitHub Actions with PyPI Trusted Publishing. No PyPI token is stored in the repository.
|
|
244
|
+
|
|
245
|
+
Before publishing for the first time, configure a PyPI trusted publisher for:
|
|
246
|
+
|
|
247
|
+
- project name: `gitsense-radar`
|
|
248
|
+
- owner: `he-yufeng`
|
|
249
|
+
- repository: `GitSense`
|
|
250
|
+
- workflow: `publish.yml`
|
|
251
|
+
- environment: `pypi`
|
|
252
|
+
|
|
253
|
+
Then publish a GitHub release, or run the `Publish` workflow manually. The workflow builds the package, runs `twine check`, and uploads the verified artifacts to PyPI.
|
|
254
|
+
|
|
255
|
+
## License
|
|
256
|
+
|
|
257
|
+
[MIT](LICENSE)
|
|
258
|
+
|
|
259
|
+
---
|
|
260
|
+
|
|
261
|
+
<div align="center">
|
|
262
|
+
|
|
263
|
+
**If GitSense helped you find a good issue to work on, give it a star!**
|
|
264
|
+
|
|
265
|
+
[Report a Bug](https://github.com/he-yufeng/GitSense/issues) · [Request a Feature](https://github.com/he-yufeng/GitSense/issues)
|
|
266
|
+
|
|
267
|
+
</div>
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
<div align="center">
|
|
2
|
+
|
|
3
|
+
# GitSense
|
|
4
|
+
|
|
5
|
+
**Find your next open source contribution, then check whether the repo is worth your PR.**
|
|
6
|
+
|
|
7
|
+
Tell it your skills → it searches GitHub for open issues you can fix → ranks them by match → scores repos by maintainer responsiveness and PR merge patterns.
|
|
8
|
+
|
|
9
|
+
[](LICENSE)
|
|
10
|
+
[](https://www.python.org/downloads/)
|
|
11
|
+
[](https://github.com/he-yufeng/GitSense/actions)
|
|
12
|
+
|
|
13
|
+
**[English](README.md) | [中文](README_CN.md)**
|
|
14
|
+
|
|
15
|
+
</div>
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## The Problem
|
|
20
|
+
|
|
21
|
+
You want to contribute to open source, but finding the right issue is painful. You scroll through hundreds of issues on GitHub, most of which are either claimed, too vague, out of your skill range, or just not worth the effort. By the time you find something decent, you've burned an hour on browsing alone.
|
|
22
|
+
|
|
23
|
+
**GitSense** does the searching for you. It queries GitHub for open, unassigned issues across thousands of repos, then uses an LLM to rank them by how well they match YOUR specific skills and tell you exactly how to get started.
|
|
24
|
+
|
|
25
|
+
The new Radar mode answers the next question: is this repo actually worth your PR? It checks public PR history, stale backlog, outsider merge ratio, and maintainer response time before you invest a weekend in a repo that might ignore good work.
|
|
26
|
+
|
|
27
|
+
## Quick Start
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
pip install gitsense-radar
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
# Find issues matching your skills
|
|
35
|
+
gitsense find --skills python,llm,cuda
|
|
36
|
+
|
|
37
|
+
# Target repos with 500+ stars
|
|
38
|
+
gitsense find --skills rust,wasm --stars 500
|
|
39
|
+
|
|
40
|
+
# Filter by label
|
|
41
|
+
gitsense find --skills python --labels bug
|
|
42
|
+
|
|
43
|
+
# Prefer recently active, low-noise issues
|
|
44
|
+
gitsense find --skills python,llm --updated-days 30 --max-comments 10
|
|
45
|
+
|
|
46
|
+
# Scan a specific repo
|
|
47
|
+
gitsense scan vllm-project/vllm --skills python,cuda
|
|
48
|
+
|
|
49
|
+
# Score repos before spending a weekend on a PR
|
|
50
|
+
gitsense radar vllm-project/vllm microsoft/qlib --skills python,llm --out radar.md
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## Demo
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
$ gitsense find --skills python,llm,cuda --stars 1000
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
```
|
|
60
|
+
Found 24 candidates.
|
|
61
|
+
Ranking with gpt-4o-mini...
|
|
62
|
+
|
|
63
|
+
╭──────────── GitSense Results ────────────╮
|
|
64
|
+
│ Skills: python, llm, cuda │
|
|
65
|
+
│ Results: 8 issues ranked by match │
|
|
66
|
+
╰──────────────────────────────────────────╯
|
|
67
|
+
|
|
68
|
+
1. [9/10] vllm-project/vllm
|
|
69
|
+
Fix CUDA graph memory leak in speculative decoding
|
|
70
|
+
https://github.com/vllm-project/vllm/issues/36200
|
|
71
|
+
Labels: bug, good first issue
|
|
72
|
+
Perfect match — requires CUDA + Python + LLM inference knowledge.
|
|
73
|
+
How to start: Look at vllm/spec_decode/worker.py, the graph
|
|
74
|
+
capture context isn't releasing GPU memory on exception paths.
|
|
75
|
+
|
|
76
|
+
2. [8/10] triton-lang/triton
|
|
77
|
+
Type inference fails for constexpr in nested loops
|
|
78
|
+
https://github.com/triton-lang/triton/issues/9650
|
|
79
|
+
Labels: bug
|
|
80
|
+
Strong match — Python compiler internals, related to GPU kernels.
|
|
81
|
+
How to start: Check code_generator.py visit_For, similar to #9547.
|
|
82
|
+
|
|
83
|
+
3. [7/10] huggingface/transformers
|
|
84
|
+
...
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
## How It Works
|
|
88
|
+
|
|
89
|
+
1. **Search** — Builds targeted GitHub search queries from your skills (e.g. `python is:issue is:open no:assignee stars:>=100`). Searches across all of GitHub, not just repos you follow.
|
|
90
|
+
|
|
91
|
+
2. **Filter** — Deduplicates results, skips archived / already-assigned / stale issues by default, and can drop noisy threads with too many comments.
|
|
92
|
+
|
|
93
|
+
3. **Rank** — Sends the candidates to an LLM along with your skill profile. The LLM scores each issue 1-10 on match quality and provides:
|
|
94
|
+
- Why it's a good match (or not)
|
|
95
|
+
- A concrete hint on how to approach the fix
|
|
96
|
+
|
|
97
|
+
4. **Display** — Renders ranked results in a clean terminal UI with Rich.
|
|
98
|
+
|
|
99
|
+
5. **Radar** — Scores target repos from public PR signals: recent merged PRs, open/stale PR backlog, median merge time, maintainer response time, outside contributor merge ratio, and skill fit.
|
|
100
|
+
|
|
101
|
+
## Usage
|
|
102
|
+
|
|
103
|
+
### Find across all of GitHub
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
# Basic — search by skills
|
|
107
|
+
gitsense find --skills python,fastapi,postgres
|
|
108
|
+
|
|
109
|
+
# High-star repos only
|
|
110
|
+
gitsense find --skills go,kubernetes --stars 5000
|
|
111
|
+
|
|
112
|
+
# Bug fixes only
|
|
113
|
+
gitsense find --skills typescript,react --labels bug
|
|
114
|
+
|
|
115
|
+
# Skip LLM ranking (faster, just raw results)
|
|
116
|
+
gitsense find --skills python --no-llm
|
|
117
|
+
|
|
118
|
+
# Use a specific model
|
|
119
|
+
gitsense find --skills python --model anthropic/claude-sonnet-4
|
|
120
|
+
|
|
121
|
+
# Show more results
|
|
122
|
+
gitsense find --skills python --limit 15
|
|
123
|
+
|
|
124
|
+
# Focus on fresh issues and avoid long unresolved debates
|
|
125
|
+
gitsense find --skills python,llm --updated-days 30 --max-comments 10
|
|
126
|
+
|
|
127
|
+
# Include assigned issues when you are intentionally scanning a repo backlog
|
|
128
|
+
gitsense find --skills python --include-assigned
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
### Scan a specific repo
|
|
132
|
+
|
|
133
|
+
```bash
|
|
134
|
+
# List all open unassigned issues
|
|
135
|
+
gitsense scan pytorch/pytorch
|
|
136
|
+
|
|
137
|
+
# Filter by your skills
|
|
138
|
+
gitsense scan HKUDS/LightRAG --skills python,rag
|
|
139
|
+
|
|
140
|
+
# Scan only recently active issues
|
|
141
|
+
gitsense scan vllm-project/vllm --skills python,cuda --updated-days 14
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
### Score repos before opening a PR
|
|
145
|
+
|
|
146
|
+
```bash
|
|
147
|
+
# Compare a few target repos
|
|
148
|
+
gitsense radar vllm-project/vllm microsoft/qlib MoonshotAI/kimi-cli --skills python,llm
|
|
149
|
+
|
|
150
|
+
# Use a file, one owner/repo per line
|
|
151
|
+
gitsense radar --targets targets.txt --skills python,agents --out radar.md
|
|
152
|
+
|
|
153
|
+
# Treat PRs older than two weeks as stale
|
|
154
|
+
gitsense radar stanfordnlp/dspy --stale-days 14
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
Radar is not a prediction oracle. It is a fast triage pass for contributors who care about ROI: recent merge velocity, maintainer response time, stale PR ratio, outsider-friendliness, and whether the repo matches your skill stack.
|
|
158
|
+
|
|
159
|
+
## Configuration
|
|
160
|
+
|
|
161
|
+
### GitHub Token (recommended)
|
|
162
|
+
|
|
163
|
+
Without a token you get 10 requests/minute. With a token, 30/minute:
|
|
164
|
+
|
|
165
|
+
```bash
|
|
166
|
+
export GITHUB_TOKEN=your-github-token
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
### LLM Provider
|
|
170
|
+
|
|
171
|
+
GitSense uses an OpenAI-compatible API for ranking. Without an API key, it still works — you just don't get skill-match scoring.
|
|
172
|
+
|
|
173
|
+
```bash
|
|
174
|
+
# OpenAI
|
|
175
|
+
export OPENAI_API_KEY=your-openai-key
|
|
176
|
+
|
|
177
|
+
# OpenRouter (100+ models)
|
|
178
|
+
export OPENROUTER_API_KEY=your-openrouter-key
|
|
179
|
+
|
|
180
|
+
# Local (Ollama)
|
|
181
|
+
export OPENAI_BASE_URL=http://localhost:11434/v1
|
|
182
|
+
export OPENAI_API_KEY=ollama
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
## Who Is This For?
|
|
186
|
+
|
|
187
|
+
- **Developers building their open source resume** — Find high-impact issues in popular repos that match your skills, so your contributions actually get noticed.
|
|
188
|
+
- **Job seekers targeting specific companies** — `gitsense scan microsoft/autogen --skills python,agents` to find issues in repos you want on your resume.
|
|
189
|
+
- **Hackathon participants** — Quickly find bugs you can fix in a few hours.
|
|
190
|
+
- **Experienced developers looking for side projects** — Discover interesting challenges across the ecosystem that match your expertise.
|
|
191
|
+
|
|
192
|
+
## FAQ
|
|
193
|
+
|
|
194
|
+
**Does this replace looking at issues manually?**
|
|
195
|
+
No. GitSense is a first-pass filter that saves you the time of scrolling through hundreds of issues. You should still read the issue thread and understand the codebase before committing to a contribution.
|
|
196
|
+
|
|
197
|
+
**How accurate is the LLM ranking?**
|
|
198
|
+
The LLM is good at matching keywords and assessing complexity from issue descriptions. It can't tell you whether the maintainers will actually merge your PR or how the codebase is structured. Think of it as a smart sort, not an oracle.
|
|
199
|
+
|
|
200
|
+
**Does this cost money?**
|
|
201
|
+
GitHub search is free (rate-limited without a token). LLM ranking costs whatever your provider charges per call — typically $0.001-0.01 per search with gpt-4o-mini. Use `--no-llm` to skip ranking entirely.
|
|
202
|
+
|
|
203
|
+
## Roadmap
|
|
204
|
+
|
|
205
|
+
- [ ] Profile mode: read your GitHub profile to auto-detect skills
|
|
206
|
+
- [ ] Watch mode: get daily/weekly digests of new matching issues
|
|
207
|
+
- [x] Repo radar: assess maintainer responsiveness before you invest time
|
|
208
|
+
- [ ] PR success prediction: estimate merge probability for a specific draft PR
|
|
209
|
+
|
|
210
|
+
## Contributing
|
|
211
|
+
|
|
212
|
+
Contributions welcome. If GitSense helped you find your first open source contribution, that's the best feedback possible.
|
|
213
|
+
|
|
214
|
+
## Release
|
|
215
|
+
|
|
216
|
+
Releases are published through GitHub Actions with PyPI Trusted Publishing. No PyPI token is stored in the repository.
|
|
217
|
+
|
|
218
|
+
Before publishing for the first time, configure a PyPI trusted publisher for:
|
|
219
|
+
|
|
220
|
+
- project name: `gitsense-radar`
|
|
221
|
+
- owner: `he-yufeng`
|
|
222
|
+
- repository: `GitSense`
|
|
223
|
+
- workflow: `publish.yml`
|
|
224
|
+
- environment: `pypi`
|
|
225
|
+
|
|
226
|
+
Then publish a GitHub release, or run the `Publish` workflow manually. The workflow builds the package, runs `twine check`, and uploads the verified artifacts to PyPI.
|
|
227
|
+
|
|
228
|
+
## License
|
|
229
|
+
|
|
230
|
+
[MIT](LICENSE)
|
|
231
|
+
|
|
232
|
+
---
|
|
233
|
+
|
|
234
|
+
<div align="center">
|
|
235
|
+
|
|
236
|
+
**If GitSense helped you find a good issue to work on, give it a star!**
|
|
237
|
+
|
|
238
|
+
[Report a Bug](https://github.com/he-yufeng/GitSense/issues) · [Request a Feature](https://github.com/he-yufeng/GitSense/issues)
|
|
239
|
+
|
|
240
|
+
</div>
|