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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: aisbom-cli
3
- Version: 0.9.0
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. Standalone Binary (Air-Gapped)
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
- ### Preview status
320
+ ### Status
307
321
 
308
- In the current release, telemetry is **off by default** and only fires when `AISBOM_TELEMETRY_V2=1` is set. The next release will flip to default-on; `AISBOM_NO_TELEMETRY=1` is the opt-out and works in both states.
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. Standalone Binary (Air-Gapped)
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
- ### Preview status
295
+ ### Status
282
296
 
283
- In the current release, telemetry is **off by default** and only fires when `AISBOM_TELEMETRY_V2=1` is set. The next release will flip to default-on; `AISBOM_NO_TELEMETRY=1` is the opt-out and works in both states.
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
- AISBOM_TELEMETRY_V2 — opt-in for the v2 rollout. Until set to "1",
12
- post_event() is a no-op even with no opt-out.
13
- Default-flipped to on in a future release.
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. Both env vars consulted; opt-out always wins."""
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.0"
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