一个简单好用的个人书库
This report presents the forensic synthetic code analysis of talebook/talebook, a JavaScript project with 5,567 GitHub stars. SynthScan v2.0 examined 187,319 lines of code across 510 source files, recording 985 pattern matches distributed across 15 syntactic categories. The overall adjusted score of 6.3 places this repository in the Low AI signal band.
The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).
This chart maps the temporal evolution of the adjusted synthetic code score across successive scan runs. An upward trajectory indicates ongoing incorporation of AI-generated code or expanding LLM-assisted scaffolding; a stable or declining trajectory may reflect active human refactoring, code removal, or the adoption of stricter authorship policies. The dashed secondary line (right axis) independently tracks total raw pattern hit count, which can diverge from the normalised score when codebase size changes significantly between scans.
Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.
This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.
The scanner identified 985 distinct pattern matches across 15 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. 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 diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | app/utils/builtin-themes.ts | 28 | export async function loadBuiltinThemeComponent(themeName: string, componentName: 'AppHeader' | 'AppFooter') { | CODE |
| LOW | app/utils/builtin-theme-overlay.ts | 466 | export function buildBuiltinThemeOverlayCss(themeName: BuiltinThemeName) { | CODE |
| LOW | app/public/static/candle-reader/js/epub-v0.3.88.js | 1 | (function webpackUniversalModuleDefinition(root, factory) { | CODE |
| LOW | app/public/static/candle-reader/js/epub-v0.3.88.js | 15121 | function checkIfLocalStorageThrows() { | CODE |
| LOW | app/public/static/candle-reader/js/epub-v0.3.88.js | 15606 | var methodNotImplementedFactory = function methodNotImplementedFactory(methodName) { | CODE |
| LOW | app/public/static/candle-reader/js/epub-v0.3.88.js | 15868 | value: function xmlHttpRequestOverrideMimeType() {} | CODE |
| LOW⚡ | app/public/static/pdfjs/web/viewer.js | 3061 | function webViewerPresentationMode() { | CODE |
| LOW⚡ | app/public/static/pdfjs/web/viewer.js | 3064 | function webViewerSwitchAnnotationEditorMode(evt) { | CODE |
| LOW⚡ | app/public/static/pdfjs/web/viewer.js | 3067 | function webViewerSwitchAnnotationEditorParams(evt) { | CODE |
| LOW⚡ | app/public/static/pdfjs/web/viewer.js | 3119 | function webViewerOptionalContentConfig(evt) { | CODE |
| LOW⚡ | app/public/static/pdfjs/web/viewer.js | 3122 | function webViewerSwitchScrollMode(evt) { | CODE |
| LOW⚡ | app/public/static/pdfjs/web/viewer.js | 3125 | function webViewerSwitchSpreadMode(evt) { | CODE |
| LOW⚡ | app/public/static/pdfjs/web/viewer.js | 3128 | function webViewerDocumentProperties() { | CODE |
| LOW | app/public/static/pdfjs/web/viewer.js | 291 | function backtrackBeforeAllVisibleElements(index, views, top) { | CODE |
| LOW | app/public/static/pdfjs/web/viewer.js | 321 | function isElementBottomAfterViewTop(view) { | CODE |
| LOW | app/public/static/pdfjs/web/viewer.js | 326 | function isElementNextAfterViewHorizontally(view) { | CODE |
| LOW | app/public/static/pdfjs/web/viewer.js | 395 | function normalizeWheelEventDirection(evt) { | CODE |
| LOW | app/public/static/pdfjs/web/viewer.js | 497 | function getActiveOrFocusedElement() { | CODE |
| LOW | app/public/static/pdfjs/web/viewer.js | 506 | function apiPageLayoutToViewerModes(layout) { | CODE |
| LOW | app/public/static/pdfjs/web/viewer.js | 565 | (function checkCanvasSizeLimitation() { | CODE |
| LOW | app/public/static/pdfjs/web/viewer.js | 2594 | function addWindowResolutionChange(evt = null) { | CODE |
| LOW | app/public/static/pdfjs/web/viewer.js | 2978 | function webViewerPresentationModeChanged(evt) { | CODE |
| LOW | app/public/static/pdfjs/web/viewer.js | 2981 | function webViewerSidebarViewChanged({ | CODE |
| LOW | app/public/static/pdfjs/web/viewer.js | 3006 | function webViewerScrollModeChanged(evt) { | CODE |
| LOW | app/public/static/pdfjs/web/viewer.js | 3011 | function webViewerSpreadModeChanged(evt) { | CODE |
| LOW | app/public/static/pdfjs/web/viewer.js | 3101 | function webViewerPageNumberChanged(evt) { | CODE |
| LOW | app/public/static/pdfjs/web/viewer.js | 3144 | function webViewerUpdateFindMatchesCount({ | CODE |
| LOW | app/public/static/pdfjs/web/viewer.js | 3153 | function webViewerUpdateFindControlState({ | CODE |
| LOW | app/public/static/pdfjs/web/viewer.js | 3174 | function webViewerRotationChanging(evt) { | CODE |
| LOW | app/public/static/pdfjs/web/viewer.js | 3193 | function webViewerResolutionChange(evt) { | CODE |
| LOW | app/public/static/pdfjs/web/viewer.js | 3196 | function webViewerVisibilityChange(evt) { | CODE |
| LOW | app/public/static/pdfjs/web/viewer.js | 3650 | function webViewerAnnotationEditorStatesChanged(data) { | CODE |
| LOW | app/public/static/pdfjs/web/viewer.js | 8327 | function isValidAnnotationEditorMode(mode) { | CODE |
| LOW | app/public/static/readium/lib/thirdparty/hammer.js | 303 | stopDefaultBrowserBehavior: function stopDefaultBrowserBehavior(element, css_props) { | CODE |
| LOW | …/public/static/readium/lib/thirdparty/jquery-1.11.0.js | 8631 | function addToPrefiltersOrTransports( structure ) { | CODE |
| LOW | …/public/static/readium/lib/thirdparty/jquery-1.11.0.js | 8663 | function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { | CODE |
| LOW | …/public/static/readium/lib/thirdparty/remotestorage.js | 3 | (function(window){var haveLocalStorage;var LS_STATE_KEY="remotestorage:widget:state";var VALID_ENTRY_STATES={initial:tru | CODE |
| LOW | tests/test_reading_state.py | 28 | def test_readstate_get_no_state(self): | CODE |
| LOW | tests/test_reading_state.py | 36 | def test_readstate_post_set_reading(self): | CODE |
| LOW⚡ | tests/test_reading_state.py | 48 | def test_readstate_post_set_read_done(self): | CODE |
| LOW⚡ | tests/test_reading_state.py | 57 | def test_readstate_post_invalid_state(self): | CODE |
| LOW⚡ | tests/test_reading_state.py | 62 | def test_readstate_post_nonexistent_book(self): | CODE |
| LOW | tests/test_reading_state.py | 108 | def test_favorite_nonexistent_book(self): | CODE |
| LOW | tests/test_reading_state.py | 165 | def test_shelf_nonexistent_book(self): | CODE |
| LOW | tests/test_reading_state.py | 185 | def test_progress_get_no_state(self): | CODE |
| LOW | tests/test_reading_state.py | 192 | def test_progress_post_and_get(self): | CODE |
| LOW | tests/test_reading_state.py | 208 | def test_progress_post_overwrites_previous(self): | CODE |
| LOW⚡ | tests/test_reading_state.py | 223 | def test_progress_post_invalid_payload(self): | CODE |
| LOW⚡ | tests/test_reading_state.py | 228 | def test_progress_post_too_large(self): | CODE |
| LOW⚡ | tests/test_reading_state.py | 233 | def test_progress_post_nonexistent_book(self): | CODE |
| LOW | tests/test_reading_state.py | 262 | def test_book_detail_no_state(self): | CODE |
| LOW | tests/test_reading_state.py | 274 | def test_book_detail_with_state(self): | CODE |
| LOW | tests/test_update_checker.py | 27 | def test_compare_versions_normalizes_v_prefix(self): | CODE |
| LOW | tests/test_update_checker.py | 31 | def test_compare_versions_only_true_for_newer_version(self): | CODE |
| LOW | tests/test_update_checker.py | 51 | def test_check_for_updates_does_not_report_same_version_with_v_prefix(self): | CODE |
| LOW | tests/test_update_checker.py | 62 | def test_check_for_updates_reports_only_newer_latest_release(self): | CODE |
| LOW⚡ | tests/test_admin.py | 30 | def test_settings_get_allowed_for_admin(self): | CODE |
| LOW⚡ | tests/test_admin.py | 36 | def test_settings_update_allowed_for_admin(self): | CODE |
| LOW⚡ | tests/test_admin.py | 43 | def test_settings_update_chunk_upload_settings(self): | CODE |
| LOW⚡ | tests/test_admin.py | 111 | def test_settings_dangerous_keys_ignored_for_non_whitelisted(self): | CODE |
| 316 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | CODE_WIKI.md | 1182 | except Exception as e: | CODE |
| LOW | .trae/documents/修改2.md | 94 | except Exception: | CODE |
| LOW | .trae/documents/修改3.md | 96 | except Exception as err: | CODE |
| LOW | .trae/documents/修改3.md | 115 | except Exception as err: | CODE |
| LOW | .trae/documents/修改3.md | 125 | except Exception as err: | CODE |
| LOW | .trae/documents/修改1.md | 68 | except Exception as e: | CODE |
| LOW | .trae/documents/修改1.md | 83 | except Exception as e: | CODE |
| LOW | .trae/documents/修改1.md | 121 | except Exception as e: | CODE |
| LOW | .trae/documents/修改1.md | 131 | except Exception as e: | CODE |
| LOW | .trae/documents/修改1.md | 146 | except Exception as e: | CODE |
| LOW | .trae/documents/修改1.md | 289 | except Exception as e: | CODE |
| LOW | .trae/documents/修改1.md | 343 | except Exception as e: | CODE |
| LOW | .trae/documents/修改1.md | 388 | except Exception as e: | CODE |
| LOW | .trae/documents/修改1.md | 413 | except Exception as e: | CODE |
| LOW | .trae/documents/修改1.md | 468 | except Exception as e: | CODE |
| LOW | .trae/documents/修改1.md | 507 | except Exception as e: | CODE |
| LOW | tools/tools.py | 83 | except Exception as e: | CODE |
| LOW | tests/cases/update_users_db.py | 96 | except Exception as e: | CODE |
| LOW | tests/cases/update_users_db.py | 132 | except Exception as e: | CODE |
| LOW | tests/cases/update_users_db.py | 197 | except Exception as e: | CODE |
| LOW | webserver/models.py | 56 | except Exception: | CODE |
| LOW | webserver/migrate_db.py | 114 | except Exception as e: | CODE |
| LOW | webserver/migrate_db.py | 155 | except Exception as e: | CODE |
| LOW | webserver/migrate_db.py | 212 | except Exception as e: | CODE |
| LOW⚡ | webserver/migrate_db.py | 271 | except Exception as e: | CODE |
| LOW⚡ | webserver/migrate_db.py | 279 | except Exception as e: | CODE |
| LOW⚡ | webserver/migrate_db.py | 287 | except Exception as e: | CODE |
| LOW | webserver/utils.py | 54 | except Exception as e: | CODE |
| LOW | webserver/i18n.py | 104 | except Exception: | STRING |
| LOW | webserver/i18n.py | 130 | except Exception: | STRING |
| LOW | webserver/main.py | 101 | except Exception as e: | CODE |
| LOW | webserver/main.py | 342 | except Exception as e: | CODE |
| LOW | webserver/plugins/meta/qimao/api.py | 133 | except Exception as e: | CODE |
| LOW | webserver/plugins/meta/qimao/api.py | 150 | except Exception as e: | CODE |
| LOW | webserver/plugins/meta/qimao/api.py | 247 | except Exception as e: | CODE |
| LOW | webserver/plugins/meta/qimao/api.py | 260 | except Exception as e: | CODE |
| LOW | webserver/plugins/meta/calibre/api.py | 33 | except Exception as e: | CODE |
| LOW | webserver/plugins/meta/calibre/api.py | 99 | except Exception as e: | CODE |
| LOW | webserver/plugins/meta/calibre/api.py | 130 | except Exception as e: | CODE |
| LOW | webserver/plugins/meta/baike/api.py | 35 | except Exception as err: | CODE |
| LOW | webserver/plugins/meta/baike/api.py | 70 | except Exception as e: | CODE |
| LOW | webserver/plugins/meta/baike/api.py | 107 | except Exception as e: | CODE |
| MEDIUM | webserver/plugins/meta/baike/api.py | 32 | def _baike(self, title): | CODE |
| LOW | webserver/plugins/meta/douban/api.py | 94 | except Exception as e: | CODE |
| LOW | webserver/plugins/meta/douban/api.py | 178 | except Exception as e: | CODE |
| LOW | webserver/plugins/meta/douban/api.py | 227 | except Exception as err: | CODE |
| LOW | webserver/plugins/meta/douban/api.py | 236 | except Exception as err: | CODE |
| LOW | webserver/plugins/meta/douban_v2/plugin.py | 28 | except Exception as e: | CODE |
| LOW | webserver/plugins/meta/douban_v2/plugin.py | 43 | except Exception: | CODE |
| LOW | webserver/plugins/meta/douban_v2/plugin.py | 63 | except Exception: | CODE |
| LOW | webserver/plugins/meta/douban_v2/plugin.py | 86 | except Exception: | CODE |
| LOW | webserver/plugins/meta/xhsd/api.py | 82 | except Exception as e: | CODE |
| LOW | webserver/plugins/meta/xhsd/api.py | 169 | except Exception as e: | CODE |
| LOW | webserver/plugins/meta/xhsd/api.py | 205 | except Exception as e: | CODE |
| LOW | webserver/plugins/meta/xhsd/api.py | 236 | except Exception as e: | CODE |
| LOW | webserver/plugins/meta/ai/api.py | 113 | except Exception as err: | STRING |
| LOW | webserver/plugins/meta/ai/api.py | 180 | except Exception as e: | STRING |
| LOW | webserver/plugins/meta/ai/api.py | 195 | except Exception as e: | STRING |
| LOW | webserver/plugins/meta/youshu/api.py | 38 | except Exception as err: | CODE |
| LOW | webserver/plugins/meta/youshu/api.py | 142 | except Exception as err: | CODE |
| 230 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | tests/test_booksource_engine.py | 202 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_booksource_engine.py | 204 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_booksource_engine.py | 254 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_booksource_engine.py | 256 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_booksource_engine.py | 277 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_booksource_engine.py | 279 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_booksource_engine.py | 449 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_booksource_engine.py | 451 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_booksource_engine.py | 69 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_booksource_engine.py | 71 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_booksource_engine.py | 544 | # -------------------------------------------------------------------------- | STRING |
| MEDIUM⚡ | tests/test_booksource_engine.py | 546 | # -------------------------------------------------------------------------- | STRING |
| MEDIUM | webserver/plugins/meta/qimao/api.py | 21 | # ============================================================ | COMMENT |
| MEDIUM | webserver/plugins/meta/qimao/api.py | 23 | # ============================================================ | COMMENT |
| MEDIUM | webserver/plugins/meta/qimao/api.py | 61 | # ============================================================ | COMMENT |
| MEDIUM | webserver/plugins/meta/qimao/api.py | 63 | # ============================================================ | COMMENT |
| MEDIUM | webserver/plugins/meta/qimao/api.py | 94 | # ============================================================ | COMMENT |
| MEDIUM | webserver/plugins/meta/qimao/api.py | 96 | # ============================================================ | COMMENT |
| MEDIUM | webserver/services/booksource/rule_dispatch.py | 49 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM | webserver/services/booksource/rule_dispatch.py | 51 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM | webserver/services/booksource/rule_dispatch.py | 83 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM | webserver/services/booksource/rule_dispatch.py | 85 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM | webserver/services/booksource/rule_dispatch.py | 271 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM | webserver/services/booksource/rule_dispatch.py | 273 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | webserver/services/booksource/rule_dispatch.py | 310 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | webserver/services/booksource/rule_dispatch.py | 312 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM | webserver/services/booksource/analyze_url.py | 55 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | webserver/services/booksource/analyze_url.py | 145 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | webserver/services/booksource/engine.py | 167 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | webserver/services/booksource/engine.py | 225 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | webserver/services/booksource/engine.py | 247 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | webserver/services/booksource/engine.py | 296 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | webserver/services/booksource/engine.py | 338 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | webserver/services/booksource/analyze_rule.py | 75 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | webserver/services/booksource/analyze_rule.py | 77 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | webserver/services/booksource/analyze_rule.py | 211 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | webserver/services/booksource/analyze_rule.py | 213 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | .github/workflows/build.yml | 24 | # ---------------------------------------- | COMMENT |
| MEDIUM | .github/workflows/build.yml | 55 | # ---------------------------------------- | COMMENT |
| MEDIUM | .github/workflows/build.yml | 147 | # ---------------------------------------- | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | server.py | 8 | CODE | |
| LOW | tools/orzbook-spider.py | 5 | CODE | |
| LOW | tools/mebook-spider.py | 5 | CODE | |
| LOW | tests/test_reading_state.py | 5 | CODE | |
| LOW | tests/run.py | 12 | CODE | |
| LOW | tests/run.py | 13 | CODE | |
| LOW | tests/run.py | 14 | CODE | |
| LOW | tests/run.py | 15 | CODE | |
| LOW | tests/run.py | 16 | CODE | |
| LOW | tests/run.py | 17 | CODE | |
| LOW | tests/run.py | 18 | CODE | |
| LOW | tests/run.py | 19 | CODE | |
| LOW | tests/run.py | 20 | CODE | |
| LOW | tests/run.py | 21 | CODE | |
| LOW | tests/test_baike.py | 8 | CODE | |
| LOW | tests/test_tomato_novel.py | 22 | CODE | |
| LOW | tests/test_tomato_novel.py | 22 | CODE | |
| LOW | tests/test_scan.py | 5 | CODE | |
| LOW | tests/test_scan.py | 10 | CODE | |
| LOW | tests/test_scan.py | 17 | CODE | |
| LOW | tests/test_captcha.py | 12 | CODE | |
| LOW | tests/test_upload.py | 9 | CODE | |
| LOW | tests/test_book_formats.py | 9 | CODE | |
| LOW | tests/test_main.py | 26 | CODE | |
| LOW | webserver/main.py | 100 | CODE | |
| LOW | webserver/plugins/meta/__init__.py | 4 | CODE | |
| LOW | webserver/plugins/meta/__init__.py | 4 | CODE | |
| LOW | webserver/plugins/meta/__init__.py | 4 | CODE | |
| LOW | webserver/plugins/meta/__init__.py | 5 | CODE | |
| LOW | webserver/plugins/meta/__init__.py | 5 | CODE | |
| LOW | webserver/plugins/meta/__init__.py | 8 | CODE | |
| LOW | webserver/plugins/meta/__init__.py | 8 | CODE | |
| LOW | webserver/plugins/meta/__init__.py | 11 | CODE | |
| LOW | webserver/plugins/meta/__init__.py | 11 | CODE | |
| LOW | webserver/plugins/meta/__init__.py | 11 | CODE | |
| LOW | webserver/plugins/meta/__init__.py | 14 | CODE | |
| LOW | webserver/plugins/meta/__init__.py | 14 | CODE | |
| LOW | webserver/plugins/meta/__init__.py | 14 | CODE | |
| LOW | webserver/plugins/meta/__init__.py | 17 | CODE | |
| LOW | webserver/plugins/meta/__init__.py | 17 | CODE | |
| LOW | webserver/plugins/meta/__init__.py | 17 | CODE | |
| LOW | webserver/plugins/meta/__init__.py | 18 | CODE | |
| LOW | webserver/plugins/meta/__init__.py | 21 | CODE | |
| LOW | webserver/plugins/meta/__init__.py | 21 | CODE | |
| LOW | webserver/plugins/meta/__init__.py | 21 | CODE | |
| LOW | webserver/plugins/meta/qimao/__init__.py | 2 | CODE | |
| LOW | webserver/plugins/meta/qimao/__init__.py | 2 | CODE | |
| LOW | webserver/plugins/meta/qimao/__init__.py | 2 | CODE | |
| LOW | webserver/plugins/meta/calibre/__init__.py | 2 | CODE | |
| LOW | webserver/plugins/meta/calibre/__init__.py | 2 | CODE | |
| LOW | webserver/plugins/meta/baike/__init__.py | 1 | CODE | |
| LOW | webserver/plugins/meta/baike/__init__.py | 1 | CODE | |
| LOW | webserver/plugins/meta/baike/__init__.py | 1 | CODE | |
| LOW | webserver/plugins/meta/douban/__init__.py | 1 | CODE | |
| LOW | webserver/plugins/meta/douban/__init__.py | 1 | CODE | |
| LOW | webserver/plugins/meta/douban/__init__.py | 1 | CODE | |
| LOW | webserver/plugins/meta/douban/__init__.py | 1 | CODE | |
| LOW | webserver/plugins/meta/douban/__init__.py | 1 | CODE | |
| LOW | webserver/plugins/meta/douban/__init__.py | 1 | CODE | |
| LOW | webserver/plugins/meta/douban/__init__.py | 1 | CODE | |
| 32 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL⚡ | app/public/static/candle-reader/js/epub-v0.3.88.js | 9786 | this.book.spine.hooks.content.register(this.injectIdentifier.bind(this)); | CODE |
| CRITICAL⚡ | app/public/static/candle-reader/js/epub-v0.3.88.js | 9789 | this.book.spine.hooks.content.register(this.injectStylesheet.bind(this)); | CODE |
| CRITICAL⚡ | app/public/static/candle-reader/js/epub-v0.3.88.js | 9793 | this.book.spine.hooks.content.register(this.injectScript.bind(this)); | CODE |
| CRITICAL⚡ | app/public/static/epubreader/js/libs/epub.min.js | 1 | !function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e(require("JSZip")):"function"==typeof d | CODE |
| CRITICAL | app/public/static/js/jquery-1.11.1.min.js | 4 | },cur:function(){var a=Zb.propHooks[this.prop];return a&&a.get?a.get(this):Zb.propHooks._default.get(this)},run:function | CODE |
| CRITICAL | …/public/static/readium/lib/thirdparty/jquery-1.11.0.js | 8058 | jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) { | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tools/kgbook.com/spider.py | 84 | CODE | |
| LOW | tests/test_admin.py | 241 | CODE | |
| LOW | tests/test_admin.py | 285 | CODE | |
| LOW | tests/test_admin.py | 313 | CODE | |
| LOW | tests/test_book_formats.py | 105 | CODE | |
| LOW | tests/test_book_formats.py | 158 | CODE | |
| LOW | tests/cases/update_users_db.py | 41 | CODE | |
| LOW | tests/cases/update_users_db.py | 65 | CODE | |
| LOW | tests/cases/update_users_db.py | 104 | CODE | |
| LOW | tests/cases/update_users_db.py | 140 | CODE | |
| LOW | tests/cases/update_users_db.py | 208 | CODE | |
| LOW | tests/cases/update_users_db.py | 241 | CODE | |
| LOW | webserver/migrate_db.py | 53 | CODE | |
| LOW | webserver/migrate_db.py | 79 | CODE | |
| LOW | webserver/migrate_db.py | 122 | CODE | |
| LOW | webserver/migrate_db.py | 223 | CODE | |
| LOW | webserver/migrate_db.py | 305 | CODE | |
| LOW | webserver/plugins/meta/qimao/api.py | 161 | CODE | |
| LOW | webserver/plugins/meta/calibre/api.py | 105 | CODE | |
| LOW | webserver/plugins/meta/douban_v2/api.py | 130 | CODE | |
| LOW | webserver/plugins/meta/xhsd/api.py | 98 | CODE | |
| LOW | webserver/plugins/meta/xhsd/api.py | 211 | CODE | |
| LOW | webserver/plugins/meta/neodb/api.py | 35 | CODE | |
| LOW | webserver/plugins/meta/neodb/plugin.py | 43 | CODE | |
| LOW | webserver/plugins/meta/biquge/api.py | 48 | CODE | |
| LOW | webserver/plugins/meta/tomato/api.py | 82 | CODE | |
| LOW | webserver/plugins/meta/tomato/tomato/tomato.py | 69 | CODE | |
| LOW | webserver/plugins/meta/tomato/tomato/tomato.py | 87 | CODE | |
| LOW | webserver/plugins/meta/tomato/tomato/tomato.py | 107 | CODE | |
| LOW | webserver/plugins/meta/tomato/tomato/tomato.py | 138 | CODE | |
| LOW | webserver/plugins/meta/tomato/tomato/tomato.py | 235 | CODE | |
| LOW | webserver/plugins/meta/tomato/tomato/tomato.py | 392 | CODE | |
| LOW | webserver/plugins/meta/tomato/tomato/tomato.py | 457 | CODE | |
| LOW | webserver/webdav/server.py | 14 | CODE | |
| LOW | webserver/webdav/dav_provider.py | 158 | CODE | |
| LOW | webserver/webdav/dav_provider.py | 186 | CODE | |
| LOW | webserver/webdav/dav_provider.py | 336 | CODE | |
| LOW | webserver/webdav/dav_provider.py | 427 | CODE | |
| LOW | webserver/webdav/dav_provider.py | 468 | CODE | |
| LOW | webserver/webdav/dav_provider.py | 499 | CODE | |
| LOW | webserver/webdav/dav_provider.py | 584 | CODE | |
| LOW | webserver/webdav/dav_provider.py | 610 | CODE | |
| LOW | webserver/webdav/dav_provider.py | 632 | CODE | |
| LOW | webserver/webdav/dav_provider.py | 654 | CODE | |
| LOW | webserver/webdav/dav_provider.py | 677 | CODE | |
| LOW | webserver/webdav/dav_provider.py | 699 | CODE | |
| LOW | webserver/handlers/user.py | 448 | CODE | |
| LOW | webserver/handlers/booksource_admin.py | 61 | CODE | |
| LOW | webserver/handlers/opds.py | 170 | CODE | |
| LOW | webserver/handlers/opds.py | 230 | CODE | |
| LOW | webserver/handlers/admin.py | 351 | CODE | |
| LOW | webserver/handlers/admin.py | 743 | CODE | |
| LOW | webserver/handlers/admin.py | 928 | CODE | |
| LOW | webserver/handlers/admin.py | 1151 | CODE | |
| LOW | webserver/handlers/book.py | 256 | CODE | |
| LOW | webserver/handlers/book.py | 436 | CODE | |
| LOW | webserver/handlers/book.py | 675 | CODE | |
| LOW | webserver/handlers/book.py | 749 | CODE | |
| LOW | webserver/handlers/book.py | 1221 | CODE | |
| LOW | webserver/handlers/book.py | 1406 | CODE | |
| 33 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | app/public/static/candle-reader/js/epub-v0.3.88.js | 10521 | */ | COMMENT |
| LOW | app/public/static/candle-reader/js/epub-v0.3.88.js | 13401 | // since Safari 10.1 shipped with fetch, we can use that to detect it | COMMENT |
| LOW | app/public/static/candle-reader/js/epub-v0.3.88.js | 13501 | var length = bin.length; | COMMENT |
| LOW | app/public/static/candle-reader/js/epub-v0.3.88.js | 14601 | // keeping localStorage support intact. | COMMENT |
| LOW | app/public/static/candle-reader/js/epub-v0.3.88.js | 22961 | //# sourceMappingURL=epub.js.map | COMMENT |
| LOW | app/public/static/readium/Gruntfile.js | 1 | // Copyright (c) 2014 Readium Foundation and/or its licensees. All rights reserved. | COMMENT |
| LOW | app/public/static/readium/require_config.js | 1 | // Copyright (c) 2014 Readium Foundation and/or its licensees. All rights reserved. | COMMENT |
| LOW | app/public/static/readium/extend_require_config.js | 1 | // Copyright (c) 2014 Readium Foundation and/or its licensees. All rights reserved. | COMMENT |
| LOW | app/public/static/readium/css/viewer_audio.css | 441 | COMMENT | |
| LOW | app/public/static/readium/grunt/run_grunt.js | 1 | // Copyright (c) 2014 Readium Foundation and/or its licensees. All rights reserved. | COMMENT |
| LOW | app/public/static/readium/grunt/copy.js | 1 | // Copyright (c) 2014 Readium Foundation and/or its licensees. All rights reserved. | COMMENT |
| LOW | app/public/static/readium/grunt/copy.js | 101 | }, | COMMENT |
| LOW | app/public/static/readium/grunt/copy.js | 121 | // dest: 'build/tests/chrome-app' | COMMENT |
| LOW | app/public/static/readium/grunt/requirejs.js | 1 | // Copyright (c) 2014 Readium Foundation and/or its licensees. All rights reserved. | COMMENT |
| LOW | app/public/static/readium/grunt/concurrent.js | 1 | // Copyright (c) 2014 Readium Foundation and/or its licensees. All rights reserved. | COMMENT |
| LOW | app/public/static/readium/grunt/nodeunit.js | 1 | // Copyright (c) 2014 Readium Foundation and/or its licensees. All rights reserved. | COMMENT |
| LOW | app/public/static/readium/grunt/clean.js | 1 | // Copyright (c) 2014 Readium Foundation and/or its licensees. All rights reserved. | COMMENT |
| LOW | app/public/static/readium/grunt/express.js | 1 | // Copyright (c) 2014 Readium Foundation and/or its licensees. All rights reserved. | COMMENT |
| LOW | app/public/static/readium/grunt/watch.js | 1 | // Copyright (c) 2014 Readium Foundation and/or its licensees. All rights reserved. | COMMENT |
| LOW | app/public/static/readium/grunt/aliases.js | 1 | // Copyright (c) 2014 Readium Foundation and/or its licensees. All rights reserved. | COMMENT |
| LOW | app/public/static/readium/grunt/cssmin.js | 1 | // Copyright (c) 2014 Readium Foundation and/or its licensees. All rights reserved. | COMMENT |
| LOW | app/public/static/readium/grunt/versioning.js | 1 | // Copyright (c) 2014 Readium Foundation and/or its licensees. All rights reserved. | COMMENT |
| LOW | …ic/static/readium/lib/ReaderSettingsDialog_Keyboard.js | 221 | // key.setScope("captureKeyboardShortcut"); | COMMENT |
| LOW | …ic/static/readium/lib/ReaderSettingsDialog_Keyboard.js | 241 | // | COMMENT |
| LOW | app/public/static/readium/lib/require.js | 1821 | node; | COMMENT |
| LOW | app/public/static/readium/lib/require.js | 1841 | //if we can NOT find [native code] then it must NOT natively supported. | COMMENT |
| LOW | app/public/static/readium/lib/Keyboard.js | 101 | // } | COMMENT |
| LOW | app/public/static/readium/lib/Keyboard.js | 321 | // //var newE = jQuery.extend(true, {}, e);// deep copy | COMMENT |
| LOW | app/public/static/readium/lib/EpubReader.js | 161 | // var href = $that.attr("href"); | COMMENT |
| LOW | app/public/static/readium/lib/gestures.js | 1 | // Copyright (c) 2014 Readium Foundation and/or its licensees. All rights reserved. | COMMENT |
| LOW | …lic/static/readium/lib/storage/RemoteStorageManager.js | 81 | // if (wireClient.href && wireClient.token){ | COMMENT |
| LOW | …ublic/static/readium/lib/workers/ContentTransformer.js | 1 | // Copyright (c) 2014 Readium Foundation and/or its licensees. All rights reserved. | COMMENT |
| LOW | app/public/static/readium/lib/thirdparty/deflate.js | 581 | // - if compression is not successful for the first block, all input | COMMENT |
| LOW | app/public/static/readium/lib/thirdparty/deflate.js | 1161 | more--; | COMMENT |
| LOW | app/public/static/readium/lib/thirdparty/deflate.js | 1201 | return; | COMMENT |
| LOW | app/public/static/readium/lib/thirdparty/deflate.js | 1221 | } | COMMENT |
| LOW | app/public/static/readium/lib/thirdparty/json2.js | 441 | if (cx.test(text)) { | COMMENT |
| LOW | …/public/static/readium/lib/thirdparty/jquery-1.11.0.js | 1201 | if ( (support.qsa = rnative.test( doc.querySelectorAll )) ) { | COMMENT |
| LOW | …/public/static/readium/lib/thirdparty/jquery-1.11.0.js | 9641 | // X-Requested-With header | COMMENT |
| LOW | …ublic/static/readium/lib/thirdparty/backbone-0.9.10.js | 1 | // Backbone.js 0.9.10 | COMMENT |
| LOW | …ublic/static/readium/lib/thirdparty/backbone-0.9.10.js | 101 | return; | COMMENT |
| LOW | …ublic/static/readium/lib/thirdparty/backbone-0.9.10.js | 1281 | this.$el = element instanceof Backbone.$ ? element : Backbone.$(element); | COMMENT |
| LOW | …ublic/static/readium/lib/thirdparty/backbone-0.9.10.js | 1361 | 'update': 'PUT', | COMMENT |
| LOW | app/public/static/readium/i18n/Strings.js | 1 | // Copyright (c) 2014 Readium Foundation and/or its licensees. All rights reserved. | COMMENT |
| LOW | webserver/plugins/meta/neodb/api.py | 1 | #!/usr/bin/env python3 | COMMENT |
| LOW | .github/workflows/claude-code-review.yml | 1 | name: Claude Code Review | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | app/public/static/candle-reader/candle-reader.umd.js | 19 | ${O}`);return}else m.add(g);h&&g!==h&&i.value.set(g,h),S&&n.value.set(g,[]),h!=null&&n.value.set(h,[...n.value.get(h)|| | CODE |
| MEDIUM | app/public/static/candle-reader/js/epub-v0.3.88.js | 11238 | this.iframe.seamless = "seamless"; // Back up if seamless isn't supported | CODE |
| LOW | app/public/static/candle-reader/js/epub-v0.3.88.js | 20911 | // #match works fine because it just return the exec results, even if it has | COMMENT |
| MEDIUM⚡ | app/public/static/epubreader/js/libs/epub.min.js | 1 | !function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e(require("JSZip")):"function"==typeof d | CODE |
| MEDIUM⚡ | app/public/static/epubreader/js/libs/epub.min.js | 1 | !function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e(require("JSZip")):"function"==typeof d | CODE |
| MEDIUM | …/public/static/readium/lib/thirdparty/jquery-1.11.0.js | 10292 | // understands anonymous AMD modules. A named AMD is safest and most robust | COMMENT |
| MEDIUM | app/playwright-report/index.html | 58 | `).replace(eA,"")}function Wd(t,e){return e=Fd(e),Fd(t)===e}function Dt(t,e,n,a,i,s){switch(n){case"children":typeof a== | CODE |
| LOW | webserver/models.py | 30 | # for python3, just use: crypt.mksalt(crypt.METHOD_SHA512) | COMMENT |
| LOW | webserver/plugins/meta/xhsd/api.py | 220 | # but for now let's just return what we get unless it's strictly required by Calibre to be JPG. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | app/test/mock-server.js | 237 | email: 'admin@example.com', | CODE |
| LOW | app/test/e2e/install.spec.ts | 75 | await page.getByLabel('管理员Email').fill('admin@example.com'); | CODE |
| LOW | app/test/e2e/admin.spec.ts | 28 | await expect(page.locator('tbody tr').first()).toContainText('admin@example.com'); | CODE |
| LOW | …ic/static/readium/lib/ReaderSettingsDialog_Keyboard.js | 62 | var thatOriginal = $that.attr("placeholder"); | CODE |
| LOW | …ic/static/readium/lib/ReaderSettingsDialog_Keyboard.js | 73 | var selfOriginal = $self.attr("placeholder"); | CODE |
| LOW | …ic/static/readium/lib/ReaderSettingsDialog_Keyboard.js | 265 | //$input.val($input.attr("placeholder")); | COMMENT |
| LOW | …ic/static/readium/lib/ReaderSettingsDialog_Keyboard.js | 279 | //$input.val($input.attr("placeholder")); | COMMENT |
| LOW | …ic/static/readium/lib/ReaderSettingsDialog_Keyboard.js | 299 | var original = $that.attr("placeholder"); | CODE |
| LOW | …p/public/static/readium/templates/settings-dialog.html | 24 | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus neque dui, congue a suscipit no | CODE |
| LOW | …p/public/static/readium/templates/settings-dialog.html | 24 | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus neque dui, congue a suscipit no | CODE |
| LOW | app/i18n/locales/zh-CN.json | 550 | "placeholder": { | CODE |
| LOW | app/i18n/locales/zh-CN.json | 635 | "placeholder": { | CODE |
| LOW | app/i18n/locales/zh-CN.json | 897 | "placeholder": { | CODE |
| LOW | app/i18n/locales/en-US.json | 605 | "placeholder": { | CODE |
| LOW | app/i18n/locales/en-US.json | 867 | "placeholder": { | CODE |
| LOW | app/i18n/locales/en-US.json | 909 | "placeholder": { | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | webserver/plugins/meta/xhsd/api.py | 32 | # Only support ISBN query as requested | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | app/public/static/readium/lib/thirdparty/zip-ext.js | 47 | function getData(callback, onerror) { | CODE |
| LOW | app/public/static/readium/lib/thirdparty/zip-ext.js | 166 | function getData(callback) { | CODE |
| LOW | app/public/static/readium/lib/thirdparty/zip-ext.js | 199 | function getData(callback) { | CODE |
| LOW | app/public/static/readium/lib/thirdparty/zip-fs.js | 51 | function getData(callback) { | CODE |
| LOW | app/public/static/readium/lib/thirdparty/zip.js | 211 | function getData(callback, onerror) { | CODE |
| LOW | app/public/static/readium/lib/thirdparty/zip.js | 249 | function getData(callback) { | CODE |
| LOW | app/public/static/readium/lib/thirdparty/zip.js | 277 | function getData(callback) { | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | webserver/plugins/meta/baike/api.py | 23 | # Check if the title is start with *[0-9][_-] then remote the prefix | COMMENT |
| LOW | webserver/plugins/meta/xhsd/api.py | 33 | # Check if title looks like an ISBN | COMMENT |
| LOW | scripts/check_i18n_translation_useless.py | 102 | # Check if used in code (exact match) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_webdav.py | 23 | logger = logging.getLogger(__name__) | CODE |
| LOW | tests/cases/update_users_db.py | 33 | logger = logging.getLogger(__name__) | CODE |
| LOW | webserver/migrate_db.py | 42 | logger = logging.getLogger(__name__) | CODE |
| LOW | webserver/services/booksource/__init__.py | 12 | __all__ = [ | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | app/public/static/candle-reader/candle-reader.umd.js | 8 | `],...Bm(n))}),t}function Bm({vnode:e,recurseCount:t}){const n=t>0?`... (${t} recursive calls)`:"",i=e.component?e.compo | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | app/public/static/candle-reader/js/epub-v0.3.88.js | 1043 | toString() {// TODO: implement walking between start and end to find text | CODE |