secure-code-agent 0.12.4__tar.gz → 0.12.5__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.
Files changed (52) hide show
  1. {secure_code_agent-0.12.4/src/secure_code_agent.egg-info → secure_code_agent-0.12.5}/PKG-INFO +2 -2
  2. {secure_code_agent-0.12.4 → secure_code_agent-0.12.5}/README.md +1 -1
  3. {secure_code_agent-0.12.4 → secure_code_agent-0.12.5/src/secure_code_agent.egg-info}/PKG-INFO +2 -2
  4. {secure_code_agent-0.12.4 → secure_code_agent-0.12.5}/src/secure_code_audit/__init__.py +1 -1
  5. {secure_code_agent-0.12.4 → secure_code_agent-0.12.5}/src/secure_code_audit/scanners/osv_scanner.py +14 -2
  6. {secure_code_agent-0.12.4 → secure_code_agent-0.12.5}/LICENSE +0 -0
  7. {secure_code_agent-0.12.4 → secure_code_agent-0.12.5}/pyproject.toml +0 -0
  8. {secure_code_agent-0.12.4 → secure_code_agent-0.12.5}/setup.cfg +0 -0
  9. {secure_code_agent-0.12.4 → secure_code_agent-0.12.5}/src/secure_code_agent.egg-info/SOURCES.txt +0 -0
  10. {secure_code_agent-0.12.4 → secure_code_agent-0.12.5}/src/secure_code_agent.egg-info/dependency_links.txt +0 -0
  11. {secure_code_agent-0.12.4 → secure_code_agent-0.12.5}/src/secure_code_agent.egg-info/entry_points.txt +0 -0
  12. {secure_code_agent-0.12.4 → secure_code_agent-0.12.5}/src/secure_code_agent.egg-info/requires.txt +0 -0
  13. {secure_code_agent-0.12.4 → secure_code_agent-0.12.5}/src/secure_code_agent.egg-info/top_level.txt +0 -0
  14. {secure_code_agent-0.12.4 → secure_code_agent-0.12.5}/src/secure_code_audit/baseline.py +0 -0
  15. {secure_code_agent-0.12.4 → secure_code_agent-0.12.5}/src/secure_code_audit/cli.py +0 -0
  16. {secure_code_agent-0.12.4 → secure_code_agent-0.12.5}/src/secure_code_audit/config.py +0 -0
  17. {secure_code_agent-0.12.4 → secure_code_agent-0.12.5}/src/secure_code_audit/data/semgrep-offline.yaml +0 -0
  18. {secure_code_agent-0.12.4 → secure_code_agent-0.12.5}/src/secure_code_audit/demo.py +0 -0
  19. {secure_code_agent-0.12.4 → secure_code_agent-0.12.5}/src/secure_code_audit/findings.py +0 -0
  20. {secure_code_agent-0.12.4 → secure_code_agent-0.12.5}/src/secure_code_audit/git_tools.py +0 -0
  21. {secure_code_agent-0.12.4 → secure_code_agent-0.12.5}/src/secure_code_audit/history.py +0 -0
  22. {secure_code_agent-0.12.4 → secure_code_agent-0.12.5}/src/secure_code_audit/instructions.py +0 -0
  23. {secure_code_agent-0.12.4 → secure_code_agent-0.12.5}/src/secure_code_audit/mcp_server.py +0 -0
  24. {secure_code_agent-0.12.4 → secure_code_agent-0.12.5}/src/secure_code_audit/pillar.py +0 -0
  25. {secure_code_agent-0.12.4 → secure_code_agent-0.12.5}/src/secure_code_audit/practice.py +0 -0
  26. {secure_code_agent-0.12.4 → secure_code_agent-0.12.5}/src/secure_code_audit/remediation.py +0 -0
  27. {secure_code_agent-0.12.4 → secure_code_agent-0.12.5}/src/secure_code_audit/renderers.py +0 -0
  28. {secure_code_agent-0.12.4 → secure_code_agent-0.12.5}/src/secure_code_audit/ruleset.py +0 -0
  29. {secure_code_agent-0.12.4 → secure_code_agent-0.12.5}/src/secure_code_audit/sarif.py +0 -0
  30. {secure_code_agent-0.12.4 → secure_code_agent-0.12.5}/src/secure_code_audit/scanner_status.py +0 -0
  31. {secure_code_agent-0.12.4 → secure_code_agent-0.12.5}/src/secure_code_audit/scanners/__init__.py +0 -0
  32. {secure_code_agent-0.12.4 → secure_code_agent-0.12.5}/src/secure_code_audit/scanners/bandit_scanner.py +0 -0
  33. {secure_code_agent-0.12.4 → secure_code_agent-0.12.5}/src/secure_code_audit/scanners/base.py +0 -0
  34. {secure_code_agent-0.12.4 → secure_code_agent-0.12.5}/src/secure_code_audit/scanners/builtin_rules.py +0 -0
  35. {secure_code_agent-0.12.4 → secure_code_agent-0.12.5}/src/secure_code_audit/scanners/checkov_scanner.py +0 -0
  36. {secure_code_agent-0.12.4 → secure_code_agent-0.12.5}/src/secure_code_audit/scanners/floor.py +0 -0
  37. {secure_code_agent-0.12.4 → secure_code_agent-0.12.5}/src/secure_code_audit/scanners/gitleaks_scanner.py +0 -0
  38. {secure_code_agent-0.12.4 → secure_code_agent-0.12.5}/src/secure_code_audit/scanners/gosec_scanner.py +0 -0
  39. {secure_code_agent-0.12.4 → secure_code_agent-0.12.5}/src/secure_code_audit/scanners/hadolint_scanner.py +0 -0
  40. {secure_code_agent-0.12.4 → secure_code_agent-0.12.5}/src/secure_code_audit/scanners/njsscan_scanner.py +0 -0
  41. {secure_code_agent-0.12.4 → secure_code_agent-0.12.5}/src/secure_code_audit/scanners/npm_audit_scanner.py +0 -0
  42. {secure_code_agent-0.12.4 → secure_code_agent-0.12.5}/src/secure_code_audit/scanners/pip_audit_scanner.py +0 -0
  43. {secure_code_agent-0.12.4 → secure_code_agent-0.12.5}/src/secure_code_audit/scanners/rubocop_scanner.py +0 -0
  44. {secure_code_agent-0.12.4 → secure_code_agent-0.12.5}/src/secure_code_audit/scanners/scorecard_scanner.py +0 -0
  45. {secure_code_agent-0.12.4 → secure_code_agent-0.12.5}/src/secure_code_audit/scanners/semgrep_scanner.py +0 -0
  46. {secure_code_agent-0.12.4 → secure_code_agent-0.12.5}/src/secure_code_audit/scanners/trivy_scanner.py +0 -0
  47. {secure_code_agent-0.12.4 → secure_code_agent-0.12.5}/src/secure_code_audit/scanners/trufflehog_scanner.py +0 -0
  48. {secure_code_agent-0.12.4 → secure_code_agent-0.12.5}/src/secure_code_audit/scoring.py +0 -0
  49. {secure_code_agent-0.12.4 → secure_code_agent-0.12.5}/src/secure_code_audit/standards.py +0 -0
  50. {secure_code_agent-0.12.4 → secure_code_agent-0.12.5}/src/secure_code_audit/suppressions.py +0 -0
  51. {secure_code_agent-0.12.4 → secure_code_agent-0.12.5}/src/secure_code_audit/triage.py +0 -0
  52. {secure_code_agent-0.12.4 → secure_code_agent-0.12.5}/src/secure_code_audit/verify.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: secure-code-agent
3
- Version: 0.12.4
3
+ Version: 0.12.5
4
4
  Summary: Deterministic security gate + bounded AI remediation prompt generator. NIST SSDF / OWASP ASVS / CWE Top 25 anchored.
5
5
  Author: Marshall Guillory
6
6
  License: MIT
@@ -513,7 +513,7 @@ For agents that support invokable skills, this repo ships a portable skill under
513
513
  ## GitHub Action
514
514
 
515
515
  ```yaml
516
- - uses: marshallguillory86/secure-code-agent@v0.12.4
516
+ - uses: marshallguillory86/secure-code-agent@v0.12.5
517
517
  with:
518
518
  config: secure-code-agent.json
519
519
  fail-on-gate: true
@@ -465,7 +465,7 @@ For agents that support invokable skills, this repo ships a portable skill under
465
465
  ## GitHub Action
466
466
 
467
467
  ```yaml
468
- - uses: marshallguillory86/secure-code-agent@v0.12.4
468
+ - uses: marshallguillory86/secure-code-agent@v0.12.5
469
469
  with:
470
470
  config: secure-code-agent.json
471
471
  fail-on-gate: true
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: secure-code-agent
3
- Version: 0.12.4
3
+ Version: 0.12.5
4
4
  Summary: Deterministic security gate + bounded AI remediation prompt generator. NIST SSDF / OWASP ASVS / CWE Top 25 anchored.
5
5
  Author: Marshall Guillory
6
6
  License: MIT
@@ -513,7 +513,7 @@ For agents that support invokable skills, this repo ships a portable skill under
513
513
  ## GitHub Action
514
514
 
515
515
  ```yaml
516
- - uses: marshallguillory86/secure-code-agent@v0.12.4
516
+ - uses: marshallguillory86/secure-code-agent@v0.12.5
517
517
  with:
518
518
  config: secure-code-agent.json
519
519
  fail-on-gate: true
@@ -12,4 +12,4 @@
12
12
  #:
13
13
  #: PyPI is immutable, so 0.4.0 stays wrong. 0.5.0 is the first build whose
14
14
  #: artifacts name their own producer correctly.
15
- __version__ = "0.12.4"
15
+ __version__ = "0.12.5"
@@ -20,6 +20,13 @@ from secure_code_audit.findings import Category, Confidence, Finding, Severity
20
20
  from secure_code_audit.scanner_status import ScanResult
21
21
  from secure_code_audit.scanners.base import Scanner
22
22
 
23
+ #: osv-scanner's exit code for "No package sources found" — no lockfile,
24
+ #: manifest or SBOM anywhere under the target. Nothing to read is not a
25
+ #: failure to read, so it becomes NOT_APPLICABLE (D23). The tool's own
26
+ #: `--allow-no-lockfiles` would turn this into exit 0 instead, which would
27
+ #: report a completed run over nothing; an outcome that says so is better.
28
+ _NO_PACKAGE_SOURCES = 128
29
+
23
30
  _OSV_SEVERITY: dict[str, Severity] = {
24
31
  "CRITICAL": Severity.CRITICAL,
25
32
  "HIGH": Severity.HIGH,
@@ -53,13 +60,18 @@ class OsvScanner(Scanner):
53
60
  ]
54
61
  args.extend(sc_cfg.extra_args)
55
62
 
56
- # osv-scanner exits 1 on findings, 0 on clean, 127 on bad usage,
57
- # 128 on internal error.
63
+ # osv-scanner exits 0 on clean, 1 on findings, 127 on general failure,
64
+ # and 128 when it found nothing to read. 128 was documented here as an
65
+ # internal error and mapped to FAILED — see D23.
58
66
  r = self._exec(
59
67
  args, cwd=target, timeout_seconds=sc_cfg.timeout_seconds, allowed_exits=(0, 1)
60
68
  )
61
69
  if r.returncode == 124:
62
70
  return self.timed_out(target, f"osv-scanner timed out: {r.stderr[:200]}")
71
+ if r.returncode == _NO_PACKAGE_SOURCES:
72
+ return self.not_applicable(
73
+ target, "osv-scanner found no package sources (lockfile, manifest or SBOM) to scan"
74
+ )
63
75
  if r.returncode not in (0, 1):
64
76
  return self.failed(target, f"osv-scanner failed: {r.stderr[:300]}")
65
77
  if not r.stdout.strip():