skillplus 0.1.0__tar.gz → 0.1.2__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.
- skillplus-0.1.2/PKG-INFO +132 -0
- skillplus-0.1.2/README.md +114 -0
- {skillplus-0.1.0 → skillplus-0.1.2}/pyproject.toml +1 -1
- {skillplus-0.1.0 → skillplus-0.1.2}/src/skillplus/client.py +1 -1
- skillplus-0.1.0/PKG-INFO +0 -102
- skillplus-0.1.0/README.md +0 -84
- {skillplus-0.1.0 → skillplus-0.1.2}/.gitignore +0 -0
- {skillplus-0.1.0 → skillplus-0.1.2}/LICENSE +0 -0
- {skillplus-0.1.0 → skillplus-0.1.2}/src/skillplus/__init__.py +0 -0
- {skillplus-0.1.0 → skillplus-0.1.2}/src/skillplus/errors.py +0 -0
- {skillplus-0.1.0 → skillplus-0.1.2}/src/skillplus/py.typed +0 -0
- {skillplus-0.1.0 → skillplus-0.1.2}/src/skillplus/types.py +0 -0
- {skillplus-0.1.0 → skillplus-0.1.2}/tests/test_client.py +0 -0
- {skillplus-0.1.0 → skillplus-0.1.2}/tests/test_v3_features.py +0 -0
skillplus-0.1.2/PKG-INFO
ADDED
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: skillplus
|
|
3
|
+
Version: 0.1.2
|
|
4
|
+
Summary: Official Python SDK for SkillPlus
|
|
5
|
+
Project-URL: Homepage, https://skillplus.xyz
|
|
6
|
+
Project-URL: Documentation, https://docs.skillplus.xyz
|
|
7
|
+
Author: SkillPlus
|
|
8
|
+
License: MIT
|
|
9
|
+
License-File: LICENSE
|
|
10
|
+
Keywords: ai,sdk,security,skillplus
|
|
11
|
+
Requires-Python: >=3.10
|
|
12
|
+
Requires-Dist: httpx>=0.28
|
|
13
|
+
Provides-Extra: dev
|
|
14
|
+
Requires-Dist: build>=1.2; extra == 'dev'
|
|
15
|
+
Requires-Dist: pytest>=8; extra == 'dev'
|
|
16
|
+
Requires-Dist: respx>=0.22; extra == 'dev'
|
|
17
|
+
Description-Content-Type: text/markdown
|
|
18
|
+
|
|
19
|
+
# SkillPlus Python SDK
|
|
20
|
+
|
|
21
|
+
Official Python SDK for the hosted [SkillPlus](https://skillplus.xyz) API.
|
|
22
|
+
|
|
23
|
+
SkillPlus provides security intelligence for AI skills and agent-facing software, helping developers, teams, and platforms scan, understand, and trust AI skills before installation, approval, or integration.
|
|
24
|
+
|
|
25
|
+
## Install
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
pip install skillplus
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
Requires Python 3.10+.
|
|
32
|
+
|
|
33
|
+
## Quick start
|
|
34
|
+
|
|
35
|
+
One call that always ends with a completed report — scanning first if the
|
|
36
|
+
skill has never been seen:
|
|
37
|
+
|
|
38
|
+
```python
|
|
39
|
+
from skillplus import SkillPlus
|
|
40
|
+
|
|
41
|
+
client = SkillPlus(api_key="skp_...")
|
|
42
|
+
|
|
43
|
+
report = client.wait_for_report("https://www.skills.sh/vercel-labs/skills/find-skills")
|
|
44
|
+
# GitHub repositories work the same way: "https://github.com/owner/repo"
|
|
45
|
+
|
|
46
|
+
print(report.verdict) # "safe" | "medium" | "high" | "unknown" — UI labels: Safe / Caution / High Risk / Unrated
|
|
47
|
+
print(report.summary.total_issues)
|
|
48
|
+
if report.supply_chain:
|
|
49
|
+
print(report.supply_chain.blacklist_hits) # poisoned-dependency hits
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
Prefer `verdict` over the legacy `rating` field — it folds historical values
|
|
53
|
+
onto the current three-tier scale.
|
|
54
|
+
|
|
55
|
+
## Lower-level: check without waiting
|
|
56
|
+
|
|
57
|
+
`query` returns immediately with the current state (`found` / `queued` /
|
|
58
|
+
`running` / `not_found` / `failed`) and never blocks:
|
|
59
|
+
|
|
60
|
+
```python
|
|
61
|
+
result = client.query("https://www.skills.sh/vercel-labs/skills/find-skills")
|
|
62
|
+
|
|
63
|
+
if result.status == "found" and result.report:
|
|
64
|
+
print(result.report.verdict)
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
## Advanced options
|
|
68
|
+
|
|
69
|
+
For repositories containing many skills, or to queue a scan automatically when
|
|
70
|
+
no report exists yet:
|
|
71
|
+
|
|
72
|
+
```python
|
|
73
|
+
result = client.query(
|
|
74
|
+
"https://github.com/owner/repo", # multi-skill repos are usually on GitHub
|
|
75
|
+
skill_path="skills/example", # pick one skill in the repo
|
|
76
|
+
scan_if_missing=True, # queue a scan if no report exists
|
|
77
|
+
)
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
Client options:
|
|
81
|
+
|
|
82
|
+
```python
|
|
83
|
+
client = SkillPlus(
|
|
84
|
+
api_key="skp_...",
|
|
85
|
+
base_url="https://skillplus.xyz", # staging / self-hosted override
|
|
86
|
+
timeout=30.0, # per-request timeout (seconds)
|
|
87
|
+
max_retries=2, # retries on 429/502/503, honoring Retry-After
|
|
88
|
+
)
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
## Context manager
|
|
92
|
+
|
|
93
|
+
```python
|
|
94
|
+
from skillplus import SkillPlus
|
|
95
|
+
|
|
96
|
+
with SkillPlus(api_key="skp_...") as client:
|
|
97
|
+
result = client.scan("https://www.skills.sh/vercel-labs/skills/find-skills")
|
|
98
|
+
print(result.status)
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
## Methods
|
|
102
|
+
|
|
103
|
+
| Method | Use case |
|
|
104
|
+
|---|---|
|
|
105
|
+
| `query(...)` | Check whether SkillPlus already has a report for a skill. |
|
|
106
|
+
| `scan(...)` | Request a scan when a report is missing or when a fresh check is needed. |
|
|
107
|
+
| `wait_for_report(...)` | Query-and-wait: scans if missing, polls, and returns the completed report. |
|
|
108
|
+
| `get_report(scan_id)` | Retrieve structured report data: verdict, findings, AI audit, supply-chain snapshot. |
|
|
109
|
+
| `get_badge(scan_id)` | Fetch the badge SVG for embedding. |
|
|
110
|
+
| `get_badge_url(scan_id)` | Generate a badge URL for READMEs, marketplaces, or internal portals. |
|
|
111
|
+
|
|
112
|
+
## Error handling
|
|
113
|
+
|
|
114
|
+
```python
|
|
115
|
+
from skillplus import SkillPlus, SkillPlusError
|
|
116
|
+
|
|
117
|
+
client = SkillPlus(api_key="skp_...")
|
|
118
|
+
|
|
119
|
+
try:
|
|
120
|
+
result = client.query("https://www.skills.sh/vercel-labs/skills/find-skills")
|
|
121
|
+
except SkillPlusError as error:
|
|
122
|
+
print(error.status_code)
|
|
123
|
+
print(error.message)
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
## Development
|
|
127
|
+
|
|
128
|
+
```bash
|
|
129
|
+
uv sync --extra dev
|
|
130
|
+
uv run pytest
|
|
131
|
+
uv build
|
|
132
|
+
```
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
# SkillPlus Python SDK
|
|
2
|
+
|
|
3
|
+
Official Python SDK for the hosted [SkillPlus](https://skillplus.xyz) API.
|
|
4
|
+
|
|
5
|
+
SkillPlus provides security intelligence for AI skills and agent-facing software, helping developers, teams, and platforms scan, understand, and trust AI skills before installation, approval, or integration.
|
|
6
|
+
|
|
7
|
+
## Install
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
pip install skillplus
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
Requires Python 3.10+.
|
|
14
|
+
|
|
15
|
+
## Quick start
|
|
16
|
+
|
|
17
|
+
One call that always ends with a completed report — scanning first if the
|
|
18
|
+
skill has never been seen:
|
|
19
|
+
|
|
20
|
+
```python
|
|
21
|
+
from skillplus import SkillPlus
|
|
22
|
+
|
|
23
|
+
client = SkillPlus(api_key="skp_...")
|
|
24
|
+
|
|
25
|
+
report = client.wait_for_report("https://www.skills.sh/vercel-labs/skills/find-skills")
|
|
26
|
+
# GitHub repositories work the same way: "https://github.com/owner/repo"
|
|
27
|
+
|
|
28
|
+
print(report.verdict) # "safe" | "medium" | "high" | "unknown" — UI labels: Safe / Caution / High Risk / Unrated
|
|
29
|
+
print(report.summary.total_issues)
|
|
30
|
+
if report.supply_chain:
|
|
31
|
+
print(report.supply_chain.blacklist_hits) # poisoned-dependency hits
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
Prefer `verdict` over the legacy `rating` field — it folds historical values
|
|
35
|
+
onto the current three-tier scale.
|
|
36
|
+
|
|
37
|
+
## Lower-level: check without waiting
|
|
38
|
+
|
|
39
|
+
`query` returns immediately with the current state (`found` / `queued` /
|
|
40
|
+
`running` / `not_found` / `failed`) and never blocks:
|
|
41
|
+
|
|
42
|
+
```python
|
|
43
|
+
result = client.query("https://www.skills.sh/vercel-labs/skills/find-skills")
|
|
44
|
+
|
|
45
|
+
if result.status == "found" and result.report:
|
|
46
|
+
print(result.report.verdict)
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## Advanced options
|
|
50
|
+
|
|
51
|
+
For repositories containing many skills, or to queue a scan automatically when
|
|
52
|
+
no report exists yet:
|
|
53
|
+
|
|
54
|
+
```python
|
|
55
|
+
result = client.query(
|
|
56
|
+
"https://github.com/owner/repo", # multi-skill repos are usually on GitHub
|
|
57
|
+
skill_path="skills/example", # pick one skill in the repo
|
|
58
|
+
scan_if_missing=True, # queue a scan if no report exists
|
|
59
|
+
)
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
Client options:
|
|
63
|
+
|
|
64
|
+
```python
|
|
65
|
+
client = SkillPlus(
|
|
66
|
+
api_key="skp_...",
|
|
67
|
+
base_url="https://skillplus.xyz", # staging / self-hosted override
|
|
68
|
+
timeout=30.0, # per-request timeout (seconds)
|
|
69
|
+
max_retries=2, # retries on 429/502/503, honoring Retry-After
|
|
70
|
+
)
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## Context manager
|
|
74
|
+
|
|
75
|
+
```python
|
|
76
|
+
from skillplus import SkillPlus
|
|
77
|
+
|
|
78
|
+
with SkillPlus(api_key="skp_...") as client:
|
|
79
|
+
result = client.scan("https://www.skills.sh/vercel-labs/skills/find-skills")
|
|
80
|
+
print(result.status)
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
## Methods
|
|
84
|
+
|
|
85
|
+
| Method | Use case |
|
|
86
|
+
|---|---|
|
|
87
|
+
| `query(...)` | Check whether SkillPlus already has a report for a skill. |
|
|
88
|
+
| `scan(...)` | Request a scan when a report is missing or when a fresh check is needed. |
|
|
89
|
+
| `wait_for_report(...)` | Query-and-wait: scans if missing, polls, and returns the completed report. |
|
|
90
|
+
| `get_report(scan_id)` | Retrieve structured report data: verdict, findings, AI audit, supply-chain snapshot. |
|
|
91
|
+
| `get_badge(scan_id)` | Fetch the badge SVG for embedding. |
|
|
92
|
+
| `get_badge_url(scan_id)` | Generate a badge URL for READMEs, marketplaces, or internal portals. |
|
|
93
|
+
|
|
94
|
+
## Error handling
|
|
95
|
+
|
|
96
|
+
```python
|
|
97
|
+
from skillplus import SkillPlus, SkillPlusError
|
|
98
|
+
|
|
99
|
+
client = SkillPlus(api_key="skp_...")
|
|
100
|
+
|
|
101
|
+
try:
|
|
102
|
+
result = client.query("https://www.skills.sh/vercel-labs/skills/find-skills")
|
|
103
|
+
except SkillPlusError as error:
|
|
104
|
+
print(error.status_code)
|
|
105
|
+
print(error.message)
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
## Development
|
|
109
|
+
|
|
110
|
+
```bash
|
|
111
|
+
uv sync --extra dev
|
|
112
|
+
uv run pytest
|
|
113
|
+
uv build
|
|
114
|
+
```
|
skillplus-0.1.0/PKG-INFO
DELETED
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
Metadata-Version: 2.4
|
|
2
|
-
Name: skillplus
|
|
3
|
-
Version: 0.1.0
|
|
4
|
-
Summary: Official Python SDK for SkillPlus
|
|
5
|
-
Project-URL: Homepage, https://skillplus.xyz
|
|
6
|
-
Project-URL: Documentation, https://docs.skillplus.xyz
|
|
7
|
-
Author: SkillPlus
|
|
8
|
-
License: MIT
|
|
9
|
-
License-File: LICENSE
|
|
10
|
-
Keywords: ai,sdk,security,skillplus
|
|
11
|
-
Requires-Python: >=3.10
|
|
12
|
-
Requires-Dist: httpx>=0.28
|
|
13
|
-
Provides-Extra: dev
|
|
14
|
-
Requires-Dist: build>=1.2; extra == 'dev'
|
|
15
|
-
Requires-Dist: pytest>=8; extra == 'dev'
|
|
16
|
-
Requires-Dist: respx>=0.22; extra == 'dev'
|
|
17
|
-
Description-Content-Type: text/markdown
|
|
18
|
-
|
|
19
|
-
# SkillPlus Python SDK
|
|
20
|
-
|
|
21
|
-
Official Python SDK for the hosted SkillPlus API.
|
|
22
|
-
|
|
23
|
-
SkillPlus provides security intelligence for AI skills and agent-facing software, helping developers, teams, and platforms scan, understand, and trust AI skills before installation, approval, or integration.
|
|
24
|
-
|
|
25
|
-
## Install
|
|
26
|
-
|
|
27
|
-
```bash
|
|
28
|
-
pip install skillplus
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
## Basic usage
|
|
32
|
-
|
|
33
|
-
```python
|
|
34
|
-
from skillplus import SkillPlus
|
|
35
|
-
|
|
36
|
-
client = SkillPlus(api_key="skp_...")
|
|
37
|
-
|
|
38
|
-
result = client.query("https://github.com/owner/repo")
|
|
39
|
-
|
|
40
|
-
if result.status == "found" and result.report:
|
|
41
|
-
print(result.report.rating) # "safe" | "medium" | "high"
|
|
42
|
-
```
|
|
43
|
-
|
|
44
|
-
### Advanced options
|
|
45
|
-
|
|
46
|
-
For repositories containing many skills, or to queue a scan automatically when
|
|
47
|
-
no report exists yet:
|
|
48
|
-
|
|
49
|
-
```python
|
|
50
|
-
result = client.query(
|
|
51
|
-
"https://github.com/owner/repo",
|
|
52
|
-
skill_path="skills/example", # pick one skill in a multi-skill repo
|
|
53
|
-
scan_if_missing=True, # queue a scan if no report exists
|
|
54
|
-
)
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
The SDK talks to the official SkillPlus service at `https://skillplus.xyz`.
|
|
58
|
-
|
|
59
|
-
## Context manager
|
|
60
|
-
|
|
61
|
-
```python
|
|
62
|
-
from skillplus import SkillPlus
|
|
63
|
-
|
|
64
|
-
with SkillPlus(api_key="skp_...") as client:
|
|
65
|
-
result = client.scan(
|
|
66
|
-
"https://github.com/owner/repo",
|
|
67
|
-
skill_path="skills/example",
|
|
68
|
-
)
|
|
69
|
-
print(result.status)
|
|
70
|
-
```
|
|
71
|
-
|
|
72
|
-
## Methods
|
|
73
|
-
|
|
74
|
-
| Method | Use case |
|
|
75
|
-
|---|---|
|
|
76
|
-
| `query(...)` | Check whether SkillPlus already has a report for a skill. |
|
|
77
|
-
| `scan(...)` | Request a scan when a report is missing or when a fresh check is needed. |
|
|
78
|
-
| `get_report(scan_id)` | Retrieve structured report data for dashboards, registries, or automation. |
|
|
79
|
-
| `get_badge(scan_id)` | Fetch the badge SVG for embedding. |
|
|
80
|
-
| `get_badge_url(scan_id)` | Generate a badge URL for READMEs, marketplaces, or internal portals. |
|
|
81
|
-
|
|
82
|
-
## Error handling
|
|
83
|
-
|
|
84
|
-
```python
|
|
85
|
-
from skillplus import SkillPlus, SkillPlusError
|
|
86
|
-
|
|
87
|
-
client = SkillPlus(api_key="skp_...")
|
|
88
|
-
|
|
89
|
-
try:
|
|
90
|
-
result = client.query("https://github.com/owner/repo")
|
|
91
|
-
except SkillPlusError as error:
|
|
92
|
-
print(error.status_code)
|
|
93
|
-
print(error.message)
|
|
94
|
-
```
|
|
95
|
-
|
|
96
|
-
## Development
|
|
97
|
-
|
|
98
|
-
```bash
|
|
99
|
-
uv sync --extra dev
|
|
100
|
-
uv run pytest
|
|
101
|
-
uv run python -m build
|
|
102
|
-
```
|
skillplus-0.1.0/README.md
DELETED
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
# SkillPlus Python SDK
|
|
2
|
-
|
|
3
|
-
Official Python SDK for the hosted SkillPlus API.
|
|
4
|
-
|
|
5
|
-
SkillPlus provides security intelligence for AI skills and agent-facing software, helping developers, teams, and platforms scan, understand, and trust AI skills before installation, approval, or integration.
|
|
6
|
-
|
|
7
|
-
## Install
|
|
8
|
-
|
|
9
|
-
```bash
|
|
10
|
-
pip install skillplus
|
|
11
|
-
```
|
|
12
|
-
|
|
13
|
-
## Basic usage
|
|
14
|
-
|
|
15
|
-
```python
|
|
16
|
-
from skillplus import SkillPlus
|
|
17
|
-
|
|
18
|
-
client = SkillPlus(api_key="skp_...")
|
|
19
|
-
|
|
20
|
-
result = client.query("https://github.com/owner/repo")
|
|
21
|
-
|
|
22
|
-
if result.status == "found" and result.report:
|
|
23
|
-
print(result.report.rating) # "safe" | "medium" | "high"
|
|
24
|
-
```
|
|
25
|
-
|
|
26
|
-
### Advanced options
|
|
27
|
-
|
|
28
|
-
For repositories containing many skills, or to queue a scan automatically when
|
|
29
|
-
no report exists yet:
|
|
30
|
-
|
|
31
|
-
```python
|
|
32
|
-
result = client.query(
|
|
33
|
-
"https://github.com/owner/repo",
|
|
34
|
-
skill_path="skills/example", # pick one skill in a multi-skill repo
|
|
35
|
-
scan_if_missing=True, # queue a scan if no report exists
|
|
36
|
-
)
|
|
37
|
-
```
|
|
38
|
-
|
|
39
|
-
The SDK talks to the official SkillPlus service at `https://skillplus.xyz`.
|
|
40
|
-
|
|
41
|
-
## Context manager
|
|
42
|
-
|
|
43
|
-
```python
|
|
44
|
-
from skillplus import SkillPlus
|
|
45
|
-
|
|
46
|
-
with SkillPlus(api_key="skp_...") as client:
|
|
47
|
-
result = client.scan(
|
|
48
|
-
"https://github.com/owner/repo",
|
|
49
|
-
skill_path="skills/example",
|
|
50
|
-
)
|
|
51
|
-
print(result.status)
|
|
52
|
-
```
|
|
53
|
-
|
|
54
|
-
## Methods
|
|
55
|
-
|
|
56
|
-
| Method | Use case |
|
|
57
|
-
|---|---|
|
|
58
|
-
| `query(...)` | Check whether SkillPlus already has a report for a skill. |
|
|
59
|
-
| `scan(...)` | Request a scan when a report is missing or when a fresh check is needed. |
|
|
60
|
-
| `get_report(scan_id)` | Retrieve structured report data for dashboards, registries, or automation. |
|
|
61
|
-
| `get_badge(scan_id)` | Fetch the badge SVG for embedding. |
|
|
62
|
-
| `get_badge_url(scan_id)` | Generate a badge URL for READMEs, marketplaces, or internal portals. |
|
|
63
|
-
|
|
64
|
-
## Error handling
|
|
65
|
-
|
|
66
|
-
```python
|
|
67
|
-
from skillplus import SkillPlus, SkillPlusError
|
|
68
|
-
|
|
69
|
-
client = SkillPlus(api_key="skp_...")
|
|
70
|
-
|
|
71
|
-
try:
|
|
72
|
-
result = client.query("https://github.com/owner/repo")
|
|
73
|
-
except SkillPlusError as error:
|
|
74
|
-
print(error.status_code)
|
|
75
|
-
print(error.message)
|
|
76
|
-
```
|
|
77
|
-
|
|
78
|
-
## Development
|
|
79
|
-
|
|
80
|
-
```bash
|
|
81
|
-
uv sync --extra dev
|
|
82
|
-
uv run pytest
|
|
83
|
-
uv run python -m build
|
|
84
|
-
```
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|