Scan timing: clone 2.07s · analysis 1.6s · 1.3 MB · GitHub API rate-limit (preflight)
https://github.com/AstrBotDevs/AstrBot_Plugins_Collection
· scanned 2026-06-05 17:58 UTC (4 days, 21 hours ago)
· 10 languages
99 raw signals (55 security + 44 graph) 60th percentile · Python · small (2-20K LoC) System graph score 91 (lower by 18)
Last scanned 4 days, 21 hours ago · v2 · 30 actionable findings from 2 signal sources. 22 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 |
55.0 | 0.15 | 8.25 |
security_score |
100.0 | 0.25 | 25.00 |
testing_score |
87.0 | 0.20 | 17.40 |
documentation_score |
40.0 | 0.15 | 6.00 |
practices_score |
65.0 | 0.15 | 9.75 |
code_quality |
66.0 | 0.10 | 6.60 |
| Overall | 1.00 | 73.0 |
All 252 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 |
|---|---|---|---|
load_transform_module |
software | healthy | tests/test_transform_plugin_data.py:12 |
test_parse_metadata_text_extracts_new_optional_fields |
software | healthy | tests/test_transform_plugin_data.py:26 |
test_parse_metadata_text_supports_inline_and_block_lists |
software | healthy | tests/test_transform_plugin_data.py:39 |
test_transform_plugin_data_includes_metadata_fields_from_re… |
software | healthy | tests/test_transform_plugin_data.py:54 |
test_transform_plugin_data_preserves_metadata_fields_from_c… |
software | healthy | tests/test_transform_plugin_data.py:87 |
load_detection_module |
software | healthy | tests/test_detect_changed_plugins.py:12 |
test_load_plugins_map_requires_json_object |
software | healthy | tests/test_detect_changed_plugins.py:26 |
test_load_plugins_map_returns_dict_for_valid_json |
software | healthy | tests/test_detect_changed_plugins.py:32 |
test_load_plugins_map_rejects_non_dict_entries |
software | healthy | tests/test_detect_changed_plugins.py:39 |
test_detect_changed_plugin_names_returns_only_modified_entr… |
software | healthy | tests/test_detect_changed_plugins.py:47 |
test_resolve_astrbot_ref_uses_remote_default_branch |
software | healthy | tests/test_detect_changed_plugins.py:59 |
test_resolve_astrbot_ref_falls_back_to_master |
software | healthy | tests/test_detect_changed_plugins.py:67 |
test_detect_pull_request_selection_handles_fetch_base_ref_f… |
software | healthy | tests/test_detect_changed_plugins.py:77 |
test_detect_pull_request_selection_handles_missing_base_file |
software | healthy | tests/test_detect_changed_plugins.py:95 |
test_detect_pull_request_selection_raises_on_invalid_head_j… |
software | healthy | tests/test_detect_changed_plugins.py:111 |
test_write_github_env_outputs_expected_values |
software | healthy | tests/test_detect_changed_plugins.py:123 |
load_validator_module |
software | healthy | tests/test_validate_plugins.py:16 |
test_strips_git_suffix_trailing_slash_and_query |
software | healthy | tests/test_validate_plugins.py:30 |
test_rejects_non_github_urls |
software | healthy | tests/test_validate_plugins.py:40 |
test_rejects_non_http_schemes |
software | healthy | tests/test_validate_plugins.py:46 |
test_rejects_missing_owner_or_repository |
software | healthy | tests/test_validate_plugins.py:57 |
test_strips_leading_and_trailing_whitespace |
software | healthy | tests/test_validate_plugins.py:71 |
test_returns_all_plugins_when_limit_is_none |
software | healthy | tests/test_validate_plugins.py:81 |
test_returns_all_plugins_when_limit_is_negative_one |
software | healthy | tests/test_validate_plugins.py:96 |
test_prefers_explicit_names_in_requested_order |
software | healthy | tests/test_validate_plugins.py:111 |
test_respects_positive_limit_when_names_not_requested |
software | healthy | tests/test_validate_plugins.py:127 |
test_raises_key_error_for_unknown_requested_plugin |
software | healthy | tests/test_validate_plugins.py:143 |
test_combine_requested_names_merges_trims_and_drops_empty_v… |
software | healthy | tests/test_validate_plugins.py:158 |
test_combine_requested_names_handles_none_inputs |
software | healthy | tests/test_validate_plugins.py:168 |
test_sanitize_name_replaces_invalid_chars_and_falls_back_wh… |
software | healthy | tests/test_validate_plugins.py:173 |
test_build_plugin_clone_dir_is_unique_for_colliding_sanitiz… |
software | healthy | tests/test_validate_plugins.py:181 |
test_build_process_output_details_keeps_partial_timeout_logs |
software | healthy | tests/test_validate_plugins.py:191 |
test_parse_simple_yaml_handles_comments_quotes_and_whitespa… |
software | healthy | tests/test_validate_plugins.py:201 |
test_parse_simple_yaml_rejects_indented_lines |
software | healthy | tests/test_validate_plugins.py:224 |
test_parse_simple_yaml_rejects_list_syntax |
software | healthy | tests/test_validate_plugins.py:237 |
test_parse_simple_yaml_rejects_duplicate_keys |
software | healthy | tests/test_validate_plugins.py:250 |
test_load_metadata_uses_yaml_safe_load_when_available |
software | healthy | tests/test_validate_plugins.py:263 |
test_load_metadata_rejects_non_mapping_yaml_root |
software | healthy | tests/test_validate_plugins.py:282 |
test_load_metadata_uses_simple_parser_when_yaml_unavailable |
software | healthy | tests/test_validate_plugins.py:303 |
test_load_metadata_wraps_fallback_parse_errors |
software | healthy | tests/test_validate_plugins.py:321 |
test_load_plugins_index_accepts_valid_object |
software | healthy | tests/test_validate_plugins.py:337 |
test_load_plugins_index_rejects_json_array |
software | healthy | tests/test_validate_plugins.py:356 |
test_load_plugins_index_rejects_non_dict_values |
software | healthy | tests/test_validate_plugins.py:369 |
test_dummy_context_defers_plugin_data_dir_creation_until_re… |
software | healthy | tests/test_validate_plugins.py:389 |
test_dummy_context_returns_worker_data_dir_for_plugin_stora… |
software | healthy | tests/test_validate_plugins.py:406 |
test_null_stub_supports_async_database_context_pattern |
software | healthy | tests/test_validate_plugins.py:418 |
test_null_stub_returns_defaults_for_restart_style_config_ac… |
software | healthy | tests/test_validate_plugins.py:431 |
test_dummy_context_exposes_dict_like_config_defaults |
software | healthy | tests/test_validate_plugins.py:443 |
test_build_parser_defaults_max_workers_to_sixteen |
software | healthy | tests/test_validate_plugins.py:455 |
test_build_parser_rejects_non_positive_worker_and_timeout_v… |
software | healthy | tests/test_validate_plugins.py:462 |
Showing first 50 of this kind. Full payload available via the JSON button at the top of the page.
| Label | Layer | Status | Path |
|---|---|---|---|
plugins.json |
software | healthy | plugins.json |
README.md |
software | healthy | README.md |
unreachable-plugins.json |
software | healthy | unreachable-plugins.json |
del-plugins.json |
software | healthy | del-plugins.json |
plugin_cache_original.json |
software | healthy | plugin_cache_original.json |
test_transform_plugin_data.py |
software | healthy | tests/test_transform_plugin_data.py |
__init__.py |
software | healthy | tests/__init__.py |
test_detect_changed_plugins.py |
software | healthy | tests/test_detect_changed_plugins.py |
test_validate_plugins.py |
software | healthy | tests/test_validate_plugins.py |
__init__.py |
software | healthy | scripts/validate_plugins/__init__.py |
detect_changed_plugins.py |
software | healthy | scripts/validate_plugins/detect_changed_plugins.py |
run.py |
software | healthy | scripts/validate_plugins/run.py |
plugins_map.py |
software | healthy | scripts/validate_plugins/plugins_map.py |
run.py |
software | healthy | scripts/transform_plugin_data/run.py |
run.sh |
software | healthy | scripts/transform_plugin_data/clean_up/run.sh |
run.sh |
software | healthy | scripts/transform_plugin_data/check_for_changes/run.sh |
run.sh |
software | healthy | scripts/transform_plugin_data/pull_latest_changes_before_ch… |
run.sh |
software | healthy | scripts/transform_plugin_data/get_github_api_info_for_repos… |
run.sh |
software | healthy | scripts/transform_plugin_data/transform_plugin_data/run.sh |
run.sh |
software | healthy | scripts/transform_plugin_data/commit_and_push_changes/run.sh |
run.sh |
software | healthy | scripts/transform_plugin_data/configure_git/run.sh |
run.sh |
software | healthy | scripts/transform_plugin_data/summary/run.sh |
run.sh |
software | healthy | scripts/transform_plugin_data/fetch_original_plugin_data/ru… |
run.sh |
software | healthy | scripts/transform_plugin_data/load_existing_cache_for_fallb… |
PLUGIN_PUBLISH.yml |
software | healthy | .github/ISSUE_TEMPLATE/PLUGIN_PUBLISH.yml |
validate_json.yml |
software | healthy | .github/workflows/validate_json.yml |
clean-unreachable-plugins.yml |
software | healthy | .github/workflows/clean-unreachable-plugins.yml |
transform-plugin-data.yml |
software | healthy | .github/workflows/transform-plugin-data.yml |
validate-plugin-smoke.yml |
software | healthy | .github/workflows/validate-plugin-smoke.yml |
| Label | Layer | Status | Path |
|---|---|---|---|
MetadataParsingTests |
software | healthy | tests/test_transform_plugin_data.py:25 |
TransformPluginDataTests |
software | healthy | tests/test_transform_plugin_data.py:53 |
LoadPluginsMapTests |
software | healthy | tests/test_detect_changed_plugins.py:25 |
ChangedPluginDetectionTests |
software | healthy | tests/test_detect_changed_plugins.py:46 |
AstrbotRefTests |
software | healthy | tests/test_detect_changed_plugins.py:58 |
PullRequestDetectionTests |
software | healthy | tests/test_detect_changed_plugins.py:76 |
NormalizeRepoUrlTests |
software | healthy | tests/test_validate_plugins.py:29 |
SelectPluginsTests |
software | healthy | tests/test_validate_plugins.py:80 |
HelperFunctionTests |
software | healthy | tests/test_validate_plugins.py:157 |
DummyContextStubTests |
software | healthy | tests/test_validate_plugins.py:388 |
ValidationProgressTests |
software | healthy | tests/test_validate_plugins.py:454 |
ValidatePluginTests |
software | healthy | tests/test_validate_plugins.py:547 |
MetadataValidationTests |
software | healthy | tests/test_validate_plugins.py:703 |
WorkerCommandTests |
software | healthy | tests/test_validate_plugins.py:760 |
WorkerSysPathTests |
software | healthy | tests/test_validate_plugins.py:781 |
WorkerLoadCheckTests |
software | healthy | tests/test_validate_plugins.py:796 |
FakeManager |
software | healthy | tests/test_validate_plugins.py:800 |
RunWorkerIsolationTests |
software | healthy | tests/test_validate_plugins.py:817 |
ReportBuilderTests |
software | healthy | tests/test_validate_plugins.py:942 |
WorkerOutputParsingTests |
software | healthy | tests/test_validate_plugins.py:961 |
MetadataLoadError |
software | healthy | scripts/validate_plugins/run.py:37 |
NullStub |
software | healthy | scripts/validate_plugins/run.py:618 |
DummyConfig |
software | healthy | scripts/validate_plugins/run.py:655 |
DummyContext |
software | healthy | scripts/validate_plugins/run.py:667 |
| Label | Layer | Status | Path |
|---|---|---|---|
tests |
software | healthy | tests |
scripts |
software | healthy | scripts |
validate_plugins |
software | healthy | scripts/validate_plugins |
transform_plugin_data |
software | healthy | scripts/transform_plugin_data |
clean_up |
software | healthy | scripts/transform_plugin_data/clean_up |
check_for_changes |
software | healthy | scripts/transform_plugin_data/check_for_changes |
pull_latest_changes_before_checking_rebase_with_autostash |
software | healthy | scripts/transform_plugin_data/pull_latest_changes_before_ch… |
get_github_api_info_for_repositories |
software | healthy | scripts/transform_plugin_data/get_github_api_info_for_repos… |
transform_plugin_data |
software | healthy | scripts/transform_plugin_data/transform_plugin_data |
commit_and_push_changes |
software | healthy | scripts/transform_plugin_data/commit_and_push_changes |
configure_git |
software | healthy | scripts/transform_plugin_data/configure_git |
summary |
software | healthy | scripts/transform_plugin_data/summary |
fetch_original_plugin_data |
software | healthy | scripts/transform_plugin_data/fetch_original_plugin_data |
load_existing_cache_for_fallback |
software | healthy | scripts/transform_plugin_data/load_existing_cache_for_fallb… |
.github |
software | healthy | .github |
ISSUE_TEMPLATE |
software | healthy | .github/ISSUE_TEMPLATE |
workflows |
software | healthy | .github/workflows |
| Label | Layer | Status | Path |
|---|---|---|---|
gha::validate_json |
cicd | healthy | .github/workflows/validate_json.yml |
gha::clean-unreachable-plugins |
cicd | healthy | .github/workflows/clean-unreachable-plugins.yml |
gha::transform-plugin-data |
cicd | healthy | .github/workflows/transform-plugin-data.yml |
gha::validate-plugin-smoke |
cicd | healthy | .github/workflows/validate-plugin-smoke.yml |
| Label | Layer | Status | Path |
|---|---|---|---|
validate-json |
cicd | healthy | .github/workflows/validate_json.yml |
clean-unreachable-plugins |
cicd | healthy | .github/workflows/clean-unreachable-plugins.yml |
transform-data |
cicd | healthy | .github/workflows/transform-plugin-data.yml |
validate-plugin-smoke |
cicd | healthy | .github/workflows/validate-plugin-smoke.yml |
| Label | Layer | Status | Path |
|---|---|---|---|
auth::plugins.json |
security | healthy | plugins.json |
auth::plugin_cache_original.json |
security | healthy | plugin_cache_original.json |
| Label | Layer | Status | Path |
|---|---|---|---|
repobility-clone-rhf1lsy5 |
software | healthy | /tmp/repobility-clone-rhf1lsy5 |
| Label | Layer | Status | Path |
|---|---|---|---|
mysql |
data | healthy | plugins.json |
| Label | Layer | Status | Path |
|---|---|---|---|
127.0.0.1 |
network | healthy | plugins.json |
| Label | Layer | Status | Path |
|---|---|---|---|
vps::azure |
hardware | healthy | plugins.json |
| Label | Layer | Status | Path |
|---|---|---|---|
PAT_TOKEN |
cicd | healthy | — |
This page is publicly accessible at:
https://repobility.com/scan/8c517160-6c1b-4594-9716-7418b4359bd6/
To check status programmatically (no auth required):
curl -s https://repobility.com/api/v1/public/scan/8c517160-6c1b-4594-9716-7418b4359bd6/
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.