Public record
Software health reportschema 0.27.0 · metrics 1.13.0 · 2026-07-25 10:43 UTC

dromara / warm-flow

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

Java · Vue · TypeScriptApache-2.0★ 573 stars⑂ 83 forkssince Jan 2024View on GitHub ↗

dromara/warm-flow holds a health index of 61 out of 100, placing it in the Moderate band. It scores highest on Vitality (79/100) and lowest on Security (44/100). It was last updated 5 days ago. A single contributor accounts for most of its recent work.

61
overall / 100
Moderate

Software health index

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

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

Score profile

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

Ownership

dromaraOrganization
2,875 followers103 public repossince Jul 2018

This repository is backed by an organization — shared, accountable stewardship that can outlive any single maintainer.

Package ecosystems

RegistryPackageVersionDownloads / moVersionsLast publish
Mavenorg.dromara.warm:warm-flow-core1.8.9-7312 days ago

Metrics by category

Vitality

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

79Good · 22% of overall
How it's scored
36/36Push recency — last push 5 days ago
21.5/36Commit cadence — 31/52 weeks with commits
18/18Commit volume — 328 commits in the last year
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
Inputs used
commits_last_year328
human_commit_share1
days_since_last_push5
active_weeks_last_year31
How it's scored
27/27Ships releases — 10 releases published
7.2/36Release recency — latest release 556 days ago
27/27Release cadence — a release every ~9.6 days
0/10OpenSSF Scorecard: Signed-Releases — no data
Inputs used
releases_count10
latest_release_tagv1.6.0-m4
releases_from_tagsno
days_since_latest_release556
mean_days_between_releases9.6
Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.

Community & Adoption

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

58Moderate · 18% of overall
How it's scored
44.7/60Stars — 573 stars
16/25Forks — 83 forks
3.9/15Watchers — 6 watchers
Inputs used
forks83
stars573
watchers6
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
How it's scored
22.5/22.5README
22.5/22.5License — recognized license (Apache-2.0)
0/18CONTRIBUTING guide
0/13.5Code of conduct
0/7.2Issue template
0/6.3PR template
Inputs used
has_readmeyes
has_licenseyes
has_contributingno
has_issue_templateno
has_code_of_conductno
has_pull_request_templateno

Sustainability & Governance

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

65Moderate · 24% of overall
How it's scored
9/54Bus factor — 1 contributor(s) cover half of all commits
7.1/22.5Commit distribution — top contributor authored 68% of commits
13.5/13.5Contributor breadth — 32 contributors
10/10OpenSSF Scorecard: Contributors — project has 4 contributing companies or organizations
Inputs used
bus_factor1
contributors_sampled32
top_contributor_share0.685
How it's scored
18.7/46.8Issue resolution — 40% of issues closed
33/38.3PR acceptance — 19/22 decided PRs merged
0/15OpenSSF Scorecard: Code-Review — Found 0/30 approved changesets -- score normalized to 0
Inputs used
merged_prs19
open_issues6
closed_issues4
issue_closed_ratio0.4
closed_unmerged_prs3
How it's scored
30/30Ownership backing — organization-owned
0/20Verified domain
24.9/25Owner reach — 2,875 followers of dromara
25/25Track record — 103 public repos, account ~8 yr old
Inputs used
followers2,875
owner_typeOrganization
is_verified
owner_logindromara
public_repos103
account_age_days2,936
How it's scored
25/25Published & resolvable — 1 package(s) on maven
35/35Publish recency — latest publish 12 days ago
20/20Version history — 73 published versions
20/20Not deprecated — active, not deprecated or yanked
Inputs used
packagesorg.dromara.warm:warm-flow-core
ecosystemsmaven
any_deprecatedno
min_days_since_publish12

Engineering Quality

Are baseline engineering and documentation practices in place?

53Moderate · 20% of overall
How it's scored
24/24CI workflows — 1 workflow(s)
0/24Tests present
0/16Linter config
0/9.6Pre-commit hooks
6.4/6.4.editorconfig
0/20OpenSSF Scorecard: CI-Tests — no data
Inputs used
has_ciyes
has_testsno
has_editorconfigyes
has_linter_configno
has_precommit_configno
Excluded from scoring (no data or not applicable): OpenSSF Scorecard: CI-Tests. Remaining weights renormalized.
How it's scored
30/30README
0/25Documentation directory
15/15Documentation / homepage site — http://www.warm-flow.cn
10/10Repository description
10/10Topics — 1 topics
10/10Wiki
Inputs used
topicsworkflow
has_wikiyes
homepagehttp://www.warm-flow.cn
has_readmeyes
has_docs_dirno
has_descriptionyes

Security

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

44At risk · 16% of overall
How it's scored
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 — no data
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 — no data
0/7.5Dependency-Update-Tool — no update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5License — 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 — no data
0/5Pinned-Dependencies — no data
0/5SAST — no SAST tool detected
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — no data
0/7.5Token-Permissions — no data
0/7.5Vulnerabilities — 59 existing vulnerabilities detected
Inputs used
sourceopenssf_scorecard
checks_evaluated12
scorecard_versionv5.5.0
checks_inconclusive6
scorecard_aggregate3
Excluded from scoring (no data or not applicable): ci_tests, dangerous_workflow, packaging, pinned_dependencies, signed_releases, token_permissions. Remaining weights renormalized.
How it's scored
35/35Direct dependencies free of known advisories — no direct dependency carries a known advisory
25/25Indirect dependencies free of known advisories — no indirect dependency carries a known advisory
0/40No advisories left outstanding — no advisory carries a publication date
Inputs used
sourceosv
advisories0
affected_packages0
assessed_packages2
unassessed_packages0
affected_by_severitynone
direct_affected_packages0
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.

AI Readiness

How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score.

70Good · 0% of overall
How it's scored
45/45Agent instructions — .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/15Machine-readable docs (llms.txt)
40/40Legible commit history — 91 of 100 human commits state their intent (structured subject or explanatory body)
Inputs used
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
How it's scored
12.6/18One-command bootstrap — pom.xml, warm-flow-core/pom.xml, warm-flow-orm/pom.xml (toolchain convention, no task runner)
0/22Automated tests
0/11Lint / format config
11/11Static type checking — 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/10Reproducible environment — lockfile
10/10Demonstrated agent practice — 83 of the last 100 commits agent-authored or agent-credited
0/8Automated maintenance — no automated dependency updates observed
0/10OpenSSF Scorecard: Pinned-Dependencies — no data
Inputs used
has_nixno
has_testsno
lockfilespnpm-lock.yaml
has_dockerfileno
typed_languageyes
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
Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Pinned-Dependencies. Remaining weights renormalized.
How it's scored
45/45Type-checkable code — Java (statically typed)
54.9/55Manageable file sizes — 1/371 source files over 60KB
Inputs used
primary_languageJava
largest_source_bytes3,264,598
source_files_sampled371
oversized_source_files1

Key facts

573GitHub stars
32contributors
328commits, last 12 months
5days since last push
10releases
1bus factor
6open issues
Maven, npmpackage ecosystems

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

More detail

Star and fork history 0 ★ / 83 ⇿
0Stars
83Forks
10Releases

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

0204060801008332024-042025-062026-07
Major 0Minor 0Patch 6

Each point covers 3 days.

OpenSSF Scorecard 3.0 / 10
3.0aggregate

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

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
n/aCI-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/aDangerous-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/aPackagingpackaging workflow not detected
n/aPinned-Dependenciesno dependencies found
0SASTno SAST tool detected
0Security-Policysecurity policy file not detected
n/aSigned-Releasesno releases found
n/aToken-PermissionsNo tokens found
0Vulnerabilities59 existing vulnerabilities detected
Direct dependencies 63
RegistryPackageVersion constraintManifest
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
All dependencies 392

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

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

Installing maven:org.dromara.warm:warm-flow-core@1.8.9 pulls in 2 packages, direct and transitive: 0 carry known advisories, of which 0 are direct dependencies.

No known advisories affect the assessed dependencies.

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

Raw JSON report machine-readable
{
  "data": {
    "repo": {
      "topics": [
        "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"
}

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

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

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