opensense-vp 0.1.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.
- opensense_vp-0.1.0/.docs/decisions.md +87 -0
- opensense_vp-0.1.0/.docs/development.md +65 -0
- opensense_vp-0.1.0/.docs/overview.md +43 -0
- opensense_vp-0.1.0/.github/workflows/publish.yml +34 -0
- opensense_vp-0.1.0/.gitignore +6 -0
- opensense_vp-0.1.0/AGENTS.md +32 -0
- opensense_vp-0.1.0/LICENSE +21 -0
- opensense_vp-0.1.0/PKG-INFO +457 -0
- opensense_vp-0.1.0/README.md +431 -0
- opensense_vp-0.1.0/pyproject.toml +49 -0
- opensense_vp-0.1.0/src/opensense/__init__.py +3 -0
- opensense_vp-0.1.0/src/opensense/cli.py +340 -0
- opensense_vp-0.1.0/src/opensense/config.py +125 -0
- opensense_vp-0.1.0/src/opensense/core/__init__.py +1 -0
- opensense_vp-0.1.0/src/opensense/core/planner.py +55 -0
- opensense_vp-0.1.0/src/opensense/core/radar.py +77 -0
- opensense_vp-0.1.0/src/opensense/core/ranking.py +47 -0
- opensense_vp-0.1.0/src/opensense/core/scoring.py +138 -0
- opensense_vp-0.1.0/src/opensense/doctor.py +79 -0
- opensense_vp-0.1.0/src/opensense/github/__init__.py +1 -0
- opensense_vp-0.1.0/src/opensense/github/client.py +39 -0
- opensense_vp-0.1.0/src/opensense/github/issues.py +37 -0
- opensense_vp-0.1.0/src/opensense/github/radar.py +59 -0
- opensense_vp-0.1.0/src/opensense/llm/__init__.py +1 -0
- opensense_vp-0.1.0/src/opensense/llm/client.py +54 -0
- opensense_vp-0.1.0/src/opensense/models.py +89 -0
- opensense_vp-0.1.0/src/opensense/storage/__init__.py +1 -0
- opensense_vp-0.1.0/src/opensense/storage/watchlist.py +107 -0
- opensense_vp-0.1.0/tests/test_cli_storage.py +425 -0
- opensense_vp-0.1.0/tests/test_scoring_radar.py +96 -0
- opensense_vp-0.1.0/tests/test_user_workflows.py +99 -0
- opensense_vp-0.1.0/uv.lock +230 -0
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
# Decisions
|
|
2
|
+
|
|
3
|
+
Use this document for early product, scope, naming, architecture, and trade-off decisions.
|
|
4
|
+
|
|
5
|
+
Keep decisions lightweight while the project is young. Split into `.docs/decisions/0001-*.md` only when this file becomes hard to scan or decisions need formal ADR-style history.
|
|
6
|
+
|
|
7
|
+
## Active Decisions
|
|
8
|
+
|
|
9
|
+
### 2026-06-08: Product name is OpenSense
|
|
10
|
+
|
|
11
|
+
Decision:
|
|
12
|
+
|
|
13
|
+
Use `OpenSense` as the project name.
|
|
14
|
+
|
|
15
|
+
Reason:
|
|
16
|
+
|
|
17
|
+
- Short and brandable.
|
|
18
|
+
- Broader than GitHub-only issue search.
|
|
19
|
+
- Suggests sensing open-source contribution opportunities.
|
|
20
|
+
|
|
21
|
+
Status: accepted
|
|
22
|
+
|
|
23
|
+
### 2026-06-08: Start as a Python CLI
|
|
24
|
+
|
|
25
|
+
Decision:
|
|
26
|
+
|
|
27
|
+
OpenSense starts as a Python CLI, not a Web/SaaS app.
|
|
28
|
+
|
|
29
|
+
Reason:
|
|
30
|
+
|
|
31
|
+
- The user's daily workflow is command-line friendly.
|
|
32
|
+
- Python is a good fit for GitHub API calls, scoring, local reports, and optional LLM integration.
|
|
33
|
+
- A CLI avoids early login, database, hosting, and frontend complexity.
|
|
34
|
+
|
|
35
|
+
Status: accepted
|
|
36
|
+
|
|
37
|
+
### 2026-06-08: Watchlist-first instead of broad discovery
|
|
38
|
+
|
|
39
|
+
Decision:
|
|
40
|
+
|
|
41
|
+
The MVP starts from user-selected repositories rather than searching all of GitHub by default.
|
|
42
|
+
|
|
43
|
+
Reason:
|
|
44
|
+
|
|
45
|
+
- The user wants to follow known projects such as vLLM and OpenClaw.
|
|
46
|
+
- Watchlist-first design avoids becoming a GitSense clone.
|
|
47
|
+
- It supports a daily contribution habit around projects the user already cares about.
|
|
48
|
+
|
|
49
|
+
Status: accepted
|
|
50
|
+
|
|
51
|
+
### 2026-06-08: LLM key should be supported but optional
|
|
52
|
+
|
|
53
|
+
Decision:
|
|
54
|
+
|
|
55
|
+
The first version should support LLM configuration in `opensense init`, but core ranking must work without an LLM key.
|
|
56
|
+
|
|
57
|
+
Reason:
|
|
58
|
+
|
|
59
|
+
- LLMs are valuable for issue summaries, risk explanations, and PR plans.
|
|
60
|
+
- Deterministic scoring is easier to test and trust.
|
|
61
|
+
- The CLI should remain useful even when API keys are missing.
|
|
62
|
+
|
|
63
|
+
Status: accepted
|
|
64
|
+
|
|
65
|
+
### 2026-06-08: MVP command path is daily to issue plan
|
|
66
|
+
|
|
67
|
+
Decision:
|
|
68
|
+
|
|
69
|
+
The MVP should optimize the path:
|
|
70
|
+
|
|
71
|
+
```text
|
|
72
|
+
watched repos + skills -> daily ranking -> issue -> PR plan
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
Reason:
|
|
76
|
+
|
|
77
|
+
- The product goal is not general open-source intelligence.
|
|
78
|
+
- The user wants to find one small issue today and turn it into a serious PR attempt.
|
|
79
|
+
- `daily` and `issue --plan` are the strongest habit-forming commands.
|
|
80
|
+
|
|
81
|
+
Status: accepted
|
|
82
|
+
|
|
83
|
+
## Open Questions
|
|
84
|
+
|
|
85
|
+
- Which exact GitHub repo should represent OpenClaw in examples?
|
|
86
|
+
- Should the first release publish to PyPI as `opensense` or a scoped fallback name?
|
|
87
|
+
- Should the first report format be Markdown only or also static HTML?
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# Development
|
|
2
|
+
|
|
3
|
+
OpenSense is currently in planning/prototype setup.
|
|
4
|
+
|
|
5
|
+
## Planned Stack
|
|
6
|
+
|
|
7
|
+
- Python 3.10+
|
|
8
|
+
- Typer for CLI commands
|
|
9
|
+
- Rich for terminal output
|
|
10
|
+
- httpx for GitHub API calls
|
|
11
|
+
- TOML/JSON files for local workspace state
|
|
12
|
+
- Optional OpenAI-compatible LLM API
|
|
13
|
+
|
|
14
|
+
## Planned Commands
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
opensense init
|
|
18
|
+
opensense watch repo add <owner/repo>
|
|
19
|
+
opensense watch skill add <skill>
|
|
20
|
+
opensense daily
|
|
21
|
+
opensense issue <owner/repo#issue>
|
|
22
|
+
opensense issue <owner/repo#issue> --plan
|
|
23
|
+
opensense repo <owner/repo>
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## Runtime State
|
|
27
|
+
|
|
28
|
+
```text
|
|
29
|
+
.opensense/
|
|
30
|
+
config.toml
|
|
31
|
+
watchlist.toml
|
|
32
|
+
cache/
|
|
33
|
+
reports/
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
Example `watchlist.toml`:
|
|
37
|
+
|
|
38
|
+
```toml
|
|
39
|
+
skills = ["agent", "rag"]
|
|
40
|
+
|
|
41
|
+
[[repositories]]
|
|
42
|
+
name = "openclaw/openclaw"
|
|
43
|
+
|
|
44
|
+
[[repositories]]
|
|
45
|
+
name = "vllm-project/vllm"
|
|
46
|
+
|
|
47
|
+
[[repositories]]
|
|
48
|
+
name = "openai/codex"
|
|
49
|
+
|
|
50
|
+
[[repositories]]
|
|
51
|
+
name = "sgl-project/sglang"
|
|
52
|
+
|
|
53
|
+
[[repositories]]
|
|
54
|
+
name = "langchain-ai/langchain"
|
|
55
|
+
|
|
56
|
+
[[repositories]]
|
|
57
|
+
name = "run-llama/llama_index"
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## Implementation Notes
|
|
61
|
+
|
|
62
|
+
- Keep deterministic scoring usable without LLM.
|
|
63
|
+
- Use LLM only for summaries, risk explanations, and PR plans.
|
|
64
|
+
- Keep cache simple until cross-day analytics becomes necessary.
|
|
65
|
+
- Prefer Markdown/Rich output before building a complex HTML report.
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# Overview
|
|
2
|
+
|
|
3
|
+
OpenSense helps developers build a daily open-source contribution habit.
|
|
4
|
+
|
|
5
|
+
The target user already knows a few repositories they care about, such as vLLM, Flask, HTTPX, FastAPI, or OpenClaw. They do not need a random issue browser. They need a reliable way to find small, realistic issues from those repositories and turn one of them into a PR attempt.
|
|
6
|
+
|
|
7
|
+
## Core Promise
|
|
8
|
+
|
|
9
|
+
Every day, OpenSense should help answer:
|
|
10
|
+
|
|
11
|
+
- Which watched repositories have approachable issues today?
|
|
12
|
+
- Which issues look small enough for a focused PR?
|
|
13
|
+
- Which issues have healthier maintainer and mergeability signals?
|
|
14
|
+
- Which issue is worth inspecting further?
|
|
15
|
+
- What should the user do before opening a PR?
|
|
16
|
+
|
|
17
|
+
## Product Shape
|
|
18
|
+
|
|
19
|
+
OpenSense starts as a Python CLI.
|
|
20
|
+
|
|
21
|
+
The intended MVP commands are:
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
opensense init
|
|
25
|
+
opensense watch repo add <owner/repo>
|
|
26
|
+
opensense watch skill add <skill>
|
|
27
|
+
opensense daily
|
|
28
|
+
opensense issue <owner/repo#issue>
|
|
29
|
+
opensense issue <owner/repo#issue> --plan
|
|
30
|
+
opensense repo <owner/repo>
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
The first version should work without an LLM key. With an LLM key, it should produce better summaries, risk explanations, and PR plans.
|
|
34
|
+
|
|
35
|
+
Watched skills describe the user's preferred contribution surface, such as `python`, `llm`, `cli`, `tests`, or `github-actions`. `daily` uses them as a lightweight ranking boost when a candidate issue matches the user's skill tags.
|
|
36
|
+
|
|
37
|
+
## Non-Goals
|
|
38
|
+
|
|
39
|
+
- Do not automatically write patches.
|
|
40
|
+
- Do not automatically open PRs.
|
|
41
|
+
- Do not guarantee merge success.
|
|
42
|
+
- Do not become a general GitHub trend dashboard.
|
|
43
|
+
- Do not search all of GitHub by default.
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
name: Publish to PyPI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
release:
|
|
5
|
+
types: [published]
|
|
6
|
+
workflow_dispatch:
|
|
7
|
+
|
|
8
|
+
jobs:
|
|
9
|
+
build:
|
|
10
|
+
runs-on: ubuntu-latest
|
|
11
|
+
|
|
12
|
+
steps:
|
|
13
|
+
- uses: actions/checkout@v4
|
|
14
|
+
- uses: astral-sh/setup-uv@v6
|
|
15
|
+
- run: uv run --extra dev pytest -q
|
|
16
|
+
- run: uv build
|
|
17
|
+
- uses: actions/upload-artifact@v4
|
|
18
|
+
with:
|
|
19
|
+
name: distributions
|
|
20
|
+
path: dist/
|
|
21
|
+
|
|
22
|
+
publish:
|
|
23
|
+
needs: build
|
|
24
|
+
runs-on: ubuntu-latest
|
|
25
|
+
environment: pypi
|
|
26
|
+
permissions:
|
|
27
|
+
id-token: write
|
|
28
|
+
|
|
29
|
+
steps:
|
|
30
|
+
- uses: actions/download-artifact@v4
|
|
31
|
+
with:
|
|
32
|
+
name: distributions
|
|
33
|
+
path: dist/
|
|
34
|
+
- uses: pypa/gh-action-pypi-publish@release/v1
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# Agent Guide
|
|
2
|
+
|
|
3
|
+
Use progressive disclosure. Read only the smallest document needed for the current task.
|
|
4
|
+
|
|
5
|
+
Keep this file under 300 lines. Move detailed guidance into `.docs/`.
|
|
6
|
+
|
|
7
|
+
## Read By Task
|
|
8
|
+
|
|
9
|
+
- Understand the project: `.docs/overview.md`
|
|
10
|
+
- Run, build, or configure locally: `.docs/development.md`
|
|
11
|
+
- Check early decisions and trade-offs: `.docs/decisions.md`
|
|
12
|
+
|
|
13
|
+
## Product Boundary
|
|
14
|
+
|
|
15
|
+
OpenSense is a daily PR opportunity finder for known open-source repositories.
|
|
16
|
+
|
|
17
|
+
The MVP should optimize:
|
|
18
|
+
|
|
19
|
+
```text
|
|
20
|
+
watched repos + skills -> daily ranking -> issue -> PR plan
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Avoid expanding the first version into a general open-source intelligence dashboard.
|
|
24
|
+
|
|
25
|
+
## Highest Priority Rules
|
|
26
|
+
|
|
27
|
+
- Preserve user changes.
|
|
28
|
+
- Keep README and docs honest about implementation status.
|
|
29
|
+
- Do not claim commands are implemented before code exists.
|
|
30
|
+
- Do not overwrite existing files unless explicitly asked.
|
|
31
|
+
- Ask before destructive actions or broad dependency changes.
|
|
32
|
+
- Run relevant verification before claiming work is complete.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 VectorPeak
|
|
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.
|