vulguard 1.0.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.
@@ -0,0 +1,22 @@
1
+ # Changelog
2
+
3
+ ## 1.0.0 - 2026-06-14
4
+
5
+ ### Added
6
+
7
+ - Initial release of vulguard.
8
+ - Lightweight security scanning for source code vulnerabilities.
9
+ - Highlights risky patterns and guides developers toward safer implementations.
10
+ - GitHub Actions **Tests** workflow for automated formatting check, linting, and test runs (with 80% coverage gate) on every push and pull request.
11
+ - Async retry mechanism with exponential back-off and full jitter (`vulguard/retry.py`).
12
+ - `--version` / `-V` CLI flag to display the installed package version.
13
+ - Concurrent file inspection using `asyncio.gather()` for improved throughput.
14
+ - `_inspect_and_persist()` helper decomposing per-file inspection and database persistence.
15
+ - `_inspect_all()` helper orchestrating concurrent per-file inspection tasks.
16
+ - `_run_inspection()` helper orchestrating file collection, inspection, and report writing.
17
+ - `_setup_db_session()` helper encapsulating database initialisation and session creation.
18
+ - `_write_reports()` helper encapsulating JSON and HTML report writing.
19
+ - Additional configuration keys in `config.ini` for model name, timeout, and retry back-off settings (`max-attempts`, `base-delay`, `max-delay`).
20
+ - Typed accessors in the `Config` class for model, timeout, and retry back-off configuration (`get_model`, `get_timeout`, `get_max_attempts`, `get_base_delay`, `get_max_delay`).
21
+ - Expanded test suite covering `retry.py` and additional cases for `cli.py` and `inspector.py`.
22
+
vulguard-1.0.0/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Ron Webb
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,202 @@
1
+ Metadata-Version: 2.4
2
+ Name: vulguard
3
+ Version: 1.0.0
4
+ Summary: A lightweight security tool that automatically scans source code for vulnerabilities, highlights risky patterns, and guides developers toward safer implementations to strengthen their applications' overall security posture.
5
+ License: MIT License
6
+
7
+ Copyright (c) 2026 Ron Webb
8
+
9
+ Permission is hereby granted, free of charge, to any person obtaining a copy
10
+ of this software and associated documentation files (the "Software"), to deal
11
+ in the Software without restriction, including without limitation the rights
12
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
13
+ copies of the Software, and to permit persons to whom the Software is
14
+ furnished to do so, subject to the following conditions:
15
+
16
+ The above copyright notice and this permission notice shall be included in all
17
+ copies or substantial portions of the Software.
18
+
19
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
22
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
23
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
24
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
25
+ SOFTWARE.
26
+ License-File: LICENSE
27
+ Author: Ron Webb
28
+ Author-email: ron@ronella.xyz
29
+ Requires-Python: >=3.14
30
+ Classifier: License :: Other/Proprietary License
31
+ Classifier: Programming Language :: Python :: 3
32
+ Classifier: Programming Language :: Python :: 3.14
33
+ Requires-Dist: click (>=8.0.0,<9.0.0)
34
+ Requires-Dist: env-dir-bootstrap (>=1.0.0,<2.0.0)
35
+ Requires-Dist: github-copilot-sdk (>=1.0.1,<2.0.0)
36
+ Requires-Dist: logenrich (>=1.0.1,<2.0.0)
37
+ Requires-Dist: rich (>=15.0.0,<16.0.0)
38
+ Project-URL: Repository, https://github.com/rcw3bb/vulguard
39
+ Description-Content-Type: text/markdown
40
+
41
+ # vulguard 1.0.0
42
+
43
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
44
+ [![Version](https://img.shields.io/badge/version-1.0.0-blue.svg)](CHANGELOG.md)
45
+
46
+ > A lightweight CLI security tool that automatically scans source code for vulnerabilities, highlights risky patterns, and guides developers toward safer implementations to strengthen their applications' overall security posture.
47
+
48
+ ## Prerequisites
49
+
50
+ - Python `>=3.14`
51
+ - An active [GitHub Copilot](https://github.com/features/copilot) subscription (used for AI-powered inspection)
52
+
53
+ ## Installation
54
+
55
+ ```bash
56
+ pip install vulguard
57
+ ```
58
+
59
+ ## Usage
60
+
61
+ ```bash
62
+ vulguard [OPTIONS] COMMAND [ARGS]...
63
+ ```
64
+
65
+ ### `inspect` — Scan files or directories
66
+
67
+ ```bash
68
+ vulguard inspect [OPTIONS] PATHS...
69
+ ```
70
+
71
+ | Option | Default | Description |
72
+ |---|---|---|
73
+ | `PATHS` | *(required)* | One or more files or directories to scan (recursive). |
74
+ | `--ext TEXT` | *(all files)* | Comma-separated extensions to inspect, e.g. `py,js,ts`. |
75
+ | `--output-dir PATH` | `<cwd>/reports` | Directory where reports are written. |
76
+ | `--report TEXT` | `vulguard-report` | Base filename for the report (no extension appended). |
77
+ | `--format [json\|html]` | `json` | Report format. Selecting `html` also produces a JSON file. |
78
+ | `--db-dir PATH` | `~/.vulguard` | Directory for the SQLite session database. |
79
+
80
+ #### Examples
81
+
82
+ ```bash
83
+ # Scan all Python files in src/ and write a JSON report to ./reports
84
+ vulguard inspect src/ --ext py
85
+
86
+ # Scan multiple paths and produce an HTML report
87
+ vulguard inspect src/ tests/ --ext py,js --format html --output-dir reports
88
+
89
+ # Use a custom report name and database directory
90
+ vulguard inspect src/ --report my-scan --db-dir /tmp/vg-db
91
+ ```
92
+
93
+ ## Configuration
94
+
95
+ On first run, vulguard bootstraps a configuration directory and copies its default `config.ini` and `logging.ini` there. You can override the location with the `VULGUARD_CONFIG_DIR` environment variable:
96
+
97
+ ```bash
98
+ # Windows (PowerShell)
99
+ $env:VULGUARD_CONFIG_DIR = "C:\Users\you\.vulguard"
100
+
101
+ # macOS / Linux
102
+ export VULGUARD_CONFIG_DIR="$HOME/.vulguard"
103
+ ```
104
+
105
+ ### `config.ini` settings
106
+
107
+ | Section | Key | Default | Description |
108
+ |---|---|---|---|
109
+ | `model` | `model` | `claude-sonnet-4.6` | GitHub Copilot model used for inspection. |
110
+ | `model` | `timeout` | `300` | Per-file inspection timeout in seconds. |
111
+ | `retry` | `max-attempts` | `5` | Maximum number of retry attempts on transient errors. |
112
+ | `retry` | `base-delay` | `0.5` | Initial back-off delay in seconds. |
113
+ | `retry` | `max-delay` | `10.0` | Maximum back-off delay in seconds. |
114
+
115
+ ## Development
116
+
117
+ ### Prerequisites
118
+
119
+ - Poetry `2.2+`
120
+
121
+ ### Architecture
122
+
123
+ ```mermaid
124
+ graph TD
125
+ CLI["cli.py\n(Click entry point)"]
126
+ Inspector["inspector.py\n(GitHub Copilot SDK)"]
127
+ DB["db.py\n(SQLite persistence)"]
128
+ Report["report.py\n(JSON / HTML output)"]
129
+ Config["config.py\n(config.ini reader)"]
130
+ Prompt["prompts/system-prompt.md\n(security prompt)"]
131
+
132
+ CLI -->|"collects files\norchestrates"| Inspector
133
+ CLI --> Config
134
+ Inspector --> Prompt
135
+ CLI -->|"persists results"| DB
136
+ CLI -->|"reads session"| DB
137
+ CLI -->|"builds & writes"| Report
138
+ ```
139
+
140
+ ### Setup
141
+
142
+ ```bash
143
+ poetry install
144
+ ```
145
+
146
+ ### Format and Lint
147
+
148
+ ```bash
149
+ poetry run black vulguard; poetry run pylint vulguard
150
+ ```
151
+
152
+ Pylint must score **10.00/10** before committing.
153
+
154
+ ### Run Tests
155
+
156
+ ```bash
157
+ poetry run pytest --cov=vulguard tests --cov-report html
158
+ ```
159
+
160
+ Maintain **≥80 %** coverage.
161
+
162
+ ### Fixture-based integration smoke test
163
+
164
+ ```bash
165
+ poetry run vulguard inspect tests/fixtures --ext py --format html
166
+ ```
167
+
168
+ ## Publishing to PyPI
169
+
170
+ ### Prerequisites
171
+
172
+ - A [PyPI](https://pypi.org/) account with an API token.
173
+
174
+ ### Configure the token
175
+
176
+ ```bash
177
+ poetry config pypi-token.pypi <your-token>
178
+ ```
179
+
180
+ ### Build and publish
181
+
182
+ ```bash
183
+ poetry publish --build
184
+ ```
185
+
186
+ This builds the source distribution and wheel, then uploads them to PyPI in one step.
187
+
188
+ > **Note:** PyPI releases are immutable. Once a version is published, it cannot be overwritten.
189
+ > To fix a mistake, yank the release via the PyPI web UI and publish a new version.
190
+
191
+ ## [Changelog](CHANGELOG.md)
192
+
193
+ See [CHANGELOG.md](CHANGELOG.md) for the full release history.
194
+
195
+ ## License
196
+
197
+ This project is licensed under the [MIT License](LICENSE).
198
+
199
+ ## Author
200
+
201
+ Ron Webb
202
+
@@ -0,0 +1,161 @@
1
+ # vulguard 1.0.0
2
+
3
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
4
+ [![Version](https://img.shields.io/badge/version-1.0.0-blue.svg)](CHANGELOG.md)
5
+
6
+ > A lightweight CLI security tool that automatically scans source code for vulnerabilities, highlights risky patterns, and guides developers toward safer implementations to strengthen their applications' overall security posture.
7
+
8
+ ## Prerequisites
9
+
10
+ - Python `>=3.14`
11
+ - An active [GitHub Copilot](https://github.com/features/copilot) subscription (used for AI-powered inspection)
12
+
13
+ ## Installation
14
+
15
+ ```bash
16
+ pip install vulguard
17
+ ```
18
+
19
+ ## Usage
20
+
21
+ ```bash
22
+ vulguard [OPTIONS] COMMAND [ARGS]...
23
+ ```
24
+
25
+ ### `inspect` — Scan files or directories
26
+
27
+ ```bash
28
+ vulguard inspect [OPTIONS] PATHS...
29
+ ```
30
+
31
+ | Option | Default | Description |
32
+ |---|---|---|
33
+ | `PATHS` | *(required)* | One or more files or directories to scan (recursive). |
34
+ | `--ext TEXT` | *(all files)* | Comma-separated extensions to inspect, e.g. `py,js,ts`. |
35
+ | `--output-dir PATH` | `<cwd>/reports` | Directory where reports are written. |
36
+ | `--report TEXT` | `vulguard-report` | Base filename for the report (no extension appended). |
37
+ | `--format [json\|html]` | `json` | Report format. Selecting `html` also produces a JSON file. |
38
+ | `--db-dir PATH` | `~/.vulguard` | Directory for the SQLite session database. |
39
+
40
+ #### Examples
41
+
42
+ ```bash
43
+ # Scan all Python files in src/ and write a JSON report to ./reports
44
+ vulguard inspect src/ --ext py
45
+
46
+ # Scan multiple paths and produce an HTML report
47
+ vulguard inspect src/ tests/ --ext py,js --format html --output-dir reports
48
+
49
+ # Use a custom report name and database directory
50
+ vulguard inspect src/ --report my-scan --db-dir /tmp/vg-db
51
+ ```
52
+
53
+ ## Configuration
54
+
55
+ On first run, vulguard bootstraps a configuration directory and copies its default `config.ini` and `logging.ini` there. You can override the location with the `VULGUARD_CONFIG_DIR` environment variable:
56
+
57
+ ```bash
58
+ # Windows (PowerShell)
59
+ $env:VULGUARD_CONFIG_DIR = "C:\Users\you\.vulguard"
60
+
61
+ # macOS / Linux
62
+ export VULGUARD_CONFIG_DIR="$HOME/.vulguard"
63
+ ```
64
+
65
+ ### `config.ini` settings
66
+
67
+ | Section | Key | Default | Description |
68
+ |---|---|---|---|
69
+ | `model` | `model` | `claude-sonnet-4.6` | GitHub Copilot model used for inspection. |
70
+ | `model` | `timeout` | `300` | Per-file inspection timeout in seconds. |
71
+ | `retry` | `max-attempts` | `5` | Maximum number of retry attempts on transient errors. |
72
+ | `retry` | `base-delay` | `0.5` | Initial back-off delay in seconds. |
73
+ | `retry` | `max-delay` | `10.0` | Maximum back-off delay in seconds. |
74
+
75
+ ## Development
76
+
77
+ ### Prerequisites
78
+
79
+ - Poetry `2.2+`
80
+
81
+ ### Architecture
82
+
83
+ ```mermaid
84
+ graph TD
85
+ CLI["cli.py\n(Click entry point)"]
86
+ Inspector["inspector.py\n(GitHub Copilot SDK)"]
87
+ DB["db.py\n(SQLite persistence)"]
88
+ Report["report.py\n(JSON / HTML output)"]
89
+ Config["config.py\n(config.ini reader)"]
90
+ Prompt["prompts/system-prompt.md\n(security prompt)"]
91
+
92
+ CLI -->|"collects files\norchestrates"| Inspector
93
+ CLI --> Config
94
+ Inspector --> Prompt
95
+ CLI -->|"persists results"| DB
96
+ CLI -->|"reads session"| DB
97
+ CLI -->|"builds & writes"| Report
98
+ ```
99
+
100
+ ### Setup
101
+
102
+ ```bash
103
+ poetry install
104
+ ```
105
+
106
+ ### Format and Lint
107
+
108
+ ```bash
109
+ poetry run black vulguard; poetry run pylint vulguard
110
+ ```
111
+
112
+ Pylint must score **10.00/10** before committing.
113
+
114
+ ### Run Tests
115
+
116
+ ```bash
117
+ poetry run pytest --cov=vulguard tests --cov-report html
118
+ ```
119
+
120
+ Maintain **≥80 %** coverage.
121
+
122
+ ### Fixture-based integration smoke test
123
+
124
+ ```bash
125
+ poetry run vulguard inspect tests/fixtures --ext py --format html
126
+ ```
127
+
128
+ ## Publishing to PyPI
129
+
130
+ ### Prerequisites
131
+
132
+ - A [PyPI](https://pypi.org/) account with an API token.
133
+
134
+ ### Configure the token
135
+
136
+ ```bash
137
+ poetry config pypi-token.pypi <your-token>
138
+ ```
139
+
140
+ ### Build and publish
141
+
142
+ ```bash
143
+ poetry publish --build
144
+ ```
145
+
146
+ This builds the source distribution and wheel, then uploads them to PyPI in one step.
147
+
148
+ > **Note:** PyPI releases are immutable. Once a version is published, it cannot be overwritten.
149
+ > To fix a mistake, yank the release via the PyPI web UI and publish a new version.
150
+
151
+ ## [Changelog](CHANGELOG.md)
152
+
153
+ See [CHANGELOG.md](CHANGELOG.md) for the full release history.
154
+
155
+ ## License
156
+
157
+ This project is licensed under the [MIT License](LICENSE).
158
+
159
+ ## Author
160
+
161
+ Ron Webb
@@ -0,0 +1,44 @@
1
+ [project]
2
+ name = "vulguard"
3
+ version = "1.0.0"
4
+ description = "A lightweight security tool that automatically scans source code for vulnerabilities, highlights risky patterns, and guides developers toward safer implementations to strengthen their applications' overall security posture."
5
+ authors = [
6
+ {name = "Ron Webb", email = "ron@ronella.xyz"}
7
+ ]
8
+ readme = "README.md"
9
+ license = {file = "LICENSE"}
10
+ requires-python = ">=3.14"
11
+
12
+ dependencies = [
13
+ "rich (>=15.0.0,<16.0.0)",
14
+ "click (>=8.0.0,<9.0.0)",
15
+ "logenrich (>=1.0.1,<2.0.0)",
16
+ "env-dir-bootstrap (>=1.0.0,<2.0.0)",
17
+ "github-copilot-sdk (>=1.0.1,<2.0.0)"
18
+ ]
19
+
20
+ [project.urls]
21
+ Repository = "https://github.com/rcw3bb/vulguard"
22
+
23
+ [dependency-groups]
24
+ dev = [
25
+ "black (>=26.5.1,<27.0.0)",
26
+ "pylint (>=4.0.5,<5.0.0)",
27
+ "pytest (>=9.0.3,<10.0.0)",
28
+ "pytest-cov (>=7.1.0,<8.0.0)",
29
+ "pytest-asyncio (>=1.4.0,<2.0.0)"
30
+ ]
31
+
32
+ [tool.poetry]
33
+ packages = [{include = "vulguard"}]
34
+ include = ["vulguard/logging.ini", "vulguard/config.ini", "vulguard/prompts/system-prompt.md", "CHANGELOG.md"]
35
+
36
+ [tool.poetry.scripts]
37
+ vulguard = "vulguard.cli:main"
38
+
39
+ [build-system]
40
+ requires = ["poetry-core"]
41
+ build-backend = "poetry.core.masonry.api"
42
+
43
+ [tool.pytest.ini_options]
44
+ asyncio_mode = "auto"
@@ -0,0 +1,22 @@
1
+ """
2
+ vulguard - A lightweight security tool that automatically scans source code
3
+ for vulnerabilities, highlights risky patterns, and guides developers toward
4
+ safer implementations to strengthen their applications' overall security posture.
5
+
6
+ :author: Ron Webb
7
+ :since: 1.0.0
8
+ """
9
+
10
+ from env_dir_bootstrap import EnvDirBootstrap
11
+
12
+ __version__ = "1.0.0"
13
+
14
+ _bootstrapper = EnvDirBootstrap(
15
+ env_var="VULGUARD_CONFIG_DIR",
16
+ resources=["logging.ini", "config.ini"],
17
+ package="vulguard",
18
+ )
19
+
20
+ _bootstrapper.setup()
21
+
22
+ CONF_DIR = str(_bootstrapper.get_dir())