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

spinabot / brigade

Brigade — Your personal intelligence, built enterprise-grade

TypeScriptMIT★ 239 зірок⑂ 19 форківз черв. 2026 р.Переглянути на GitHub ↗

spinabot/brigade має індекс здоров’я 67 зі 100, що відповідає смузі «Помірний». Найвищий показник — Engineering Quality (81/100), найнижчий — Security (55/100). Останнє оновлення було 5 днів тому. Більшість нещодавньої роботи виконує один учасник.

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

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

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

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

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

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

Власність

spinabotОрганізація
4 підписники1 публічний репозиторійз черв. 2026 р.

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

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

РеєстрПакетВерсіяЗавантажень / місВерсіїОстання публікаціяТеги
npm@spinabot/brigade1.29.49 677585 днів томуaiagentagentsai-agentclituillmclaudeopenaigeminiollamawhatsappgatewaybrigade

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

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

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

77Добрий · 22% загального індексу
Як обчислюється оцінка
36/36Свіжість push — останній push 5 дн. тому
8.3/36Ритм комітів — 12/52 тижнів із комітами
18/18Обсяг комітів — 500 комітів за останній рік
0/10OpenSSF Scorecard: Maintained — project was created within the last 90 days. Please review its contents carefully
Використані вхідні дані
commits_last_year500
human_commit_share0,85
days_since_last_push5
active_weeks_last_year12
Як обчислюється оцінка
27/27Випускає релізи — опубліковано 56 релізів
36/36Свіжість релізів — останній реліз 5 дн. тому
27/27Ритм релізів — реліз кожні ~1,1 дн.
0/10OpenSSF Scorecard: Signed-Releases — немає даних
Використані вхідні дані
releases_count56
latest_release_tagbrigade-v1.29.4
releases_from_tagsні
days_since_latest_release5
mean_days_between_releases1,1
Виключено з оцінювання (немає даних або не застосовно): OpenSSF Scorecard: Signed-Releases. Залишкові ваги перенормовано.

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

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

63Помірний · 18% загального індексу
Як обчислюється оцінка
38.6/60Зірки — 239 зірок
10.5/25Форки — 19 форків
0/15Спостерігачі — 2 спостерігачів
Використані вхідні дані
forks19
stars239
watchers2
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Як обчислюється оцінка
22.5/22.5README
22.5/22.5Ліцензія — визнана ліцензія (MIT)
18/18Настанови CONTRIBUTING
0/13.5Кодекс поведінки
0/7.2Шаблон issue
6.3/6.3Шаблон PR
Використані вхідні дані
has_readmeтак
has_licenseтак
has_contributingтак
has_issue_templateні
has_code_of_conductні
has_pull_request_templateтак
Як обчислюється оцінка
53.1/80Щомісячні завантаження — 9 677 завантажень/місяць у npm
0/20Залежні пакети в реєстрі — ця екосистема цього не повідомляє
Використані вхідні дані
packages@spinabot/brigade
dependents
ecosystemsnpm
total_downloads
monthly_downloads9 677
Виключено з оцінювання (немає даних або не застосовно): Залежні пакети в реєстрі. Залишкові ваги перенормовано.

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

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

56Помірний · 24% загального індексу
Як обчислюється оцінка
9/54Бас-фактор — на 1 контриб’ютор(ів) припадає половина всіх комітів
0.6/22.5Розподіл комітів — головний контриб’ютор — автор 97% комітів
4.1/13.5Широта контриб’юторів — 3 контриб’юторів
10/10OpenSSF Scorecard: Contributors — project has 3 contributing companies or organizations -- score normalized to 10
Використані вхідні дані
bus_factor1
contributors_sampled3
top_contributor_share0,973
Як обчислюється оцінка
46.8/46.8Вирішення issue — закрито 100% issue
31.7/38.3Прийняття PR — злито 63/76 вирішених PR
0/15OpenSSF Scorecard: Code-Review — Found 0/23 approved changesets -- score normalized to 0
Використані вхідні дані
merged_prs63
open_issues0
closed_issues2
issue_closed_ratio1
closed_unmerged_prs13

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

37У зоні ризику
Як обчислюється оцінка
30/30Підтримка власника — у власності організації
0/20Верифікований домен
5/25Охоплення власника — 4 підписників у spinabot
2.4/25Послужний список — 1 публічних репозиторіїв, вік облікового запису ~0 р.
Використані вхідні дані
followers4
owner_typeOrganization
is_verified
owner_loginspinabot
public_repos1
account_age_days43

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

100Відмінний
Як обчислюється оцінка
25/25Опубліковано й доступно — 1 пакет(ів) у npm
35/35Свіжість публікацій — остання публікація 5 дн. тому
20/20Історія версій — 58 опублікованих версій
20/20Не застарілий — активний, не deprecated і не yanked
Використані вхідні дані
packages@spinabot/brigade
ecosystemsnpm
any_deprecatedні
min_days_since_publish5

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

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

81Добрий · 20% загального індексу
Як обчислюється оцінка
24/24Процеси CI — 7 процес(ів) CI
24/24Наявні тести
0/16Конфігурація лінтера
0/9.6Pre-commit-хуки
0/6.4.editorconfig
20/20OpenSSF Scorecard: CI-Tests — 7 out of 7 merged PRs checked by a CI test -- score normalized to 10
Використані вхідні дані
has_ciтак
has_testsтак
has_editorconfigні
has_linter_configні
has_precommit_configні

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

100Відмінний
Як обчислюється оцінка
30/30README
25/25Каталог документації
15/15Сайт документації / домашня сторінка — https://www.brigade.spinabot.com
10/10Опис репозиторію
10/10Теми — 20 тем
10/10Wiki
Використані вхідні дані
topicsagent-runtime, ai, ai-crew, autonomous-agents, brigade, chatgpt, clawdbot, codex, crustacean, hermes, hermes-agent, llm, moltbot, molty, multi-agent, openclaw, self-improving-ai, brigade-agent, pride-of-agents, spinabot
has_wikiтак
homepagehttps://www.brigade.spinabot.com
has_readmeтак
has_docs_dirтак
has_descriptionтак

Безпека

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

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

Стан безпеки

50Помірний
Як обчислюється оцінка
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — branch protection not enabled on development/release branches
2.5/2.5CI-Tests — 7 out of 7 merged PRs checked by a CI test -- score normalized to 10
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 0/23 approved changesets -- score normalized to 0
2.5/2.5Contributors — project has 3 contributing companies or organizations -- score normalized to 10
10/10Dangerous-Workflow — no dangerous workflow patterns detected
7.5/7.5Dependency-Update-Tool — update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5Ліцензія — license file detected
0/7.5Maintained — project was created within the last 90 days. Please review its contents carefully
5/5Packaging — packaging workflow detected
1.5/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 3
3.5/5SAST — SAST tool detected but not run on all commits
5/5Security-Policy — security policy file detected
0/7.5Signed-Releases — немає даних
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
1.5/7.5Vulnerabilities — 8 existing vulnerabilities detected
Використані вхідні дані
sourceopenssf_scorecard
checks_evaluated17
scorecard_versionv5.5.0
checks_inconclusive1
scorecard_aggregate5
Виключено з оцінювання (немає даних або не застосовно): signed_releases. Залишкові ваги перенормовано.
Як обчислюється оцінка
35/35Прямі залежності без відомих сповіщень — жодна пряма залежність не має відомих сповіщень
7.3/25Непрямі залежності без відомих сповіщень — уражено 3: brace-expansion 1.1.16 (high 7.5), brace-expansion 2.1.2 (high 7.5), uuid 8.3.2 (high 7.5)
33.7/40Немає задавнених сповіщень — 1 пакет(ів) зі сповіщеннями без реакції понад 90 дн.; найдавніше опубліковано 94 дн. тому
Використані вхідні дані
sourceosv
advisories3
affected_packages3
assessed_packages535
unassessed_packages0
affected_by_severityhigh 3
direct_affected_packages0
Звірено з runtime-замиканням залежностей npm:@spinabot/brigade@1.29.4 — тим, що тягне за собою встановлення опублікованого пакета, — 535 пакетів. Досяжність не аналізується.

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

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

64Помірний · 0% загального індексу
Як обчислюється оцінка
45/45Інструкції для агентів — AGENTS.md, templates/workspace/AGENTS.md
0/15Машиночитана документація (llms.txt)
40/40Читабельна історія комітів — намір зазначено у 85 з 85 людських комітів (структурований заголовок або пояснювальний текст)
Використані вхідні дані
has_llms_txtні
legible_history_share1
agent_instruction_filesAGENTS.md, templates/workspace/AGENTS.md
agent_instruction_max_bytes13 148
Як обчислюється оцінка
0/18Розгортання однією командою
22/22Автоматизовані тести
0/11Конфігурація лінтера / форматера
11/11Статична перевірка типів — convex/tsconfig.json, tsconfig.json
10/10Відтворюване середовище — lockfile
0/10Підтверджена практика роботи з агентами — серед останніх 100 комітів немає створених агентом
5/8Автоматизоване супроводження — автоматизацію залежностей налаштовано, але у вибірці комітів її не видно
3/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 3
Використані вхідні дані
has_nixні
has_testsтак
lockfilespackage-lock.json
has_dockerfileні
typed_languageтак
bootstrap_files
has_devcontainerні
has_linter_configні
typecheck_configsconvex/tsconfig.json, tsconfig.json
agent_commit_share0
toolchain_manifests
dependency_bot_commit_share0
Як обчислюється оцінка
45/45Типізований код — TypeScript (статично типізована)
54.2/55Керовані розміри файлів — 17/1 204 файлів вихідного коду понад 60 КБ
Використані вхідні дані
primary_languageTypeScript
largest_source_bytes2 475 157
source_files_sampled1 204
oversized_source_files17
Як обчислюється оцінка
0/40Схема API (OpenAPI/GraphQL/proto)
20/20Сервер MCP
0/40Придатні до запуску приклади
Використані вхідні дані
example_dirs
has_mcp_signalтак
api_schema_files

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

239зірок GitHub
3контриб'юторів
500комітів за останні 12 місяців
5днів від останнього пушу
56релізів
1бас-фактор
0відкритих issue
npmпакетних екосистем

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

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

Докладніше

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

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

0481216201932026-062026-072026-07
Мажорні 0Мінорні 0Патчі 0
OpenSSF Scorecard 5.0 / 10
5.0сукупно

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

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
10CI-Tests7 out of 7 merged PRs checked by a CI test -- score normalized to 10
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/23 approved changesets -- score normalized to 0
10Contributorsproject has 3 contributing companies or organizations -- score normalized to 10
10Dangerous-Workflowno dangerous workflow patterns detected
10Dependency-Update-Toolupdate 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
3Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 3
7SASTSAST tool detected but not run on all commits
10Security-Policysecurity policy file detected
н/дSigned-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
2Vulnerabilities8 existing vulnerabilities detected
Прямі залежності 44
РеєстрПакетОбмеження версіїМаніфест
npm@cantoo/pdf-lib^2.7.1package.json
npm@composio/core^0.10.0package.json
npm@earendil-works/pi-agent-core0.79.9package.json
npm@earendil-works/pi-ai0.79.9package.json
npm@earendil-works/pi-coding-agent0.79.9package.json
npm@earendil-works/pi-tui0.79.9package.json
npm@grammyjs/runner^2.0.3package.json
npm@grammyjs/transformer-throttler^1.2.1package.json
npm@grammyjs/types^3.21.0package.json
npm@mozilla/readability^0.6.0package.json
npm@pdf-lib/fontkit^1.1.1package.json
npm@slack/socket-mode^2.0.7package.json
npm@slack/web-api^7.17.0package.json
npm@whiskeysockets/baileys7.0.0-rc13package.json
npmcfonts^3.3.1package.json
npmchalk^5.3.0package.json
npmcli-highlight^2.1.11package.json
npmcommander^12.1.0package.json
npmconvex^1.40.0package.json
npmcroner^10.0.1package.json
npmdiscord.js^14.26.4package.json
npmdocx^9.7.1package.json
npmexceljs^4.4.0package.json
npmfflate^0.8.3package.json
npmgrammy^1.42.0package.json
npmhttps-proxy-agent^7.0.6package.json
npmjimp^1.6.1package.json
npmjiti^2.6.1package.json
npmjson5^2.2.3package.json
npmlinkedom^0.18.12package.json
npmminimatch^10.2.5package.json
npmplaywright-core^1.59.0package.json
npmpptxgenjs^4.0.1package.json
npmprompts^2.4.2package.json
npmproper-lockfile^4.1.2package.json
npmqrcode-terminal^0.12.0package.json
npmsocks-proxy-agent^10.1.0package.json
npmtar^7.5.15package.json
npmundici^7.25.0package.json
npmunpdf^1.6.2package.json
npmws^8.21.0package.json
npm@anthropic-ai/claude-code^2.1.0package.json
npmyaml^2.9.0package.json
npmzod^3.23.8package.json
Усі залежності 558

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

РеєстрПакетВерсіяЗв'язок
npm@anthropic-ai/claude-code2.1.201пряма
npm@cantoo/pdf-lib2.7.1пряма
npm@composio/core0.10.0пряма
npm@earendil-works/pi-agent-core0.79.9пряма
npm@earendil-works/pi-ai0.79.9пряма
npm@earendil-works/pi-coding-agent0.79.9пряма
npm@earendil-works/pi-tui0.79.9пряма
npm@grammyjs/runner2.0.3пряма
npm@grammyjs/transformer-throttler1.2.1пряма
npm@grammyjs/types3.28.0пряма
npm@mozilla/readability0.6.0пряма
npm@pdf-lib/fontkit1.1.1пряма
npm@slack/socket-mode2.0.7пряма
npm@slack/web-api7.17.0пряма
npm@whiskeysockets/baileys7.0.0-rc13пряма
npmcfonts3.3.1пряма
npmchalk4.1.2пряма
npmchalk5.6.2пряма
npmcli-highlight2.1.11пряма
npmcommander12.1.0пряма
npmconvex1.41.0пряма
npmcroner10.0.1пряма
npmdiscord.js14.26.4пряма
npmdocx9.7.1пряма
npmexceljs4.4.0пряма
npmfflate0.8.3пряма
npmgrammy1.44.0пряма
npmhttps-proxy-agent5.0.1пряма
npmhttps-proxy-agent7.0.6пряма
npmjimp1.6.1пряма
npmjiti2.7.0пряма
npmjson52.2.3пряма
npmlinkedom0.18.12пряма
npmminimatch10.2.5пряма
npmminimatch3.1.5пряма
npmminimatch5.1.9пряма
npmplaywright-core1.60.0пряма
npmpptxgenjs4.0.1пряма
npmprompts2.4.2пряма
npmproper-lockfile4.1.2пряма
npmqrcode-terminal0.12.0пряма
npmsocks-proxy-agent10.1.0пряма
npmtar7.5.16пряма
npmundici6.27.0пряма
npmundici7.28.0пряма
npmundici8.5.0пряма
npmunpdf1.6.2пряма
npmws8.21.0пряма
npmyaml2.9.0пряма
npmzod3.25.76пряма
npm@anthropic-ai/claude-code-darwin-arm642.1.201непряма
npm@anthropic-ai/claude-code-darwin-x642.1.201непряма
npm@anthropic-ai/claude-code-linux-arm642.1.201непряма
npm@anthropic-ai/claude-code-linux-arm64-musl2.1.201непряма
npm@anthropic-ai/claude-code-linux-x642.1.201непряма
npm@anthropic-ai/claude-code-linux-x64-musl2.1.201непряма
npm@anthropic-ai/claude-code-win32-arm642.1.201непряма
npm@anthropic-ai/claude-code-win32-x642.1.201непряма
npm@anthropic-ai/sdk0.91.1непряма
npm@aws-crypto/sha256-browser5.2.0непряма
npm@aws-crypto/sha256-js5.2.0непряма
npm@aws-crypto/supports-web-crypto5.2.0непряма
npm@aws-crypto/util5.2.0непряма
npm@aws-sdk/client-bedrock-runtime3.1048.0непряма
npm@aws-sdk/core3.974.26непряма
npm@aws-sdk/credential-provider-env3.972.52непряма
npm@aws-sdk/credential-provider-http3.972.54непряма
npm@aws-sdk/credential-provider-ini3.972.59непряма
npm@aws-sdk/credential-provider-login3.972.58непряма
npm@aws-sdk/credential-provider-node3.972.61непряма
npm@aws-sdk/credential-provider-process3.972.52непряма
npm@aws-sdk/credential-provider-sso3.972.58непряма
npm@aws-sdk/credential-provider-web-identity3.972.58непряма
npm@aws-sdk/eventstream-handler-node3.972.25непряма
npm@aws-sdk/middleware-eventstream3.972.21непряма
npm@aws-sdk/middleware-websocket3.972.34непряма
npm@aws-sdk/nested-clients3.997.26непряма
npm@aws-sdk/signature-v4-multi-region3.996.38непряма
npm@aws-sdk/token-providers3.1048.0непряма
npm@aws-sdk/token-providers3.1078.0непряма
npm@aws-sdk/types3.973.15непряма
npm@aws-sdk/util-locate-window3.965.8непряма
npm@aws-sdk/xml-builder3.972.33непряма
npm@aws/lambda-invoke-store0.2.4непряма
npm@babel/runtime7.29.7непряма
npm@borewit/text-codec0.2.2непряма
npm@cacheable/memory2.0.9непряма
npm@cacheable/node-cache1.7.6непряма
npm@cacheable/utils2.4.1непряма
npm@composio/client0.1.0-alpha.72непряма
npm@composio/json-schema-to-zod0.1.20непряма
npm@discordjs/builders1.14.1непряма
npm@discordjs/collection1.5.3непряма
npm@discordjs/collection2.1.1непряма
npm@discordjs/formatters0.6.2непряма
npm@discordjs/rest2.6.1непряма
npm@discordjs/util1.2.0непряма
npm@discordjs/ws1.2.3непряма
npm@esbuild/aix-ppc640.27.0непряма
npm@esbuild/aix-ppc640.28.1непряма
npm@esbuild/android-arm0.27.0непряма
npm@esbuild/android-arm0.28.1непряма
npm@esbuild/android-arm640.27.0непряма
npm@esbuild/android-arm640.28.1непряма
npm@esbuild/android-x640.27.0непряма
npm@esbuild/android-x640.28.1непряма
npm@esbuild/darwin-arm640.27.0непряма
npm@esbuild/darwin-arm640.28.1непряма
npm@esbuild/darwin-x640.27.0непряма
npm@esbuild/darwin-x640.28.1непряма
npm@esbuild/freebsd-arm640.27.0непряма
npm@esbuild/freebsd-arm640.28.1непряма
npm@esbuild/freebsd-x640.27.0непряма
npm@esbuild/freebsd-x640.28.1непряма
npm@esbuild/linux-arm0.27.0непряма
npm@esbuild/linux-arm0.28.1непряма
npm@esbuild/linux-arm640.27.0непряма
npm@esbuild/linux-arm640.28.1непряма
npm@esbuild/linux-ia320.27.0непряма
npm@esbuild/linux-ia320.28.1непряма
npm@esbuild/linux-loong640.27.0непряма
npm@esbuild/linux-loong640.28.1непряма
npm@esbuild/linux-mips64el0.27.0непряма
npm@esbuild/linux-mips64el0.28.1непряма
npm@esbuild/linux-ppc640.27.0непряма
npm@esbuild/linux-ppc640.28.1непряма
npm@esbuild/linux-riscv640.27.0непряма
npm@esbuild/linux-riscv640.28.1непряма
npm@esbuild/linux-s390x0.27.0непряма
npm@esbuild/linux-s390x0.28.1непряма
npm@esbuild/linux-x640.27.0непряма
npm@esbuild/linux-x640.28.1непряма
npm@esbuild/netbsd-arm640.27.0непряма
npm@esbuild/netbsd-arm640.28.1непряма
npm@esbuild/netbsd-x640.27.0непряма
npm@esbuild/netbsd-x640.28.1непряма
npm@esbuild/openbsd-arm640.27.0непряма
npm@esbuild/openbsd-arm640.28.1непряма
npm@esbuild/openbsd-x640.27.0непряма
npm@esbuild/openbsd-x640.28.1непряма
npm@esbuild/openharmony-arm640.27.0непряма
npm@esbuild/openharmony-arm640.28.1непряма
npm@esbuild/sunos-x640.27.0непряма
npm@esbuild/sunos-x640.28.1непряма
npm@esbuild/win32-arm640.27.0непряма
npm@esbuild/win32-arm640.28.1непряма
npm@esbuild/win32-ia320.27.0непряма
npm@esbuild/win32-ia320.28.1непряма
npm@esbuild/win32-x640.27.0непряма
npm@esbuild/win32-x640.28.1непряма
npm@fast-csv/format4.3.5непряма
npm@fast-csv/parse4.3.6непряма
npm@google/genai1.52.0непряма
npm@hapi/boom9.1.4непряма
npm@hapi/hoek9.3.0непряма
npm@isaacs/fs-minipass4.0.1непряма
npm@jimp/core1.6.1непряма
npm@jimp/diff1.6.1непряма
npm@jimp/file-ops1.6.1непряма
npm@jimp/js-bmp1.6.1непряма
npm@jimp/js-gif1.6.1непряма
npm@jimp/js-jpeg1.6.1непряма
npm@jimp/js-png1.6.1непряма
npm@jimp/js-tiff1.6.1непряма
npm@jimp/plugin-blit1.6.1непряма
npm@jimp/plugin-blur1.6.1непряма
npm@jimp/plugin-circle1.6.1непряма
npm@jimp/plugin-color1.6.1непряма
npm@jimp/plugin-contain1.6.1непряма
npm@jimp/plugin-cover1.6.1непряма
npm@jimp/plugin-crop1.6.1непряма
npm@jimp/plugin-displace1.6.1непряма
npm@jimp/plugin-dither1.6.1непряма
npm@jimp/plugin-fisheye1.6.1непряма
npm@jimp/plugin-flip1.6.1непряма
npm@jimp/plugin-hash1.6.1непряма
npm@jimp/plugin-mask1.6.1непряма
npm@jimp/plugin-print1.6.1непряма
npm@jimp/plugin-quantize1.6.1непряма
npm@jimp/plugin-resize1.6.1непряма
npm@jimp/plugin-rotate1.6.1непряма
npm@jimp/plugin-threshold1.6.1непряма
npm@jimp/types1.6.1непряма
npm@jimp/utils1.6.1непряма
npm@keyv/bigmap1.3.1непряма
npm@keyv/serialize1.1.1непряма
npm@mariozechner/clipboard0.3.9непряма
npm@mariozechner/clipboard-darwin-arm640.3.9непряма
npm@mariozechner/clipboard-darwin-universal0.3.9непряма
npm@mariozechner/clipboard-darwin-x640.3.9непряма
npm@mariozechner/clipboard-linux-arm64-gnu0.3.9непряма
npm@mariozechner/clipboard-linux-arm64-musl0.3.9непряма
npm@mariozechner/clipboard-linux-riscv64-gnu0.3.9непряма
npm@mariozechner/clipboard-linux-x64-gnu0.3.9непряма
npm@mariozechner/clipboard-linux-x64-musl0.3.9непряма
npm@mariozechner/clipboard-win32-arm64-msvc0.3.9непряма
npm@mariozechner/clipboard-win32-x64-msvc0.3.9непряма
npm@mistralai/mistralai2.2.6непряма
npm@opentelemetry/api1.9.0непряма
npm@opentelemetry/semantic-conventions1.41.1непряма
npm@pdf-lib/standard-fonts1.0.0непряма
npm@pdf-lib/upng1.0.1непряма
npm@pinojs/redact0.4.0непряма
npm@protobufjs/aspromise1.1.2непряма
npm@protobufjs/base641.1.2непряма
npm@protobufjs/codegen2.0.5непряма
npm@protobufjs/eventemitter1.1.1непряма
npm@protobufjs/fetch1.1.1непряма
npm@protobufjs/float1.0.2непряма
npm@protobufjs/path1.1.2непряма
npm@protobufjs/pool1.1.0непряма
npm@protobufjs/utf81.1.1непряма
npm@sapphire/async-queue1.5.5непряма
npm@sapphire/shapeshift4.0.0непряма
npm@sapphire/snowflake3.5.3непряма
npm@sapphire/snowflake3.5.5непряма
npm@silvia-odwyer/photon-node0.3.4непряма
npm@slack/logger4.0.1непряма
npm@slack/types2.21.1непряма
npm@smithy/core3.29.0непряма
npm@smithy/credential-provider-imds4.4.5непряма
npm@smithy/fetch-http-handler5.6.2непряма
npm@smithy/is-array-buffer2.2.0непряма
npm@smithy/node-http-handler4.7.3непряма
npm@smithy/node-http-handler4.9.2непряма
npm@smithy/signature-v45.6.1непряма
npm@smithy/types4.15.1непряма
npm@smithy/util-buffer-from2.2.0непряма
npm@smithy/util-utf82.3.0непряма
npm@tokenizer/inflate0.4.1непряма
npm@tokenizer/token0.3.0непряма
npm@types/json-schema7.0.15непряма
npm@types/node14.18.63непряма
npm@types/node16.9.1непряма
npm@types/node22.19.17непряма
npm@types/node25.9.4непряма
npm@types/prompts2.4.9непряма
npm@types/proper-lockfile4.1.4непряма
npm@types/qrcode-terminal0.12.2непряма
npm@types/retry0.12.0непряма
npm@types/tar6.1.13непряма
npm@types/ws8.18.1непряма
npm@vladfrangu/async_event_emitter2.4.7непряма
npmabort-controller3.0.0непряма
npmagent-base6.0.2непряма
npmagent-base7.1.4непряма
npmagent-base9.0.0непряма
npmansi-regex5.0.1непряма
npmansi-styles4.3.0непряма
npmany-base1.1.0непряма
npmany-promise1.3.0непряма
npmarchiver5.3.2непряма
npmarchiver-utils2.1.0непряма
npmarchiver-utils3.0.4непряма
npmasync3.2.6непряма
npmasync-mutex0.5.0непряма
npmasynckit0.4.0непряма
npmatomic-sleep1.0.0непряма
npmawait-to-js3.0.0непряма
npmaxios1.18.1непряма
npmbalanced-match1.0.2непряма
npmbalanced-match4.0.4непряма
npmbase64-js1.5.1непряма
npmbig-integer1.6.52непряма
npmbignumber.js9.3.1непряма
npmbinary0.3.0непряма
npmbl4.1.0непряма
npmbluebird3.4.7непряма
npmbmp-ts1.0.9непряма
npmboolbase1.0.0непряма
npmbottleneck2.19.5непряма
npmbowser2.14.1непряма
npmbrace-expansion1.1.15непряма
npmbrace-expansion2.1.1непряма
npmbrace-expansion5.0.6непряма
npmbuffer5.7.1непряма
npmbuffer-crc320.2.13непряма
npmbuffer-equal-constant-time1.0.1непряма
npmbuffer-indexof-polyfill1.0.2непряма
npmbuffers0.1.1непряма
npmcacheable2.3.5непряма
npmcall-bind-apply-helpers1.0.2непряма
npmchainsaw0.1.0непряма
npmchownr3.0.0непряма
npmcliui7.0.4непряма
npmcolor4.2.3непряма
npmcolor-convert2.0.1непряма
npmcolor-name1.1.4непряма
npmcolor-string1.9.1непряма
npmcombined-stream1.0.8непряма
npmcompress-commons4.1.2непряма
npmconcat-map0.0.1непряма
npmcontent-type1.0.5непряма
npmcore-util-is1.0.3непряма
npmcrc-321.2.2непряма
npmcrc32-stream4.0.3непряма
npmcross-spawn7.0.6непряма
npmcrypto-js4.2.0непряма
npmcss-select5.2.2непряма
npmcss-what6.2.2непряма
npmcssom0.5.0непряма
npmcurve25519-js0.0.4непряма
npmdata-uri-to-buffer4.0.1непряма
npmdayjs1.11.21непряма
npmdebug4.4.3непряма
npmdefine-property1.0.0непряма
npmdelayed-stream1.0.0непряма
npmdiff8.0.4непряма
npmdiscord-api-types0.38.49непряма
npmdom-serializer2.0.0непряма
npmdomelementtype2.3.0непряма
npmdomhandler5.0.3непряма
npmdomutils3.2.2непряма
npmdunder-proto1.0.1непряма
npmduplexer20.1.4непряма
npmecdsa-sig-formatter1.0.11непряма
npmemoji-regex8.0.0непряма
npmend-of-stream1.4.5непряма
npmentities4.5.0непряма
npmentities7.0.1непряма
npmes-define-property1.0.1непряма
npmes-errors1.3.0непряма
npmes-object-atoms1.1.2непряма
npmes-set-tostringtag2.1.0непряма
npmesbuild0.27.0непряма
npmesbuild0.28.1непряма
npmescalade3.2.0непряма
npmevent-target-shim5.0.1непряма
npmeventemitter34.0.7непряма
npmeventemitter35.0.4непряма
npmexif-parser0.1.12непряма
npmextend3.0.2непряма
npmfast-csv4.3.6непряма
npmfast-deep-equal3.1.3непряма
npmfetch-blob3.2.0непряма
npmfile-type21.3.4непряма
npmfollow-redirects1.16.0непряма
npmform-data4.0.6непряма
npmformdata-polyfill4.0.10непряма
npmfs-constants1.0.0непряма
npmfs.realpath1.0.0непряма
npmfsevents2.3.3непряма
npmfstream1.0.12непряма
npmfunction-bind1.1.2непряма
npmgaxios7.1.5непряма
npmgcp-metadata8.1.2непряма
npmget-caller-file2.0.5непряма
npmget-east-asian-width1.6.0непряма
npmget-intrinsic1.3.0непряма
npmget-proto1.0.1непряма
npmgifwrap0.10.1непряма
npmglob13.0.6непряма
npmglob7.2.3непряма
npmgoogle-auth-library10.9.0непряма
npmgoogle-logging-utils1.1.3непряма
npmgopd1.2.0непряма
npmgraceful-fs4.2.11непряма
npmhas-flag4.0.0непряма
npmhas-symbols1.1.0непряма
npmhas-tostringtag1.0.2непряма
npmhash.js1.1.7непряма
npmhashery1.5.1непряма
npmhasown2.0.4непряма
npmhighlight.js10.7.3непряма
npmhookified1.15.1непряма
npmhookified2.2.0непряма
npmhosted-git-info9.0.3непряма
npmhtml-entities2.6.0непряма
npmhtml-escaper3.0.3непряма
npmhtmlparser210.1.0непряма
npmhttp-proxy-agent7.0.2непряма
npmhttps1.0.0непряма
npmieee7541.2.1непряма
npmignore7.0.5непряма
npmimage-q4.0.0непряма
npmimage-size1.2.1непряма
npmimmediate3.0.6непряма
npminflight1.0.6непряма
npminherits2.0.4непряма
npmip-address10.2.0непряма
npmis-accessor-descriptor1.0.1непряма
npmis-arrayish0.3.4непряма
npmis-buffer1.1.6непряма
npmis-data-descriptor1.0.1непряма
npmis-descriptor1.0.3непряма
npmis-electron2.2.2непряма
npmis-fullwidth-code-point3.0.0непряма
npmis-number3.0.0непряма
npmis-stream2.0.1непряма
npmisarray1.0.0непряма
npmisexe2.0.0непряма
npmjpeg-js0.4.4непряма
npmjson-bigint1.0.0непряма
npmjson-schema-to-ts3.1.1непряма
npmjszip3.10.1непряма
npmjwa2.0.1непряма
npmjws4.0.1непряма
npmkeyv5.6.0непряма
npmkind-of3.2.2непряма
npmkleur3.0.3непряма
npmlazystream1.0.1непряма
npmlibsignal6.0.0непряма
npmlie3.3.0непряма
npmlistenercount1.0.1непряма
npmlodash4.18.1непряма
npmlodash.defaults4.2.0непряма
npmlodash.difference4.5.0непряма
npmlodash.escaperegexp4.1.2непряма
npmlodash.flatten4.4.0непряма
npmlodash.groupby4.6.0непряма
npmlodash.isboolean3.0.3непряма
npmlodash.isequal4.5.0непряма
npmlodash.isfunction3.0.9непряма
npmlodash.isnil4.0.0непряма
npmlodash.isplainobject4.0.6непряма
npmlodash.isundefined3.0.1непряма
npmlodash.snakecase4.1.1непряма
npmlodash.union4.6.0непряма
npmlodash.uniq4.5.0непряма
npmlong5.3.2непряма
npmlru-cache11.4.0непряма
npmlru-cache11.5.1непряма
npmmagic-bytes.js1.13.0непряма
npmmarked18.0.5непряма
npmmath-intrinsics1.1.0непряма
npmmedia-typer1.1.0непряма
npmmime3.0.0непряма
npmmime-db1.52.0непряма
npmmime-types2.1.35непряма
npmminimalistic-assert1.0.1непряма
npmminimist1.2.8непряма
npmminipass4.2.8непряма
npmminipass7.1.3непряма
npmminizlib3.1.0непряма
npmmkdirp0.5.6непряма
npmms2.1.3непряма
npmmusic-metadata11.12.3непряма
npmmz2.7.0непряма
npmnanoid5.1.16непряма
npmnode-domexception1.0.0непряма
npmnode-fetch2.7.0непряма
npmnode-fetch3.3.2непряма
npmnode-html-better-parser1.5.8непряма
npmnormalize-path3.0.0непряма
npmnth-check2.1.1непряма
npmobject-assign4.1.1непряма
npmomggif1.0.10непряма
npmon-exit-leak-free2.1.2непряма
npmonce1.4.0непряма
npmopenai6.26.0непряма
npmp-finally1.0.0непряма
npmp-queue6.6.2непряма
npmp-queue9.3.0непряма
npmp-retry4.6.2непряма
npmp-timeout3.2.0непряма
npmp-timeout7.0.1непряма
npmpako1.0.11непряма
npmparse-bmfont-ascii1.0.6непряма
npmparse-bmfont-binary1.0.6непряма
npmparse-bmfont-xml1.1.6непряма
npmparse55.1.1непряма
npmparse56.0.1непряма
npmparse5-htmlparser2-tree-adapter6.0.1непряма
npmpartial-json0.1.7непряма
npmpath-is-absolute1.0.1непряма
npmpath-key3.1.1непряма
npmpath-scurry2.0.2непряма
npmpino9.14.0непряма
npmpino-abstract-transport2.0.0непряма
npmpino-std-serializers7.1.0непряма
npmpixelmatch5.3.0непряма
npmpngjs6.0.0непряма
npmpngjs7.0.0непряма
npmprettier3.8.3непряма
npmprocess-nextick-args2.0.1непряма
npmprocess-warning5.0.0непряма
npmprotobufjs7.6.4непряма
npmproxy-from-env2.1.0непряма
npmpusher-js8.5.0непряма
npmqified0.10.1непряма
npmqueue6.0.2непряма
npmquick-format-unescaped4.0.4непряма
npmreadable-stream2.3.8непряма
npmreadable-stream3.6.2непряма
npmreaddir-glob1.1.3непряма
npmreal-require0.2.0непряма
npmrequire-directory2.1.1непряма
npmretry0.12.0непряма
npmretry0.13.1непряма
npmrimraf2.7.1непряма
npmsafe-buffer5.1.2непряма
npmsafe-stable-stringify2.5.0непряма
npmsax1.6.0непряма
npmsaxes5.0.1непряма
npmsemver7.8.0непряма
npmsemver7.8.5непряма
npmsetimmediate1.0.5непряма
npmshebang-command2.0.0непряма
npmshebang-regex3.0.0непряма
npmsignal-exit3.0.7непряма
npmsimple-swizzle0.2.4непряма
npmsimple-xml-to-json1.2.7непряма
npmsisteransi1.0.5непряма
npmsmart-buffer4.2.0непряма
npmsocks2.8.9непряма
npmsonic-boom4.2.1непряма
npmsplit24.2.0непряма
npmstring-width4.2.3непряма
npmstring_decoder1.1.1непряма
npmstrip-ansi6.0.1непряма
npmstrtok310.3.5непряма
npmsupports-color7.2.0непряма
npmsupports-color8.1.1непряма
npmtar-stream2.2.0непряма
npmthenify3.3.1непряма
npmthenify-all1.6.0непряма
npmthread-stream3.1.0непряма
npmtinycolor21.6.0непряма
npmtmp0.2.7непряма
npmtoken-types6.1.2непряма
npmtr460.0.3непряма
npmtraverse0.3.9непряма
npmts-algebra2.0.0непряма
npmts-mixer6.0.4непряма
npmtslib2.8.1непряма
npmtsx4.22.4непряма
npmtweetnacl1.0.3непряма
npmtypebox1.1.38непряма
npmtypescript5.9.3непряма
npmuhyphen0.2.0непряма
npmuint8array-extras1.5.0непряма
npmundici-types6.21.0непряма
npmundici-types7.24.6непряма
npmunzipper0.10.14непряма
npmutif24.1.0непряма
npmutil-deprecate1.0.2непряма
npmuuid11.1.1непряма
npmweb-streams-polyfill3.3.3непряма
npmwebidl-conversions3.0.1непряма
npmwhatsapp-rust-bridge0.5.4непряма
npmwhatwg-url5.0.0непряма
npmwhich2.0.2непряма
npmwin-guid0.2.1непряма
npmwindow-size1.1.1непряма
npmwrap-ansi7.0.0непряма
npmwrappy1.0.2непряма
npmxml1.0.1непряма
npmxml-js1.6.11непряма
npmxml-parse-from-string1.0.1непряма
npmxml2js0.5.0непряма
npmxmlbuilder11.0.1непряма
npmxmlchars2.2.0непряма
npmy18n5.0.8непряма
npmyallist5.0.0непряма
npmyargs16.2.0непряма
npmyargs-parser20.2.9непряма
npmzip-stream4.1.1непряма
npmzod-to-json-schema3.25.2непряма
Сповіщення про залежності 3

Встановлення npm:@spinabot/brigade@1.29.4 тягне 535 пакетів, прямих і транзитивних: 3 мають відомі сповіщення, з них 0 — прямі залежності.

ПакетВерсіяЗв'язокКритичністьСповіщеньВиправлено в
brace-expansion1.1.16непрямависока15.0.8
brace-expansion2.1.2непрямависока15.0.8
uuid8.3.2непрямависока113.0.1

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

Звіт у форматі JSON машиночитний
{
  "data": {
    "repo": {
      "topics": [
        "agent-runtime",
        "ai",
        "ai-crew",
        "autonomous-agents",
        "brigade",
        "chatgpt",
        "clawdbot",
        "codex",
        "crustacean",
        "hermes",
        "hermes-agent",
        "llm",
        "moltbot",
        "molty",
        "multi-agent",
        "openclaw",
        "self-improving-ai",
        "brigade-agent",
        "pride-of-agents",
        "spinabot"
      ],
      "is_fork": false,
      "size_kb": 29724,
      "has_wiki": true,
      "homepage": "https://www.brigade.spinabot.com",
      "languages": {
        "Shell": 15244,
        "Python": 31302,
        "JavaScript": 75775,
        "PowerShell": 30438,
        "TypeScript": 14512427
      },
      "pushed_at": "2026-07-19T23:13:59Z",
      "created_at": "2026-06-19T15:18:17Z",
      "owner_type": "Organization",
      "updated_at": "2026-07-25T17:19:46Z",
      "description": "Brigade — Your personal intelligence, built enterprise-grade",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "main",
      "license_spdx_raw": "MIT",
      "primary_language": "TypeScript",
      "significant_languages": [
        "TypeScript"
      ]
    },
    "owner": {
      "blog": "https://www.spinabot.com/",
      "name": null,
      "type": "Organization",
      "login": "spinabot",
      "company": null,
      "location": null,
      "followers": 4,
      "avatar_url": "https://avatars.githubusercontent.com/u/293232482?v=4",
      "created_at": "2026-06-12T22:17:15Z",
      "is_verified": null,
      "public_repos": 1,
      "account_age_days": 43
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "brigade-v1.29.4",
          "kind": "other",
          "published_at": "2026-07-19T23:14:00Z"
        },
        {
          "tag": "brigade-v1.29.3",
          "kind": "other",
          "published_at": "2026-07-19T22:05:29Z"
        },
        {
          "tag": "brigade-v1.29.2",
          "kind": "other",
          "published_at": "2026-07-19T21:32:42Z"
        },
        {
          "tag": "brigade-v1.29.1",
          "kind": "other",
          "published_at": "2026-07-12T07:54:05Z"
        },
        {
          "tag": "brigade-v1.29.0",
          "kind": "other",
          "published_at": "2026-07-12T07:31:21Z"
        },
        {
          "tag": "brigade-v1.28.0",
          "kind": "other",
          "published_at": "2026-07-10T08:36:24Z"
        },
        {
          "tag": "brigade-v1.27.1",
          "kind": "other",
          "published_at": "2026-07-10T06:30:39Z"
        },
        {
          "tag": "brigade-v1.27.0",
          "kind": "other",
          "published_at": "2026-07-10T06:12:18Z"
        },
        {
          "tag": "brigade-v1.26.1",
          "kind": "other",
          "published_at": "2026-07-10T05:44:31Z"
        },
        {
          "tag": "brigade-v1.26.0",
          "kind": "other",
          "published_at": "2026-07-10T05:27:12Z"
        },
        {
          "tag": "brigade-v1.25.3",
          "kind": "other",
          "published_at": "2026-07-07T05:14:12Z"
        },
        {
          "tag": "brigade-v1.25.2",
          "kind": "other",
          "published_at": "2026-07-07T04:58:32Z"
        },
        {
          "tag": "brigade-v1.25.1",
          "kind": "other",
          "published_at": "2026-07-07T04:23:57Z"
        },
        {
          "tag": "brigade-v1.25.0",
          "kind": "other",
          "published_at": "2026-07-05T21:29:09Z"
        },
        {
          "tag": "brigade-v1.24.2",
          "kind": "other",
          "published_at": "2026-07-05T05:50:25Z"
        },
        {
          "tag": "brigade-v1.24.1",
          "kind": "other",
          "published_at": "2026-07-05T04:48:11Z"
        },
        {
          "tag": "brigade-v1.24.0",
          "kind": "other",
          "published_at": "2026-07-05T04:32:46Z"
        },
        {
          "tag": "brigade-v1.23.0",
          "kind": "other",
          "published_at": "2026-07-04T03:20:04Z"
        },
        {
          "tag": "brigade-v1.22.1",
          "kind": "other",
          "published_at": "2026-07-03T01:27:03Z"
        },
        {
          "tag": "brigade-v1.22.0",
          "kind": "other",
          "published_at": "2026-07-02T23:23:13Z"
        },
        {
          "tag": "brigade-v1.21.0",
          "kind": "other",
          "published_at": "2026-07-02T23:10:22Z"
        },
        {
          "tag": "brigade-v1.20.0",
          "kind": "other",
          "published_at": "2026-07-02T17:48:25Z"
        },
        {
          "tag": "brigade-v1.19.4",
          "kind": "other",
          "published_at": "2026-07-02T03:23:43Z"
        },
        {
          "tag": "brigade-v1.19.3",
          "kind": "other",
          "published_at": "2026-07-02T02:28:50Z"
        },
        {
          "tag": "brigade-v1.19.2",
          "kind": "other",
          "published_at": "2026-06-30T17:13:13Z"
        },
        {
          "tag": "brigade-v1.19.1",
          "kind": "other",
          "published_at": "2026-06-29T22:38:57Z"
        },
        {
          "tag": "brigade-v1.19.0",
          "kind": "other",
          "published_at": "2026-06-29T22:11:43Z"
        },
        {
          "tag": "brigade-v1.18.0",
          "kind": "other",
          "published_at": "2026-06-29T20:15:31Z"
        },
        {
          "tag": "brigade-v1.17.1",
          "kind": "other",
          "published_at": "2026-06-28T18:06:01Z"
        },
        {
          "tag": "brigade-v1.17.0",
          "kind": "other",
          "published_at": "2026-06-28T16:19:44Z"
        },
        {
          "tag": "brigade-v1.16.0",
          "kind": "other",
          "published_at": "2026-06-27T20:43:03Z"
        },
        {
          "tag": "brigade-v1.15.0",
          "kind": "other",
          "published_at": "2026-06-27T19:47:04Z"
        },
        {
          "tag": "brigade-v1.14.0",
          "kind": "other",
          "published_at": "2026-06-26T17:21:56Z"
        },
        {
          "tag": "brigade-v1.13.0",
          "kind": "other",
          "published_at": "2026-06-26T15:20:19Z"
        },
        {
          "tag": "brigade-v1.12.0",
          "kind": "other",
          "published_at": "2026-06-26T13:09:56Z"
        },
        {
          "tag": "brigade-v1.11.2",
          "kind": "other",
          "published_at": "2026-06-25T23:00:22Z"
        },
        {
          "tag": "brigade-v1.11.1",
          "kind": "other",
          "published_at": "2026-06-25T22:44:26Z"
        },
        {
          "tag": "brigade-v1.11.0",
          "kind": "other",
          "published_at": "2026-06-25T22:22:55Z"
        },
        {
          "tag": "brigade-v1.10.0",
          "kind": "other",
          "published_at": "2026-06-25T22:04:50Z"
        },
        {
          "tag": "brigade-v1.9.0",
          "kind": "other",
          "published_at": "2026-06-25T18:41:53Z"
        },
        {
          "tag": "brigade-v1.8.0",
          "kind": "other",
          "published_at": "2026-06-25T14:46:46Z"
        },
        {
          "tag": "brigade-v1.7.0",
          "kind": "other",
          "published_at": "2026-06-25T05:38:04Z"
        },
        {
          "tag": "brigade-v1.6.1",
          "kind": "other",
          "published_at": "2026-06-24T18:10:20Z"
        },
        {
          "tag": "brigade-v1.6.0",
          "kind": "other",
          "published_at": "2026-06-24T16:46:17Z"
        },
        {
          "tag": "brigade-v1.5.0",
          "kind": "other",
          "published_at": "2026-06-24T13:39:08Z"
        },
        {
          "tag": "brigade-v1.4.0",
          "kind": "other",
          "published_at": "2026-06-23T16:33:50Z"
        },
        {
          "tag": "brigade-v1.3.2",
          "kind": "other",
          "published_at": "2026-06-23T02:14:32Z"
        },
        {
          "tag": "brigade-v1.3.1",
          "kind": "other",
          "published_at": "2026-06-23T01:34:38Z"
        },
        {
          "tag": "brigade-v1.3.0",
          "kind": "other",
          "published_at": "2026-06-22T18:02:32Z"
        },
        {
          "tag": "brigade-v1.2.2",
          "kind": "other",
          "published_at": "2026-06-21T08:10:49Z"
        },
        {
          "tag": "brigade-v1.2.1",
          "kind": "other",
          "published_at": "2026-06-21T07:56:29Z"
        },
        {
          "tag": "brigade-v1.2.0",
          "kind": "other",
          "published_at": "2026-06-21T07:43:46Z"
        },
        {
          "tag": "brigade-v1.1.0",
          "kind": "other",
          "published_at": "2026-06-21T07:20:51Z"
        },
        {
          "tag": "brigade-v1.0.2",
          "kind": "other",
          "published_at": "2026-06-21T06:28:20Z"
        },
        {
          "tag": "brigade-v1.0.1",
          "kind": "other",
          "published_at": "2026-06-21T06:12:37Z"
        },
        {
          "tag": "brigade-v1.0.0",
          "kind": "other",
          "published_at": "2026-06-21T05:19:43Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "01f2e43fcd7aa3df44822fa3917d033f37d8bd53",
          "body": null,
          "is_bot": true,
          "headline": "chore(main): release brigade 1.29.4 (#90)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-19T23:13:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e5b9f13a78b27130bf9a1cc70b4caa50ddd0b633",
          "body": "…curl script\n\n- shields npm/dt renders EMPTY for scoped packages; use badgen's npm/dt, which\n  supports scoped all-time totals with NO date in the URL — so it auto-updates\n  forever and never needs manual editing.\n- Lead the hero + Install with the curl|sh installer (handles Node, no sudo);\n  add an EACCES note next to the raw `npm i -g`.",
          "is_bot": false,
          "headline": "docs(readme): dynamic scoped downloads badge + lead install with the …",
          "author_name": "Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-19T23:04:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "241c643f7b5373be76f70f89b80117e261141934",
          "body": "… TUI spam)\n\nIn convex mode the strict-zero guard watches ~/.brigade and reports every write.\nSeveral subsystems still resolved state-dir paths unconditionally and wrote\nunder it, flooding the TUI:\n\n- claude-cli: the spawned `claude` binary writes its login/sessions/projects to\n  CLAUDE_CONFIG_DIR e\n[…]\nournal churn stops being flagged.\n- Route strict-zero violations to the `brigade doctor` counter instead of\n  console.error into the interactive TUI; opt into live logging with\n  BRIGADE_STRICT_LOG=1.",
          "is_bot": false,
          "headline": "fix(convex): keep ~/.brigade file-free in convex mode (no strict-zero…",
          "author_name": "Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-19T23:02:17Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ead590a73e3edbfb00ac5db56e895465169e8aa6",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release brigade 1.29.3 (#89)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-19T22:05:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ea9cdb1042687f955c15b280bfbac7fca6af5e5c",
          "body": "…m in onboard before proceeding\n\nA self-hosted (global-install) Convex onboard crashed right after the\nencryption-key step with a confusing exit. Two bugs:\n\n1. `brigade convex dev` booted the backend but left it with ZERO functions\n   deployed. convex-dev.mjs auto-pushes via convex-push.mjs, but con\n[…]\n early with actionable deploy guidance (local vs\n   cloud) instead of crashing mid-wizard. Three-state check (deployed /\n   not-deployed / unknown) so a live cloud deployment can't be false-negatived.",
          "is_bot": false,
          "headline": "fix(convex): deploy functions on `brigade convex dev`, and verify the…",
          "author_name": "Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-19T22:02:31Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3df92d201791820dfbbfe4e7775069d132437db0",
          "body": null,
          "is_bot": true,
          "headline": "chore(main): release brigade 1.29.2 (#88)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-19T21:32:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3268e35bdde889ffc4f73fe659c201b2f39f7c1a",
          "body": "…ocal Convex DB (#87)\n\nClear state CONTENTS while preserving -- name-agnostically -- whatever top-level entry holds the running node (process.execPath) or the installed package, so it holds for the Unix `runtime` dir and the Windows `node` dir alike, plus the local `convex/` store. Route `store reset --purge-local` through the same primitive. Stop a running gateway before the onboard wizard wipes (factory-reset \"gateway must be stopped first\" contract; otherwise EPERM-aborts on Windows).",
          "is_bot": false,
          "headline": "fix(storage): factory-reset must not uninstall the CLI or erase the l…",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-19T21:31:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "92942304ba429954f7def87ede6fd7fd35d62f78",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release brigade 1.29.1 (#84)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-12T07:53:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "27cc83e05df6d188513f74a20858ad2735b9d6ba",
          "body": "Two low-severity items from the attachment audits, now that 1.29.0 is out.\n\n  • The clipboard worker's Save-ClipImage returned from its catch WITHOUT\n    disposing the GDI+ Bitmap when Save() threw (a bad path, a full disk, a locked\n    clipboard) — leaking a native handle on every failed save, in a\n[…]\nds TIMESTAMP, TARGETS, MULTIPLE\". Those pseudo-targets are\n    now filtered so the operator sees the actual MIME types.\n\nRuntime-verified: the worker still boots and saves an image after the refactor.",
          "is_bot": false,
          "headline": "fix(tui): clipboard worker GDI+ handle leak + X11 target noise",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-12T07:51:01Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "eb0c2d7e6832b1a513fdd372ce07967de66307ff",
          "body": "…udes tests)",
          "is_bot": false,
          "headline": "test(tui): fix typecheck errors in attachment tests (CI tsconfig incl…",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-12T07:38:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "849cc8fb9bcb4e1cb06679828a60a1ad73a889ae",
          "body": "…components--brigade\n\nchore(main): release brigade 1.29.0",
          "is_bot": false,
          "headline": "Merge pull request #83 from spinabot/release-please--branches--main--…",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-12T07:31:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "eb08b4d308a6c8be38a18449dd9093eea7ef5e6f",
          "body": null,
          "is_bot": true,
          "headline": "chore(main): release brigade 1.29.0",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-12T07:29:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "40bb1e7eb69ac3d8f6426b09ecc70b47e0a9b635",
          "body": "…, /paste)",
          "is_bot": false,
          "headline": "docs(readme): document terminal file attachments (drag, Ctrl+V, @path…",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-12T07:28:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9682335279a5b8f9e1657a9d28d1cd17f6f7c215",
          "body": "The operator wanted \"Ctrl+V, simple, like claude cli\" — not the copy-watcher I\nbuilt. So I read how the real Claude Code binary does it: it carries an `onPaste`\nhandler, an `isPasting` state, an `onImagePaste`, and runs a clipboard `GetImage()`\nON PASTE. It does NOT intercept the Ctrl+V key (the ter\n[…]\nhe real editor + real wiring: an image on the\nclipboard + a bracketed paste (what Ctrl+V sends) attaches the image and leaves\nthe typed text clean. Docs, help and the footer hint now say Ctrl+V works.",
          "is_bot": false,
          "headline": "feat(tui): Ctrl+V attaches images, the way Claude Code does it",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-12T07:20:37Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ff2b2f5c1e265e2b48f3f11d6dd26ff68b76deb5",
          "body": "…not images\n\nThe previous framing (\"Ctrl+V doesn't work / the terminal eats the key\") was\nimprecise and an operator rightly called it out: if Ctrl+V were truly dead, text\nwouldn't paste either.\n\nThe accurate model: a terminal's paste can only carry TEXT. Plain text and a\ncopied file's PATH both have\n[…]\nch on\ncopy) and /paste exist for.\n\nCorrects the /clipboard note, the /help text, the footer hint, and the\nonImagePaste doc comment to say this precisely instead of implying Ctrl+V is\nwholesale broken.",
          "is_bot": false,
          "headline": "docs(tui): correct the Ctrl+V story — it pastes text and paths, just …",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-12T07:00:56Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c24fddd189678bb9542dae54a8bf117cf3fece60",
          "body": "…dings\n\nTwo adversarial reviews of the full feature. The high/critical findings, fixed:\n\nPERFORMANCE — the \"clipboard feels slow\" complaint was never the clipboard.\n`onTextChanged` runs on every keystroke and ran the full six-pattern path parser\nover the ENTIRE editor buffer each time — measured 200\n[…]\n (the watcher\nonly fires on CHANGE, so an image copied before opening Brigade was invisible).\n\n5,869 tests green; new coverage for fence-safety, encoding, the aggregate cap,\nand live-mode performance.",
          "is_bot": false,
          "headline": "fix(tui): harden attachments end-to-end — two adversarial audits' fin…",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-12T06:56:22Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1be6ee2bb054ec22e966598e736365769463c89a",
          "body": "Windows got the fast path; mac and Linux were still spawning a process per read.\nThat is not a shippable open-source story — \"fast on the maintainer's OS\" is how\nyou end up with a feature nobody else trusts.\n\nThe Windows cost was PowerShell's 200-500ms interpreter boot. pbpaste, osascript,\nwl-paste \n[…]\nd contains none.\n  • A backtick in a comment inside the template literal closed the literal.\n  • The warning comment I wrote about rule 1 violated rule 1, and the one about\n    rule 2 violated rule 2.",
          "is_bot": false,
          "headline": "perf(tui): persistent clipboard worker on macOS and Linux too",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-12T06:29:12Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c0d2bf329ade3a0423a8b802296ead76df2f4feb",
          "body": "The clipboard was slow because every read SPAWNED A PROCESS. A PowerShell cold\nstart is 200-500ms and we paid it per call — and `/paste` asked four separate\nquestions (files, image, text, formats) down four separate spawns, in series. The\nauto-attach watcher was worse: it noticed a change in one pro\n[…]\n goes through [Console]::Out.Flush(). And the script\nruns from a FILE, not `-Command` — its C# here-string has to survive Node's argv\nquoting, CreateProcess's, and PowerShell's parser, and it did not.",
          "is_bot": false,
          "headline": "perf(tui): persistent clipboard worker — 2000ms paste becomes 72ms",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-12T06:16:21Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8271b20c0308e57af83b12c3b21c75a2c12266fe",
          "body": "Studied how the installed Claude Code binary does this (behaviour only — its\nbundle is proprietary and this repo is going open source, so nothing was copied).\nIts technique, from the PE import table and embedded scripts, is: native Win32\nOpenClipboard/GetClipboardData/IsClipboardFormatAvailable with\n[…]\n a lost turn. Verified live against the\nreal clipboard on Windows — image, file-copy and copy-as-path all captured, and a\ntext clipboard correctly reports what it holds instead of \"nothing to attach\".",
          "is_bot": false,
          "headline": "refactor(tui): clipboard as a real cross-platform capability",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-12T04:44:26Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e7e436390a77bd3d1afabed96d8d23a5e0e79b91",
          "body": "\"Without /paste I should just be able to paste.\" Correct, and Ctrl+V is not the\nway to get there — it CANNOT be made to work. Every mainstream terminal (Windows\nTerminal, VS Code, iTerm) binds Ctrl+V to its own paste action and consumes the\nkey. That paste inserts the clipboard's TEXT; a screenshot \n[…]\n —\nand when it finds nothing it names what the clipboard actually holds instead of\nsaying \"nothing to attach\", which stated the outcome, hid the cause, and was\nindistinguishable from a bug in Brigade.",
          "is_bot": false,
          "headline": "feat(tui): screenshots auto-attach — no Ctrl+V, no /paste, no command",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-12T04:36:52Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "004fc4714f9f44c21c81f79554c0996f88a2970b",
          "body": "Two bugs, both of which made correct code look broken.\n\n1. UNQUOTED PATHS WITH SPACES silently attached nothing. A real filename —\n   `ChatGPT Image Jul 11, 2026, 11_45_54 AM (1).png` — has spaces, commas and\n   parens, and a terminal pastes it WITHOUT quotes. Every token pattern stops at\n   the fir\n[…]\nemon is stale BY DEFINITION, so the dev runner now\n   stops it after a successful rebuild and lets the next tui/chat auto-spawn a\n   fresh one. Best-effort and quiet — a no-op when nothing is running.",
          "is_bot": false,
          "headline": "fix: unquoted spacey paths + stop the stale gateway after a rebuild",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-12T03:46:05Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "94d0b2a89cac4927528dec35a2b4ce66e3f39b6d",
          "body": "… couldn't\n\nThe TUI told the operator \"claude-opus-4-8 can't see images\". It was wrong, and\nnot merely cosmetically: the agent loop gates inline image blocks on the model's\n`input` capability (`resolveInboundImagePrompt`), so the screenshot they had just\nattached was being SILENTLY DROPPED before th\n[…]\nnly. This backend replays history as\na flattened Human:/Assistant: transcript, so sweeping in every historical image\nwould re-transmit and re-bill the entire album every time the operator says \"and?\".",
          "is_bot": false,
          "headline": "feat(claude-cli): the backend can see images — it was never Opus that…",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-12T03:40:21Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "31980c98a12e24add492174990a6b9a64d851444",
          "body": "…\"paste\"\n\nDrag-drop still did nothing in the VS Code terminal. Both previous attempts to\ndetect a drop failed for the same underlying reason: they tried to infer intent\nfrom the SHAPE of the input.\n\n  1. `!data.startsWith(\"\\x1b\")` — meant to skip arrow keys, but pi-tui wraps every\n     paste in brac\n[…]\nDEBUG_INPUT=1, which traces every raw input chunk to\n%TEMP%/brigade-input-trace.log — because terminals disagree loudly about what they\nsend, and two bugs here came from guessing instead of measuring.",
          "is_bot": false,
          "headline": "fix(tui): detect a dropped path on ANY text change, not on a guessed …",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-12T03:34:20Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "320a4cf98645c1f25c03ca690f39d62641a06dae",
          "body": "The drag-drop hook tested `!data.startsWith(\"\\x1b\")` to avoid firing on arrow\nkeys. But pi-tui wraps every paste in bracketed-paste markers before handing it\nover — its own source says so: \"pasted data will always contain \\x1b[200~\"\n(pi-tui/keys.js). So a dropped file arrives as a chunk STARTING wit\n[…]\nnd now a guard that excluded the very thing it was meant to catch.\nUnit tests could not have caught any of the three. Confirmed this one does: with\nthe old guard restored, three of its six cases fail.",
          "is_bot": false,
          "headline": "fix(tui): drop hook never fired — pastes ARE escape sequences",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-12T03:27:20Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "fec881caf05f9b7af5e72ac09e8d46a1282069ee",
          "body": "Drag-and-drop was useless in practice and the screenshot proved it: you drop a\nfile and simply watch `C:\\Users\\me\\Downloads\\plant-cell.png` appear in the input\nbox. Nothing staged. No bar. No pill. No reason on earth to believe it worked.\n\nThe cause was that the path was only converted into an attac\n[…]\nile: dropping\nC:\\Users\\SmartSystems\\Downloads\\plant-cell.png turns the line into\n`[plant-cell.png]`, stages it as image/743847b, and composes a genuine inline\nimage block of 991,796 base64 characters.",
          "is_bot": false,
          "headline": "fix(tui): a dropped file becomes an attachment ON DROP, not on submit",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-12T03:21:07Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "9d23c3b9fac57af9502d4a93fdf5ddefccdf3815",
          "body": "…V/Alt+V\n\nThree things were wrong, and the operator was right about all of them.\n\n1. IT WASN'T A REAL ATTACHMENT. Images already rode as inline bytes, but every\n   other file was handed to the model as a PATH plus a hope that it would call a\n   tool. An attachment whose content the model never sees \n[…]\nipboard on Windows, not just unit tests: a\n19.5 KB screenshot captured off the clipboard, base64'd into a genuine image\nblock (26,024 chars), alongside a text file whose contents landed in the prompt.",
          "is_bot": false,
          "headline": "feat(tui): make attachments REAL — inline content, visible bar, Ctrl+…",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-12T03:16:32Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3bcd215971bab437b03926a45e357cfd461edd6f",
          "body": "A second adversarial audit found three critical defects, all downstream of two\nstructural mistakes.\n\nMISTAKE 1 — /attach, /paste and /detach sat BELOW the `isAgentRunning` steer\ngate, so they were unreachable while a turn was in flight: typing `/paste` while\nthe agent worked sent the literal text \"/\n[…]\nopped on the far side; macOS\nreturns ALL copied files rather than only the first; the AppleScript path is\nescaped; and \"no clipboard tool installed\" no longer masquerades as \"your\nclipboard is empty\".",
          "is_bot": false,
          "headline": "fix(tui): one send path, attachments above the steer gate",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-12T03:06:51Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6720f2ef82bdc0af15bf585fcf674b58dfd4cb2a",
          "body": "Adversarial audit of the previous commit found real defects. The worst had\nnothing to do with attachments and hit EVERY turn.\n\nCRITICAL — prose was being rewritten on every message. `extractAttachmentPaths`\nended with `.replace(/[ \\t]{2,}/g, \" \").trim()` and runs on every submitted line,\nso pasting \n[…]\n\nand `/switch` now carries the message's attachments across a model handoff —\nwithout which the commonest reason to switch (this model can't see the image)\nreplayed the text and left the image behind.",
          "is_bot": false,
          "headline": "fix(tui): harden attachments — prose passthrough, byte caps, safe MIMEs",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-12T02:57:29Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "db0a01957788e42adaaed59578fd5275c136ac0c",
          "body": "…aste\n\nThe multimodal path already existed end-to-end: the agent loop takes inline\n`ImageContent` blocks, `resolveInboundImagePrompt` gates them on the resolved\nmodel's vision capability, and `buildMediaNote` transcribes audio and emits an\n`analyze_media` call-to-action for documents. Only the chann\n[…]\npportsVision` to the session snapshot, derived from the same\npredicate the turn uses, so the TUI can warn that a staged image will not\nactually be seen while the operator can still `/model` out of it.",
          "is_bot": false,
          "headline": "feat(tui): attach files to a turn — @path, drag-drop, and clipboard p…",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-12T02:40:22Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3a48cfb54f190668953693ee2e0bb0215b5ad690",
          "body": "…components--brigade\n\nchore(main): release brigade 1.28.0",
          "is_bot": false,
          "headline": "Merge pull request #82 from spinabot/release-please--branches--main--…",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-10T08:36:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f6705e240ed6a024c1c83f8306e0de62072a1feb",
          "body": null,
          "is_bot": true,
          "headline": "chore(main): release brigade 1.28.0",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-10T08:35:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "aca56bb8c1b923e6a49fc42ee9976fa26ff33a69",
          "body": "Ten fixes found by driving the code rather than reading it. Several were mine, shipped\ntwo commits earlier and never run.\n\nSTREAMING (claude-cli harness)\n- A sub-agent's `agent_end` ran the PARENT's turn teardown: `activeAssistants.clear()`\n  dropped the parent's streaming block, so its whole answer\n[…]\ne fused sentences came out\nof the operator's own transcript, the engine's npm behaviour was reproduced both ways,\nand `get-state` + `resume` were driven against a live gateway (200 messages returned).",
          "is_bot": false,
          "headline": "fix: streaming shape, sub-agent lifecycle, and session continuity",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-10T08:33:52Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c5db103e3c072fc0805c21f96f2ef2e3e5ae5652",
          "body": "…can lose\n\nA TUI launched with `--session` (or `--agent`) sat blank: header `? · ?`, no\ntranscript. It filled in the instant the operator sent a message.\n\nThe gateway DOES send a snapshot on connect, immediately after `helloOk`\n(server.ts). The client just isn't always listening yet. `runConnectComm\n[…]\n model: claude-opus-4-8\n    resume(agent:main:t-0bf7c8e1) -> messages: 200\n\nNot a watchdog and not a liveness timer. Nothing was slow; a snapshot was delivered to\na client that had not yet subscribed.",
          "is_bot": false,
          "headline": "fix(tui): pull the state snapshot at startup — the push is a race we …",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-10T08:31:59Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "32aa3f92d5f4c069e52b00c13886b5f1f08dd9c7",
          "body": "…hreads do I have\"\n\nIt listed `listLiveSessions()` — the in-memory RUN registry, holding sessions with a\nturn in flight or just finished. That registry empties on every gateway restart.\n\nSo a restarted gateway reported ZERO threads. `/sessions` showed an empty list. And\n`brigade tui --session t-0bf7\n[…]\n against the real store on this machine: with no gateway running and no live\nruns, `handleSessionsList({agentId:\"main\"})` now returns 4 threads, including the one\n`--session` had just refused to open.",
          "is_bot": false,
          "headline": "fix(sessions): `sessions.list` answered \"what's running\", not \"what t…",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-10T08:31:59Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2afea079a031bf6aaf22a8ec3fc0ea3148624963",
          "body": "… orphaning one\n\n`brigade tui --session t-0bf7c8e1` (or `npm run tui -- --session t-0bf7c8e1`) opens\nstraight into that thread with its history, exactly as `--agent` does for agents. The\nshort label the header shows is expanded against the bound agent; the canonical\n`agent:main:t-0bf7c8e1` is accept\n[…]\ntarts an EMPTY one.\"\n\nBinding is what gives the AGENT its context: the prompt carries the session key, the\ngateway resolves that session, and the turn runs against its history. Nothing else is\nneeded.",
          "is_bot": false,
          "headline": "feat(tui): open an existing thread at startup, and stop a short label…",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-10T08:31:58Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ccb485d341f63588e4013d2bf5dce29786ee153b",
          "body": "Pre-existing on main, not from this branch. Comment-only, zero behaviour. The repo\nis public; the naming rule is that Brigade's source never names another agent project.",
          "is_bot": false,
          "headline": "chore: scrub the last external-project name from source",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-10T08:31:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2bd57ee4302c232da9ad8f2600e95271af333aa2",
          "body": "The operator gave Brigade an ElevenLabs key and `generate_music` still answered \"No\nmusic provider configured\". Three of our own surfaces contradicted each other:\n\n  generate_music   \"Add a Google, MiniMax, or ElevenLabs key with `brigade onboard`.\"\n  manage_provider  \"Unknown provider \\\"elevenlabs\\\n[…]\nfered them.\n\nSame shape as the render-engine bug two commits back: a capability the model is told\nto use, an error message pointing at a path that does not exist, and an agent that\ndoes as it is told.",
          "is_bot": false,
          "headline": "fix(providers): a media API key had no supported way in",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-10T08:31:58Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "476416a83090af434167930fa4932ca3000536a3",
          "body": "…reeing with resume\n\nThree findings from an adversarial audit of the result path.\n\nPREVIEW MASHED PROSE. `summarizeToolResult` collapsed ALL whitespace and clipped at\n~119 chars — perfect for `bash`/`grep`, wrong for prose. A 5,814-character\n`spawn_agent` reply became one line cut through the middle\n[…]\nwaits `Promise.allSettled`. A detached descendant whose\nframes arrive after the parent's `agent_end` would find its maps wiped and re-render\nits answer from the top. Gate by depth before shipping one.",
          "is_bot": false,
          "headline": "fix(tui): shape the tool-result preview, and stop the live view disag…",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-10T08:31:58Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b6fd1aef7358ed6d7b44b518c3dbd7e5aef4f7bd",
          "body": "… I had just closed\n\nAn adversarial audit of the transport found the asymmetry:\n\n    if (u.input && usageInput === 0) usageInput = u.input;   // fill-only ✓\n    if (u.output) usageOutput = u.output;                    // unconditional ✗\n\nThe `result` frame's usage is cumulative over every internal s\n[…]\ns now pinned\n  when the block opens.\n\n- The no-partials fallback (`handleAssistantFrame`, older CLI) rendered a multi-text\n  frame as \"block1block2\" where the streaming path inserts a paragraph break.",
          "is_bot": false,
          "headline": "fix(claude-cli): usage.output re-opened half the compaction inflation…",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-10T08:31:58Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e251acd9a11eef2e0e35d8f65ad81f81444c789d",
          "body": "…ed with a blank line\n\nDriving the real transport through a two-step turn (think → text → tool_use → think →\ntext) rather than reading it showed two more defects.\n\nTHINKING FUSED. I separated the text blocks and missed the thinking blocks, which have\nthe identical structure: steps 2..N of the binary\n[…]\n not exist is risk without benefit.\n\nAlso pins THE TRAP with a test: no `tool_use` block may reach the returned message's\ncontent, or Pi's `runLoop` would re-execute every tool the binary already ran.",
          "is_bot": false,
          "headline": "fix(claude-cli): thinking blocks fused too, and the continuation open…",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-10T08:31:58Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4ff17370879e8a30db7954cbf439f14b1903c2e2",
          "body": "Two defects, both visible in one screenshot of a `spawn_agent` turn.\n\n1. THE PARENT'S ANSWER RESTARTED FROM THE TOP.\n\nThe `pi` frame handler never guarded on `subagentDepth`, so a CHILD turn's\n`agent_end` ran the parent's teardown while the parent was still streaming:\n\n    isAgentRunning = false;   \n[…]\nd like any other text so the rendered block never trails the\nstring we return. It never stacks blank lines the binary already emitted, never leads\nwith one, and a `thinking` block does not trigger it.",
          "is_bot": false,
          "headline": "fix(tui): a sub-agent's lifecycle was tearing down the parent's turn",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-10T08:31:58Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "324f8c994257d862fb782f385908bbb83f75a590",
          "body": "…d it\n\n`render_video` is gated on `@hyperframes/producer`, which `resolveProducerEntry()`\nlooked for in exactly one place: Brigade's OWN node_modules. An operator who ran\n`npm i -g @spinabot/brigade` cannot install into that directory from their shell.\n\nAnd our own hint told them to try — \"hyperfram\n[…]\ncer` (the doctor line, the tool's\nruntime error, the README) now names `brigade video install` and warns against the\nbare npm install. A tool that tells the model to do the wrong thing will be obeyed.",
          "is_bot": false,
          "headline": "feat(video): install the render engine where Brigade can actually fin…",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-10T08:31:58Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3fd82beb7d031cc18f0e66cca5181925ca6ed6c9",
          "body": "…components--brigade\n\nchore(main): release brigade 1.27.1",
          "is_bot": false,
          "headline": "Merge pull request #81 from spinabot/release-please--branches--main--…",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-10T06:30:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3eada0dd136e0b84bf8137ad7a5bca0bef15cf5e",
          "body": null,
          "is_bot": true,
          "headline": "chore(main): release brigade 1.27.1",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-10T06:29:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "25778a5bfb97a824aebecf6be36effb14422b1b7",
          "body": "A `spawn_agent` ran for 57 seconds and printed nothing between \"sub-agent starting\"\nand \"sub-agent settled\" — the gateway read as wedged while a whole child turn streamed\npast. `consoleStream.pi()` is wired inside `attachTurnSession`, which is only ever\ncalled for a depth-0 gateway turn, so child events reached attached WS clients and\nnever the operator's own terminal.",
          "is_bot": false,
          "headline": "fix(observability): make a sub-agent turn visible in the gateway console",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-10T06:27:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4ef52a78228897903c01688ccae586d3b3693bb6",
          "body": "…sole\n\nBetween `sub-agent starting` and `sub-agent settled` — 57 seconds, a full child turn,\n5,814 characters of reply — the gateway printed nothing but the tool-plane handshake.\nIt read as a wedged process.\n\n`consoleStream.pi()` is wired inside `attachTurnSession`, and that is only ever called\nfor \n[…]\n0, so one sub-agent cannot drown the log.\n\nStill missing, and NOT fixed here: `attachEventLogger(session)` has the same depth-0\nwiring, so a sub-agent turn is absent from the JSONL event log entirely.",
          "is_bot": false,
          "headline": "fix(observability): a sub-agent turn was invisible in the gateway con…",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-10T06:19:46Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "70d6c2a87fb28ee625265e46f66d97f4344c56b7",
          "body": "…components--brigade\n\nchore(main): release brigade 1.27.0",
          "is_bot": false,
          "headline": "Merge pull request #80 from spinabot/release-please--branches--main--…",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-10T06:12:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "29cf431e943c7c0aa155301b006d1e5997179d45",
          "body": null,
          "is_bot": true,
          "headline": "chore(main): release brigade 1.27.0",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-10T06:11:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "15089b79e564f23ddbf27128ad5ad7fe6fb89ad7",
          "body": "…e touching anything\n\nA running gateway now checks the npm registry in the background and, if a newer\nversion is published, says so once on the next state snapshot:\n\n  ↑ Brigade 1.27.0 is available — you're on 1.26.1.\n    Your sessions, memory, skills, agents and config live in ~/.brigade and are\n  \n[…]\ntely not cached — caching it would silence the next six\nhours. A successful one is, so a gateway restarted twenty times in an afternoon asks\nthe registry once.\n\nOpt out with BRIGADE_NO_UPDATE_CHECK=1.",
          "is_bot": false,
          "headline": "feat(update): tell the operator a newer Brigade exists, and ask befor…",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-10T06:08:58Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6f1df70f1ab4d2206d2f93c4cf6d8c7bf738d8c6",
          "body": "Every test passed and the 1.26.0 and 1.26.1 publishes both still failed:\n\n  npm error Cannot find module 'sigstore'\n  npm error - .../npm/node_modules/libnpmpublish/lib/provenance.js\n\nThe cause was our own `npm install -g npm@latest` step. npm overwriting itself inside\nthe runner's tool-cache leaves\n[…]\ny replays the same\nfailing commit. There was no way to publish 1.26.1 without inventing a 1.26.2 that\nchanged nothing. Now an operator can publish the version `main` declares, once the\ncause is fixed.",
          "is_bot": false,
          "headline": "ci(release): stop npm from corrupting itself, and add a re-publish path",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-10T05:48:46Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8047ce80c4df6c8e13efd635a952ab15d7cab2be",
          "body": "…components--brigade\n\nchore(main): release brigade 1.26.1",
          "is_bot": false,
          "headline": "Merge pull request #79 from spinabot/release-please--branches--main--…",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-10T05:44:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "781c329fe6daa901942f867b4defba17d144efdc",
          "body": null,
          "is_bot": true,
          "headline": "chore(main): release brigade 1.26.1",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-10T05:39:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e9c89c2ddf7078a8d1c97b300111beab0a84f17b",
          "body": "The npm publish job for 1.26.0 failed on `transport-dispatch.test.ts`:\n\n  Test \"…a claude-cli model NEVER reaches Pi's base\" generated asynchronous\n  activity after the test ended. This activity created the error \"write EPIPE\"\n\nThe test invoked the REAL transport to prove Pi's base streamFn is out o\n[…]\nnstead, which\nalso strengthens the assertion: we now prove the transport is invoked with the args\nforwarded positionally, not merely that `base` was skipped.\n\nA test may not leave a subprocess behind.",
          "is_bot": false,
          "headline": "fix(test): stop the dispatch test from spawning a real `claude` child",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-10T05:38:43Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "cb712362ca4f782ca6b7101f00efdcb9c83a4cf0",
          "body": "…was healthy for\n\nA `claude-cli` turn streamed text, went quiet for exactly 90,006 ms, then died with\n`stopReason=error, in=0 out=0`. Pi auto-retried, the binary respawned, and the model\nstarted the whole task over — twice. On screen: \"Building the proof vault now.\"\nfollowed by nothing, forever.\n\n`D\n[…]\ny console dropped it. A turn being killed and re-run from the top\nrendered as a bare \"↻ retrying\", indistinguishable from a slow model. It now reads\n`↻ retrying (attempt 1/3, waiting 2s)… · <reason>`.",
          "is_bot": false,
          "headline": "fix(harness): the parent's idle watchdog was killing turns the child …",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-10T05:34:55Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8819a14ca430cc40ab109fa169843a90e9877800",
          "body": "…components--brigade\n\nchore(main): release brigade 1.26.0",
          "is_bot": false,
          "headline": "Merge pull request #78 from spinabot/release-please--branches--main--…",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-10T05:27:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a146ce3fa138db0c3b16e3c46955d64052d59866",
          "body": null,
          "is_bot": true,
          "headline": "chore(main): release brigade 1.26.0",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-10T05:22:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "142be5f2367cd3d4ae22f0bc152ca1cb55add58f",
          "body": "Runs the installed `claude` binary as Brigade's engine on an existing subscription,\ndenies that binary's own filesystem/shell/network/sub-agent tools, and serves it\nBrigade's entire guarded surface over a per-turn loopback MCP endpoint. Every call\nruns the same tool objects and the same guard chain \n[…]\nnd a containment deny-list naming a legacy alias of the\nbinary's sub-agent tool. Plus a usage-units bug that made Pi compact a 39%-full\nsession on every single turn, destroying real history each time.",
          "is_bot": false,
          "headline": "feat: claude-cli harness backend with Brigade's guarded tool-plane",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-10T05:20:52Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4e606e3208e9d1e74bf57f8bad35d30fe2737b6f",
          "body": "Also scrubs three comments that named an external agent project — pre-existing on\nmain, and this repo is about to be published.",
          "is_bot": false,
          "headline": "docs(readme): document the claude-cli harness and its guarded tool-plane",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-10T05:20:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3913f10ef82004c2fa66fdc69c5da4255e73dbf0",
          "body": "…ling total\n\nPi reads an assistant message's `usage` as \"how many tokens are in the context\nwindow right now\" — `calculateContextTokens` is `input + output + cacheRead +\ncacheWrite` — and compacts when that crosses its threshold.\n\nWe were handing it the wrong number, from two places. The binary runs\n[…]\nlling totals lose the binary's internal steps. That is the right trade: this is a\nsubscription backend billed at $0, and a context figure that triggers destructive\ncompaction is not a cosmetic defect.",
          "is_bot": false,
          "headline": "fix(claude-cli): report the turn's context size, not the binary's bil…",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-10T05:03:18Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "657b4a7a98dc29688810f9ac07d61a29a208761a",
          "body": "…t one\n\nA turn that compacted at 889% printed \"compacted · usage now 889%\", and the header\nkept showing the same percentage afterwards. Compaction had worked; the number was\na lie, told twice.\n\nTwo causes, pointing the same way:\n\n  server.ts  `if (usage?.percent != null) lastContextUsagePercent = us\n[…]\nader figure dropped at the same moment.\n\nA stale number is worse than no number — it reads as a failed compaction to anyone\nwho doesn't know the internals, which on an open-source project is everyone.",
          "is_bot": false,
          "headline": "fix(ctx): stop reporting the pre-compaction context figure as the pos…",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-10T04:57:47Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8b297e76ac440471f8ef79a9292c40936b2e877f",
          "body": "The gate emitted nothing on its allow paths. A command that ran unasked was\ntherefore indistinguishable, from both the log and the screen, between three very\ndifferent causes: it was allowlisted, `/allow-all` was armed, or the gate never\nfired at all. Only the last is a bug — and diagnosing which on\n[…]\nen, the log still shows the gate fired.\n\nOnly the truncated single-line preview is logged, the same string the refusal\nmessages already hand to the model. Blocks were already covered by `emitBlocked`.",
          "is_bot": false,
          "headline": "feat(exec-gate): say why a shell command was allowed",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-10T04:49:08Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "be3480486c146f1f0d53410d6e9ff6f36d9bb584",
          "body": "… chip\n\n`asstKey` identity-keys a streaming assistant block by `<depth>:<timestamp>`, and\nconnect.ts assumed in a comment that \"the post-tool continuation is a NEW message\nwith a NEW timestamp, so it naturally opens a fresh block BELOW this tool\".\n\nThat holds for a loop backend — Pi really does star\n[…]\nh unchanged text — dismissing on those is\nwhat blanked the screen).\n\nBoth new paths are gated on an OPEN continuation, a state only a harness turn can\nreach, so loop backends render exactly as before.",
          "is_bot": false,
          "headline": "fix(tui): a harness turn's post-tool text rendered above its own tool…",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-10T04:36:24Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c039c5fdad96d77e509400ec6af6a935cfde0c4b",
          "body": "…e audit disproved\n\nTen adversarial reviews of the tool-plane found three HIGH defects, two of them\ncreated by my own later commits and hidden by tests written from the same wrong\nassumptions.\n\nBOUNDS\n- The registry TTL could evict a LIVE turn's token. The watchdog pause slides the\n  child's hard ce\n[…]\n the guarded write helper; `installTurn` captures\nits disposer before anything else can throw; the conformance floor is >=25 native\ntools, not >15, which would have let a silent drop to 16 pass green.",
          "is_bot": false,
          "headline": "fix(claude-cli,mcp): correct the bounds, containment and Pi-parity th…",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-10T04:17:01Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5810a8acbaf90ec4ba26bf42122ebfb5c1e076b9",
          "body": "…eady ran\n\nA harness backend records its tool calls to the JSONL as it goes, but they reach\n`session.messages` — the array a re-prompt serializes — only when the turn is\ndrained. Any re-prompt before that drain hands the binary a request with no\nevidence it ever acted, so it acts again.\n\n`runWithRet\n[…]\nts prose instead of repeating the work behind it.\n\nNo-op for every loop backend: `afterTurn` is the frozen NOOP handle's, and\n`beforeRetry` is undefined. Pi's loop already persists its own tool calls.",
          "is_bot": false,
          "headline": "fix(harness): an in-turn retry must not re-run the tools the turn alr…",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-10T04:16:29Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c4d365861fb096d51eaf9cf43efdc30fb3e3c8e1",
          "body": "…a glance\n\nA full-plane spawn now denies every built-in the binary ships, so if the MCP\nconfig were ever rejected the agent would have NO tools at all — which on screen\nis indistinguishable from an agent that simply won't use them. The `initialize`\nrequest is the one unambiguous proof that the binary loaded our server, so log\nit once per turn with the number of tools served. Never the token.",
          "is_bot": false,
          "headline": "feat(mcp): log the tool-plane handshake so attachment is provable at …",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-10T03:27:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4e6011f2f903ff9917be42ce03fdfb447b559e69",
          "body": "…CP conformance\n\nTwo things stood between \"the plane exists\" and \"every tool actually works\".\n\nCONTAINMENT. The full plane denied only the binary's MUTATING built-ins. Its\nread side — Read, Grep, Glob — still worked, and those act on the THROWAWAY cwd\nwe spawn it in, not the operator's workspace. As\n[…]\nSON-round-trips to a valid object schema with every `required` key present\nin `properties`, no duplicate or builtin-shadowing names, and a `tools/list`\nresponse that survives the wire encoding intact.",
          "is_bot": false,
          "headline": "fix(claude-cli): contain the binary to Brigade's guarded tools; pin M…",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-10T03:25:57Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4326b56fd57c58848f6de430806236a4fba490a3",
          "body": "A harness backend watches its child for signs of life: no stdout for\n`noOutputTimeoutMs` and it is presumed wedged and SIGKILL'd. That is right while\nthe binary is thinking. It is wrong while the binary is BLOCKED ON US.\n\nWhen the child calls a Brigade tool over the MCP route it writes nothing to\nst\n[…]\ne else: an unknown token (the memory-only\nstdio plane, a cold path, a child that already exited) yields a no-op, and a\ngenuinely silent child is still reaped — a test drives real timers to prove both.",
          "is_bot": false,
          "headline": "fix(harness): don't kill a child that is waiting on Brigade",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-10T03:16:44Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "efd804854750d5a55b707ca229c7521622d9cd2e",
          "body": "…re-prompt\n\nBrigade has two kinds of backend. LOOP backends (anthropic, openai, ollama) are\nmodel endpoints: Pi's loop runs in-process, dispatches tools, emits tool events,\nwrites toolCall/toolResult messages. HARNESS backends (claude-cli) are an\nexternal agent BINARY that runs its own loop and call\n[…]\nve context silently lost it for the\n    rest of the process — the model would forget, mid-conversation, that it had\n    just written a file. It now warns and proceeds; by contract we are past the run.",
          "is_bot": false,
          "headline": "feat(harness): first-class harness backends; fix double-execution on …",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-10T02:58:12Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "af8f50c2de9bd8eea3447a53ce3900ed62557b4e",
          "body": "… did\n\nA \"harness\" backend is one where an external binary runs the agent loop and\nBrigade's tools are called back in (today: claude-cli). Pi's loop never\ndispatches a tool there, so it wrote no toolCall/toolResult messages, and the\nsession transcript held only the model's prose. Everything reading \n[…]\ntor switches this session to an API provider.\n\nBest-effort throughout: a transcript write can never fail a tool call, and a\nsession without a sessionManager (the cold `brigade agent` path) is a no-op.",
          "is_bot": false,
          "headline": "feat(agents): harness-transcript layer — record what an external loop…",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-10T02:29:39Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3f92e7de2dee3240c41446a2b68d9e159851e1da",
          "body": "Pi's contract hands `beforeToolCall` the abort signal and documents that the\nhook \"is responsible for honoring it\". Both callers already forwarded it —\nsession-wiring and the MCP route — and `makeExecGate`'s returned hook silently\ndropped it, never declaring the parameter. So an approval prompt outl\n[…]\nt a policy refusal.\n\nBehaviour preserved and covered: 5-minute deny-on-timeout (distinct message),\nno-bridge static refusal, allow/deny persistence, tool-blocked bus events, and\nchannelRoute delivery.",
          "is_bot": false,
          "headline": "fix(approvals): cancel a pending approval when its turn is aborted",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-10T02:18:53Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1a2d2dffcc8b5877ef57ab67726676de97026460",
          "body": "On an API provider, Pi's loop runs the tool and emits tool_execution_start /\n_end; the gateway forwards them and connect.ts paints a ⚡→✓ chip. On\nclaude-cli the binary runs the loop and calls Brigade's tools back over the\nMCP route, so Pi dispatches no tool and emits nothing. The operator saw\nassist\n[…]\nand thrash resume. Same rule\n    the sub-agent frames already follow.\n\nDegrades cleanly: with no runId (the cold `brigade agent` path, which has no\ngateway) nothing is emitted and the tool still runs.",
          "is_bot": false,
          "headline": "feat(claude-cli): live tool activity in the TUI",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-10T02:14:15Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "91cbc3b3def867a8421424490d1bba0bf4329b31",
          "body": "…ages)\n\nRead pi-agent-core's agent-loop.js to see what its own dispatch does around\n`tool.execute`. Its pipeline is:\n\n    prepareToolCallArguments -> validateToolArguments -> beforeToolCall(args)\n      -> abort check -> execute(id, args, signal, onUpdate) -> afterToolCall\n\nOurs was guard(raw args) -\n[…]\n\nexecution.\n\nVerified against Pi's source, not assumed: `withFileMutationQueue` is applied\ninside edit/write themselves, so constructing the builtins via their factories\npreserves write serialization.",
          "is_bot": false,
          "headline": "fix(mcp): mirror Pi's tool-call pipeline exactly (validate, abort, im…",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-10T01:57:05Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "849e2f1772b305e9421c16e674fa11caefeccddf",
          "body": "…ystem\n\n`assembleBrigadeToolset` splits its output: native tools come back as objects\nwith an `execute`, but read/write/edit/bash/grep/ls come back only as NAMES —\nPi's own loop constructs them from those names. That loop never runs on\nclaude-cli, and the binary's own equivalents are denied (they wo\n[…]\ne system prompt now tells the truth: it names the filesystem and\nshell it actually has, and warns that a bash call may pause for the operator's\napproval so the model waits instead of assuming failure.",
          "is_bot": false,
          "headline": "feat(mcp): serve Brigade's guarded builtins so claude-cli has a files…",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-10T01:48:41Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e83fbf7a891a0dd31a87b606fd513bc2adc62d09",
          "body": "…e tools\n\nThe gateway-hosted plane served all 31 Brigade tools over MCP and then\nappended the MEMORY-ONLY suffix, which says verbatim: \"Do not use any other\ntools or act on the local filesystem; respond directly in prose.\" The model\nobeyed. In a live session it answered every request by describing w\n[…]\ne its tools\", which\nis exactly how this bug presented.\n\nTests pin the regression: the full-plane suffix must never forbid tools or\nnudge to prose, and precedence is structured > fullPlane > toolPlane.",
          "is_bot": false,
          "headline": "fix(claude-cli): stop the full tool-plane telling the model not to us…",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-10T01:42:47Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2fdca27d0c02570d6ef82cbd097e598783f76673",
          "body": "Two independent audits converged on the same critical defect. The gateway\ndispatcher races every route handler against `route.timeoutMs ?? 30_000` and,\non expiry, writes a 408 — but `Promise.race` does NOT cancel the loser. The\n/mcp route set no timeoutMs, so it inherited 30s while the tools behind \n[…]\nIt grants no incremental\ncapability (the expose bearer already carries operator rights, and the\nper-turn 256-bit token is still required), but the code should not claim a\nguarantee it doesn't provide.",
          "is_bot": false,
          "headline": "fix(mcp): stop the 30s dispatcher timeout guillotining in-flight tools",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-10T01:37:34Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "59c1e4555274645ddbde211e14dc805e5ed392fb",
          "body": "Four issues no unit test would have caught, found by reading the whole\nsurface end to end.\n\n1. Token leak. `registry.register()` sat OUTSIDE the try whose `finally`\n   disposes the token, so any throw between the two stranded the entry in the\n   process-global registry for the gateway's lifetime — r\n[…]\ne agent\n   \"didn't use its tools\" had nothing to look at. It now logs each tool call\n   (name, agent, session, duration, block/error), never the arguments or the\n   token, both of which are sensitive.",
          "is_bot": false,
          "headline": "fix(mcp): harden the tool-plane for long-lived gateways",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-10T01:33:31Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2d1ca89ac2a4b4e6c3a1965393bc59b4fa72ea50",
          "body": "Reconciled the working tree against stash@{0} (the pre-rebuild snapshot of\nthis work) and found four test cases that the reconstruction had dropped:\n\n  - composeClaudeCliSystemPrompt: the toolPlane suffix advertises the memory\n    MCP tools, still forbids everything else, and STRUCTURED still wins o\n[…]\nute states its any-method intent.\n\nNo behaviour change. Coverage is now a superset of the snapshot: the\nfrozen-context stamp test here is strictly stronger than the snapshot's\nnon-object-only version.",
          "is_bot": false,
          "headline": "test(claude-cli): restore tool-plane coverage lost in reconstruction",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-10T01:22:22Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "15e81021846bb8b1e47604f6ba970125711a3599",
          "body": "Expose Brigade's FULL tool surface to the claude-cli binary without weakening\na single guard, so the free subscription engine gets the whole crew — memory\ngraph, spawn, channels, cron — not just the three memory tools.\n\nThe binary drives its own loop and reaches external tools only over MCP, so\nBrig\n[…]\natches the memory plane: claude-cli + OWNER + non-distiller, and the\nhost is null outside the gateway (cold `brigade agent`), where it falls back\nto the memory-only stdio server. Fail-open throughout.",
          "is_bot": false,
          "headline": "feat(mcp): gateway-hosted guarded tool-plane for the claude-cli harness",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-10T01:11:35Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "56701906b4f2cfd022be77746ee3f1f1ffaf2a59",
          "body": "The `claude` binary runs its own agent loop, so Brigade's tools cannot be\npassed inline the way a raw model API (anthropic/openai/ollama) accepts them\n— the binary's only mechanism for external tools is MCP. Consequently no\nBrigade tool was callable on this backend: the agent read tool descriptions\n\n[…]\ne.\n\nFail-open throughout: an unsafe agent id, missing CLI entry path, frozen\ncontext, or config write failure yields no MCP config and the turn proceeds\nexactly as before. The tool-plane can only ADD.",
          "is_bot": false,
          "headline": "feat(claude-cli): memory MCP tool-plane on the harness backend",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-10T01:11:11Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4999a76611aa2ef480ca00719b0072509281a39e",
          "body": "`checkMemory` reports \"ok\" on an empty corpus because a fresh install has no\nfacts yet — correct, but it means a silently-failing extractor looks healthy\nforever. Add an ADDITIVE check (existing one untouched): warn only when\nsessions exist on disk AND zero facts were distilled AND the extraction\ncu\n[…]\nan but found nothing durable both stay \"ok\", so a first\nboot or CI never trips --strict.\n\nReads the cursor's `cursors` map specifically — the file's top-level\n`version: 1` must not read as \"advanced\".",
          "is_bot": false,
          "headline": "feat(doctor): warn when the memory moat is dark",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-10T01:10:44Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "41ee88fd2f9e3bfb185f928171878632e2156fd4",
          "body": "Every memory/skill utility prompt (extraction, consolidation, relationship\nrelink, behaviour + skill review) demands a STRICT JSON envelope. The\nclaude-cli backend unconditionally appended a conversational nudge —\n\"respond directly in prose; do not use tools\" — which contradicts them, so\nthe model a\n[…]\nuctured=false every branch is byte-identical to before.\n\nA test asserts the real EXTRACTION_PROMPT / CONSOLIDATION_PROMPT still trip\nthe detector, so a future reword can't silently regress extraction.",
          "is_bot": false,
          "headline": "fix(claude-cli): reinforce JSON for structured distiller turns",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-10T01:10:44Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "08046a4c2070234d6af02c9afebde8a446b502ff",
          "body": "…-ai copies\n\nA published/global install nests a second @earendil-works/pi-ai under\npi-coding-agent (which also carries its own pi-agent-core). Brigade imports\ncreateAgentSession from pi-coding-agent, so the Agent's default streamSimple\nresolves the NESTED pi-ai's api-provider registry — while regist\n[…]\n/\nstop-reason / tool-call-repair wrappers still apply.\n\nIsolated distiller sessions (makeIsolatedLlm) build their own Pi agent and\nmissed the agent-loop wrap, so they get installTransportDispatch too.",
          "is_bot": false,
          "headline": "fix(agents): dispatch own transports directly, immune to duplicate pi…",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-09T17:05:47Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d992f65cd5b6578e6d4ae6bab7fde358dc4ac16f",
          "body": "…components--brigade\n\nchore(main): release brigade 1.25.3",
          "is_bot": false,
          "headline": "Merge pull request #77 from spinabot/release-please--branches--main--…",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-07T05:14:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b261f54689591c45c5104e3d5affd11b0fae06af",
          "body": null,
          "is_bot": true,
          "headline": "chore(main): release brigade 1.25.3",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-07T05:05:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b595a42fda33bde8c15b18b3404bcc40b3fa3e4b",
          "body": "…PATH shadowing\n\nbrigade doctor now checks the installation itself, not just the config:\na Brigade installed without -g (npm drops it into some project folder's\nnode_modules where no shell resolves it) fails with the exact fix command,\nand multiple brigade copies on PATH (nvm vs system npm, an old m\n[…]\nnother) warn with\nevery location listed. Binaries are deduped by directory so Windows'\nmulti-shim installs (brigade / .cmd / .ps1) don't false-positive. Source\ncheckouts report their root and version.",
          "is_bot": false,
          "headline": "fix(doctor): diagnose broken installations — local no-g installs and …",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-07T05:04:53Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "265e64f967556f2946ebd75091aa435654820774",
          "body": "…components--brigade\n\nchore(main): release brigade 1.25.2",
          "is_bot": false,
          "headline": "Merge pull request #76 from spinabot/release-please--branches--main--…",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-07T04:58:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "59d7d2e2b5629f4e0ad29f4fb78bf0f74e2b719b",
          "body": null,
          "is_bot": true,
          "headline": "chore(main): release brigade 1.25.2",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-07T04:56:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "82234401b246b792d127dd48679ef2279cc62ac0",
          "body": "Source checkouts now wipe dist before building — tsc never deletes output\nfor renamed or removed source files, so stale compiled modules survived\nevery update. And after an npm-global upgrade the command now asks the\n`brigade` on the user's PATH for its version: installing into one Node\ninstallation\n[…]\nle the shell resolves another (nvm vs system npm) is the\nclassic way a machine keeps launching a stale Brigade while every update\nclaims success. A mismatch lists every copy on PATH and how to fix it.",
          "is_bot": false,
          "headline": "fix(update): clean-rebuild dist and verify the PATH binary after upgrade",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-07T04:55:57Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ab1ef9c2a7e29a696fc814338ec90eb3664f726f",
          "body": "While the clip plays, the terminal is asked to report window focus (mode\n1004); a blurred or minimized window now pauses the animation completely —\nzero writes while hidden, so nothing flickers on restore, no wasted work,\nand scrollback isn't yanked while the user works elsewhere. Focus events\nare s\n[…]\nss through\nuntouched), terminals without focus reporting behave exactly as before,\nthe mode is disabled the moment the clip retires, and restoreTerminal()\nalready force-disables it on every exit path.",
          "is_bot": false,
          "headline": "fix(tui): pause the intro clip while the terminal window is unfocused",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-07T04:55:57Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3c3a7e0c150896ac9c351406c4b52d92df57b66e",
          "body": "…adder\n\nThree-reviewer adversarial audit of the responsive-header change; every\nconfirmed finding fixed and pinned by tests:\n\n- Animation now requires the REAL composed block + 16 rows of content\n  headroom (animationFitsViewport, re-checked mid-clip on resize) — the\n  wordmark lockup had grown the \n[…]\nout —\n  is handed back to stdin instead of being eaten\n- brigade auth / login now run the capability probe before their TUIs, so\n  their spinners obey the terminal's real answer instead of env guesses",
          "is_bot": false,
          "headline": "fix(tui): close the audit findings on the animation gate and header l…",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-07T04:46:46Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e74428381584e700454a45d4f23c1174ec27a88c",
          "body": "…components--brigade\n\nchore(main): release brigade 1.25.1",
          "is_bot": false,
          "headline": "Merge pull request #75 from spinabot/release-please--branches--main--…",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-07T04:23:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0946b8592b719ed0747f352dd9338ad94d4306a6",
          "body": null,
          "is_bot": true,
          "headline": "chore(main): release brigade 1.25.1",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-07T04:22:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8429202e54705e050b52d88dcf24979052a8c1b1",
          "body": "…d repaint shake\n\nThe intro clip previously looped forever at 25fps and pre-rendered all 248\nframes at module import (~416k styler calls before first paint), and the\nlayout ignored terminal height — on small windows the header overflowed the\nviewport, degenerating every animation frame into a full c\n[…]\ntorage-mode\n- Backpressure: drop a frame while the previous one is still queued in the\n  stream; if the backlog passes 4x the write high-water mark, jump to the\n  hold pose and stop animating entirely",
          "is_bot": false,
          "headline": "fix(tui): responsive terminal-aware brand header — end launch hang an…",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-07T04:21:54Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e18dda9701a5c70e9f19eaa52d44888c38d85c18",
          "body": "…components--brigade\n\nchore(main): release brigade 1.25.0",
          "is_bot": false,
          "headline": "Merge pull request #74 from spinabot/release-please--branches--main--…",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-05T21:29:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a84a21e3af6bd6c665f8660df4e16ac0e1681b5e",
          "body": null,
          "is_bot": true,
          "headline": "chore(main): release brigade 1.25.0",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-05T21:25:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5dcda683f1832bb087bf73214d1cb5d77495cd43",
          "body": "…ument render_video\n\nAdding the engine to package.json optionalDependencies desynced\npackage-lock.json (npm ci failed) and would pull puppeteer + Chromium\ninto every CI run / default install. Keep it truly optional — the tool\nresolves @hyperframes/producer if present (require.resolve +\nBRIGADE_HYPERFRAMES_PATH) and stays dormant otherwise — so the lockfile\nstays in sync and lean installs are unaffected. Also document\nrender_video in the README.",
          "is_bot": false,
          "headline": "fix(render-video): keep @hyperframes/producer resolve-if-present; doc…",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-05T21:24:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "70cbd6e6276f871f1a006dfd66502dd61c736aaa",
          "body": "Programmatic, data-driven video (animated charts, explainers, text\ncards, motion graphics) — the deterministic counterpart to\ngenerate_video. Renders a self-contained GSAP composition through the\n@hyperframes/producer pipeline in an isolated Node worker (headless\nChrome + FFmpeg), with no-output/ove\n[…]\norrects mis-sized media-tool timeout budgets that could drop\n  billed jobs mid-flight (generate_video / -music / -speech).\n\nStill requires live validation against a real @hyperframes/producer install.",
          "is_bot": false,
          "headline": "feat(tools): add render_video — HTML→MP4 via @hyperframes/producer",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-05T21:17:54Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d4009868d20aa3dd28e01ba219f468d8991e70df",
          "body": "…components--brigade\n\nchore(main): release brigade 1.24.2",
          "is_bot": false,
          "headline": "Merge pull request #71 from spinabot/release-please--branches--main--…",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-05T05:50:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "38f1bf05afebdd053686bb5355e4fe925ab88e96",
          "body": null,
          "is_bot": true,
          "headline": "chore(main): release brigade 1.24.2",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-05T05:29:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ee86fab3fc4865d00033151f70ddb59c93902944",
          "body": "…ENAMETOOLONG)\n\nBrigade's assembled system prompt (persona + skills + tools + memory) is tens\nof KB, and passing it as `--append-system-prompt <text>` on argv blew the OS\ncommand-line length limit — every real turn failed with `spawn ENAMETOOLONG` on\nWindows. Write it to a temp file inside the isola\n[…]\n (same architecture, vendor-\nsupported flag). argv stays tiny + constant; the user prompt is still on stdin.\nVerified live: a full-config turn with the real system prompt now replies\ncleanly (cost 0).",
          "is_bot": false,
          "headline": "fix(claude-cli): deliver the system prompt via file, not argv (spawn …",
          "author_name": "Vajrapu Venkata Bhasvanth Dev",
          "author_login": "Bhasvanth-Dev9380",
          "committed_at": "2026-07-05T05:19:21Z",
          "body_truncated": true,
          "is_coding_agent": false
        }
      ],
      "releases_count": 56,
      "commits_last_year": 500,
      "latest_release_at": "2026-07-19T23:14:00Z",
      "latest_release_tag": "brigade-v1.29.4",
      "releases_from_tags": false,
      "days_since_last_push": 5,
      "active_weeks_last_year": 12,
      "days_since_latest_release": 5,
      "mean_days_between_releases": 1.1
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": true,
      "health_percentage": 75,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": true
    },
    "ecosystem": {
      "packages": [
        {
          "name": "@spinabot/brigade",
          "exists": true,
          "license": "MIT",
          "keywords": [
            "ai",
            "agent",
            "agents",
            "ai-agent",
            "cli",
            "tui",
            "llm",
            "claude",
            "openai",
            "gemini",
            "ollama",
            "whatsapp",
            "gateway",
            "brigade"
          ],
          "ecosystem": "npm",
          "matches_repo": true,
          "registry_url": "https://www.npmjs.com/package/@spinabot/brigade",
          "is_deprecated": false,
          "latest_version": "1.29.4",
          "repository_url": "https://github.com/spinabot/brigade",
          "versions_count": 58,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 2,
          "monthly_downloads": 9677,
          "first_published_at": "2026-05-02T04:28:21.330000Z",
          "latest_published_at": "2026-07-19T23:16:00.489000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 5
        }
      ]
    },
    "popularity": {
      "forks": 19,
      "stars": 239,
      "watchers": 2,
      "fork_history": {
        "days": [
          {
            "date": "2026-06-21",
            "count": 2
          },
          {
            "date": "2026-06-23",
            "count": 2
          },
          {
            "date": "2026-06-26",
            "count": 1
          },
          {
            "date": "2026-06-29",
            "count": 1
          },
          {
            "date": "2026-07-03",
            "count": 1
          },
          {
            "date": "2026-07-04",
            "count": 1
          },
          {
            "date": "2026-07-09",
            "count": 3
          },
          {
            "date": "2026-07-10",
            "count": 2
          },
          {
            "date": "2026-07-11",
            "count": 1
          },
          {
            "date": "2026-07-15",
            "count": 1
          },
          {
            "date": "2026-07-22",
            "count": 3
          },
          {
            "date": "2026-07-25",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 19,
        "total_forks": 19
      },
      "star_history": null,
      "open_issues_and_prs": 12
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": true,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [
        "convex/tsconfig.json",
        "tsconfig.json"
      ],
      "toolchain_manifests": [],
      "largest_source_bytes": 2475157,
      "source_files_sampled": 1204,
      "oversized_source_files": 17,
      "agent_instruction_files": [
        "AGENTS.md",
        "templates/workspace/AGENTS.md"
      ],
      "agent_instruction_max_bytes": 13148
    },
    "dependencies": {
      "manifests": [
        "package.json"
      ],
      "advisories": {
        "error": null,
        "scope": "published_package",
        "source": "osv",
        "findings": [
          {
            "name": "brace-expansion",
            "direct": false,
            "version": "1.1.16",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-mh99-v99m-4gvg"
            ],
            "fixed_version": "5.0.8",
            "advisory_count": 1,
            "oldest_advisory_days": 1
          },
          {
            "name": "brace-expansion",
            "direct": false,
            "version": "2.1.2",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-mh99-v99m-4gvg"
            ],
            "fixed_version": "5.0.8",
            "advisory_count": 1,
            "oldest_advisory_days": 1
          },
          {
            "name": "uuid",
            "direct": false,
            "version": "8.3.2",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-w5hq-g745-h8pq"
            ],
            "fixed_version": "13.0.1",
            "advisory_count": 1,
            "oldest_advisory_days": 94
          }
        ],
        "collected": true,
        "malicious": [],
        "truncated": false,
        "by_severity": {
          "high": 3
        },
        "advisory_count": 3,
        "affected_count": 3,
        "assessed_count": 535,
        "malicious_count": 0,
        "assessed_package": "npm:@spinabot/brigade@1.29.4",
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "npm"
      ],
      "dependencies": [
        {
          "name": "@cantoo/pdf-lib",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.7.1"
        },
        {
          "name": "@composio/core",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.10.0"
        },
        {
          "name": "@earendil-works/pi-agent-core",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "0.79.9"
        },
        {
          "name": "@earendil-works/pi-ai",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "0.79.9"
        },
        {
          "name": "@earendil-works/pi-coding-agent",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "0.79.9"
        },
        {
          "name": "@earendil-works/pi-tui",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "0.79.9"
        },
        {
          "name": "@grammyjs/runner",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.0.3"
        },
        {
          "name": "@grammyjs/transformer-throttler",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.2.1"
        },
        {
          "name": "@grammyjs/types",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^3.21.0"
        },
        {
          "name": "@mozilla/readability",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.6.0"
        },
        {
          "name": "@pdf-lib/fontkit",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.1.1"
        },
        {
          "name": "@slack/socket-mode",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.0.7"
        },
        {
          "name": "@slack/web-api",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^7.17.0"
        },
        {
          "name": "@whiskeysockets/baileys",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "7.0.0-rc13"
        },
        {
          "name": "cfonts",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^3.3.1"
        },
        {
          "name": "chalk",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^5.3.0"
        },
        {
          "name": "cli-highlight",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.1.11"
        },
        {
          "name": "commander",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^12.1.0"
        },
        {
          "name": "convex",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.40.0"
        },
        {
          "name": "croner",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^10.0.1"
        },
        {
          "name": "discord.js",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^14.26.4"
        },
        {
          "name": "docx",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^9.7.1"
        },
        {
          "name": "exceljs",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^4.4.0"
        },
        {
          "name": "fflate",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.8.3"
        },
        {
          "name": "grammy",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.42.0"
        },
        {
          "name": "https-proxy-agent",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^7.0.6"
        },
        {
          "name": "jimp",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.6.1"
        },
        {
          "name": "jiti",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.6.1"
        },
        {
          "name": "json5",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.2.3"
        },
        {
          "name": "linkedom",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.18.12"
        },
        {
          "name": "minimatch",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^10.2.5"
        },
        {
          "name": "playwright-core",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.59.0"
        },
        {
          "name": "pptxgenjs",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^4.0.1"
        },
        {
          "name": "prompts",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.4.2"
        },
        {
          "name": "proper-lockfile",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^4.1.2"
        },
        {
          "name": "qrcode-terminal",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.12.0"
        },
        {
          "name": "socks-proxy-agent",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^10.1.0"
        },
        {
          "name": "tar",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^7.5.15"
        },
        {
          "name": "undici",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^7.25.0"
        },
        {
          "name": "unpdf",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.6.2"
        },
        {
          "name": "ws",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^8.21.0"
        },
        {
          "name": "@anthropic-ai/claude-code",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.1.0"
        },
        {
          "name": "yaml",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.9.0"
        },
        {
          "name": "zod",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^3.23.8"
        }
      ],
      "all_dependencies": {
        "error": null,
        "source": "github-sbom",
        "packages": [
          {
            "name": "@anthropic-ai/claude-code",
            "direct": true,
            "version": "2.1.201",
            "ecosystem": "npm"
          },
          {
            "name": "@cantoo/pdf-lib",
            "direct": true,
            "version": "2.7.1",
            "ecosystem": "npm"
          },
          {
            "name": "@composio/core",
            "direct": true,
            "version": "0.10.0",
            "ecosystem": "npm"
          },
          {
            "name": "@earendil-works/pi-agent-core",
            "direct": true,
            "version": "0.79.9",
            "ecosystem": "npm"
          },
          {
            "name": "@earendil-works/pi-ai",
            "direct": true,
            "version": "0.79.9",
            "ecosystem": "npm"
          },
          {
            "name": "@earendil-works/pi-coding-agent",
            "direct": true,
            "version": "0.79.9",
            "ecosystem": "npm"
          },
          {
            "name": "@earendil-works/pi-tui",
            "direct": true,
            "version": "0.79.9",
            "ecosystem": "npm"
          },
          {
            "name": "@grammyjs/runner",
            "direct": true,
            "version": "2.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "@grammyjs/transformer-throttler",
            "direct": true,
            "version": "1.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "@grammyjs/types",
            "direct": true,
            "version": "3.28.0",
            "ecosystem": "npm"
          },
          {
            "name": "@mozilla/readability",
            "direct": true,
            "version": "0.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "@pdf-lib/fontkit",
            "direct": true,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "@slack/socket-mode",
            "direct": true,
            "version": "2.0.7",
            "ecosystem": "npm"
          },
          {
            "name": "@slack/web-api",
            "direct": true,
            "version": "7.17.0",
            "ecosystem": "npm"
          },
          {
            "name": "@whiskeysockets/baileys",
            "direct": true,
            "version": "7.0.0-rc13",
            "ecosystem": "npm"
          },
          {
            "name": "cfonts",
            "direct": true,
            "version": "3.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "chalk",
            "direct": true,
            "version": "4.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "chalk",
            "direct": true,
            "version": "5.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "cli-highlight",
            "direct": true,
            "version": "2.1.11",
            "ecosystem": "npm"
          },
          {
            "name": "commander",
            "direct": true,
            "version": "12.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "convex",
            "direct": true,
            "version": "1.41.0",
            "ecosystem": "npm"
          },
          {
            "name": "croner",
            "direct": true,
            "version": "10.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "discord.js",
            "direct": true,
            "version": "14.26.4",
            "ecosystem": "npm"
          },
          {
            "name": "docx",
            "direct": true,
            "version": "9.7.1",
            "ecosystem": "npm"
          },
          {
            "name": "exceljs",
            "direct": true,
            "version": "4.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "fflate",
            "direct": true,
            "version": "0.8.3",
            "ecosystem": "npm"
          },
          {
            "name": "grammy",
            "direct": true,
            "version": "1.44.0",
            "ecosystem": "npm"
          },
          {
            "name": "https-proxy-agent",
            "direct": true,
            "version": "5.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "https-proxy-agent",
            "direct": true,
            "version": "7.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "jimp",
            "direct": true,
            "version": "1.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "jiti",
            "direct": true,
            "version": "2.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "json5",
            "direct": true,
            "version": "2.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "linkedom",
            "direct": true,
            "version": "0.18.12",
            "ecosystem": "npm"
          },
          {
            "name": "minimatch",
            "direct": true,
            "version": "10.2.5",
            "ecosystem": "npm"
          },
          {
            "name": "minimatch",
            "direct": true,
            "version": "3.1.5",
            "ecosystem": "npm"
          },
          {
            "name": "minimatch",
            "direct": true,
            "version": "5.1.9",
            "ecosystem": "npm"
          },
          {
            "name": "playwright-core",
            "direct": true,
            "version": "1.60.0",
            "ecosystem": "npm"
          },
          {
            "name": "pptxgenjs",
            "direct": true,
            "version": "4.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "prompts",
            "direct": true,
            "version": "2.4.2",
            "ecosystem": "npm"
          },
          {
            "name": "proper-lockfile",
            "direct": true,
            "version": "4.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "qrcode-terminal",
            "direct": true,
            "version": "0.12.0",
            "ecosystem": "npm"
          },
          {
            "name": "socks-proxy-agent",
            "direct": true,
            "version": "10.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "tar",
            "direct": true,
            "version": "7.5.16",
            "ecosystem": "npm"
          },
          {
            "name": "undici",
            "direct": true,
            "version": "6.27.0",
            "ecosystem": "npm"
          },
          {
            "name": "undici",
            "direct": true,
            "version": "7.28.0",
            "ecosystem": "npm"
          },
          {
            "name": "undici",
            "direct": true,
            "version": "8.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "unpdf",
            "direct": true,
            "version": "1.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "ws",
            "direct": true,
            "version": "8.21.0",
            "ecosystem": "npm"
          },
          {
            "name": "yaml",
            "direct": true,
            "version": "2.9.0",
            "ecosystem": "npm"
          },
          {
            "name": "zod",
            "direct": true,
            "version": "3.25.76",
            "ecosystem": "npm"
          },
          {
            "name": "@anthropic-ai/claude-code-darwin-arm64",
            "direct": false,
            "version": "2.1.201",
            "ecosystem": "npm"
          },
          {
            "name": "@anthropic-ai/claude-code-darwin-x64",
            "direct": false,
            "version": "2.1.201",
            "ecosystem": "npm"
          },
          {
            "name": "@anthropic-ai/claude-code-linux-arm64",
            "direct": false,
            "version": "2.1.201",
            "ecosystem": "npm"
          },
          {
            "name": "@anthropic-ai/claude-code-linux-arm64-musl",
            "direct": false,
            "version": "2.1.201",
            "ecosystem": "npm"
          },
          {
            "name": "@anthropic-ai/claude-code-linux-x64",
            "direct": false,
            "version": "2.1.201",
            "ecosystem": "npm"
          },
          {
            "name": "@anthropic-ai/claude-code-linux-x64-musl",
            "direct": false,
            "version": "2.1.201",
            "ecosystem": "npm"
          },
          {
            "name": "@anthropic-ai/claude-code-win32-arm64",
            "direct": false,
            "version": "2.1.201",
            "ecosystem": "npm"
          },
          {
            "name": "@anthropic-ai/claude-code-win32-x64",
            "direct": false,
            "version": "2.1.201",
            "ecosystem": "npm"
          },
          {
            "name": "@anthropic-ai/sdk",
            "direct": false,
            "version": "0.91.1",
            "ecosystem": "npm"
          },
          {
            "name": "@aws-crypto/sha256-browser",
            "direct": false,
            "version": "5.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "@aws-crypto/sha256-js",
            "direct": false,
            "version": "5.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "@aws-crypto/supports-web-crypto",
            "direct": false,
            "version": "5.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "@aws-crypto/util",
            "direct": false,
            "version": "5.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "@aws-sdk/client-bedrock-runtime",
            "direct": false,
            "version": "3.1048.0",
            "ecosystem": "npm"
          },
          {
            "name": "@aws-sdk/core",
            "direct": false,
            "version": "3.974.26",
            "ecosystem": "npm"
          },
          {
            "name": "@aws-sdk/credential-provider-env",
            "direct": false,
            "version": "3.972.52",
            "ecosystem": "npm"
          },
          {
            "name": "@aws-sdk/credential-provider-http",
            "direct": false,
            "version": "3.972.54",
            "ecosystem": "npm"
          },
          {
            "name": "@aws-sdk/credential-provider-ini",
            "direct": false,
            "version": "3.972.59",
            "ecosystem": "npm"
          },
          {
            "name": "@aws-sdk/credential-provider-login",
            "direct": false,
            "version": "3.972.58",
            "ecosystem": "npm"
          },
          {
            "name": "@aws-sdk/credential-provider-node",
            "direct": false,
            "version": "3.972.61",
            "ecosystem": "npm"
          },
          {
            "name": "@aws-sdk/credential-provider-process",
            "direct": false,
            "version": "3.972.52",
            "ecosystem": "npm"
          },
          {
            "name": "@aws-sdk/credential-provider-sso",
            "direct": false,
            "version": "3.972.58",
            "ecosystem": "npm"
          },
          {
            "name": "@aws-sdk/credential-provider-web-identity",
            "direct": false,
            "version": "3.972.58",
            "ecosystem": "npm"
          },
          {
            "name": "@aws-sdk/eventstream-handler-node",
            "direct": false,
            "version": "3.972.25",
            "ecosystem": "npm"
          },
          {
            "name": "@aws-sdk/middleware-eventstream",
            "direct": false,
            "version": "3.972.21",
            "ecosystem": "npm"
          },
          {
            "name": "@aws-sdk/middleware-websocket",
            "direct": false,
            "version": "3.972.34",
            "ecosystem": "npm"
          },
          {
            "name": "@aws-sdk/nested-clients",
            "direct": false,
            "version": "3.997.26",
            "ecosystem": "npm"
          },
          {
            "name": "@aws-sdk/signature-v4-multi-region",
            "direct": false,
            "version": "3.996.38",
            "ecosystem": "npm"
          },
          {
            "name": "@aws-sdk/token-providers",
            "direct": false,
            "version": "3.1048.0",
            "ecosystem": "npm"
          },
          {
            "name": "@aws-sdk/token-providers",
            "direct": false,
            "version": "3.1078.0",
            "ecosystem": "npm"
          },
          {
            "name": "@aws-sdk/types",
            "direct": false,
            "version": "3.973.15",
            "ecosystem": "npm"
          },
          {
            "name": "@aws-sdk/util-locate-window",
            "direct": false,
            "version": "3.965.8",
            "ecosystem": "npm"
          },
          {
            "name": "@aws-sdk/xml-builder",
            "direct": false,
            "version": "3.972.33",
            "ecosystem": "npm"
          },
          {
            "name": "@aws/lambda-invoke-store",
            "direct": false,
            "version": "0.2.4",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/runtime",
            "direct": false,
            "version": "7.29.7",
            "ecosystem": "npm"
          },
          {
            "name": "@borewit/text-codec",
            "direct": false,
            "version": "0.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "@cacheable/memory",
            "direct": false,
            "version": "2.0.9",
            "ecosystem": "npm"
          },
          {
            "name": "@cacheable/node-cache",
            "direct": false,
            "version": "1.7.6",
            "ecosystem": "npm"
          },
          {
            "name": "@cacheable/utils",
            "direct": false,
            "version": "2.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "@composio/client",
            "direct": false,
            "version": "0.1.0-alpha.72",
            "ecosystem": "npm"
          },
          {
            "name": "@composio/json-schema-to-zod",
            "direct": false,
            "version": "0.1.20",
            "ecosystem": "npm"
          },
          {
            "name": "@discordjs/builders",
            "direct": false,
            "version": "1.14.1",
            "ecosystem": "npm"
          },
          {
            "name": "@discordjs/collection",
            "direct": false,
            "version": "1.5.3",
            "ecosystem": "npm"
          },
          {
            "name": "@discordjs/collection",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "@discordjs/formatters",
            "direct": false,
            "version": "0.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "@discordjs/rest",
            "direct": false,
            "version": "2.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "@discordjs/util",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "@discordjs/ws",
            "direct": false,
            "version": "1.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/aix-ppc64",
            "direct": false,
            "version": "0.27.0",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/aix-ppc64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/android-arm",
            "direct": false,
            "version": "0.27.0",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/android-arm",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/android-arm64",
            "direct": false,
            "version": "0.27.0",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/android-arm64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/android-x64",
            "direct": false,
            "version": "0.27.0",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/android-x64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/darwin-arm64",
            "direct": false,
            "version": "0.27.0",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/darwin-arm64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/darwin-x64",
            "direct": false,
            "version": "0.27.0",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/darwin-x64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/freebsd-arm64",
            "direct": false,
            "version": "0.27.0",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/freebsd-arm64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/freebsd-x64",
            "direct": false,
            "version": "0.27.0",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/freebsd-x64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-arm",
            "direct": false,
            "version": "0.27.0",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-arm",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-arm64",
            "direct": false,
            "version": "0.27.0",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-arm64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-ia32",
            "direct": false,
            "version": "0.27.0",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-ia32",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-loong64",
            "direct": false,
            "version": "0.27.0",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-loong64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-mips64el",
            "direct": false,
            "version": "0.27.0",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-mips64el",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-ppc64",
            "direct": false,
            "version": "0.27.0",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-ppc64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-riscv64",
            "direct": false,
            "version": "0.27.0",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-riscv64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-s390x",
            "direct": false,
            "version": "0.27.0",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-s390x",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-x64",
            "direct": false,
            "version": "0.27.0",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-x64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/netbsd-arm64",
            "direct": false,
            "version": "0.27.0",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/netbsd-arm64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/netbsd-x64",
            "direct": false,
            "version": "0.27.0",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/netbsd-x64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/openbsd-arm64",
            "direct": false,
            "version": "0.27.0",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/openbsd-arm64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/openbsd-x64",
            "direct": false,
            "version": "0.27.0",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/openbsd-x64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/openharmony-arm64",
            "direct": false,
            "version": "0.27.0",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/openharmony-arm64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/sunos-x64",
            "direct": false,
            "version": "0.27.0",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/sunos-x64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/win32-arm64",
            "direct": false,
            "version": "0.27.0",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/win32-arm64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/win32-ia32",
            "direct": false,
            "version": "0.27.0",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/win32-ia32",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/win32-x64",
            "direct": false,
            "version": "0.27.0",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/win32-x64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@fast-csv/format",
            "direct": false,
            "version": "4.3.5",
            "ecosystem": "npm"
          },
          {
            "name": "@fast-csv/parse",
            "direct": false,
            "version": "4.3.6",
            "ecosystem": "npm"
          },
          {
            "name": "@google/genai",
            "direct": false,
            "version": "1.52.0",
            "ecosystem": "npm"
          },
          {
            "name": "@hapi/boom",
            "direct": false,
            "version": "9.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "@hapi/hoek",
            "direct": false,
            "version": "9.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "@isaacs/fs-minipass",
            "direct": false,
            "version": "4.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "@jimp/core",
            "direct": false,
            "version": "1.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "@jimp/diff",
            "direct": false,
            "version": "1.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "@jimp/file-ops",
            "direct": false,
            "version": "1.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "@jimp/js-bmp",
            "direct": false,
            "version": "1.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "@jimp/js-gif",
            "direct": false,
            "version": "1.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "@jimp/js-jpeg",
            "direct": false,
            "version": "1.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "@jimp/js-png",
            "direct": false,
            "version": "1.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "@jimp/js-tiff",
            "direct": false,
            "version": "1.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "@jimp/plugin-blit",
            "direct": false,
            "version": "1.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "@jimp/plugin-blur",
            "direct": false,
            "version": "1.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "@jimp/plugin-circle",
            "direct": false,
            "version": "1.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "@jimp/plugin-color",
            "direct": false,
            "version": "1.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "@jimp/plugin-contain",
            "direct": false,
            "version": "1.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "@jimp/plugin-cover",
            "direct": false,
            "version": "1.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "@jimp/plugin-crop",
            "direct": false,
            "version": "1.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "@jimp/plugin-displace",
            "direct": false,
            "version": "1.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "@jimp/plugin-dither",
            "direct": false,
            "version": "1.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "@jimp/plugin-fisheye",
            "direct": false,
            "version": "1.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "@jimp/plugin-flip",
            "direct": false,
            "version": "1.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "@jimp/plugin-hash",
            "direct": false,
            "version": "1.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "@jimp/plugin-mask",
            "direct": false,
            "version": "1.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "@jimp/plugin-print",
            "direct": false,
            "version": "1.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "@jimp/plugin-quantize",
            "direct": false,
            "version": "1.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "@jimp/plugin-resize",
            "direct": false,
            "version": "1.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "@jimp/plugin-rotate",
            "direct": false,
            "version": "1.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "@jimp/plugin-threshold",
            "direct": false,
            "version": "1.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "@jimp/types",
            "direct": false,
            "version": "1.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "@jimp/utils",
            "direct": false,
            "version": "1.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "@keyv/bigmap",
            "direct": false,
            "version": "1.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "@keyv/serialize",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "@mariozechner/clipboard",
            "direct": false,
            "version": "0.3.9",
            "ecosystem": "npm"
          },
          {
            "name": "@mariozechner/clipboard-darwin-arm64",
            "direct": false,
            "version": "0.3.9",
            "ecosystem": "npm"
          },
          {
            "name": "@mariozechner/clipboard-darwin-universal",
            "direct": false,
            "version": "0.3.9",
            "ecosystem": "npm"
          },
          {
            "name": "@mariozechner/clipboard-darwin-x64",
            "direct": false,
            "version": "0.3.9",
            "ecosystem": "npm"
          },
          {
            "name": "@mariozechner/clipboard-linux-arm64-gnu",
            "direct": false,
            "version": "0.3.9",
            "ecosystem": "npm"
          },
          {
            "name": "@mariozechner/clipboard-linux-arm64-musl",
            "direct": false,
            "version": "0.3.9",
            "ecosystem": "npm"
          },
          {
            "name": "@mariozechner/clipboard-linux-riscv64-gnu",
            "direct": false,
            "version": "0.3.9",
            "ecosystem": "npm"
          },
          {
            "name": "@mariozechner/clipboard-linux-x64-gnu",
            "direct": false,
            "version": "0.3.9",
            "ecosystem": "npm"
          },
          {
            "name": "@mariozechner/clipboard-linux-x64-musl",
            "direct": false,
            "version": "0.3.9",
            "ecosystem": "npm"
          },
          {
            "name": "@mariozechner/clipboard-win32-arm64-msvc",
            "direct": false,
            "version": "0.3.9",
            "ecosystem": "npm"
          },
          {
            "name": "@mariozechner/clipboard-win32-x64-msvc",
            "direct": false,
            "version": "0.3.9",
            "ecosystem": "npm"
          },
          {
            "name": "@mistralai/mistralai",
            "direct": false,
            "version": "2.2.6",
            "ecosystem": "npm"
          },
          {
            "name": "@opentelemetry/api",
            "direct": false,
            "version": "1.9.0",
            "ecosystem": "npm"
          },
          {
            "name": "@opentelemetry/semantic-conventions",
            "direct": false,
            "version": "1.41.1",
            "ecosystem": "npm"
          },
          {
            "name": "@pdf-lib/standard-fonts",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "@pdf-lib/upng",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "@pinojs/redact",
            "direct": false,
            "version": "0.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "@protobufjs/aspromise",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "@protobufjs/base64",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "@protobufjs/codegen",
            "direct": false,
            "version": "2.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "@protobufjs/eventemitter",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "@protobufjs/fetch",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "@protobufjs/float",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "@protobufjs/path",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "@protobufjs/pool",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "@protobufjs/utf8",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "@sapphire/async-queue",
            "direct": false,
            "version": "1.5.5",
            "ecosystem": "npm"
          },
          {
            "name": "@sapphire/shapeshift",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "@sapphire/snowflake",
            "direct": false,
            "version": "3.5.3",
            "ecosystem": "npm"
          },
          {
            "name": "@sapphire/snowflake",
            "direct": false,
            "version": "3.5.5",
            "ecosystem": "npm"
          },
          {
            "name": "@silvia-odwyer/photon-node",
            "direct": false,
            "version": "0.3.4",
            "ecosystem": "npm"
          },
          {
            "name": "@slack/logger",
            "direct": false,
            "version": "4.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "@slack/types",
            "direct": false,
            "version": "2.21.1",
            "ecosystem": "npm"
          },
          {
            "name": "@smithy/core",
            "direct": false,
            "version": "3.29.0",
            "ecosystem": "npm"
          },
          {
            "name": "@smithy/credential-provider-imds",
            "direct": false,
            "version": "4.4.5",
            "ecosystem": "npm"
          },
          {
            "name": "@smithy/fetch-http-handler",
            "direct": false,
            "version": "5.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "@smithy/is-array-buffer",
            "direct": false,
            "version": "2.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "@smithy/node-http-handler",
            "direct": false,
            "version": "4.7.3",
            "ecosystem": "npm"
          },
          {
            "name": "@smithy/node-http-handler",
            "direct": false,
            "version": "4.9.2",
            "ecosystem": "npm"
          },
          {
            "name": "@smithy/signature-v4",
            "direct": false,
            "version": "5.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "@smithy/types",
            "direct": false,
            "version": "4.15.1",
            "ecosystem": "npm"
          },
          {
            "name": "@smithy/util-buffer-from",
            "direct": false,
            "version": "2.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "@smithy/util-utf8",
            "direct": false,
            "version": "2.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "@tokenizer/inflate",
            "direct": false,
            "version": "0.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "@tokenizer/token",
            "direct": false,
            "version": "0.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "@types/json-schema",
            "direct": false,
            "version": "7.0.15",
            "ecosystem": "npm"
          },
          {
            "name": "@types/node",
            "direct": false,
            "version": "14.18.63",
            "ecosystem": "npm"
          },
          {
            "name": "@types/node",
            "direct": false,
            "version": "16.9.1",
            "ecosystem": "npm"
          },
          {
            "name": "@types/node",
            "direct": false,
            "version": "22.19.17",
            "ecosystem": "npm"
          },
          {
            "name": "@types/node",
            "direct": false,
            "version": "25.9.4",
            "ecosystem": "npm"
          },
          {
            "name": "@types/prompts",
            "direct": false,
            "version": "2.4.9",
            "ecosystem": "npm"
          },
          {
            "name": "@types/proper-lockfile",
            "direct": false,
            "version": "4.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "@types/qrcode-terminal",
            "direct": false,
            "version": "0.12.2",
            "ecosystem": "npm"
          },
          {
            "name": "@types/retry",
            "direct": false,
            "version": "0.12.0",
            "ecosystem": "npm"
          },
          {
            "name": "@types/tar",
            "direct": false,
            "version": "6.1.13",
            "ecosystem": "npm"
          },
          {
            "name": "@types/ws",
            "direct": false,
            "version": "8.18.1",
            "ecosystem": "npm"
          },
          {
            "name": "@vladfrangu/async_event_emitter",
            "direct": false,
            "version": "2.4.7",
            "ecosystem": "npm"
          },
          {
            "name": "abort-controller",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "agent-base",
            "direct": false,
            "version": "6.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "agent-base",
            "direct": false,
            "version": "7.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "agent-base",
            "direct": false,
            "version": "9.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-regex",
            "direct": false,
            "version": "5.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-styles",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "any-base",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "any-promise",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "archiver",
            "direct": false,
            "version": "5.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "archiver-utils",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "archiver-utils",
            "direct": false,
            "version": "3.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "async",
            "direct": false,
            "version": "3.2.6",
            "ecosystem": "npm"
          },
          {
            "name": "async-mutex",
            "direct": false,
            "version": "0.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "asynckit",
            "direct": false,
            "version": "0.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "atomic-sleep",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "await-to-js",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "axios",
            "direct": false,
            "version": "1.18.1",
            "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": "big-integer",
            "direct": false,
            "version": "1.6.52",
            "ecosystem": "npm"
          },
          {
            "name": "bignumber.js",
            "direct": false,
            "version": "9.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "binary",
            "direct": false,
            "version": "0.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "bl",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "bluebird",
            "direct": false,
            "version": "3.4.7",
            "ecosystem": "npm"
          },
          {
            "name": "bmp-ts",
            "direct": false,
            "version": "1.0.9",
            "ecosystem": "npm"
          },
          {
            "name": "boolbase",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "bottleneck",
            "direct": false,
            "version": "2.19.5",
            "ecosystem": "npm"
          },
          {
            "name": "bowser",
            "direct": false,
            "version": "2.14.1",
            "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": "buffer",
            "direct": false,
            "version": "5.7.1",
            "ecosystem": "npm"
          },
          {
            "name": "buffer-crc32",
            "direct": false,
            "version": "0.2.13",
            "ecosystem": "npm"
          },
          {
            "name": "buffer-equal-constant-time",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "buffer-indexof-polyfill",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "buffers",
            "direct": false,
            "version": "0.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "cacheable",
            "direct": false,
            "version": "2.3.5",
            "ecosystem": "npm"
          },
          {
            "name": "call-bind-apply-helpers",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "chainsaw",
            "direct": false,
            "version": "0.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "chownr",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "cliui",
            "direct": false,
            "version": "7.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "color",
            "direct": false,
            "version": "4.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "color-convert",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "color-name",
            "direct": false,
            "version": "1.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "color-string",
            "direct": false,
            "version": "1.9.1",
            "ecosystem": "npm"
          },
          {
            "name": "combined-stream",
            "direct": false,
            "version": "1.0.8",
            "ecosystem": "npm"
          },
          {
            "name": "compress-commons",
            "direct": false,
            "version": "4.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "concat-map",
            "direct": false,
            "version": "0.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "content-type",
            "direct": false,
            "version": "1.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "core-util-is",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "crc-32",
            "direct": false,
            "version": "1.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "crc32-stream",
            "direct": false,
            "version": "4.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "cross-spawn",
            "direct": false,
            "version": "7.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "crypto-js",
            "direct": false,
            "version": "4.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "css-select",
            "direct": false,
            "version": "5.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "css-what",
            "direct": false,
            "version": "6.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "cssom",
            "direct": false,
            "version": "0.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "curve25519-js",
            "direct": false,
            "version": "0.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "data-uri-to-buffer",
            "direct": false,
            "version": "4.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "dayjs",
            "direct": false,
            "version": "1.11.21",
            "ecosystem": "npm"
          },
          {
            "name": "debug",
            "direct": false,
            "version": "4.4.3",
            "ecosystem": "npm"
          },
          {
            "name": "define-property",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "delayed-stream",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "diff",
            "direct": false,
            "version": "8.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "discord-api-types",
            "direct": false,
            "version": "0.38.49",
            "ecosystem": "npm"
          },
          {
            "name": "dom-serializer",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "domelementtype",
            "direct": false,
            "version": "2.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "domhandler",
            "direct": false,
            "version": "5.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "domutils",
            "direct": false,
            "version": "3.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "dunder-proto",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "duplexer2",
            "direct": false,
            "version": "0.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "ecdsa-sig-formatter",
            "direct": false,
            "version": "1.0.11",
            "ecosystem": "npm"
          },
          {
            "name": "emoji-regex",
            "direct": false,
            "version": "8.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "end-of-stream",
            "direct": false,
            "version": "1.4.5",
            "ecosystem": "npm"
          },
          {
            "name": "entities",
            "direct": false,
            "version": "4.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "entities",
            "direct": false,
            "version": "7.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "es-define-property",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "es-errors",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "es-object-atoms",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "es-set-tostringtag",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "esbuild",
            "direct": false,
            "version": "0.27.0",
            "ecosystem": "npm"
          },
          {
            "name": "esbuild",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "escalade",
            "direct": false,
            "version": "3.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "event-target-shim",
            "direct": false,
            "version": "5.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "eventemitter3",
            "direct": false,
            "version": "4.0.7",
            "ecosystem": "npm"
          },
          {
            "name": "eventemitter3",
            "direct": false,
            "version": "5.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "exif-parser",
            "direct": false,
            "version": "0.1.12",
            "ecosystem": "npm"
          },
          {
            "name": "extend",
            "direct": false,
            "version": "3.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "fast-csv",
            "direct": false,
            "version": "4.3.6",
            "ecosystem": "npm"
          },
          {
            "name": "fast-deep-equal",
            "direct": false,
            "version": "3.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "fetch-blob",
            "direct": false,
            "version": "3.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "file-type",
            "direct": false,
            "version": "21.3.4",
            "ecosystem": "npm"
          },
          {
            "name": "follow-redirects",
            "direct": false,
            "version": "1.16.0",
            "ecosystem": "npm"
          },
          {
            "name": "form-data",
            "direct": false,
            "version": "4.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "formdata-polyfill",
            "direct": false,
            "version": "4.0.10",
            "ecosystem": "npm"
          },
          {
            "name": "fs-constants",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "fs.realpath",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "fsevents",
            "direct": false,
            "version": "2.3.3",
            "ecosystem": "npm"
          },
          {
            "name": "fstream",
            "direct": false,
            "version": "1.0.12",
            "ecosystem": "npm"
          },
          {
            "name": "function-bind",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "gaxios",
            "direct": false,
            "version": "7.1.5",
            "ecosystem": "npm"
          },
          {
            "name": "gcp-metadata",
            "direct": false,
            "version": "8.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": "gifwrap",
            "direct": false,
            "version": "0.10.1",
            "ecosystem": "npm"
          },
          {
            "name": "glob",
            "direct": false,
            "version": "13.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "glob",
            "direct": false,
            "version": "7.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "google-auth-library",
            "direct": false,
            "version": "10.9.0",
            "ecosystem": "npm"
          },
          {
            "name": "google-logging-utils",
            "direct": false,
            "version": "1.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "gopd",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "graceful-fs",
            "direct": false,
            "version": "4.2.11",
            "ecosystem": "npm"
          },
          {
            "name": "has-flag",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "has-symbols",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "has-tostringtag",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "hash.js",
            "direct": false,
            "version": "1.1.7",
            "ecosystem": "npm"
          },
          {
            "name": "hashery",
            "direct": false,
            "version": "1.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "hasown",
            "direct": false,
            "version": "2.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "highlight.js",
            "direct": false,
            "version": "10.7.3",
            "ecosystem": "npm"
          },
          {
            "name": "hookified",
            "direct": false,
            "version": "1.15.1",
            "ecosystem": "npm"
          },
          {
            "name": "hookified",
            "direct": false,
            "version": "2.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "hosted-git-info",
            "direct": false,
            "version": "9.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "html-entities",
            "direct": false,
            "version": "2.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "html-escaper",
            "direct": false,
            "version": "3.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "htmlparser2",
            "direct": false,
            "version": "10.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "http-proxy-agent",
            "direct": false,
            "version": "7.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "https",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "ieee754",
            "direct": false,
            "version": "1.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "ignore",
            "direct": false,
            "version": "7.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "image-q",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "image-size",
            "direct": false,
            "version": "1.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "immediate",
            "direct": false,
            "version": "3.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "inflight",
            "direct": false,
            "version": "1.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "inherits",
            "direct": false,
            "version": "2.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "ip-address",
            "direct": false,
            "version": "10.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-accessor-descriptor",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "is-arrayish",
            "direct": false,
            "version": "0.3.4",
            "ecosystem": "npm"
          },
          {
            "name": "is-buffer",
            "direct": false,
            "version": "1.1.6",
            "ecosystem": "npm"
          },
          {
            "name": "is-data-descriptor",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "is-descriptor",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "is-electron",
            "direct": false,
            "version": "2.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "is-fullwidth-code-point",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-number",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-stream",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "isarray",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "isexe",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "jpeg-js",
            "direct": false,
            "version": "0.4.4",
            "ecosystem": "npm"
          },
          {
            "name": "json-bigint",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "json-schema-to-ts",
            "direct": false,
            "version": "3.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "jszip",
            "direct": false,
            "version": "3.10.1",
            "ecosystem": "npm"
          },
          {
            "name": "jwa",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "jws",
            "direct": false,
            "version": "4.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "keyv",
            "direct": false,
            "version": "5.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "kind-of",
            "direct": false,
            "version": "3.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "kleur",
            "direct": false,
            "version": "3.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "lazystream",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "libsignal",
            "direct": false,
            "version": "6.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "lie",
            "direct": false,
            "version": "3.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "listenercount",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "lodash",
            "direct": false,
            "version": "4.18.1",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.defaults",
            "direct": false,
            "version": "4.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.difference",
            "direct": false,
            "version": "4.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.escaperegexp",
            "direct": false,
            "version": "4.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.flatten",
            "direct": false,
            "version": "4.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.groupby",
            "direct": false,
            "version": "4.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.isboolean",
            "direct": false,
            "version": "3.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.isequal",
            "direct": false,
            "version": "4.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.isfunction",
            "direct": false,
            "version": "3.0.9",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.isnil",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.isplainobject",
            "direct": false,
            "version": "4.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.isundefined",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.snakecase",
            "direct": false,
            "version": "4.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.union",
            "direct": false,
            "version": "4.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.uniq",
            "direct": false,
            "version": "4.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "long",
            "direct": false,
            "version": "5.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "lru-cache",
            "direct": false,
            "version": "11.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "lru-cache",
            "direct": false,
            "version": "11.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "magic-bytes.js",
            "direct": false,
            "version": "1.13.0",
            "ecosystem": "npm"
          },
          {
            "name": "marked",
            "direct": false,
            "version": "18.0.5",
            "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": "mime",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "mime-db",
            "direct": false,
            "version": "1.52.0",
            "ecosystem": "npm"
          },
          {
            "name": "mime-types",
            "direct": false,
            "version": "2.1.35",
            "ecosystem": "npm"
          },
          {
            "name": "minimalistic-assert",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "minimist",
            "direct": false,
            "version": "1.2.8",
            "ecosystem": "npm"
          },
          {
            "name": "minipass",
            "direct": false,
            "version": "4.2.8",
            "ecosystem": "npm"
          },
          {
            "name": "minipass",
            "direct": false,
            "version": "7.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "minizlib",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "mkdirp",
            "direct": false,
            "version": "0.5.6",
            "ecosystem": "npm"
          },
          {
            "name": "ms",
            "direct": false,
            "version": "2.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "music-metadata",
            "direct": false,
            "version": "11.12.3",
            "ecosystem": "npm"
          },
          {
            "name": "mz",
            "direct": false,
            "version": "2.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "nanoid",
            "direct": false,
            "version": "5.1.16",
            "ecosystem": "npm"
          },
          {
            "name": "node-domexception",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "node-fetch",
            "direct": false,
            "version": "2.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "node-fetch",
            "direct": false,
            "version": "3.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "node-html-better-parser",
            "direct": false,
            "version": "1.5.8",
            "ecosystem": "npm"
          },
          {
            "name": "normalize-path",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "nth-check",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "object-assign",
            "direct": false,
            "version": "4.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "omggif",
            "direct": false,
            "version": "1.0.10",
            "ecosystem": "npm"
          },
          {
            "name": "on-exit-leak-free",
            "direct": false,
            "version": "2.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "once",
            "direct": false,
            "version": "1.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "openai",
            "direct": false,
            "version": "6.26.0",
            "ecosystem": "npm"
          },
          {
            "name": "p-finally",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "p-queue",
            "direct": false,
            "version": "6.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "p-queue",
            "direct": false,
            "version": "9.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "p-retry",
            "direct": false,
            "version": "4.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "p-timeout",
            "direct": false,
            "version": "3.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "p-timeout",
            "direct": false,
            "version": "7.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "pako",
            "direct": false,
            "version": "1.0.11",
            "ecosystem": "npm"
          },
          {
            "name": "parse-bmfont-ascii",
            "direct": false,
            "version": "1.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "parse-bmfont-binary",
            "direct": false,
            "version": "1.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "parse-bmfont-xml",
            "direct": false,
            "version": "1.1.6",
            "ecosystem": "npm"
          },
          {
            "name": "parse5",
            "direct": false,
            "version": "5.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "parse5",
            "direct": false,
            "version": "6.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "parse5-htmlparser2-tree-adapter",
            "direct": false,
            "version": "6.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "partial-json",
            "direct": false,
            "version": "0.1.7",
            "ecosystem": "npm"
          },
          {
            "name": "path-is-absolute",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "path-key",
            "direct": false,
            "version": "3.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "path-scurry",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "pino",
            "direct": false,
            "version": "9.14.0",
            "ecosystem": "npm"
          },
          {
            "name": "pino-abstract-transport",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "pino-std-serializers",
            "direct": false,
            "version": "7.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "pixelmatch",
            "direct": false,
            "version": "5.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "pngjs",
            "direct": false,
            "version": "6.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "pngjs",
            "direct": false,
            "version": "7.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "prettier",
            "direct": false,
            "version": "3.8.3",
            "ecosystem": "npm"
          },
          {
            "name": "process-nextick-args",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "process-warning",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "protobufjs",
            "direct": false,
            "version": "7.6.4",
            "ecosystem": "npm"
          },
          {
            "name": "proxy-from-env",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "pusher-js",
            "direct": false,
            "version": "8.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "qified",
            "direct": false,
            "version": "0.10.1",
            "ecosystem": "npm"
          },
          {
            "name": "queue",
            "direct": false,
            "version": "6.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "quick-format-unescaped",
            "direct": false,
            "version": "4.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "readable-stream",
            "direct": false,
            "version": "2.3.8",
            "ecosystem": "npm"
          },
          {
            "name": "readable-stream",
            "direct": false,
            "version": "3.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "readdir-glob",
            "direct": false,
            "version": "1.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "real-require",
            "direct": false,
            "version": "0.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "require-directory",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "retry",
            "direct": false,
            "version": "0.12.0",
            "ecosystem": "npm"
          },
          {
            "name": "retry",
            "direct": false,
            "version": "0.13.1",
            "ecosystem": "npm"
          },
          {
            "name": "rimraf",
            "direct": false,
            "version": "2.7.1",
            "ecosystem": "npm"
          },
          {
            "name": "safe-buffer",
            "direct": false,
            "version": "5.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "safe-stable-stringify",
            "direct": false,
            "version": "2.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "sax",
            "direct": false,
            "version": "1.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "saxes",
            "direct": false,
            "version": "5.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "semver",
            "direct": false,
            "version": "7.8.0",
            "ecosystem": "npm"
          },
          {
            "name": "semver",
            "direct": false,
            "version": "7.8.5",
            "ecosystem": "npm"
          },
          {
            "name": "setimmediate",
            "direct": false,
            "version": "1.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "shebang-command",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "shebang-regex",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "signal-exit",
            "direct": false,
            "version": "3.0.7",
            "ecosystem": "npm"
          },
          {
            "name": "simple-swizzle",
            "direct": false,
            "version": "0.2.4",
            "ecosystem": "npm"
          },
          {
            "name": "simple-xml-to-json",
            "direct": false,
            "version": "1.2.7",
            "ecosystem": "npm"
          },
          {
            "name": "sisteransi",
            "direct": false,
            "version": "1.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "smart-buffer",
            "direct": false,
            "version": "4.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "socks",
            "direct": false,
            "version": "2.8.9",
            "ecosystem": "npm"
          },
          {
            "name": "sonic-boom",
            "direct": false,
            "version": "4.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "split2",
            "direct": false,
            "version": "4.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "string-width",
            "direct": false,
            "version": "4.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "string_decoder",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "strip-ansi",
            "direct": false,
            "version": "6.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "strtok3",
            "direct": false,
            "version": "10.3.5",
            "ecosystem": "npm"
          },
          {
            "name": "supports-color",
            "direct": false,
            "version": "7.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "supports-color",
            "direct": false,
            "version": "8.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "tar-stream",
            "direct": false,
            "version": "2.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "thenify",
            "direct": false,
            "version": "3.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "thenify-all",
            "direct": false,
            "version": "1.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "thread-stream",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "tinycolor2",
            "direct": false,
            "version": "1.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "tmp",
            "direct": false,
            "version": "0.2.7",
            "ecosystem": "npm"
          },
          {
            "name": "token-types",
            "direct": false,
            "version": "6.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "tr46",
            "direct": false,
            "version": "0.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "traverse",
            "direct": false,
            "version": "0.3.9",
            "ecosystem": "npm"
          },
          {
            "name": "ts-algebra",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "ts-mixer",
            "direct": false,
            "version": "6.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "tslib",
            "direct": false,
            "version": "2.8.1",
            "ecosystem": "npm"
          },
          {
            "name": "tsx",
            "direct": false,
            "version": "4.22.4",
            "ecosystem": "npm"
          },
          {
            "name": "tweetnacl",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "typebox",
            "direct": false,
            "version": "1.1.38",
            "ecosystem": "npm"
          },
          {
            "name": "typescript",
            "direct": false,
            "version": "5.9.3",
            "ecosystem": "npm"
          },
          {
            "name": "uhyphen",
            "direct": false,
            "version": "0.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "uint8array-extras",
            "direct": false,
            "version": "1.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "undici-types",
            "direct": false,
            "version": "6.21.0",
            "ecosystem": "npm"
          },
          {
            "name": "undici-types",
            "direct": false,
            "version": "7.24.6",
            "ecosystem": "npm"
          },
          {
            "name": "unzipper",
            "direct": false,
            "version": "0.10.14",
            "ecosystem": "npm"
          },
          {
            "name": "utif2",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "util-deprecate",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "uuid",
            "direct": false,
            "version": "11.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "web-streams-polyfill",
            "direct": false,
            "version": "3.3.3",
            "ecosystem": "npm"
          },
          {
            "name": "webidl-conversions",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "whatsapp-rust-bridge",
            "direct": false,
            "version": "0.5.4",
            "ecosystem": "npm"
          },
          {
            "name": "whatwg-url",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "which",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "win-guid",
            "direct": false,
            "version": "0.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "window-size",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "wrap-ansi",
            "direct": false,
            "version": "7.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "wrappy",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "xml",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "xml-js",
            "direct": false,
            "version": "1.6.11",
            "ecosystem": "npm"
          },
          {
            "name": "xml-parse-from-string",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "xml2js",
            "direct": false,
            "version": "0.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "xmlbuilder",
            "direct": false,
            "version": "11.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "xmlchars",
            "direct": false,
            "version": "2.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "y18n",
            "direct": false,
            "version": "5.0.8",
            "ecosystem": "npm"
          },
          {
            "name": "yallist",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "yargs",
            "direct": false,
            "version": "16.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "yargs-parser",
            "direct": false,
            "version": "20.2.9",
            "ecosystem": "npm"
          },
          {
            "name": "zip-stream",
            "direct": false,
            "version": "4.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "zod-to-json-schema",
            "direct": false,
            "version": "3.25.2",
            "ecosystem": "npm"
          }
        ],
        "collected": true,
        "truncated": false,
        "total_count": 558,
        "direct_count": 50,
        "indirect_count": 508
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 12,
        "merged_prs": 63,
        "open_issues": 0,
        "closed_ratio": 1,
        "closed_issues": 2,
        "closed_unmerged_prs": 13
      },
      "bus_factor": 1,
      "bot_contributors": 1,
      "top_contributors": [
        {
          "type": "User",
          "login": "Bhasvanth-Dev9380",
          "commits": 432,
          "avatar_url": "https://avatars.githubusercontent.com/u/157608971?v=4"
        },
        {
          "type": "User",
          "login": "Ranjithsingh2004",
          "commits": 11,
          "avatar_url": "https://avatars.githubusercontent.com/u/122562396?v=4"
        },
        {
          "type": "User",
          "login": "viveknadig",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/96881767?v=4"
        }
      ],
      "contributors_sampled": 3,
      "top_contributor_share": 0.973
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "brigadiers.yml",
        "ci.yml",
        "codeql.yml",
        "dependency-review.yml",
        "osv-scanner.yml",
        "release.yml",
        "supply-chain-audit.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [],
      "has_editorconfig": false,
      "has_linter_config": false,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "package-lock.json"
      ],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 10,
            "reason": "no binaries found in the repo",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": 0,
            "reason": "branch protection not enabled on development/release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": 10,
            "reason": "7 out of 7 merged PRs checked by a CI test -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 0,
            "reason": "Found 0/23 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 10,
            "reason": "project has 3 contributing companies or organizations -- score normalized to 10",
            "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": 10,
            "reason": "update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 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": 3,
            "reason": "dependency not pinned by hash detected -- score normalized to 3",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 7,
            "reason": "SAST tool detected but not run on all commits",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 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": 0,
            "reason": "detected GitHub workflow tokens with excessive permissions",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 2,
            "reason": "8 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "01f2e43fcd7aa3df44822fa3917d033f37d8bd53",
        "ran_at": "2026-07-25T23:10:32Z",
        "aggregate_score": 5,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": true,
      "has_security_policy": true,
      "has_dependabot_config": true
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-24T17:54:54Z",
      "oldest_open_prs": [
        {
          "number": 1,
          "created_at": "2026-06-21T02:19:11Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 2,
          "created_at": "2026-06-21T02:19:14Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 3,
          "created_at": "2026-06-21T02:19:16Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 7,
          "created_at": "2026-06-21T02:20:29Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 8,
          "created_at": "2026-06-21T02:20:35Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 9,
          "created_at": "2026-06-21T02:20:38Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 10,
          "created_at": "2026-06-21T02:20:44Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 20,
          "created_at": "2026-06-21T11:32:38Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 21,
          "created_at": "2026-06-21T11:32:42Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 72,
          "created_at": "2026-07-05T11:32:53Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 73,
          "created_at": "2026-07-05T11:33:00Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 86,
          "created_at": "2026-07-19T11:34:24Z",
          "last_comment_at": null,
          "last_comment_author": null
        }
      ],
      "last_merged_pr_at": "2026-07-19T23:13:49Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": []
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/spinabot/brigade",
    "host": "github.com",
    "name": "brigade",
    "owner": "spinabot"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 67,
      "inputs": {
        "security": 55,
        "vitality": 77,
        "community": 63,
        "governance": 56,
        "engineering": 81
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "good",
        "name": "Vitality",
        "value": 77,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "moderate",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 62,
            "inputs": {
              "commits_last_year": 500,
              "human_commit_share": 0.85,
              "days_since_last_push": 5,
              "active_weeks_last_year": 12
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 5 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 5
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "12/52 weeks with commits",
                "points": 8.3,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 12
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "500 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 500
                    }
                  }
                ],
                "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": "excellent",
            "name": "Release discipline",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "releases_count": 56,
              "latest_release_tag": "brigade-v1.29.4",
              "releases_from_tags": false,
              "days_since_latest_release": 5,
              "mean_days_between_releases": 1.1
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "56 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 56
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 5 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 5
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~1.1 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 1.1
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "unverified",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": "repository_too_young",
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": null,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "maintenance record not established from the collected data",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_unverified",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "moderate",
        "name": "Community & Adoption",
        "value": 63,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "at_risk",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 49,
            "inputs": {
              "forks": 19,
              "stars": 239,
              "watchers": 2,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "239 stars",
                "points": 38.6,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 239
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "19 forks",
                "points": 10.5,
                "status": "partial",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 19
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "2 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "good",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 77,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": true,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "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 (MIT)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "MIT"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 18,
                "status": "met",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 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": 66,
            "inputs": {
              "packages": [
                "@spinabot/brigade"
              ],
              "dependents": null,
              "ecosystems": "npm",
              "total_downloads": null,
              "monthly_downloads": 9677
            },
            "components": [
              {
                "key": "monthly_downloads",
                "name": "Monthly downloads",
                "detail": "9,677 downloads/month across npm",
                "points": 53.1,
                "status": "partial",
                "details": [
                  {
                    "code": "downloads_monthly",
                    "params": {
                      "count": 9677,
                      "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": "moderate",
        "name": "Sustainability & Governance",
        "value": 56,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 24,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 3,
              "top_contributor_share": 0.973
            },
            "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 97% of commits",
                "points": 0.6,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 97
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "3 contributors",
                "points": 4.1,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 3
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 3 contributing companies or organizations -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "good",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 78,
            "inputs": {
              "merged_prs": 63,
              "open_issues": 0,
              "closed_issues": 2,
              "issue_closed_ratio": 1,
              "closed_unmerged_prs": 13
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "100% of issues closed",
                "points": 46.8,
                "status": "met",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 100
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "63/76 decided PRs merged",
                "points": 31.7,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 63,
                      "decided": 76
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/23 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "at_risk",
            "name": "Ownership & stewardship",
            "note": null,
            "notes": [],
            "value": 37,
            "inputs": {
              "followers": 4,
              "owner_type": "Organization",
              "is_verified": null,
              "owner_login": "spinabot",
              "public_repos": 1,
              "account_age_days": 43
            },
            "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": "4 followers of spinabot",
                "points": 5,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 4,
                      "login": "spinabot"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "1 public repos, account ~0 yr old",
                "points": 2.4,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 1
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 0
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "@spinabot/brigade"
              ],
              "ecosystems": "npm",
              "any_deprecated": false,
              "min_days_since_publish": 5
            },
            "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 5 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 5
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "58 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 58
                    }
                  }
                ],
                "max_points": 20
              },
              {
                "key": "not_deprecated",
                "name": "Not deprecated",
                "detail": "active, not deprecated or yanked",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "package_not_deprecated",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "good",
        "name": "Engineering Quality",
        "value": 81,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "moderate",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 68,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": false,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "7 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 7
                    }
                  }
                ],
                "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": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "7 out of 7 merged PRs checked by a CI test -- score normalized to 10",
                "points": 20,
                "status": "met",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "excellent",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "topics": [
                "agent-runtime",
                "ai",
                "ai-crew",
                "autonomous-agents",
                "brigade",
                "chatgpt",
                "clawdbot",
                "codex",
                "crustacean",
                "hermes",
                "hermes-agent",
                "llm",
                "moltbot",
                "molty",
                "multi-agent",
                "openclaw",
                "self-improving-ai",
                "brigade-agent",
                "pride-of-agents",
                "spinabot"
              ],
              "has_wiki": true,
              "homepage": "https://www.brigade.spinabot.com",
              "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": "https://www.brigade.spinabot.com",
                "points": 15,
                "status": "met",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": "20 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 20
                    }
                  }
                ],
                "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": 55,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "moderate",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 50,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 17,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 1,
              "scorecard_aggregate": 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": "branch protection not enabled on development/release branches",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "7 out of 7 merged PRs checked by a CI test -- score normalized to 10",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 0/23 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 3 contributing companies or organizations -- score normalized to 10",
                "points": 2.5,
                "status": "met",
                "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": "update tool detected",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "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 3",
                "points": 1.5,
                "status": "partial",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool detected but not run on all commits",
                "points": 3.5,
                "status": "partial",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file 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": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "8 existing vulnerabilities detected",
                "points": 1.5,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "dependency_advisories",
            "band": "good",
            "name": "Dependency advisories",
            "note": "Matched the npm:@spinabot/brigade@1.29.4 runtime dependency closure — what installing the published package pulls in — 535 packages. Reachability is not analyzed.",
            "notes": [
              {
                "code": "advisories_scope_published",
                "params": {
                  "package": "npm:@spinabot/brigade@1.29.4",
                  "assessed": 535
                }
              },
              {
                "code": "advisories_reachability",
                "params": {}
              }
            ],
            "value": 76,
            "inputs": {
              "source": "osv",
              "advisories": 3,
              "affected_packages": 3,
              "assessed_packages": 535,
              "unassessed_packages": 0,
              "affected_by_severity": "high 3",
              "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": "3 affected: brace-expansion 1.1.16 (high 7.5), brace-expansion 2.1.2 (high 7.5), uuid 8.3.2 (high 7.5)",
                "points": 7.3,
                "status": "partial",
                "details": [
                  {
                    "code": "advisories_affected",
                    "params": {
                      "count": 3,
                      "packages": "brace-expansion 1.1.16 (high 7.5), brace-expansion 2.1.2 (high 7.5), uuid 8.3.2 (high 7.5)"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "no_advisories_left_outstanding",
                "name": "No advisories left outstanding",
                "detail": "1 advisory-carrying package(s) unaddressed past 90 days; oldest published 94 days ago",
                "points": 33.7,
                "status": "partial",
                "details": [
                  {
                    "code": "advisories_stale",
                    "params": {
                      "days": 90,
                      "count": 1,
                      "oldest": 94
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "malicious_dependencies",
            "band": "excellent",
            "name": "Malicious dependencies",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "source": "osv",
              "meaning": "reported as a malicious package by the OpenSSF corpus; the remedy is removal or moving off the compromised name, never an upgrade of the same artifact. Versions the registry has since pulled are listed but not scored",
              "packages": [],
              "red_flag": false,
              "assessed_packages": 535,
              "malicious_packages": 0,
              "direct_malicious_packages": 0,
              "withdrawn_malicious_packages": 0,
              "installable_malicious_packages": 0
            },
            "components": [
              {
                "key": "no_dependency_reported_as_a_malicious_package",
                "name": "No dependency reported as a malicious package",
                "detail": "no dependency is reported as a malicious package",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "no_malicious_dependencies",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          },
          {
            "key": "high_risk_jurisdiction_exposure",
            "band": "excellent",
            "name": "High-Risk Jurisdiction Exposure",
            "note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
            "notes": [
              {
                "code": "jurisdiction_evidence_limits",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "meaning": "self-published location evidence; not nationality or citizenship",
              "red_flag": false,
              "exposures": [],
              "policy_countries": [
                "Russia",
                "Iran",
                "North Korea"
              ],
              "review_only_matches": 0,
              "assessed_self_published_locations": 1
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "no confirmed policy-scope location match",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "jurisdiction_no_match",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "moderate",
        "name": "AI Readiness",
        "value": 64,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "excellent",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 85,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 1,
              "agent_instruction_files": [
                "AGENTS.md",
                "templates/workspace/AGENTS.md"
              ],
              "agent_instruction_max_bytes": 13148
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "AGENTS.md, templates/workspace/AGENTS.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "AGENTS.md, templates/workspace/AGENTS.md"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "85 of 85 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 85,
                      "sampled": 85
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "moderate",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 51,
            "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": false,
              "typecheck_configs": [
                "convex/tsconfig.json",
                "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": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "convex/tsconfig.json, tsconfig.json",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "convex/tsconfig.json, 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": "dependency automation configured, none observed in the sampled commits",
                "points": 5,
                "status": "partial",
                "details": [
                  {
                    "code": "dependency_bot_config_only",
                    "params": {}
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 3",
                "points": 3,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 99,
            "inputs": {
              "primary_language": "TypeScript",
              "largest_source_bytes": 2475157,
              "source_files_sampled": 1204,
              "oversized_source_files": 17
            },
            "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": "17/1204 source files over 60KB",
                "points": 54.2,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 1204,
                      "oversized": 17
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "critical",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 20,
            "inputs": {
              "example_dirs": [],
              "has_mcp_signal": true,
              "api_schema_files": []
            },
            "components": [
              {
                "key": "api_schema_openapi_graphql_proto",
                "name": "API schema (OpenAPI/GraphQL/proto)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 40
              },
              {
                "key": "mcp_server",
                "name": "MCP server",
                "detail": null,
                "points": 20,
                "status": "met",
                "details": [],
                "max_points": 20
              },
              {
                "key": "runnable_examples",
                "name": "Runnable examples",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 40
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-25T23:10:45.326438Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/s/spinabot/brigade.svg",
  "full_name": "spinabot/brigade",
  "license_state": "standard",
  "license_spdx": "MIT"
}

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

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

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