Scan timing: clone 7.09s · analysis 18.07s · 14.7 MB · GitHub API rate-limit (preflight)
https://github.com/sansan0/TrendRadar
· scanned 2026-06-05 09:52 UTC (5 days, 17 hours ago)
· 10 languages
388 raw signals (206 security + 182 graph) 34th percentile · Python · medium (20-100K LoC) System graph score 60 (lower by 17)
Last scanned 5 days, 17 hours ago · v2 · 169 actionable findings from 2 signal sources. 127 repeated signals grouped for readability. Security checks, system graph analysis, and verified AI-agent feedback are merged into one review queue.
| Component | Sub-score | Weight | Contribution |
|---|---|---|---|
structure_score |
75.0 | 0.15 | 11.25 |
security_score |
35.2 | 0.25 | 8.80 |
testing_score |
0.0 | 0.20 | 0.00 |
documentation_score |
88.7 | 0.15 | 13.30 |
practices_score |
59.0 | 0.15 | 8.85 |
code_quality |
13.6 | 0.10 | 1.36 |
| Overall | 1.00 | 43.6 |
All 1064 nodes from the latest scan, grouped by kind. Each node is a unit the engine identified (file, function, endpoint, table…). Most users won't need this view — it's primarily for debugging the engine's graph extraction or for AI agents that want to enumerate the project structure.
| Label | Layer | Status | Path |
|---|---|---|---|
get_timestamp |
software | dead | docker/manage.py:19 |
run_command |
software | dead | docker/manage.py:24 |
manual_run |
software | dead | docker/manage.py:35 |
parse_cron_schedule |
software | healthy | docker/manage.py:50 |
show_status |
software | dead | docker/manage.py:131 |
show_config |
software | dead | docker/manage.py:277 |
show_files |
software | dead | docker/manage.py:336 |
show_logs |
software | dead | docker/manage.py:404 |
restart_supercronic |
software | dead | docker/manage.py:430 |
_read_proc_cmdline |
software | healthy | docker/manage.py:454 |
_is_expected_webserver_process |
software | healthy | docker/manage.py:466 |
_terminate_webserver_process |
software | healthy | docker/manage.py:474 |
_is_webserver_running |
software | healthy | docker/manage.py:502 |
_cleanup_stale_pid |
software | healthy | docker/manage.py:528 |
start_webserver |
software | dead | docker/manage.py:543 |
stop_webserver |
software | dead | docker/manage.py:606 |
webserver_status |
software | dead | docker/manage.py:629 |
show_help |
software | healthy | docker/manage.py:657 |
main |
software | healthy | docker/manage.py:714 |
applyHighlight |
software | healthy | docs/assets/script.js:applyHighlight |
updateBackdrop |
software | healthy | docs/assets/script.js:updateBackdrop |
syncScroll |
software | healthy | docs/assets/script.js:syncScroll |
openQrModal |
software | healthy | docs/assets/script.js:openQrModal |
closeQrModal |
software | healthy | docs/assets/script.js:closeQrModal |
fetchWithTimeout |
software | healthy | docs/assets/script.js:fetchWithTimeout |
fetchWithFallback |
software | healthy | docs/assets/script.js:fetchWithFallback |
idx |
software | healthy | docs/assets/script.js:idx |
debounceSaveConfig |
software | healthy | docs/assets/script.js:debounceSaveConfig |
debounceSaveFrequency |
software | healthy | docs/assets/script.js:debounceSaveFrequency |
debounceSaveTimeline |
software | healthy | docs/assets/script.js:debounceSaveTimeline |
initDragAndDrop |
software | healthy | docs/assets/script.js:initDragAndDrop |
handleFileDrop |
software | healthy | docs/assets/script.js:handleFileDrop |
_saveToStorage |
software | healthy | docs/assets/script.js:_saveToStorage |
saveConfigToLocalStorage |
software | healthy | docs/assets/script.js:saveConfigToLocalStorage |
saveFrequencyToLocalStorage |
software | healthy | docs/assets/script.js:saveFrequencyToLocalStorage |
saveTimelineToLocalStorage |
software | healthy | docs/assets/script.js:saveTimelineToLocalStorage |
saveAllToLocalStorage |
software | healthy | docs/assets/script.js:saveAllToLocalStorage |
saveToLocalStorage |
software | healthy | docs/assets/script.js:saveToLocalStorage |
formatSaveTime |
software | healthy | docs/assets/script.js:formatSaveTime |
updateSaveTimeDisplay |
software | healthy | docs/assets/script.js:updateSaveTimeDisplay |
showToast |
software | healthy | docs/assets/script.js:showToast |
renderModules |
software | healthy | docs/assets/script.js:renderModules |
renderModuleNav |
software | healthy | docs/assets/script.js:renderModuleNav |
renderControls |
software | healthy | docs/assets/script.js:renderControls |
syncYamlToUI |
software | healthy | docs/assets/script.js:syncYamlToUI |
updateYamlFromUI |
software | healthy | docs/assets/script.js:updateYamlFromUI |
isOriginalQuoted |
software | healthy | docs/assets/script.js:isOriginalQuoted |
createToggleControl |
software | healthy | docs/assets/script.js:createToggleControl |
createInputControl |
software | healthy | docs/assets/script.js:createInputControl |
createNumberControl |
software | healthy | docs/assets/script.js:createNumberControl |
Showing first 50 of this kind. Full payload available via the JSON button at the top of the page.
| Label | Layer | Status | Path |
|---|---|---|---|
README-MCP-FAQ-EN.md |
software | healthy | README-MCP-FAQ-EN.md |
README-Cherry-Studio.md |
software | healthy | README-Cherry-Studio.md |
README.md |
software | healthy | README.md |
index.html |
software | healthy | index.html |
start-http.sh |
software | healthy | start-http.sh |
README-MCP-FAQ.md |
software | healthy | README-MCP-FAQ.md |
setup-mac.sh |
software | healthy | setup-mac.sh |
pyproject.toml |
software | healthy | pyproject.toml |
README-EN.md |
software | healthy | README-EN.md |
requirements.txt |
software | healthy | requirements.txt |
docker-compose-build.yml |
software | healthy | docker/docker-compose-build.yml |
Dockerfile |
software | healthy | docker/Dockerfile |
manage.py |
software | healthy | docker/manage.py |
.env |
software | healthy | docker/.env |
docker-compose.yml |
software | healthy | docker/docker-compose.yml |
entrypoint.sh |
software | healthy | docker/entrypoint.sh |
config.yaml |
software | healthy | config/config.yaml |
timeline.yaml |
software | healthy | config/timeline.yaml |
index.html |
software | healthy | docs/index.html |
script.js |
software | healthy | docs/assets/script.js |
style.css |
software | healthy | docs/assets/style.css |
__init__.py |
software | healthy | trendradar/__init__.py |
context.py |
software | healthy | trendradar/context.py |
__main__.py |
software | healthy | trendradar/__main__.py |
__init__.py |
software | healthy | trendradar/crawler/__init__.py |
fetcher.py |
software | healthy | trendradar/crawler/fetcher.py |
parser.py |
software | healthy | trendradar/crawler/rss/parser.py |
__init__.py |
software | healthy | trendradar/crawler/rss/__init__.py |
fetcher.py |
software | healthy | trendradar/crawler/rss/fetcher.py |
__init__.py |
software | healthy | trendradar/notification/__init__.py |
batch.py |
software | healthy | trendradar/notification/batch.py |
dispatcher.py |
software | healthy | trendradar/notification/dispatcher.py |
senders.py |
software | healthy | trendradar/notification/senders.py |
renderer.py |
software | healthy | trendradar/notification/renderer.py |
formatters.py |
software | healthy | trendradar/notification/formatters.py |
splitter.py |
software | healthy | trendradar/notification/splitter.py |
filter.py |
software | healthy | trendradar/ai/filter.py |
client.py |
software | healthy | trendradar/ai/client.py |
__init__.py |
software | healthy | trendradar/ai/__init__.py |
prompt_loader.py |
software | healthy | trendradar/ai/prompt_loader.py |
analyzer.py |
software | healthy | trendradar/ai/analyzer.py |
formatter.py |
software | healthy | trendradar/ai/formatter.py |
translator.py |
software | healthy | trendradar/ai/translator.py |
__init__.py |
software | healthy | trendradar/utils/__init__.py |
time.py |
software | healthy | trendradar/utils/time.py |
url.py |
software | healthy | trendradar/utils/url.py |
__init__.py |
software | healthy | trendradar/report/__init__.py |
html.py |
software | healthy | trendradar/report/html.py |
rss_html.py |
software | healthy | trendradar/report/rss_html.py |
generator.py |
software | healthy | trendradar/report/generator.py |
Showing first 50 of this kind. Full payload available via the JSON button at the top of the page.
| Label | Layer | Status | Path |
|---|---|---|---|
AppContext |
software | healthy | trendradar/context.py:46 |
NewsAnalyzer |
software | healthy | trendradar/__main__.py:177 |
DataFetcher |
software | healthy | trendradar/crawler/fetcher.py:21 |
ParsedRSSItem |
software | healthy | trendradar/crawler/rss/parser.py:25 |
RSSParser |
software | healthy | trendradar/crawler/rss/parser.py:35 |
RSSFeedConfig |
software | healthy | trendradar/crawler/rss/fetcher.py:21 |
RSSFetcher |
software | healthy | trendradar/crawler/rss/fetcher.py:31 |
NotificationDispatcher |
software | healthy | trendradar/notification/dispatcher.py:42 |
AIFilterResult |
software | healthy | trendradar/ai/filter.py:21 |
AIFilter |
software | healthy | trendradar/ai/filter.py:36 |
AIClient |
software | healthy | trendradar/ai/client.py:15 |
AIAnalysisResult |
software | healthy | trendradar/ai/analyzer.py:18 |
AIAnalyzer |
software | healthy | trendradar/ai/analyzer.py:48 |
TranslationResult |
software | healthy | trendradar/ai/translator.py:17 |
BatchTranslationResult |
software | healthy | trendradar/ai/translator.py:26 |
AITranslator |
software | healthy | trendradar/ai/translator.py:37 |
ResolvedSchedule |
software | healthy | trendradar/core/scheduler.py:18 |
Scheduler |
software | healthy | trendradar/core/scheduler.py:35 |
LocalStorageBackend |
software | healthy | trendradar/storage/local.py:26 |
RemoteStorageBackend |
software | healthy | trendradar/storage/remote.py:41 |
SQLiteStorageMixin |
software | healthy | trendradar/storage/sqlite_mixin.py:18 |
NewsItem |
software | healthy | trendradar/storage/base.py:14 |
RSSItem |
software | healthy | trendradar/storage/base.py:71 |
RSSData |
software | healthy | trendradar/storage/base.py:124 |
NewsData |
software | healthy | trendradar/storage/base.py:178 |
StorageBackend |
software | healthy | trendradar/storage/base.py:299 |
StorageManager |
software | healthy | trendradar/storage/manager.py:19 |
DateParser |
software | healthy | mcp_server/utils/date_parser.py:14 |
MCPError |
software | healthy | mcp_server/utils/errors.py:28 |
DataNotFoundError |
software | healthy | mcp_server/utils/errors.py:48 |
InvalidParameterError |
software | healthy | mcp_server/utils/errors.py:59 |
ConfigurationError |
software | healthy | mcp_server/utils/errors.py:70 |
PlatformNotSupportedError |
software | healthy | mcp_server/utils/errors.py:81 |
CrawlTaskError |
software | healthy | mcp_server/utils/errors.py:94 |
FileParseError |
software | healthy | mcp_server/utils/errors.py:105 |
CacheService |
software | healthy | mcp_server/services/cache_service.py:60 |
ParserService |
software | healthy | mcp_server/services/parser_service.py:20 |
DataService |
software | healthy | mcp_server/services/data_service.py:17 |
StorageSyncTools |
software | healthy | mcp_server/tools/storage_sync.py:19 |
AnalyticsTools |
software | healthy | mcp_server/tools/analytics.py:99 |
DataQueryTools |
software | healthy | mcp_server/tools/data_query.py:23 |
NotificationTools |
software | healthy | mcp_server/tools/notification.py:963 |
ArticleReaderTools |
software | healthy | mcp_server/tools/article_reader.py:24 |
SearchTools |
software | healthy | mcp_server/tools/search_tools.py:18 |
ErrorInfo |
software | healthy | mcp_server/tools/config_mgmt.py:14 |
ConfigResult |
software | healthy | mcp_server/tools/config_mgmt.py:21 |
ConfigManagementTools |
software | healthy | mcp_server/tools/config_mgmt.py:29 |
SystemManagementTools |
software | healthy | mcp_server/tools/system.py:16 |
| Label | Layer | Status | Path |
|---|---|---|---|
S3_REGION |
cicd | healthy | — |
AI_MODEL |
cicd | healthy | — |
TELEGRAM_BOT_TOKEN |
cicd | healthy | — |
TELEGRAM_CHAT_ID |
cicd | healthy | — |
AI_API_BASE |
cicd | healthy | — |
EMAIL_TO |
cicd | healthy | — |
NTFY_TOPIC |
cicd | healthy | — |
SLACK_WEBHOOK_URL |
cicd | healthy | — |
WEWORK_WEBHOOK_URL |
cicd | healthy | — |
EMAIL_SMTP_SERVER |
cicd | healthy | — |
FEISHU_WEBHOOK_URL |
cicd | healthy | — |
GENERIC_WEBHOOK_TEMPLATE |
cicd | healthy | — |
AI_ANALYSIS_ENABLED |
cicd | healthy | — |
DOCKERHUB_TOKEN |
cicd | healthy | — |
EMAIL_SMTP_PORT |
cicd | healthy | — |
EMAIL_PASSWORD |
cicd | healthy | — |
DOCKERHUB_USERNAME |
cicd | healthy | — |
S3_ENDPOINT_URL |
cicd | healthy | — |
GENERIC_WEBHOOK_URL |
cicd | healthy | — |
S3_SECRET_ACCESS_KEY |
cicd | healthy | — |
S3_ACCESS_KEY_ID |
cicd | healthy | — |
NTFY_TOKEN |
cicd | healthy | — |
AI_API_KEY |
cicd | healthy | — |
DINGTALK_WEBHOOK_URL |
cicd | healthy | — |
WEWORK_MSG_TYPE |
cicd | healthy | — |
S3_BUCKET_NAME |
cicd | healthy | — |
GITHUB_TOKEN |
cicd | healthy | — |
EMAIL_FROM |
cicd | healthy | — |
BARK_URL |
cicd | healthy | — |
NTFY_SERVER_URL |
cicd | healthy | — |
| Label | Layer | Status | Path |
|---|---|---|---|
docker |
software | healthy | docker |
config |
software | healthy | config |
docs |
software | healthy | docs |
assets |
software | healthy | docs/assets |
trendradar |
software | healthy | trendradar |
crawler |
software | healthy | trendradar/crawler |
rss |
software | healthy | trendradar/crawler/rss |
notification |
software | healthy | trendradar/notification |
ai |
software | healthy | trendradar/ai |
utils |
software | healthy | trendradar/utils |
report |
software | healthy | trendradar/report |
core |
software | healthy | trendradar/core |
storage |
software | healthy | trendradar/storage |
mcp_server |
software | healthy | mcp_server |
utils |
software | healthy | mcp_server/utils |
services |
software | healthy | mcp_server/services |
tools |
software | healthy | mcp_server/tools |
.github |
software | healthy | .github |
ISSUE_TEMPLATE |
software | healthy | .github/ISSUE_TEMPLATE |
workflows |
software | healthy | .github/workflows |
| Label | Layer | Status | Path |
|---|---|---|---|
port:09 |
network | healthy | config/config.yaml |
port:30 |
network | healthy | config/config.yaml |
port:10 |
network | healthy | config/config.yaml |
port:20 |
network | healthy | config/timeline.yaml |
port:22 |
network | healthy | config/timeline.yaml |
port:11 |
network | healthy | config/timeline.yaml |
port:13 |
network | healthy | config/timeline.yaml |
port:15 |
network | healthy | config/timeline.yaml |
port:17 |
network | healthy | config/timeline.yaml |
port:19 |
network | healthy | config/timeline.yaml |
port:08 |
network | healthy | config/timeline.yaml |
port:23 |
network | healthy | config/timeline.yaml |
port:01 |
network | healthy | config/timeline.yaml |
port:06 |
network | healthy | config/timeline.yaml |
port:21 |
network | healthy | config/timeline.yaml |
port:12 |
network | healthy | config/timeline.yaml |
port:07 |
network | healthy | config/timeline.yaml |
port:14 |
network | healthy | config/timeline.yaml |
port:587 |
network | healthy | mcp_server/tools/notification.py |
| Label | Layer | Status | Path |
|---|---|---|---|
platforms |
data | healthy | trendradar/storage/schema.sql |
news_items |
data | healthy | trendradar/storage/schema.sql |
title_changes |
data | healthy | trendradar/storage/schema.sql |
rank_history |
data | healthy | trendradar/storage/schema.sql |
crawl_records |
data | healthy | trendradar/storage/schema.sql |
crawl_source_status |
data | healthy | trendradar/storage/schema.sql |
period_executions |
data | healthy | trendradar/storage/schema.sql |
ai_filter_tags |
data | healthy | trendradar/storage/ai_filter_schema.sql |
ai_filter_results |
data | healthy | trendradar/storage/ai_filter_schema.sql |
ai_filter_analyzed_news |
data | healthy | trendradar/storage/ai_filter_schema.sql |
rss_feeds |
data | healthy | trendradar/storage/rss_schema.sql |
rss_items |
data | healthy | trendradar/storage/rss_schema.sql |
rss_crawl_records |
data | healthy | trendradar/storage/rss_schema.sql |
rss_crawl_status |
data | healthy | trendradar/storage/rss_schema.sql |
rss_push_records |
data | healthy | trendradar/storage/rss_schema.sql |
| Label | Layer | Status | Path |
|---|---|---|---|
crawl |
cicd | healthy | .github/workflows/crawler.yml |
build-crawler |
cicd | healthy | .github/workflows/docker.yml |
build-mcp |
cicd | healthy | .github/workflows/docker.yml |
del_runs |
cicd | healthy | .github/workflows/clean-crawler.yml |
moderate |
cicd | healthy | .github/workflows/issue-guard.yml |
| Label | Layer | Status | Path |
|---|---|---|---|
gha::crawler |
cicd | healthy | .github/workflows/crawler.yml |
gha::docker |
cicd | healthy | .github/workflows/docker.yml |
gha::clean-crawler |
cicd | healthy | .github/workflows/clean-crawler.yml |
gha::issue-guard |
cicd | healthy | .github/workflows/issue-guard.yml |
| Label | Layer | Status | Path |
|---|---|---|---|
image::docker/Dockerfile |
hardware | healthy | docker/Dockerfile |
trendradar |
hardware | healthy | docker/docker-compose.yml |
trendradar-mcp |
hardware | healthy | docker/docker-compose.yml |
| Label | Layer | Status | Path |
|---|---|---|---|
repobility-clone-sxn4owqd |
software | healthy | /tmp/repobility-clone-sxn4owqd |
| Label | Layer | Status | Path |
|---|---|---|---|
sqlite |
data | healthy | config/config.yaml |
| Label | Layer | Status | Path |
|---|---|---|---|
127.0.0.1 |
network | healthy | docker/docker-compose-build.yml |
| Label | Layer | Status | Path |
|---|---|---|---|
vps::aws |
hardware | healthy | config/config.yaml |
| Label | Layer | Status | Path |
|---|---|---|---|
.env in repo |
security | healthy | docker/.env |
This page is publicly accessible at:
https://repobility.com/scan/1178e500-7bf6-4ce8-86a4-9303c4049b1d/
To check status programmatically (no auth required):
curl -s https://repobility.com/api/v1/public/scan/1178e500-7bf6-4ce8-86a4-9303c4049b1d/
Important — please don't re-submit the same URL repeatedly. The submission endpoint is idempotent: re-submitting the same git URL returns this same scan_token, not a new one. To re-scan this repo, sign up free and use the dashboard.