Öffentliches Register
Software-GesundheitsberichtSchema 0.27.0 · Metriken 1.13.0 · 2026-07-25 23:10 UTC

spinabot / brigade

Brigade — Your personal intelligence, built enterprise-grade

TypeScriptMIT★ 239 Sterne⑂ 19 Forksseit Juni 2026Auf GitHub ansehen ↗

spinabot/brigade erreicht einen Gesundheitsindex von 67 von 100 und liegt damit im Bereich Mittel. Am stärksten schneidet es bei Engineering Quality (81/100) ab, am schwächsten bei Security (55/100). Zuletzt vor 5 Tagen aktualisiert. Ein einzelner Mitwirkender trägt den Großteil der jüngsten Arbeit.

67
gesamt / 100
Mittel

Software-Gesundheitsindex

Metriken werden auf einer Skala von 1–100 in gewichtete Kategorien gruppiert. Der Gesamtwert beginnt als ihr Mittel; sobald öffentliche Evidenz die Richtlinie für Hochrisikojurisdiktionen auslöst, wird die Bewertung angepasst und erhält die Obergrenze 49 (Gefährdet). AI Readiness liegt außerhalb.

67
Exzellent85-100Vorbildlich; erfüllt im Wesentlichen alle geprüften Kriterien
Gut70-84Gesund; geringfügige Lücken
Mittel50-69Akzeptabel mit deutlichen Lücken; Überprüfung empfohlen
Gefährdet30-49Erhebliche Schwächen; eine Übernahme erfordert Vorsicht
Kritisch1-29Schwerwiegende Probleme (aufgegeben, nur ein Maintainer, keine Hygiene)
VitalitätCommunity &VerbreitungNachhaltigkeit &GovernanceEngineering-QualitätSicherheitAI Readiness

Bewertungsprofil

Jede Achse ist eine Kategorie. Die Form zählt mehr als der Durchschnitt — ein gesundes Projekt füllt die gesamte Fläche, während ein Profil aus Spitzen und Kratern bedeutet, dass Stärke in einer Dimension Risiken in einer anderen verdeckt.

Eigentümerschaft

spinabotOrganisation
4 Follower1 öffentliches Reposeit Juni 2026

Dieses Repository wird von einer Organisation getragen — geteilte, rechenschaftspflichtige Trägerschaft, die jeden einzelnen Maintainer überdauern kann.

Paket-Ökosysteme

RegistryPaketVersionDownloads / MonatVersionenZuletzt veröffentlichtTags
npm@spinabot/brigade1.29.49.67758vor 5 Tagenaiagentagentsai-agentclituillmclaudeopenaigeminiollamawhatsappgatewaybrigade

Metriken nach Kategorie

Vitalität

Lebt das Projekt — wird Code geschrieben und werden Releases ausgeliefert?

77Gut · 22 % des Gesamtindex
Wie die Bewertung erfolgt
36/36Push-Aktualität — letzter Push vor 5 Tagen
8.3/36Commit-Rhythmus — 12/52 Wochen mit Commits
18/18Commit-Volumen — 500 Commits im letzten Jahr
0/10OpenSSF Scorecard: Maintained — project was created within the last 90 days. Please review its contents carefully
Verwendete Eingangsdaten
commits_last_year500
human_commit_share0,85
days_since_last_push5
active_weeks_last_year12

Release-Disziplin

100Exzellent
Wie die Bewertung erfolgt
27/27Liefert Releases aus — 56 Releases veröffentlicht
36/36Release-Aktualität — letztes Release vor 5 Tagen
27/27Release-Rhythmus — ein Release etwa alle 1,1 Tage
0/10OpenSSF Scorecard: Signed-Releases — keine Daten
Verwendete Eingangsdaten
releases_count56
latest_release_tagbrigade-v1.29.4
releases_from_tagsnein
days_since_latest_release5
mean_days_between_releases1,1
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): OpenSSF Scorecard: Signed-Releases. Die verbleibenden Gewichte wurden renormalisiert.

Community & Verbreitung

Hat das Projekt Nutzer, Downloads, Aufmerksamkeit und ein einladendes Umfeld für Beitragende?

63Mittel · 18 % des Gesamtindex
Wie die Bewertung erfolgt
38.6/60Stars — 239 Stars
10.5/25Forks — 19 Forks
0/15Watcher — 2 Watcher
Verwendete Eingangsdaten
forks19
stars239
watchers2
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Wie die Bewertung erfolgt
22.5/22.5README
22.5/22.5Lizenz — anerkannte Lizenz (MIT)
18/18CONTRIBUTING-Leitfaden
0/13.5Verhaltenskodex
0/7.2Issue-Vorlage
6.3/6.3PR-Vorlage
Verwendete Eingangsdaten
has_readmeja
has_licenseja
has_contributingja
has_issue_templatenein
has_code_of_conductnein
has_pull_request_templateja
Wie die Bewertung erfolgt
53.1/80Downloads pro Monat — 9.677 Downloads/Monat über npm
0/20Abhängige in der Registry — von diesem Ökosystem nicht ausgewiesen
Verwendete Eingangsdaten
packages@spinabot/brigade
dependents
ecosystemsnpm
total_downloads
monthly_downloads9.677
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Abhängige in der Registry. Die verbleibenden Gewichte wurden renormalisiert.

Nachhaltigkeit & Governance

Überdauert das Projekt die Menschen, die es tragen — Bus-Faktor, Reaktionsfähigkeit, Trägerschaft und Paketpflege?

56Mittel · 24 % des Gesamtindex
Wie die Bewertung erfolgt
9/54Bus-Faktor — 1 Beitragende decken die Hälfte aller Commits ab
0.6/22.5Commit-Verteilung — wichtigste beitragende Person verfasste 97 % der Commits
4.1/13.5Breite der Beitragenden — 3 Beitragende
10/10OpenSSF Scorecard: Contributors — project has 3 contributing companies or organizations -- score normalized to 10
Verwendete Eingangsdaten
bus_factor1
contributors_sampled3
top_contributor_share0,973
Wie die Bewertung erfolgt
46.8/46.8Issue-Lösungsquote — 100 % der Issues geschlossen
31.7/38.3PR-Annahme — 63/76 entschiedene PRs gemergt
0/15OpenSSF Scorecard: Code-Review — Found 0/23 approved changesets -- score normalized to 0
Verwendete Eingangsdaten
merged_prs63
open_issues0
closed_issues2
issue_closed_ratio1
closed_unmerged_prs13
Wie die Bewertung erfolgt
30/30Organisatorische Trägerschaft — im Besitz einer Organisation
0/20Verifizierte Domain
5/25Reichweite des Inhabers — 4 Follower von spinabot
2.4/25Kontohistorie — 1 öffentliche Repos, Kontoalter ca. 0 Jahre
Verwendete Eingangsdaten
followers4
owner_typeOrganization
is_verified
owner_loginspinabot
public_repos1
account_age_days43

Paketpflege

100Exzellent
Wie die Bewertung erfolgt
25/25Veröffentlicht & auflösbar — 1 Paket(e) auf npm
35/35Veröffentlichungsaktualität — letzte Veröffentlichung vor 5 Tagen
20/20Versionshistorie — 58 veröffentlichte Versionen
20/20Nicht veraltet — aktiv, nicht veraltet oder zurückgezogen
Verwendete Eingangsdaten
packages@spinabot/brigade
ecosystemsnpm
any_deprecatednein
min_days_since_publish5

Engineering-Qualität

Sind grundlegende Engineering- und Dokumentationspraktiken vorhanden?

81Gut · 20 % des Gesamtindex
Wie die Bewertung erfolgt
24/24CI-Workflows — 7 Workflow(s)
24/24Tests vorhanden
0/16Linter-Konfiguration
0/9.6Pre-Commit-Hooks
0/6.4.editorconfig
20/20OpenSSF Scorecard: CI-Tests — 7 out of 7 merged PRs checked by a CI test -- score normalized to 10
Verwendete Eingangsdaten
has_cija
has_testsja
has_editorconfignein
has_linter_confignein
has_precommit_confignein

Dokumentation

100Exzellent
Wie die Bewertung erfolgt
30/30README
25/25Dokumentationsverzeichnis
15/15Dokumentations-/Homepage-Site — https://www.brigade.spinabot.com
10/10Repository-Beschreibung
10/10Topics — 20 Topics
10/10Wiki
Verwendete Eingangsdaten
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_wikija
homepagehttps://www.brigade.spinabot.com
has_readmeja
has_docs_dirja
has_descriptionja

Sicherheit

Sind die sichtbaren Sicherheits- und Lieferkettenpraktiken belastbar, ohne ungeklärte Exposition gegenüber Hochrisikojurisdiktionen?

55Mittel · 16 % des Gesamtindex
Wie die Bewertung erfolgt
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.5Lizenz — 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 — keine Daten
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
1.5/7.5Vulnerabilities — 8 existing vulnerabilities detected
Verwendete Eingangsdaten
sourceopenssf_scorecard
checks_evaluated17
scorecard_versionv5.5.0
checks_inconclusive1
scorecard_aggregate5
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): signed_releases. Die verbleibenden Gewichte wurden renormalisiert.
Wie die Bewertung erfolgt
35/35Direkte Abhängigkeiten ohne bekannte Advisories — keine direkte Abhängigkeit trägt ein bekanntes Advisory
7.3/25Indirekte Abhängigkeiten ohne bekannte Advisories — 3 betroffen: 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/40Keine offenen Advisories — 1 Paket(e) mit Advisory seit über 90 Tagen unbehandelt; ältestes vor 94 Tagen veröffentlicht
Verwendete Eingangsdaten
sourceosv
advisories3
affected_packages3
assessed_packages535
unassessed_packages0
affected_by_severityhigh 3
direct_affected_packages0
Abgeglichen wurde die Laufzeit-Abhängigkeitshülle von npm:@spinabot/brigade@1.29.4 — das, was die Installation des veröffentlichten Pakets nach sich zieht — mit 535 Paketen. Erreichbarkeit wird nicht analysiert.

AI Readiness

Wie gut ist das Repository dafür ausgestattet, mit KI-Coding-Agenten entwickelt und gepflegt zu werden? Ein unabhängiges, experimentelles Badge — Gewicht 0,0, es wird eigenständig ausgewiesen und verändert den Gesamt-Gesundheitswert nicht.

64Mittel · 0 % des Gesamtindex
Wie die Bewertung erfolgt
45/45Agentenanweisungen — AGENTS.md, templates/workspace/AGENTS.md
0/15Maschinenlesbare Doku (llms.txt)
40/40Lesbare Commit-Historie — 85 von 85 menschlichen Commits benennen ihre Absicht (strukturierter Betreff oder erläuternder Text)
Verwendete Eingangsdaten
has_llms_txtnein
legible_history_share1
agent_instruction_filesAGENTS.md, templates/workspace/AGENTS.md
agent_instruction_max_bytes13.148
Wie die Bewertung erfolgt
0/18Bootstrap mit einem Befehl
22/22Automatisierte Tests
0/11Lint-/Format-Konfiguration
11/11Statische Typprüfung — convex/tsconfig.json, tsconfig.json
10/10Reproduzierbare Umgebung — lockfile
0/10Belegte Agentenpraxis — keine von Agenten verfassten Commits unter den letzten 100
5/8Automatisierte Wartung — Abhängigkeits-Automatisierung konfiguriert, in den erfassten Commits nicht beobachtet
3/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 3
Verwendete Eingangsdaten
has_nixnein
has_testsja
lockfilespackage-lock.json
has_dockerfilenein
typed_languageja
bootstrap_files
has_devcontainernein
has_linter_confignein
typecheck_configsconvex/tsconfig.json, tsconfig.json
agent_commit_share0
toolchain_manifests
dependency_bot_commit_share0
Wie die Bewertung erfolgt
45/45Typprüfbarer Code — TypeScript (statisch typisiert)
54.2/55Handhabbare Dateigrößen — 17/1.204 Quelldateien über 60 KB
Verwendete Eingangsdaten
primary_languageTypeScript
largest_source_bytes2.475.157
source_files_sampled1.204
oversized_source_files17
Wie die Bewertung erfolgt
0/40API-Schema (OpenAPI/GraphQL/proto)
20/20MCP-Server
0/40Lauffähige Beispiele
Verwendete Eingangsdaten
example_dirs
has_mcp_signalja
api_schema_files

Eckdaten

239GitHub-Sterne
3Mitwirkende
500Commits, letzte 12 Monate
5Tage seit letztem Push
56Releases
1Bus-Faktor
0offene Issues
npmPaket-Ökosysteme

Warnungen zur Datenerhebung

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

Weitere Details

Stern- und Fork-Verlauf 0 ★ / 19 ⇿
0Sterne
19Forks
56Releases

Wann jeder Stern und Fork hinzugefügt wurde, von GitHub erfasst und nach Tagen gruppiert. Das kumulierte Wachstum steht direkt über den täglichen Zugängen, aus denen es besteht, sodass beide gegeneinander lesbar sind: stetiger organischer Zuwachs sieht ganz anders aus als ein abrupter, kurzlebiger Ausschlag. Wo dieser Unterschied messbar ist, wird er als Wachstumsauthentizität ausgewiesen.

0481216201932026-062026-072026-07
Major 0Minor 0Patch 0
OpenSSF Scorecard 5.0 / 10
5.0Gesamtwert

Unabhängige, werkzeugneutrale Sicherheitsbewertung durch das quelloffene OpenSSF Scorecard. Jede Prüfung honoriert eine Sicherheits-Praxis, nicht das Werkzeug eines bestimmten Anbieters. Prüfungen, die Scorecard nicht ermitteln konnte, sind mit k. A. markiert und vom Sicherheitswert ausgeschlossen (nie als null gezählt).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
k. A.Signed-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
2Vulnerabilities8 existing vulnerabilities detected
Direkte Abhängigkeiten 44
RegistryPaketVersionsvorgabeManifest
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
Alle Abhängigkeiten 558

Vollständig aufgelöster Abhängigkeitssatz aus dem GitHub-Abhängigkeitsgraphen: 50 direkte und 508 indirekte (transitive) Pakete. Die transitive Hülle ist vollständig, wenn das Repository eine Lockfile eincheckt.

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

Die Installation von npm:@spinabot/brigade@1.29.4 zieht 535 Pakete nach sich, direkt und transitiv: 3 tragen bekannte Advisories, davon 0 direkte Abhängigkeiten.

PaketVersionBeziehungSchweregradAdvisoriesBehoben in
brace-expansion1.1.16indirekthoch15.0.8
brace-expansion2.1.2indirekthoch15.0.8
uuid8.3.2indirekthoch113.0.1

Ein Advisory bedeutet, dass die im Abhängigkeitsgraphen erfasste Version in den betroffenen Bereich eines Advisories fällt. Erreichbarkeit wird nicht analysiert, und der Graph enthält Entwicklungs- und Test-Pins — ein Fund kann das Werkzeug betreffen und nicht die ausgelieferte Software.

JSON-Rohbericht maschinenlesbar
{
  "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"
}

Bewertungen sind Signale, keine Garantien. Sie spiegeln öffentlich sichtbare Praxis auf GitHub wider — kein Code-Audit und keine Sicherheitsgarantie.

Fehlende Daten werden ausgeschlossen und die Gewichte neu normiert, nie als null bewertet. Die Methodik ist versioniert und offen: Metriken v1.13.0, Schema v0.27.0 — vollständige Methodik · Metriken-Wiki.

Wie ein einzelnes Ergebnis im Gesamtregister steht: aggregierte Statistikennpm.