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.
Files changed (32) hide show
  1. opensense_vp-0.1.0/.docs/decisions.md +87 -0
  2. opensense_vp-0.1.0/.docs/development.md +65 -0
  3. opensense_vp-0.1.0/.docs/overview.md +43 -0
  4. opensense_vp-0.1.0/.github/workflows/publish.yml +34 -0
  5. opensense_vp-0.1.0/.gitignore +6 -0
  6. opensense_vp-0.1.0/AGENTS.md +32 -0
  7. opensense_vp-0.1.0/LICENSE +21 -0
  8. opensense_vp-0.1.0/PKG-INFO +457 -0
  9. opensense_vp-0.1.0/README.md +431 -0
  10. opensense_vp-0.1.0/pyproject.toml +49 -0
  11. opensense_vp-0.1.0/src/opensense/__init__.py +3 -0
  12. opensense_vp-0.1.0/src/opensense/cli.py +340 -0
  13. opensense_vp-0.1.0/src/opensense/config.py +125 -0
  14. opensense_vp-0.1.0/src/opensense/core/__init__.py +1 -0
  15. opensense_vp-0.1.0/src/opensense/core/planner.py +55 -0
  16. opensense_vp-0.1.0/src/opensense/core/radar.py +77 -0
  17. opensense_vp-0.1.0/src/opensense/core/ranking.py +47 -0
  18. opensense_vp-0.1.0/src/opensense/core/scoring.py +138 -0
  19. opensense_vp-0.1.0/src/opensense/doctor.py +79 -0
  20. opensense_vp-0.1.0/src/opensense/github/__init__.py +1 -0
  21. opensense_vp-0.1.0/src/opensense/github/client.py +39 -0
  22. opensense_vp-0.1.0/src/opensense/github/issues.py +37 -0
  23. opensense_vp-0.1.0/src/opensense/github/radar.py +59 -0
  24. opensense_vp-0.1.0/src/opensense/llm/__init__.py +1 -0
  25. opensense_vp-0.1.0/src/opensense/llm/client.py +54 -0
  26. opensense_vp-0.1.0/src/opensense/models.py +89 -0
  27. opensense_vp-0.1.0/src/opensense/storage/__init__.py +1 -0
  28. opensense_vp-0.1.0/src/opensense/storage/watchlist.py +107 -0
  29. opensense_vp-0.1.0/tests/test_cli_storage.py +425 -0
  30. opensense_vp-0.1.0/tests/test_scoring_radar.py +96 -0
  31. opensense_vp-0.1.0/tests/test_user_workflows.py +99 -0
  32. 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,6 @@
1
+ __pycache__/
2
+ *.py[cod]
3
+ .pytest_cache/
4
+ .venv/
5
+ .opensense/
6
+ .tmp-smoke/
@@ -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.