Öffentliches Register
Software-GesundheitsberichtSchema 0.27.0 · Metriken 1.13.0 · 2026-07-24 02:42 UTC

axeon / uw-base

uniweb基础类库

JavaApache-2.0★ 3 Sterne⑂ 0 Forksseit Dez. 2024Auf GitHub ansehen ↗

axeon/uw-base erreicht einen Gesundheitsindex von 36 von 100 und liegt damit im Bereich Gefährdet. Am stärksten schneidet es bei AI Readiness (55/100) ab, am schwächsten bei Community & Adoption (26/100). Zuletzt vor 14 Tagen aktualisiert. Ein einzelner Mitwirkender trägt den Großteil der jüngsten Arbeit.

36
gesamt / 100
Gefährdet

Software-Gesundheitsindex

Metriken werden auf einer Skala von 1–100 in gewichtete Kategorien gruppiert. Der Gesamtwert beginnt als ihr Mittel; sobald öffentliche Evidenz die Richtlinie für Hochrisikojurisdiktionen auslöst, wird die Bewertung angepasst und erhält die Obergrenze 49 (Gefährdet). AI Readiness liegt außerhalb.

36
Exzellent85-100Vorbildlich; erfüllt im Wesentlichen alle geprüften Kriterien
Gut70-84Gesund; geringfügige Lücken
Mittel50-69Akzeptabel mit deutlichen Lücken; Überprüfung empfohlen
Gefährdet30-49Erhebliche Schwächen; eine Übernahme erfordert Vorsicht
Kritisch1-29Schwerwiegende Probleme (aufgegeben, nur ein Maintainer, keine Hygiene)
VitalitätCommunity &VerbreitungNachhaltigkeit &GovernanceEngineering-QualitätSicherheitAI Readiness

Bewertungsprofil

Jede Achse ist eine Kategorie. Die Form zählt mehr als der Durchschnitt — ein gesundes Projekt füllt die gesamte Fläche, während ein Profil aus Spitzen und Kratern bedeutet, dass Stärke in einer Dimension Risiken in einer anderen verdeckt.

Eigentümerschaft

axeonPersönliches Konto
7 Follower18 öffentliche Reposseit Jan. 2015

Dieses Repository gehört einem persönlichen Konto. Ein Projekt mit nur einem Eigentümer trägt ein höheres Kontinuitätsrisiko als ein organisationsgetragenes.

Paket-Ökosysteme

RegistryPaketVersionDownloads / MonatVersionenZuletzt veröffentlicht
Mavencom.umtone:uw-ai1.1.36-32vor 9 Tagen
Mavencom.umtone:uw-dao5.3.52-40vor 9 Tagen
Mavencom.umtone:uw-mfa1.1.71-31vor 9 Tagen
Mavencom.umtone:uw-task5.1.135-38vor 9 Tagen
Mavencom.umtone:uw-cache1.2.103-25vor 9 Tagen
Mavencom.umtone:uw-webot1.0.15-13vor 9 Tagen
Mavencom.umtone:uw-common1.1.112-50vor 9 Tagen
Mavencom.umtone:uw-log-es3.1.106-26vor 9 Tagen

Metriken nach Kategorie

Vitalität

Lebt das Projekt — wird Code geschrieben und werden Releases ausgeliefert?

41Gefährdet · 22 % des Gesamtindex
Wie die Bewertung erfolgt
28.8/36Push-Aktualität — letzter Push vor 14 Tagen
11.1/36Commit-Rhythmus — 16/52 Wochen mit Commits
18/18Commit-Volumen — 157 Commits im letzten Jahr
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
Verwendete Eingangsdaten
commits_last_year157
human_commit_share1
days_since_last_push14
active_weeks_last_year16
Wie die Bewertung erfolgt
0/27Liefert Releases aus — keine Releases veröffentlicht
0/36Release-Aktualität — keine Releases
0/27Release-Rhythmus — keine Releases
0/10OpenSSF Scorecard: Signed-Releases — keine Daten
Verwendete Eingangsdaten
releases_count0
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): OpenSSF Scorecard: Signed-Releases. Die verbleibenden Gewichte wurden renormalisiert.

Community & Verbreitung

Hat das Projekt Nutzer, Downloads, Aufmerksamkeit und ein einladendes Umfeld für Beitragende?

26Kritisch · 18 % des Gesamtindex
Wie die Bewertung erfolgt
4.9/60Stars — 3 Stars
0/25Forks — 0 Forks
0/15Watcher — 1 Watcher
Verwendete Eingangsdaten
forks0
stars3
watchers1
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Wie die Bewertung erfolgt
22.5/22.5README
22.5/22.5Lizenz — anerkannte Lizenz (Apache-2.0)
0/18CONTRIBUTING-Leitfaden
0/13.5Verhaltenskodex
0/7.2Issue-Vorlage
0/6.3PR-Vorlage
Verwendete Eingangsdaten
has_readmeja
has_licenseja
has_contributingnein
has_issue_templatenein
has_code_of_conductnein
has_pull_request_templatenein

Nachhaltigkeit & Governance

Überdauert das Projekt die Menschen, die es tragen — Bus-Faktor, Reaktionsfähigkeit, Trägerschaft und Paketpflege?

36Gefährdet · 24 % des Gesamtindex
Wie die Bewertung erfolgt
9/54Bus-Faktor — 1 Beitragende decken die Hälfte aller Commits ab
0.7/22.5Commit-Verteilung — wichtigste beitragende Person verfasste 97 % der Commits
2.7/13.5Breite der Beitragenden — 2 Beitragende
3/10OpenSSF Scorecard: Contributors — project has 1 contributing companies or organizations -- score normalized to 3
Verwendete Eingangsdaten
bus_factor1
contributors_sampled2
top_contributor_share0,97
Wie die Bewertung erfolgt
0/46.8Issue-Lösungsquote — keine Issues oder keine Daten
0/38.3PR-Annahme — keine entschiedenen Pull Requests oder keine Daten
0/15OpenSSF Scorecard: Code-Review — Found 0/30 approved changesets -- score normalized to 0
Verwendete Eingangsdaten
merged_prs0
open_issues0
closed_issues0
issue_closed_ratio
closed_unmerged_prs0
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Issue-Lösungsquote, PR-Annahme. Die verbleibenden Gewichte wurden renormalisiert.
Wie die Bewertung erfolgt
10/30Organisatorische Trägerschaft — persönliches (Nutzer-)Konto
0/20Verifizierte Domain — für Nutzerkonten nicht anwendbar
6.5/25Reichweite des Inhabers — 7 Follower von axeon
21.3/25Kontohistorie — 18 öffentliche Repos, Kontoalter ca. 11 Jahre
Verwendete Eingangsdaten
followers7
owner_typeUser
is_verified
owner_loginaxeon
public_repos18
account_age_days4.207
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Verifizierte Domain. Die verbleibenden Gewichte wurden renormalisiert.

Paketpflege

100Exzellent
Wie die Bewertung erfolgt
25/25Veröffentlicht & auflösbar — 8 Paket(e) auf maven
35/35Veröffentlichungsaktualität — letzte Veröffentlichung vor 9 Tagen
20/20Versionshistorie — 50 veröffentlichte Versionen
20/20Nicht veraltet — aktiv, nicht veraltet oder zurückgezogen
Verwendete Eingangsdaten
packagescom.umtone:uw-ai, com.umtone:uw-dao, com.umtone:uw-mfa, com.umtone:uw-task, com.umtone:uw-cache, com.umtone:uw-webot, com.umtone:uw-common, com.umtone:uw-log-es
ecosystemsmaven
any_deprecatednein
min_days_since_publish9

Engineering-Qualität

Sind grundlegende Engineering- und Dokumentationspraktiken vorhanden?

38Gefährdet · 20 % des Gesamtindex
Wie die Bewertung erfolgt
0/24CI-Workflows
24/24Tests vorhanden
0/16Linter-Konfiguration
0/9.6Pre-Commit-Hooks
0/6.4.editorconfig
0/20OpenSSF Scorecard: CI-Tests — keine Daten
Verwendete Eingangsdaten
has_cinein
has_testsja
has_editorconfignein
has_linter_confignein
has_precommit_confignein
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): OpenSSF Scorecard: CI-Tests. Die verbleibenden Gewichte wurden renormalisiert.
Wie die Bewertung erfolgt
30/30README
0/25Dokumentationsverzeichnis
0/15Dokumentations-/Homepage-Site
10/10Repository-Beschreibung
0/10Topics
10/10Wiki
Verwendete Eingangsdaten
topics
has_wikija
homepage
has_readmeja
has_docs_dirnein
has_descriptionja

Sicherheit

Sind die sichtbaren Sicherheits- und Lieferkettenpraktiken belastbar, ohne ungeklärte Exposition gegenüber Hochrisikojurisdiktionen?

36Gefährdet · 16 % des Gesamtindex

Sicherheitslage

25Kritisch
Wie die Bewertung erfolgt
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — branch protection not enabled on development/release branches
0/2.5CI-Tests — keine Daten
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 0/30 approved changesets -- score normalized to 0
0.8/2.5Contributors — project has 1 contributing companies or organizations -- score normalized to 3
0/10Dangerous-Workflow — keine Daten
0/7.5Dependency-Update-Tool — no update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5Lizenz — license file detected
7.5/7.5Maintained — 30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
0/5Packaging — keine Daten
0/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
0/5SAST — no SAST tool detected
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — keine Daten
0/7.5Token-Permissions — keine Daten
0/7.5Vulnerabilities — 17 existing vulnerabilities detected
Verwendete Eingangsdaten
sourceopenssf_scorecard
checks_evaluated13
scorecard_versionv5.5.0
checks_inconclusive5
scorecard_aggregate2,5
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): ci_tests, dangerous_workflow, packaging, signed_releases, token_permissions. Die verbleibenden Gewichte wurden renormalisiert.
Wie die Bewertung erfolgt
35/35Direkte Abhängigkeiten ohne bekannte Advisories — keine direkte Abhängigkeit trägt ein bekanntes Advisory
6.5/25Indirekte Abhängigkeiten ohne bekannte Advisories — 5 betroffen: io.netty:netty-codec-compression 4.2.15.Final (high 7.5), io.netty:netty-codec-http 4.2.15.Final (high 7.5), io.netty:netty-codec-http3 4.2.15.Final (high 7.5), +2 weitere
40/40Keine offenen Advisories — kein Advisory ist länger als 90 Tage öffentlich
Verwendete Eingangsdaten
sourceosv
advisories11
affected_packages5
assessed_packages110
unassessed_packages0
affected_by_severityhigh 3, moderate 1, low 1
direct_affected_packages0
Abgeglichen wurde die Laufzeit-Abhängigkeitshülle von maven:com.umtone:uw-ai@1.1.36 — das, was die Installation des veröffentlichten Pakets nach sich zieht — mit 110 Paketen. Erreichbarkeit wird nicht analysiert.

AI Readiness

Wie gut ist das Repository dafür ausgestattet, mit KI-Coding-Agenten entwickelt und gepflegt zu werden? Ein unabhängiges, experimentelles Badge — Gewicht 0,0, es wird eigenständig ausgewiesen und verändert den Gesamt-Gesundheitswert nicht.

55Mittel · 0 % des Gesamtindex
Wie die Bewertung erfolgt
0/45Agentenanweisungen — keine CLAUDE.md / AGENTS.md / Editor-Regeln
0/15Maschinenlesbare Doku (llms.txt)
40/40Lesbare Commit-Historie — 84 von 100 menschlichen Commits benennen ihre Absicht (strukturierter Betreff oder erläuternder Text)
Verwendete Eingangsdaten
has_llms_txtnein
legible_history_share0,84
agent_instruction_files
agent_instruction_max_bytes
Wie die Bewertung erfolgt
12.6/18Bootstrap mit einem Befehl — pom.xml, uw-ai/pom.xml, uw-auth-client/pom.xml (Toolchain-Konvention, kein Task-Runner)
22/22Automatisierte Tests
0/11Lint-/Format-Konfiguration
11/11Statische Typprüfung — Java (statisch typisiert)
10/10Reproduzierbare Umgebung — Dockerfile
0/10Belegte Agentenpraxis — keine von Agenten verfassten Commits unter den letzten 100
0/8Automatisierte Wartung — keine automatisierten Abhängigkeits-Updates beobachtet
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Verwendete Eingangsdaten
has_nixnein
has_testsja
lockfiles
has_dockerfileja
typed_languageja
bootstrap_files
has_devcontainernein
has_linter_confignein
typecheck_configs
agent_commit_share0
toolchain_manifestspom.xml, uw-ai/pom.xml, uw-auth-client/pom.xml, uw-auth-service/pom.xml, uw-cache/pom.xml, uw-common-app/pom.xml, uw-common/pom.xml, uw-dao/pom.xml, uw-gateway-client/pom.xml, uw-httpclient/pom.xml, uw-log-es/pom.xml, uw-logback-es/pom.xml, uw-mfa/pom.xml, uw-mydb-client/pom.xml, uw-notify-client/pom.xml, uw-oauth2-client/pom.xml, uw-task/pom.xml, uw-tinyurl-client/pom.xml, uw-webot/pom.xml
dependency_bot_commit_share0
Wie die Bewertung erfolgt
45/45Typprüfbarer Code — Java (statisch typisiert)
54.7/55Handhabbare Dateigrößen — 3/486 Quelldateien über 60 KB
Verwendete Eingangsdaten
primary_languageJava
largest_source_bytes96.434
source_files_sampled486
oversized_source_files3
Wie die Bewertung erfolgt
0/40API-Schema (OpenAPI/GraphQL/proto)
0/20MCP-Server
40/40Lauffähige Beispiele — example
Verwendete Eingangsdaten
example_dirsexample
has_mcp_signalnein
api_schema_files

Eckdaten

3GitHub-Sterne
2Mitwirkende
157Commits, letzte 12 Monate
14Tage seit letztem Push
0Releases
1Bus-Faktor
0offene Issues
MavenPaket-Ökosysteme

Warnungen zur Datenerhebung

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token
  • GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Weitere Details

OpenSSF Scorecard 2.5 / 10
2.5Gesamtwert

Unabhängige, werkzeugneutrale Sicherheitsbewertung durch das quelloffene OpenSSF Scorecard. Jede Prüfung honoriert eine Sicherheits-Praxis, nicht das Werkzeug eines bestimmten Anbieters. Prüfungen, die Scorecard nicht ermitteln konnte, sind mit k. A. markiert und vom Sicherheitswert ausgeschlossen (nie als null gezählt).Scorecard v5.5.0 · 2026-07-24 02:42 UTC

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
k. A.CI-Testsno pull request found
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/30 approved changesets -- score normalized to 0
3Contributorsproject has 1 contributing companies or organizations -- score normalized to 3
k. A.Dangerous-Workflowno workflows found
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
10Maintained30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
k. A.Packagingpackaging workflow not detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
0SASTno SAST tool detected
0Security-Policysecurity policy file not detected
k. A.Signed-Releasesno releases found
k. A.Token-PermissionsNo tokens found
0Vulnerabilities17 existing vulnerabilities detected
Direkte Abhängigkeiten 141
RegistryPaketVersionsvorgabeManifest
Mavenorg.springframework.cloud:spring-cloud-dependencies${spring-cloud.version}pom.xml
Mavencom.alibaba.cloud:spring-cloud-alibaba-dependencies${spring-cloud.alibaba.version}pom.xml
Mavencom.umtone:uw-ai${uw-ai.version}pom.xml
Mavencom.umtone:uw-auth-client${uw-auth-client.version}pom.xml
Mavencom.umtone:uw-auth-service${uw-auth-service.version}pom.xml
Mavencom.umtone:uw-cache${uw-cache.version}pom.xml
Mavencom.umtone:uw-common${uw-common.version}pom.xml
Mavencom.umtone:uw-common-app${uw-common-app.version}pom.xml
Mavencom.umtone:uw-dao${uw-dao.version}pom.xml
Mavencom.umtone:uw-gateway-client${uw-gateway-client.version}pom.xml
Mavencom.umtone:uw-httpclient${uw-httpclient.version}pom.xml
Mavencom.umtone:uw-log-es${uw-log-es.version}pom.xml
Mavencom.umtone:uw-logback-es${uw-logback-es.version}pom.xml
Mavencom.umtone:uw-mfa${uw-mfa.version}pom.xml
Mavencom.umtone:uw-mydb-client${uw-mydb-client.version}pom.xml
Mavencom.umtone:uw-notify-client${uw-notify-client.version}pom.xml
Mavencom.umtone:uw-oauth2-client${uw-oauth2-client.version}pom.xml
Mavencom.umtone:uw-task${uw-task.version}pom.xml
Mavencom.umtone:uw-tinyurl-client${uw-tinyurl-client.version}pom.xml
Mavencom.umtone:uw-webot${uw-webot.version}pom.xml
Mavenorg.openjdk.jmh:jmh-core1.37pom.xml
Mavenorg.openjdk.jmh:jmh-generator-annprocess1.37pom.xml
Mavenorg.springdoc:springdoc-openapi-starter-webmvc-ui2.8.16pom.xml
Mavenio.swagger.core.v3:swagger-annotations2.2.50pom.xml
Mavenorg.apache.commons:commons-lang33.20.0pom.xml
Mavencom.google.guava:guava33.6.0-jrepom.xml
Mavenorg.reflections:reflections0.10.2pom.xml
Mavencom.esotericsoftware:kryo5.6.2pom.xml
Mavencom.github.victools:jsonschema-generator4.38.0pom.xml
Mavencom.github.victools:jsonschema-module-jackson4.38.0pom.xml
Mavencom.github.victools:jsonschema-module-swagger-24.38.0pom.xml
Mavencom.umtone:uw-auth-serviceuw-ai/pom.xml
Mavencom.umtone:uw-commonuw-ai/pom.xml
Mavenio.swagger.core.v3:swagger-annotationsuw-ai/pom.xml
Mavenorg.reflections:reflectionsuw-ai/pom.xml
Mavencom.github.victools:jsonschema-generatoruw-ai/pom.xml
Mavencom.github.victools:jsonschema-module-jacksonuw-ai/pom.xml
Mavencom.github.victools:jsonschema-module-swagger-2uw-ai/pom.xml
Mavenorg.springframework.boot:spring-boot-starteruw-auth-client/pom.xml
Mavenorg.springframework.boot:spring-boot-starter-webuw-auth-client/pom.xml
Mavenorg.springframework.boot:spring-boot-starter-webfluxuw-auth-client/pom.xml
Mavencom.umtone:uw-commonuw-auth-client/pom.xml
Mavenorg.springframework.cloud:spring-cloud-commonsuw-auth-client/pom.xml
Mavenorg.apache.httpcomponents.client5:httpclient5uw-auth-client/pom.xml
Mavenio.swagger.core.v3:swagger-annotationsuw-auth-client/pom.xml
Mavenorg.springframework.boot:spring-boot-starteruw-auth-service/pom.xml
Mavenorg.springframework.boot:spring-boot-starter-webuw-auth-service/pom.xml
Mavencom.umtone:uw-commonuw-auth-service/pom.xml
Mavencom.umtone:uw-auth-clientuw-auth-service/pom.xml
Mavencom.umtone:uw-log-esuw-auth-service/pom.xml
Mavencom.github.ben-manes.caffeine:caffeineuw-auth-service/pom.xml
Mavenio.swagger.core.v3:swagger-annotationsuw-auth-service/pom.xml
Mavenorg.springframework.boot:spring-boot-starter-data-redisuw-cache/pom.xml
Mavencom.github.ben-manes.caffeine:caffeineuw-cache/pom.xml
Mavencom.esotericsoftware:kryouw-cache/pom.xml
Mavenorg.apache.commons:commons-pool2uw-cache/pom.xml
Mavencom.umtone:uw-commonuw-cache/pom.xml
Mavencom.umtone:uw-daouw-common-app/pom.xml
Mavencom.umtone:uw-auth-serviceuw-common-app/pom.xml
Mavenorg.springframework.cloud:spring-cloud-loadbalanceruw-common-app/pom.xml
Mavenorg.springdoc:springdoc-openapi-starter-webmvc-uiuw-common-app/pom.xml
Mavencom.alibaba.cloud:spring-cloud-starter-alibaba-nacos-discoveryuw-common-app/pom.xml
Mavenio.swagger.core.v3:swagger-annotationsuw-common/pom.xml
Mavencom.fasterxml.jackson.core:jackson-annotationsuw-common/pom.xml
Mavencom.fasterxml.jackson.core:jackson-databinduw-common/pom.xml
Mavencom.fasterxml.jackson.datatype:jackson-datatype-jdk8uw-common/pom.xml
Mavencom.fasterxml.jackson.datatype:jackson-datatype-jsr310uw-common/pom.xml
Mavencom.fasterxml.jackson.module:jackson-module-parameter-namesuw-common/pom.xml
Mavencom.esotericsoftware:kryouw-common/pom.xml
Mavenorg.jctools:jctools-core4.0.5uw-common/pom.xml
Mavenorg.slf4j:slf4j-apiuw-common/pom.xml
Mavenorg.apache.commons:commons-lang3uw-common/pom.xml
Mavenorg.springframework:spring-contextuw-common/pom.xml
Mavencom.github.ben-manes.caffeine:caffeineuw-common/pom.xml
Mavenorg.reflections:reflectionsuw-common/pom.xml
Mavencom.github.stuxuhai:jpinyin1.1.8uw-common/pom.xml
Mavenorg.springframework.boot:spring-boot-starter-data-redisuw-dao/pom.xml
Mavencom.umtone:uw-commonuw-dao/pom.xml
Mavencom.mysql:mysql-connector-juw-dao/pom.xml
Mavencom.fasterxml.jackson.core:jackson-annotationsuw-dao/pom.xml
Mavenorg.apache.commons:commons-lang3uw-dao/pom.xml
Mavencom.zaxxer:HikariCPuw-dao/pom.xml
Mavenio.swagger.core.v3:swagger-annotationsuw-dao/pom.xml
Mavenorg.apache.commons:commons-pool2uw-dao/pom.xml
Mavencom.umtone:uw-auth-clientuw-gateway-client/pom.xml
Mavencom.umtone:uw-commonuw-gateway-client/pom.xml
Mavenio.swagger.core.v3:swagger-annotationsuw-gateway-client/pom.xml
Mavencom.squareup.okhttp3:okhttp-jvm5.3.2uw-httpclient/pom.xml
Mavenorg.apache.commons:commons-lang3uw-httpclient/pom.xml
Mavencom.fasterxml.jackson.core:jackson-coreuw-httpclient/pom.xml
Mavencom.fasterxml.jackson.core:jackson-databinduw-httpclient/pom.xml
Mavencom.fasterxml.jackson.core:jackson-annotationsuw-httpclient/pom.xml
Mavencom.fasterxml.jackson.dataformat:jackson-dataformat-xmluw-httpclient/pom.xml
Mavencom.fasterxml.jackson.datatype:jackson-datatype-jsr310uw-httpclient/pom.xml
Mavenorg.slf4j:slf4j-apiuw-httpclient/pom.xml
Mavencom.umtone:uw-commonuw-httpclient/pom.xml
Mavenorg.springframework.boot:spring-boot-starteruw-log-es/pom.xml
Mavencom.umtone:uw-commonuw-log-es/pom.xml
Mavencom.umtone:uw-httpclientuw-log-es/pom.xml
Mavencom.google.guava:guavauw-log-es/pom.xml
Mavenio.swagger.core.v3:swagger-annotationsuw-log-es/pom.xml
Mavenorg.slf4j:slf4j-apiuw-logback-es/pom.xml
Mavench.qos.logback:logback-classicuw-logback-es/pom.xml
Mavencom.umtone:uw-commonuw-logback-es/pom.xml
Mavencom.umtone:uw-httpclientuw-logback-es/pom.xml
Mavencom.google.guava:guavauw-logback-es/pom.xml
Mavenorg.springframework.boot:spring-boot-starter-data-redisuw-mfa/pom.xml
Mavencom.umtone:uw-commonuw-mfa/pom.xml
Mavencom.umtone:uw-auth-clientuw-mfa/pom.xml
Mavenorg.apache.commons:commons-lang3uw-mfa/pom.xml
Mavenio.swagger.core.v3:swagger-annotationsuw-mfa/pom.xml
Mavencommons-codec:commons-codecuw-mfa/pom.xml
Mavenorg.apache.commons:commons-pool2uw-mfa/pom.xml
Mavencom.google.zxing:core3.5.3uw-mfa/pom.xml
Mavencom.google.zxing:javase3.5.3uw-mfa/pom.xml
Mavencom.umtone:uw-commonuw-mydb-client/pom.xml
Mavencom.umtone:uw-auth-clientuw-mydb-client/pom.xml
Mavenio.swagger.core.v3:swagger-annotationsuw-mydb-client/pom.xml
Mavencom.umtone:uw-commonuw-notify-client/pom.xml
Mavencom.umtone:uw-auth-clientuw-notify-client/pom.xml
Mavenio.swagger.core.v3:swagger-annotationsuw-notify-client/pom.xml
Mavencom.umtone:uw-commonuw-oauth2-client/pom.xml
Mavencom.umtone:uw-auth-clientuw-oauth2-client/pom.xml
Mavencom.umtone:uw-httpclientuw-oauth2-client/pom.xml
Mavencom.umtone:uw-cacheuw-oauth2-client/pom.xml
Mavenio.swagger.core.v3:swagger-annotationsuw-oauth2-client/pom.xml
Mavencom.auth0:java-jwt4.5.0uw-oauth2-client/pom.xml
Mavenorg.springframework.boot:spring-boot-starter-amqpuw-task/pom.xml
Mavenorg.springframework.boot:spring-boot-starter-data-redisuw-task/pom.xml
Mavencom.umtone:uw-auth-clientuw-task/pom.xml
Mavencom.esotericsoftware:kryouw-task/pom.xml
Mavenorg.apache.commons:commons-pool2uw-task/pom.xml
Mavencom.umtone:uw-log-esuw-task/pom.xml
Mavencom.umtone:uw-commonuw-tinyurl-client/pom.xml
Mavencom.umtone:uw-auth-clientuw-tinyurl-client/pom.xml
Mavenio.swagger.core.v3:swagger-annotationsuw-tinyurl-client/pom.xml
Mavenorg.springframework.boot:spring-boot-starter-validationuw-webot/pom.xml
Mavencom.microsoft.playwright:playwright1.58.0uw-webot/pom.xml
Mavencom.umtone:uw-cacheuw-webot/pom.xml
Mavencom.umtone:uw-commonuw-webot/pom.xml
Mavencom.umtone:uw-httpclientuw-webot/pom.xml
Alle Abhängigkeiten nicht erhoben

Der aufgelöste Abhängigkeitssatz konnte für diesen Bericht nicht erhoben werden: GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Abhängigkeits-Advisories 5

Die Installation von maven:com.umtone:uw-ai@1.1.36 zieht 110 Pakete nach sich, direkt und transitiv: 5 tragen bekannte Advisories, davon 0 direkte Abhängigkeiten.

PaketVersionBeziehungSchweregradAdvisoriesBehoben in
io.netty:netty-codec-compression4.2.15.Finalindirekthoch14.2.16.Final
io.netty:netty-codec-http4.2.15.Finalindirekthoch74.2.16.Final
io.netty:netty-codec-http34.2.15.Finalindirekthoch14.2.16.Final
tools.jackson.core:jackson-databind3.1.4indirektmittel13.2.1
io.netty:netty-codec-http24.2.15.Finalindirektniedrig14.2.16.Final

Ein Advisory bedeutet, dass die im Abhängigkeitsgraphen erfasste Version in den betroffenen Bereich eines Advisories fällt. Erreichbarkeit wird nicht analysiert, und der Graph enthält Entwicklungs- und Test-Pins — ein Fund kann das Werkzeug betreffen und nicht die ausgelieferte Software.

JSON-Rohbericht maschinenlesbar
{
  "data": {
    "repo": {
      "topics": [],
      "is_fork": false,
      "size_kb": 2708,
      "has_wiki": true,
      "homepage": null,
      "languages": {
        "Java": 3188942,
        "Shell": 3737,
        "Python": 7155,
        "Dockerfile": 622
      },
      "pushed_at": "2026-07-09T15:06:42Z",
      "created_at": "2024-12-22T11:41:13Z",
      "owner_type": "User",
      "updated_at": "2026-07-09T15:08:01Z",
      "description": "uniweb基础类库",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "Apache-2.0",
      "default_branch": "main",
      "license_spdx_raw": "Apache-2.0",
      "primary_language": "Java",
      "significant_languages": [
        "Java"
      ]
    },
    "owner": {
      "blog": null,
      "name": "axeon",
      "type": "User",
      "login": "axeon",
      "company": null,
      "location": "GuangZhou, china",
      "followers": 7,
      "avatar_url": "https://avatars.githubusercontent.com/u/10541706?v=4",
      "created_at": "2015-01-15T03:57:34Z",
      "is_verified": null,
      "public_repos": 18,
      "account_age_days": 4207
    },
    "license": {
      "state": "standard",
      "spdx_id": "Apache-2.0",
      "raw_spdx": "Apache-2.0",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [],
      "recent_commits": [
        {
          "oid": "7d889578363f4ebbf8aebdcb55fb9b1927ebbb18",
          "body": "- 新增 TaskDelayer 延迟任务类型,基于 Redis zset 多实例竞争 poll\n- 使用 Lua 原子 ZRANGEBYSCORE+ZREM 取出到期任务,替代 classic TTL+DLX 延迟队列\n- 规避 per-message TTL 队头阻塞问题,执行能力随实例数水平扩展、无 Leader 单点\n- 业务方通过 TaskFactory.delayTask() 投递,配置/限速/重试/告警/统计与 Runner/Croner 完全对称\n- TaskData 改为手工 KryoSerializable 序列化,消息体更小更快\n- 添加升级注意事项文档,包括序列化格式变更和 Redis 依赖要求",
          "is_bot": false,
          "headline": "feat(task): 新增延迟任务类型 TaskDelayer",
          "author_name": "zhangjin",
          "author_login": "axeon",
          "committed_at": "2026-07-09T11:13:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "81f33f81cb067f687c3133e4f049c414015d23cb",
          "body": "- 移除 TaskDelayerContainer 中的 synchronized 关键字,通过 TaskServiceRegistrar.configLock 实现线程安全\n- 修复 TaskFactory 中重试间隔算法,将睡眠时间从 i * 500ms 改为 i * 100ms\n- 在数据库表中添加 alert_fail_config_rate 配置失败率字段和 retry_times_by_program 程序异常重试次数字段\n- 重命名 task_delayer_stats 表中的 time_wait_delay 字段为 time_wait\n- 更新 TaskCronerInfoCo\n[…]\nyer 三种类型\n- 修正 TaskDelayerInfoQueryParam 中的延迟超时字段名称从 alert_delay_overtime 改为 alert_wait_timeout\n- 为 TaskCronerInfoQueryParam 和 TaskDelayerInfoQueryParam 添加配置失败率和数据失败率的查询参数\n- 修正定时任务和队列任务 ES 日志查询参数类的注释描述",
          "is_bot": false,
          "headline": "feat(task): 优化任务调度系统线程安全和数据库结构",
          "author_name": "zhangjin",
          "author_login": "axeon",
          "committed_at": "2026-07-09T11:09:57Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b86e4acb0f761ff41e5008eb9840fa9dc74541f0",
          "body": "- 统一停止方法命名:stopTask/stopDelayer 重命名为 stop 以保持一致性\n- 增强异常处理和日志记录:添加业务上下文信息便于排查配置失败问题\n- 优化 Crone r统计逻辑:将统计和日志落盘从触发回调移到可运行体内部\n- 修复 Delayer 任务执行异常处理:添加外层捕获确保任务不丢失\n- 更新降级恢复逻辑注释:修正方法名描述准确性\n- 优化资源配置管理:调整配置键覆盖和实例查找逻辑\n- 增强 Delayer 统计功能:实现活跃执行线程数统计\n- 修复重试机制:调整退避算法和重试参数传递",
          "is_bot": false,
          "headline": "refactor(task): 重构任务调度容器和服务注册逻辑",
          "author_name": "zhangjin",
          "author_login": "axeon",
          "committed_at": "2026-07-09T10:25:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a0a1fa5d9be83624a49b6ab503bf3760f7b063ea",
          "body": "- 优化 TaskAutoConfiguration 中的注释描述,明确组件间依赖关系\n- 统一容器销毁方法命名,将 stopAllTaskXxx 改为 destroyAll 更准确表达意图\n- 简化 TaskMetaInfoManager 中的配置键构建逻辑,提取公共方法减少重复代码\n- 移除 TaskServiceRegistrar 中不再使用的 RabbitMQ 连接工厂和管理器依赖\n- 重构配置更新逻辑,将 updateXxxConfig 方法重命名为 fetchXxxConfig 体现数据获取职责\n- 完善延迟任务配置处理,支持增量拉取和热更新机制\n- 优化队列监听器注册流程,将具体实现下沉至对应容器类\n- 统一任务容器的挂起和销毁操作接口,提升代码一致性",
          "is_bot": false,
          "headline": "refactor(task): 重构任务配置管理与容器生命周期",
          "author_name": "zhangjin",
          "author_login": "axeon",
          "committed_at": "2026-07-09T04:21:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "977fa77c39c35910400d498c03b73d14b275ed85",
          "body": "- 移除 TaskMetaInfoManager 中静态 delayerConfigMap 配置缓存字段\n- 将 delayerConfigMap 重新定义为实例字段并移至类末尾\n- 修改 getConfigKey 方法为实例方法,支持动态调用\n- 更新 TaskDelayerContainer 中配置键获取方式,使用实例方法替代静态调用\n- 移除相关单元测试中的静态方法验证逻辑\n- 优化配置缓存管理的一致性和实例化流程",
          "is_bot": false,
          "headline": "refactor(task): 重构任务元信息管理器配置缓存结构",
          "author_name": "zhangjin",
          "author_login": "axeon",
          "committed_at": "2026-07-09T01:44:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "eea3ebfc4a636a16f73d18229f3ea0e44762f04e",
          "body": "- 调整 channelCacheSize 下限从 25 改为 10\n- 优化 TaskFactory 构造函数参数顺序和文档注释\n- 重排 TaskRunnerContainer、TaskDelayerContainer 和 TaskCronerContainer 构造函数参数顺序\n- 修复 TaskServiceRegistrar 中延迟任务配置初始化逻辑,捕获服务端响应获取真实 ID\n- 为 TaskRunner listener destroy 添加异常处理,避免单个监听器销毁失败阻断整体停机\n- 添加应用主机信息获取兜底逻辑,当 Nacos 未接入时使用本机 IP\n- 为队列积压查询\n[…]\n述中的 IP 到 HOST 字样错误\n- 优化延迟任务统计查询性能,预建 taskId 到 configKey 的反向索引\n- 为 TaskRunner 添加兜底异常处理,确保消息不丢失并更新统计日志\n- 改进序列化反序列化异常处理,避免内部信息泄露\n- 修复任务配置默认值和文档注释问题\n- 为 RPC 调用超时添加专门的错误处理逻辑\n- 修复 TaskListenerManager 方法注释错误",
          "is_bot": false,
          "headline": "refactor(task): 重构任务模块配置和容器初始化逻辑",
          "author_name": "zhangjin",
          "author_login": "axeon",
          "committed_at": "2026-07-09T01:29:26Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5ec2c96008e6bfe133227b8385e0502f4da7ebf1",
          "body": "- 在应用关闭时使用锁机制确保任务停止的安全性,防止并发访问导致的资源泄漏\n- 添加 Redis 故障时的任务 ID 生成异常处理,避免静默吞掉调度日志\n- 为任务运行器添加兜底异常捕获机制,防止消息丢失并记录错误信息\n- 优化配置更新时的任务清理逻辑,及时停止废弃的定时任务和消息监听器",
          "is_bot": false,
          "headline": "fix(task): 解决任务关闭时的并发安全和异常处理问题",
          "author_name": "zhangjin",
          "author_login": "axeon",
          "committed_at": "2026-07-09T00:42:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b995af729db6ded57e04e71054f647b14dc40b2c",
          "body": "- 为 LimitedVirtualThreadExecutor 添加 shutdownNow 方法支持强制关闭\n- 修复 TaskApiClient 日志消息中的描述错误,统一使用准确的功能描述\n- 重构 TaskAutoConfiguration 中的任务容器启动逻辑,实现统一的配置驱动启动\n- 添加对 Redis 和 RabbitMQ 连接工厂的优雅关闭支持\n- 实现任务容器的本地降级模式,当中心配置不可用时使用默认配置启动\n- 添加主机禁用/启用功能,支持动态停止和恢复任务执行\n- 优化 TaskCronerContainer 使用配置键索引替代 ID,支持本地降级切换\n- 改进 TaskDelayerContainer 使用配置键索引并添加错投防御机制\n- 统一异常处理和资源清理逻辑,提升系统的稳定性和可靠性",
          "is_bot": false,
          "headline": "feat(task): 优化任务框架的配置管理和容器生命周期控制",
          "author_name": "zhangjin",
          "author_login": "axeon",
          "committed_at": "2026-07-08T16:30:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7f3b469c2c8dbbc962ba2019940c13b476cb49eb",
          "body": "- 新增 TaskDelayerConfig 配置实体和相关 API 接口\n- 实现延迟任务容器 TaskDelayerContainer 和执行逻辑\n- 添加延迟任务配置的初始化、拉取和管理功能\n- 支持延迟任务执行日志异步写入到 ES\n- 优化 RabbitMQ 连接工厂的 channel 缓存大小动态调整\n- 完善任务服务注册器中的延迟任务配置更新机制\n- 增加延迟任务相关的统计信息上报功能",
          "is_bot": false,
          "headline": "feat(task): 添加延迟任务功能支持",
          "author_name": "zhangjin",
          "author_login": "axeon",
          "committed_at": "2026-07-08T13:24:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c230277b57402b3e859599976bfd72ee6abae2ee",
          "body": "- 新增 TaskDelayerConfig 配置实体和相关 API 接口\n- 实现延迟任务容器 TaskDelayerContainer 和执行逻辑\n- 添加延迟任务配置的初始化、拉取和管理功能\n- 支持延迟任务执行日志异步写入到 ES\n- 优化 RabbitMQ 连接工厂的 channel 缓存大小动态调整\n- 完善任务服务注册器中的延迟任务配置更新机制\n- 增加延迟任务相关的统计信息上报功能",
          "is_bot": false,
          "headline": "feat(task): 添加延迟任务功能支持",
          "author_name": "zhangjin",
          "author_login": "axeon",
          "committed_at": "2026-07-08T13:23:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "be6d6bc6f2d83b4fe979f8103f7bf4d579ba8b1b",
          "body": "- 扩展 ShardingTableUtils 类功能,支持按 id 取模和按日期两种分片策略\n- 新增 unionAllShards 方法构建跨区间按天分表的 UNION ALL 查询\n- 提供完整的 Javadoc 文档说明分片策略和使用方法\n- 实现跨天报表查询避免单表数据遗漏问题\n- 添加日期区间验证和空结果集保护机制",
          "is_bot": false,
          "headline": "feat(dao): 添加分表路由与跨分表查询工具",
          "author_name": "zhangjin",
          "author_login": "axeon",
          "committed_at": "2026-07-08T10:46:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "07dba0ee0c2c544472a38e074a7ae2272da4f87e",
          "body": "- 修改构造函数,添加 threadNamePrefix 参数用于标识虚拟线程\n- 添加线程名称前缀参数校验逻辑\n- 使用 ThreadFactory 配置虚拟线程命名规则\n- 更新 README 文档中的构造函数签名说明\n- 在 SystemClock 中添加时钟监控线程关闭方法,解决内存泄漏警告",
          "is_bot": false,
          "headline": "refactor(threading): 重构限流虚拟线程执行器支持自定义线程名称前缀",
          "author_name": "zhangjin",
          "author_login": "axeon",
          "committed_at": "2026-07-08T10:20:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5a0cd82bfd28193f69f05d8586a76c58509bb30b",
          "body": "- 实现了 GlobalSortedSet 延迟队列场景的完整测试覆盖\n- 验证基本延迟与到期功能,确保按时序正确处理到期元素\n- 测试 member 唯一性陷阱,确认相同对象不会互相覆盖\n- 验证不队头阻塞特性,长延迟任务不会阻挡短延迟任务处理\n- 实现脏数据逐条兜底测试,确保反序列化失败元素被跳过\n- 将 spring-boot-test 依赖更新为 spring-boot-starter-test",
          "is_bot": false,
          "headline": "test(cache): 添加全局排序集延迟队列功能测试",
          "author_name": "zhangjin",
          "author_login": "axeon",
          "committed_at": "2026-07-08T10:17:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5e3fd9d3d7a04f4f5d3131188b5cc5966becf3b5",
          "body": "- 移除多余的反斜杠转义字符\n- 确保字符串格式正确传递给查询方法\n- 保持测试功能不变但提高代码可读性",
          "is_bot": false,
          "headline": "fix(test): 修复DSL测试中的转义字符问题",
          "author_name": "zhangjin",
          "author_login": "axeon",
          "committed_at": "2026-07-07T06:56:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2ddbf3ec4eb78443747b337426d690be5ce1f1cc",
          "body": "- 在 mvn-deploy.sh 中新增 -p/--parent-only 参数选项\n- 实现仅构建和发布 uw-base parent POM 的功能(使用 -N 参数)\n- 添加参数冲突检查防止与其他部署模式同时使用\n- 更新使用说明文档显示新的部署选项\n- 同步更新 pom.xml 和 README.md 中的版本号至 2026.0601.0012\n- 调整 springdoc-openapi 版本回退至 2.8.16",
          "is_bot": false,
          "headline": "feat(script): 添加仅发布 parent 模式的 Maven 部署脚本",
          "author_name": "zhangjin",
          "author_login": "axeon",
          "committed_at": "2026-07-07T06:24:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4f5e2acadc052cb11cf4d188945b067f4f0bcd47",
          "body": "- 将项目修订版本从 2026.0601.0010 更新为 2026.0601.0011\n- 更新 uw-auth-service 依赖版本从 6.2.65 到 6.2.66\n- 同步更新 README.md 中的版本号引用",
          "is_bot": false,
          "headline": "chore(version): 更新项目版本号和依赖版本",
          "author_name": "zhangjin",
          "author_login": "axeon",
          "committed_at": "2026-07-06T10:14:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "00572bbe282d3a2a39b6edc3a5fb51eeb6c08dfc",
          "body": "- 将 authTokenData 变量声明提前到方法开始处\n- 重构 userType 为 ANY 类型时的处理逻辑\n- 使用 else 分支包裹非匿名用户的令牌验证流程\n- 保持原有的令牌缓存和验证机制不变\n- 确保令牌过期检查逻辑的一致性",
          "is_bot": false,
          "headline": "refactor(auth): 优化令牌验证逻辑以支持匿名用户类型",
          "author_name": "zhangjin",
          "author_login": "axeon",
          "committed_at": "2026-07-06T10:05:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4b4c3d7c9392b38dfcfb2c9b28067561c5e48fd6",
          "body": "- 移除 ResponseCode 接口中的 getFullCode 方法,统一使用 getCode 方法获取完整响应码\n- 实现自动国际化消息源加载机制,基于 codePrefix 自动推导 basename 并缓存资源\n- 添加 MESSAGE_SOURCE_CACHE 集中管理国际化资源,避免重复加载资源包\n- 为 ResponseCode 接口增加 codePrefix 和 code 方法支持前缀拼接\n- 更新 ResponseData 中的响应码获取方式,统一使用 getCode 替代 getFullCode\n- 修改 ResponseCodeUtils 工具类使用 getCode \n[…]\nValidateResponseCode 枚举实现新的国际化机制\n- 为 JsonConfigParam 接口添加国际化标题支持,实现自动按 Locale 解析\n- 优化 JsonConfigHelper 中的参数验证逻辑,使用国际化标题进行错误提示\n- 简化枚举类实现,移除手动创建 MessageSource 的代码\n- 为配置参数添加 configPrefix 支持,实现配置项标题的国际化功能",
          "is_bot": false,
          "headline": "refactor(response): 重构响应码国际化机制并优化配置参数国际化",
          "author_name": "zhangjin",
          "author_login": "axeon",
          "committed_at": "2026-06-29T14:01:07Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "9ecc2b9f9276999674db0ba1e93846b8b10e3044",
          "body": "- 将DateUtils类重命名为DateTools\n- 更新JsonUtils中对DateUtils的引用为DateTools\n- 更新CommonAppAutoConfiguration中对DateUtils的引用为DateTools\n- 更新JsonConfigHelper中对DateUtils的引用为DateTools\n- 更新JsonObjectMapperImpl中对DateUtils的引用为DateTools\n- 更新XmlObjectMapperImpl中对DateUtils的引用为DateTools\n- 更新oauth2-client中对DateUtils的引用为DateTools\n- 在README.md中更新类名引用和文档说明\n- 在CHANGELOG.md中记录类名变更\n- 更新pom.xml中的版本号从2026.0601.0008到2026.0601.0009及依赖版本\n- 更新主README.md中的类名引用",
          "is_bot": false,
          "headline": "refactor(common): 将DateUtils重命名为DateTools以解决AI导入错误",
          "author_name": "zhangjin",
          "author_login": "axeon",
          "committed_at": "2026-06-26T08:13:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1a8ac217802d1e7897670d12255a74ef72f02d5e",
          "body": "- 将 ChineseUtils 中的 ngram 和 lcs 相似度算法移至 StringTools 类\n- 移除 ChineseUtils 中的全角半角转换方法\n- 新增 StringTools 工具类,包含字符串数组集合互转、SQL占位符生成等功能\n- 更新注释引用指向新的 StringTools 实现\n- 移除 ChineseUtils 中的 HashMap 和 Map 导入声明",
          "is_bot": false,
          "headline": "refactor(utils): 重构字符串处理工具类",
          "author_name": "zhangjin",
          "author_login": "axeon",
          "committed_at": "2026-06-25T14:55:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cc1155483df974215cd9429f56d417e712900ba1",
          "body": "- 修复 macOS 兼容性问题,改进项目根目录计算逻辑\n- 移除 clean 命令的 -q 参数以便错误调试\n- 完善 deploy 失败后的 .flattened-pom.xml 清理机制\n- 更新项目版本号从 2026.0601.0005 到 2026.0601.0006\n- 升级 uw-ai、uw-auth-client、uw-httpclient 等多个依赖包版本\n- 更新 CHANGELOG.md 版本说明信息",
          "is_bot": false,
          "headline": "build(deploy): 优化部署脚本并更新依赖版本",
          "author_name": "zhangjin",
          "author_login": "axeon",
          "committed_at": "2026-06-22T06:50:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "04b3f65f42d7981879332f6ebc0390052316959f",
          "body": "- 更新底层实现描述从 OkHttp 4.12 到 OkHttp 5.3.x(okhttp-jvm 服务端版)\n- 添加默认请求头、Cookie 持久化、应用/网络拦截器等新配置选项\n- 增加取响应头和重试/重定向次数的功能说明\n- 扩展 HttpDataProcessor 接口增加完整 Request 版本的方法\n- 添加默认请求头、CookieJar 和拦截器的配置参数说明\n- 详细说明异常分类语义和 DataMapperException 冒泡机制\n- 补充响应头获取、retryCount 自动启用和异常处理的最佳实践指南",
          "is_bot": false,
          "headline": "docs(uw-httpclient): 更新文档包含新功能和详细配置说明",
          "author_name": "zhangjin",
          "author_login": "axeon",
          "committed_at": "2026-06-22T04:55:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6a85cbf3d23e3c42185acbd31f27270c939757c1",
          "body": "fix(security): 修复HMAC签名验证中的时序攻击漏洞\n\n- 添加MessageDigest导入用于安全比较\n- 使用MessageDigest.isEqual进行常量时间字符串比较\n- 避免时序攻击通过字节推断签名的安全风险\n```",
          "is_bot": false,
          "headline": "```",
          "author_name": "zhangjin",
          "author_login": "axeon",
          "committed_at": "2026-06-22T04:35:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cbba9d075a376986deb689477af81b093ccf9cc4",
          "body": "- 简化异常处理约定描述,移除冗余的安全警告表述\n- 明确调用建议,包括外部边界接口异常捕获和批量读取场景处理\n- 移除具体的反面教材示例,精简文档内容\n- 更新参考实现实例,保持文档简洁性",
          "is_bot": false,
          "headline": "docs(common): 更新 Kryo 反序列化异常处理文档",
          "author_name": "zhangjin",
          "author_login": "axeon",
          "committed_at": "2026-06-22T01:11:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "de817e5ecee181a982886c937c92e25f64215b19",
          "body": "- 补充 TableShardingTask 仅预创建当前/下一分片表的说明\n- 新增定时清理/批量任务与分表的处理指南\n- 提供按 date 和 id 分片类型的遍历方式对比\n- 添加枚举所有分表的通用 Java 代码示例\n- 强调业务侧清理任务应判断表是否配置分表的设计建议\n- 修正跨分片表查询标题为查询/清理跨多个分片表数据\n- 补充删除/清理任务需遍历分表的重要提醒\n\nfeat(notify): 完善通知客户端配置与消息体约束说明\n\n- 更新 UwNotifyProperties 中关于配置前缀的服务发现说明\n- 明确 WebNotifyMsg 中 userId 必须为全局唯一且大于0的有效用户ID\n- 说明当前 notify-center 仅支持向单个在线用户定向投递的限制\n- 更新 WebNotifyMsg 类中 userId 和 saasId 字段的约束描述\n- 添加详细的 Javadoc 注释说明各方法的参数要求\n- 修改 NotifyClientHelper 中推送失败的错误信息为固定文案\n- 强调推送消息体中 userId 必须大于0的校验要求",
          "is_bot": false,
          "headline": "docs(dao): 更新分表文档说明与清理任务最佳实践",
          "author_name": "zhangjin",
          "author_login": "axeon",
          "committed_at": "2026-06-21T15:16:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b79ba6b5af0ae9754e46c9a303e636e77936d849",
          "body": "- 新增 SaasRateLimitParam 类,支持运营商限速策略参数定义\n- 添加 Builder 模式构造器,支持链式调用设置参数\n- 更新 GatewayClientHelper.updateSaasRateLimit 方法签名,使用新参数类\n- 修改请求方式从表单提交改为 JSON 格式请求体\n- 更新 README 文档,添加新参数类使用说明和示例\n- 支持多种限速维度:IP、SAAS等级、用户类型、用户ID等\n- 添加参数前置校验逻辑,确保必要字段不为空",
          "is_bot": false,
          "headline": "feat(gateway): 添加运营商限速策略参数类和更新方法",
          "author_name": "zhangjin",
          "author_login": "axeon",
          "committed_at": "2026-06-21T12:54:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f19817648565cd4be6d355ce5fcb3ed4c8e5220e",
          "body": "- 在GlobalCache中添加try-catch块处理反序列化失败,返回null并记录错误日志\n- 在GlobalHashSet的random、pop、list方法中逐条处理反序列化,跳过失败数据并记录警告\n- 在GlobalSortedSet的listRangeByScore方法中逐条处理反序列化,跳过失败数据并记录警告\n- 更新KryoUtils文档,明确对外报错安全方针,防止序列化内部信息泄露\n- 在README中补充Kryo异常与对外报错安全使用规范说明",
          "is_bot": false,
          "headline": "fix(cache): 解决缓存反序列化异常处理问题",
          "author_name": "zhangjin",
          "author_login": "axeon",
          "committed_at": "2026-06-21T03:53:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "adee242bf5e2f05aa11fe62778de822764994fe8",
          "body": "- 新增KryoDataRedisSerializer支持KryoData接口的高性能序列化\n- 重构KryoRedisSerializer支持类型已知和类型未知两种构造模式\n- 移动KryoRedisSerializer到uw.cache.serializer包路径\n- 更新文档说明两种序列化器的选择和使用方式\n- 优化序列化性能通过LambdaMetafactory实现快速实例创建\n- 添加详细的JavaDoc注释说明序列化器的使用约束和特性",
          "is_bot": false,
          "headline": "feat(cache): 添加KryoDataRedisSerializer并重构KryoRedisSerializer",
          "author_name": "zhangjin",
          "author_login": "axeon",
          "committed_at": "2026-06-21T03:03:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4058020eab8c0ae6ca9b32abbbd77811a1308808",
          "body": "- 重构 LocalOcrCaptchaService 移除占位符实现,明确注释说明需集成真实 OCR 引擎\n- 改进 TwoCaptchaService API 请求方式,通过 POST body 传递 key 参数避免泄露到 URL 日志\n- 优化 BrowserBotPool 分层架构描述,明确 Browser 进程级复用和 Tab 级别隔离机制\n- 增强 BrowserGroup 轮询负载均衡策略,实现流量均匀分布到所有实例\n- 完善 BrowserInstance 线程安全和超时处理机制,增加幂等关闭和异步清理功能\n- 更新 BrowserTab 文档说明 Context 一次性使用模式,新增 addInitScript 方法支持反检测脚本注入\n- 优化 LocalProxyPool 轮询算法和健康检查逻辑,提高代理资源管理效率\n- 调整 StealthService 实现方式,通过初始化脚本在页面加载前注入反检测措施\n- 修复 ProxyManager 和 StealthManager 注释错误,统一命名空间和服务获取逻辑",
          "is_bot": false,
          "headline": "refactor(webot): 优化浏览器机器人池和验证码服务实现",
          "author_name": "zhangjin",
          "author_login": "axeon",
          "committed_at": "2026-06-21T03:02:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b8d36ba3fe85e8932f8f91897238807223b17266",
          "body": "- 移除 KryoRedisSerializer 目录项\n- 调整 vo 目录下的子目录层级结构\n- 更新值对象目录的组织方式",
          "is_bot": false,
          "headline": "refactor(docs): 更新 README.md 目录结构",
          "author_name": "zhangjin",
          "author_login": "axeon",
          "committed_at": "2026-06-21T03:02:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7d905a676e42620e94ceab5a7e2970c94c7b7ec8",
          "body": "- 在文档注释中添加新的deserializeData方法引用\n- 将默认缓冲区大小从2048调整为2560\n- 新增deserializeData(byte[], Class)方法,支持通过Class反射创建实例并填充数据\n- 实现基于公开无参构造函数的反射实例化机制\n- 提供完整的异常处理和错误信息包装\n- 保持与现有接口式手工序列化方法的一致性设计",
          "is_bot": false,
          "headline": "feat(utils): 添加Kryo工具类的反射反序列化功能",
          "author_name": "zhangjin",
          "author_login": "axeon",
          "committed_at": "2026-06-21T03:01:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e698c32d59a87b067a1ecaa46b540780d9db3424",
          "body": "- 移除StringUtils.isBlank检查,改用简单的null检查以提高性能\n- 修正AiImageRpcImpl中的字段映射,确保userPrompt正确绑定到服务端\n- 将AiImageRpcImpl的内容类型从application/json改为multipart/form-data\n- 保持与AiChatRpcImpl的一致性,避免LinkedMultiValueMap的错误序列化\n- 更新AiTranslateMapParam类的注释和文档描述,准确反映其功能",
          "is_bot": false,
          "headline": "refactor(ai): 优化AI服务RPC实现的参数验证和内容类型配置",
          "author_name": "zhangjin",
          "author_login": "axeon",
          "committed_at": "2026-06-21T02:15:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7f94458349cb262f5c58a8097a0cf620f53d587e",
          "body": "- 完善OAuth2ClientAuthStatus、OAuth2ClientAuthType和OAuth2ClientResponseCode的JavaDoc\n- 修正INVALID_HTTP_CODE错误码描述,从\"无效的授权码\"改为\"无效的HTTP状态码\"\n- 优化AbstractOAuth2Provider的类注释和方法注释,增加技术细节说明\n- 为AlipayOAuth2Provider、AppleOAuth2Provider、StandardOAuth2Provider和WechatOAuth2Provider添加详细注释\n- 更新OAuth2StateId类的注释,明确其组成结构和用途\n- 补充各个provider实现类的具体差异点和技术要点说明",
          "is_bot": false,
          "headline": "docs(oauth2): 更新OAuth2客户端文档注释和错误描述",
          "author_name": "zhangjin",
          "author_login": "axeon",
          "committed_at": "2026-06-21T02:14:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b5059e2e9a8490f3b55584b689fca9dd914268a4",
          "body": "- 更新 UwAiAutoConfiguration 注释,明确装配 RPC Bean 与静态门面功能\n- 优化各 RPC 实现类注释,明确服务端调用方式与认证信息透传机制\n- 修复 AiChatRpcImpl 中 multipart 请求体构建逻辑,统一处理认证四元组\n- 改进工具元数据同步逻辑,增强空值防御与方法过滤机制\n- 添加完整的单元测试覆盖关键参数传递与数据清洗功能\n- 优化 AiTool 接口文档,明确版本控制与服务中心回调机制\n- 统一各 RPC 接口注释格式,增强可读性与维护性",
          "is_bot": false,
          "headline": "refactor(uw-ai): 重构 AI 模块配置与工具元数据管理",
          "author_name": "zhangjin",
          "author_login": "axeon",
          "committed_at": "2026-06-21T02:00:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f56a2ca43e798a23af73be97134a25dabef9e071",
          "body": "- 完善 uw-gateway-client、uw-mydb-client、uw-notify-client 和 uw-tinyurl-client\n  的自动配置类注释说明\n- 更新各 Properties 配置类的文档注释,明确配置前缀和字段说明\n- 优化 GatewayClientHelper 中的参数校验逻辑和返回类型安全性\n- 增强 DataNode 类的构造函数验证逻辑,添加更详细的使用说明\n- 重构 NotifyClientHelper 中的通知消息体结构,改进 API 设计\n- 为所有客户端组件添加完整的 README.md 文档,包含使用示例和 API 说明\n- 统一各客户端 Helper 类的静态注入模式和错误处理机制",
          "is_bot": false,
          "headline": "docs(client): 更新客户端库文档与代码规范",
          "author_name": "zhangjin",
          "author_login": "axeon",
          "committed_at": "2026-06-21T01:59:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "40224b0d7f0378b88c3ad56bff2eb0956cacc076",
          "body": "- 补充Captcha策略类详细功能描述和参数说明\n- 完善AES加解密工具类算法说明和异常处理说明\n- 添加图片处理工具类资源管理和高斯模糊相关方法注释\n- 扩展随机工具类方法参数和返回值说明\n- 更新Captcha数据传输对象结构说明\n- 完善Captcha服务类生成和校验流程注释\n- 添加MFA自动配置类Bean创建和依赖注入说明\n- 补充配置属性类业务分类和Redis连接说明\n- 更新HMAC算法枚举RFC规范和兼容性说明\n- 完善设备类型枚举值含义和业务路由说明\n- 添加响应码枚举国际化和错误处理说明\n- 扩展Captcha帮助类频率限制和一次性消费机制说明\n- 更新设备验证码帮助类发送流程和模板占位符说明",
          "is_bot": false,
          "headline": "docs(mfa): 更新MFA模块注释文档",
          "author_name": "zhangjin",
          "author_login": "axeon",
          "committed_at": "2026-06-20T19:14:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bbf2e2206f4d2945973b698271df00eb21c2202f",
          "body": "- 添加了对 maxKiloBytesOfBatch 参数的最小值验证\n- 当配置值小于 1 时自动调整为 1\n- 更新了相关注释说明默认值和最小值限制\n- 确保了配置参数的有效性检查逻辑",
          "is_bot": false,
          "headline": "fix(logback): 修复批量提交阈值配置验证问题",
          "author_name": "zhangjin",
          "author_login": "axeon",
          "committed_at": "2026-06-20T19:10:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "597dd436e457bc60c57521a8f4d9da0152f56845",
          "body": "- 添加了详细的类和方法 JavaDoc 注释,说明功能和参数用途\n- 更新了 README.md 包含工作原理、注意事项和配置说明\n- 改进了代码注释的准确性和完整性\n- 统一了命名规范,将 esHost 改为 esServer 保持一致性\n- 优化了异常处理和错误提示信息\n- 增强了 JSON 转义功能防止 NDJSON 结构损坏",
          "is_bot": false,
          "headline": "docs(logback-es): 更新 Elasticsearch 日志 Appender 文档与注释",
          "author_name": "zhangjin",
          "author_login": "axeon",
          "committed_at": "2026-06-20T19:04:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "beedbd5a7b7e1ddcac789b9154ace1037a703ff8",
          "body": "- 修改 sys_crit_log 表定义,更新表注释从 uw_auth2 到 saas_mall\n- 重命名 sys_data_history 表注释,统一命名空间为 saas_mall\n- 优化 CommonAppAutoConfiguration 类的 JavaDoc 注释和字段说明\n- 更新 CommonAppProperties 配置类的文档注释和 getter/setter 方法注释\n- 为 CommonConstants、CommonResponseCode、CommonState 等常量类添加详细文档\n- 重构查询参数类的继承关系注释,明确各参数类的使用场景\n- 移除 SysCritLogQueryParam 中重复的 mchId/userId/userType 字段定义\n- 优化数据库表字段的数据类型定义和注释描述",
          "is_bot": false,
          "headline": "refactor(database): 重构数据库表结构和代码注释优化",
          "author_name": "zhangjin",
          "author_login": "axeon",
          "committed_at": "2026-06-20T18:56:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e51f1e88a99754ac2d7bfaf209df42e45ac804bb",
          "body": "- 覆盖 LogClient 的聚合转换工具方法测试\n- 添加分页映射逻辑的单元测试验证\n- 测试聚合桶扁平化转换功能\n- 验证聚合桶列表映射转换功能\n- 测试嵌套聚合桶扁平映射转换\n- 添加查询响应到分页列表映射测试\n- 验证大数值总数支持long类型\n- 测试批量日志按级别过滤功能",
          "is_bot": false,
          "headline": "test(log-es): 添加日志客户端聚合转换和分页映射单元测试",
          "author_name": "zhangjin",
          "author_login": "axeon",
          "committed_at": "2026-06-20T18:43:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "aac69cbef5226f56a1f958466de0c9d59013c773",
          "body": "- 完善 LogService 中 getQuotedRawIndexName 和 getQuotedQueryIndexName 方法注释\n- 为 IndexConfigVo 类及构造函数、getter 方法添加详细 JavaDoc 注释\n- 为 ObjectAsStringDeserializer 类及 deserialize 方法添加完整注释说明\n- 为 BulkResponse、DeleteScrollIdRequest、LogBaseVo、LogLevel、ScrollResponse\n  等 VO 类添加类注释和方法注释\n- 重构 README.md 文档,更新项目介绍、配置说明、使用示例等内容\n- 修复 DeleteScrollResponse 在 scrollId 为 null 时的 NPE 问题",
          "is_bot": false,
          "headline": "docs(log-es): 更新日志客户端文档与代码注释",
          "author_name": "zhangjin",
          "author_login": "axeon",
          "committed_at": "2026-06-20T18:26:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5a6e9aafe566e389c496aa99cfb9c3455fd87e40",
          "body": "- 为GlobalExceptionAdvice添加详细的异常处理说明和作者信息\n- 为GlobalResponseAdvice补充响应包裹处理和操作日志记录的功能描述\n- 为MscPermDeclare注解增加权限声明的详细说明和使用注意事项\n- 为ResponseAdviceIgnore注解添加跳过响应包裹的功能描述\n- 为AuthServiceAutoConfiguration增加自动装配的核心组件说明\n- 为AuthServiceProperties补充配置属性的详细描述和新增日志缓存限制字段\n- 为ActionLog枚举添加操作日志级别的完整说明和使用关联\n- 为AuthServic\n[…]\nenType枚举添加Token安全等级的权限判定说明\n- 为UserType枚举完善用户类型的权限匹配和管理关系说明\n- 为各个Token相关异常类添加抛出时机和HTTP状态码映射说明\n- 为AuthServiceFilter补充认证授权过滤器的完整处理流程\n- 为AuthCriticalLogStorage接口增加关键日志存储的实现说明\n- 为RPC实现类添加远程调用接口的功能描述和参数编码修复",
          "is_bot": false,
          "headline": "docs(auth): 更新认证服务模块的API文档注释",
          "author_name": "zhangjin",
          "author_login": "axeon",
          "committed_at": "2026-06-20T18:22:22Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f931a4880aefb6481cf65b40118cad6f9e31d739",
          "body": "- 为 DataMapperException 添加序列化/反序列化异常场景说明\n- 为 HttpRequestException 添加 HTTP 请求阶段错误类型说明\n- 为 DataObjectMapper 接口及方法添加详细的泛型绑定和序列化/反序列化功能描述\n- 为 HttpConfig 添加不可变配置对象说明和构建器推荐用法\n- 为 HttpData 接口及方法添加请求/响应上下文记录功能描述\n- 为 HttpDataLogLevel 添加日志级别控制范围说明和简化布尔判断逻辑\n- 为 HttpDataProcessor 添加请求生命周期处理回调说明\n- 为 HttpDefaultD\n[…]\nMapperImpl 添加 Jackson2 实现和预配置说明\n- 为 BufferRequestBody 添加内存缓冲区请求体构造工具说明\n- 为 HttpBasicAuthenticator 添加 Basic 认证和防无限重试功能说明\n- 为 MediaTypes 添加常用 MediaType 常量集合说明\n- 为 SSLContextUtils 添加 SSL/TLS 上下文工具和安全警告说明",
          "is_bot": false,
          "headline": "docs(httpclient): 更新 HTTP 客户端组件的 Javadoc 注释",
          "author_name": "zhangjin",
          "author_login": "axeon",
          "committed_at": "2026-06-20T18:21:53Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5b48d597469c84de8e975b429aabae5212826c17",
          "body": "- 更新UwCacheAutoConfiguration添加ConditionalOnClass和ConditionalOnMissingBean条件\n- 为各RedisTemplate Bean添加详细的JavaDoc文档说明用途和参数\n- 优化RedisMessageListenerContainer使用虚拟线程执行器避免线程数量失控\n- 为FusionCacheNotifyListener添加集群缓存一致性处理逻辑说明\n- 改进GlobalFusionCacheLoader异常处理使用failProtectMillis兜底策略\n- 为各缓存加载器组件添加完整的泛型类型参数和使用约束说明\n- 优化FusionCache重试逻辑修复过期数据重试空转问题并添加重复配置警告\n- 为各公共方法添加详细的参数和返回值说明提高代码可维护性",
          "is_bot": false,
          "headline": "refactor(cache): 重构uw-cache组件的自动配置和文档注释",
          "author_name": "zhangjin",
          "author_login": "axeon",
          "committed_at": "2026-06-20T17:48:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fe537749ba2d3a993beb5b3cfa640c2da00189c7",
          "body": "- 实现了 PostgreSQLDialect 类继承 Dialect 基类\n- 提供 PostgreSQL 原生 LIMIT/OFFSET 分页语法支持\n- 重写 getPagedSQL 方法生成 limit ? offset ? 分页查询\n- 注意参数顺序与 MySQL 相反:limit 后为行数,offset 后为偏移量\n- 对应驱动类名 org.postgresql.Driver 由 DialectManager 自动选用",
          "is_bot": false,
          "headline": "feat(dao): 添加 PostgreSQL 数据库方言支持",
          "author_name": "zhangjin",
          "author_login": "axeon",
          "committed_at": "2026-06-20T17:42:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "843fe283fa779fcf60ef92f629ea641eae47450c",
          "body": "- 在spring.factories中注册AuthClientExcludeAutoConfigProcessor\n- 实现环境后处理功能以支持认证客户端自动配置排除",
          "is_bot": false,
          "headline": "feat(auth): 添加环境后处理器配置",
          "author_name": "zhangjin",
          "author_login": "axeon",
          "committed_at": "2026-06-20T17:42:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d0666f3978ba0563733ae8097f84064bca7b6117",
          "body": "- 实现通用字符串脱敏方法mask,支持自定义前后缀保留长度和掩码字符串\n- 提供针对中国特有业务场景的脱敏方法,包括手机号、身份证、姓名、车牌等\n- 添加邮箱、银行卡、护照、IMEI、微信号、IP地址等常见敏感信息脱敏功能\n- 实现固定掩码和按原长填星两种脱敏策略,满足不同安全需求场景\n- 编写完整的单元测试覆盖各类脱敏方法的边界条件和异常情况\n- 更新README文档,补充util包中新增脱敏工具的使用说明和API文档",
          "is_bot": false,
          "headline": "feat(util): 添加数据脱敏工具类MaskUtils及单元测试",
          "author_name": "zhangjin",
          "author_login": "axeon",
          "committed_at": "2026-06-20T17:42:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6ae2869416f609490dcf9ad914b7adc39155cec1",
          "body": "- 移除自定义mask方法,改用MaskUtils.maskSecret进行令牌脱敏\n- 添加MaskUtils导入依赖\n- 保持令牌和刷新令牌的脱敏输出以防止日志泄露",
          "is_bot": false,
          "headline": "refactor(auth): 使用统一脱敏工具处理令牌信息",
          "author_name": "zhangjin",
          "author_login": "axeon",
          "committed_at": "2026-06-20T17:33:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "acc99a10859b394aceea87543ec49d9ae69e176b",
          "body": "- 使用 @AutoConfiguration 替代 @Configuration 并添加条件配置\n- 实现 Spring Cloud 模式开关,支持 @LoadBalanced 条件启用\n- 重构 RestClient 和 WebClient 的 Bean 配置结构\n- 优化 Token 服务并发模型,使用读写锁避免重复登录\n- 添加 Token 响应脱敏处理,保护敏感信息\n- 修复 WebClient 延迟获取 Token 的阻塞问题\n- 更新连接池默认配置参数\n- 改进错误日志输出和重试机制",
          "is_bot": false,
          "headline": "refactor(auth): 重构认证客户端配置和并发模型",
          "author_name": "zhangjin",
          "author_login": "axeon",
          "committed_at": "2026-06-20T16:41:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c1b495b9b156e8dea28697d40795268d36f56535",
          "body": "- 重构 Redis 连接池配置逻辑,仅在用户配置 lettuce.pool 时启用连接池\n- 优化数据库连接池配置,添加未配置时返回 null 的处理逻辑\n- 实现配置热更新功能,清空路由缓存使新配置立即生效\n- 抽取 HikariDataSource 构建逻辑为公共方法,统一连接超时和安全约束\n- 增强连接池异常处理,对未配置的连接池抛出明确异常而非返回 null\n- 完善数据库方言文档,详细说明各数据库分页语法差异和参数绑定规则\n- 添加 PostgreSQL 数据库方言支持,扩展数据库兼容性\n- 优化批处理操作,确保批量更新在事务中运行并验证连接状态\n- 修复查询方法中连接名称传递问题,保证读写分离路由正确\n- 改进 SQL 查询结果处理,增强数值类型转换的 null 值处理能力\n- 优化事务管理,仅在用户显式设置时应用事务隔离级别\n- 增强发号器可用性检查,支持 Redis 不可用时自动降级到数据库方案",
          "is_bot": false,
          "headline": "refactor(dao): 优化连接池配置和数据库方言处理",
          "author_name": "zhangjin",
          "author_login": "axeon",
          "committed_at": "2026-06-20T16:23:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9f2ce8bc34c0d84513f20234113f2a02bfe5e041",
          "body": "- 为 TaskApiClient 添加详细功能描述及参数说明\n- 为 TaskAutoConfiguration 重构应用就绪事件处理逻辑并增加安全关闭检查\n- 优化 TaskMetaInfoManager 中的配置键生成逻辑及队列匹配算法\n- 改进 TaskServiceRegistrar 中的队列监控性能及错误日志级别\n- 为各枚举类补充完整 JavaDoc 文档及使用说明",
          "is_bot": false,
          "headline": "docs(uw-task): 更新任务框架文档注释并优化代码健壮性",
          "author_name": "zhangjin",
          "author_login": "axeon",
          "committed_at": "2026-06-20T15:11:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "559463ac32ceee1f258455b75af0715674643168",
          "body": "- 使用 KryoUtils 替代自定义 Kryo 池实现消息序列化\n- 重构 TaskGlobalLocker 采用 Lua 脚本实现原子性 Leader 选举\n- 重写 TaskGlobalRateLimiter 采用固定窗口算法并优化 Redis 脚本\n- 优化 TaskSequenceManager 的 RedisSequence 号段模式实现\n- 统一异常处理策略,增强代码健壮性\n- 完善 Javadoc 文档和注释说明",
          "is_bot": false,
          "headline": "refactor(task): 优化消息转换和分布式组件实现",
          "author_name": "zhangjin",
          "author_login": "axeon",
          "committed_at": "2026-06-20T09:17:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c1b5804cf65ec2a9885dba5ae80f33084dfdcdca",
          "body": "- 将FusionCacheNotifyListener中的KryoCacheUtils替换为KryoUtils\n- 简化KryoCacheUtils类,移除重复的序列化实现并委托给KryoUtils\n- 在GlobalCache中将type2Class方法调用从KryoCacheUtils改为KryoUtils\n- 在GlobalHashSet和GlobalSortedSet中将序列化反序列化方法替换为KryoUtils\n- 移除KryoCacheUtils中的冗余Kryo池管理和类型转换逻辑\n- 更新RedisKeyUtils中的方法访问修饰符去除final关键字",
          "is_bot": false,
          "headline": "refactor(cache): 将Kryo序列化工具统一收敛到公共模块",
          "author_name": "zhangjin",
          "author_login": "axeon",
          "committed_at": "2026-06-20T09:16:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a9494dac4f3845bcea039735f9eee16470365ec4",
          "body": "- 新增KryoData接口支持手工序列化/反序列化\n- 重构KryoUtils使用JCTools无锁队列替代官方Pool提升并发性能\n- 添加多种序列化方式:整对象读写、自定义读写完整版/轻量版、接口式手工序列化\n- 预注册常用JDK集合/时间类与uw-common数据类提升序列化效率\n- 实现后台自动缩容机制维持池对象数量在合理范围\n- 提供详细的性能测试数据和选型指导文档\n- 优化异常处理策略统一抛出RuntimeException便于调用方处理",
          "is_bot": false,
          "headline": "feat(common): 添加KryoData接口及优化序列化工具类",
          "author_name": "zhangjin",
          "author_login": "axeon",
          "committed_at": "2026-06-20T09:16:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1dbf421478c8cc579bdbfecb4d530bf0cc842040",
          "body": "- 实现乐观锁机制,使用 INSERT IGNORE 和 UPDATE WHERE 确保并发安全\n- 引入号段缓存模型,支持整段申请和本地缓存,提升性能\n- 添加指数退避重试机制,优化失败重试策略\n- 实现 Redis Lua 脚本原子操作,确保分布式环境下的数据一致性\n- 支持 Dao 和 Fusion 两种序列生成模式的混合调用\n- 添加安全解锁机制,避免误删他人持有的分布式锁\n- 实现零丢号的段切换逻辑,保证序列号连续性\n- 增加段对齐功能,支持分库等需要 ID 对齐的场景\n- 添加全面的单元测试覆盖,确保重构后行为一致",
          "is_bot": false,
          "headline": "refactor(sequence): 重构序列工厂实现以支持高并发和段缓存",
          "author_name": "zhangjin",
          "author_login": "axeon",
          "committed_at": "2026-06-20T09:16:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c951ed219a2f2d19a469c4d480c8b4ead2b44313",
          "body": "- 修改包名为uw.common.util\n- 保持原有功能不变,仅调整目录结构",
          "is_bot": false,
          "headline": "refactor(common): 将KryoUtils类从kryo包移动到util包",
          "author_name": "zhangjin",
          "author_login": "axeon",
          "committed_at": "2026-06-18T10:56:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ade67bb28b7eeed2a642984c1183fb079326c178",
          "body": "- 将KryoCacheUtils中的序列化逻辑重构为独立的KryoUtils工具类\n- 从uw-cache模块迁移Kryo序列化功能至uw-common模块\n- 移除不必要的output.flush()和output.reset()调用优化性能\n- 添加Kryo依赖到common模块的pom.xml配置文件\n- 优化TaskMessageConverter中的资源管理和字符编码处理\n- 完善类型转换和反序列化过程中的异常处理机制",
          "is_bot": false,
          "headline": "refactor(cache): 重构Kryo序列化工具类并迁移至公共模块",
          "author_name": "zhangjin",
          "author_login": "axeon",
          "committed_at": "2026-06-18T09:51:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dd6183b0bcc2e2c07e1940f2529d8946fbdac47e",
          "body": "- 将ThreadLocal改为Pool实现以提升性能\n- 默认池子容量从16调整为32\n- 移除output本地线程缓存改为池化管理\n- 添加正确的资源释放机制确保池对象回收\n- 优化Input流处理使用try-with-resources语法\n- 统一池化对象的获取和释放流程",
          "is_bot": false,
          "headline": "refactor(task): 优化任务消息转换器的Kryo池实现",
          "author_name": "zhangjin",
          "author_login": "axeon",
          "committed_at": "2026-06-18T08:28:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5c447b191f910e684b1f222f174ea496b3c937a9",
          "body": "- 将所有 /liteList 接口路径统一更改为 /listLite\n- 更新前端 API 调用中的接口地址映射\n- 修改后端控制器中的请求映射注解\n- 保持接口功能和参数不变,仅调整 URL 规范\n- 确保前后端接口调用的一致性",
          "is_bot": false,
          "headline": "refactor(api): 统一轻量级列表接口命名规范",
          "author_name": "zhangjin",
          "author_login": "axeon",
          "committed_at": "2026-06-18T04:24:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d440ffdca4dc8d9d6c60cb1d9a83e311518a3f95",
          "body": "- 在mvn-deploy.sh中添加deploy失败时清理.flattened-pom.xml残留文件\n- 为uw-ai模块增加图片生成和模型配置查询功能说明\n- 更新AI模块核心特性和功能详解章节内容\n- 添加图片生成和模型配置查询的API使用示例\n- 更新核心类说明和最佳实践建议\n- 修正项目版本号从2026.0601.0002到2026.0601.0003\n- 升级uw-ai版本依赖至1.1.29和central-publishing-maven-plugin至0.11.0",
          "is_bot": false,
          "headline": "docs(uw-ai): 更新AI模块文档并完善部署脚本清理机制",
          "author_name": "zhangjin",
          "author_login": "axeon",
          "committed_at": "2026-06-18T04:23:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1e8ebe08da90662fdc96028ebaf2b2f3c38f1e4d",
          "body": "- 将AiModelInfoVo重命名为AiModelConfigVo并更新所有引用\n- 在AiModelConfigVo中添加vendorClass字段用于供应商分类\n- 更新AiConfigRpc接口及其实现类的方法返回类型\n- 修改AiClientHelper中的模型配置查询方法参数类型\n- 重新整理AiClientHelper中模型配置相关辅助方法\n- 为AiTranslateRpc接口添加类级别文档注释\n- 重命名AiImageResultData中的imageUrls字段为imageUrlList",
          "is_bot": false,
          "headline": "refactor(ai): 重构AI模型配置相关类和方法",
          "author_name": "zhangjin",
          "author_login": "axeon",
          "committed_at": "2026-06-18T03:44:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cc6d942345576fcce6d52909256792a3698125e7",
          "body": null,
          "is_bot": false,
          "headline": "fix:补充前面漏交的代码",
          "author_name": "tanlx",
          "author_login": "XSunin0922",
          "committed_at": "2026-06-17T08:07:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "04a320b084abd9f17616c9e8ba1902e4b6437d12",
          "body": "- 移除了 BrowserTab 类中关于直接操作 Page 对象的方法说明\n- 移除了 SessionService 中 setSession 方法的返回值文档\n- 移除了 WebotManager 中 updateSession 方法的返回值文档",
          "is_bot": false,
          "headline": "docs(api): 移除方法文档中的冗余返回值描述",
          "author_name": "zhangjin",
          "author_login": "axeon",
          "committed_at": "2026-06-17T00:56:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8978d29325d7ecb79f133b12ca81a5d6b27c160c",
          "body": "- 更新 uw-auth-client 从 6.2.21 到 6.2.22\n- 更新 uw-auth-service 从 6.2.59 到 6.2.60\n- 更新 uw-cache 从 1.2.96 到 1.2.97\n- 更新 uw-common 从 1.1.101 到 1.1.102\n- 更新 uw-common-app 从 1.1.103 到 1.1.105\n- 更新 uw-dao 从 5.3.35 到 5.3.36\n- 更新 uw-gateway-client 从 1.1.6 到 1.1.7\n- 更新 uw-httpclient 从 2.2.132 到 2.2.133\n- 更新 uw-l\n[…]\n 1.1.27 到 1.1.28\n- 更新 uw-notify-client 从 1.1.26 到 1.1.27\n- 更新 uw-oauth2-client 从 1.1.16 到 1.1.17\n- 更新 uw-task 从 5.1.125 到 5.1.126\n- 更新 uw-tinyurl-client 从 1.1.26 到 1.1.27\n- 更新 uw-webot 从 1.0.6 到 1.0.7",
          "is_bot": false,
          "headline": "chore(deps): 更新项目依赖版本",
          "author_name": "zhangjin",
          "author_login": "axeon",
          "committed_at": "2026-06-17T00:53:24Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "adb56bdf3e025642c398622f2c0cee687a999367",
          "body": null,
          "is_bot": false,
          "headline": "补齐configCode参数",
          "author_name": "tanlx",
          "author_login": "XSunin0922",
          "committed_at": "2026-06-16T11:03:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "706cfe4cb8764e7a82d32017d6cf9f2557406e7e",
          "body": null,
          "is_bot": false,
          "headline": "新增查询维度configCode",
          "author_name": "tanlx",
          "author_login": "XSunin0922",
          "committed_at": "2026-06-16T09:13:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "589e1466b866b40aadf845bfd52aaef9df46b1bd",
          "body": null,
          "is_bot": false,
          "headline": "细分模型配置查询维度",
          "author_name": "tanlx",
          "author_login": "XSunin0922",
          "committed_at": "2026-06-16T07:51:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c099328775dfb3d78ee31f2f27980ad8635dfd5e",
          "body": "- 将AiApiConfigVo重命名为AiModelApiVo并更新字段定义\n- 将AiModelConfigVo重命名为AiModelInfoVo并调整字段结构\n- 更新AiConfigRpc接口及其实现类的返回类型\n- 修改AiClientHelper中的方法签名以使用新的VO类\n- 在VO类中添加saasId、mchId等新字段和对应的getter/setter方法\n- 更新pom.xml中的版本号信息",
          "is_bot": false,
          "headline": "refactor(ai): 重构AI配置相关数据传输对象",
          "author_name": "zhangjin",
          "author_login": "axeon",
          "committed_at": "2026-06-16T02:33:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9247ca241f97e4019c852e2ded2709558f3236e6",
          "body": null,
          "is_bot": false,
          "headline": "LocalDate退回date类型",
          "author_name": "tanlx",
          "author_login": "XSunin0922",
          "committed_at": "2026-06-16T01:50:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "eba545435e38449bd8bef451042c87de13a50460",
          "body": null,
          "is_bot": false,
          "headline": "优化代码规范",
          "author_name": "tanlx",
          "author_login": "XSunin0922",
          "committed_at": "2026-06-16T01:42:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "389bc870c1445a6bba1f49fe38ff379a90c740d2",
          "body": null,
          "is_bot": false,
          "headline": "Merge remote-tracking branch 'origin/main'",
          "author_name": "tanlx",
          "author_login": "XSunin0922",
          "committed_at": "2026-06-15T06:31:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f464288d2b26c2a055b4403790ef0860eb1d0245",
          "body": null,
          "is_bot": false,
          "headline": "新增图片生成RPC接口",
          "author_name": "tanlx",
          "author_login": "XSunin0922",
          "committed_at": "2026-06-15T06:30:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5e4f634701178aa17beea194aac724ab48804411",
          "body": "- 将所有 PageTable 类型引用更改为 PageRowSet\n- 更新 DaoFactoryImpl 中的 Javadoc 注释\n- 更新 SQLCommandImpl 中的类描述\n- 更新 DaoFactory 接口的返回类型说明\n- 更新 DaoManager 的方法注释\n- 更新 CHANGELOG.md 中的类型变更记录",
          "is_bot": false,
          "headline": "docs(dao): 更新文档注释中的返回类型名称",
          "author_name": "zhangjin",
          "author_login": "axeon",
          "committed_at": "2026-06-12T09:35:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "281d3c36625e541c390c31acdc3a0c7f3cc4374f",
          "body": null,
          "is_bot": false,
          "headline": "清理临时修改的代码",
          "author_name": "tanlx",
          "author_login": "XSunin0922",
          "committed_at": "2026-06-12T03:54:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5a98e96b8c65242395d0a242e83631c78bf02c70",
          "body": null,
          "is_bot": false,
          "headline": "Merge remote-tracking branch 'origin/main'",
          "author_name": "tanlx",
          "author_login": "XSunin0922",
          "committed_at": "2026-06-12T03:50:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3c669fd63e71b74cac49dce5d0a6eaf0eacdb130",
          "body": "- 将 StringUtils 替换为 Strings.CS 和 Strings.CI 以提高性能\n- 使用 RandomStringUtils.secure() 替代 randomNumeric 提升随机数安全性\n- 更新 SnowflakeIdGenerator 中的 threadId 获取方式\n- 升级项目版本号从 2026.0601.0000 到 2026.0601.0001\n- 更新依赖版本号 uw-common.version 从 1.1.100 到 1.1.101\n- 修改 CHANGELOG 版本说明从 2026.0501.0001 到 2026.0601.0001",
          "is_bot": false,
          "headline": "refactor(common): 优化字符串处理和随机数生成安全性",
          "author_name": "zhangjin",
          "author_login": "axeon",
          "committed_at": "2026-06-12T03:40:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "95559ef678853309a9124cd1ddffa1f8276199fc",
          "body": "- 修改恢复简化日期字符串方法注释,明确说明加上横杠的功能\n- 移除计算时间差方法中的冗余变量声明,直接返回计算结果\n- 重命名getDatesBetween方法为getDateList,并修改返回类型为Date列表\n- 新增getDateStringList方法,支持获取日期范围内的字符串列表\n- 删除日历设置中的冗余年份和月份赋值操作\n- 修正endOfLastYear方法注释,从\"去年开年第一天时间\"改为\"去年最后一天结束时间\"\n- 修正endOfNextYear方法注释,从\"去年开年第一天时间\"改为\"明年最后一天结束时间\"\n- 修正endOfMonth方法注释,从\"当月第一天时间\"改为\"当月最后一天结束时间\"\n- 修正endOfLastMonth方法注释,从\"上月第一天时间\"改为\"上月最后一天结束时间\"\n- 修正endOfNextMonth方法注释,从\"下月第一天时间\"改为\"下月最后一天结束时间\"\n- 更新日期解析逻辑中的注释,添加Unix时间戳相关说明",
          "is_bot": false,
          "headline": "refactor(utils): 优化日期工具类代码结构",
          "author_name": "zhangjin",
          "author_login": "axeon",
          "committed_at": "2026-06-12T03:28:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1e2cde3a58044d974e8ec0832345647bed778264",
          "body": "- 新增 ChineseUtils 工具类,提供汉字转拼音、相似度计算、全角半角转换功能\n- 新增 CurrencyUtils 货币工具类,提供货币实例获取和验证功能\n- 扩展 MoneyUtils 添加中文大写金额转换功能\n- 引入 jpinyin 依赖库支持拼音转换\n- 更新项目版本号及依赖库版本至最新稳定版",
          "is_bot": false,
          "headline": "feat(common): 添加汉字拼音转换和货币工具类",
          "author_name": "zhangjin",
          "author_login": "axeon",
          "committed_at": "2026-06-12T03:01:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ce354bf5da71fbc6f0484802ffb7d1e9db3e0e2b",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'main' of http://192.168.88.21:61880/uw/uw-base",
          "author_name": "tanlx",
          "author_login": "XSunin0922",
          "committed_at": "2026-06-12T01:42:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "191dd91c9ca3cb27cfe5731dfa686b49fefaf53d",
          "body": null,
          "is_bot": false,
          "headline": "临时提交",
          "author_name": "tanlx",
          "author_login": "XSunin0922",
          "committed_at": "2026-06-12T01:42:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9bf7ac9b182199f5ff319cdc948d750735af598d",
          "body": null,
          "is_bot": false,
          "headline": "chore(deps): 更新项目依赖版本从 2026.0501.0006 升级到 2026.0501.0008",
          "author_name": "zhangjin",
          "author_login": "axeon",
          "committed_at": "2026-06-11T11:24:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bcc0b6d487522898b9a4c96c99c0c71d3ec71ba0",
          "body": "- 添加索引边界检查防止数组越界异常\n- 更新uw-common版本从1.1.98到1.1.99\n- 更新uw-dao版本从5.3.32到5.3.33\n- 更新基础项目版本号从2026.0501.0006到2026.0501.0008",
          "is_bot": false,
          "headline": "fix(common): 修复PageList索引越界问题并更新版本依赖",
          "author_name": "zhangjin",
          "author_login": "axeon",
          "committed_at": "2026-06-11T11:22:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5d1eca90fb4e107e3bb3d870134383ea4c19def7",
          "body": "- 将PageList构造函数中的ArrayList参数改为List接口类型,增强灵活性\n- 为PageList添加toArrayList私有方法,统一列表类型转换逻辑\n- 将PageRowSet构造函数中的ArrayList参数改为List接口类型,增强灵活性\n- 为PageRowSet添加toArrayList私有方法,统一列表类型转换逻辑\n- 更新PageList和PageRowSet中reset方法的类型转换实现\n- 升级版本号从2026.0501.0005到2026.0501.0006\n- 更新uw-common依赖版本从1.1.97到1.1.98",
          "is_bot": false,
          "headline": "refactor(common): 优化PageList和PageRowSet的数据类型处理",
          "author_name": "zhangjin",
          "author_login": "axeon",
          "committed_at": "2026-06-11T10:51:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1186a265d2c9409d40711fd2592413b8a2a8251a",
          "body": null,
          "is_bot": false,
          "headline": "Merge remote-tracking branch 'origin/main'",
          "author_name": "zhangjin",
          "author_login": "axeon",
          "committed_at": "2026-06-11T10:38:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e11792ee62145384fc1b0daaaf3eaa096265f165",
          "body": "- 修改 PageList 构造函数参数类型为 ArrayList 并移除 toArrayList 方法\n- 为 PageList 的所有方法添加 @JsonIgnore 注解以避免序列化问题\n- 重命名 PageRowSet 的 columns 字段为 columnNames 并更新相关方法\n- 将 PageRowSet 构造函数参数类型改为 ArrayList 并移除 toArrayList 方法\n- 为 PageRowSet 的所有业务方法添加 @JsonIgnore 注解\n- 新增 QueryParamHelper 工具类用于将对象属性转换为 URI 查询参数\n- 在 QueryParamHelper 中实现魔法参数自动映射和参数过滤功能\n- 更新项目版本号从 2026.0501.0003 到 2026.0501.0005\n- 更新依赖模块版本号及 README 中的版本引用",
          "is_bot": false,
          "headline": "refactor(common): 优化分页组件并新增查询参数构建工具",
          "author_name": "zhangjin",
          "author_login": "axeon",
          "committed_at": "2026-06-11T10:37:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f6bd6d5ba816e62fdf54baae7c04b307e30cea01",
          "body": null,
          "is_bot": false,
          "headline": "新增AI模型配置RPC调用方法",
          "author_name": "tanlx",
          "author_login": "XSunin0922",
          "committed_at": "2026-06-11T08:44:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1dcd2b092cf3cf23b2fa4fe19cc894e71fdff337",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'main' of http://192.168.88.21:61880/uw/uw-base",
          "author_name": "tanlx",
          "author_login": "XSunin0922",
          "committed_at": "2026-06-11T08:23:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7e77b238030aa67311174bad3f12806baabedc71",
          "body": "- 将DataSet类替换为PageRowSet类\n- 将queryForSingleObject方法替换为queryForObject方法\n- 将queryForSingleValue方法替换为queryForValue方法\n- 更新相关的方法引用和文档描述\n- 修正README.md中的目录链接和方法名称",
          "is_bot": false,
          "headline": "docs(uw-dao): 更新文档中的类名和方法名",
          "author_name": "zhangjin",
          "author_login": "axeon",
          "committed_at": "2026-06-11T03:09:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f6564134a3595fa667b9e313ac6f06de2ff6ec7b",
          "body": "- 更新FAQ文档中关于列表返回类型的描述\n- 修改README文档中的代码示例,将DataList替换为PageList\n- 更新CHANGELOG中相关功能说明\n- 统一uw-dao模块中所有分页查询的返回类型\n- 修改uw-auth-service中的用户列表接口返回类型\n- 更新uw-oauth2-client中OAuth信息查询的返回类型\n- 替换uw-log-es模块中分页结果的包装类型",
          "is_bot": false,
          "headline": "refactor(dao): 将DataList替换为PageList作为分页结果返回类型",
          "author_name": "zhangjin",
          "author_login": "axeon",
          "committed_at": "2026-06-11T02:06:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5cc95487f02aca10f1b7a5248a58894534ed26d2",
          "body": "- 将Java版本从21升级到25\n- 添加maven.compiler.release配置项\n- 升级flatten-maven-plugin从1.2.7到1.7.0版本",
          "is_bot": false,
          "headline": "chore(build): 更新Java版本至25并升级Maven插件",
          "author_name": "zhangjin",
          "author_login": "axeon",
          "committed_at": "2026-06-10T07:09:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ca1d0cbecc50935885f168ccfd1205459c5e36fb",
          "body": "# Conflicts:\n#\tuw-ai/src/main/java/uw/ai/AiClientHelper.java\n#\tuw-ai/src/main/java/uw/ai/rpc/AiConfigRpc.java\n#\tuw-ai/src/main/java/uw/ai/rpc/impl/AiConfigRpcImpl.java\n#\tuw-ai/src/main/java/uw/ai/vo/AiModelConfigVo.java",
          "is_bot": false,
          "headline": "Merge branch 'main' of http://192.168.88.21:61880/uw/uw-base",
          "author_name": "tanlx",
          "author_login": "XSunin0922",
          "committed_at": "2026-06-10T06:37:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3a70065339a66f3b0337f56ca2e0659121c37361",
          "body": null,
          "is_bot": false,
          "headline": "AiConfigRpc实现类",
          "author_name": "tanlx",
          "author_login": "XSunin0922",
          "committed_at": "2026-06-10T06:23:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "adcfead33afa4154d84d722a6ff49839acc9cbb4",
          "body": "feat(script): 增强mvn-deploy.sh脚本功能\n\n- 添加命令行参数解析支持(-a, --skip-parent, -h)\n- 实现全量发布和指定模块发布的选项\n- 支持跳过parent模块发布的功能\n- 添加参数冲突检测和错误处理\n- 优化命令构建逻辑和执行流程\n- 移除调试输出并精简脚本结构\n```",
          "is_bot": false,
          "headline": "```",
          "author_name": "zhangjin",
          "author_login": "axeon",
          "committed_at": "2026-06-10T04:39:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "814e9d499ba0b3c21aeae1da241aa78ac558901d",
          "body": "- 修改mvn-deploy.sh脚本,将跳过测试参数从-DskipTests改为-Dmaven.test.skip=true\n- 重构AuthClientAutoConfiguration类,优化RestClient配置方式,移除ConditionalOnProperty条件判断\n- 完善AuthClientAutoConfiguration类文档注释,明确两类HTTP客户端职责分工\n- 修改AuthClientTokenService类,简化登录URL构建方式,移除不必要的URI创建\n- 重构CommonAppAutoConfiguration中的LoadBalancerCacheMana\n[…]\n本\n- 重构MscAclHelper类,使用RestClient替代RestTemplate进行HTTP调用\n- 统一项目内ResponseData导入路径,使用uw.common.response.ResponseData\n- 替换网关中心ACME模块中的DAO方法调用,使用新方法名保持一致性\n- 更新访问日志控制器中的分页数据类型,使用PageList替代DataList和ESDataList",
          "is_bot": false,
          "headline": "refactor(auth): 重构认证客户端配置与网关中心代码结构",
          "author_name": "zhangjin",
          "author_login": "axeon",
          "committed_at": "2026-06-10T03:37:04Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "fc308fb35d7056435821afd93dc9f4c5376219de",
          "body": "- 将类型转换逻辑重构为resolveConcreteClass方法\n- 为泛型集合类型提供具体的实现类映射\n- 使用instanceof模式匹配简化类型判断\n- 统一参数化类型和原始类型的处理方式\n\nfeat(common): 更新PageList和PageRowSet的数据结构实现\n\n- 将内部list字段从Collections.emptyList()改为ArrayList\n- 添加toArrayList辅助方法确保类型一致性\n- 重构构造函数中的列表初始化逻辑\n- 修正空值检查顺序以提高代码可读性\n- 更新EMPTY实例的初始化方式\n\nchore(base): 升级项目版本号及相关依赖\n\n- 更新revision从2026.0501.0001到2026.0501.0002\n- 升级uw-cache版本至1.2.95\n- 升级uw-common版本至1.1.96",
          "is_bot": false,
          "headline": "refactor(cache): 优化Kryo缓存工具类的类型解析逻辑",
          "author_name": "zhangjin",
          "author_login": "axeon",
          "committed_at": "2026-06-09T16:58:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3d3bb8ce6b0591e1fe0d1aa8f9e13b23d37c1c39",
          "body": "- 将 mapQueryResponseToDataList 方法重命名为 mapQueryResponseToPageList\n- 更新 CHANGELOG 版本号从 2026.0501.0000 到 2026.0501.0001\n- 更新 pom.xml 中 uw-log-es 模块版本到 3.1.96\n- 在 pom.xml 中添加 uw-oauth2-client 依赖项\n- 更新 README.md 中父模块版本引用",
          "is_bot": false,
          "headline": "fix(log): 修复日志客户端查询响应映射方法命名错误",
          "author_name": "zhangjin",
          "author_login": "axeon",
          "committed_at": "2026-06-09T16:24:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fbc41c141e04b564878b712762868748ec9929cd",
          "body": "- 在 pom.xml 中添加 uw-oauth2-client.version 依赖版本\n- 更新 central-publishing-maven-plugin 插件版本至 0.7.0\n- 更新 maven-javadoc-plugin 插件版本至 3.11.2\n- 更新 maven-gpg-plugin 插件版本至 3.2.7\n- 修复 LoggingHttpServletRequestWrapper 构造函数缓存大小配置",
          "is_bot": false,
          "headline": "chore(deps): 更新依赖版本并修复请求包装器配置",
          "author_name": "zhangjin",
          "author_login": "axeon",
          "committed_at": "2026-06-09T14:53:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5ec96baa2be9f612e3eb3e14851cf43a0804577c",
          "body": "- 将 uw-ai.version 从 1.0.26 升级到 1.1.26\n- 将 uw-auth-client.version 从 6.1.19 升级到 6.2.19\n- 将 uw-auth-service.version 从 6.1.58 升级到 6.2.58\n- 将 uw-cache.version 从 1.1.93 升级到 1.2.93\n- 将 uw-common.version 从 1.0.93 升级到 1.1.95\n- 将 uw-common-app.version 从 1.0.100 升级到 1.1.100\n- 将 uw-dao.version 从 5.2.31 升级到 5.3.\n[…]\n 从 1.0.26 升级到 1.1.26\n- 将 uw-notify-client.version 从 1.0.25 升级到 1.1.25\n- 将 uw-task.version 从 5.0.123 升级到 5.1.123\n- 将 uw-tinyurl-client.version 从 1.0.25 升级到 1.1.25\n- 将 uw-webot.version 从 1.0.3 升级到 1.0.5",
          "is_bot": false,
          "headline": "chore(deps): 更新项目依赖版本",
          "author_name": "zhangjin",
          "author_login": "axeon",
          "committed_at": "2026-06-09T14:35:05Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "bb4d33c7d6198df9149c977deb367a32bfdb2e3d",
          "body": "- 将uw.common.dto.ResponseCode和ResponseData的导入路径更新到uw.common.response包\n- 将uw.dao.QueryParam等类的导入路径更新到uw.common.dto和uw.common.data包\n- 将所有RestTemplate实例替换为RestClient以使用更现代的HTTP客户端API\n- 重构AI服务中的RPC实现类,统一使用RestClient进行HTTP请求处理\n- 删除过时的DataList、DataSet等类及相应的QueryParam、PageQueryParam类\n- 更新API调用方式,使用RestClient的链式调用风格替代exchange方法\n- 添加批量迁移脚本migrate-202605.py用于自动化重构Java代码中的导入和类名替换",
          "is_bot": false,
          "headline": "refactor(ai): 将RestTemplate替换为RestClient并更新API导入路径",
          "author_name": "zhangjin",
          "author_login": "axeon",
          "committed_at": "2026-06-09T14:30:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6168089485177df2a5235da2b3e739e1cb11f179",
          "body": "- 将uw.common.dto.ResponseCode和ResponseData的导入路径更新到uw.common.response包\n- 将uw.dao.QueryParam等类的导入路径更新到uw.common.dto和uw.common.data包\n- 将所有RestTemplate实例替换为RestClient以使用更现代的HTTP客户端API\n- 重构AI服务中的RPC实现类,统一使用RestClient进行HTTP请求处理\n- 删除过时的DataList、DataSet等类及相应的QueryParam、PageQueryParam类\n- 更新API调用方式,使用RestClient的链式调用风格替代exchange方法\n- 添加批量迁移脚本migrate-202605.py用于自动化重构Java代码中的导入和类名替换",
          "is_bot": false,
          "headline": "refactor(ai): 将RestTemplate替换为RestClient并更新API导入路径",
          "author_name": "zhangjin",
          "author_login": "axeon",
          "committed_at": "2026-06-09T14:29:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 0,
      "commits_last_year": 157,
      "latest_release_at": null,
      "latest_release_tag": null,
      "releases_from_tags": false,
      "days_since_last_push": 14,
      "active_weeks_last_year": 16,
      "days_since_latest_release": null,
      "mean_days_between_releases": null
    },
    "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": "com.umtone:uw-ai",
          "exists": true,
          "license": "The Apache Software License, Version 2.0",
          "keywords": [],
          "ecosystem": "maven",
          "matches_repo": null,
          "registry_url": "https://central.sonatype.com/artifact/com.umtone/uw-ai",
          "is_deprecated": false,
          "latest_version": "1.1.36",
          "repository_url": null,
          "versions_count": 32,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-07-14T11:15:23Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 9
        },
        {
          "name": "com.umtone:uw-dao",
          "exists": true,
          "license": "The Apache Software License, Version 2.0",
          "keywords": [],
          "ecosystem": "maven",
          "matches_repo": null,
          "registry_url": "https://central.sonatype.com/artifact/com.umtone/uw-dao",
          "is_deprecated": false,
          "latest_version": "5.3.52",
          "repository_url": null,
          "versions_count": 40,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-07-14T11:15:27Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 9
        },
        {
          "name": "com.umtone:uw-mfa",
          "exists": true,
          "license": "The Apache Software License, Version 2.0",
          "keywords": [],
          "ecosystem": "maven",
          "matches_repo": null,
          "registry_url": "https://central.sonatype.com/artifact/com.umtone/uw-mfa",
          "is_deprecated": false,
          "latest_version": "1.1.71",
          "repository_url": null,
          "versions_count": 31,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-07-14T11:15:34Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 9
        },
        {
          "name": "com.umtone:uw-task",
          "exists": true,
          "license": "The Apache Software License, Version 2.0",
          "keywords": [],
          "ecosystem": "maven",
          "matches_repo": null,
          "registry_url": "https://central.sonatype.com/artifact/com.umtone/uw-task",
          "is_deprecated": false,
          "latest_version": "5.1.135",
          "repository_url": null,
          "versions_count": 38,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-07-14T11:15:36Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 9
        },
        {
          "name": "com.umtone:uw-cache",
          "exists": true,
          "license": "The Apache Software License, Version 2.0",
          "keywords": [],
          "ecosystem": "maven",
          "matches_repo": null,
          "registry_url": "https://central.sonatype.com/artifact/com.umtone/uw-cache",
          "is_deprecated": false,
          "latest_version": "1.2.103",
          "repository_url": null,
          "versions_count": 25,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-07-14T11:15:24Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 9
        },
        {
          "name": "com.umtone:uw-webot",
          "exists": true,
          "license": "The Apache Software License, Version 2.0",
          "keywords": [],
          "ecosystem": "maven",
          "matches_repo": null,
          "registry_url": "https://central.sonatype.com/artifact/com.umtone/uw-webot",
          "is_deprecated": false,
          "latest_version": "1.0.15",
          "repository_url": null,
          "versions_count": 13,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-07-14T11:15:39Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 9
        },
        {
          "name": "com.umtone:uw-common",
          "exists": true,
          "license": "The Apache Software License, Version 2.0",
          "keywords": [],
          "ecosystem": "maven",
          "matches_repo": null,
          "registry_url": "https://central.sonatype.com/artifact/com.umtone/uw-common",
          "is_deprecated": false,
          "latest_version": "1.1.112",
          "repository_url": null,
          "versions_count": 50,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-07-14T11:15:33Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 9
        },
        {
          "name": "com.umtone:uw-log-es",
          "exists": true,
          "license": "The Apache Software License, Version 2.0",
          "keywords": [],
          "ecosystem": "maven",
          "matches_repo": null,
          "registry_url": "https://central.sonatype.com/artifact/com.umtone/uw-log-es",
          "is_deprecated": false,
          "latest_version": "3.1.106",
          "repository_url": null,
          "versions_count": 26,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-07-14T11:15:36Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 9
        }
      ]
    },
    "popularity": {
      "forks": 0,
      "stars": 3,
      "watchers": 1,
      "fork_history": {
        "days": [],
        "complete": true,
        "collected": 0,
        "total_forks": 0
      },
      "star_history": null,
      "open_issues_and_prs": 0
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [
        "example"
      ],
      "has_llms_txt": false,
      "has_dockerfile": true,
      "has_mcp_signal": false,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [
        "pom.xml",
        "uw-ai/pom.xml",
        "uw-auth-client/pom.xml",
        "uw-auth-service/pom.xml",
        "uw-cache/pom.xml",
        "uw-common-app/pom.xml",
        "uw-common/pom.xml",
        "uw-dao/pom.xml",
        "uw-gateway-client/pom.xml",
        "uw-httpclient/pom.xml",
        "uw-log-es/pom.xml",
        "uw-logback-es/pom.xml",
        "uw-mfa/pom.xml",
        "uw-mydb-client/pom.xml",
        "uw-notify-client/pom.xml",
        "uw-oauth2-client/pom.xml",
        "uw-task/pom.xml",
        "uw-tinyurl-client/pom.xml",
        "uw-webot/pom.xml"
      ],
      "largest_source_bytes": 96434,
      "source_files_sampled": 486,
      "oversized_source_files": 3,
      "agent_instruction_files": [],
      "agent_instruction_max_bytes": null
    },
    "dependencies": {
      "manifests": [
        "pom.xml",
        "uw-ai/pom.xml",
        "uw-auth-client/pom.xml",
        "uw-auth-service/pom.xml",
        "uw-cache/pom.xml",
        "uw-common-app/pom.xml",
        "uw-common/pom.xml",
        "uw-dao/pom.xml",
        "uw-gateway-client/pom.xml",
        "uw-httpclient/pom.xml",
        "uw-log-es/pom.xml",
        "uw-logback-es/pom.xml",
        "uw-mfa/pom.xml",
        "uw-mydb-client/pom.xml",
        "uw-notify-client/pom.xml",
        "uw-oauth2-client/pom.xml",
        "uw-task/pom.xml",
        "uw-tinyurl-client/pom.xml",
        "uw-webot/pom.xml"
      ],
      "advisories": {
        "error": null,
        "scope": "published_package",
        "source": "osv",
        "findings": [
          {
            "name": "io.netty:netty-codec-compression",
            "direct": false,
            "version": "4.2.15.Final",
            "severity": "high",
            "ecosystem": "maven",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-558v-64gr-wgg4"
            ],
            "fixed_version": "4.2.16.Final",
            "advisory_count": 1,
            "oldest_advisory_days": 1
          },
          {
            "name": "io.netty:netty-codec-http",
            "direct": false,
            "version": "4.2.15.Final",
            "severity": "high",
            "ecosystem": "maven",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-4mp9-239f-g9hg",
              "GHSA-6cqp-g7gg-8hr5",
              "GHSA-6jqx-86gh-f27w",
              "GHSA-gcjf-9mgh-3p7g",
              "GHSA-jppx-w49h-x2qq",
              "GHSA-mvh2-crg5-v77c",
              "GHSA-q4f6-jm68-57ww"
            ],
            "fixed_version": "4.2.16.Final",
            "advisory_count": 7,
            "oldest_advisory_days": 1
          },
          {
            "name": "io.netty:netty-codec-http3",
            "direct": false,
            "version": "4.2.15.Final",
            "severity": "high",
            "ecosystem": "maven",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-hpcc-26xq-25fv"
            ],
            "fixed_version": "4.2.16.Final",
            "advisory_count": 1,
            "oldest_advisory_days": 1
          },
          {
            "name": "tools.jackson.core:jackson-databind",
            "direct": false,
            "version": "3.1.4",
            "severity": "moderate",
            "ecosystem": "maven",
            "cvss_score": 6.5,
            "advisory_ids": [
              "GHSA-5gvw-p9qm-jgwh"
            ],
            "fixed_version": "3.2.1",
            "advisory_count": 1,
            "oldest_advisory_days": 2
          },
          {
            "name": "io.netty:netty-codec-http2",
            "direct": false,
            "version": "4.2.15.Final",
            "severity": "low",
            "ecosystem": "maven",
            "cvss_score": 0,
            "advisory_ids": [
              "GHSA-c69g-56f8-xwqj"
            ],
            "fixed_version": "4.2.16.Final",
            "advisory_count": 1,
            "oldest_advisory_days": 1
          }
        ],
        "collected": true,
        "malicious": [],
        "truncated": false,
        "by_severity": {
          "low": 1,
          "high": 3,
          "moderate": 1
        },
        "advisory_count": 11,
        "affected_count": 5,
        "assessed_count": 110,
        "malicious_count": 0,
        "assessed_package": "maven:com.umtone:uw-ai@1.1.36",
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "maven"
      ],
      "dependencies": [
        {
          "name": "org.springframework.cloud:spring-cloud-dependencies",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${spring-cloud.version}"
        },
        {
          "name": "com.alibaba.cloud:spring-cloud-alibaba-dependencies",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${spring-cloud.alibaba.version}"
        },
        {
          "name": "com.umtone:uw-ai",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${uw-ai.version}"
        },
        {
          "name": "com.umtone:uw-auth-client",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${uw-auth-client.version}"
        },
        {
          "name": "com.umtone:uw-auth-service",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${uw-auth-service.version}"
        },
        {
          "name": "com.umtone:uw-cache",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${uw-cache.version}"
        },
        {
          "name": "com.umtone:uw-common",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${uw-common.version}"
        },
        {
          "name": "com.umtone:uw-common-app",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${uw-common-app.version}"
        },
        {
          "name": "com.umtone:uw-dao",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${uw-dao.version}"
        },
        {
          "name": "com.umtone:uw-gateway-client",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${uw-gateway-client.version}"
        },
        {
          "name": "com.umtone:uw-httpclient",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${uw-httpclient.version}"
        },
        {
          "name": "com.umtone:uw-log-es",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${uw-log-es.version}"
        },
        {
          "name": "com.umtone:uw-logback-es",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${uw-logback-es.version}"
        },
        {
          "name": "com.umtone:uw-mfa",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${uw-mfa.version}"
        },
        {
          "name": "com.umtone:uw-mydb-client",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${uw-mydb-client.version}"
        },
        {
          "name": "com.umtone:uw-notify-client",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${uw-notify-client.version}"
        },
        {
          "name": "com.umtone:uw-oauth2-client",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${uw-oauth2-client.version}"
        },
        {
          "name": "com.umtone:uw-task",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${uw-task.version}"
        },
        {
          "name": "com.umtone:uw-tinyurl-client",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${uw-tinyurl-client.version}"
        },
        {
          "name": "com.umtone:uw-webot",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${uw-webot.version}"
        },
        {
          "name": "org.openjdk.jmh:jmh-core",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "1.37"
        },
        {
          "name": "org.openjdk.jmh:jmh-generator-annprocess",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "1.37"
        },
        {
          "name": "org.springdoc:springdoc-openapi-starter-webmvc-ui",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "2.8.16"
        },
        {
          "name": "io.swagger.core.v3:swagger-annotations",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "2.2.50"
        },
        {
          "name": "org.apache.commons:commons-lang3",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "3.20.0"
        },
        {
          "name": "com.google.guava:guava",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "33.6.0-jre"
        },
        {
          "name": "org.reflections:reflections",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "0.10.2"
        },
        {
          "name": "com.esotericsoftware:kryo",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "5.6.2"
        },
        {
          "name": "com.github.victools:jsonschema-generator",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "4.38.0"
        },
        {
          "name": "com.github.victools:jsonschema-module-jackson",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "4.38.0"
        },
        {
          "name": "com.github.victools:jsonschema-module-swagger-2",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "4.38.0"
        },
        {
          "name": "com.umtone:uw-auth-service",
          "manifest": "uw-ai/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "com.umtone:uw-common",
          "manifest": "uw-ai/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "io.swagger.core.v3:swagger-annotations",
          "manifest": "uw-ai/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "org.reflections:reflections",
          "manifest": "uw-ai/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "com.github.victools:jsonschema-generator",
          "manifest": "uw-ai/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "com.github.victools:jsonschema-module-jackson",
          "manifest": "uw-ai/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "com.github.victools:jsonschema-module-swagger-2",
          "manifest": "uw-ai/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "org.springframework.boot:spring-boot-starter",
          "manifest": "uw-auth-client/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "org.springframework.boot:spring-boot-starter-web",
          "manifest": "uw-auth-client/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "org.springframework.boot:spring-boot-starter-webflux",
          "manifest": "uw-auth-client/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "com.umtone:uw-common",
          "manifest": "uw-auth-client/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "org.springframework.cloud:spring-cloud-commons",
          "manifest": "uw-auth-client/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "org.apache.httpcomponents.client5:httpclient5",
          "manifest": "uw-auth-client/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "io.swagger.core.v3:swagger-annotations",
          "manifest": "uw-auth-client/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "org.springframework.boot:spring-boot-starter",
          "manifest": "uw-auth-service/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "org.springframework.boot:spring-boot-starter-web",
          "manifest": "uw-auth-service/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "com.umtone:uw-common",
          "manifest": "uw-auth-service/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "com.umtone:uw-auth-client",
          "manifest": "uw-auth-service/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "com.umtone:uw-log-es",
          "manifest": "uw-auth-service/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "com.github.ben-manes.caffeine:caffeine",
          "manifest": "uw-auth-service/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "io.swagger.core.v3:swagger-annotations",
          "manifest": "uw-auth-service/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "org.springframework.boot:spring-boot-starter-data-redis",
          "manifest": "uw-cache/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "com.github.ben-manes.caffeine:caffeine",
          "manifest": "uw-cache/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "com.esotericsoftware:kryo",
          "manifest": "uw-cache/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "org.apache.commons:commons-pool2",
          "manifest": "uw-cache/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "com.umtone:uw-common",
          "manifest": "uw-cache/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "com.umtone:uw-dao",
          "manifest": "uw-common-app/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "com.umtone:uw-auth-service",
          "manifest": "uw-common-app/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "org.springframework.cloud:spring-cloud-loadbalancer",
          "manifest": "uw-common-app/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "org.springdoc:springdoc-openapi-starter-webmvc-ui",
          "manifest": "uw-common-app/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-discovery",
          "manifest": "uw-common-app/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "io.swagger.core.v3:swagger-annotations",
          "manifest": "uw-common/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "com.fasterxml.jackson.core:jackson-annotations",
          "manifest": "uw-common/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "com.fasterxml.jackson.core:jackson-databind",
          "manifest": "uw-common/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "com.fasterxml.jackson.datatype:jackson-datatype-jdk8",
          "manifest": "uw-common/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "com.fasterxml.jackson.datatype:jackson-datatype-jsr310",
          "manifest": "uw-common/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "com.fasterxml.jackson.module:jackson-module-parameter-names",
          "manifest": "uw-common/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "com.esotericsoftware:kryo",
          "manifest": "uw-common/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "org.jctools:jctools-core",
          "manifest": "uw-common/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "4.0.5"
        },
        {
          "name": "org.slf4j:slf4j-api",
          "manifest": "uw-common/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "org.apache.commons:commons-lang3",
          "manifest": "uw-common/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "org.springframework:spring-context",
          "manifest": "uw-common/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "com.github.ben-manes.caffeine:caffeine",
          "manifest": "uw-common/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "org.reflections:reflections",
          "manifest": "uw-common/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "com.github.stuxuhai:jpinyin",
          "manifest": "uw-common/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "1.1.8"
        },
        {
          "name": "org.springframework.boot:spring-boot-starter-data-redis",
          "manifest": "uw-dao/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "com.umtone:uw-common",
          "manifest": "uw-dao/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "com.mysql:mysql-connector-j",
          "manifest": "uw-dao/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "com.fasterxml.jackson.core:jackson-annotations",
          "manifest": "uw-dao/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "org.apache.commons:commons-lang3",
          "manifest": "uw-dao/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "com.zaxxer:HikariCP",
          "manifest": "uw-dao/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "io.swagger.core.v3:swagger-annotations",
          "manifest": "uw-dao/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "org.apache.commons:commons-pool2",
          "manifest": "uw-dao/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "com.umtone:uw-auth-client",
          "manifest": "uw-gateway-client/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "com.umtone:uw-common",
          "manifest": "uw-gateway-client/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "io.swagger.core.v3:swagger-annotations",
          "manifest": "uw-gateway-client/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "com.squareup.okhttp3:okhttp-jvm",
          "manifest": "uw-httpclient/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "5.3.2"
        },
        {
          "name": "org.apache.commons:commons-lang3",
          "manifest": "uw-httpclient/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "com.fasterxml.jackson.core:jackson-core",
          "manifest": "uw-httpclient/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "com.fasterxml.jackson.core:jackson-databind",
          "manifest": "uw-httpclient/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "com.fasterxml.jackson.core:jackson-annotations",
          "manifest": "uw-httpclient/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "com.fasterxml.jackson.dataformat:jackson-dataformat-xml",
          "manifest": "uw-httpclient/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "com.fasterxml.jackson.datatype:jackson-datatype-jsr310",
          "manifest": "uw-httpclient/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "org.slf4j:slf4j-api",
          "manifest": "uw-httpclient/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "com.umtone:uw-common",
          "manifest": "uw-httpclient/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "org.springframework.boot:spring-boot-starter",
          "manifest": "uw-log-es/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "com.umtone:uw-common",
          "manifest": "uw-log-es/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "com.umtone:uw-httpclient",
          "manifest": "uw-log-es/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "com.google.guava:guava",
          "manifest": "uw-log-es/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "io.swagger.core.v3:swagger-annotations",
          "manifest": "uw-log-es/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "org.slf4j:slf4j-api",
          "manifest": "uw-logback-es/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "ch.qos.logback:logback-classic",
          "manifest": "uw-logback-es/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "com.umtone:uw-common",
          "manifest": "uw-logback-es/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "com.umtone:uw-httpclient",
          "manifest": "uw-logback-es/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "com.google.guava:guava",
          "manifest": "uw-logback-es/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "org.springframework.boot:spring-boot-starter-data-redis",
          "manifest": "uw-mfa/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "com.umtone:uw-common",
          "manifest": "uw-mfa/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "com.umtone:uw-auth-client",
          "manifest": "uw-mfa/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "org.apache.commons:commons-lang3",
          "manifest": "uw-mfa/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "io.swagger.core.v3:swagger-annotations",
          "manifest": "uw-mfa/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "commons-codec:commons-codec",
          "manifest": "uw-mfa/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "org.apache.commons:commons-pool2",
          "manifest": "uw-mfa/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "com.google.zxing:core",
          "manifest": "uw-mfa/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "3.5.3"
        },
        {
          "name": "com.google.zxing:javase",
          "manifest": "uw-mfa/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "3.5.3"
        },
        {
          "name": "com.umtone:uw-common",
          "manifest": "uw-mydb-client/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "com.umtone:uw-auth-client",
          "manifest": "uw-mydb-client/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "io.swagger.core.v3:swagger-annotations",
          "manifest": "uw-mydb-client/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "com.umtone:uw-common",
          "manifest": "uw-notify-client/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "com.umtone:uw-auth-client",
          "manifest": "uw-notify-client/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "io.swagger.core.v3:swagger-annotations",
          "manifest": "uw-notify-client/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "com.umtone:uw-common",
          "manifest": "uw-oauth2-client/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "com.umtone:uw-auth-client",
          "manifest": "uw-oauth2-client/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "com.umtone:uw-httpclient",
          "manifest": "uw-oauth2-client/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "com.umtone:uw-cache",
          "manifest": "uw-oauth2-client/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "io.swagger.core.v3:swagger-annotations",
          "manifest": "uw-oauth2-client/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "com.auth0:java-jwt",
          "manifest": "uw-oauth2-client/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "4.5.0"
        },
        {
          "name": "org.springframework.boot:spring-boot-starter-amqp",
          "manifest": "uw-task/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "org.springframework.boot:spring-boot-starter-data-redis",
          "manifest": "uw-task/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "com.umtone:uw-auth-client",
          "manifest": "uw-task/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "com.esotericsoftware:kryo",
          "manifest": "uw-task/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "org.apache.commons:commons-pool2",
          "manifest": "uw-task/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "com.umtone:uw-log-es",
          "manifest": "uw-task/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "com.umtone:uw-common",
          "manifest": "uw-tinyurl-client/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "com.umtone:uw-auth-client",
          "manifest": "uw-tinyurl-client/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "io.swagger.core.v3:swagger-annotations",
          "manifest": "uw-tinyurl-client/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "org.springframework.boot:spring-boot-starter-validation",
          "manifest": "uw-webot/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "com.microsoft.playwright:playwright",
          "manifest": "uw-webot/pom.xml",
          "ecosystem": "maven",
          "version_constraint": "1.58.0"
        },
        {
          "name": "com.umtone:uw-cache",
          "manifest": "uw-webot/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "com.umtone:uw-common",
          "manifest": "uw-webot/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "com.umtone:uw-httpclient",
          "manifest": "uw-webot/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        }
      ],
      "all_dependencies": {
        "error": "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
        "source": null,
        "packages": [],
        "collected": false,
        "truncated": false,
        "total_count": null,
        "direct_count": null,
        "indirect_count": null
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 0,
        "merged_prs": 0,
        "open_issues": 0,
        "closed_ratio": null,
        "closed_issues": 0,
        "closed_unmerged_prs": 0
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "axeon",
          "commits": 613,
          "avatar_url": "https://avatars.githubusercontent.com/u/10541706?v=4"
        },
        {
          "type": "User",
          "login": "XSunin0922",
          "commits": 19,
          "avatar_url": "https://avatars.githubusercontent.com/u/132500124?v=4"
        }
      ],
      "contributors_sampled": 2,
      "top_contributor_share": 0.97
    },
    "quality_signals": {
      "has_ci": false,
      "has_tests": true,
      "ci_workflows": [],
      "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": 10,
            "reason": "no binaries found in the repo",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": 0,
            "reason": "branch protection not enabled on development/release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": null,
            "reason": "no pull request found",
            "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": 0,
            "reason": "Found 0/30 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 3,
            "reason": "project has 1 contributing companies or organizations -- score normalized to 3",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": null,
            "reason": "no workflows found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 0,
            "reason": "no 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 0 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": null,
            "reason": "packaging workflow not 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": "no SAST tool detected",
            "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": null,
            "reason": "no releases found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": null,
            "reason": "No tokens found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 0,
            "reason": "17 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "7d889578363f4ebbf8aebdcb55fb9b1927ebbb18",
        "ran_at": "2026-07-24T02:42:06Z",
        "aggregate_score": 2.5,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": false,
      "has_dependabot_config": false
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": null,
      "oldest_open_prs": [],
      "last_merged_pr_at": null,
      "ci_last_conclusion": null,
      "oldest_open_issues": []
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/axeon/uw-base",
    "host": "github.com",
    "name": "uw-base",
    "owner": "axeon"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "at_risk",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 36,
      "inputs": {
        "security": 36,
        "vitality": 41,
        "community": 26,
        "governance": 36,
        "engineering": 38
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "at_risk",
        "name": "Vitality",
        "value": 41,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "moderate",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 68,
            "inputs": {
              "commits_last_year": 157,
              "human_commit_share": 1,
              "days_since_last_push": 14,
              "active_weeks_last_year": 16
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 14 days ago",
                "points": 28.8,
                "status": "partial",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 14
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "16/52 weeks with commits",
                "points": 11.1,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 16
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "157 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 157
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "critical",
            "name": "Release discipline",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 1,
            "inputs": {
              "releases_count": 0
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "no releases published",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_releases_published",
                    "params": {}
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "no releases",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_releases",
                    "params": {}
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "no releases",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_releases",
                    "params": {}
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "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": 14,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "last human commit 14 days ago",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_maintained",
                    "params": {
                      "days": 14
                    }
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "critical",
        "name": "Community & Adoption",
        "value": 26,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "critical",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 5,
            "inputs": {
              "forks": 0,
              "stars": 3,
              "watchers": 1,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "3 stars",
                "points": 4.9,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 3
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "0 forks",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "1 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "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 (Apache-2.0)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "Apache-2.0"
                    }
                  }
                ],
                "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": "at_risk",
        "name": "Sustainability & Governance",
        "value": 36,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 15,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 2,
              "top_contributor_share": 0.97
            },
            "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 97% of commits",
                "points": 0.7,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 97
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "2 contributors",
                "points": 2.7,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 1 contributing companies or organizations -- score normalized to 3",
                "points": 3,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "critical",
            "name": "Issue & PR responsiveness",
            "note": "Excluded from scoring (no data or not applicable): Issue resolution, PR acceptance. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "issue_resolution",
                    "pr_acceptance"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 1,
            "inputs": {
              "merged_prs": 0,
              "open_issues": 0,
              "closed_issues": 0,
              "issue_closed_ratio": null,
              "closed_unmerged_prs": 0
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "no issues or no data",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_issues_or_data",
                    "params": {}
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "no decided pull requests or no data",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_decided_prs_or_data",
                    "params": {}
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "at_risk",
            "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": 47,
            "inputs": {
              "followers": 7,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "axeon",
              "public_repos": 18,
              "account_age_days": 4207
            },
            "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": "7 followers of axeon",
                "points": 6.5,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 7,
                      "login": "axeon"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "18 public repos, account ~11 yr old",
                "points": 21.3,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 18
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 11
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "com.umtone:uw-ai",
                "com.umtone:uw-dao",
                "com.umtone:uw-mfa",
                "com.umtone:uw-task",
                "com.umtone:uw-cache",
                "com.umtone:uw-webot",
                "com.umtone:uw-common",
                "com.umtone:uw-log-es"
              ],
              "ecosystems": "maven",
              "any_deprecated": false,
              "min_days_since_publish": 9
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "8 package(s) on maven",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 8,
                      "ecosystems": "maven"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 9 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 9
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "50 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 50
                    }
                  }
                ],
                "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": "at_risk",
        "name": "Engineering Quality",
        "value": 38,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "at_risk",
            "name": "Engineering practices",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: CI-Tests. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_ci_tests"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 30,
            "inputs": {
              "has_ci": false,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": false,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "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": "no pull request found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "moderate",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 50,
            "inputs": {
              "topics": [],
              "has_wiki": true,
              "homepage": null,
              "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": null,
                "points": 0,
                "status": "missed",
                "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": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "at_risk",
        "name": "Security",
        "value": 36,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "critical",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): CI-Tests, Dangerous-Workflow, Packaging, Signed-Releases, Token-Permissions. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "ci_tests",
                    "dangerous_workflow",
                    "packaging",
                    "signed_releases",
                    "token_permissions"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 25,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 13,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 5,
              "scorecard_aggregate": 2.5
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "branch protection not enabled on development/release branches",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "no pull request found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "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 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 1 contributing companies or organizations -- score normalized to 3",
                "points": 0.8,
                "status": "partial",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no workflows found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "no update tool detected",
                "points": 0,
                "status": "missed",
                "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 0 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 not detected",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "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": "no SAST tool detected",
                "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": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "No tokens found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "17 existing vulnerabilities detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "dependency_advisories",
            "band": "good",
            "name": "Dependency advisories",
            "note": "Matched the maven:com.umtone:uw-ai@1.1.36 runtime dependency closure — what installing the published package pulls in — 110 packages. Reachability is not analyzed.",
            "notes": [
              {
                "code": "advisories_scope_published",
                "params": {
                  "package": "maven:com.umtone:uw-ai@1.1.36",
                  "assessed": 110
                }
              },
              {
                "code": "advisories_reachability",
                "params": {}
              }
            ],
            "value": 82,
            "inputs": {
              "source": "osv",
              "advisories": 11,
              "affected_packages": 5,
              "assessed_packages": 110,
              "unassessed_packages": 0,
              "affected_by_severity": "high 3, moderate 1, low 1",
              "direct_affected_packages": 0
            },
            "components": [
              {
                "key": "direct_dependencies_free_of_known_advisories",
                "name": "Direct dependencies free of known advisories",
                "detail": "no direct dependency carries a known advisory",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "no_direct_advisories",
                    "params": {}
                  }
                ],
                "max_points": 35
              },
              {
                "key": "indirect_dependencies_free_of_known_advisories",
                "name": "Indirect dependencies free of known advisories",
                "detail": "5 affected: io.netty:netty-codec-compression 4.2.15.Final (high 7.5), io.netty:netty-codec-http 4.2.15.Final (high 7.5), io.netty:netty-codec-http3 4.2.15.Final (high 7.5), +2 more",
                "points": 6.5,
                "status": "partial",
                "details": [
                  {
                    "code": "advisories_affected",
                    "params": {
                      "count": 5,
                      "packages": "io.netty:netty-codec-compression 4.2.15.Final (high 7.5), io.netty:netty-codec-http 4.2.15.Final (high 7.5), io.netty:netty-codec-http3 4.2.15.Final (high 7.5)"
                    }
                  },
                  {
                    "code": "advisories_affected_more",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "no_advisories_left_outstanding",
                "name": "No advisories left outstanding",
                "detail": "no advisory has been public longer than 90 days",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "advisories_none_stale",
                    "params": {
                      "days": 90
                    }
                  }
                ],
                "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": 110,
              "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": 3
            },
            "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": 55,
        "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.84,
              "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": "84 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 84,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "moderate",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 56,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [],
              "has_dockerfile": true,
              "typed_language": true,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": false,
              "typecheck_configs": [],
              "agent_commit_share": 0,
              "toolchain_manifests": [
                "pom.xml",
                "uw-ai/pom.xml",
                "uw-auth-client/pom.xml",
                "uw-auth-service/pom.xml",
                "uw-cache/pom.xml",
                "uw-common-app/pom.xml",
                "uw-common/pom.xml",
                "uw-dao/pom.xml",
                "uw-gateway-client/pom.xml",
                "uw-httpclient/pom.xml",
                "uw-log-es/pom.xml",
                "uw-logback-es/pom.xml",
                "uw-mfa/pom.xml",
                "uw-mydb-client/pom.xml",
                "uw-notify-client/pom.xml",
                "uw-oauth2-client/pom.xml",
                "uw-task/pom.xml",
                "uw-tinyurl-client/pom.xml",
                "uw-webot/pom.xml"
              ],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "pom.xml, uw-ai/pom.xml, uw-auth-client/pom.xml (toolchain convention, no task runner)",
                "points": 12.6,
                "status": "partial",
                "details": [
                  {
                    "code": "toolchain_convention",
                    "params": {
                      "files": "pom.xml, uw-ai/pom.xml, uw-auth-client/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": "Java (statically typed)",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Java"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "Dockerfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "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": "no automated dependency updates observed",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_dependency_automation",
                    "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": 96434,
              "source_files_sampled": 486,
              "oversized_source_files": 3
            },
            "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": "3/486 source files over 60KB",
                "points": 54.7,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 486,
                      "oversized": 3
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "at_risk",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "example_dirs": [
                "example"
              ],
              "has_mcp_signal": false,
              "api_schema_files": []
            },
            "components": [
              {
                "key": "api_schema_openapi_graphql_proto",
                "name": "API schema (OpenAPI/GraphQL/proto)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "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": "example",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "example"
                    }
                  }
                ],
                "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",
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-24T02:42:36.862729Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/a/axeon/uw-base.svg",
  "full_name": "axeon/uw-base",
  "license_state": "standard",
  "license_spdx": "Apache-2.0"
}

Bewertungen sind Signale, keine Garantien. Sie spiegeln öffentlich sichtbare Praxis auf GitHub wider — kein Code-Audit und keine Sicherheitsgarantie.

Fehlende Daten werden ausgeschlossen und die Gewichte neu normiert, nie als null bewertet. Die Methodik ist versioniert und offen: Metriken v1.13.0, Schema v0.27.0 — vollständige Methodik · Metriken-Wiki.

Wie ein einzelnes Ergebnis im Gesamtregister steht: aggregierte StatistikenMaven.