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

Mininglamp-OSS / cc-channel-octo

Bridge Claude Code (Claude Agent SDK) to Octo IM — independent Node.js gateway

TypeScriptApache-2.0★ 30 зірок⑂ 9 форківз черв. 2026 р.Переглянути на GitHub ↗
ТипБібліотекаяк це визначено

Mininglamp-OSS/cc-channel-octo має індекс здоров’я 81 зі 100, що відповідає смузі «Відмінний». Найвищий показник — Engineering Quality (80/100), найнижчий — Community & Adoption (60/100). Останнє оновлення було 8 днів тому. Більшість нещодавньої роботи виконує один учасник.

81
загалом / 100
Відмінний

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

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

81
Винятковий93-100Верхній щабель реєстру (≈ топ-5%); відповідає практично всім перевіреним критеріям
Відмінний80-92Сильний за всіма напрямами; незначні прогалини
Добрий65-79Здоровий; прогалини обмежені та керовані
Помірний50-64Прийнятний, але з помітними прогалинами; рекомендовано перевірку
Слабкий35-49Суттєві недоліки в кількох сферах
У зоні ризику20-34Суттєві слабкі місця; впровадження потребує обережності
Критичний1-19Серйозні проблеми (покинутий, єдиний мейнтейнер, без базової гігієни)
ЖиттєздатністьСпільнота тавпровадженняСталість таврядуванняІнженернаякістьБезпекаГотовність доШІ

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

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

Зважений загальний бал 69 калібровано до 81 за шкалою опублікованого індексу (калібрування реєстру 2026-08-02).

Власність

MININGLAMP TECHNOLOGYОрганізація
149 підписників36 публічних репозиторіївз трав. 2026 р.

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

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

РеєстрПакетВерсіяЗавантажень / місВерсіїОстання публікація
npm@mininglamp-oss/cc-channel-octo1.0.33 7742833 дні тому

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

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

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

71Добрий · 21% загального індексу
Як обчислюється оцінка
28.8/36Свіжість push — останній push 8 дн. тому
4.2/36Ритм комітів — 6/52 тижнів із комітами
18/18Обсяг комітів — 270 комітів за останній рік
0/10OpenSSF Scorecard: Maintained — project was created within the last 90 days. Please review its contents carefully
Використані вхідні дані
commits_last_year270
human_commit_share1
days_since_last_push8
active_weeks_last_year6
Як обчислюється оцінка
27/27Випускає релізи — опубліковано 6 релізів
36/36Свіжість релізів — останній реліз 33 дн. тому
27/27Ритм релізів — реліз кожні ~4,2 дн.
0/10OpenSSF Scorecard: Signed-Releases — немає даних
Використані вхідні дані
releases_count6
latest_release_tagv1.0.3
releases_from_tagsні
days_since_latest_release33
mean_days_between_releases4,2
Виключено з оцінювання (немає даних або не застосовно): OpenSSF Scorecard: Signed-Releases. Залишкові ваги перенормовано.

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

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

60Помірний · 17% загального індексу
Як обчислюється оцінка
23.7/60Зірки — 30 зірок
7.5/25Форки — 9 форків
0/15Спостерігачі — 0 спостерігачів
Використані вхідні дані
forks9
stars30
watchers0
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Як обчислюється оцінка
22.5/22.5README
22.5/22.5Ліцензія — визнана ліцензія (Apache-2.0)
18/18Настанови CONTRIBUTING
13.5/13.5Кодекс поведінки
0/7.2Шаблон issue
6.3/6.3Шаблон PR
Використані вхідні дані
has_readmeтак
has_licenseтак
readme_badges
has_contributingтак
has_issue_templateні
has_code_of_conductтак
readme_badge_services
has_pull_request_templateтак
Як обчислюється оцінка
47.7/80Щомісячні завантаження — 3 774 завантажень/місяць у npm
0/20Залежні пакети в реєстрі — ця екосистема цього не повідомляє
Використані вхідні дані
packages@mininglamp-oss/cc-channel-octo
dependents
ecosystemsnpm
total_downloads
monthly_downloads3 774
Виключено з оцінювання (немає даних або не застосовно): Залежні пакети в реєстрі. Залишкові ваги перенормовано.

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

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

67Добрий · 23% загального індексу
Як обчислюється оцінка
9/54Бас-фактор — на 1 контриб’ютор(ів) припадає половина всіх комітів
7.6/22.5Розподіл комітів — головний контриб’ютор — автор 66% комітів
9.5/13.5Широта контриб’юторів — 7 контриб’юторів
3/10OpenSSF Scorecard: Contributors — project has 1 contributing companies or organizations -- score normalized to 3
Використані вхідні дані
bus_factor1
contributors_sampled7
top_contributor_share0,66
Як обчислюється оцінка
40.3/42Вирішення issue — закрито 96% issue
28.7/30Прийняття PR — злито 132/138 вирішених PR
0/13Newcomer PR acceptance — за 30 дн. не вирішено жодного PR від новачка
15/15OpenSSF Scorecard: Code-Review — all changesets reviewed
Використані вхідні дані
merged_prs132
open_issues2
closed_issues48
prs_merged_7d
prs_decided_7d
prs_merged_30d
prs_decided_30d
issue_closed_ratio0,96
closed_unmerged_prs6
first_time_authors_30d
first_time_prs_merged_30d
first_time_prs_decided_30d
Виключено з оцінювання (немає даних або не застосовно): newcomer_pr_acceptance. Залишкові ваги перенормовано.
Як обчислюється оцінка
30/30Підтримка власника — у власності організації
0/20Верифікований домен
15.6/25Охоплення власника — 149 підписників у Mininglamp-OSS
11.9/25Послужний список — 36 публічних репозиторіїв, вік облікового запису ~0 р.
Використані вхідні дані
followers149
owner_typeOrganization
is_verified
owner_loginMininglamp-OSS
public_repos36
account_age_days79

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

100Винятковий
Як обчислюється оцінка
25/25Опубліковано й доступно — 1 пакет(ів) у npm
35/35Свіжість публікацій — остання публікація 33 дн. тому
20/20Історія версій — 28 опублікованих версій
20/20Не застарілий — активний, не deprecated і не yanked
Використані вхідні дані
packages@mininglamp-oss/cc-channel-octo
ecosystemsnpm
any_deprecatedні
min_days_since_publish33

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

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

80Відмінний · 19% загального індексу
Як обчислюється оцінка
24/24Процеси CI — 16 процес(ів) CI
24/24Наявні тести
16/16Конфігурація лінтера — eslint.config.js
0/9.6Pre-commit-хуки
0/6.4.editorconfig
20/20OpenSSF Scorecard: CI-Tests — 14 out of 14 merged PRs checked by a CI test -- score normalized to 10
Використані вхідні дані
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так

Безпека

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

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

Стан безпеки

55Помірний
Як обчислюється оцінка
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — немає даних
2.5/2.5CI-Tests — 14 out of 14 merged PRs checked by a CI test -- score normalized to 10
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
7.5/7.5Code-Review — all changesets reviewed
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
0/7.5Maintained — project was created within the last 90 days. Please review its contents carefully
5/5Packaging — packaging workflow detected
2/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 4
0/5SAST — SAST tool is not run on all commits -- score normalized to 0
5/5Security-Policy — security policy file detected
0/7.5Signed-Releases — немає даних
6.8/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
0/7.5Vulnerabilities — 17 existing vulnerabilities detected
Використані вхідні дані
sourceopenssf_scorecard
checks_evaluated16
scorecard_versionv5.5.0
checks_inconclusive2
scorecard_aggregate5,5
Виключено з оцінювання (немає даних або не застосовно): branch_protection, signed_releases. Залишкові ваги перенормовано.
Як обчислюється оцінка
35/35Прямі залежності без відомих сповіщень — жодна пряма залежність не має відомих сповіщень
25/25Непрямі залежності без відомих сповіщень — жодна непряма залежність не має відомих сповіщень
0/40Немає задавнених сповіщень — жодне сповіщення не має дати публікації
Використані вхідні дані
sourceosv
advisories0
affected_packages0
assessed_packages43
unassessed_packages0
affected_by_severitynone
direct_affected_packages0
Виключено з оцінювання (немає даних або не застосовно): Немає задавнених сповіщень. Залишкові ваги перенормовано. Звірено з runtime-замиканням залежностей npm:@mininglamp-oss/cc-channel-octo@1.0.3 — тим, що тягне за собою встановлення опублікованого пакета, — 43 пакетів. Досяжність не аналізується.

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

Наскільки репозиторій оснащений для розробки та супроводу за участі ШІ-агентів? Має свідомо малу вагу (4%): агентний інструментарій — реальний сигнал супроводу, але репозиторій без нього все одно може отримати 100/100.

75Добрий · 4% загального індексу
Як обчислюється оцінка
45/45Інструкції для агентів — CLAUDE.md
0/15Машиночитана документація (llms.txt)
40/40Читабельна історія комітів — намір зазначено у 100 з 100 людських комітів (структурований заголовок або пояснювальний текст)
Використані вхідні дані
has_llms_txtні
legible_history_share1
agent_instruction_filesCLAUDE.md
agent_instruction_max_bytes6 699
Як обчислюється оцінка
0/18Розгортання однією командою
22/22Автоматизовані тести
11/11Конфігурація лінтера / форматера — eslint.config.js
11/11Статична перевірка типів — tsconfig.json
10/10Відтворюване середовище — lockfile
0/10Підтверджена практика роботи з агентами — серед останніх 100 комітів немає створених агентом
0/8Автоматизоване супроводження — автоматичних оновлень залежностей не виявлено
4/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 4
Використані вхідні дані
has_nixні
has_testsтак
lockfilespackage-lock.json
has_dockerfileні
typed_languageтак
bootstrap_files
has_devcontainerні
has_linter_configтак
typecheck_configstsconfig.json
agent_commit_share0
toolchain_manifests
dependency_bot_commit_share0
Як обчислюється оцінка
45/45Типізований код — TypeScript (статично типізована)
54.5/55Керовані розміри файлів — 1/108 файлів вихідного коду понад 60 КБ
Використані вхідні дані
primary_languageTypeScript
largest_source_bytes61 558
source_files_sampled108
oversized_source_files1

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

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

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

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token

Докладніше

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

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

0246810912026-062026-072026-07
Мажорні 1Мінорні 1Патчі 3
OpenSSF Scorecard 5.5 / 10
5.5сукупно

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

10Binary-Artifactsno binaries found in the repo
н/дBranch-Protectioninternal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md
10CI-Tests14 out of 14 merged PRs checked by a CI test -- score normalized to 10
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
10Code-Reviewall changesets reviewed
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
0Maintainedproject was created within the last 90 days. Please review its contents carefully
10Packagingpackaging workflow detected
4Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 4
0SASTSAST tool is not run on all commits -- score normalized to 0
10Security-Policysecurity policy file detected
н/дSigned-Releasesno releases found
9Token-Permissionsdetected GitHub workflow tokens with excessive permissions
0Vulnerabilities17 existing vulnerabilities detected
Прямі залежності 6
РеєстрПакетОбмеження версіїМаніфест
npmbetter-sqlite3^12.10.0package.json
npmcrypto-js^4.2.0package.json
npmcurve25519-js^0.0.4package.json
npmmd5-typescript^1.0.5package.json
npmws^8.16.0package.json
npmzod^4.4.3package.json
Усі залежності 505

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

РеєстрПакетВерсіяЗв'язок
npmbetter-sqlite312.10.0пряма
npmcrypto-js4.2.0пряма
npmcurve25519-js0.0.4пряма
npmmd5-typescript1.0.5пряма
npmws8.21.0пряма
npmzod4.4.3пряма
npm@ampproject/remapping2.3.0непряма
npm@anthropic-ai/claude-agent-sdk0.3.162непряма
npm@anthropic-ai/claude-agent-sdk-darwin-arm640.3.162непряма
npm@anthropic-ai/claude-agent-sdk-darwin-x640.3.162непряма
npm@anthropic-ai/claude-agent-sdk-linux-arm640.3.162непряма
npm@anthropic-ai/claude-agent-sdk-linux-arm64-musl0.3.162непряма
npm@anthropic-ai/claude-agent-sdk-linux-x640.3.162непряма
npm@anthropic-ai/claude-agent-sdk-linux-x64-musl0.3.162непряма
npm@anthropic-ai/claude-agent-sdk-win32-arm640.3.162непряма
npm@anthropic-ai/claude-agent-sdk-win32-x640.3.162непряма
npm@anthropic-ai/sdk0.100.1непряма
npm@babel/code-frame7.29.7непряма
npm@babel/helper-string-parser7.29.7непряма
npm@babel/helper-validator-identifier7.29.7непряма
npm@babel/parser7.29.7непряма
npm@babel/runtime7.29.7непряма
npm@babel/types7.29.7непряма
npm@bcoe/v8-coverage1.0.2непряма
npm@commitlint/cli19.8.1непряма
npm@commitlint/config-conventional19.8.1непряма
npm@commitlint/config-validator19.8.1непряма
npm@commitlint/ensure19.8.1непряма
npm@commitlint/execute-rule19.8.1непряма
npm@commitlint/format19.8.1непряма
npm@commitlint/is-ignored19.8.1непряма
npm@commitlint/lint19.8.1непряма
npm@commitlint/load19.8.1непряма
npm@commitlint/message19.8.1непряма
npm@commitlint/parse19.8.1непряма
npm@commitlint/read19.8.1непряма
npm@commitlint/resolve-extends19.8.1непряма
npm@commitlint/rules19.8.1непряма
npm@commitlint/to-lines19.8.1непряма
npm@commitlint/top-level19.8.1непряма
npm@commitlint/types19.8.1непряма
npm@esbuild/aix-ppc640.27.7непряма
npm@esbuild/android-arm0.27.7непряма
npm@esbuild/android-arm640.27.7непряма
npm@esbuild/android-x640.27.7непряма
npm@esbuild/darwin-arm640.27.7непряма
npm@esbuild/darwin-x640.27.7непряма
npm@esbuild/freebsd-arm640.27.7непряма
npm@esbuild/freebsd-x640.27.7непряма
npm@esbuild/linux-arm0.27.7непряма
npm@esbuild/linux-arm640.27.7непряма
npm@esbuild/linux-ia320.27.7непряма
npm@esbuild/linux-loong640.27.7непряма
npm@esbuild/linux-mips64el0.27.7непряма
npm@esbuild/linux-ppc640.27.7непряма
npm@esbuild/linux-riscv640.27.7непряма
npm@esbuild/linux-s390x0.27.7непряма
npm@esbuild/linux-x640.27.7непряма
npm@esbuild/netbsd-arm640.27.7непряма
npm@esbuild/netbsd-x640.27.7непряма
npm@esbuild/openbsd-arm640.27.7непряма
npm@esbuild/openbsd-x640.27.7непряма
npm@esbuild/openharmony-arm640.27.7непряма
npm@esbuild/sunos-x640.27.7непряма
npm@esbuild/win32-arm640.27.7непряма
npm@esbuild/win32-ia320.27.7непряма
npm@esbuild/win32-x640.27.7непряма
npm@eslint-community/eslint-utils4.9.1непряма
npm@eslint-community/regexpp4.12.2непряма
npm@eslint/config-array0.21.2непряма
npm@eslint/config-helpers0.4.2непряма
npm@eslint/core0.17.0непряма
npm@eslint/eslintrc3.3.5непряма
npm@eslint/js9.39.4непряма
npm@eslint/object-schema2.1.7непряма
npm@eslint/plugin-kit0.4.1непряма
npm@hono/node-server1.19.14непряма
npm@humanfs/core0.19.2непряма
npm@humanfs/node0.16.8непряма
npm@humanfs/types0.15.0непряма
npm@humanwhocodes/module-importer1.0.1непряма
npm@humanwhocodes/retry0.4.3непряма
npm@isaacs/cliui8.0.2непряма
npm@istanbuljs/schema0.1.6непряма
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@modelcontextprotocol/sdk1.29.0непряма
npm@pkgjs/parseargs0.11.0непряма
npm@rollup/rollup-android-arm-eabi4.61.1непряма
npm@rollup/rollup-android-arm644.61.1непряма
npm@rollup/rollup-darwin-arm644.61.1непряма
npm@rollup/rollup-darwin-x644.61.1непряма
npm@rollup/rollup-freebsd-arm644.61.1непряма
npm@rollup/rollup-freebsd-x644.61.1непряма
npm@rollup/rollup-linux-arm-gnueabihf4.61.1непряма
npm@rollup/rollup-linux-arm-musleabihf4.61.1непряма
npm@rollup/rollup-linux-arm64-gnu4.61.1непряма
npm@rollup/rollup-linux-arm64-musl4.61.1непряма
npm@rollup/rollup-linux-loong64-gnu4.61.1непряма
npm@rollup/rollup-linux-loong64-musl4.61.1непряма
npm@rollup/rollup-linux-ppc64-gnu4.61.1непряма
npm@rollup/rollup-linux-ppc64-musl4.61.1непряма
npm@rollup/rollup-linux-riscv64-gnu4.61.1непряма
npm@rollup/rollup-linux-riscv64-musl4.61.1непряма
npm@rollup/rollup-linux-s390x-gnu4.61.1непряма
npm@rollup/rollup-linux-x64-gnu4.61.1непряма
npm@rollup/rollup-linux-x64-musl4.61.1непряма
npm@rollup/rollup-openbsd-x644.61.1непряма
npm@rollup/rollup-openharmony-arm644.61.1непряма
npm@rollup/rollup-win32-arm64-msvc4.61.1непряма
npm@rollup/rollup-win32-ia32-msvc4.61.1непряма
npm@rollup/rollup-win32-x64-gnu4.61.1непряма
npm@rollup/rollup-win32-x64-msvc4.61.1непряма
npm@stablelib/base641.0.1непряма
npm@types/better-sqlite37.6.13непряма
npm@types/chai5.2.3непряма
npm@types/conventional-commits-parser5.0.2непряма
npm@types/crypto-js4.2.2непряма
npm@types/deep-eql4.0.2непряма
npm@types/estree1.0.9непряма
npm@types/json-schema7.0.15непряма
npm@types/node25.9.1непряма
npm@types/ws8.18.1непряма
npm@typescript-eslint/eslint-plugin8.60.1непряма
npm@typescript-eslint/parser8.60.1непряма
npm@typescript-eslint/project-service8.60.1непряма
npm@typescript-eslint/scope-manager8.60.1непряма
npm@typescript-eslint/tsconfig-utils8.60.1непряма
npm@typescript-eslint/type-utils8.60.1непряма
npm@typescript-eslint/types8.60.1непряма
npm@typescript-eslint/typescript-estree8.60.1непряма
npm@typescript-eslint/utils8.60.1непряма
npm@typescript-eslint/visitor-keys8.60.1непряма
npm@vitest/coverage-v83.2.6непряма
npm@vitest/expect3.2.6непряма
npm@vitest/mocker3.2.6непряма
npm@vitest/pretty-format3.2.6непряма
npm@vitest/runner3.2.6непряма
npm@vitest/snapshot3.2.6непряма
npm@vitest/spy3.2.6непряма
npm@vitest/utils3.2.6непряма
npmaccepts2.0.0непряма
npmacorn8.16.0непряма
npmacorn-jsx5.3.2непряма
npmajv6.15.0непряма
npmajv8.20.0непряма
npmajv-formats3.0.1непряма
npmansi-escapes7.3.0непряма
npmansi-regex5.0.1непряма
npmansi-regex6.2.2непряма
npmansi-styles4.3.0непряма
npmansi-styles6.2.3непряма
npmargparse2.0.1непряма
npmarray-ify1.0.0непряма
npmassertion-error2.0.1непряма
npmast-v8-to-istanbul0.3.12непряма
npmbalanced-match1.0.2непряма
npmbalanced-match4.0.4непряма
npmbase64-js1.5.1непряма
npmbindings1.5.0непряма
npmbl4.1.0непряма
npmbody-parser2.2.2непряма
npmbrace-expansion1.1.15непряма
npmbrace-expansion2.1.1непряма
npmbrace-expansion5.0.6непряма
npmbraces3.0.3непряма
npmbuffer5.7.1непряма
npmbytes3.1.2непряма
npmcac6.7.14непряма
npmcall-bind-apply-helpers1.0.2непряма
npmcall-bound1.0.4непряма
npmcallsites3.1.0непряма
npmchai5.3.3непряма
npmchalk4.1.2непряма
npmchalk5.6.2непряма
npmcheck-error2.1.3непряма
npmchownr1.1.4непряма
npmcli-cursor5.0.0непряма
npmcli-truncate4.0.0непряма
npmcliui8.0.1непряма
npmcolor-convert2.0.1непряма
npmcolor-name1.1.4непряма
npmcolorette2.0.20непряма
npmcommander13.1.0непряма
npmcompare-func2.0.0непряма
npmconcat-map0.0.1непряма
npmcontent-disposition1.1.0непряма
npmcontent-type1.0.5непряма
npmcontent-type2.0.0непряма
npmconventional-changelog-angular7.0.0непряма
npmconventional-changelog-conventionalcommits7.0.2непряма
npmconventional-commits-parser5.0.0непряма
npmcookie0.7.2непряма
npmcookie-signature1.2.2непряма
npmcors2.8.6непряма
npmcosmiconfig9.0.1непряма
npmcosmiconfig-typescript-loader6.3.0непряма
npmcross-spawn7.0.6непряма
npmdargs8.1.0непряма
npmdebug4.4.3непряма
npmdecompress-response6.0.0непряма
npmdeep-eql5.0.2непряма
npmdeep-extend0.6.0непряма
npmdeep-is0.1.4непряма
npmdepd2.0.0непряма
npmdetect-libc2.1.2непряма
npmdot-prop5.3.0непряма
npmdunder-proto1.0.1непряма
npmeastasianwidth0.2.0непряма
npmee-first1.1.1непряма
npmemoji-regex10.6.0непряма
npmemoji-regex8.0.0непряма
npmemoji-regex9.2.2непряма
npmencodeurl2.0.0непряма
npmend-of-stream1.4.5непряма
npmenv-paths2.2.1непряма
npmenvironment1.1.0непряма
npmerror-ex1.3.4непряма
npmes-define-property1.0.1непряма
npmes-errors1.3.0непряма
npmes-module-lexer1.7.0непряма
npmes-object-atoms1.1.2непряма
npmesbuild0.27.7непряма
npmescalade3.2.0непряма
npmescape-html1.0.3непряма
npmescape-string-regexp4.0.0непряма
npmeslint9.39.4непряма
npmeslint-scope8.4.0непряма
npmeslint-visitor-keys3.4.3непряма
npmeslint-visitor-keys4.2.1непряма
npmeslint-visitor-keys5.0.1непряма
npmespree10.4.0непряма
npmesquery1.7.0непряма
npmesrecurse4.3.0непряма
npmestraverse5.3.0непряма
npmestree-walker3.0.3непряма
npmesutils2.0.3непряма
npmetag1.8.1непряма
npmeventemitter35.0.4непряма
npmeventsource3.0.7непряма
npmeventsource-parser3.1.0непряма
npmexeca8.0.1непряма
npmexpand-template2.0.3непряма
npmexpect-type1.3.0непряма
npmexpress5.2.1непряма
npmexpress-rate-limit8.5.2непряма
npmfast-deep-equal3.1.3непряма
npmfast-json-stable-stringify2.1.0непряма
npmfast-levenshtein2.0.6непряма
npmfast-sha2561.3.0непряма
npmfast-uri3.1.2непряма
npmfdir6.5.0непряма
npmfile-entry-cache8.0.0непряма
npmfile-uri-to-path1.0.0непряма
npmfill-range7.1.1непряма
npmfinalhandler2.1.1непряма
npmfind-up5.0.0непряма
npmfind-up7.0.0непряма
npmflat-cache4.0.1непряма
npmflatted3.4.2непряма
npmforeground-child3.3.1непряма
npmforwarded0.2.0непряма
npmfresh2.0.0непряма
npmfs-constants1.0.0непряма
npmfsevents2.3.3непряма
npmfunction-bind1.1.2непряма
npmget-caller-file2.0.5непряма
npmget-east-asian-width1.6.0непряма
npmget-intrinsic1.3.0непряма
npmget-proto1.0.1непряма
npmget-stream8.0.1непряма
npmgit-raw-commits4.0.0непряма
npmgithub-from-package0.0.0непряма
npmglob10.5.0непряма
npmglob-parent6.0.2непряма
npmglobal-directory4.0.1непряма
npmglobals14.0.0непряма
npmgopd1.2.0непряма
npmhas-flag4.0.0непряма
npmhas-symbols1.1.0непряма
npmhasown2.0.4непряма
npmhono4.12.23непряма
npmhtml-escaper2.0.2непряма
npmhttp-errors2.0.1непряма
npmhuman-signals5.0.0непряма
npmhusky9.1.7непряма
npmiconv-lite0.7.2непряма
npmieee7541.2.1непряма
npmignore5.3.2непряма
npmignore7.0.5непряма
npmimport-fresh3.3.1непряма
npmimport-meta-resolve4.2.0непряма
npmimurmurhash0.1.4непряма
npminherits2.0.4непряма
npmini1.3.8непряма
npmini4.1.1непряма
npmip-address10.2.0непряма
npmipaddr.js1.9.1непряма
npmis-arrayish0.2.1непряма
npmis-extglob2.1.1непряма
npmis-fullwidth-code-point3.0.0непряма
npmis-fullwidth-code-point4.0.0непряма
npmis-fullwidth-code-point5.1.0непряма
npmis-glob4.0.3непряма
npmis-number7.0.0непряма
npmis-obj2.0.0непряма
npmis-promise4.0.0непряма
npmis-stream3.0.0непряма
npmis-text-path2.0.0непряма
npmisexe2.0.0непряма
npmistanbul-lib-coverage3.2.2непряма
npmistanbul-lib-report3.0.1непряма
npmistanbul-lib-source-maps5.0.6непряма
npmistanbul-reports3.2.0непряма
npmjackspeak3.4.3непряма
npmjiti2.6.1непряма
npmjose6.2.3непряма
npmjs-tokens10.0.0непряма
npmjs-tokens4.0.0непряма
npmjs-tokens9.0.1непряма
npmjs-yaml4.2.0непряма
npmjson-buffer3.0.1непряма
npmjson-parse-even-better-errors2.3.1непряма
npmjson-schema-to-ts3.1.1непряма
npmjson-schema-traverse0.4.1непряма
npmjson-schema-traverse1.0.0непряма
npmjson-schema-typed8.0.2непряма
npmjson-stable-stringify-without-jsonify1.0.1непряма
npmjsonparse1.3.1непряма
npmJSONStream1.3.5непряма
npmkeyv4.5.4непряма
npmlevn0.4.1непряма
npmlilconfig3.1.3непряма
npmlines-and-columns1.2.4непряма
npmlint-staged15.5.2непряма
npmlistr28.3.3непряма
npmlocate-path6.0.0непряма
npmlocate-path7.2.0непряма
npmlodash.camelcase4.3.0непряма
npmlodash.isplainobject4.0.6непряма
npmlodash.kebabcase4.1.1непряма
npmlodash.merge4.6.2непряма
npmlodash.mergewith4.6.2непряма
npmlodash.snakecase4.1.1непряма
npmlodash.startcase4.4.0непряма
npmlodash.uniq4.5.0непряма
npmlodash.upperfirst4.3.1непряма
npmlog-update6.1.0непряма
npmloupe3.2.1непряма
npmlru-cache10.4.3непряма
npmmagic-string0.30.21непряма
npmmagicast0.3.5непряма
npmmake-dir4.0.0непряма
npmmath-intrinsics1.1.0непряма
npmmedia-typer1.1.0непряма
npmmeow12.1.1непряма
npmmerge-descriptors2.0.0непряма
npmmerge-stream2.0.0непряма
npmmicromatch4.0.8непряма
npmmime-db1.54.0непряма
npmmime-types3.0.2непряма
npmmimic-fn4.0.0непряма
npmmimic-function5.0.1непряма
npmmimic-response3.1.0непряма
npmminimatch10.2.5непряма
npmminimatch3.1.5непряма
npmminimatch9.0.9непряма
npmminimist1.2.8непряма
npmminipass7.1.3непряма
npmmkdirp-classic0.5.3непряма
npmms2.1.3непряма
npmnanoid3.3.12непряма
npmnapi-build-utils2.0.0непряма
npmnatural-compare1.4.0непряма
npmnegotiator1.0.0непряма
npmnode-abi3.92.0непряма
npmnpm-run-path5.3.0непряма
npmobject-assign4.1.1непряма
npmobject-inspect1.13.4непряма
npmon-finished2.4.1непряма
npmonce1.4.0непряма
npmonetime6.0.0непряма
npmonetime7.0.0непряма
npmoptionator0.9.4непряма
npmp-limit3.1.0непряма
npmp-limit4.0.0непряма
npmp-locate5.0.0непряма
npmp-locate6.0.0непряма
npmpackage-json-from-dist1.0.1непряма
npmparent-module1.0.1непряма
npmparse-json5.2.0непряма
npmparseurl1.3.3непряма
npmpath-exists4.0.0непряма
npmpath-exists5.0.0непряма
npmpath-key3.1.1непряма
npmpath-key4.0.0непряма
npmpath-scurry1.11.1непряма
npmpath-to-regexp8.4.2непряма
npmpathe2.0.3непряма
npmpathval2.0.1непряма
npmpicocolors1.1.1непряма
npmpicomatch2.3.2непряма
npmpicomatch4.0.4непряма
npmpidtree0.6.0непряма
npmpkce-challenge5.0.1непряма
npmpostcss8.5.15непряма
npmprebuild-install7.1.3непряма
npmprelude-ls1.2.1непряма
npmproxy-addr2.0.7непряма
npmpump3.0.4непряма
npmpunycode2.3.1непряма
npmqs6.15.2непряма
npmrange-parser1.2.1непряма
npmraw-body3.0.2непряма
npmrc1.2.8непряма
npmreadable-stream3.6.2непряма
npmrequire-directory2.1.1непряма
npmrequire-from-string2.0.2непряма
npmresolve-from4.0.0непряма
npmresolve-from5.0.0непряма
npmrestore-cursor5.1.0непряма
npmrfdc1.4.1непряма
npmrollup4.61.1непряма
npmrouter2.2.0непряма
npmsafe-buffer5.2.1непряма
npmsafer-buffer2.1.2непряма
npmsemver7.8.1непряма
npmsend1.2.1непряма
npmserve-static2.2.1непряма
npmsetprototypeof1.2.0непряма
npmshebang-command2.0.0непряма
npmshebang-regex3.0.0непряма
npmside-channel1.1.0непряма
npmside-channel-list1.0.1непряма
npmside-channel-map1.0.1непряма
npmside-channel-weakmap1.0.2непряма
npmsiginfo2.0.0непряма
npmsignal-exit4.1.0непряма
npmsimple-concat1.0.1непряма
npmsimple-get4.0.1непряма
npmslice-ansi5.0.0непряма
npmslice-ansi7.1.2непряма
npmsource-map-js1.2.1непряма
npmsplit24.2.0непряма
npmstackback0.0.2непряма
npmstandardwebhooks1.0.0непряма
npmstatuses2.0.2непряма
npmstd-env3.10.0непряма
npmstring-argv0.3.2непряма
npmstring-width4.2.3непряма
npmstring-width5.1.2непряма
npmstring-width7.2.0непряма
npmstring_decoder1.3.0непряма
npmstrip-ansi6.0.1непряма
npmstrip-ansi7.2.0непряма
npmstrip-final-newline3.0.0непряма
npmstrip-json-comments2.0.1непряма
npmstrip-json-comments3.1.1непряма
npmstrip-literal3.1.0непряма
npmsupports-color7.2.0непряма
npmtar-fs2.1.4непряма
npmtar-stream2.2.0непряма
npmtest-exclude7.0.2непряма
npmtext-extensions2.4.0непряма
npmthrough2.3.8непряма
npmtinybench2.9.0непряма
npmtinyexec0.3.2непряма
npmtinyexec1.2.4непряма
npmtinyglobby0.2.17непряма
npmtinypool1.1.1непряма
npmtinyrainbow2.0.0непряма
npmtinyspy4.0.4непряма
npmto-regex-range5.0.1непряма
npmtoidentifier1.0.1непряма
npmts-algebra2.0.0непряма
npmts-api-utils2.5.0непряма
npmtunnel-agent0.6.0непряма
npmtype-check0.4.0непряма
npmtype-is2.1.0непряма
npmtypescript5.9.3непряма
npmundici-types7.24.6непряма
npmunicorn-magic0.1.0непряма
npmunpipe1.0.0непряма
npmuri-js4.4.1непряма
npmutil-deprecate1.0.2непряма
npmvary1.1.2непряма
npmvite7.3.5непряма
npmvite-node3.2.4непряма
npmvitest3.2.6непряма
npmwhich2.0.2непряма
npmwhy-is-node-running2.3.0непряма
npmword-wrap1.2.5непряма
npmwrap-ansi7.0.0непряма
npmwrap-ansi8.1.0непряма
npmwrap-ansi9.0.2непряма
npmwrappy1.0.2непряма
npmy18n5.0.8непряма
npmyaml2.9.0непряма
npmyargs17.7.2непряма
npmyargs-parser21.1.1непряма
npmyocto-queue0.1.0непряма
npmyocto-queue1.2.2непряма
npmzod-to-json-schema3.25.2непряма
Сповіщення про залежності 0

Встановлення npm:@mininglamp-oss/cc-channel-octo@1.0.3 тягне 43 пакетів, прямих і транзитивних: 0 мають відомі сповіщення, з них 0 — прямі залежності.

Жодне відоме сповіщення не стосується оцінених залежностей.

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

Звіт у форматі JSON машиночитний
{
  "data": {
    "repo": {
      "topics": [],
      "is_fork": false,
      "size_kb": 1774,
      "has_wiki": true,
      "homepage": null,
      "languages": {
        "JavaScript": 86394,
        "TypeScript": 1124773
      },
      "pushed_at": "2026-07-21T08:46:11Z",
      "created_at": "2026-06-04T07:15:46Z",
      "owner_type": "Organization",
      "updated_at": "2026-07-21T08:46:59Z",
      "description": "Bridge Claude Code (Claude Agent SDK) to Octo IM — independent Node.js gateway",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "Apache-2.0",
      "default_branch": "main",
      "license_spdx_raw": "Apache-2.0",
      "primary_language": "TypeScript",
      "significant_languages": [
        "TypeScript"
      ]
    },
    "owner": {
      "blog": "https://github.com/Mininglamp-OSS",
      "name": "MININGLAMP TECHNOLOGY",
      "type": "Organization",
      "login": "Mininglamp-OSS",
      "company": null,
      "location": "China",
      "followers": 149,
      "avatar_url": "https://avatars.githubusercontent.com/u/283583517?v=4",
      "created_at": "2026-05-11T07:40:33Z",
      "is_verified": null,
      "public_repos": 36,
      "account_age_days": 79
    },
    "license": {
      "state": "standard",
      "spdx_id": "Apache-2.0",
      "raw_spdx": "Apache-2.0",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v1.0.3",
          "kind": "patch",
          "published_at": "2026-06-26T02:47:37Z"
        },
        {
          "tag": "v1.0.2",
          "kind": "patch",
          "published_at": "2026-06-26T02:47:34Z"
        },
        {
          "tag": "v1.0.1",
          "kind": "patch",
          "published_at": "2026-06-10T09:05:31Z"
        },
        {
          "tag": "v1.0.0",
          "kind": "major",
          "published_at": "2026-06-10T08:27:00Z"
        },
        {
          "tag": "v0.2.0",
          "kind": "minor",
          "published_at": "2026-06-07T15:01:19Z"
        },
        {
          "tag": "v0.1.0",
          "kind": "minor",
          "published_at": "2026-06-05T00:33:49Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "1871c2558da8f49ff872f45136a967d748264473",
          "body": "feat(skills): expose persistent install paths to agents",
          "is_bot": false,
          "headline": "Merge pull request #189 from kense-lab/feat/skill-install-path-prompt",
          "author_name": "Jerry-Xin",
          "author_login": "Jerry-Xin",
          "committed_at": "2026-07-21T08:46:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3293eb52a673e6d25c6907ada048a0b339bd0a19",
          "body": null,
          "is_bot": false,
          "headline": "chore: rerun governance checks after linking issue",
          "author_name": "Kense",
          "author_login": "kense-lab",
          "committed_at": "2026-07-21T08:30:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "96af539d3237320c2f246fa8cfc8bb6b3906ce40",
          "body": null,
          "is_bot": false,
          "headline": "fix(skills): align path guidance with discovery",
          "author_name": "Kense",
          "author_login": "kense-lab",
          "committed_at": "2026-07-21T07:18:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ac45be76d92792d2eea92eba6991a53b9d216122",
          "body": null,
          "is_bot": false,
          "headline": "fix(skills): restrict install paths to owner DM",
          "author_name": "Kense",
          "author_login": "kense-lab",
          "committed_at": "2026-07-21T07:05:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8f453cfa25ef73f4cf695941f0c8b3ef0ce9106d",
          "body": null,
          "is_bot": false,
          "headline": "feat(skills): expose persistent install paths to agents",
          "author_name": "Kense",
          "author_login": "kense-lab",
          "committed_at": "2026-07-21T06:58:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4a55e52068ed2fc4e4c1a39373360a1257f5ec33",
          "body": "Replace the abstract @[<uid>:<displayName>] placeholder with a complete worked example (real full uid, uid first then name) plus an explicit wrong-form counterexample, so the model stops collapsing the placeholder into the literal token uid or mis-slotting the real uid — which rendered as a raw, un-highlighted id.",
          "is_bot": false,
          "headline": "fix(prompt): use a concrete worked example for mention format (#181)",
          "author_name": "caster",
          "author_login": "caster-Q",
          "committed_at": "2026-07-02T09:32:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4edf363a8c3dfe77594b6906e492f1bcb0c1b414",
          "body": "… into visible text (#178)\n\nThe MENTION FORMAT guidance said @[uid:displayName] was \"the only supported\"\nsyntax and did not make clear that uid/displayName are placeholders for real\nvalues. Models could copy the literal token \"uid\", producing a string that\neither carries a bogus uid or fails to matc\n[…]\nceholder would leak.\n- Drop the false \"only supported\" claim: document the plain @name fallback\n  (resolved against the member list) while still preferring the structured\n  form when the uid is known.",
          "is_bot": false,
          "headline": "fix(prompt): clarify structured mention format to prevent uid leaking…",
          "author_name": "caster",
          "author_login": "caster-Q",
          "committed_at": "2026-07-02T06:27:39Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3332be0d7aa622d79147e3f097bce023d4c545a7",
          "body": "feat(thread-md): THREAD.md write-back + thread/deleted md event invalidation (#88 P3-2)",
          "is_bot": false,
          "headline": "Merge pull request #180 from boris-clark/feat/p3-2-thread-md-writeback",
          "author_name": "Jerry-Xin",
          "author_login": "Jerry-Xin",
          "committed_at": "2026-07-02T04:49:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "48073082d9ae17c6dffa600ceb12237394362876",
          "body": "…thread/deleted md events (#88 P3-2)\n\nCompletes the #88 P3 markdown work. P3-1 gave a thread its own THREAD.md on\nthe READ side; this brings the WRITE + event sides in line, closing the\nXIN-230 follow-up where the write path still collapsed a thread to its parent\ngroup's GROUP.md.\n\nThree changes, mu\n[…]\nses non-thread channels), thread + deleted event\ninvalidation, event classifiers, and the updateThreadMd client. Full suite\ngreen; the P3-1 read side and P2 group read/write/event paths are unchanged.",
          "is_bot": false,
          "headline": "feat(thread-md): write back a thread's own THREAD.md + invalidate on …",
          "author_name": "boris-clark",
          "author_login": "boris-clark",
          "committed_at": "2026-07-02T04:28:06Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6063f4dd285d7d3498c1c23ee02d7711799225a9",
          "body": "feat(thread-md): inject a thread's own THREAD.md, not the parent GROUP.md (#88 P3-1)",
          "is_bot": false,
          "headline": "Merge pull request #176 from boris-clark/feat/p3-thread-md-injection",
          "author_name": "Jerry-Xin",
          "author_login": "Jerry-Xin",
          "committed_at": "2026-07-02T04:22:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "688f404adf95f3a4d1e681dfb16acd60791a3922",
          "body": "新增 sdk.mcpServers 配置项,声明式暴露外部 MCP(stdio/http)给 agent。settingSources 固定为 ['project'] 不继承 ~/.claude.json,故需在此显式声明。组装 sessionOpts 时先铺外部服务再叠加进程内内置(cron/GROUP.md 写回),同名内置优先;cron 注入由替换改为合并。信任模型对齐 env(#107)。含测试与示例文档。",
          "is_bot": false,
          "headline": "feat(sdk): 支持通过 config 声明外部 MCP 服务 (#177)",
          "author_name": "caster",
          "author_login": "caster-Q",
          "committed_at": "2026-07-02T03:14:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "01cd61faa255cdb210e848ef7af6ce387bd18e06",
          "body": "…OUP.md\n\nA CommunityTopic thread must resolve only its own THREAD.md and must not\nstack (or fall back to) the parent group's GROUP.md. Previously the resolver\ncollapsed every channelId to its parent groupNo, so with server-md reads on a\nthread message was injected the parent group's server GROUP.md.\n[…]\nparent GROUP.md\npresent asserts the parent GROUP.md is not injected and the group cache is\nnever touched; thread server-first / cache reuse / TTL / local fallback; and\ngetThreadMd endpoint/auth/shape.",
          "is_bot": false,
          "headline": "feat(thread-md): inject a thread's own THREAD.md, never the parent GR…",
          "author_name": "boris-clark",
          "author_login": "boris-clark",
          "committed_at": "2026-07-01T10:06:10Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7f4da1430a8ef3b3b45a29aec8343488d2cf6786",
          "body": "…-message\n\nfeat(prompt): identify the sender on the current-message anchor and unify recent-messages format",
          "is_bot": false,
          "headline": "Merge pull request #175 from JianwenXu/fix/sender-identity-in-current…",
          "author_name": "Jerry-Xin",
          "author_login": "Jerry-Xin",
          "committed_at": "2026-07-01T09:34:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fc2320d1c9aeb7c5f6f63a21ef1ebc47b4d6bd92",
          "body": "…uid)\n\nPR-175 review (credit Jerry-Xin, OctoBoooot) surfaced two related bugs\nthat let `uid(uid):` re-appear on the exact code path the parent commit\ntried to eliminate:\n\n1. `resolvedName ?? m.fromName` (index.ts:650, buildContext,\n   buildContextSince) defeated resolveDisplayName's deliberate `unde\n[…]\n; a follow-up\n  message with a real wire name resolves and renders correctly\n\nType-check clean. Full suite: 1168/1183 passing, 15 failing (all\npre-existing GROUP.md filesystem tests; delta 0 vs main).",
          "is_bot": false,
          "headline": "fix(prompt): stop the `?? fromName` fallback from re-introducing uid(…",
          "author_name": "Jianwen Xu",
          "author_login": null,
          "committed_at": "2026-07-01T09:21:22Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "dcda077e6d1249e2f9b199a0a4649028893943f4",
          "body": "…nify recent-messages format\n\nPreviously the [Current message — respond to this ONLY] body carried no\nsender label, so an agent that shares context with other participants had\nno reliable way to tell who spoke the current message. On top of that, the\n[Recent group messages] block rendered wire fromN\n[…]\natSenderLabel + 6 resolveDisplayName + 3 renderer/write\npath); existing group-context and e2e assertions updated to match the new\n`name(uid):` format. Type-check clean; full suite delta 0 vs baseline.",
          "is_bot": false,
          "headline": "feat(prompt): identify the sender on the current-message anchor and u…",
          "author_name": "Jianwen Xu",
          "author_login": null,
          "committed_at": "2026-07-01T08:44:48Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1465991f58211ded6bf18e96d8dcb8fcddf80ff0",
          "body": "feat(group-md): owner-gated GROUP.md write-back",
          "is_bot": false,
          "headline": "Merge pull request #174 from Mininglamp-OSS/feat/group-md-writeback",
          "author_name": "Jerry-Xin",
          "author_login": "Jerry-Xin",
          "committed_at": "2026-07-01T08:21:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3135d38957ea570bc346b4479673c843fb422b2d",
          "body": "fix(agent-bridge): extend isResumeError to catch Bedrock ValidationException for orphan tool_use blocks",
          "is_bot": false,
          "headline": "Merge pull request #159 from dolphinsboy/fix/issue-154-orphan-tool-use",
          "author_name": "Jerry-Xin",
          "author_login": "Jerry-Xin",
          "committed_at": "2026-07-01T08:13:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "420a69772ce74d8acf032aebdf3b8175050a916a",
          "body": "Add an in-process MCP tool (mcp__group_md__update_group_md) that lets the\nagent persist an updated GROUP.md back to the server via the updateGroupMd\nclient, behind a new mdWriteback feature flag (off by default, rollback-safe).\n\nPer the measured server contract:\n- content is capped at 10240 bytes UT\n[…]\nturn with\nthe message coords and only for group channels.\n\nTests cover owner-gate rejection, over-limit rejection, write-success cache\nrefresh, and same-group concurrency (no overlap / no lost write).",
          "is_bot": false,
          "headline": "feat(group-md): owner-gated GROUP.md write-back MCP tool",
          "author_name": "boris-clark",
          "author_login": "boris-clark",
          "committed_at": "2026-07-01T08:08:52Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4ca07a037f420922d9affb93ca63798486c1a0f7",
          "body": "…efresh\n\nfeat(group-md): event-driven GROUP.md cache refresh (P2-B)",
          "is_bot": false,
          "headline": "Merge pull request #173 from boris-clark/feat/server-group-md-event-r…",
          "author_name": "Jerry-Xin",
          "author_login": "Jerry-Xin",
          "committed_at": "2026-07-01T08:06:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d82c75abc0a12d88c2bc7b580109dabfef7e1ae6",
          "body": "Split the system-event handling in session-router so a server GROUP.md\nchange event invalidates that group's cached server GROUP.md, forcing the\nnext turn to re-fetch the authoritative copy over the authenticated bot\ntoken. Every other system event (join/leave, etc.) is dropped unchanged.\n\nThe event\n[…]\nured event; it is\nconfigurable via serverMdEventTypes so it can be calibrated without a code\nchange. Gated behind the serverMd flag for rollback.\n\nBuilds on the P2-A in-memory cache (invalidate hook).",
          "is_bot": false,
          "headline": "feat(group-md): event-driven GROUP.md cache refresh",
          "author_name": "boris-clark",
          "author_login": "boris-clark",
          "committed_at": "2026-07-01T07:57:13Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6401c0bef3ecd88c160265fe2e9e66e31059722e",
          "body": "fix(session-store): dedupe cold-start double-write via partial unique index",
          "is_bot": false,
          "headline": "Merge pull request #171 from boris-clark/seq236-dedup-partial-index",
          "author_name": "Jerry-Xin",
          "author_login": "Jerry-Xin",
          "committed_at": "2026-07-01T07:31:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "713e8736fac0b6446bc788fef5f74bf3cc14f80e",
          "body": "…ache\n\nfeat(group-md): server-first GROUP.md fetch with cache and local fallback",
          "is_bot": false,
          "headline": "Merge pull request #172 from boris-clark/feat/server-group-md-fetch-c…",
          "author_name": "Jerry-Xin",
          "author_login": "Jerry-Xin",
          "committed_at": "2026-07-01T07:18:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "77cfbaf9207b02fa48262cd2a160617f51796cc7",
          "body": "…-string\n\nfix(thread): carry createThread sourceMessageId as int64-safe string",
          "is_bot": false,
          "headline": "Merge pull request #170 from boris-clark/fix/thread-source-message-id…",
          "author_name": "Jerry-Xin",
          "author_login": "Jerry-Xin",
          "committed_at": "2026-07-01T07:13:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "386ec4183aab95529917eb0e75b8dd9469e36bea",
          "body": "Live testing showed the Octo backend rejects source_message_id as a quoted\nstring with 400 request_invalid: the field must be a JSON number. But the id\nis an int64 snowflake (19 digits) that exceeds Number.MAX_SAFE_INTEGER, so it\ncannot pass through a JS number without precision loss.\n\nKeep the para\n[…]\ntring.\n\nTests now assert on the raw request body text (not JSON.parse, which would\nitself truncate the id): a 19-digit snowflake and 2^53+1 are emitted as\nunquoted number literals with full precision.",
          "is_bot": false,
          "headline": "fix(thread): emit source_message_id as a bare int64 JSON number",
          "author_name": "boris-clark",
          "author_login": "boris-clark",
          "committed_at": "2026-06-30T08:18:12Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d31d57034afeb4242f0522feddee62ada3bdde74",
          "body": "Address review on PR#172.\n\n- Trusted-injection poisoning: the resolved GROUP.md is injected into the agent\n  system prompt as a trusted block, but the cache wrote a durable copy under\n  <dataDir>/group-md-cache. Because the gateway runs the agent under\n  bypassPermissions with Bash/Write, the agent \n[…]\nonfig. Tests\nupdated: TTL expiry / disable, no-disk-write guard, TTL-driven re-fetch; existing\nfallback + thread-routing coverage retained. Full suite green (60 files / 1156),\ntype-check + lint clean.",
          "is_bot": false,
          "headline": "fix(group-md): make server GROUP.md cache memory-only with a TTL",
          "author_name": "boris-clark",
          "author_login": "boris-clark",
          "committed_at": "2026-06-30T07:14:17Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b843c58d8c05f114c3f55c1944d368c998b9eae1",
          "body": "… fix)\n\nThe partial unique index and dedup migration treated message_seq=0 as a real\nkey. But a synthetic cron fire carries message_seq=0 as a sentinel (no real\nwire seq — see index.ts), and multiple cron rounds legitimately share seq=0.\nFolding on it would (a) delete real cron rounds in the migrati\n[…]\nistant) into the migration fixture\nand assert all survive dedup; assert multiple seq=0 appends all persist; assert\na fresh seq=0 round appends after init(). seq236 dedup + role-key behavior\nunchanged.",
          "is_bot": false,
          "headline": "fix(session-store): exclude seq=0 cron sentinel from dedup (data-loss…",
          "author_name": "boris-clark",
          "author_login": "boris-clark",
          "committed_at": "2026-06-30T07:04:15Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "302497b21a7ce2ddfb6b6584018ea043bc9c4ecf",
          "body": "…back\n\nRestore the server GROUP.md API removed at fork time and wire it into the\nper-group instruction injection, behind a feature flag.\n\n- api.ts: restore getGroupMd (GET /v1/bot/groups/{groupNo}/md) and updateGroupMd\n  (PUT, body {content}); GET routes through the shared getJson client (timeout,\n \n[…]\n  created per bot under <dataDir>/group-md-cache.\n\nTests: group-md-api + group-md cover the API client, cache persistence, and the\nresolver (flag gating, server-first, fallback paths, thread routing).",
          "is_bot": false,
          "headline": "feat(group-md): server-first GROUP.md fetch with cache and local fall…",
          "author_name": "boris-clark",
          "author_login": "boris-clark",
          "committed_at": "2026-06-30T06:51:18Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "332c7c45ab61f5c408f7cf7b0661ae29378bb826",
          "body": "… index\n\nThe G4 cold-start backfill (seedHistoryFromApi) and the live inbound path\nboth persist the same triggering message, leaving two identical\n(session_id, role, message_seq) rows in messages (the seq236 double-write).\n\n- Add a PARTIAL unique index on (session_id, role, message_seq)\n  WHERE mess\n[…]\n cold-start double-write repro, NULL-seq exemption, user/assistant\nshared-seq preservation, and dedup migration idempotency + row accounting.\nRealistic monotonic seqs in the multi-turn DM e2e fixture.",
          "is_bot": false,
          "headline": "fix(session-store): dedupe cold-start double-write via partial unique…",
          "author_name": "boris-clark",
          "author_login": "boris-clark",
          "committed_at": "2026-06-30T06:47:34Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "12542d38a5008899c374af1e02fbdd89a4995404",
          "body": "source_message_id anchors a thread to a message id, which is an int64 on\nthe wire. Typing it as number risks JS precision loss above\nNumber.MAX_SAFE_INTEGER, the same hazard parseOctoJson and reply.message_id\nalready guard against. Switch sourceMessageId to string and pass it through\nunchanged so large ids survive JSON serialization.\n\nUpdate the thread-api unit test to send and expect the id as a string.",
          "is_bot": false,
          "headline": "fix(thread): carry createThread sourceMessageId as int64-safe string",
          "author_name": "boris-clark",
          "author_login": "boris-clark",
          "committed_at": "2026-06-30T06:41:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "87ae92129c14e249846c52b067fe3f8f60bd1eac",
          "body": "…e-p1\n\nfeat(thread): route community-topic threads + restore lifecycle endpoints (P1 of #88)",
          "is_bot": false,
          "headline": "Merge pull request #169 from boris-clark/feat/thread-routing-lifecycl…",
          "author_name": "Jerry-Xin",
          "author_login": "Jerry-Xin",
          "committed_at": "2026-06-30T06:03:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "202724ffd5f8611fec5a96fc83dda7c49753d416",
          "body": "…points\n\nPhase 1 of #88 (parity with openclaw-channel-octo): composite thread\nchannel_id parsing, thread routing, and the bot thread lifecycle REST\nsurface. Injection/server-md work (P2/P3) is intentionally out of scope.\n\n- octo/channel-id.ts: THREAD_ID_SEPARATOR (\"____\") + pure helpers\n  extractPar\n[…]\n.\n\nTests: ____ parsing boundaries, all seven endpoints (path/method/Bearer),\nthread session isolation, legacy-filename compatibility, and parent-group\nroster resolution. Full suite green (1132 tests).",
          "is_bot": false,
          "headline": "feat(thread): route community-topic threads and restore lifecycle end…",
          "author_name": "boris-clark",
          "author_login": "boris-clark",
          "committed_at": "2026-06-29T13:02:42Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "203dc5ff699cae530f11f44dd00bb637699b2369",
          "body": null,
          "is_bot": false,
          "headline": "cleanup: stop CI→IM notifications (#168)",
          "author_name": "Menglin Li",
          "author_login": "lml2468",
          "committed_at": "2026-06-27T12:51:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bee63c6b8596c4d6faececbb51321db48cbb413b",
          "body": "* ci: remove octo-issue-feed.yml (multica triage chain decommissioned)\n\n* ci: remove octo-issue-notify.yml (multica triage chain decommissioned)\n\n* ci: remove octo-pr-review-feed.yml (multica triage chain decommissioned)\n\n* ci: remove octo-pr-result-notify.yml (multica triage chain decommissioned)",
          "is_bot": false,
          "headline": "ci: decommission multica triage workflows (#166)",
          "author_name": "Menglin Li",
          "author_login": "lml2468",
          "committed_at": "2026-06-27T10:24:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a69f4a2265452d18049a4f9f8996f0354b148f59",
          "body": null,
          "is_bot": false,
          "headline": "ci(octo-issue-feed): add workflow for webhook-only triage (#165)",
          "author_name": "Menglin Li",
          "author_login": "lml2468",
          "committed_at": "2026-06-27T09:42:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "816076dc6c50bba53ad176658fd8c338d2ae8bea",
          "body": "…fy=false) (#164)",
          "is_bot": false,
          "headline": "ci(octo-pr-review-feed): opt into webhook-only triage (enable_im_noti…",
          "author_name": "Menglin Li",
          "author_login": "lml2468",
          "committed_at": "2026-06-27T09:11:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "660b13a38de57a40b9d10b74ed6c399526d6e86f",
          "body": "…lures (#161)\n\nBot read receipts are fire-and-forget: a blank/empty message id makes the\nserver resolve a message_seq it cannot find, which the IM backend rejects.\nFilter empty ids and omit message_ids entirely when none are valid (the call\nstill clears the unread badge), and drop the error log on failure since the\nread receipt never affects message delivery.",
          "is_bot": false,
          "headline": "fix(read-receipt): omit empty message_ids and silence best-effort fai…",
          "author_name": "caster",
          "author_login": "caster-Q",
          "committed_at": "2026-06-26T02:41:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1340db74ab549230ce8a0b480159b6ef9a2c5987",
          "body": null,
          "is_bot": false,
          "headline": "chore(release): v1.0.3 (#160)",
          "author_name": "caster",
          "author_login": "caster-Q",
          "committed_at": "2026-06-26T01:40:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "aac425a7db6423520c7ae2a6a7bd13dee9bc05fd",
          "body": "…ception for orphaned tool_use blocks (#154)\n\nWhen an agent turn is interrupted mid-execution (process kill, timeout, or\nrestart) while the Claude Agent SDK has already emitted tool_use blocks, the\nSDK session is left in a corrupt state: the tool_use blocks have no\ncorresponding tool_result. On the \n[…]\nery (onResumeFailed, retry without resume, correct prompt)\n- Verifies that when output was already emitted before the error, no retry\n  happens (avoids double side-effects) but the id is still cleared",
          "is_bot": false,
          "headline": "fix(agent-bridge): extend isResumeError to catch Bedrock ValidationEx…",
          "author_name": "guosong",
          "author_login": "dolphinsboy",
          "committed_at": "2026-06-25T08:08:43Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "0af5b1473d387fc2de33bf622ace6dc3d7196a6b",
          "body": "…157) (#158)\n\n* docs(plan): bot hot-reload design (#157)\n\n* feat(router): add unregisterKnownBot for hot-reload sibling removal (#157)\n\n* feat(bot-manager): runtime bot registry with serial add/remove + bidirectional loop-guard (#157)\n\n* feat(config-watcher): debounced serial reconcile of bots from \n[…]\now asserts the fs.watch path fired (no applyNow crutch);\n  drop configId from the fake bot fixture (ManagedBot has no such field).\n- drop the plan doc from the PR (process artifact, not shipped code).",
          "is_bot": false,
          "headline": "feat: hot-reload bots on provision instead of full gateway restart (#…",
          "author_name": "caster",
          "author_login": "caster-Q",
          "committed_at": "2026-06-25T07:35:40Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e347a611eccabe1bc2888b191043361661f2c26c",
          "body": "chore(release): v1.0.2",
          "is_bot": false,
          "headline": "Merge pull request #156 from Mininglamp-OSS/caster/release-1.0.2",
          "author_name": "caster",
          "author_login": "caster-Q",
          "committed_at": "2026-06-24T09:57:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1268ad9201c9fc53b65f4fbfd0150cf8641012a6",
          "body": null,
          "is_bot": false,
          "headline": "docs(changelog): add Fixed block and v1.0.2 compare link",
          "author_name": "caster-Q",
          "author_login": "caster-Q",
          "committed_at": "2026-06-24T09:53:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "edce85f59e7371d7c9c6272fe8f44f51e0a53737",
          "body": null,
          "is_bot": false,
          "headline": "chore(release): v1.0.2",
          "author_name": "caster-Q",
          "author_login": "caster-Q",
          "committed_at": "2026-06-24T09:45:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0ac574a6d65cf773258e30fc34aa5bc4a104dece",
          "body": "…el (#155)\n\n* feat(config): resolve zero-bot config to empty list for idle startup\n\n* feat(gateway): idle startup when no bots configured (stay online for provision)\n\n* fix(configure): strip trailing /v1 from gateway url to avoid /v1/v1 path\n\n* feat(configure): add --model and --api-url flags (model\n[…]\nay url with an uppercase /V1 suffix or surrounding whitespace\nslipped past the trailing-/v1 strip and could still produce /v1/v1/messages.\nMatch the suffix case-insensitively and trim the input first.",
          "is_bot": false,
          "headline": "feat(cc-octo): zero-bot idle startup and configurable gateway url/mod…",
          "author_name": "caster",
          "author_login": "caster-Q",
          "committed_at": "2026-06-23T08:30:39Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8d3221591b3240145a89387669ecc465d773327f",
          "body": "…de/version, configure) (#152)\n\nIntegrate the cc-channel-octo agent-runtime tooling onto main so it can be published.\n\n- Process supervisor CLI (start/stop/restart/status) with PID-ownership verification to avoid signaling a recycled PID after an unclean crash.\n- version and upgrade subcommands; res\n[…]\nperator-supplied LLM gateway URL + key into the global config (atomic 0600 write; key via CC_OCTO_CONFIGURE_API_KEY env, never argv), forwarded to the SDK subprocess as ANTHROPIC_API_KEY.\n\nCloses #153",
          "is_bot": false,
          "headline": "feat: bring cc-channel-octo agent-runtime tooling to main (CLI, upgra…",
          "author_name": "caster",
          "author_login": "caster-Q",
          "committed_at": "2026-06-22T10:11:17Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "60b73f3b87232b84eb33e0f1a2e615f5e467feb1",
          "body": "Every push to main publishes <version>-dev.<short-sha> to the npm dist-tag dev, so the gateway can be installed for testing via npm install -g @mininglamp-oss/cc-channel-octo@dev without cutting a stable release. Complements npm-publish.yml (tag-driven stable). Provenance via OIDC; auth via NPM_TOKEN.",
          "is_bot": false,
          "headline": "ci: publish a dev npm package on main merge (@dev dist-tag)",
          "author_name": "caster",
          "author_login": "caster-Q",
          "committed_at": "2026-06-22T08:31:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1a962fc543b5206e1f8c172483fa668dd7fb17b0",
          "body": "…(reworks #144) (#145)\n\n* Revert \"fix(mentions): validate outbound @uid against live group members (drop hallucinations) (#144)\"\n\nThis reverts commit c768cf5b0ba602b6da52c912c0b2c76f8d3177dc.\n\n* fix(mentions): authoritative member set for outbound @uid validation\n\nReworks #144 (reverted in the paren\n[…]\ne, A8 hit/\nmiss/mixed/legacy. 988 total green. code-review (medium) run — the empty-\nroster mass-prune it surfaced is fixed here.\n\n---------\n\nCo-authored-by: lml2468 <lml2468@users.noreply.github.com>",
          "is_bot": false,
          "headline": "fix(mentions): authoritative member set for outbound @uid validation …",
          "author_name": "Menglin Li",
          "author_login": "lml2468",
          "committed_at": "2026-06-10T15:01:34Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c768cf5b0ba602b6da52c912c0b2c76f8d3177dc",
          "body": "…p hallucinations) (#144)\n\nCloses #143.\n\nThe LLM's structured @[uid:name] mentions were converted to wire entities\nwithout validating the uid — a hallucinated uid (a plausible hex not in the\ngroup, a guessed handle) was forwarded to Octo as a real @ notification.\n\nGroup/thread only (DMs have no memb\n[…]\ns (member hit/miss, mixed, legacy no-predicate, getter isolation);\n986 total green. code-review skill (medium) run — no actionable findings.\n\nCo-authored-by: lml2468 <lml2468@users.noreply.github.com>",
          "is_bot": false,
          "headline": "fix(mentions): validate outbound @uid against live group members (dro…",
          "author_name": "Menglin Li",
          "author_login": "lml2468",
          "committed_at": "2026-06-10T14:06:42Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "9be661f57fc7450a2b47dae8541c5601d3d475f1",
          "body": "…142)\n\nCloses #141.\n\nwithSessionLock serializes per-session handling via a Promise chain; the gate\nonly resolves after handler() returns. If an agent turn hangs (stuck SDK query,\nwedged tool subprocess, stalled stream) the gate never resolves and every\nsubsequent message on that session is blocked f\n[…]\nn-flight\nturn — only unblock the queue. Orphaned handler promise gets a no-op catch so a\nlate rejection can't surface as unhandledRejection.\n\nCo-authored-by: lml2468 <lml2468@users.noreply.github.com>",
          "is_bot": false,
          "headline": "fix(router): per-message dispatch timeout to unblock hung sessions (#…",
          "author_name": "Menglin Li",
          "author_login": "lml2468",
          "committed_at": "2026-06-10T13:31:14Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c1cef7fa75baa8165037784fdfc159cee28ad3c0",
          "body": "Closes #139.\n\n- npm-publish: trigger on `push: tags v*.*.*` instead of `release: published`.\n  GITHUB_TOKEN-created Releases don't cascade workflow triggers, so the old\n  trigger never fired automatically. Pre-release tags are skipped on auto runs\n  (still publishable via dispatch). Adds a merge-bas\n[…]\n.0.1 (breaks `npm ci`).\n- README: point npm + node badges and the npm link at the scoped package name\n  (the old unscoped name 404s on npm).\n\nCo-authored-by: lml2468 <lml2468@users.noreply.github.com>",
          "is_bot": false,
          "headline": "ci(release): tag-push npm publish, sync lockfile, fix badges (#140)",
          "author_name": "Menglin Li",
          "author_login": "lml2468",
          "committed_at": "2026-06-10T11:34:24Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "01d4ed308883436a6a18292ccae22472f71967a5",
          "body": "First npm-installable release — packaging only, no runtime change. Bumps\nversion so the v1.0.1 tag carries the npm-publish metadata (scoped name,\nfiles allowlist, bin, publishConfig) that landed after the v1.0.0 tag.\n\nCo-authored-by: lml2468 <lml2468@users.noreply.github.com>",
          "is_bot": false,
          "headline": "chore(release): v1.0.1 (#138)",
          "author_name": "Menglin Li",
          "author_login": "lml2468",
          "committed_at": "2026-06-10T09:03:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "78e61592bfdeb621d1a5ec6284cadcb2ac7b776a",
          "body": "Make the package installable via `npm install` / `npx`.\n\n- package.json: scoped name, `files` allowlist (dist was .gitignore'd, so a\n  bare publish would have shipped an empty shell — the allowlist forces dist in),\n  `bin` for the CLI, `publishConfig` (public + provenance), repo/bugs/homepage,\n  `pr\n[…]\njson\n  version, runs ci+build+test, publishes with OIDC provenance.\n- README: document npm install / npx usage and the peer-dependency note.\n\nCo-authored-by: lml2468 <lml2468@users.noreply.github.com>",
          "is_bot": false,
          "headline": "feat(release): publish to npm as @mininglamp-oss/cc-channel-octo (#137)",
          "author_name": "Menglin Li",
          "author_login": "lml2468",
          "committed_at": "2026-06-10T08:53:18Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "174b0f2ca19eb433e63cf7a881b4934a5acf8f91",
          "body": "Cut the first stable release. Consolidate everything merged since v0.2.0\n(v0.3 + v1.0 lines, cron, skill-as-data, frozen prompt, security hardening)\ninto the CHANGELOG [1.0.0] section, bump package.json, mark v1.0 as the\ncurrent roadmap entry, and add the release-drafter config the release plane\n(release-drafter + release-publish, #130) needs.\n\nCo-authored-by: lml2468 <lml2468@users.noreply.github.com>",
          "is_bot": false,
          "headline": "chore(release): v1.0.0 (#136)",
          "author_name": "Menglin Li",
          "author_login": "lml2468",
          "committed_at": "2026-06-10T08:25:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0c2f25a0b14daee8936d1d643d522d7409322ead",
          "body": "Complete release-plane coverage for cc-channel-octo, matching sibling channel\nadapters. release-drafter maintains a rolling draft from merged PRs;\nrelease-publish publishes on manual dispatch with CI-run validation.",
          "is_bot": false,
          "headline": "ci: add release-drafter + release-publish callers (#130)",
          "author_name": "Menglin Li",
          "author_login": "lml2468",
          "committed_at": "2026-06-10T08:19:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "86ad4beb7f161fccad391b424f427f1ec6b1565c",
          "body": "…ssembly (#134)\n\nQuality-only cleanups on the #132 user-message-assembly path (no behavior change):\n- single-source MAX_USER_LLM_BYTES (export from file-inline-wrap.ts, import in index.ts)\n- gate fallbackRetryPrompt assembly on resume (skip the wasted build on first turns)\n- extract capBodyToBudget() for the duplicated body-cap logic in assembleUserMessage\n\nCloses #135",
          "is_bot": false,
          "headline": "chore: single-source byte cap + trim redundant work in user-message a…",
          "author_name": "Menglin Li",
          "author_login": "lml2468",
          "committed_at": "2026-06-10T08:00:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "85f90db6d3c7a716291016fb9caa1c535e3a59f5",
          "body": "…ssage (#132)\n\nEstablishes a read-only-background vs current-message boundary so the bot no longer replies to non-@ group messages it was never addressed to (#132).\n\n- agent-bridge.ts: SECURITY_PROMPT_PREFIX declares [Recent group messages]/[Prior conversation history] as read-only background; respo\n[…]\njiawei (all approved at cc31b15).\nFollow-ups (non-blocking, agreed): group-delta loss on stale-resume recovery; stale marker names in SECURITY_PROMPT_PREFIX; body-truncation cap overshoot.\n\nFixes #132",
          "is_bot": false,
          "headline": "fix(prompt): mark group/history context read-only + anchor current me…",
          "author_name": "Menglin Li",
          "author_login": "lml2468",
          "committed_at": "2026-06-10T07:32:14Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "22a4f2adc152b926c072ccfbe9ec9ae083c8da88",
          "body": "…te prompts (#131)\n\nAdd a Quick-Start subsection that lets a user set up cc-channel-octo by pasting\none prompt per step into the Claude Code CLI, instead of running the manual\nclone/build/config commands by hand.\n\nTwo deliberately-separate steps:\n- Step 1 (Install): clone + npm install + build + tes\n[…]\nand include a \"these are agentic prompts, read before\napproving\" caution so a user doesn't blindly paste a token-handling prompt.\n\nCo-authored-by: MarCo <148024452+Tuanzi1015@users.noreply.github.com>",
          "is_bot": false,
          "headline": "docs(readme): add \"Install via Claude Code CLI\" section with copy-pas…",
          "author_name": "Menglin Li",
          "author_login": "lml2468",
          "committed_at": "2026-06-09T14:32:37Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "67b63eb7fb1744eb4ab018a0b7b35935e80f3c70",
          "body": "…mpt (#128)\n\n* fix(security): sanitize Card/File names before they enter the LLM prompt\n\nCard/File payload.name (and forwarded sender names + uids) are\nuser-controlled and were interpolated UNESCAPED into `[文件: …]` / `[名片: …]`\nlabels and `<name>: ` transcript lines that flow into the user-role LLM\nm\n[…]\ns: +uid-fallback bypass case, +forwarded-body injection case. Full suite\ngreen (940). type-check + lint + build clean.\n\n---------\n\nCo-authored-by: MarCo <148024452+Tuanzi1015@users.noreply.github.com>",
          "is_bot": false,
          "headline": "fix(security): sanitize Card/File names before they enter the LLM pro…",
          "author_name": "Menglin Li",
          "author_login": "lml2468",
          "committed_at": "2026-06-09T14:06:59Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "95fbf899cd8b9b66b03b2534a2b6fa5d9dccd6cd",
          "body": "Batch of hardening findings from the full-codebase review (#1 Card/File\nprompt-injection shipped separately in #128):\n\n#2 WebSocket transport must be wss://. The WuKongIM payload layer is\n   AES-CBC with no auth tag, so transport integrity is the only tamper\n   guarantee. gateway.connect() now rejec\n[…]\ndary cases,\nupdated the stream-relay throw test to assert partial-flush. Full suite green\n(962). type-check + lint + build clean.\n\nCo-authored-by: MarCo <148024452+Tuanzi1015@users.noreply.github.com>",
          "is_bot": false,
          "headline": "fix(security): protocol + SSRF-adjacent hardening (review #2–#5) (#129)",
          "author_name": "Menglin Li",
          "author_login": "lml2468",
          "committed_at": "2026-06-09T14:00:24Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "319162ef9814b016aac8658626c3d04ac897f5a5",
          "body": "…aceMembers) (#127)\n\nC-class dead-code cleanup (follow-up to #126). These three read-only\ngroup/space query functions (originally G15/G16/G17) plus their BotGroup /\nGroupInfo / SpaceMember interfaces had ZERO production callers — only\ng15-g16-g17-api.test.ts referenced them. Equivalent capability is\n[…]\nserInfo). No other\nreferences remain. No runtime behavior change.\n\nVerification: type-check + lint + 935 tests + build all green.\n\nCo-authored-by: MarCo <148024452+Tuanzi1015@users.noreply.github.com>",
          "is_bot": false,
          "headline": "chore: remove dead Octo API fns (fetchBotGroups/getGroupInfo/searchSp…",
          "author_name": "Menglin Li",
          "author_login": "lml2468",
          "committed_at": "2026-06-09T12:14:18Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e4d68b13f4c140c7b696bb6c313bbb5f3095be06",
          "body": "…126)\n\n* chore(deps): remove dead media-upload pipeline + cos-nodejs-sdk-v5\n\nA Dependabot scan flagged 12 vulnerabilities, 11 of which trace to the\ndirect dependency cos-nodejs-sdk-v5@2.15.4 (Tencent COS SDK). It pulls in\nthe deprecated request@2.88.2 chain (form-data critical, an UNPATCHABLE\nreques\n[…]\nption-only inaccuracy — fixed in the description, no\ncode change.)\n\nVerification: type-check + lint + 945 tests green.\n\n---------\n\nCo-authored-by: MarCo <148024452+Tuanzi1015@users.noreply.github.com>",
          "is_bot": false,
          "headline": "chore(deps): remove dead media-upload pipeline + cos-nodejs-sdk-v5 (#…",
          "author_name": "Menglin Li",
          "author_login": "lml2468",
          "committed_at": "2026-06-09T11:59:21Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "218a66f7cc82260552cf5f8afe958e96c512c1f6",
          "body": "…e cases (#122)\n\nFollow-up review of PR #120 (frozen system prompt + SDK-session-owned\nhistory) surfaced six defects in the new session/message-assembly paths:\n\n1+2. Group-context delta dropped recent messages. selectMessagesSince\n  fetched the OLDEST 100 unseen rows (ORDER BY id ASC), so the char-b\n[…]\n newest-first + backlog, stale-id clear\non no-retry paths); tightened cap assertions to strict <= 98_304. Full\nsuite green (996).\n\nCo-authored-by: MarCo <148024452+Tuanzi1015@users.noreply.github.com>",
          "is_bot": false,
          "headline": "fix(session): correct group-context cursor data loss + resume/cap edg…",
          "author_name": "Menglin Li",
          "author_login": "lml2468",
          "committed_at": "2026-06-09T10:28:40Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "bdf72942bfb6df370e575fb0c93a625162ca4940",
          "body": "Retiring the first-time PR contributor welcome automation org-wide. The reusable\nworkflow is being removed; this drops its caller in this repo.",
          "is_bot": false,
          "headline": "ci: remove pr-contributor-welcome caller (#121)",
          "author_name": "Menglin Li",
          "author_login": "lml2468",
          "committed_at": "2026-06-09T10:02:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9c186eb803fa35055cb1d9fd764c7b482696f334",
          "body": "…story (#120)\n\n* feat(agent): frozen system prompt + SDK-session-owned conversation history\n\nThe bot's systemPrompt.append carried per-turn-variable content (group context\nB4 + conversation history B5) INSIDE the SDK's cache_control system block, so the\n~5.5KB preset+prefix that should cache-hit was\n[…]\nse), so recovery only fires before any content. Regression test added.\n\n994 tests (+2). type-check, lint, build green.\n\n---------\n\nCo-authored-by: MarCo <148024452+Tuanzi1015@users.noreply.github.com>",
          "is_bot": false,
          "headline": "feat(agent): frozen system prompt + SDK-session-owned conversation hi…",
          "author_name": "Menglin Li",
          "author_login": "lml2468",
          "committed_at": "2026-06-09T07:56:36Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "850766d0bbbfda5e985d20fb60dcf40796a21dcb",
          "body": "* fix(cron): robustness follow-ups from xhigh review (rate-limit, logging, ownerUid, seq, ISO)\n\nFour operational-hardening fixes for the cron feature (#115):\n\n#1/#5 (fire outcome-awareness):\n- Cron fires now bypass the per-session rate limit in session-router (same\n  rationale as the @mention-gate b\n[…]\norms. Added offset/leap/time-field\n  rollover test cases.\n\nReconciles package-lock zod entry (dev/peer -> dependency).\n\n---------\n\nCo-authored-by: MarCo <148024452+Tuanzi1015@users.noreply.github.com>",
          "is_bot": false,
          "headline": "fix(cron): robustness follow-ups from xhigh review (#118)",
          "author_name": "Menglin Li",
          "author_login": "lml2468",
          "committed_at": "2026-06-09T05:10:26Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "bfa42eea34660d6ece6927d860f53c1949fae35d",
          "body": "Pin actions/checkout, setup-node, setup-go, setup-python, upload-artifact, and\ngoreleaser-action to full commit SHAs (with version comments for Dependabot).\nMutable `@vX` tags are a supply-chain risk (OpenSSF Pinned-Dependencies);\nSHAs are immutable. Dependabot will continue to bump them via the comment.",
          "is_bot": false,
          "headline": "ci: pin third-party actions to commit SHA (#119)",
          "author_name": "Menglin Li",
          "author_login": "lml2468",
          "committed_at": "2026-06-09T05:09:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3be31e78f8e812f0c9feef73d26dc1e7fe8f9596",
          "body": "feat(cron): per-bot scheduled tasks — agent cron tool + gateway scheduler",
          "is_bot": false,
          "headline": "Merge pull request #116 from Mininglamp-OSS/marco/cron-scheduled-tasks",
          "author_name": "Menglin Li",
          "author_login": "lml2468",
          "committed_at": "2026-06-09T04:22:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b7395c266b33a58a6c8074f628dc0513a08c2615",
          "body": "…(review round 2)\n\nRound-2 review on #116:\n\n- 🔴 (cron.json writable past the owner-gate under bypassPermissions + '*'):\n  accepted as inherent to a full-tool bot and documented honestly. The owner-gate\n  is 防误 (stop casual misregistration), NOT 防攻 — under bypassPermissions +\n  allowedTools:'*' the a\n[…]\nOCAL process\n  time (TZ-controlled); one-shot ISO datetimes are absolute. Documented in\n  cron-evaluator.ts header + README.\n\nNo behavior change. 977 tests, lint (0 warnings), type-check, build green.",
          "is_bot": false,
          "headline": "docs(cron): clarify security model + declare zod + document timezone …",
          "author_name": "MarCo",
          "author_login": "Tuanzi1015",
          "committed_at": "2026-06-09T04:20:39Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "777b8da9c1dd3d9b2cf088c016c6b1a346e18407",
          "body": "…, doc self-propagation\n\nResolves the two blocking findings (+ the non-blocking one) from PR #116 review.\n\n#2 (Critical — lost updates): all cron.json mutations now go through a single\natomic CronStore.update(mutator) read-modify-write (load→mutate→save in one\nsynchronous pass, skips the write when \n[…]\nd); cron-security forged-\nnonce + wrong-nonce stay gated, genuine nonce passes; scheduler synth asserts\nnonce present. 977 tests, lint (0 warnings), type-check, build green.\n\nAddresses review on #116.",
          "is_bot": false,
          "headline": "fix(cron): address code-review — atomic store update, _cronFire nonce…",
          "author_name": "MarCo",
          "author_login": "Tuanzi1015",
          "committed_at": "2026-06-09T04:07:30Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b0c4c9e00f84b8af3a9ffb25303393b2de4375c9",
          "body": "…uler\n\nFills RUNTIME.md's scheduled-tasks gap: cc was reactive-only (agent ran only on\ninbound IM). Now, with sdk.cron, the agent can schedule its own work.\n\nHow it works:\n- Agent calls an in-process MCP cron tool (cron_create/list/delete). Tasks\n  persist to <baseDir>/<botId>/cron.json (atomic writ\n[…]\nscheduler wiring + per-turn tool injection). Docs:\nREADME, RUNTIME.md (scheduled-tasks ❌→✅), CHANGELOG, CLAUDE.md, config example.\n\n972 tests, lint (0 warnings), type-check, build green.\n\nCloses #115.",
          "is_bot": false,
          "headline": "feat(cron): per-bot scheduled tasks — agent cron tool + gateway sched…",
          "author_name": "MarCo",
          "author_login": "Tuanzi1015",
          "committed_at": "2026-06-09T03:44:51Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c2324cb180e2a81571f564abfed27ce059aeebe4",
          "body": "docs: add RUNTIME.md — cc as a Claude Agent SDK runtime (openclaw parity)",
          "is_bot": false,
          "headline": "Merge pull request #114 from Mininglamp-OSS/marco/runtime-capability-doc",
          "author_name": "Menglin Li",
          "author_login": "lml2468",
          "committed_at": "2026-06-09T02:47:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8a33aacb3a3fb6de9243f8b7cdfdd44a3fec806e",
          "body": "…ity)\n\nSystematically documents how cc-channel-octo provides an openclaw-style agent\nruntime by configuring the Claude Agent SDK rather than re-implementing one,\nstating per capability what cc delegates to the SDK, what cc adds, and what's\nstill a gap:\n\n- ✅ persona (SOUL.md → systemPrompt), behavior\n[…]\nritical facts belong in\n  auto-memory/SQLite, not only the rolling session.\n- Documents the CLAUDE.md upward-walk has-no-boundary caveat.\n\nLinked from README.md + CLAUDE.md. Docs-only; no code change.",
          "is_bot": false,
          "headline": "docs: add RUNTIME.md — cc as a Claude Agent SDK runtime (openclaw par…",
          "author_name": "MarCo",
          "author_login": "Tuanzi1015",
          "committed_at": "2026-06-09T02:43:08Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e9d5c946b886dfd0e29557389853ed11043b11ed",
          "body": "test: fix flaky e2e G1 (mock media-inbound) + sdk.skills load-path test",
          "is_bot": false,
          "headline": "Merge pull request #113 from Mininglamp-OSS/marco/fix-g1-flake",
          "author_name": "Menglin Li",
          "author_login": "lml2468",
          "committed_at": "2026-06-09T02:31:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a2ebaefe3ba8ac719bbc2ac3747143de5e0d882b",
          "body": "G1 ('non-text DM message is resolved') flaked because e2e.test.ts mocked\nocto/api.js and agent-bridge.js but not media-inbound.js — so the #86 inbound\nimage path ran a real network fetch (downloadInboundImage), timing out\nnondeterministically and failing the queryAgent assertion. ~2/3 of full-file\nr\n[…]\ns.\n\nAlso add the reviewer-suggested (PR #111) config test: sdk.skills survives the\nper-bot <baseDir>/<id>/config.json load through resolveBotConfigs().\n\n923 tests, lint (0 warnings), type-check green.",
          "is_bot": false,
          "headline": "test: fix flaky e2e G1 (mock media-inbound) + sdk.skills load-path test",
          "author_name": "MarCo",
          "author_login": "Tuanzi1015",
          "committed_at": "2026-06-09T02:27:48Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c1768bd75b3961b291568dc8e3eac5fc8f31f920",
          "body": "…kills\n\nfeat(config): add sdk.skills — per-bot selection over shared skill library",
          "is_bot": false,
          "headline": "Merge pull request #111 from Mininglamp-OSS/marco/multibot-identity-s…",
          "author_name": "Menglin Li",
          "author_login": "lml2468",
          "committed_at": "2026-06-09T02:25:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "45130b344acf060565f07f67291905c4e9c39a8e",
          "body": "…brary\n\nStrengthen the multi-bot model: each bot independently SELECTS which skills it\nenables, while the skill library stays centrally maintained.\n\n- config.ts: add sdk.skills?: string[] | 'all' (flows through the existing\n  ...override.sdk merge → per-bot). Names match SKILL.md name / dir name.\n- \n[…]\ny forwarded; omitted when unset.\nDocs: README (per-bot selection + identity + CLAUDE.md-walk warning), CLAUDE.md\ngotcha, CHANGELOG. 922 tests, lint (0 warnings), type-check, build green.\n\nCloses #110.",
          "is_bot": false,
          "headline": "feat(config): add sdk.skills — per-bot selection over shared skill li…",
          "author_name": "MarCo",
          "author_login": "Tuanzi1015",
          "committed_at": "2026-06-09T02:14:58Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "981577e7b1528e571f9c9222d70896240913de61",
          "body": "feat(config): add generic sdk.env — inject declared env into agent subprocess",
          "is_bot": false,
          "headline": "Merge pull request #109 from Mininglamp-OSS/marco/sdk-env-config",
          "author_name": "Menglin Li",
          "author_login": "lml2468",
          "committed_at": "2026-06-08T14:28:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a2327a20e9c8abe5d23ebd6df35e741d7f058db6",
          "body": "CodeQL is the deep cross-function security tier; running it on every PR is slow\nand redundant with per-PR breadth checks (gosec/eslint in the repo's own CI).\nMove to a weekly scheduled scan (Mondays) + manual dispatch. Findings still land\nin the Security tab.",
          "is_bot": false,
          "headline": "ci(codeql): switch to weekly schedule only (#108)",
          "author_name": "Menglin Li",
          "author_login": "lml2468",
          "committed_at": "2026-06-08T14:26:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "96cc14d1b75d4f799aa271086ff0ef4a1373bb8c",
          "body": "…bprocess\n\nMulti-bot deploys sharing one credential-keyed CLI (e.g. octo-cli, which needs\n--bot-id/OCTO_BOT_ID to pick among ≥2 stored profiles) had no way to tell each\nagent subprocess which identity to use — cc injects no tool-specific env since\n#100, so a bare `octo-cli` call errors \"no bot selec\n[…]\nUrl, process.env preservation, and the empty/unset\nomission. Docs: config table row + Agent skills multi-bot note + CHANGELOG.\n\n918 tests, lint (0 warnings), type-check, build all green.\n\nCloses #107.",
          "is_bot": false,
          "headline": "feat(config): add generic sdk.env — inject declared env into agent su…",
          "author_name": "MarCo",
          "author_login": "Tuanzi1015",
          "committed_at": "2026-06-08T14:24:29Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "cbaf1cc207ba9096eda2227fc05e7a5519d70d28",
          "body": "…oolprogress\n\nrefactor: remove webhook transport (dead code) + enrich toolProgress params",
          "is_bot": false,
          "headline": "Merge pull request #106 from Mininglamp-OSS/marco/rm-webhook-enrich-t…",
          "author_name": "Menglin Li",
          "author_login": "lml2468",
          "committed_at": "2026-06-08T14:08:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8cbff3ffd8f791e4a6f298ad46b24925841e9a98",
          "body": "…params\n\n## Remove webhook transport\nThe Octo server never POSTs to the bot, so webhook inbound mode could never\nreceive anything — dead code. Removed entirely; WebSocket is the only transport.\n- Deleted src/webhook.ts + src/__tests__/webhook.test.ts.\n- config.ts: dropped `transport` + `webhook.*` f\n[…]\npace-collapsed and capped\nat MAX_TOOL_PARAM_CHARS (120) to avoid flooding/leaking long inputs. New\nformat-tool-params.test.ts.\n\n914 tests, lint (0 warnings), type-check, build all green.\n\nCloses #105.",
          "is_bot": false,
          "headline": "refactor: remove webhook transport (dead code) + enrich toolProgress …",
          "author_name": "MarCo",
          "author_login": "Tuanzi1015",
          "committed_at": "2026-06-08T14:05:18Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f4f83ecede0d55bb43ab2acefe422010a61be6e2",
          "body": "refactor(config)!: JSON-only config, remove all env-var overrides",
          "is_bot": false,
          "headline": "Merge pull request #104 from Mininglamp-OSS/marco/config-json-only",
          "author_name": "Menglin Li",
          "author_login": "lml2468",
          "committed_at": "2026-06-08T13:53:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "221d14ebb94ce6adbd648c8c9a5a15d824d79b33",
          "body": "Configuration now comes solely from the two-layer config.json (global +\nper-bot). The entire CC_OCTO_* environment-variable surface and the\nANTHROPIC_BASE_URL env read are removed: applyEnv() and its parseCsv /\nparseIntStrict helpers are deleted from config.ts.\n\nsdk.anthropicBaseUrl remains a config\n[…]\nnv mentions and corrects the stale settingSources\ndefault to [\"project\"]; CHANGELOG documents the breaking change + migration.\n\n936 tests, lint (0 warnings), type-check, build all green.\n\nCloses #103.",
          "is_bot": false,
          "headline": "refactor(config)!: JSON-only config, remove all env-var overrides",
          "author_name": "MarCo",
          "author_login": "Tuanzi1015",
          "committed_at": "2026-06-08T13:50:29Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "26687feaf3083f39ccd30a4268f43e4a073f6b3a",
          "body": "feat(skills): generic skill-driven external tooling, remove #94 octo-cli code",
          "is_bot": false,
          "headline": "Merge pull request #102 from Mininglamp-OSS/marco/generic-skill-loading",
          "author_name": "Menglin Li",
          "author_login": "lml2468",
          "committed_at": "2026-06-08T13:27:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ce0262bcab771b4532458571db9a78156a7a1387",
          "body": "…cli code\n\nReplace the octo-cli-specific integration (#94) with a generic, data-driven\nmechanism: external CLIs (octo-cli, gh, anything) are integrated as standard\nClaude skills, not code. cc does one generic thing — load whatever skills are\npresent. Zero CLI names in cc's core.\n\nHow it works:\n- Two\n[…]\n env injection, and the startup profile seeding\n(all #94, never released). Added: src/skill-linker.ts + tests.\n\n998 tests, lint (0 warnings), type-check, build all green.\n\nCloses #100. Supersedes #94.",
          "is_bot": false,
          "headline": "feat(skills): generic skill-driven external tooling, remove #94 octo-…",
          "author_name": "MarCo",
          "author_login": "Tuanzi1015",
          "committed_at": "2026-06-08T13:22:09Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c03e39d24c82d6a843adcdb5a0ec722fddacda55",
          "body": "The onboarding template (copied from an older caller) only forwarded\nOCTO_BOT_TOKEN, so the triage webhook mode of octo-issue-notify@v1 never\nreceived its URL and was silently skipped. Forward TRIAGE_WEBHOOK_URL so the\nissue triage agent is actually invoked when the secret is configured.",
          "is_bot": false,
          "headline": "ci: pass TRIAGE_WEBHOOK_URL to octo-issue-notify (#99)",
          "author_name": "Menglin Li",
          "author_login": "lml2468",
          "committed_at": "2026-06-08T13:11:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "704095d8dd41e24bc033b9099e934159c637d655",
          "body": "Wire cc-channel-octo into the org reusable-workflow platform as an end-to-end\nvalidation of the full caller set, including the three newly-added reusables\n(dependency-review, secret-scan, pr-title-lint) that had zero consumers.\n\nAdds @v1 callers for: board (auto-add, check-sprint), notifications\n(is\n[…]\n-title-lint, workflow-sanity), release-less security (codeql JS/TS,\ndependency-review, secret-scan). Existing Node ci.yml retained (orthogonal).\n\nIM project group: fe17cbbc... (cc-channel-octo's own).",
          "is_bot": false,
          "headline": "ci: onboard full org CI/CD platform (reusable workflows @v1) (#96)",
          "author_name": "Menglin Li",
          "author_login": "lml2468",
          "committed_at": "2026-06-08T12:50:46Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "637ceefbdf5f9228fb021e64e10dd1e31ab85a6a",
          "body": "…ation\n\nfeat(agent-tools): operate Octo via external octo-cli (Bash), replace #87 MCP",
          "is_bot": false,
          "headline": "Merge pull request #95 from Mininglamp-OSS/marco/octo-cli-bash-integr…",
          "author_name": "Menglin Li",
          "author_login": "lml2468",
          "committed_at": "2026-06-08T12:16:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d9c16a6921dc1b128c9ab5109a1de679e881afe3",
          "body": "… #87 MCP\n\nPivot agent tooling from the in-process MCP server (#87) to shelling out to the\nexternal `octo-cli` binary via the built-in Bash tool, gated behind a new\n`sdk.octoCli` toggle (env CC_OCTO_SDK_OCTO_CLI; default off).\n\nWhy: octo-cli is purpose-built for agents (47 ops, read + write, JSON-en\n[…]\ntoggle + mcpServers wiring (#87,\nnever released). Added: src/octo-cli.ts (profile seed), src/octo-cli-guide.ts.\n1002 tests, lint (0 warnings), type-check, build all green.\n\nCloses #94. Supersedes #87.",
          "is_bot": false,
          "headline": "feat(agent-tools): operate Octo via external octo-cli (Bash), replace…",
          "author_name": "MarCo",
          "author_login": "Tuanzi1015",
          "committed_at": "2026-06-08T12:13:23Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "77de07ac03cd9b4a3235925622127efa24f0e54e",
          "body": "feat(agent-tools): read-only octo_management MCP tool server (#87 phase 1)",
          "is_bot": false,
          "headline": "Merge pull request #93 from Mininglamp-OSS/marco/p2-octo-tools-readonly",
          "author_name": "Menglin Li",
          "author_login": "lml2468",
          "committed_at": "2026-06-08T11:37:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1ea37300831ba390cb2164bb16f470643bf5ed1e",
          "body": "…se 1)\n\nCloses #87 (read-only phase).\n\ncc registered NO custom agent tools — the model could not perform any Octo-side\noperation. This adds an in-process MCP server (createSdkMcpServer) exposing four\nREAD-ONLY Octo lookups, backed by the existing octo/api.ts REST:\n- list_groups      → fetchBotGroups\n[…]\nd: with the flag on, the bot answered \"搜索成员 李\" by calling\nsearch_members and returning real names it could not have guessed (李梦林/李志伟/\n李飞飞, correctly tagging the bot). 1002 tests, lint/build/NUL clean.",
          "is_bot": false,
          "headline": "feat(agent-tools): read-only octo_management MCP tool server (#87 pha…",
          "author_name": "MarCo",
          "author_login": "Tuanzi1015",
          "committed_at": "2026-06-08T11:33:01Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "9b31fd204f4dfab5664f32de8adf4b7325338735",
          "body": "feat(media): native image input — download inbound images for the agent to see",
          "is_bot": false,
          "headline": "Merge pull request #92 from Mininglamp-OSS/marco/p1-native-image-input",
          "author_name": "Menglin Li",
          "author_login": "lml2468",
          "committed_at": "2026-06-08T11:21:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ce27c298191dc68549a2958a99ea48a85d60030e",
          "body": "…nt to see\n\nCloses #86.\n\nBefore: inbound images were rendered as a `[图片]\\n<URL>` text marker, so the\nagent only got a URL string and could not actually see the image. Worse, real\nOcto deployments serve media from a SEPARATE CDN host than apiUrl\n(cdn.deepminer.com.cn vs im.deepminer.com.cn), and buil\n[…]\n cwd janitor reclaims the images via the existing 7-day TTL.\n\nLive-verified: the bot downloaded a real RichText image and described it\naccurately (\"举着鱼竿的小章鱼吉祥物…Octo\"). 982 tests, lint/build/NUL clean.",
          "is_bot": false,
          "headline": "feat(media): native image input — download inbound images for the age…",
          "author_name": "MarCo",
          "author_login": "Tuanzi1015",
          "committed_at": "2026-06-08T11:14:56Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "29e2914e5efe244958e480a0e4973345d760a2e3",
          "body": "refactor(hardening): atomic lock, v4-decode dedup, typed prompt choke point",
          "is_bot": false,
          "headline": "Merge pull request #85 from Mininglamp-OSS/marco/review2-hardening",
          "author_name": "Menglin Li",
          "author_login": "lml2468",
          "committed_at": "2026-06-08T10:20:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2176c40fae74757ed3994588d0019719ec2a412f",
          "body": "… point\n\nCloses #84. Deferred items from the second review (#82).\n\n- gateway: acquireLock now creates the lock ATOMICALLY (writeFileSync flag 'wx'\n  = O_EXCL) with a stale-reclaim retry, closing the existsSync→write TOCTOU where\n  two concurrent starts could both acquire. Reclaim only a provably-dea\n[…]\ner-enforced, not convention. Output is\n  byte-identical (same escaping); all existing tests pass unchanged.\n\nTests: SafeText minters, atomic-lock empty/corrupt reclaim. 972 pass,\nlint/build/NUL clean.",
          "is_bot": false,
          "headline": "refactor(hardening): atomic lock, v4-decode dedup, typed prompt choke…",
          "author_name": "MarCo",
          "author_login": "Tuanzi1015",
          "committed_at": "2026-06-08T10:17:13Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3af4f7f65130883343004b4427883db6cab4f13a",
          "body": "fix(security): close second-review gaps (regressions + injection + protocol)",
          "is_bot": false,
          "headline": "Merge pull request #83 from Mininglamp-OSS/marco/review2-correctness",
          "author_name": "Menglin Li",
          "author_login": "lml2468",
          "committed_at": "2026-06-08T10:12:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5ddbcc715674facef64811e136f090275a546631",
          "body": "…otocol)\n\nCloses #82. Follow-ups from the second max-effort review, incl. 3 regressions the\nprior remediation introduced.\n\nRegressions fixed:\n- gateway heartbeat: the `finally { heartbeatInFlight=false }` was not\n  generation-guarded, so an orphaned old-gen tick cleared the live generation's\n  flag \n[…]\nK salt by BYTE length (Buffer.byteLength) and take\n  the IV as the first 16 bytes — a 16-char multibyte salt no longer yields a\n  wrong IV.\n\nTests added for every item. 967 pass, lint/build/NUL clean.",
          "is_bot": false,
          "headline": "fix(security): close second-review gaps (regressions + injection + pr…",
          "author_name": "MarCo",
          "author_login": "Tuanzi1015",
          "committed_at": "2026-06-08T10:08:59Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f3e7565e2f827308efd9b295a1376b2979246929",
          "body": "fix(cleanup): NAT64/6to4 SSRF, /reset comment, joinPath dedup, drop buildPrompt",
          "is_bot": false,
          "headline": "Merge pull request #81 from Mininglamp-OSS/marco/medium-cleanup",
          "author_name": "Menglin Li",
          "author_login": "lml2468",
          "committed_at": "2026-06-08T09:38:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "13bb973314e3aa31750c7691f1fe23ec3a2ade97",
          "body": "…uildPrompt\n\nCloses #80. Medium + cleanup findings from the full-codebase review.\n\n- url-policy: isPrivateOrLocalAddress now detects NAT64 (64:ff9b::/96) and 6to4\n  (2002::/16) IPv6 addresses, which embed an IPv4 — on a NAT64-enabled host a\n  name resolving to e.g. 64:ff9b::7f00:1 reached loopback. \n[…]\ns tests.\n\nDeferred to a future refactor (too much churn for the value): dropping the cwd\nalias / ResolvedBotConfig split, and the test-only route()/buildHistoryPrefix.\n\n960 pass, lint/build/NUL clean.",
          "is_bot": false,
          "headline": "fix(cleanup): NAT64/6to4 SSRF, /reset comment, joinPath dedup, drop b…",
          "author_name": "MarCo",
          "author_login": "Tuanzi1015",
          "committed_at": "2026-06-08T09:36:37Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "67948ccd2924467892c541bdcd88f9423434b699",
          "body": "fix(gateway): startup-leak, heartbeat overlap, lock PID-reuse, O(n²) frames",
          "is_bot": false,
          "headline": "Merge pull request #79 from Mininglamp-OSS/marco/gateway-lifecycle",
          "author_name": "Menglin Li",
          "author_login": "lml2468",
          "committed_at": "2026-06-08T09:29:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d8762db1166a4bf014e82cc48a0a8a10628a21bf",
          "body": "… frames\n\nCloses #78. Four resource/lifecycle bugs from the full-codebase review.\n\n1. index.ts: multi-bot startup used Promise.all, so if one bot's startBot()\n   rejected (after others acquired locks/stores/intervals) those resolved stacks\n   leaked. Now Promise.allSettled + shutdown() the started b\n[…]\nt startup cleanup is covered by the existing shutdown path;\nheartbeat no-overlap test; lock nonce-format + EPERM-reclaim tests; socket\nmulti-packet + split-frame tests. 952 pass, lint/build/NUL clean.",
          "is_bot": false,
          "headline": "fix(gateway): startup-leak, heartbeat overlap, lock PID-reuse, O(n^2)…",
          "author_name": "MarCo",
          "author_login": "Tuanzi1015",
          "committed_at": "2026-06-08T09:27:18Z",
          "body_truncated": true,
          "is_coding_agent": false
        }
      ],
      "releases_count": 6,
      "commits_last_year": 270,
      "latest_release_at": "2026-06-26T02:47:37Z",
      "latest_release_tag": "v1.0.3",
      "releases_from_tags": false,
      "days_since_last_push": 8,
      "active_weeks_last_year": 6,
      "days_since_latest_release": 33,
      "mean_days_between_releases": 4.2
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": true,
      "health_percentage": 100,
      "has_issue_template": false,
      "has_code_of_conduct": true,
      "has_pull_request_template": true
    },
    "ecosystem": {
      "packages": [
        {
          "name": "@mininglamp-oss/cc-channel-octo",
          "exists": true,
          "license": "Apache-2.0",
          "keywords": [],
          "ecosystem": "npm",
          "matches_repo": true,
          "registry_url": "https://www.npmjs.com/package/@mininglamp-oss/cc-channel-octo",
          "is_deprecated": false,
          "latest_version": "1.0.3",
          "repository_url": "https://github.com/Mininglamp-OSS/cc-channel-octo",
          "versions_count": 28,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 1,
          "monthly_downloads": 3774,
          "first_published_at": "2026-06-10T09:07:08.874000Z",
          "latest_published_at": "2026-06-26T01:40:57.744000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 33
        }
      ]
    },
    "popularity": {
      "forks": 9,
      "stars": 30,
      "watchers": 0,
      "fork_history": {
        "days": [
          {
            "date": "2026-06-06",
            "count": 1
          },
          {
            "date": "2026-06-25",
            "count": 1
          },
          {
            "date": "2026-06-29",
            "count": 1
          },
          {
            "date": "2026-06-30",
            "count": 1
          },
          {
            "date": "2026-07-01",
            "count": 1
          },
          {
            "date": "2026-07-13",
            "count": 1
          },
          {
            "date": "2026-07-16",
            "count": 1
          },
          {
            "date": "2026-07-21",
            "count": 1
          },
          {
            "date": "2026-07-29",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 9,
        "total_forks": 9
      },
      "star_history": null,
      "open_issues_and_prs": 4
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": false,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [
        "tsconfig.json"
      ],
      "toolchain_manifests": [],
      "largest_source_bytes": 61558,
      "source_files_sampled": 108,
      "oversized_source_files": 1,
      "agent_instruction_files": [
        "CLAUDE.md"
      ],
      "agent_instruction_max_bytes": 6699
    },
    "dependencies": {
      "manifests": [
        "package.json"
      ],
      "advisories": {
        "error": null,
        "scope": "published_package",
        "source": "osv",
        "findings": [],
        "collected": true,
        "malicious": [],
        "truncated": false,
        "by_severity": {},
        "advisory_count": 0,
        "affected_count": 0,
        "assessed_count": 43,
        "malicious_count": 0,
        "assessed_package": "npm:@mininglamp-oss/cc-channel-octo@1.0.3",
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "npm"
      ],
      "dependencies": [
        {
          "name": "better-sqlite3",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^12.10.0"
        },
        {
          "name": "crypto-js",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^4.2.0"
        },
        {
          "name": "curve25519-js",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.0.4"
        },
        {
          "name": "md5-typescript",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.0.5"
        },
        {
          "name": "ws",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^8.16.0"
        },
        {
          "name": "zod",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^4.4.3"
        }
      ],
      "all_dependencies": {
        "error": null,
        "source": "github-sbom",
        "packages": [
          {
            "name": "better-sqlite3",
            "direct": true,
            "version": "12.10.0",
            "ecosystem": "npm"
          },
          {
            "name": "crypto-js",
            "direct": true,
            "version": "4.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "curve25519-js",
            "direct": true,
            "version": "0.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "md5-typescript",
            "direct": true,
            "version": "1.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "ws",
            "direct": true,
            "version": "8.21.0",
            "ecosystem": "npm"
          },
          {
            "name": "zod",
            "direct": true,
            "version": "4.4.3",
            "ecosystem": "npm"
          },
          {
            "name": "@ampproject/remapping",
            "direct": false,
            "version": "2.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "@anthropic-ai/claude-agent-sdk",
            "direct": false,
            "version": "0.3.162",
            "ecosystem": "npm"
          },
          {
            "name": "@anthropic-ai/claude-agent-sdk-darwin-arm64",
            "direct": false,
            "version": "0.3.162",
            "ecosystem": "npm"
          },
          {
            "name": "@anthropic-ai/claude-agent-sdk-darwin-x64",
            "direct": false,
            "version": "0.3.162",
            "ecosystem": "npm"
          },
          {
            "name": "@anthropic-ai/claude-agent-sdk-linux-arm64",
            "direct": false,
            "version": "0.3.162",
            "ecosystem": "npm"
          },
          {
            "name": "@anthropic-ai/claude-agent-sdk-linux-arm64-musl",
            "direct": false,
            "version": "0.3.162",
            "ecosystem": "npm"
          },
          {
            "name": "@anthropic-ai/claude-agent-sdk-linux-x64",
            "direct": false,
            "version": "0.3.162",
            "ecosystem": "npm"
          },
          {
            "name": "@anthropic-ai/claude-agent-sdk-linux-x64-musl",
            "direct": false,
            "version": "0.3.162",
            "ecosystem": "npm"
          },
          {
            "name": "@anthropic-ai/claude-agent-sdk-win32-arm64",
            "direct": false,
            "version": "0.3.162",
            "ecosystem": "npm"
          },
          {
            "name": "@anthropic-ai/claude-agent-sdk-win32-x64",
            "direct": false,
            "version": "0.3.162",
            "ecosystem": "npm"
          },
          {
            "name": "@anthropic-ai/sdk",
            "direct": false,
            "version": "0.100.1",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/code-frame",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-string-parser",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-validator-identifier",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/parser",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/runtime",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/types",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@bcoe/v8-coverage",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "@commitlint/cli",
            "direct": false,
            "version": "19.8.1",
            "ecosystem": "npm"
          },
          {
            "name": "@commitlint/config-conventional",
            "direct": false,
            "version": "19.8.1",
            "ecosystem": "npm"
          },
          {
            "name": "@commitlint/config-validator",
            "direct": false,
            "version": "19.8.1",
            "ecosystem": "npm"
          },
          {
            "name": "@commitlint/ensure",
            "direct": false,
            "version": "19.8.1",
            "ecosystem": "npm"
          },
          {
            "name": "@commitlint/execute-rule",
            "direct": false,
            "version": "19.8.1",
            "ecosystem": "npm"
          },
          {
            "name": "@commitlint/format",
            "direct": false,
            "version": "19.8.1",
            "ecosystem": "npm"
          },
          {
            "name": "@commitlint/is-ignored",
            "direct": false,
            "version": "19.8.1",
            "ecosystem": "npm"
          },
          {
            "name": "@commitlint/lint",
            "direct": false,
            "version": "19.8.1",
            "ecosystem": "npm"
          },
          {
            "name": "@commitlint/load",
            "direct": false,
            "version": "19.8.1",
            "ecosystem": "npm"
          },
          {
            "name": "@commitlint/message",
            "direct": false,
            "version": "19.8.1",
            "ecosystem": "npm"
          },
          {
            "name": "@commitlint/parse",
            "direct": false,
            "version": "19.8.1",
            "ecosystem": "npm"
          },
          {
            "name": "@commitlint/read",
            "direct": false,
            "version": "19.8.1",
            "ecosystem": "npm"
          },
          {
            "name": "@commitlint/resolve-extends",
            "direct": false,
            "version": "19.8.1",
            "ecosystem": "npm"
          },
          {
            "name": "@commitlint/rules",
            "direct": false,
            "version": "19.8.1",
            "ecosystem": "npm"
          },
          {
            "name": "@commitlint/to-lines",
            "direct": false,
            "version": "19.8.1",
            "ecosystem": "npm"
          },
          {
            "name": "@commitlint/top-level",
            "direct": false,
            "version": "19.8.1",
            "ecosystem": "npm"
          },
          {
            "name": "@commitlint/types",
            "direct": false,
            "version": "19.8.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/aix-ppc64",
            "direct": false,
            "version": "0.27.7",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/android-arm",
            "direct": false,
            "version": "0.27.7",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/android-arm64",
            "direct": false,
            "version": "0.27.7",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/android-x64",
            "direct": false,
            "version": "0.27.7",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/darwin-arm64",
            "direct": false,
            "version": "0.27.7",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/darwin-x64",
            "direct": false,
            "version": "0.27.7",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/freebsd-arm64",
            "direct": false,
            "version": "0.27.7",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/freebsd-x64",
            "direct": false,
            "version": "0.27.7",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-arm",
            "direct": false,
            "version": "0.27.7",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-arm64",
            "direct": false,
            "version": "0.27.7",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-ia32",
            "direct": false,
            "version": "0.27.7",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-loong64",
            "direct": false,
            "version": "0.27.7",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-mips64el",
            "direct": false,
            "version": "0.27.7",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-ppc64",
            "direct": false,
            "version": "0.27.7",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-riscv64",
            "direct": false,
            "version": "0.27.7",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-s390x",
            "direct": false,
            "version": "0.27.7",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-x64",
            "direct": false,
            "version": "0.27.7",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/netbsd-arm64",
            "direct": false,
            "version": "0.27.7",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/netbsd-x64",
            "direct": false,
            "version": "0.27.7",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/openbsd-arm64",
            "direct": false,
            "version": "0.27.7",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/openbsd-x64",
            "direct": false,
            "version": "0.27.7",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/openharmony-arm64",
            "direct": false,
            "version": "0.27.7",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/sunos-x64",
            "direct": false,
            "version": "0.27.7",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/win32-arm64",
            "direct": false,
            "version": "0.27.7",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/win32-ia32",
            "direct": false,
            "version": "0.27.7",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/win32-x64",
            "direct": false,
            "version": "0.27.7",
            "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/config-array",
            "direct": false,
            "version": "0.21.2",
            "ecosystem": "npm"
          },
          {
            "name": "@eslint/config-helpers",
            "direct": false,
            "version": "0.4.2",
            "ecosystem": "npm"
          },
          {
            "name": "@eslint/core",
            "direct": false,
            "version": "0.17.0",
            "ecosystem": "npm"
          },
          {
            "name": "@eslint/eslintrc",
            "direct": false,
            "version": "3.3.5",
            "ecosystem": "npm"
          },
          {
            "name": "@eslint/js",
            "direct": false,
            "version": "9.39.4",
            "ecosystem": "npm"
          },
          {
            "name": "@eslint/object-schema",
            "direct": false,
            "version": "2.1.7",
            "ecosystem": "npm"
          },
          {
            "name": "@eslint/plugin-kit",
            "direct": false,
            "version": "0.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "@hono/node-server",
            "direct": false,
            "version": "1.19.14",
            "ecosystem": "npm"
          },
          {
            "name": "@humanfs/core",
            "direct": false,
            "version": "0.19.2",
            "ecosystem": "npm"
          },
          {
            "name": "@humanfs/node",
            "direct": false,
            "version": "0.16.8",
            "ecosystem": "npm"
          },
          {
            "name": "@humanfs/types",
            "direct": false,
            "version": "0.15.0",
            "ecosystem": "npm"
          },
          {
            "name": "@humanwhocodes/module-importer",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "@humanwhocodes/retry",
            "direct": false,
            "version": "0.4.3",
            "ecosystem": "npm"
          },
          {
            "name": "@isaacs/cliui",
            "direct": false,
            "version": "8.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "@istanbuljs/schema",
            "direct": false,
            "version": "0.1.6",
            "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": "@modelcontextprotocol/sdk",
            "direct": false,
            "version": "1.29.0",
            "ecosystem": "npm"
          },
          {
            "name": "@pkgjs/parseargs",
            "direct": false,
            "version": "0.11.0",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-android-arm-eabi",
            "direct": false,
            "version": "4.61.1",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-android-arm64",
            "direct": false,
            "version": "4.61.1",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-darwin-arm64",
            "direct": false,
            "version": "4.61.1",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-darwin-x64",
            "direct": false,
            "version": "4.61.1",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-freebsd-arm64",
            "direct": false,
            "version": "4.61.1",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-freebsd-x64",
            "direct": false,
            "version": "4.61.1",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-linux-arm-gnueabihf",
            "direct": false,
            "version": "4.61.1",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-linux-arm-musleabihf",
            "direct": false,
            "version": "4.61.1",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-linux-arm64-gnu",
            "direct": false,
            "version": "4.61.1",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-linux-arm64-musl",
            "direct": false,
            "version": "4.61.1",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-linux-loong64-gnu",
            "direct": false,
            "version": "4.61.1",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-linux-loong64-musl",
            "direct": false,
            "version": "4.61.1",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-linux-ppc64-gnu",
            "direct": false,
            "version": "4.61.1",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-linux-ppc64-musl",
            "direct": false,
            "version": "4.61.1",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-linux-riscv64-gnu",
            "direct": false,
            "version": "4.61.1",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-linux-riscv64-musl",
            "direct": false,
            "version": "4.61.1",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-linux-s390x-gnu",
            "direct": false,
            "version": "4.61.1",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-linux-x64-gnu",
            "direct": false,
            "version": "4.61.1",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-linux-x64-musl",
            "direct": false,
            "version": "4.61.1",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-openbsd-x64",
            "direct": false,
            "version": "4.61.1",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-openharmony-arm64",
            "direct": false,
            "version": "4.61.1",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-win32-arm64-msvc",
            "direct": false,
            "version": "4.61.1",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-win32-ia32-msvc",
            "direct": false,
            "version": "4.61.1",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-win32-x64-gnu",
            "direct": false,
            "version": "4.61.1",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-win32-x64-msvc",
            "direct": false,
            "version": "4.61.1",
            "ecosystem": "npm"
          },
          {
            "name": "@stablelib/base64",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "@types/better-sqlite3",
            "direct": false,
            "version": "7.6.13",
            "ecosystem": "npm"
          },
          {
            "name": "@types/chai",
            "direct": false,
            "version": "5.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@types/conventional-commits-parser",
            "direct": false,
            "version": "5.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "@types/crypto-js",
            "direct": false,
            "version": "4.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "@types/deep-eql",
            "direct": false,
            "version": "4.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "@types/estree",
            "direct": false,
            "version": "1.0.9",
            "ecosystem": "npm"
          },
          {
            "name": "@types/json-schema",
            "direct": false,
            "version": "7.0.15",
            "ecosystem": "npm"
          },
          {
            "name": "@types/node",
            "direct": false,
            "version": "25.9.1",
            "ecosystem": "npm"
          },
          {
            "name": "@types/ws",
            "direct": false,
            "version": "8.18.1",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/eslint-plugin",
            "direct": false,
            "version": "8.60.1",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/parser",
            "direct": false,
            "version": "8.60.1",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/project-service",
            "direct": false,
            "version": "8.60.1",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/scope-manager",
            "direct": false,
            "version": "8.60.1",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/tsconfig-utils",
            "direct": false,
            "version": "8.60.1",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/type-utils",
            "direct": false,
            "version": "8.60.1",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/types",
            "direct": false,
            "version": "8.60.1",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/typescript-estree",
            "direct": false,
            "version": "8.60.1",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/utils",
            "direct": false,
            "version": "8.60.1",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/visitor-keys",
            "direct": false,
            "version": "8.60.1",
            "ecosystem": "npm"
          },
          {
            "name": "@vitest/coverage-v8",
            "direct": false,
            "version": "3.2.6",
            "ecosystem": "npm"
          },
          {
            "name": "@vitest/expect",
            "direct": false,
            "version": "3.2.6",
            "ecosystem": "npm"
          },
          {
            "name": "@vitest/mocker",
            "direct": false,
            "version": "3.2.6",
            "ecosystem": "npm"
          },
          {
            "name": "@vitest/pretty-format",
            "direct": false,
            "version": "3.2.6",
            "ecosystem": "npm"
          },
          {
            "name": "@vitest/runner",
            "direct": false,
            "version": "3.2.6",
            "ecosystem": "npm"
          },
          {
            "name": "@vitest/snapshot",
            "direct": false,
            "version": "3.2.6",
            "ecosystem": "npm"
          },
          {
            "name": "@vitest/spy",
            "direct": false,
            "version": "3.2.6",
            "ecosystem": "npm"
          },
          {
            "name": "@vitest/utils",
            "direct": false,
            "version": "3.2.6",
            "ecosystem": "npm"
          },
          {
            "name": "accepts",
            "direct": false,
            "version": "2.0.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": "ajv",
            "direct": false,
            "version": "6.15.0",
            "ecosystem": "npm"
          },
          {
            "name": "ajv",
            "direct": false,
            "version": "8.20.0",
            "ecosystem": "npm"
          },
          {
            "name": "ajv-formats",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-escapes",
            "direct": false,
            "version": "7.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-regex",
            "direct": false,
            "version": "5.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-regex",
            "direct": false,
            "version": "6.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-styles",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-styles",
            "direct": false,
            "version": "6.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "argparse",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "array-ify",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "assertion-error",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "ast-v8-to-istanbul",
            "direct": false,
            "version": "0.3.12",
            "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": "bindings",
            "direct": false,
            "version": "1.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "bl",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "body-parser",
            "direct": false,
            "version": "2.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "brace-expansion",
            "direct": false,
            "version": "1.1.15",
            "ecosystem": "npm"
          },
          {
            "name": "brace-expansion",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "brace-expansion",
            "direct": false,
            "version": "5.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "braces",
            "direct": false,
            "version": "3.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "buffer",
            "direct": false,
            "version": "5.7.1",
            "ecosystem": "npm"
          },
          {
            "name": "bytes",
            "direct": false,
            "version": "3.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "cac",
            "direct": false,
            "version": "6.7.14",
            "ecosystem": "npm"
          },
          {
            "name": "call-bind-apply-helpers",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "call-bound",
            "direct": false,
            "version": "1.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "callsites",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "chai",
            "direct": false,
            "version": "5.3.3",
            "ecosystem": "npm"
          },
          {
            "name": "chalk",
            "direct": false,
            "version": "4.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "chalk",
            "direct": false,
            "version": "5.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "check-error",
            "direct": false,
            "version": "2.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "chownr",
            "direct": false,
            "version": "1.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "cli-cursor",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "cli-truncate",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "cliui",
            "direct": false,
            "version": "8.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "color-convert",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "color-name",
            "direct": false,
            "version": "1.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "colorette",
            "direct": false,
            "version": "2.0.20",
            "ecosystem": "npm"
          },
          {
            "name": "commander",
            "direct": false,
            "version": "13.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "compare-func",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "concat-map",
            "direct": false,
            "version": "0.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "content-disposition",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "content-type",
            "direct": false,
            "version": "1.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "content-type",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "conventional-changelog-angular",
            "direct": false,
            "version": "7.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "conventional-changelog-conventionalcommits",
            "direct": false,
            "version": "7.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "conventional-commits-parser",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "cookie",
            "direct": false,
            "version": "0.7.2",
            "ecosystem": "npm"
          },
          {
            "name": "cookie-signature",
            "direct": false,
            "version": "1.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "cors",
            "direct": false,
            "version": "2.8.6",
            "ecosystem": "npm"
          },
          {
            "name": "cosmiconfig",
            "direct": false,
            "version": "9.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "cosmiconfig-typescript-loader",
            "direct": false,
            "version": "6.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "cross-spawn",
            "direct": false,
            "version": "7.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "dargs",
            "direct": false,
            "version": "8.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "debug",
            "direct": false,
            "version": "4.4.3",
            "ecosystem": "npm"
          },
          {
            "name": "decompress-response",
            "direct": false,
            "version": "6.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "deep-eql",
            "direct": false,
            "version": "5.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "deep-extend",
            "direct": false,
            "version": "0.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "deep-is",
            "direct": false,
            "version": "0.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "depd",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "detect-libc",
            "direct": false,
            "version": "2.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "dot-prop",
            "direct": false,
            "version": "5.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "dunder-proto",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "eastasianwidth",
            "direct": false,
            "version": "0.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "ee-first",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "emoji-regex",
            "direct": false,
            "version": "10.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "emoji-regex",
            "direct": false,
            "version": "8.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "emoji-regex",
            "direct": false,
            "version": "9.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "encodeurl",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "end-of-stream",
            "direct": false,
            "version": "1.4.5",
            "ecosystem": "npm"
          },
          {
            "name": "env-paths",
            "direct": false,
            "version": "2.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "environment",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "error-ex",
            "direct": false,
            "version": "1.3.4",
            "ecosystem": "npm"
          },
          {
            "name": "es-define-property",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "es-errors",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "es-module-lexer",
            "direct": false,
            "version": "1.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "es-object-atoms",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "esbuild",
            "direct": false,
            "version": "0.27.7",
            "ecosystem": "npm"
          },
          {
            "name": "escalade",
            "direct": false,
            "version": "3.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "escape-html",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "escape-string-regexp",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "eslint",
            "direct": false,
            "version": "9.39.4",
            "ecosystem": "npm"
          },
          {
            "name": "eslint-scope",
            "direct": false,
            "version": "8.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "eslint-visitor-keys",
            "direct": false,
            "version": "3.4.3",
            "ecosystem": "npm"
          },
          {
            "name": "eslint-visitor-keys",
            "direct": false,
            "version": "4.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "eslint-visitor-keys",
            "direct": false,
            "version": "5.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "espree",
            "direct": false,
            "version": "10.4.0",
            "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": "estree-walker",
            "direct": false,
            "version": "3.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "esutils",
            "direct": false,
            "version": "2.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "etag",
            "direct": false,
            "version": "1.8.1",
            "ecosystem": "npm"
          },
          {
            "name": "eventemitter3",
            "direct": false,
            "version": "5.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "eventsource",
            "direct": false,
            "version": "3.0.7",
            "ecosystem": "npm"
          },
          {
            "name": "eventsource-parser",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "execa",
            "direct": false,
            "version": "8.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "expand-template",
            "direct": false,
            "version": "2.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "expect-type",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "express",
            "direct": false,
            "version": "5.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "express-rate-limit",
            "direct": false,
            "version": "8.5.2",
            "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": "fast-sha256",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "fast-uri",
            "direct": false,
            "version": "3.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "fdir",
            "direct": false,
            "version": "6.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "file-entry-cache",
            "direct": false,
            "version": "8.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "file-uri-to-path",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "fill-range",
            "direct": false,
            "version": "7.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "finalhandler",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "find-up",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "find-up",
            "direct": false,
            "version": "7.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "flat-cache",
            "direct": false,
            "version": "4.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "flatted",
            "direct": false,
            "version": "3.4.2",
            "ecosystem": "npm"
          },
          {
            "name": "foreground-child",
            "direct": false,
            "version": "3.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "forwarded",
            "direct": false,
            "version": "0.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "fresh",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "fs-constants",
            "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": "get-caller-file",
            "direct": false,
            "version": "2.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "get-east-asian-width",
            "direct": false,
            "version": "1.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "get-intrinsic",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "get-proto",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "get-stream",
            "direct": false,
            "version": "8.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "git-raw-commits",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "github-from-package",
            "direct": false,
            "version": "0.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "glob",
            "direct": false,
            "version": "10.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "glob-parent",
            "direct": false,
            "version": "6.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "global-directory",
            "direct": false,
            "version": "4.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "globals",
            "direct": false,
            "version": "14.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "gopd",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "has-flag",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "has-symbols",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "hasown",
            "direct": false,
            "version": "2.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "hono",
            "direct": false,
            "version": "4.12.23",
            "ecosystem": "npm"
          },
          {
            "name": "html-escaper",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "http-errors",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "human-signals",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "husky",
            "direct": false,
            "version": "9.1.7",
            "ecosystem": "npm"
          },
          {
            "name": "iconv-lite",
            "direct": false,
            "version": "0.7.2",
            "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-meta-resolve",
            "direct": false,
            "version": "4.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "imurmurhash",
            "direct": false,
            "version": "0.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "inherits",
            "direct": false,
            "version": "2.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "ini",
            "direct": false,
            "version": "1.3.8",
            "ecosystem": "npm"
          },
          {
            "name": "ini",
            "direct": false,
            "version": "4.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "ip-address",
            "direct": false,
            "version": "10.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "ipaddr.js",
            "direct": false,
            "version": "1.9.1",
            "ecosystem": "npm"
          },
          {
            "name": "is-arrayish",
            "direct": false,
            "version": "0.2.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-fullwidth-code-point",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-fullwidth-code-point",
            "direct": false,
            "version": "5.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-obj",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-promise",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-stream",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-text-path",
            "direct": false,
            "version": "2.0.0",
            "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-report",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "istanbul-lib-source-maps",
            "direct": false,
            "version": "5.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "istanbul-reports",
            "direct": false,
            "version": "3.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "jackspeak",
            "direct": false,
            "version": "3.4.3",
            "ecosystem": "npm"
          },
          {
            "name": "jiti",
            "direct": false,
            "version": "2.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "jose",
            "direct": false,
            "version": "6.2.3",
            "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-tokens",
            "direct": false,
            "version": "9.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "js-yaml",
            "direct": false,
            "version": "4.2.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-to-ts",
            "direct": false,
            "version": "3.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "json-schema-traverse",
            "direct": false,
            "version": "0.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "json-schema-traverse",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "json-schema-typed",
            "direct": false,
            "version": "8.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "json-stable-stringify-without-jsonify",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "jsonparse",
            "direct": false,
            "version": "1.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "JSONStream",
            "direct": false,
            "version": "1.3.5",
            "ecosystem": "npm"
          },
          {
            "name": "keyv",
            "direct": false,
            "version": "4.5.4",
            "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": "lint-staged",
            "direct": false,
            "version": "15.5.2",
            "ecosystem": "npm"
          },
          {
            "name": "listr2",
            "direct": false,
            "version": "8.3.3",
            "ecosystem": "npm"
          },
          {
            "name": "locate-path",
            "direct": false,
            "version": "6.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "locate-path",
            "direct": false,
            "version": "7.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.camelcase",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.isplainobject",
            "direct": false,
            "version": "4.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.kebabcase",
            "direct": false,
            "version": "4.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.merge",
            "direct": false,
            "version": "4.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.mergewith",
            "direct": false,
            "version": "4.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.snakecase",
            "direct": false,
            "version": "4.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.startcase",
            "direct": false,
            "version": "4.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.uniq",
            "direct": false,
            "version": "4.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.upperfirst",
            "direct": false,
            "version": "4.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "log-update",
            "direct": false,
            "version": "6.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "loupe",
            "direct": false,
            "version": "3.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "lru-cache",
            "direct": false,
            "version": "10.4.3",
            "ecosystem": "npm"
          },
          {
            "name": "magic-string",
            "direct": false,
            "version": "0.30.21",
            "ecosystem": "npm"
          },
          {
            "name": "magicast",
            "direct": false,
            "version": "0.3.5",
            "ecosystem": "npm"
          },
          {
            "name": "make-dir",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "math-intrinsics",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "media-typer",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "meow",
            "direct": false,
            "version": "12.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "merge-descriptors",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "merge-stream",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "micromatch",
            "direct": false,
            "version": "4.0.8",
            "ecosystem": "npm"
          },
          {
            "name": "mime-db",
            "direct": false,
            "version": "1.54.0",
            "ecosystem": "npm"
          },
          {
            "name": "mime-types",
            "direct": false,
            "version": "3.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "mimic-fn",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "mimic-function",
            "direct": false,
            "version": "5.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "mimic-response",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "minimatch",
            "direct": false,
            "version": "10.2.5",
            "ecosystem": "npm"
          },
          {
            "name": "minimatch",
            "direct": false,
            "version": "3.1.5",
            "ecosystem": "npm"
          },
          {
            "name": "minimatch",
            "direct": false,
            "version": "9.0.9",
            "ecosystem": "npm"
          },
          {
            "name": "minimist",
            "direct": false,
            "version": "1.2.8",
            "ecosystem": "npm"
          },
          {
            "name": "minipass",
            "direct": false,
            "version": "7.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "mkdirp-classic",
            "direct": false,
            "version": "0.5.3",
            "ecosystem": "npm"
          },
          {
            "name": "ms",
            "direct": false,
            "version": "2.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "nanoid",
            "direct": false,
            "version": "3.3.12",
            "ecosystem": "npm"
          },
          {
            "name": "napi-build-utils",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "natural-compare",
            "direct": false,
            "version": "1.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "negotiator",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "node-abi",
            "direct": false,
            "version": "3.92.0",
            "ecosystem": "npm"
          },
          {
            "name": "npm-run-path",
            "direct": false,
            "version": "5.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "object-assign",
            "direct": false,
            "version": "4.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "object-inspect",
            "direct": false,
            "version": "1.13.4",
            "ecosystem": "npm"
          },
          {
            "name": "on-finished",
            "direct": false,
            "version": "2.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "once",
            "direct": false,
            "version": "1.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "onetime",
            "direct": false,
            "version": "6.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "onetime",
            "direct": false,
            "version": "7.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "optionator",
            "direct": false,
            "version": "0.9.4",
            "ecosystem": "npm"
          },
          {
            "name": "p-limit",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "p-limit",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "p-locate",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "p-locate",
            "direct": false,
            "version": "6.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "package-json-from-dist",
            "direct": false,
            "version": "1.0.1",
            "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": "parseurl",
            "direct": false,
            "version": "1.3.3",
            "ecosystem": "npm"
          },
          {
            "name": "path-exists",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "path-exists",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "path-key",
            "direct": false,
            "version": "3.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "path-key",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "path-scurry",
            "direct": false,
            "version": "1.11.1",
            "ecosystem": "npm"
          },
          {
            "name": "path-to-regexp",
            "direct": false,
            "version": "8.4.2",
            "ecosystem": "npm"
          },
          {
            "name": "pathe",
            "direct": false,
            "version": "2.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "pathval",
            "direct": false,
            "version": "2.0.1",
            "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": "pidtree",
            "direct": false,
            "version": "0.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "pkce-challenge",
            "direct": false,
            "version": "5.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "postcss",
            "direct": false,
            "version": "8.5.15",
            "ecosystem": "npm"
          },
          {
            "name": "prebuild-install",
            "direct": false,
            "version": "7.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "prelude-ls",
            "direct": false,
            "version": "1.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "proxy-addr",
            "direct": false,
            "version": "2.0.7",
            "ecosystem": "npm"
          },
          {
            "name": "pump",
            "direct": false,
            "version": "3.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "punycode",
            "direct": false,
            "version": "2.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "qs",
            "direct": false,
            "version": "6.15.2",
            "ecosystem": "npm"
          },
          {
            "name": "range-parser",
            "direct": false,
            "version": "1.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "raw-body",
            "direct": false,
            "version": "3.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "rc",
            "direct": false,
            "version": "1.2.8",
            "ecosystem": "npm"
          },
          {
            "name": "readable-stream",
            "direct": false,
            "version": "3.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "require-directory",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "require-from-string",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "resolve-from",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "resolve-from",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "restore-cursor",
            "direct": false,
            "version": "5.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "rfdc",
            "direct": false,
            "version": "1.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "rollup",
            "direct": false,
            "version": "4.61.1",
            "ecosystem": "npm"
          },
          {
            "name": "router",
            "direct": false,
            "version": "2.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "safe-buffer",
            "direct": false,
            "version": "5.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "safer-buffer",
            "direct": false,
            "version": "2.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "semver",
            "direct": false,
            "version": "7.8.1",
            "ecosystem": "npm"
          },
          {
            "name": "send",
            "direct": false,
            "version": "1.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "serve-static",
            "direct": false,
            "version": "2.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "setprototypeof",
            "direct": false,
            "version": "1.2.0",
            "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": "side-channel",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "side-channel-list",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "side-channel-map",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "side-channel-weakmap",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "siginfo",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "signal-exit",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "simple-concat",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "simple-get",
            "direct": false,
            "version": "4.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "slice-ansi",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "slice-ansi",
            "direct": false,
            "version": "7.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "source-map-js",
            "direct": false,
            "version": "1.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "split2",
            "direct": false,
            "version": "4.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "stackback",
            "direct": false,
            "version": "0.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "standardwebhooks",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "statuses",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "std-env",
            "direct": false,
            "version": "3.10.0",
            "ecosystem": "npm"
          },
          {
            "name": "string-argv",
            "direct": false,
            "version": "0.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "string-width",
            "direct": false,
            "version": "4.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "string-width",
            "direct": false,
            "version": "5.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "string-width",
            "direct": false,
            "version": "7.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "string_decoder",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "strip-ansi",
            "direct": false,
            "version": "6.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "strip-ansi",
            "direct": false,
            "version": "7.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "strip-final-newline",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "strip-json-comments",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "strip-json-comments",
            "direct": false,
            "version": "3.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "strip-literal",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "supports-color",
            "direct": false,
            "version": "7.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "tar-fs",
            "direct": false,
            "version": "2.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "tar-stream",
            "direct": false,
            "version": "2.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "test-exclude",
            "direct": false,
            "version": "7.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "text-extensions",
            "direct": false,
            "version": "2.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "through",
            "direct": false,
            "version": "2.3.8",
            "ecosystem": "npm"
          },
          {
            "name": "tinybench",
            "direct": false,
            "version": "2.9.0",
            "ecosystem": "npm"
          },
          {
            "name": "tinyexec",
            "direct": false,
            "version": "0.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "tinyexec",
            "direct": false,
            "version": "1.2.4",
            "ecosystem": "npm"
          },
          {
            "name": "tinyglobby",
            "direct": false,
            "version": "0.2.17",
            "ecosystem": "npm"
          },
          {
            "name": "tinypool",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "tinyrainbow",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "tinyspy",
            "direct": false,
            "version": "4.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "to-regex-range",
            "direct": false,
            "version": "5.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "toidentifier",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "ts-algebra",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "ts-api-utils",
            "direct": false,
            "version": "2.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "tunnel-agent",
            "direct": false,
            "version": "0.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "type-check",
            "direct": false,
            "version": "0.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "type-is",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "typescript",
            "direct": false,
            "version": "5.9.3",
            "ecosystem": "npm"
          },
          {
            "name": "undici-types",
            "direct": false,
            "version": "7.24.6",
            "ecosystem": "npm"
          },
          {
            "name": "unicorn-magic",
            "direct": false,
            "version": "0.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "unpipe",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "uri-js",
            "direct": false,
            "version": "4.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "util-deprecate",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "vary",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "vite",
            "direct": false,
            "version": "7.3.5",
            "ecosystem": "npm"
          },
          {
            "name": "vite-node",
            "direct": false,
            "version": "3.2.4",
            "ecosystem": "npm"
          },
          {
            "name": "vitest",
            "direct": false,
            "version": "3.2.6",
            "ecosystem": "npm"
          },
          {
            "name": "which",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "why-is-node-running",
            "direct": false,
            "version": "2.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "word-wrap",
            "direct": false,
            "version": "1.2.5",
            "ecosystem": "npm"
          },
          {
            "name": "wrap-ansi",
            "direct": false,
            "version": "7.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "wrap-ansi",
            "direct": false,
            "version": "8.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "wrap-ansi",
            "direct": false,
            "version": "9.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "wrappy",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "y18n",
            "direct": false,
            "version": "5.0.8",
            "ecosystem": "npm"
          },
          {
            "name": "yaml",
            "direct": false,
            "version": "2.9.0",
            "ecosystem": "npm"
          },
          {
            "name": "yargs",
            "direct": false,
            "version": "17.7.2",
            "ecosystem": "npm"
          },
          {
            "name": "yargs-parser",
            "direct": false,
            "version": "21.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "yocto-queue",
            "direct": false,
            "version": "0.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "yocto-queue",
            "direct": false,
            "version": "1.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "zod-to-json-schema",
            "direct": false,
            "version": "3.25.2",
            "ecosystem": "npm"
          }
        ],
        "collected": true,
        "truncated": false,
        "total_count": 505,
        "direct_count": 6,
        "indirect_count": 499
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 2,
        "merged_prs": 132,
        "open_issues": 2,
        "closed_ratio": 0.96,
        "closed_issues": 48,
        "closed_unmerged_prs": 6
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "lml2468",
          "commits": 177,
          "avatar_url": "https://avatars.githubusercontent.com/u/39320777?v=4"
        },
        {
          "type": "User",
          "login": "Tuanzi1015",
          "commits": 52,
          "avatar_url": "https://avatars.githubusercontent.com/u/148024452?v=4"
        },
        {
          "type": "User",
          "login": "caster-Q",
          "commits": 12,
          "avatar_url": "https://avatars.githubusercontent.com/u/27912584?v=4"
        },
        {
          "type": "User",
          "login": "Jerry-Xin",
          "commits": 11,
          "avatar_url": "https://avatars.githubusercontent.com/u/3401616?v=4"
        },
        {
          "type": "User",
          "login": "boris-clark",
          "commits": 11,
          "avatar_url": "https://avatars.githubusercontent.com/u/267566209?v=4"
        },
        {
          "type": "User",
          "login": "kense-lab",
          "commits": 4,
          "avatar_url": "https://avatars.githubusercontent.com/u/37998568?v=4"
        },
        {
          "type": "User",
          "login": "dolphinsboy",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/4864391?v=4"
        }
      ],
      "contributors_sampled": 7,
      "top_contributor_share": 0.66
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "auto-add-to-project.yml",
        "check-sprint.yml",
        "ci.yml",
        "codeql.yml",
        "dependency-review.yml",
        "history-check.yml",
        "issue-welcome.yml",
        "labeler.yml",
        "npm-publish.yml",
        "pr-title-lint.yml",
        "publish-dev.yml",
        "release-drafter.yml",
        "release-publish.yml",
        "secret-scan.yml",
        "stale.yml",
        "workflow-sanity.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [
        "eslint.config.js"
      ],
      "has_editorconfig": false,
      "has_linter_config": true,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "package-lock.json"
      ],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 10,
            "reason": "no binaries found in the repo",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": null,
            "reason": "internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": 10,
            "reason": "14 out of 14 merged PRs checked by a CI test -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 10,
            "reason": "all changesets reviewed",
            "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": 0,
            "reason": "project was created within the last 90 days. Please review its contents carefully",
            "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": 4,
            "reason": "dependency not pinned by hash detected -- score normalized to 4",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "SAST tool is not run on all commits -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 10,
            "reason": "security policy file 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": 9,
            "reason": "detected GitHub workflow tokens with excessive permissions",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 0,
            "reason": "17 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "1871c2558da8f49ff872f45136a967d748264473",
        "ran_at": "2026-07-29T09:56:18Z",
        "aggregate_score": 5.5,
        "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-29T04:00:05Z",
      "oldest_open_prs": [
        {
          "number": 186,
          "created_at": "2026-07-16T11:57:20Z",
          "last_comment_at": "2026-07-17T10:40:45Z",
          "last_comment_author": "ningzimu"
        },
        {
          "number": 187,
          "created_at": "2026-07-16T12:06:36Z",
          "last_comment_at": "2026-07-17T10:40:48Z",
          "last_comment_author": "ningzimu"
        }
      ],
      "last_merged_pr_at": "2026-07-21T08:46:11Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": [
        {
          "number": 184,
          "created_at": "2026-07-16T11:12:01Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 185,
          "created_at": "2026-07-16T11:12:46Z",
          "last_comment_at": null,
          "last_comment_author": null
        }
      ]
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/Mininglamp-OSS/cc-channel-octo",
    "host": "github.com",
    "name": "cc-channel-octo",
    "owner": "Mininglamp-OSS"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "excellent",
      "name": "Overall health",
      "note": "The weighted overall 69 is calibrated to 81 on the published index scale (record calibration 2026-08-02).",
      "notes": [
        {
          "code": "overall_calibration",
          "params": {
            "raw": 69,
            "calibrated": 81,
            "calibration": "2026-08-02"
          }
        }
      ],
      "value": 81,
      "inputs": {
        "security": 64,
        "vitality": 71,
        "community": 60,
        "governance": 67,
        "calibration": "2026-08-02",
        "engineering": 80,
        "ai_readiness": 75,
        "weighted_overall_raw": 69
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "good",
        "name": "Vitality",
        "value": 71,
        "weight": 0.21,
        "metrics": [
          {
            "key": "development_activity",
            "band": "moderate",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 51,
            "inputs": {
              "commits_last_year": 270,
              "human_commit_share": 1,
              "days_since_last_push": 8,
              "active_weeks_last_year": 6
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 8 days ago",
                "points": 28.8,
                "status": "partial",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 8
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "6/52 weeks with commits",
                "points": 4.2,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 6
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "270 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 270
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "project was created within the last 90 days. Please review its contents carefully",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "exceptional",
            "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": 6,
              "latest_release_tag": "v1.0.3",
              "releases_from_tags": false,
              "days_since_latest_release": 33,
              "mean_days_between_releases": 4.2
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "6 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 6
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 33 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 33
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~4.2 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 4.2
                    }
                  }
                ],
                "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": "exceptional",
            "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": "moderate",
        "name": "Community & Adoption",
        "value": 60,
        "weight": 0.17,
        "metrics": [
          {
            "key": "popularity",
            "band": "at_risk",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 31,
            "inputs": {
              "forks": 9,
              "stars": 30,
              "watchers": 0,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "30 stars",
                "points": 23.7,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 30
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "9 forks",
                "points": 7.5,
                "status": "partial",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 9
                    }
                  }
                ],
                "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": "excellent",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 92,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "readme_badges": null,
              "has_contributing": true,
              "has_issue_template": false,
              "has_code_of_conduct": true,
              "readme_badge_services": [],
              "has_pull_request_template": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (Apache-2.0)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "Apache-2.0"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 18,
                "status": "met",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 13.5,
                "status": "met",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 6.3,
                "status": "met",
                "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": 60,
            "inputs": {
              "packages": [
                "@mininglamp-oss/cc-channel-octo"
              ],
              "dependents": null,
              "ecosystems": "npm",
              "total_downloads": null,
              "monthly_downloads": 3774
            },
            "components": [
              {
                "key": "monthly_downloads",
                "name": "Monthly downloads",
                "detail": "3,774 downloads/month across npm",
                "points": 47.7,
                "status": "partial",
                "details": [
                  {
                    "code": "downloads_monthly",
                    "params": {
                      "count": 3774,
                      "ecosystems": "npm"
                    }
                  }
                ],
                "max_points": 80
              },
              {
                "key": "registry_dependents",
                "name": "Registry dependents",
                "detail": "not reported by this ecosystem",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_reported_by_this_ecosystem",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "good",
        "name": "Sustainability & Governance",
        "value": 67,
        "weight": 0.23,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "at_risk",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 29,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 7,
              "top_contributor_share": 0.66
            },
            "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 66% of commits",
                "points": 7.6,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 66
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "7 contributors",
                "points": 9.5,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 7
                    }
                  }
                ],
                "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": "exceptional",
            "name": "Issue & PR responsiveness",
            "note": "Excluded from scoring (no data or not applicable): Newcomer PR acceptance. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "newcomer_pr_acceptance"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 97,
            "inputs": {
              "merged_prs": 132,
              "open_issues": 2,
              "closed_issues": 48,
              "prs_merged_7d": null,
              "prs_decided_7d": null,
              "prs_merged_30d": null,
              "prs_decided_30d": null,
              "issue_closed_ratio": 0.96,
              "closed_unmerged_prs": 6,
              "first_time_authors_30d": null,
              "first_time_prs_merged_30d": null,
              "first_time_prs_decided_30d": null
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "96% of issues closed",
                "points": 40.3,
                "status": "partial",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 96
                    }
                  }
                ],
                "max_points": 42
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "132/138 decided PRs merged",
                "points": 28.7,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 132,
                      "decided": 138
                    }
                  }
                ],
                "max_points": 30
              },
              {
                "key": "newcomer_pr_acceptance",
                "name": "Newcomer PR acceptance",
                "detail": "no first-time contributor's PR decided in 30d",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_newcomer_prs",
                    "params": {
                      "days": 30
                    }
                  }
                ],
                "max_points": 13
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "all changesets reviewed",
                "points": 15,
                "status": "met",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "moderate",
            "name": "Ownership & stewardship",
            "note": null,
            "notes": [],
            "value": 58,
            "inputs": {
              "followers": 149,
              "owner_type": "Organization",
              "is_verified": null,
              "owner_login": "Mininglamp-OSS",
              "public_repos": 36,
              "account_age_days": 79
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "organization-owned",
                "points": 30,
                "status": "met",
                "details": [
                  {
                    "code": "owner_organization",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "149 followers of Mininglamp-OSS",
                "points": 15.6,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 149,
                      "login": "Mininglamp-OSS"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "36 public repos, account ~0 yr old",
                "points": 11.9,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 36
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 0
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "exceptional",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "@mininglamp-oss/cc-channel-octo"
              ],
              "ecosystems": "npm",
              "any_deprecated": false,
              "min_days_since_publish": 33
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "1 package(s) on npm",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 1,
                      "ecosystems": "npm"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 33 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 33
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "28 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 28
                    }
                  }
                ],
                "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": "excellent",
        "name": "Engineering Quality",
        "value": 80,
        "weight": 0.19,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "excellent",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 84,
            "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": "16 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 16
                    }
                  }
                ],
                "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": "eslint.config.js",
                "points": 16,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "eslint.config.js"
                    }
                  }
                ],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "14 out of 14 merged PRs checked by a CI test -- score normalized to 10",
                "points": 20,
                "status": "met",
                "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": 64,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "moderate",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Branch-Protection, Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "branch_protection",
                    "signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 55,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 16,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 2,
              "scorecard_aggregate": 5.5
            },
            "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": "internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "14 out of 14 merged PRs checked by a CI test -- score normalized to 10",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "all changesets reviewed",
                "points": 7.5,
                "status": "met",
                "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": "project was created within the last 90 days. Please review its contents carefully",
                "points": 0,
                "status": "missed",
                "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 4",
                "points": 2,
                "status": "partial",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool is not run on all commits -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file detected",
                "points": 5,
                "status": "met",
                "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": 6.8,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "17 existing vulnerabilities detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "dependency_advisories",
            "band": "exceptional",
            "name": "Dependency advisories",
            "note": "Excluded from scoring (no data or not applicable): No advisories left outstanding. Remaining weights renormalized. Matched the npm:@mininglamp-oss/cc-channel-octo@1.0.3 runtime dependency closure — what installing the published package pulls in — 43 packages. Reachability is not analyzed.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "no_advisories_left_outstanding"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              },
              {
                "code": "advisories_scope_published",
                "params": {
                  "package": "npm:@mininglamp-oss/cc-channel-octo@1.0.3",
                  "assessed": 43
                }
              },
              {
                "code": "advisories_reachability",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "source": "osv",
              "advisories": 0,
              "affected_packages": 0,
              "assessed_packages": 43,
              "unassessed_packages": 0,
              "affected_by_severity": "none",
              "direct_affected_packages": 0
            },
            "components": [
              {
                "key": "direct_dependencies_free_of_known_advisories",
                "name": "Direct dependencies free of known advisories",
                "detail": "no direct dependency carries a known advisory",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "no_direct_advisories",
                    "params": {}
                  }
                ],
                "max_points": 35
              },
              {
                "key": "indirect_dependencies_free_of_known_advisories",
                "name": "Indirect dependencies free of known advisories",
                "detail": "no indirect dependency carries a known advisory",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "no_indirect_advisories",
                    "params": {}
                  }
                ],
                "max_points": 25
              },
              {
                "key": "no_advisories_left_outstanding",
                "name": "No advisories left outstanding",
                "detail": "no advisory carries a publication date",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "advisories_no_publication_date",
                    "params": {}
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "malicious_dependencies",
            "band": "exceptional",
            "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": 43,
              "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": "exceptional",
            "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"
              ],
              "commit_weight_rule": {
                "min_commits": 50,
                "min_commit_share": 0.1
              },
              "review_only_matches": 0,
              "below_threshold_exposures": [],
              "assessed_self_published_locations": 3
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "no confirmed policy-scope location match",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "jurisdiction_no_match",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "good",
        "name": "AI Readiness",
        "value": 75,
        "weight": 0.04,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "excellent",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 85,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 1,
              "agent_instruction_files": [
                "CLAUDE.md"
              ],
              "agent_instruction_max_bytes": 6699
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "CLAUDE.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "CLAUDE.md"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "100 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 100,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "moderate",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 58,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "package-lock.json"
              ],
              "has_dockerfile": false,
              "typed_language": true,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": true,
              "typecheck_configs": [
                "tsconfig.json"
              ],
              "agent_commit_share": 0,
              "toolchain_manifests": [],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": "eslint.config.js",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "eslint.config.js"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "tsconfig.json",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "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": "no agent-authored commits among the last 100",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_authored_commits",
                    "params": {
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "no automated dependency updates observed",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_dependency_automation",
                    "params": {}
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 4",
                "points": 4,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "exceptional",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "primary_language": "TypeScript",
              "largest_source_bytes": 61558,
              "source_files_sampled": 108,
              "oversized_source_files": 1
            },
            "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": "1/108 source files over 60KB",
                "points": 54.5,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 108,
                      "oversized": 1
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? Carries a deliberately small weight: agent tooling is a real maintenance signal, but its absence must never gate the top of the scale (calibration saturates at raw 91, so 100/100 remains reachable with AI Readiness at zero)."
      }
    ],
    "classification": {
      "top": [
        "library"
      ],
      "labels": [
        "library"
      ],
      "scores": {
        "library": 8
      },
      "primary": "library",
      "evidence": [
        {
          "tier": "distribution",
          "label": "library",
          "source": "registry:npm",
          "weight": 6
        },
        {
          "tier": "description",
          "label": "library",
          "source": "description:library",
          "weight": 2
        }
      ],
      "artifacts": [],
      "confidence": "medium",
      "host_extension": false,
      "runs_as_process": false,
      "consumed_by_code": true
    },
    "metrics_version": "2.5.0"
  },
  "warnings": [
    "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-29T09:56:43.636163Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/m/Mininglamp-OSS/cc-channel-octo.svg",
  "full_name": "Mininglamp-OSS/cc-channel-octo",
  "license_state": "standard",
  "license_spdx": "Apache-2.0"
}

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

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

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