secure-code-agent 0.13.0__tar.gz → 0.13.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.
- {secure_code_agent-0.13.0/src/secure_code_agent.egg-info → secure_code_agent-0.13.2}/PKG-INFO +14 -2
- {secure_code_agent-0.13.0 → secure_code_agent-0.13.2}/README.md +13 -1
- {secure_code_agent-0.13.0 → secure_code_agent-0.13.2/src/secure_code_agent.egg-info}/PKG-INFO +14 -2
- {secure_code_agent-0.13.0 → secure_code_agent-0.13.2}/src/secure_code_audit/__init__.py +1 -1
- {secure_code_agent-0.13.0 → secure_code_agent-0.13.2}/src/secure_code_audit/sarif.py +35 -11
- {secure_code_agent-0.13.0 → secure_code_agent-0.13.2}/LICENSE +0 -0
- {secure_code_agent-0.13.0 → secure_code_agent-0.13.2}/pyproject.toml +0 -0
- {secure_code_agent-0.13.0 → secure_code_agent-0.13.2}/setup.cfg +0 -0
- {secure_code_agent-0.13.0 → secure_code_agent-0.13.2}/src/secure_code_agent.egg-info/SOURCES.txt +0 -0
- {secure_code_agent-0.13.0 → secure_code_agent-0.13.2}/src/secure_code_agent.egg-info/dependency_links.txt +0 -0
- {secure_code_agent-0.13.0 → secure_code_agent-0.13.2}/src/secure_code_agent.egg-info/entry_points.txt +0 -0
- {secure_code_agent-0.13.0 → secure_code_agent-0.13.2}/src/secure_code_agent.egg-info/requires.txt +0 -0
- {secure_code_agent-0.13.0 → secure_code_agent-0.13.2}/src/secure_code_agent.egg-info/top_level.txt +0 -0
- {secure_code_agent-0.13.0 → secure_code_agent-0.13.2}/src/secure_code_audit/baseline.py +0 -0
- {secure_code_agent-0.13.0 → secure_code_agent-0.13.2}/src/secure_code_audit/capabilities.py +0 -0
- {secure_code_agent-0.13.0 → secure_code_agent-0.13.2}/src/secure_code_audit/cli.py +0 -0
- {secure_code_agent-0.13.0 → secure_code_agent-0.13.2}/src/secure_code_audit/config.py +0 -0
- {secure_code_agent-0.13.0 → secure_code_agent-0.13.2}/src/secure_code_audit/data/semgrep-offline.yaml +0 -0
- {secure_code_agent-0.13.0 → secure_code_agent-0.13.2}/src/secure_code_audit/data/standards.yaml +0 -0
- {secure_code_agent-0.13.0 → secure_code_agent-0.13.2}/src/secure_code_audit/demo.py +0 -0
- {secure_code_agent-0.13.0 → secure_code_agent-0.13.2}/src/secure_code_audit/findings.py +0 -0
- {secure_code_agent-0.13.0 → secure_code_agent-0.13.2}/src/secure_code_audit/git_tools.py +0 -0
- {secure_code_agent-0.13.0 → secure_code_agent-0.13.2}/src/secure_code_audit/history.py +0 -0
- {secure_code_agent-0.13.0 → secure_code_agent-0.13.2}/src/secure_code_audit/instructions.py +0 -0
- {secure_code_agent-0.13.0 → secure_code_agent-0.13.2}/src/secure_code_audit/mcp_server.py +0 -0
- {secure_code_agent-0.13.0 → secure_code_agent-0.13.2}/src/secure_code_audit/pillar.py +0 -0
- {secure_code_agent-0.13.0 → secure_code_agent-0.13.2}/src/secure_code_audit/practice.py +0 -0
- {secure_code_agent-0.13.0 → secure_code_agent-0.13.2}/src/secure_code_audit/remediation.py +0 -0
- {secure_code_agent-0.13.0 → secure_code_agent-0.13.2}/src/secure_code_audit/renderers.py +0 -0
- {secure_code_agent-0.13.0 → secure_code_agent-0.13.2}/src/secure_code_audit/ruleset.py +0 -0
- {secure_code_agent-0.13.0 → secure_code_agent-0.13.2}/src/secure_code_audit/scanner_status.py +0 -0
- {secure_code_agent-0.13.0 → secure_code_agent-0.13.2}/src/secure_code_audit/scanners/__init__.py +0 -0
- {secure_code_agent-0.13.0 → secure_code_agent-0.13.2}/src/secure_code_audit/scanners/_exclusions.py +0 -0
- {secure_code_agent-0.13.0 → secure_code_agent-0.13.2}/src/secure_code_audit/scanners/_execution.py +0 -0
- {secure_code_agent-0.13.0 → secure_code_agent-0.13.2}/src/secure_code_audit/scanners/_finding_builder.py +0 -0
- {secure_code_agent-0.13.0 → secure_code_agent-0.13.2}/src/secure_code_audit/scanners/_resolution.py +0 -0
- {secure_code_agent-0.13.0 → secure_code_agent-0.13.2}/src/secure_code_audit/scanners/bandit_scanner.py +0 -0
- {secure_code_agent-0.13.0 → secure_code_agent-0.13.2}/src/secure_code_audit/scanners/base.py +0 -0
- {secure_code_agent-0.13.0 → secure_code_agent-0.13.2}/src/secure_code_audit/scanners/builtin_rules.py +0 -0
- {secure_code_agent-0.13.0 → secure_code_agent-0.13.2}/src/secure_code_audit/scanners/checkov_scanner.py +0 -0
- {secure_code_agent-0.13.0 → secure_code_agent-0.13.2}/src/secure_code_audit/scanners/floor.py +0 -0
- {secure_code_agent-0.13.0 → secure_code_agent-0.13.2}/src/secure_code_audit/scanners/gitleaks_scanner.py +0 -0
- {secure_code_agent-0.13.0 → secure_code_agent-0.13.2}/src/secure_code_audit/scanners/gosec_scanner.py +0 -0
- {secure_code_agent-0.13.0 → secure_code_agent-0.13.2}/src/secure_code_audit/scanners/hadolint_scanner.py +0 -0
- {secure_code_agent-0.13.0 → secure_code_agent-0.13.2}/src/secure_code_audit/scanners/njsscan_scanner.py +0 -0
- {secure_code_agent-0.13.0 → secure_code_agent-0.13.2}/src/secure_code_audit/scanners/npm_audit_scanner.py +0 -0
- {secure_code_agent-0.13.0 → secure_code_agent-0.13.2}/src/secure_code_audit/scanners/osv_scanner.py +0 -0
- {secure_code_agent-0.13.0 → secure_code_agent-0.13.2}/src/secure_code_audit/scanners/pip_audit_scanner.py +0 -0
- {secure_code_agent-0.13.0 → secure_code_agent-0.13.2}/src/secure_code_audit/scanners/rubocop_scanner.py +0 -0
- {secure_code_agent-0.13.0 → secure_code_agent-0.13.2}/src/secure_code_audit/scanners/scorecard_scanner.py +0 -0
- {secure_code_agent-0.13.0 → secure_code_agent-0.13.2}/src/secure_code_audit/scanners/semgrep_scanner.py +0 -0
- {secure_code_agent-0.13.0 → secure_code_agent-0.13.2}/src/secure_code_audit/scanners/trivy_scanner.py +0 -0
- {secure_code_agent-0.13.0 → secure_code_agent-0.13.2}/src/secure_code_audit/scanners/trufflehog_scanner.py +0 -0
- {secure_code_agent-0.13.0 → secure_code_agent-0.13.2}/src/secure_code_audit/scoring.py +0 -0
- {secure_code_agent-0.13.0 → secure_code_agent-0.13.2}/src/secure_code_audit/standards.py +0 -0
- {secure_code_agent-0.13.0 → secure_code_agent-0.13.2}/src/secure_code_audit/suppressions.py +0 -0
- {secure_code_agent-0.13.0 → secure_code_agent-0.13.2}/src/secure_code_audit/triage.py +0 -0
- {secure_code_agent-0.13.0 → secure_code_agent-0.13.2}/src/secure_code_audit/verify.py +0 -0
{secure_code_agent-0.13.0/src/secure_code_agent.egg-info → secure_code_agent-0.13.2}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: secure-code-agent
|
|
3
|
-
Version: 0.13.
|
|
3
|
+
Version: 0.13.2
|
|
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
|
|
@@ -49,6 +49,18 @@ Dynamic: license-file
|
|
|
49
49
|
|
|
50
50
|
# secure-code-agent
|
|
51
51
|
|
|
52
|
+
**English** | [Español](README.es.md) | [Deutsch](README.de.md) | [Français](README.fr.md) | [हिन्दी](README.hi.md) | [简体中文](README.zh-CN.md)
|
|
53
|
+
|
|
54
|
+
[](https://pypi.org/project/secure-code-agent/)
|
|
55
|
+
[](https://pypi.org/project/secure-code-agent/)
|
|
56
|
+
[](LICENSE)
|
|
57
|
+
[](https://github.com/marshallguillory86/secure-code-agent/actions/workflows/ci.yml)
|
|
58
|
+
[](https://pypistats.org/packages/secure-code-agent)
|
|
59
|
+
|
|
60
|
+
**[Example report](https://secure-code-agent.techportfolio.monster/example-report.html)** · **[Documentation](https://secure-code-agent.techportfolio.monster/html/)**
|
|
61
|
+
|
|
62
|
+

|
|
63
|
+
|
|
52
64
|
> **Deterministic security gate + bounded AI remediation prompts for repos with AI coding agents in the loop.**
|
|
53
65
|
> Anchored to NIST SSDF · OWASP ASVS · OWASP Top 10 · MITRE CWE Top 25 · OpenSSF Scorecard · SARIF 2.1.0.
|
|
54
66
|
|
|
@@ -554,7 +566,7 @@ For agents that support invokable skills, this repo ships a portable skill under
|
|
|
554
566
|
## GitHub Action
|
|
555
567
|
|
|
556
568
|
```yaml
|
|
557
|
-
- uses: marshallguillory86/secure-code-agent@v0.13.
|
|
569
|
+
- uses: marshallguillory86/secure-code-agent@v0.13.2
|
|
558
570
|
with:
|
|
559
571
|
config: secure-code-agent.json
|
|
560
572
|
fail-on-gate: true
|
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# secure-code-agent
|
|
2
2
|
|
|
3
|
+
**English** | [Español](README.es.md) | [Deutsch](README.de.md) | [Français](README.fr.md) | [हिन्दी](README.hi.md) | [简体中文](README.zh-CN.md)
|
|
4
|
+
|
|
5
|
+
[](https://pypi.org/project/secure-code-agent/)
|
|
6
|
+
[](https://pypi.org/project/secure-code-agent/)
|
|
7
|
+
[](LICENSE)
|
|
8
|
+
[](https://github.com/marshallguillory86/secure-code-agent/actions/workflows/ci.yml)
|
|
9
|
+
[](https://pypistats.org/packages/secure-code-agent)
|
|
10
|
+
|
|
11
|
+
**[Example report](https://secure-code-agent.techportfolio.monster/example-report.html)** · **[Documentation](https://secure-code-agent.techportfolio.monster/html/)**
|
|
12
|
+
|
|
13
|
+

|
|
14
|
+
|
|
3
15
|
> **Deterministic security gate + bounded AI remediation prompts for repos with AI coding agents in the loop.**
|
|
4
16
|
> Anchored to NIST SSDF · OWASP ASVS · OWASP Top 10 · MITRE CWE Top 25 · OpenSSF Scorecard · SARIF 2.1.0.
|
|
5
17
|
|
|
@@ -505,7 +517,7 @@ For agents that support invokable skills, this repo ships a portable skill under
|
|
|
505
517
|
## GitHub Action
|
|
506
518
|
|
|
507
519
|
```yaml
|
|
508
|
-
- uses: marshallguillory86/secure-code-agent@v0.13.
|
|
520
|
+
- uses: marshallguillory86/secure-code-agent@v0.13.2
|
|
509
521
|
with:
|
|
510
522
|
config: secure-code-agent.json
|
|
511
523
|
fail-on-gate: true
|
{secure_code_agent-0.13.0 → secure_code_agent-0.13.2/src/secure_code_agent.egg-info}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: secure-code-agent
|
|
3
|
-
Version: 0.13.
|
|
3
|
+
Version: 0.13.2
|
|
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
|
|
@@ -49,6 +49,18 @@ Dynamic: license-file
|
|
|
49
49
|
|
|
50
50
|
# secure-code-agent
|
|
51
51
|
|
|
52
|
+
**English** | [Español](README.es.md) | [Deutsch](README.de.md) | [Français](README.fr.md) | [हिन्दी](README.hi.md) | [简体中文](README.zh-CN.md)
|
|
53
|
+
|
|
54
|
+
[](https://pypi.org/project/secure-code-agent/)
|
|
55
|
+
[](https://pypi.org/project/secure-code-agent/)
|
|
56
|
+
[](LICENSE)
|
|
57
|
+
[](https://github.com/marshallguillory86/secure-code-agent/actions/workflows/ci.yml)
|
|
58
|
+
[](https://pypistats.org/packages/secure-code-agent)
|
|
59
|
+
|
|
60
|
+
**[Example report](https://secure-code-agent.techportfolio.monster/example-report.html)** · **[Documentation](https://secure-code-agent.techportfolio.monster/html/)**
|
|
61
|
+
|
|
62
|
+

|
|
63
|
+
|
|
52
64
|
> **Deterministic security gate + bounded AI remediation prompts for repos with AI coding agents in the loop.**
|
|
53
65
|
> Anchored to NIST SSDF · OWASP ASVS · OWASP Top 10 · MITRE CWE Top 25 · OpenSSF Scorecard · SARIF 2.1.0.
|
|
54
66
|
|
|
@@ -554,7 +566,7 @@ For agents that support invokable skills, this repo ships a portable skill under
|
|
|
554
566
|
## GitHub Action
|
|
555
567
|
|
|
556
568
|
```yaml
|
|
557
|
-
- uses: marshallguillory86/secure-code-agent@v0.13.
|
|
569
|
+
- uses: marshallguillory86/secure-code-agent@v0.13.2
|
|
558
570
|
with:
|
|
559
571
|
config: secure-code-agent.json
|
|
560
572
|
fail-on-gate: true
|
|
@@ -13,8 +13,8 @@ from pathlib import Path
|
|
|
13
13
|
from secure_code_audit import __version__
|
|
14
14
|
from secure_code_audit.findings import Category, Confidence, Finding, Severity
|
|
15
15
|
from secure_code_audit.scanner_status import (
|
|
16
|
+
COVERING_OUTCOMES,
|
|
16
17
|
CoverageReport,
|
|
17
|
-
CoverageStatus,
|
|
18
18
|
ScannerExecution,
|
|
19
19
|
ScannerOutcome,
|
|
20
20
|
)
|
|
@@ -92,8 +92,20 @@ def emit(
|
|
|
92
92
|
|
|
93
93
|
|
|
94
94
|
def _invocation(coverage: CoverageReport) -> dict:
|
|
95
|
+
"""The run, and what it covered, on two separate axes.
|
|
96
|
+
|
|
97
|
+
`executionSuccessful` says whether this tool ran to completion, and a
|
|
98
|
+
document is only written when it did. It was set from coverage instead,
|
|
99
|
+
so `maintainability-agent` — every scanner completed, PARTIAL only because
|
|
100
|
+
nothing in the floor reads shell — uploaded "unsuccessful tool execution,
|
|
101
|
+
exit code 0" on every run, and GitHub code scanning put a configuration
|
|
102
|
+
error banner on its Security overview. Coverage stays in
|
|
103
|
+
`properties.coverageStatus`, and each gap is a notification naming what
|
|
104
|
+
was not read: `error` for a required scanner that broke the gate,
|
|
105
|
+
`warning` for a limit of the floor.
|
|
106
|
+
"""
|
|
95
107
|
invocation = {
|
|
96
|
-
"executionSuccessful":
|
|
108
|
+
"executionSuccessful": True,
|
|
97
109
|
"properties": {
|
|
98
110
|
"coverageStatus": coverage.status.value,
|
|
99
111
|
"requiredScanners": list(coverage.required),
|
|
@@ -108,18 +120,30 @@ def _invocation(coverage: CoverageReport) -> dict:
|
|
|
108
120
|
],
|
|
109
121
|
},
|
|
110
122
|
}
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
123
|
+
notifications = [_coverage_notification("error", failure) for failure in coverage.failures]
|
|
124
|
+
notifications += [
|
|
125
|
+
_coverage_notification("warning", f"language not covered: {entry}")
|
|
126
|
+
for entry in coverage.unread_languages
|
|
127
|
+
]
|
|
128
|
+
notifications += [
|
|
129
|
+
_coverage_notification(
|
|
130
|
+
"warning",
|
|
131
|
+
f"scanner {execution.name!r} did not complete: {execution.outcome.value}"
|
|
132
|
+
+ (f" — {execution.reason}" if execution.reason else ""),
|
|
133
|
+
)
|
|
134
|
+
for execution in coverage.executions
|
|
135
|
+
if execution.name not in coverage.required
|
|
136
|
+
and execution.outcome not in (*COVERING_OUTCOMES, ScannerOutcome.NOT_APPLICABLE)
|
|
137
|
+
]
|
|
138
|
+
if notifications:
|
|
139
|
+
invocation["toolExecutionNotifications"] = notifications
|
|
120
140
|
return invocation
|
|
121
141
|
|
|
122
142
|
|
|
143
|
+
def _coverage_notification(level: str, text: str) -> dict:
|
|
144
|
+
return {"level": level, "message": {"text": text}, "descriptor": {"id": "scanner-coverage"}}
|
|
145
|
+
|
|
146
|
+
|
|
123
147
|
def _rule(f: Finding) -> dict:
|
|
124
148
|
rule: dict = {
|
|
125
149
|
"id": f.rule_id,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{secure_code_agent-0.13.0 → secure_code_agent-0.13.2}/src/secure_code_agent.egg-info/SOURCES.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{secure_code_agent-0.13.0 → secure_code_agent-0.13.2}/src/secure_code_agent.egg-info/requires.txt
RENAMED
|
File without changes
|
{secure_code_agent-0.13.0 → secure_code_agent-0.13.2}/src/secure_code_agent.egg-info/top_level.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{secure_code_agent-0.13.0 → secure_code_agent-0.13.2}/src/secure_code_audit/data/standards.yaml
RENAMED
|
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
|
{secure_code_agent-0.13.0 → secure_code_agent-0.13.2}/src/secure_code_audit/scanner_status.py
RENAMED
|
File without changes
|
{secure_code_agent-0.13.0 → secure_code_agent-0.13.2}/src/secure_code_audit/scanners/__init__.py
RENAMED
|
File without changes
|
{secure_code_agent-0.13.0 → secure_code_agent-0.13.2}/src/secure_code_audit/scanners/_exclusions.py
RENAMED
|
File without changes
|
{secure_code_agent-0.13.0 → secure_code_agent-0.13.2}/src/secure_code_audit/scanners/_execution.py
RENAMED
|
File without changes
|
|
File without changes
|
{secure_code_agent-0.13.0 → secure_code_agent-0.13.2}/src/secure_code_audit/scanners/_resolution.py
RENAMED
|
File without changes
|
|
File without changes
|
{secure_code_agent-0.13.0 → secure_code_agent-0.13.2}/src/secure_code_audit/scanners/base.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{secure_code_agent-0.13.0 → secure_code_agent-0.13.2}/src/secure_code_audit/scanners/floor.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{secure_code_agent-0.13.0 → secure_code_agent-0.13.2}/src/secure_code_audit/scanners/osv_scanner.py
RENAMED
|
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
|