KEJILION.SH 一款全功能的Linux管理脚本!An all-in-one Linux management script!
This report summarizes scanner evidence for kejilion/sh, a Shell project with 3,401 GitHub stars. SynthScan examined 42,072 lines of code across 98 source files, recording 147 pattern matches distributed across 13 syntactic categories. The legacy adjusted pattern signal is 4.6 (Low 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.
Can maintainers explain intent, assumptions, and trade-offs? 110 finding(s).
Are imports declared and package/API names verified? 7 finding(s).
Are wrappers, guards, and repeated structures necessary? 123 finding(s).
Which changes need focused human review? 147 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 147 distinct pattern matches across 13 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 | 199 | def test_inherited_installer_lock_spans_child_update_and_home_removal(self): | STRING |
| LOW | tests/test_kpanel_light_node_update.py | 234 | def test_real_join_control_flow_excludes_join_update_and_uninstall_until_activation(self): | STRING |
| LOW | tests/test_kpanel_light_node_update.py | 309 | def test_quiet_mode_suppresses_progress_but_preserves_errors(self): | STRING |
| LOW | tests/test_kpanel_light_node_update.py | 323 | def test_upgrade_optional_failure_does_not_rollback_and_delayed_exec_is_accepted(self): | STRING |
| LOW | tests/test_kpanel_light_node_update.py | 334 | def test_openrc_update_restarts_current_binary_and_repairs_file_service(self): | STRING |
| LOW | tests/test_kpanel_light_node_update.py | 386 | def test_procd_update_repairs_service_and_keeps_backend(self): | STRING |
| LOW | tests/test_kpanel_light_node_update.py | 404 | def test_procd_failed_core_rolls_back_but_optional_failure_is_degraded(self): | STRING |
| LOW | tests/test_kpanel_light_node_update.py | 428 | def test_procd_running_false_is_not_treated_as_healthy_pid(self): | STRING |
| LOW | tests/test_kpanel_light_node_update.py | 437 | def test_procd_cron_preserves_unrelated_jobs_and_rejects_symlinks(self): | STRING |
| LOW | tests/test_kpanel_light_node_update.py | 460 | def test_monitoring_relay_cleanup_preserves_unknown_entries_and_symlinks(self): | STRING |
| LOW | tests/test_kpanel_light_node_update.py | 480 | def test_failed_core_rolls_back_and_restart_failure_cannot_be_masked(self): | STRING |
| LOW | tests/test_kpanel_light_node_update.py | 489 | def test_update_status_is_private_bounded_and_tracks_checks(self): | STRING |
| LOW | tests/test_kpanel_light_node_update.py | 508 | def test_update_status_rejects_symlink_without_overwriting_target(self): | STRING |
| LOW | tests/test_kpanel_light_node_update.py | 516 | def test_running_status_survives_kill_and_next_check_recovers(self): | STRING |
| LOW | tests/test_kpanel_light_node_update.py | 542 | def test_current_file_with_old_process_recovers_without_binary_download(self): | STRING |
| LOW | tests/test_kpanel_light_node_update.py | 553 | def test_legacy_config_permissions_recover_for_real_service_uid(self): | STRING |
| LOW | tests/test_kpanel_light_node_update.py | 561 | def test_known_legacy_file_unit_is_repaired_and_current_broker_restarts(self): | STRING |
| LOW | tests/test_kpanel_light_node_update.py | 574 | def test_custom_and_symlink_file_units_are_preserved(self): | STRING |
| LOW | tests/test_kpanel_light_node_update.py | 588 | def test_original_historical_file_unit_migrates_but_custom_variant_is_preserved(self): | STRING |
| LOW | tests/test_kpanel_light_node_update.py | 605 | def test_bad_checksum_and_network_failure_preserve_binary_then_retry_recovers(self): | STRING |
| LOW | tests/test_kpanel_light_node_update.py | 617 | def test_sigkill_releases_lock_and_legacy_handoff_blocks_only_live_process(self): | STRING |
| LOW | tests/test_kpanel_light_node_update.py | 634 | def test_orphaned_empty_lock_recovers_on_install_and_network_failure_releases_it(self): | STRING |
| LOW | tests/test_kpanel_light_node_update.py | 646 | def test_live_legacy_script_without_marker_is_preserved_even_after_replacement(self): | STRING |
| LOW | tests/test_kpanel_light_node_update.py | 667 | def test_unknown_lock_contents_and_symlinks_are_never_removed(self): | STRING |
| LOW | tests/test_kpanel_light_node_update.py | 682 | def test_invalid_legacy_identity_has_an_explicit_error(self): | STRING |
| LOW | tests/test_kpanel_light_node_update.py | 688 | def test_update_bridges_legacy_lock_and_recovers_after_sigkill(self): | STRING |
| LOW | tests/test_kpanel_light_node_update.py | 707 | def test_missing_or_untrusted_release_redirect_fails_visibly_before_binary_download(self): | STRING |
| LOW | tests/test_kpanel_light_node_update.py | 719 | def test_interrupt_reports_retry_and_releases_compatibility_lock(self): | STRING |
| LOW | tests/test_kpanel_light_node_update.py | 738 | def test_delivery_proxy_rewriting_keeps_release_origin_and_download_errors_are_visible(self): | STRING |
| LOW | tests/test_kpanel_light_node_update.py | 753 | def test_unreachable_github_installs_through_the_mirror(self): | STRING |
| LOW | tests/test_kpanel_light_node_update.py | 764 | def test_unreachable_release_cdn_keeps_the_manifest_release_through_the_mirror(self): | STRING |
| LOW | tests/test_kpanel_light_node_update.py | 775 | def test_mirror_downloads_are_still_verified_and_failures_name_both_sources(self): | STRING |
| LOW | tests/test_kpanel_light_node_update.py | 792 | def test_github_redirect_is_still_required_when_github_answers(self): | STRING |
| LOW | tests/test_kpanel_light_node_update.py | 799 | def test_unsafe_config_is_rejected_without_widening_permissions(self): | STRING |
| LOW⚡ | tests/test_kpanel_light_node_dependencies.py | 149 | def test_complete_dependencies_do_not_identify_family_or_run_manager(self): | STRING |
| LOW⚡ | tests/test_kpanel_light_node_dependencies.py | 155 | def test_openwrt_opkg_batches_split_packages_once(self): | STRING |
| LOW⚡ | tests/test_kpanel_light_node_dependencies.py | 161 | def test_openwrt_apk_uses_openwrt_names(self): | STRING |
| LOW⚡ | tests/test_kpanel_light_node_dependencies.py | 167 | def test_procd_derivative_metadata_selects_openwrt(self): | STRING |
| LOW⚡ | tests/test_kpanel_light_node_dependencies.py | 174 | def test_alpine_uses_minimal_flock_package_and_keeps_busybox_account_tools(self): | STRING |
| LOW⚡ | tests/test_kpanel_light_node_dependencies.py | 182 | def test_alpine_missing_addgroup_installs_account_provider(self): | STRING |
| LOW⚡ | tests/test_kpanel_light_node_dependencies.py | 189 | def test_debian_deduplicates_coreutils_and_installs_account_provider(self): | STRING |
| LOW⚡ | tests/test_kpanel_light_node_dependencies.py | 194 | def test_debian_openrc_logger_comes_from_bsdutils(self): | STRING |
| LOW⚡ | tests/test_kpanel_light_node_dependencies.py | 200 | def test_rpm_dnf_and_yum_mappings(self): | STRING |
| LOW⚡ | tests/test_kpanel_light_node_dependencies.py | 209 | def test_id_like_parsing_is_data_only(self): | STRING |
| LOW⚡ | tests/test_kpanel_light_node_dependencies.py | 216 | def test_unknown_family_does_not_guess_from_available_manager(self): | STRING |
| LOW⚡ | tests/test_kpanel_light_node_dependencies.py | 225 | def test_entware_manager_is_not_selected(self): | STRING |
| LOW⚡ | tests/test_kpanel_light_node_dependencies.py | 233 | def test_ambiguous_openwrt_managers_are_not_guessed(self): | STRING |
| LOW⚡ | tests/test_kpanel_light_node_dependencies.py | 240 | def test_index_failure_preserves_error_and_does_not_install(self): | STRING |
| LOW⚡ | tests/test_kpanel_light_node_dependencies.py | 249 | def test_install_failure_preserves_error_and_missing_commands(self): | STRING |
| LOW⚡ | tests/test_kpanel_light_node_dependencies.py | 258 | def test_success_exit_without_restored_tools_fails_recheck(self): | STRING |
| 33 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 |
|---|---|---|---|---|
| LOW | hermes_manager.sh | 231 | except Exception: | CODE |
| LOW | hermes_manager.sh | 252 | except Exception as e: | CODE |
| LOW | hermes_manager.sh | 341 | except Exception as e: | CODE |
| LOW | hermes_manager.sh | 873 | 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 |
|---|---|---|---|---|
| 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_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 |
|---|---|---|---|---|
| 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 |
|---|---|---|---|---|
| MEDIUM | deepseek_harness_manager.sh | 3 | # 官方项目:https://github.com/deepseek-ai/deepseek-harness | COMMENT |
| MEDIUM | deepseek_harness_manager.sh | 310 | # kejilion-deepseek-harness-managed\\ | COMMENT |
| MEDIUM | tests/test_deepseek_harness_manager.sh | 220 | grep -Fq '# kejilion-deepseek-harness-managed' "$webui_conf" | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | ir/to-fa.py | 38 | 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 | 301 | except ProcessLookupError: pass | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | deepseek_harness_manager.sh | 299 | # Open the file as the worker UID; BusyBox test -r may ignore POSIX ACLs. | COMMENT |
| LOW | ir/kejilion.sh | 2316 | # Check if the session already exists | COMMENT |
| LOW | ru/kejilion.sh | 2316 | # Check if the session already exists | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | beifen.sh | 3 | # Create a tar archive of the web directory | 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_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 | 2441 | # rx_units = "Bytes"; | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | translate.py | 6 | CODE |