Публічний реєстр
Звіт про здоров'я програмного забезпеченнясхема 0.27.0 · метрики 1.13.0 · 2026-07-27 14:07 UTC

3rg0n / webex-message-handler

Lightweight Webex Mercury WebSocket + KMS message decryption — Node.js, Python, Go, Rust

TypeScript · Go · RustMIT★ 0 зірок⑂ 2 форкиз лют. 2026 р.Переглянути на GitHub ↗

3rg0n/webex-message-handler має індекс здоров’я 59 зі 100, що відповідає смузі «Помірний». Найвищий показник — Vitality (83/100), найнижчий — Community & Adoption (39/100). Останнє оновлення було 3 дні тому. Більшість нещодавньої роботи виконує один учасник.

59
загалом / 100
Помірний

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

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

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

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

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

Власність

Ergon CopelandОсобистий обліковий запис
6 підписників18 публічних репозиторіївз бер. 2020 р.Cisco

Цей репозиторій належить особистому обліковому запису. Проєкт з єдиним власником несе більший ризик безперервності, ніж підтримуваний організацією.

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

РеєстрПакетВерсіяЗавантажень / місВерсіїОстання публікаціяТеги
Gogithub.com/3rg0n/webex-message-handler/gov0.6.15-203 дні тому
crates.iowebex-message-handler0.6.1557213 дні томуbotkmsmercurywebexwebsocketnetwork-programmingweb-programming
npmwebex-message-handler0.6.152 348153 дні томуwebexmercurywebsocketkmsbotmessaging
PyPIwebex-message-handler0.6.14-175 днів томуbotkmsmercurymessagingwebexwebsocket

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

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

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

83Добрий · 22% загального індексу
Як обчислюється оцінка
36/36Свіжість push — останній push 3 дн. тому
6.9/36Ритм комітів — 10/52 тижнів із комітами
17.9/18Обсяг комітів — 97 комітів за останній рік
10/10OpenSSF Scorecard: Maintained — 10 commit(s) and 5 issue activity found in the last 90 days -- score normalized to 10
Використані вхідні дані
commits_last_year97
human_commit_share1
days_since_last_push3
active_weeks_last_year10
Як обчислюється оцінка
27/27Випускає релізи — опубліковано 37 релізів
36/36Свіжість релізів — останній реліз 5 дн. тому
27/27Ритм релізів — реліз кожні ~11 дн.
0/10OpenSSF Scorecard: Signed-Releases — немає даних
Використані вхідні дані
releases_count37
latest_release_tagv0.6.14
releases_from_tagsні
days_since_latest_release5
mean_days_between_releases11
Виключено з оцінювання (немає даних або не застосовно): OpenSSF Scorecard: Signed-Releases. Залишкові ваги перенормовано.

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

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

39У зоні ризику · 18% загального індексу
Як обчислюється оцінка
0/60Зірки — 0 зірок
0/25Форки — 2 форків
0/15Спостерігачі — 0 спостерігачів
Використані вхідні дані
forks2
stars0
watchers0
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Як обчислюється оцінка
22.5/22.5README
22.5/22.5Ліцензія — визнана ліцензія (MIT)
18/18Настанови CONTRIBUTING
0/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ні
Як обчислюється оцінка
45.1/80Щомісячні завантаження — 2 405 завантажень/місяць у crates, go, npm, pypi
0/20Залежні пакети в реєстрі — ця екосистема цього не повідомляє
Використані вхідні дані
packagesgithub.com/3rg0n/webex-message-handler/go, webex-message-handler, webex-message-handler, webex-message-handler
dependents
ecosystemscrates, go, npm, pypi
total_downloads400
monthly_downloads2 405
Виключено з оцінювання (немає даних або не застосовно): Залежні пакети в реєстрі. Залишкові ваги перенормовано.

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

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

49У зоні ризику · 24% загального індексу
Як обчислюється оцінка
9/54Бас-фактор — на 1 контриб’ютор(ів) припадає половина всіх комітів
0.5/22.5Розподіл комітів — головний контриб’ютор — автор 98% комітів
2.7/13.5Широта контриб’юторів — 2 контриб’юторів
3/10OpenSSF Scorecard: Contributors — project has 1 contributing companies or organizations -- score normalized to 3
Використані вхідні дані
bus_factor1
contributors_sampled2
top_contributor_share0,979
Як обчислюється оцінка
43.2/46.8Вирішення issue — закрито 92% issue
6.4/38.3Прийняття PR — злито 2/12 вирішених PR
0/15OpenSSF Scorecard: Code-Review — Found 1/28 approved changesets -- score normalized to 0
Використані вхідні дані
merged_prs2
open_issues1
closed_issues12
issue_closed_ratio0,923
closed_unmerged_prs10

Власність та опіка

47У зоні ризику
Як обчислюється оцінка
10/30Підтримка власника — особистий (користувацький) обліковий запис
0/20Верифікований домен — не застосовно до користувацьких облікових записів
6.1/25Охоплення власника — 6 підписників у 3rg0n
21.3/25Послужний список — 18 публічних репозиторіїв, вік облікового запису ~6 р.
Використані вхідні дані
followers6
owner_typeUser
is_verified
owner_login3rg0n
public_repos18
account_age_days2 308
Виключено з оцінювання (немає даних або не застосовно): Верифікований домен. Залишкові ваги перенормовано.

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

100Відмінний
Як обчислюється оцінка
25/25Опубліковано й доступно — 4 пакет(ів) у crates, go, npm, pypi
35/35Свіжість публікацій — остання публікація 3 дн. тому
20/20Історія версій — 21 опублікованих версій
20/20Не застарілий — активний, не deprecated і не yanked
Використані вхідні дані
packagesgithub.com/3rg0n/webex-message-handler/go, webex-message-handler, webex-message-handler, webex-message-handler
ecosystemscrates, go, npm, pypi
any_deprecatedні
min_days_since_publish3

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

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

68Помірний · 20% загального індексу
Як обчислюється оцінка
24/24Процеси CI — 3 процес(ів) CI
24/24Наявні тести
16/16Конфігурація лінтера — .eslintrc.cjs
0/9.6Pre-commit-хуки
0/6.4.editorconfig
0/20OpenSSF Scorecard: CI-Tests — 0 out of 1 merged PRs checked by a CI test -- score normalized to 0
Використані вхідні дані
has_ciтак
has_testsтак
has_editorconfigні
has_linter_configтак
has_precommit_configні
Як обчислюється оцінка
30/30README
25/25Каталог документації
0/15Сайт документації / домашня сторінка
10/10Опис репозиторію
0/10Теми
10/10Wiki
Використані вхідні дані
topics
has_wikiтак
homepage
has_readmeтак
has_docs_dirтак
has_descriptionтак

Безпека

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

52Помірний · 16% загального індексу

Стан безпеки

43У зоні ризику
Як обчислюється оцінка
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — branch protection not enabled on development/release branches
0/2.5CI-Tests — 0 out of 1 merged PRs checked by a CI test -- score normalized to 0
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 1/28 approved changesets -- score normalized to 0
0.8/2.5Contributors — project has 1 contributing companies or organizations -- score normalized to 3
10/10Dangerous-Workflow — no dangerous workflow patterns detected
0/7.5Dependency-Update-Tool — no update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5Ліцензія — license file detected
7.5/7.5Maintained — 10 commit(s) and 5 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
3.5/5SAST — SAST tool detected but not run on all commits
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — немає даних
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
2.2/7.5Vulnerabilities — 7 existing vulnerabilities detected
Використані вхідні дані
sourceopenssf_scorecard
checks_evaluated17
scorecard_versionv5.5.0
checks_inconclusive1
scorecard_aggregate4,3
Виключено з оцінювання (немає даних або не застосовно): signed_releases. Залишкові ваги перенормовано.
Як обчислюється оцінка
26.6/35Прямі залежності без відомих сповіщень — уражено 1: golang.org/x/crypto v0.54.0 (unknown)
0/25Непрямі залежності без відомих сповіщень — транзитивний набір не відокремлюється від залежностей розробки й тестування в цьому обсязі
40/40Немає задавнених сповіщень — жодне сповіщення не є публічним довше за 90 дн.
Використані вхідні дані
sourceosv
advisories9
affected_packages5
assessed_packages516
unassessed_packages30
affected_by_severityhigh 4, unknown 1
direct_affected_packages1
Виключено з оцінювання (немає даних або не застосовно): Непрямі залежності без відомих сповіщень. Залишкові ваги перенормовано. Звірено 516 резолвлених залежностей із OSV. 30 не вдалося оцінити — немає резолвленої версії, непідтримувана екосистема або поза межами звітованого переліку пакетів. Цей репозиторій не публікує пакета, який резолвить індекс, тож натомість оцінено граф залежностей репозиторію. Цей граф змішує закріплені версії для розробки й тестування зі справді постачаними залежностями, тож оцінюються лише задекларовані runtime-залежності; транзитивні знахідки подаються як контекст і в оцінку не входять. Досяжність не аналізується.

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

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

66Помірний · 0% загального індексу
Як обчислюється оцінка
0/45Інструкції для агентів — немає CLAUDE.md / AGENTS.md / правил редактора
0/15Машиночитана документація (llms.txt)
40/40Читабельна історія комітів — намір зазначено у 95 з 97 людських комітів (структурований заголовок або пояснювальний текст)
Використані вхідні дані
has_llms_txtні
legible_history_share0,979
agent_instruction_files
agent_instruction_max_bytes
Як обчислюється оцінка
12.6/18Розгортання однією командою — go/go.mod, rust/Cargo.toml (домовленість інструментарію, без раннера задач)
22/22Автоматизовані тести
11/11Конфігурація лінтера / форматера — .eslintrc.cjs
11/11Статична перевірка типів — node/tsconfig.json
10/10Відтворюване середовище — lockfile
10/10Підтверджена практика роботи з агентами — 81 з останніх 97 комітів створено агентом або з його зазначенням
0/8Автоматизоване супроводження — автоматичних оновлень залежностей не виявлено
5/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 5
Використані вхідні дані
has_nixні
has_testsтак
lockfilesgo.sum, pnpm-lock.yaml
has_dockerfileні
typed_languageтак
bootstrap_files
has_devcontainerні
has_linter_configтак
typecheck_configsnode/tsconfig.json
agent_commit_share0,835
toolchain_manifestsgo/go.mod, rust/Cargo.toml
dependency_bot_commit_share0
Як обчислюється оцінка
45/45Типізований код — TypeScript (статично типізована)
55/55Керовані розміри файлів — 0/99 файлів вихідного коду понад 60 КБ
Використані вхідні дані
primary_languageTypeScript
largest_source_bytes44 381
source_files_sampled99
oversized_source_files0
Як обчислюється оцінка
0/40Схема API (OpenAPI/GraphQL/proto)
0/20Сервер MCP
40/40Придатні до запуску приклади — examples
Використані вхідні дані
example_dirsexamples
has_mcp_signalні
api_schema_files

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

0зірок GitHub
2контриб'юторів
97комітів за останні 12 місяців
3днів від останнього пушу
37релізів
1бас-фактор
1відкритих issue
crates.io, Go, npm, PyPIпакетних екосистем

Докладніше

Історія зірок і форків 0 ★ / 2 ⇿
0Зірки
2Форки
8Релізи

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

111222212026-042026-052026-06
Мажорні 0Мінорні 0Патчі 8
OpenSSF Scorecard 4.3 / 10
4.3сукупно

Незалежна, не прив'язана до інструментів оцінка безпеки від відкритого проєкту OpenSSF Scorecard. Кожна перевірка винагороджує практику безпеки, а не інструмент конкретного постачальника. Перевірки, які Scorecard не зміг визначити, позначено н/д і виключено з оцінки безпеки (вони ніколи не зараховуються як нуль).Scorecard v5.5.0 · 2026-07-27 14:07 UTC

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
0CI-Tests0 out of 1 merged PRs checked by a CI test -- score normalized to 0
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 1/28 approved changesets -- score normalized to 0
3Contributorsproject has 1 contributing companies or organizations -- score normalized to 3
10Dangerous-Workflowno dangerous workflow patterns detected
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
10Maintained10 commit(s) and 5 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
7SASTSAST tool detected but not run on all commits
0Security-Policysecurity policy file not detected
н/дSigned-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
3Vulnerabilities7 existing vulnerabilities detected
Прямі залежності 31
РеєстрПакетОбмеження версіїМаніфест
Gogithub.com/go-jose/go-jose/v4v4.1.4go/go.mod
Gogithub.com/google/uuidv1.6.0go/go.mod
Gogolang.org/x/cryptov0.54.0go/go.mod
Gogithub.com/coder/websocketv1.8.15go/go.mod
npmnode-jose^2.2.0node/package.json
npmnode-kms^0.4.1node/package.json
npmundici^8.7.0node/package.json
PyPIaiohttp>=3.14.1python/pyproject.toml
PyPIcryptography>=48.0.1python/pyproject.toml
PyPIjwcrypto>=1.5.7python/pyproject.toml
crates.iotokio1rust/Cargo.toml
crates.iotokio-tungstenite0.24rust/Cargo.toml
crates.ioreqwest0.12rust/Cargo.toml
crates.ioserde1rust/Cargo.toml
crates.ioserde_json1rust/Cargo.toml
crates.iouuid1rust/Cargo.toml
crates.iothiserror2rust/Cargo.toml
crates.iotracing0.1rust/Cargo.toml
crates.iourl2rust/Cargo.toml
crates.iofutures-util0.3rust/Cargo.toml
crates.iobase640.22rust/Cargo.toml
crates.iop2560.13rust/Cargo.toml
crates.iohkdf0.12rust/Cargo.toml
crates.iosha10.10rust/Cargo.toml
crates.iosha20.10rust/Cargo.toml
crates.iorand0.8rust/Cargo.toml
crates.ioaes-gcm0.10rust/Cargo.toml
crates.ioaes-kw0.2rust/Cargo.toml
crates.iorsa0.9rust/Cargo.toml
crates.ioregex1rust/Cargo.toml
crates.ioonce_cell1rust/Cargo.toml
Усі залежності 546

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

РеєстрПакетВерсіяЗв'язок
crates.ioaes-gcmпряма
crates.ioaes-kwпряма
crates.iobase64пряма
crates.iofutures-utilпряма
crates.iohkdfпряма
crates.ioonce_cellпряма
crates.iop256пряма
crates.iorandпряма
crates.ioregexпряма
crates.ioreqwestпряма
crates.iorsaпряма
crates.ioserdeпряма
crates.ioserde_jsonпряма
crates.iosha1пряма
crates.iosha2пряма
crates.iothiserrorпряма
crates.iotokioпряма
crates.iotokio-tungsteniteпряма
crates.iotracingпряма
crates.iourlпряма
crates.iouuidпряма
Gogithub.com/coder/websocketv1.8.15пряма
Gogithub.com/go-jose/go-jose/v4v4.1.4пряма
Gogithub.com/google/uuidv1.6.0пряма
Gogolang.org/x/cryptov0.54.0пряма
npmnode-jose2.2.0пряма
npmnode-kms0.4.1пряма
npmundici8.7.0пряма
PyPIaiohttpпряма
PyPIcryptographyпряма
PyPIjwcryptoпряма
crates.iotracing-subscriberнепряма
crates.iowiremockнепряма
npm@babel/code-frame7.29.0непряма
npm@babel/code-frame8.0.0непряма
npm@babel/compat-data8.0.0непряма
npm@babel/core8.0.1непряма
npm@babel/generator7.29.1непряма
npm@babel/generator8.0.0непряма
npm@babel/helper-compilation-targets8.0.0непряма
npm@babel/helper-globals8.0.0непряма
npm@babel/helper-plugin-utils7.28.6непряма
npm@babel/helper-string-parser7.27.1непряма
npm@babel/helper-string-parser8.0.0непряма
npm@babel/helper-validator-identifier7.28.5непряма
npm@babel/helper-validator-identifier8.0.2непряма
npm@babel/helper-validator-option8.0.0непряма
npm@babel/helpers8.0.0непряма
npm@babel/parser7.29.2непряма
npm@babel/parser8.0.0непряма
npm@babel/plugin-syntax-async-generators7.8.4непряма
npm@babel/plugin-syntax-bigint7.8.3непряма
npm@babel/plugin-syntax-class-properties7.12.13непряма
npm@babel/plugin-syntax-class-static-block7.14.5непряма
npm@babel/plugin-syntax-import-attributes7.28.6непряма
npm@babel/plugin-syntax-import-meta7.10.4непряма
npm@babel/plugin-syntax-json-strings7.8.3непряма
npm@babel/plugin-syntax-jsx7.28.6непряма
npm@babel/plugin-syntax-logical-assignment-operators7.10.4непряма
npm@babel/plugin-syntax-nullish-coalescing-operator7.8.3непряма
npm@babel/plugin-syntax-numeric-separator7.10.4непряма
npm@babel/plugin-syntax-object-rest-spread7.8.3непряма
npm@babel/plugin-syntax-optional-catch-binding7.8.3непряма
npm@babel/plugin-syntax-optional-chaining7.8.3непряма
npm@babel/plugin-syntax-private-property-in-object7.14.5непряма
npm@babel/plugin-syntax-top-level-await7.14.5непряма
npm@babel/plugin-syntax-typescript7.28.6непряма
npm@babel/template7.28.6непряма
npm@babel/template8.0.0непряма
npm@babel/traverse8.0.0непряма
npm@babel/types7.29.0непряма
npm@babel/types8.0.0непряма
npm@bcoe/v8-coverage0.2.3непряма
npm@cspotcode/source-map-support0.8.1непряма
npm@esbuild/aix-ppc640.28.1непряма
npm@esbuild/android-arm0.28.1непряма
npm@esbuild/android-arm640.28.1непряма
npm@esbuild/android-x640.28.1непряма
npm@esbuild/darwin-arm640.28.1непряма
npm@esbuild/darwin-x640.28.1непряма
npm@esbuild/freebsd-arm640.28.1непряма
npm@esbuild/freebsd-x640.28.1непряма
npm@esbuild/linux-arm0.28.1непряма
npm@esbuild/linux-arm640.28.1непряма
npm@esbuild/linux-ia320.28.1непряма
npm@esbuild/linux-loong640.28.1непряма
npm@esbuild/linux-mips64el0.28.1непряма
npm@esbuild/linux-ppc640.28.1непряма
npm@esbuild/linux-riscv640.28.1непряма
npm@esbuild/linux-s390x0.28.1непряма
npm@esbuild/linux-x640.28.1непряма
npm@esbuild/netbsd-arm640.28.1непряма
npm@esbuild/netbsd-x640.28.1непряма
npm@esbuild/openbsd-arm640.28.1непряма
npm@esbuild/openbsd-x640.28.1непряма
npm@esbuild/openharmony-arm640.28.1непряма
npm@esbuild/sunos-x640.28.1непряма
npm@esbuild/win32-arm640.28.1непряма
npm@esbuild/win32-ia320.28.1непряма
npm@esbuild/win32-x640.28.1непряма
npm@eslint-community/eslint-utils4.9.1непряма
npm@eslint-community/regexpp4.12.2непряма
npm@eslint/eslintrc2.1.4непряма
npm@eslint/js8.57.0непряма
npm@humanwhocodes/config-array0.11.14непряма
npm@humanwhocodes/module-importer1.0.1непряма
npm@humanwhocodes/object-schema2.0.3непряма
npm@istanbuljs/load-nyc-config1.1.0непряма
npm@istanbuljs/schema0.1.3непряма
npm@jest/console29.7.0непряма
npm@jest/core29.7.0непряма
npm@jest/environment29.7.0непряма
npm@jest/expect29.7.0непряма
npm@jest/expect-utils29.7.0непряма
npm@jest/fake-timers29.7.0непряма
npm@jest/globals29.7.0непряма
npm@jest/pattern30.0.1непряма
npm@jest/reporters29.7.0непряма
npm@jest/schemas29.6.3непряма
npm@jest/schemas30.0.5непряма
npm@jest/source-map29.6.3непряма
npm@jest/test-result29.7.0непряма
npm@jest/test-sequencer29.7.0непряма
npm@jest/transform29.7.0непряма
npm@jest/transform30.3.0непряма
npm@jest/types29.6.3непряма
npm@jest/types30.3.0непряма
npm@jridgewell/gen-mapping0.3.13непряма
npm@jridgewell/resolve-uri3.1.2непряма
npm@jridgewell/sourcemap-codec1.5.5непряма
npm@jridgewell/trace-mapping0.3.31непряма
npm@jridgewell/trace-mapping0.3.9непряма
npm@nodelib/fs.scandir2.1.5непряма
npm@nodelib/fs.stat2.0.5непряма
npm@nodelib/fs.walk1.2.8непряма
npm@rollup/rollup-android-arm-eabi4.60.0непряма
npm@rollup/rollup-android-arm644.60.0непряма
npm@rollup/rollup-darwin-arm644.60.0непряма
npm@rollup/rollup-darwin-x644.60.0непряма
npm@rollup/rollup-freebsd-arm644.60.0непряма
npm@rollup/rollup-freebsd-x644.60.0непряма
npm@rollup/rollup-linux-arm-gnueabihf4.60.0непряма
npm@rollup/rollup-linux-arm-musleabihf4.60.0непряма
npm@rollup/rollup-linux-arm64-gnu4.60.0непряма
npm@rollup/rollup-linux-arm64-musl4.60.0непряма
npm@rollup/rollup-linux-loong64-gnu4.60.0непряма
npm@rollup/rollup-linux-loong64-musl4.60.0непряма
npm@rollup/rollup-linux-ppc64-gnu4.60.0непряма
npm@rollup/rollup-linux-ppc64-musl4.60.0непряма
npm@rollup/rollup-linux-riscv64-gnu4.60.0непряма
npm@rollup/rollup-linux-riscv64-musl4.60.0непряма
npm@rollup/rollup-linux-s390x-gnu4.60.0непряма
npm@rollup/rollup-linux-x64-gnu4.60.0непряма
npm@rollup/rollup-linux-x64-musl4.60.0непряма
npm@rollup/rollup-openbsd-x644.60.0непряма
npm@rollup/rollup-openharmony-arm644.60.0непряма
npm@rollup/rollup-win32-arm64-msvc4.60.0непряма
npm@rollup/rollup-win32-ia32-msvc4.60.0непряма
npm@rollup/rollup-win32-x64-gnu4.60.0непряма
npm@rollup/rollup-win32-x64-msvc4.60.0непряма
npm@sinclair/typebox0.27.10непряма
npm@sinclair/typebox0.34.48непряма
npm@sinonjs/commons3.0.1непряма
npm@sinonjs/fake-timers10.3.0непряма
npm@tsconfig/node101.0.12непряма
npm@tsconfig/node121.0.11непряма
npm@tsconfig/node141.0.3непряма
npm@tsconfig/node161.0.4непряма
npm@types/babel__core7.20.5непряма
npm@types/babel__generator7.27.0непряма
npm@types/babel__template7.4.4непряма
npm@types/babel__traverse7.28.0непряма
npm@types/estree1.0.8непряма
npm@types/gensync1.0.5непряма
npm@types/graceful-fs4.1.9непряма
npm@types/istanbul-lib-coverage2.0.6непряма
npm@types/istanbul-lib-report3.0.3непряма
npm@types/istanbul-reports3.0.4непряма
npm@types/jest29.5.14непряма
npm@types/jsesc2.5.1непряма
npm@types/node22.13.4непряма
npm@types/node25.5.0непряма
npm@types/stack-utils2.0.3непряма
npm@types/yargs17.0.35непряма
npm@types/yargs-parser21.0.3непряма
npm@typescript-eslint/eslint-plugin8.57.2непряма
npm@typescript-eslint/parser8.57.2непряма
npm@typescript-eslint/project-service8.57.2непряма
npm@typescript-eslint/scope-manager8.57.2непряма
npm@typescript-eslint/tsconfig-utils8.57.2непряма
npm@typescript-eslint/type-utils8.57.2непряма
npm@typescript-eslint/types8.57.2непряма
npm@typescript-eslint/typescript-estree8.57.2непряма
npm@typescript-eslint/utils8.57.2непряма
npm@typescript-eslint/visitor-keys8.57.2непряма
npm@ungap/structured-clone1.3.0непряма
npmacorn8.16.0непряма
npmacorn-jsx5.3.2непряма
npmacorn-walk8.3.5непряма
npmajv6.14.0непряма
npmansi-escapes4.3.2непряма
npmansi-regex5.0.1непряма
npmansi-styles4.3.0непряма
npmansi-styles5.2.0непряма
npmany-promise1.3.0непряма
npmanymatch3.1.3непряма
npmarg4.1.3непряма
npmargparse2.0.1непряма
npmbabel-jest29.7.0непряма
npmbabel-jest30.3.0непряма
npmbabel-plugin-istanbul6.1.1непряма
npmbabel-plugin-istanbul7.0.1непряма
npmbabel-plugin-jest-hoist29.6.3непряма
npmbabel-plugin-jest-hoist30.3.0непряма
npmbabel-preset-current-node-syntax1.2.0непряма
npmbabel-preset-jest29.6.3непряма
npmbabel-preset-jest30.3.0непряма
npmbalanced-match1.0.2непряма
npmbalanced-match4.0.4непряма
npmbase64-js1.5.1непряма
npmbase64url3.0.1непряма
npmbaseline-browser-mapping2.10.11непряма
npmbrace-expansion1.1.13непряма
npmbrace-expansion5.0.6непряма
npmbraces3.0.3непряма
npmbrowserslist4.28.1непряма
npmbs-logger0.2.6непряма
npmbser2.1.1непряма
npmbuffer6.0.3непряма
npmbuffer-from1.1.2непряма
npmbundle-require5.1.0непряма
npmcac6.7.14непряма
npmcallsites3.1.0непряма
npmcamelcase5.3.1непряма
npmcamelcase6.3.0непряма
npmcaniuse-lite1.0.30001781непряма
npmchalk4.1.2непряма
npmchar-regex1.0.2непряма
npmchokidar4.0.3непряма
npmci-info3.9.0непряма
npmci-info4.4.0непряма
npmcjs-module-lexer1.4.3непряма
npmcliui8.0.1непряма
npmco4.6.0непряма
npmcollect-v8-coverage1.0.3непряма
npmcolor-convert2.0.1непряма
npmcolor-name1.1.4непряма
npmcommander4.1.1непряма
npmconcat-map0.0.1непряма
npmconfbox0.1.8непряма
npmconsola3.4.2непряма
npmconvert-source-map2.0.0непряма
npmcreate-jest29.7.0непряма
npmcreate-require1.1.1непряма
npmcross-spawn7.0.6непряма
npmdebug4.4.3непряма
npmdedent1.7.2непряма
npmdeep-is0.1.4непряма
npmdeepmerge4.3.1непряма
npmdetect-newline3.1.0непряма
npmdiff4.0.4непряма
npmdiff-sequences29.6.3непряма
npmdoctrine3.0.0непряма
npmelectron-to-chromium1.5.328непряма
npmemittery0.13.1непряма
npmemoji-regex8.0.0непряма
npmempathic2.0.1непряма
npmerror-ex1.3.4непряма
npmes6-promise2.3.0непряма
npmes6-promise4.2.8непряма
npmesbuild0.28.1непряма
npmescalade3.2.0непряма
npmescape-string-regexp2.0.0непряма
npmescape-string-regexp4.0.0непряма
npmeslint8.57.0непряма
npmeslint-scope7.2.2непряма
npmeslint-visitor-keys3.4.3непряма
npmeslint-visitor-keys5.0.1непряма
npmespree9.6.1непряма
npmesquery1.7.0непряма
npmesrecurse4.3.0непряма
npmestraverse5.3.0непряма
npmesutils2.0.3непряма
npmexeca5.1.1непряма
npmexit0.1.2непряма
npmexpect29.7.0непряма
npmfast-deep-equal3.1.3непряма
npmfast-json-stable-stringify2.1.0непряма
npmfast-levenshtein2.0.6непряма
npmfastq1.20.1непряма
npmfb-watchman2.0.2непряма
npmfdir6.5.0непряма
npmfile-entry-cache6.0.1непряма
npmfill-range7.1.1непряма
npmfind-up4.1.0непряма
npmfind-up5.0.0непряма
npmfix-dts-default-cjs-exports1.0.1непряма
npmflat-cache3.2.0непряма
npmflatted3.4.2непряма
npmfs.realpath1.0.0непряма
npmfsevents2.3.3непряма
npmfunction-bind1.1.2непряма
npmgensync1.0.0-beta.2непряма
npmget-caller-file2.0.5непряма
npmget-package-type0.1.0непряма
npmget-stream6.0.1непряма
npmget-tsconfig4.13.7непряма
npmglob7.2.3непряма
npmglob-parent6.0.2непряма
npmglobals13.24.0непряма
npmgraceful-fs4.2.11непряма
npmgraphemer1.4.0непряма
npmhandlebars4.7.9непряма
npmhas-flag4.0.0непряма
npmhasown2.0.2непряма
npmhtml-escaper2.0.2непряма
npmhuman-signals2.1.0непряма
npmieee7541.2.1непряма
npmignore5.3.2непряма
npmignore7.0.5непряма
npmimport-fresh3.3.1непряма
npmimport-local3.2.0непряма
npmimport-meta-resolve4.2.0непряма
npmimurmurhash0.1.4непряма
npminflight1.0.6непряма
npminherits2.0.4непряма
npmis-arrayish0.2.1непряма
npmis-core-module2.16.1непряма
npmis-extglob2.1.1непряма
npmis-fullwidth-code-point3.0.0непряма
npmis-generator-fn2.1.0непряма
npmis-glob4.0.3непряма
npmis-number7.0.0непряма
npmis-path-inside3.0.3непряма
npmis-stream2.0.1непряма
npmisexe2.0.0непряма
npmistanbul-lib-coverage3.2.2непряма
npmistanbul-lib-instrument5.2.1непряма
npmistanbul-lib-instrument6.0.3непряма
npmistanbul-lib-report3.0.1непряма
npmistanbul-lib-source-maps4.0.1непряма
npmistanbul-reports3.2.0непряма
npmjest29.7.0непряма
npmjest-changed-files29.7.0непряма
npmjest-circus29.7.0непряма
npmjest-cli29.7.0непряма
npmjest-config29.7.0непряма
npmjest-diff29.7.0непряма
npmjest-docblock29.7.0непряма
npmjest-each29.7.0непряма
npmjest-environment-node29.7.0непряма
npmjest-get-type29.6.3непряма
npmjest-haste-map29.7.0непряма
npmjest-haste-map30.3.0непряма
npmjest-leak-detector29.7.0непряма
npmjest-matcher-utils29.7.0непряма
npmjest-message-util29.7.0непряма
npmjest-mock29.7.0непряма
npmjest-pnp-resolver1.2.3непряма
npmjest-regex-util29.6.3непряма
npmjest-regex-util30.0.1непряма
npmjest-resolve29.7.0непряма
npmjest-resolve-dependencies29.7.0непряма
npmjest-runner29.7.0непряма
npmjest-runtime29.7.0непряма
npmjest-snapshot29.7.0непряма
npmjest-util29.7.0непряма
npmjest-util30.3.0непряма
npmjest-validate29.7.0непряма
npmjest-watcher29.7.0непряма
npmjest-worker29.7.0непряма
npmjest-worker30.3.0непряма
npmjiti2.6.1непряма
npmjoycon3.1.1непряма
npmjs-tokens10.0.0непряма
npmjs-tokens4.0.0непряма
npmjs-yaml5.0.0непряма
npmjsesc3.1.0непряма
npmjson-buffer3.0.1непряма
npmjson-parse-even-better-errors2.3.1непряма
npmjson-schema-traverse0.4.1непряма
npmjson-stable-stringify-without-jsonify1.0.1непряма
npmjson52.2.3непряма
npmkeyv4.5.4непряма
npmkleur3.0.3непряма
npmleven3.1.0непряма
npmlevn0.4.1непряма
npmlilconfig3.1.3непряма
npmlines-and-columns1.2.4непряма
npmload-tsconfig0.2.5непряма
npmlocate-path5.0.0непряма
npmlocate-path6.0.0непряма
npmlodash4.18.1непряма
npmlodash._arraycopy3.0.0непряма
npmlodash._arrayeach3.0.0непряма
npmlodash._baseassign3.2.0непряма
npmlodash._baseclone3.3.0непряма
npmlodash._basecopy3.0.1непряма
npmlodash._basefor3.0.3непряма
npmlodash._bindcallback3.0.1непряма
npmlodash._getnative3.9.1непряма
npmlodash._isiterateecall3.0.9непряма
npmlodash.clone3.0.3непряма
npmlodash.clonedeep3.0.2непряма
npmlodash.isarguments3.1.0непряма
npmlodash.isarray3.0.4непряма
npmlodash.keys3.1.2непряма
npmlodash.memoize4.1.2непряма
npmlodash.merge4.6.2непряма
npmlong5.3.2непряма
npmlru-cache11.5.1непряма
npmmagic-string0.30.21непряма
npmmake-dir4.0.0непряма
npmmake-error1.3.6непряма
npmmakeerror1.0.12непряма
npmmerge-stream2.0.0непряма
npmmicromatch4.0.8непряма
npmmimic-fn2.1.0непряма
npmminimatch10.2.4непряма
npmminimatch3.1.5непряма
npmminimist1.2.8непряма
npmmlly1.8.2непряма
npmms2.1.3непряма
npmmz2.7.0непряма
npmnatural-compare1.4.0непряма
npmneo-async2.6.2непряма
npmnode-forge1.4.0непряма
npmnode-int640.4.0непряма
npmnode-releases2.0.36непряма
npmnormalize-path3.0.0непряма
npmnpm-run-path4.0.1непряма
npmobject-assign4.1.1непряма
npmobug2.1.3непряма
npmonce1.4.0непряма
npmonetime5.1.2непряма
npmoptionator0.9.4непряма
npmp-limit2.3.0непряма
npmp-limit3.1.0непряма
npmp-locate4.1.0непряма
npmp-locate5.0.0непряма
npmp-try2.2.0непряма
npmpako2.1.0непряма
npmparent-module1.0.1непряма
npmparse-json5.2.0непряма
npmpath-exists4.0.0непряма
npmpath-is-absolute1.0.1непряма
npmpath-key3.1.1непряма
npmpath-parse1.0.7непряма
npmpathe2.0.3непряма
npmpicocolors1.1.1непряма
npmpicomatch2.3.2непряма
npmpicomatch4.0.4непряма
npmpirates4.0.7непряма
npmpkg-dir4.2.0непряма
npmpkg-types1.3.1непряма
npmpostcss-load-config6.0.1непряма
npmprelude-ls1.2.1непряма
npmpretty-format29.7.0непряма
npmprocess0.11.10непряма
npmprompts2.4.2непряма
npmpunycode2.3.1непряма
npmpure-rand6.1.0непряма
npmqueue-microtask1.2.3непряма
npmreact-is18.3.1непряма
npmreaddirp4.1.2непряма
npmrequire-directory2.1.1непряма
npmresolve1.22.11непряма
npmresolve-cwd3.0.0непряма
npmresolve-from4.0.0непряма
npmresolve-from5.0.0непряма
npmresolve-pkg-maps1.0.0непряма
npmresolve.exports2.0.3непряма
npmreusify1.1.0непряма
npmrimraf3.0.2непряма
npmrollup4.60.0непряма
npmrun-parallel1.2.0непряма
npmsemver6.3.1непряма
npmsemver7.7.4непряма
npmshebang-command2.0.0непряма
npmshebang-regex3.0.0непряма
npmsignal-exit3.0.7непряма
npmsignal-exit4.1.0непряма
npmsisteransi1.0.5непряма
npmslash3.0.0непряма
npmsource-map0.6.1непряма
npmsource-map0.7.6непряма
npmsource-map-support0.5.13непряма
npmstack-utils2.0.6непряма
npmstring-length4.0.2непряма
npmstring-width4.2.3непряма
npmstrip-ansi6.0.1непряма
npmstrip-bom4.0.0непряма
npmstrip-final-newline2.0.0непряма
npmstrip-json-comments3.1.1непряма
npmsucrase3.35.1непряма
npmsupports-color7.2.0непряма
npmsupports-color8.1.1непряма
npmsupports-preserve-symlinks-flag1.0.0непряма
npmtest-exclude6.0.0непряма
npmtext-table0.2.0непряма
npmthenify3.3.1непряма
npmthenify-all1.6.0непряма
npmtinyexec0.3.2непряма
npmtinyglobby0.2.15непряма
npmtmpl1.0.5непряма
npmto-regex-range5.0.1непряма
npmtree-kill1.2.2непряма
npmts-api-utils2.5.0непряма
npmts-interface-checker0.1.13непряма
npmts-jest29.4.6непряма
npmts-node10.9.2непряма
npmtsup8.5.1непряма
npmtsx4.21.0непряма
npmtype-check0.4.0непряма
npmtype-detect4.0.8непряма
npmtype-fest0.20.2непряма
npmtype-fest0.21.3непряма
npmtype-fest4.41.0непряма
npmtypescript5.9.3непряма
npmufo1.6.3непряма
npmuglify-js3.19.3непряма
npmundici-types6.20.0непряма
npmundici-types7.18.2непряма
npmupdate-browserslist-db1.2.3непряма
npmuri-js4.4.1непряма
npmuuid11.1.1непряма
npmuuid2.0.3непряма
npmv8-compile-cache-lib3.0.1непряма
npmv8-to-istanbul9.3.0непряма
npmwalker1.0.8непряма
npmwhich2.0.2непряма
npmword-wrap1.2.5непряма
npmwordwrap1.0.0непряма
npmwrap-ansi7.0.0непряма
npmwrappy1.0.2непряма
npmwrite-file-atomic4.0.2непряма
npmwrite-file-atomic5.0.1непряма
npmy18n5.0.8непряма
npmyargs17.7.2непряма
npmyargs-parser21.1.1непряма
npmyn3.1.1непряма
npmyocto-queue0.1.0непряма
PyPImypyнепряма
PyPIpytestнепряма
PyPIpytest-asyncioнепряма
PyPIruffнепряма
Сповіщення про залежності 5

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

ПакетВерсіяЗв'язокКритичністьСповіщеньВиправлено в
brace-expansion1.1.13непрямависока25.0.8
brace-expansion5.0.6непрямависока25.0.8
js-yaml5.0.0непрямависока35.2.2
uuid2.0.3непрямависока113.0.1
golang.org/x/cryptov0.54.0пряманевідома1

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

Звіт у форматі JSON машиночитний
{
  "data": {
    "repo": {
      "topics": [],
      "is_fork": false,
      "size_kb": 699,
      "has_wiki": true,
      "homepage": null,
      "languages": {
        "Go": 184643,
        "Rust": 184311,
        "Python": 173933,
        "JavaScript": 7266,
        "TypeScript": 235365
      },
      "pushed_at": "2026-07-23T15:42:16Z",
      "created_at": "2026-02-11T15:56:48Z",
      "owner_type": "User",
      "updated_at": "2026-07-23T15:42:06Z",
      "description": "Lightweight Webex Mercury WebSocket + KMS message decryption — Node.js, Python, Go, Rust",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "master",
      "license_spdx_raw": "MIT",
      "primary_language": "TypeScript",
      "significant_languages": [
        "TypeScript",
        "Go",
        "Rust",
        "Python"
      ]
    },
    "owner": {
      "blog": null,
      "name": "Ergon Copeland",
      "type": "User",
      "login": "3rg0n",
      "company": "Cisco",
      "location": "London, UK",
      "followers": 6,
      "avatar_url": "https://avatars.githubusercontent.com/u/62959009?v=4",
      "created_at": "2020-03-31T18:16:10Z",
      "is_verified": null,
      "public_repos": 18,
      "account_age_days": 2308
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v0.6.14",
          "kind": "patch",
          "published_at": "2026-07-21T16:28:46Z"
        },
        {
          "tag": "v0.6.13",
          "kind": "patch",
          "published_at": "2026-07-19T18:13:31Z"
        },
        {
          "tag": "v0.6.12",
          "kind": "patch",
          "published_at": "2026-06-22T17:28:32Z"
        },
        {
          "tag": "v0.6.11",
          "kind": "patch",
          "published_at": "2026-06-02T14:29:22Z"
        },
        {
          "tag": "v0.6.10",
          "kind": "patch",
          "published_at": "2026-06-01T23:20:56Z"
        },
        {
          "tag": "v0.6.9",
          "kind": "patch",
          "published_at": "2026-04-17T16:45:22Z"
        },
        {
          "tag": "v0.6.8",
          "kind": "patch",
          "published_at": "2026-04-13T15:36:04Z"
        },
        {
          "tag": "v0.6.7",
          "kind": "patch",
          "published_at": "2026-04-13T15:09:54Z"
        },
        {
          "tag": "v0.6.6",
          "kind": "patch",
          "published_at": "2026-04-13T14:02:42Z"
        },
        {
          "tag": "v0.6.5",
          "kind": "patch",
          "published_at": "2026-04-13T12:23:40Z"
        },
        {
          "tag": "v0.6.4",
          "kind": "patch",
          "published_at": "2026-04-13T12:12:47Z"
        },
        {
          "tag": "v0.6.3",
          "kind": "patch",
          "published_at": "2026-04-06T13:35:16Z"
        },
        {
          "tag": "v0.6.2",
          "kind": "patch",
          "published_at": "2026-04-05T14:58:08Z"
        },
        {
          "tag": "rust/v0.6.1",
          "kind": "other",
          "published_at": "2026-03-27T23:21:38Z"
        },
        {
          "tag": "go/v0.6.1",
          "kind": "other",
          "published_at": "2026-03-27T23:21:38Z"
        },
        {
          "tag": "python/v0.6.1",
          "kind": "other",
          "published_at": "2026-03-27T23:21:37Z"
        },
        {
          "tag": "node/v0.6.1",
          "kind": "other",
          "published_at": "2026-03-27T23:21:37Z"
        },
        {
          "tag": "rust/v0.6.0",
          "kind": "other",
          "published_at": "2026-03-27T23:11:10Z"
        },
        {
          "tag": "go/v0.6.0",
          "kind": "other",
          "published_at": "2026-03-27T23:11:10Z"
        },
        {
          "tag": "python/v0.6.0",
          "kind": "other",
          "published_at": "2026-03-27T23:11:09Z"
        },
        {
          "tag": "node/v0.6.0",
          "kind": "other",
          "published_at": "2026-03-27T23:11:09Z"
        },
        {
          "tag": "go/v0.5.1",
          "kind": "other",
          "published_at": "2026-03-16T15:18:23Z"
        },
        {
          "tag": "go/v0.5.0",
          "kind": "other",
          "published_at": "2026-02-12T13:19:51Z"
        },
        {
          "tag": "rust/v0.5.0",
          "kind": "other",
          "published_at": "2026-02-12T12:48:26Z"
        },
        {
          "tag": "python/v0.5.0",
          "kind": "other",
          "published_at": "2026-02-12T12:48:04Z"
        },
        {
          "tag": "node/v0.5.0",
          "kind": "other",
          "published_at": "2026-02-12T12:47:54Z"
        },
        {
          "tag": "rust/v0.3.2",
          "kind": "other",
          "published_at": "2026-02-12T09:15:36Z"
        },
        {
          "tag": "go/v0.3.1",
          "kind": "other",
          "published_at": "2026-02-12T09:15:26Z"
        },
        {
          "tag": "python/v0.3.1",
          "kind": "other",
          "published_at": "2026-02-12T09:15:16Z"
        },
        {
          "tag": "node/v0.3.3",
          "kind": "other",
          "published_at": "2026-02-12T09:15:06Z"
        },
        {
          "tag": "node/v0.3.2",
          "kind": "other",
          "published_at": "2026-02-12T00:03:54Z"
        },
        {
          "tag": "rust/v0.3.1",
          "kind": "other",
          "published_at": "2026-02-11T22:52:14Z"
        },
        {
          "tag": "node/v0.3.1",
          "kind": "other",
          "published_at": "2026-02-11T22:52:04Z"
        },
        {
          "tag": "rust/v0.3.0",
          "kind": "other",
          "published_at": "2026-02-11T22:18:42Z"
        },
        {
          "tag": "python/v0.3.0",
          "kind": "other",
          "published_at": "2026-02-11T22:18:32Z"
        },
        {
          "tag": "node/v0.3.0",
          "kind": "other",
          "published_at": "2026-02-11T22:18:23Z"
        },
        {
          "tag": "go/v0.3.0",
          "kind": "other",
          "published_at": "2026-02-11T22:16:16Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "fbf1c62c1a51ead882975b4f367f63f6b2e3ad9e",
          "body": "Card submit clicks arrive as a conversation.activity (verb=cardAction,\nobject.objectType=submit) whose object.inputs is a JWE-encrypted string\n(dir/A256GCM, under the activity's encryptionKeyUrl — the same key as\nmessage content). Every language's parser type-asserted inputs as an\nobject and silentl\n[…]\n Rust, each with\nnew parser + decryptor tests. Adds an opt-in shape-only debug instrument\n(WMH_DEBUG_RAW_ACTIVITY, Go) that never logs content.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(cards): decrypt JWE object.inputs on Action.Submit (v0.6.15)",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-07-23T15:39:51Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "62affeeec9f1cf670f8775b1d142e1265273bdc9",
          "body": "….6.14)\n\nThe library hard-coded the WDM endpoint wdm-a.wbx2.com and never did service\ndiscovery. Webex assigns each org to a region; registering a device in the\nwrong region yields a socket that authorizes and completes the KMS handshake\nbut never receives that org's conversation.activity (REST stil\n[…]\n the 0.6.13 \"backend\nlimitation\" note is marked superseded (root cause was client-side).\n\nThanks to Webex Engineering for the region diagnosis.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(#27): U2C region discovery — register in the org's WDM region (v0…",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-07-21T16:27:10Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "7616855fb7d2f15ee7bb4884849672e601f0029a",
          "body": "…s (v0.6.13)\n\nSecurity:\n- ReDoS (CodeQL js/polynomial-redos, high): the <spark-mention> regex used\n  two unbounded [^>]* around the attribute, backtracking polynomially on\n  crafted message HTML. Rewritten to a single bounded tag match + attribute\n  extraction, in Node and Python (both backtracking \n[…]\ncury-sandbox-activity-report.md: #27 write-up (Webex sandbox-org\n  Mercury backend limitation — not a library bug; production works, verified).\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(security): ReDoS in mention parser + device-leak parity, bump dep…",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-07-19T18:10:47Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "9bbc9ac29259f70accb780b29ba0804902e9a042",
          "body": "A dependency-free repro tool for the silent-delivery bug (#27). Connects an\nOBSERVER account via the library with debug logging, optionally creates a room +\nadds a second user, then posts round-trip messages AS A SEPARATE POSTER (so they\naren't self-filtered) via REST and reports whether the observe\n[…]\nge), stays healthy (ping/pong), but receives ZERO\nconversation.activity — all round-trips report silent delivery. Isolates the bug\nto the library's Mercury layer, independent of any application stack.",
          "is_bot": false,
          "headline": "examples: add observe-harness (standalone Mercury delivery repro)",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-07-18T20:48:23Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6a59a4ef76f7ac5a77c869d44a39222860613b9c",
          "body": "…auth frame\"\n\nThis reverts commit e9a4ce897dee23e94de26ec98df975dbf9a9d868.",
          "is_bot": false,
          "headline": "Revert \"fix(mercury): send raw token (not \"Bearer \"-prefixed) in the …",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-07-18T20:24:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e9a4ce897dee23e94de26ec98df975dbf9a9d868",
          "body": "The Mercury WebSocket authorization frame must carry the RAW access token in\ndata.token, matching the Webex JS SDK (internal-plugin-mercury socket-base.js\n_authorize: data:{token: this.token}). The Go impl prefixed it with \"Bearer \"\n(the HTTP Authorization header form), which is wrong for the WS aut\n[…]\n complete the handshake (buffer_state returns) yet\nreceive no conversation.activity pushes. Send ms.token unprefixed.\n\nVerified: build + unit tests green. Live delivery to be confirmed on the sandbox.",
          "is_bot": false,
          "headline": "fix(mercury): send raw token (not \"Bearer \"-prefixed) in the auth frame",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-07-18T20:02:54Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7239c734bbbd76955fda5e75af93482f523bbe23",
          "body": "- node/README: document the Node >=24.0.0 requirement (was undocumented)\n  and point Node 22 users to 0.6.9 (last release before the engine bump)\n- go/README: Requires Go 1.26.4+ (was stale \"1.21+\")\n- CONTRIBUTING: bump Node (18->24) and Go (1.21->1.26.4) prerequisites\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: update version requirements for v0.6.12",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-06-22T21:40:10Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "c619180aac5f133ff5ab0fb565d4c9a8b3ad1236",
          "body": "Node: bump undici 7.24.6 -> 8.5.0 (7 advisories incl. CVE-2026-12151 High,\nDependabot #24). undici 8.x needs Node >=22.19.0, so engines.node raised to\n>=24.0.0 (Node 24 LTS \"Krypton\") — BREAKING for consumers on Node 22.x.\npnpm overrides added for dev-tool transitives (js-yaml, esbuild, @babel/core)\n[…]\n/staticcheck +\ngovulncheck 0, Rust 45 (unchanged). npm audit 1 moderate remaining\n(node-kms>uuid@2, unreachable). Versions: node+python 0.6.12.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(security): remediate Dependabot/GHAS findings + bump deps (v0.6.12)",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-06-22T17:26:51Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "24baf24635727c41152a11f6b5fe705c82b403b6",
          "body": "Node: drop the uuid dependency entirely — replace uuid.v4() with built-in\ncrypto.randomUUID() (Node >=22.4.0 is already required). Resolves the\nDependabot bump to ESM-only uuid 14.x (#21) at the root instead of working\naround it. Pin node-jose's transitive uuid to >=11.1.1 and brace-expansion\nto >=5\n[…]\nonly; rand unsound only via rand::rng()+custom logger).\n\nAll tests pass: Node 142, Python 73, Rust 45. cargo audit clean; go\ngovulncheck clean.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(security): remediate Dependabot/audit findings (v0.6.11)",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-06-02T14:27:37Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "4aa46bda0162de5ccaaff1643c3f3340ccd5c312",
          "body": "Implements GitHub issues #20 and #23.\n\n#23 (all 4 languages): expose the WDM device registration read-only so\ninbound-only wrappers can make their own outbound calls (e.g. a\nConversation-service read-receipt) using cluster-correct service URLs\ninstead of hardcoding hostnames. Adds deviceRegistration\n[…]\nraw parent\nobject, so ParentID/MessageID were always empty in production.\n\nTests added across all languages; READMEs + CHANGELOG + ADR updated.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: expose WDM service catalog + fix aiohttp connector close (v0.6.10)",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-06-01T23:19:15Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "d730cd44284cf1d0751d721cac1a63af97c8b0a2",
          "body": "Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: add v0.6.9 config options to all READMEs",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-04-17T16:42:29Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "922caa8f92f26834cf31809b3890b57657446bfe",
          "body": "KMS circuit breaker prevents 30s stalls during outages by failing fast\nafter 3 consecutive failures. KMS key fetch retry handles transient\nerrors with 1 attempt + 1s delay. Optional timing metrics callback\nreports connect and decrypt latency. Delivery guarantees section added\nto all READMEs documenting at-most-once semantics.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: add KMS resilience, timing metrics, delivery docs (v0.6.9)",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-04-17T12:20:22Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "89629418f2d4265603640d6c90362522c5a188ac",
          "body": "Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(go): bump go directive to 1.26.2",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-04-13T16:26:57Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "fb0cdd56f4c8b09b556aaba890c4f1186c244424",
          "body": "Webex returns kms:// (not https://) for the kmsCluster field from the\nencryption service. The URL validator was rejecting it. Also fixed bare\ndomain matching (ciscospark.com) in Node.js and Go validators.\n\nPython was already fixed via PR #16 by @ojaber. This applies the same\nfix to Node.js, Go, and Rust with test coverage for all 4 languages.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: accept kms:// scheme for KMS cluster URL (all languages)",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-04-13T15:34:47Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "2ddf8bf40ab793010c65ecb196d5df750d8202e4",
          "body": "fix: accept kms:// scheme for KMS cluster URL",
          "is_bot": false,
          "headline": "fix: accept kms:// scheme for KMS cluster URL (#16)",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-04-13T15:14:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c59ad3f0415aec020dd845e41dc50313e317180a",
          "body": "Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: bump all versions to 0.6.7",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-04-13T14:52:37Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "01cb276181f23de763803dc6733a6a4ead934945",
          "body": "Document mentions, message edits, card actions, room events, and files\nfield across Node.js, Python, Go, and Rust READMEs.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: add v0.6.6 features to all language READMEs",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-04-13T14:19:53Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "4f19e2065ef163aaecc1a0b1c751dc49e5ea0bbb",
          "body": "…es support\n\nFive new features across all 4 languages (Node.js, Python, Go, Rust):\n\n- Mention parsing: extract mentionedPeople/mentionedGroups from <spark-mention> HTML tags\n- Message edit event (message:updated): verb=update + objectType=comment\n- Adaptive Card submissions (attachmentAction:created\n[…]\neated, room:updated): verb=create/update + objectType=conversation\n- Files field: surface file URLs from Mercury activities on DecryptedMessage\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: add mentions, message edits, card actions, room events, and fil…",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-04-13T14:01:00Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "0589666e8eb70b96a4d6fc4853cf8b29b2a66455",
          "body": "Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: bump all versions to 0.6.5",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-04-13T12:22:50Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "0a2e25a6b7fd85cdec808d75cc71dab69ce7d586",
          "body": "All four language-specific READMEs now document parentId,\ntoRestId/fromRestId, and threading usage examples.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: add threading and ID conversion to language READMEs",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-04-13T12:19:10Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "4a88101b1f8b6022803fe4f2fdf262421e5435fa",
          "body": "- Add MercuryParent type and parentId field to DecryptedMessage\n  across all 4 languages, parsed from Mercury activity parent object\n- Add toRestId/fromRestId utilities to convert between Mercury\n  activity UUIDs and Webex REST API base64-encoded IDs\n- Document threading and ID conversion in README with examples\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: add thread support (parentId) and Mercury/REST ID conversion",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-04-13T12:01:03Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "59374e8bf0a6d8596e727ef3f7c1afd68df54fd2",
          "body": "…ect.id\n\nMercury does not populate activity.object.id for encrypted messages,\nleaving DecryptedMessage.id empty. Use activity.id (the Mercury activity\nUUID) which is always present and works as parentId for threaded replies.\n\nReported by Omar Abduljaber.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: set DecryptedMessage.id from activity.id instead of activity.obj…",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-04-13T11:36:11Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "05f3d0ca032649ab807c33a6f5f522d825787694",
          "body": null,
          "is_bot": false,
          "headline": "test: cover realistic KMS cluster URLs",
          "author_name": "Omar",
          "author_login": "ojaber",
          "committed_at": "2026-04-13T02:23:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ab980d5c817e04197a46895fc5dddf2ce06e77e7",
          "body": "Webex returns a kms:// scheme in the kmsCluster field from the\nencryption service. The URL validator was requiring https://, which\ncaused KmsError during initialization. The kmsCluster value is used\nas a URI in KMS JSON payloads (not as an HTTP endpoint), so the\nkms:// scheme is correct.",
          "is_bot": false,
          "headline": "fix: accept kms:// scheme for KMS cluster URL",
          "author_name": "Omar",
          "author_login": "ojaber",
          "committed_at": "2026-04-13T01:32:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "aed3f4a116f6d1da4479d77e21a7ea3daa78d717",
          "body": "Document disposition of all 18 findings (10 fixed, 3 verified,\n4 accepted, 1 deferred) and update data flow diagram annotations.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: append remediation status to MAESTRO threat model",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-04-06T17:12:55Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "2c582b245c7321accc1b02ffd13eb70616a06213",
          "body": "Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: correct cyclonedx-py SBOM args and add continue-on-error",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-04-06T13:50:08Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "3883ec57ca4d4eb7d5713e5312ef695e0118d8d0",
          "body": "Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: update Rust test count to 30",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-04-06T13:37:18Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "97d77a010abe0cb00d1c79f91ac79ef2052020e8",
          "body": "Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: bump all versions to 0.6.3",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-04-06T13:34:44Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "40a91ede7d45095436266d10929b1ac903a52124",
          "body": "Remediates 15 of 18 findings from MAESTRO threat assessment:\n\n- F1 (Critical): Upgrade Python aiohttp 3.13.3→3.13.4 (10 HIGH CVEs),\n  pin cryptography>=46.0.6\n- F2 (High): KMS request serialization via mutex (Go, Python)\n- F3 (High): URL validation for all external API responses — enforce\n  HTTPS/WS\n[…]\nes),\nF11 (dependency pinning — lockfiles already pin), F13 (token zeroing —\nlanguage-specific complexity), F17-18 (already accepted/mitigated).\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "security: remediate MAESTRO threat model findings across all languages",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-04-06T12:33:39Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "1664207c799ca0880f9daa120f0b6677786ad072",
          "body": "Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: bump all versions to 0.6.2",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-04-05T14:57:46Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "79efe5b5445b16ed1071bd5bf2f8c1d9b1703025",
          "body": "… findings\n\nGo: go-jose/v4 v4.0.5→v4.1.4 (JWE decryption panic, DoS parsing).\nNode: lodash 4.17.23→4.18.1 via pnpm override (code injection, prototype pollution).\ngolang.org/x/crypto SSH alerts auto-resolved (unused subpackages).\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: upgrade go-jose v4.1.4 and override lodash 4.18.1 for Dependabot…",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-04-05T08:53:03Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "f1cd5eb5edcff3e08b111e342afd246530991b88",
          "body": "Scans JavaScript/TypeScript, Go, and Python on push, PR,\nand weekly schedule. Rust is not yet supported by CodeQL.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "ci: add CodeQL code scanning workflow",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-04-04T21:26:12Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "fe59856d24754df7912711dc79fe809d8f08c7e4",
          "body": "Document how to use OAuth tokens with the existing reconnect(newToken)\nAPI. The library already handles 401/4401 auth failures by emitting\nAuthError and stopping reconnection — the app just needs to refresh\nthe token and call reconnect().\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: add OAuth integration token pattern to README",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-04-03T15:32:16Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "cf4bdcf4ee727d199d0e0c9a0437e3cc7b34d60e",
          "body": "Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: add v0.6.1 changelog and update README test counts",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-03-28T10:07:10Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "c0347479cc0feb2403ed161623702237d2d436d6",
          "body": "Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: bump all versions to 0.6.1",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-03-27T23:20:49Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "dfb82b8067fd9fdbd266679d3336bbe496fc4608",
          "body": "…guages\n\nGo:\n- Upgrade go-jose v4.0.4→v4.0.5 (fixes DoS in JWE parsing, GO-2025-3485)\n- Upgrade golang.org/x/crypto v0.31.0→v0.49.0 (multiple CVEs)\n- Fix staticcheck SA1012: replace nil contexts with context.TODO() in tests\n\nPython:\n- Narrow broad exception handlers flagged by bandit (B110)\n- Replac\n[…]\nde rustls-webpki 0.103.9→0.103.10 (CRL validation, RUSTSEC-2026-0049)\n- Document rsa Marvin side-channel as false positive (encrypt-only usage)\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: security scanner findings and dependency upgrades across all lan…",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-03-27T23:08:11Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "9d8e7d7a562ed76c32cf63b2fa5ba4ca87055c7f",
          "body": "…r/websocket\n\nnhooyr.io/websocket is deprecated — the maintainer moved the library to\ngithub.com/coder/websocket. Same API, new module path.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(go): migrate websocket library from nhooyr.io/websocket to code…",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-03-27T22:45:44Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "9631cf5b7d86d3ea490de66ae864c89a20b19d62",
          "body": "- kms_client.go: check json.Unmarshal error on local JWK\n- kms_client.go: acknowledge body drain/close errors\n- device_manager.go: acknowledge body drain error\n- mercury_socket.go: acknowledge conn.Close error\n- examples/basic-bot: acknowledge Disconnect error\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(go): handle all gosec G104 unhandled error findings",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-03-27T22:26:09Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "e629bd089a3ce6dbfcb0889275c5abe3fde71f4c",
          "body": "Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: bump all versions to 0.6.0",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-03-19T21:04:55Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "9439a1bace5425517b0f1e0d3a61091d9757a785",
          "body": "…nguages\n\nGo:\n- Add RWMutex to WebexMessageHandler protecting shared state fields\n- Replace recursive reconnect() with iterative loop (prevents stack overflow)\n- Protect MercurySocket boolean fields with mutex helpers\n- Use cancelable context for activity handlers instead of context.Background()\n- L\n[…]\ndiscard\n- Set 1MB WebSocket message size limit\n- Validate ECDH remote JWK has kty=EC and crv=P-256\n- Replace unwrap() with descriptive expect()\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: concurrency, security, and robustness improvements across all la…",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-03-19T21:03:52Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "ab3dae7c2e70d8bd09d4a7b1572f12308b74b350",
          "body": "Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: add v0.5.1 to CHANGELOG",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-03-16T15:21:39Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "a51ed61852e110145586631014fa53fe5cf026cd",
          "body": "…reconnection\n\npendingPongID was accessed from multiple goroutines without mutex\nprotection. Go strings are (pointer, length) headers — concurrent\nread/write can corrupt the header, causing == to dereference a nil\ndata pointer.\n\nAlso fixes:\n- closeWebSocket now cancels context, stopping stale ping/pong goroutines\n- triggerReconnect guard prevents concurrent reconnection attempts\n- Pong timeout goroutine respects context cancellation\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(go): race condition in ping loop causes nil pointer panic during …",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-03-16T15:17:47Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "2d708ff99f5309dd6efe3fde9a2e248c062081b1",
          "body": "Changed module path from github.com/ecopelan/webex-message-handler-go\nto github.com/3rg0n/webex-message-handler/go to match the consolidated\nmonorepo structure under the 3rg0n organization.\n\nUpdated in:\n- go.mod module declaration\n- All import statements in tests and examples\n- Documentation (README.md, API.md)\n\nCo-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(go): update module path to monorepo structure",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-12T13:17:56Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "ac0593878e101717b0e123d9ed7252299da051ad",
          "body": "- Correct Rust README: tokio-tungstenite does not read proxy env vars\n- Add trust_env=True to Python native HTTP adapter for proxy support\n- Add v0.5.0 changelog entry\n\nCloses #6\nCloses #7\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: Rust README proxy docs, Python trust_env, update CHANGELOG",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-12T12:59:48Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "c6f826d49b39b8ab7b79e8ed92c19cb85fb1ffc1",
          "body": "Add mitmproxy-based proxy validation scripts for Python, Go, and Rust.\nAdd Node.js e2e integration test.\n\nCloses #9\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "test: add proxy validation and e2e test scripts for all languages",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-12T12:58:02Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "ae014164e1efd4f98f31b72e0eb6b5b33ca06b72",
          "body": "Replace deprecated elliptic.Marshal() with (*ecdsa.PublicKey).ECDH().\nRemove dead code and unused imports.\n\nCloses #12\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(go): bump to go 1.24, modernize ECDH key derivation",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-12T12:57:45Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "795b300e6b8bdc43f52d21daac1c89bcb1530f7d",
          "body": "Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: bump versions to 0.5.0 for membership event release",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-12T12:47:23Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "760e326611bf40ed7812af953e9fe6625330a7f3",
          "body": "Add MembershipActivity type and membership:created event for Mercury\nmembership activities (add, leave, assignModerator, unassignModerator)\nwith objectType=person. No decryption needed — membership activities\nare unencrypted. No self-message filtering — bots should see their\nown membership events.\n\nAlso fixes all pre-existing lint issues across Python (ruff), Rust\n(clippy), and cleans up unused imports/variables.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: add membership:created event support (all 4 languages)",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-12T12:46:32Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "f3fcc67cb5d8a5714296d99551ca511bc4440ca7",
          "body": "actions/setup-go@v5 looks for go.sum at the repo root by default.\nSince ours is in the go/ subdirectory, set cache-dependency-path.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "ci: fix Go cache warning by pointing to go/go.sum",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-12T12:04:50Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "4289d9b57839158be2dd068472dcf32c9d415cbb",
          "body": "…fix)\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(python): bump to 0.4.4 (0.4.3 published without mercury_socket …",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-12T12:03:41Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "5820460d40bcc67c0eaf62312b6c6d1178d0ec83",
          "body": "All 4 language integration tests run in parallel against the same bots.\nMessages from other tests (Python, Go, Rust) would bump the message\ncount and cause the Node.js test to falsely report self-filtering as\nbroken. Now only counts messages matching the test pattern.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(node): e2e test ignores unrelated messages from concurrent tests",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-12T12:01:36Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "ddbc02f0f7dcfd115589da113604764ddd7ea295",
          "body": "…ocket\n\n- Add `import aiohttp` (needed for WSMsgType, WSCloseCode references)\n- Change `.send()` to `.send_str()` for auth and ping messages\n  (aiohttp ClientWebSocketResponse uses send_str for text)\n- Use literal 1000 for close code instead of aiohttp.WSCloseCode.OK\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(python): add missing aiohttp import and fix send_str in mercury_s…",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-12T11:59:28Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "97e6e9a54387ec5fcbb7498b6d9922858765608b",
          "body": "…ership\n\n- Remove undefined `connector` reference in KmsClient.__init__ (NameError in production)\n- Fix connector_owner logic: let session own auto-created connector when\n  no user connector is provided, preventing \"Unclosed connector\" warnings\n- Bump Python version to 0.4.3\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(python): remove stale connector ref in KmsClient, fix session own…",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-12T11:56:37Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "9d61b9885e165e6dd95e22b8af1a1183484c1106",
          "body": "Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(python): bump version to 0.4.2",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-12T11:54:39Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "de4476b26a111841ccc646dae040972d07d15702",
          "body": "The native HTTP adapter used async context managers that closed the\naiohttp session before the caller could read response.json(). This\ncaused ClientConnectionError in production (including CI integration\ntests). Now reads the body bytes eagerly inside the try block and\nreturns a wrapper with the cached data.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(python): read HTTP response body eagerly before closing session",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-12T11:54:27Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "090f54756d697ef24fca5de6c07276e96a005281",
          "body": "- Node.js 20 → 22 (package requires >=22.4.0)\n- pnpm 8 → 9\n- Add pnpm build step before e2e test\n- Fix test command: npx tsx src/test/integration.test.ts → node test-e2e.js\n- Python 3.11 → 3.12\n- Go 1.21 → 1.24\n- actions/cache v3 → v4\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "ci: fix integration test workflow for v0.4.1",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-12T11:43:10Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "36e4fe527918d2808c8e0d097a69217bce3807e3",
          "body": "Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: bump Rust and Python versions to 0.4.1",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-12T11:33:46Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "33553c08f96163b082809325d199bdd2eb3d2c0d",
          "body": "…guages)\n\nconnect() now throws if /people/me is unreachable when\nignoreSelfMessages is enabled, preventing silent degradation to\nunprotected mode. Previously this silently skipped filtering.\n\nAdded \"Important: Implementing Loop Detection\" section to all 4\nREADMEs explaining that the library only sees the receive side and\nrecommending wrapper-level rate limiting for send loops.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: fail-closed on /people/me failure + loop detection docs (all lan…",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-12T11:19:52Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "388e818e1e17ce4d646d65a42e64dfbe1329da7c",
          "body": "The receiver bot now replies to every incoming message via REST API.\nMercury echoes the reply back. If ignoreSelfMessages works correctly,\nthe handler silently drops it. If broken, the test fails with explicit\nLOOP DETECTED or SELF-MESSAGE NOT FILTERED errors.\n\nThis would have caught the ID format mismatch bug immediately.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "test(node): bidirectional e2e test that exercises self-message filtering",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-12T11:07:43Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "44164f8cade0fd75f55d05bf6e66abb1cef02b02",
          "body": "The Webex REST API (/v1/people/me) returns base64-encoded IDs\n(ciscospark://us/PEOPLE/<uuid>) while Mercury wire format uses raw\nUUIDs. The direct equality comparison always failed, so\nignoreSelfMessages never actually filtered anything, causing infinite\nmessage loops in production.\n\nAdded extractPe\n[…]\nrmalize both formats\nto the raw UUID before comparison. Updated tests to use realistic\nmismatched ID formats that reproduce the real-world bug.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: self-message filtering ID format mismatch (all languages) — v0.4.1",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-12T11:02:41Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "cbfbfe1cce12d807216d9832e86cf50767f0a4d1",
          "body": "BREAKING CHANGES:\n- `agent` config field replaced with `dispatcher` (accepts undici Dispatcher)\n- Node.js engine requirement raised to >=22.4.0\n- Removed `ws` and `@types/ws` dependencies\n- `undici` moved to production dependency\n\nA single ProxyAgent now proxies both fetch() and WebSocket in native \n[…]\n.on() interface, preserving the existing mercury-socket contract.\n\nAll 128 unit tests pass, e2e integration test passes, mitmproxy test passes.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(node)!: migrate from ws to native WebSocket (undici) — v0.4.0",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-12T10:13:01Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "9da6eda3cad8838a12165b4145d30bf68956182d",
          "body": "Bots automatically filter their own messages out of the box,\npreventing infinite response loops without any configuration.\n\n- Node.js 0.3.3: default changed from false to true\n- Python 0.3.1: new feature with default true\n- Go: new feature with default true (*bool for nil=true)\n- Rust 0.3.2: new fea\n[…]\nth default true\n\nEach language fetches /people/me on connect, caches the bot's\nperson ID, and filters matching messages before emitting events.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: add ignoreSelfMessages (default true) to all languages",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-12T09:14:30Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "f17300d9359d4dc046c1d49c472cba7a1e80065e",
          "body": "There is no practical reason for a bot to process its own messages\nechoed back through Mercury. The bot already knows what it sent via\nthe REST API response. Defaulting to true prevents message loops\nout of the box. Set ignoreSelfMessages: false to opt out.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: default ignoreSelfMessages to true",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-12T09:06:18Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "7486361e465643a542f91ec0ba3eb965f5d13e1f",
          "body": "Replaces simulated tests with actual handler integration tests that:\n- Mock sub-components (DeviceManager, Mercury, KMS, Decryptor)\n- Let the handler's real _handleActivity filtering logic run\n- Reproduce the runaway loop bug (bot processes own echoes)\n- Prove ignoreSelfMessages prevents the loop\n- Verify /people/me caching and graceful degradation\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "test: real integration test for message loop prevention",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-12T09:02:09Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "820af7e241d2dc3f6da1fa92c7f51e5e7ad76959",
          "body": "…ion tests",
          "is_bot": false,
          "headline": "test: remove overly complex integration tests, keep simple demonstrat…",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-12T08:56:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "822263865b289af00cf6a65b80c81dc003321a51",
          "body": null,
          "is_bot": false,
          "headline": "docs: remove internal product references from tests and documentation",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-12T08:56:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ee71bf7d71969ce86d3fa08b7fa7336b12df4c7e",
          "body": null,
          "is_bot": false,
          "headline": "docs: update CHANGELOG with loop prevention tests",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-12T00:14:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "97e10ba0d3334e9f56975490f2ae96c5f73aae31",
          "body": "- Demonstrates infinite loop without ignoreSelfMessages\n- Validates filtering prevents loops\n- Shows multi-user conversation handling\n- Documents OKRatlas issue scenario",
          "is_bot": false,
          "headline": "test: add message loop prevention validation tests",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-12T00:14:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "782c70032c126c8d5be61958f46c96455181235d",
          "body": "Version 0.3.2 includes:\n- New ignoreSelfMessages feature to prevent bot message loops\n- WebSocket proxy documentation for injected mode\n- Comprehensive proxy and self-message filtering tests\n\nCo-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: bump version to 0.3.2 and add CHANGELOG",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-12T00:02:23Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "1d41e2a417b07401c786408be850082f177e6a13",
          "body": "Add built-in self-message filtering to prevent infinite response loops,\naddressing common bot development issue discovered in production usage.\n\nFeatures:\n- New ignoreSelfMessages config option (default: false)\n- Automatically fetches bot's person ID on connect()\n- Caches person ID for session lifet\n[…]\nPersonInfo type\n- _fetchBotPersonId() method\n- Filtering logic in _handleActivity()\n- 5 new tests (all passing)\n- Comprehensive documentation\n\nCo-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(node): add ignoreSelfMessages option to prevent message loops",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-12T00:00:44Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "9aeeb5c0b6f3615fd88f56227cff6bc385039b85",
          "body": "Add comprehensive documentation and examples for proxy support in\ninjected mode, addressing real-world issue where WebSocket connections\nbypassed proxy configuration.\n\nKey additions:\n- Updated README.md with proxy example for injected mode\n- Added Node.js README section on advanced proxy configurati\n[…]\nte addresses production issue discovered in\nOKRatlas deployment where HTTP requests succeeded through proxy\nbut WebSocket connections failed.\n\nCo-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(node): add WebSocket proxy configuration for injected mode",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-11T23:32:58Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "0af134881aa04afab88a7c1719ab0f23643248b1",
          "body": "Add 14 tests validating proxy configuration and usage:\n- ProxyAgent (undici) support\n- http.Agent and https.Agent support\n- Native vs injected mode validation\n- Configuration error handling\n- Environment variable pattern support\n\nAll tests passing. Added undici as devDependency for testing.\n\nCo-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "test(node): add comprehensive proxy support test suite",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-11T23:17:11Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "3138968945e97af2bc5fb07e189b469d14e05744",
          "body": "Bump version to include TypeScript fixes from commits after 0.3.0 release.\n\nCo-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(node): bump version to 0.3.1",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-11T22:48:24Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "88186bc03bca128bf0b44de1147da077bd7e4dbc",
          "body": "Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "ci: rename workflow to publish.yml to match PyPI config",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-11T22:46:47Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "72055a31bc7a95b842d010e88e9b95902e2bade5",
          "body": "Add GitHub Actions workflow for automated PyPI publishing using\ntrusted publishing (OIDC). This eliminates the need for API tokens\nand provides more secure package publishing.\n\nTo use:\n1. Configure trusted publisher at https://pypi.org/manage/account/publishing/\n2. Trigger manually or automatically on GitHub releases\n\nCo-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "ci: add trusted publishing workflow for PyPI",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-11T22:46:34Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "25e2eb6a341cf5cf7c9b8418a01d7c65d9647df1",
          "body": "Bump version to republish with unused variable fix since crates.io\ndoesn't allow republishing yanked versions.\n\nCo-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(rust): bump version to 0.3.1",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-11T22:41:23Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "59190c708fca97a17b99d04837d8814896317ee0",
          "body": "Remove leftover unused client variable from adapter refactoring.\n\nCo-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(rust): remove unused client variable",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-11T22:38:08Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "267d9cf1837401ce5d9a1ae25c19ca6a1d0939b5",
          "body": "Update proxy documentation to recommend undici's ProxyAgent instead of\nHttpsProxyAgent for Node.js v18+ environments. Node.js native fetch()\nuses undici internally, so undici's ProxyAgent provides more reliable\nproxy support than traditional https-proxy-agent.\n\nKey changes:\n- Updated README.md proxy\n[…]\n may still work in some cases, this change helps\nusers avoid the \"TypeError: fetch failed\" issue encountered in\ncorporate proxy environments.\n\nCo-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: recommend undici ProxyAgent for Node.js proxy support",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-11T22:30:21Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "2195af813947e5daa75e513c6af24f154431d788",
          "body": "- Remove unused 'agent' field from handler\n- Update WsFactoryFn type to support both native WebSocket and InjectedWebSocket\n- Remove unused http/https imports from mercury-socket\n- Use type assertions for WebSocket event listeners to support both types\n- Handle both string and Buffer types in message/close event handlers\n- All 105 tests passing\n\nCo-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Fix Node.js TypeScript build errors",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-11T22:25:15Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "c337cebd80decb2bd91e61b32b0182e116ed3c78",
          "body": "Add support for injecting custom networking implementations across all four languages (Node.js, Python, Go, Rust). This enables wrappers to intercept, log, mock, or route all network calls without the library knowing.\n\nKey changes:\n- Add explicit 'mode' config field ('native' or 'injected')\n- Implem\n[…]\n- Version bumps: Node.js 0.3.0, Python 0.3.0, Go 0.3.0, Rust 0.3.0\n\nNative mode maintains 100% backward compatibility with v0.2.0.\n\nCloses #4\n\nCo-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Implement dependency injection for fetch/WebSocket (Issue #4)",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-11T22:12:50Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "ba114cfbcbaee3a85696483f1b937bdaacb8a103",
          "body": "New features:\n- Add proxy support via connector/client parameter\n- Add integration tests with two-bot pattern",
          "is_bot": false,
          "headline": "Bump Python and Rust versions to 0.2.0",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-11T20:48:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "797be094c183cc2eae406c6327a965f596c4da19",
          "body": "New features:\n- Add proxy support via agent parameter\n- Add integration tests with two-bot pattern",
          "is_bot": false,
          "headline": "Bump version to 0.2.0",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-11T20:47:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ad209b79bac083ec30f37cca28ae7deaf9a501f8",
          "body": null,
          "is_bot": false,
          "headline": "Fix import path in Node.js integration test",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-11T20:45:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "051062ca871dfbd0c9b7b023f49c18f4930e7f7c",
          "body": "The test file doesn't need to be part of the compiled library output.\nUse tsx to run the TypeScript test directly.",
          "is_bot": false,
          "headline": "Run Node.js integration test with tsx instead of compiling",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-11T20:44:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a34421ad6993072e1ab48e3b33bbfd7c3cee2f02",
          "body": "- Node.js: Move test to src/test/ for compilation to dist/\n- Go: Update to use WEBEX_BOT_TOKEN (receiver) and WEBEX_BOT_TOKEN_TEST (sender)\n- Rust: Update to use two-bot pattern, suppress unused field warning\n\nAll tests now send message FROM sender bot TO receiver bot instead of\ntrying to send to self (which returns HTTP 400).",
          "is_bot": false,
          "headline": "Fix integration tests to use two-bot pattern",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-11T20:42:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f8869ca904ecf1be38b2db6d89070962a9da123a",
          "body": "- Bot-to-bot messaging confirmed working! (HTTP 200 OK)\n- Change from self-messaging (blocked) to sender→receiver pattern\n  - Receiver bot (WEBEX_BOT_TOKEN): OKR Atlas - runs handler, listens for messages\n  - Sender bot (WEBEX_BOT_TOKEN_TEST): experts - sends test message\n- Update Node.js test to fe\n[…]\n WEBEX_TEST_TARGET_EMAIL (no longer needed with two tokens)\n\nThis fixes the HTTP 400 error caused by bots being unable to message themselves.\n\nCo-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Update integration tests to use two-bot pattern",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-11T20:37:16Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "2608550a1c3906e54833360a72808f0abb37a103",
          "body": "- Remove invalid pnpm-workspace.yaml (was causing Node.js install failure)\n- Fix Node.js test to run built version (dist/test/integration.test.js)\n- Fix Go test linting errors (redundant newlines in fmt.Println)\n- Fix Rust test compilation error (disconnect() returns () not Result)\n- Update Python t\n[…]\nests to use WEBEX_TEST_TARGET_EMAIL\n- Update workflow to set WEBEX_TEST_TARGET_EMAIL secret\n- Update TESTING.md with workaround documentation\n\nCo-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Fix integration test issues",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-11T20:29:25Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "10a15a23489df230ca41f06bd4f57c06db118a95",
          "body": "- Add agent/connector/client parameter for proxy support (Node.js, Python, Go, Rust)\n- Add integration tests for all languages\n- Add GitHub Actions workflow for CI/CD integration testing\n- Add TESTING.md documentation\n- Set WEBEX_BOT_TOKEN secret\n\nFixes #1",
          "is_bot": false,
          "headline": "Add proxy support and integration tests for all languages",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-11T20:26:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c732c6c034d3a2ddd09a742dd67eba09bf5e736c",
          "body": "- Update repository URLs to 3rg0n/webex-message-handler\n- Rust: crates.io ready\n- Python: PyPI ready\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Update Rust and Python package metadata for publishing",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-11T18:38:53Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "cb9c18c25b8e650b504dddecc7a8bd86abd2f842",
          "body": "- Update repository URL to 3rg0n/webex-message-handler\n- Add monorepo directory field\n- Change license from Apache-2.0 to MIT (matches root)\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Update Node.js package.json for npm publish",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-11T17:21:42Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "dd9c3fcd3ad15bab3ceb5c8485e8935367db6961",
          "body": "Captures every non-obvious detail discovered while porting across\nfour languages: two-channel KMS pattern, dir vs A256KW JWE,\nJWE/JWS detection, ECDH flow, Mercury auth, concurrency pitfalls,\nand common mistakes ranked by debugging cost.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add PORTING.md with implementation insights and protocol details",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-11T16:35:04Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "e68b4a44a33f2042081d005c9c6bac0b45fda499",
          "body": "Guidelines for setup, testing, code style, and PR process\nacross all four language implementations.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add CONTRIBUTING.md",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-11T15:56:38Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "30ef06593ca15bd7ceebe783d76ba091b7829990",
          "body": "Root README with quick-start examples for all four languages,\narchitecture overview, and links to per-language API docs.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add monorepo root documentation",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-11T15:53:57Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "cebed7204ad76480dd0507d9516cd1046c6283ad",
          "body": "Rust port using tokio, reqwest, tokio-tungstenite, and josekit.\nIncludes source, tests (12 passing), examples, and API documentation.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add Rust implementation in rust/ subdirectory",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-11T15:53:13Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "5c2c385c7777035b0caca7143a1fc7101f6cd766",
          "body": "Go port using nhooyr.io/websocket, go-jose/v4, and crypto/ecdh.\nIncludes source, tests (68 passing), examples, and API documentation.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add Go implementation in go/ subdirectory",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-11T15:52:41Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "59367ae73251f8efd8777a8685e3bc5921955e9a",
          "body": "Async Python port using aiohttp, jwcrypto, and asyncio.\nIncludes source, tests (41 passing), examples, and API documentation.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add Python implementation in python/ subdirectory",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-11T15:52:13Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "e8dfd2d3c5df9139151cc817084f7310c83ca163",
          "body": "Webex Mercury WebSocket + KMS message decryption library.\nIncludes source, tests, examples, and API documentation.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add Node.js/TypeScript implementation in node/ subdirectory",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-11T15:51:43Z",
          "body_truncated": false,
          "is_coding_agent": true
        }
      ],
      "releases_count": 37,
      "commits_last_year": 97,
      "latest_release_at": "2026-07-21T16:28:46Z",
      "latest_release_tag": "v0.6.14",
      "releases_from_tags": false,
      "days_since_last_push": 3,
      "active_weeks_last_year": 10,
      "days_since_latest_release": 5,
      "mean_days_between_releases": 11
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": true,
      "health_percentage": 57,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "github.com/3rg0n/webex-message-handler/go",
          "exists": true,
          "license": null,
          "keywords": [],
          "ecosystem": "go",
          "matches_repo": true,
          "registry_url": "https://pkg.go.dev/github.com/3rg0n/webex-message-handler/go",
          "is_deprecated": false,
          "latest_version": "v0.6.15",
          "repository_url": "https://github.com/3rg0n/webex-message-handler",
          "versions_count": 20,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-07-23T15:39:51Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 3
        },
        {
          "name": "webex-message-handler",
          "exists": true,
          "license": "MIT",
          "keywords": [
            "bot",
            "kms",
            "mercury",
            "webex",
            "websocket",
            "network-programming",
            "web-programming"
          ],
          "ecosystem": "crates",
          "matches_repo": true,
          "registry_url": "https://crates.io/crates/webex-message-handler",
          "is_deprecated": false,
          "latest_version": "0.6.15",
          "repository_url": "https://github.com/3rg0n/webex-message-handler",
          "versions_count": 21,
          "total_downloads": 400,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": 57,
          "first_published_at": "2026-02-11T18:53:10.017355Z",
          "latest_published_at": "2026-07-23T15:58:47.143587Z",
          "latest_version_yanked": false,
          "days_since_latest_publish": 3
        },
        {
          "name": "webex-message-handler",
          "exists": true,
          "license": "MIT",
          "keywords": [
            "webex",
            "mercury",
            "websocket",
            "kms",
            "bot",
            "messaging"
          ],
          "ecosystem": "npm",
          "matches_repo": true,
          "registry_url": "https://www.npmjs.com/package/webex-message-handler",
          "is_deprecated": false,
          "latest_version": "0.6.15",
          "repository_url": "https://github.com/3rg0n/webex-message-handler",
          "versions_count": 15,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 1,
          "monthly_downloads": 2348,
          "first_published_at": "2026-02-11T18:37:36.491000Z",
          "latest_published_at": "2026-07-23T15:58:25.600000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 3
        },
        {
          "name": "webex-message-handler",
          "exists": true,
          "license": "MIT",
          "keywords": [
            "bot",
            "kms",
            "mercury",
            "messaging",
            "webex",
            "websocket",
            "Development Status :: 4 - Beta",
            "Framework :: AsyncIO",
            "Intended Audience :: Developers",
            "License :: OSI Approved :: MIT License",
            "Programming Language :: Python :: 3",
            "Programming Language :: Python :: 3.10",
            "Programming Language :: Python :: 3.11",
            "Programming Language :: Python :: 3.12",
            "Programming Language :: Python :: 3.13",
            "Topic :: Communications :: Chat"
          ],
          "ecosystem": "pypi",
          "matches_repo": true,
          "registry_url": "https://pypi.org/project/webex-message-handler/",
          "is_deprecated": false,
          "latest_version": "0.6.14",
          "repository_url": "https://github.com/3rg0n/webex-message-handler",
          "versions_count": 17,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": "2026-02-12T12:04:13.534632Z",
          "latest_published_at": "2026-07-21T16:29:21.300074Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 5
        }
      ]
    },
    "popularity": {
      "forks": 2,
      "stars": 0,
      "watchers": 0,
      "fork_history": {
        "days": [
          {
            "date": "2026-04-13",
            "count": 1
          },
          {
            "date": "2026-06-09",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 2,
        "total_forks": 2
      },
      "star_history": {
        "days": [],
        "complete": true,
        "collected": 0,
        "total_stars": 0,
        "collected_at": null
      },
      "open_issues_and_prs": 3
    },
    "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": [
        "node/tsconfig.json"
      ],
      "toolchain_manifests": [
        "go/go.mod",
        "rust/Cargo.toml"
      ],
      "largest_source_bytes": 44381,
      "source_files_sampled": 99,
      "oversized_source_files": 0,
      "agent_instruction_files": [],
      "agent_instruction_max_bytes": null
    },
    "dependencies": {
      "manifests": [
        "go/go.mod",
        "node/package.json",
        "python/pyproject.toml",
        "rust/Cargo.toml"
      ],
      "advisories": {
        "error": null,
        "scope": "repository_graph",
        "source": "osv",
        "findings": [
          {
            "name": "brace-expansion",
            "direct": false,
            "version": "1.1.13",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-3jxr-9vmj-r5cp",
              "GHSA-mh99-v99m-4gvg"
            ],
            "fixed_version": "5.0.8",
            "advisory_count": 2,
            "oldest_advisory_days": 6
          },
          {
            "name": "brace-expansion",
            "direct": false,
            "version": "5.0.6",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-3jxr-9vmj-r5cp",
              "GHSA-mh99-v99m-4gvg"
            ],
            "fixed_version": "5.0.8",
            "advisory_count": 2,
            "oldest_advisory_days": 6
          },
          {
            "name": "js-yaml",
            "direct": false,
            "version": "5.0.0",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-724g-mxrg-4qvm",
              "GHSA-g796-fgmg-93mv",
              "GHSA-pm4m-ph32-ghv5"
            ],
            "fixed_version": "5.2.2",
            "advisory_count": 3,
            "oldest_advisory_days": 6
          },
          {
            "name": "uuid",
            "direct": false,
            "version": "2.0.3",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-w5hq-g745-h8pq"
            ],
            "fixed_version": "13.0.1",
            "advisory_count": 1,
            "oldest_advisory_days": 95
          },
          {
            "name": "golang.org/x/crypto",
            "direct": true,
            "version": "v0.54.0",
            "severity": "unknown",
            "ecosystem": "go",
            "cvss_score": null,
            "advisory_ids": [
              "GO-2026-5932"
            ],
            "fixed_version": null,
            "advisory_count": 1,
            "oldest_advisory_days": 19
          }
        ],
        "collected": true,
        "malicious": [],
        "truncated": false,
        "by_severity": {
          "high": 4,
          "unknown": 1
        },
        "advisory_count": 9,
        "affected_count": 5,
        "assessed_count": 516,
        "malicious_count": 0,
        "assessed_package": null,
        "unassessed_count": 30,
        "direct_affected_count": 1
      },
      "ecosystems": [
        "crates",
        "go",
        "npm",
        "pypi"
      ],
      "dependencies": [
        {
          "name": "github.com/go-jose/go-jose/v4",
          "manifest": "go/go.mod",
          "ecosystem": "go",
          "version_constraint": "v4.1.4"
        },
        {
          "name": "github.com/google/uuid",
          "manifest": "go/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.6.0"
        },
        {
          "name": "golang.org/x/crypto",
          "manifest": "go/go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.54.0"
        },
        {
          "name": "github.com/coder/websocket",
          "manifest": "go/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.8.15"
        },
        {
          "name": "node-jose",
          "manifest": "node/package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.2.0"
        },
        {
          "name": "node-kms",
          "manifest": "node/package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.4.1"
        },
        {
          "name": "undici",
          "manifest": "node/package.json",
          "ecosystem": "npm",
          "version_constraint": "^8.7.0"
        },
        {
          "name": "aiohttp",
          "manifest": "python/pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=3.14.1"
        },
        {
          "name": "cryptography",
          "manifest": "python/pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=48.0.1"
        },
        {
          "name": "jwcrypto",
          "manifest": "python/pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=1.5.7"
        },
        {
          "name": "tokio",
          "manifest": "rust/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        },
        {
          "name": "tokio-tungstenite",
          "manifest": "rust/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.24"
        },
        {
          "name": "reqwest",
          "manifest": "rust/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.12"
        },
        {
          "name": "serde",
          "manifest": "rust/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        },
        {
          "name": "serde_json",
          "manifest": "rust/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        },
        {
          "name": "uuid",
          "manifest": "rust/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        },
        {
          "name": "thiserror",
          "manifest": "rust/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "2"
        },
        {
          "name": "tracing",
          "manifest": "rust/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.1"
        },
        {
          "name": "url",
          "manifest": "rust/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "2"
        },
        {
          "name": "futures-util",
          "manifest": "rust/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.3"
        },
        {
          "name": "base64",
          "manifest": "rust/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.22"
        },
        {
          "name": "p256",
          "manifest": "rust/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.13"
        },
        {
          "name": "hkdf",
          "manifest": "rust/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.12"
        },
        {
          "name": "sha1",
          "manifest": "rust/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.10"
        },
        {
          "name": "sha2",
          "manifest": "rust/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.10"
        },
        {
          "name": "rand",
          "manifest": "rust/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.8"
        },
        {
          "name": "aes-gcm",
          "manifest": "rust/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.10"
        },
        {
          "name": "aes-kw",
          "manifest": "rust/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.2"
        },
        {
          "name": "rsa",
          "manifest": "rust/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.9"
        },
        {
          "name": "regex",
          "manifest": "rust/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        },
        {
          "name": "once_cell",
          "manifest": "rust/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        }
      ],
      "all_dependencies": {
        "error": null,
        "source": "github-sbom",
        "packages": [
          {
            "name": "aes-gcm",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "aes-kw",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "base64",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "futures-util",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "hkdf",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "once_cell",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "p256",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "rand",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "regex",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "reqwest",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "rsa",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "serde",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "serde_json",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "sha1",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "sha2",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "thiserror",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "tokio",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "tokio-tungstenite",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "tracing",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "url",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "uuid",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "github.com/coder/websocket",
            "direct": true,
            "version": "v1.8.15",
            "ecosystem": "go"
          },
          {
            "name": "github.com/go-jose/go-jose/v4",
            "direct": true,
            "version": "v4.1.4",
            "ecosystem": "go"
          },
          {
            "name": "github.com/google/uuid",
            "direct": true,
            "version": "v1.6.0",
            "ecosystem": "go"
          },
          {
            "name": "golang.org/x/crypto",
            "direct": true,
            "version": "v0.54.0",
            "ecosystem": "go"
          },
          {
            "name": "node-jose",
            "direct": true,
            "version": "2.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "node-kms",
            "direct": true,
            "version": "0.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "undici",
            "direct": true,
            "version": "8.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "aiohttp",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "cryptography",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "jwcrypto",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "tracing-subscriber",
            "direct": false,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "wiremock",
            "direct": false,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "@babel/code-frame",
            "direct": false,
            "version": "7.29.0",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/code-frame",
            "direct": false,
            "version": "8.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/compat-data",
            "direct": false,
            "version": "8.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/core",
            "direct": false,
            "version": "8.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/generator",
            "direct": false,
            "version": "7.29.1",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/generator",
            "direct": false,
            "version": "8.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-compilation-targets",
            "direct": false,
            "version": "8.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-globals",
            "direct": false,
            "version": "8.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-plugin-utils",
            "direct": false,
            "version": "7.28.6",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-string-parser",
            "direct": false,
            "version": "7.27.1",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-string-parser",
            "direct": false,
            "version": "8.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-validator-identifier",
            "direct": false,
            "version": "7.28.5",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-validator-identifier",
            "direct": false,
            "version": "8.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-validator-option",
            "direct": false,
            "version": "8.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helpers",
            "direct": false,
            "version": "8.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/parser",
            "direct": false,
            "version": "7.29.2",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/parser",
            "direct": false,
            "version": "8.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-syntax-async-generators",
            "direct": false,
            "version": "7.8.4",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-syntax-bigint",
            "direct": false,
            "version": "7.8.3",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-syntax-class-properties",
            "direct": false,
            "version": "7.12.13",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-syntax-class-static-block",
            "direct": false,
            "version": "7.14.5",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-syntax-import-attributes",
            "direct": false,
            "version": "7.28.6",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-syntax-import-meta",
            "direct": false,
            "version": "7.10.4",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-syntax-json-strings",
            "direct": false,
            "version": "7.8.3",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-syntax-jsx",
            "direct": false,
            "version": "7.28.6",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-syntax-logical-assignment-operators",
            "direct": false,
            "version": "7.10.4",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-syntax-nullish-coalescing-operator",
            "direct": false,
            "version": "7.8.3",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-syntax-numeric-separator",
            "direct": false,
            "version": "7.10.4",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-syntax-object-rest-spread",
            "direct": false,
            "version": "7.8.3",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-syntax-optional-catch-binding",
            "direct": false,
            "version": "7.8.3",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-syntax-optional-chaining",
            "direct": false,
            "version": "7.8.3",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-syntax-private-property-in-object",
            "direct": false,
            "version": "7.14.5",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-syntax-top-level-await",
            "direct": false,
            "version": "7.14.5",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-syntax-typescript",
            "direct": false,
            "version": "7.28.6",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/template",
            "direct": false,
            "version": "7.28.6",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/template",
            "direct": false,
            "version": "8.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/traverse",
            "direct": false,
            "version": "8.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/types",
            "direct": false,
            "version": "7.29.0",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/types",
            "direct": false,
            "version": "8.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "@bcoe/v8-coverage",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@cspotcode/source-map-support",
            "direct": false,
            "version": "0.8.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/aix-ppc64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/android-arm",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/android-arm64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/android-x64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/darwin-arm64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/darwin-x64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/freebsd-arm64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/freebsd-x64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-arm",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-arm64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-ia32",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-loong64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-mips64el",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-ppc64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-riscv64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-s390x",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-x64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/netbsd-arm64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/netbsd-x64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/openbsd-arm64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/openbsd-x64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/openharmony-arm64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/sunos-x64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/win32-arm64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/win32-ia32",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/win32-x64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@eslint-community/eslint-utils",
            "direct": false,
            "version": "4.9.1",
            "ecosystem": "npm"
          },
          {
            "name": "@eslint-community/regexpp",
            "direct": false,
            "version": "4.12.2",
            "ecosystem": "npm"
          },
          {
            "name": "@eslint/eslintrc",
            "direct": false,
            "version": "2.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "@eslint/js",
            "direct": false,
            "version": "8.57.0",
            "ecosystem": "npm"
          },
          {
            "name": "@humanwhocodes/config-array",
            "direct": false,
            "version": "0.11.14",
            "ecosystem": "npm"
          },
          {
            "name": "@humanwhocodes/module-importer",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "@humanwhocodes/object-schema",
            "direct": false,
            "version": "2.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "@istanbuljs/load-nyc-config",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "@istanbuljs/schema",
            "direct": false,
            "version": "0.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "@jest/console",
            "direct": false,
            "version": "29.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "@jest/core",
            "direct": false,
            "version": "29.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "@jest/environment",
            "direct": false,
            "version": "29.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "@jest/expect",
            "direct": false,
            "version": "29.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "@jest/expect-utils",
            "direct": false,
            "version": "29.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "@jest/fake-timers",
            "direct": false,
            "version": "29.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "@jest/globals",
            "direct": false,
            "version": "29.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "@jest/pattern",
            "direct": false,
            "version": "30.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "@jest/reporters",
            "direct": false,
            "version": "29.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "@jest/schemas",
            "direct": false,
            "version": "29.6.3",
            "ecosystem": "npm"
          },
          {
            "name": "@jest/schemas",
            "direct": false,
            "version": "30.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "@jest/source-map",
            "direct": false,
            "version": "29.6.3",
            "ecosystem": "npm"
          },
          {
            "name": "@jest/test-result",
            "direct": false,
            "version": "29.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "@jest/test-sequencer",
            "direct": false,
            "version": "29.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "@jest/transform",
            "direct": false,
            "version": "29.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "@jest/transform",
            "direct": false,
            "version": "30.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "@jest/types",
            "direct": false,
            "version": "29.6.3",
            "ecosystem": "npm"
          },
          {
            "name": "@jest/types",
            "direct": false,
            "version": "30.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "@jridgewell/gen-mapping",
            "direct": false,
            "version": "0.3.13",
            "ecosystem": "npm"
          },
          {
            "name": "@jridgewell/resolve-uri",
            "direct": false,
            "version": "3.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "@jridgewell/sourcemap-codec",
            "direct": false,
            "version": "1.5.5",
            "ecosystem": "npm"
          },
          {
            "name": "@jridgewell/trace-mapping",
            "direct": false,
            "version": "0.3.31",
            "ecosystem": "npm"
          },
          {
            "name": "@jridgewell/trace-mapping",
            "direct": false,
            "version": "0.3.9",
            "ecosystem": "npm"
          },
          {
            "name": "@nodelib/fs.scandir",
            "direct": false,
            "version": "2.1.5",
            "ecosystem": "npm"
          },
          {
            "name": "@nodelib/fs.stat",
            "direct": false,
            "version": "2.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "@nodelib/fs.walk",
            "direct": false,
            "version": "1.2.8",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-android-arm-eabi",
            "direct": false,
            "version": "4.60.0",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-android-arm64",
            "direct": false,
            "version": "4.60.0",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-darwin-arm64",
            "direct": false,
            "version": "4.60.0",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-darwin-x64",
            "direct": false,
            "version": "4.60.0",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-freebsd-arm64",
            "direct": false,
            "version": "4.60.0",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-freebsd-x64",
            "direct": false,
            "version": "4.60.0",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-linux-arm-gnueabihf",
            "direct": false,
            "version": "4.60.0",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-linux-arm-musleabihf",
            "direct": false,
            "version": "4.60.0",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-linux-arm64-gnu",
            "direct": false,
            "version": "4.60.0",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-linux-arm64-musl",
            "direct": false,
            "version": "4.60.0",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-linux-loong64-gnu",
            "direct": false,
            "version": "4.60.0",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-linux-loong64-musl",
            "direct": false,
            "version": "4.60.0",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-linux-ppc64-gnu",
            "direct": false,
            "version": "4.60.0",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-linux-ppc64-musl",
            "direct": false,
            "version": "4.60.0",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-linux-riscv64-gnu",
            "direct": false,
            "version": "4.60.0",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-linux-riscv64-musl",
            "direct": false,
            "version": "4.60.0",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-linux-s390x-gnu",
            "direct": false,
            "version": "4.60.0",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-linux-x64-gnu",
            "direct": false,
            "version": "4.60.0",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-linux-x64-musl",
            "direct": false,
            "version": "4.60.0",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-openbsd-x64",
            "direct": false,
            "version": "4.60.0",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-openharmony-arm64",
            "direct": false,
            "version": "4.60.0",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-win32-arm64-msvc",
            "direct": false,
            "version": "4.60.0",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-win32-ia32-msvc",
            "direct": false,
            "version": "4.60.0",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-win32-x64-gnu",
            "direct": false,
            "version": "4.60.0",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-win32-x64-msvc",
            "direct": false,
            "version": "4.60.0",
            "ecosystem": "npm"
          },
          {
            "name": "@sinclair/typebox",
            "direct": false,
            "version": "0.27.10",
            "ecosystem": "npm"
          },
          {
            "name": "@sinclair/typebox",
            "direct": false,
            "version": "0.34.48",
            "ecosystem": "npm"
          },
          {
            "name": "@sinonjs/commons",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "@sinonjs/fake-timers",
            "direct": false,
            "version": "10.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "@tsconfig/node10",
            "direct": false,
            "version": "1.0.12",
            "ecosystem": "npm"
          },
          {
            "name": "@tsconfig/node12",
            "direct": false,
            "version": "1.0.11",
            "ecosystem": "npm"
          },
          {
            "name": "@tsconfig/node14",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "@tsconfig/node16",
            "direct": false,
            "version": "1.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "@types/babel__core",
            "direct": false,
            "version": "7.20.5",
            "ecosystem": "npm"
          },
          {
            "name": "@types/babel__generator",
            "direct": false,
            "version": "7.27.0",
            "ecosystem": "npm"
          },
          {
            "name": "@types/babel__template",
            "direct": false,
            "version": "7.4.4",
            "ecosystem": "npm"
          },
          {
            "name": "@types/babel__traverse",
            "direct": false,
            "version": "7.28.0",
            "ecosystem": "npm"
          },
          {
            "name": "@types/estree",
            "direct": false,
            "version": "1.0.8",
            "ecosystem": "npm"
          },
          {
            "name": "@types/gensync",
            "direct": false,
            "version": "1.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "@types/graceful-fs",
            "direct": false,
            "version": "4.1.9",
            "ecosystem": "npm"
          },
          {
            "name": "@types/istanbul-lib-coverage",
            "direct": false,
            "version": "2.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "@types/istanbul-lib-report",
            "direct": false,
            "version": "3.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "@types/istanbul-reports",
            "direct": false,
            "version": "3.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "@types/jest",
            "direct": false,
            "version": "29.5.14",
            "ecosystem": "npm"
          },
          {
            "name": "@types/jsesc",
            "direct": false,
            "version": "2.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "@types/node",
            "direct": false,
            "version": "22.13.4",
            "ecosystem": "npm"
          },
          {
            "name": "@types/node",
            "direct": false,
            "version": "25.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "@types/stack-utils",
            "direct": false,
            "version": "2.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "@types/yargs",
            "direct": false,
            "version": "17.0.35",
            "ecosystem": "npm"
          },
          {
            "name": "@types/yargs-parser",
            "direct": false,
            "version": "21.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/eslint-plugin",
            "direct": false,
            "version": "8.57.2",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/parser",
            "direct": false,
            "version": "8.57.2",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/project-service",
            "direct": false,
            "version": "8.57.2",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/scope-manager",
            "direct": false,
            "version": "8.57.2",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/tsconfig-utils",
            "direct": false,
            "version": "8.57.2",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/type-utils",
            "direct": false,
            "version": "8.57.2",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/types",
            "direct": false,
            "version": "8.57.2",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/typescript-estree",
            "direct": false,
            "version": "8.57.2",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/utils",
            "direct": false,
            "version": "8.57.2",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/visitor-keys",
            "direct": false,
            "version": "8.57.2",
            "ecosystem": "npm"
          },
          {
            "name": "@ungap/structured-clone",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "acorn",
            "direct": false,
            "version": "8.16.0",
            "ecosystem": "npm"
          },
          {
            "name": "acorn-jsx",
            "direct": false,
            "version": "5.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "acorn-walk",
            "direct": false,
            "version": "8.3.5",
            "ecosystem": "npm"
          },
          {
            "name": "ajv",
            "direct": false,
            "version": "6.14.0",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-escapes",
            "direct": false,
            "version": "4.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-regex",
            "direct": false,
            "version": "5.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-styles",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-styles",
            "direct": false,
            "version": "5.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "any-promise",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "anymatch",
            "direct": false,
            "version": "3.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "arg",
            "direct": false,
            "version": "4.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "argparse",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "babel-jest",
            "direct": false,
            "version": "29.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "babel-jest",
            "direct": false,
            "version": "30.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "babel-plugin-istanbul",
            "direct": false,
            "version": "6.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "babel-plugin-istanbul",
            "direct": false,
            "version": "7.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "babel-plugin-jest-hoist",
            "direct": false,
            "version": "29.6.3",
            "ecosystem": "npm"
          },
          {
            "name": "babel-plugin-jest-hoist",
            "direct": false,
            "version": "30.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "babel-preset-current-node-syntax",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "babel-preset-jest",
            "direct": false,
            "version": "29.6.3",
            "ecosystem": "npm"
          },
          {
            "name": "babel-preset-jest",
            "direct": false,
            "version": "30.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "balanced-match",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "balanced-match",
            "direct": false,
            "version": "4.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "base64-js",
            "direct": false,
            "version": "1.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "base64url",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "baseline-browser-mapping",
            "direct": false,
            "version": "2.10.11",
            "ecosystem": "npm"
          },
          {
            "name": "brace-expansion",
            "direct": false,
            "version": "1.1.13",
            "ecosystem": "npm"
          },
          {
            "name": "brace-expansion",
            "direct": false,
            "version": "5.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "braces",
            "direct": false,
            "version": "3.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "browserslist",
            "direct": false,
            "version": "4.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "bs-logger",
            "direct": false,
            "version": "0.2.6",
            "ecosystem": "npm"
          },
          {
            "name": "bser",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "buffer",
            "direct": false,
            "version": "6.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "buffer-from",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "bundle-require",
            "direct": false,
            "version": "5.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "cac",
            "direct": false,
            "version": "6.7.14",
            "ecosystem": "npm"
          },
          {
            "name": "callsites",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "camelcase",
            "direct": false,
            "version": "5.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "camelcase",
            "direct": false,
            "version": "6.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "caniuse-lite",
            "direct": false,
            "version": "1.0.30001781",
            "ecosystem": "npm"
          },
          {
            "name": "chalk",
            "direct": false,
            "version": "4.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "char-regex",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "chokidar",
            "direct": false,
            "version": "4.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "ci-info",
            "direct": false,
            "version": "3.9.0",
            "ecosystem": "npm"
          },
          {
            "name": "ci-info",
            "direct": false,
            "version": "4.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "cjs-module-lexer",
            "direct": false,
            "version": "1.4.3",
            "ecosystem": "npm"
          },
          {
            "name": "cliui",
            "direct": false,
            "version": "8.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "co",
            "direct": false,
            "version": "4.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "collect-v8-coverage",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "color-convert",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "color-name",
            "direct": false,
            "version": "1.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "commander",
            "direct": false,
            "version": "4.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "concat-map",
            "direct": false,
            "version": "0.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "confbox",
            "direct": false,
            "version": "0.1.8",
            "ecosystem": "npm"
          },
          {
            "name": "consola",
            "direct": false,
            "version": "3.4.2",
            "ecosystem": "npm"
          },
          {
            "name": "convert-source-map",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "create-jest",
            "direct": false,
            "version": "29.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "create-require",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "cross-spawn",
            "direct": false,
            "version": "7.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "debug",
            "direct": false,
            "version": "4.4.3",
            "ecosystem": "npm"
          },
          {
            "name": "dedent",
            "direct": false,
            "version": "1.7.2",
            "ecosystem": "npm"
          },
          {
            "name": "deep-is",
            "direct": false,
            "version": "0.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "deepmerge",
            "direct": false,
            "version": "4.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "detect-newline",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "diff",
            "direct": false,
            "version": "4.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "diff-sequences",
            "direct": false,
            "version": "29.6.3",
            "ecosystem": "npm"
          },
          {
            "name": "doctrine",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "electron-to-chromium",
            "direct": false,
            "version": "1.5.328",
            "ecosystem": "npm"
          },
          {
            "name": "emittery",
            "direct": false,
            "version": "0.13.1",
            "ecosystem": "npm"
          },
          {
            "name": "emoji-regex",
            "direct": false,
            "version": "8.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "empathic",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "error-ex",
            "direct": false,
            "version": "1.3.4",
            "ecosystem": "npm"
          },
          {
            "name": "es6-promise",
            "direct": false,
            "version": "2.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "es6-promise",
            "direct": false,
            "version": "4.2.8",
            "ecosystem": "npm"
          },
          {
            "name": "esbuild",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "escalade",
            "direct": false,
            "version": "3.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "escape-string-regexp",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "escape-string-regexp",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "eslint",
            "direct": false,
            "version": "8.57.0",
            "ecosystem": "npm"
          },
          {
            "name": "eslint-scope",
            "direct": false,
            "version": "7.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "eslint-visitor-keys",
            "direct": false,
            "version": "3.4.3",
            "ecosystem": "npm"
          },
          {
            "name": "eslint-visitor-keys",
            "direct": false,
            "version": "5.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "espree",
            "direct": false,
            "version": "9.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "esquery",
            "direct": false,
            "version": "1.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "esrecurse",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "estraverse",
            "direct": false,
            "version": "5.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "esutils",
            "direct": false,
            "version": "2.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "execa",
            "direct": false,
            "version": "5.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "exit",
            "direct": false,
            "version": "0.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "expect",
            "direct": false,
            "version": "29.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "fast-deep-equal",
            "direct": false,
            "version": "3.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "fast-json-stable-stringify",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "fast-levenshtein",
            "direct": false,
            "version": "2.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "fastq",
            "direct": false,
            "version": "1.20.1",
            "ecosystem": "npm"
          },
          {
            "name": "fb-watchman",
            "direct": false,
            "version": "2.0.2",
            "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.1.1",
            "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": "fix-dts-default-cjs-exports",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "flat-cache",
            "direct": false,
            "version": "3.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "flatted",
            "direct": false,
            "version": "3.4.2",
            "ecosystem": "npm"
          },
          {
            "name": "fs.realpath",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "fsevents",
            "direct": false,
            "version": "2.3.3",
            "ecosystem": "npm"
          },
          {
            "name": "function-bind",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "gensync",
            "direct": false,
            "version": "1.0.0-beta.2",
            "ecosystem": "npm"
          },
          {
            "name": "get-caller-file",
            "direct": false,
            "version": "2.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "get-package-type",
            "direct": false,
            "version": "0.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "get-stream",
            "direct": false,
            "version": "6.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "get-tsconfig",
            "direct": false,
            "version": "4.13.7",
            "ecosystem": "npm"
          },
          {
            "name": "glob",
            "direct": false,
            "version": "7.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "glob-parent",
            "direct": false,
            "version": "6.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "globals",
            "direct": false,
            "version": "13.24.0",
            "ecosystem": "npm"
          },
          {
            "name": "graceful-fs",
            "direct": false,
            "version": "4.2.11",
            "ecosystem": "npm"
          },
          {
            "name": "graphemer",
            "direct": false,
            "version": "1.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "handlebars",
            "direct": false,
            "version": "4.7.9",
            "ecosystem": "npm"
          },
          {
            "name": "has-flag",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "hasown",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "html-escaper",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "human-signals",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "ieee754",
            "direct": false,
            "version": "1.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "ignore",
            "direct": false,
            "version": "5.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "ignore",
            "direct": false,
            "version": "7.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "import-fresh",
            "direct": false,
            "version": "3.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "import-local",
            "direct": false,
            "version": "3.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "import-meta-resolve",
            "direct": false,
            "version": "4.2.0",
            "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": "is-arrayish",
            "direct": false,
            "version": "0.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "is-core-module",
            "direct": false,
            "version": "2.16.1",
            "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-generator-fn",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-glob",
            "direct": false,
            "version": "4.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "is-number",
            "direct": false,
            "version": "7.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-path-inside",
            "direct": false,
            "version": "3.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "is-stream",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "isexe",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "istanbul-lib-coverage",
            "direct": false,
            "version": "3.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "istanbul-lib-instrument",
            "direct": false,
            "version": "5.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "istanbul-lib-instrument",
            "direct": false,
            "version": "6.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "istanbul-lib-report",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "istanbul-lib-source-maps",
            "direct": false,
            "version": "4.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "istanbul-reports",
            "direct": false,
            "version": "3.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "jest",
            "direct": false,
            "version": "29.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "jest-changed-files",
            "direct": false,
            "version": "29.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "jest-circus",
            "direct": false,
            "version": "29.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "jest-cli",
            "direct": false,
            "version": "29.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "jest-config",
            "direct": false,
            "version": "29.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "jest-diff",
            "direct": false,
            "version": "29.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "jest-docblock",
            "direct": false,
            "version": "29.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "jest-each",
            "direct": false,
            "version": "29.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "jest-environment-node",
            "direct": false,
            "version": "29.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "jest-get-type",
            "direct": false,
            "version": "29.6.3",
            "ecosystem": "npm"
          },
          {
            "name": "jest-haste-map",
            "direct": false,
            "version": "29.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "jest-haste-map",
            "direct": false,
            "version": "30.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "jest-leak-detector",
            "direct": false,
            "version": "29.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "jest-matcher-utils",
            "direct": false,
            "version": "29.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "jest-message-util",
            "direct": false,
            "version": "29.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "jest-mock",
            "direct": false,
            "version": "29.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "jest-pnp-resolver",
            "direct": false,
            "version": "1.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "jest-regex-util",
            "direct": false,
            "version": "29.6.3",
            "ecosystem": "npm"
          },
          {
            "name": "jest-regex-util",
            "direct": false,
            "version": "30.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "jest-resolve",
            "direct": false,
            "version": "29.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "jest-resolve-dependencies",
            "direct": false,
            "version": "29.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "jest-runner",
            "direct": false,
            "version": "29.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "jest-runtime",
            "direct": false,
            "version": "29.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "jest-snapshot",
            "direct": false,
            "version": "29.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "jest-util",
            "direct": false,
            "version": "29.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "jest-util",
            "direct": false,
            "version": "30.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "jest-validate",
            "direct": false,
            "version": "29.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "jest-watcher",
            "direct": false,
            "version": "29.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "jest-worker",
            "direct": false,
            "version": "29.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "jest-worker",
            "direct": false,
            "version": "30.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "jiti",
            "direct": false,
            "version": "2.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "joycon",
            "direct": false,
            "version": "3.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "js-tokens",
            "direct": false,
            "version": "10.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "js-tokens",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "js-yaml",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "jsesc",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "json-buffer",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "json-parse-even-better-errors",
            "direct": false,
            "version": "2.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "json-schema-traverse",
            "direct": false,
            "version": "0.4.1",
            "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": "keyv",
            "direct": false,
            "version": "4.5.4",
            "ecosystem": "npm"
          },
          {
            "name": "kleur",
            "direct": false,
            "version": "3.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "leven",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "levn",
            "direct": false,
            "version": "0.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "lilconfig",
            "direct": false,
            "version": "3.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "lines-and-columns",
            "direct": false,
            "version": "1.2.4",
            "ecosystem": "npm"
          },
          {
            "name": "load-tsconfig",
            "direct": false,
            "version": "0.2.5",
            "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.18.1",
            "ecosystem": "npm"
          },
          {
            "name": "lodash._arraycopy",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "lodash._arrayeach",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "lodash._baseassign",
            "direct": false,
            "version": "3.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "lodash._baseclone",
            "direct": false,
            "version": "3.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "lodash._basecopy",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "lodash._basefor",
            "direct": false,
            "version": "3.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "lodash._bindcallback",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "lodash._getnative",
            "direct": false,
            "version": "3.9.1",
            "ecosystem": "npm"
          },
          {
            "name": "lodash._isiterateecall",
            "direct": false,
            "version": "3.0.9",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.clone",
            "direct": false,
            "version": "3.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.clonedeep",
            "direct": false,
            "version": "3.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.isarguments",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.isarray",
            "direct": false,
            "version": "3.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.keys",
            "direct": false,
            "version": "3.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.memoize",
            "direct": false,
            "version": "4.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.merge",
            "direct": false,
            "version": "4.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "long",
            "direct": false,
            "version": "5.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "lru-cache",
            "direct": false,
            "version": "11.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "magic-string",
            "direct": false,
            "version": "0.30.21",
            "ecosystem": "npm"
          },
          {
            "name": "make-dir",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "make-error",
            "direct": false,
            "version": "1.3.6",
            "ecosystem": "npm"
          },
          {
            "name": "makeerror",
            "direct": false,
            "version": "1.0.12",
            "ecosystem": "npm"
          },
          {
            "name": "merge-stream",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "micromatch",
            "direct": false,
            "version": "4.0.8",
            "ecosystem": "npm"
          },
          {
            "name": "mimic-fn",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "minimatch",
            "direct": false,
            "version": "10.2.4",
            "ecosystem": "npm"
          },
          {
            "name": "minimatch",
            "direct": false,
            "version": "3.1.5",
            "ecosystem": "npm"
          },
          {
            "name": "minimist",
            "direct": false,
            "version": "1.2.8",
            "ecosystem": "npm"
          },
          {
            "name": "mlly",
            "direct": false,
            "version": "1.8.2",
            "ecosystem": "npm"
          },
          {
            "name": "ms",
            "direct": false,
            "version": "2.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "mz",
            "direct": false,
            "version": "2.7.0",
            "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-forge",
            "direct": false,
            "version": "1.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "node-int64",
            "direct": false,
            "version": "0.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "node-releases",
            "direct": false,
            "version": "2.0.36",
            "ecosystem": "npm"
          },
          {
            "name": "normalize-path",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "npm-run-path",
            "direct": false,
            "version": "4.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "object-assign",
            "direct": false,
            "version": "4.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "obug",
            "direct": false,
            "version": "2.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "once",
            "direct": false,
            "version": "1.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "onetime",
            "direct": false,
            "version": "5.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "optionator",
            "direct": false,
            "version": "0.9.4",
            "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": "4.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "p-locate",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "p-try",
            "direct": false,
            "version": "2.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "pako",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "parent-module",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "parse-json",
            "direct": false,
            "version": "5.2.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": "pathe",
            "direct": false,
            "version": "2.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "picocolors",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "picomatch",
            "direct": false,
            "version": "2.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "picomatch",
            "direct": false,
            "version": "4.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "pirates",
            "direct": false,
            "version": "4.0.7",
            "ecosystem": "npm"
          },
          {
            "name": "pkg-dir",
            "direct": false,
            "version": "4.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "pkg-types",
            "direct": false,
            "version": "1.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-load-config",
            "direct": false,
            "version": "6.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "prelude-ls",
            "direct": false,
            "version": "1.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "pretty-format",
            "direct": false,
            "version": "29.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "process",
            "direct": false,
            "version": "0.11.10",
            "ecosystem": "npm"
          },
          {
            "name": "prompts",
            "direct": false,
            "version": "2.4.2",
            "ecosystem": "npm"
          },
          {
            "name": "punycode",
            "direct": false,
            "version": "2.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "pure-rand",
            "direct": false,
            "version": "6.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "queue-microtask",
            "direct": false,
            "version": "1.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "react-is",
            "direct": false,
            "version": "18.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "readdirp",
            "direct": false,
            "version": "4.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "require-directory",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "resolve",
            "direct": false,
            "version": "1.22.11",
            "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": "resolve-pkg-maps",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "resolve.exports",
            "direct": false,
            "version": "2.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "reusify",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "rimraf",
            "direct": false,
            "version": "3.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "rollup",
            "direct": false,
            "version": "4.60.0",
            "ecosystem": "npm"
          },
          {
            "name": "run-parallel",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "semver",
            "direct": false,
            "version": "6.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "semver",
            "direct": false,
            "version": "7.7.4",
            "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": "signal-exit",
            "direct": false,
            "version": "3.0.7",
            "ecosystem": "npm"
          },
          {
            "name": "signal-exit",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "sisteransi",
            "direct": false,
            "version": "1.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "slash",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "source-map",
            "direct": false,
            "version": "0.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "source-map",
            "direct": false,
            "version": "0.7.6",
            "ecosystem": "npm"
          },
          {
            "name": "source-map-support",
            "direct": false,
            "version": "0.5.13",
            "ecosystem": "npm"
          },
          {
            "name": "stack-utils",
            "direct": false,
            "version": "2.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "string-length",
            "direct": false,
            "version": "4.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "string-width",
            "direct": false,
            "version": "4.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "strip-ansi",
            "direct": false,
            "version": "6.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "strip-bom",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "strip-final-newline",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "strip-json-comments",
            "direct": false,
            "version": "3.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "sucrase",
            "direct": false,
            "version": "3.35.1",
            "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": "supports-preserve-symlinks-flag",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "test-exclude",
            "direct": false,
            "version": "6.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "text-table",
            "direct": false,
            "version": "0.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "thenify",
            "direct": false,
            "version": "3.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "thenify-all",
            "direct": false,
            "version": "1.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "tinyexec",
            "direct": false,
            "version": "0.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "tinyglobby",
            "direct": false,
            "version": "0.2.15",
            "ecosystem": "npm"
          },
          {
            "name": "tmpl",
            "direct": false,
            "version": "1.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "to-regex-range",
            "direct": false,
            "version": "5.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "tree-kill",
            "direct": false,
            "version": "1.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "ts-api-utils",
            "direct": false,
            "version": "2.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "ts-interface-checker",
            "direct": false,
            "version": "0.1.13",
            "ecosystem": "npm"
          },
          {
            "name": "ts-jest",
            "direct": false,
            "version": "29.4.6",
            "ecosystem": "npm"
          },
          {
            "name": "ts-node",
            "direct": false,
            "version": "10.9.2",
            "ecosystem": "npm"
          },
          {
            "name": "tsup",
            "direct": false,
            "version": "8.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "tsx",
            "direct": false,
            "version": "4.21.0",
            "ecosystem": "npm"
          },
          {
            "name": "type-check",
            "direct": false,
            "version": "0.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "type-detect",
            "direct": false,
            "version": "4.0.8",
            "ecosystem": "npm"
          },
          {
            "name": "type-fest",
            "direct": false,
            "version": "0.20.2",
            "ecosystem": "npm"
          },
          {
            "name": "type-fest",
            "direct": false,
            "version": "0.21.3",
            "ecosystem": "npm"
          },
          {
            "name": "type-fest",
            "direct": false,
            "version": "4.41.0",
            "ecosystem": "npm"
          },
          {
            "name": "typescript",
            "direct": false,
            "version": "5.9.3",
            "ecosystem": "npm"
          },
          {
            "name": "ufo",
            "direct": false,
            "version": "1.6.3",
            "ecosystem": "npm"
          },
          {
            "name": "uglify-js",
            "direct": false,
            "version": "3.19.3",
            "ecosystem": "npm"
          },
          {
            "name": "undici-types",
            "direct": false,
            "version": "6.20.0",
            "ecosystem": "npm"
          },
          {
            "name": "undici-types",
            "direct": false,
            "version": "7.18.2",
            "ecosystem": "npm"
          },
          {
            "name": "update-browserslist-db",
            "direct": false,
            "version": "1.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "uri-js",
            "direct": false,
            "version": "4.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "uuid",
            "direct": false,
            "version": "11.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "uuid",
            "direct": false,
            "version": "2.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "v8-compile-cache-lib",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "v8-to-istanbul",
            "direct": false,
            "version": "9.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "walker",
            "direct": false,
            "version": "1.0.8",
            "ecosystem": "npm"
          },
          {
            "name": "which",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "word-wrap",
            "direct": false,
            "version": "1.2.5",
            "ecosystem": "npm"
          },
          {
            "name": "wordwrap",
            "direct": false,
            "version": "1.0.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": "write-file-atomic",
            "direct": false,
            "version": "4.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "write-file-atomic",
            "direct": false,
            "version": "5.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "y18n",
            "direct": false,
            "version": "5.0.8",
            "ecosystem": "npm"
          },
          {
            "name": "yargs",
            "direct": false,
            "version": "17.7.2",
            "ecosystem": "npm"
          },
          {
            "name": "yargs-parser",
            "direct": false,
            "version": "21.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "yn",
            "direct": false,
            "version": "3.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "yocto-queue",
            "direct": false,
            "version": "0.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "mypy",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "pytest",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "pytest-asyncio",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "ruff",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          }
        ],
        "collected": true,
        "truncated": false,
        "total_count": 546,
        "direct_count": 31,
        "indirect_count": 515
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 2,
        "merged_prs": 2,
        "open_issues": 1,
        "closed_ratio": 0.923,
        "closed_issues": 12,
        "closed_unmerged_prs": 10
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "3rg0n",
          "commits": 95,
          "avatar_url": "https://avatars.githubusercontent.com/u/62959009?v=4"
        },
        {
          "type": "User",
          "login": "ojaber",
          "commits": 2,
          "avatar_url": "https://avatars.githubusercontent.com/u/468248?v=4"
        }
      ],
      "contributors_sampled": 2,
      "top_contributor_share": 0.979
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "codeql.yml",
        "integration-tests.yml",
        "publish.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [
        ".eslintrc.cjs"
      ],
      "has_editorconfig": false,
      "has_linter_config": true,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "go.sum",
        "pnpm-lock.yaml"
      ],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 10,
            "reason": "no binaries found in the repo",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": 0,
            "reason": "branch protection not enabled on development/release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": 0,
            "reason": "0 out of 1 merged PRs checked by a CI test -- score normalized to 0",
            "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/28 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 3,
            "reason": "project has 1 contributing companies or organizations -- score normalized to 3",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 10,
            "reason": "no dangerous workflow patterns detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 0,
            "reason": "no update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 10,
            "reason": "10 commit(s) and 5 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": 7,
            "reason": "SAST tool detected but not run on all commits",
            "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": 3,
            "reason": "7 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "fbf1c62c1a51ead882975b4f367f63f6b2e3ad9e",
        "ran_at": "2026-07-27T14:07:02Z",
        "aggregate_score": 4.3,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": true,
      "has_security_policy": false,
      "has_dependabot_config": false
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-27T07:51:30Z",
      "oldest_open_prs": [
        {
          "number": 18,
          "created_at": "2026-04-27T19:27:29Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 19,
          "created_at": "2026-04-28T02:55:02Z",
          "last_comment_at": "2026-04-28T05:15:53Z",
          "last_comment_author": "ojaber"
        }
      ],
      "last_merged_pr_at": "2026-04-13T15:14:16Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": [
        {
          "number": 26,
          "created_at": "2026-07-18T20:41:36Z",
          "last_comment_at": null,
          "last_comment_author": null
        }
      ]
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/3rg0n/webex-message-handler",
    "host": "github.com",
    "name": "webex-message-handler",
    "owner": "3rg0n"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 59,
      "inputs": {
        "security": 52,
        "vitality": 83,
        "community": 39,
        "governance": 49,
        "engineering": 68
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "good",
        "name": "Vitality",
        "value": 83,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "good",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 71,
            "inputs": {
              "commits_last_year": 97,
              "human_commit_share": 1,
              "days_since_last_push": 3,
              "active_weeks_last_year": 10
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 3 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 3
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "10/52 weeks with commits",
                "points": 6.9,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 10
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "97 commits in the last year",
                "points": 17.9,
                "status": "partial",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 97
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "10 commit(s) and 5 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": 100,
            "inputs": {
              "releases_count": 37,
              "latest_release_tag": "v0.6.14",
              "releases_from_tags": false,
              "days_since_latest_release": 5,
              "mean_days_between_releases": 11
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "37 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 37
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 5 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 5
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~11 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 11
                    }
                  }
                ],
                "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": "unverified",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": "repository_too_young",
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": null,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "maintenance record not established from the collected data",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_unverified",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "at_risk",
        "name": "Community & Adoption",
        "value": 39,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "critical",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 1,
            "inputs": {
              "forks": 2,
              "stars": 0,
              "watchers": 0,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "0 stars",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "2 forks",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "0 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "good",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 70,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": true,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (MIT)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "MIT"
                    }
                  }
                ],
                "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": 0,
                "status": "missed",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.3
              }
            ]
          },
          {
            "key": "ecosystem_adoption",
            "band": "moderate",
            "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": 56,
            "inputs": {
              "packages": [
                "github.com/3rg0n/webex-message-handler/go",
                "webex-message-handler",
                "webex-message-handler",
                "webex-message-handler"
              ],
              "dependents": null,
              "ecosystems": "crates, go, npm, pypi",
              "total_downloads": 400,
              "monthly_downloads": 2405
            },
            "components": [
              {
                "key": "monthly_downloads",
                "name": "Monthly downloads",
                "detail": "2,405 downloads/month across crates, go, npm, pypi",
                "points": 45.1,
                "status": "partial",
                "details": [
                  {
                    "code": "downloads_monthly",
                    "params": {
                      "count": 2405,
                      "ecosystems": "crates, go, npm, pypi"
                    }
                  }
                ],
                "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": "at_risk",
        "name": "Sustainability & Governance",
        "value": 49,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 15,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 2,
              "top_contributor_share": 0.979
            },
            "components": [
              {
                "key": "bus_factor",
                "name": "Bus factor",
                "detail": "1 contributor(s) cover half of all commits",
                "points": 9,
                "status": "partial",
                "details": [
                  {
                    "code": "bus_factor",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 54
              },
              {
                "key": "commit_distribution",
                "name": "Commit distribution",
                "detail": "top contributor authored 98% of commits",
                "points": 0.5,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 98
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "2 contributors",
                "points": 2.7,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 1 contributing companies or organizations -- score normalized to 3",
                "points": 3,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "moderate",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 50,
            "inputs": {
              "merged_prs": 2,
              "open_issues": 1,
              "closed_issues": 12,
              "issue_closed_ratio": 0.923,
              "closed_unmerged_prs": 10
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "92% of issues closed",
                "points": 43.2,
                "status": "partial",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 92
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "2/12 decided PRs merged",
                "points": 6.4,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 2,
                      "decided": 12
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 1/28 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "at_risk",
            "name": "Ownership & stewardship",
            "note": "Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "verified_domain"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 47,
            "inputs": {
              "followers": 6,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "3rg0n",
              "public_repos": 18,
              "account_age_days": 2308
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "personal (user) account",
                "points": 10,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_personal",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": "not applicable to user accounts",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_applicable_to_user_accounts",
                    "params": {}
                  }
                ],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "6 followers of 3rg0n",
                "points": 6.1,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 6,
                      "login": "3rg0n"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "18 public repos, account ~6 yr old",
                "points": 21.3,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 18
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 6
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "github.com/3rg0n/webex-message-handler/go",
                "webex-message-handler",
                "webex-message-handler",
                "webex-message-handler"
              ],
              "ecosystems": "crates, go, npm, pypi",
              "any_deprecated": false,
              "min_days_since_publish": 3
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "4 package(s) on crates, go, npm, pypi",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 4,
                      "ecosystems": "crates, go, npm, pypi"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 3 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 3
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "21 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 21
                    }
                  }
                ],
                "max_points": 20
              },
              {
                "key": "not_deprecated",
                "name": "Not deprecated",
                "detail": "active, not deprecated or yanked",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "package_not_deprecated",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "moderate",
        "name": "Engineering Quality",
        "value": 68,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "moderate",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 64,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": true,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "3 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 3
                    }
                  }
                ],
                "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.cjs",
                "points": 16,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".eslintrc.cjs"
                    }
                  }
                ],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "0 out of 1 merged PRs checked by a CI test -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "good",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 75,
            "inputs": {
              "topics": [],
              "has_wiki": true,
              "homepage": null,
              "has_readme": true,
              "has_docs_dir": true,
              "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": 25,
                "status": "met",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "moderate",
        "name": "Security",
        "value": 52,
        "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": 43,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 17,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 1,
              "scorecard_aggregate": 4.3
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "branch protection not enabled on development/release branches",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "0 out of 1 merged PRs checked by a CI test -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "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/28 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 1 contributing companies or organizations -- score normalized to 3",
                "points": 0.8,
                "status": "partial",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "no update tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "10 commit(s) and 5 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 detected but not run on all commits",
                "points": 3.5,
                "status": "partial",
                "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": "7 existing vulnerabilities detected",
                "points": 2.2,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "dependency_advisories",
            "band": "excellent",
            "name": "Dependency advisories",
            "note": "Excluded from scoring (no data or not applicable): Indirect dependencies free of known advisories. Remaining weights renormalized. Matched 516 resolved dependencies against OSV; 30 could not be assessed (no resolved version, an unsupported ecosystem, or beyond the reported package list). 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": 516
                }
              },
              {
                "code": "advisories_unassessed",
                "params": {
                  "count": 30
                }
              },
              {
                "code": "advisories_repo_graph_caveat",
                "params": {}
              },
              {
                "code": "advisories_reachability",
                "params": {}
              }
            ],
            "value": 89,
            "inputs": {
              "source": "osv",
              "advisories": 9,
              "affected_packages": 5,
              "assessed_packages": 516,
              "unassessed_packages": 30,
              "affected_by_severity": "high 4, unknown 1",
              "direct_affected_packages": 1
            },
            "components": [
              {
                "key": "direct_dependencies_free_of_known_advisories",
                "name": "Direct dependencies free of known advisories",
                "detail": "1 affected: golang.org/x/crypto v0.54.0 (unknown)",
                "points": 26.6,
                "status": "partial",
                "details": [
                  {
                    "code": "advisories_affected",
                    "params": {
                      "count": 1,
                      "packages": "golang.org/x/crypto v0.54.0 (unknown)"
                    }
                  }
                ],
                "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": "no advisory has been public longer than 90 days",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "advisories_none_stale",
                    "params": {
                      "days": 90
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "malicious_dependencies",
            "band": "excellent",
            "name": "Malicious dependencies",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "source": "osv",
              "meaning": "reported as a malicious package by the OpenSSF corpus; the remedy is removal or moving off the compromised name, never an upgrade of the same artifact. Versions the registry has since pulled are listed but not scored",
              "packages": [],
              "red_flag": false,
              "assessed_packages": 516,
              "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": 4
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "no confirmed policy-scope location match",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "jurisdiction_no_match",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "moderate",
        "name": "AI Readiness",
        "value": 66,
        "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.979,
              "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": "95 of 97 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 95,
                      "sampled": 97
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "good",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 82,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "go.sum",
                "pnpm-lock.yaml"
              ],
              "has_dockerfile": false,
              "typed_language": true,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": true,
              "typecheck_configs": [
                "node/tsconfig.json"
              ],
              "agent_commit_share": 0.835,
              "toolchain_manifests": [
                "go/go.mod",
                "rust/Cargo.toml"
              ],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "go/go.mod, rust/Cargo.toml (toolchain convention, no task runner)",
                "points": 12.6,
                "status": "partial",
                "details": [
                  {
                    "code": "toolchain_convention",
                    "params": {
                      "files": "go/go.mod, rust/Cargo.toml"
                    }
                  }
                ],
                "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.cjs",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".eslintrc.cjs"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "node/tsconfig.json",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "node/tsconfig.json"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "81 of the last 97 commits agent-authored or agent-credited",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 81,
                      "sampled": 97
                    }
                  }
                ],
                "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": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "primary_language": "TypeScript",
              "largest_source_bytes": 44381,
              "source_files_sampled": 99,
              "oversized_source_files": 0
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "TypeScript (statically typed)",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "TypeScript"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "0/99 source files over 60KB",
                "points": 55,
                "status": "met",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 99,
                      "oversized": 0
                    }
                  }
                ],
                "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": [],
  "report_type": "repository",
  "generated_at": "2026-07-27T14:07:11.709620Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/3/3rg0n/webex-message-handler.svg",
  "full_name": "3rg0n/webex-message-handler",
  "license_state": "standard",
  "license_spdx": "MIT"
}

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

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

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