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