Public record
Software health reportschema 0.26.0 · metrics 1.13.0 · 2026-07-22 05:46 UTC

athombv / node-homey-lib

Shared code between Homey, Developer Tools and Documentation

JavaScriptGPL-3.0★ 23 stars⑂ 26 forkssince Jul 2015View on GitHub ↗

athombv/node-homey-lib holds a health index of 70 out of 100, placing it in the Good band. It scores highest on Vitality (88/100) and lowest on Security (38/100). It was last updated 1 day ago. 2 contributors account for most of its recent work.

70
overall / 100
Good

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.

70
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

Athom B.V.Organization
187 followers132 public repossince Aug 2014

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

Package ecosystems

RegistryPackageVersionDownloads / moVersionsLast publish
npmhomey-lib2.51.315,5682894 days ago

Metrics by category

Vitality

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

88Excellent · 22% of overall
How it's scored
36/36Push recency — last push 1 days ago
23.5/36Commit cadence — 34/52 weeks with commits
18/18Commit volume — 358 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_year358
human_commit_share0.98
days_since_last_push1
active_weeks_last_year34
How it's scored
16.2/27Ships releases — 100 version tags (no GitHub releases)
36/36Release recency — latest release 4 days ago
27/27Release cadence — a release every ~9.5 days
0/10OpenSSF Scorecard: Signed-Releases — no data
Inputs used
releases_count100
latest_release_tagv2.51.3
releases_from_tagsyes
days_since_latest_release4
mean_days_between_releases9.5
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?

63Moderate · 18% of overall
How it's scored
21.8/60Stars — 23 stars
11.7/25Forks — 26 forks
5.6/15Watchers — 11 watchers
Inputs used
forks26
stars23
watchers11
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonbelow_threshold

Community health

85Excellent
How it's scored
22.5/22.5README
22.5/22.5License — recognized license (GPL-3.0)
18/18CONTRIBUTING guide
13.5/13.5Code of conduct
0/7.2Issue template
0/6.3PR template
Inputs used
has_readmeyes
has_licenseyes
has_contributingyes
has_issue_templateno
has_code_of_conductyes
has_pull_request_templateno
How it's scored
55.9/80Monthly downloads — 15,568 downloads/month across npm
0/20Registry dependents — not reported by this ecosystem
Inputs used
packageshomey-lib
dependents
ecosystemsnpm
total_downloads
monthly_downloads15,568
Excluded from scoring (no data or not applicable): Registry dependents. Remaining weights renormalized.

Sustainability & Governance

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

74Good · 24% of overall
How it's scored
25.2/54Bus factor — 2 contributor(s) cover half of all commits
14.4/22.5Commit distribution — top contributor authored 36% of commits
13.5/13.5Contributor breadth — 28 contributors
10/10OpenSSF Scorecard: Contributors — project has 7 contributing companies or organizations
Inputs used
bus_factor2
contributors_sampled28
top_contributor_share0.358
How it's scored
37.1/46.8Issue resolution — 79% of issues closed
33.1/38.3PR acceptance — 580/670 decided PRs merged
0/15OpenSSF Scorecard: Code-Review — Found 1/16 approved changesets -- score normalized to 0
Inputs used
merged_prs580
open_issues7
closed_issues27
issue_closed_ratio0.794
closed_unmerged_prs90
How it's scored
30/30Ownership backing — organization-owned
0/20Verified domain
16.4/25Owner reach — 187 followers of athombv
25/25Track record — 132 public repos, account ~11 yr old
Inputs used
followers187
owner_typeOrganization
is_verified
owner_loginathombv
public_repos132
account_age_days4,353
How it's scored
25/25Published & resolvable — 1 package(s) on npm
35/35Publish recency — latest publish 4 days ago
20/20Version history — 289 published versions
20/20Not deprecated — active, not deprecated or yanked
Inputs used
packageshomey-lib
ecosystemsnpm
any_deprecatedno
min_days_since_publish4

Engineering Quality

Are baseline engineering and documentation practices in place?

76Good · 20% of overall
How it's scored
24/24CI workflows — 6 workflow(s)
24/24Tests present
16/16Linter config — .eslintrc.js
0/9.6Pre-commit hooks
6.4/6.4.editorconfig
20/20OpenSSF Scorecard: CI-Tests — 5 out of 5 merged PRs checked by a CI test -- score normalized to 10
Inputs used
has_ciyes
has_testsyes
has_editorconfigyes
has_linter_configyes
has_precommit_configno

Documentation

55Moderate
How it's scored
30/30README
0/25Documentation directory
15/15Documentation / homepage site — https://homey.app
10/10Repository description
0/10Topics
0/10Wiki
Inputs used
topics
has_wikino
homepagehttps://homey.app
has_readmeyes
has_docs_dirno
has_descriptionyes

Security

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

38At 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
2.5/2.5CI-Tests — 5 out of 5 merged PRs checked by a CI test -- score normalized to 10
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 1/16 approved changesets -- score normalized to 0
2.5/2.5Contributors — project has 7 contributing companies or organizations
0/10Dangerous-Workflow — dangerous workflow patterns detected
7.5/7.5Dependency-Update-Tool — 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
5/5Packaging — packaging workflow detected
2.5/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 5
0/5SAST — SAST tool is not run on all commits -- score normalized to 0
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — no data
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
0/7.5Vulnerabilities — 30 existing vulnerabilities detected
Inputs used
sourceopenssf_scorecard
checks_evaluated17
scorecard_versionv5.5.0
checks_inconclusive1
scorecard_aggregate3.8
Excluded from scoring (no data or not applicable): signed_releases. Remaining weights renormalized.
How it's scored
8.2/35Direct dependencies free of known advisories — 6 affected: semver 6.3.0 (high 7.5), semver 7.3.5 (high 7.5), ajv 6.12.3 (moderate 5.3), +3 more
0/25Indirect dependencies free of known advisories — transitive set not separable from development and test dependencies in this scope
21/40No advisories left outstanding — 6 advisory-carrying package(s) unaddressed past 90 days; oldest published 1,126 days ago
Inputs used
sourceosv
advisories46
affected_packages24
assessed_packages417
unassessed_packages0
affected_by_severitycritical 1, high 15, moderate 7, low 1
direct_affected_packages6
Excluded from scoring (no data or not applicable): Indirect dependencies free of known advisories. Remaining weights renormalized. Matched 417 resolved dependencies against OSV. This repository publishes no package the index resolves, so the repository dependency graph was assessed instead. That graph mixes development and test pins with shipped dependencies, so only the declared runtime dependencies are scored; transitive findings are reported as context and excluded from the score. 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.

49At risk · 0% of overall
How it's scored
0/45Agent instructions — no CLAUDE.md / AGENTS.md / editor rules
0/15Machine-readable docs (llms.txt)
39.7/40Legible commit history — 73 of 98 human commits state their intent (structured subject or explanatory body)
Inputs used
has_llms_txtno
legible_history_share0.745
agent_instruction_files
agent_instruction_max_bytes
How it's scored
0/18One-command bootstrap
22/22Automated tests
11/11Lint / format config — .eslintrc.js
0/11Static type checking
10/10Reproducible environment — lockfile
10/10Demonstrated agent practice — 10 of the last 100 commits agent-authored or agent-credited
0/8Automated maintenance — no automated dependency updates observed
5/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 5
Inputs used
has_nixno
has_testsyes
lockfilespackage-lock.json
has_dockerfileno
typed_languageno
bootstrap_files
has_devcontainerno
has_linter_configyes
typecheck_configs
agent_commit_share0.1
toolchain_manifests
dependency_bot_commit_share0
How it's scored
0/45Type-checkable code — JavaScript without a type-check config
53.9/55Manageable file sizes — 1/50 source files over 60KB
Inputs used
primary_languageJavaScript
largest_source_bytes979,342
source_files_sampled50
oversized_source_files1
How it's scored
0/40API schema (OpenAPI/GraphQL/proto)
0/20MCP server
40/40Runnable examples — examples
Inputs used
example_dirsexamples
has_mcp_signalno
api_schema_files

Key facts

23GitHub stars
28contributors
358commits, last 12 months
1days since last push
100releases
2bus factor
7open issues
npmpackage ecosystems

Data collection warnings

  • deps.dev does not index npm:homey-lib@2.51.3; advisories assessed against the repository dependency graph instead

More detail

Star and fork history 23 ★ / 26 ⇿
23Stars
26Forks
93Releases

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.

0510152025232522015-092021-012026-05
Major 0Minor 33Patch 60

Each point covers 10 days.

OpenSSF Scorecard 3.8 / 10
3.8aggregate

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-22 05:46 UTC

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
10CI-Tests5 out of 5 merged PRs checked by a CI test -- score normalized to 10
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 1/16 approved changesets -- score normalized to 0
10Contributorsproject has 7 contributing companies or organizations
0Dangerous-Workflowdangerous workflow patterns detected
10Dependency-Update-Toolupdate 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
10Packagingpackaging workflow detected
5Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 5
0SASTSAST tool is not run on all commits -- score normalized to 0
0Security-Policysecurity policy file not detected
n/aSigned-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
0Vulnerabilities30 existing vulnerabilities detected
Direct dependencies 6
RegistryPackageVersion constraintManifest
npmajv^6.1.1package.json
npmbuffer^6.0.3package.json
npmdebug4.4.3package.json
npmimage-size^0.6.2package.json
npmsemver^5.7.0package.json
npmtinycolor2^1.4.1package.json
All dependencies 417

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

RegistryPackageVersionRelation
npmajv6.12.3direct
npmajv6.12.6direct
npmajv8.17.1direct
npmajv8.6.2direct
npmbuffer6.0.3direct
npmdebug2.6.9direct
npmdebug3.2.7direct
npmdebug4.3.3direct
npmdebug4.4.3direct
npmimage-size0.6.2direct
npmsemver5.7.2direct
npmsemver6.3.0direct
npmsemver7.3.5direct
npmtinycolor21.4.1direct
npm@anthropic-ai/sdk0.91.1indirect
npm@apidevtools/json-schema-ref-parser11.9.3indirect
npm@babel/code-frame7.12.11indirect
npm@babel/code-frame7.22.13indirect
npm@babel/generator7.23.0indirect
npm@babel/helper-environment-visitor7.22.20indirect
npm@babel/helper-function-name7.23.0indirect
npm@babel/helper-hoist-variables7.22.5indirect
npm@babel/helper-split-export-declaration7.22.6indirect
npm@babel/helper-string-parser7.22.5indirect
npm@babel/helper-validator-identifier7.14.8indirect
npm@babel/helper-validator-identifier7.22.20indirect
npm@babel/highlight7.14.5indirect
npm@babel/highlight7.22.20indirect
npm@babel/parser7.14.8indirect
npm@babel/parser7.23.0indirect
npm@babel/runtime7.29.7indirect
npm@babel/template7.22.15indirect
npm@babel/traverse7.23.2indirect
npm@babel/types7.14.8indirect
npm@babel/types7.23.0indirect
npm@discoveryjs/json-ext0.5.3indirect
npm@eslint/eslintrc0.4.3indirect
npm@humanwhocodes/config-array0.5.0indirect
npm@humanwhocodes/object-schema1.2.0indirect
npm@jridgewell/gen-mapping0.3.8indirect
npm@jridgewell/resolve-uri3.1.1indirect
npm@jridgewell/set-array1.2.1indirect
npm@jridgewell/source-map0.3.6indirect
npm@jridgewell/sourcemap-codec1.4.15indirect
npm@jridgewell/trace-mapping0.3.25indirect
npm@jsdevtools/ono7.1.3indirect
npm@types/eslint9.6.1indirect
npm@types/eslint-scope3.7.7indirect
npm@types/estree1.0.7indirect
npm@types/json-schema7.0.15indirect
npm@types/lodash4.17.24indirect
npm@types/node18.19.130indirect
npm@types/node22.13.13indirect
npm@types/node-fetch2.6.13indirect
npm@ungap/promise-all-settled1.1.2indirect
npm@webassemblyjs/ast1.14.1indirect
npm@webassemblyjs/floating-point-hex-parser1.13.2indirect
npm@webassemblyjs/helper-api-error1.13.2indirect
npm@webassemblyjs/helper-buffer1.14.1indirect
npm@webassemblyjs/helper-numbers1.13.2indirect
npm@webassemblyjs/helper-wasm-bytecode1.13.2indirect
npm@webassemblyjs/helper-wasm-section1.14.1indirect
npm@webassemblyjs/ieee7541.13.2indirect
npm@webassemblyjs/leb1281.13.2indirect
npm@webassemblyjs/utf81.13.2indirect
npm@webassemblyjs/wasm-edit1.14.1indirect
npm@webassemblyjs/wasm-gen1.14.1indirect
npm@webassemblyjs/wasm-opt1.14.1indirect
npm@webassemblyjs/wasm-parser1.14.1indirect
npm@webassemblyjs/wast-printer1.14.1indirect
npm@webpack-cli/configtest2.1.1indirect
npm@webpack-cli/info2.0.2indirect
npm@webpack-cli/serve2.0.5indirect
npm@xtuc/ieee7541.2.0indirect
npm@xtuc/long4.2.2indirect
npmabort-controller3.0.0indirect
npmacorn7.4.1indirect
npmacorn8.14.1indirect
npmacorn-jsx5.3.2indirect
npmagentkeepalive4.6.0indirect
npmajv-formats2.1.1indirect
npmajv-keywords5.1.0indirect
npmansi-colors4.1.1indirect
npmansi-regex5.0.1indirect
npmansi-styles3.2.1indirect
npmansi-styles4.3.0indirect
npmanymatch3.1.2indirect
npmargparse1.0.10indirect
npmargparse2.0.1indirect
npmarray-includes3.1.3indirect
npmarray.prototype.flat1.2.4indirect
npmastral-regex2.0.0indirect
npmasynckit0.4.0indirect
npmbabel-eslint10.1.0indirect
npmbalanced-match1.0.0indirect
npmbase64-js1.5.1indirect
npmbinary-extensions2.2.0indirect
npmbrace-expansion1.1.11indirect
npmbraces3.0.2indirect
npmbrowser-stdout1.3.1indirect
npmbrowserslist4.24.4indirect
npmbuffer-from1.1.2indirect
npmcall-bind1.0.8indirect
npmcall-bind-apply-helpers1.0.2indirect
npmcall-bound1.0.4indirect
npmcallsites3.1.0indirect
npmcamelcase6.3.0indirect
npmcaniuse-lite1.0.30001707indirect
npmchalk2.4.1indirect
npmchalk2.4.2indirect
npmchalk4.1.1indirect
npmchalk4.1.2indirect
npmchokidar3.5.3indirect
npmchrome-trace-event1.0.3indirect
npmcliui7.0.4indirect
npmclone-deep4.0.1indirect
npmcolor-convert1.9.3indirect
npmcolor-convert2.0.1indirect
npmcolor-name1.1.3indirect
npmcolor-name1.1.4indirect
npmcolorette2.0.20indirect
npmcombined-stream1.0.8indirect
npmcommander10.0.1indirect
npmcommander2.20.3indirect
npmconcat-map0.0.1indirect
npmconfusing-browser-globals1.0.10indirect
npmcross-spawn7.0.6indirect
npmdecamelize4.0.0indirect
npmdeep-is0.1.3indirect
npmdefine-data-property1.1.4indirect
npmdefine-properties1.2.1indirect
npmdelayed-stream1.0.0indirect
npmdiff5.0.0indirect
npmdoctrine2.1.0indirect
npmdoctrine3.0.0indirect
npmdunder-proto1.0.1indirect
npmelectron-to-chromium1.5.123indirect
npmemoji-regex8.0.0indirect
npmenhanced-resolve5.18.1indirect
npmenquirer2.3.6indirect
npmenvinfo7.14.0indirect
npmerror-ex1.3.2indirect
npmes-abstract1.18.3indirect
npmes-define-property1.0.1indirect
npmes-errors1.3.0indirect
npmes-module-lexer1.6.0indirect
npmes-object-atoms1.1.1indirect
npmes-set-tostringtag2.1.0indirect
npmes-to-primitive1.2.1indirect
npmescalade3.2.0indirect
npmescape-string-regexp1.0.5indirect
npmescape-string-regexp4.0.0indirect
npmeslint7.31.0indirect
npmeslint-config-airbnb-base14.2.1indirect
npmeslint-config-athom2.1.1indirect
npmeslint-import-resolver-node0.3.4indirect
npmeslint-module-utils2.6.1indirect
npmeslint-plugin-es3.0.1indirect
npmeslint-plugin-import2.23.4indirect
npmeslint-plugin-mocha6.3.0indirect
npmeslint-plugin-node11.1.0indirect
npmeslint-scope5.1.1indirect
npmeslint-utils2.1.0indirect
npmeslint-visitor-keys1.3.0indirect
npmeslint-visitor-keys2.1.0indirect
npmespree7.3.1indirect
npmesprima4.0.1indirect
npmesquery1.4.0indirect
npmesrecurse4.3.0indirect
npmestraverse4.2.0indirect
npmestraverse5.2.0indirect
npmestraverse5.3.0indirect
npmesutils2.0.3indirect
npmevent-target-shim5.0.1indirect
npmevents3.3.0indirect
npmfast-deep-equal3.1.3indirect
npmfast-json-stable-stringify2.0.0indirect
npmfast-levenshtein2.0.6indirect
npmfast-uri3.0.6indirect
npmfastest-levenshtein1.0.12indirect
npmfdir6.5.0indirect
npmfile-entry-cache6.0.1indirect
npmfill-range7.0.1indirect
npmfind-up2.1.0indirect
npmfind-up4.1.0indirect
npmfind-up5.0.0indirect
npmflat5.0.2indirect
npmflat-cache3.0.4indirect
npmflatted3.2.1indirect
npmform-data4.0.6indirect
npmform-data-encoder1.7.2indirect
npmformdata-node4.4.1indirect
npmfs.realpath1.0.0indirect
npmfsevents2.3.2indirect
npmfunction-bind1.1.2indirect
npmfunctional-red-black-tree1.0.1indirect
npmget-caller-file2.0.5indirect
npmget-intrinsic1.3.0indirect
npmget-proto1.0.1indirect
npmglob7.1.3indirect
npmglob7.2.0indirect
npmglob-parent5.1.2indirect
npmglob-to-regexp0.4.1indirect
npmglobals11.12.0indirect
npmglobals13.10.0indirect
npmgopd1.2.0indirect
npmgraceful-fs4.2.11indirect
npmgrowl1.10.5indirect
npmhas1.0.3indirect
npmhas-bigints1.0.1indirect
npmhas-flag3.0.0indirect
npmhas-flag4.0.0indirect
npmhas-property-descriptors1.0.2indirect
npmhas-symbols1.1.0indirect
npmhas-tostringtag1.0.2indirect
npmhasown2.0.4indirect
npmhe1.2.0indirect
npmhosted-git-info2.8.9indirect
npmhumanize-ms1.2.1indirect
npmieee7541.2.1indirect
npmignore4.0.6indirect
npmignore5.1.8indirect
npmimport-fresh3.3.0indirect
npmimport-local3.0.2indirect
npmimurmurhash0.1.4indirect
npminflight1.0.6indirect
npminherits2.0.4indirect
npminterpret3.1.1indirect
npmis-arrayish0.2.1indirect
npmis-bigint1.0.2indirect
npmis-binary-path2.1.0indirect
npmis-boolean-object1.1.1indirect
npmis-callable1.2.7indirect
npmis-core-module2.5.0indirect
npmis-date-object1.0.4indirect
npmis-extglob2.1.1indirect
npmis-fullwidth-code-point3.0.0indirect
npmis-glob4.0.3indirect
npmis-negative-zero2.0.1indirect
npmis-number7.0.0indirect
npmis-number-object1.0.5indirect
npmis-plain-obj2.1.0indirect
npmis-plain-object2.0.4indirect
npmis-primitive3.0.1indirect
npmis-regex1.2.1indirect
npmis-string1.0.6indirect
npmis-symbol1.0.4indirect
npmis-unicode-supported0.1.0indirect
npmisexe2.0.0indirect
npmisobject3.0.1indirect
npmjest-worker27.5.1indirect
npmjs-tokens4.0.0indirect
npmjs-yaml3.14.1indirect
npmjs-yaml4.1.0indirect
npmjs-yaml4.1.1indirect
npmjsesc2.5.2indirect
npmjson-parse-better-errors1.0.2indirect
npmjson-parse-even-better-errors2.3.1indirect
npmjson-schema-to-ts3.1.1indirect
npmjson-schema-to-typescript15.0.4indirect
npmjson-schema-traverse0.4.1indirect
npmjson-schema-traverse1.0.0indirect
npmjson-stable-stringify-without-jsonify1.0.1indirect
npmjson52.2.3indirect
npmkind-of6.0.3indirect
npmlevn0.4.1indirect
npmload-json-file4.0.0indirect
npmloader-runner4.3.0indirect
npmlocate-path2.0.0indirect
npmlocate-path5.0.0indirect
npmlocate-path6.0.0indirect
npmlodash4.17.23indirect
npmlodash.clonedeep4.5.0indirect
npmlodash.merge4.6.2indirect
npmlodash.truncate4.4.2indirect
npmlog-symbols4.1.0indirect
npmlru-cache6.0.0indirect
npmmath-intrinsics1.1.0indirect
npmmerge-stream2.0.0indirect
npmmime-db1.52.0indirect
npmmime-types2.1.35indirect
npmminimatch3.1.2indirect
npmminimatch4.2.1indirect
npmminimist1.2.8indirect
npmmocha9.2.2indirect
npmmock-fs5.1.2indirect
npmms2.0.0indirect
npmms2.1.2indirect
npmms2.1.3indirect
npmnanoid3.3.1indirect
npmnatural-compare1.4.0indirect
npmneo-async2.6.2indirect
npmnode-domexception1.0.0indirect
npmnode-fetch2.7.0indirect
npmnode-releases2.0.19indirect
npmnormalize-package-data2.5.0indirect
npmnormalize-path3.0.0indirect
npmobject-inspect1.13.4indirect
npmobject-keys1.1.1indirect
npmobject-path0.11.8indirect
npmobject.assign4.1.7indirect
npmobject.entries1.1.4indirect
npmobject.values1.1.4indirect
npmonce1.4.0indirect
npmopenai4.104.0indirect
npmoptionator0.9.1indirect
npmp-limit1.3.0indirect
npmp-limit2.3.0indirect
npmp-limit3.1.0indirect
npmp-locate2.0.0indirect
npmp-locate4.1.0indirect
npmp-locate5.0.0indirect
npmp-try1.0.0indirect
npmp-try2.2.0indirect
npmparent-module1.0.1indirect
npmparse-json4.0.0indirect
npmpath-exists3.0.0indirect
npmpath-exists4.0.0indirect
npmpath-is-absolute1.0.1indirect
npmpath-key3.1.1indirect
npmpath-parse1.0.7indirect
npmpath-type3.0.0indirect
npmpicocolors1.1.1indirect
npmpicomatch2.3.0indirect
npmpicomatch4.0.3indirect
npmpify3.0.0indirect
npmpkg-dir2.0.0indirect
npmpkg-dir4.2.0indirect
npmpkg-up2.0.0indirect
npmprelude-ls1.2.1indirect
npmprettier3.8.1indirect
npmprogress2.0.3indirect
npmpunycode2.1.1indirect
npmramda0.27.1indirect
npmrandombytes2.1.0indirect
npmread-pkg3.0.0indirect
npmread-pkg-up3.0.0indirect
npmreaddirp3.6.0indirect
npmrechoir0.8.0indirect
npmregexpp3.2.0indirect
npmrequire-directory2.1.1indirect
npmrequire-from-string2.0.2indirect
npmresolve1.20.0indirect
npmresolve-cwd3.0.0indirect
npmresolve-from4.0.0indirect
npmresolve-from5.0.0indirect
npmrimraf3.0.2indirect
npmsafe-buffer5.1.2indirect
npmschema-utils4.3.0indirect
npmserialize-javascript6.0.0indirect
npmserialize-javascript6.0.2indirect
npmset-function-length1.2.2indirect
npmset-value4.1.0indirect
npmshallow-clone3.0.1indirect
npmshebang-command2.0.0indirect
npmshebang-regex3.0.0indirect
npmslice-ansi4.0.0indirect
npmsource-map0.6.1indirect
npmsource-map-support0.5.21indirect
npmspdx-correct3.1.1indirect
npmspdx-exceptions2.3.0indirect
npmspdx-expression-parse3.0.1indirect
npmspdx-license-ids3.0.9indirect
npmsprintf-js1.0.3indirect
npmstring-width4.2.2indirect
npmstring-width4.2.3indirect
npmstring.prototype.trimend1.0.4indirect
npmstring.prototype.trimstart1.0.4indirect
npmstrip-ansi6.0.0indirect
npmstrip-ansi6.0.1indirect
npmstrip-bom3.0.0indirect
npmstrip-json-comments3.1.1indirect
npmsupports-color5.5.0indirect
npmsupports-color7.2.0indirect
npmsupports-color8.1.1indirect
npmtable6.7.1indirect
npmtapable2.2.1indirect
npmterser5.39.0indirect
npmterser-webpack-plugin5.3.14indirect
npmtext-table0.2.0indirect
npmtinyglobby0.2.15indirect
npmto-fast-properties2.0.0indirect
npmto-regex-range5.0.1indirect
npmtr460.0.3indirect
npmts-algebra2.0.0indirect
npmtsconfig-paths3.10.1indirect
npmtype-check0.4.0indirect
npmtype-fest0.20.2indirect
npmtypescript5.9.3indirect
npmunbox-primitive1.0.1indirect
npmundici-types5.26.5indirect
npmundici-types6.20.0indirect
npmupdate-browserslist-db1.1.3indirect
npmuri-js4.4.1indirect
npmv8-compile-cache2.3.0indirect
npmvalidate-npm-package-license3.0.4indirect
npmwatchpack2.4.2indirect
npmweb-streams-polyfill4.0.0-beta.3indirect
npmwebidl-conversions3.0.1indirect
npmwebpack5.98.0indirect
npmwebpack-cli5.1.4indirect
npmwebpack-merge5.8.0indirect
npmwebpack-sources3.2.3indirect
npmwhatwg-url5.0.0indirect
npmwhich2.0.2indirect
npmwhich-boxed-primitive1.0.2indirect
npmwildcard2.0.0indirect
npmword-wrap1.2.3indirect
npmworkerpool6.2.0indirect
npmwrap-ansi7.0.0indirect
npmwrappy1.0.2indirect
npmy18n5.0.8indirect
npmyallist4.0.0indirect
npmyargs16.2.0indirect
npmyargs-parser20.2.4indirect
npmyargs-unparser2.0.0indirect
npmyocto-queue0.1.0indirect
Dependency advisories 24

This repository publishes no package the index resolves, so its own dependency graph was assessed — 417 packages, which also include development and test pins that never ship: 24 carry known advisories, of which 6 are direct.

PackageVersionRelationSeverityAdvisoriesFixed in
flatted3.2.1indirectcritical23.4.2
semver6.3.0directhigh17.5.2
semver7.3.5directhigh17.5.2
brace-expansion1.1.11indirecthigh35.0.7
braces3.0.2indirecthigh13.0.3
fast-uri3.0.6indirecthigh44.1.1
js-yaml3.14.1indirecthigh34.3.0
js-yaml4.1.0indirecthigh34.3.0
js-yaml4.1.1indirecthigh24.3.0
lodash4.17.23indirecthigh24.18.0
minimatch3.1.2indirecthigh310.2.3
minimatch4.2.1indirecthigh310.2.3
picomatch2.3.0indirecthigh24.0.4
picomatch4.0.3indirecthigh24.0.4
serialize-javascript6.0.0indirecthigh37.0.5
serialize-javascript6.0.2indirecthigh27.0.5
ajv6.12.3directmoderate18.18.0
ajv6.12.6directmoderate18.18.0
ajv8.17.1directmoderate18.18.0
ajv8.6.2directmoderate18.18.0
diff5.0.0indirectmoderate18.0.3
nanoid3.3.1indirectmoderate15.0.9
word-wrap1.2.3indirectmoderate11.2.4
webpack5.98.0indirectlow25.104.1

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": [],
      "is_fork": false,
      "size_kb": 10311,
      "has_wiki": false,
      "homepage": "https://homey.app",
      "languages": {
        "JavaScript": 272453
      },
      "pushed_at": "2026-07-20T06:00:41Z",
      "created_at": "2015-07-13T10:35:14Z",
      "owner_type": "Organization",
      "updated_at": "2026-07-17T08:58:07Z",
      "description": "Shared code between Homey, Developer Tools and Documentation",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "GPL-3.0",
      "default_branch": "develop",
      "license_spdx_raw": "GPL-3.0",
      "primary_language": "JavaScript",
      "significant_languages": [
        "JavaScript"
      ]
    },
    "owner": {
      "blog": "https://homey.app",
      "name": "Athom B.V.",
      "type": "Organization",
      "login": "athombv",
      "company": null,
      "location": null,
      "followers": 187,
      "avatar_url": "https://avatars.githubusercontent.com/u/8502422?v=4",
      "created_at": "2014-08-20T12:11:00Z",
      "is_verified": null,
      "public_repos": 132,
      "account_age_days": 4353
    },
    "license": {
      "state": "standard",
      "spdx_id": "GPL-3.0",
      "raw_spdx": "GPL-3.0",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v2.51.3",
          "kind": "patch",
          "published_at": "2026-07-17T08:59:07Z"
        },
        {
          "tag": "v2.51.2",
          "kind": "patch",
          "published_at": "2026-07-15T13:26:54Z"
        },
        {
          "tag": "v2.51.1",
          "kind": "patch",
          "published_at": "2026-07-06T12:44:22Z"
        },
        {
          "tag": "v2.51.0",
          "kind": "minor",
          "published_at": "2026-07-06T12:18:39Z"
        },
        {
          "tag": "v2.50.5",
          "kind": "patch",
          "published_at": "2026-06-18T12:02:16Z"
        },
        {
          "tag": "v2.50.4",
          "kind": "patch",
          "published_at": "2026-06-18T08:51:38Z"
        },
        {
          "tag": "v2.50.3",
          "kind": "patch",
          "published_at": "2026-06-09T07:31:49Z"
        },
        {
          "tag": "v2.50.2",
          "kind": "patch",
          "published_at": "2026-05-22T09:41:10Z"
        },
        {
          "tag": "v2.50.1",
          "kind": "patch",
          "published_at": "2026-05-21T10:00:06Z"
        },
        {
          "tag": "v2.50.0",
          "kind": "minor",
          "published_at": "2026-04-22T11:50:38Z"
        },
        {
          "tag": "v2.49.2",
          "kind": "patch",
          "published_at": "2026-04-20T08:29:34Z"
        },
        {
          "tag": "v2.49.1",
          "kind": "patch",
          "published_at": "2026-04-17T08:51:07Z"
        },
        {
          "tag": "v2.49.0",
          "kind": "minor",
          "published_at": "2026-03-31T09:55:16Z"
        },
        {
          "tag": "v2.48.1",
          "kind": "patch",
          "published_at": "2026-03-23T15:47:11Z"
        },
        {
          "tag": "v2.48.0",
          "kind": "minor",
          "published_at": "2026-03-23T12:55:10Z"
        },
        {
          "tag": "v2.47.0",
          "kind": "minor",
          "published_at": "2026-03-16T11:38:12Z"
        },
        {
          "tag": "v2.46.1",
          "kind": "patch",
          "published_at": "2026-03-10T15:34:49Z"
        },
        {
          "tag": "v2.46.0",
          "kind": "minor",
          "published_at": "2026-03-10T15:03:47Z"
        },
        {
          "tag": "v2.45.4",
          "kind": "patch",
          "published_at": "2026-03-10T14:08:40Z"
        },
        {
          "tag": "v2.45.3",
          "kind": "patch",
          "published_at": "2026-03-09T15:10:39Z"
        },
        {
          "tag": "v2.45.2",
          "kind": "patch",
          "published_at": "2026-03-09T11:26:22Z"
        },
        {
          "tag": "v2.45.1",
          "kind": "patch",
          "published_at": "2026-02-24T14:40:50Z"
        },
        {
          "tag": "v2.45.0",
          "kind": "minor",
          "published_at": "2026-02-19T14:52:38Z"
        },
        {
          "tag": "v2.44.5",
          "kind": "patch",
          "published_at": "2026-02-17T11:40:44Z"
        },
        {
          "tag": "v2.44.4",
          "kind": "patch",
          "published_at": "2026-02-06T10:22:27Z"
        },
        {
          "tag": "v2.44.3",
          "kind": "patch",
          "published_at": "2026-01-23T12:20:49Z"
        },
        {
          "tag": "v2.44.2",
          "kind": "patch",
          "published_at": "2026-01-23T12:16:00Z"
        },
        {
          "tag": "v2.44.1",
          "kind": "patch",
          "published_at": "2026-01-05T15:40:34Z"
        },
        {
          "tag": "v2.44.0",
          "kind": "minor",
          "published_at": "2025-12-22T14:41:34Z"
        },
        {
          "tag": "v2.43.0",
          "kind": "minor",
          "published_at": "2025-12-22T14:29:20Z"
        },
        {
          "tag": "v2.42.1",
          "kind": "patch",
          "published_at": "2025-12-04T12:33:03Z"
        },
        {
          "tag": "v2.42.0",
          "kind": "minor",
          "published_at": "2025-12-04T10:20:21Z"
        },
        {
          "tag": "v2.41.0",
          "kind": "minor",
          "published_at": "2025-10-28T10:46:57Z"
        },
        {
          "tag": "v2.40.0",
          "kind": "minor",
          "published_at": "2025-10-28T10:25:24Z"
        },
        {
          "tag": "v2.39.2",
          "kind": "patch",
          "published_at": "2025-10-06T13:26:48Z"
        },
        {
          "tag": "v2.39.1",
          "kind": "patch",
          "published_at": "2025-08-26T06:59:40Z"
        },
        {
          "tag": "v2.39.0",
          "kind": "minor",
          "published_at": "2025-08-18T12:09:58Z"
        },
        {
          "tag": "v2.38.3",
          "kind": "patch",
          "published_at": "2025-08-07T12:00:33Z"
        },
        {
          "tag": "v2.38.2",
          "kind": "patch",
          "published_at": "2025-08-01T14:42:32Z"
        },
        {
          "tag": "v2.38.1",
          "kind": "patch",
          "published_at": "2025-08-01T14:27:32Z"
        },
        {
          "tag": "v2.38.0",
          "kind": "minor",
          "published_at": "2025-08-01T13:11:31Z"
        },
        {
          "tag": "v2.37.4",
          "kind": "patch",
          "published_at": "2025-07-28T17:52:46Z"
        },
        {
          "tag": "v2.37.3",
          "kind": "patch",
          "published_at": "2025-07-18T09:01:24Z"
        },
        {
          "tag": "v2.37.2",
          "kind": "patch",
          "published_at": "2025-07-17T06:40:10Z"
        },
        {
          "tag": "v2.37.1",
          "kind": "patch",
          "published_at": "2025-06-30T15:26:51Z"
        },
        {
          "tag": "v2.37.0",
          "kind": "minor",
          "published_at": "2025-06-17T09:24:37Z"
        },
        {
          "tag": "v2.36.0",
          "kind": "minor",
          "published_at": "2025-06-10T08:43:17Z"
        },
        {
          "tag": "v2.35.4",
          "kind": "patch",
          "published_at": "2025-05-27T09:25:54Z"
        },
        {
          "tag": "v2.35.3",
          "kind": "patch",
          "published_at": "2025-05-19T15:28:13Z"
        },
        {
          "tag": "v2.35.2",
          "kind": "patch",
          "published_at": "2025-05-14T09:49:53Z"
        },
        {
          "tag": "v2.35.1",
          "kind": "patch",
          "published_at": "2025-05-13T10:50:18Z"
        },
        {
          "tag": "v2.35.0",
          "kind": "minor",
          "published_at": "2025-05-09T12:50:15Z"
        },
        {
          "tag": "v2.34.0",
          "kind": "minor",
          "published_at": "2025-02-18T14:31:43Z"
        },
        {
          "tag": "v2.33.2",
          "kind": "patch",
          "published_at": "2025-01-20T10:50:45Z"
        },
        {
          "tag": "v2.33.1",
          "kind": "patch",
          "published_at": "2024-12-23T13:31:21Z"
        },
        {
          "tag": "v2.33.0",
          "kind": "minor",
          "published_at": "2024-12-12T15:27:54Z"
        },
        {
          "tag": "v2.32.11",
          "kind": "patch",
          "published_at": "2024-11-26T10:15:03Z"
        },
        {
          "tag": "v2.32.10",
          "kind": "patch",
          "published_at": "2024-11-26T09:07:48Z"
        },
        {
          "tag": "v2.32.9",
          "kind": "patch",
          "published_at": "2024-11-25T16:12:31Z"
        },
        {
          "tag": "v2.32.8",
          "kind": "patch",
          "published_at": "2024-10-15T13:23:00Z"
        },
        {
          "tag": "v2.32.7",
          "kind": "patch",
          "published_at": "2024-09-30T11:55:34Z"
        },
        {
          "tag": "v2.32.6",
          "kind": "patch",
          "published_at": "2024-09-30T11:26:57Z"
        },
        {
          "tag": "v2.32.5",
          "kind": "patch",
          "published_at": "2024-09-25T09:40:17Z"
        },
        {
          "tag": "v2.32.4",
          "kind": "patch",
          "published_at": "2024-09-23T09:12:21Z"
        },
        {
          "tag": "v2.32.3",
          "kind": "patch",
          "published_at": "2024-09-19T09:23:46Z"
        },
        {
          "tag": "v2.32.2",
          "kind": "patch",
          "published_at": "2024-09-16T11:56:49Z"
        },
        {
          "tag": "v2.32.1",
          "kind": "patch",
          "published_at": "2024-09-12T07:55:16Z"
        },
        {
          "tag": "v2.32.0",
          "kind": "minor",
          "published_at": "2024-09-10T11:19:58Z"
        },
        {
          "tag": "v2.31.4",
          "kind": "patch",
          "published_at": "2024-08-21T12:07:20Z"
        },
        {
          "tag": "v2.31.3",
          "kind": "patch",
          "published_at": "2024-08-21T12:00:31Z"
        },
        {
          "tag": "v2.31.2",
          "kind": "patch",
          "published_at": "2024-08-16T09:04:46Z"
        },
        {
          "tag": "v2.31.1",
          "kind": "patch",
          "published_at": "2024-08-14T12:26:14Z"
        },
        {
          "tag": "v2.31.0",
          "kind": "minor",
          "published_at": "2024-08-14T10:32:06Z"
        },
        {
          "tag": "v2.30.1",
          "kind": "patch",
          "published_at": "2024-07-30T11:47:41Z"
        },
        {
          "tag": "v2.30.0",
          "kind": "minor",
          "published_at": "2024-07-10T11:28:18Z"
        },
        {
          "tag": "v2.29.0",
          "kind": "minor",
          "published_at": "2024-07-10T11:01:17Z"
        },
        {
          "tag": "v2.28.1",
          "kind": "patch",
          "published_at": "2024-07-03T11:19:01Z"
        },
        {
          "tag": "v2.28.0",
          "kind": "minor",
          "published_at": "2024-06-28T08:53:45Z"
        },
        {
          "tag": "v2.27.0",
          "kind": "minor",
          "published_at": "2024-06-28T07:27:33Z"
        },
        {
          "tag": "v2.26.1",
          "kind": "patch",
          "published_at": "2024-06-24T10:55:37Z"
        },
        {
          "tag": "v2.26.0",
          "kind": "minor",
          "published_at": "2024-06-24T07:50:14Z"
        },
        {
          "tag": "v2.25.0",
          "kind": "minor",
          "published_at": "2024-05-07T12:43:30Z"
        },
        {
          "tag": "v2.24.1",
          "kind": "patch",
          "published_at": "2024-05-06T14:12:59Z"
        },
        {
          "tag": "v2.24.0",
          "kind": "minor",
          "published_at": "2024-04-18T09:49:18Z"
        },
        {
          "tag": "v2.23.0",
          "kind": "minor",
          "published_at": "2023-12-07T12:37:17Z"
        },
        {
          "tag": "v2.22.2",
          "kind": "patch",
          "published_at": "2023-11-10T15:29:43Z"
        },
        {
          "tag": "v2.22.1",
          "kind": "patch",
          "published_at": "2023-11-08T08:41:15Z"
        },
        {
          "tag": "v2.22.0",
          "kind": "minor",
          "published_at": "2023-11-07T14:22:07Z"
        },
        {
          "tag": "v2.21.6",
          "kind": "patch",
          "published_at": "2023-09-29T08:22:22Z"
        },
        {
          "tag": "v2.21.4",
          "kind": "patch",
          "published_at": "2023-09-11T15:05:05Z"
        },
        {
          "tag": "v2.21.3",
          "kind": "patch",
          "published_at": "2023-04-06T09:29:06Z"
        },
        {
          "tag": "v2.21.2",
          "kind": "patch",
          "published_at": "2023-03-21T12:41:46Z"
        },
        {
          "tag": "v2.21.1",
          "kind": "patch",
          "published_at": "2023-03-13T15:31:11Z"
        },
        {
          "tag": "v2.21.0",
          "kind": "minor",
          "published_at": "2023-03-06T11:29:42Z"
        },
        {
          "tag": "v2.20.0",
          "kind": "minor",
          "published_at": "2023-01-30T15:48:53Z"
        },
        {
          "tag": "v2.19.0",
          "kind": "minor",
          "published_at": "2022-11-04T15:13:00Z"
        },
        {
          "tag": "v2.18.2",
          "kind": "patch",
          "published_at": "2022-10-27T12:32:28Z"
        },
        {
          "tag": "v2.18.1",
          "kind": "patch",
          "published_at": "2022-10-20T08:30:41Z"
        },
        {
          "tag": "v2.18.0",
          "kind": "minor",
          "published_at": "2022-10-20T08:16:57Z"
        },
        {
          "tag": "v2.17.2",
          "kind": "patch",
          "published_at": "2022-05-18T16:02:28Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "2b1033208cd4d03654c59e83bbeb8eb933ab03ab",
          "body": "Works around an OpenAI backend routing bug that intermittently rejects\nimage_url blocks on vision-capable models by retrying up to three times\nwith a short backoff before surfacing the failure.\n\nWraps upstream errors with richer metadata (status, code, request id,\nresponse body) to make debugging failed reviews far easier, and logs\nimage references via debug output.\n\nAdds a dry-run env flag to build and inspect the request payload\nwithout actually calling the model.",
          "is_bot": false,
          "headline": "Retries transient OpenAI 400s and improves error diagnostics",
          "author_name": "Herman Meerlo",
          "author_login": "hmeerlo",
          "committed_at": "2026-07-17T08:57:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "afb3a9b4b5eb7dc21ee9827904adee7056c146b2",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'fix/improve-aireview' into develop",
          "author_name": "Herman Meerlo",
          "author_login": "hmeerlo",
          "committed_at": "2026-07-15T13:24:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8a753cafdce89fca207f9f8871fcc995c57fd866",
          "body": "Adds a separate brand-icon reference anchor and rewrites the \"no Homey name or logo\" guideline to clearly distinguish text vs. visual triggers.\n\nSpells out explicit carve-outs (stylised H, monochrome/gradient rings, generally colourful graphics) that must not be flagged, to reduce false positives wh\n[…]\nly matching anything round and colourful as the Homey mark.\n\nClarifies that the \"bias toward warning\" rule does not apply to these carve-outs, since flagging them would amount to a fabricated finding.",
          "is_bot": false,
          "headline": "Tightens Homey logo detection rules in AI reviewer prompt",
          "author_name": "Herman Meerlo",
          "author_login": "hmeerlo",
          "committed_at": "2026-07-14T13:34:58Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c88ca4573a2ec874eeb6a7cb5ef2e52bc36c7462",
          "body": "Introduces a canonical templates file capturing the review team's tone-of-voice and phrasing, and wires it into the system prompt so findings are grounded in the exact messages developers already receive.\n\nAnnotates every checklist rule with a specific Guideline reference URL and requires developer-\n[…]\nad of vague \"per the checklist\" citations.\n\nAlso clarifies that xlarge app and driver images are optional to prevent false-positive findings, and splits driver sub-rules for finer-grained referencing.",
          "is_bot": false,
          "headline": "Adds feedback templates and guideline URLs to AI reviewer",
          "author_name": "Herman Meerlo",
          "author_login": "hmeerlo",
          "committed_at": "2026-07-14T09:42:40Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a84bab320e660feec0ca5e732eadd2e63472ac16",
          "body": "Clarifies scope of several review rules to prevent over-flagging:\n\n- Defines what actually counts as a Homey name/logo violation, treating ambiguous cases as warnings rather than blockers.\n- Explicitly allows text that naturally appears on devices or packaging in driver images.\n- Narrows app-name ch\n[…]\nes concrete visual descriptions for image findings; adjective-only evidence must be dropped.\n- Refines deduping guidance so the same rule violated across multiple loci collapses into a single finding.",
          "is_bot": false,
          "headline": "Tightens AI reviewer prompt to curb false positives",
          "author_name": "Herman Meerlo",
          "author_login": "hmeerlo",
          "committed_at": "2026-07-14T09:38:42Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "66043cdbbfc9ad888fa8e3a1688b1749eba52574",
          "body": "…indings\n\nBundles canonical Homey/Athom brand assets (starting with the Homey logo) as reference image blocks attached to every review, giving the model a concrete visual anchor for guideline 1.4 checks instead of relying on pattern recognition alone. Reference blocks are clearly labelled and prompt\n[…]\nline-literal violation, and the skip-if-unsure rule is preserved for technical checks the model is known to get wrong (SVG byte-equivalence, pixel-resolution measurement, trademark substring matches).",
          "is_bot": false,
          "headline": "Add brand reference images and shift review bias to flag borderline f…",
          "author_name": "Herman Meerlo",
          "author_login": "hmeerlo",
          "committed_at": "2026-07-09T10:57:21Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1315cdb4ef15a1625af8354a648cecea89b88616",
          "body": "Tightens the reviewer prompt to eliminate first-person narration (\"I found...\", \"I noticed...\") that makes output read like a bot describing its own inspection, in favor of stating the app's state as observable fact.\n\nStandardizes asset vocabulary to match the App Store's own terms (App Image, Drive\n[…]\no internal working documents (checklist, reviewer reference) that developers cannot access.\n\nAdds a full worked example so the model has a concrete target for the finished title and explanation style.",
          "is_bot": false,
          "headline": "Refine AI reviewer prompt tone and vocabulary",
          "author_name": "Herman Meerlo",
          "author_login": "hmeerlo",
          "committed_at": "2026-07-09T10:02:40Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1d77ffb63d8c3b264b86bf2745ac1da72b7356bc",
          "body": "Applies destructuring, adjusts arrow function parentheses, and adds targeted lint disables for long lines that would harm readability if wrapped (prompt prose, schema descriptions, and detailed error messages).\n\nAlso splits an overly long debug log into intermediate variables for clarity.",
          "is_bot": false,
          "headline": "Fixes ESLint warnings across AIReviewer and App modules",
          "author_name": "Herman Meerlo",
          "author_login": "hmeerlo",
          "committed_at": "2026-07-06T12:41:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "26ceedb731618f8335934bdb7e19eb43713dc967",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'master' into develop",
          "author_name": "Herman Meerlo",
          "author_login": "hmeerlo",
          "committed_at": "2026-07-06T12:32:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "786e79b073668876bc198f80d7b5defc226a2fce",
          "body": null,
          "is_bot": false,
          "headline": "Update webpack artefact",
          "author_name": "Herman Meerlo",
          "author_login": "hmeerlo",
          "committed_at": "2026-07-06T12:13:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "117e1c703193dac1cf54de4059dcd87f8e7e6e1b",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'develop'",
          "author_name": "Herman Meerlo",
          "author_login": "hmeerlo",
          "committed_at": "2026-07-06T12:12:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b7d7bcd2a8e42dc66e8516dd0c443aed7117c632",
          "body": "Adds AIReviewer module for multi-provider app reviews",
          "is_bot": false,
          "headline": "Merge pull request #714 from athombv/feature/aireview",
          "author_name": "hmeerlo",
          "author_login": "hmeerlo",
          "committed_at": "2026-07-06T12:05:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "42bcd2d250b184f3537a1bcb1f2055cb37f2f41f",
          "body": "The previous check only guarded the total request payload (~20MB, OpenAI's\nceiling). Anthropic rejects any single base64 image over 5MB, so a user\nwith one oversized image would slip past the total check and hit an\nopaque provider error. This enforces both limits up-front with a clear\nmessage.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Adds per-image size check for Anthropic's 5MB limit",
          "author_name": "Herman Meerlo",
          "author_login": "hmeerlo",
          "committed_at": "2026-07-06T11:46:35Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "e95bfe031579780fcb88c3b6695d0000117db552",
          "body": "The AIReviewer already receives the parsed manifest, so accepting appId\nas a separate argument was pure duplication. Consumers can drop it.\nExisting callers that still pass appId are unaffected (the extra key is\nsilently ignored during destructuring).\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Removes redundant appId parameter, derives from manifest.id",
          "author_name": "Herman Meerlo",
          "author_login": "hmeerlo",
          "committed_at": "2026-07-06T11:43:39Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "69dc627c28470b023c5965251eb99c1b2097dd2f",
          "body": "Reframes the internal checklist as a companion to the public App Store Guidelines rather than a derivative of an internal Google Doc, so the source of truth lives where developers can actually see it.\n\nAdds previously-undocumented rules that reviewers already enforce (SDK v3 requirement, permission \n[…]\n flags them as known drift pending sync to the public site.\n\nDrops Athom-specific framing from the prompt and docs so severity parsing and interpretation guidance read as neutral reviewer conventions.",
          "is_bot": false,
          "headline": "Align reviewer docs with public guidelines",
          "author_name": "Herman Meerlo",
          "author_login": "hmeerlo",
          "committed_at": "2026-07-06T11:26:33Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "84c7f753566ed0fb91e0aeb204313bf08bf53334",
          "body": "fix: repair ESLint and add lint CI job",
          "is_bot": false,
          "headline": "Merge pull request #715 from athombv/fix/eslint-ci",
          "author_name": "Robin Bolscher",
          "author_login": "RobinBol",
          "committed_at": "2026-07-03T14:23:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "99fbe8c69023ef3d22a24daaacbe78bffed994cb",
          "body": "- Disable template-curly-spacing and indent rules (ESLint 7.x bugs)\n- Fix unused widgetId variable (Object.entries -> Object.values)\n- Add scripts/ and webpack.config.js to .eslintignore\n- Auto-fix style issues\n- Add separate lint.yml workflow",
          "is_bot": false,
          "headline": "fix: repair ESLint and add lint CI job",
          "author_name": "Robin Bolscher",
          "author_login": "RobinBol",
          "committed_at": "2026-07-03T14:22:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1bb5d25d34ef79367d3758da160302e2be7ba2db",
          "body": "Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Potential fix for pull request finding",
          "author_name": "hmeerlo",
          "author_login": "hmeerlo",
          "committed_at": "2026-07-03T08:13:15Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "f93392a1b2fdce9d2052d086390344618b238e17",
          "body": "Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Potential fix for pull request finding",
          "author_name": "hmeerlo",
          "author_login": "hmeerlo",
          "committed_at": "2026-07-03T08:12:42Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "6c3f098426d67776d16916cef863ceab341c204e",
          "body": "Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Potential fix for pull request finding",
          "author_name": "hmeerlo",
          "author_login": "hmeerlo",
          "committed_at": "2026-07-03T08:08:11Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "4b72e629a2f26d10aa3688d6467b04515feba294",
          "body": "Anthropic's API requires HTTPS URLs for the `url` source type and rejects inline base64 payloads there. Detects data URLs and converts them into the appropriate `base64` source with the correct media type so inline image bytes are transmitted correctly instead of failing at the API boundary.",
          "is_bot": false,
          "headline": "Handles data URLs for Anthropic image blocks",
          "author_name": "Herman Meerlo",
          "author_login": "hmeerlo",
          "committed_at": "2026-07-03T08:07:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4566c266f84a445a098db87305a124e4e06faa44",
          "body": "Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Potential fix for pull request finding",
          "author_name": "hmeerlo",
          "author_login": "hmeerlo",
          "committed_at": "2026-07-03T08:05:52Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "e4051e8cfc0ea540fe5c2b2367bdc11d09e54915",
          "body": "Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Potential fix for pull request finding",
          "author_name": "hmeerlo",
          "author_login": "hmeerlo",
          "committed_at": "2026-07-03T08:05:35Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "f21b7e965881cfecf00e1ad2c73dd94523978500",
          "body": "Introduces a Node-only review pipeline that abstracts over OpenAI and\nAnthropic behind a provider-neutral tool schema, letting callers request\nstructured verdicts, severities, and categorized findings via a single\nfactory entry point.\n\nGuards the require with try/catch and adds a webpack IgnorePlugin rule so\nthe browser/RN bundles remain loadable and simply resolve the export to\nundefined, keeping the server-side feature from breaking client builds.",
          "is_bot": false,
          "headline": "Adds AIReviewer module for multi-provider app reviews",
          "author_name": "Herman Meerlo",
          "author_login": "hmeerlo",
          "committed_at": "2026-07-03T07:17:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "47aaa0b697bcebff127683a778d68372c3660fec",
          "body": "Merge develop into master",
          "is_bot": false,
          "headline": "Merge pull request #711 from athombv/develop",
          "author_name": "Wouter",
          "author_login": "wouter-athom",
          "committed_at": "2026-06-18T12:00:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a4a7b103ba27ab100695fa1082224a10da05c25d",
          "body": null,
          "is_bot": false,
          "headline": "ci: generated locales",
          "author_name": "Homey Github Actions Bot",
          "author_login": null,
          "committed_at": "2026-06-18T11:59:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "80bc84df1d491abd8d4a51239690f17f84ef4ee6",
          "body": "Fix capability title capitalisation and French translation",
          "is_bot": false,
          "headline": "Merge pull request #710 from athombv/chore/capability-translations",
          "author_name": "Wouter",
          "author_login": "wouter-athom",
          "committed_at": "2026-06-18T11:58:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "34aa3b657ccec14907d44290e67e6872317fa87d",
          "body": "Picks the relevant changes from #619 by @OlivierZal:\n- fan_speed: \"Fan Speed\" → \"Fan speed\" (sentence case)\n- thermostat_mode: French title \"Mode thermostat\" → \"Mode du thermostat\"\n\nCo-Authored-By: Olivier Zalmanski <88216225+OlivierZal@users.noreply.github.com>\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Fix capability title capitalisation and French translation",
          "author_name": "Wouter Kamp",
          "author_login": "wouter-athom",
          "committed_at": "2026-06-18T11:45:20Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "8c67eb42c8d49724596405c8dae558be1ef2e009",
          "body": "Merge develop into master",
          "is_bot": false,
          "headline": "Merge pull request #708 from athombv/develop",
          "author_name": "Wouter",
          "author_login": "wouter-athom",
          "committed_at": "2026-06-18T08:43:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "133e76e4291e5564f9cb422c69e2b3d2cc173886",
          "body": null,
          "is_bot": false,
          "headline": "ci: generated locales",
          "author_name": "Homey Github Actions Bot",
          "author_login": null,
          "committed_at": "2026-06-18T08:38:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3d5d26cb8ad5f94afc294bdf1ef2228075c835b0",
          "body": "Chore/update enum translations",
          "is_bot": false,
          "headline": "Merge pull request #696 from athombv/chore/update-enum-translations",
          "author_name": "Wouter",
          "author_login": "wouter-athom",
          "committed_at": "2026-06-18T08:37:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7deee9f561e571d3580540afee4a1fc2799bd1bb",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'develop'",
          "author_name": "Herman Meerlo",
          "author_login": "hmeerlo",
          "committed_at": "2026-06-09T07:28:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5a39419ee78c0ec9a7cd14e0031c74172314383d",
          "body": "Adds BLE advertisements feature to supported platforms",
          "is_bot": false,
          "headline": "Merge pull request #705 from athombv/feature/ble-advertisements",
          "author_name": "hmeerlo",
          "author_login": "hmeerlo",
          "committed_at": "2026-06-09T07:24:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3f8ee21c28e6251d321b89763e8e83117d2d68fd",
          "body": "…_2026-06-01Z\n\n🌐 Language update from Lingohub 🤖 on 2026-06-01Z",
          "is_bot": false,
          "headline": "Merge pull request #706 from athombv/lingohub_language_update_develop…",
          "author_name": "Robin Bolscher",
          "author_login": "RobinBol",
          "committed_at": "2026-06-02T13:29:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6eaac844eafe5170783e7f5927127410f3d83b4d",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'develop' into lingohub_language_update_develop_2026-06-01Z",
          "author_name": "Robin Bolscher",
          "author_login": "RobinBol",
          "committed_at": "2026-06-02T13:29:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7efa35fc6574cb659414b5decb08ab236cb46440",
          "body": "…_2026-05-25Z\n\n🌐 Language update from Lingohub 🤖 on 2026-05-25Z",
          "is_bot": false,
          "headline": "Merge pull request #704 from athombv/lingohub_language_update_develop…",
          "author_name": "Robin Bolscher",
          "author_login": "RobinBol",
          "committed_at": "2026-06-02T13:26:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ba1eb6d7f6cbe1e5e90d3aa964f731b4b9c7862e",
          "body": null,
          "is_bot": false,
          "headline": "updated nl translations to use imperative form",
          "author_name": "Wouter Kamp",
          "author_login": "wouter-athom",
          "committed_at": "2026-06-01T07:51:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "99d0ed012dd1c7bb68033cbf752fcf8d2fa9fd58",
          "body": null,
          "is_bot": false,
          "headline": "ci: applied locales",
          "author_name": "Homey Github Actions Bot",
          "author_login": null,
          "committed_at": "2026-06-01T06:00:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a449d01980074b3105977db18b6fee312dc42c08",
          "body": "Project Name: node-homey-lib\nProject Link: https://app.lingohub.com/project/pr_13RFK20VujJq-24039/branches/prb_15PXO7gzUYuE-11865\nUser: Lingohub Robot\n\nEasy language translations with Lingohub 🚀",
          "is_bot": true,
          "headline": "🌐 Language update from Lingohub 🤖",
          "author_name": "lingohub[bot]",
          "author_login": "lingohub[bot]",
          "committed_at": "2026-06-01T06:00:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3a6fa8cf4550d4832d5a1419845fc5514bf1f902",
          "body": "Enables BLE advertisements support for select platforms to expand feature compatibility and future integration possibilities.",
          "is_bot": false,
          "headline": "Adds BLE advertisements feature to supported platforms",
          "author_name": "Herman Meerlo",
          "author_login": "hmeerlo",
          "committed_at": "2026-05-26T07:32:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7d7d48025499586e6c47b16e639cec6cd64d60a1",
          "body": null,
          "is_bot": false,
          "headline": "ci: applied locales",
          "author_name": "Homey Github Actions Bot",
          "author_login": null,
          "committed_at": "2026-05-25T06:00:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f657d276faeb140dd568f71e09bb1b1ba236d63e",
          "body": "Project Name: node-homey-lib\nProject Link: https://app.lingohub.com/project/pr_13RFK20VujJq-24039/branches/prb_15PXO7gzUYuE-11865\nUser: Lingohub Robot\n\nEasy language translations with Lingohub 🚀",
          "is_bot": true,
          "headline": "🌐 Language update from Lingohub 🤖",
          "author_name": "lingohub[bot]",
          "author_login": "lingohub[bot]",
          "committed_at": "2026-05-25T06:00:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0350b10b01b3e5efa90f53391da08a63c54b08ee",
          "body": "mdim",
          "is_bot": false,
          "headline": "Merge pull request #702 from athombv/develop",
          "author_name": "Jeroen Wienk",
          "author_login": "jeroenwienk",
          "committed_at": "2026-05-22T09:40:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3c20874fef4e4636d8f34c5f72bef77a71080458",
          "body": "…ompatibility\n\nRequire Homey 13.2.1 for capability titleShort",
          "is_bot": false,
          "headline": "Merge pull request #701 from athombv/feature/capability-title-short-c…",
          "author_name": "Jeroen Wienk",
          "author_login": "jeroenwienk",
          "committed_at": "2026-05-22T09:38:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ffcf4b9c2dc940150cd520bd822d55c3cd001014",
          "body": null,
          "is_bot": false,
          "headline": "Address capability titleShort review feedback",
          "author_name": "Jeroen Wienk",
          "author_login": "jeroenwienk",
          "committed_at": "2026-05-22T09:37:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f9207e3aa0dadf5358cbcc2dc18c21abc40be50e",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'production' into master",
          "author_name": "Jeroen Wienk",
          "author_login": "jeroenwienk",
          "committed_at": "2026-05-21T09:58:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "26786f04223cd84f71781237dcd5be5911f69201",
          "body": null,
          "is_bot": false,
          "headline": "Require Homey 13.2.1 for capability titleShort",
          "author_name": "Jeroen Wienk",
          "author_login": "jeroenwienk",
          "committed_at": "2026-05-21T09:55:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5a4dfd933cf70cfc593455bf35ead7ba7ba7ecca",
          "body": "mdim",
          "is_bot": false,
          "headline": "Merge pull request #698 from athombv/develop",
          "author_name": "Jeroen Wienk",
          "author_login": "jeroenwienk",
          "committed_at": "2026-05-21T09:51:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "076ae4823bee34869be8a6a298631e2e087ef9e4",
          "body": "# Conflicts:\n#\twebpack/index.js",
          "is_bot": false,
          "headline": "Merge remote-tracking branch 'origin/master' into develop",
          "author_name": "Jeroen Wienk",
          "author_login": "jeroenwienk",
          "committed_at": "2026-05-21T09:49:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5800fa3f04dfe97da52dbaab78c4244b1836c75b",
          "body": "test: cover titleShort app capability validation",
          "is_bot": false,
          "headline": "Merge pull request #699 from athombv/feature/title-short-app-validation",
          "author_name": "Jeroen Wienk",
          "author_login": "jeroenwienk",
          "committed_at": "2026-05-21T09:37:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "71e90e88751048feab12a473d22ed49e5e5e3467",
          "body": null,
          "is_bot": false,
          "headline": "test: cover titleShort app capability validation",
          "author_name": "Jeroen Wienk",
          "author_login": "jeroenwienk",
          "committed_at": "2026-05-21T09:27:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c00861ffa597eb7b639d375ae473c16dfc7155a3",
          "body": null,
          "is_bot": false,
          "headline": "ci: generated locales",
          "author_name": "Homey Github Actions Bot",
          "author_login": null,
          "committed_at": "2026-05-21T09:20:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0a629194d9474666cf44cdbcbecfe12e79402a8a",
          "body": "feat: add shortTitle to alarm capabilities",
          "is_bot": false,
          "headline": "Merge pull request #692 from athombv/feature/alarm-short-titles",
          "author_name": "Jeroen Wienk",
          "author_login": "jeroenwienk",
          "committed_at": "2026-05-21T09:19:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a1c9536dca022ec3848557c694c1ba31aed59b76",
          "body": null,
          "is_bot": false,
          "headline": "chore: update generated titleShort artifacts",
          "author_name": "Jeroen Wienk",
          "author_login": "jeroenwienk",
          "committed_at": "2026-05-21T09:14:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1a07ed044933651b326b91ece6ac627aec2d24db",
          "body": null,
          "is_bot": false,
          "headline": "updated swing_mode translations",
          "author_name": "Wouter Kamp",
          "author_login": "wouter-athom",
          "committed_at": "2026-05-13T12:15:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8a515f318292986ac89ae3bfdb024adcaabb4e02",
          "body": null,
          "is_bot": false,
          "headline": "updated target_power_mode and thermostat_mode",
          "author_name": "Wouter Kamp",
          "author_login": "wouter-athom",
          "committed_at": "2026-05-13T11:27:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6fbf3d5ed2cc3c7766dcb6bd07ef1bbe4e43718b",
          "body": null,
          "is_bot": false,
          "headline": "updated translations for enum capabilities",
          "author_name": "Wouter Kamp",
          "author_login": "wouter-athom",
          "committed_at": "2026-05-13T11:17:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5e16871cff902bf2204d6e01603d434377a32f19",
          "body": "Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "refactor: rename shortTitle to titleShort",
          "author_name": "Harwin",
          "author_login": "HarwinBorger",
          "committed_at": "2026-04-28T11:41:12Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "062d3d1e62f619a40c5235e0234dd111967d21e7",
          "body": "Adds an optional i18n shortTitle field to all 43 alarm_*.json capability\nfiles and declares it in the capability schema. The shortened form drops\nthe localized \"alarm\" word so UI surfaces with limited space can show\ne.g. \"Motion\" instead of \"Motion Alarm\".\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: add shortTitle to alarm capabilities",
          "author_name": "Harwin",
          "author_login": "HarwinBorger",
          "committed_at": "2026-04-28T11:32:24Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "52e9713ee4147986f3ec171dad941d99552fbc43",
          "body": null,
          "is_bot": false,
          "headline": "2.50.0",
          "author_name": "Homey Github Actions Bot",
          "author_login": null,
          "committed_at": "2026-04-22T11:50:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ce415d8633071f27c09d537d2709f73d132c355c",
          "body": null,
          "is_bot": false,
          "headline": "build: update webpack artefact",
          "author_name": "Homey Github Actions Bot",
          "author_login": null,
          "committed_at": "2026-04-22T11:50:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "57b213e9362035a457617dc7fcc424a0e832b93c",
          "body": "MMIP (#minor)",
          "is_bot": false,
          "headline": "Merge pull request #689 from athombv/master",
          "author_name": "Niels",
          "author_login": "nozols",
          "committed_at": "2026-04-22T11:50:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "59b91a4ab9c6b267e04c980100decea5917235c9",
          "body": "MDIM",
          "is_bot": false,
          "headline": "Merge pull request #688 from athombv/develop",
          "author_name": "Niels",
          "author_login": "nozols",
          "committed_at": "2026-04-22T11:48:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7250c1c82d545aa1ff4fc160c5aa53c6d2a285e7",
          "body": "feat(zwave): add firmware updates",
          "is_bot": false,
          "headline": "Merge pull request #684 from athombv/feature/zwave-firmware-updates",
          "author_name": "Niels",
          "author_login": "nozols",
          "committed_at": "2026-04-22T11:46:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "659df601b4ee8af8da82a1ca6ff2ffe462823bd1",
          "body": null,
          "is_bot": false,
          "headline": "2.49.2",
          "author_name": "Homey Github Actions Bot",
          "author_login": null,
          "committed_at": "2026-04-20T08:29:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "edacfa20198cf8c6d1f1b2674872a3251ff57a5b",
          "body": null,
          "is_bot": false,
          "headline": "build: update webpack artefact",
          "author_name": "Homey Github Actions Bot",
          "author_login": null,
          "committed_at": "2026-04-20T08:29:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a504127156e8229fe318e35922bd2d742a28a77a",
          "body": "Merge Master (#patch)",
          "is_bot": false,
          "headline": "Merge pull request #687 from athombv/master",
          "author_name": "Wouter",
          "author_login": "wouter-athom",
          "committed_at": "2026-04-20T08:29:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fadf2dd29bdc0a70f3f56a327801dfa37b8f465f",
          "body": "Merge develop",
          "is_bot": false,
          "headline": "Merge pull request #686 from athombv/develop",
          "author_name": "Wouter",
          "author_login": "wouter-athom",
          "committed_at": "2026-04-20T08:27:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6f5d80972df5e7fc3c6a9d01a75b0001f06ab7be",
          "body": null,
          "is_bot": false,
          "headline": "ci: generated locales",
          "author_name": "Homey Github Actions Bot",
          "author_login": null,
          "committed_at": "2026-04-20T08:10:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "18d4a0cdcf05e1bf89ea81535c5af7c6c38e26a5",
          "body": "updated wrong translations for fair and moderate air quality level",
          "is_bot": false,
          "headline": "Merge pull request #685 from athombv/fix/level-aqi-translations",
          "author_name": "Wouter",
          "author_login": "wouter-athom",
          "committed_at": "2026-04-20T08:10:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ccb417349918cc51e2f617c48b0e71b46819ebdf",
          "body": null,
          "is_bot": false,
          "headline": "updated wrong translations for fair and moderate air quality level",
          "author_name": "Wouter Kamp",
          "author_login": "wouter-athom",
          "committed_at": "2026-04-20T07:57:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8f5a0f9e7222deee3da512bf705fe856c450d361",
          "body": null,
          "is_bot": false,
          "headline": "chore: copilot review feedback",
          "author_name": "Niels de Boer",
          "author_login": "nozols",
          "committed_at": "2026-04-20T07:52:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cb784ff9695ce10c7cebf79f5e7aade3ac91dc8e",
          "body": null,
          "is_bot": false,
          "headline": "feat(zwave): add firmware updates",
          "author_name": "Niels de Boer",
          "author_login": "nozols",
          "committed_at": "2026-04-20T07:34:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f9e66cac176bca825174f7da443d46d986b6dddb",
          "body": null,
          "is_bot": false,
          "headline": "2.49.1",
          "author_name": "Homey Github Actions Bot",
          "author_login": null,
          "committed_at": "2026-04-17T08:51:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3064d76180d282913988ec0e5ddd3cb0e751a9af",
          "body": null,
          "is_bot": false,
          "headline": "build: update webpack artefact",
          "author_name": "Homey Github Actions Bot",
          "author_login": null,
          "committed_at": "2026-04-17T08:51:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ba7092134cd2e697119bb5089431fd01cc9beba9",
          "body": "MMIP (#patch)",
          "is_bot": false,
          "headline": "Merge pull request #682 from athombv/master",
          "author_name": "Niels",
          "author_login": "nozols",
          "committed_at": "2026-04-17T08:50:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fe1ce18bf1619944d4b9252556b868d2174366ab",
          "body": "MDIM",
          "is_bot": false,
          "headline": "Merge pull request #681 from athombv/develop",
          "author_name": "Niels",
          "author_login": "nozols",
          "committed_at": "2026-04-17T08:49:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "43a181101857c471ad6cb4298f85b0745740ac2e",
          "body": null,
          "is_bot": false,
          "headline": "feat(zigbee-firmware): add wake instruction field",
          "author_name": "Niels de Boer",
          "author_login": "nozols",
          "committed_at": "2026-04-17T08:43:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a8e43b6f273594c2f5a8ac09490aaac87e90cd05",
          "body": "master → production",
          "is_bot": false,
          "headline": "Merge pull request #678 from athombv/master",
          "author_name": "Emile Nijssen",
          "author_login": "WeeJeWel",
          "committed_at": "2026-03-31T09:57:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "472cc8ed988d658101521c6ac832ae4e4abf425f",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'production' into master",
          "author_name": "Emile Nijssen",
          "author_login": "WeeJeWel",
          "committed_at": "2026-03-31T09:57:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6b6ddb22fa2100707977e7cfe94abfeaa2486ba5",
          "body": "develop → master",
          "is_bot": false,
          "headline": "Merge pull request #677 from athombv/develop",
          "author_name": "Emile Nijssen",
          "author_login": "WeeJeWel",
          "committed_at": "2026-03-31T09:56:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "169a3f3e594bc6e4633ca540f180579ba5373343",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'master' into develop",
          "author_name": "Emile Nijssen",
          "author_login": "WeeJeWel",
          "committed_at": "2026-03-31T09:56:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f65e03757a6cd8dd4a7e3c289f1a82f78625a6e4",
          "body": null,
          "is_bot": false,
          "headline": "2.49.0",
          "author_name": "Emile Nijssen",
          "author_login": "WeeJeWel",
          "committed_at": "2026-03-31T09:55:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c7c7a3d054735cbb1f6a630ce6b54b05de704fc8",
          "body": null,
          "is_bot": false,
          "headline": "2.46.0",
          "author_name": "Emile Nijssen",
          "author_login": "WeeJeWel",
          "committed_at": "2026-03-31T09:54:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "eac824b152fc97c191b1ed3e78d916fb8089b1b4",
          "body": null,
          "is_bot": false,
          "headline": "add zone icons",
          "author_name": "Emile Nijssen",
          "author_login": "WeeJeWel",
          "committed_at": "2026-03-31T09:54:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "650a105edef4fd472b8ff7c2ae22f79682d44624",
          "body": null,
          "is_bot": false,
          "headline": "2.48.1",
          "author_name": "Homey Github Actions Bot",
          "author_login": null,
          "committed_at": "2026-03-23T15:47:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c417d68d9aefe5a4ea8063261fbede7286cd31b3",
          "body": null,
          "is_bot": false,
          "headline": "build: update webpack artefact",
          "author_name": "Homey Github Actions Bot",
          "author_login": null,
          "committed_at": "2026-03-23T15:47:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0fab2555dc5e8ed97b7a60546639e1146168b3f9",
          "body": "Merge master into production (#patch)",
          "is_bot": false,
          "headline": "Merge pull request #675 from athombv/master",
          "author_name": "Robin Bolscher",
          "author_login": "RobinBol",
          "committed_at": "2026-03-23T15:46:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a17f7a09f4d322226e6df8898fe8523eee642039",
          "body": "Merge develop into master",
          "is_bot": false,
          "headline": "Merge pull request #674 from athombv/develop",
          "author_name": "Robin Bolscher",
          "author_login": "RobinBol",
          "committed_at": "2026-03-23T15:45:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a1bcabb0db1f03f41a55234defd7e0cb893d3059",
          "body": "Remove hardcoded \"Automatic\" references from flow card hints since\nthe device value is now optional and custom values can be added.\nReplace with generic \"Other modes are determined by the device.\"",
          "is_bot": false,
          "headline": "fix(locale): update target_power_mode flow card hints to be generic",
          "author_name": "Robin Bolscher",
          "author_login": "RobinBol",
          "committed_at": "2026-03-23T15:44:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6b6864d033e469603b4a5f2ce538a26c6eb4601a",
          "body": null,
          "is_bot": false,
          "headline": "2.48.0",
          "author_name": "Homey Github Actions Bot",
          "author_login": null,
          "committed_at": "2026-03-23T12:55:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b437c61b2203c09dca35103cc51c888f8b1d17e3",
          "body": null,
          "is_bot": false,
          "headline": "build: update webpack artefact",
          "author_name": "Homey Github Actions Bot",
          "author_login": null,
          "committed_at": "2026-03-23T12:55:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "db9bc5c815973cadfa8419e8d03bd8b71003245d",
          "body": "Merge master into production (#minor)",
          "is_bot": false,
          "headline": "Merge pull request #673 from athombv/master",
          "author_name": "Robin Bolscher",
          "author_login": "RobinBol",
          "committed_at": "2026-03-23T12:54:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d8c87c69f139e737577b2ccb6a7e63aee86b24ac",
          "body": "Merge develop into master",
          "is_bot": false,
          "headline": "Merge pull request #672 from athombv/develop",
          "author_name": "Robin Bolscher",
          "author_login": "RobinBol",
          "committed_at": "2026-03-23T12:53:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "22d6feb134315317d5564972bf1dcf605a8b7447",
          "body": "…_2026-03-23Z\n\n🌐 Language update from Lingohub 🤖 on 2026-03-23Z",
          "is_bot": false,
          "headline": "Merge pull request #670 from athombv/lingohub_language_update_develop…",
          "author_name": "Robin Bolscher",
          "author_login": "RobinBol",
          "committed_at": "2026-03-23T12:52:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a77f9983abc5c6482484dd650e72802a0541150f",
          "body": null,
          "is_bot": false,
          "headline": "ci: applied locales",
          "author_name": "Homey Github Actions Bot",
          "author_login": null,
          "committed_at": "2026-03-23T12:49:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8afd69af78d2cdf6653dec502cb19cfb64bf0813",
          "body": null,
          "is_bot": false,
          "headline": "ci: generated locales",
          "author_name": "Homey Github Actions Bot",
          "author_login": null,
          "committed_at": "2026-03-23T12:45:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "88b0c9aba7bdc03a59167fc9de92ae6db43b5e90",
          "body": "Added a newline character to the end of JSON files when writing updated content to ensure proper formatting and compatibility with tools that expect a newline at the end of files.",
          "is_bot": false,
          "headline": "fix(locale): ensure JSON files end with a newline after writing",
          "author_name": "Robin Bolscher",
          "author_login": "RobinBol",
          "committed_at": "2026-03-23T12:44:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6ea37fbf4a58e965ae8201df32ac20d1fd280ce8",
          "body": "…vice-mode\n\nfeat: make device mode optional for target_power_mode",
          "is_bot": false,
          "headline": "Merge pull request #669 from athombv/feature/target-power-optional-de…",
          "author_name": "Robin Bolscher",
          "author_login": "RobinBol",
          "committed_at": "2026-03-23T12:41:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "452c635d9e0be6baecaf7425011c59882ac55d34",
          "body": null,
          "is_bot": false,
          "headline": "test: add regression test for malformed target_power_mode entries",
          "author_name": "Robin Bolscher",
          "author_login": "RobinBol",
          "committed_at": "2026-03-23T12:39:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 100,
      "commits_last_year": 358,
      "latest_release_at": "2026-07-17T08:59:07Z",
      "latest_release_tag": "v2.51.3",
      "releases_from_tags": true,
      "days_since_last_push": 1,
      "active_weeks_last_year": 34,
      "days_since_latest_release": 4,
      "mean_days_between_releases": 9.5
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": true,
      "health_percentage": 62,
      "has_issue_template": false,
      "has_code_of_conduct": true,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "homey-lib",
          "exists": true,
          "license": "ISC",
          "keywords": [],
          "ecosystem": "npm",
          "matches_repo": true,
          "registry_url": "https://www.npmjs.com/package/homey-lib",
          "is_deprecated": false,
          "latest_version": "2.51.3",
          "repository_url": "https://github.com/athombv/node-homey-lib",
          "versions_count": 289,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 3,
          "monthly_downloads": 15568,
          "first_published_at": "2015-12-11T19:42:34.988000Z",
          "latest_published_at": "2026-07-17T08:59:16.240000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 4
        }
      ]
    },
    "popularity": {
      "forks": 26,
      "stars": 23,
      "watchers": 11,
      "fork_history": {
        "days": [
          {
            "date": "2016-06-01",
            "count": 1
          },
          {
            "date": "2016-06-15",
            "count": 1
          },
          {
            "date": "2016-06-22",
            "count": 1
          },
          {
            "date": "2017-05-10",
            "count": 1
          },
          {
            "date": "2018-07-24",
            "count": 1
          },
          {
            "date": "2018-08-13",
            "count": 1
          },
          {
            "date": "2018-11-08",
            "count": 1
          },
          {
            "date": "2019-01-16",
            "count": 1
          },
          {
            "date": "2019-03-08",
            "count": 1
          },
          {
            "date": "2020-07-01",
            "count": 1
          },
          {
            "date": "2020-10-06",
            "count": 1
          },
          {
            "date": "2020-12-09",
            "count": 1
          },
          {
            "date": "2021-02-14",
            "count": 1
          },
          {
            "date": "2021-03-22",
            "count": 1
          },
          {
            "date": "2021-05-05",
            "count": 1
          },
          {
            "date": "2021-05-06",
            "count": 1
          },
          {
            "date": "2021-11-10",
            "count": 1
          },
          {
            "date": "2022-02-20",
            "count": 1
          },
          {
            "date": "2022-03-06",
            "count": 1
          },
          {
            "date": "2022-06-10",
            "count": 1
          },
          {
            "date": "2023-04-06",
            "count": 1
          },
          {
            "date": "2023-06-15",
            "count": 1
          },
          {
            "date": "2025-05-23",
            "count": 1
          },
          {
            "date": "2025-12-24",
            "count": 1
          },
          {
            "date": "2026-04-22",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 25,
        "total_forks": 26
      },
      "star_history": {
        "days": [
          {
            "date": "2015-09-02",
            "count": 1
          },
          {
            "date": "2017-10-24",
            "count": 1
          },
          {
            "date": "2019-04-09",
            "count": 1
          },
          {
            "date": "2019-12-22",
            "count": 1
          },
          {
            "date": "2020-08-08",
            "count": 1
          },
          {
            "date": "2020-10-06",
            "count": 1
          },
          {
            "date": "2021-01-18",
            "count": 1
          },
          {
            "date": "2021-05-05",
            "count": 1
          },
          {
            "date": "2021-05-06",
            "count": 1
          },
          {
            "date": "2022-03-06",
            "count": 1
          },
          {
            "date": "2022-05-23",
            "count": 1
          },
          {
            "date": "2024-07-17",
            "count": 1
          },
          {
            "date": "2024-11-03",
            "count": 1
          },
          {
            "date": "2025-01-22",
            "count": 1
          },
          {
            "date": "2025-02-10",
            "count": 1
          },
          {
            "date": "2025-05-14",
            "count": 1
          },
          {
            "date": "2025-08-30",
            "count": 1
          },
          {
            "date": "2025-12-09",
            "count": 1
          },
          {
            "date": "2025-12-15",
            "count": 1
          },
          {
            "date": "2026-01-12",
            "count": 1
          },
          {
            "date": "2026-03-19",
            "count": 1
          },
          {
            "date": "2026-05-09",
            "count": 1
          },
          {
            "date": "2026-06-01",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 23,
        "total_stars": 23
      },
      "open_issues_and_prs": 21
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [
        "examples"
      ],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": false,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [],
      "largest_source_bytes": 979342,
      "source_files_sampled": 50,
      "oversized_source_files": 1,
      "agent_instruction_files": [],
      "agent_instruction_max_bytes": null
    },
    "dependencies": {
      "manifests": [
        "package.json"
      ],
      "advisories": {
        "error": null,
        "scope": "repository_graph",
        "source": "osv",
        "findings": [
          {
            "name": "flatted",
            "direct": false,
            "version": "3.2.1",
            "severity": "critical",
            "ecosystem": "npm",
            "cvss_score": 9.8,
            "advisory_ids": [
              "GHSA-25h7-pfq9-p65f",
              "GHSA-rf6f-7fwh-wjgh"
            ],
            "fixed_version": "3.4.2",
            "advisory_count": 2,
            "oldest_advisory_days": 130
          },
          {
            "name": "semver",
            "direct": true,
            "version": "6.3.0",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-c2qf-rxjj-qqgw"
            ],
            "fixed_version": "7.5.2",
            "advisory_count": 1,
            "oldest_advisory_days": 1126
          },
          {
            "name": "semver",
            "direct": true,
            "version": "7.3.5",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-c2qf-rxjj-qqgw"
            ],
            "fixed_version": "7.5.2",
            "advisory_count": 1,
            "oldest_advisory_days": 1126
          },
          {
            "name": "brace-expansion",
            "direct": false,
            "version": "1.1.11",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-3jxr-9vmj-r5cp",
              "GHSA-f886-m6hf-6m8v",
              "GHSA-v6h2-p8h4-qcjw"
            ],
            "fixed_version": "5.0.7",
            "advisory_count": 3,
            "oldest_advisory_days": 407
          },
          {
            "name": "braces",
            "direct": false,
            "version": "3.0.2",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-grv7-fg5c-xmjg"
            ],
            "fixed_version": "3.0.3",
            "advisory_count": 1,
            "oldest_advisory_days": 798
          },
          {
            "name": "fast-uri",
            "direct": false,
            "version": "3.0.6",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-4c8g-83qw-93j6",
              "GHSA-q3j6-qgpj-74h6",
              "GHSA-v2hh-gcrm-f6hx",
              "GHSA-v39h-62p7-jpjc"
            ],
            "fixed_version": "4.1.1",
            "advisory_count": 4,
            "oldest_advisory_days": 74
          },
          {
            "name": "js-yaml",
            "direct": false,
            "version": "3.14.1",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-52cp-r559-cp3m",
              "GHSA-h67p-54hq-rp68",
              "GHSA-mh29-5h37-fv8m"
            ],
            "fixed_version": "4.3.0",
            "advisory_count": 3,
            "oldest_advisory_days": 249
          },
          {
            "name": "js-yaml",
            "direct": false,
            "version": "4.1.0",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-52cp-r559-cp3m",
              "GHSA-h67p-54hq-rp68",
              "GHSA-mh29-5h37-fv8m"
            ],
            "fixed_version": "4.3.0",
            "advisory_count": 3,
            "oldest_advisory_days": 249
          },
          {
            "name": "js-yaml",
            "direct": false,
            "version": "4.1.1",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-52cp-r559-cp3m",
              "GHSA-h67p-54hq-rp68"
            ],
            "fixed_version": "4.3.0",
            "advisory_count": 2,
            "oldest_advisory_days": 36
          },
          {
            "name": "lodash",
            "direct": false,
            "version": "4.17.23",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 8.1,
            "advisory_ids": [
              "GHSA-f23m-r3pf-42rh",
              "GHSA-r5fr-rjxr-66jc"
            ],
            "fixed_version": "4.18.0",
            "advisory_count": 2,
            "oldest_advisory_days": 111
          },
          {
            "name": "minimatch",
            "direct": false,
            "version": "3.1.2",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-23c5-xmqv-rm74",
              "GHSA-3ppc-4f35-3m26",
              "GHSA-7r86-cg39-jmmj"
            ],
            "fixed_version": "10.2.3",
            "advisory_count": 3,
            "oldest_advisory_days": 153
          },
          {
            "name": "minimatch",
            "direct": false,
            "version": "4.2.1",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-23c5-xmqv-rm74",
              "GHSA-3ppc-4f35-3m26",
              "GHSA-7r86-cg39-jmmj"
            ],
            "fixed_version": "10.2.3",
            "advisory_count": 3,
            "oldest_advisory_days": 153
          },
          {
            "name": "picomatch",
            "direct": false,
            "version": "2.3.0",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-3v7f-55p6-f55p",
              "GHSA-c2c7-rcm5-vvqj"
            ],
            "fixed_version": "4.0.4",
            "advisory_count": 2,
            "oldest_advisory_days": 118
          },
          {
            "name": "picomatch",
            "direct": false,
            "version": "4.0.3",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-3v7f-55p6-f55p",
              "GHSA-c2c7-rcm5-vvqj"
            ],
            "fixed_version": "4.0.4",
            "advisory_count": 2,
            "oldest_advisory_days": 118
          },
          {
            "name": "serialize-javascript",
            "direct": false,
            "version": "6.0.0",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 8.1,
            "advisory_ids": [
              "GHSA-5c6j-r48x-rmvq",
              "GHSA-76p7-773f-r4q5",
              "GHSA-qj8w-gfj5-8c6v"
            ],
            "fixed_version": "7.0.5",
            "advisory_count": 3,
            "oldest_advisory_days": 526
          },
          {
            "name": "serialize-javascript",
            "direct": false,
            "version": "6.0.2",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 8.1,
            "advisory_ids": [
              "GHSA-5c6j-r48x-rmvq",
              "GHSA-qj8w-gfj5-8c6v"
            ],
            "fixed_version": "7.0.5",
            "advisory_count": 2,
            "oldest_advisory_days": 144
          },
          {
            "name": "ajv",
            "direct": true,
            "version": "6.12.3",
            "severity": "moderate",
            "ecosystem": "npm",
            "cvss_score": 5.3,
            "advisory_ids": [
              "GHSA-2g4f-4pwh-qvx6"
            ],
            "fixed_version": "8.18.0",
            "advisory_count": 1,
            "oldest_advisory_days": 160
          },
          {
            "name": "ajv",
            "direct": true,
            "version": "6.12.6",
            "severity": "moderate",
            "ecosystem": "npm",
            "cvss_score": 5.3,
            "advisory_ids": [
              "GHSA-2g4f-4pwh-qvx6"
            ],
            "fixed_version": "8.18.0",
            "advisory_count": 1,
            "oldest_advisory_days": 160
          },
          {
            "name": "ajv",
            "direct": true,
            "version": "8.17.1",
            "severity": "moderate",
            "ecosystem": "npm",
            "cvss_score": 5.3,
            "advisory_ids": [
              "GHSA-2g4f-4pwh-qvx6"
            ],
            "fixed_version": "8.18.0",
            "advisory_count": 1,
            "oldest_advisory_days": 160
          },
          {
            "name": "ajv",
            "direct": true,
            "version": "8.6.2",
            "severity": "moderate",
            "ecosystem": "npm",
            "cvss_score": 5.3,
            "advisory_ids": [
              "GHSA-2g4f-4pwh-qvx6"
            ],
            "fixed_version": "8.18.0",
            "advisory_count": 1,
            "oldest_advisory_days": 160
          },
          {
            "name": "diff",
            "direct": false,
            "version": "5.0.0",
            "severity": "moderate",
            "ecosystem": "npm",
            "cvss_score": 5.3,
            "advisory_ids": [
              "GHSA-73rr-hh4g-fpgx"
            ],
            "fixed_version": "8.0.3",
            "advisory_count": 1,
            "oldest_advisory_days": 188
          },
          {
            "name": "nanoid",
            "direct": false,
            "version": "3.3.1",
            "severity": "moderate",
            "ecosystem": "npm",
            "cvss_score": 4.3,
            "advisory_ids": [
              "GHSA-mwcw-c2x4-8c55"
            ],
            "fixed_version": "5.0.9",
            "advisory_count": 1,
            "oldest_advisory_days": 590
          },
          {
            "name": "word-wrap",
            "direct": false,
            "version": "1.2.3",
            "severity": "moderate",
            "ecosystem": "npm",
            "cvss_score": 5.3,
            "advisory_ids": [
              "GHSA-j8xg-fqg3-53r7"
            ],
            "fixed_version": "1.2.4",
            "advisory_count": 1,
            "oldest_advisory_days": 1125
          },
          {
            "name": "webpack",
            "direct": false,
            "version": "5.98.0",
            "severity": "low",
            "ecosystem": "npm",
            "cvss_score": 3.7,
            "advisory_ids": [
              "GHSA-38r7-794h-5758",
              "GHSA-8fgc-7cc6-rx7x"
            ],
            "fixed_version": "5.104.1",
            "advisory_count": 2,
            "oldest_advisory_days": 166
          }
        ],
        "collected": true,
        "malicious": [],
        "truncated": false,
        "by_severity": {
          "low": 1,
          "high": 15,
          "critical": 1,
          "moderate": 7
        },
        "advisory_count": 46,
        "affected_count": 24,
        "assessed_count": 417,
        "malicious_count": 0,
        "assessed_package": null,
        "unassessed_count": 0,
        "direct_affected_count": 6
      },
      "ecosystems": [
        "npm"
      ],
      "dependencies": [
        {
          "name": "ajv",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^6.1.1"
        },
        {
          "name": "buffer",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^6.0.3"
        },
        {
          "name": "debug",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "4.4.3"
        },
        {
          "name": "image-size",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.6.2"
        },
        {
          "name": "semver",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^5.7.0"
        },
        {
          "name": "tinycolor2",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.4.1"
        }
      ],
      "all_dependencies": {
        "error": null,
        "source": "github-sbom",
        "packages": [
          {
            "name": "ajv",
            "direct": true,
            "version": "6.12.3",
            "ecosystem": "npm"
          },
          {
            "name": "ajv",
            "direct": true,
            "version": "6.12.6",
            "ecosystem": "npm"
          },
          {
            "name": "ajv",
            "direct": true,
            "version": "8.17.1",
            "ecosystem": "npm"
          },
          {
            "name": "ajv",
            "direct": true,
            "version": "8.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "buffer",
            "direct": true,
            "version": "6.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "debug",
            "direct": true,
            "version": "2.6.9",
            "ecosystem": "npm"
          },
          {
            "name": "debug",
            "direct": true,
            "version": "3.2.7",
            "ecosystem": "npm"
          },
          {
            "name": "debug",
            "direct": true,
            "version": "4.3.3",
            "ecosystem": "npm"
          },
          {
            "name": "debug",
            "direct": true,
            "version": "4.4.3",
            "ecosystem": "npm"
          },
          {
            "name": "image-size",
            "direct": true,
            "version": "0.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "semver",
            "direct": true,
            "version": "5.7.2",
            "ecosystem": "npm"
          },
          {
            "name": "semver",
            "direct": true,
            "version": "6.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "semver",
            "direct": true,
            "version": "7.3.5",
            "ecosystem": "npm"
          },
          {
            "name": "tinycolor2",
            "direct": true,
            "version": "1.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "@anthropic-ai/sdk",
            "direct": false,
            "version": "0.91.1",
            "ecosystem": "npm"
          },
          {
            "name": "@apidevtools/json-schema-ref-parser",
            "direct": false,
            "version": "11.9.3",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/code-frame",
            "direct": false,
            "version": "7.12.11",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/code-frame",
            "direct": false,
            "version": "7.22.13",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/generator",
            "direct": false,
            "version": "7.23.0",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-environment-visitor",
            "direct": false,
            "version": "7.22.20",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-function-name",
            "direct": false,
            "version": "7.23.0",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-hoist-variables",
            "direct": false,
            "version": "7.22.5",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-split-export-declaration",
            "direct": false,
            "version": "7.22.6",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-string-parser",
            "direct": false,
            "version": "7.22.5",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-validator-identifier",
            "direct": false,
            "version": "7.14.8",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-validator-identifier",
            "direct": false,
            "version": "7.22.20",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/highlight",
            "direct": false,
            "version": "7.14.5",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/highlight",
            "direct": false,
            "version": "7.22.20",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/parser",
            "direct": false,
            "version": "7.14.8",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/parser",
            "direct": false,
            "version": "7.23.0",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/runtime",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/template",
            "direct": false,
            "version": "7.22.15",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/traverse",
            "direct": false,
            "version": "7.23.2",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/types",
            "direct": false,
            "version": "7.14.8",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/types",
            "direct": false,
            "version": "7.23.0",
            "ecosystem": "npm"
          },
          {
            "name": "@discoveryjs/json-ext",
            "direct": false,
            "version": "0.5.3",
            "ecosystem": "npm"
          },
          {
            "name": "@eslint/eslintrc",
            "direct": false,
            "version": "0.4.3",
            "ecosystem": "npm"
          },
          {
            "name": "@humanwhocodes/config-array",
            "direct": false,
            "version": "0.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "@humanwhocodes/object-schema",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "@jridgewell/gen-mapping",
            "direct": false,
            "version": "0.3.8",
            "ecosystem": "npm"
          },
          {
            "name": "@jridgewell/resolve-uri",
            "direct": false,
            "version": "3.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "@jridgewell/set-array",
            "direct": false,
            "version": "1.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "@jridgewell/source-map",
            "direct": false,
            "version": "0.3.6",
            "ecosystem": "npm"
          },
          {
            "name": "@jridgewell/sourcemap-codec",
            "direct": false,
            "version": "1.4.15",
            "ecosystem": "npm"
          },
          {
            "name": "@jridgewell/trace-mapping",
            "direct": false,
            "version": "0.3.25",
            "ecosystem": "npm"
          },
          {
            "name": "@jsdevtools/ono",
            "direct": false,
            "version": "7.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "@types/eslint",
            "direct": false,
            "version": "9.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "@types/eslint-scope",
            "direct": false,
            "version": "3.7.7",
            "ecosystem": "npm"
          },
          {
            "name": "@types/estree",
            "direct": false,
            "version": "1.0.7",
            "ecosystem": "npm"
          },
          {
            "name": "@types/json-schema",
            "direct": false,
            "version": "7.0.15",
            "ecosystem": "npm"
          },
          {
            "name": "@types/lodash",
            "direct": false,
            "version": "4.17.24",
            "ecosystem": "npm"
          },
          {
            "name": "@types/node",
            "direct": false,
            "version": "18.19.130",
            "ecosystem": "npm"
          },
          {
            "name": "@types/node",
            "direct": false,
            "version": "22.13.13",
            "ecosystem": "npm"
          },
          {
            "name": "@types/node-fetch",
            "direct": false,
            "version": "2.6.13",
            "ecosystem": "npm"
          },
          {
            "name": "@ungap/promise-all-settled",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "@webassemblyjs/ast",
            "direct": false,
            "version": "1.14.1",
            "ecosystem": "npm"
          },
          {
            "name": "@webassemblyjs/floating-point-hex-parser",
            "direct": false,
            "version": "1.13.2",
            "ecosystem": "npm"
          },
          {
            "name": "@webassemblyjs/helper-api-error",
            "direct": false,
            "version": "1.13.2",
            "ecosystem": "npm"
          },
          {
            "name": "@webassemblyjs/helper-buffer",
            "direct": false,
            "version": "1.14.1",
            "ecosystem": "npm"
          },
          {
            "name": "@webassemblyjs/helper-numbers",
            "direct": false,
            "version": "1.13.2",
            "ecosystem": "npm"
          },
          {
            "name": "@webassemblyjs/helper-wasm-bytecode",
            "direct": false,
            "version": "1.13.2",
            "ecosystem": "npm"
          },
          {
            "name": "@webassemblyjs/helper-wasm-section",
            "direct": false,
            "version": "1.14.1",
            "ecosystem": "npm"
          },
          {
            "name": "@webassemblyjs/ieee754",
            "direct": false,
            "version": "1.13.2",
            "ecosystem": "npm"
          },
          {
            "name": "@webassemblyjs/leb128",
            "direct": false,
            "version": "1.13.2",
            "ecosystem": "npm"
          },
          {
            "name": "@webassemblyjs/utf8",
            "direct": false,
            "version": "1.13.2",
            "ecosystem": "npm"
          },
          {
            "name": "@webassemblyjs/wasm-edit",
            "direct": false,
            "version": "1.14.1",
            "ecosystem": "npm"
          },
          {
            "name": "@webassemblyjs/wasm-gen",
            "direct": false,
            "version": "1.14.1",
            "ecosystem": "npm"
          },
          {
            "name": "@webassemblyjs/wasm-opt",
            "direct": false,
            "version": "1.14.1",
            "ecosystem": "npm"
          },
          {
            "name": "@webassemblyjs/wasm-parser",
            "direct": false,
            "version": "1.14.1",
            "ecosystem": "npm"
          },
          {
            "name": "@webassemblyjs/wast-printer",
            "direct": false,
            "version": "1.14.1",
            "ecosystem": "npm"
          },
          {
            "name": "@webpack-cli/configtest",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "@webpack-cli/info",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "@webpack-cli/serve",
            "direct": false,
            "version": "2.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "@xtuc/ieee754",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "@xtuc/long",
            "direct": false,
            "version": "4.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "abort-controller",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "acorn",
            "direct": false,
            "version": "7.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "acorn",
            "direct": false,
            "version": "8.14.1",
            "ecosystem": "npm"
          },
          {
            "name": "acorn-jsx",
            "direct": false,
            "version": "5.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "agentkeepalive",
            "direct": false,
            "version": "4.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "ajv-formats",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "ajv-keywords",
            "direct": false,
            "version": "5.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-colors",
            "direct": false,
            "version": "4.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-regex",
            "direct": false,
            "version": "5.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-styles",
            "direct": false,
            "version": "3.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-styles",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "anymatch",
            "direct": false,
            "version": "3.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "argparse",
            "direct": false,
            "version": "1.0.10",
            "ecosystem": "npm"
          },
          {
            "name": "argparse",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "array-includes",
            "direct": false,
            "version": "3.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "array.prototype.flat",
            "direct": false,
            "version": "1.2.4",
            "ecosystem": "npm"
          },
          {
            "name": "astral-regex",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "asynckit",
            "direct": false,
            "version": "0.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "babel-eslint",
            "direct": false,
            "version": "10.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "balanced-match",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "base64-js",
            "direct": false,
            "version": "1.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "binary-extensions",
            "direct": false,
            "version": "2.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "brace-expansion",
            "direct": false,
            "version": "1.1.11",
            "ecosystem": "npm"
          },
          {
            "name": "braces",
            "direct": false,
            "version": "3.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "browser-stdout",
            "direct": false,
            "version": "1.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "browserslist",
            "direct": false,
            "version": "4.24.4",
            "ecosystem": "npm"
          },
          {
            "name": "buffer-from",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "call-bind",
            "direct": false,
            "version": "1.0.8",
            "ecosystem": "npm"
          },
          {
            "name": "call-bind-apply-helpers",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "call-bound",
            "direct": false,
            "version": "1.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "callsites",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "camelcase",
            "direct": false,
            "version": "6.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "caniuse-lite",
            "direct": false,
            "version": "1.0.30001707",
            "ecosystem": "npm"
          },
          {
            "name": "chalk",
            "direct": false,
            "version": "2.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "chalk",
            "direct": false,
            "version": "2.4.2",
            "ecosystem": "npm"
          },
          {
            "name": "chalk",
            "direct": false,
            "version": "4.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "chalk",
            "direct": false,
            "version": "4.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "chokidar",
            "direct": false,
            "version": "3.5.3",
            "ecosystem": "npm"
          },
          {
            "name": "chrome-trace-event",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "cliui",
            "direct": false,
            "version": "7.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "clone-deep",
            "direct": false,
            "version": "4.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "color-convert",
            "direct": false,
            "version": "1.9.3",
            "ecosystem": "npm"
          },
          {
            "name": "color-convert",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "color-name",
            "direct": false,
            "version": "1.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "color-name",
            "direct": false,
            "version": "1.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "colorette",
            "direct": false,
            "version": "2.0.20",
            "ecosystem": "npm"
          },
          {
            "name": "combined-stream",
            "direct": false,
            "version": "1.0.8",
            "ecosystem": "npm"
          },
          {
            "name": "commander",
            "direct": false,
            "version": "10.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "commander",
            "direct": false,
            "version": "2.20.3",
            "ecosystem": "npm"
          },
          {
            "name": "concat-map",
            "direct": false,
            "version": "0.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "confusing-browser-globals",
            "direct": false,
            "version": "1.0.10",
            "ecosystem": "npm"
          },
          {
            "name": "cross-spawn",
            "direct": false,
            "version": "7.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "decamelize",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "deep-is",
            "direct": false,
            "version": "0.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "define-data-property",
            "direct": false,
            "version": "1.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "define-properties",
            "direct": false,
            "version": "1.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "delayed-stream",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "diff",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "doctrine",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "doctrine",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "dunder-proto",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "electron-to-chromium",
            "direct": false,
            "version": "1.5.123",
            "ecosystem": "npm"
          },
          {
            "name": "emoji-regex",
            "direct": false,
            "version": "8.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "enhanced-resolve",
            "direct": false,
            "version": "5.18.1",
            "ecosystem": "npm"
          },
          {
            "name": "enquirer",
            "direct": false,
            "version": "2.3.6",
            "ecosystem": "npm"
          },
          {
            "name": "envinfo",
            "direct": false,
            "version": "7.14.0",
            "ecosystem": "npm"
          },
          {
            "name": "error-ex",
            "direct": false,
            "version": "1.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "es-abstract",
            "direct": false,
            "version": "1.18.3",
            "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-module-lexer",
            "direct": false,
            "version": "1.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "es-object-atoms",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "es-set-tostringtag",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "es-to-primitive",
            "direct": false,
            "version": "1.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "escalade",
            "direct": false,
            "version": "3.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "escape-string-regexp",
            "direct": false,
            "version": "1.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "escape-string-regexp",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "eslint",
            "direct": false,
            "version": "7.31.0",
            "ecosystem": "npm"
          },
          {
            "name": "eslint-config-airbnb-base",
            "direct": false,
            "version": "14.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "eslint-config-athom",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "eslint-import-resolver-node",
            "direct": false,
            "version": "0.3.4",
            "ecosystem": "npm"
          },
          {
            "name": "eslint-module-utils",
            "direct": false,
            "version": "2.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "eslint-plugin-es",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "eslint-plugin-import",
            "direct": false,
            "version": "2.23.4",
            "ecosystem": "npm"
          },
          {
            "name": "eslint-plugin-mocha",
            "direct": false,
            "version": "6.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "eslint-plugin-node",
            "direct": false,
            "version": "11.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "eslint-scope",
            "direct": false,
            "version": "5.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "eslint-utils",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "eslint-visitor-keys",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "eslint-visitor-keys",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "espree",
            "direct": false,
            "version": "7.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "esprima",
            "direct": false,
            "version": "4.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "esquery",
            "direct": false,
            "version": "1.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "esrecurse",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "estraverse",
            "direct": false,
            "version": "4.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "estraverse",
            "direct": false,
            "version": "5.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "estraverse",
            "direct": false,
            "version": "5.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "esutils",
            "direct": false,
            "version": "2.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "event-target-shim",
            "direct": false,
            "version": "5.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "events",
            "direct": false,
            "version": "3.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "fast-deep-equal",
            "direct": false,
            "version": "3.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "fast-json-stable-stringify",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "fast-levenshtein",
            "direct": false,
            "version": "2.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "fast-uri",
            "direct": false,
            "version": "3.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "fastest-levenshtein",
            "direct": false,
            "version": "1.0.12",
            "ecosystem": "npm"
          },
          {
            "name": "fdir",
            "direct": false,
            "version": "6.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "file-entry-cache",
            "direct": false,
            "version": "6.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "fill-range",
            "direct": false,
            "version": "7.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "find-up",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "find-up",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "find-up",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "flat",
            "direct": false,
            "version": "5.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "flat-cache",
            "direct": false,
            "version": "3.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "flatted",
            "direct": false,
            "version": "3.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "form-data",
            "direct": false,
            "version": "4.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "form-data-encoder",
            "direct": false,
            "version": "1.7.2",
            "ecosystem": "npm"
          },
          {
            "name": "formdata-node",
            "direct": false,
            "version": "4.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "fs.realpath",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "fsevents",
            "direct": false,
            "version": "2.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "function-bind",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "functional-red-black-tree",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "get-caller-file",
            "direct": false,
            "version": "2.0.5",
            "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",
            "direct": false,
            "version": "7.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "glob",
            "direct": false,
            "version": "7.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "glob-parent",
            "direct": false,
            "version": "5.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "glob-to-regexp",
            "direct": false,
            "version": "0.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "globals",
            "direct": false,
            "version": "11.12.0",
            "ecosystem": "npm"
          },
          {
            "name": "globals",
            "direct": false,
            "version": "13.10.0",
            "ecosystem": "npm"
          },
          {
            "name": "gopd",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "graceful-fs",
            "direct": false,
            "version": "4.2.11",
            "ecosystem": "npm"
          },
          {
            "name": "growl",
            "direct": false,
            "version": "1.10.5",
            "ecosystem": "npm"
          },
          {
            "name": "has",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "has-bigints",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "has-flag",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "has-flag",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "has-property-descriptors",
            "direct": false,
            "version": "1.0.2",
            "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": "he",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "hosted-git-info",
            "direct": false,
            "version": "2.8.9",
            "ecosystem": "npm"
          },
          {
            "name": "humanize-ms",
            "direct": false,
            "version": "1.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "ieee754",
            "direct": false,
            "version": "1.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "ignore",
            "direct": false,
            "version": "4.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "ignore",
            "direct": false,
            "version": "5.1.8",
            "ecosystem": "npm"
          },
          {
            "name": "import-fresh",
            "direct": false,
            "version": "3.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "import-local",
            "direct": false,
            "version": "3.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "imurmurhash",
            "direct": false,
            "version": "0.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "inflight",
            "direct": false,
            "version": "1.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "inherits",
            "direct": false,
            "version": "2.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "interpret",
            "direct": false,
            "version": "3.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "is-arrayish",
            "direct": false,
            "version": "0.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "is-bigint",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "is-binary-path",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-boolean-object",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "is-callable",
            "direct": false,
            "version": "1.2.7",
            "ecosystem": "npm"
          },
          {
            "name": "is-core-module",
            "direct": false,
            "version": "2.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-date-object",
            "direct": false,
            "version": "1.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "is-extglob",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "is-fullwidth-code-point",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-glob",
            "direct": false,
            "version": "4.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "is-negative-zero",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "is-number",
            "direct": false,
            "version": "7.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-number-object",
            "direct": false,
            "version": "1.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "is-plain-obj",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-plain-object",
            "direct": false,
            "version": "2.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "is-primitive",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "is-regex",
            "direct": false,
            "version": "1.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "is-string",
            "direct": false,
            "version": "1.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "is-symbol",
            "direct": false,
            "version": "1.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "is-unicode-supported",
            "direct": false,
            "version": "0.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "isexe",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "isobject",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "jest-worker",
            "direct": false,
            "version": "27.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "js-tokens",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "js-yaml",
            "direct": false,
            "version": "3.14.1",
            "ecosystem": "npm"
          },
          {
            "name": "js-yaml",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "js-yaml",
            "direct": false,
            "version": "4.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "jsesc",
            "direct": false,
            "version": "2.5.2",
            "ecosystem": "npm"
          },
          {
            "name": "json-parse-better-errors",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "json-parse-even-better-errors",
            "direct": false,
            "version": "2.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "json-schema-to-ts",
            "direct": false,
            "version": "3.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "json-schema-to-typescript",
            "direct": false,
            "version": "15.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "json-schema-traverse",
            "direct": false,
            "version": "0.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "json-schema-traverse",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "json-stable-stringify-without-jsonify",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "json5",
            "direct": false,
            "version": "2.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "kind-of",
            "direct": false,
            "version": "6.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "levn",
            "direct": false,
            "version": "0.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "load-json-file",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "loader-runner",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "locate-path",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "locate-path",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "locate-path",
            "direct": false,
            "version": "6.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "lodash",
            "direct": false,
            "version": "4.17.23",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.clonedeep",
            "direct": false,
            "version": "4.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.merge",
            "direct": false,
            "version": "4.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.truncate",
            "direct": false,
            "version": "4.4.2",
            "ecosystem": "npm"
          },
          {
            "name": "log-symbols",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "lru-cache",
            "direct": false,
            "version": "6.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "math-intrinsics",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "merge-stream",
            "direct": false,
            "version": "2.0.0",
            "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": "3.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "minimatch",
            "direct": false,
            "version": "4.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "minimist",
            "direct": false,
            "version": "1.2.8",
            "ecosystem": "npm"
          },
          {
            "name": "mocha",
            "direct": false,
            "version": "9.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "mock-fs",
            "direct": false,
            "version": "5.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "ms",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "ms",
            "direct": false,
            "version": "2.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "ms",
            "direct": false,
            "version": "2.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "nanoid",
            "direct": false,
            "version": "3.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "natural-compare",
            "direct": false,
            "version": "1.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "neo-async",
            "direct": false,
            "version": "2.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "node-domexception",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "node-fetch",
            "direct": false,
            "version": "2.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "node-releases",
            "direct": false,
            "version": "2.0.19",
            "ecosystem": "npm"
          },
          {
            "name": "normalize-package-data",
            "direct": false,
            "version": "2.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "normalize-path",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "object-inspect",
            "direct": false,
            "version": "1.13.4",
            "ecosystem": "npm"
          },
          {
            "name": "object-keys",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "object-path",
            "direct": false,
            "version": "0.11.8",
            "ecosystem": "npm"
          },
          {
            "name": "object.assign",
            "direct": false,
            "version": "4.1.7",
            "ecosystem": "npm"
          },
          {
            "name": "object.entries",
            "direct": false,
            "version": "1.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "object.values",
            "direct": false,
            "version": "1.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "once",
            "direct": false,
            "version": "1.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "openai",
            "direct": false,
            "version": "4.104.0",
            "ecosystem": "npm"
          },
          {
            "name": "optionator",
            "direct": false,
            "version": "0.9.1",
            "ecosystem": "npm"
          },
          {
            "name": "p-limit",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "p-limit",
            "direct": false,
            "version": "2.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "p-limit",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "p-locate",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "p-locate",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "p-locate",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "p-try",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "p-try",
            "direct": false,
            "version": "2.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "parent-module",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "parse-json",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "path-exists",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "path-exists",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "path-is-absolute",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "path-key",
            "direct": false,
            "version": "3.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "path-parse",
            "direct": false,
            "version": "1.0.7",
            "ecosystem": "npm"
          },
          {
            "name": "path-type",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "picocolors",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "picomatch",
            "direct": false,
            "version": "2.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "picomatch",
            "direct": false,
            "version": "4.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "pify",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "pkg-dir",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "pkg-dir",
            "direct": false,
            "version": "4.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "pkg-up",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "prelude-ls",
            "direct": false,
            "version": "1.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "prettier",
            "direct": false,
            "version": "3.8.1",
            "ecosystem": "npm"
          },
          {
            "name": "progress",
            "direct": false,
            "version": "2.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "punycode",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "ramda",
            "direct": false,
            "version": "0.27.1",
            "ecosystem": "npm"
          },
          {
            "name": "randombytes",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "read-pkg",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "read-pkg-up",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "readdirp",
            "direct": false,
            "version": "3.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "rechoir",
            "direct": false,
            "version": "0.8.0",
            "ecosystem": "npm"
          },
          {
            "name": "regexpp",
            "direct": false,
            "version": "3.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "require-directory",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "require-from-string",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "resolve",
            "direct": false,
            "version": "1.20.0",
            "ecosystem": "npm"
          },
          {
            "name": "resolve-cwd",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "resolve-from",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "resolve-from",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "rimraf",
            "direct": false,
            "version": "3.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "safe-buffer",
            "direct": false,
            "version": "5.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "schema-utils",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "serialize-javascript",
            "direct": false,
            "version": "6.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "serialize-javascript",
            "direct": false,
            "version": "6.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "set-function-length",
            "direct": false,
            "version": "1.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "set-value",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "shallow-clone",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "shebang-command",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "shebang-regex",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "slice-ansi",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "source-map",
            "direct": false,
            "version": "0.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "source-map-support",
            "direct": false,
            "version": "0.5.21",
            "ecosystem": "npm"
          },
          {
            "name": "spdx-correct",
            "direct": false,
            "version": "3.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "spdx-exceptions",
            "direct": false,
            "version": "2.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "spdx-expression-parse",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "spdx-license-ids",
            "direct": false,
            "version": "3.0.9",
            "ecosystem": "npm"
          },
          {
            "name": "sprintf-js",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "string-width",
            "direct": false,
            "version": "4.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "string-width",
            "direct": false,
            "version": "4.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "string.prototype.trimend",
            "direct": false,
            "version": "1.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "string.prototype.trimstart",
            "direct": false,
            "version": "1.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "strip-ansi",
            "direct": false,
            "version": "6.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "strip-ansi",
            "direct": false,
            "version": "6.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "strip-bom",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "strip-json-comments",
            "direct": false,
            "version": "3.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "supports-color",
            "direct": false,
            "version": "5.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "supports-color",
            "direct": false,
            "version": "7.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "supports-color",
            "direct": false,
            "version": "8.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "table",
            "direct": false,
            "version": "6.7.1",
            "ecosystem": "npm"
          },
          {
            "name": "tapable",
            "direct": false,
            "version": "2.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "terser",
            "direct": false,
            "version": "5.39.0",
            "ecosystem": "npm"
          },
          {
            "name": "terser-webpack-plugin",
            "direct": false,
            "version": "5.3.14",
            "ecosystem": "npm"
          },
          {
            "name": "text-table",
            "direct": false,
            "version": "0.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "tinyglobby",
            "direct": false,
            "version": "0.2.15",
            "ecosystem": "npm"
          },
          {
            "name": "to-fast-properties",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "to-regex-range",
            "direct": false,
            "version": "5.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "tr46",
            "direct": false,
            "version": "0.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "ts-algebra",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "tsconfig-paths",
            "direct": false,
            "version": "3.10.1",
            "ecosystem": "npm"
          },
          {
            "name": "type-check",
            "direct": false,
            "version": "0.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "type-fest",
            "direct": false,
            "version": "0.20.2",
            "ecosystem": "npm"
          },
          {
            "name": "typescript",
            "direct": false,
            "version": "5.9.3",
            "ecosystem": "npm"
          },
          {
            "name": "unbox-primitive",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "undici-types",
            "direct": false,
            "version": "5.26.5",
            "ecosystem": "npm"
          },
          {
            "name": "undici-types",
            "direct": false,
            "version": "6.20.0",
            "ecosystem": "npm"
          },
          {
            "name": "update-browserslist-db",
            "direct": false,
            "version": "1.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "uri-js",
            "direct": false,
            "version": "4.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "v8-compile-cache",
            "direct": false,
            "version": "2.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "validate-npm-package-license",
            "direct": false,
            "version": "3.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "watchpack",
            "direct": false,
            "version": "2.4.2",
            "ecosystem": "npm"
          },
          {
            "name": "web-streams-polyfill",
            "direct": false,
            "version": "4.0.0-beta.3",
            "ecosystem": "npm"
          },
          {
            "name": "webidl-conversions",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "webpack",
            "direct": false,
            "version": "5.98.0",
            "ecosystem": "npm"
          },
          {
            "name": "webpack-cli",
            "direct": false,
            "version": "5.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "webpack-merge",
            "direct": false,
            "version": "5.8.0",
            "ecosystem": "npm"
          },
          {
            "name": "webpack-sources",
            "direct": false,
            "version": "3.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "whatwg-url",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "which",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "which-boxed-primitive",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "wildcard",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "word-wrap",
            "direct": false,
            "version": "1.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "workerpool",
            "direct": false,
            "version": "6.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "wrap-ansi",
            "direct": false,
            "version": "7.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "wrappy",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "y18n",
            "direct": false,
            "version": "5.0.8",
            "ecosystem": "npm"
          },
          {
            "name": "yallist",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "yargs",
            "direct": false,
            "version": "16.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "yargs-parser",
            "direct": false,
            "version": "20.2.4",
            "ecosystem": "npm"
          },
          {
            "name": "yargs-unparser",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "yocto-queue",
            "direct": false,
            "version": "0.1.0",
            "ecosystem": "npm"
          }
        ],
        "collected": true,
        "truncated": false,
        "total_count": 417,
        "direct_count": 14,
        "indirect_count": 403
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 14,
        "merged_prs": 580,
        "open_issues": 7,
        "closed_ratio": 0.794,
        "closed_issues": 27,
        "closed_unmerged_prs": 90
      },
      "bus_factor": 2,
      "bot_contributors": 3,
      "top_contributors": [
        {
          "type": "User",
          "login": "RobinBol",
          "commits": 387,
          "avatar_url": "https://avatars.githubusercontent.com/u/5762579?v=4"
        },
        {
          "type": "User",
          "login": "WeeJeWel",
          "commits": 260,
          "avatar_url": "https://avatars.githubusercontent.com/u/319873?v=4"
        },
        {
          "type": "User",
          "login": "jeroenwienk",
          "commits": 106,
          "avatar_url": "https://avatars.githubusercontent.com/u/6419150?v=4"
        },
        {
          "type": "User",
          "login": "nozols",
          "commits": 83,
          "avatar_url": "https://avatars.githubusercontent.com/u/6298632?v=4"
        },
        {
          "type": "User",
          "login": "hmeerlo",
          "commits": 67,
          "avatar_url": "https://avatars.githubusercontent.com/u/448150?v=4"
        },
        {
          "type": "User",
          "login": "tjallingt",
          "commits": 61,
          "avatar_url": "https://avatars.githubusercontent.com/u/5736783?v=4"
        },
        {
          "type": "User",
          "login": "wouter-athom",
          "commits": 22,
          "avatar_url": "https://avatars.githubusercontent.com/u/159017548?v=4"
        },
        {
          "type": "User",
          "login": "jeroenvollenbrock",
          "commits": 20,
          "avatar_url": "https://avatars.githubusercontent.com/u/4551130?v=4"
        },
        {
          "type": "User",
          "login": "applingua",
          "commits": 15,
          "avatar_url": "https://avatars.githubusercontent.com/u/805838?v=4"
        },
        {
          "type": "User",
          "login": "MarleenBee",
          "commits": 14,
          "avatar_url": "https://avatars.githubusercontent.com/u/64000784?v=4"
        }
      ],
      "contributors_sampled": 28,
      "top_contributor_share": 0.358
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "apply_locales.yml",
        "deploy.yml",
        "generate_locales.yml",
        "lint.yml",
        "static.yml",
        "test.yml"
      ],
      "has_docs_dir": false,
      "linter_configs": [
        ".eslintrc.js"
      ],
      "has_editorconfig": true,
      "has_linter_config": true,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "package-lock.json"
      ],
      "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": 10,
            "reason": "5 out of 5 merged PRs checked by a CI test -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 0,
            "reason": "Found 1/16 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 7 contributing companies or organizations",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 0,
            "reason": "dangerous workflow patterns detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 10,
            "reason": "update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 10,
            "reason": "30 commit(s) and 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": 10,
            "reason": "packaging workflow detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 5,
            "reason": "dependency not pinned by hash detected -- score normalized to 5",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "SAST tool is not run on all commits -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 0,
            "reason": "security policy file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": null,
            "reason": "no releases found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 0,
            "reason": "detected GitHub workflow tokens with excessive permissions",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 0,
            "reason": "30 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "2b1033208cd4d03654c59e83bbeb8eb933ab03ab",
        "ran_at": "2026-07-22T05:46:07Z",
        "aggregate_score": 3.8,
        "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-17T08:57:35Z",
      "oldest_open_prs": [
        {
          "number": 332,
          "created_at": "2022-02-02T08:49:06Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 348,
          "created_at": "2022-06-10T18:24:47Z",
          "last_comment_at": "2022-06-10T18:24:51Z",
          "last_comment_author": "CLAassistant"
        },
        {
          "number": 400,
          "created_at": "2024-06-20T12:37:04Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 454,
          "created_at": "2024-08-29T04:20:14Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 456,
          "created_at": "2024-09-02T10:08:50Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 522,
          "created_at": "2025-01-10T19:44:22Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 587,
          "created_at": "2025-09-05T11:59:38Z",
          "last_comment_at": "2025-09-05T14:40:08Z",
          "last_comment_author": "copilot-swe-agent"
        },
        {
          "number": 690,
          "created_at": "2026-04-22T23:33:30Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 695,
          "created_at": "2026-05-12T15:48:05Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 713,
          "created_at": "2026-06-29T06:00:19Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 716,
          "created_at": "2026-07-06T06:00:13Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 717,
          "created_at": "2026-07-13T06:00:13Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 718,
          "created_at": "2026-07-13T10:56:13Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 719,
          "created_at": "2026-07-20T06:00:18Z",
          "last_comment_at": null,
          "last_comment_author": null
        }
      ],
      "last_merged_pr_at": "2026-07-06T12:05:04Z",
      "ci_last_conclusion": null,
      "oldest_open_issues": [
        {
          "number": 70,
          "created_at": "2017-12-04T21:39:24Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 76,
          "created_at": "2018-02-26T11:57:01Z",
          "last_comment_at": "2018-02-27T08:50:00Z",
          "last_comment_author": "nattlip"
        },
        {
          "number": 82,
          "created_at": "2018-03-08T16:19:31Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 277,
          "created_at": "2021-04-29T08:42:02Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 384,
          "created_at": "2024-01-14T12:41:12Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 521,
          "created_at": "2025-01-10T18:27:09Z",
          "last_comment_at": "2025-01-11T20:34:41Z",
          "last_comment_author": "sebglon"
        },
        {
          "number": 586,
          "created_at": "2025-09-05T11:59:34Z",
          "last_comment_at": null,
          "last_comment_author": null
        }
      ]
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/athombv/node-homey-lib",
    "host": "github.com",
    "name": "node-homey-lib",
    "owner": "athombv"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "good",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 70,
      "inputs": {
        "security": 38,
        "vitality": 88,
        "community": 63,
        "governance": 74,
        "engineering": 76
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "excellent",
        "name": "Vitality",
        "value": 88,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "excellent",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 88,
            "inputs": {
              "commits_last_year": 358,
              "human_commit_share": 0.98,
              "days_since_last_push": 1,
              "active_weeks_last_year": 34
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 1 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 1
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "34/52 weeks with commits",
                "points": 23.5,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 34
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "358 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 358
                    }
                  }
                ],
                "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": "excellent",
            "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": 88,
            "inputs": {
              "releases_count": 100,
              "latest_release_tag": "v2.51.3",
              "releases_from_tags": true,
              "days_since_latest_release": 4,
              "mean_days_between_releases": 9.5
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "100 version tags (no GitHub releases)",
                "points": 16.2,
                "status": "partial",
                "details": [
                  {
                    "code": "version_tags_no_releases",
                    "params": {
                      "count": 100
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 4 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 4
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~9.5 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 9.5
                    }
                  }
                ],
                "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": 4,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "last human commit 4 days ago",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_maintained",
                    "params": {
                      "days": 4
                    }
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "moderate",
        "name": "Community & Adoption",
        "value": 63,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "at_risk",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 39,
            "inputs": {
              "forks": 26,
              "stars": 23,
              "watchers": 11,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "below_threshold"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "23 stars",
                "points": 21.8,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 23
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "26 forks",
                "points": 11.7,
                "status": "partial",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 26
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "11 watchers",
                "points": 5.6,
                "status": "partial",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 11
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "excellent",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 85,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": true,
              "has_issue_template": false,
              "has_code_of_conduct": true,
              "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 (GPL-3.0)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "GPL-3.0"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 18,
                "status": "met",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 13.5,
                "status": "met",
                "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
              }
            ]
          },
          {
            "key": "ecosystem_adoption",
            "band": "good",
            "name": "Ecosystem adoption (downloads)",
            "note": "Excluded from scoring (no data or not applicable): Registry dependents. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "registry_dependents"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 70,
            "inputs": {
              "packages": [
                "homey-lib"
              ],
              "dependents": null,
              "ecosystems": "npm",
              "total_downloads": null,
              "monthly_downloads": 15568
            },
            "components": [
              {
                "key": "monthly_downloads",
                "name": "Monthly downloads",
                "detail": "15,568 downloads/month across npm",
                "points": 55.9,
                "status": "partial",
                "details": [
                  {
                    "code": "downloads_monthly",
                    "params": {
                      "count": 15568,
                      "ecosystems": "npm"
                    }
                  }
                ],
                "max_points": 80
              },
              {
                "key": "registry_dependents",
                "name": "Registry dependents",
                "detail": "not reported by this ecosystem",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_reported_by_this_ecosystem",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "good",
        "name": "Sustainability & Governance",
        "value": 74,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "moderate",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 63,
            "inputs": {
              "bus_factor": 2,
              "contributors_sampled": 28,
              "top_contributor_share": 0.358
            },
            "components": [
              {
                "key": "bus_factor",
                "name": "Bus factor",
                "detail": "2 contributor(s) cover half of all commits",
                "points": 25.2,
                "status": "partial",
                "details": [
                  {
                    "code": "bus_factor",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "max_points": 54
              },
              {
                "key": "commit_distribution",
                "name": "Commit distribution",
                "detail": "top contributor authored 36% of commits",
                "points": 14.4,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 36
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "28 contributors",
                "points": 13.5,
                "status": "met",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 28
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 7 contributing companies or organizations",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "good",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 70,
            "inputs": {
              "merged_prs": 580,
              "open_issues": 7,
              "closed_issues": 27,
              "issue_closed_ratio": 0.794,
              "closed_unmerged_prs": 90
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "79% of issues closed",
                "points": 37.1,
                "status": "partial",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 79
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "580/670 decided PRs merged",
                "points": 33.1,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 580,
                      "decided": 670
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 1/16 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": 71,
            "inputs": {
              "followers": 187,
              "owner_type": "Organization",
              "is_verified": null,
              "owner_login": "athombv",
              "public_repos": 132,
              "account_age_days": 4353
            },
            "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": "187 followers of athombv",
                "points": 16.4,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 187,
                      "login": "athombv"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "132 public repos, account ~11 yr old",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 132
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 11
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "homey-lib"
              ],
              "ecosystems": "npm",
              "any_deprecated": false,
              "min_days_since_publish": 4
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "1 package(s) on npm",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 1,
                      "ecosystems": "npm"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 4 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 4
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "289 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 289
                    }
                  }
                ],
                "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": "good",
        "name": "Engineering Quality",
        "value": 76,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "excellent",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 90,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": true,
              "has_linter_config": true,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "6 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 6
                    }
                  }
                ],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 24,
                "status": "met",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": ".eslintrc.js",
                "points": 16,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".eslintrc.js"
                    }
                  }
                ],
                "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": "5 out of 5 merged PRs checked by a CI test -- score normalized to 10",
                "points": 20,
                "status": "met",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "moderate",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 55,
            "inputs": {
              "topics": [],
              "has_wiki": false,
              "homepage": "https://homey.app",
              "has_readme": true,
              "has_docs_dir": false,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": "https://homey.app",
                "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": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "at_risk",
        "name": "Security",
        "value": 38,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 38,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 17,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 1,
              "scorecard_aggregate": 3.8
            },
            "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": "5 out of 5 merged PRs checked by a CI test -- score normalized to 10",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 1/16 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 7 contributing companies or organizations",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "dangerous workflow patterns detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "update tool detected",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "30 commit(s) and 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 detected",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 5",
                "points": 2.5,
                "status": "partial",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool is not run on all commits -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "detected GitHub workflow tokens with excessive permissions",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "30 existing vulnerabilities detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "dependency_advisories",
            "band": "at_risk",
            "name": "Dependency advisories",
            "note": "Excluded from scoring (no data or not applicable): Indirect dependencies free of known advisories. Remaining weights renormalized. Matched 417 resolved dependencies against OSV. This repository publishes no package the index resolves, so the repository dependency graph was assessed instead. That graph mixes development and test pins with shipped dependencies, so only the declared runtime dependencies are scored; transitive findings are reported as context and excluded from the score. Reachability is not analyzed.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "indirect_dependencies_free_of_known_advisories"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              },
              {
                "code": "advisories_scope_repository",
                "params": {
                  "assessed": 417
                }
              },
              {
                "code": "advisories_repo_graph_caveat",
                "params": {}
              },
              {
                "code": "advisories_reachability",
                "params": {}
              }
            ],
            "value": 39,
            "inputs": {
              "source": "osv",
              "advisories": 46,
              "affected_packages": 24,
              "assessed_packages": 417,
              "unassessed_packages": 0,
              "affected_by_severity": "critical 1, high 15, moderate 7, low 1",
              "direct_affected_packages": 6
            },
            "components": [
              {
                "key": "direct_dependencies_free_of_known_advisories",
                "name": "Direct dependencies free of known advisories",
                "detail": "6 affected: semver 6.3.0 (high 7.5), semver 7.3.5 (high 7.5), ajv 6.12.3 (moderate 5.3), +3 more",
                "points": 8.2,
                "status": "partial",
                "details": [
                  {
                    "code": "advisories_affected",
                    "params": {
                      "count": 6,
                      "packages": "semver 6.3.0 (high 7.5), semver 7.3.5 (high 7.5), ajv 6.12.3 (moderate 5.3)"
                    }
                  },
                  {
                    "code": "advisories_affected_more",
                    "params": {
                      "count": 3
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "indirect_dependencies_free_of_known_advisories",
                "name": "Indirect dependencies free of known advisories",
                "detail": "transitive set not separable from development and test dependencies in this scope",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "advisories_scope_not_separable",
                    "params": {}
                  }
                ],
                "max_points": 25
              },
              {
                "key": "no_advisories_left_outstanding",
                "name": "No advisories left outstanding",
                "detail": "6 advisory-carrying package(s) unaddressed past 90 days; oldest published 1126 days ago",
                "points": 21,
                "status": "partial",
                "details": [
                  {
                    "code": "advisories_stale",
                    "params": {
                      "days": 90,
                      "count": 6,
                      "oldest": 1126
                    }
                  }
                ],
                "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": 417,
              "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": 6
            },
            "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": "at_risk",
        "name": "AI Readiness",
        "value": 49,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "at_risk",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.745,
              "agent_instruction_files": [],
              "agent_instruction_max_bytes": null
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "no CLAUDE.md / AGENTS.md / editor rules",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_instructions",
                    "params": {}
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "73 of 98 human commits state their intent (structured subject or explanatory body)",
                "points": 39.7,
                "status": "partial",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 73,
                      "sampled": 98
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "moderate",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 58,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "package-lock.json"
              ],
              "has_dockerfile": false,
              "typed_language": false,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": true,
              "typecheck_configs": [],
              "agent_commit_share": 0.1,
              "toolchain_manifests": [],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": ".eslintrc.js",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".eslintrc.js"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "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": "10 of the last 100 commits agent-authored or agent-credited",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 10,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "no automated dependency updates observed",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_dependency_automation",
                    "params": {}
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 5",
                "points": 5,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "moderate",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 54,
            "inputs": {
              "primary_language": "JavaScript",
              "largest_source_bytes": 979342,
              "source_files_sampled": 50,
              "oversized_source_files": 1
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "JavaScript without a type-check config",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_typecheck_config_language",
                    "params": {
                      "language": "JavaScript"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "1/50 source files over 60KB",
                "points": 53.9,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 50,
                      "oversized": 1
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "at_risk",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "example_dirs": [
                "examples"
              ],
              "has_mcp_signal": false,
              "api_schema_files": []
            },
            "components": [
              {
                "key": "api_schema_openapi_graphql_proto",
                "name": "API schema (OpenAPI/GraphQL/proto)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 40
              },
              {
                "key": "mcp_server",
                "name": "MCP server",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "runnable_examples",
                "name": "Runnable examples",
                "detail": "examples",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "examples"
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "deps.dev does not index npm:homey-lib@2.51.3; advisories assessed against the repository dependency graph instead"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-22T05:46:31.632772Z",
  "schema_version": "0.26.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/a/athombv/node-homey-lib.svg",
  "full_name": "athombv/node-homey-lib",
  "license_state": "standard",
  "license_spdx": "GPL-3.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.26.0 — full methodology · metrics wiki.

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