mirror of
https://github.com/PR0M3TH3AN/bitvid.git
synced 2026-11-06 12:52:26 +00:00
chore(deps): bump esbuild to v0.27.3
- Upgraded esbuild from 0.27.2 to 0.27.3 - Added scripts/agent/analyze_deps.py - Added artifacts/deps-report.md, npm-audit.json, npm-outdated.json - Verified with npm run build, lint, and test:unit Co-authored-by: PR0M3TH3AN <[email protected]>
This commit is contained in:
1 parent
68b583fb9b
commit
21a7b43e80
7 files changed
+10548
-130
No files matched your search
@@ -0,0 +1,119 @@
|
||||
import json
|
||||
import os
|
||||
import sys
|
||||
|
||||
def main():
|
||||
try:
|
||||
with open('artifacts/npm-audit.json', 'r') as f:
|
||||
audit_data = json.load(f)
|
||||
except Exception as e:
|
||||
print(f"Error reading npm-audit.json: {e}")
|
||||
audit_data = {"vulnerabilities": {}, "metadata": {"vulnerabilities": {}}}
|
||||
|
||||
try:
|
||||
with open('artifacts/npm-outdated.json', 'r') as f:
|
||||
outdated_data = json.load(f)
|
||||
except Exception as e:
|
||||
print(f"Error reading npm-outdated.json: {e}")
|
||||
outdated_data = {}
|
||||
|
||||
report_path = 'artifacts/deps-report.md'
|
||||
|
||||
with open(report_path, 'w') as f:
|
||||
f.write("# Dependency Audit Report\n\n")
|
||||
|
||||
# 1. Vulnerabilities
|
||||
vulnerabilities = audit_data.get('vulnerabilities', {})
|
||||
metadata = audit_data.get('metadata', {}).get('vulnerabilities', {})
|
||||
|
||||
f.write("## 1. Vulnerability Summary\n")
|
||||
f.write(f"- Total Vulnerabilities: {metadata.get('total', 0)}\n")
|
||||
f.write(f"- Critical: {metadata.get('critical', 0)}\n")
|
||||
f.write(f"- High: {metadata.get('high', 0)}\n")
|
||||
f.write(f"- Moderate: {metadata.get('moderate', 0)}\n")
|
||||
f.write(f"- Low: {metadata.get('low', 0)}\n\n")
|
||||
|
||||
if vulnerabilities:
|
||||
f.write("### Critical & High Vulnerabilities\n")
|
||||
has_major_vulns = False
|
||||
for name, details in vulnerabilities.items():
|
||||
severity = details.get('severity', 'low')
|
||||
if severity in ['critical', 'high']:
|
||||
has_major_vulns = True
|
||||
f.write(f"- **{name}**: {severity}\n")
|
||||
f.write(f" - Fix available: {details.get('fixAvailable', 'unknown')}\n")
|
||||
via = details.get('via', [])
|
||||
if isinstance(via, list):
|
||||
f.write(f" - Via: {', '.join([str(v) if isinstance(v, str) else v.get('name', 'unknown') for v in via])}\n")
|
||||
|
||||
if not has_major_vulns:
|
||||
f.write("No critical or high vulnerabilities found.\n")
|
||||
else:
|
||||
f.write("No vulnerabilities found.\n")
|
||||
|
||||
f.write("\n## 2. Outdated Packages\n")
|
||||
|
||||
# Categorize outdated
|
||||
safe_upgrades = []
|
||||
major_upgrades = []
|
||||
risky_upgrades = [] # nostr-tools, etc.
|
||||
|
||||
RISKY_PACKAGES = ['nostr-tools', 'ws', 'playwright', '@playwright/test']
|
||||
|
||||
for pkg, info in outdated_data.items():
|
||||
current = info.get('current', '0.0.0')
|
||||
wanted = info.get('wanted', '0.0.0')
|
||||
latest = info.get('latest', '0.0.0')
|
||||
type_ = info.get('type', 'dependencies')
|
||||
|
||||
entry = {
|
||||
'name': pkg,
|
||||
'current': current,
|
||||
'wanted': wanted,
|
||||
'latest': latest,
|
||||
'type': type_
|
||||
}
|
||||
|
||||
if pkg in RISKY_PACKAGES:
|
||||
risky_upgrades.append(entry)
|
||||
continue
|
||||
|
||||
# Simple heuristic for "safe": wanted > current (usually minor/patch)
|
||||
if wanted != current:
|
||||
safe_upgrades.append(entry)
|
||||
elif latest != current:
|
||||
major_upgrades.append(entry)
|
||||
|
||||
f.write("### Safe Upgrades (Patch/Minor)\n")
|
||||
if safe_upgrades:
|
||||
for item in safe_upgrades:
|
||||
f.write(f"- **{item['name']}** ({item['type']}): {item['current']} -> {item['wanted']} (Latest: {item['latest']})\n")
|
||||
else:
|
||||
f.write("No safe upgrades available.\n")
|
||||
|
||||
f.write("\n### Major Upgrades (Risky)\n")
|
||||
if major_upgrades:
|
||||
for item in major_upgrades:
|
||||
f.write(f"- **{item['name']}** ({item['type']}): {item['current']} -> {item['latest']}\n")
|
||||
else:
|
||||
f.write("No major upgrades available.\n")
|
||||
|
||||
f.write("\n### Security/Protocol Libraries (Manual Review Required)\n")
|
||||
if risky_upgrades:
|
||||
for item in risky_upgrades:
|
||||
f.write(f"- **{item['name']}** ({item['type']}): {item['current']} -> {item['wanted']} (Latest: {item['latest']})\n")
|
||||
else:
|
||||
f.write("No protocol libraries require updates.\n")
|
||||
|
||||
# Recommendation
|
||||
f.write("\n## 3. Recommendations\n")
|
||||
if safe_upgrades:
|
||||
best_candidate = safe_upgrades[0]
|
||||
f.write(f"- **Action Item**: Attempt safe upgrade of `{best_candidate['name']}` from `{best_candidate['current']}` to `{best_candidate['wanted']}`.\n")
|
||||
else:
|
||||
f.write("- No immediate safe upgrades.\n")
|
||||
|
||||
print(f"Report generated at {report_path}")
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in new issue
Block a user