Registro público
Informe de salud del softwareesquema 0.27.0 · métricas 1.13.0 · 2026-07-25 10:43 UTC

dromara / warm-flow

Warm-Flow国产工作流引擎🎉,其特点简洁轻量,五脏俱全,可扩展,是一个可通过jar引入设计器的工作流。。解决flowable和activities复杂、学习成本高和集成难等痛点。

Java · Vue · TypeScriptApache-2.0★ 573 estrellas⑂ 83 forksdesde ene 2024Ver en GitHub ↗

dromara/warm-flow tiene un índice de salud de 61 sobre 100, lo que lo sitúa en la banda Moderado. Su puntuación más alta es Vitality (79/100) y la más baja, Security (44/100). Se actualizó por última vez hace 5 días. Una sola persona concentra la mayor parte del trabajo reciente.

61
global / 100
Moderado

Í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.

61
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

dromaraOrganización
2875 seguidores103 repositorios públicosdesde jul 2018

Este repositorio está respaldado por una organización: una custodia compartida y responsable que puede sobrevivir a cualquier mantenedor individual.

Ecosistemas de paquetes

RegistroPaqueteVersiónDescargas / mesVersionesÚltima publicación
Mavenorg.dromara.warm:warm-flow-core1.8.9-73hace 12 días

Métricas por categoría

Vitalidad

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

79Bueno · 22% del índice global
Cómo se puntúa
36/36Recencia de push — último push hace 5 días
21.5/36Cadencia de commits — 31/52 semanas con commits
18/18Volumen de commits — 328 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_year328
human_commit_share1
days_since_last_push5
active_weeks_last_year31
Cómo se puntúa
27/27Publica versiones — 10 versiones publicadas
7.2/36Recencia de las versiones — última versión hace 556 días
27/27Cadencia de publicación — una versión cada ~9,6 días
0/10OpenSSF Scorecard: Signed-Releases — sin datos
Datos de entrada utilizados
releases_count10
latest_release_tagv1.6.0-m4
releases_from_tagsno
days_since_latest_release556
mean_days_between_releases9,6
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?

58Moderado · 18% del índice global
Cómo se puntúa
44.7/60Estrellas — 573 estrellas
16/25Forks — 83 forks
3.9/15Observadores — 6 observadores
Datos de entrada utilizados
forks83
stars573
watchers6
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?

65Moderado · 24% del índice global
Cómo se puntúa
9/54Factor bus — la mitad de los commits recae en 1 contribuyente(s)
7.1/22.5Distribución de commits — el principal contribuyente firma el 68% de los commits
13.5/13.5Amplitud de contribuyentes — 32 contribuyentes
10/10OpenSSF Scorecard: Contributors — project has 4 contributing companies or organizations
Datos de entrada utilizados
bus_factor1
contributors_sampled32
top_contributor_share0,685
Cómo se puntúa
18.7/46.8Resolución de issues — 40% de issues cerradas
33/38.3Aceptación de PR — 19/22 PR decididos fusionados
0/15OpenSSF Scorecard: Code-Review — Found 0/30 approved changesets -- score normalized to 0
Datos de entrada utilizados
merged_prs19
open_issues6
closed_issues4
issue_closed_ratio0,4
closed_unmerged_prs3
Cómo se puntúa
30/30Respaldo de la propiedad — propiedad de una organización
0/20Dominio verificado
24.9/25Alcance del propietario — 2875 seguidores de dromara
25/25Trayectoria — 103 repos públicos, cuenta de ~8 años
Datos de entrada utilizados
followers2875
owner_typeOrganization
is_verified
owner_logindromara
public_repos103
account_age_days2936
Cómo se puntúa
25/25Publicado y resoluble — 1 paquete(s) en maven
35/35Recencia de publicación — última publicación hace 12 días
20/20Historial de versiones — 73 versiones en el registro
20/20No obsoleto — activo, ni obsoleto ni retirado
Datos de entrada utilizados
packagesorg.dromara.warm:warm-flow-core
ecosystemsmaven
any_deprecatedno
min_days_since_publish12

Calidad de Ingeniería

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

53Moderado · 20% del índice global
Cómo se puntúa
24/24Flujos de trabajo de CI — 1 flujo(s) de trabajo
0/24Pruebas presentes
0/16Configuración de linter
0/9.6Hooks de pre-commit
6.4/6.4.editorconfig
0/20OpenSSF Scorecard: CI-Tests — sin datos
Datos de entrada utilizados
has_ci
has_testsno
has_editorconfig
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.
Cómo se puntúa
30/30README
0/25Directorio de documentación
15/15Sitio de documentación / página del proyecto — http://www.warm-flow.cn
10/10Descripción del repositorio
10/10Topics — 1 topics
10/10Wiki
Datos de entrada utilizados
topicsworkflow
has_wiki
homepagehttp://www.warm-flow.cn
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?

44En 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
2.5/2.5Contributors — project has 4 contributing companies or organizations
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 — sin datos
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 — 59 existing vulnerabilities detected
Datos de entrada utilizados
sourceopenssf_scorecard
checks_evaluated12
scorecard_versionv5.5.0
checks_inconclusive6
scorecard_aggregate3
Excluidos de la puntuación (sin datos o no aplicable): ci_tests, dangerous_workflow, packaging, pinned_dependencies, 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
25/25Dependencias indirectas libres de avisos conocidos — ninguna dependencia indirecta tiene un aviso conocido
0/40Sin avisos pendientes — ningún aviso tiene fecha de publicación
Datos de entrada utilizados
sourceosv
advisories0
affected_packages0
assessed_packages2
unassessed_packages0
affected_by_severitynone
direct_affected_packages0
Excluidos de la puntuación (sin datos o no aplicable): Sin avisos pendientes. Los pesos restantes se han renormalizado. Se cotejó el cierre de dependencias en tiempo de ejecución de maven:org.dromara.warm:warm-flow-core@1.8.9 —lo que arrastra la instalación del paquete publicado—: 2 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.

70Bueno · 0% del índice global
Cómo se puntúa
45/45Instrucciones para agentes — .cursor/rules/warm-flow.mdc, AGENTS.md, CLAUDE.md, warm-flow-core/AGENTS.md, warm-flow-orm/AGENTS.md, warm-flow-plugin/AGENTS.md, warm-flow-ui/AGENTS.md, warm-flow-vue-designer/AGENTS.md
0/15Documentación legible por máquinas (llms.txt)
40/40Historial de commits legible — 91 de 100 commits humanos declaran su intención (asunto estructurado o cuerpo explicativo)
Datos de entrada utilizados
has_llms_txtno
legible_history_share0,91
agent_instruction_files.cursor/rules/warm-flow.mdc, AGENTS.md, CLAUDE.md, warm-flow-core/AGENTS.md, warm-flow-orm/AGENTS.md, warm-flow-plugin/AGENTS.md, warm-flow-ui/AGENTS.md, warm-flow-vue-designer/AGENTS.md
agent_instruction_max_bytes20.170
Cómo se puntúa
12.6/18Arranque con un solo comando — pom.xml, warm-flow-core/pom.xml, warm-flow-orm/pom.xml (convención del toolchain, sin ejecutor de tareas)
0/22Pruebas automatizadas
0/11Configuración de lint / formato
11/11Verificación estática de tipos — warm-flow-designer-demo/warm-flow-antdv4-designer-demo/tsconfig.json, warm-flow-designer-demo/warm-flow-ep-designer-demo/tsconfig.json, warm-flow-designer-demo/warm-flow-naive-designer-demo/tsconfig.json, warm-flow-vue-designer/tsconfig.json
10/10Entorno reproducible — lockfile
10/10Práctica demostrada con agentes — 83 de los últimos 100 commits con autoría o crédito de agente
0/8Mantenimiento automatizado — no se observan actualizaciones automáticas de dependencias
0/10OpenSSF Scorecard: Pinned-Dependencies — sin datos
Datos de entrada utilizados
has_nixno
has_testsno
lockfilespnpm-lock.yaml
has_dockerfileno
typed_language
bootstrap_files
has_devcontainerno
has_linter_configno
typecheck_configswarm-flow-designer-demo/warm-flow-antdv4-designer-demo/tsconfig.json, warm-flow-designer-demo/warm-flow-ep-designer-demo/tsconfig.json, warm-flow-designer-demo/warm-flow-naive-designer-demo/tsconfig.json, warm-flow-vue-designer/tsconfig.json
agent_commit_share0,83
toolchain_manifestspom.xml, warm-flow-core/pom.xml, warm-flow-orm/pom.xml, warm-flow-orm/warm-flow-easy-query/pom.xml, warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/pom.xml, warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-sb-starter/pom.xml, warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-sb3-starter/pom.xml, warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-sb4-starter/pom.xml, warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-solon-plugin/pom.xml, warm-flow-orm/warm-flow-mybatis-plus/pom.xml, warm-flow-orm/warm-flow-mybatis-plus/warm-flow-mybatis-plus-core/pom.xml, warm-flow-orm/warm-flow-mybatis-plus/warm-flow-mybatis-plus-sb-starter/pom.xml, warm-flow-orm/warm-flow-mybatis-plus/warm-flow-mybatis-plus-sb3-starter/pom.xml, warm-flow-orm/warm-flow-mybatis-plus/warm-flow-mybatis-plus-sb4-starter/pom.xml, warm-flow-orm/warm-flow-mybatis-plus/warm-flow-mybatis-plus-solon-plugin/pom.xml, warm-flow-orm/warm-flow-mybatis/pom.xml, warm-flow-orm/warm-flow-mybatis/warm-flow-mybatis-core/pom.xml, warm-flow-orm/warm-flow-mybatis/warm-flow-mybatis-sb-starter/pom.xml, warm-flow-orm/warm-flow-mybatis/warm-flow-mybatis-sb3-starter/pom.xml, warm-flow-orm/warm-flow-mybatis/warm-flow-mybatis-sb4-starter/pom.xml, warm-flow-orm/warm-flow-mybatis/warm-flow-mybatis-solon-plugin/pom.xml, warm-flow-plugin/pom.xml, warm-flow-plugin/warm-flow-plugin-json/pom.xml, warm-flow-plugin/warm-flow-plugin-json/warm-flow-plugin-json-jackson3/pom.xml, warm-flow-plugin/warm-flow-plugin-json/warm-flow-plugin-json-v1/pom.xml, warm-flow-plugin/warm-flow-plugin-modes/pom.xml, warm-flow-plugin/warm-flow-plugin-modes/warm-flow-plugin-modes-sb/pom.xml, warm-flow-plugin/warm-flow-plugin-modes/warm-flow-plugin-modes-solon/pom.xml, warm-flow-plugin/warm-flow-plugin-ui/pom.xml, warm-flow-plugin/warm-flow-plugin-ui/warm-flow-plugin-ui-core/pom.xml, warm-flow-plugin/warm-flow-plugin-ui/warm-flow-plugin-ui-sb-web/pom.xml, warm-flow-plugin/warm-flow-plugin-ui/warm-flow-plugin-ui-solon-web/pom.xml, warm-flow-plugin/warm-flow-plugin-ui/warm-flow-plugin-vue3-ui/pom.xml
dependency_bot_commit_share0
Excluidos de la puntuación (sin datos o no aplicable): OpenSSF Scorecard: Pinned-Dependencies. Los pesos restantes se han renormalizado.
Cómo se puntúa
45/45Código verificable por tipos — Java (tipado estático)
54.9/55Tamaños de archivo manejables — 1/371 archivos fuente de más de 60 KB
Datos de entrada utilizados
primary_languageJava
largest_source_bytes3.264.598
source_files_sampled371
oversized_source_files1

Datos clave

573estrellas de GitHub
32contribuidores
328commits en los últimos 12 meses
5días desde el último push
10versiones publicadas
1factor bus
6issues abiertas
Maven, npmecosistemas de paquetes

Advertencias de recopilación de datos

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token
  • Could not fetch npm package 'Warm-Flow' from its registry
  • Could not fetch npm package '@dromara/warm-flow-designer' from its registry

Más detalle

Historial de estrellas y forks 0 ★ / 83 ⇿
0Estrellas
83Forks
10Versiones

Cuándo se añadió cada estrella y fork, recopilado de GitHub y agrupado por día. El crecimiento acumulado se sitúa justo encima de las adiciones diarias que lo componen, de modo que ambos se leen en conjunto: la acumulación orgánica sostenida no se parece en nada a un pico abrupto y efímero. Cuando esa diferencia es medible, se informa como autenticidad del crecimiento.

0204060801008332024-042025-062026-07
Mayor 0Menor 0Parche 6

Cada punto abarca 3 días.

OpenSSF Scorecard 3.0 / 10
3.0agregado

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-25 10: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
10Contributorsproject has 4 contributing companies or organizations
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
n/dPinned-Dependenciesno dependencies found
0SASTno SAST tool detected
0Security-Policysecurity policy file not detected
n/dSigned-Releasesno releases found
n/dToken-PermissionsNo tokens found
0Vulnerabilities59 existing vulnerabilities detected
Dependencias directas 63
RegistroPaqueteRestricción de versiónManifiesto
Mavenorg.springframework.boot:spring-boot-dependencies${spring.boot.version}pom.xml
Mavenorg.noear:solon${solon.version}pom.xml
Mavenorg.noear:solon-data${solon.version}pom.xml
Mavenorg.noear:solon-web-staticfiles${solon.version}pom.xml
Mavenorg.noear:solon-web${solon.version}pom.xml
Mavenorg.noear:solon-logging-logback${solon.version}pom.xml
Mavenorg.mybatis:mybatis${mybatis.version}pom.xml
Mavenorg.mybatis.spring.boot:mybatis-spring-boot-starter${mybatis-spring-boot}pom.xml
Mavenorg.noear:mybatis-solon-plugin${solon.version}pom.xml
Mavencom.baomidou:mybatis-plus-solon-plugin${mybatis-plus.version}pom.xml
Mavencom.baomidou:mybatis-plus-jsqlparser${mybatis-plus.version}pom.xml
Mavencom.baomidou:mybatis-plus-jsqlparser-4.9${mybatis-plus.version}pom.xml
Mavencom.baomidou:mybatis-plus-extension${mybatis-plus.version}pom.xml
Mavencom.baomidou:mybatis-plus-boot-starter${mybatis-plus.version}pom.xml
Mavenorg.noear:mybatis-plus-extension-solon-plugin${solon.version}pom.xml
Mavencom.easy-query:sql-solon-plugin${easy-query.version}pom.xml
Mavencom.easy-query:sql-springboot-starter${easy-query.version}pom.xml
Mavencom.easy-query:sql-springboot4-starter${easy-query.version}pom.xml
Mavencom.easy-query:sql-api-proxy${easy-query.version}pom.xml
Mavencom.easy-query:sql-processor${easy-query.version}pom.xml
Mavenorg.noear:snack3${snack3.version}pom.xml
Mavenorg.noear:snack4${snack4.version}pom.xml
Mavencom.fasterxml.jackson.core:jackson-databind${jackson.version}pom.xml
Maventools.jackson.core:jackson-databind${jackson3.version}pom.xml
Mavencom.alibaba.fastjson2:fastjson2${fastjson.version}pom.xml
Mavencom.google.code.gson:gson${gson.version}pom.xml
Mavenorg.slf4j:slf4j-api${slf4j-api.version}pom.xml
Mavenorg.dromara.warm:warm-flow-core${warm-flow}pom.xml
Mavenorg.dromara.warm:warm-flow-mybatis-core${warm-flow}pom.xml
Mavenorg.dromara.warm:warm-flow-mybatis-sb-starter${warm-flow}pom.xml
Mavenorg.dromara.warm:warm-flow-mybatis-sb3-starter${warm-flow}pom.xml
Mavenorg.dromara.warm:warm-flow-mybatis-sb4-starter${warm-flow}pom.xml
Mavenorg.dromara.warm:warm-flow-mybatis-solon-plugin${warm-flow}pom.xml
Mavenorg.dromara.warm:warm-flow-mybatis-plus-core${warm-flow}pom.xml
Mavenorg.dromara.warm:warm-flow-mybatis-plus-sb-starter${warm-flow}pom.xml
Mavenorg.dromara.warm:warm-flow-mybatis-plus-sb3-starter${warm-flow}pom.xml
Mavenorg.dromara.warm:warm-flow-mybatis-plus-sb4-starter${warm-flow}pom.xml
Mavenorg.dromara.warm:warm-flow-mybatis-plus-solon-plugin${warm-flow}pom.xml
Mavenorg.dromara.warm:warm-flow-easy-query-core${warm-flow}pom.xml
Mavenorg.dromara.warm:warm-flow-easy-query-sb-starter${warm-flow}pom.xml
Mavenorg.dromara.warm:warm-flow-easy-query-sb3-starter${warm-flow}pom.xml
Mavenorg.dromara.warm:warm-flow-easy-query-sb4-starter${warm-flow}pom.xml
Mavenorg.dromara.warm:warm-flow-easy-query-solon-plugin${warm-flow}pom.xml
Mavenorg.dromara.warm:warm-flow-plugin-modes-sb${warm-flow}pom.xml
Mavenorg.dromara.warm:warm-flow-plugin-modes-solon${warm-flow}pom.xml
Mavenorg.dromara.warm:warm-flow-plugin-json-v1${warm-flow}pom.xml
Mavenorg.dromara.warm:warm-flow-plugin-json-jackson3${warm-flow}pom.xml
Mavenorg.dromara.warm:warm-flow-plugin-vue3-ui${warm-flow}pom.xml
Mavenorg.dromara.warm:warm-flow-plugin-ui-core${warm-flow}pom.xml
Mavenorg.dromara.warm:warm-flow-plugin-ui-sb-web${warm-flow}pom.xml
Mavenorg.dromara.warm:warm-flow-plugin-ui-solon-web${warm-flow}pom.xml
Mavenorg.slf4j:slf4j-apiwarm-flow-core/pom.xml
npm@element-plus/icons-vue2.3.1warm-flow-ui/package.json
npm@form-create/designer^3.2.6warm-flow-ui/package.json
npm@form-create/element-ui^3.2.10warm-flow-ui/package.json
npm@logicflow/core^2.1.11warm-flow-ui/package.json
npm@logicflow/extension^2.1.15warm-flow-ui/package.json
npmaxios0.27.2warm-flow-ui/package.json
npmelement-plus2.4.3warm-flow-ui/package.json
npmfile-saver2.0.5warm-flow-ui/package.json
npmpinia2.1.7warm-flow-ui/package.json
npmvue3.3.9warm-flow-ui/package.json
npmvue-router4.2.5warm-flow-ui/package.json
Todas las dependencias 392

Conjunto completo de dependencias resueltas según el grafo de dependencias de GitHub: 96 paquetes directos y 296 indirectos (transitivos). El cierre transitivo es completo cuando el repositorio incluye un lockfile.

RegistroPaqueteVersiónRelación
Mavencom.alibaba.fastjson2:fastjson2directa
Mavencom.alibaba.fastjson2:fastjson22.0.43directa
Mavencom.baomidou:mybatis-plus-boot-starterdirecta
Mavencom.baomidou:mybatis-plus-boot-starter3.5.12directa
Mavencom.baomidou:mybatis-plus-extensiondirecta
Mavencom.baomidou:mybatis-plus-extension3.5.12directa
Mavencom.baomidou:mybatis-plus-extension3.5.15directa
Mavencom.baomidou:mybatis-plus-jsqlparser3.5.12directa
Mavencom.baomidou:mybatis-plus-jsqlparser3.5.15directa
Mavencom.baomidou:mybatis-plus-jsqlparser-4.9directa
Mavencom.baomidou:mybatis-plus-jsqlparser-4.93.5.12directa
Mavencom.baomidou:mybatis-plus-solon-plugindirecta
Mavencom.baomidou:mybatis-plus-solon-plugin3.5.12directa
Mavencom.easy-query:sql-api-proxydirecta
Mavencom.easy-query:sql-api-proxy3.1.79directa
Mavencom.easy-query:sql-processordirecta
Mavencom.easy-query:sql-processor3.1.79directa
Mavencom.easy-query:sql-solon-plugindirecta
Mavencom.easy-query:sql-solon-plugin3.1.79directa
Mavencom.easy-query:sql-springboot-starterdirecta
Mavencom.easy-query:sql-springboot-starter3.1.79directa
Mavencom.easy-query:sql-springboot4-starterdirecta
Mavencom.easy-query:sql-springboot4-starter3.1.79directa
Mavencom.fasterxml.jackson.core:jackson-databinddirecta
Mavencom.fasterxml.jackson.core:jackson-databind2.13.5directa
Mavencom.google.code.gson:gsondirecta
Mavencom.google.code.gson:gson2.9.0directa
Mavenorg.dromara.warm:warm-flow-coredirecta
Mavenorg.dromara.warm:warm-flow-easy-query-coredirecta
Mavenorg.dromara.warm:warm-flow-easy-query-sb-starterdirecta
Mavenorg.dromara.warm:warm-flow-easy-query-sb3-starterdirecta
Mavenorg.dromara.warm:warm-flow-easy-query-sb4-starterdirecta
Mavenorg.dromara.warm:warm-flow-easy-query-solon-plugindirecta
Mavenorg.dromara.warm:warm-flow-mybatis-coredirecta
Mavenorg.dromara.warm:warm-flow-mybatis-plus-coredirecta
Mavenorg.dromara.warm:warm-flow-mybatis-plus-sb-starterdirecta
Mavenorg.dromara.warm:warm-flow-mybatis-plus-sb3-starterdirecta
Mavenorg.dromara.warm:warm-flow-mybatis-plus-sb4-starterdirecta
Mavenorg.dromara.warm:warm-flow-mybatis-plus-solon-plugindirecta
Mavenorg.dromara.warm:warm-flow-mybatis-sb-starterdirecta
Mavenorg.dromara.warm:warm-flow-mybatis-sb3-starterdirecta
Mavenorg.dromara.warm:warm-flow-mybatis-sb4-starterdirecta
Mavenorg.dromara.warm:warm-flow-mybatis-solon-plugindirecta
Mavenorg.dromara.warm:warm-flow-plugin-json-jackson3directa
Mavenorg.dromara.warm:warm-flow-plugin-json-v1directa
Mavenorg.dromara.warm:warm-flow-plugin-modes-sbdirecta
Mavenorg.dromara.warm:warm-flow-plugin-modes-solondirecta
Mavenorg.dromara.warm:warm-flow-plugin-ui-coredirecta
Mavenorg.dromara.warm:warm-flow-plugin-ui-sb-webdirecta
Mavenorg.dromara.warm:warm-flow-plugin-ui-solon-webdirecta
Mavenorg.dromara.warm:warm-flow-plugin-vue3-uidirecta
Mavenorg.mybatis.spring.boot:mybatis-spring-boot-starterdirecta
Mavenorg.mybatis.spring.boot:mybatis-spring-boot-starter2.3.2directa
Mavenorg.mybatis.spring.boot:mybatis-spring-boot-starter3.0.3directa
Mavenorg.mybatis.spring.boot:mybatis-spring-boot-starter4.0.1directa
Mavenorg.mybatis:mybatisdirecta
Mavenorg.mybatis:mybatis3.5.15directa
Mavenorg.noear:mybatis-plus-extension-solon-plugin3.10.0directa
Mavenorg.noear:mybatis-solon-plugindirecta
Mavenorg.noear:mybatis-solon-plugin3.10.0directa
Mavenorg.noear:snack3directa
Mavenorg.noear:snack33.2.139directa
Mavenorg.noear:snack4directa
Mavenorg.noear:snack44.0.8directa
Mavenorg.noear:solondirecta
Mavenorg.noear:solon3.10.0directa
Mavenorg.noear:solon-datadirecta
Mavenorg.noear:solon-data3.10.0directa
Mavenorg.noear:solon-logging-logback3.10.0directa
Mavenorg.noear:solon-web3.10.0directa
Mavenorg.noear:solon-web-staticfilesdirecta
Mavenorg.noear:solon-web-staticfiles3.10.0directa
Mavenorg.slf4j:slf4j-apidirecta
Mavenorg.slf4j:slf4j-api1.7.36directa
Mavenorg.springframework.boot:spring-boot-dependenciesdirecta
Mavenorg.springframework.boot:spring-boot-dependencies2.7.18directa
Maventools.jackson.core:jackson-databinddirecta
Maventools.jackson.core:jackson-databind3.0.4directa
npm@element-plus/icons-vue2.3.1directa
npm@element-plus/icons-vue2.3.2directa
npm@form-create/designer^3.2.6directa
npm@form-create/element-ui^3.2.10directa
npm@logicflow/core2.2.3directa
npm@logicflow/core^1.2.15directa
npm@logicflow/core^2.0.12directa
npm@logicflow/core^2.1.11directa
npm@logicflow/extension2.2.3directa
npm@logicflow/extension^1.2.16directa
npm@logicflow/extension^2.0.16directa
npm@logicflow/extension^2.1.15directa
npmaxios0.27.2directa
npmelement-plus2.4.3directa
npmfile-saver2.0.5directa
npmpinia2.1.7directa
npmvue3.3.9directa
npmvue-router4.2.5directa
Mavencom.baomidou:mybatis-plus-spring-boot3-starter3.5.12indirecta
Mavencom.baomidou:mybatis-plus-spring-boot4-starter3.5.15indirecta
Mavenjunit:junitindirecta
Mavenorg.apache.maven.plugins:maven-compiler-plugin3.8.1indirecta
Mavenorg.apache.maven.plugins:maven-deploy-plugin3.1.2indirecta
Mavenorg.apache.maven.plugins:maven-gpg-plugin1.6indirecta
Mavenorg.apache.maven.plugins:maven-jar-plugin3.2.0indirecta
Mavenorg.apache.maven.plugins:maven-javadoc-plugin2.10.4indirecta
Mavenorg.apache.maven.plugins:maven-source-plugin3.1.0indirecta
Mavenorg.projectlombok:lombokindirecta
Mavenorg.sonatype.central:central-publishing-maven-plugin0.6.0indirecta
Mavenorg.springframework.boot:spring-bootindirecta
Mavenorg.springframework.boot:spring-boot-autoconfigureindirecta
Mavenorg.springframework.boot:spring-boot-configuration-processorindirecta
Mavenorg.springframework:spring-contextindirecta
Mavenorg.springframework:spring-txindirecta
Mavenorg.springframework:spring-webmvcindirecta
npm@ant-design/colors6.0.0indirecta
npm@ant-design/icons-svg4.4.2indirecta
npm@ant-design/icons-vue6.1.0indirecta
npm@antfu/utils0.7.10indirecta
npm@antv/hierarchy0.6.11indirecta
npm@antv/util2.0.7indirecta
npm@babel/helper-string-parser7.29.7indirecta
npm@babel/helper-validator-identifier7.29.7indirecta
npm@babel/parser7.29.7indirecta
npm@babel/runtime7.29.7indirecta
npm@babel/types7.29.7indirecta
npm@css-render/plugin-bem0.15.14indirecta
npm@css-render/vue3-ssr0.15.14indirecta
npm@ctrl/tinycolor3.6.1indirecta
npm@emotion/hash0.8.0indirecta
npm@emotion/hash0.9.2indirecta
npm@emotion/unitless0.8.1indirecta
npm@esbuild/android-arm0.19.3indirecta
npm@esbuild/android-arm640.19.3indirecta
npm@esbuild/android-x640.19.3indirecta
npm@esbuild/darwin-arm640.19.3indirecta
npm@esbuild/darwin-x640.19.3indirecta
npm@esbuild/freebsd-arm640.19.3indirecta
npm@esbuild/freebsd-x640.19.3indirecta
npm@esbuild/linux-arm0.19.3indirecta
npm@esbuild/linux-arm640.19.3indirecta
npm@esbuild/linux-ia320.19.3indirecta
npm@esbuild/linux-loong640.19.3indirecta
npm@esbuild/linux-mips64el0.19.3indirecta
npm@esbuild/linux-ppc640.19.3indirecta
npm@esbuild/linux-riscv640.19.3indirecta
npm@esbuild/linux-s390x0.19.3indirecta
npm@esbuild/linux-x640.19.3indirecta
npm@esbuild/netbsd-x640.19.3indirecta
npm@esbuild/openbsd-x640.19.3indirecta
npm@esbuild/sunos-x640.19.3indirecta
npm@esbuild/win32-arm640.19.3indirecta
npm@esbuild/win32-ia320.19.3indirecta
npm@esbuild/win32-x640.19.3indirecta
npm@floating-ui/core1.7.5indirecta
npm@floating-ui/dom1.7.6indirecta
npm@floating-ui/utils0.2.11indirecta
npm@iconify-json/ep1.2.4indirecta
npm@iconify-json/ep^1.2.4indirecta
npm@iconify/types2.0.0indirecta
npm@iconify/vue5.0.1indirecta
npm@iconify/vue^5.0.1indirecta
npm@jridgewell/sourcemap-codec1.5.5indirecta
npm@juggle/resize-observer3.4.0indirecta
npm@nodelib/fs.scandir2.1.5indirecta
npm@nodelib/fs.stat2.0.5indirecta
npm@nodelib/fs.walk1.2.8indirecta
npm@rollup/pluginutils5.4.0indirecta
npm@rollup/rollup-android-arm-eabi4.62.2indirecta
npm@rollup/rollup-android-arm644.62.2indirecta
npm@rollup/rollup-darwin-arm644.62.2indirecta
npm@rollup/rollup-darwin-x644.62.2indirecta
npm@rollup/rollup-freebsd-arm644.62.2indirecta
npm@rollup/rollup-freebsd-x644.62.2indirecta
npm@rollup/rollup-linux-arm-gnueabihf4.62.2indirecta
npm@rollup/rollup-linux-arm-musleabihf4.62.2indirecta
npm@rollup/rollup-linux-arm64-gnu4.62.2indirecta
npm@rollup/rollup-linux-arm64-musl4.62.2indirecta
npm@rollup/rollup-linux-loong64-gnu4.62.2indirecta
npm@rollup/rollup-linux-loong64-musl4.62.2indirecta
npm@rollup/rollup-linux-ppc64-gnu4.62.2indirecta
npm@rollup/rollup-linux-ppc64-musl4.62.2indirecta
npm@rollup/rollup-linux-riscv64-gnu4.62.2indirecta
npm@rollup/rollup-linux-riscv64-musl4.62.2indirecta
npm@rollup/rollup-linux-s390x-gnu4.62.2indirecta
npm@rollup/rollup-linux-x64-gnu4.62.2indirecta
npm@rollup/rollup-linux-x64-musl4.62.2indirecta
npm@rollup/rollup-openbsd-x644.62.2indirecta
npm@rollup/rollup-openharmony-arm644.62.2indirecta
npm@rollup/rollup-win32-arm64-msvc4.62.2indirecta
npm@rollup/rollup-win32-ia32-msvc4.62.2indirecta
npm@rollup/rollup-win32-x64-gnu4.62.2indirecta
npm@rollup/rollup-win32-x64-msvc4.62.2indirecta
npm@simonwep/pickr1.8.2indirecta
npm@sphinxxxx/color-conversion2.2.2indirecta
npm@sxzz/popperjs-es2.11.8indirecta
npm@types/estree1.0.9indirecta
npm@types/lodash4.17.24indirecta
npm@types/lodash-es4.17.12indirecta
npm@types/web-bluetooth0.0.15indirecta
npm@vitejs/plugin-vue4.5.0indirecta
npm@volar/language-core2.4.28indirecta
npm@volar/source-map2.4.28indirecta
npm@volar/typescript2.4.28indirecta
npm@vue/compiler-core3.3.9indirecta
npm@vue/compiler-core3.5.38indirecta
npm@vue/compiler-dom3.3.9indirecta
npm@vue/compiler-dom3.5.38indirecta
npm@vue/compiler-sfc3.3.9indirecta
npm@vue/compiler-sfc3.5.38indirecta
npm@vue/compiler-ssr3.3.9indirecta
npm@vue/compiler-ssr3.5.38indirecta
npm@vue/devtools-api6.5.0indirecta
npm@vue/language-core3.3.5indirecta
npm@vue/language-core^3.3.5indirecta
npm@vue/reactivity3.3.9indirecta
npm@vue/reactivity-transform3.3.9indirecta
npm@vue/runtime-core3.3.9indirecta
npm@vue/runtime-dom3.3.9indirecta
npm@vue/server-renderer3.3.9indirecta
npm@vue/shared3.3.9indirecta
npm@vue/shared3.5.38indirecta
npm@vueuse/core9.1.0indirecta
npm@vueuse/metadata9.1.0indirecta
npm@vueuse/shared9.1.0indirecta
npmacorn8.17.0indirecta
npmalien-signals3.2.1indirecta
npmansi-styles4.3.0indirecta
npmant-design-vue4.0.0indirecta
npmant-design-vue^4.0.0indirecta
npmanymatch3.1.3indirecta
npmarray-tree-filter2.1.0indirecta
npmasync-validator4.2.5indirecta
npmasynckit0.4.0indirecta
npmbalanced-match1.0.0indirecta
npmbinary-extensions2.3.0indirecta
npmbrace-expansion2.1.1indirecta
npmbraces3.0.3indirecta
npmcall-bind-apply-helpers1.0.2indirecta
npmchalk4.1.2indirecta
npmchokidar3.6.0indirecta
npmclassnames2.5.1indirecta
npmcolor-convert2.0.1indirecta
npmcolor-name1.1.4indirecta
npmcombined-stream1.0.8indirecta
npmcompare-versions6.1.1indirecta
npmcompute-scroll-into-view1.0.20indirecta
npmconfbox0.1.8indirecta
npmconfbox0.2.4indirecta
npmcore-js3.49.0indirecta
npmcss-render0.15.14indirecta
npmcsstype3.0.11indirecta
npmcsstype3.2.3indirecta
npmdate-fns4.4.0indirecta
npmdate-fns-tz3.2.0indirecta
npmdayjs1.11.21indirecta
npmdebug4.4.3indirecta
npmdelayed-stream1.0.0indirecta
npmdom-align1.12.4indirecta
npmdom-scroll-into-view2.0.1indirecta
npmdunder-proto1.0.1indirecta
npmentities7.0.1indirecta
npmes-define-property1.0.1indirecta
npmes-errors1.3.0indirecta
npmes-object-atoms1.1.2indirecta
npmes-set-tostringtag2.1.0indirecta
npmesbuild0.19.3indirecta
npmescape-html1.0.3indirecta
npmescape-string-regexp5.0.0indirecta
npmestree-walker2.0.2indirecta
npmevtd0.2.4indirecta
npmexsolve1.1.0indirecta
npmfast-glob3.3.3indirecta
npmfastq1.20.1indirecta
npmfill-range7.1.1indirecta
npmfollow-redirects1.16.0indirecta
npmform-data4.0.6indirecta
npmfs-extra10.0.0indirecta
npmfsevents2.3.3indirecta
npmfunction-bind1.1.2indirecta
npmget-intrinsic1.3.0indirecta
npmget-proto1.0.1indirecta
npmglob-parent5.1.2indirecta
npmgopd1.2.0indirecta
npmgraceful-fs4.2.11indirecta
npmhas-flag4.0.0indirecta
npmhas-symbols1.1.0indirecta
npmhas-tostringtag1.0.2indirecta
npmhasown2.0.4indirecta
npmhighlight.js11.11.1indirecta
npmhoist-non-react-statics2.5.5indirecta
npmimmutable4.3.8indirecta
npmis-binary-path2.1.0indirecta
npmis-extglob2.1.1indirecta
npmis-glob4.0.3indirecta
npmis-number7.0.0indirecta
npmis-plain-object3.0.1indirecta
npmjs-cookie3.0.5indirecta
npmjs-tokens3.0.0indirecta
npmjsonc-parser3.2.0indirecta
npmjsonfile6.2.1indirecta
npmkolorist1.8.0indirecta
npmlocal-pkg0.5.0indirecta
npmlocal-pkg1.2.1indirecta
npmlodash4.18.1indirecta
npmlodash-es4.18.1indirecta
npmlodash-unified1.0.3indirecta
npmloose-envify1.4.0indirecta
npmmagic-string0.26.7indirecta
npmmagic-string0.30.21indirecta
npmmath-intrinsics1.1.0indirecta
npmmedium-editor5.23.3indirecta
npmmemoize-one6.0.0indirecta
npmmerge21.4.1indirecta
npmmicromatch4.0.8indirecta
npmmime-db1.52.0indirecta
npmmime-types2.1.35indirecta
npmminimatch9.0.9indirecta
npmmlly1.8.2indirecta
npmmobx5.15.7indirecta
npmmobx-preact3.0.0indirecta
npmmobx-utils5.6.2indirecta
npmmousetrap1.6.5indirecta
npmms2.1.3indirecta
npmmuggle-string0.4.1indirecta
npmnaive-ui2.44.1indirecta
npmnaive-ui^2.44.1indirecta
npmnanoid3.3.15indirecta
npmnanopop2.4.2indirecta
npmnormalize-path3.0.0indirecta
npmnormalize-wheel-es1.2.0indirecta
npmpath-browserify1.0.1indirecta
npmpathe1.1.2indirecta
npmpathe2.0.3indirecta
npmpicocolors1.1.1indirecta
npmpicomatch2.3.2indirecta
npmpicomatch4.0.4indirecta
npmpkg-types1.0.3indirecta
npmpkg-types1.3.1indirecta
npmpkg-types2.3.1indirecta
npmpostcss8.5.15indirecta
npmpreact10.29.2indirecta
npmquansync0.2.11indirecta
npmqueue-microtask1.2.3indirecta
npmrangy1.3.2indirecta
npmreaddirp3.6.0indirecta
npmresize-observer-polyfill1.5.1indirecta
npmreusify1.1.0indirecta
npmrollup4.62.2indirecta
npmrun-parallel1.2.0indirecta
npmsass1.69.5indirecta
npmscroll-into-view-if-needed2.2.31indirecta
npmscule1.3.0indirecta
npmseemly0.3.10indirecta
npmshallow-equal1.2.1indirecta
npmsource-map-js1.2.1indirecta
npmsourcemap-codec1.4.8indirecta
npmstrip-literal1.3.0indirecta
npmstylis4.4.0indirecta
npmsupports-color7.2.0indirecta
npmthrottle-debounce5.0.2indirecta
npmto-regex-range5.0.1indirecta
npmtreemate0.3.11indirecta
npmtslib1.14.1indirecta
npmtypescript5.3.3indirecta
npmtypescript6.0.3indirecta
npmtypescript^5.3.3indirecta
npmtypescript^6.0.3indirecta
npmufo1.6.4indirecta
npmunimport3.5.0indirecta
npmuniversalify2.0.1indirecta
npmunplugin1.3.1indirecta
npmunplugin1.5.1indirecta
npmunplugin2.3.2indirecta
npmunplugin-auto-import0.17.1indirecta
npmunplugin-dts1.0.2indirecta
npmunplugin-vue-setup-extend-plus1.0.0indirecta
npmuuid9.0.0indirecta
npmvanilla-picker2.12.3indirecta
npmvdirs0.1.8indirecta
npmvite5.0.4indirecta
npmvite-plugin-compression0.5.1indirecta
npmvite-plugin-dts5.0.2indirecta
npmvite-plugin-dts^5.0.2indirecta
npmvite-plugin-svg-icons2.0.1indirecta
npmvooks0.2.12indirecta
npmvscode-uri3.1.0indirecta
npmvue-demi0.14.10indirecta
npmvue-types3.0.0indirecta
npmvueuc0.4.65indirecta
npmwarning4.0.3indirecta
npmwebpack-sources3.5.0indirecta
npmwebpack-virtual-modules0.5.0indirecta
npmwebpack-virtual-modules0.6.2indirecta
Avisos de dependencias 0

Instalar maven:org.dromara.warm:warm-flow-core@1.8.9 arrastra 2 paquetes, directos y transitivos: 0 tienen avisos conocidos, de los cuales 0 son dependencias directas.

Ningún aviso conocido afecta a las dependencias evaluadas.

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": [
        "workflow"
      ],
      "is_fork": false,
      "size_kb": 47829,
      "has_wiki": true,
      "homepage": "http://www.warm-flow.cn",
      "languages": {
        "Vue": 524737,
        "HTML": 59807,
        "Java": 820498,
        "SCSS": 161003,
        "TSQL": 25101,
        "JavaScript": 130718,
        "TypeScript": 339949
      },
      "pushed_at": "2026-07-20T03:13:41Z",
      "created_at": "2024-01-02T09:13:48Z",
      "owner_type": "Organization",
      "updated_at": "2026-07-24T10:00:46Z",
      "description": "Warm-Flow国产工作流引擎🎉,其特点简洁轻量,五脏俱全,可扩展,是一个可通过jar引入设计器的工作流。。解决flowable和activities复杂、学习成本高和集成难等痛点。",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "Apache-2.0",
      "default_branch": "master",
      "license_spdx_raw": "Apache-2.0",
      "primary_language": "Java",
      "significant_languages": [
        "Java",
        "Vue",
        "TypeScript"
      ]
    },
    "owner": {
      "blog": "https://dromara.org",
      "name": "dromara",
      "type": "Organization",
      "login": "dromara",
      "company": null,
      "location": "china",
      "followers": 2875,
      "avatar_url": "https://avatars.githubusercontent.com/u/41095225?v=4",
      "created_at": "2018-07-11T02:08:30Z",
      "is_verified": null,
      "public_repos": 103,
      "account_age_days": 2936
    },
    "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": [
        {
          "tag": "v1.6.0-m4",
          "kind": "prerelease",
          "published_at": "2025-01-15T07:30:37Z"
        },
        {
          "tag": "v1.6.0-m3",
          "kind": "prerelease",
          "published_at": "2025-01-14T06:46:19Z"
        },
        {
          "tag": "v1.3.8",
          "kind": "patch",
          "published_at": "2025-01-08T03:00:40Z"
        },
        {
          "tag": "v1.3.7",
          "kind": "patch",
          "published_at": "2024-12-31T08:39:47Z"
        },
        {
          "tag": "v1.3.6",
          "kind": "patch",
          "published_at": "2024-12-31T01:29:17Z"
        },
        {
          "tag": "v1.3.4",
          "kind": "patch",
          "published_at": "2024-11-25T07:34:40Z"
        },
        {
          "tag": "v1.3.3",
          "kind": "patch",
          "published_at": "2024-11-12T16:25:47Z"
        },
        {
          "tag": "1.3.2-m1",
          "kind": "prerelease",
          "published_at": "2024-11-03T00:05:57Z"
        },
        {
          "tag": "v1.3.1",
          "kind": "patch",
          "published_at": "2024-10-31T16:51:53Z"
        },
        {
          "tag": "v1.3.0-m2",
          "kind": "prerelease",
          "published_at": "2024-10-21T07:12:57Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "37b17a8939f0931ab8c19d66b768050325da3bcf",
          "body": null,
          "is_bot": false,
          "headline": "upgrade: 升级1.8.9",
          "author_name": "warm",
          "author_login": "warmrui",
          "committed_at": "2026-07-14T07:37:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e63de723d1e2fb5a97529ba65a2e6d027016c87e",
          "body": "…e-ui-npm",
          "is_bot": false,
          "headline": "Merge branch 'dev' of https://gitee.com/dromara/warm-flow into featur…",
          "author_name": "warm",
          "author_login": "warmrui",
          "committed_at": "2026-06-30T03:20:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "854ba252bf25e1eb5b30506296ef6369fad8218e",
          "body": null,
          "is_bot": false,
          "headline": "[fix] 移动端查看设计器的时候,默认使用initMimicData.json来初始化为仿钉钉数据",
          "author_name": "warm",
          "author_login": "warmrui",
          "committed_at": "2026-06-30T03:17:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9d42dbe5b6da287bec26b023d8b2ab00c44428f0",
          "body": null,
          "is_bot": false,
          "headline": "[fix] 移动端查看设计器的时候,默认使用initMimicData.json来初始化为仿钉钉数据",
          "author_name": "warm",
          "author_login": "warmrui",
          "committed_at": "2026-06-30T02:50:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8b8699138c88992456238e3b0cf971cf74e52f24",
          "body": "- 新增缺失的 warm-flow-naive-designer-demo/README.md(pnpm + :5182 + naive 适配器子入口 + n-config-provider 说明)\n- 顶层 README:补 naive 行 + 三 demo 一致性说明 + 适配器子入口列;修正过时的 antdv4「过渡态/EP 驱动」描述;yarn/link → pnpm/workspace:*\n- EP README:yarn/link → pnpm/workspace:*(与 package.json 实际一致)\n- EP/antdv4 Hero chip 文案补 naive(EP/antd → EP/antd/naive),三 demo 文案一致\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "docs(demo): 补齐 naive demo README + 校正 demo 文档/文案覆盖",
          "author_name": "唐亚峰 | battcn",
          "author_login": "levin950825",
          "committed_at": "2026-06-27T15:27:57Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "288eda0de2cb12a89d286d256dbc6632e166c2e7",
          "body": "saveJsonModel 与 getFlowJson 的「基础信息 + 画布图数据 → warm-flow json」装配逻辑完全重复,\nsaveJsonModel 改为复用 getFlowJson(),单一来源、零行为变化。\n(保存流程编排因强耦合 lf/logicJson/定义id/baseInfoRef/emit 等内部状态,刻意不抽 composable 以免超宽接口。)\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "refactor(designer): FlowDesigner saveJsonModel 复用 getFlowJson 收口 json 装配",
          "author_name": "唐亚峰 | battcn",
          "author_login": "levin950825",
          "committed_at": "2026-06-27T15:22:46Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d7e437cc369214fa23c1b1943fd62f3bd8ba3707",
          "body": "记录 selectUser 拆分停在合理体量(562→214 行,逻辑层 + 3 内聚子组件);\n列表与选择状态强耦合、单独抽出需超宽接口,刻意保留在容器内联,不为凑行数过度拆分。\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "docs(designer): selectUser 拆分收口(遵循「不过度拆分」,列表保留内联)",
          "author_name": "唐亚峰 | battcn",
          "author_login": "levin950825",
          "committed_at": "2026-06-27T15:18:33Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "7f45335bcf115607aef0ac74d1c6f901bf514a60",
          "body": "标记 UserPickerSearch 完成,剩余仅列表子组件。\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "docs(designer): 更新工程化重构 Roadmap todo(selectUser 搜索区拆分)",
          "author_name": "唐亚峰 | battcn",
          "author_login": "levin950825",
          "committed_at": "2026-06-27T15:16:25Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "7a43a9f1e7bf06c774c09fdcb3de3f0ef99d1c18",
          "body": "selectUser.vue 搜索区两块替换为 UserPickerSearch,useUserPicker 移除 showSearch/searchCollapsed,\nscoped 样式按关注点从交错的移动端 @media 精确剥离搜索规则(保留列表/布局);SFC 256→214 行,零观感。\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "refactor(designer): selectUser 接入 UserPickerSearch 子组件并迁出搜索样式",
          "author_name": "唐亚峰 | battcn",
          "author_login": "levin950825",
          "committed_at": "2026-06-27T15:16:25Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "2688bc87494ce5f381d580f57aef0175a2b56035",
          "body": "移动端筛选切换 + 查询表单(权限编码/名称/创建时间 + 查询/重置/确定)抽为子组件,自带 scoped 样式;\nqueryParams 共享对象入、dateRange 走 v-model、query/reset/confirm 事件出,\nsearchCollapsed/showSearch 内部化,el-form resetFields 经 defineExpose 转发给父。\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "refactor(designer): 新增 UserPickerSearch 子组件(selectUser 搜索区)",
          "author_name": "唐亚峰 | battcn",
          "author_login": "levin950825",
          "committed_at": "2026-06-27T15:16:25Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "98e024018db236ea8883a5a640506aaaa8396150",
          "body": "标记 useUserPicker / UserPickerTree / UserPickerSelectedBar 完成,更新 ④ 剩余项。\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "docs(designer): 更新工程化重构 Roadmap todo(selectUser 拆分进度)",
          "author_name": "唐亚峰 | battcn",
          "author_login": "levin950825",
          "committed_at": "2026-06-27T15:09:43Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "81ae86830d33fa93d7b68f8a33279e42d55edf85",
          "body": "…件并迁出样式\n\nselectUser.vue 改为消费 useUserPicker + 渲染 UserPickerTree/UserPickerSelectedBar,\nscoped 样式迁出树与已选栏到各子组件;SFC 562→256 行,模板/逻辑/样式分层,零观感。\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "refactor(designer): selectUser 接入 useUserPicker 与 Tree/SelectedBar 子组…",
          "author_name": "唐亚峰 | battcn",
          "author_login": "levin950825",
          "committed_at": "2026-06-27T15:09:43Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "02db5e397f1d9f7b2e43ecf0cdd9260d65f446ae",
          "body": "已选提示栏(计数+mini-tag+「+N更多」tooltip+清空)抽为子组件,自带 scoped 样式;\nselected 入、close/clear 事件出,visibleTags 内部计算,无 ref 透传。\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "refactor(designer): 新增 UserPickerSelectedBar 子组件(selectUser 已选栏)",
          "author_name": "唐亚峰 | battcn",
          "author_login": "levin950825",
          "committed_at": "2026-06-27T15:09:43Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "056c9cd85ab87601675dab874a1210cd5b7c034c",
          "body": "左侧组织架构树(卡片+可折叠+部门搜索+el-tree)抽为子组件,自带 scoped 样式;\ngroupOptions 入、groupName/treeCollapsed 走 v-model、node-click 事件出,\nel-tree 的 filter/setCurrentKey 经 defineExpose 转发给父。\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "refactor(designer): 新增 UserPickerTree 子组件(selectUser 组织架构树)",
          "author_name": "唐亚峰 | battcn",
          "author_login": "levin950825",
          "committed_at": "2026-06-27T15:09:43Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "0adb926a5533f5f18da7d21797dc036f0cc02bfc",
          "body": "把办理人选择弹窗的全部 state / 数据请求 / 勾选与已选维护抽到 src/composables/useUserPicker.ts,\n去除 getCurrentInstance proxy,改用模板 ref + nextTick,为 SFC 只留模板+编排做准备(Roadmap ④/⑥)。\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "refactor(designer): selectUser 抽出 useUserPicker composable 收口逻辑层",
          "author_name": "唐亚峰 | battcn",
          "author_login": "levin950825",
          "committed_at": "2026-06-27T15:09:43Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "6902eb854acc2ceb00fd38428b63ab53699f0a4e",
          "body": "Co-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "docs(designer): 更新工程化重构 Roadmap todo 进度(② 样式工程化 / ④ SFC 拆分)",
          "author_name": "唐亚峰 | battcn",
          "author_login": "levin950825",
          "committed_at": "2026-06-27T14:15:18Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "328c5aa4c9cd6e0ebbba98faa8283d6eca339922",
          "body": "- 根因:新建流程 definition.formCustom 为 null,经 logicJson 合并覆盖 baseInfo 默认值 \"N\",\n  wf-switch 失去取值,点「流程设计」触发 formCustom required 校验失败而被拦截\n- 修复:baseInfo 合并 logicJson 后兜底 formCustom 为 \"N\",对齐 propertySetting 的空值默认范式\n- 已 Playwright 验证:新建流程可正常切到流程设计,校验失败字段不再含 formCustom\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "fix(designer): 修复新建流程「自定义表单」默认值缺失导致无法进入流程设计",
          "author_name": "唐亚峰 | battcn",
          "author_login": "levin950825",
          "committed_at": "2026-06-27T14:15:09Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "81416651e110bf0573fd471cf38c8a3c40d79aa7",
          "body": "- FlowDesignerHeader:顶部导航(流程名 + 步骤切换 + 保存),props 入 / 事件出,header-* 插槽条件转发\n- FlowDesignerToolbar:画布工具栏(缩放/适应/撤销/重做/清空/下载/只读态保存),事件出,toolbar-extra 插槽条件转发\n- 状态仍由 FlowDesigner 容器持有,子组件纯展示编排;样式沿用全局类,零样式迁移\n- 已 build:lib + EP demo Playwright 验证:渲染一致、步骤/保存/缩放链路正常\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "refactor(designer): god SFC 拆分 Roadmap ④ — 抽出 Header/Toolbar 子组件",
          "author_name": "唐亚峰 | battcn",
          "author_login": "levin950825",
          "committed_at": "2026-06-27T14:14:51Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "3683e2a04bf77305af26711bca856dcb55867106",
          "body": "- token 静态层:新增 tokens.scss,themeConfig/index.scss/_common.scss 收敛 --wf-* 来源\n- 去回退值:组件 var(--wf-x, fallback) 收敛为 var(--wf-x)(token 已随库下发,回退值为死代码,零观感变化)\n- 分层抽取:selectUser/baseInfo/between/nodeExtList/propertySetting 巨型内联 <style> 外移到同目录 .scss partial(CSS 字节比对验证零观感)\n- FlowDesigner.vue 仅含本提交的样式层(token 静态层 + 去回退值)\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "refactor(designer): 样式工程化 Roadmap ② — token 归口 + 去回退值 + 样式分层抽取",
          "author_name": "唐亚峰 | battcn",
          "author_login": "levin950825",
          "committed_at": "2026-06-27T14:14:32Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "5eb2d31bd2671afc2a3c23df095885c7be048d75",
          "body": "…()(组件文案抽取收官)\n\nnodeExtList:扩展属性必填校验消息({label}不能为空 插值)、请输入(common)/选择(between.selectHandler)/人员选择(between.userSelectTitle)。\nbaseNode(仿钉钉节点视图):默认节点名 发起人 / 默认办理人 所有人 t() 化。\nEdgeTooltip(边加节点菜单):审批 + 互斥/并行/包含网关(后三复用 sidebar.*)。\ncatalog 新增 edgeTooltip/baseNode/nodeExtList 命名空间(中英齐全)。\n至此设计器全部组件用户可见文案完成 i18n 抽取(仅余开发注释),消费方 setLocale('en') 即全量切英文;同步 todo 勾选 ①。\n验证:build:lib 四产物 exit 0、0 error TS、0 lint、es.js 340.03KB。\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "feat(designer): i18n 抽取批次7b — nodeExtList/baseNode/EdgeTooltip 文案接入 t…",
          "author_name": "唐亚峰 | battcn",
          "author_login": "levin950825",
          "committed_at": "2026-06-27T11:41:34Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "203f02f65cd7697233f07ae356b5d7e8ae995e3b",
          "body": "FlowDesigner 全部用户可见文案 t() 化:流程名占位(未命名流程)、保存按钮(复用 common.save)、\n工具栏 tooltip(缩小/自适应/放大/上一步/下一步/清空/下载流程图/下载JSON/保存)、加载态(common.loading)/空态(暂无流程定义)、\n步骤 steps(基础信息/流程设计,改 computed 随 setLocale 响应式)、保存中 loading 文案、保存成功提示、\nvalidateStructure 结构校验错误(缺少开始/结束节点、孤立节点 {n} 插值)。\ncatalog 新增 flowDesigner 命名空间(中英齐全)。验证:build:lib 四产物 exit 0、0 error TS、0 lint、es.js 339.40KB。\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "feat(designer): i18n 抽取批次7a — FlowDesigner 主组件文案接入 t()",
          "author_name": "唐亚峰 | battcn",
          "author_login": "levin950825",
          "committed_at": "2026-06-27T11:37:48Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "db3c35a23b729f91f4ee377f2d2723ed67018690",
          "body": "selectUser 全部用户可见文案 t() 化:组织架构树/搜索部门、筛选切换、搜索表单(权限编码/名称/创建时间标签与占位、\n开始/结束日期、搜索/重置/确定)、已选提示(已选择 N 项/+N 更多/清空)、移动端加载态(加载中/已加载全部/暂无数据)、\n表格空态/列标题(权限名称/编码/入库主键/分组/创建时间)、columns 配置数组标签;tabsList 为后端数据不译。\ncatalog 新增 selectUser 命名空间(中英齐全),权限名称/入库主键复用 between.*、搜索/重置/确定/暂无数据复用 common.*。\n验证:build:lib 四产物 exit 0、0 error TS、0 lint、es.js 337.79KB;仅余开发注释。\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "feat(designer): i18n 抽取批次6 — selectUser 办理人选择弹窗文案接入 t()",
          "author_name": "唐亚峰 | battcn",
          "author_login": "levin950825",
          "committed_at": "2026-06-27T11:32:52Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "746ff9a056a3b2ba84d17f81026d978ec647fb59",
          "body": "between 脚本剩余用户文案 t() 化:rules(请输入→common.pleaseInput、监听器类型/路径必填→between.*)、\nvalidatePassRatio/validatePassCount 数值校验消息(between.ratio*)、表达式校验器(default/spel/snel 复用 skip.*)、\ngetNodeRatioDescription 比例提示(between.descPassRatio/PassCount/RejectCount/Default + skip.descSpel/Snel)。\ncatalog between 命名空间补脚本键(中英齐全)。至此 between.vue 用户可见文案全部 i18n(仅余开发注释)。\n验证:build:lib 四产物 exit 0、0 error TS、0 lint、es.js 336.02KB。\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "feat(designer): i18n 抽取批次5b — between 脚本校验/提示文案接入 t()(between 全量完成)",
          "author_name": "唐亚峰 | battcn",
          "author_login": "levin950825",
          "committed_at": "2026-06-27T11:28:32Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "253d84df12a9ece143c82f51e6dd5a8ef8941cc9",
          "body": "between(审批节点,文案最大)模板全部用户可见文案 t() 化:tab(基础设置/办理人设置/监听器,复用 start.* + between.tabHandler)、\n扩展标签、节点编码/名称、协作方式(或签/票签/会签 + 三段 tooltip)、票签策略与 6 个策略选项、驳回到指定节点 + 票签提示、\n自定义表单(是/否 + 两段 tooltip)、表单路径/唯一标识、节点扩展属性({n}项 插值)、办理人表格(入库主键/权限名称/操作/添加行/选择)、\n监听器表格、人员选择对话框标题;tabsList base 三标签随抽屉重挂载等价响应式(动态 tab 为后端数据不译)。\ncatalog 新增 between 命名空间(模板键,中英齐全)。脚本校验/比例描述提示留批次 5b。\n验证:build:lib 四产物 exit 0、0 error TS、0 lint、es.js 334.30KB。\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "feat(designer): i18n 抽取批次5a — between 模板文案接入 t()",
          "author_name": "唐亚峰 | battcn",
          "author_login": "levin950825",
          "committed_at": "2026-06-27T11:24:49Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "27120bb7452f8724937b99df4a02bb0c4169dd97",
          "body": "baseInfo 全部用户可见文案 t() 化:基本配置/监听器配置分区标题、流程编码/名称/类别/自定义表单/表单路径(唯一标识)\n标签与占位、设计器模型卡片(经典/仿钉钉标题+描述+切换警告+移动端警告)、自定义表单开关是/否与提示、监听器表格\n(空态/类型/路径/操作/增加行/选项);rules 由静态对象改为 computed + t() 使校验消息随 setLocale 响应式。\ncatalog 新增 baseInfo 命名空间 + common.yes/no(中英齐全),监听类型选项复用 start.*。\n验证:build:lib 四产物 exit 0、0 error TS、0 lint、es.js 330.60KB;仅余开发注释。\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "feat(designer): i18n 抽取批次4 — baseInfo 基础信息表单文案接入 t()",
          "author_name": "唐亚峰 | battcn",
          "author_login": "levin950825",
          "committed_at": "2026-06-27T11:19:51Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "9304cbc31698de9efc9b1aabb5fe43287bc2e8c6",
          "body": "DiagramSidebar:节点默认列表原在 defineProps 工厂(hoisted,无法用 setup t()),重构为 setup 内 computed 默认\n(defaultFlowNodes/defaultGatewayNodes 走 t() 随 setLocale 响应式)+ effectiveFlowNodes/effectiveGatewayNodes\n(props.* ?? 默认,`[]` 不回落、保留「传 [] 隐藏分组」语义);基础节点/网关节点标题 t() 化。\npropertySetting:7 个抽屉标题(设置边/各网关/开始/结束/中间属性)computed 内 t() 化。\ncatalog 新增 sidebar / property 命名空间(中英齐全)。验证:build:lib 四产物 exit 0、0 error TS、0 lint、es.js 326.87KB;仅余开发注释。\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "feat(designer): i18n 抽取批次3 — DiagramSidebar/propertySetting 文案接入 t()",
          "author_name": "唐亚峰 | battcn",
          "author_login": "levin950825",
          "committed_at": "2026-06-27T11:16:32Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "5057b9a1c7488f25b13ba3652dd248e9a301381b",
          "body": "skip.vue 全部用户可见文案 t() 化:跳转名称/类型/条件标签、审批通过/退回、11 个条件运算符(大于…不包含/默认)、\n占位符、表单校验消息(required + 各表达式校验)、getConditionDescription 表达式提示;spel/snel 技术码保留不译。\ncatalog 新增 skip 命名空间(中英齐全)。验证:build:lib 四产物 exit 0、0 error TS、0 lint、es.js 325.71KB;仅余开发注释。\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "feat(designer): i18n 抽取批次2 — skip 边/条件面板文案接入 t()",
          "author_name": "唐亚峰 | battcn",
          "author_login": "levin950825",
          "committed_at": "2026-06-27T11:13:42Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "57d73baa36a03f5d2944270fe9d73d3c694b6b36",
          "body": "确立 i18n 迁移模式(建立参考样板):组件 import { useI18n } + const { t } = useI18n(),\n模板文案 :label/:placeholder/插值改 t('ns.key'),脚本静态文案(如 tabsList)改 computed 用 t() 以随 setLocale 响应式刷新。\ncatalog 新增 node(节点编码/名称标签)+ start(基础设置/监听器 tab、监听类型选项、路径)命名空间,并补充 common(请选择/请输入/增加行/操作/类型),中英齐全。\n3 个面板用户可见文案全部走 t()(仅余开发注释)。验证:build:lib 四产物 exit 0、0 error TS、0 lint、es.js 323.14KB。\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "feat(designer): i18n 抽取批次1 — start/end/gateway 节点面板文案接入 t()",
          "author_name": "唐亚峰 | battcn",
          "author_login": "levin950825",
          "committed_at": "2026-06-27T11:10:32Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "e0d738bc7c77e96c5f9d8b15243ea6ac85ff6236",
          "body": "代码 review 诊断:4 个 god SFC >1100 行(selectUser/FlowDesigner/between/baseInfo),主因超大内嵌 SCSS\n(baseInfo 844 / selectUser 771 行样式块,暗黑/表单/抽屉/.el-* 覆盖各组件重复)+ 大脚本混编 + --wf-* token 仅 18 个不成体系。\n据此在 todo 新增「工程化重构 Roadmap」:①i18n 文案分批抽取(最高优先)②样式 token+分层 ③EP 样式归位 ④god SFC 拆分 ⑤属性面板 schema 化 ⑥逻辑分层;均纯增量、对外契约稳定、每步 build+demo 验证。\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "docs(designer): todo 记录工程化重构 Roadmap + i18n 抽取批次(代码 review 结论)",
          "author_name": "唐亚峰 | battcn",
          "author_login": "levin950825",
          "committed_at": "2026-06-27T11:03:46Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "951a9ad9762509a1994a0209e81d34685fa1bae0",
          "body": "新增 src/i18n:响应式当前语言 + 点分 key catalog + {name} 占位插值,零依赖(不引 vue-i18n),\n与 set* 插件风格一致。API:setLocale/getLocale、useI18n(返回响应式 locale + t)、setMessages(深合并扩展/覆盖语言包)、\ntranslate(独立翻译,缺失回落中文、再回落 path 原样)。默认 zh 向后兼容;中英 common 文案起步;入口统一导出(dts 正常无 any 退化)。\n组件硬编码中文(46 文件约 1981 行)将分批迁移到 t(),迁移完成即随 setLocale 全量生效。\n验证:build:lib 四产物 exit 0,0 error TS,es.js 321.64KB。\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "feat(designer): i18n 框架骨架(setLocale + useI18n + 中英 catalog,零依赖)",
          "author_name": "唐亚峰 | battcn",
          "author_login": "levin950825",
          "committed_at": "2026-06-27T10:55:21Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "0bbae27644f1f1fd1918083ca7ba3845a5c560f1",
          "body": "深入 EP 样式「步骤 A」时复核发现:src ~120 个 .el-* 选择器全为 EP-DOM 作用域(.el-tabs__item/.el-dropdown/.el-table…),\n对 antdv/naive 永不命中=惰性死 CSS;仅有的 2 处无兜底 var(--el-*) 消费也在 EP 专属选择器内,对非 EP 渲染无影响。\n即给 --el-* 加 fallback 的「步骤 A」对解耦是 no-op。结合 .codex 9.5(antdv demo 完全移除 EP、playwright 0 错),\nEP 硬依赖功能上已彻底解耦。据实精修 todo:Phase 4 余下仅为可选 bundle 瘦身(剥离非 EP 死 .el-* CSS),非功能必需、低优先。\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "docs(designer): 复核确认 EP 硬依赖功能上已解耦,剩余样式层属可选瘦身",
          "author_name": "唐亚峰 | battcn",
          "author_login": "levin950825",
          "committed_at": "2026-06-27T10:52:39Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "cec4c2781e9c7fe9391fdd5a5d04f4ca36c08dae",
          "body": "经代码复核发现 todo 待拍板「剔除 Element Plus 硬依赖」严重滞后:实际 JS/依赖/适配器层已全程落地\n(路线 C 全走完、主 bundle element-plus=0、EP/antdv/naive 均为可选 peer),仅剩 Phase 4 样式层\n(12 个 --el-* 变量 + 35 个 .el-* 选择器)+ form-create antdv 化(Q2 暂留)。据实重写该条;\n「已具备·插拔」补 naive(naiveAdapter 已内置)。\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "docs(designer): 校正 todo.md 滞后项(EP 解耦实际进度 + naive 适配器)",
          "author_name": "唐亚峰 | battcn",
          "author_login": "levin950825",
          "committed_at": "2026-06-27T10:49:12Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "1b683090086a269544c099481418dd66275ef510",
          "body": "README 新增「自定义 UiAdapter(适配未内置的 UI 库)」章节:UiAdapter 契约要点、最小实现示例\n(message/notify/alert/confirm/prompt/loading + clickOutside/loadingDirective + components 映射)与最佳实践\n(脱上下文调用、注册时机、取消即 reject、参考内置三适配器)。\nDataProvider 段补全方法清单(均 Promise、对齐 {code,msg,data})、部分覆盖合并回退、失败要抛、参考实现。\n同步 todo 勾选该文档项。\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "docs(designer): 补自定义 UiAdapter 编写指南 + DataProvider 契约与最佳实践",
          "author_name": "唐亚峰 | battcn",
          "author_login": "levin950825",
          "committed_at": "2026-06-27T10:40:19Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "0151bba74d787c6fce00f0d295c48cf29d54c44b",
          "body": "经典 + 仿钉钉节点视图的 getShape/getSvg/getIconShape/getLabelShape 返回 h(...)(LogicFlow 底层 preact),\ndts 生成阶段推断到 preact VNode/ClassAttributes 无法可移植命名,每次 build 必刷 14 处 TS2883。\n统一补显式返回类型 h.JSX.Element(h 取自 @logicflow/core,与 LogicFlow 自身 d.ts 用法一致,可命名、不直接引 preact),\n覆盖 mimic/js/{gatewayView,parallel,serial,inclusive} 与 classics/js/{between,start,end,parallel,serial,inclusive} 共 10 处。\n验证:build:lib 四产物 exit 0,TS2883 计数 0、error TS 计数 0;纯类型注解,无运行时行为变更。\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "fix(designer): 消除节点视图 getShape/getSvg 的 TS2883 dts 告警",
          "author_name": "唐亚峰 | battcn",
          "author_login": "levin950825",
          "committed_at": "2026-06-27T10:38:51Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "f6ba96a7f8d655ef927c39b8df8ac999bc0b5a92",
          "body": "EP / antdv / naive 三个 demo「集成案例」接入 structureValidator 示例校验器 + 「校验结构」命令按钮(经 validateStructure() 输出日志)。\nREADME 补 structureValidator prop 与 validateStructure 命令式 API(含返回值说明);todo 新增「⑦ 流程结构校验」完成项并从待排期移除该钩子。\n验证:build:lib 四产物 exit 0(es.js 319.95KB);EP/antdv/naive 三 demo vite build 均 exit 0。\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "test(designer-demo): 三 demo 接入流程结构校验;同步 README/todo",
          "author_name": "唐亚峰 | battcn",
          "author_login": "levin950825",
          "committed_at": "2026-06-27T10:34:38Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "7353d1a1788b116d4efa5d7c8fdb3b69cd6cf662",
          "body": "命令式 validateStructure() 返回 { valid, errors }:内置校验 ≥1 开始节点 / ≥1 结束节点 /\n无孤立节点(多节点时存在未连任何边的节点),再追加 props.structureValidator 自定义规则并合并 errors。\n不自动拦截保存,可在 before-save 据 valid 决定 preventDefault()。\n新增 FlowStructureValidateResult 类型并经 designer/index.ts re-export;FlowDesignerInstance 补\nvalidateStructure;useFlowDesigner 同步该方法(空安全回退)。纯增量,向后兼容。\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "feat(designer): 新增流程结构校验 validateStructure() + structureValidator prop",
          "author_name": "唐亚峰 | battcn",
          "author_login": "levin950825",
          "committed_at": "2026-06-27T10:34:31Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "50e3d7f1fde98c86878db66df7bc6e5734897c45",
          "body": "- 完成设计器适配闭环验证后补本地化:n-config-provider :locale=zhCN :date-locale=dateZhCN\n- 使属性面板内未显式传 placeholder 的 select/input、日期选择、分页等默认文案由英文转中文(如「请选择/请输入」)\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "test(designer-demo): naive demo 根 n-config-provider 注入 zhCN 语言包",
          "author_name": "唐亚峰 | battcn",
          "author_login": "levin950825",
          "committed_at": "2026-06-26T03:54:04Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "2c78693c448e5bbec815d81056c7bad7b4993ad2",
          "body": "- .gitignore 补 naive demo 的 dist/ / node_modules/ / .playwright-cli/(与 ep/antd demo 对齐)\n- 移除上一提交误纳入的 naive demo dist/ 构建产物\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "chore: 忽略 naive demo 构建产物,移除误提交的 dist/",
          "author_name": "唐亚峰 | battcn",
          "author_login": "levin950825",
          "committed_at": "2026-06-26T03:49:04Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "39cd7a8be43a6de3a08b29e0d86ecac5ae25183b",
          "body": "- 第三方业务工程姿势消费 dist-lib + setUiAdapter(naiveAdapter),与 ep/antd demo 对称:列表 CRUD(n-data-table/n-tag/discrete message/dialog)+ 新建/修改/预览/扩展能力验证/集成案例\n- 集成案例右侧实时面板:useFlowDesigner 命令式工具条 + 事件日志 + useFlowJson 实时 JSON;根包 n-config-provider 消除组件 config-provider 注入告警\n- 复用 demoProvider(localStorage 持久化),UI 库无关\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "test(designer-demo): 新增 Naive UI 消费 demo(:5182,含集成案例)",
          "author_name": "唐亚峰 | battcn",
          "author_login": "levin950825",
          "committed_at": "2026-06-26T03:48:34Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "065efb94c8646fff1a5d2a0e28b086d48942011b",
          "body": "- src/ui/naiveAdapter.ts:实现 UiAdapter 28 组件映射(n-* 翻译为 el-* 风格 props/v-model/插槽)+ 命令式反馈 + 自实现 clickOutside/loading 指令\n- Naive 的 message/dialog/notification 为 provider 上下文式 API,用 createDiscreteApi(懒初始化)取脱上下文实例供命令式方法调用\n- vite.naive.config.js 子入口构建 → dist-lib/naive.es.js;package.json 加 ./naive 导出 + build:lib 四构建 + naive-ui 可选 peer/devDep\n- README / 模块 AGENTS / todo 同步「三选一 UI 适配器」与子入口矩阵\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "feat(designer): 新增 Naive UI 适配器子入口 @dromara/warm-flow-designer/naive",
          "author_name": "唐亚峰 | battcn",
          "author_login": "levin950825",
          "committed_at": "2026-06-26T03:48:26Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "ddb9b60028bba87eeab143305df1181866715d50",
          "body": "- EP/antdv demo 新增「集成案例」入口:直达画布 + 右侧实时面板,把扩展点做成可见集成示例\n- 面板含 useFlowDesigner 命令式工具条(放大/缩小/适应/撤销/重做/导出JSON/标记已存)、事件日志(ready/node-click/change/dirty/before-save/validate-error 实时滚动)、useFlowJson 实时流程 JSON 与未保存指示\n- 复用既有扩展夹具(customNodes/extraExtensions/lfOptions/paletteNodes),useFlowDesigner 与 useFlowJson 共享同一模板 ref\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "test(designer-demo): 新增「集成案例」展示——实时 JSON + 事件日志 + 命令式工具条",
          "author_name": "唐亚峰 | battcn",
          "author_login": "levin950825",
          "committed_at": "2026-06-26T03:34:06Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "b172bf9bcf7bf5353a8c3868595eaa634ac67d89",
          "body": "…y/header-center;同步 README/todo\n\n- EP/antdv「扩展能力验证」接入 @node-click、v-model:json(跨模式重置避免串数据)、#loading/#empty 插槽,置 window 标记供冒烟断言\n- README 补 node-click/update:json 事件、json(v-model) prop、loading/empty/header-center 插槽\n- todo.md roadmap ⑥ 标记完成\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "test(designer-demo): demo 验证 node-click + v-model:json + loading/empt…",
          "author_name": "唐亚峰 | battcn",
          "author_login": "levin950825",
          "committed_at": "2026-06-26T03:03:27Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "49ca7d252f4b37e2a7e79db58c0d3adebba8702d",
          "body": "…r-center 插槽\n\n- node-click:经典/仿钉钉双模式节点点击透出 { id, type, data, lf }\n- v-model:json:新增 json prop(优先级 json>initialJson>definitionId)+ update:json,受控时画布变更回写;初始注入+变更回写(单向写出),不做运行时反向重渲染(外部重载走 :key,规避回环/撤销历史丢失)\n- #loading / #empty 插槽:初始加载中 / 加载后无可用定义的覆盖层,带默认回退\n- #header-center 插槽:替换步骤切换区,透出 { activeStep, steps, goToStep }\n- 新增 FlowDesignerNodeClickPayload 类型并导出;纯加法、向后兼容\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "feat(designer): 新增 node-click 事件 + v-model:json + loading/empty/heade…",
          "author_name": "唐亚峰 | battcn",
          "author_login": "levin950825",
          "committed_at": "2026-06-26T03:03:20Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "1c86c493939f66d3a686074517f17c76eba3fa20",
          "body": "- EP/antdv「扩展能力验证」接入 @validate-error 与 useFlowJson(模板 ref + 在 @ready/@change 调用 sync),置 window 标记供冒烟断言\n- README 补 validate-error 事件与 useFlowJson hook 用法(含 bind 与单独事件冲突的提示)\n- todo.md roadmap ⑤ 标记完成\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "test(designer-demo): demo 验证 validate-error + useFlowJson;同步 README/todo",
          "author_name": "唐亚峰 | battcn",
          "author_login": "levin950825",
          "committed_at": "2026-06-26T02:52:24Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d87be49182401657c8fb2e8a0eb15c1a8e1e2d05",
          "body": "- validate-error:基础信息校验失败时透出 { source: save/step/api, fields? };baseInfo 透出 EP 无效字段(antd 适配器仅布尔、fields 为空);onlyDesignShow 无校验不触发\n- useFlowJson(designerRef):流程 json 响应式只读视图 { json, data, dirty, sync, bind },单向读(写入仍走 initialJson + :key 重挂载,规避 v-model:json 回环)\n- 新增 FlowDesignerValidateErrorPayload / UseFlowJsonReturn 类型并统一导出;纯加法、向后兼容\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "feat(designer): 新增 validate-error 事件 + useFlowJson 响应式 json hook",
          "author_name": "唐亚峰 | battcn",
          "author_login": "levin950825",
          "committed_at": "2026-06-26T02:52:17Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "bc8fbf61c78512c7311222a4af5b814733592cb0",
          "body": "…同步 README/todo\n\n- EP/antdv「扩展能力验证」接入 paletteNodes(自定义标签 + 空数组隐藏网关组)与 @before-save/@change/@dirty/@ready,置 window 标记供冒烟断言\n- README 补 paletteNodes prop、before-save/change/dirty 事件、sidebar 插槽、isDirty/resetDirty 命令式 API\n- todo.md roadmap ④ 标记完成(事件补全 + 拖拽侧边栏可配置)\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "test(designer-demo): demo 验证 before-save/change/dirty + paletteNodes;…",
          "author_name": "唐亚峰 | battcn",
          "author_login": "levin950825",
          "committed_at": "2026-06-26T02:42:15Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d0fc5b492ddbb20967f7e4f8fde2840d25346eab",
          "body": "…r 拖拽面板可配置\n\n- before-save:保存提交前同步事件,可 setJson 改写 payload 或 preventDefault 取消\n- change/dirty:基于 LogicFlow history:change 的画布变更与未保存状态信号(canvasReady 守卫初始渲染不误标);补 isDirty()/resetDirty() 命令式 API\n- paletteNodes:开放经典模式 DiagramSidebar 的 flowNodes/gatewayNodes(传 [] 隐藏分组),PaletteNode.icon 改可选\n- #sidebar 插槽:整体替换内置拖拽面板,透出 dragInNode/lf/disabled\n- 新增 FlowDesignerBeforeSavePayload/FlowDesignerChangePayload/PaletteNode/FlowDesignerPaletteNodes 类型并统一导出;纯加法、向后兼容\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "feat(designer): 新增 before-save/change/dirty 事件 + paletteNodes/#sideba…",
          "author_name": "唐亚峰 | battcn",
          "author_login": "levin950825",
          "committed_at": "2026-06-26T02:42:08Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "a8e33f8055de5779ed7eeb7bef23c3eb0e9b41ce",
          "body": "…同步 README/todo\n\n两个 demo(EP/antdv)将逐个细粒度 props 折叠为 v-bind=\"designProps\",证明对象式消费\n无需组件提供单一 designProps prop,仍保留 per-prop 默认值/模板类型校验/DevTools 粒度。\n扩展能力验证入口新增 onBeforeUse/onRegister 验证用例(window.__WF_VALIDATE_*__ 断言 +\n复测前复位),Playwright 实跑两钩子 true、自定义节点命令式注册成功。\n\nREADME 补全组件库 props/事件/插槽/命令式 API 与 setUiAdapter 安装步骤;\ntodo.md 同步 roadmap ②③ 完成态,并登记仿钉钉节点 TS2883 dts 已知项。\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "test(designer-demo): demo 改 v-bind 对象式消费 + onBeforeUse/onRegister 验证;…",
          "author_name": "唐亚峰 | battcn",
          "author_login": "levin950825",
          "committed_at": "2026-06-26T00:49:16Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "1a658463d1f9dbefac113c5b8b7e03e7a3c3abd9",
          "body": "…gister 钩子\n\n将 FlowDesigner.vue 的 LogicFlow 画布生命周期统一抽到 src/composables/useLogicFlowCanvas.ts:\n实例 use/register/render、视口缩放(zoomViewport)、撤销重做、清空、下载图片/JSON、\nresize 适配、移动端触摸→鼠标事件桥接、暗黑主题切换。FlowDesigner 通过 ref + 回调\n(getBaseInfo/bindEvents/onReady) 注入,组件本体只保留向导/基础信息/属性面板编排与\ninitEvent 事件桥接,主文件删约 682 行。\n\n同时在\n[…]\nustomNodes 之后、render 之前调用 onRegister(可访问实例做批量/条件注册)。\n\n纯结构重组 + 加法式扩展点,对外行为与已发布契约不变。\nbuild:lib 三产物 exit 0;Playwright 实跑画布初始化/节点渲染/缩放/钩子断言全绿、console 0 报错。\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "refactor(designer): 画布生命周期抽离为 useLogicFlowCanvas,并开放 onBeforeUse/onRe…",
          "author_name": "唐亚峰 | battcn",
          "author_login": "levin950825",
          "committed_at": "2026-06-26T00:49:08Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "d973e07c0ce3845f2d1684b39b9620807fd900e8",
          "body": "新增「扩展能力验证」入口,一次性端到端验证本轮 FlowDesigner 新增的 props / slot:\n- ② initialJson:脱后端直接喂经典模式流程定义(开始→部门审批→结束),不走 queryDef\n- ③ customNodes / extraExtensions(Control) / lfOptions(点状网格):用 demo 自带\n  @logicflow/core、@logicflow/extension(库已 externalize 为 peer,单实例共享)透传\n- ① node-form-extra 插槽:在节点属性面板注入「扩展字段(验证)」,验证\n  FlowDesigner→PropertySetting→节点子组件 插槽链路打通\n\n两个 demo 经 Playwright 实跑:验证画布渲染正常、Control/网格/自定义字段可见、控制台 0 报错。\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "test(designer-demo): EP/antdv demo 增加组件库扩展能力验证用例",
          "author_name": "唐亚峰 | battcn",
          "author_login": "levin950825",
          "committed_at": "2026-06-25T13:47:51Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "1cd95777773db619d45fbfbd9a1aaeea71ad0249",
          "body": "- initialJson:新增 props.initialJson(warm-flow 定义对象或 JSON 字符串),\n  有值时优先于 queryDef,组件不再请求后端,实现纯组件用法;\n  抽出 applyDefinition() 让 initialJson 与 queryDef 复用同一装配逻辑。\n- customNodes:内置节点后追加 lf.register(...),支持注册自定义/覆盖同名节点。\n- extraExtensions:内置扩展后追加 LogicFlow.use(...)(MiniMap/Control/Group 等)。\n- lfOptions:顶层合并进 new LogicFlow 初始化选项,container 由组件强制管理。\n- types.ts 同步新增以上 props 类型;todo.md 写入组件库扩展性 Roadmap。\n\n纯增量、向后兼容:不传新 props 时行为与之前完全一致。\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "feat(designer): initialJson 脱后端驱动 + 自定义节点/扩展/lfOptions 透传",
          "author_name": "唐亚峰 | battcn",
          "author_login": "levin950825",
          "committed_at": "2026-06-25T13:31:26Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "143d066a1282be6969e2a42f6a4035ac907b78f6",
          "body": "修复属性面板插槽断链:FlowDesigner 渲染 PropertySetting 时透传全部插槽,\n打通 FlowDesigner → PropertySetting → 节点属性子组件 的链路。\n5 个节点子组件(start/between/gateway/end/skip)统一新增 #node-form-extra\n具名插槽(透出 { form, disabled }),消费方可往节点属性抽屉注入自定义表单项。\n\n注:FlowDesigner.vue 仅含本提交的插槽透传 hunk,其余通用化改动随下一提交。\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "feat(designer): 属性面板插槽透传 + node-form-extra 扩展点",
          "author_name": "唐亚峰 | battcn",
          "author_login": "levin950825",
          "committed_at": "2026-06-25T13:31:06Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "87906fe2f7ba4dcf4bd440fd9b1ee2d751606283",
          "body": "让 FlowDesigner 从「黑盒页面」升级为可编排组件库(纯增量,向后兼容):\n- slot 扩展点(均带回退):header-left(透出 flowName)、header-actions\n  (透出 save/disabled)、toolbar-extra(透出 lf/disabled)、logo\n- 命令式 API(defineExpose):save/validate/getGraphData/getFlowJson/\n  getFlowName/getLogicFlow/zoom/zoomIn/zoomOut/fitView/resetZoom/undo/redo/\n  cl\n[…]\n原始大小并居中),\n打开/进入流程设计/resize/「自适应」按钮所有端走它,增量加节点仍用\nfitViewIfMobile;与通用化同处 FlowDesigner.vue 故并入本提交。\n\n验证:build:lib 三产物 exit 0(es.js 311.5KB);ReadLints 0 报错。\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "feat(designer): FlowDesigner 组件库通用化(slot/hook/命令式 API/子组件导出)",
          "author_name": "唐亚峰 | battcn",
          "author_login": "levin950825",
          "committed_at": "2026-06-25T13:04:32Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "6e0c2ef10dfabf63147a11c775ed23638c2f3af2",
          "body": "对照 warm-flow-ui,将 PR#396 评审整改同步到 vue-designer(原本漏改):\n- 评审③(tool.ts):applyClassicDesignColor 去掉 status===1/2 判断,设计器内\n  一律用新版语义色;业务侧实例进度图不受影响\n- 评审②④(serial/parallel/inclusive.ts + baseNode.vue):三网关 Model 新增\n  getNodeStyle() 按类型着色(串行橙/并行青/包容紫);网关标签移除写死\n  fill:\"#000\" 改主题变量(修复暗黑不可见);节点卡片背景/底部文字改主题变量,\n  卡\n[…]\n通用化改动同处一文件,随下一个 commit 提交。\n\n验证:ReadLints 0 报错;build:lib 三产物 exit 0;EP/antdv 两个 demo build 均\nexit 0。skip.ts 与 warm-flow-ui 一致保留 fill:\"#000\"(PR 未动)属对齐不改。\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "fix(designer): 同步 warm-flow-ui PR#396 评审整改并修复 antd 表格对齐",
          "author_name": "唐亚峰 | battcn",
          "author_login": "levin950825",
          "committed_at": "2026-06-25T13:04:22Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "7f2ccb2c7194cd5c33055e5814ec4ee38a886e47",
          "body": "根因:vite-plugin-dts@5.0.2 实为 unplugin-dts@1.0.2 转发,对 @/ 别名派生的\n相对 import 计算偏移一级(产物落在 dist-lib/src/**,却按 entryRoot=src 锚定\n别名目标),生成 ../../data 越出到不存在路径,tsc 解析失败导致所有导出类型\n(FlowDesignerInstance/DataProvider/ComponentSize/UiAdapter 等)退化为 any;\n同时主入口不引用 ui 适配器,传递依赖 dts 漏产,import 悬空同样退化。\n\n修法(确定性、不加依赖、不改发布元信息):\n[…]\nig.js:移除各自 dts 插件,统一由主构建产出,规避\n  entryRoot 嵌套错乱\n\n验证:build:lib 三产物 exit 0;全量扫描 48 个 .d.ts / 25 处相对 import 0 处\n未解析;EP / antdv 两个 demo vite build 均 exit 0。\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "fix(designer): 修复发布 dts 在消费方退化为 any",
          "author_name": "唐亚峰 | battcn",
          "author_login": "levin950825",
          "committed_at": "2026-06-25T13:04:07Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "9f780557aca94fa537a11adf7462bd0e3fde634a",
          "body": "FlowDesigner.vue 及设计器全部 12 个 .vue 子组件(baseInfo/propertySetting/\nstart/between/end/gateway/skip/nodeExtList/selectUser + DiagramSidebar/\nEdgeTooltip/baseNode)改 <script setup lang=\"ts\">:props 用 defineProps<泛型>()\n+ withDefaults 精确化,defineEmits/ref/事件参数 TS 化,getCurrentInstance()! 收敛。\n新增 src/types/global.d.ts 声明 window 运行期标志(__WF_* / 抽屉桥接 / tooltip hover)。\nbuild:lib 三产物 exit 0(es.js 307.96KB)。\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "refactor(designer): 设计器组件全面 TS 化(FlowDesigner + 12 子组件)",
          "author_name": "唐亚峰 | battcn",
          "author_login": "levin950825",
          "committed_at": "2026-06-25T10:05:18Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "7f72e8de0307576138e99c04f6072ab358447f27",
          "body": "# Conflicts:\n#\t.gitignore",
          "is_bot": false,
          "headline": "Merge branch 'feature-style' into feature-ui-npm",
          "author_name": "唐亚峰 | battcn",
          "author_login": "levin950825",
          "committed_at": "2026-06-25T09:46:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0d04e655a231d2b88f2c9323ec6cdf07f8cdc1eb",
          "body": "忽略各 demo / vue-designer 子目录的 node_modules、dist、.playwright-cli、.codex 等本地产物。\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "chore: 补充忽略 demo 与 vue-designer 的本地依赖与调试产物",
          "author_name": "唐亚峰 | battcn",
          "author_login": "levin950825",
          "committed_at": "2026-06-25T08:20:09Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "257286d6441a24c39415949e66703902faa018e7",
          "body": "将 .qoder/repowiki 标注为本地、已 gitignore、未纳入仓库的可选参考资源,\n避免文档引用与仓库实际内容不一致。(PR#396 评审⑤)\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "docs: 修正 AGENTS.md 对 qoder/repowiki 的引用",
          "author_name": "唐亚峰 | battcn",
          "author_login": "levin950825",
          "committed_at": "2026-06-25T08:20:09Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "621262562b5dcd8ea5f0ff1bb59f6412cdb7babd",
          "body": "节点卡片背景/文字改用主题变量 --wf-bg-white/--wf-text-primary 适配暗黑模式;\n节点头部与网关按类型着色——开始绿/审批蓝/结束红、串行橙/并行青/包容紫,与经典模式语义色统一;\n修复网关标签文字写死 #000 在暗黑模式下不可见的问题。(PR#396 评审②④)\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "style: 仿钉钉模式适配暗黑并按节点类型区分配色",
          "author_name": "唐亚峰 | battcn",
          "author_login": "levin950825",
          "committed_at": "2026-06-25T08:20:02Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "0cf08d53615b6e9586a7ebddc82f9112ba0dcc8d",
          "body": "applyClassicDesignColor 去掉 status===1/2 判断,设计器内一律使用新版语义色;\n业务侧流程实例进度图(非设计器)沿用后端 chartStatusColor 状态色,行为不变。(PR#396 评审③)\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "fix: 设计器语义色仅在设计器内生效并移除运行状态判断",
          "author_name": "唐亚峰 | battcn",
          "author_login": "levin950825",
          "committed_at": "2026-06-25T08:19:55Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "6f409239354dccceebb22848837d89fd019d6e84",
          "body": "打开/切换到「流程设计」/resize 及「自适应」按钮均自适应显示全部节点(所有端);\n节点较少时不再放大撑屏,缩放超过 100% 自动回到原始大小并居中。(PR#396 评审①)\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "fix: 流程设计自适应显示全部节点并限制最大缩放100%",
          "author_name": "唐亚峰 | battcn",
          "author_login": "levin950825",
          "committed_at": "2026-06-25T08:19:41Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "8ef5af855dc42023969bcc46496297613c857f3f",
          "body": "- 两个 demo(antdv4 / ep)首页改为 Hero 头部 + 卡片化布局,统一风格\n- 节点扩展表单项去除分隔线、改紧凑间距,EP 与 antd 表现一致\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "style: 设计器 demo Hero/卡片化重排与节点扩展表单项统一",
          "author_name": "唐亚峰 | battcn",
          "author_login": "levin950825",
          "committed_at": "2026-06-25T07:22:51Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "90fb62b6917024c79fb424d7475619d6a920adde",
          "body": "- selectUser 复选框仅展示选中态,选择统一由整行点击(@row-click)驱动\n- antdvAdapter 为 a-table 增加 customRow.onClick 映射 EP 的 row-click(antd 无 row-click 事件)\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "fix: 设计器选人整行点击选择,避免与复选框重复触发并适配 antd a-table",
          "author_name": "唐亚峰 | battcn",
          "author_login": "levin950825",
          "committed_at": "2026-06-25T07:22:40Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "f69ed9457693fe545fbece28c2c9f37f2997c840",
          "body": "Co-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "chore: 忽略本地工具产物(.codex / .playwright-cli)",
          "author_name": "唐亚峰 | battcn",
          "author_login": "levin950825",
          "committed_at": "2026-06-25T07:22:30Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "ade8833a27c117b283c74e36f9be51b5b8526849",
          "body": "AntForm 支持 EP inline -> antd layout=\"inline\"(搜索条件横向排列,不再每项独占一行);\nAntTree 将 EP props{label} 正确映射为 antd fieldNames{title,key}(含 node-key→key、node-click→select),\n修复组织架构树节点名显示为空白(---)的问题。\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "fix: warm-flow 设计器 antd 搜索表单 inline 与组织架构树节点名显示",
          "author_name": "唐亚峰 | battcn",
          "author_login": "levin950825",
          "committed_at": "2026-06-24T10:16:51Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "aec067577e50592667879469548119d70139739e",
          "body": "扩展页签(高级设置等动态页签)直接渲染扩展属性表单:去掉 ext-secondary 卡片背景框,\n移除与 tab 重复的内层标题/徽标(tab 已表明当前分组),清理随之失效的 getCurrentTabLabel 与样式。\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "style: warm-flow 设计器节点扩展页签去除冗余卡片背景与重复标题",
          "author_name": "唐亚峰 | battcn",
          "author_login": "levin950825",
          "committed_at": "2026-06-24T10:16:44Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "a298151f751defbf6869489731492d70ee37f5e5",
          "body": "install 注册 loading 指令前判断 !app.directive('loading'),\n消费方 app.use(ElementPlus) 已自带 loading 时不再重复注册,消除 Vue 重复注册告警。\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "fix: warm-flow 设计器 v-loading 指令避免与 Element Plus 重复注册",
          "author_name": "唐亚峰 | battcn",
          "author_login": "levin950825",
          "committed_at": "2026-06-24T10:16:37Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "dbc26afad403f4b8ef1e98dd4ea561ae35f34e7d",
          "body": "新增「全局组件尺寸」配置,消费方一次性指定 small / default / large,设计器内所有中性组件 wf-* 默认即采用该尺寸,局部 size 仍可覆盖。\n- 新增 ui/designerOptions.ts:用响应式 ref 持有尺寸,setComponentSize / getComponentSize / useComponentSize,运行期改尺寸自动重渲染。\n- createNeutralComponent 注入全局 size 作为默认(attrs.size 优先;default 不注入,避免把 EP 专有值传给 antd、并保留各库自然默认)。\n- WarmFlow\n[…]\nSize / getComponentSize 与 ComponentSize 类型。\n- antd4 demo main.ts 补用法注释。\n\n验证:antd4-demo 设 size:'small' 后表单输入渲染为 ant-input-sm(高 24px)、ant-select-sm,全局生效。\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "feat: warm-flow 设计器支持全局组件尺寸设置",
          "author_name": "唐亚峰 | battcn",
          "author_login": "levin950825",
          "committed_at": "2026-06-24T07:09:50Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "c422c7ff2871f59d1c43f5f641bb357530950434",
          "body": "- selectUser.vue:补 import { parseTime }(库化后 ruoyi 全局丢失),修复人员选择「创建时间」列 parseTime is not a function、表格行不渲染导致的「用户选择不生效」。\n- nodeExtList.vue:扩展属性 radio/checkbox 卡片样式仅命中 EP 的 .el-radio/.el-checkbox,antd 下退化为普通单选;补 .ant-radio-wrapper/.ant-checkbox-wrapper 卡片样式(含选中态/暗黑),使「高级设置」与「基础设置」卡片风格一致。\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "fix: warm-flow 设计器组件 antd 兼容",
          "author_name": "唐亚峰 | battcn",
          "author_login": "levin950825",
          "committed_at": "2026-06-24T07:06:05Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "777d1f3ace3b6e5844ac7fb0388f16bae471c3e1",
          "body": "库化后 antd demo 暴露多处 EP/antd 兼容差异,统一在 UI 适配器层修复:\n- date-picker:daterange/datetimerange 映射 antd RangePicker,value-format 走字符串值模式,空值归一 undefined,修复 date.locale is not a function 崩溃。\n- v-loading:EP 内置指令,antd 无;新增 UiAdapter.loadingDirective(EP 用 ElLoading.directive、antd 自实现 ASpin 区域遮罩),install 注册 v-loadin\n[…]\nlue),修复自定义表单开关「视觉为否但绑定值非法」导致的必填误报与表单路径不渲染。\n- 栅格:新增 AntCol,EP 响应式断点(xs 等)与 span 并存时把 span 落到 antd md(≥768) 断点、xs 作基准,修复 ant-col-xs-24 恒覆盖 span 导致的列塌陷错位。\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "fix: warm-flow 设计器 antd 适配器对齐 Element Plus 行为",
          "author_name": "唐亚峰 | battcn",
          "author_login": "levin950825",
          "committed_at": "2026-06-24T07:05:56Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "2df7cad1aa1ea04e95f4ee16de68b2e4ec08a676",
          "body": "form-create 自定义表单设计器组件已于 54e1ec4c 移除,其遗留的表单/办理数据接口\n(getFormContent/saveFormContent/executeLoad/executeHandle/hisLoad) 已无任何业务调用方,\n从 DataProvider 契约、mock/http 实现及 api/form/form.ts 中一并清除。\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "refactor: 清理 form-create 遗留的表单数据接口",
          "author_name": "唐亚峰 | battcn",
          "author_login": "levin950825",
          "committed_at": "2026-06-24T06:48:48Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "332da32843de87447001a9ed0d237d5e9dc4a825",
          "body": "- mockProvider 新增 categoryList/formPathList/nodeExt(覆盖控件类型1-7)并加厚 handler 数据\n- queryDef 返回元数据、nodeExt 返回富数据,使设计器下拉/选人/扩展属性脱后端可演示\n- 两个 demoProvider 的 queryDef 合并库 mock 元数据与 localStorage 持久化定义\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "feat: 富化设计器 mock 数据(流程类别/表单标识/节点扩展属性/办理人)",
          "author_name": "唐亚峰 | battcn",
          "author_login": "levin950825",
          "committed_at": "2026-06-24T06:07:30Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "54e1ec4ce60f5c07a99d6897ceee7613635a93f0",
          "body": "- 删除孤儿组件 components/form/formCreate.vue、design.vue(纯库化删 views 后无任何引用、未接入主入口图)\n- 移除 @form-create/designer、@form-create/element-ui 依赖与 externalize(lib + ep-demo),pnpm 瘦身 70 个包\n- 保留 api/form 与 DataProvider 表单方法为通用数据契约(不引 @form-create)\n- 同步 README/AGENTS:依赖要求去 form-create、antd demo 标注完全脱 EP\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "refactor: 移除未使用的 form-create 自定义表单设计器组件",
          "author_name": "唐亚峰 | battcn",
          "author_login": "levin950825",
          "committed_at": "2026-06-24T05:27:46Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "4299035eec759df11093a41ffc75eb12f4fcd614",
          "body": "- antd4-demo 重写为与 ep-demo 同款列表/CRUD(新建/保存/修改/预览/导出/删除),用 antd 组件(a-table/a-tag/a-empty + message/Modal)\n- 两 demo 共用同一套布局 CSS(header+UI 徽标+用法代码块+info tip+表格/空态+设计器视图),仅 UI 库与适配器不同\n- 顶部新增「3 步集成」用法代码块(import + setUiAdapter + setDataProvider),EP/antd 各自版本\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "update: 两个设计器 demo 统一风格 + 顶部加用法说明",
          "author_name": "唐亚峰 | battcn",
          "author_login": "levin950825",
          "committed_at": "2026-06-24T05:20:49Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "f2f24fa56c66df6e578687209754628803fcb968",
          "body": "- dependencies 清空;vue/vue-router/pinia/logicflow 走 peer,element-plus/ant-design-vue/form-create 为可选 peer;bundled 运行时(axios/file-saver/@iconify) 入 devDeps\n- 主入口移除 EP 默认适配器静态引/注册/导出,install 仅注册 svg-icon + 中性 wf-*;EP 与 antd 对称拆子入口(/element-plus、/antdv),build:lib 三构建,主 bundle 零 element-plus\n- ep-demo 显式\n[…]\niAdapter(elementPlusAdapter from /element-plus)\n- antd4-demo 彻底移除 EP(main/App/package/vite),产物零 element-plus,全 antd 原生\n- AGENTS.md 同步主入口 UI 无关/子入口/依赖结构\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "refactor: warm-flow-vue-designer 主入口 UI 库无关 + 依赖治理",
          "author_name": "唐亚峰 | battcn",
          "author_login": "levin950825",
          "committed_at": "2026-06-24T05:15:34Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "968b63f94b674d94d00a62bcefc6d4d4c5c49435",
          "body": "- 将 antd 适配器从 demo 本地移入库 src/ui/antdvAdapter.ts,经 vite.antdv.config.js 单独构建为\n  dist-lib/antdv.es.js(vue / ant-design-vue externalize 为可选 peer);package.json 加 ./antdv 导出\n  + build:antdv(并入 build:lib)+ ant-design-vue 可选 peerDependency。\n- antd4-demo 改为从 @dromara/warm-flow-designer/antdv 消费官方适配器,删本地副本。\n- 至此库同时 ship EP 默认适配器(主入口)+ antd 适配器(/antdv 子入口);\n  antd 消费方 setUiAdapter(antdvAdapter) 即用。运行时验证 console 0 错 0 警。\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "feat: antdv 适配器提升为库子入口 @dromara/warm-flow-designer/antdv",
          "author_name": "唐亚峰 | battcn",
          "author_login": "levin950825",
          "committed_at": "2026-06-24T04:57:16Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "dc28c9356afd6f93cdbee22588a90d38708cba90",
          "body": "- 新增 antd4-demo/antdvAdapter.ts:实现 UiAdapter 契约的 antd 适配器。反馈走\n  message/notification/Modal/全屏 Spin loading + 自实现 clickOutside;28 个中性组件逐个翻译\n  el-* 风格到 antd(form 的 validate(cb) shim、table 列子组件→columns+customRender、a-select\n  options 属性避子类型校验、各组件 v-model 转换、tree-select/select width:100% 等)。\n- antd4-dem\n[…]\n- 库 designer/index.ts 导出 UiFeedbackType/UiFeedbackOptions/UiLoadingHandle/UiComponents 类型,\n  供消费方编写自定义适配器。antd4-demo banner/README 更新为「设计器主体已 antd 原生」。\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "feat: Phase 3 —— Ant Design Vue 4 适配器,设计器主体 UI 脱 Element Plus",
          "author_name": "唐亚峰 | battcn",
          "author_login": "levin950825",
          "committed_at": "2026-06-24T04:53:38Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "77970f12ed4d95add58f2224a2674b7ce6d0be55",
          "body": "- baseInfo/between/selectUser/skip/nodeExtList/start/end/FlowDesigner/formCreate 共 9 个文件\n  的 <el-*> 改为中性 <wf-*>(经 createNeutralComponent 工厂透传到当前 UI 适配器;\n  gateway/propertySetting 已在上一提交完成)。至此全 11 文件 el-* 中性化完毕。\n- 库 UI 完全经适配器(命令式 + 组件),Element Plus 退化为默认适配器、可经 setUiAdapter 切换。\n- 仅模板标签改名,.el-* 样式与 DOM 不变。ep-demo 运行时验证:耦合件(table/select/radio/\n  tree-select)渲染正常、form.validate() 经 wf-form 的 ref 代理转发生效、console 0 报错。\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "refactor: Element Plus 解耦 Phase 2 —— 设计器组件 el-* 全量中性化为 wf-*",
          "author_name": "唐亚峰 | battcn",
          "author_login": "levin950825",
          "committed_at": "2026-06-24T04:21:36Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "84005dd573fa27cd7279e72dbfaa54e9b16d189a",
          "body": "- warm-flow-vue-designer:从 warm-flow-ui 抽出的纯 Vue3 组件库(@dromara/warm-flow-designer),\n  经典+仿钉钉双模式;新增 UI 适配层(uiAdapter/elementPlusAdapter/Wf* 中性组件)作为 Element Plus\n  解耦基建,命令式 UI(消息/通知/弹框/loading/clickOutside)收口到适配器;DataProvider 数据层抽象;\n  src 下 .js 全量转 .ts;裁剪为纯库(无 index.html/main.js/App.vue/views)。\n- warm\n[…]\nst-lib。\n- 工程:pnpm workspace(pnpm-workspace.yaml / .npmrc / 根 package.json);补全各工程 .gitignore,\n  避免误提交 node_modules / dist-lib。warm-flow-ui 基线不动(仍 yarn)。\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "feat: 新增 warm-flow-vue-designer 组件库与消费示例(pnpm workspace + EP 解耦基建)",
          "author_name": "唐亚峰 | battcn",
          "author_login": "levin950825",
          "committed_at": "2026-06-24T03:37:31Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "ea15c02119f1ecfa7385e108d801b39fac22670a",
          "body": "Co-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "update: 补充并校正 warm-flow-ui UI 设计规范文档",
          "author_name": "唐亚峰 | battcn",
          "author_login": "levin950825",
          "committed_at": "2026-06-23T06:24:50Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "e755c09ab774894c0e1cbd4cbb0349d60336e88f",
          "body": "Co-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "update: 更新设计器图标资产(节点/工具栏/模型 svg)",
          "author_name": "唐亚峰 | battcn",
          "author_login": "levin950825",
          "committed_at": "2026-06-23T06:24:50Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "ccc0d91f2df1d566a68360df6946f4c8454fbce0",
          "body": "Co-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "style: 流程设计器画布主题统一与设计态语义色标记",
          "author_name": "唐亚峰 | battcn",
          "author_login": "levin950825",
          "committed_at": "2026-06-23T06:24:50Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d9194f455cbdfc14416ec2444615af433c585051",
          "body": "Co-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "style: 设计器表单与属性抽屉/弹窗改白底描边,表头与单标题统一",
          "author_name": "唐亚峰 | battcn",
          "author_login": "levin950825",
          "committed_at": "2026-06-23T06:24:40Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "7681a394c2f04256b3bb2d6dd9188e7fbeda5502",
          "body": "Co-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "style: 仿钉钉模式节点与边样式统一为蓝色调",
          "author_name": "唐亚峰 | battcn",
          "author_login": "levin950825",
          "committed_at": "2026-06-23T06:24:40Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "5fb4a438fdddf9d16c99c7c3c5db767361bc0dc5",
          "body": "Co-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "style: 经典模式画布节点与左侧拖拽面板语义化配色,去除发灰默认色",
          "author_name": "唐亚峰 | battcn",
          "author_login": "levin950825",
          "committed_at": "2026-06-23T06:24:40Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "33ede2d4fa474cf82a6103509ed1401da5950ea2",
          "body": "Co-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "update: 忽略 MCP 配置与 playwright 调试截图产物",
          "author_name": "唐亚峰 | battcn",
          "author_login": "levin950825",
          "committed_at": "2026-06-23T06:24:40Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "8aa269ba98dca3084ad25edbd0bc97fe0de2efb4",
          "body": "- 根 AGENTS.md(规则唯一来源) 与 CLAUDE.md(红线摘要)\n- core/orm/plugin/ui 模块级 AGENTS.md(仅写模块差异)\n- .cursor/rules/warm-flow.mdc(Cursor 规则, 指向 AGENTS.md)\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "update: 新增 AI coding agent 提示词规则(AGENTS/CLAUDE/.cursor)",
          "author_name": "唐亚峰 | battcn",
          "author_login": "levin950825",
          "committed_at": "2026-06-23T01:19:14Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "5d04c41835302b9a3ec4e01d04a8481339497efd",
          "body": null,
          "is_bot": false,
          "headline": "update: 更新文档",
          "author_name": "warm",
          "author_login": "warmrui",
          "committed_at": "2026-06-19T02:58:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dccb2f77415ac0f519f8d2f31267afbfbbaf840a",
          "body": null,
          "is_bot": false,
          "headline": "update: 更新文档",
          "author_name": "warm",
          "author_login": "warmrui",
          "committed_at": "2026-06-19T02:46:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a33352e1c8bb1617c0753639fe00e92f675dd7db",
          "body": null,
          "is_bot": false,
          "headline": "upgrade: 升级1.8.8",
          "author_name": "warm",
          "author_login": "warmrui",
          "committed_at": "2026-06-16T03:33:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bc43fb1daa64d06b2a95188da2465064edfc143d",
          "body": null,
          "is_bot": false,
          "headline": "fix: 修复历史任务,第一个节点创建时间,可能在开始节点创建时间之前",
          "author_name": "warm",
          "author_login": "warmrui",
          "committed_at": "2026-06-16T03:18:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8f8fe29bddabcb8f42aca7eb0d16495d43fefc28",
          "body": null,
          "is_bot": false,
          "headline": "fix: v1.8.7 FlowChart 在 PC 端 iframe 首次加载不自动居中,需手动点击自适应按钮",
          "author_name": "warm",
          "author_login": "warmrui",
          "committed_at": "2026-06-16T02:57:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fd7b42690544ab5d8ab3b59c082b7b2339111b6c",
          "body": null,
          "is_bot": false,
          "headline": "fix: 当设置 onlyDesignShow: true,仅显示设计的时候样式出现问题",
          "author_name": "warm",
          "author_login": "warmrui",
          "committed_at": "2026-06-16T02:07:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2fc7fa2b1671ddb2c5c6bce7b171856c39c534d5",
          "body": null,
          "is_bot": false,
          "headline": "fix: 办理人前端显示与数据库不一致",
          "author_name": "warm",
          "author_login": "warmrui",
          "committed_at": "2026-06-16T01:46:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5bfef7c8e918865bd7f7e55a3160c7e2973dd2f8",
          "body": null,
          "is_bot": false,
          "headline": "update: 更新文档",
          "author_name": "warm",
          "author_login": "warmrui",
          "committed_at": "2026-05-06T08:04:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9051be57bb63ca7d7862f129734a7fb475ede537",
          "body": null,
          "is_bot": false,
          "headline": "fix: 修复节点扩展属性页面循环报错问题",
          "author_name": "warm",
          "author_login": "warmrui",
          "committed_at": "2026-05-06T02:36:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cc5c5396984d97972ec50b93eebe7db0370d92cc",
          "body": null,
          "is_bot": false,
          "headline": "合并代码",
          "author_name": "warm",
          "author_login": "warmrui",
          "committed_at": "2026-04-29T09:09:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a5fd7ff1ea66f6fc749282e4589e3ea6d85e2458",
          "body": "前端无限报错问题修复\n\nSigned-off-by:  縁來只爲伱 <taochach@gmail.com>",
          "is_bot": false,
          "headline": "update warm-flow-ui/src/components/design/common/vue/nodeExtList.vue.",
          "author_name": "縁來只爲伱",
          "author_login": "taochach",
          "committed_at": "2026-04-29T06:50:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ad58b18041dbd361f0603b86563853be3a1555f8",
          "body": null,
          "is_bot": false,
          "headline": "[upgrade] 发布1.8.6",
          "author_name": "warm",
          "author_login": "warmrui",
          "committed_at": "2026-04-28T07:01:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 10,
      "commits_last_year": 328,
      "latest_release_at": "2025-01-15T07:30:37Z",
      "latest_release_tag": "v1.6.0-m4",
      "releases_from_tags": false,
      "days_since_last_push": 5,
      "active_weeks_last_year": 31,
      "days_since_latest_release": 556,
      "mean_days_between_releases": 9.6
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": false,
      "health_percentage": 37,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "org.dromara.warm:warm-flow-core",
          "exists": true,
          "license": null,
          "keywords": [],
          "ecosystem": "maven",
          "matches_repo": null,
          "registry_url": "https://central.sonatype.com/artifact/org.dromara.warm/warm-flow-core",
          "is_deprecated": false,
          "latest_version": "1.8.9",
          "repository_url": null,
          "versions_count": 73,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-07-13T08:13:32Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 12
        }
      ]
    },
    "popularity": {
      "forks": 83,
      "stars": 573,
      "watchers": 6,
      "fork_history": {
        "days": [
          {
            "date": "2024-04-26",
            "count": 1
          },
          {
            "date": "2024-05-12",
            "count": 1
          },
          {
            "date": "2024-05-20",
            "count": 1
          },
          {
            "date": "2024-05-24",
            "count": 1
          },
          {
            "date": "2024-06-09",
            "count": 1
          },
          {
            "date": "2024-06-13",
            "count": 2
          },
          {
            "date": "2024-07-01",
            "count": 1
          },
          {
            "date": "2024-07-03",
            "count": 1
          },
          {
            "date": "2024-07-08",
            "count": 1
          },
          {
            "date": "2024-08-28",
            "count": 1
          },
          {
            "date": "2024-09-05",
            "count": 1
          },
          {
            "date": "2024-09-06",
            "count": 1
          },
          {
            "date": "2024-09-25",
            "count": 1
          },
          {
            "date": "2024-10-27",
            "count": 1
          },
          {
            "date": "2024-10-29",
            "count": 1
          },
          {
            "date": "2024-11-02",
            "count": 1
          },
          {
            "date": "2024-11-07",
            "count": 1
          },
          {
            "date": "2024-11-19",
            "count": 2
          },
          {
            "date": "2024-11-29",
            "count": 1
          },
          {
            "date": "2024-12-05",
            "count": 1
          },
          {
            "date": "2024-12-13",
            "count": 1
          },
          {
            "date": "2024-12-27",
            "count": 1
          },
          {
            "date": "2025-01-02",
            "count": 2
          },
          {
            "date": "2025-01-03",
            "count": 1
          },
          {
            "date": "2025-01-08",
            "count": 1
          },
          {
            "date": "2025-01-17",
            "count": 1
          },
          {
            "date": "2025-01-26",
            "count": 1
          },
          {
            "date": "2025-02-08",
            "count": 1
          },
          {
            "date": "2025-02-13",
            "count": 1
          },
          {
            "date": "2025-02-16",
            "count": 2
          },
          {
            "date": "2025-02-19",
            "count": 1
          },
          {
            "date": "2025-02-22",
            "count": 1
          },
          {
            "date": "2025-03-06",
            "count": 1
          },
          {
            "date": "2025-03-10",
            "count": 1
          },
          {
            "date": "2025-03-11",
            "count": 2
          },
          {
            "date": "2025-03-19",
            "count": 1
          },
          {
            "date": "2025-03-28",
            "count": 1
          },
          {
            "date": "2025-04-27",
            "count": 3
          },
          {
            "date": "2025-05-15",
            "count": 1
          },
          {
            "date": "2025-05-22",
            "count": 1
          },
          {
            "date": "2025-05-30",
            "count": 1
          },
          {
            "date": "2025-06-04",
            "count": 1
          },
          {
            "date": "2025-08-15",
            "count": 1
          },
          {
            "date": "2025-08-18",
            "count": 1
          },
          {
            "date": "2025-08-22",
            "count": 1
          },
          {
            "date": "2025-08-28",
            "count": 1
          },
          {
            "date": "2025-08-29",
            "count": 1
          },
          {
            "date": "2025-09-01",
            "count": 1
          },
          {
            "date": "2025-09-02",
            "count": 2
          },
          {
            "date": "2025-09-05",
            "count": 1
          },
          {
            "date": "2025-09-18",
            "count": 1
          },
          {
            "date": "2025-09-28",
            "count": 1
          },
          {
            "date": "2025-10-29",
            "count": 1
          },
          {
            "date": "2025-11-06",
            "count": 1
          },
          {
            "date": "2025-11-12",
            "count": 1
          },
          {
            "date": "2025-12-01",
            "count": 1
          },
          {
            "date": "2025-12-11",
            "count": 1
          },
          {
            "date": "2025-12-12",
            "count": 1
          },
          {
            "date": "2026-01-17",
            "count": 1
          },
          {
            "date": "2026-02-26",
            "count": 1
          },
          {
            "date": "2026-03-14",
            "count": 1
          },
          {
            "date": "2026-03-26",
            "count": 1
          },
          {
            "date": "2026-03-27",
            "count": 1
          },
          {
            "date": "2026-04-02",
            "count": 1
          },
          {
            "date": "2026-04-13",
            "count": 1
          },
          {
            "date": "2026-04-16",
            "count": 1
          },
          {
            "date": "2026-04-21",
            "count": 1
          },
          {
            "date": "2026-05-06",
            "count": 1
          },
          {
            "date": "2026-05-14",
            "count": 1
          },
          {
            "date": "2026-05-15",
            "count": 1
          },
          {
            "date": "2026-05-19",
            "count": 1
          },
          {
            "date": "2026-06-14",
            "count": 1
          },
          {
            "date": "2026-06-20",
            "count": 1
          },
          {
            "date": "2026-07-03",
            "count": 1
          },
          {
            "date": "2026-07-18",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 83,
        "total_forks": 83
      },
      "star_history": null,
      "open_issues_and_prs": 6
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": false,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [
        "warm-flow-designer-demo/warm-flow-antdv4-designer-demo/tsconfig.json",
        "warm-flow-designer-demo/warm-flow-ep-designer-demo/tsconfig.json",
        "warm-flow-designer-demo/warm-flow-naive-designer-demo/tsconfig.json",
        "warm-flow-vue-designer/tsconfig.json"
      ],
      "toolchain_manifests": [
        "pom.xml",
        "warm-flow-core/pom.xml",
        "warm-flow-orm/pom.xml",
        "warm-flow-orm/warm-flow-easy-query/pom.xml",
        "warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/pom.xml",
        "warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-sb-starter/pom.xml",
        "warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-sb3-starter/pom.xml",
        "warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-sb4-starter/pom.xml",
        "warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-solon-plugin/pom.xml",
        "warm-flow-orm/warm-flow-mybatis-plus/pom.xml",
        "warm-flow-orm/warm-flow-mybatis-plus/warm-flow-mybatis-plus-core/pom.xml",
        "warm-flow-orm/warm-flow-mybatis-plus/warm-flow-mybatis-plus-sb-starter/pom.xml",
        "warm-flow-orm/warm-flow-mybatis-plus/warm-flow-mybatis-plus-sb3-starter/pom.xml",
        "warm-flow-orm/warm-flow-mybatis-plus/warm-flow-mybatis-plus-sb4-starter/pom.xml",
        "warm-flow-orm/warm-flow-mybatis-plus/warm-flow-mybatis-plus-solon-plugin/pom.xml",
        "warm-flow-orm/warm-flow-mybatis/pom.xml",
        "warm-flow-orm/warm-flow-mybatis/warm-flow-mybatis-core/pom.xml",
        "warm-flow-orm/warm-flow-mybatis/warm-flow-mybatis-sb-starter/pom.xml",
        "warm-flow-orm/warm-flow-mybatis/warm-flow-mybatis-sb3-starter/pom.xml",
        "warm-flow-orm/warm-flow-mybatis/warm-flow-mybatis-sb4-starter/pom.xml",
        "warm-flow-orm/warm-flow-mybatis/warm-flow-mybatis-solon-plugin/pom.xml",
        "warm-flow-plugin/pom.xml",
        "warm-flow-plugin/warm-flow-plugin-json/pom.xml",
        "warm-flow-plugin/warm-flow-plugin-json/warm-flow-plugin-json-jackson3/pom.xml",
        "warm-flow-plugin/warm-flow-plugin-json/warm-flow-plugin-json-v1/pom.xml",
        "warm-flow-plugin/warm-flow-plugin-modes/pom.xml",
        "warm-flow-plugin/warm-flow-plugin-modes/warm-flow-plugin-modes-sb/pom.xml",
        "warm-flow-plugin/warm-flow-plugin-modes/warm-flow-plugin-modes-solon/pom.xml",
        "warm-flow-plugin/warm-flow-plugin-ui/pom.xml",
        "warm-flow-plugin/warm-flow-plugin-ui/warm-flow-plugin-ui-core/pom.xml",
        "warm-flow-plugin/warm-flow-plugin-ui/warm-flow-plugin-ui-sb-web/pom.xml",
        "warm-flow-plugin/warm-flow-plugin-ui/warm-flow-plugin-ui-solon-web/pom.xml",
        "warm-flow-plugin/warm-flow-plugin-ui/warm-flow-plugin-vue3-ui/pom.xml"
      ],
      "largest_source_bytes": 3264598,
      "source_files_sampled": 371,
      "oversized_source_files": 1,
      "agent_instruction_files": [
        ".cursor/rules/warm-flow.mdc",
        "AGENTS.md",
        "CLAUDE.md",
        "warm-flow-core/AGENTS.md",
        "warm-flow-orm/AGENTS.md",
        "warm-flow-plugin/AGENTS.md",
        "warm-flow-ui/AGENTS.md",
        "warm-flow-vue-designer/AGENTS.md"
      ],
      "agent_instruction_max_bytes": 20170
    },
    "dependencies": {
      "manifests": [
        "package.json",
        "pom.xml",
        "warm-flow-core/pom.xml",
        "warm-flow-orm/pom.xml",
        "warm-flow-plugin/pom.xml",
        "warm-flow-ui/package.json",
        "warm-flow-vue-designer/package.json"
      ],
      "advisories": {
        "error": null,
        "scope": "published_package",
        "source": "osv",
        "findings": [],
        "collected": true,
        "malicious": [],
        "truncated": false,
        "by_severity": {},
        "advisory_count": 0,
        "affected_count": 0,
        "assessed_count": 2,
        "malicious_count": 0,
        "assessed_package": "maven:org.dromara.warm:warm-flow-core@1.8.9",
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "maven",
        "npm"
      ],
      "dependencies": [
        {
          "name": "org.springframework.boot:spring-boot-dependencies",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${spring.boot.version}"
        },
        {
          "name": "org.noear:solon",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${solon.version}"
        },
        {
          "name": "org.noear:solon-data",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${solon.version}"
        },
        {
          "name": "org.noear:solon-web-staticfiles",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${solon.version}"
        },
        {
          "name": "org.noear:solon-web",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${solon.version}"
        },
        {
          "name": "org.noear:solon-logging-logback",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${solon.version}"
        },
        {
          "name": "org.mybatis:mybatis",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${mybatis.version}"
        },
        {
          "name": "org.mybatis.spring.boot:mybatis-spring-boot-starter",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${mybatis-spring-boot}"
        },
        {
          "name": "org.noear:mybatis-solon-plugin",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${solon.version}"
        },
        {
          "name": "com.baomidou:mybatis-plus-solon-plugin",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${mybatis-plus.version}"
        },
        {
          "name": "com.baomidou:mybatis-plus-jsqlparser",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${mybatis-plus.version}"
        },
        {
          "name": "com.baomidou:mybatis-plus-jsqlparser-4.9",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${mybatis-plus.version}"
        },
        {
          "name": "com.baomidou:mybatis-plus-extension",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${mybatis-plus.version}"
        },
        {
          "name": "com.baomidou:mybatis-plus-boot-starter",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${mybatis-plus.version}"
        },
        {
          "name": "org.noear:mybatis-plus-extension-solon-plugin",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${solon.version}"
        },
        {
          "name": "com.easy-query:sql-solon-plugin",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${easy-query.version}"
        },
        {
          "name": "com.easy-query:sql-springboot-starter",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${easy-query.version}"
        },
        {
          "name": "com.easy-query:sql-springboot4-starter",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${easy-query.version}"
        },
        {
          "name": "com.easy-query:sql-api-proxy",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${easy-query.version}"
        },
        {
          "name": "com.easy-query:sql-processor",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${easy-query.version}"
        },
        {
          "name": "org.noear:snack3",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${snack3.version}"
        },
        {
          "name": "org.noear:snack4",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${snack4.version}"
        },
        {
          "name": "com.fasterxml.jackson.core:jackson-databind",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${jackson.version}"
        },
        {
          "name": "tools.jackson.core:jackson-databind",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${jackson3.version}"
        },
        {
          "name": "com.alibaba.fastjson2:fastjson2",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${fastjson.version}"
        },
        {
          "name": "com.google.code.gson:gson",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${gson.version}"
        },
        {
          "name": "org.slf4j:slf4j-api",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${slf4j-api.version}"
        },
        {
          "name": "org.dromara.warm:warm-flow-core",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${warm-flow}"
        },
        {
          "name": "org.dromara.warm:warm-flow-mybatis-core",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${warm-flow}"
        },
        {
          "name": "org.dromara.warm:warm-flow-mybatis-sb-starter",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${warm-flow}"
        },
        {
          "name": "org.dromara.warm:warm-flow-mybatis-sb3-starter",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${warm-flow}"
        },
        {
          "name": "org.dromara.warm:warm-flow-mybatis-sb4-starter",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${warm-flow}"
        },
        {
          "name": "org.dromara.warm:warm-flow-mybatis-solon-plugin",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${warm-flow}"
        },
        {
          "name": "org.dromara.warm:warm-flow-mybatis-plus-core",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${warm-flow}"
        },
        {
          "name": "org.dromara.warm:warm-flow-mybatis-plus-sb-starter",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${warm-flow}"
        },
        {
          "name": "org.dromara.warm:warm-flow-mybatis-plus-sb3-starter",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${warm-flow}"
        },
        {
          "name": "org.dromara.warm:warm-flow-mybatis-plus-sb4-starter",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${warm-flow}"
        },
        {
          "name": "org.dromara.warm:warm-flow-mybatis-plus-solon-plugin",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${warm-flow}"
        },
        {
          "name": "org.dromara.warm:warm-flow-easy-query-core",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${warm-flow}"
        },
        {
          "name": "org.dromara.warm:warm-flow-easy-query-sb-starter",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${warm-flow}"
        },
        {
          "name": "org.dromara.warm:warm-flow-easy-query-sb3-starter",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${warm-flow}"
        },
        {
          "name": "org.dromara.warm:warm-flow-easy-query-sb4-starter",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${warm-flow}"
        },
        {
          "name": "org.dromara.warm:warm-flow-easy-query-solon-plugin",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${warm-flow}"
        },
        {
          "name": "org.dromara.warm:warm-flow-plugin-modes-sb",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${warm-flow}"
        },
        {
          "name": "org.dromara.warm:warm-flow-plugin-modes-solon",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${warm-flow}"
        },
        {
          "name": "org.dromara.warm:warm-flow-plugin-json-v1",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${warm-flow}"
        },
        {
          "name": "org.dromara.warm:warm-flow-plugin-json-jackson3",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${warm-flow}"
        },
        {
          "name": "org.dromara.warm:warm-flow-plugin-vue3-ui",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${warm-flow}"
        },
        {
          "name": "org.dromara.warm:warm-flow-plugin-ui-core",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${warm-flow}"
        },
        {
          "name": "org.dromara.warm:warm-flow-plugin-ui-sb-web",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${warm-flow}"
        },
        {
          "name": "org.dromara.warm:warm-flow-plugin-ui-solon-web",
          "manifest": "pom.xml",
          "ecosystem": "maven",
          "version_constraint": "${warm-flow}"
        },
        {
          "name": "org.slf4j:slf4j-api",
          "manifest": "warm-flow-core/pom.xml",
          "ecosystem": "maven",
          "version_constraint": null
        },
        {
          "name": "@element-plus/icons-vue",
          "manifest": "warm-flow-ui/package.json",
          "ecosystem": "npm",
          "version_constraint": "2.3.1"
        },
        {
          "name": "@form-create/designer",
          "manifest": "warm-flow-ui/package.json",
          "ecosystem": "npm",
          "version_constraint": "^3.2.6"
        },
        {
          "name": "@form-create/element-ui",
          "manifest": "warm-flow-ui/package.json",
          "ecosystem": "npm",
          "version_constraint": "^3.2.10"
        },
        {
          "name": "@logicflow/core",
          "manifest": "warm-flow-ui/package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.1.11"
        },
        {
          "name": "@logicflow/extension",
          "manifest": "warm-flow-ui/package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.1.15"
        },
        {
          "name": "axios",
          "manifest": "warm-flow-ui/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.27.2"
        },
        {
          "name": "element-plus",
          "manifest": "warm-flow-ui/package.json",
          "ecosystem": "npm",
          "version_constraint": "2.4.3"
        },
        {
          "name": "file-saver",
          "manifest": "warm-flow-ui/package.json",
          "ecosystem": "npm",
          "version_constraint": "2.0.5"
        },
        {
          "name": "pinia",
          "manifest": "warm-flow-ui/package.json",
          "ecosystem": "npm",
          "version_constraint": "2.1.7"
        },
        {
          "name": "vue",
          "manifest": "warm-flow-ui/package.json",
          "ecosystem": "npm",
          "version_constraint": "3.3.9"
        },
        {
          "name": "vue-router",
          "manifest": "warm-flow-ui/package.json",
          "ecosystem": "npm",
          "version_constraint": "4.2.5"
        }
      ],
      "all_dependencies": {
        "error": null,
        "source": "github-sbom",
        "packages": [
          {
            "name": "com.alibaba.fastjson2:fastjson2",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "com.alibaba.fastjson2:fastjson2",
            "direct": true,
            "version": "2.0.43",
            "ecosystem": "maven"
          },
          {
            "name": "com.baomidou:mybatis-plus-boot-starter",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "com.baomidou:mybatis-plus-boot-starter",
            "direct": true,
            "version": "3.5.12",
            "ecosystem": "maven"
          },
          {
            "name": "com.baomidou:mybatis-plus-extension",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "com.baomidou:mybatis-plus-extension",
            "direct": true,
            "version": "3.5.12",
            "ecosystem": "maven"
          },
          {
            "name": "com.baomidou:mybatis-plus-extension",
            "direct": true,
            "version": "3.5.15",
            "ecosystem": "maven"
          },
          {
            "name": "com.baomidou:mybatis-plus-jsqlparser",
            "direct": true,
            "version": "3.5.12",
            "ecosystem": "maven"
          },
          {
            "name": "com.baomidou:mybatis-plus-jsqlparser",
            "direct": true,
            "version": "3.5.15",
            "ecosystem": "maven"
          },
          {
            "name": "com.baomidou:mybatis-plus-jsqlparser-4.9",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "com.baomidou:mybatis-plus-jsqlparser-4.9",
            "direct": true,
            "version": "3.5.12",
            "ecosystem": "maven"
          },
          {
            "name": "com.baomidou:mybatis-plus-solon-plugin",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "com.baomidou:mybatis-plus-solon-plugin",
            "direct": true,
            "version": "3.5.12",
            "ecosystem": "maven"
          },
          {
            "name": "com.easy-query:sql-api-proxy",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "com.easy-query:sql-api-proxy",
            "direct": true,
            "version": "3.1.79",
            "ecosystem": "maven"
          },
          {
            "name": "com.easy-query:sql-processor",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "com.easy-query:sql-processor",
            "direct": true,
            "version": "3.1.79",
            "ecosystem": "maven"
          },
          {
            "name": "com.easy-query:sql-solon-plugin",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "com.easy-query:sql-solon-plugin",
            "direct": true,
            "version": "3.1.79",
            "ecosystem": "maven"
          },
          {
            "name": "com.easy-query:sql-springboot-starter",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "com.easy-query:sql-springboot-starter",
            "direct": true,
            "version": "3.1.79",
            "ecosystem": "maven"
          },
          {
            "name": "com.easy-query:sql-springboot4-starter",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "com.easy-query:sql-springboot4-starter",
            "direct": true,
            "version": "3.1.79",
            "ecosystem": "maven"
          },
          {
            "name": "com.fasterxml.jackson.core:jackson-databind",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "com.fasterxml.jackson.core:jackson-databind",
            "direct": true,
            "version": "2.13.5",
            "ecosystem": "maven"
          },
          {
            "name": "com.google.code.gson:gson",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "com.google.code.gson:gson",
            "direct": true,
            "version": "2.9.0",
            "ecosystem": "maven"
          },
          {
            "name": "org.dromara.warm:warm-flow-core",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.dromara.warm:warm-flow-easy-query-core",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.dromara.warm:warm-flow-easy-query-sb-starter",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.dromara.warm:warm-flow-easy-query-sb3-starter",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.dromara.warm:warm-flow-easy-query-sb4-starter",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.dromara.warm:warm-flow-easy-query-solon-plugin",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.dromara.warm:warm-flow-mybatis-core",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.dromara.warm:warm-flow-mybatis-plus-core",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.dromara.warm:warm-flow-mybatis-plus-sb-starter",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.dromara.warm:warm-flow-mybatis-plus-sb3-starter",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.dromara.warm:warm-flow-mybatis-plus-sb4-starter",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.dromara.warm:warm-flow-mybatis-plus-solon-plugin",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.dromara.warm:warm-flow-mybatis-sb-starter",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.dromara.warm:warm-flow-mybatis-sb3-starter",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.dromara.warm:warm-flow-mybatis-sb4-starter",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.dromara.warm:warm-flow-mybatis-solon-plugin",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.dromara.warm:warm-flow-plugin-json-jackson3",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.dromara.warm:warm-flow-plugin-json-v1",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.dromara.warm:warm-flow-plugin-modes-sb",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.dromara.warm:warm-flow-plugin-modes-solon",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.dromara.warm:warm-flow-plugin-ui-core",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.dromara.warm:warm-flow-plugin-ui-sb-web",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.dromara.warm:warm-flow-plugin-ui-solon-web",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.dromara.warm:warm-flow-plugin-vue3-ui",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.mybatis.spring.boot:mybatis-spring-boot-starter",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.mybatis.spring.boot:mybatis-spring-boot-starter",
            "direct": true,
            "version": "2.3.2",
            "ecosystem": "maven"
          },
          {
            "name": "org.mybatis.spring.boot:mybatis-spring-boot-starter",
            "direct": true,
            "version": "3.0.3",
            "ecosystem": "maven"
          },
          {
            "name": "org.mybatis.spring.boot:mybatis-spring-boot-starter",
            "direct": true,
            "version": "4.0.1",
            "ecosystem": "maven"
          },
          {
            "name": "org.mybatis:mybatis",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.mybatis:mybatis",
            "direct": true,
            "version": "3.5.15",
            "ecosystem": "maven"
          },
          {
            "name": "org.noear:mybatis-plus-extension-solon-plugin",
            "direct": true,
            "version": "3.10.0",
            "ecosystem": "maven"
          },
          {
            "name": "org.noear:mybatis-solon-plugin",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.noear:mybatis-solon-plugin",
            "direct": true,
            "version": "3.10.0",
            "ecosystem": "maven"
          },
          {
            "name": "org.noear:snack3",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.noear:snack3",
            "direct": true,
            "version": "3.2.139",
            "ecosystem": "maven"
          },
          {
            "name": "org.noear:snack4",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.noear:snack4",
            "direct": true,
            "version": "4.0.8",
            "ecosystem": "maven"
          },
          {
            "name": "org.noear:solon",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.noear:solon",
            "direct": true,
            "version": "3.10.0",
            "ecosystem": "maven"
          },
          {
            "name": "org.noear:solon-data",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.noear:solon-data",
            "direct": true,
            "version": "3.10.0",
            "ecosystem": "maven"
          },
          {
            "name": "org.noear:solon-logging-logback",
            "direct": true,
            "version": "3.10.0",
            "ecosystem": "maven"
          },
          {
            "name": "org.noear:solon-web",
            "direct": true,
            "version": "3.10.0",
            "ecosystem": "maven"
          },
          {
            "name": "org.noear:solon-web-staticfiles",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.noear:solon-web-staticfiles",
            "direct": true,
            "version": "3.10.0",
            "ecosystem": "maven"
          },
          {
            "name": "org.slf4j:slf4j-api",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.slf4j:slf4j-api",
            "direct": true,
            "version": "1.7.36",
            "ecosystem": "maven"
          },
          {
            "name": "org.springframework.boot:spring-boot-dependencies",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.springframework.boot:spring-boot-dependencies",
            "direct": true,
            "version": "2.7.18",
            "ecosystem": "maven"
          },
          {
            "name": "tools.jackson.core:jackson-databind",
            "direct": true,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "tools.jackson.core:jackson-databind",
            "direct": true,
            "version": "3.0.4",
            "ecosystem": "maven"
          },
          {
            "name": "@element-plus/icons-vue",
            "direct": true,
            "version": "2.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "@element-plus/icons-vue",
            "direct": true,
            "version": "2.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "@form-create/designer",
            "direct": true,
            "version": "^3.2.6",
            "ecosystem": "npm"
          },
          {
            "name": "@form-create/element-ui",
            "direct": true,
            "version": "^3.2.10",
            "ecosystem": "npm"
          },
          {
            "name": "@logicflow/core",
            "direct": true,
            "version": "2.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@logicflow/core",
            "direct": true,
            "version": "^1.2.15",
            "ecosystem": "npm"
          },
          {
            "name": "@logicflow/core",
            "direct": true,
            "version": "^2.0.12",
            "ecosystem": "npm"
          },
          {
            "name": "@logicflow/core",
            "direct": true,
            "version": "^2.1.11",
            "ecosystem": "npm"
          },
          {
            "name": "@logicflow/extension",
            "direct": true,
            "version": "2.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@logicflow/extension",
            "direct": true,
            "version": "^1.2.16",
            "ecosystem": "npm"
          },
          {
            "name": "@logicflow/extension",
            "direct": true,
            "version": "^2.0.16",
            "ecosystem": "npm"
          },
          {
            "name": "@logicflow/extension",
            "direct": true,
            "version": "^2.1.15",
            "ecosystem": "npm"
          },
          {
            "name": "axios",
            "direct": true,
            "version": "0.27.2",
            "ecosystem": "npm"
          },
          {
            "name": "element-plus",
            "direct": true,
            "version": "2.4.3",
            "ecosystem": "npm"
          },
          {
            "name": "file-saver",
            "direct": true,
            "version": "2.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "pinia",
            "direct": true,
            "version": "2.1.7",
            "ecosystem": "npm"
          },
          {
            "name": "vue",
            "direct": true,
            "version": "3.3.9",
            "ecosystem": "npm"
          },
          {
            "name": "vue-router",
            "direct": true,
            "version": "4.2.5",
            "ecosystem": "npm"
          },
          {
            "name": "com.baomidou:mybatis-plus-spring-boot3-starter",
            "direct": false,
            "version": "3.5.12",
            "ecosystem": "maven"
          },
          {
            "name": "com.baomidou:mybatis-plus-spring-boot4-starter",
            "direct": false,
            "version": "3.5.15",
            "ecosystem": "maven"
          },
          {
            "name": "junit:junit",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.apache.maven.plugins:maven-compiler-plugin",
            "direct": false,
            "version": "3.8.1",
            "ecosystem": "maven"
          },
          {
            "name": "org.apache.maven.plugins:maven-deploy-plugin",
            "direct": false,
            "version": "3.1.2",
            "ecosystem": "maven"
          },
          {
            "name": "org.apache.maven.plugins:maven-gpg-plugin",
            "direct": false,
            "version": "1.6",
            "ecosystem": "maven"
          },
          {
            "name": "org.apache.maven.plugins:maven-jar-plugin",
            "direct": false,
            "version": "3.2.0",
            "ecosystem": "maven"
          },
          {
            "name": "org.apache.maven.plugins:maven-javadoc-plugin",
            "direct": false,
            "version": "2.10.4",
            "ecosystem": "maven"
          },
          {
            "name": "org.apache.maven.plugins:maven-source-plugin",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "maven"
          },
          {
            "name": "org.projectlombok:lombok",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.sonatype.central:central-publishing-maven-plugin",
            "direct": false,
            "version": "0.6.0",
            "ecosystem": "maven"
          },
          {
            "name": "org.springframework.boot:spring-boot",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.springframework.boot:spring-boot-autoconfigure",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.springframework.boot:spring-boot-configuration-processor",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.springframework:spring-context",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.springframework:spring-tx",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.springframework:spring-webmvc",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "@ant-design/colors",
            "direct": false,
            "version": "6.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "@ant-design/icons-svg",
            "direct": false,
            "version": "4.4.2",
            "ecosystem": "npm"
          },
          {
            "name": "@ant-design/icons-vue",
            "direct": false,
            "version": "6.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "@antfu/utils",
            "direct": false,
            "version": "0.7.10",
            "ecosystem": "npm"
          },
          {
            "name": "@antv/hierarchy",
            "direct": false,
            "version": "0.6.11",
            "ecosystem": "npm"
          },
          {
            "name": "@antv/util",
            "direct": false,
            "version": "2.0.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-string-parser",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-validator-identifier",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/parser",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/runtime",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/types",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@css-render/plugin-bem",
            "direct": false,
            "version": "0.15.14",
            "ecosystem": "npm"
          },
          {
            "name": "@css-render/vue3-ssr",
            "direct": false,
            "version": "0.15.14",
            "ecosystem": "npm"
          },
          {
            "name": "@ctrl/tinycolor",
            "direct": false,
            "version": "3.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "@emotion/hash",
            "direct": false,
            "version": "0.8.0",
            "ecosystem": "npm"
          },
          {
            "name": "@emotion/hash",
            "direct": false,
            "version": "0.9.2",
            "ecosystem": "npm"
          },
          {
            "name": "@emotion/unitless",
            "direct": false,
            "version": "0.8.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/android-arm",
            "direct": false,
            "version": "0.19.3",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/android-arm64",
            "direct": false,
            "version": "0.19.3",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/android-x64",
            "direct": false,
            "version": "0.19.3",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/darwin-arm64",
            "direct": false,
            "version": "0.19.3",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/darwin-x64",
            "direct": false,
            "version": "0.19.3",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/freebsd-arm64",
            "direct": false,
            "version": "0.19.3",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/freebsd-x64",
            "direct": false,
            "version": "0.19.3",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-arm",
            "direct": false,
            "version": "0.19.3",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-arm64",
            "direct": false,
            "version": "0.19.3",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-ia32",
            "direct": false,
            "version": "0.19.3",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-loong64",
            "direct": false,
            "version": "0.19.3",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-mips64el",
            "direct": false,
            "version": "0.19.3",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-ppc64",
            "direct": false,
            "version": "0.19.3",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-riscv64",
            "direct": false,
            "version": "0.19.3",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-s390x",
            "direct": false,
            "version": "0.19.3",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-x64",
            "direct": false,
            "version": "0.19.3",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/netbsd-x64",
            "direct": false,
            "version": "0.19.3",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/openbsd-x64",
            "direct": false,
            "version": "0.19.3",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/sunos-x64",
            "direct": false,
            "version": "0.19.3",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/win32-arm64",
            "direct": false,
            "version": "0.19.3",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/win32-ia32",
            "direct": false,
            "version": "0.19.3",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/win32-x64",
            "direct": false,
            "version": "0.19.3",
            "ecosystem": "npm"
          },
          {
            "name": "@floating-ui/core",
            "direct": false,
            "version": "1.7.5",
            "ecosystem": "npm"
          },
          {
            "name": "@floating-ui/dom",
            "direct": false,
            "version": "1.7.6",
            "ecosystem": "npm"
          },
          {
            "name": "@floating-ui/utils",
            "direct": false,
            "version": "0.2.11",
            "ecosystem": "npm"
          },
          {
            "name": "@iconify-json/ep",
            "direct": false,
            "version": "1.2.4",
            "ecosystem": "npm"
          },
          {
            "name": "@iconify-json/ep",
            "direct": false,
            "version": "^1.2.4",
            "ecosystem": "npm"
          },
          {
            "name": "@iconify/types",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "@iconify/vue",
            "direct": false,
            "version": "5.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "@iconify/vue",
            "direct": false,
            "version": "^5.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "@jridgewell/sourcemap-codec",
            "direct": false,
            "version": "1.5.5",
            "ecosystem": "npm"
          },
          {
            "name": "@juggle/resize-observer",
            "direct": false,
            "version": "3.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "@nodelib/fs.scandir",
            "direct": false,
            "version": "2.1.5",
            "ecosystem": "npm"
          },
          {
            "name": "@nodelib/fs.stat",
            "direct": false,
            "version": "2.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "@nodelib/fs.walk",
            "direct": false,
            "version": "1.2.8",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/pluginutils",
            "direct": false,
            "version": "5.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-android-arm-eabi",
            "direct": false,
            "version": "4.62.2",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-android-arm64",
            "direct": false,
            "version": "4.62.2",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-darwin-arm64",
            "direct": false,
            "version": "4.62.2",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-darwin-x64",
            "direct": false,
            "version": "4.62.2",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-freebsd-arm64",
            "direct": false,
            "version": "4.62.2",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-freebsd-x64",
            "direct": false,
            "version": "4.62.2",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-linux-arm-gnueabihf",
            "direct": false,
            "version": "4.62.2",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-linux-arm-musleabihf",
            "direct": false,
            "version": "4.62.2",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-linux-arm64-gnu",
            "direct": false,
            "version": "4.62.2",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-linux-arm64-musl",
            "direct": false,
            "version": "4.62.2",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-linux-loong64-gnu",
            "direct": false,
            "version": "4.62.2",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-linux-loong64-musl",
            "direct": false,
            "version": "4.62.2",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-linux-ppc64-gnu",
            "direct": false,
            "version": "4.62.2",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-linux-ppc64-musl",
            "direct": false,
            "version": "4.62.2",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-linux-riscv64-gnu",
            "direct": false,
            "version": "4.62.2",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-linux-riscv64-musl",
            "direct": false,
            "version": "4.62.2",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-linux-s390x-gnu",
            "direct": false,
            "version": "4.62.2",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-linux-x64-gnu",
            "direct": false,
            "version": "4.62.2",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-linux-x64-musl",
            "direct": false,
            "version": "4.62.2",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-openbsd-x64",
            "direct": false,
            "version": "4.62.2",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-openharmony-arm64",
            "direct": false,
            "version": "4.62.2",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-win32-arm64-msvc",
            "direct": false,
            "version": "4.62.2",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-win32-ia32-msvc",
            "direct": false,
            "version": "4.62.2",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-win32-x64-gnu",
            "direct": false,
            "version": "4.62.2",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-win32-x64-msvc",
            "direct": false,
            "version": "4.62.2",
            "ecosystem": "npm"
          },
          {
            "name": "@simonwep/pickr",
            "direct": false,
            "version": "1.8.2",
            "ecosystem": "npm"
          },
          {
            "name": "@sphinxxxx/color-conversion",
            "direct": false,
            "version": "2.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "@sxzz/popperjs-es",
            "direct": false,
            "version": "2.11.8",
            "ecosystem": "npm"
          },
          {
            "name": "@types/estree",
            "direct": false,
            "version": "1.0.9",
            "ecosystem": "npm"
          },
          {
            "name": "@types/lodash",
            "direct": false,
            "version": "4.17.24",
            "ecosystem": "npm"
          },
          {
            "name": "@types/lodash-es",
            "direct": false,
            "version": "4.17.12",
            "ecosystem": "npm"
          },
          {
            "name": "@types/web-bluetooth",
            "direct": false,
            "version": "0.0.15",
            "ecosystem": "npm"
          },
          {
            "name": "@vitejs/plugin-vue",
            "direct": false,
            "version": "4.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "@volar/language-core",
            "direct": false,
            "version": "2.4.28",
            "ecosystem": "npm"
          },
          {
            "name": "@volar/source-map",
            "direct": false,
            "version": "2.4.28",
            "ecosystem": "npm"
          },
          {
            "name": "@volar/typescript",
            "direct": false,
            "version": "2.4.28",
            "ecosystem": "npm"
          },
          {
            "name": "@vue/compiler-core",
            "direct": false,
            "version": "3.3.9",
            "ecosystem": "npm"
          },
          {
            "name": "@vue/compiler-core",
            "direct": false,
            "version": "3.5.38",
            "ecosystem": "npm"
          },
          {
            "name": "@vue/compiler-dom",
            "direct": false,
            "version": "3.3.9",
            "ecosystem": "npm"
          },
          {
            "name": "@vue/compiler-dom",
            "direct": false,
            "version": "3.5.38",
            "ecosystem": "npm"
          },
          {
            "name": "@vue/compiler-sfc",
            "direct": false,
            "version": "3.3.9",
            "ecosystem": "npm"
          },
          {
            "name": "@vue/compiler-sfc",
            "direct": false,
            "version": "3.5.38",
            "ecosystem": "npm"
          },
          {
            "name": "@vue/compiler-ssr",
            "direct": false,
            "version": "3.3.9",
            "ecosystem": "npm"
          },
          {
            "name": "@vue/compiler-ssr",
            "direct": false,
            "version": "3.5.38",
            "ecosystem": "npm"
          },
          {
            "name": "@vue/devtools-api",
            "direct": false,
            "version": "6.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "@vue/language-core",
            "direct": false,
            "version": "3.3.5",
            "ecosystem": "npm"
          },
          {
            "name": "@vue/language-core",
            "direct": false,
            "version": "^3.3.5",
            "ecosystem": "npm"
          },
          {
            "name": "@vue/reactivity",
            "direct": false,
            "version": "3.3.9",
            "ecosystem": "npm"
          },
          {
            "name": "@vue/reactivity-transform",
            "direct": false,
            "version": "3.3.9",
            "ecosystem": "npm"
          },
          {
            "name": "@vue/runtime-core",
            "direct": false,
            "version": "3.3.9",
            "ecosystem": "npm"
          },
          {
            "name": "@vue/runtime-dom",
            "direct": false,
            "version": "3.3.9",
            "ecosystem": "npm"
          },
          {
            "name": "@vue/server-renderer",
            "direct": false,
            "version": "3.3.9",
            "ecosystem": "npm"
          },
          {
            "name": "@vue/shared",
            "direct": false,
            "version": "3.3.9",
            "ecosystem": "npm"
          },
          {
            "name": "@vue/shared",
            "direct": false,
            "version": "3.5.38",
            "ecosystem": "npm"
          },
          {
            "name": "@vueuse/core",
            "direct": false,
            "version": "9.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "@vueuse/metadata",
            "direct": false,
            "version": "9.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "@vueuse/shared",
            "direct": false,
            "version": "9.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "acorn",
            "direct": false,
            "version": "8.17.0",
            "ecosystem": "npm"
          },
          {
            "name": "alien-signals",
            "direct": false,
            "version": "3.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-styles",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "ant-design-vue",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "ant-design-vue",
            "direct": false,
            "version": "^4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "anymatch",
            "direct": false,
            "version": "3.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "array-tree-filter",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "async-validator",
            "direct": false,
            "version": "4.2.5",
            "ecosystem": "npm"
          },
          {
            "name": "asynckit",
            "direct": false,
            "version": "0.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "balanced-match",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "binary-extensions",
            "direct": false,
            "version": "2.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "brace-expansion",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "braces",
            "direct": false,
            "version": "3.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "call-bind-apply-helpers",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "chalk",
            "direct": false,
            "version": "4.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "chokidar",
            "direct": false,
            "version": "3.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "classnames",
            "direct": false,
            "version": "2.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "color-convert",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "color-name",
            "direct": false,
            "version": "1.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "combined-stream",
            "direct": false,
            "version": "1.0.8",
            "ecosystem": "npm"
          },
          {
            "name": "compare-versions",
            "direct": false,
            "version": "6.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "compute-scroll-into-view",
            "direct": false,
            "version": "1.0.20",
            "ecosystem": "npm"
          },
          {
            "name": "confbox",
            "direct": false,
            "version": "0.1.8",
            "ecosystem": "npm"
          },
          {
            "name": "confbox",
            "direct": false,
            "version": "0.2.4",
            "ecosystem": "npm"
          },
          {
            "name": "core-js",
            "direct": false,
            "version": "3.49.0",
            "ecosystem": "npm"
          },
          {
            "name": "css-render",
            "direct": false,
            "version": "0.15.14",
            "ecosystem": "npm"
          },
          {
            "name": "csstype",
            "direct": false,
            "version": "3.0.11",
            "ecosystem": "npm"
          },
          {
            "name": "csstype",
            "direct": false,
            "version": "3.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "date-fns",
            "direct": false,
            "version": "4.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "date-fns-tz",
            "direct": false,
            "version": "3.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "dayjs",
            "direct": false,
            "version": "1.11.21",
            "ecosystem": "npm"
          },
          {
            "name": "debug",
            "direct": false,
            "version": "4.4.3",
            "ecosystem": "npm"
          },
          {
            "name": "delayed-stream",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "dom-align",
            "direct": false,
            "version": "1.12.4",
            "ecosystem": "npm"
          },
          {
            "name": "dom-scroll-into-view",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "dunder-proto",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "entities",
            "direct": false,
            "version": "7.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "es-define-property",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "es-errors",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "es-object-atoms",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "es-set-tostringtag",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "esbuild",
            "direct": false,
            "version": "0.19.3",
            "ecosystem": "npm"
          },
          {
            "name": "escape-html",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "escape-string-regexp",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "estree-walker",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "evtd",
            "direct": false,
            "version": "0.2.4",
            "ecosystem": "npm"
          },
          {
            "name": "exsolve",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "fast-glob",
            "direct": false,
            "version": "3.3.3",
            "ecosystem": "npm"
          },
          {
            "name": "fastq",
            "direct": false,
            "version": "1.20.1",
            "ecosystem": "npm"
          },
          {
            "name": "fill-range",
            "direct": false,
            "version": "7.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "follow-redirects",
            "direct": false,
            "version": "1.16.0",
            "ecosystem": "npm"
          },
          {
            "name": "form-data",
            "direct": false,
            "version": "4.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "fs-extra",
            "direct": false,
            "version": "10.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "fsevents",
            "direct": false,
            "version": "2.3.3",
            "ecosystem": "npm"
          },
          {
            "name": "function-bind",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "get-intrinsic",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "get-proto",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "glob-parent",
            "direct": false,
            "version": "5.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "gopd",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "graceful-fs",
            "direct": false,
            "version": "4.2.11",
            "ecosystem": "npm"
          },
          {
            "name": "has-flag",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "has-symbols",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "has-tostringtag",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "hasown",
            "direct": false,
            "version": "2.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "highlight.js",
            "direct": false,
            "version": "11.11.1",
            "ecosystem": "npm"
          },
          {
            "name": "hoist-non-react-statics",
            "direct": false,
            "version": "2.5.5",
            "ecosystem": "npm"
          },
          {
            "name": "immutable",
            "direct": false,
            "version": "4.3.8",
            "ecosystem": "npm"
          },
          {
            "name": "is-binary-path",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-extglob",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "is-glob",
            "direct": false,
            "version": "4.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "is-number",
            "direct": false,
            "version": "7.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-plain-object",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "js-cookie",
            "direct": false,
            "version": "3.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "js-tokens",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "jsonc-parser",
            "direct": false,
            "version": "3.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "jsonfile",
            "direct": false,
            "version": "6.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "kolorist",
            "direct": false,
            "version": "1.8.0",
            "ecosystem": "npm"
          },
          {
            "name": "local-pkg",
            "direct": false,
            "version": "0.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "local-pkg",
            "direct": false,
            "version": "1.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "lodash",
            "direct": false,
            "version": "4.18.1",
            "ecosystem": "npm"
          },
          {
            "name": "lodash-es",
            "direct": false,
            "version": "4.18.1",
            "ecosystem": "npm"
          },
          {
            "name": "lodash-unified",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "loose-envify",
            "direct": false,
            "version": "1.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "magic-string",
            "direct": false,
            "version": "0.26.7",
            "ecosystem": "npm"
          },
          {
            "name": "magic-string",
            "direct": false,
            "version": "0.30.21",
            "ecosystem": "npm"
          },
          {
            "name": "math-intrinsics",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "medium-editor",
            "direct": false,
            "version": "5.23.3",
            "ecosystem": "npm"
          },
          {
            "name": "memoize-one",
            "direct": false,
            "version": "6.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "merge2",
            "direct": false,
            "version": "1.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "micromatch",
            "direct": false,
            "version": "4.0.8",
            "ecosystem": "npm"
          },
          {
            "name": "mime-db",
            "direct": false,
            "version": "1.52.0",
            "ecosystem": "npm"
          },
          {
            "name": "mime-types",
            "direct": false,
            "version": "2.1.35",
            "ecosystem": "npm"
          },
          {
            "name": "minimatch",
            "direct": false,
            "version": "9.0.9",
            "ecosystem": "npm"
          },
          {
            "name": "mlly",
            "direct": false,
            "version": "1.8.2",
            "ecosystem": "npm"
          },
          {
            "name": "mobx",
            "direct": false,
            "version": "5.15.7",
            "ecosystem": "npm"
          },
          {
            "name": "mobx-preact",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "mobx-utils",
            "direct": false,
            "version": "5.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "mousetrap",
            "direct": false,
            "version": "1.6.5",
            "ecosystem": "npm"
          },
          {
            "name": "ms",
            "direct": false,
            "version": "2.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "muggle-string",
            "direct": false,
            "version": "0.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "naive-ui",
            "direct": false,
            "version": "2.44.1",
            "ecosystem": "npm"
          },
          {
            "name": "naive-ui",
            "direct": false,
            "version": "^2.44.1",
            "ecosystem": "npm"
          },
          {
            "name": "nanoid",
            "direct": false,
            "version": "3.3.15",
            "ecosystem": "npm"
          },
          {
            "name": "nanopop",
            "direct": false,
            "version": "2.4.2",
            "ecosystem": "npm"
          },
          {
            "name": "normalize-path",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "normalize-wheel-es",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "path-browserify",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "pathe",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "pathe",
            "direct": false,
            "version": "2.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "picocolors",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "picomatch",
            "direct": false,
            "version": "2.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "picomatch",
            "direct": false,
            "version": "4.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "pkg-types",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "pkg-types",
            "direct": false,
            "version": "1.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "pkg-types",
            "direct": false,
            "version": "2.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "postcss",
            "direct": false,
            "version": "8.5.15",
            "ecosystem": "npm"
          },
          {
            "name": "preact",
            "direct": false,
            "version": "10.29.2",
            "ecosystem": "npm"
          },
          {
            "name": "quansync",
            "direct": false,
            "version": "0.2.11",
            "ecosystem": "npm"
          },
          {
            "name": "queue-microtask",
            "direct": false,
            "version": "1.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "rangy",
            "direct": false,
            "version": "1.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "readdirp",
            "direct": false,
            "version": "3.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "resize-observer-polyfill",
            "direct": false,
            "version": "1.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "reusify",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "rollup",
            "direct": false,
            "version": "4.62.2",
            "ecosystem": "npm"
          },
          {
            "name": "run-parallel",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "sass",
            "direct": false,
            "version": "1.69.5",
            "ecosystem": "npm"
          },
          {
            "name": "scroll-into-view-if-needed",
            "direct": false,
            "version": "2.2.31",
            "ecosystem": "npm"
          },
          {
            "name": "scule",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "seemly",
            "direct": false,
            "version": "0.3.10",
            "ecosystem": "npm"
          },
          {
            "name": "shallow-equal",
            "direct": false,
            "version": "1.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "source-map-js",
            "direct": false,
            "version": "1.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "sourcemap-codec",
            "direct": false,
            "version": "1.4.8",
            "ecosystem": "npm"
          },
          {
            "name": "strip-literal",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "stylis",
            "direct": false,
            "version": "4.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "supports-color",
            "direct": false,
            "version": "7.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "throttle-debounce",
            "direct": false,
            "version": "5.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "to-regex-range",
            "direct": false,
            "version": "5.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "treemate",
            "direct": false,
            "version": "0.3.11",
            "ecosystem": "npm"
          },
          {
            "name": "tslib",
            "direct": false,
            "version": "1.14.1",
            "ecosystem": "npm"
          },
          {
            "name": "typescript",
            "direct": false,
            "version": "5.3.3",
            "ecosystem": "npm"
          },
          {
            "name": "typescript",
            "direct": false,
            "version": "6.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "typescript",
            "direct": false,
            "version": "^5.3.3",
            "ecosystem": "npm"
          },
          {
            "name": "typescript",
            "direct": false,
            "version": "^6.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "ufo",
            "direct": false,
            "version": "1.6.4",
            "ecosystem": "npm"
          },
          {
            "name": "unimport",
            "direct": false,
            "version": "3.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "universalify",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "unplugin",
            "direct": false,
            "version": "1.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "unplugin",
            "direct": false,
            "version": "1.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "unplugin",
            "direct": false,
            "version": "2.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "unplugin-auto-import",
            "direct": false,
            "version": "0.17.1",
            "ecosystem": "npm"
          },
          {
            "name": "unplugin-dts",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "unplugin-vue-setup-extend-plus",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "uuid",
            "direct": false,
            "version": "9.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "vanilla-picker",
            "direct": false,
            "version": "2.12.3",
            "ecosystem": "npm"
          },
          {
            "name": "vdirs",
            "direct": false,
            "version": "0.1.8",
            "ecosystem": "npm"
          },
          {
            "name": "vite",
            "direct": false,
            "version": "5.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "vite-plugin-compression",
            "direct": false,
            "version": "0.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "vite-plugin-dts",
            "direct": false,
            "version": "5.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "vite-plugin-dts",
            "direct": false,
            "version": "^5.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "vite-plugin-svg-icons",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "vooks",
            "direct": false,
            "version": "0.2.12",
            "ecosystem": "npm"
          },
          {
            "name": "vscode-uri",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "vue-demi",
            "direct": false,
            "version": "0.14.10",
            "ecosystem": "npm"
          },
          {
            "name": "vue-types",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "vueuc",
            "direct": false,
            "version": "0.4.65",
            "ecosystem": "npm"
          },
          {
            "name": "warning",
            "direct": false,
            "version": "4.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "webpack-sources",
            "direct": false,
            "version": "3.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "webpack-virtual-modules",
            "direct": false,
            "version": "0.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "webpack-virtual-modules",
            "direct": false,
            "version": "0.6.2",
            "ecosystem": "npm"
          }
        ],
        "collected": true,
        "truncated": false,
        "total_count": 392,
        "direct_count": 96,
        "indirect_count": 296
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 0,
        "merged_prs": 19,
        "open_issues": 6,
        "closed_ratio": 0.4,
        "closed_issues": 4,
        "closed_unmerged_prs": 3
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "warmrui",
          "commits": 1074,
          "avatar_url": "https://avatars.githubusercontent.com/u/239079570?v=4"
        },
        {
          "type": "User",
          "login": "levin950825",
          "commits": 133,
          "avatar_url": "https://avatars.githubusercontent.com/u/13896536?v=4"
        },
        {
          "type": "User",
          "login": "vanlin",
          "commits": 81,
          "avatar_url": "https://avatars.githubusercontent.com/u/983627?v=4"
        },
        {
          "type": "User",
          "login": "xiarigang",
          "commits": 70,
          "avatar_url": "https://avatars.githubusercontent.com/u/171214301?v=4"
        },
        {
          "type": "User",
          "login": "Vittery",
          "commits": 56,
          "avatar_url": "https://avatars.githubusercontent.com/u/173595000?v=4"
        },
        {
          "type": "User",
          "login": "liangli-hue",
          "commits": 37,
          "avatar_url": "https://avatars.githubusercontent.com/u/65402120?v=4"
        },
        {
          "type": "User",
          "login": "lihu5297",
          "commits": 16,
          "avatar_url": "https://avatars.githubusercontent.com/u/25146247?v=4"
        },
        {
          "type": "User",
          "login": "chengmaoning",
          "commits": 13,
          "avatar_url": "https://avatars.githubusercontent.com/u/5194965?v=4"
        },
        {
          "type": "User",
          "login": "lovelevent",
          "commits": 13,
          "avatar_url": "https://avatars.githubusercontent.com/u/143263146?v=4"
        },
        {
          "type": "User",
          "login": "liutao-lx",
          "commits": 10,
          "avatar_url": "https://avatars.githubusercontent.com/u/56618327?v=4"
        }
      ],
      "contributors_sampled": 32,
      "top_contributor_share": 0.685
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": false,
      "ci_workflows": [
        "release.yml"
      ],
      "has_docs_dir": false,
      "linter_configs": [],
      "has_editorconfig": true,
      "has_linter_config": false,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "pnpm-lock.yaml"
      ],
      "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": 10,
            "reason": "project has 4 contributing companies or organizations",
            "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": null,
            "reason": "no dependencies found",
            "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": "59 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "37b17a8939f0931ab8c19d66b768050325da3bcf",
        "ran_at": "2026-07-25T10:42:56Z",
        "aggregate_score": 3,
        "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": "2026-07-14T07:37:47Z",
      "oldest_open_prs": [],
      "last_merged_pr_at": "2025-07-11T00:32:32Z",
      "ci_last_conclusion": null,
      "oldest_open_issues": [
        {
          "number": 31,
          "created_at": "2025-06-16T17:17:31Z",
          "last_comment_at": "2025-07-11T00:34:01Z",
          "last_comment_author": "minliuhua"
        },
        {
          "number": 34,
          "created_at": "2025-08-14T00:14:47Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 42,
          "created_at": "2025-11-21T03:09:02Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 44,
          "created_at": "2026-01-06T07:42:46Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 46,
          "created_at": "2026-04-24T08:33:56Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 47,
          "created_at": "2026-05-14T04:08:31Z",
          "last_comment_at": null,
          "last_comment_author": null
        }
      ]
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/dromara/warm-flow",
    "host": "github.com",
    "name": "warm-flow",
    "owner": "dromara"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 61,
      "inputs": {
        "security": 44,
        "vitality": 79,
        "community": 58,
        "governance": 65,
        "engineering": 53
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "good",
        "name": "Vitality",
        "value": 79,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "excellent",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 86,
            "inputs": {
              "commits_last_year": 328,
              "human_commit_share": 1,
              "days_since_last_push": 5,
              "active_weeks_last_year": 31
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 5 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 5
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "31/52 weeks with commits",
                "points": 21.5,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 31
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "328 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 328
                    }
                  }
                ],
                "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": "moderate",
            "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": 68,
            "inputs": {
              "releases_count": 10,
              "latest_release_tag": "v1.6.0-m4",
              "releases_from_tags": false,
              "days_since_latest_release": 556,
              "mean_days_between_releases": 9.6
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "10 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 10
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 556 days ago",
                "points": 7.2,
                "status": "partial",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 556
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~9.6 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 9.6
                    }
                  }
                ],
                "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": 11,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "last human commit 11 days ago",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_maintained",
                    "params": {
                      "days": 11
                    }
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "moderate",
        "name": "Community & Adoption",
        "value": 58,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "moderate",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 65,
            "inputs": {
              "forks": 83,
              "stars": 573,
              "watchers": 6,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "573 stars",
                "points": 44.7,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 573
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "83 forks",
                "points": 16,
                "status": "partial",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 83
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "6 watchers",
                "points": 3.9,
                "status": "partial",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 6
                    }
                  }
                ],
                "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": "moderate",
        "name": "Sustainability & Governance",
        "value": 65,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "at_risk",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 32,
              "top_contributor_share": 0.685
            },
            "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 68% of commits",
                "points": 7.1,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 68
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "32 contributors",
                "points": 13.5,
                "status": "met",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 32
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 4 contributing companies or organizations",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "moderate",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 52,
            "inputs": {
              "merged_prs": 19,
              "open_issues": 6,
              "closed_issues": 4,
              "issue_closed_ratio": 0.4,
              "closed_unmerged_prs": 3
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "40% of issues closed",
                "points": 18.7,
                "status": "partial",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 40
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "19/22 decided PRs merged",
                "points": 33,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 19,
                      "decided": 22
                    }
                  }
                ],
                "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": "good",
            "name": "Ownership & stewardship",
            "note": null,
            "notes": [],
            "value": 80,
            "inputs": {
              "followers": 2875,
              "owner_type": "Organization",
              "is_verified": null,
              "owner_login": "dromara",
              "public_repos": 103,
              "account_age_days": 2936
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "organization-owned",
                "points": 30,
                "status": "met",
                "details": [
                  {
                    "code": "owner_organization",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "2,875 followers of dromara",
                "points": 24.9,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 2875,
                      "login": "dromara"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "103 public repos, account ~8 yr old",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 103
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 8
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "org.dromara.warm:warm-flow-core"
              ],
              "ecosystems": "maven",
              "any_deprecated": false,
              "min_days_since_publish": 12
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "1 package(s) on maven",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 1,
                      "ecosystems": "maven"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 12 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 12
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "73 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 73
                    }
                  }
                ],
                "max_points": 20
              },
              {
                "key": "not_deprecated",
                "name": "Not deprecated",
                "detail": "active, not deprecated or yanked",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "package_not_deprecated",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "moderate",
        "name": "Engineering Quality",
        "value": 53,
        "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": 38,
            "inputs": {
              "has_ci": true,
              "has_tests": false,
              "has_editorconfig": true,
              "has_linter_config": false,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "1 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 0,
                "status": "missed",
                "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": 6.4,
                "status": "met",
                "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": "good",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 75,
            "inputs": {
              "topics": [
                "workflow"
              ],
              "has_wiki": true,
              "homepage": "http://www.warm-flow.cn",
              "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": "http://www.warm-flow.cn",
                "points": 15,
                "status": "met",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": "1 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "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": 44,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): CI-Tests, Dangerous-Workflow, Packaging, Pinned-Dependencies, Signed-Releases, Token-Permissions. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "ci_tests",
                    "dangerous_workflow",
                    "packaging",
                    "pinned_dependencies",
                    "signed_releases",
                    "token_permissions"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 30,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 12,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 6,
              "scorecard_aggregate": 3
            },
            "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 4 contributing companies or organizations",
                "points": 2.5,
                "status": "met",
                "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": "no dependencies found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "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": "59 existing vulnerabilities detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "dependency_advisories",
            "band": "excellent",
            "name": "Dependency advisories",
            "note": "Excluded from scoring (no data or not applicable): No advisories left outstanding. Remaining weights renormalized. Matched the maven:org.dromara.warm:warm-flow-core@1.8.9 runtime dependency closure — what installing the published package pulls in — 2 packages. Reachability is not analyzed.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "no_advisories_left_outstanding"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              },
              {
                "code": "advisories_scope_published",
                "params": {
                  "package": "maven:org.dromara.warm:warm-flow-core@1.8.9",
                  "assessed": 2
                }
              },
              {
                "code": "advisories_reachability",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "source": "osv",
              "advisories": 0,
              "affected_packages": 0,
              "assessed_packages": 2,
              "unassessed_packages": 0,
              "affected_by_severity": "none",
              "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": "no indirect dependency carries a known advisory",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "no_indirect_advisories",
                    "params": {}
                  }
                ],
                "max_points": 25
              },
              {
                "key": "no_advisories_left_outstanding",
                "name": "No advisories left outstanding",
                "detail": "no advisory carries a publication date",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "advisories_no_publication_date",
                    "params": {}
                  }
                ],
                "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": 2,
              "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": "good",
        "name": "AI Readiness",
        "value": 70,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "excellent",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 85,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.91,
              "agent_instruction_files": [
                ".cursor/rules/warm-flow.mdc",
                "AGENTS.md",
                "CLAUDE.md",
                "warm-flow-core/AGENTS.md",
                "warm-flow-orm/AGENTS.md",
                "warm-flow-plugin/AGENTS.md",
                "warm-flow-ui/AGENTS.md",
                "warm-flow-vue-designer/AGENTS.md"
              ],
              "agent_instruction_max_bytes": 20170
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": ".cursor/rules/warm-flow.mdc, AGENTS.md, CLAUDE.md, warm-flow-core/AGENTS.md, warm-flow-orm/AGENTS.md, warm-flow-plugin/AGENTS.md, warm-flow-ui/AGENTS.md, warm-flow-vue-designer/AGENTS.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".cursor/rules/warm-flow.mdc, AGENTS.md, CLAUDE.md, warm-flow-core/AGENTS.md, warm-flow-orm/AGENTS.md, warm-flow-plugin/AGENTS.md, warm-flow-ui/AGENTS.md, warm-flow-vue-designer/AGENTS.md"
                    }
                  }
                ],
                "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": "91 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 91,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "at_risk",
            "name": "Verify loop (build / test / typecheck)",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Pinned-Dependencies. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_pinned_dependencies"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 48,
            "inputs": {
              "has_nix": false,
              "has_tests": false,
              "lockfiles": [
                "pnpm-lock.yaml"
              ],
              "has_dockerfile": false,
              "typed_language": true,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": false,
              "typecheck_configs": [
                "warm-flow-designer-demo/warm-flow-antdv4-designer-demo/tsconfig.json",
                "warm-flow-designer-demo/warm-flow-ep-designer-demo/tsconfig.json",
                "warm-flow-designer-demo/warm-flow-naive-designer-demo/tsconfig.json",
                "warm-flow-vue-designer/tsconfig.json"
              ],
              "agent_commit_share": 0.83,
              "toolchain_manifests": [
                "pom.xml",
                "warm-flow-core/pom.xml",
                "warm-flow-orm/pom.xml",
                "warm-flow-orm/warm-flow-easy-query/pom.xml",
                "warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/pom.xml",
                "warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-sb-starter/pom.xml",
                "warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-sb3-starter/pom.xml",
                "warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-sb4-starter/pom.xml",
                "warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-solon-plugin/pom.xml",
                "warm-flow-orm/warm-flow-mybatis-plus/pom.xml",
                "warm-flow-orm/warm-flow-mybatis-plus/warm-flow-mybatis-plus-core/pom.xml",
                "warm-flow-orm/warm-flow-mybatis-plus/warm-flow-mybatis-plus-sb-starter/pom.xml",
                "warm-flow-orm/warm-flow-mybatis-plus/warm-flow-mybatis-plus-sb3-starter/pom.xml",
                "warm-flow-orm/warm-flow-mybatis-plus/warm-flow-mybatis-plus-sb4-starter/pom.xml",
                "warm-flow-orm/warm-flow-mybatis-plus/warm-flow-mybatis-plus-solon-plugin/pom.xml",
                "warm-flow-orm/warm-flow-mybatis/pom.xml",
                "warm-flow-orm/warm-flow-mybatis/warm-flow-mybatis-core/pom.xml",
                "warm-flow-orm/warm-flow-mybatis/warm-flow-mybatis-sb-starter/pom.xml",
                "warm-flow-orm/warm-flow-mybatis/warm-flow-mybatis-sb3-starter/pom.xml",
                "warm-flow-orm/warm-flow-mybatis/warm-flow-mybatis-sb4-starter/pom.xml",
                "warm-flow-orm/warm-flow-mybatis/warm-flow-mybatis-solon-plugin/pom.xml",
                "warm-flow-plugin/pom.xml",
                "warm-flow-plugin/warm-flow-plugin-json/pom.xml",
                "warm-flow-plugin/warm-flow-plugin-json/warm-flow-plugin-json-jackson3/pom.xml",
                "warm-flow-plugin/warm-flow-plugin-json/warm-flow-plugin-json-v1/pom.xml",
                "warm-flow-plugin/warm-flow-plugin-modes/pom.xml",
                "warm-flow-plugin/warm-flow-plugin-modes/warm-flow-plugin-modes-sb/pom.xml",
                "warm-flow-plugin/warm-flow-plugin-modes/warm-flow-plugin-modes-solon/pom.xml",
                "warm-flow-plugin/warm-flow-plugin-ui/pom.xml",
                "warm-flow-plugin/warm-flow-plugin-ui/warm-flow-plugin-ui-core/pom.xml",
                "warm-flow-plugin/warm-flow-plugin-ui/warm-flow-plugin-ui-sb-web/pom.xml",
                "warm-flow-plugin/warm-flow-plugin-ui/warm-flow-plugin-ui-solon-web/pom.xml",
                "warm-flow-plugin/warm-flow-plugin-ui/warm-flow-plugin-vue3-ui/pom.xml"
              ],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "pom.xml, warm-flow-core/pom.xml, warm-flow-orm/pom.xml (toolchain convention, no task runner)",
                "points": 12.6,
                "status": "partial",
                "details": [
                  {
                    "code": "toolchain_convention",
                    "params": {
                      "files": "pom.xml, warm-flow-core/pom.xml, warm-flow-orm/pom.xml"
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 0,
                "status": "missed",
                "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": "warm-flow-designer-demo/warm-flow-antdv4-designer-demo/tsconfig.json, warm-flow-designer-demo/warm-flow-ep-designer-demo/tsconfig.json, warm-flow-designer-demo/warm-flow-naive-designer-demo/tsconfig.json, warm-flow-vue-designer/tsconfig.json",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "warm-flow-designer-demo/warm-flow-antdv4-designer-demo/tsconfig.json, warm-flow-designer-demo/warm-flow-ep-designer-demo/tsconfig.json, warm-flow-designer-demo/warm-flow-naive-designer-demo/tsconfig.json, warm-flow-vue-designer/tsconfig.json"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "83 of the last 100 commits agent-authored or agent-credited",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 83,
                      "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": "no dependencies found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "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": 3264598,
              "source_files_sampled": 371,
              "oversized_source_files": 1
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "Java (statically typed)",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Java"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "1/371 source files over 60KB",
                "points": 54.9,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 371,
                      "oversized": 1
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          }
        ],
        "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",
    "Could not fetch npm package 'Warm-Flow' from its registry",
    "Could not fetch npm package '@dromara/warm-flow-designer' from its registry"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-25T10:43:12.659044Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/d/dromara/warm-flow.svg",
  "full_name": "dromara/warm-flow",
  "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.