Public record
Software health reportschema 0.27.0 · metrics 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 stars⑂ 265 forkssince Apr 2023View on GitHub ↗

qaiu/netdisk-fast-download holds a health index of 67 out of 100, placing it in the Moderate band. It scores highest on Vitality (91/100) and lowest on Security (43/100). It was last updated 2 days ago. A single contributor accounts for most of its recent work.

67
overall / 100
Moderate

Software health index

Metrics are grouped into weighted categories on one standardized 1–100 scale. Overall starts as their weighted mean; when public evidence triggers the High-Risk Jurisdiction Policy, the rating is adjusted and receives an At risk ceiling of 49. AI Readiness sits outside the overall score.

67
Excellent85-100Exemplary; meets essentially all checked criteria
Good70-84Healthy; minor gaps
Moderate50-69Acceptable with notable gaps; review recommended
At risk30-49Significant weaknesses; adoption warrants caution
Critical1-29Severe problems (abandoned, single-maintainer, no hygiene)
VitalityCommunity &AdoptionSustainability &GovernanceEngineeringQualitySecurityAI Readiness

Score profile

Each axis is a category. The shape matters more than the average — a healthy subject fills the whole shape, while a spike-and-crater profile means strength in one dimension is masking risk in another.

Ownership

qaiuPersonal account
121 followers31 public repossince Jul 2017qaiu

This repository is owned by a personal account. A single-owner project carries more continuity risk than an organization-backed one.

Package ecosystems

RegistryPackageVersionDownloads / moVersionsLast publish
Mavencn.qaiu:corepoints to another repo — not scored1.2.3-5148 days ago
Mavencn.qaiu:parser10.2.5-12149 days ago
Mavencn.qaiu:core-databasepoints to another repo — not scored1.2.3-5148 days ago

Metrics by category

Vitality

Is the project alive — is code being written and are releases shipping?

91Excellent · 22% of overall
How it's scored
36/36Push recency — last push 2 days ago
27.7/36Commit cadence — 40/52 weeks with commits
18/18Commit volume — 544 commits in the last year
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 5 issue activity found in the last 90 days -- score normalized to 10
Inputs used
commits_last_year544
human_commit_share0.98
days_since_last_push2
active_weeks_last_year40
How it's scored
27/27Ships releases — 21 releases published
36/36Release recency — latest release 3 days ago
27/27Release cadence — a release every ~18.9 days
0/10OpenSSF Scorecard: Signed-Releases — Project has not signed or included provenance with any releases.
Inputs used
releases_count21
latest_release_tagdependabot/npm_and_yarn/web-front/npm_and_yarn-c42958dede
releases_from_tagsno
days_since_latest_release3
mean_days_between_releases18.9

Community & Adoption

Does the project have users, downloads, attention, and a welcoming setup for contributors?

68Moderate · 18% of overall
How it's scored
56.4/60Stars — 3,008 stars
20.2/25Forks — 265 forks
6.2/15Watchers — 14 watchers
Inputs used
forks265
stars3,008
watchers14
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
How it's scored
22.5/22.5README
22.5/22.5License — recognized license (MIT)
0/18CONTRIBUTING guide
0/13.5Code of conduct
0/7.2Issue template
0/6.3PR template
Inputs used
has_readmeyes
has_licenseyes
has_contributingno
has_issue_templateno
has_code_of_conductno
has_pull_request_templateno

Sustainability & Governance

Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?

61Moderate · 24% of overall
How it's scored
9/54Bus factor — 1 contributor(s) cover half of all commits
4.4/22.5Commit distribution — top contributor authored 80% of commits
9.5/13.5Contributor breadth — 7 contributors
6/10OpenSSF Scorecard: Contributors — project has 2 contributing companies or organizations -- score normalized to 6
Inputs used
bus_factor1
contributors_sampled7
top_contributor_share0.805
How it's scored
41.1/46.8Issue resolution — 88% of issues closed
26/38.3PR acceptance — 55/81 decided PRs merged
1.5/15OpenSSF Scorecard: Code-Review — Found 3/18 approved changesets -- score normalized to 1
Inputs used
merged_prs55
open_issues14
closed_issues103
issue_closed_ratio0.88
closed_unmerged_prs26
How it's scored
10/30Ownership backing — personal (user) account
0/20Verified domain — not applicable to user accounts
15/25Owner reach — 121 followers of qaiu
23/25Track record — 31 public repos, account ~9 yr old
Inputs used
followers121
owner_typeUser
is_verified
owner_loginqaiu
public_repos31
account_age_days3,309
Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.
How it's scored
25/25Published & resolvable — 1 package(s) on maven
35/35Publish recency — latest publish 149 days ago
20/20Version history — 12 published versions
20/20Not deprecated — active, not deprecated or yanked
Inputs used
packagescn.qaiu:parser
ecosystemsmaven
any_deprecatedno
min_days_since_publish149

Engineering Quality

Are baseline engineering and documentation practices in place?

67Moderate · 20% of overall
How it's scored
24/24CI workflows — 2 workflow(s)
24/24Tests present
0/16Linter config
0/9.6Pre-commit hooks
0/6.4.editorconfig
20/20OpenSSF Scorecard: CI-Tests — 3 out of 3 merged PRs checked by a CI test -- score normalized to 10
Inputs used
has_ciyes
has_testsyes
has_editorconfigno
has_linter_configno
has_precommit_configno

Documentation

65Moderate
How it's scored
30/30README
0/25Documentation directory
15/15Documentation / homepage site — https://nfd-parser.github.io
10/10Repository description
10/10Topics — 13 topics
0/10Wiki
Inputs used
topicsdownload, java, vertx, parser, webserver, api, drive, ilanzou, onedrive, file-server, share, yunpan, netdisk-fast-download
has_wikino
homepagehttps://nfd-parser.github.io
has_readmeyes
has_docs_dirno
has_descriptionyes

Security

Are visible security and supply-chain practices strong, without unresolved high-risk jurisdiction exposure?

43At risk · 16% of overall
How it's scored
6/7.5Binary-Artifacts — binaries present in source code
0/7.5Branch-Protection — no data
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.5License — 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
Inputs used
sourceopenssf_scorecard
checks_evaluated17
scorecard_versionv5.5.0
checks_inconclusive1
scorecard_aggregate4.4
Excluded from scoring (no data or not applicable): branch_protection. Remaining weights renormalized.
How it's scored
12.3/35Direct dependencies free of known advisories — 1 affected: com.fasterxml.jackson.core:jackson-databind 2.18.3 (high 8.1)
3/25Indirect dependencies free of known advisories — 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
23.8/40No advisories left outstanding — 4 advisory-carrying package(s) unaddressed past 90 days; oldest published 296 days ago
Inputs used
sourceosv
advisories46
affected_packages11
assessed_packages67
unassessed_packages0
affected_by_severityhigh 8, moderate 3
direct_affected_packages1
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.

AI Readiness

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.

57Moderate · 0% of overall
How it's scored
0/45Agent instructions — no CLAUDE.md / AGENTS.md / editor rules
0/15Machine-readable docs (llms.txt)
40/40Legible commit history — 87 of 98 human commits state their intent (structured subject or explanatory body)
Inputs used
has_llms_txtno
legible_history_share0.888
agent_instruction_files
agent_instruction_max_bytes
How it's scored
12.6/18One-command bootstrap — core-database/pom.xml, core/pom.xml, parser/pom.xml (toolchain convention, no task runner)
22/22Automated tests
0/11Lint / format config
11/11Static type checking — parser/src/main/resources/custom-parsers/jsconfig.json, web-front/jsconfig.json
10/10Reproducible environment — devcontainer, Dockerfile
0/10Demonstrated agent practice — no agent-authored commits among the last 100
5/8Automated maintenance — dependency automation configured, none observed in the sampled commits
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Inputs used
has_nixno
has_testsyes
lockfiles
has_dockerfileyes
typed_languageyes
bootstrap_files
has_devcontaineryes
has_linter_configno
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
How it's scored
45/45Type-checkable code — Java (statically typed)
54.8/55Manageable file sizes — 1/252 source files over 60KB
Inputs used
primary_languageJava
largest_source_bytes89,795
source_files_sampled252
oversized_source_files1
How it's scored
40/40API schema (OpenAPI/GraphQL/proto) — web-service/doc/openapi.json
0/20MCP server
0/40Runnable examples
Inputs used
example_dirs
has_mcp_signalno
api_schema_filesweb-service/doc/openapi.json

Key facts

3,008GitHub stars
7contributors
544commits, last 12 months
2days since last push
21releases
1bus factor
14open issues
Maven, npmpackage ecosystems

Data collection 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

More detail

Star and fork history 0 ★ / 265 ⇿
0Stars
265Forks
19Releases

When each star and fork was added, collected from GitHub and bucketed by day. Cumulative growth sits directly above the daily additions it is made of, so the two read against each other: steady organic accretion looks nothing like an abrupt, short-lived burst. Where that difference is measurable, it is reported as growth authenticity.

050100150200250300261112023-072025-012026-07
Major 0Minor 1Patch 6

Each point covers 3 days.

OpenSSF Scorecard 4.4 / 10
4.4aggregate

Independent, tool-agnostic security assessment from the open-source OpenSSF Scorecard. Each check rewards a security practice, not a specific vendor's tool. Checks Scorecard could not determine are marked n/a and excluded from the security score (never counted as zero).Scorecard v5.5.0 · 2026-07-24 17:46 UTC

8Binary-Artifactsbinaries present in source code
n/aBranch-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
Direct dependencies 56
RegistryPackageVersion constraintManifest
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
All dependencies 126

Full resolved dependency set from the GitHub dependency graph: 64 direct and 62 indirect (transitive) packages. The transitive closure is complete when the repository commits a lockfile.

RegistryPackageVersionRelation
Mavench.qos.logback:logback-classicdirect
Mavench.qos.logback:logback-classic1.5.8direct
Mavench.qos.logback:logback-core1.5.8direct
Mavencn.qaiu:coredirect
Mavencn.qaiu:core0.1.8direct
Mavencn.qaiu:core-databasedirect
Mavencn.qaiu:core-database0.1.8direct
Mavencn.qaiu:parserdirect
Mavencn.qaiu:parser0.1.8direct
Mavencom.fasterxml.jackson.core:jackson-databinddirect
Mavencom.fasterxml.jackson.core:jackson-databind2.16.1direct
Mavencom.fasterxml.jackson.datatype:jackson-datatype-jsr310direct
Mavencom.fasterxml.jackson.datatype:jackson-datatype-jsr3102.16.1direct
Mavencom.h2database:h22.2.220direct
Mavencom.mysql:mysql-connector-j9.2.0direct
Mavencom.zaxxer:HikariCP5.0.1direct
Mavenio.vertx:vertx-codegendirect
Mavenio.vertx:vertx-codegen4.5.6direct
Mavenio.vertx:vertx-configdirect
Mavenio.vertx:vertx-config4.5.6direct
Mavenio.vertx:vertx-config-yamldirect
Mavenio.vertx:vertx-config-yaml4.5.6direct
Mavenio.vertx:vertx-jdbc-clientdirect
Mavenio.vertx:vertx-jdbc-client4.5.6direct
Mavenio.vertx:vertx-service-proxydirect
Mavenio.vertx:vertx-service-proxy4.5.6direct
Mavenio.vertx:vertx-sql-client-templatesdirect
Mavenio.vertx:vertx-sql-client-templates4.5.6direct
Mavenio.vertx:vertx-webdirect
Mavenio.vertx:vertx-web4.5.6direct
Mavenio.vertx:vertx-web-client4.5.27direct
Mavenio.vertx:vertx-web-client4.5.6direct
Mavenio.vertx:vertx-web-proxydirect
Mavenio.vertx:vertx-web-proxy4.5.6direct
Mavenorg.apache.commons:commons-lang3direct
Mavenorg.apache.commons:commons-lang33.12.0direct
Mavenorg.apache.commons:commons-lang33.18.0direct
Mavenorg.apache.groovy:groovy4.0.24direct
Mavenorg.brotli:dec0.1.2direct
Mavenorg.fusesource.jansi:jansi1.17.1direct
Mavenorg.openjdk.nashorn:nashorn-core15.4direct
Mavenorg.postgresql:postgresql42.7.11direct
Mavenorg.postgresql:postgresql42.7.3direct
Mavenorg.reflections:reflectionsdirect
Mavenorg.reflections:reflections0.10.2direct
Mavenorg.slf4j:slf4j-apidirect
Mavenorg.slf4j:slf4j-api2.0.16direct
Mavenorg.slf4j:slf4j-api2.0.5direct
npm@element-plus/icons-vue^2.3.1direct
npm@monaco-editor/loader^1.4.0direct
npm@vueuse/core^11.2.0direct
npmaxios1.16.1direct
npmclipboard^2.0.11direct
npmcore-js^3.8.3direct
npmcrypto-js^4.2.0direct
npmelement-plus2.11.3direct
npmmonaco-editor^0.55.1direct
npmmvn^3.5.0direct
npmqrcode^1.5.4direct
npmsplitpanes^4.0.4direct
npmvue^3.5.12direct
npmvue-clipboard3^2.0.0direct
npmvue-router^4.5.1direct
npmvue3-json-viewer2.2.2direct
Mavencom.fasterxml.jackson.core:jackson-annotations2.16.1indirect
Mavencom.fasterxml.jackson.core:jackson-core2.16.1indirect
Mavencom.google.code.findbugs:jsr3053.0.2indirect
Mavencom.google.protobuf:protobuf-java4.29.0indirect
Mavencom.mchange:c3p00.9.5.5indirect
Mavencom.mchange:mchange-commons-java0.2.19indirect
Mavenio.netty:netty-buffer4.1.108.Finalindirect
Mavenio.netty:netty-codec4.1.108.Finalindirect
Mavenio.netty:netty-codec-dns4.1.108.Finalindirect
Mavenio.netty:netty-codec-http4.1.108.Finalindirect
Mavenio.netty:netty-codec-http24.1.108.Finalindirect
Mavenio.netty:netty-codec-socks4.1.108.Finalindirect
Mavenio.netty:netty-common4.1.108.Finalindirect
Mavenio.netty:netty-handler4.1.108.Finalindirect
Mavenio.netty:netty-handler-proxy4.1.108.Finalindirect
Mavenio.netty:netty-resolver4.1.108.Finalindirect
Mavenio.netty:netty-resolver-dns4.1.108.Finalindirect
Mavenio.netty:netty-transport4.1.108.Finalindirect
Mavenio.netty:netty-transport-native-unix-common4.1.108.Finalindirect
Mavenio.vertx:vertx-auth-common4.5.6indirect
Mavenio.vertx:vertx-bridge-common4.5.6indirect
Mavenio.vertx:vertx-core4.5.6indirect
Mavenio.vertx:vertx-http-proxy4.5.6indirect
Mavenio.vertx:vertx-sql-client4.5.6indirect
Mavenio.vertx:vertx-uri-template4.5.6indirect
Mavenio.vertx:vertx-web-common4.5.6indirect
Mavenjunit:junitindirect
Mavenjunit:junit4.13.2indirect
Mavenorg.apache.maven.plugins:maven-assembly-plugin3.3.0indirect
Mavenorg.apache.maven.plugins:maven-dependency-plugin3.1.2indirect
Mavenorg.apache.maven.plugins:maven-deploy-plugin3.1.2indirect
Mavenorg.apache.maven.plugins:maven-gpg-plugin3.2.7indirect
Mavenorg.apache.maven.plugins:maven-jar-plugin3.2.0indirect
Mavenorg.apache.maven.plugins:maven-javadoc-plugin3.7.0indirect
Mavenorg.apache.maven.plugins:maven-source-plugin3.3.0indirect
Mavenorg.checkerframework:checker-qual3.42.0indirect
Mavenorg.codehaus.gmavenplus:gmavenplus-plugin4.1.1indirect
Mavenorg.codehaus.mojo:flatten-maven-plugin1.6.0indirect
Mavenorg.hamcrest:hamcrest-core1.3indirect
Mavenorg.javassist:javassist3.28.0-GAindirect
Mavenorg.ow2.asm:asm7.3.1indirect
Mavenorg.ow2.asm:asm-analysis7.3.1indirect
Mavenorg.ow2.asm:asm-commons7.3.1indirect
Mavenorg.ow2.asm:asm-tree7.3.1indirect
Mavenorg.ow2.asm:asm-util7.3.1indirect
Mavenorg.projectlombok:lombokindirect
Mavenorg.projectlombok:lombok1.18.38indirect
Mavenorg.sonatype.central:central-publishing-maven-plugin0.6.0indirect
Mavenorg.yaml:snakeyaml2.0indirect
npm@babel/core^7.26.0indirect
npm@babel/eslint-parser^7.25.9indirect
npm@babel/plugin-transform-class-properties^7.26.0indirect
npm@babel/plugin-transform-class-static-block^7.26.0indirect
npm@vue/babel-plugin-transform-vue-jsx^1.4.0indirect
npm@vue/cli-plugin-babel~5.0.8indirect
npm@vue/cli-plugin-eslint~5.0.8indirect
npm@vue/cli-service~5.0.8indirect
npmcompression-webpack-plugin^11.1.0indirect
npmeslint^9.0.0indirect
npmeslint-plugin-vue^9.30.0indirect
npmfilemanager-webpack-plugin8.0.0indirect
npmmonaco-editor-webpack-plugin^7.1.1indirect
Dependency advisories 11

Installing maven:cn.qaiu:core@1.2.3 pulls in 67 packages, direct and transitive: 11 carry known advisories, of which 1 are direct dependencies.

PackageVersionRelationSeverityAdvisoriesFixed in
com.fasterxml.jackson.core:jackson-databind2.18.3directhigh73.2.1
com.fasterxml.jackson.core:jackson-core2.16.1indirecthigh23.2.1
io.netty:netty-codec4.1.130.Finalindirecthigh24.2.16.Final
io.netty:netty-codec-dns4.1.130.Finalindirecthigh24.2.16.Final
io.netty:netty-codec-http4.1.130.Finalindirecthigh154.2.16.Final
io.netty:netty-codec-http24.1.130.Finalindirecthigh64.2.16.Final
io.netty:netty-handler4.1.130.Finalindirecthigh34.2.15.Final
io.netty:netty-resolver-dns4.1.130.Finalindirecthigh34.2.15.Final
ch.qos.logback:logback-core1.5.17indirectmoderate41.5.34
io.netty:netty-handler-proxy4.1.130.Finalindirectmoderate14.2.13.Final
io.vertx:vertx-core4.5.25indirectmoderate15.0.12

An advisory means the version recorded in the dependency graph falls inside an advisory’s affected range. Reachability is not analysed, and the graph includes development and test pins — a finding may concern tooling rather than shipped software.

Raw JSON report machine-readable
{
  "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"
}

Scores are signals, not warranties. They reflect publicly visible practices on GitHub — not a code audit, and not a security guarantee.

Missing data is excluded and weights renormalized, never scored as zero. Methodology is versioned and open: metrics v1.13.0, schema v0.27.0 — full methodology · metrics wiki.

How one result sits in the wider record: aggregate statisticsMaven.