feat: add ISSLOP AI usage analysis CLI commands, game router, and politics topic

- Add `cmd_isslop_prune`, `cmd_isslop_clear`, `cmd_isslop_analyze` CLI commands for AI usage analysis job management
- Register `/game` router with `index` and `farm` endpoints for Code Farm idle game
- Add `politics` to allowed TOPICS constant replacing `signals`
- Introduce `ISSLOP_DIR`, `ISSLOP_WORKSPACES_DIR`, `ISSLOP_RUNS_DIR`, `ISSLOP_MEDIA_DIR` config paths
- Add `clear_user_stars` and `clear_user_projects_cache` calls on vote and project create/delete
- Update `make prod` to use `nproc` workers via `DEVPLACE_WEB_WORKERS` env var
- Convert `database.py` and `utils.py` to packages for modular structure
- Add `devplace apikey` and `devplace token` CLI subcommands for API key and access token management
This commit is contained in:
2026-07-06 03:57:47 +00:00
parent f1bdefd834
commit 9a8046ab2a
110 changed files with 1466 additions and 374 deletions
+4
View File
@@ -86,6 +86,10 @@ from devplacepy.schemas.jobs import (
SeoMetaOut,
SeoReportOut,
ZipJobOut,
IsslopAnalysisOut,
IsslopListOut,
IsslopReportOut,
IsslopSourceOut,
)
from devplacepy.schemas.backups import (
BackupDashboardOut,
+72
View File
@@ -153,3 +153,75 @@ class DbQueryJobOut(_Out):
error: Optional[str] = None
created_at: Optional[str] = None
completed_at: Optional[str] = None
class IsslopAnalysisOut(_Out):
uid: str = ""
status: str = ""
source_url: str = ""
source_kind: str = ""
grade: Optional[str] = None
slop_score: Optional[float] = None
origin_score: Optional[float] = None
quality_deficit_score: Optional[float] = None
human_percent: Optional[float] = None
ai_percent: Optional[float] = None
category: Optional[str] = None
confidence: Optional[str] = None
files_total: int = 0
files_analyzed: int = 0
detected_builder: Optional[str] = None
dom_slop_score: Optional[float] = None
error: Optional[str] = None
report_url: Optional[str] = None
badge_url: Optional[str] = None
events_url: Optional[str] = None
topic: Optional[str] = None
created_at: Optional[str] = None
finished_at: Optional[str] = None
class IsslopListOut(_Out):
analyses: list = []
class IsslopReportOut(_Out):
uid: str = ""
status: str = ""
source_url: str = ""
source_kind: str = ""
grade: Optional[str] = None
slop_score: Optional[float] = None
origin_score: Optional[float] = None
quality_deficit_score: Optional[float] = None
human_percent: Optional[float] = None
ai_percent: Optional[float] = None
category: Optional[str] = None
confidence: Optional[str] = None
files_total: int = 0
files_analyzed: int = 0
detected_builder: Optional[str] = None
dom_slop_score: Optional[float] = None
error: Optional[str] = None
content_hash: Optional[str] = None
markdown: str = ""
generator_model: str = ""
generated_at: Optional[str] = None
badge: dict = {}
files: list = []
images: list = []
dom_pages: list = []
created_at: Optional[str] = None
finished_at: Optional[str] = None
class IsslopSourceOut(_Out):
uid: str = ""
path: str = ""
language: str = ""
category: str = ""
origin_score: float = 0.0
quality_deficit_score: float = 0.0
source: str = ""
truncated: bool = False
signals: list = []