Registro público
Informe de salud del softwareesquema 0.27.0 · métricas 1.13.0 · 2026-07-24 02:42 UTC

axeon / uw-base

uniweb基础类库

JavaApache-2.0★ 3 estrellas⑂ 0 forksdesde dic 2024Ver en GitHub ↗

axeon/uw-base tiene un índice de salud de 36 sobre 100, lo que lo sitúa en la banda En riesgo. Su puntuación más alta es AI Readiness (55/100) y la más baja, Community & Adoption (26/100). Se actualizó por última vez hace 14 días. Una sola persona concentra la mayor parte del trabajo reciente.

36
global / 100
En riesgo

Índice de salud del software

Las métricas se agrupan en categorías ponderadas sobre una escala de 1 a 100. El resultado global parte de su media; cuando la evidencia pública activa la Política de Jurisdicciones de Alto Riesgo, la calificación se ajusta y recibe el límite 49 (En riesgo). Preparación para IA queda fuera.

36
Excelente85-100Ejemplar; cumple prácticamente todos los criterios evaluados
Bueno70-84Saludable; carencias menores
Moderado50-69Aceptable con carencias notables; se recomienda revisión
En riesgo30-49Debilidades significativas; su adopción exige cautela
Crítico1-29Problemas graves (proyecto abandonado, un solo mantenedor, sin higiene)
VitalidadComunidad yAdopciónSostenibilidady GobernanzaCalidad deIngenieríaSeguridadPreparaciónpara IA

Perfil de puntuación

Cada eje es una categoría. La forma importa más que la media: un proyecto sano llena toda la figura, mientras que un perfil de picos y cráteres indica que la fortaleza en una dimensión enmascara el riesgo en otra.

Titularidad

axeonCuenta personal
7 seguidores18 repositorios públicosdesde ene 2015

Este repositorio pertenece a una cuenta personal. Un proyecto con un único propietario conlleva más riesgo de continuidad que uno respaldado por una organización.

Ecosistemas de paquetes

RegistroPaqueteVersiónDescargas / mesVersionesÚltima publicación
Mavencom.umtone:uw-ai1.1.36-32hace 9 días
Mavencom.umtone:uw-dao5.3.52-40hace 9 días
Mavencom.umtone:uw-mfa1.1.71-31hace 9 días
Mavencom.umtone:uw-task5.1.135-38hace 9 días
Mavencom.umtone:uw-cache1.2.103-25hace 9 días
Mavencom.umtone:uw-webot1.0.15-13hace 9 días
Mavencom.umtone:uw-common1.1.112-50hace 9 días
Mavencom.umtone:uw-log-es3.1.106-26hace 9 días

Métricas por categoría

Vitalidad

¿Está vivo el proyecto: se escribe código y se publican versiones?

41En riesgo · 22% del índice global
Cómo se puntúa
28.8/36Recencia de push — último push hace 14 días
11.1/36Cadencia de commits — 16/52 semanas con commits
18/18Volumen de commits — 157 commits en el último año
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
Datos de entrada utilizados
commits_last_year157
human_commit_share1
days_since_last_push14
active_weeks_last_year16
Cómo se puntúa
0/27Publica versiones — sin versiones publicadas
0/36Recencia de las versiones — sin versiones
0/27Cadencia de publicación — sin versiones
0/10OpenSSF Scorecard: Signed-Releases — sin datos
Datos de entrada utilizados
releases_count0
Excluidos de la puntuación (sin datos o no aplicable): OpenSSF Scorecard: Signed-Releases. Los pesos restantes se han renormalizado.

Comunidad y Adopción

¿Tiene el proyecto usuarios, descargas, atención y unas condiciones acogedoras para quienes contribuyen?

26Crítico · 18% del índice global
Cómo se puntúa
4.9/60Estrellas — 3 estrellas
0/25Forks — 0 forks
0/15Observadores — 1 observadores
Datos de entrada utilizados
forks0
stars3
watchers1
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Cómo se puntúa
22.5/22.5README
22.5/22.5Licencia — licencia reconocida (Apache-2.0)
0/18Guía CONTRIBUTING
0/13.5Código de conducta
0/7.2Plantilla de issues
0/6.3Plantilla de PR
Datos de entrada utilizados
has_readme
has_license
has_contributingno
has_issue_templateno
has_code_of_conductno
has_pull_request_templateno

Sostenibilidad y Gobernanza

¿Sobrevivirá el proyecto a sus personas: factor bus, capacidad de respuesta, quién lo respalda y mantenimiento del paquete?

36En riesgo · 24% del índice global
Cómo se puntúa
9/54Factor bus — la mitad de los commits recae en 1 contribuyente(s)
0.7/22.5Distribución de commits — el principal contribuyente firma el 97% de los commits
2.7/13.5Amplitud de contribuyentes — 2 contribuyentes
3/10OpenSSF Scorecard: Contributors — project has 1 contributing companies or organizations -- score normalized to 3
Datos de entrada utilizados
bus_factor1
contributors_sampled2
top_contributor_share0,97
Cómo se puntúa
0/46.8Resolución de issues — sin issues o sin datos
0/38.3Aceptación de PR — sin PR decididos o sin datos
0/15OpenSSF Scorecard: Code-Review — Found 0/30 approved changesets -- score normalized to 0
Datos de entrada utilizados
merged_prs0
open_issues0
closed_issues0
issue_closed_ratio
closed_unmerged_prs0
Excluidos de la puntuación (sin datos o no aplicable): Resolución de issues, Aceptación de PR. Los pesos restantes se han renormalizado.
Cómo se puntúa
10/30Respaldo de la propiedad — cuenta personal (usuario)
0/20Dominio verificado — no aplicable a cuentas de usuario
6.5/25Alcance del propietario — 7 seguidores de axeon
21.3/25Trayectoria — 18 repos públicos, cuenta de ~11 años
Datos de entrada utilizados
followers7
owner_typeUser
is_verified
owner_loginaxeon
public_repos18
account_age_days4207
Excluidos de la puntuación (sin datos o no aplicable): Dominio verificado. Los pesos restantes se han renormalizado.
Cómo se puntúa
25/25Publicado y resoluble — 8 paquete(s) en maven
35/35Recencia de publicación — última publicación hace 9 días
20/20Historial de versiones — 50 versiones en el registro
20/20No obsoleto — activo, ni obsoleto ni retirado
Datos de entrada utilizados
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_deprecatedno
min_days_since_publish9

Calidad de Ingeniería

¿Existen unas prácticas mínimas de ingeniería y documentación?

38En riesgo · 20% del índice global
Cómo se puntúa
0/24Flujos de trabajo de CI
24/24Pruebas presentes
0/16Configuración de linter
0/9.6Hooks de pre-commit
0/6.4.editorconfig
0/20OpenSSF Scorecard: CI-Tests — sin datos
Datos de entrada utilizados
has_cino
has_tests
has_editorconfigno
has_linter_configno
has_precommit_configno
Excluidos de la puntuación (sin datos o no aplicable): OpenSSF Scorecard: CI-Tests. Los pesos restantes se han renormalizado.

Documentación

50Moderado
Cómo se puntúa
30/30README
0/25Directorio de documentación
0/15Sitio de documentación / página del proyecto
10/10Descripción del repositorio
0/10Topics
10/10Wiki
Datos de entrada utilizados
topics
has_wiki
homepage
has_readme
has_docs_dirno
has_description

Seguridad

¿Son sólidas las prácticas visibles de seguridad y de cadena de suministro, sin exposición jurisdiccional de alto riesgo sin resolver?

36En riesgo · 16% del índice global
Cómo se puntúa
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 — sin datos
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 — sin datos
0/7.5Dependency-Update-Tool — no update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5Licencia — 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 — sin datos
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 — sin datos
0/7.5Token-Permissions — sin datos
0/7.5Vulnerabilities — 17 existing vulnerabilities detected
Datos de entrada utilizados
sourceopenssf_scorecard
checks_evaluated13
scorecard_versionv5.5.0
checks_inconclusive5
scorecard_aggregate2,5
Excluidos de la puntuación (sin datos o no aplicable): ci_tests, dangerous_workflow, packaging, signed_releases, token_permissions. Los pesos restantes se han renormalizado.
Cómo se puntúa
35/35Dependencias directas libres de avisos conocidos — ninguna dependencia directa tiene un aviso conocido
6.5/25Dependencias indirectas libres de avisos conocidos — 5 afectados: 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 más
40/40Sin avisos pendientes — ningún aviso lleva público más de 90 días
Datos de entrada utilizados
sourceosv
advisories11
affected_packages5
assessed_packages110
unassessed_packages0
affected_by_severityhigh 3, moderate 1, low 1
direct_affected_packages0
Se cotejó el cierre de dependencias en tiempo de ejecución de maven:com.umtone:uw-ai@1.1.36 —lo que arrastra la instalación del paquete publicado—: 110 paquetes. No se analiza la alcanzabilidad.

Preparación para IA

¿Hasta qué punto está el repositorio preparado para desarrollarse y mantenerse con agentes de codificación de IA? Es una insignia independiente y experimental — peso 0,0, de modo que se presenta por separado y no afecta a la puntuación de salud global.

55Moderado · 0% del índice global
Cómo se puntúa
0/45Instrucciones para agentes — sin CLAUDE.md / AGENTS.md / reglas de editor
0/15Documentación legible por máquinas (llms.txt)
40/40Historial de commits legible — 84 de 100 commits humanos declaran su intención (asunto estructurado o cuerpo explicativo)
Datos de entrada utilizados
has_llms_txtno
legible_history_share0,84
agent_instruction_files
agent_instruction_max_bytes
Cómo se puntúa
12.6/18Arranque con un solo comando — pom.xml, uw-ai/pom.xml, uw-auth-client/pom.xml (convención del toolchain, sin ejecutor de tareas)
22/22Pruebas automatizadas
0/11Configuración de lint / formato
11/11Verificación estática de tipos — Java (tipado estático)
10/10Entorno reproducible — Dockerfile
0/10Práctica demostrada con agentes — ningún commit con autoría de agente entre los últimos 100
0/8Mantenimiento automatizado — no se observan actualizaciones automáticas de dependencias
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Datos de entrada utilizados
has_nixno
has_tests
lockfiles
has_dockerfile
typed_language
bootstrap_files
has_devcontainerno
has_linter_configno
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
Cómo se puntúa
45/45Código verificable por tipos — Java (tipado estático)
54.7/55Tamaños de archivo manejables — 3/486 archivos fuente de más de 60 KB
Datos de entrada utilizados
primary_languageJava
largest_source_bytes96.434
source_files_sampled486
oversized_source_files3
Cómo se puntúa
0/40Esquema de API (OpenAPI/GraphQL/proto)
0/20Servidor MCP
40/40Ejemplos ejecutables — example
Datos de entrada utilizados
example_dirsexample
has_mcp_signalno
api_schema_files

Datos clave

3estrellas de GitHub
2contribuidores
157commits en los últimos 12 meses
14días desde el último push
0versiones publicadas
1factor bus
0issues abiertas
Mavenecosistemas de paquetes

Advertencias de recopilación de datos

  • 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

Más detalle

OpenSSF Scorecard 2.5 / 10
2.5agregado

Evaluación de seguridad independiente y agnóstica en cuanto a herramientas, procedente del proyecto de código abierto OpenSSF Scorecard. Cada comprobación premia una práctica de seguridad, no la herramienta de un proveedor concreto. Las comprobaciones que Scorecard no pudo determinar se marcan como n/d y se excluyen de la puntuación de seguridad (nunca se cuentan como cero).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
n/dCI-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
n/dDangerous-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
n/dPackagingpackaging workflow not detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
0SASTno SAST tool detected
0Security-Policysecurity policy file not detected
n/dSigned-Releasesno releases found
n/dToken-PermissionsNo tokens found
0Vulnerabilities17 existing vulnerabilities detected
Dependencias directas 141
RegistroPaqueteRestricción de versiónManifiesto
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
Todas las dependencias no recopilado

No fue posible recopilar el conjunto de dependencias resuelto para este informe: GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Avisos de dependencias 5

Instalar maven:com.umtone:uw-ai@1.1.36 arrastra 110 paquetes, directos y transitivos: 5 tienen avisos conocidos, de los cuales 0 son dependencias directas.

PaqueteVersiónRelaciónGravedadAvisosCorregido en
io.netty:netty-codec-compression4.2.15.Finalindirectaalta14.2.16.Final
io.netty:netty-codec-http4.2.15.Finalindirectaalta74.2.16.Final
io.netty:netty-codec-http34.2.15.Finalindirectaalta14.2.16.Final
tools.jackson.core:jackson-databind3.1.4indirectamoderada13.2.1
io.netty:netty-codec-http24.2.15.Finalindirectabaja14.2.16.Final

Un aviso significa que la versión registrada en el grafo de dependencias cae dentro del rango afectado de un aviso. No se analiza la alcanzabilidad, y el grafo incluye fijaciones de desarrollo y prueba: un hallazgo puede referirse al utillaje y no al software distribuido.

Informe JSON sin procesar legible por máquina
{
  "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"
}

Las puntuaciones son señales, no garantías. Reflejan prácticas públicamente visibles en GitHub; no son una auditoría de código ni una garantía de seguridad.

Los datos ausentes se excluyen y los pesos se renormalizan; nunca se puntúan como cero. La metodología es versionada y abierta: métricas v1.13.0, esquema v0.27.0 — metodología completa · wiki de métricas.

Cómo se sitúa un resultado dentro del registro general: estadísticas agregadasMaven.