KEJILION.SH 一款全功能的Linux管理脚本!An all-in-one Linux management script!
This report summarizes scanner evidence for kejilion/sh, a Shell project with 3,511 GitHub stars. SynthScan examined 45,675 lines of code across 116 source files, recording 228 pattern matches distributed across 12 syntactic categories. The legacy adjusted pattern signal is 5.9 (Moderate pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Payload schema: 1.0.0 · Engine: 2.0.0 · Scoring: heuristic-density-v1 · Scan date: 2026-10-31.
Can maintainers explain intent, assumptions, and trade-offs? 188 finding(s).
Are imports declared and package/API names verified? 9 finding(s).
Are wrappers, guards, and repeated structures necessary? 200 finding(s).
Which changes need focused human review? 228 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 228 distinct pattern matches across 12 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | translate.py | 23 | def process_content_with_vars(content, target_lang): | CODE |
| LOW | ir/to-fa.py | 18 | def translate_line_preserving_variables(line): | CODE |
| LOW | tests/test_kpanel_app_parallel.py | 41 | def test_atomic_marker_add_remove(self): | CODE |
| LOW⚡ | tests/test_kpanel_app_parallel.py | 53 | def test_excludes_concurrent_system_writes(self): | CODE |
| LOW⚡ | tests/test_kpanel_app_parallel.py | 58 | def test_nested_lock_keeps_shell_state_and_does_not_export_guard(self): | CODE |
| LOW⚡ | tests/test_kpanel_app_parallel.py | 63 | def test_inherited_background_fd_does_not_hold_lock(self): | CODE |
| LOW⚡ | tests/test_kpanel_app_parallel.py | 67 | def test_lock_failure_stops_caller(self): | CODE |
| LOW⚡ | tests/test_kpanel_app_parallel.py | 72 | def test_callback_failure_releases_lock(self): | CODE |
| LOW⚡ | tests/test_kpanel_app_parallel.py | 77 | def test_config_snapshot_keeps_input_exit_code_and_releases_catalog_lock(self): | CODE |
| LOW | tests/test_kpanel_app_parallel.py | 92 | def test_unsafe_lock_and_marker_paths_are_rejected(self): | CODE |
| LOW | tests/test_kpanel_light_node_update.py | 201 | def test_inherited_installer_lock_spans_child_update_and_home_removal(self): | STRING |
| LOW | tests/test_kpanel_light_node_update.py | 236 | def test_real_join_control_flow_excludes_join_update_and_uninstall_until_activation(self): | STRING |
| LOW | tests/test_kpanel_light_node_update.py | 311 | def test_updates_reject_downgrades_and_invalid_version_identities(self): | STRING |
| LOW | tests/test_kpanel_light_node_update.py | 329 | def test_version_order_preserves_upgrade_and_same_version_repair(self): | STRING |
| LOW | tests/test_kpanel_light_node_update.py | 345 | def test_quiet_mode_suppresses_progress_but_preserves_errors(self): | STRING |
| LOW | tests/test_kpanel_light_node_update.py | 359 | def test_upgrade_optional_failure_does_not_rollback_and_delayed_exec_is_accepted(self): | STRING |
| LOW | tests/test_kpanel_light_node_update.py | 370 | def test_openrc_update_restarts_current_binary_and_repairs_file_service(self): | STRING |
| LOW | tests/test_kpanel_light_node_update.py | 422 | def test_procd_update_repairs_service_and_keeps_backend(self): | STRING |
| LOW | tests/test_kpanel_light_node_update.py | 440 | def test_procd_failed_core_rolls_back_but_optional_failure_is_degraded(self): | STRING |
| LOW | tests/test_kpanel_light_node_update.py | 464 | def test_procd_running_false_is_not_treated_as_healthy_pid(self): | STRING |
| LOW | tests/test_kpanel_light_node_update.py | 473 | def test_procd_cron_preserves_unrelated_jobs_and_rejects_symlinks(self): | STRING |
| LOW | tests/test_kpanel_light_node_update.py | 496 | def test_monitoring_relay_cleanup_preserves_unknown_entries_and_symlinks(self): | STRING |
| LOW | tests/test_kpanel_light_node_update.py | 516 | def test_failed_core_rolls_back_and_restart_failure_cannot_be_masked(self): | STRING |
| LOW | tests/test_kpanel_light_node_update.py | 525 | def test_update_status_is_private_bounded_and_tracks_checks(self): | STRING |
| LOW | tests/test_kpanel_light_node_update.py | 544 | def test_update_status_rejects_symlink_without_overwriting_target(self): | STRING |
| LOW | tests/test_kpanel_light_node_update.py | 552 | def test_running_status_survives_kill_and_next_check_recovers(self): | STRING |
| LOW | tests/test_kpanel_light_node_update.py | 578 | def test_current_file_with_old_process_recovers_without_binary_download(self): | STRING |
| LOW | tests/test_kpanel_light_node_update.py | 589 | def test_legacy_config_permissions_recover_for_real_service_uid(self): | STRING |
| LOW | tests/test_kpanel_light_node_update.py | 597 | def test_known_legacy_file_unit_is_repaired_and_current_broker_restarts(self): | STRING |
| LOW | tests/test_kpanel_light_node_update.py | 610 | def test_custom_and_symlink_file_units_are_preserved(self): | STRING |
| LOW | tests/test_kpanel_light_node_update.py | 624 | def test_original_historical_file_unit_migrates_but_custom_variant_is_preserved(self): | STRING |
| LOW | tests/test_kpanel_light_node_update.py | 641 | def test_bad_checksum_and_network_failure_preserve_binary_then_retry_recovers(self): | STRING |
| LOW | tests/test_kpanel_light_node_update.py | 653 | def test_sigkill_releases_lock_and_legacy_handoff_blocks_only_live_process(self): | STRING |
| LOW | tests/test_kpanel_light_node_update.py | 670 | def test_orphaned_empty_lock_recovers_on_install_and_network_failure_releases_it(self): | STRING |
| LOW | tests/test_kpanel_light_node_update.py | 682 | def test_live_legacy_script_without_marker_is_preserved_even_after_replacement(self): | STRING |
| LOW | tests/test_kpanel_light_node_update.py | 703 | def test_unknown_lock_contents_and_symlinks_are_never_removed(self): | STRING |
| LOW | tests/test_kpanel_light_node_update.py | 718 | def test_invalid_legacy_identity_has_an_explicit_error(self): | STRING |
| LOW | tests/test_kpanel_light_node_update.py | 724 | def test_update_bridges_legacy_lock_and_recovers_after_sigkill(self): | STRING |
| LOW | tests/test_kpanel_light_node_update.py | 743 | def test_missing_or_untrusted_release_redirect_fails_visibly_before_binary_download(self): | STRING |
| LOW | tests/test_kpanel_light_node_update.py | 755 | def test_interrupt_reports_retry_and_releases_compatibility_lock(self): | STRING |
| LOW | tests/test_kpanel_light_node_update.py | 774 | def test_delivery_proxy_rewriting_keeps_release_origin_and_download_errors_are_visible(self): | STRING |
| LOW | tests/test_kpanel_light_node_update.py | 789 | def test_unreachable_github_installs_through_the_mirror(self): | STRING |
| LOW | tests/test_kpanel_light_node_update.py | 800 | def test_unreachable_release_cdn_keeps_the_manifest_release_through_the_mirror(self): | STRING |
| LOW | tests/test_kpanel_light_node_update.py | 811 | def test_mirror_downloads_are_still_verified_and_failures_name_both_sources(self): | STRING |
| LOW | tests/test_kpanel_light_node_update.py | 828 | def test_github_redirect_is_still_required_when_github_answers(self): | STRING |
| LOW | tests/test_kpanel_light_node_update.py | 835 | def test_unsafe_config_is_rejected_without_widening_permissions(self): | STRING |
| LOW | tests/test_stats_json.py | 47 | def test_escape_round_trips_quotes_backslashes_unicode_and_all_control_characters(self): | STRING |
| LOW | tests/test_stats_json.py | 53 | def test_payload_is_valid_and_network_requests_have_deadlines(self): | STRING |
| LOW⚡ | tests/test_stats_json.py | 65 | def test_non_country_provider_response_cannot_inject_into_json(self): | STRING |
| LOW⚡ | tests/test_stats_json.py | 70 | def test_rapid_repeated_calls_send_only_one_request(self): | STRING |
| LOW⚡ | tests/test_stats_json.py | 75 | def test_disabled_telemetry_never_calls_network(self): | STRING |
| LOW | tests/test_web_backup_template.py | 51 | def test_success_keeps_business_data_and_only_prunes_completed_web_backups(self): | CODE |
| LOW | tests/test_web_backup_template.py | 67 | def test_transfer_failure_preserves_all_restore_points(self): | CODE |
| LOW | tests/test_web_backup_template.py | 74 | def test_archive_failure_never_publishes_or_prunes(self): | CODE |
| LOW | tests/test_nginx_config_update_live.py | 16 | def test_real_preflight_switch_and_old_image_recovery(self): | CODE |
| LOW⚡ | tests/test_nginx_config_update.py | 38 | def test_added_root_include_precedes_events_and_disabled_values_stay_disabled(self): | CODE |
| LOW⚡ | tests/test_nginx_config_update.py | 47 | def test_repeated_or_ambiguous_directives_are_preserved(self): | CODE |
| LOW⚡ | tests/test_nginx_config_update.py | 54 | def test_feature_switches_and_performance_mode_are_not_reset_by_new_defaults(self): | CODE |
| LOW⚡ | tests/test_nginx_config_update.py | 60 | def test_malformed_configuration_is_rejected(self): | CODE |
| LOW⚡ | tests/test_nginx_config_update.py | 65 | def test_real_upstream_templates_have_verified_hashes(self): | CODE |
| 109 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | ir/to-fa.py | 0 | translate only chinese parts in echo/read/send_stats commands, excluding shell variables | STRING |
| HIGH | ru/to-ru.py | 0 | translate only chinese parts in echo/read/send_stats commands, excluding shell variables | STRING |
| HIGH | tw/to-tw.py | 0 | translate only chinese parts in echo/read/send_stats commands, excluding shell variables | STRING |
| HIGH | kr/to-kr.py | 0 | translate only chinese parts in echo/read/send_stats commands, excluding shell variables | STRING |
| HIGH | jp/to-jp.py | 0 | translate only chinese parts in echo/read/send_stats commands, excluding shell variables | STRING |
| HIGH | en/to-en.py | 0 | translate only chinese parts in echo/read/send_stats commands, excluding shell variables | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH⚡ | tests/test_kpanel_app_parallel.py | 61 | 'test "$value" = changed && test -z "$KJ_APP_LOCKS_HELD"') | CODE |
| HIGH⚡ | tests/test_kpanel_app_parallel.py | 80 | 'flock -n "$(dirname "$1")/locks/catalog.lock" true || return 45\n' | CODE |
| HIGH | tests/test_nginx_config_update.py | 809 | nginx_update_transaction nginx || exit 91 | CODE |
| HIGH⚡ | tests/test_kpanel_light_node_dependencies.py | 302 | self.assertIn('kpanel_node_ensure_dependencies || return 1', JOIN) | STRING |
| HIGH | tests/openclaw/test_api_secretrefs.py | 323 | if (!value.source || path !== 'models.providers.demo.apiKey') throw Error('bad ref'); | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | hermes_manager.sh | 244 | except Exception: | CODE |
| LOW | hermes_manager.sh | 265 | except Exception as e: | CODE |
| LOW | hermes_manager.sh | 354 | except Exception as e: | CODE |
| LOW | hermes_manager.sh | 915 | except Exception: | CODE |
| LOW | translate.py | 19 | except Exception as e: | CODE |
| LOW | ir/to-fa.py | 14 | except Exception as e: | CODE |
| MEDIUM | ir/to-fa.py | 11 | def translate_text(text): | CODE |
| LOW | ru/to-ru.py | 14 | except Exception as e: | CODE |
| MEDIUM | ru/to-ru.py | 11 | def translate_text(text): | CODE |
| LOW | tw/to-tw.py | 14 | except Exception as e: | CODE |
| MEDIUM | tw/to-tw.py | 11 | def translate_text(text): | CODE |
| LOW | kr/to-kr.py | 14 | except Exception as e: | CODE |
| MEDIUM | kr/to-kr.py | 11 | def translate_text(text): | CODE |
| LOW | .github/workflows/translate.yml | 56 | except Exception as e: | CODE |
| LOW | jp/to-jp.py | 14 | except Exception as e: | CODE |
| MEDIUM | jp/to-jp.py | 11 | def translate_text(text): | CODE |
| LOW | en/to-en.py | 14 | except Exception as e: | CODE |
| MEDIUM | en/to-en.py | 11 | def translate_text(text): | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | network-optimize.sh | 2 | # ============================================================================ | COMMENT |
| MEDIUM | network-optimize.sh | 6 | # ============================================================================ | COMMENT |
| MEDIUM | network-optimize.sh | 350 | # ============================================================================ | COMMENT |
| MEDIUM | network-optimize.sh | 356 | # ============================================================================ | COMMENT |
| MEDIUM | network-optimize.sh | 591 | # ======================== | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | ir/to-fa.py | 38 | CODE | |
| LOW | tests/test_nginx_config_update.py | 133 | CODE | |
| LOW | tests/test_waf_auto_migration_live.py | 22 | CODE | |
| LOW | tests/test_nginx_config_update_stack_live.py | 18 | CODE | |
| LOW | tests/openclaw/test_api_secretrefs.py | 331 | CODE | |
| LOW | tests/openclaw/test_api_secretrefs.py | 418 | CODE | |
| LOW | ru/to-ru.py | 38 | CODE | |
| LOW | tw/to-tw.py | 38 | CODE | |
| LOW | kr/to-kr.py | 38 | CODE | |
| LOW | jp/to-jp.py | 38 | CODE | |
| LOW | en/to-en.py | 38 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/test_kpanel_light_node_update.py | 303 | except ProcessLookupError: pass | CODE |
| HIGH | tests/test_nginx_config_update_stack_live.py | 89 | except RuntimeError: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | deepseek_harness_manager.sh | 3 | # 官方项目:https://github.com/deepseek-ai/deepseek-harness | COMMENT |
| MEDIUM | deepseek_harness_manager.sh | 337 | # kejilion-deepseek-harness-managed\\ | COMMENT |
| MEDIUM | tests/test_deepseek_harness_manager.sh | 301 | grep -Fq '# kejilion-deepseek-harness-managed' "$webui_conf" | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | deepseek_harness_manager.sh | 326 | # Open the file as the worker UID; BusyBox test -r may ignore POSIX ACLs. | COMMENT |
| LOW | ir/kejilion.sh | 2411 | # Check if the session already exists | COMMENT |
| LOW | ru/kejilion.sh | 2411 | # Check if the session already exists | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests_openclaw_manager_smoke.sh | 137 | add-all-models-from-provider "cli-api" "https://example.com/v1" "dummy-token" >/tmp/add-models.out | CODE |
| LOW | tests/test_unified_cf_smoke.sh | 175 | assert json.load(open(sys.argv[1]))==dict(email='user@example.com',key='abcdefghijklmnopqrstuv') | CODE |
| LOW | tests/test_docker_image_update_smoke.sh | 34 | printf '%s\n' '{"digest":"placeholder","last_updated":"2026-07-28T00:00:00Z"}' | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | network-optimize.sh | 581 | COMMENT | |
| LOW | ru/kejilion.sh | 2521 | echo "Отменен" | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | translate.py | 6 | CODE |