Analysis Report for: {{ filename | default('N/A', true) }}
{% with messages = get_flashed_messages(with_categories=true) %}
{% if messages %}
{% for category, message in messages %}
- {{ message }}
{% endfor %}
{% endif %}
{% endwith %}
{% if error_message %}
{{ error_message }}
{% endif %}
{% if report_data %}
{# Determine if this is an agent report or a simple scan report #}
{% set is_agent_report = report_data.agent_scan_metadata is defined %}
{% set initial_scan_data = report_data.depguardian_initial_scan if is_agent_report else report_data %}
{% set agent_metadata = report_data.agent_scan_metadata if is_agent_report else none %}
{% set gemini_analysis_data = report_data.gemini_analysis if is_agent_report else none %}
{% if agent_metadata %}
AI Agent Scan Overview
Project Path Analyzed: {{ agent_metadata.project_path }}
Analysis Timestamp (UTC): {{ agent_metadata.analysis_timestamp_utc }}
DepGuardian Version: {{ agent_metadata.depguardian_version }}
LLM Provider: {{ agent_metadata.llm_provider }}
LLM Model Used: {{ agent_metadata.llm_model_used }}
{% endif %}
DepGuardian Core Scan Results
{% if not is_agent_report and initial_scan_data.scan_metadata %} {# Show core metadata only for non-agent reports #}
Core Scan Metadata
Project Path: {{ initial_scan_data.scan_metadata.project_path }}
Scan Timestamp (UTC): {{ initial_scan_data.scan_metadata.scan_timestamp_utc }}
Core Scanner Version: {{ initial_scan_data.scan_metadata.depguardian_version }}
Core Scan Status:
{{ initial_scan_data.scan_metadata.status | capitalize }}
{% if initial_scan_data.project_info %}
Package.json: {{ initial_scan_data.project_info.package_json_path | default('N/A', true) }}
Package-lock.json: {{ initial_scan_data.project_info.package_lock_path | default('N/A', true) }}
(v{{ initial_scan_data.project_info.lockfile_version | default('N/A', true) }})
{% endif %}
{% endif %}
Core Scan Summary
Outdated Direct Dependencies
{{ initial_scan_data.scan_summary.outdated_direct_dependencies_count }}
Vulnerable Installed Packages
{{ initial_scan_data.scan_summary.vulnerable_installed_packages_count }}
Total Vulnerabilities Found
{{ initial_scan_data.scan_summary.total_vulnerabilities_found }}
Total Installed Packages
{{ initial_scan_data.installed_packages.total_count }}
{% if initial_scan_data.errors_during_scan %}
Errors During Core Scan
{% for error in initial_scan_data.errors_during_scan %}
-
Source:
{{ error.source_operation }}
{% if error.package_name_context and error.package_name_context != 'N/A' %}
Package: {{ error.package_name_context }}
{% endif %}
Message: {{ error.error_message }}
{% endfor %}
{% endif %}
{% if initial_scan_data.update_attempt_details %}
Dependency Update Attempts (PR Creation)
{% for attempt in initial_scan_data.update_attempt_details %}
-
Update for: {{ attempt.package_name }}
(Target: {{ attempt.target_version }})
Status:
{% if attempt.success %} SUCCESS
{% else %} FAILED
{% endif %}
{% if attempt.pr_url %}
Pull Request: {{ attempt.pr_url }}
{% endif %}
{% if not attempt.success and attempt.error_message %}
DepGuardian Error: {{ attempt.error_message }}
{% endif %}
{% if attempt.npm_stderr %}
NPM Error Output (stderr):
{{ attempt.npm_stderr }}
{# Ollama-specific button removed, Gemini analysis is for the whole project now #}
{% elif not attempt.success and attempt.npm_stdout %}
NPM Standard Output (stdout):
{{ attempt.npm_stdout }}
{% endif %}
{% endfor %}
{% endif %}
Direct Dependencies Analysis
{% if initial_scan_data.direct_dependencies %}
Package Name | Required Range | Installed |
Latest (NPM) | Satisfies Range? | Outdated? | Update To |
{% for dep in initial_scan_data.direct_dependencies %}
{{ dep.name }} |
{{ dep.required_range }} |
{{ dep.installed_version | default('N/A', true) }} |
{{ dep.latest_version_npm | default('N/A', true) }} |
{% if dep.satisfies_range is true %} Yes
{% elif dep.satisfies_range is false %} No
{% else %} N/A {% endif %}
|
{% if dep.is_outdated %} Yes
{% elif dep.latest_version_npm %} No
{% else %} N/A {% endif %}
|
{{ dep.update_available_to | default('N/A', true) }} |
{% endfor %}
{% else %}
No direct dependencies found or analyzed in the core scan.
{% endif %}
Vulnerability Report (OSV.dev)
{% if initial_scan_data.vulnerabilities_report and initial_scan_data.vulnerabilities_report.vulnerabilities is not none %}
{% if initial_scan_data.vulnerabilities_report.vulnerabilities %}
{% for vuln in initial_scan_data.vulnerabilities_report.vulnerabilities %}
-
Package:
{{ vuln.package_name }}@{{ vuln.vulnerable_version_installed }}
OSV IDs:
{% for osv_id in vuln.osv_ids %}
{{ osv_id }}{% if not loop.last %}, {% endif %}
{% endfor %}
{% if vuln.summary and vuln.summary != 'N/A' %}
Summary: {{ vuln.summary }}
{% endif %}
{% endfor %}
{% else %}
No known vulnerabilities found by the core scan.
{% endif %}
{% else %}
Core vulnerability check failed or could not be performed.
{% endif %}
{% if gemini_analysis_data %}
Gemini AI Analysis & Recommendations
{% if gemini_analysis_data.error %}
Error from Gemini AI: {{ gemini_analysis_data.error }}
{% elif gemini_analysis_data.analysis %}
{# This will render Gemini's Markdown output.
For proper rendering, a JS Markdown library (e.g., Marked.js)
or a Flask extension (Flask-Markdown) would be needed.
For now, pre-wrap will show it, but unstyled.
#}
{{ gemini_analysis_data.analysis }}
{% if gemini_analysis_data.prompt_sent_debug and initial_scan_data.scan_metadata.depguardian_version %}
Debug: Prompt sent to Gemini (truncated)
{{ gemini_analysis_data.prompt_sent_debug }}
{% endif %}
{% else %}
Gemini AI returned no specific analysis or an unexpected response structure.
{% endif %}
{% endif %}
{% elif not error_message %}
No report data to display. Please upload or analyze a project.
{% endif %}