Scan timing: clone 1.59s · analysis 3.39s · 0.6 MB · GitHub API rate-limit (preflight)
https://github.com/signalbot-org/signalbot
· scanned 2026-06-05 18:28 UTC (4 days, 19 hours ago)
· 10 languages
151 raw signals (69 security + 82 graph) 94th percentile · Python · small (2-20K LoC)
Last scanned 4 days, 19 hours ago · v2 · 41 actionable findings from 2 signal sources. 44 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 |
100.0 | 0.15 | 15.00 |
security_score |
98.8 | 0.25 | 24.70 |
testing_score |
87.0 | 0.20 | 17.40 |
documentation_score |
66.0 | 0.15 | 9.90 |
practices_score |
75.0 | 0.15 | 11.25 |
code_quality |
80.0 | 0.10 | 8.00 |
| Overall | 1.00 | 86.2 |
All 455 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 |
|---|---|---|---|
_make_mock_redis_module |
software | healthy | tests/test_storage.py:11 |
test_init_without_password |
software | healthy | tests/test_storage.py:19 |
test_init_with_password |
software | healthy | tests/test_storage.py:28 |
setup |
software | healthy | tests/test_bot.py:278 |
test_produce |
software | healthy | tests/test_bot.py:37 |
test_null_group |
software | healthy | tests/test_bot.py:81 |
test_get_group |
software | healthy | tests/test_bot.py:85 |
__init__ |
software | healthy | tests/test_bot.py:275 |
handle |
software | healthy | tests/test_bot.py:281 |
test_connection_mode_defaults_to_auto |
software | healthy | tests/test_bot.py:139 |
test_connection_mode_can_be_set_to_http_only |
software | healthy | tests/test_bot.py:151 |
test_connection_mode_can_be_set_to_https_only |
software | healthy | tests/test_bot.py:164 |
test_new_version_is_okay |
software | healthy | tests/test_bot.py:180 |
test_unset_version |
software | healthy | tests/test_bot.py:193 |
test_old_version_raises_runtime_error |
software | healthy | tests/test_bot.py:203 |
test_invalid_version |
software | healthy | tests/test_bot.py:218 |
test_valid_username |
software | healthy | tests/test_bot.py:231 |
test_invalid_username |
software | healthy | tests/test_bot.py:243 |
test_register_one_command |
software | healthy | tests/test_bot.py:263 |
test_register_three_commands |
software | healthy | tests/test_bot.py:267 |
test_register_calls_setup_of_command |
software | healthy | tests/test_bot.py:273 |
test_register_single_contact |
software | healthy | tests/test_bot.py:291 |
test_register_multiple_contacts |
software | healthy | tests/test_bot.py:298 |
test_register_multiple_contacts_multiple_commands |
software | healthy | tests/test_bot.py:311 |
test_poll_with_phone_number |
software | healthy | tests/test_bot.py:326 |
test_poll_with_group_id |
software | healthy | tests/test_bot.py:347 |
test_poll_with_multiple_selections |
software | healthy | tests/test_bot.py:371 |
setup |
software | healthy | tests/test_message.py:33 |
test_parse_source_own_message |
software | healthy | tests/test_message.py:41 |
test_parse_timestamp_own_message |
software | healthy | tests/test_message.py:45 |
test_parse_type_own_message |
software | healthy | tests/test_message.py:49 |
test_parse_text_own_message |
software | healthy | tests/test_message.py:53 |
test_parse_group_own_message |
software | healthy | tests/test_message.py:57 |
test_parse_source_foreign_message |
software | healthy | tests/test_message.py:63 |
test_parse_timestamp_foreign_message |
software | healthy | tests/test_message.py:67 |
test_parse_type_foreign_message |
software | healthy | tests/test_message.py:71 |
test_parse_text_foreign_message |
software | healthy | tests/test_message.py:75 |
test_parse_group_foreign_message |
software | healthy | tests/test_message.py:79 |
test_read_reaction |
software | healthy | tests/test_message.py:83 |
test_group_update |
software | healthy | tests/test_message.py:90 |
test_attachments |
software | healthy | tests/test_message.py:96 |
test_parse_user_chat_message |
software | healthy | tests/test_message.py:127 |
test_preview_no_image |
software | healthy | tests/test_message.py:137 |
test_contacts_sync_message |
software | healthy | tests/test_message.py:151 |
test_message_read |
software | healthy | tests/test_message.py:159 |
setup |
software | healthy | tests/test_api.py:16 |
test_send |
software | healthy | tests/test_api.py:20 |
test_poll |
software | healthy | tests/test_api.py:39 |
test_receive |
software | healthy | tests/test_api.py:59 |
test_receive_uri |
software | healthy | tests/test_api.py:74 |
Showing first 50 of this kind. Full payload available via the JSON button at the top of the page.
| Label | Layer | Status | Path |
|---|---|---|---|
TestRedisStorage |
software | healthy | tests/test_storage.py:18 |
TestCommon |
software | healthy | tests/test_bot.py:19 |
TestProducer |
software | healthy | tests/test_bot.py:35 |
TestGetter |
software | healthy | tests/test_bot.py:80 |
GroupInspector |
software | healthy | tests/test_bot.py:86 |
TestSignalApiProtocolConfig |
software | healthy | tests/test_bot.py:135 |
TestSignalApiVersionCheck |
software | healthy | tests/test_bot.py:179 |
TestUsernameValidation |
software | healthy | tests/test_bot.py:230 |
TestRegisterCommand |
software | healthy | tests/test_bot.py:262 |
SomeTestCommand |
software | healthy | tests/test_bot.py:274 |
TestPoll |
software | healthy | tests/test_bot.py:325 |
TestMessage |
software | healthy | tests/test_message.py:12 |
TestAPI |
software | healthy | tests/test_api.py:9 |
TriggeredCommand |
software | healthy | tests/test_decorator.py:16 |
TriggeredCaseSensitiveCommand |
software | healthy | tests/test_decorator.py:22 |
ReactionTriggeredCommand |
software | healthy | tests/test_decorator.py:28 |
ReactionFilteredCommand |
software | healthy | tests/test_decorator.py:34 |
RegexTriggeredCommand |
software | healthy | tests/test_decorator.py:40 |
SendReceiveGetGroupsMocks |
software | healthy | tests/test_decorator.py:47 |
TestCommon |
software | healthy | tests/test_decorator.py:54 |
TestTriggered |
software | healthy | tests/test_decorator.py:71 |
TestTriggeredCaseSensitive |
software | healthy | tests/test_decorator.py:99 |
TestRegexTriggered |
software | healthy | tests/test_decorator.py:120 |
TestTriggeredGroups |
software | healthy | tests/test_decorator.py:148 |
TestReactionTriggered |
software | healthy | tests/test_decorator.py:194 |
TestReactionFiltered |
software | healthy | tests/test_decorator.py:215 |
TestQuote |
software | healthy | tests/test_quote.py:6 |
SchnickSchnackSchnuckCommand |
software | healthy | tests/test_chat.py:8 |
TestSchnickSchnackSchnuckCommand |
software | healthy | tests/test_chat.py:21 |
TestLoadConfig |
software | healthy | tests/test_bot_config.py:23 |
PingCommand |
software | healthy | examples/simple_bot.py:14 |
PingCommand |
software | healthy | examples/commands/ping.py:5 |
TriggeredCommand |
software | healthy | examples/commands/multiple_triggered.py:5 |
ReactionCommand |
software | healthy | examples/commands/reaction.py:5 |
ThumbsUpCommand |
software | healthy | examples/commands/reaction.py:21 |
StylesCommand |
software | healthy | examples/commands/styles.py:5 |
DeleteCommand |
software | healthy | examples/commands/delete.py:10 |
DeleteLocalAttachmentCommand |
software | healthy | examples/commands/delete.py:21 |
ReceiveDeleteCommand |
software | healthy | examples/commands/delete.py:47 |
ReplyCommand |
software | healthy | examples/commands/reply.py:5 |
CommandWithHelpMessage |
software | healthy | examples/commands/help.py:6 |
HelpCommand |
software | healthy | examples/commands/help.py:12 |
TypingCommand |
software | healthy | examples/commands/typing.py:7 |
RegexTriggeredCommand |
software | healthy | examples/commands/regex_triggered.py:5 |
AttachmentCommand |
software | healthy | examples/commands/attachments.py:9 |
EditCommand |
software | healthy | examples/commands/edit.py:7 |
TestPingChatTest |
software | healthy | examples/commands/tests/test_ping.py:9 |
Storage |
software | healthy | src/signalbot/storage.py:17 |
StorageError |
software | healthy | src/signalbot/storage.py:35 |
SQLiteStorage |
software | healthy | src/signalbot/storage.py:39 |
Showing first 50 of this kind. Full payload available via the JSON button at the top of the page.
| Label | Layer | Status | Path |
|---|---|---|---|
mkdocs.yml |
software | healthy | mkdocs.yml |
README.md |
software | healthy | README.md |
prek.toml |
software | healthy | prek.toml |
pyproject.toml |
software | healthy | pyproject.toml |
.codecov.yml |
software | healthy | .codecov.yml |
test_storage.py |
software | healthy | tests/test_storage.py |
test_bot.py |
software | healthy | tests/test_bot.py |
test_message.py |
software | healthy | tests/test_message.py |
test_api.py |
software | healthy | tests/test_api.py |
test_decorator.py |
software | healthy | tests/test_decorator.py |
test_quote.py |
software | healthy | tests/test_quote.py |
test_chat.py |
software | healthy | tests/test_chat.py |
test_bot_config.py |
software | healthy | tests/test_bot_config.py |
local_development.md |
software | healthy | docs/local_development.md |
getting_started.md |
software | healthy | docs/getting_started.md |
troubleshooting.md |
software | healthy | docs/troubleshooting.md |
index.md |
software | healthy | docs/index.md |
additional_information.md |
software | healthy | docs/additional_information.md |
quote.md |
software | healthy | docs/reference/quote.md |
message.md |
software | healthy | docs/reference/message.md |
linkpreview.md |
software | healthy | docs/reference/linkpreview.md |
context.md |
software | healthy | docs/reference/context.md |
bot_config.md |
software | healthy | docs/reference/bot_config.md |
bot.md |
software | healthy | docs/reference/bot.md |
command.md |
software | healthy | docs/reference/command.md |
reaction.md |
software | healthy | docs/reference/reaction.md |
api_overview.md |
software | healthy | docs/examples/api_overview.md |
bot_config_options.md |
software | healthy | docs/examples/bot_config_options.md |
bot_with_scheduler.md |
software | healthy | docs/examples/bot_with_scheduler.md |
simple_bot.py |
software | healthy | examples/simple_bot.py |
bot_with_scheduler.py |
software | healthy | examples/bot_with_scheduler.py |
__init__.py |
software | healthy | examples/__init__.py |
bot.py |
software | healthy | examples/bot.py |
__init__.py |
software | healthy | examples/commands/__init__.py |
ping.py |
software | healthy | examples/commands/ping.py |
multiple_triggered.py |
software | healthy | examples/commands/multiple_triggered.py |
reaction.py |
software | healthy | examples/commands/reaction.py |
styles.py |
software | healthy | examples/commands/styles.py |
delete.py |
software | healthy | examples/commands/delete.py |
reply.py |
software | healthy | examples/commands/reply.py |
help.py |
software | healthy | examples/commands/help.py |
typing.py |
software | healthy | examples/commands/typing.py |
regex_triggered.py |
software | healthy | examples/commands/regex_triggered.py |
attachments.py |
software | healthy | examples/commands/attachments.py |
edit.py |
software | healthy | examples/commands/edit.py |
__init__.py |
software | healthy | examples/commands/tests/__init__.py |
test_ping.py |
software | healthy | examples/commands/tests/test_ping.py |
pull_request_template.md |
software | healthy | .github/pull_request_template.md |
CONTRIBUTING.md |
software | healthy | .github/CONTRIBUTING.md |
dependabot.yml |
software | healthy | .github/dependabot.yml |
Showing first 50 of this kind. Full payload available via the JSON button at the top of the page.
| Label | Layer | Status | Path |
|---|---|---|---|
tests |
software | healthy | tests |
docs |
software | healthy | docs |
reference |
software | healthy | docs/reference |
examples |
software | healthy | docs/examples |
examples |
software | healthy | examples |
commands |
software | healthy | examples/commands |
tests |
software | healthy | examples/commands/tests |
.github |
software | healthy | .github |
workflows |
software | healthy | .github/workflows |
install-uv |
software | healthy | .github/workflows/install-uv |
src |
software | healthy | src |
signalbot |
software | healthy | src/signalbot |
utils |
software | healthy | src/signalbot/utils |
| Label | Layer | Status | Path |
|---|---|---|---|
deploy-check |
cicd | healthy | .github/workflows/deploy-pr-dispatch.yaml |
ci |
cicd | healthy | .github/workflows/release.yaml |
publish-test-pypi |
cicd | healthy | .github/workflows/release.yaml |
publish-pypi |
cicd | healthy | .github/workflows/release.yaml |
prek |
cicd | healthy | .github/workflows/ci.yaml |
unittest |
cicd | healthy | .github/workflows/ci.yaml |
deploy |
cicd | healthy | .github/workflows/deploy-docs.yaml |
docs |
cicd | healthy | .github/workflows/ci-docs.yaml |
publish-package |
cicd | healthy | .github/workflows/deploy-pr-command.yaml |
| Label | Layer | Status | Path |
|---|---|---|---|
gha::deploy-pr-dispatch |
cicd | healthy | .github/workflows/deploy-pr-dispatch.yaml |
gha::release |
cicd | healthy | .github/workflows/release.yaml |
gha::ci |
cicd | healthy | .github/workflows/ci.yaml |
gha::deploy-docs |
cicd | healthy | .github/workflows/deploy-docs.yaml |
gha::ci-docs |
cicd | healthy | .github/workflows/ci-docs.yaml |
gha::deploy-pr-command |
cicd | healthy | .github/workflows/deploy-pr-command.yaml |
gha::action |
cicd | healthy | .github/workflows/install-uv/action.yaml |
| Label | Layer | Status | Path |
|---|---|---|---|
CODECOV_TOKEN |
cicd | healthy | — |
GITHUB_TOKEN |
cicd | healthy | — |
API_TOKEN |
cicd | healthy | — |
| Label | Layer | Status | Path |
|---|---|---|---|
redis |
data | healthy | pyproject.toml |
sqlite |
data | healthy | src/signalbot/storage.py |
| Label | Layer | Status | Path |
|---|---|---|---|
password_literal::tests/test_storage.py |
security | healthy | tests/test_storage.py |
password_literal::tests/test_storage.py |
security | healthy | tests/test_storage.py |
| Label | Layer | Status | Path |
|---|---|---|---|
repobility-clone-bov6tzhx |
software | healthy | /tmp/repobility-clone-bov6tzhx |
| Label | Layer | Status | Path |
|---|---|---|---|
signalbot |
data | healthy | src/signalbot/storage.py |
| Label | Layer | Status | Path |
|---|---|---|---|
port:6379 |
network | healthy | tests/test_storage.py |
| Label | Layer | Status | Path |
|---|---|---|---|
127.0.0.1 |
network | healthy | tests/test_bot.py |
This page is publicly accessible at:
https://repobility.com/scan/762243d6-5d17-4e05-94f7-fbd7bb632ccf/
To check status programmatically (no auth required):
curl -s https://repobility.com/api/v1/public/scan/762243d6-5d17-4e05-94f7-fbd7bb632ccf/
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.