skilltotal 0.78.0__tar.gz → 0.78.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.
- {skilltotal-0.78.0/skilltotal.egg-info → skilltotal-0.78.1}/PKG-INFO +5 -5
- {skilltotal-0.78.0 → skilltotal-0.78.1}/README.md +4 -4
- {skilltotal-0.78.0 → skilltotal-0.78.1}/skilltotal/__init__.py +1 -1
- {skilltotal-0.78.0 → skilltotal-0.78.1}/skilltotal/collector.py +11 -1
- {skilltotal-0.78.0 → skilltotal-0.78.1/skilltotal.egg-info}/PKG-INFO +5 -5
- {skilltotal-0.78.0 → skilltotal-0.78.1}/LICENSE +0 -0
- {skilltotal-0.78.0 → skilltotal-0.78.1}/MANIFEST.in +0 -0
- {skilltotal-0.78.0 → skilltotal-0.78.1}/pyproject.toml +0 -0
- {skilltotal-0.78.0 → skilltotal-0.78.1}/setup.cfg +0 -0
- {skilltotal-0.78.0 → skilltotal-0.78.1}/skilltotal/__main__.py +0 -0
- {skilltotal-0.78.0 → skilltotal-0.78.1}/skilltotal/agent_hook.py +0 -0
- {skilltotal-0.78.0 → skilltotal-0.78.1}/skilltotal/agent_skill.py +0 -0
- {skilltotal-0.78.0 → skilltotal-0.78.1}/skilltotal/autorun.py +0 -0
- {skilltotal-0.78.0 → skilltotal-0.78.1}/skilltotal/baseline.py +0 -0
- {skilltotal-0.78.0 → skilltotal-0.78.1}/skilltotal/bounded_json.py +0 -0
- {skilltotal-0.78.0 → skilltotal-0.78.1}/skilltotal/capabilities.py +0 -0
- {skilltotal-0.78.0 → skilltotal-0.78.1}/skilltotal/cli.py +0 -0
- {skilltotal-0.78.0 → skilltotal-0.78.1}/skilltotal/combinations.py +0 -0
- {skilltotal-0.78.0 → skilltotal-0.78.1}/skilltotal/concat_normalize.py +0 -0
- {skilltotal-0.78.0 → skilltotal-0.78.1}/skilltotal/config.py +0 -0
- {skilltotal-0.78.0 → skilltotal-0.78.1}/skilltotal/diff.py +0 -0
- {skilltotal-0.78.0 → skilltotal-0.78.1}/skilltotal/engine.py +0 -0
- {skilltotal-0.78.0 → skilltotal-0.78.1}/skilltotal/file_index.py +0 -0
- {skilltotal-0.78.0 → skilltotal-0.78.1}/skilltotal/guard.py +0 -0
- {skilltotal-0.78.0 → skilltotal-0.78.1}/skilltotal/hook_scan.py +0 -0
- {skilltotal-0.78.0 → skilltotal-0.78.1}/skilltotal/inventory.py +0 -0
- {skilltotal-0.78.0 → skilltotal-0.78.1}/skilltotal/loaded_code.py +0 -0
- {skilltotal-0.78.0 → skilltotal-0.78.1}/skilltotal/mcp_server.py +0 -0
- {skilltotal-0.78.0 → skilltotal-0.78.1}/skilltotal/models.py +0 -0
- {skilltotal-0.78.0 → skilltotal-0.78.1}/skilltotal/owasp.py +0 -0
- {skilltotal-0.78.0 → skilltotal-0.78.1}/skilltotal/parallel.py +0 -0
- {skilltotal-0.78.0 → skilltotal-0.78.1}/skilltotal/provenance.py +0 -0
- {skilltotal-0.78.0 → skilltotal-0.78.1}/skilltotal/report.py +0 -0
- {skilltotal-0.78.0 → skilltotal-0.78.1}/skilltotal/rules.py +0 -0
- {skilltotal-0.78.0 → skilltotal-0.78.1}/skilltotal/sarif.py +0 -0
- {skilltotal-0.78.0 → skilltotal-0.78.1}/skilltotal/sbom.py +0 -0
- {skilltotal-0.78.0 → skilltotal-0.78.1}/skilltotal/scanners/__init__.py +0 -0
- {skilltotal-0.78.0 → skilltotal-0.78.1}/skilltotal/scanners/agent_approval.py +0 -0
- {skilltotal-0.78.0 → skilltotal-0.78.1}/skilltotal/scanners/agent_config.py +0 -0
- {skilltotal-0.78.0 → skilltotal-0.78.1}/skilltotal/scanners/base.py +0 -0
- {skilltotal-0.78.0 → skilltotal-0.78.1}/skilltotal/scanners/clipper.py +0 -0
- {skilltotal-0.78.0 → skilltotal-0.78.1}/skilltotal/scanners/dependency_redirect.py +0 -0
- {skilltotal-0.78.0 → skilltotal-0.78.1}/skilltotal/scanners/dynamic_code.py +0 -0
- {skilltotal-0.78.0 → skilltotal-0.78.1}/skilltotal/scanners/email_exfil.py +0 -0
- {skilltotal-0.78.0 → skilltotal-0.78.1}/skilltotal/scanners/encrypted_archive.py +0 -0
- {skilltotal-0.78.0 → skilltotal-0.78.1}/skilltotal/scanners/exposure.py +0 -0
- {skilltotal-0.78.0 → skilltotal-0.78.1}/skilltotal/scanners/filesystem.py +0 -0
- {skilltotal-0.78.0 → skilltotal-0.78.1}/skilltotal/scanners/install_scripts.py +0 -0
- {skilltotal-0.78.0 → skilltotal-0.78.1}/skilltotal/scanners/invisible_unicode.py +0 -0
- {skilltotal-0.78.0 → skilltotal-0.78.1}/skilltotal/scanners/mcp.py +0 -0
- {skilltotal-0.78.0 → skilltotal-0.78.1}/skilltotal/scanners/mcp_elicitation.py +0 -0
- {skilltotal-0.78.0 → skilltotal-0.78.1}/skilltotal/scanners/mcp_pinning.py +0 -0
- {skilltotal-0.78.0 → skilltotal-0.78.1}/skilltotal/scanners/network.py +0 -0
- {skilltotal-0.78.0 → skilltotal-0.78.1}/skilltotal/scanners/npm_supply.py +0 -0
- {skilltotal-0.78.0 → skilltotal-0.78.1}/skilltotal/scanners/oauth_auth.py +0 -0
- {skilltotal-0.78.0 → skilltotal-0.78.1}/skilltotal/scanners/obfuscation.py +0 -0
- {skilltotal-0.78.0 → skilltotal-0.78.1}/skilltotal/scanners/prompt_surface.py +0 -0
- {skilltotal-0.78.0 → skilltotal-0.78.1}/skilltotal/scanners/pth_exec.py +0 -0
- {skilltotal-0.78.0 → skilltotal-0.78.1}/skilltotal/scanners/python_ast.py +0 -0
- {skilltotal-0.78.0 → skilltotal-0.78.1}/skilltotal/scanners/scoped_identity.py +0 -0
- {skilltotal-0.78.0 → skilltotal-0.78.1}/skilltotal/scanners/secret_exfil.py +0 -0
- {skilltotal-0.78.0 → skilltotal-0.78.1}/skilltotal/scanners/secrets.py +0 -0
- {skilltotal-0.78.0 → skilltotal-0.78.1}/skilltotal/scanners/sensitive_paths.py +0 -0
- {skilltotal-0.78.0 → skilltotal-0.78.1}/skilltotal/scanners/shell_evasion.py +0 -0
- {skilltotal-0.78.0 → skilltotal-0.78.1}/skilltotal/scanners/shell_exec.py +0 -0
- {skilltotal-0.78.0 → skilltotal-0.78.1}/skilltotal/scanners/shell_script.py +0 -0
- {skilltotal-0.78.0 → skilltotal-0.78.1}/skilltotal/scanners/skill_fetch_exec.py +0 -0
- {skilltotal-0.78.0 → skilltotal-0.78.1}/skilltotal/scoring.py +0 -0
- {skilltotal-0.78.0 → skilltotal-0.78.1}/skilltotal/text_normalize.py +0 -0
- {skilltotal-0.78.0 → skilltotal-0.78.1}/skilltotal/traits.py +0 -0
- {skilltotal-0.78.0 → skilltotal-0.78.1}/skilltotal/typosquatting.py +0 -0
- {skilltotal-0.78.0 → skilltotal-0.78.1}/skilltotal.egg-info/SOURCES.txt +0 -0
- {skilltotal-0.78.0 → skilltotal-0.78.1}/skilltotal.egg-info/dependency_links.txt +0 -0
- {skilltotal-0.78.0 → skilltotal-0.78.1}/skilltotal.egg-info/entry_points.txt +0 -0
- {skilltotal-0.78.0 → skilltotal-0.78.1}/skilltotal.egg-info/requires.txt +0 -0
- {skilltotal-0.78.0 → skilltotal-0.78.1}/skilltotal.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: skilltotal
|
|
3
|
-
Version: 0.78.
|
|
3
|
+
Version: 0.78.1
|
|
4
4
|
Summary: Static security scanner for npm and PyPI packages, MCP servers and agent skills. Runs locally, never runs the code, no LLM.
|
|
5
5
|
Author: SkillTotal
|
|
6
6
|
License-Expression: Apache-2.0
|
|
@@ -102,7 +102,7 @@ skilltotal scan npm:express # or pypi:name, a git URL, a folder, an archive
|
|
|
102
102
|
([full example with permissions](https://github.com/pezhik/skilltotal/blob/main/docs/ci.md)):
|
|
103
103
|
|
|
104
104
|
```yaml
|
|
105
|
-
- uses: pezhik/skilltotal@v0.78.
|
|
105
|
+
- uses: pezhik/skilltotal@v0.78.1
|
|
106
106
|
with: { source: ., fail-on: high }
|
|
107
107
|
```
|
|
108
108
|
|
|
@@ -241,7 +241,7 @@ jobs:
|
|
|
241
241
|
runs-on: ubuntu-latest
|
|
242
242
|
steps:
|
|
243
243
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
244
|
-
- uses: pezhik/skilltotal@v0.78.
|
|
244
|
+
- uses: pezhik/skilltotal@v0.78.1
|
|
245
245
|
with:
|
|
246
246
|
source: . # a path, a git URL, or an npm:/pypi:<name> spec
|
|
247
247
|
fail-on: high # fail on a high/critical risk finding (or 'none')
|
|
@@ -259,7 +259,7 @@ out on an existing repository. Anywhere else Python 3.10+ runs, install a pinned
|
|
|
259
259
|
on the exit code (0 passed, 2 a gate tripped, 1 the scan could not run):
|
|
260
260
|
|
|
261
261
|
```bash
|
|
262
|
-
pip install skilltotal==0.78.
|
|
262
|
+
pip install skilltotal==0.78.1 # in a virtual environment outside the checkout
|
|
263
263
|
skilltotal scan . --fail-on high
|
|
264
264
|
```
|
|
265
265
|
|
|
@@ -317,7 +317,7 @@ With npx (it needs uv, pipx, or Python 3.11+ with `skilltotal` installed), name
|
|
|
317
317
|
`--package` so npx does not run a `skilltotal` from the scanned repository's `node_modules/.bin`:
|
|
318
318
|
|
|
319
319
|
```bash
|
|
320
|
-
npx -y --package=skilltotal@0.78.
|
|
320
|
+
npx -y --package=skilltotal@0.78.1 -- skilltotal scan https://github.com/owner/repo
|
|
321
321
|
```
|
|
322
322
|
|
|
323
323
|
## Measured, not asserted
|
|
@@ -61,7 +61,7 @@ skilltotal scan npm:express # or pypi:name, a git URL, a folder, an archive
|
|
|
61
61
|
([full example with permissions](https://github.com/pezhik/skilltotal/blob/main/docs/ci.md)):
|
|
62
62
|
|
|
63
63
|
```yaml
|
|
64
|
-
- uses: pezhik/skilltotal@v0.78.
|
|
64
|
+
- uses: pezhik/skilltotal@v0.78.1
|
|
65
65
|
with: { source: ., fail-on: high }
|
|
66
66
|
```
|
|
67
67
|
|
|
@@ -200,7 +200,7 @@ jobs:
|
|
|
200
200
|
runs-on: ubuntu-latest
|
|
201
201
|
steps:
|
|
202
202
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
203
|
-
- uses: pezhik/skilltotal@v0.78.
|
|
203
|
+
- uses: pezhik/skilltotal@v0.78.1
|
|
204
204
|
with:
|
|
205
205
|
source: . # a path, a git URL, or an npm:/pypi:<name> spec
|
|
206
206
|
fail-on: high # fail on a high/critical risk finding (or 'none')
|
|
@@ -218,7 +218,7 @@ out on an existing repository. Anywhere else Python 3.10+ runs, install a pinned
|
|
|
218
218
|
on the exit code (0 passed, 2 a gate tripped, 1 the scan could not run):
|
|
219
219
|
|
|
220
220
|
```bash
|
|
221
|
-
pip install skilltotal==0.78.
|
|
221
|
+
pip install skilltotal==0.78.1 # in a virtual environment outside the checkout
|
|
222
222
|
skilltotal scan . --fail-on high
|
|
223
223
|
```
|
|
224
224
|
|
|
@@ -276,7 +276,7 @@ With npx (it needs uv, pipx, or Python 3.11+ with `skilltotal` installed), name
|
|
|
276
276
|
`--package` so npx does not run a `skilltotal` from the scanned repository's `node_modules/.bin`:
|
|
277
277
|
|
|
278
278
|
```bash
|
|
279
|
-
npx -y --package=skilltotal@0.78.
|
|
279
|
+
npx -y --package=skilltotal@0.78.1 -- skilltotal scan https://github.com/owner/repo
|
|
280
280
|
```
|
|
281
281
|
|
|
282
282
|
## Measured, not asserted
|
|
@@ -22,7 +22,7 @@ from skilltotal.models import (
|
|
|
22
22
|
# REPORT_SCHEMA_VERSION: shape of Report.to_dict(); bumps only on schema changes.
|
|
23
23
|
# RULESET_VERSION: integer counter of the detection ruleset; bumps when rules change, so a
|
|
24
24
|
# consumer knows when re-scanning old reports may surface new findings.
|
|
25
|
-
__version__ = "0.78.
|
|
25
|
+
__version__ = "0.78.1"
|
|
26
26
|
ENGINE_VERSION = __version__
|
|
27
27
|
REPORT_SCHEMA_VERSION = "1.9"
|
|
28
28
|
RULESET_VERSION = 79
|
|
@@ -841,10 +841,20 @@ def _collect_remote(
|
|
|
841
841
|
raise CollectionError(f"path '{subpath}' not found in repository {clone_url}")
|
|
842
842
|
root = candidate
|
|
843
843
|
|
|
844
|
-
|
|
844
|
+
# A whole repository is checked out into a temp folder named "repo": with no manifest to
|
|
845
|
+
# name it, the repository's own name stands in for that folder name.
|
|
846
|
+
default_name = None if subpath else _repo_name(clone_url)
|
|
847
|
+
component = detect_component(root, source=url, default_name=default_name)
|
|
845
848
|
return SourceContext(root=root, component=component, _tempdir=tmp, note=note)
|
|
846
849
|
|
|
847
850
|
|
|
851
|
+
def _repo_name(clone_url: str) -> str | None:
|
|
852
|
+
"""The repository name a clone URL ends in (``owner/name.git`` -> ``name``), if any."""
|
|
853
|
+
tail = re.split(r"[/:]", clone_url.strip().rstrip("/"))[-1]
|
|
854
|
+
tail = tail[:-4] if tail.lower().endswith(".git") else tail
|
|
855
|
+
return tail or None
|
|
856
|
+
|
|
857
|
+
|
|
848
858
|
# --------------------------------------------------------------- package registries
|
|
849
859
|
|
|
850
860
|
# A company registry mirror (Artifactory, Nexus, Verdaccio, devpi) to fetch `npm:` / `pypi:`
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: skilltotal
|
|
3
|
-
Version: 0.78.
|
|
3
|
+
Version: 0.78.1
|
|
4
4
|
Summary: Static security scanner for npm and PyPI packages, MCP servers and agent skills. Runs locally, never runs the code, no LLM.
|
|
5
5
|
Author: SkillTotal
|
|
6
6
|
License-Expression: Apache-2.0
|
|
@@ -102,7 +102,7 @@ skilltotal scan npm:express # or pypi:name, a git URL, a folder, an archive
|
|
|
102
102
|
([full example with permissions](https://github.com/pezhik/skilltotal/blob/main/docs/ci.md)):
|
|
103
103
|
|
|
104
104
|
```yaml
|
|
105
|
-
- uses: pezhik/skilltotal@v0.78.
|
|
105
|
+
- uses: pezhik/skilltotal@v0.78.1
|
|
106
106
|
with: { source: ., fail-on: high }
|
|
107
107
|
```
|
|
108
108
|
|
|
@@ -241,7 +241,7 @@ jobs:
|
|
|
241
241
|
runs-on: ubuntu-latest
|
|
242
242
|
steps:
|
|
243
243
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
244
|
-
- uses: pezhik/skilltotal@v0.78.
|
|
244
|
+
- uses: pezhik/skilltotal@v0.78.1
|
|
245
245
|
with:
|
|
246
246
|
source: . # a path, a git URL, or an npm:/pypi:<name> spec
|
|
247
247
|
fail-on: high # fail on a high/critical risk finding (or 'none')
|
|
@@ -259,7 +259,7 @@ out on an existing repository. Anywhere else Python 3.10+ runs, install a pinned
|
|
|
259
259
|
on the exit code (0 passed, 2 a gate tripped, 1 the scan could not run):
|
|
260
260
|
|
|
261
261
|
```bash
|
|
262
|
-
pip install skilltotal==0.78.
|
|
262
|
+
pip install skilltotal==0.78.1 # in a virtual environment outside the checkout
|
|
263
263
|
skilltotal scan . --fail-on high
|
|
264
264
|
```
|
|
265
265
|
|
|
@@ -317,7 +317,7 @@ With npx (it needs uv, pipx, or Python 3.11+ with `skilltotal` installed), name
|
|
|
317
317
|
`--package` so npx does not run a `skilltotal` from the scanned repository's `node_modules/.bin`:
|
|
318
318
|
|
|
319
319
|
```bash
|
|
320
|
-
npx -y --package=skilltotal@0.78.
|
|
320
|
+
npx -y --package=skilltotal@0.78.1 -- skilltotal scan https://github.com/owner/repo
|
|
321
321
|
```
|
|
322
322
|
|
|
323
323
|
## Measured, not asserted
|
|
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
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|