aisbom-cli 0.9.0__tar.gz → 0.9.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.
- {aisbom_cli-0.9.0 → aisbom_cli-0.9.2}/PKG-INFO +18 -4
- {aisbom_cli-0.9.0 → aisbom_cli-0.9.2}/README.md +17 -3
- {aisbom_cli-0.9.0 → aisbom_cli-0.9.2}/aisbom/cli.py +26 -0
- {aisbom_cli-0.9.0 → aisbom_cli-0.9.2}/aisbom/telemetry.py +7 -6
- {aisbom_cli-0.9.0 → aisbom_cli-0.9.2}/pyproject.toml +1 -1
- {aisbom_cli-0.9.0 → aisbom_cli-0.9.2}/LICENSE +0 -0
- {aisbom_cli-0.9.0 → aisbom_cli-0.9.2}/aisbom/__init__.py +0 -0
- {aisbom_cli-0.9.0 → aisbom_cli-0.9.2}/aisbom/diff.py +0 -0
- {aisbom_cli-0.9.0 → aisbom_cli-0.9.2}/aisbom/linter.py +0 -0
- {aisbom_cli-0.9.0 → aisbom_cli-0.9.2}/aisbom/mock_generator.py +0 -0
- {aisbom_cli-0.9.0 → aisbom_cli-0.9.2}/aisbom/remote.py +0 -0
- {aisbom_cli-0.9.0 → aisbom_cli-0.9.2}/aisbom/safety.py +0 -0
- {aisbom_cli-0.9.0 → aisbom_cli-0.9.2}/aisbom/scanner.py +0 -0
- {aisbom_cli-0.9.0 → aisbom_cli-0.9.2}/aisbom/spdx_gen.py +0 -0
- {aisbom_cli-0.9.0 → aisbom_cli-0.9.2}/aisbom/version_check.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: aisbom-cli
|
|
3
|
-
Version: 0.9.
|
|
3
|
+
Version: 0.9.2
|
|
4
4
|
Summary: An AI Supply Chain security tool that that detects Pickle bombs and generates CycloneDX SBOMs for Machine Learning models.
|
|
5
5
|
License-File: LICENSE
|
|
6
6
|
Author: Ajoy L
|
|
@@ -52,7 +52,21 @@ pip install aisbom-cli
|
|
|
52
52
|
```
|
|
53
53
|
*Note: The package name is `aisbom-cli`, but the command you run is `aisbom`.*
|
|
54
54
|
|
|
55
|
-
### 1a.
|
|
55
|
+
### 1a. Zero-Install (`pipx run`)
|
|
56
|
+
Want to try AIsbom without committing to an install? Run it ephemerally with [pipx](https://pipx.pypa.io/):
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
# Single throwaway invocation — pipx fetches the latest, runs it, then cleans up.
|
|
60
|
+
pipx run --spec aisbom-cli aisbom scan hf://google-bert/bert-base-uncased
|
|
61
|
+
|
|
62
|
+
# Or install into pipx's isolated venv (still no system-Python pollution):
|
|
63
|
+
pipx install aisbom-cli
|
|
64
|
+
aisbom scan hf://google-bert/bert-base-uncased
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
`pipx run` is the fastest path from "I read about this on HN" to seeing a real scan. The `--spec aisbom-cli` is required because our PyPI package name (`aisbom-cli`) differs from the command name (`aisbom`).
|
|
68
|
+
|
|
69
|
+
### 1b. Standalone Binary (Air-Gapped)
|
|
56
70
|
For environments where installing Python is not possible, download the single-file executable from our [Releases page](https://github.com/Lab700xOrg/aisbom/releases/latest).
|
|
57
71
|
|
|
58
72
|
> **📚 Guide:** [How to Audit Air-Gapped / Offline Systems](docs/air-gapped-guide.md)
|
|
@@ -303,9 +317,9 @@ Events POST to `https://api.aisbom.io/v1/telemetry` (a Cloudflare Worker we oper
|
|
|
303
317
|
|
|
304
318
|
When `CI=true` or `GITHUB_ACTIONS=true`, the `cli_install_first_seen` event is suppressed (containers are ephemeral and would otherwise spam the metric). Other events still fire, tagged `is_ci=true`.
|
|
305
319
|
|
|
306
|
-
###
|
|
320
|
+
### Status
|
|
307
321
|
|
|
308
|
-
|
|
322
|
+
As of **0.9.1**, telemetry is **on by default**. `AISBOM_NO_TELEMETRY=1` is the single opt-out lever and is honored on every code path. The previous `AISBOM_TELEMETRY_V2=1` opt-in flag was retired once the rollout soak completed — setting it today is a harmless no-op.
|
|
309
323
|
|
|
310
324
|
---
|
|
311
325
|
|
|
@@ -27,7 +27,21 @@ pip install aisbom-cli
|
|
|
27
27
|
```
|
|
28
28
|
*Note: The package name is `aisbom-cli`, but the command you run is `aisbom`.*
|
|
29
29
|
|
|
30
|
-
### 1a.
|
|
30
|
+
### 1a. Zero-Install (`pipx run`)
|
|
31
|
+
Want to try AIsbom without committing to an install? Run it ephemerally with [pipx](https://pipx.pypa.io/):
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
# Single throwaway invocation — pipx fetches the latest, runs it, then cleans up.
|
|
35
|
+
pipx run --spec aisbom-cli aisbom scan hf://google-bert/bert-base-uncased
|
|
36
|
+
|
|
37
|
+
# Or install into pipx's isolated venv (still no system-Python pollution):
|
|
38
|
+
pipx install aisbom-cli
|
|
39
|
+
aisbom scan hf://google-bert/bert-base-uncased
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
`pipx run` is the fastest path from "I read about this on HN" to seeing a real scan. The `--spec aisbom-cli` is required because our PyPI package name (`aisbom-cli`) differs from the command name (`aisbom`).
|
|
43
|
+
|
|
44
|
+
### 1b. Standalone Binary (Air-Gapped)
|
|
31
45
|
For environments where installing Python is not possible, download the single-file executable from our [Releases page](https://github.com/Lab700xOrg/aisbom/releases/latest).
|
|
32
46
|
|
|
33
47
|
> **📚 Guide:** [How to Audit Air-Gapped / Offline Systems](docs/air-gapped-guide.md)
|
|
@@ -278,9 +292,9 @@ Events POST to `https://api.aisbom.io/v1/telemetry` (a Cloudflare Worker we oper
|
|
|
278
292
|
|
|
279
293
|
When `CI=true` or `GITHUB_ACTIONS=true`, the `cli_install_first_seen` event is suppressed (containers are ephemeral and would otherwise spam the metric). Other events still fire, tagged `is_ci=true`.
|
|
280
294
|
|
|
281
|
-
###
|
|
295
|
+
### Status
|
|
282
296
|
|
|
283
|
-
|
|
297
|
+
As of **0.9.1**, telemetry is **on by default**. `AISBOM_NO_TELEMETRY=1` is the single opt-out lever and is honored on every code path. The previous `AISBOM_TELEMETRY_V2=1` opt-in flag was retired once the rollout soak completed — setting it today is a harmless no-op.
|
|
284
298
|
|
|
285
299
|
---
|
|
286
300
|
|
|
@@ -27,6 +27,32 @@ import requests
|
|
|
27
27
|
app = typer.Typer()
|
|
28
28
|
console = Console()
|
|
29
29
|
|
|
30
|
+
|
|
31
|
+
@app.callback(invoke_without_command=True)
|
|
32
|
+
def main(ctx: typer.Context):
|
|
33
|
+
"""AIsbom — AI Supply Chain Security Scanner."""
|
|
34
|
+
# Owns the no-args codepath. When the user runs `aisbom` with no
|
|
35
|
+
# subcommand, show a one-screen quickstart instead of Typer's auto-help
|
|
36
|
+
# block. `--help` still short-circuits to Typer's full reference, and
|
|
37
|
+
# subcommand invocations fall through (this callback is a no-op when
|
|
38
|
+
# `ctx.invoked_subcommand` is set).
|
|
39
|
+
if ctx.invoked_subcommand is None:
|
|
40
|
+
console.print(
|
|
41
|
+
Panel(
|
|
42
|
+
"[bold cyan]Deep introspection of ML model artifacts[/bold cyan]\n"
|
|
43
|
+
"[dim](.pt, .safetensors, .gguf) for malware, license risk, and silent drift.[/dim]\n\n"
|
|
44
|
+
"[bold]Try it now:[/bold]\n\n"
|
|
45
|
+
" [white]$ aisbom scan hf://google-bert/bert-base-uncased[/white]\n\n"
|
|
46
|
+
"[dim]Run [white]aisbom --help[/white] for the full command reference.[/dim]",
|
|
47
|
+
title=" AIsbom ",
|
|
48
|
+
border_style="cyan",
|
|
49
|
+
padding=(1, 2),
|
|
50
|
+
expand=False,
|
|
51
|
+
)
|
|
52
|
+
)
|
|
53
|
+
raise typer.Exit(code=0)
|
|
54
|
+
|
|
55
|
+
|
|
30
56
|
# Thread-safe storage for update checks
|
|
31
57
|
update_result = {"version": None}
|
|
32
58
|
|
|
@@ -8,9 +8,12 @@ cloudcowork/PHASE_1_2_DESIGN.md for the full design.
|
|
|
8
8
|
Gates (all must be passed before any network call):
|
|
9
9
|
AISBOM_NO_TELEMETRY — opt-out, always wins. If set, no events fire and no
|
|
10
10
|
config files are written.
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
11
|
+
|
|
12
|
+
History: an earlier `AISBOM_TELEMETRY_V2=1` opt-in gate was used during the
|
|
13
|
+
v2 schema rollout (Phase 1.2). It was retired in 0.9.1 once the soak period
|
|
14
|
+
passed cleanly; telemetry is now default-on, with AISBOM_NO_TELEMETRY as the
|
|
15
|
+
single opt-out lever. Setting AISBOM_TELEMETRY_V2 today is a no-op (kept
|
|
16
|
+
documented purely so old shell rc files don't trip on an unknown var).
|
|
14
17
|
|
|
15
18
|
PyInstaller constraint: this module imports only stdlib + `requests`. Do not
|
|
16
19
|
add new third-party dependencies without updating scripts/build_binaries.sh.
|
|
@@ -48,11 +51,9 @@ def is_ci() -> bool:
|
|
|
48
51
|
|
|
49
52
|
|
|
50
53
|
def _telemetry_disabled() -> bool:
|
|
51
|
-
"""All-paths short-circuit.
|
|
54
|
+
"""All-paths short-circuit. Opt-out always wins; default state is enabled."""
|
|
52
55
|
if os.getenv("AISBOM_NO_TELEMETRY"):
|
|
53
56
|
return True
|
|
54
|
-
if os.getenv("AISBOM_TELEMETRY_V2") != "1":
|
|
55
|
-
return True
|
|
56
57
|
return False
|
|
57
58
|
|
|
58
59
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[tool.poetry]
|
|
2
2
|
name = "aisbom-cli"
|
|
3
|
-
version = "0.9.
|
|
3
|
+
version = "0.9.2"
|
|
4
4
|
description = "An AI Supply Chain security tool that that detects Pickle bombs and generates CycloneDX SBOMs for Machine Learning models."
|
|
5
5
|
authors = ["Ajoy L <lab700xdev@gmail.com>"]
|
|
6
6
|
readme = "README.md"
|
|
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
|