Публічний реєстр
Звіт про здоров'я програмного забезпеченнясхема 0.26.0 · метрики 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 зірки⑂ 26 форківз лип. 2015 р.Переглянути на GitHub ↗

athombv/node-homey-lib має індекс здоров’я 70 зі 100, що відповідає смузі «Добрий». Найвищий показник — Vitality (88/100), найнижчий — Security (38/100). Останнє оновлення було 1 день тому. Більшість нещодавньої роботи виконують 2 учасники.

70
загалом / 100
Добрий

Індекс здоров'я програмного забезпечення

Метрики згруповано у зважені категорії на шкалі 1–100. Загальна оцінка починається як їхнє середнє; коли публічні дані активують Політику юрисдикцій високого ризику, рейтинг коригується й отримує верхню межу 49 («Під ризиком»). Готовність до ШІ не входить до індексу.

70
Відмінний85-100Зразковий; відповідає практично всім перевіреним критеріям
Добрий70-84Здоровий; незначні прогалини
Помірний50-69Прийнятний, але з помітними прогалинами; рекомендовано перевірку
У зоні ризику30-49Суттєві слабкі місця; впровадження потребує обережності
Критичний1-29Серйозні проблеми (покинутий, єдиний мейнтейнер, без базової гігієни)
ЖиттєздатністьСпільнота тавпровадженняСталість таврядуванняІнженернаякістьБезпекаГотовність доШІ

Профіль оцінок

Кожна вісь — окрема категорія. Форма важить більше, ніж середнє: здоровий об'єкт заповнює всю фігуру, тоді як профіль із піками та провалами означає, що сила в одному вимірі маскує ризик в іншому.

Власність

Athom B.V.Організація
187 підписників132 публічні репозиторіїз серп. 2014 р.

За цим репозиторієм стоїть організація — спільна, підзвітна опіка, здатна пережити будь-якого окремого мейнтейнера.

Пакетні екосистеми

РеєстрПакетВерсіяЗавантажень / місВерсіїОстання публікація
npmhomey-lib2.51.315 5682894 дні тому

Метрики за категоріями

Життєздатність

Чи живий проєкт — чи пишеться код і чи виходять релізи?

88Відмінний · 22% загального індексу
Як обчислюється оцінка
36/36Свіжість push — останній push 1 дн. тому
23.5/36Ритм комітів — 34/52 тижнів із комітами
18/18Обсяг комітів — 358 комітів за останній рік
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
Використані вхідні дані
commits_last_year358
human_commit_share0,98
days_since_last_push1
active_weeks_last_year34
Як обчислюється оцінка
16.2/27Випускає релізи — 100 тегів версій (без релізів GitHub)
36/36Свіжість релізів — останній реліз 4 дн. тому
27/27Ритм релізів — реліз кожні ~9,5 дн.
0/10OpenSSF Scorecard: Signed-Releases — немає даних
Використані вхідні дані
releases_count100
latest_release_tagv2.51.3
releases_from_tagsтак
days_since_latest_release4
mean_days_between_releases9,5
Виключено з оцінювання (немає даних або не застосовно): OpenSSF Scorecard: Signed-Releases. Залишкові ваги перенормовано.

Спільнота та впровадження

Чи має проєкт користувачів, завантаження, увагу та влаштовані умови для контриб’юторів?

63Помірний · 18% загального індексу
Як обчислюється оцінка
21.8/60Зірки — 23 зірок
11.7/25Форки — 26 форків
5.6/15Спостерігачі — 11 спостерігачів
Використані вхідні дані
forks26
stars23
watchers11
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonbelow_threshold
Як обчислюється оцінка
22.5/22.5README
22.5/22.5Ліцензія — визнана ліцензія (GPL-3.0)
18/18Настанови CONTRIBUTING
13.5/13.5Кодекс поведінки
0/7.2Шаблон issue
0/6.3Шаблон PR
Використані вхідні дані
has_readmeтак
has_licenseтак
has_contributingтак
has_issue_templateні
has_code_of_conductтак
has_pull_request_templateні
Як обчислюється оцінка
55.9/80Щомісячні завантаження — 15 568 завантажень/місяць у npm
0/20Залежні пакети в реєстрі — ця екосистема цього не повідомляє
Використані вхідні дані
packageshomey-lib
dependents
ecosystemsnpm
total_downloads
monthly_downloads15 568
Виключено з оцінювання (немає даних або не застосовно): Залежні пакети в реєстрі. Залишкові ваги перенормовано.

Сталість та врядування

Чи переживе проєкт своїх людей — бас-фактор, реактивність, хто за ним стоїть і як супроводжуються пакети?

74Добрий · 24% загального індексу
Як обчислюється оцінка
25.2/54Бас-фактор — на 2 контриб’ютор(ів) припадає половина всіх комітів
14.4/22.5Розподіл комітів — головний контриб’ютор — автор 36% комітів
13.5/13.5Широта контриб’юторів — 28 контриб’юторів
10/10OpenSSF Scorecard: Contributors — project has 7 contributing companies or organizations
Використані вхідні дані
bus_factor2
contributors_sampled28
top_contributor_share0,358
Як обчислюється оцінка
37.1/46.8Вирішення issue — закрито 79% issue
33.1/38.3Прийняття PR — злито 580/670 вирішених PR
0/15OpenSSF Scorecard: Code-Review — Found 1/16 approved changesets -- score normalized to 0
Використані вхідні дані
merged_prs580
open_issues7
closed_issues27
issue_closed_ratio0,794
closed_unmerged_prs90
Як обчислюється оцінка
30/30Підтримка власника — у власності організації
0/20Верифікований домен
16.4/25Охоплення власника — 187 підписників у athombv
25/25Послужний список — 132 публічних репозиторіїв, вік облікового запису ~11 р.
Використані вхідні дані
followers187
owner_typeOrganization
is_verified
owner_loginathombv
public_repos132
account_age_days4 353

Супровід пакетів

100Відмінний
Як обчислюється оцінка
25/25Опубліковано й доступно — 1 пакет(ів) у npm
35/35Свіжість публікацій — остання публікація 4 дн. тому
20/20Історія версій — 289 опублікованих версій
20/20Не застарілий — активний, не deprecated і не yanked
Використані вхідні дані
packageshomey-lib
ecosystemsnpm
any_deprecatedні
min_days_since_publish4

Інженерна якість

Чи наявні базові інженерні практики та документація?

76Добрий · 20% загального індексу
Як обчислюється оцінка
24/24Процеси CI — 6 процес(ів) CI
24/24Наявні тести
16/16Конфігурація лінтера — .eslintrc.js
0/9.6Pre-commit-хуки
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
Використані вхідні дані
has_ciтак
has_testsтак
has_editorconfigтак
has_linter_configтак
has_precommit_configні

Документація

55Помірний
Як обчислюється оцінка
30/30README
0/25Каталог документації
15/15Сайт документації / домашня сторінка — https://homey.app
10/10Опис репозиторію
0/10Теми
0/10Wiki
Використані вхідні дані
topics
has_wikiні
homepagehttps://homey.app
has_readmeтак
has_docs_dirні
has_descriptionтак

Безпека

Чи міцні видимі практики безпеки й ланцюга постачання, без непослабленої пов’язаності з юрисдикціями високого ризику?

38У зоні ризику · 16% загального індексу

Стан безпеки

38У зоні ризику
Як обчислюється оцінка
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.5Ліцензія — 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 — немає даних
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
0/7.5Vulnerabilities — 30 existing vulnerabilities detected
Використані вхідні дані
sourceopenssf_scorecard
checks_evaluated17
scorecard_versionv5.5.0
checks_inconclusive1
scorecard_aggregate3,8
Виключено з оцінювання (немає даних або не застосовно): signed_releases. Залишкові ваги перенормовано.
Як обчислюється оцінка
8.2/35Прямі залежності без відомих сповіщень — уражено 6: semver 6.3.0 (high 7.5), semver 7.3.5 (high 7.5), ajv 6.12.3 (moderate 5.3), ще +3
0/25Непрямі залежності без відомих сповіщень — транзитивний набір не відокремлюється від залежностей розробки й тестування в цьому обсязі
21/40Немає задавнених сповіщень — 6 пакет(ів) зі сповіщеннями без реакції понад 90 дн.; найдавніше опубліковано 1 126 дн. тому
Використані вхідні дані
sourceosv
advisories46
affected_packages24
assessed_packages417
unassessed_packages0
affected_by_severitycritical 1, high 15, moderate 7, low 1
direct_affected_packages6
Виключено з оцінювання (немає даних або не застосовно): Непрямі залежності без відомих сповіщень. Залишкові ваги перенормовано. Звірено 417 резолвлених залежностей із OSV. Цей репозиторій не публікує пакета, який резолвить індекс, тож натомість оцінено граф залежностей репозиторію. Цей граф змішує закріплені версії для розробки й тестування зі справді постачаними залежностями, тож оцінюються лише задекларовані runtime-залежності; транзитивні знахідки подаються як контекст і в оцінку не входять. Досяжність не аналізується.

Готовність до ШІ

Наскільки репозиторій оснащений для розробки та супроводу за участі ШІ-агентів? Незалежний, експериментальний бейдж — вага 0.0, тож він подається окремо і не впливає на загальний індекс здоров'я.

49У зоні ризику · 0% загального індексу
Як обчислюється оцінка
0/45Інструкції для агентів — немає CLAUDE.md / AGENTS.md / правил редактора
0/15Машиночитана документація (llms.txt)
39.7/40Читабельна історія комітів — намір зазначено у 73 з 98 людських комітів (структурований заголовок або пояснювальний текст)
Використані вхідні дані
has_llms_txtні
legible_history_share0,745
agent_instruction_files
agent_instruction_max_bytes
Як обчислюється оцінка
0/18Розгортання однією командою
22/22Автоматизовані тести
11/11Конфігурація лінтера / форматера — .eslintrc.js
0/11Статична перевірка типів
10/10Відтворюване середовище — lockfile
10/10Підтверджена практика роботи з агентами — 10 з останніх 100 комітів створено агентом або з його зазначенням
0/8Автоматизоване супроводження — автоматичних оновлень залежностей не виявлено
5/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 5
Використані вхідні дані
has_nixні
has_testsтак
lockfilespackage-lock.json
has_dockerfileні
typed_languageні
bootstrap_files
has_devcontainerні
has_linter_configтак
typecheck_configs
agent_commit_share0,1
toolchain_manifests
dependency_bot_commit_share0
Як обчислюється оцінка
0/45Типізований код — JavaScript без конфігурації перевірки типів
53.9/55Керовані розміри файлів — 1/50 файлів вихідного коду понад 60 КБ
Використані вхідні дані
primary_languageJavaScript
largest_source_bytes979 342
source_files_sampled50
oversized_source_files1
Як обчислюється оцінка
0/40Схема API (OpenAPI/GraphQL/proto)
0/20Сервер MCP
40/40Придатні до запуску приклади — examples
Використані вхідні дані
example_dirsexamples
has_mcp_signalні
api_schema_files

Ключові факти

23зірок GitHub
28контриб'юторів
358комітів за останні 12 місяців
1днів від останнього пушу
100релізів
2бас-фактор
7відкритих issue
npmпакетних екосистем

Попередження щодо збору даних

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

Докладніше

Історія зірок і форків 23 ★ / 26 ⇿
23Зірки
26Форки
93Релізи

Коли додано кожну зірку й форк — зібрано з GitHub і згруповано за днями. Кумулятивне зростання розміщено просто над денними додаваннями, з яких воно складається, тож їх видно одне проти одного: рівномірне органічне накопичення виглядає зовсім інакше, ніж різкий короткочасний сплеск. Там, де цю різницю можна виміряти, її подано як автентичність росту.

0510152025232522015-092021-012026-05
Мажорні 0Мінорні 33Патчі 60

Кожна точка охоплює 10 днів.

OpenSSF Scorecard 3.8 / 10
3.8сукупно

Незалежна, не прив'язана до інструментів оцінка безпеки від відкритого проєкту OpenSSF Scorecard. Кожна перевірка винагороджує практику безпеки, а не інструмент конкретного постачальника. Перевірки, які Scorecard не зміг визначити, позначено н/д і виключено з оцінки безпеки (вони ніколи не зараховуються як нуль).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
н/дSigned-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
0Vulnerabilities30 existing vulnerabilities detected
Прямі залежності 6
РеєстрПакетОбмеження версіїМаніфест
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
Усі залежності 417

Повний розв'язаний набір залежностей із графа залежностей GitHub: 14 прямих і 403 непрямих (транзитивних) пакетів. Транзитивне замикання є повним, коли в репозиторії закомічено lockfile.

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

Цей репозиторій не публікує пакета, який розпізнає індекс, тож оцінено його власний граф залежностей — 417 пакетів, серед яких є й піниї розробки та тестування, що ніколи не постачаються: 24 мають відомі сповіщення, з них 6 прямі.

ПакетВерсіяЗв'язокКритичністьСповіщеньВиправлено в
flatted3.2.1непрямакритична23.4.2
semver6.3.0прямависока17.5.2
semver7.3.5прямависока17.5.2
brace-expansion1.1.11непрямависока35.0.7
braces3.0.2непрямависока13.0.3
fast-uri3.0.6непрямависока44.1.1
js-yaml3.14.1непрямависока34.3.0
js-yaml4.1.0непрямависока34.3.0
js-yaml4.1.1непрямависока24.3.0
lodash4.17.23непрямависока24.18.0
minimatch3.1.2непрямависока310.2.3
minimatch4.2.1непрямависока310.2.3
picomatch2.3.0непрямависока24.0.4
picomatch4.0.3непрямависока24.0.4
serialize-javascript6.0.0непрямависока37.0.5
serialize-javascript6.0.2непрямависока27.0.5
ajv6.12.3прямапомірна18.18.0
ajv6.12.6прямапомірна18.18.0
ajv8.17.1прямапомірна18.18.0
ajv8.6.2прямапомірна18.18.0
diff5.0.0непрямапомірна18.0.3
nanoid3.3.1непрямапомірна15.0.9
word-wrap1.2.3непрямапомірна11.2.4
webpack5.98.0непряманизька25.104.1

Сповіщення означає, що версія, записана в графі залежностей, потрапляє в уражений діапазон. Досяжність не аналізується, а граф містить піниї розробки й тестування — знахідка може стосуватися інструментів, а не поставленого коду.

Звіт у форматі JSON машиночитний
{
  "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"
}

Оцінки — це сигнали, а не гарантії. Вони відображають публічно видимі практики на GitHub — це не аудит коду й не гарантія безпеки.

Відсутні дані виключаються, а ваги перенормовуються — нуль за відсутність ніколи не ставиться. Методологія версіонована й відкрита: метрики v1.13.0, схема v0.26.0 — повна методологія · вікі метрик.

Як окремий результат виглядає на тлі всього реєстру: сукупна статистикаnpm.