feat: LLM-анализ — индикатор прогресса, кнопка рескана, статистика на дашборде
- Добавлен статус {"status": "analyzing"} в finding.report на время LLM-анализа
- Кнопка рескана (Retry) под LLM-отчётом в ручном режиме
- LLM-статистика на дашборде: analysed / pending
- Защита от двойного анализа через per-finding asyncio.Lock
- _llm_spinner.html — фрагмент спиннера для состояния analysing
- Удалён мёртвый код: constants, i18n, CSS, queries
- Фиксы: _env_int, индексы БД, UnicodeDecodeError, time.mktime и др.
- Шаблоны: shared includes (_status_badge, _pagination)
- AGENTS.md: workflow (lint, test, commit, rebuild)
This commit is contained in:
@@ -13,9 +13,8 @@ used across the codebase live here to avoid duplication and drift.
|
||||
# harvester uses it to decide whether to download and scan.
|
||||
PACKAGE_EXTENSIONS = (".tar.gz", ".tgz", ".whl", ".zip")
|
||||
|
||||
# Prefix used in PyPI-style asset paths ("/packages/name/ver/file")
|
||||
PYPI_PATH_PREFIX = "packages"
|
||||
NPM_PATH_PREFIX = "packages"
|
||||
# Prefix used in PyPI/NPM asset paths ("/packages/name/ver/file")
|
||||
PKG_PATH_PREFIX = "packages"
|
||||
|
||||
# Metadata file patterns that should never be scanned
|
||||
METADATA_PATTERNS = (
|
||||
@@ -39,7 +38,6 @@ DEFAULT_ECOSYSTEM = "pypi"
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
SEVERITY_WARNING = "WARNING"
|
||||
SEVERITY_ERROR = "ERROR"
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Sorting
|
||||
@@ -81,20 +79,9 @@ WEB_PER_PAGE = 50
|
||||
|
||||
DASHBOARD_LATEST_FLAGGED_LIMIT = 8
|
||||
DASHBOARD_LATEST_SCANS_LIMIT = 10
|
||||
DASHBOARD_MOST_FLAGGED_LIMIT = 8
|
||||
TOP_RULES_LIMIT = 10
|
||||
|
||||
RECENT_FLAGGED_DAYS = 7
|
||||
HEATMAP_DAYS = 14
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Database fields
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
MAX_PACKAGE_NAME_LENGTH = 255
|
||||
MAX_PACKAGE_VERSION_LENGTH = 255
|
||||
MAX_ECOSYSTEM_LENGTH = 50
|
||||
SHA256_HEX_LENGTH = 64
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Scanner
|
||||
@@ -114,8 +101,7 @@ SCAN_ERROR_DOWNLOAD_FAILED = "Download failed"
|
||||
ERROR_MESSAGE_MAX_LENGTH = 1000
|
||||
SHA256_CHUNK_SIZE = 8192
|
||||
|
||||
# Finding data dict keys
|
||||
FINDING_KEYS = ("rule", "severity", "message", "location", "code")
|
||||
# Finding severity default
|
||||
DEFAULT_FINDING_SEVERITY = SEVERITY_WARNING
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
@@ -141,8 +127,6 @@ WEBHOOK_STATUS_IGNORED = "ignored"
|
||||
# API
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
API_PREFIX_V1 = "/api/v1"
|
||||
HEALTH_PATH = "/health"
|
||||
STATIC_MOUNT_PATH = "/static"
|
||||
|
||||
CSV_MEDIA_TYPE = "text/csv"
|
||||
|
||||
Reference in New Issue
Block a user