Публічний реєстр
Звіт про здоров'я програмного забезпеченнясхема 0.27.0 · метрики 1.13.0 · 2026-07-24 17:46 UTC

qaiu / netdisk-fast-download

聚合多种主流网盘的直链解析下载服务, 一键解析下载,已支持夸克网盘/uc网盘/蓝奏云/蓝奏优享/小飞机盘/123云盘等. 支持文件夹分享解析. 体验地址: https://lz.qaiu.top https://189.qaiu.top

Java · VueMIT★ 3 008 зірок⑂ 265 форківз квіт. 2023 р.Переглянути на GitHub ↗

qaiu/netdisk-fast-download має індекс здоров’я 67 зі 100, що відповідає смузі «Помірний». Найвищий показник — Vitality (91/100), найнижчий — Security (43/100). Останнє оновлення було 2 дні тому. Більшість нещодавньої роботи виконує один учасник.

67
загалом / 100
Помірний

Індекс здоров'я програмного забезпечення

Метрики згруповано у зважені категорії на шкалі 1–100. Загальна оцінка починається як їхнє середнє; коли публічні дані активують Політику юрисдикцій високого ризику, рейтинг коригується й отримує верхню межу 49 («Під ризиком»). Готовність до ШІ не входить до індексу.

67
Відмінний85-100Зразковий; відповідає практично всім перевіреним критеріям
Добрий70-84Здоровий; незначні прогалини
Помірний50-69Прийнятний, але з помітними прогалинами; рекомендовано перевірку
У зоні ризику30-49Суттєві слабкі місця; впровадження потребує обережності
Критичний1-29Серйозні проблеми (покинутий, єдиний мейнтейнер, без базової гігієни)
ЖиттєздатністьСпільнота тавпровадженняСталість таврядуванняІнженернаякістьБезпекаГотовність доШІ

Профіль оцінок

Кожна вісь — окрема категорія. Форма важить більше, ніж середнє: здоровий об'єкт заповнює всю фігуру, тоді як профіль із піками та провалами означає, що сила в одному вимірі маскує ризик в іншому.

Власність

qaiuОсобистий обліковий запис
121 підписник31 публічний репозиторійз лип. 2017 р.qaiu

Цей репозиторій належить особистому обліковому запису. Проєкт з єдиним власником несе більший ризик безперервності, ніж підтримуваний організацією.

Пакетні екосистеми

РеєстрПакетВерсіяЗавантажень / місВерсіїОстання публікація
Mavencn.qaiu:coreвказує на інший репозиторій — не оцінюється1.2.3-5148 днів тому
Mavencn.qaiu:parser10.2.5-12149 днів тому
Mavencn.qaiu:core-databaseвказує на інший репозиторій — не оцінюється1.2.3-5148 днів тому

Метрики за категоріями

Життєздатність

Чи живий проєкт — чи пишеться код і чи виходять релізи?

91Відмінний · 22% загального індексу
Як обчислюється оцінка
36/36Свіжість push — останній push 2 дн. тому
27.7/36Ритм комітів — 40/52 тижнів із комітами
18/18Обсяг комітів — 544 комітів за останній рік
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 5 issue activity found in the last 90 days -- score normalized to 10
Використані вхідні дані
commits_last_year544
human_commit_share0,98
days_since_last_push2
active_weeks_last_year40
Як обчислюється оцінка
27/27Випускає релізи — опубліковано 21 релізів
36/36Свіжість релізів — останній реліз 3 дн. тому
27/27Ритм релізів — реліз кожні ~18,9 дн.
0/10OpenSSF Scorecard: Signed-Releases — Project has not signed or included provenance with any releases.
Використані вхідні дані
releases_count21
latest_release_tagdependabot/npm_and_yarn/web-front/npm_and_yarn-c42958dede
releases_from_tagsні
days_since_latest_release3
mean_days_between_releases18,9

Спільнота та впровадження

Чи має проєкт користувачів, завантаження, увагу та влаштовані умови для контриб’юторів?

68Помірний · 18% загального індексу
Як обчислюється оцінка
56.4/60Зірки — 3 008 зірок
20.2/25Форки — 265 форків
6.2/15Спостерігачі — 14 спостерігачів
Використані вхідні дані
forks265
stars3 008
watchers14
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Як обчислюється оцінка
22.5/22.5README
22.5/22.5Ліцензія — визнана ліцензія (MIT)
0/18Настанови CONTRIBUTING
0/13.5Кодекс поведінки
0/7.2Шаблон issue
0/6.3Шаблон PR
Використані вхідні дані
has_readmeтак
has_licenseтак
has_contributingні
has_issue_templateні
has_code_of_conductні
has_pull_request_templateні

Сталість та врядування

Чи переживе проєкт своїх людей — бас-фактор, реактивність, хто за ним стоїть і як супроводжуються пакети?

61Помірний · 24% загального індексу
Як обчислюється оцінка
9/54Бас-фактор — на 1 контриб’ютор(ів) припадає половина всіх комітів
4.4/22.5Розподіл комітів — головний контриб’ютор — автор 80% комітів
9.5/13.5Широта контриб’юторів — 7 контриб’юторів
6/10OpenSSF Scorecard: Contributors — project has 2 contributing companies or organizations -- score normalized to 6
Використані вхідні дані
bus_factor1
contributors_sampled7
top_contributor_share0,805
Як обчислюється оцінка
41.1/46.8Вирішення issue — закрито 88% issue
26/38.3Прийняття PR — злито 55/81 вирішених PR
1.5/15OpenSSF Scorecard: Code-Review — Found 3/18 approved changesets -- score normalized to 1
Використані вхідні дані
merged_prs55
open_issues14
closed_issues103
issue_closed_ratio0,88
closed_unmerged_prs26
Як обчислюється оцінка
10/30Підтримка власника — особистий (користувацький) обліковий запис
0/20Верифікований домен — не застосовно до користувацьких облікових записів
15/25Охоплення власника — 121 підписників у qaiu
23/25Послужний список — 31 публічних репозиторіїв, вік облікового запису ~9 р.
Використані вхідні дані
followers121
owner_typeUser
is_verified
owner_loginqaiu
public_repos31
account_age_days3 309
Виключено з оцінювання (немає даних або не застосовно): Верифікований домен. Залишкові ваги перенормовано.

Супровід пакетів

100Відмінний
Як обчислюється оцінка
25/25Опубліковано й доступно — 1 пакет(ів) у maven
35/35Свіжість публікацій — остання публікація 149 дн. тому
20/20Історія версій — 12 опублікованих версій
20/20Не застарілий — активний, не deprecated і не yanked
Використані вхідні дані
packagescn.qaiu:parser
ecosystemsmaven
any_deprecatedні
min_days_since_publish149

Інженерна якість

Чи наявні базові інженерні практики та документація?

67Помірний · 20% загального індексу
Як обчислюється оцінка
24/24Процеси CI — 2 процес(ів) CI
24/24Наявні тести
0/16Конфігурація лінтера
0/9.6Pre-commit-хуки
0/6.4.editorconfig
20/20OpenSSF Scorecard: CI-Tests — 3 out of 3 merged PRs checked by a CI test -- score normalized to 10
Використані вхідні дані
has_ciтак
has_testsтак
has_editorconfigні
has_linter_configні
has_precommit_configні

Документація

65Помірний
Як обчислюється оцінка
30/30README
0/25Каталог документації
15/15Сайт документації / домашня сторінка — https://nfd-parser.github.io
10/10Опис репозиторію
10/10Теми — 13 тем
0/10Wiki
Використані вхідні дані
topicsdownload, java, vertx, parser, webserver, api, drive, ilanzou, onedrive, file-server, share, yunpan, netdisk-fast-download
has_wikiні
homepagehttps://nfd-parser.github.io
has_readmeтак
has_docs_dirні
has_descriptionтак

Безпека

Чи міцні видимі практики безпеки й ланцюга постачання, без непослабленої пов’язаності з юрисдикціями високого ризику?

43У зоні ризику · 16% загального індексу

Стан безпеки

44У зоні ризику
Як обчислюється оцінка
6/7.5Binary-Artifacts — binaries present in source code
0/7.5Branch-Protection — немає даних
2.5/2.5CI-Tests — 3 out of 3 merged PRs checked by a CI test -- score normalized to 10
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0.8/7.5Code-Review — Found 3/18 approved changesets -- score normalized to 1
1.5/2.5Contributors — project has 2 contributing companies or organizations -- score normalized to 6
10/10Dangerous-Workflow — no dangerous workflow patterns detected
7.5/7.5Dependency-Update-Tool — update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5Ліцензія — license file detected
7.5/7.5Maintained — 30 commit(s) and 5 issue activity found in the last 90 days -- score normalized to 10
5/5Packaging — packaging workflow detected
0/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
0/5SAST — SAST tool is not run on all commits -- score normalized to 0
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — Project has not signed or included provenance with any releases.
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
0/7.5Vulnerabilities — 24 existing vulnerabilities detected
Використані вхідні дані
sourceopenssf_scorecard
checks_evaluated17
scorecard_versionv5.5.0
checks_inconclusive1
scorecard_aggregate4,4
Виключено з оцінювання (немає даних або не застосовно): branch_protection. Залишкові ваги перенормовано.
Як обчислюється оцінка
12.3/35Прямі залежності без відомих сповіщень — уражено 1: com.fasterxml.jackson.core:jackson-databind 2.18.3 (high 8.1)
3/25Непрямі залежності без відомих сповіщень — уражено 10: com.fasterxml.jackson.core:jackson-core 2.16.1 (high 7.5), io.netty:netty-codec 4.1.130.Final (high 7.5), io.netty:netty-codec-dns 4.1.130.Final (high 7.5), ще +7
23.8/40Немає задавнених сповіщень — 4 пакет(ів) зі сповіщеннями без реакції понад 90 дн.; найдавніше опубліковано 296 дн. тому
Використані вхідні дані
sourceosv
advisories46
affected_packages11
assessed_packages67
unassessed_packages0
affected_by_severityhigh 8, moderate 3
direct_affected_packages1
Звірено з runtime-замиканням залежностей maven:cn.qaiu:core@1.2.3 — тим, що тягне за собою встановлення опублікованого пакета, — 67 пакетів. Досяжність не аналізується.

Готовність до ШІ

Наскільки репозиторій оснащений для розробки та супроводу за участі ШІ-агентів? Незалежний, експериментальний бейдж — вага 0.0, тож він подається окремо і не впливає на загальний індекс здоров'я.

57Помірний · 0% загального індексу
Як обчислюється оцінка
0/45Інструкції для агентів — немає CLAUDE.md / AGENTS.md / правил редактора
0/15Машиночитана документація (llms.txt)
40/40Читабельна історія комітів — намір зазначено у 87 з 98 людських комітів (структурований заголовок або пояснювальний текст)
Використані вхідні дані
has_llms_txtні
legible_history_share0,888
agent_instruction_files
agent_instruction_max_bytes
Як обчислюється оцінка
12.6/18Розгортання однією командою — core-database/pom.xml, core/pom.xml, parser/pom.xml (домовленість інструментарію, без раннера задач)
22/22Автоматизовані тести
0/11Конфігурація лінтера / форматера
11/11Статична перевірка типів — parser/src/main/resources/custom-parsers/jsconfig.json, web-front/jsconfig.json
10/10Відтворюване середовище — devcontainer, Dockerfile
0/10Підтверджена практика роботи з агентами — серед останніх 100 комітів немає створених агентом
5/8Автоматизоване супроводження — автоматизацію залежностей налаштовано, але у вибірці комітів її не видно
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Використані вхідні дані
has_nixні
has_testsтак
lockfiles
has_dockerfileтак
typed_languageтак
bootstrap_files
has_devcontainerтак
has_linter_configні
typecheck_configsparser/src/main/resources/custom-parsers/jsconfig.json, web-front/jsconfig.json
agent_commit_share0
toolchain_manifestscore-database/pom.xml, core/pom.xml, parser/pom.xml, pom.xml, web-service/pom.xml
dependency_bot_commit_share0
Як обчислюється оцінка
45/45Типізований код — Java (статично типізована)
54.8/55Керовані розміри файлів — 1/252 файлів вихідного коду понад 60 КБ
Використані вхідні дані
primary_languageJava
largest_source_bytes89 795
source_files_sampled252
oversized_source_files1
Як обчислюється оцінка
40/40Схема API (OpenAPI/GraphQL/proto) — web-service/doc/openapi.json
0/20Сервер MCP
0/40Придатні до запуску приклади
Використані вхідні дані
example_dirs
has_mcp_signalні
api_schema_filesweb-service/doc/openapi.json

Ключові факти

3 008зірок GitHub
7контриб'юторів
544комітів за останні 12 місяців
2днів від останнього пушу
21релізів
1бас-фактор
14відкритих issue
Maven, npmпакетних екосистем

Попередження щодо збору даних

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token
  • maven package 'cn.qaiu:core' points at a different repository (https://github.com/qaiu/vxcore/tree/main/core); excluded from ecosystem scoring
  • Could not fetch maven package 'cn.qaiu:web-service' from its registry
  • maven package 'cn.qaiu:core-database' points at a different repository (https://github.com/qaiu/vxcore/tree/main/core-database); excluded from ecosystem scoring

Докладніше

Історія зірок і форків 0 ★ / 265 ⇿
0Зірки
265Форки
19Релізи

Коли додано кожну зірку й форк — зібрано з GitHub і згруповано за днями. Кумулятивне зростання розміщено просто над денними додаваннями, з яких воно складається, тож їх видно одне проти одного: рівномірне органічне накопичення виглядає зовсім інакше, ніж різкий короткочасний сплеск. Там, де цю різницю можна виміряти, її подано як автентичність росту.

050100150200250300261112023-072025-012026-07
Мажорні 0Мінорні 1Патчі 6

Кожна точка охоплює 3 днів.

OpenSSF Scorecard 4.4 / 10
4.4сукупно

Незалежна, не прив'язана до інструментів оцінка безпеки від відкритого проєкту OpenSSF Scorecard. Кожна перевірка винагороджує практику безпеки, а не інструмент конкретного постачальника. Перевірки, які Scorecard не зміг визначити, позначено н/д і виключено з оцінки безпеки (вони ніколи не зараховуються як нуль).Scorecard v5.5.0 · 2026-07-24 17:46 UTC

8Binary-Artifactsbinaries present in source code
н/дBranch-Protectioninternal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md
10CI-Tests3 out of 3 merged PRs checked by a CI test -- score normalized to 10
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
1Code-ReviewFound 3/18 approved changesets -- score normalized to 1
6Contributorsproject has 2 contributing companies or organizations -- score normalized to 6
10Dangerous-Workflowno dangerous workflow patterns detected
10Dependency-Update-Toolupdate tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
10Maintained30 commit(s) and 5 issue activity found in the last 90 days -- score normalized to 10
10Packagingpackaging workflow detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
0SASTSAST tool is not run on all commits -- score normalized to 0
0Security-Policysecurity policy file not detected
0Signed-ReleasesProject has not signed or included provenance with any releases.
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
0Vulnerabilities24 existing vulnerabilities detected
Прямі залежності 56
РеєстрПакетОбмеження версіїМаніфест
Mavencn.qaiu:corecore-database/pom.xml
Mavencom.h2database:h22.2.220core-database/pom.xml
Mavencom.zaxxer:HikariCP5.0.1core-database/pom.xml
Mavenorg.apache.commons:commons-lang33.18.0core-database/pom.xml
Mavenio.vertx:vertx-codegen${vertx.version}core-database/pom.xml
Mavenio.vertx:vertx-sql-client-templates${vertx.version}core-database/pom.xml
Mavenio.vertx:vertx-jdbc-client${vertx.version}core-database/pom.xml
Mavencom.mysql:mysql-connector-j9.2.0core-database/pom.xml
Mavenorg.postgresql:postgresql42.7.11core-database/pom.xml
Mavench.qos.logback:logback-classic${logback.version}core/pom.xml
Mavenorg.slf4j:slf4j-api${slf4j.version}core/pom.xml
Mavenio.vertx:vertx-webcore/pom.xml
Mavenio.vertx:vertx-codegencore/pom.xml
Mavenio.vertx:vertx-configcore/pom.xml
Mavenio.vertx:vertx-config-yamlcore/pom.xml
Mavenio.vertx:vertx-service-proxycore/pom.xml
Mavenio.vertx:vertx-web-proxycore/pom.xml
Mavenorg.reflections:reflections${org.reflections.version}core/pom.xml
Mavenorg.apache.commons:commons-lang3${commons-lang3.version}core/pom.xml
Mavencom.fasterxml.jackson.core:jackson-databind${jackson.version}core/pom.xml
Mavencom.fasterxml.jackson.datatype:jackson-datatype-jsr310${jackson.version}core/pom.xml
npmmvn^3.5.0package.json
Mavench.qos.logback:logback-classic${logback.version}parser/pom.xml
Mavenorg.slf4j:slf4j-api${slf4j.version}parser/pom.xml
Mavenio.vertx:vertx-web-client${vertx.version}parser/pom.xml
Mavenorg.apache.commons:commons-lang3${commons-lang3.version}parser/pom.xml
Mavenorg.openjdk.nashorn:nashorn-core15.4parser/pom.xml
Mavenorg.brotli:dec0.1.2parser/pom.xml
Mavenorg.apache.groovy:groovy4.0.24parser/pom.xml
Mavenio.vertx:vertx-dependencies${vertx.version}pom.xml
Mavench.qos.logback:logback-classic${logback.version}pom.xml
Mavench.qos.logback:logback-core${logback.version}pom.xml
Mavencn.qaiu:core${revision}pom.xml
Mavencn.qaiu:core-database${revision}pom.xml
Mavencn.qaiu:parser${parserVersion}pom.xml
npm@element-plus/icons-vue^2.3.1web-front/package.json
npm@monaco-editor/loader^1.4.0web-front/package.json
npm@vueuse/core^11.2.0web-front/package.json
npmaxios1.16.1web-front/package.json
npmclipboard^2.0.11web-front/package.json
npmcore-js^3.8.3web-front/package.json
npmcrypto-js^4.2.0web-front/package.json
npmelement-plus2.11.3web-front/package.json
npmmonaco-editor^0.55.1web-front/package.json
npmqrcode^1.5.4web-front/package.json
npmsplitpanes^4.0.4web-front/package.json
npmvue^3.5.12web-front/package.json
npmvue-clipboard3^2.0.0web-front/package.json
npmvue-router^4.5.1web-front/package.json
npmvue3-json-viewer2.2.2web-front/package.json
Mavencn.qaiu:coreweb-service/pom.xml
Mavencn.qaiu:core-databaseweb-service/pom.xml
Mavencn.qaiu:parserweb-service/pom.xml
Mavench.qos.logback:logback-classic${logback.version}web-service/pom.xml
Mavenorg.fusesource.jansi:jansi1.17.1web-service/pom.xml
Mavenorg.slf4j:slf4j-api${slf4j.version}web-service/pom.xml
Усі залежності 126

Повний розв'язаний набір залежностей із графа залежностей GitHub: 64 прямих і 62 непрямих (транзитивних) пакетів. Транзитивне замикання є повним, коли в репозиторії закомічено lockfile.

РеєстрПакетВерсіяЗв'язок
Mavench.qos.logback:logback-classicпряма
Mavench.qos.logback:logback-classic1.5.8пряма
Mavench.qos.logback:logback-core1.5.8пряма
Mavencn.qaiu:coreпряма
Mavencn.qaiu:core0.1.8пряма
Mavencn.qaiu:core-databaseпряма
Mavencn.qaiu:core-database0.1.8пряма
Mavencn.qaiu:parserпряма
Mavencn.qaiu:parser0.1.8пряма
Mavencom.fasterxml.jackson.core:jackson-databindпряма
Mavencom.fasterxml.jackson.core:jackson-databind2.16.1пряма
Mavencom.fasterxml.jackson.datatype:jackson-datatype-jsr310пряма
Mavencom.fasterxml.jackson.datatype:jackson-datatype-jsr3102.16.1пряма
Mavencom.h2database:h22.2.220пряма
Mavencom.mysql:mysql-connector-j9.2.0пряма
Mavencom.zaxxer:HikariCP5.0.1пряма
Mavenio.vertx:vertx-codegenпряма
Mavenio.vertx:vertx-codegen4.5.6пряма
Mavenio.vertx:vertx-configпряма
Mavenio.vertx:vertx-config4.5.6пряма
Mavenio.vertx:vertx-config-yamlпряма
Mavenio.vertx:vertx-config-yaml4.5.6пряма
Mavenio.vertx:vertx-jdbc-clientпряма
Mavenio.vertx:vertx-jdbc-client4.5.6пряма
Mavenio.vertx:vertx-service-proxyпряма
Mavenio.vertx:vertx-service-proxy4.5.6пряма
Mavenio.vertx:vertx-sql-client-templatesпряма
Mavenio.vertx:vertx-sql-client-templates4.5.6пряма
Mavenio.vertx:vertx-webпряма
Mavenio.vertx:vertx-web4.5.6пряма
Mavenio.vertx:vertx-web-client4.5.27пряма
Mavenio.vertx:vertx-web-client4.5.6пряма
Mavenio.vertx:vertx-web-proxyпряма
Mavenio.vertx:vertx-web-proxy4.5.6пряма
Mavenorg.apache.commons:commons-lang3пряма
Mavenorg.apache.commons:commons-lang33.12.0пряма
Mavenorg.apache.commons:commons-lang33.18.0пряма
Mavenorg.apache.groovy:groovy4.0.24пряма
Mavenorg.brotli:dec0.1.2пряма
Mavenorg.fusesource.jansi:jansi1.17.1пряма
Mavenorg.openjdk.nashorn:nashorn-core15.4пряма
Mavenorg.postgresql:postgresql42.7.11пряма
Mavenorg.postgresql:postgresql42.7.3пряма
Mavenorg.reflections:reflectionsпряма
Mavenorg.reflections:reflections0.10.2пряма
Mavenorg.slf4j:slf4j-apiпряма
Mavenorg.slf4j:slf4j-api2.0.16пряма
Mavenorg.slf4j:slf4j-api2.0.5пряма
npm@element-plus/icons-vue^2.3.1пряма
npm@monaco-editor/loader^1.4.0пряма
npm@vueuse/core^11.2.0пряма
npmaxios1.16.1пряма
npmclipboard^2.0.11пряма
npmcore-js^3.8.3пряма
npmcrypto-js^4.2.0пряма
npmelement-plus2.11.3пряма
npmmonaco-editor^0.55.1пряма
npmmvn^3.5.0пряма
npmqrcode^1.5.4пряма
npmsplitpanes^4.0.4пряма
npmvue^3.5.12пряма
npmvue-clipboard3^2.0.0пряма
npmvue-router^4.5.1пряма
npmvue3-json-viewer2.2.2пряма
Mavencom.fasterxml.jackson.core:jackson-annotations2.16.1непряма
Mavencom.fasterxml.jackson.core:jackson-core2.16.1непряма
Mavencom.google.code.findbugs:jsr3053.0.2непряма
Mavencom.google.protobuf:protobuf-java4.29.0непряма
Mavencom.mchange:c3p00.9.5.5непряма
Mavencom.mchange:mchange-commons-java0.2.19непряма
Mavenio.netty:netty-buffer4.1.108.Finalнепряма
Mavenio.netty:netty-codec4.1.108.Finalнепряма
Mavenio.netty:netty-codec-dns4.1.108.Finalнепряма
Mavenio.netty:netty-codec-http4.1.108.Finalнепряма
Mavenio.netty:netty-codec-http24.1.108.Finalнепряма
Mavenio.netty:netty-codec-socks4.1.108.Finalнепряма
Mavenio.netty:netty-common4.1.108.Finalнепряма
Mavenio.netty:netty-handler4.1.108.Finalнепряма
Mavenio.netty:netty-handler-proxy4.1.108.Finalнепряма
Mavenio.netty:netty-resolver4.1.108.Finalнепряма
Mavenio.netty:netty-resolver-dns4.1.108.Finalнепряма
Mavenio.netty:netty-transport4.1.108.Finalнепряма
Mavenio.netty:netty-transport-native-unix-common4.1.108.Finalнепряма
Mavenio.vertx:vertx-auth-common4.5.6непряма
Mavenio.vertx:vertx-bridge-common4.5.6непряма
Mavenio.vertx:vertx-core4.5.6непряма
Mavenio.vertx:vertx-http-proxy4.5.6непряма
Mavenio.vertx:vertx-sql-client4.5.6непряма
Mavenio.vertx:vertx-uri-template4.5.6непряма
Mavenio.vertx:vertx-web-common4.5.6непряма
Mavenjunit:junitнепряма
Mavenjunit:junit4.13.2непряма
Mavenorg.apache.maven.plugins:maven-assembly-plugin3.3.0непряма
Mavenorg.apache.maven.plugins:maven-dependency-plugin3.1.2непряма
Mavenorg.apache.maven.plugins:maven-deploy-plugin3.1.2непряма
Mavenorg.apache.maven.plugins:maven-gpg-plugin3.2.7непряма
Mavenorg.apache.maven.plugins:maven-jar-plugin3.2.0непряма
Mavenorg.apache.maven.plugins:maven-javadoc-plugin3.7.0непряма
Mavenorg.apache.maven.plugins:maven-source-plugin3.3.0непряма
Mavenorg.checkerframework:checker-qual3.42.0непряма
Mavenorg.codehaus.gmavenplus:gmavenplus-plugin4.1.1непряма
Mavenorg.codehaus.mojo:flatten-maven-plugin1.6.0непряма
Mavenorg.hamcrest:hamcrest-core1.3непряма
Mavenorg.javassist:javassist3.28.0-GAнепряма
Mavenorg.ow2.asm:asm7.3.1непряма
Mavenorg.ow2.asm:asm-analysis7.3.1непряма
Mavenorg.ow2.asm:asm-commons7.3.1непряма
Mavenorg.ow2.asm:asm-tree7.3.1непряма
Mavenorg.ow2.asm:asm-util7.3.1непряма
Mavenorg.projectlombok:lombokнепряма
Mavenorg.projectlombok:lombok1.18.38непряма
Mavenorg.sonatype.central:central-publishing-maven-plugin0.6.0непряма
Mavenorg.yaml:snakeyaml2.0непряма
npm@babel/core^7.26.0непряма
npm@babel/eslint-parser^7.25.9непряма
npm@babel/plugin-transform-class-properties^7.26.0непряма
npm@babel/plugin-transform-class-static-block^7.26.0непряма
npm@vue/babel-plugin-transform-vue-jsx^1.4.0непряма
npm@vue/cli-plugin-babel~5.0.8непряма
npm@vue/cli-plugin-eslint~5.0.8непряма
npm@vue/cli-service~5.0.8непряма
npmcompression-webpack-plugin^11.1.0непряма
npmeslint^9.0.0непряма
npmeslint-plugin-vue^9.30.0непряма
npmfilemanager-webpack-plugin8.0.0непряма
npmmonaco-editor-webpack-plugin^7.1.1непряма
Сповіщення про залежності 11

Встановлення maven:cn.qaiu:core@1.2.3 тягне 67 пакетів, прямих і транзитивних: 11 мають відомі сповіщення, з них 1 — прямі залежності.

ПакетВерсіяЗв'язокКритичністьСповіщеньВиправлено в
com.fasterxml.jackson.core:jackson-databind2.18.3прямависока73.2.1
com.fasterxml.jackson.core:jackson-core2.16.1непрямависока23.2.1
io.netty:netty-codec4.1.130.Finalнепрямависока24.2.16.Final
io.netty:netty-codec-dns4.1.130.Finalнепрямависока24.2.16.Final
io.netty:netty-codec-http4.1.130.Finalнепрямависока154.2.16.Final
io.netty:netty-codec-http24.1.130.Finalнепрямависока64.2.16.Final
io.netty:netty-handler4.1.130.Finalнепрямависока34.2.15.Final
io.netty:netty-resolver-dns4.1.130.Finalнепрямависока34.2.15.Final
ch.qos.logback:logback-core1.5.17непрямапомірна41.5.34
io.netty:netty-handler-proxy4.1.130.Finalнепрямапомірна14.2.13.Final
io.vertx:vertx-core4.5.25непрямапомірна15.0.12

Сповіщення означає, що версія, записана в графі залежностей, потрапляє в уражений діапазон. Досяжність не аналізується, а граф містить піниї розробки й тестування — знахідка може стосуватися інструментів, а не поставленого коду.

Звіт у форматі JSON машиночитний
{
  "data": {
    "repo": {
      "topics": [
        "download",
        "java",
        "vertx",
        "parser",
        "webserver",
        "api",
        "drive",
        "ilanzou",
        "onedrive",
        "file-server",
        "share",
        "yunpan",
        "netdisk-fast-download"
      ],
      "is_fork": false,
      "size_kb": 6371,
      "has_wiki": false,
      "homepage": "https://nfd-parser.github.io",
      "languages": {
        "CSS": 3192,
        "Vue": 305974,
        "HTML": 50020,
        "Java": 1474644,
        "Shell": 7098,
        "Python": 14049,
        "Batchfile": 823,
        "Dockerfile": 583,
        "JavaScript": 140588
      },
      "pushed_at": "2026-07-22T02:30:58Z",
      "created_at": "2023-04-20T09:41:34Z",
      "owner_type": "User",
      "updated_at": "2026-07-24T13:51:36Z",
      "description": "聚合多种主流网盘的直链解析下载服务, 一键解析下载,已支持夸克网盘/uc网盘/蓝奏云/蓝奏优享/小飞机盘/123云盘等. 支持文件夹分享解析. 体验地址: https://lz.qaiu.top https://189.qaiu.top",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "main",
      "license_spdx_raw": "MIT",
      "primary_language": "Java",
      "significant_languages": [
        "Java",
        "Vue"
      ]
    },
    "owner": {
      "blog": "https://blog.qaiu.top",
      "name": "qaiu",
      "type": "User",
      "login": "qaiu",
      "company": "qaiu",
      "location": "5rWO5Y2X",
      "followers": 121,
      "avatar_url": "https://avatars.githubusercontent.com/u/29825328?v=4",
      "created_at": "2017-07-01T22:49:35Z",
      "is_verified": null,
      "public_repos": 31,
      "account_age_days": 3309
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "dependabot/npm_and_yarn/web-front/npm_and_yarn-c42958dede",
          "kind": "other",
          "published_at": "2026-07-21T07:32:52Z"
        },
        {
          "tag": "v0.4.1",
          "kind": "patch",
          "published_at": "2026-07-19T02:01:03Z"
        },
        {
          "tag": "v0.4.0",
          "kind": "minor",
          "published_at": "2026-07-19T01:44:00Z"
        },
        {
          "tag": "v0.3.9",
          "kind": "patch",
          "published_at": "2026-07-18T17:15:09Z"
        },
        {
          "tag": "v0.3.7",
          "kind": "patch",
          "published_at": "2026-07-18T04:31:22Z"
        },
        {
          "tag": "dependabot/maven/maven-6421fd6730",
          "kind": "other",
          "published_at": "2026-07-06T02:12:15Z"
        },
        {
          "tag": "v0.3.6",
          "kind": "patch",
          "published_at": "2026-06-10T21:57:02Z"
        },
        {
          "tag": "v0.3.4",
          "kind": "patch",
          "published_at": "2026-05-30T10:07:52Z"
        },
        {
          "tag": "v019b21b",
          "kind": "other",
          "published_at": "2026-02-02T20:52:20Z"
        },
        {
          "tag": "v0.1.9b20a",
          "kind": "other",
          "published_at": "2026-02-01T02:46:56Z"
        },
        {
          "tag": "v0.1.9b12b",
          "kind": "other",
          "published_at": "2025-11-28T12:08:32Z"
        },
        {
          "tag": "v0.1.9b7",
          "kind": "other",
          "published_at": "2025-07-18T05:12:40Z"
        },
        {
          "tag": "0.1.8.fixed3",
          "kind": "other",
          "published_at": "2025-05-28T09:19:12Z"
        },
        {
          "tag": "0.1.8.fixed2",
          "kind": "other",
          "published_at": "2024-12-18T04:59:20Z"
        },
        {
          "tag": "0.1.8.proxy",
          "kind": "other",
          "published_at": "2024-10-07T18:53:22Z"
        },
        {
          "tag": "0.1.8.bate2",
          "kind": "other",
          "published_at": "2024-09-22T06:07:16Z"
        },
        {
          "tag": "0.1.7-release-fixed3",
          "kind": "prerelease",
          "published_at": "2024-04-09T04:38:20Z"
        },
        {
          "tag": "0.1.7",
          "kind": "patch",
          "published_at": "2023-08-25T09:01:32Z"
        },
        {
          "tag": "0.1.6-releases-fixed6",
          "kind": "prerelease",
          "published_at": "2023-07-15T19:16:25Z"
        },
        {
          "tag": "0.1.5-releases",
          "kind": "prerelease",
          "published_at": "2023-06-13T05:30:41Z"
        },
        {
          "tag": "0.1.3-releases",
          "kind": "prerelease",
          "published_at": "2023-05-25T07:25:43Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "aeb4394cf801fee793ab52f98a539f6f8c064a3e",
          "body": null,
          "is_bot": false,
          "headline": "fix GHSA-997r-7xx2-p9x6",
          "author_name": "qaiu",
          "author_login": "qaiu",
          "committed_at": "2026-07-22T02:25:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b70e30796ff86ba87b72718c7b68e3da7076b310",
          "body": null,
          "is_bot": false,
          "headline": "ci: package fuller jre for native builds",
          "author_name": "q",
          "author_login": null,
          "committed_at": "2026-07-19T01:57:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d3ef5217732f5628f2989e04a6513aa03a09a037",
          "body": null,
          "is_bot": false,
          "headline": "fix: support donated auth for 123 directory downloads",
          "author_name": "q",
          "author_login": null,
          "committed_at": "2026-07-19T01:39:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2969c92d3d9eff1572ec0ed6e4a329b3de4e9178",
          "body": null,
          "is_bot": false,
          "headline": "build jre",
          "author_name": "q",
          "author_login": null,
          "committed_at": "2026-07-18T18:06:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2fde421169101f85e91a544ad06a5678b8c85587",
          "body": null,
          "is_bot": false,
          "headline": "chore: bump version to 0.3.9",
          "author_name": "q",
          "author_login": null,
          "committed_at": "2026-07-18T17:11:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3494271150bfd428081fee08dfb2305f384464e1",
          "body": null,
          "is_bot": false,
          "headline": "chore: bump version to 0.3.8",
          "author_name": "q",
          "author_login": null,
          "committed_at": "2026-07-18T16:55:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "675d930f868520a0dd4ba3fc74b297db7dbb4702",
          "body": "- 前端: getCurrentPanType() 补全123网盘域名匹配正则(share.123pan.cn等子域名)\n- 前端: 临时认证弹窗补充123云盘(YE)选项及提示文案\n- 前端: submitDonateAccount() 按当前authType只提交相关字段,避免切换认证方式后\n  残留的用户名/密码脏数据被一并提交\n- 后端: URLParamUtil.addParam() 不再无条件用静态yml配置覆盖已生效的临时认证/\n  自动捐赠账号回退(增加 __TEMP_AUTH_ADDED 判断)\n- 后端: CacheServiceImpl 新增 applyDonatedAc\n[…]\narer \",避免拼接成\n  'Bearer Bearer xxx' 导致123接口返回 tokenstring should not contain bearer\n\n已通过本地实测验证: 捐赠123账号后,不带auth参数直接请求\n/json/parser?url=https://1815268665.share.123pan.cn/123pan/iaKtVv-r4aCd\n可正常返回200及直链",
          "is_bot": false,
          "headline": "fix: 123网盘捐赠账号无需临时auth参数即可自动生效,修复token前缀与脏数据问题",
          "author_name": "q",
          "author_login": null,
          "committed_at": "2026-07-18T15:21:56Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5e20ed5050f6d1fb919acb320e69d861ce735ebc",
          "body": "…mp version to 0.3.7\n\n引用 #201 #198 #116\n说明: 123解析仅限于本地部署(可Windows一键运行 run.bat),公共/云端服务因风控限制不保证可用",
          "is_bot": false,
          "headline": "fix: 123网盘(YE)支持authorization别名配置并修复auth临时参数登录被覆盖问题, 更新README认证说明, bu…",
          "author_name": "q",
          "author_login": null,
          "committed_at": "2026-07-18T04:28:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "91f4fcaa7675adb00dd682ddab56b2768af3a73b",
          "body": "oosmetrics不可用",
          "is_bot": false,
          "headline": "更新 README.md",
          "author_name": "qaiu",
          "author_login": "qaiu",
          "committed_at": "2026-07-10T22:28:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0754fe20f1760a51bbf9a64e90590305bae29e4c",
          "body": null,
          "is_bot": false,
          "headline": "更新 README.md",
          "author_name": "qaiu",
          "author_login": "qaiu",
          "committed_at": "2026-07-10T08:41:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "034fd20d3b0b8385717d2cbf25ea9f6bd3ce0fcf",
          "body": null,
          "is_bot": false,
          "headline": "更新 README.md",
          "author_name": "qaiu",
          "author_login": "qaiu",
          "committed_at": "2026-07-10T08:41:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "24bf98bca9a6e8212494c4b9c7a68b9b0b4c6208",
          "body": null,
          "is_bot": false,
          "headline": "fix: support 123pan redirected share links",
          "author_name": "q",
          "author_login": null,
          "committed_at": "2026-07-06T00:50:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "275f6b9e6d9b17a8567778849bc0d444de87c7c8",
          "body": null,
          "is_bot": false,
          "headline": "更新 README.md",
          "author_name": "qaiu",
          "author_login": "qaiu",
          "committed_at": "2026-06-23T09:10:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5db9e422f4f3b7123a1b1b6de147d871788975d8",
          "body": null,
          "is_bot": false,
          "headline": "更新 README.md",
          "author_name": "qaiu",
          "author_login": "qaiu",
          "committed_at": "2026-06-11T04:03:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "705b6ba4b7bed4290c485d3c4d12822427ef2f4d",
          "body": "Clean up fork changes for upstream review",
          "is_bot": false,
          "headline": "Merge pull request #195 from yukaidi1220/codex/full-main-clean",
          "author_name": "qaiu",
          "author_login": "qaiu",
          "committed_at": "2026-06-10T13:32:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0edc0573477c3940dbed5e120d98a268cf0e8205",
          "body": null,
          "is_bot": false,
          "headline": "docs: update parser and custom script docs",
          "author_name": "yukaidi",
          "author_login": "yukaidi1220",
          "committed_at": "2026-06-10T13:23:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6ae5d998e6a3b92a26654db5230f50d93ace9921",
          "body": null,
          "is_bot": false,
          "headline": "fix(frontend): improve directory and timestamp display",
          "author_name": "yukaidi",
          "author_login": "yukaidi1220",
          "committed_at": "2026-06-10T13:22:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cbb442ceb6d8aeece15776336b18290e381b7c91",
          "body": null,
          "is_bot": false,
          "headline": "fix(web): harden cache and API services",
          "author_name": "yukaidi",
          "author_login": "yukaidi1220",
          "committed_at": "2026-06-10T13:21:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0103841fb5f8eaaaf7949aef1e05e593ce0d2f4a",
          "body": null,
          "is_bot": false,
          "headline": "fix(parser): harden built-in pan parsers",
          "author_name": "yukaidi",
          "author_login": "yukaidi1220",
          "committed_at": "2026-06-10T13:20:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b6b7f0d8b78e3fc2df8b19b7cf0432fd3c7b9569",
          "body": null,
          "is_bot": false,
          "headline": "fix(parser): harden runtime resource handling",
          "author_name": "yukaidi",
          "author_login": "yukaidi1220",
          "committed_at": "2026-06-10T13:19:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "46c6827edae9c220453093f15425bf9e54e96d25",
          "body": null,
          "is_bot": false,
          "headline": "fix(core): harden proxy and routing lifecycle",
          "author_name": "yukaidi",
          "author_login": "yukaidi1220",
          "committed_at": "2026-06-10T13:19:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1ef6e120a892fe748a8b5402ce710a201228b41e",
          "body": null,
          "is_bot": false,
          "headline": "ci: improve build and packaging workflow",
          "author_name": "yukaidi",
          "author_login": "yukaidi1220",
          "committed_at": "2026-06-10T13:18:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "65d518373de78ccce77026ff7fd399a309ec63d7",
          "body": "feat: 乐云 directDownload 接口支持 & 缓存配置补充完善",
          "is_bot": false,
          "headline": "Merge pull request #191 from yukaidi1220/lecloud-direct-download",
          "author_name": "qaiu",
          "author_login": "qaiu",
          "committed_at": "2026-06-05T15:02:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bca4da4b6c07ec18aef1fbad0a5f89a4e73e8b47",
          "body": "- 新增 directDownload (GET) 接口,比 packageDownloadWithFileIds 少一次请求\n- 每次随机选择下载方式,失败自动 fallback 到另一种\n- 统一所有下载方法的 Promise 参数传递\n- 添加 HTTP 状态码日志便于调试\n- 优化 app-dev.yml 缓存配置注释,补充所有缺失的网盘类型",
          "is_bot": false,
          "headline": "feat: 乐云 directDownload 接口支持 & 缓存配置补充完善",
          "author_name": "yukaidi",
          "author_login": "yukaidi1220",
          "committed_at": "2026-06-05T14:48:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0fd78defcbf7d3714e74f2eff002fbe98d32bc95",
          "body": "- 移除token参数,新增url参数至API1请求\n- API2新增start_time/wait_seconds/verifycode/share_id/acheck=1参数\n- parse()中从API1响应提取FileInfo(file_name/file_id/file_size/file_time/username)\n- 新增parseFileList()实现目录分享解析,通过getdir.php+file_list API获取文件列表\n- 新增CTD枚举项匹配城通网盘目录分享链接(/d/路径)",
          "is_bot": false,
          "headline": "feat(ct): 升级城通网盘接口并实现目录分享解析",
          "author_name": "qaiu",
          "author_login": "qaiu",
          "committed_at": "2026-06-03T09:46:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "452fd0ea2c7ffb09795998a00ff414195ec96ba6",
          "body": "CI: 新增原生环境打包 & 启动日志改进",
          "is_bot": false,
          "headline": "Merge pull request #190 from yukaidi1220/pr/native-package",
          "author_name": "qaiu",
          "author_login": "qaiu",
          "committed_at": "2026-05-31T09:02:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dd8f2efb375aec95aa1bb1ab2c9e8390b4715552",
          "body": null,
          "is_bot": false,
          "headline": "ci: Release 自动生成更新说明(generate_release_notes)",
          "author_name": "yukaidi",
          "author_login": "yukaidi1220",
          "committed_at": "2026-05-31T08:39:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0feb8e798a3a4c60eb2730f668aec0e7db0b6f4c",
          "body": "- 配置文件查找顺序与 Deploy 保持一致(先当前目录,再 resources/)\n- 页面地址日志改用 onComplete,无论演练场加载成功失败均输出\n- Windows ZIP 移除 /* 通配符,与 Linux 保持一致的顶层目录结构\n- 修正注释:同步读文件会阻塞 event loop,不再声称'避免阻塞'\n- YAML 正则和 jdeps 回退列表补充适用范围说明",
          "is_bot": false,
          "headline": "fix: PR#190 review 修复 — 配置查找顺序/页面日志/ZIP结构/注释",
          "author_name": "yukaidi",
          "author_login": "yukaidi1220",
          "committed_at": "2026-05-31T08:34:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d55d8edd2ffc8e490802f15d1e7f9f685f7068dc",
          "body": null,
          "is_bot": false,
          "headline": "AppMain: 启动日志增加前端页面访问地址提示",
          "author_name": "yukaidi",
          "author_login": "yukaidi1220",
          "committed_at": "2026-05-31T06:00:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "451496f102823f7ffc99371ef9eb5288c40c7775",
          "body": null,
          "is_bot": false,
          "headline": "CI: 新增 Linux/Windows 原生环境打包 (jlink + 精简 JRE) 及 Docker 多平台构建",
          "author_name": "yukaidi",
          "author_login": "yukaidi1220",
          "committed_at": "2026-05-31T06:00:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6d6351bd585fc339d6564b4db63fe73ae9908aa2",
          "body": null,
          "is_bot": false,
          "headline": "更新 README.md",
          "author_name": "qaiu",
          "author_login": "qaiu",
          "committed_at": "2026-05-30T23:02:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1a5fc8d1ef812d5c2c95d578908ff958b0edd67c",
          "body": "…to 0.3.4",
          "is_bot": false,
          "headline": "feat: truncate long error msg, fix lanzou folder regex, bump version …",
          "author_name": "q",
          "author_login": null,
          "committed_at": "2026-05-29T17:16:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a44f30f7e55cfab540e454d5938f79b501e2eaa8",
          "body": "Update README maven badge to track tag-triggered workflow status",
          "is_bot": false,
          "headline": "Merge pull request #189 from qaiu/copilot/update-readme-badge",
          "author_name": "qaiu",
          "author_login": "qaiu",
          "committed_at": "2026-05-29T16:17:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f9ebd34de33699b0a63e674c02ce8b6d29ae6ee7",
          "body": null,
          "is_bot": true,
          "headline": "docs: remove branch filter from maven workflow badge",
          "author_name": "copilot-swe-agent[bot]",
          "author_login": "Copilot",
          "committed_at": "2026-05-29T16:16:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b47db300a6906b5da6484d22d136b555187f9807",
          "body": null,
          "is_bot": true,
          "headline": "Initial plan",
          "author_name": "copilot-swe-agent[bot]",
          "author_login": "Copilot",
          "committed_at": "2026-05-29T16:10:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d19d8573f9692cf7202b48f469f5ebbe5b85f076",
          "body": "fix(QQwTool): 改用 POST JSON API 解析 QQ 邮箱云盘链接",
          "is_bot": false,
          "headline": "Merge pull request #188 from yukaidi1220/fix/qqwtool-json-api",
          "author_name": "qaiu",
          "author_login": "qaiu",
          "committed_at": "2026-05-29T15:54:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "799e12006957ce21ea02adc93b9efe0ba92614c6",
          "body": "安全加固、新功能、Bug 修复与代码质量改进",
          "is_bot": false,
          "headline": "Merge pull request #187 from yukaidi1220/feat/contributions",
          "author_name": "qaiu",
          "author_login": "qaiu",
          "committed_at": "2026-05-29T15:53:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "13f83e879502d018d8618e55c44688ec0c302d4e",
          "body": "旧实现通过 GET 请求获取 HTML 并正则提取 JS 变量,但接口已改为返回 JSON,\n导致 NumberFormatException。改为 POST 请求 `https://wx.mail.qq.com/s`,\nbody 为 `f=json&k={shareKey}`,解析 JSON 响应中的 body.url/name/size。\n\n- 使用 postAbs() 替代 request() 以正确处理 HTTPS\n- 使用 asJson() 兼容 gzip 响应\n- 使用 complete() 正确存储 downloadUrl\n- 添加 User-Agent、URL 编码 shareKey",
          "is_bot": false,
          "headline": "fix(QQwTool): 改用 POST JSON API 解析 QQ 邮箱云盘链接",
          "author_name": "yukaidi",
          "author_login": "yukaidi1220",
          "committed_at": "2026-05-29T14:26:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7b5900aae4759e199e881b670bd50015611ccbea",
          "body": "- 替换 System.out.println/printStackTrace 为 Logger: MkgsTool, PodTool, WsTool, IpExtractor, ReqIpUtil, LogStatistics\n- JsPlaygroundLogger 日志列表限制最大 1000 条防止内存泄漏\n- JsScriptLoader JarFile 改用 try-with-resources 防止文件句柄泄漏\n- DbServiceImpl Thread.sleep 改为 vertx.setTimer 避免阻塞 event loop\n- 删除未使用的 api.js,删除空的 ParserApiClientLinkTest\n- 移除前端未使用的导入和死代码 (downloaderService, monacoTypes)\n- 提取 previewBaseUrl 到 constants.js 常量文件",
          "is_bot": false,
          "headline": "refactor: 代码质量清理与日志规范化",
          "author_name": "yukaidi",
          "author_login": "yukaidi1220",
          "committed_at": "2026-05-29T06:23:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e36c0bbe45da9ceeab31416ce9d4c8c0c68b99e3",
          "body": "- run.sh 改用 exec 直接运行 Java,修复 Docker 中 ShutdownHook 失效\n- Dockerfile 预创建 db 和 logs 目录,添加非 root 用户运行\n- Docker entrypoint 以 root 运行再降权,解决 volume 权限问题\n- EXPOSE 改为仅 6401,entrypoint 添加 -Duser.timezone",
          "is_bot": false,
          "headline": "fix: Docker 部署优化",
          "author_name": "yukaidi",
          "author_login": "yukaidi1220",
          "committed_at": "2026-05-29T06:23:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "af723aed3a8fca5427f85b087fc26be9cf637cdd",
          "body": "- 修复 12 处 NPE 风险: FjTool/FsTool/IzTool/LzTool/MkwTool/P115Tool/PdbTool/QQTool/ParserCreate/CommonUtils/ShareLinkInfo/URLParamUtil\n- 修复 4 处 Vert.x 资源泄漏: 测试类中 Vertx 实例未关闭\n- 修复 CacheManager 防重入和 registerPeriodicCleanup 就绪检查\n- 修复 ParserApi 中 redirectUrl()/viewUrl() Promise 未 complete\n- 修复 CacheManager.u\n[…]\nToolWithAuth 并发安全 (volatile + header 副本)\n- 修复 P115Tool UA 为 null 时的 NPE,添加默认 User-Agent\n- Font Awesome CDN 换源为 s4.zstatic.net,避免 bootcdn 投毒风险\n- DirectoryTree selectAll 补 parserUrl 检查,Home 组件名 App→Home",
          "is_bot": false,
          "headline": "fix: NPE 修复、资源泄漏修复及其他 Bug 修复",
          "author_name": "yukaidi",
          "author_login": "yukaidi1220",
          "committed_at": "2026-05-29T06:22:40Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "0978186679c9420a7a0eb325ed04b5480fbb0760",
          "body": "- QQscTool: 支持多文件和目录解析,通过 GetFileList API 实现递归目录导航\n- Home: 从粘贴文本中自动提取分享链接\n- DirectoryTree: 目录浏览添加复制直链按钮\n- domainName 改为可选,未配置时自动从请求地址推断\n- 统一版本号管理,GitHub URL 构建时自动从 git remote origin 识别\n- vue.config.js 添加前端构建配置,sync-version.js 构建时同步版本号",
          "is_bot": false,
          "headline": "feat: 新功能与配置优化",
          "author_name": "yukaidi",
          "author_login": "yukaidi1220",
          "committed_at": "2026-05-29T06:21:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "17460ff2719fd89e9efc9eb72b165db7a237f271",
          "body": "- 升级 Vert.x 4.5.24 → 4.5.27, postgresql 42.7.3 → 42.7.11, logback 1.5.18 → 1.5.32, axios 1.13.5 → 1.16.1\n- 修复 JWT 签名验证和密码比较的时序攻击漏洞 (MessageDigest.isEqual)\n- 修复 AESUtils 使用不安全 Random 改为 SecureRandom\n- 修复登录用户枚举和异常信息泄露,统一错误提示\n- 修复 RateLimiter count++ 非原子操作 (AtomicInteger)\n- 修复 JsParserExecutor DCL 模式缺少 volatile\n- 修复 Token 日志泄露,仅打印前8字符\n- 修复 Playground 密码时序攻击和堆栈泄露\n- 所有 window.open 添加 noopener,noreferrer\n- LocalConstant 改用 ConcurrentHashMap 保证线程安全\n- Dockerfile 添加非 root 用户运行,secret.yml 加入 .gitignore",
          "is_bot": false,
          "headline": "fix(security): 安全漏洞修复与依赖升级",
          "author_name": "yukaidi",
          "author_login": "yukaidi1220",
          "committed_at": "2026-05-29T06:20:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f81b3852eedc53393639ff542c2932820ad00870",
          "body": null,
          "is_bot": false,
          "headline": "fix: Font Awesome CDN 换源为 s4.zstatic.net,避免 bootcdn 投毒风险",
          "author_name": "yukaidi",
          "author_login": "yukaidi1220",
          "committed_at": "2026-05-29T06:10:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "37abebf8f87c1f47efcc45387830fbcb0273b5ba",
          "body": null,
          "is_bot": false,
          "headline": "fix(QQscTool): 简化 filesetId 正则,避免反斜杠转义问题",
          "author_name": "yukaidi",
          "author_login": "yukaidi1220",
          "committed_at": "2026-05-29T05:58:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "79fab8c0d6bd37f337b6c911fae801472e48e0cd",
          "body": "- 前端 axios 对 HTTP 非2xx直接reject,catch块丢失后端错误信息,从 error.response.data.msg 提取实际错误展示给用户\n\n- QQscTool extractFilesetId 正则未适配 Nuxt 转义JSON格式",
          "is_bot": false,
          "headline": "fix: 修复前端错误信息丢失 & QQscTool filesetId 提取失败",
          "author_name": "yukaidi",
          "author_login": "yukaidi1220",
          "committed_at": "2026-05-29T05:46:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9b70fb2778c0e6596c7281883c6183491ee816a3",
          "body": null,
          "is_bot": false,
          "headline": "feat(QQscTool): 支持多文件和目录解析,通过 GetFileList API 实现递归目录导航",
          "author_name": "yukaidi",
          "author_login": "yukaidi1220",
          "committed_at": "2026-05-29T05:22:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bd2868748fbb4fb7a5eef73af5db307f9b2ee143",
          "body": null,
          "is_bot": false,
          "headline": "feat(Home): 从粘贴文本中自动提取分享链接",
          "author_name": "yukaidi",
          "author_login": "yukaidi1220",
          "committed_at": "2026-05-29T05:08:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1f47bf13b51ca36d6e3740d990c579f4e0292dad",
          "body": null,
          "is_bot": false,
          "headline": "fix(QQscTool): 检测被和谐文件,避免返回无效直链",
          "author_name": "yukaidi",
          "author_login": "yukaidi1220",
          "committed_at": "2026-05-29T04:56:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7d8b33afe057d2347f4030e2bd06eaff9c142d18",
          "body": "- fix: Home.vue 组件名 'App' → 'Home'\n- fix: DirectoryTree selectAll 补 parserUrl 空值检查\n- fix: 提取 previewBaseUrl 到 utils/constants.js,解除 ShowFile 对 Home 的耦合\n- fix: Home.vue focus 事件监听器改为命名函数,加 beforeUnmount 移除\n- fix: Playground.vue MutationObserver 保存引用,onUnmounted 中 disconnect\n- chore: 删除未使用的 api.js\n- chore: 删除 ClientLinks.vue 死代码 downloadClient/shouldShowDownloadButton\n- chore: 删除 DirectoryTree.vue 死代码 buildTree",
          "is_bot": false,
          "headline": "refactor: 前端代码质量清理",
          "author_name": "yukaidi",
          "author_login": "yukaidi1220",
          "committed_at": "2026-05-29T04:38:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "367f7c78a48e3606afc53678019c5b2a231c656c",
          "body": null,
          "is_bot": false,
          "headline": "Merge remote-tracking branch 'upstream/main'",
          "author_name": "yukaidi",
          "author_login": "yukaidi1220",
          "committed_at": "2026-05-29T04:17:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1bd23ec4ae27415d2da14037672cb6b10af93ee7",
          "body": null,
          "is_bot": false,
          "headline": "feat: 目录浏览添加复制直链按钮",
          "author_name": "yukaidi",
          "author_login": "yukaidi1220",
          "committed_at": "2026-05-29T04:13:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "346153267986421ae065d7c98c7a1ef8446201db",
          "body": "当文件系统直接读取 app.yml 失败时(如 Docker 卷挂载场景),\nConfigUtil.readConfig 现在会自动尝试 resources/ 子目录作为\nfallback,确保配置文件在各种部署方式下都能被正确加载。",
          "is_bot": false,
          "headline": "fix: ConfigUtil 读取配置失败时自动尝试 resources/ 目录",
          "author_name": "yukaidi",
          "author_login": "yukaidi1220",
          "committed_at": "2026-05-29T03:54:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4cfcdfa1f82e63ffdd481a4b244befe8a88ec3a7",
          "body": "当 app.yml 在当前目录不存在时,自动回退到 resources/app.yml,\n解决 Docker 部署时配置文件在 resources/ 子目录导致启动失败的问题。",
          "is_bot": false,
          "headline": "fix: Deploy 启动时自动从 resources/ 子目录查找配置文件",
          "author_name": "yukaidi",
          "author_login": "yukaidi1220",
          "committed_at": "2026-05-29T03:39:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ac2f526a1c0cf3a7054d8fe0dfe62bdc3feb3afc",
          "body": "- clientLinks 无 auth 时调用 URLParamUtil.addParam() 注入代理/认证配置\n- clientLink 补设 _requestOrigin 并调用 addParam()\n- getFileList/getFileDownUrl 补设 _requestOrigin 保持一致性\n- getDownLink 回退地址补上端口号",
          "is_bot": false,
          "headline": "fix: clientLinks/clientLink 补全参数注入,统一 _requestOrigin 设置",
          "author_name": "yukaidi",
          "author_login": "yukaidi1220",
          "committed_at": "2026-05-29T03:36:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cfb624e9e04ecf35c424f41e602ed0eefb4e41a5",
          "body": "- ServerApi 添加 resolveOrigin() 统一处理 X-Forwarded-Host 头\n- ParserApi.parse() 补设 _requestOrigin,修复 /v2/linkInfo 路径遗漏\n- 清理 app-dev.yml 残留注释",
          "is_bot": false,
          "headline": "fix: 统一 origin 解析逻辑,修复反向代理下 domainName 不一致",
          "author_name": "yukaidi",
          "author_login": "yukaidi1220",
          "committed_at": "2026-05-29T03:31:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e1bf45b5c8eefde865a4da955595a71803779372",
          "body": "- app-dev.yml 注释掉默认 domainName\n- ParserApi 添加 getLinkPrefix() 支持 X-Forwarded-Host 反向代理\n- ServerApi 传递 _requestOrigin 到 otherParam 供 parser 层使用\n- URLParamUtil.addParam() 读不到配置时用 _requestOrigin 兜底\n- AppMain 启动日志 domainName 为空时显示本地端口地址",
          "is_bot": false,
          "headline": "feat: domainName 改为可选,未配置时自动从请求地址推断",
          "author_name": "yukaidi",
          "author_login": "yukaidi1220",
          "committed_at": "2026-05-29T03:27:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e2dc611aa4222300cd41c667c2cafbfa1c102e4c",
          "body": null,
          "is_bot": false,
          "headline": "fix: 剪切板自动读取失败时静默,仅手动读取时提示",
          "author_name": "yukaidi",
          "author_login": "yukaidi1220",
          "committed_at": "2026-05-29T03:02:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "77c953626f91b1b36bede8c8e1b3be5a5ebff17b",
          "body": null,
          "is_bot": false,
          "headline": "fix: api.js baseURL 改为相对路径,修复反向代理下请求绕过代理的问题",
          "author_name": "yukaidi",
          "author_login": "yukaidi1220",
          "committed_at": "2026-05-29T02:59:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0e14c9a9259a43f4689663ba9ab8502d41482425",
          "body": "项目版本(pom.xml revision)和parser版本(parserVersion)统一为单一来源,\n前端构建时自动同步,发版只需改根pom.xml的两个属性。",
          "is_bot": false,
          "headline": "refactor: 统一版本号管理,消除硬编码",
          "author_name": "yukaidi",
          "author_login": "yukaidi1220",
          "committed_at": "2026-05-29T02:57:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a4e8585e2c163e90b1cd1de95ac6df2cf76c5ef3",
          "body": "RouterHandlerFactory 的 onFailure 和 catch 两处均丢弃了\ne.getMessage(),导致前端无法获知具体报错原因。",
          "is_bot": false,
          "headline": "fix: 错误处理返回具体异常信息而非通用\"服务器内部错误\"",
          "author_name": "yukaidi",
          "author_login": "yukaidi1220",
          "committed_at": "2026-05-29T02:49:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cf7d64916e4812c1b16441be6c58aea13efb75ed",
          "body": null,
          "is_bot": false,
          "headline": "fix: Groovy 正则改为字符串形式避免斜杠解析问题",
          "author_name": "yukaidi",
          "author_login": "yukaidi1220",
          "committed_at": "2026-05-29T02:37:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4ac80bbfe84b1f637cfae2ebafe877216c76b85c",
          "body": null,
          "is_bot": false,
          "headline": "fix: gmavenplus-plugin 添加 Groovy 依赖",
          "author_name": "yukaidi",
          "author_login": "yukaidi1220",
          "committed_at": "2026-05-29T02:34:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cfe8352d450da5eaf02cdca9d14924ae9a255510",
          "body": "前端:vue.config.js 通过 DefinePlugin 注入 VUE_APP_GITHUB_REPO_URL,\nHome.vue/Playground.vue 中硬编码的 GitHub URL 全部改为动态变量。\n后端:parser/pom.xml 添加 gmavenplus-plugin 在 initialize 阶段从\ngit remote origin 解析 github.owner/github.repo,SCM 字段引用 property。",
          "is_bot": false,
          "headline": "refactor: GitHub URL 改为构建时自动从 git remote origin 识别",
          "author_name": "yukaidi",
          "author_login": "yukaidi1220",
          "committed_at": "2026-05-29T02:29:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4a0fe61d3069f2931ad575f3a1bcc9f37630fc73",
          "body": "matcher.group(PWD) 在正则未定义 PWD 命名组时抛出\nIllegalArgumentException 而非 IllegalStateException,原 catch 未覆盖\n导致无提取码的链接(如QQ文件分享)返回 500。",
          "is_bot": false,
          "headline": "fix: ParserCreate 正则匹配 PWD 组时捕获 IllegalArgumentException",
          "author_name": "yukaidi",
          "author_login": "yukaidi1220",
          "committed_at": "2026-05-29T02:13:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c62e109affa5a2ffc156d8aad68e198a5bec1165",
          "body": "Home.vue、Playground.vue、parser/pom.xml 中的 qaiu/netdisk-fast-download\nURL 全部替换为 yukaidi1220/netdisk-fast-download。",
          "is_bot": false,
          "headline": "fix: 将硬编码的上游 GitHub URL 改为 fork 地址",
          "author_name": "yukaidi",
          "author_login": "yukaidi1220",
          "committed_at": "2026-05-29T02:09:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ff400d3be3991215c37f3a3e5c893eb2dccd8f27",
          "body": "fix: 修复多个内存泄漏问题、资源管理缺陷及安全漏洞\n感谢 @yukaidi1220 的贡献! 🎉\n\n本次 PR 对项目做了一次全面深入的审查,涵盖了内存泄漏、资源管理、安全漏洞和代码缺陷,工作量很大,质量也很高,辛苦了👍\n\n几个小建议供参考:\n\nregisterPeriodicCleanup 注册时机:目前在 的 块中调用,类加载时机不能保证 Vertx 已完全就绪。建议后续改为实现 接口,在 启动后执行,时机更可控。CacheServiceImplstaticAppRunPostExecVerticle\n\nRateLimiter 并发安全:去掉 方向正确,但需确认 底层是 ,否则 与 并\n[…]\nHashMapremoveIfcomputevolatile int countcount++AtomicInteger\n\nPanBase 子类覆写 client:static 共享 WebClient 本身没问题,但如果有子类在构造中重新赋值 用于特殊场景(如代理),需确保这些子类有对应的逻辑,否则泄漏依然存在。this.client = WebClient.create(...)close()",
          "is_bot": false,
          "headline": "Merge pull request #186 from yukaidi1220/260529",
          "author_name": "qaiu",
          "author_login": "qaiu",
          "committed_at": "2026-05-29T01:59:56Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1d243b8f1b67a5cf6312c144f320c20981e71969",
          "body": "审查发现:\n- EXPOSE 6400 误导用户映射后端端口,实际只需 6401(反向代理)\n- TZ 环境变量不如 JVM -Duser.timezone 可靠",
          "is_bot": false,
          "headline": "fix: Docker EXPOSE 改为仅 6401,entrypoint 添加 -Duser.timezone",
          "author_name": "yukaidi",
          "author_login": "yukaidi1220",
          "committed_at": "2026-05-29T01:57:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "732a7f86fe1d0db698bd6c9fb2d9835599b80158",
          "body": "去掉 USER appuser,entrypoint 以 root 身份运行,先 chown 修复\nvolume 挂载目录的权限,再通过 su 降权到 appuser 执行应用。",
          "is_bot": false,
          "headline": "fix: Docker entrypoint 以 root 运行再降权,彻底解决 volume 权限问题",
          "author_name": "yukaidi",
          "author_login": "yukaidi1220",
          "committed_at": "2026-05-29T01:49:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3c428f6a6de71ca62ee0f263ad9ec05ede807cad",
          "body": "JVM ShutdownHook 按注册逆序执行。将 AppMain 的 hook 移到 Deploy.start() 之前注册,\n使执行顺序变为:Deploy hook(关闭 Vert.x)-> AppMain hook(关闭 JDBCPoolInit/JsParserExecutor)。",
          "is_bot": false,
          "headline": "fix: ShutdownHook 注册顺序调整,确保 Vert.x 先于 JDBCPoolInit 关闭",
          "author_name": "yukaidi",
          "author_login": "yukaidi1220",
          "committed_at": "2026-05-29T01:01:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bff17f2d4e28bfa00a49518357c0eb9fa5f3a75f",
          "body": "原 nohup+tail-f 模式下,Docker SIGTERM 发给 tail 而非 Java 进程,\n导致 ShutdownHook 永远不会触发,资源无法优雅关闭。\n改为 exec 让 Java 成为 PID 1,正确接收信号。\n同时支持通过 JVM_XMX/JVM_OPTS 环境变量自定义 JVM 参数。",
          "is_bot": false,
          "headline": "fix: run.sh 改用 exec 直接运行 Java,修复 Docker 中 ShutdownHook 失效",
          "author_name": "yukaidi",
          "author_login": "yukaidi1220",
          "committed_at": "2026-05-29T00:46:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "df600eaada247ed76c8807170fa35e8c04c4a6d7",
          "body": "appuser 运行时无法在 /app 下创建新子目录,H2 尝试创建 /app/db/nfdData.mv.db\n时因目录不存在导致 AccessDeniedException。在 chown 之前预创建目录。",
          "is_bot": false,
          "headline": "fix: Dockerfile 预创建 db 和 logs 目录,修复非 root 用户无法写入 H2 数据库",
          "author_name": "yukaidi",
          "author_login": "yukaidi1220",
          "committed_at": "2026-05-29T00:34:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dd4027c9312c9c085035497d721da6a9021c4b2c",
          "body": "- LzTool:221 — obj.get(\"url\").toString() 改为 String.valueOf()\n- IzToolWithAuth:434 — get(\"uuid\").toString() 添加 null 检查",
          "is_bot": false,
          "headline": "fix: LzTool/IzToolWithAuth 最后两处 .get().toString() NPE 风险",
          "author_name": "yukaidi",
          "author_login": "yukaidi1220",
          "committed_at": "2026-05-28T23:54:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d1569195e46334351700fbce4e84b5ac1eb1ea0b",
          "body": "审查发现 9c3945f 因模块依赖问题回退了 ShutdownHook 中的清理逻辑,\n导致 JDBCPoolInit 连接池和 JsParserExecutor WorkerExecutor 在进程退出时\n无法被显式关闭。将清理逻辑移到 web-service 模块的 AppMain(可依赖所有模块)。",
          "is_bot": false,
          "headline": "fix: AppMain 注册 ShutdownHook 关闭 JDBCPoolInit 和 JsParserExecutor",
          "author_name": "yukaidi",
          "author_login": "yukaidi1220",
          "committed_at": "2026-05-28T23:22:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d6e88f0c53effc9a6dcff34689e2afa4d6e450bb",
          "body": "审查发现 42925c8 引入了重复的 StandardCharsets import,且 getStackTrace\n方法在移除堆栈泄露后无任何调用方,属于死代码。",
          "is_bot": false,
          "headline": "fix: PlaygroundApi 移除重复 import 和未使用的 getStackTrace 死代码",
          "author_name": "yukaidi",
          "author_login": "yukaidi1220",
          "committed_at": "2026-05-28T23:06:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2a9fa81e560afc2b144e153f10b9857a44313928",
          "body": "审查发现 static 块中注册定时任务存在时序风险:如果 CacheServiceImpl 在 Vertx\n初始化前被加载,定时任务将注册失败且无法恢复。添加 cleanupRegistered 标志防止\n重复注册,Vertx 未就绪时跳过并等待下次调用。",
          "is_bot": false,
          "headline": "fix: CacheManager registerPeriodicCleanup 添加防重入和 Vertx 就绪检查",
          "author_name": "yukaidi",
          "author_login": "yukaidi1220",
          "committed_at": "2026-05-28T23:02:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5eed1fdfa03cceebde13d2dd17cc39d1ee0f167d",
          "body": "用户明确表示不需要改动 MyData 的 TODO,回退 741d7aa 对该文件的修改。",
          "is_bot": false,
          "headline": "revert: 回退 MyData.java 的构造函数修改,恢复为空 TODO",
          "author_name": "yukaidi",
          "author_login": "yukaidi1220",
          "committed_at": "2026-05-28T22:58:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cf7fc4f5023d17631e26d5f569f20fe3a31924ee",
          "body": "token 脱敏日志在 token 可能为 null 时会抛 NPE,添加 null 检查。",
          "is_bot": false,
          "headline": "fix: FjTool login() 中 token.substring 添加 null 保护",
          "author_name": "yukaidi",
          "author_login": "yukaidi1220",
          "committed_at": "2026-05-28T22:58:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0ea31d631a40bd24c8dea425260ae0c77e9e7f57",
          "body": "并发安全修复引入的 h 变量创建后从未使用,后续请求仍通过\nsetTemplateParam(\"appToken\", token) 传递 token。删除死代码并为\n同一行的 token.substring 添加 null 保护。",
          "is_bot": false,
          "headline": "fix: 移除 IzTool/IzToolWithAuth login() 中未使用的 h 变量(死代码)",
          "author_name": "yukaidi",
          "author_login": "yukaidi1220",
          "committed_at": "2026-05-28T22:57:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "74840ab63f869b8a999cbe6a5a02f82c966f6c73",
          "body": "将 catch(Exception) 改为 catch(IllegalArgumentException),\n只捕获 URLDecoder.decode 在遇到非法百分比编码时抛出的具体异常。",
          "is_bot": false,
          "headline": "fix(FsTool): 收窄 parseFileNameFromContentDisposition 中的 catch 异常类型",
          "author_name": "yukaidi",
          "author_login": "yukaidi1220",
          "committed_at": "2026-05-28T22:38:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "31f33339f13d57f4b83be5d56610da4a9adf9f7d",
          "body": "当 otherParam 中缺少 \"paramJson\" 键时,后续 getString 调用会抛出 NPE。\n添加 null 检查并提前返回失败。",
          "is_bot": false,
          "headline": "fix(FsTool): 修复 parseById 中 get(\"paramJson\") 可能导致的 NPE",
          "author_name": "yukaidi",
          "author_login": "yukaidi1220",
          "committed_at": "2026-05-28T22:37:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c0a0d0dc47dfbfcb1a774b7b1f9dc78bc74030d4",
          "body": "当 otherParam 中缺少 \"paramJson\" 键时,后续 getString 调用会抛出 NPE。\n添加 null 检查并提前返回失败。",
          "is_bot": false,
          "headline": "fix(FjTool): 修复 parseById 中 get(\"paramJson\") 可能导致的 NPE",
          "author_name": "yukaidi",
          "author_login": "yukaidi1220",
          "committed_at": "2026-05-28T22:37:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0cd77ee9b99a8ff98cbb5515d100907431306297",
          "body": "当 otherParam 中缺少 \"uuid\" 键时,原代码直接调用 .toString() 会抛出\nNullPointerException。改为先取出 Object 再做 null 检查。",
          "is_bot": false,
          "headline": "fix(IzTool): 修复 parseFileList 中 get(\"uuid\") 可能导致的 NPE",
          "author_name": "yukaidi",
          "author_login": "yukaidi1220",
          "committed_at": "2026-05-28T22:36:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "741d7aa8cadfae73c9488798c44cc8b026f128e1",
          "body": "Implement the MyData(JsonObject) constructor to deserialize `id` and\n`maxSize` fields from the provided JsonObject, replacing the empty TODO.",
          "is_bot": false,
          "headline": "fix: implement MyData @DataObject constructor deserialization",
          "author_name": "yukaidi",
          "author_login": "yukaidi1220",
          "committed_at": "2026-05-28T22:28:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d06a80dc7363323b3d5bb366ff7b7d253601039a",
          "body": "Replace 2 instances of `catch (Exception ignored)` with\n`catch (MalformedURLException ignored)` around `new java.net.URL(url)`\ncalls, since that constructor only throws MalformedURLException.",
          "is_bot": false,
          "headline": "fix: narrow catch exception type in LzTool.java",
          "author_name": "yukaidi",
          "author_login": "yukaidi1220",
          "committed_at": "2026-05-28T22:28:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "86b9c43b8b09be283e707cbb6d56f8e06abb5890",
          "body": "Replace 5 instances of `catch (Exception ignored)` with\n`catch (IllegalStateException ignored)` around matcher.group() calls,\nsince that method only throws IllegalStateException when a named group\ndoes not exist.",
          "is_bot": false,
          "headline": "fix: narrow catch exception type in ParserCreate.java",
          "author_name": "yukaidi",
          "author_login": "yukaidi1220",
          "committed_at": "2026-05-28T22:27:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "206981d4b41abe7609ed6821f4cdd08b5a66a36e",
          "body": "原 ctx.failure().getMessage() 是故意设计——RateLimiter 等组件通过 promise.fail()\n传递用户友好的错误消息(如\"请求次数太多了\"),这些消息需要通过 failureHandler\n返回给客户端。改为固定\"服务器内部错误\"会导致这些消息丢失。\n仅添加 null 检查防止 NPE。",
          "is_bot": false,
          "headline": "revert: RouterHandlerFactory failureHandler 恢复返回 failure message",
          "author_name": "yukaidi",
          "author_login": "yukaidi1220",
          "committed_at": "2026-05-28T22:15:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7d5831b5f4c3b2b8f8c7d1fc06f32b9e621f3025",
          "body": "- UserServiceImpl: 3处\"用户不存在\"统一改为\"用户名或密码错误\"/\"认证失败\"\n- RouterHandlerFactory: failureHandler 中 ctx.failure().getMessage() 改为\"服务器内部错误\"",
          "is_bot": false,
          "headline": "fix: 彻底消除用户枚举和异常信息泄露的遗留问题",
          "author_name": "yukaidi",
          "author_login": "yukaidi1220",
          "committed_at": "2026-05-28T21:53:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7ca63985bd46e95cef029e7c76b2c13caa13718d",
          "body": "该文件仅包含空行,无实际测试代码,直接删除。",
          "is_bot": false,
          "headline": "fix(test): 删除空的 ParserApiClientLinkTest 文件",
          "author_name": "yukaidi",
          "author_login": "yukaidi1220",
          "committed_at": "2026-05-28T20:06:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "06416a4e5f6a2280116d2e1bd30d757702f31743",
          "body": "将各 @Test 方法中局部创建的 Vertx.vertx() 统一为成员变量,\n通过 @Before 创建并初始化,@After 关闭,避免资源泄漏。",
          "is_bot": false,
          "headline": "fix(test): JsFetchBridgeTest Vertx 资源泄漏修复",
          "author_name": "yukaidi",
          "author_login": "yukaidi1220",
          "committed_at": "2026-05-28T20:06:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "88739e8d1add30d1646cfbe49bf688045a1d8b3c",
          "body": "将各 @Test 方法中局部创建的 Vertx.vertx() 统一为成员变量,\n通过 @Before 创建并初始化,@After 关闭,避免资源泄漏。",
          "is_bot": false,
          "headline": "fix(test): JsParserTest Vertx 资源泄漏修复",
          "author_name": "yukaidi",
          "author_login": "yukaidi1220",
          "committed_at": "2026-05-28T20:04:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ffaba4f496b787a74a492490c3608916286cef65",
          "body": "将各 @Test 方法中局部创建的 Vertx.vertx() 统一为成员变量,\n通过 @Before 创建并初始化,@After 关闭,避免资源泄漏。",
          "is_bot": false,
          "headline": "fix(test): BaiduPhotoParserTest Vertx 资源泄漏修复",
          "author_name": "yukaidi",
          "author_login": "yukaidi1220",
          "committed_at": "2026-05-28T20:03:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c4f94a2bc766552c972e21118ac4b17c50f185e1",
          "body": "…Client, PlaygroundApi, LogStatistics, CacheServiceImpl, JsPlaygroundExecutor, JsPlaygroundLogger",
          "is_bot": false,
          "headline": "fix: replace printStackTrace/System.out.println with logger in JsHttp…",
          "author_name": "yukaidi",
          "author_login": "yukaidi1220",
          "committed_at": "2026-05-28T19:48:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "49a391824467d5e78f667c553b50df7a098edd84",
          "body": "…fiableMap; add final to UNIQUE_PREFIX",
          "is_bot": false,
          "headline": "fix: replace double-brace init with static block + Collections.unmodi…",
          "author_name": "yukaidi",
          "author_login": "yukaidi1220",
          "committed_at": "2026-05-28T19:40:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "caddff567f6c8aac0134e6ab5885b2198396c724",
          "body": null,
          "is_bot": false,
          "headline": "fix: replace System.out.println with logger in IpExtractor",
          "author_name": "yukaidi",
          "author_login": "yukaidi1220",
          "committed_at": "2026-05-28T19:39:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "aed9e9f10d0192ec1b0ab54ee3c843e31e807789",
          "body": "…til; add final to static fields",
          "is_bot": false,
          "headline": "fix: replace System.out.println/printStackTrace with logger in ReqIpU…",
          "author_name": "yukaidi",
          "author_login": "yukaidi1220",
          "committed_at": "2026-05-28T19:39:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6557b493830091fff2b7d2c85edc9ab468afa235",
          "body": null,
          "is_bot": false,
          "headline": "fix: replace System.out.println with log.debug in MkgsTool",
          "author_name": "yukaidi",
          "author_login": "yukaidi1220",
          "committed_at": "2026-05-28T19:38:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "082cc4c7436c3651fd29d075ef99a480e6e9935b",
          "body": "…g output",
          "is_bot": false,
          "headline": "fix: replace System.out.println with log in PodTool; mask token in lo…",
          "author_name": "yukaidi",
          "author_login": "yukaidi1220",
          "committed_at": "2026-05-28T19:38:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e261ebe698d7c0394646514328dbedf1945050f0",
          "body": null,
          "is_bot": false,
          "headline": "fix: replace System.out.println with log.debug in WsTool",
          "author_name": "yukaidi",
          "author_login": "yukaidi1220",
          "committed_at": "2026-05-28T19:37:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5a0dc69186bcde0bca118e57f94d69f5f43b8b76",
          "body": "Remove debug logging from production code while preserving\nconsole.error and console.warn for actual error/warning cases.",
          "is_bot": false,
          "headline": "chore: remove debug console.log statements",
          "author_name": "yukaidi",
          "author_login": "yukaidi1220",
          "committed_at": "2026-05-28T19:28:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 21,
      "commits_last_year": 544,
      "latest_release_at": "2026-07-21T07:32:52Z",
      "latest_release_tag": "dependabot/npm_and_yarn/web-front/npm_and_yarn-c42958dede",
      "releases_from_tags": false,
      "days_since_last_push": 2,
      "active_weeks_last_year": 40,
      "days_since_latest_release": 3,
      "mean_days_between_releases": 18.9
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": false,
      "health_percentage": 42,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "cn.qaiu:core",
          "exists": true,
          "license": "MIT License",
          "keywords": [],
          "ecosystem": "maven",
          "matches_repo": false,
          "registry_url": "https://central.sonatype.com/artifact/cn.qaiu/core",
          "is_deprecated": false,
          "latest_version": "1.2.3",
          "repository_url": "https://github.com/qaiu/vxcore/tree/main/core",
          "versions_count": 5,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-02-26T04:41:19Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 148
        },
        {
          "name": "cn.qaiu:parser",
          "exists": true,
          "license": "MIT License",
          "keywords": [],
          "ecosystem": "maven",
          "matches_repo": true,
          "registry_url": "https://central.sonatype.com/artifact/cn.qaiu/parser",
          "is_deprecated": false,
          "latest_version": "10.2.5",
          "repository_url": "https://github.com/qaiu/netdisk-fast-download",
          "versions_count": 12,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-02-25T08:11:19Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 149
        },
        {
          "name": "cn.qaiu:core-database",
          "exists": true,
          "license": "MIT License",
          "keywords": [],
          "ecosystem": "maven",
          "matches_repo": false,
          "registry_url": "https://central.sonatype.com/artifact/cn.qaiu/core-database",
          "is_deprecated": false,
          "latest_version": "1.2.3",
          "repository_url": "https://github.com/qaiu/vxcore/tree/main/core-database",
          "versions_count": 5,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-02-26T04:41:19Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 148
        }
      ]
    },
    "popularity": {
      "forks": 265,
      "stars": 3008,
      "watchers": 14,
      "fork_history": {
        "days": [
          {
            "date": "2023-07-08",
            "count": 1
          },
          {
            "date": "2023-08-03",
            "count": 1
          },
          {
            "date": "2023-08-20",
            "count": 1
          },
          {
            "date": "2023-08-27",
            "count": 1
          },
          {
            "date": "2023-09-15",
            "count": 1
          },
          {
            "date": "2023-09-23",
            "count": 1
          },
          {
            "date": "2023-09-25",
            "count": 6
          },
          {
            "date": "2023-09-26",
            "count": 1
          },
          {
            "date": "2023-09-28",
            "count": 1
          },
          {
            "date": "2023-09-29",
            "count": 1
          },
          {
            "date": "2023-10-05",
            "count": 1
          },
          {
            "date": "2023-10-08",
            "count": 1
          },
          {
            "date": "2023-10-10",
            "count": 1
          },
          {
            "date": "2023-10-13",
            "count": 1
          },
          {
            "date": "2023-10-14",
            "count": 1
          },
          {
            "date": "2023-10-16",
            "count": 1
          },
          {
            "date": "2023-10-18",
            "count": 1
          },
          {
            "date": "2023-10-20",
            "count": 1
          },
          {
            "date": "2023-10-23",
            "count": 1
          },
          {
            "date": "2023-11-02",
            "count": 1
          },
          {
            "date": "2023-11-03",
            "count": 1
          },
          {
            "date": "2023-11-08",
            "count": 1
          },
          {
            "date": "2023-11-20",
            "count": 1
          },
          {
            "date": "2023-11-26",
            "count": 1
          },
          {
            "date": "2023-11-27",
            "count": 1
          },
          {
            "date": "2023-12-04",
            "count": 1
          },
          {
            "date": "2023-12-07",
            "count": 2
          },
          {
            "date": "2023-12-08",
            "count": 1
          },
          {
            "date": "2023-12-16",
            "count": 1
          },
          {
            "date": "2023-12-18",
            "count": 1
          },
          {
            "date": "2023-12-25",
            "count": 1
          },
          {
            "date": "2023-12-28",
            "count": 1
          },
          {
            "date": "2023-12-31",
            "count": 1
          },
          {
            "date": "2024-01-05",
            "count": 1
          },
          {
            "date": "2024-01-08",
            "count": 1
          },
          {
            "date": "2024-01-13",
            "count": 1
          },
          {
            "date": "2024-01-15",
            "count": 1
          },
          {
            "date": "2024-01-19",
            "count": 1
          },
          {
            "date": "2024-01-29",
            "count": 1
          },
          {
            "date": "2024-02-04",
            "count": 1
          },
          {
            "date": "2024-02-05",
            "count": 1
          },
          {
            "date": "2024-02-08",
            "count": 1
          },
          {
            "date": "2024-02-11",
            "count": 1
          },
          {
            "date": "2024-02-15",
            "count": 1
          },
          {
            "date": "2024-02-23",
            "count": 1
          },
          {
            "date": "2024-02-29",
            "count": 1
          },
          {
            "date": "2024-03-05",
            "count": 1
          },
          {
            "date": "2024-03-12",
            "count": 1
          },
          {
            "date": "2024-03-13",
            "count": 1
          },
          {
            "date": "2024-03-17",
            "count": 1
          },
          {
            "date": "2024-04-02",
            "count": 2
          },
          {
            "date": "2024-04-15",
            "count": 1
          },
          {
            "date": "2024-04-26",
            "count": 1
          },
          {
            "date": "2024-04-30",
            "count": 1
          },
          {
            "date": "2024-05-25",
            "count": 1
          },
          {
            "date": "2024-06-14",
            "count": 1
          },
          {
            "date": "2024-06-23",
            "count": 1
          },
          {
            "date": "2024-07-08",
            "count": 1
          },
          {
            "date": "2024-07-18",
            "count": 1
          },
          {
            "date": "2024-07-21",
            "count": 1
          },
          {
            "date": "2024-07-22",
            "count": 2
          },
          {
            "date": "2024-07-25",
            "count": 1
          },
          {
            "date": "2024-07-27",
            "count": 1
          },
          {
            "date": "2024-08-04",
            "count": 1
          },
          {
            "date": "2024-08-08",
            "count": 1
          },
          {
            "date": "2024-09-22",
            "count": 2
          },
          {
            "date": "2024-09-23",
            "count": 2
          },
          {
            "date": "2024-09-29",
            "count": 1
          },
          {
            "date": "2024-10-10",
            "count": 1
          },
          {
            "date": "2024-10-12",
            "count": 3
          },
          {
            "date": "2024-10-21",
            "count": 1
          },
          {
            "date": "2024-10-22",
            "count": 2
          },
          {
            "date": "2024-10-25",
            "count": 2
          },
          {
            "date": "2024-10-29",
            "count": 1
          },
          {
            "date": "2024-10-30",
            "count": 5
          },
          {
            "date": "2024-10-31",
            "count": 2
          },
          {
            "date": "2024-11-01",
            "count": 1
          },
          {
            "date": "2024-11-04",
            "count": 4
          },
          {
            "date": "2024-11-05",
            "count": 1
          },
          {
            "date": "2024-11-06",
            "count": 1
          },
          {
            "date": "2024-11-08",
            "count": 2
          },
          {
            "date": "2024-11-15",
            "count": 1
          },
          {
            "date": "2024-11-17",
            "count": 1
          },
          {
            "date": "2024-11-22",
            "count": 1
          },
          {
            "date": "2024-11-29",
            "count": 1
          },
          {
            "date": "2024-12-13",
            "count": 1
          },
          {
            "date": "2024-12-17",
            "count": 1
          },
          {
            "date": "2024-12-19",
            "count": 1
          },
          {
            "date": "2024-12-20",
            "count": 1
          },
          {
            "date": "2024-12-31",
            "count": 1
          },
          {
            "date": "2025-01-02",
            "count": 2
          },
          {
            "date": "2025-01-03",
            "count": 1
          },
          {
            "date": "2025-01-06",
            "count": 1
          },
          {
            "date": "2025-01-08",
            "count": 1
          },
          {
            "date": "2025-01-10",
            "count": 1
          },
          {
            "date": "2025-01-13",
            "count": 3
          },
          {
            "date": "2025-01-14",
            "count": 2
          },
          {
            "date": "2025-01-15",
            "count": 1
          },
          {
            "date": "2025-01-19",
            "count": 1
          },
          {
            "date": "2025-01-21",
            "count": 1
          },
          {
            "date": "2025-01-22",
            "count": 1
          },
          {
            "date": "2025-02-08",
            "count": 1
          },
          {
            "date": "2025-02-22",
            "count": 2
          },
          {
            "date": "2025-03-12",
            "count": 1
          },
          {
            "date": "2025-03-19",
            "count": 1
          },
          {
            "date": "2025-03-24",
            "count": 1
          },
          {
            "date": "2025-03-31",
            "count": 1
          },
          {
            "date": "2025-04-01",
            "count": 1
          },
          {
            "date": "2025-04-14",
            "count": 1
          },
          {
            "date": "2025-04-15",
            "count": 1
          },
          {
            "date": "2025-04-16",
            "count": 1
          },
          {
            "date": "2025-04-18",
            "count": 1
          },
          {
            "date": "2025-04-21",
            "count": 1
          },
          {
            "date": "2025-05-01",
            "count": 1
          },
          {
            "date": "2025-05-04",
            "count": 1
          },
          {
            "date": "2025-05-13",
            "count": 1
          },
          {
            "date": "2025-05-19",
            "count": 1
          },
          {
            "date": "2025-05-27",
            "count": 1
          },
          {
            "date": "2025-05-31",
            "count": 1
          },
          {
            "date": "2025-06-03",
            "count": 1
          },
          {
            "date": "2025-06-06",
            "count": 1
          },
          {
            "date": "2025-06-09",
            "count": 1
          },
          {
            "date": "2025-06-12",
            "count": 1
          },
          {
            "date": "2025-06-15",
            "count": 1
          },
          {
            "date": "2025-06-17",
            "count": 1
          },
          {
            "date": "2025-06-19",
            "count": 1
          },
          {
            "date": "2025-06-20",
            "count": 3
          },
          {
            "date": "2025-07-01",
            "count": 1
          },
          {
            "date": "2025-07-17",
            "count": 1
          },
          {
            "date": "2025-07-19",
            "count": 1
          },
          {
            "date": "2025-07-29",
            "count": 2
          },
          {
            "date": "2025-08-28",
            "count": 1
          },
          {
            "date": "2025-08-29",
            "count": 1
          },
          {
            "date": "2025-08-30",
            "count": 2
          },
          {
            "date": "2025-09-09",
            "count": 1
          },
          {
            "date": "2025-09-10",
            "count": 1
          },
          {
            "date": "2025-09-16",
            "count": 1
          },
          {
            "date": "2025-09-20",
            "count": 1
          },
          {
            "date": "2025-09-21",
            "count": 1
          },
          {
            "date": "2025-09-25",
            "count": 1
          },
          {
            "date": "2025-10-03",
            "count": 3
          },
          {
            "date": "2025-10-04",
            "count": 1
          },
          {
            "date": "2025-10-07",
            "count": 6
          },
          {
            "date": "2025-10-08",
            "count": 4
          },
          {
            "date": "2025-10-09",
            "count": 1
          },
          {
            "date": "2025-10-13",
            "count": 1
          },
          {
            "date": "2025-10-19",
            "count": 2
          },
          {
            "date": "2025-10-21",
            "count": 1
          },
          {
            "date": "2025-10-22",
            "count": 1
          },
          {
            "date": "2025-10-24",
            "count": 1
          },
          {
            "date": "2025-10-25",
            "count": 1
          },
          {
            "date": "2025-10-31",
            "count": 1
          },
          {
            "date": "2025-11-01",
            "count": 2
          },
          {
            "date": "2025-11-02",
            "count": 1
          },
          {
            "date": "2025-11-03",
            "count": 1
          },
          {
            "date": "2025-11-20",
            "count": 1
          },
          {
            "date": "2025-11-25",
            "count": 1
          },
          {
            "date": "2025-11-27",
            "count": 2
          },
          {
            "date": "2025-11-30",
            "count": 1
          },
          {
            "date": "2025-12-05",
            "count": 1
          },
          {
            "date": "2025-12-06",
            "count": 1
          },
          {
            "date": "2025-12-15",
            "count": 1
          },
          {
            "date": "2025-12-16",
            "count": 1
          },
          {
            "date": "2025-12-18",
            "count": 1
          },
          {
            "date": "2025-12-21",
            "count": 1
          },
          {
            "date": "2026-01-03",
            "count": 1
          },
          {
            "date": "2026-01-07",
            "count": 1
          },
          {
            "date": "2026-01-09",
            "count": 1
          },
          {
            "date": "2026-01-10",
            "count": 2
          },
          {
            "date": "2026-01-13",
            "count": 1
          },
          {
            "date": "2026-01-19",
            "count": 1
          },
          {
            "date": "2026-01-20",
            "count": 2
          },
          {
            "date": "2026-01-24",
            "count": 1
          },
          {
            "date": "2026-02-02",
            "count": 1
          },
          {
            "date": "2026-02-04",
            "count": 1
          },
          {
            "date": "2026-02-06",
            "count": 1
          },
          {
            "date": "2026-02-12",
            "count": 1
          },
          {
            "date": "2026-03-07",
            "count": 1
          },
          {
            "date": "2026-03-08",
            "count": 1
          },
          {
            "date": "2026-03-19",
            "count": 1
          },
          {
            "date": "2026-03-21",
            "count": 2
          },
          {
            "date": "2026-04-05",
            "count": 1
          },
          {
            "date": "2026-04-10",
            "count": 1
          },
          {
            "date": "2026-04-15",
            "count": 2
          },
          {
            "date": "2026-04-16",
            "count": 1
          },
          {
            "date": "2026-04-19",
            "count": 1
          },
          {
            "date": "2026-04-22",
            "count": 1
          },
          {
            "date": "2026-04-24",
            "count": 1
          },
          {
            "date": "2026-04-27",
            "count": 1
          },
          {
            "date": "2026-05-01",
            "count": 1
          },
          {
            "date": "2026-05-02",
            "count": 1
          },
          {
            "date": "2026-05-04",
            "count": 1
          },
          {
            "date": "2026-05-05",
            "count": 1
          },
          {
            "date": "2026-05-14",
            "count": 1
          },
          {
            "date": "2026-05-19",
            "count": 1
          },
          {
            "date": "2026-05-28",
            "count": 1
          },
          {
            "date": "2026-06-06",
            "count": 1
          },
          {
            "date": "2026-06-24",
            "count": 1
          },
          {
            "date": "2026-07-02",
            "count": 1
          },
          {
            "date": "2026-07-06",
            "count": 1
          },
          {
            "date": "2026-07-08",
            "count": 2
          },
          {
            "date": "2026-07-10",
            "count": 1
          },
          {
            "date": "2026-07-13",
            "count": 2
          },
          {
            "date": "2026-07-14",
            "count": 2
          },
          {
            "date": "2026-07-15",
            "count": 1
          },
          {
            "date": "2026-07-19",
            "count": 1
          },
          {
            "date": "2026-07-20",
            "count": 1
          },
          {
            "date": "2026-07-21",
            "count": 1
          },
          {
            "date": "2026-07-24",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 261,
        "total_forks": 265
      },
      "star_history": null,
      "open_issues_and_prs": 18
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [],
      "has_llms_txt": false,
      "has_dockerfile": true,
      "has_mcp_signal": false,
      "bootstrap_files": [],
      "api_schema_files": [
        "web-service/doc/openapi.json"
      ],
      "has_devcontainer": true,
      "typecheck_configs": [
        "parser/src/main/resources/custom-parsers/jsconfig.json",
        "web-front/jsconfig.json"
      ],
      "toolchain_manifests": [
        "core-database/pom.xml",
        "core/pom.xml",
        "parser/pom.xml",
        "pom.xml",
        "web-service/pom.xml"
      ],
      "largest_source_bytes": 89795,
      "source_files_sampled": 252,
      "oversized_source_files": 1,
      "agent_instruction_files": [],
      "agent_instruction_max_bytes": null
    },
    "dependencies": {
      "manifests": [
        "core-database/pom.xml",
        "core/pom.xml",
        "package.json",
        "parser/pom.xml",
        "pom.xml",
        "web-front/package.json",
        "web-service/pom.xml"
      ],
      "advisories": {
        "error": null,
        "scope": "published_package",
        "source": "osv",
        "findings": [
          {
            "name": "com.fasterxml.jackson.core:jackson-databind",
            "direct": true,
            "version": "2.18.3",
            "severity": "high",
            "ecosystem": "maven",
            "cvss_score": 8.1,
            "advisory_ids": [
              "GHSA-3pjw-73gf-8qr5",
              "GHSA-5gvw-p9qm-jgwh",
              "GHSA-5jmj-h7xm-6q6v",
              "GHSA-hgj6-7826-r7m5",
              "GHSA-j3rv-43j4-c7qm",
              "GHSA-mhm7-754m-9p8w",
              "GHSA-rmj7-2vxq-3g9f"
            ],
            "fixed_version": "3.2.1",
            "advisory_count": 7,
            "oldest_advisory_days": 30
          },
          {
            "name": "com.fasterxml.jackson.core:jackson-core",
            "direct": false,
            "version": "2.16.1",
            "severity": "high",
            "ecosystem": "maven",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-72hv-8253-57qq",
              "GHSA-r7wm-3cxj-wff9"
            ],
            "fixed_version": "3.2.1",
            "advisory_count": 2,
            "oldest_advisory_days": 146
          },
          {
            "name": "io.netty:netty-codec",
            "direct": false,
            "version": "4.1.130.Final",
            "severity": "high",
            "ecosystem": "maven",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-558v-64gr-wgg4",
              "GHSA-mj4r-2hfc-f8p6"
            ],
            "fixed_version": "4.2.16.Final",
            "advisory_count": 2,
            "oldest_advisory_days": 78
          },
          {
            "name": "io.netty:netty-codec-dns",
            "direct": false,
            "version": "4.1.130.Final",
            "severity": "high",
            "ecosystem": "maven",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-cm33-6792-r9fm",
              "GHSA-mfg7-5gfp-c4w3"
            ],
            "fixed_version": "4.2.16.Final",
            "advisory_count": 2,
            "oldest_advisory_days": 78
          },
          {
            "name": "io.netty:netty-codec-http",
            "direct": false,
            "version": "4.1.130.Final",
            "severity": "high",
            "ecosystem": "maven",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-38f8-5428-x5cv",
              "GHSA-4mp9-239f-g9hg",
              "GHSA-57rv-r2g8-2cj3",
              "GHSA-6cqp-g7gg-8hr5",
              "GHSA-6jqx-86gh-f27w",
              "GHSA-f6hv-jmp6-3vwv",
              "GHSA-gcjf-9mgh-3p7g",
              "GHSA-hvcg-qmg6-jm4c",
              "GHSA-jppx-w49h-x2qq",
              "GHSA-m4cv-j2px-7723"
            ],
            "fixed_version": "4.2.16.Final",
            "advisory_count": 15,
            "oldest_advisory_days": 119
          },
          {
            "name": "io.netty:netty-codec-http2",
            "direct": false,
            "version": "4.1.130.Final",
            "severity": "high",
            "ecosystem": "maven",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-563q-j3cm-6jxm",
              "GHSA-5x3r-wrvg-rp6q",
              "GHSA-c2gf-v879-257j",
              "GHSA-c69g-56f8-xwqj",
              "GHSA-f6hv-jmp6-3vwv",
              "GHSA-w9fj-cfpg-grvv"
            ],
            "fixed_version": "4.2.16.Final",
            "advisory_count": 6,
            "oldest_advisory_days": 119
          },
          {
            "name": "io.netty:netty-handler",
            "direct": false,
            "version": "4.1.130.Final",
            "severity": "high",
            "ecosystem": "maven",
            "cvss_score": 8.1,
            "advisory_ids": [
              "GHSA-3qp7-7mw8-wx86",
              "GHSA-c653-97m9-rcg9",
              "GHSA-x4gw-5cx5-pgmh"
            ],
            "fixed_version": "4.2.15.Final",
            "advisory_count": 3,
            "oldest_advisory_days": 45
          },
          {
            "name": "io.netty:netty-resolver-dns",
            "direct": false,
            "version": "4.1.130.Final",
            "severity": "high",
            "ecosystem": "maven",
            "cvss_score": 8.7,
            "advisory_ids": [
              "GHSA-5pvg-856g-cp85",
              "GHSA-676x-f7gg-47vc",
              "GHSA-xmv7-r254-6q78"
            ],
            "fixed_version": "4.2.15.Final",
            "advisory_count": 3,
            "oldest_advisory_days": 45
          },
          {
            "name": "ch.qos.logback:logback-core",
            "direct": false,
            "version": "1.5.17",
            "severity": "moderate",
            "ecosystem": "maven",
            "cvss_score": 4.8,
            "advisory_ids": [
              "GHSA-25qh-j22f-pwp8",
              "GHSA-jhq6-gfmj-v8fx",
              "GHSA-p47f-322f-whfh",
              "GHSA-qqpg-mvqg-649v"
            ],
            "fixed_version": "1.5.34",
            "advisory_count": 4,
            "oldest_advisory_days": 296
          },
          {
            "name": "io.netty:netty-handler-proxy",
            "direct": false,
            "version": "4.1.130.Final",
            "severity": "moderate",
            "ecosystem": "maven",
            "cvss_score": 5.3,
            "advisory_ids": [
              "GHSA-45q3-82m4-75jr"
            ],
            "fixed_version": "4.2.13.Final",
            "advisory_count": 1,
            "oldest_advisory_days": 78
          },
          {
            "name": "io.vertx:vertx-core",
            "direct": false,
            "version": "4.5.25",
            "severity": "moderate",
            "ecosystem": "maven",
            "cvss_score": 5.3,
            "advisory_ids": [
              "GHSA-3g76-f9xq-8vp6"
            ],
            "fixed_version": "5.0.12",
            "advisory_count": 1,
            "oldest_advisory_days": 76
          }
        ],
        "collected": true,
        "malicious": [],
        "truncated": false,
        "by_severity": {
          "high": 8,
          "moderate": 3
        },
        "advisory_count": 46,
        "affected_count": 11,
        "assessed_count": 67,
        "malicious_count": 0,
        "assessed_package": "maven:cn.qaiu:core@1.2.3",
        "unassessed_count": 0,
        "direct_affected_count": 1
      },
      "ecosystems": [
        "maven",
        "npm"
      ],
      "dependencies": [
        {
          "name": "cn.qaiu:core",
          "manifest": "core-database/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "com.h2database:h2",
          "manifest": "core-database/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "2.2.220"
        },
        {
          "name": "com.zaxxer:HikariCP",
          "manifest": "core-database/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "5.0.1"
        },
        {
          "name": "org.apache.commons:commons-lang3",
          "manifest": "core-database/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "3.18.0"
        },
        {
          "name": "io.vertx:vertx-codegen",
          "manifest": "core-database/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${vertx.version}"
        },
        {
          "name": "io.vertx:vertx-sql-client-templates",
          "manifest": "core-database/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${vertx.version}"
        },
        {
          "name": "io.vertx:vertx-jdbc-client",
          "manifest": "core-database/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${vertx.version}"
        },
        {
          "name": "com.mysql:mysql-connector-j",
          "manifest": "core-database/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "9.2.0"
        },
        {
          "name": "org.postgresql:postgresql",
          "manifest": "core-database/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "42.7.11"
        },
        {
          "name": "ch.qos.logback:logback-classic",
          "manifest": "core/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${logback.version}"
        },
        {
          "name": "org.slf4j:slf4j-api",
          "manifest": "core/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${slf4j.version}"
        },
        {
          "name": "io.vertx:vertx-web",
          "manifest": "core/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "io.vertx:vertx-codegen",
          "manifest": "core/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "io.vertx:vertx-config",
          "manifest": "core/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "io.vertx:vertx-config-yaml",
          "manifest": "core/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "io.vertx:vertx-service-proxy",
          "manifest": "core/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "io.vertx:vertx-web-proxy",
          "manifest": "core/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "org.reflections:reflections",
          "manifest": "core/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${org.reflections.version}"
        },
        {
          "name": "org.apache.commons:commons-lang3",
          "manifest": "core/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${commons-lang3.version}"
        },
        {
          "name": "com.fasterxml.jackson.core:jackson-databind",
          "manifest": "core/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${jackson.version}"
        },
        {
          "name": "com.fasterxml.jackson.datatype:jackson-datatype-jsr310",
          "manifest": "core/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${jackson.version}"
        },
        {
          "name": "mvn",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^3.5.0"
        },
        {
          "name": "ch.qos.logback:logback-classic",
          "manifest": "parser/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${logback.version}"
        },
        {
          "name": "org.slf4j:slf4j-api",
          "manifest": "parser/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${slf4j.version}"
        },
        {
          "name": "io.vertx:vertx-web-client",
          "manifest": "parser/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${vertx.version}"
        },
        {
          "name": "org.apache.commons:commons-lang3",
          "manifest": "parser/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${commons-lang3.version}"
        },
        {
          "name": "org.openjdk.nashorn:nashorn-core",
          "manifest": "parser/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "15.4"
        },
        {
          "name": "org.brotli:dec",
          "manifest": "parser/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "0.1.2"
        },
        {
          "name": "org.apache.groovy:groovy",
          "manifest": "parser/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "4.0.24"
        },
        {
          "name": "io.vertx:vertx-dependencies",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${vertx.version}"
        },
        {
          "name": "ch.qos.logback:logback-classic",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${logback.version}"
        },
        {
          "name": "ch.qos.logback:logback-core",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${logback.version}"
        },
        {
          "name": "cn.qaiu:core",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${revision}"
        },
        {
          "name": "cn.qaiu:core-database",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${revision}"
        },
        {
          "name": "cn.qaiu:parser",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${parserVersion}"
        },
        {
          "name": "@element-plus/icons-vue",
          "manifest": "web-front/package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.3.1"
        },
        {
          "name": "@monaco-editor/loader",
          "manifest": "web-front/package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.4.0"
        },
        {
          "name": "@vueuse/core",
          "manifest": "web-front/package.json",
          "ecosystem": "npm",
          "version_constraint": "^11.2.0"
        },
        {
          "name": "axios",
          "manifest": "web-front/package.json",
          "ecosystem": "npm",
          "version_constraint": "1.16.1"
        },
        {
          "name": "clipboard",
          "manifest": "web-front/package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.0.11"
        },
        {
          "name": "core-js",
          "manifest": "web-front/package.json",
          "ecosystem": "npm",
          "version_constraint": "^3.8.3"
        },
        {
          "name": "crypto-js",
          "manifest": "web-front/package.json",
          "ecosystem": "npm",
          "version_constraint": "^4.2.0"
        },
        {
          "name": "element-plus",
          "manifest": "web-front/package.json",
          "ecosystem": "npm",
          "version_constraint": "2.11.3"
        },
        {
          "name": "monaco-editor",
          "manifest": "web-front/package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.55.1"
        },
        {
          "name": "qrcode",
          "manifest": "web-front/package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.5.4"
        },
        {
          "name": "splitpanes",
          "manifest": "web-front/package.json",
          "ecosystem": "npm",
          "version_constraint": "^4.0.4"
        },
        {
          "name": "vue",
          "manifest": "web-front/package.json",
          "ecosystem": "npm",
          "version_constraint": "^3.5.12"
        },
        {
          "name": "vue-clipboard3",
          "manifest": "web-front/package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.0.0"
        },
        {
          "name": "vue-router",
          "manifest": "web-front/package.json",
          "ecosystem": "npm",
          "version_constraint": "^4.5.1"
        },
        {
          "name": "vue3-json-viewer",
          "manifest": "web-front/package.json",
          "ecosystem": "npm",
          "version_constraint": "2.2.2"
        },
        {
          "name": "cn.qaiu:core",
          "manifest": "web-service/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "cn.qaiu:core-database",
          "manifest": "web-service/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "cn.qaiu:parser",
          "manifest": "web-service/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "ch.qos.logback:logback-classic",
          "manifest": "web-service/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${logback.version}"
        },
        {
          "name": "org.fusesource.jansi:jansi",
          "manifest": "web-service/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "1.17.1"
        },
        {
          "name": "org.slf4j:slf4j-api",
          "manifest": "web-service/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${slf4j.version}"
        }
      ],
      "all_dependencies": {
        "error": null,
        "source": "github-sbom",
        "packages": [
          {
            "name": "ch.qos.logback:logback-classic",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "ch.qos.logback:logback-classic",
            "direct": true,
            "version": "1.5.8",
            "ecosystem": "maven"
          },
          {
            "name": "ch.qos.logback:logback-core",
            "direct": true,
            "version": "1.5.8",
            "ecosystem": "maven"
          },
          {
            "name": "cn.qaiu:core",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "cn.qaiu:core",
            "direct": true,
            "version": "0.1.8",
            "ecosystem": "maven"
          },
          {
            "name": "cn.qaiu:core-database",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "cn.qaiu:core-database",
            "direct": true,
            "version": "0.1.8",
            "ecosystem": "maven"
          },
          {
            "name": "cn.qaiu:parser",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "cn.qaiu:parser",
            "direct": true,
            "version": "0.1.8",
            "ecosystem": "maven"
          },
          {
            "name": "com.fasterxml.jackson.core:jackson-databind",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "com.fasterxml.jackson.core:jackson-databind",
            "direct": true,
            "version": "2.16.1",
            "ecosystem": "maven"
          },
          {
            "name": "com.fasterxml.jackson.datatype:jackson-datatype-jsr310",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "com.fasterxml.jackson.datatype:jackson-datatype-jsr310",
            "direct": true,
            "version": "2.16.1",
            "ecosystem": "maven"
          },
          {
            "name": "com.h2database:h2",
            "direct": true,
            "version": "2.2.220",
            "ecosystem": "maven"
          },
          {
            "name": "com.mysql:mysql-connector-j",
            "direct": true,
            "version": "9.2.0",
            "ecosystem": "maven"
          },
          {
            "name": "com.zaxxer:HikariCP",
            "direct": true,
            "version": "5.0.1",
            "ecosystem": "maven"
          },
          {
            "name": "io.vertx:vertx-codegen",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "io.vertx:vertx-codegen",
            "direct": true,
            "version": "4.5.6",
            "ecosystem": "maven"
          },
          {
            "name": "io.vertx:vertx-config",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "io.vertx:vertx-config",
            "direct": true,
            "version": "4.5.6",
            "ecosystem": "maven"
          },
          {
            "name": "io.vertx:vertx-config-yaml",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "io.vertx:vertx-config-yaml",
            "direct": true,
            "version": "4.5.6",
            "ecosystem": "maven"
          },
          {
            "name": "io.vertx:vertx-jdbc-client",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "io.vertx:vertx-jdbc-client",
            "direct": true,
            "version": "4.5.6",
            "ecosystem": "maven"
          },
          {
            "name": "io.vertx:vertx-service-proxy",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "io.vertx:vertx-service-proxy",
            "direct": true,
            "version": "4.5.6",
            "ecosystem": "maven"
          },
          {
            "name": "io.vertx:vertx-sql-client-templates",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "io.vertx:vertx-sql-client-templates",
            "direct": true,
            "version": "4.5.6",
            "ecosystem": "maven"
          },
          {
            "name": "io.vertx:vertx-web",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "io.vertx:vertx-web",
            "direct": true,
            "version": "4.5.6",
            "ecosystem": "maven"
          },
          {
            "name": "io.vertx:vertx-web-client",
            "direct": true,
            "version": "4.5.27",
            "ecosystem": "maven"
          },
          {
            "name": "io.vertx:vertx-web-client",
            "direct": true,
            "version": "4.5.6",
            "ecosystem": "maven"
          },
          {
            "name": "io.vertx:vertx-web-proxy",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "io.vertx:vertx-web-proxy",
            "direct": true,
            "version": "4.5.6",
            "ecosystem": "maven"
          },
          {
            "name": "org.apache.commons:commons-lang3",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.apache.commons:commons-lang3",
            "direct": true,
            "version": "3.12.0",
            "ecosystem": "maven"
          },
          {
            "name": "org.apache.commons:commons-lang3",
            "direct": true,
            "version": "3.18.0",
            "ecosystem": "maven"
          },
          {
            "name": "org.apache.groovy:groovy",
            "direct": true,
            "version": "4.0.24",
            "ecosystem": "maven"
          },
          {
            "name": "org.brotli:dec",
            "direct": true,
            "version": "0.1.2",
            "ecosystem": "maven"
          },
          {
            "name": "org.fusesource.jansi:jansi",
            "direct": true,
            "version": "1.17.1",
            "ecosystem": "maven"
          },
          {
            "name": "org.openjdk.nashorn:nashorn-core",
            "direct": true,
            "version": "15.4",
            "ecosystem": "maven"
          },
          {
            "name": "org.postgresql:postgresql",
            "direct": true,
            "version": "42.7.11",
            "ecosystem": "maven"
          },
          {
            "name": "org.postgresql:postgresql",
            "direct": true,
            "version": "42.7.3",
            "ecosystem": "maven"
          },
          {
            "name": "org.reflections:reflections",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.reflections:reflections",
            "direct": true,
            "version": "0.10.2",
            "ecosystem": "maven"
          },
          {
            "name": "org.slf4j:slf4j-api",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.slf4j:slf4j-api",
            "direct": true,
            "version": "2.0.16",
            "ecosystem": "maven"
          },
          {
            "name": "org.slf4j:slf4j-api",
            "direct": true,
            "version": "2.0.5",
            "ecosystem": "maven"
          },
          {
            "name": "@element-plus/icons-vue",
            "direct": true,
            "version": "^2.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "@monaco-editor/loader",
            "direct": true,
            "version": "^1.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "@vueuse/core",
            "direct": true,
            "version": "^11.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "axios",
            "direct": true,
            "version": "1.16.1",
            "ecosystem": "npm"
          },
          {
            "name": "clipboard",
            "direct": true,
            "version": "^2.0.11",
            "ecosystem": "npm"
          },
          {
            "name": "core-js",
            "direct": true,
            "version": "^3.8.3",
            "ecosystem": "npm"
          },
          {
            "name": "crypto-js",
            "direct": true,
            "version": "^4.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "element-plus",
            "direct": true,
            "version": "2.11.3",
            "ecosystem": "npm"
          },
          {
            "name": "monaco-editor",
            "direct": true,
            "version": "^0.55.1",
            "ecosystem": "npm"
          },
          {
            "name": "mvn",
            "direct": true,
            "version": "^3.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "qrcode",
            "direct": true,
            "version": "^1.5.4",
            "ecosystem": "npm"
          },
          {
            "name": "splitpanes",
            "direct": true,
            "version": "^4.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "vue",
            "direct": true,
            "version": "^3.5.12",
            "ecosystem": "npm"
          },
          {
            "name": "vue-clipboard3",
            "direct": true,
            "version": "^2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "vue-router",
            "direct": true,
            "version": "^4.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "vue3-json-viewer",
            "direct": true,
            "version": "2.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "com.fasterxml.jackson.core:jackson-annotations",
            "direct": false,
            "version": "2.16.1",
            "ecosystem": "maven"
          },
          {
            "name": "com.fasterxml.jackson.core:jackson-core",
            "direct": false,
            "version": "2.16.1",
            "ecosystem": "maven"
          },
          {
            "name": "com.google.code.findbugs:jsr305",
            "direct": false,
            "version": "3.0.2",
            "ecosystem": "maven"
          },
          {
            "name": "com.google.protobuf:protobuf-java",
            "direct": false,
            "version": "4.29.0",
            "ecosystem": "maven"
          },
          {
            "name": "com.mchange:c3p0",
            "direct": false,
            "version": "0.9.5.5",
            "ecosystem": "maven"
          },
          {
            "name": "com.mchange:mchange-commons-java",
            "direct": false,
            "version": "0.2.19",
            "ecosystem": "maven"
          },
          {
            "name": "io.netty:netty-buffer",
            "direct": false,
            "version": "4.1.108.Final",
            "ecosystem": "maven"
          },
          {
            "name": "io.netty:netty-codec",
            "direct": false,
            "version": "4.1.108.Final",
            "ecosystem": "maven"
          },
          {
            "name": "io.netty:netty-codec-dns",
            "direct": false,
            "version": "4.1.108.Final",
            "ecosystem": "maven"
          },
          {
            "name": "io.netty:netty-codec-http",
            "direct": false,
            "version": "4.1.108.Final",
            "ecosystem": "maven"
          },
          {
            "name": "io.netty:netty-codec-http2",
            "direct": false,
            "version": "4.1.108.Final",
            "ecosystem": "maven"
          },
          {
            "name": "io.netty:netty-codec-socks",
            "direct": false,
            "version": "4.1.108.Final",
            "ecosystem": "maven"
          },
          {
            "name": "io.netty:netty-common",
            "direct": false,
            "version": "4.1.108.Final",
            "ecosystem": "maven"
          },
          {
            "name": "io.netty:netty-handler",
            "direct": false,
            "version": "4.1.108.Final",
            "ecosystem": "maven"
          },
          {
            "name": "io.netty:netty-handler-proxy",
            "direct": false,
            "version": "4.1.108.Final",
            "ecosystem": "maven"
          },
          {
            "name": "io.netty:netty-resolver",
            "direct": false,
            "version": "4.1.108.Final",
            "ecosystem": "maven"
          },
          {
            "name": "io.netty:netty-resolver-dns",
            "direct": false,
            "version": "4.1.108.Final",
            "ecosystem": "maven"
          },
          {
            "name": "io.netty:netty-transport",
            "direct": false,
            "version": "4.1.108.Final",
            "ecosystem": "maven"
          },
          {
            "name": "io.netty:netty-transport-native-unix-common",
            "direct": false,
            "version": "4.1.108.Final",
            "ecosystem": "maven"
          },
          {
            "name": "io.vertx:vertx-auth-common",
            "direct": false,
            "version": "4.5.6",
            "ecosystem": "maven"
          },
          {
            "name": "io.vertx:vertx-bridge-common",
            "direct": false,
            "version": "4.5.6",
            "ecosystem": "maven"
          },
          {
            "name": "io.vertx:vertx-core",
            "direct": false,
            "version": "4.5.6",
            "ecosystem": "maven"
          },
          {
            "name": "io.vertx:vertx-http-proxy",
            "direct": false,
            "version": "4.5.6",
            "ecosystem": "maven"
          },
          {
            "name": "io.vertx:vertx-sql-client",
            "direct": false,
            "version": "4.5.6",
            "ecosystem": "maven"
          },
          {
            "name": "io.vertx:vertx-uri-template",
            "direct": false,
            "version": "4.5.6",
            "ecosystem": "maven"
          },
          {
            "name": "io.vertx:vertx-web-common",
            "direct": false,
            "version": "4.5.6",
            "ecosystem": "maven"
          },
          {
            "name": "junit:junit",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "junit:junit",
            "direct": false,
            "version": "4.13.2",
            "ecosystem": "maven"
          },
          {
            "name": "org.apache.maven.plugins:maven-assembly-plugin",
            "direct": false,
            "version": "3.3.0",
            "ecosystem": "maven"
          },
          {
            "name": "org.apache.maven.plugins:maven-dependency-plugin",
            "direct": false,
            "version": "3.1.2",
            "ecosystem": "maven"
          },
          {
            "name": "org.apache.maven.plugins:maven-deploy-plugin",
            "direct": false,
            "version": "3.1.2",
            "ecosystem": "maven"
          },
          {
            "name": "org.apache.maven.plugins:maven-gpg-plugin",
            "direct": false,
            "version": "3.2.7",
            "ecosystem": "maven"
          },
          {
            "name": "org.apache.maven.plugins:maven-jar-plugin",
            "direct": false,
            "version": "3.2.0",
            "ecosystem": "maven"
          },
          {
            "name": "org.apache.maven.plugins:maven-javadoc-plugin",
            "direct": false,
            "version": "3.7.0",
            "ecosystem": "maven"
          },
          {
            "name": "org.apache.maven.plugins:maven-source-plugin",
            "direct": false,
            "version": "3.3.0",
            "ecosystem": "maven"
          },
          {
            "name": "org.checkerframework:checker-qual",
            "direct": false,
            "version": "3.42.0",
            "ecosystem": "maven"
          },
          {
            "name": "org.codehaus.gmavenplus:gmavenplus-plugin",
            "direct": false,
            "version": "4.1.1",
            "ecosystem": "maven"
          },
          {
            "name": "org.codehaus.mojo:flatten-maven-plugin",
            "direct": false,
            "version": "1.6.0",
            "ecosystem": "maven"
          },
          {
            "name": "org.hamcrest:hamcrest-core",
            "direct": false,
            "version": "1.3",
            "ecosystem": "maven"
          },
          {
            "name": "org.javassist:javassist",
            "direct": false,
            "version": "3.28.0-GA",
            "ecosystem": "maven"
          },
          {
            "name": "org.ow2.asm:asm",
            "direct": false,
            "version": "7.3.1",
            "ecosystem": "maven"
          },
          {
            "name": "org.ow2.asm:asm-analysis",
            "direct": false,
            "version": "7.3.1",
            "ecosystem": "maven"
          },
          {
            "name": "org.ow2.asm:asm-commons",
            "direct": false,
            "version": "7.3.1",
            "ecosystem": "maven"
          },
          {
            "name": "org.ow2.asm:asm-tree",
            "direct": false,
            "version": "7.3.1",
            "ecosystem": "maven"
          },
          {
            "name": "org.ow2.asm:asm-util",
            "direct": false,
            "version": "7.3.1",
            "ecosystem": "maven"
          },
          {
            "name": "org.projectlombok:lombok",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.projectlombok:lombok",
            "direct": false,
            "version": "1.18.38",
            "ecosystem": "maven"
          },
          {
            "name": "org.sonatype.central:central-publishing-maven-plugin",
            "direct": false,
            "version": "0.6.0",
            "ecosystem": "maven"
          },
          {
            "name": "org.yaml:snakeyaml",
            "direct": false,
            "version": "2.0",
            "ecosystem": "maven"
          },
          {
            "name": "@babel/core",
            "direct": false,
            "version": "^7.26.0",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/eslint-parser",
            "direct": false,
            "version": "^7.25.9",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-transform-class-properties",
            "direct": false,
            "version": "^7.26.0",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-transform-class-static-block",
            "direct": false,
            "version": "^7.26.0",
            "ecosystem": "npm"
          },
          {
            "name": "@vue/babel-plugin-transform-vue-jsx",
            "direct": false,
            "version": "^1.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "@vue/cli-plugin-babel",
            "direct": false,
            "version": "~5.0.8",
            "ecosystem": "npm"
          },
          {
            "name": "@vue/cli-plugin-eslint",
            "direct": false,
            "version": "~5.0.8",
            "ecosystem": "npm"
          },
          {
            "name": "@vue/cli-service",
            "direct": false,
            "version": "~5.0.8",
            "ecosystem": "npm"
          },
          {
            "name": "compression-webpack-plugin",
            "direct": false,
            "version": "^11.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "eslint",
            "direct": false,
            "version": "^9.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "eslint-plugin-vue",
            "direct": false,
            "version": "^9.30.0",
            "ecosystem": "npm"
          },
          {
            "name": "filemanager-webpack-plugin",
            "direct": false,
            "version": "8.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "monaco-editor-webpack-plugin",
            "direct": false,
            "version": "^7.1.1",
            "ecosystem": "npm"
          }
        ],
        "collected": true,
        "truncated": false,
        "total_count": 126,
        "direct_count": 64,
        "indirect_count": 62
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 4,
        "merged_prs": 55,
        "open_issues": 14,
        "closed_ratio": 0.88,
        "closed_issues": 103,
        "closed_unmerged_prs": 26
      },
      "bus_factor": 1,
      "bot_contributors": 2,
      "top_contributors": [
        {
          "type": "User",
          "login": "qaiu",
          "commits": 711,
          "avatar_url": "https://avatars.githubusercontent.com/u/29825328?v=4"
        },
        {
          "type": "User",
          "login": "yukaidi1220",
          "commits": 146,
          "avatar_url": "https://avatars.githubusercontent.com/u/98259608?v=4"
        },
        {
          "type": "User",
          "login": "rensumo",
          "commits": 10,
          "avatar_url": "https://avatars.githubusercontent.com/u/199432183?v=4"
        },
        {
          "type": "User",
          "login": "yyzy-official",
          "commits": 6,
          "avatar_url": "https://avatars.githubusercontent.com/u/218790145?v=4"
        },
        {
          "type": "User",
          "login": "BLSKWOLF",
          "commits": 4,
          "avatar_url": "https://avatars.githubusercontent.com/u/76619116?v=4"
        },
        {
          "type": "User",
          "login": "xrgzs",
          "commits": 4,
          "avatar_url": "https://avatars.githubusercontent.com/u/26499123?v=4"
        },
        {
          "type": "User",
          "login": "Edakerx",
          "commits": 2,
          "avatar_url": "https://avatars.githubusercontent.com/u/133368599?v=4"
        }
      ],
      "contributors_sampled": 7,
      "top_contributor_share": 0.805
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "build.yml",
        "maven.yml"
      ],
      "has_docs_dir": false,
      "linter_configs": [],
      "has_editorconfig": false,
      "has_linter_config": false,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 8,
            "reason": "binaries present in source code",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": null,
            "reason": "internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": 10,
            "reason": "3 out of 3 merged PRs checked by a CI test -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 1,
            "reason": "Found 3/18 approved changesets -- score normalized to 1",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 6,
            "reason": "project has 2 contributing companies or organizations -- score normalized to 6",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 10,
            "reason": "no dangerous workflow patterns detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 10,
            "reason": "update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 10,
            "reason": "30 commit(s) and 5 issue activity found in the last 90 days -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": 10,
            "reason": "packaging workflow detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 0,
            "reason": "dependency not pinned by hash detected -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "SAST tool is not run on all commits -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 0,
            "reason": "security policy file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": 0,
            "reason": "Project has not signed or included provenance with any releases.",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 0,
            "reason": "detected GitHub workflow tokens with excessive permissions",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 0,
            "reason": "24 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "aeb4394cf801fee793ab52f98a539f6f8c064a3e",
        "ran_at": "2026-07-24T17:46:02Z",
        "aggregate_score": 4.4,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": false,
      "has_dependabot_config": true
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-24T10:08:42Z",
      "oldest_open_prs": [
        {
          "number": 199,
          "created_at": "2026-07-06T02:09:02Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 200,
          "created_at": "2026-07-07T02:29:44Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 203,
          "created_at": "2026-07-21T07:29:40Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 204,
          "created_at": "2026-07-24T10:06:10Z",
          "last_comment_at": "2026-07-24T13:06:52Z",
          "last_comment_author": "qaiu"
        }
      ],
      "last_merged_pr_at": "2026-06-10T13:32:22Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": [
        {
          "number": 15,
          "created_at": "2023-08-24T12:15:12Z",
          "last_comment_at": "2025-05-03T12:15:52Z",
          "last_comment_author": "HZBHZB1234"
        },
        {
          "number": 65,
          "created_at": "2024-10-11T18:53:00Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 80,
          "created_at": "2024-12-31T00:31:56Z",
          "last_comment_at": "2025-12-10T15:45:38Z",
          "last_comment_author": "GK-sky"
        },
        {
          "number": 85,
          "created_at": "2025-02-10T06:37:18Z",
          "last_comment_at": "2025-02-20T21:16:28Z",
          "last_comment_author": "qaiu"
        },
        {
          "number": 90,
          "created_at": "2025-02-27T16:02:04Z",
          "last_comment_at": "2025-12-19T04:41:57Z",
          "last_comment_author": "qaiu"
        },
        {
          "number": 112,
          "created_at": "2025-07-18T14:03:35Z",
          "last_comment_at": "2025-07-18T14:59:44Z",
          "last_comment_author": "qaiu"
        },
        {
          "number": 114,
          "created_at": "2025-07-27T10:31:04Z",
          "last_comment_at": "2025-08-05T05:16:16Z",
          "last_comment_author": "qaiu"
        },
        {
          "number": 116,
          "created_at": "2025-07-28T14:11:02Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 122,
          "created_at": "2025-09-09T05:10:18Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 184,
          "created_at": "2026-05-14T11:43:05Z",
          "last_comment_at": "2026-05-14T11:47:40Z",
          "last_comment_author": "qaiu"
        },
        {
          "number": 194,
          "created_at": "2026-06-10T08:37:20Z",
          "last_comment_at": "2026-06-10T21:55:27Z",
          "last_comment_author": "qaiu"
        },
        {
          "number": 197,
          "created_at": "2026-06-24T02:41:44Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 198,
          "created_at": "2026-06-25T08:46:38Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 201,
          "created_at": "2026-07-18T02:24:27Z",
          "last_comment_at": "2026-07-21T01:27:27Z",
          "last_comment_author": "qaiu"
        }
      ]
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/qaiu/netdisk-fast-download",
    "host": "github.com",
    "name": "netdisk-fast-download",
    "owner": "qaiu"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 67,
      "inputs": {
        "security": 43,
        "vitality": 91,
        "community": 68,
        "governance": 61,
        "engineering": 67
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "excellent",
        "name": "Vitality",
        "value": 91,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "excellent",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 92,
            "inputs": {
              "commits_last_year": 544,
              "human_commit_share": 0.98,
              "days_since_last_push": 2,
              "active_weeks_last_year": 40
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 2 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 2
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "40/52 weeks with commits",
                "points": 27.7,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 40
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "544 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 544
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "30 commit(s) and 5 issue activity found in the last 90 days -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": null,
            "notes": [],
            "value": 90,
            "inputs": {
              "releases_count": 21,
              "latest_release_tag": "dependabot/npm_and_yarn/web-front/npm_and_yarn-c42958dede",
              "releases_from_tags": false,
              "days_since_latest_release": 3,
              "mean_days_between_releases": 18.9
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "21 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 21
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 3 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 3
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~18.9 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 18.9
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "Project has not signed or included provenance with any releases.",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "maintained",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": null,
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": 2,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "last human commit 2 days ago",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_maintained",
                    "params": {
                      "days": 2
                    }
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "moderate",
        "name": "Community & Adoption",
        "value": 68,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "good",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 83,
            "inputs": {
              "forks": 265,
              "stars": 3008,
              "watchers": 14,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "3,008 stars",
                "points": 56.4,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 3008
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "265 forks",
                "points": 20.2,
                "status": "partial",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 265
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "14 watchers",
                "points": 6.2,
                "status": "partial",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 14
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "moderate",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 50,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": false,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (MIT)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "MIT"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.3
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "moderate",
        "name": "Sustainability & Governance",
        "value": 61,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 29,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 7,
              "top_contributor_share": 0.805
            },
            "components": [
              {
                "key": "bus_factor",
                "name": "Bus factor",
                "detail": "1 contributor(s) cover half of all commits",
                "points": 9,
                "status": "partial",
                "details": [
                  {
                    "code": "bus_factor",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 54
              },
              {
                "key": "commit_distribution",
                "name": "Commit distribution",
                "detail": "top contributor authored 80% of commits",
                "points": 4.4,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 80
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "7 contributors",
                "points": 9.5,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 7
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 2 contributing companies or organizations -- score normalized to 6",
                "points": 6,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "moderate",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 69,
            "inputs": {
              "merged_prs": 55,
              "open_issues": 14,
              "closed_issues": 103,
              "issue_closed_ratio": 0.88,
              "closed_unmerged_prs": 26
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "88% of issues closed",
                "points": 41.1,
                "status": "partial",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 88
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "55/81 decided PRs merged",
                "points": 26,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 55,
                      "decided": 81
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 3/18 approved changesets -- score normalized to 1",
                "points": 1.5,
                "status": "partial",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "moderate",
            "name": "Ownership & stewardship",
            "note": "Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "verified_domain"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 60,
            "inputs": {
              "followers": 121,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "qaiu",
              "public_repos": 31,
              "account_age_days": 3309
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "personal (user) account",
                "points": 10,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_personal",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": "not applicable to user accounts",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_applicable_to_user_accounts",
                    "params": {}
                  }
                ],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "121 followers of qaiu",
                "points": 15,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 121,
                      "login": "qaiu"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "31 public repos, account ~9 yr old",
                "points": 23,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 31
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 9
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "cn.qaiu:parser"
              ],
              "ecosystems": "maven",
              "any_deprecated": false,
              "min_days_since_publish": 149
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "1 package(s) on maven",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 1,
                      "ecosystems": "maven"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 149 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 149
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "12 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 12
                    }
                  }
                ],
                "max_points": 20
              },
              {
                "key": "not_deprecated",
                "name": "Not deprecated",
                "detail": "active, not deprecated or yanked",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "package_not_deprecated",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "moderate",
        "name": "Engineering Quality",
        "value": 67,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "moderate",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 68,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": false,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "2 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 24,
                "status": "met",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "3 out of 3 merged PRs checked by a CI test -- score normalized to 10",
                "points": 20,
                "status": "met",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "moderate",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 65,
            "inputs": {
              "topics": [
                "download",
                "java",
                "vertx",
                "parser",
                "webserver",
                "api",
                "drive",
                "ilanzou",
                "onedrive",
                "file-server",
                "share",
                "yunpan",
                "netdisk-fast-download"
              ],
              "has_wiki": false,
              "homepage": "https://nfd-parser.github.io",
              "has_readme": true,
              "has_docs_dir": false,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": "https://nfd-parser.github.io",
                "points": 15,
                "status": "met",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": "13 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 13
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "at_risk",
        "name": "Security",
        "value": 43,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Branch-Protection. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "branch_protection"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 44,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 17,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 1,
              "scorecard_aggregate": 4.4
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "binaries present in source code",
                "points": 6,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "3 out of 3 merged PRs checked by a CI test -- score normalized to 10",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 3/18 approved changesets -- score normalized to 1",
                "points": 0.8,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 2 contributing companies or organizations -- score normalized to 6",
                "points": 1.5,
                "status": "partial",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "update tool detected",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "30 commit(s) and 5 issue activity found in the last 90 days -- score normalized to 10",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow detected",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool is not run on all commits -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "Project has not signed or included provenance with any releases.",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "detected GitHub workflow tokens with excessive permissions",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "24 existing vulnerabilities detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "dependency_advisories",
            "band": "at_risk",
            "name": "Dependency advisories",
            "note": "Matched the maven:cn.qaiu:core@1.2.3 runtime dependency closure — what installing the published package pulls in — 67 packages. Reachability is not analyzed.",
            "notes": [
              {
                "code": "advisories_scope_published",
                "params": {
                  "package": "maven:cn.qaiu:core@1.2.3",
                  "assessed": 67
                }
              },
              {
                "code": "advisories_reachability",
                "params": {}
              }
            ],
            "value": 39,
            "inputs": {
              "source": "osv",
              "advisories": 46,
              "affected_packages": 11,
              "assessed_packages": 67,
              "unassessed_packages": 0,
              "affected_by_severity": "high 8, moderate 3",
              "direct_affected_packages": 1
            },
            "components": [
              {
                "key": "direct_dependencies_free_of_known_advisories",
                "name": "Direct dependencies free of known advisories",
                "detail": "1 affected: com.fasterxml.jackson.core:jackson-databind 2.18.3 (high 8.1)",
                "points": 12.3,
                "status": "partial",
                "details": [
                  {
                    "code": "advisories_affected",
                    "params": {
                      "count": 1,
                      "packages": "com.fasterxml.jackson.core:jackson-databind 2.18.3 (high 8.1)"
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "indirect_dependencies_free_of_known_advisories",
                "name": "Indirect dependencies free of known advisories",
                "detail": "10 affected: com.fasterxml.jackson.core:jackson-core 2.16.1 (high 7.5), io.netty:netty-codec 4.1.130.Final (high 7.5), io.netty:netty-codec-dns 4.1.130.Final (high 7.5), +7 more",
                "points": 3,
                "status": "partial",
                "details": [
                  {
                    "code": "advisories_affected",
                    "params": {
                      "count": 10,
                      "packages": "com.fasterxml.jackson.core:jackson-core 2.16.1 (high 7.5), io.netty:netty-codec 4.1.130.Final (high 7.5), io.netty:netty-codec-dns 4.1.130.Final (high 7.5)"
                    }
                  },
                  {
                    "code": "advisories_affected_more",
                    "params": {
                      "count": 7
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "no_advisories_left_outstanding",
                "name": "No advisories left outstanding",
                "detail": "4 advisory-carrying package(s) unaddressed past 90 days; oldest published 296 days ago",
                "points": 23.8,
                "status": "partial",
                "details": [
                  {
                    "code": "advisories_stale",
                    "params": {
                      "days": 90,
                      "count": 4,
                      "oldest": 296
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "malicious_dependencies",
            "band": "excellent",
            "name": "Malicious dependencies",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "source": "osv",
              "meaning": "reported as a malicious package by the OpenSSF corpus; the remedy is removal or moving off the compromised name, never an upgrade of the same artifact. Versions the registry has since pulled are listed but not scored",
              "packages": [],
              "red_flag": false,
              "assessed_packages": 67,
              "malicious_packages": 0,
              "direct_malicious_packages": 0,
              "withdrawn_malicious_packages": 0,
              "installable_malicious_packages": 0
            },
            "components": [
              {
                "key": "no_dependency_reported_as_a_malicious_package",
                "name": "No dependency reported as a malicious package",
                "detail": "no dependency is reported as a malicious package",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "no_malicious_dependencies",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          },
          {
            "key": "high_risk_jurisdiction_exposure",
            "band": "excellent",
            "name": "High-Risk Jurisdiction Exposure",
            "note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
            "notes": [
              {
                "code": "jurisdiction_evidence_limits",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "meaning": "self-published location evidence; not nationality or citizenship",
              "red_flag": false,
              "exposures": [],
              "policy_countries": [
                "Russia",
                "Iran",
                "North Korea"
              ],
              "review_only_matches": 0,
              "assessed_self_published_locations": 4
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "no confirmed policy-scope location match",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "jurisdiction_no_match",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "moderate",
        "name": "AI Readiness",
        "value": 57,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "at_risk",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.888,
              "agent_instruction_files": [],
              "agent_instruction_max_bytes": null
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "no CLAUDE.md / AGENTS.md / editor rules",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_instructions",
                    "params": {}
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "87 of 98 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 87,
                      "sampled": 98
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "moderate",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 61,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [],
              "has_dockerfile": true,
              "typed_language": true,
              "bootstrap_files": [],
              "has_devcontainer": true,
              "has_linter_config": false,
              "typecheck_configs": [
                "parser/src/main/resources/custom-parsers/jsconfig.json",
                "web-front/jsconfig.json"
              ],
              "agent_commit_share": 0,
              "toolchain_manifests": [
                "core-database/pom.xml",
                "core/pom.xml",
                "parser/pom.xml",
                "pom.xml",
                "web-service/pom.xml"
              ],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "core-database/pom.xml, core/pom.xml, parser/pom.xml (toolchain convention, no task runner)",
                "points": 12.6,
                "status": "partial",
                "details": [
                  {
                    "code": "toolchain_convention",
                    "params": {
                      "files": "core-database/pom.xml, core/pom.xml, parser/pom.xml"
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "parser/src/main/resources/custom-parsers/jsconfig.json, web-front/jsconfig.json",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "parser/src/main/resources/custom-parsers/jsconfig.json, web-front/jsconfig.json"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "devcontainer, Dockerfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "devcontainer, Dockerfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "no agent-authored commits among the last 100",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_authored_commits",
                    "params": {
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "dependency automation configured, none observed in the sampled commits",
                "points": 5,
                "status": "partial",
                "details": [
                  {
                    "code": "dependency_bot_config_only",
                    "params": {}
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "primary_language": "Java",
              "largest_source_bytes": 89795,
              "source_files_sampled": 252,
              "oversized_source_files": 1
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "Java (statically typed)",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Java"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "1/252 source files over 60KB",
                "points": 54.8,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 252,
                      "oversized": 1
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "at_risk",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "example_dirs": [],
              "has_mcp_signal": false,
              "api_schema_files": [
                "web-service/doc/openapi.json"
              ]
            },
            "components": [
              {
                "key": "api_schema_openapi_graphql_proto",
                "name": "API schema (OpenAPI/GraphQL/proto)",
                "detail": "web-service/doc/openapi.json",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "web-service/doc/openapi.json"
                    }
                  }
                ],
                "max_points": 40
              },
              {
                "key": "mcp_server",
                "name": "MCP server",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "runnable_examples",
                "name": "Runnable examples",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 40
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token",
    "maven package 'cn.qaiu:core' points at a different repository (https://github.com/qaiu/vxcore/tree/main/core); excluded from ecosystem scoring",
    "Could not fetch maven package 'cn.qaiu:web-service' from its registry",
    "maven package 'cn.qaiu:core-database' points at a different repository (https://github.com/qaiu/vxcore/tree/main/core-database); excluded from ecosystem scoring"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-24T17:46:17.151763Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/q/qaiu/netdisk-fast-download.svg",
  "full_name": "qaiu/netdisk-fast-download",
  "license_state": "standard",
  "license_spdx": "MIT"
}

Оцінки — це сигнали, а не гарантії. Вони відображають публічно видимі практики на GitHub — це не аудит коду й не гарантія безпеки.

Відсутні дані виключаються, а ваги перенормовуються — нуль за відсутність ніколи не ставиться. Методологія версіонована й відкрита: метрики v1.13.0, схема v0.27.0 — повна методологія · вікі метрик.

Як окремий результат виглядає на тлі всього реєстру: сукупна статистикаMaven.