Registro público
Informe de salud del softwareesquema 0.27.0 · métricas 1.13.0 · 2026-07-25 23:10 UTC

spinabot / brigade

Brigade — Your personal intelligence, built enterprise-grade

TypeScriptMIT★ 239 estrellas⑂ 19 forksdesde jun 2026Ver en GitHub ↗

spinabot/brigade tiene un índice de salud de 67 sobre 100, lo que lo sitúa en la banda Moderado. Su puntuación más alta es Engineering Quality (81/100) y la más baja, Security (55/100). Se actualizó por última vez hace 5 días. Una sola persona concentra la mayor parte del trabajo reciente.

67
global / 100
Moderado

Índice de salud del software

Las métricas se agrupan en categorías ponderadas sobre una escala de 1 a 100. El resultado global parte de su media; cuando la evidencia pública activa la Política de Jurisdicciones de Alto Riesgo, la calificación se ajusta y recibe el límite 49 (En riesgo). Preparación para IA queda fuera.

67
Excelente85-100Ejemplar; cumple prácticamente todos los criterios evaluados
Bueno70-84Saludable; carencias menores
Moderado50-69Aceptable con carencias notables; se recomienda revisión
En riesgo30-49Debilidades significativas; su adopción exige cautela
Crítico1-29Problemas graves (proyecto abandonado, un solo mantenedor, sin higiene)
VitalidadComunidad yAdopciónSostenibilidady GobernanzaCalidad deIngenieríaSeguridadPreparaciónpara IA

Perfil de puntuación

Cada eje es una categoría. La forma importa más que la media: un proyecto sano llena toda la figura, mientras que un perfil de picos y cráteres indica que la fortaleza en una dimensión enmascara el riesgo en otra.

Titularidad

spinabotOrganización
4 seguidores1 repositorio públicodesde jun 2026

Este repositorio está respaldado por una organización: una custodia compartida y responsable que puede sobrevivir a cualquier mantenedor individual.

Ecosistemas de paquetes

RegistroPaqueteVersiónDescargas / mesVersionesÚltima publicaciónEtiquetas
npm@spinabot/brigade1.29.4967758hace 5 díasaiagentagentsai-agentclituillmclaudeopenaigeminiollamawhatsappgatewaybrigade

Métricas por categoría

Vitalidad

¿Está vivo el proyecto: se escribe código y se publican versiones?

77Bueno · 22% del índice global
Cómo se puntúa
36/36Recencia de push — último push hace 5 días
8.3/36Cadencia de commits — 12/52 semanas con commits
18/18Volumen de commits — 500 commits en el último año
0/10OpenSSF Scorecard: Maintained — project was created within the last 90 days. Please review its contents carefully
Datos de entrada utilizados
commits_last_year500
human_commit_share0,85
days_since_last_push5
active_weeks_last_year12
Cómo se puntúa
27/27Publica versiones — 56 versiones publicadas
36/36Recencia de las versiones — última versión hace 5 días
27/27Cadencia de publicación — una versión cada ~1,1 días
0/10OpenSSF Scorecard: Signed-Releases — sin datos
Datos de entrada utilizados
releases_count56
latest_release_tagbrigade-v1.29.4
releases_from_tagsno
days_since_latest_release5
mean_days_between_releases1,1
Excluidos de la puntuación (sin datos o no aplicable): OpenSSF Scorecard: Signed-Releases. Los pesos restantes se han renormalizado.

Comunidad y Adopción

¿Tiene el proyecto usuarios, descargas, atención y unas condiciones acogedoras para quienes contribuyen?

63Moderado · 18% del índice global
Cómo se puntúa
38.6/60Estrellas — 239 estrellas
10.5/25Forks — 19 forks
0/15Observadores — 2 observadores
Datos de entrada utilizados
forks19
stars239
watchers2
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Cómo se puntúa
22.5/22.5README
22.5/22.5Licencia — licencia reconocida (MIT)
18/18Guía CONTRIBUTING
0/13.5Código de conducta
0/7.2Plantilla de issues
6.3/6.3Plantilla de PR
Datos de entrada utilizados
has_readme
has_license
has_contributing
has_issue_templateno
has_code_of_conductno
has_pull_request_template
Cómo se puntúa
53.1/80Descargas mensuales — 9677 descargas/mes en npm
0/20Dependientes en el registro — no lo informa este ecosistema
Datos de entrada utilizados
packages@spinabot/brigade
dependents
ecosystemsnpm
total_downloads
monthly_downloads9677
Excluidos de la puntuación (sin datos o no aplicable): Dependientes en el registro. Los pesos restantes se han renormalizado.

Sostenibilidad y Gobernanza

¿Sobrevivirá el proyecto a sus personas: factor bus, capacidad de respuesta, quién lo respalda y mantenimiento del paquete?

56Moderado · 24% del índice global
Cómo se puntúa
9/54Factor bus — la mitad de los commits recae en 1 contribuyente(s)
0.6/22.5Distribución de commits — el principal contribuyente firma el 97% de los commits
4.1/13.5Amplitud de contribuyentes — 3 contribuyentes
10/10OpenSSF Scorecard: Contributors — project has 3 contributing companies or organizations -- score normalized to 10
Datos de entrada utilizados
bus_factor1
contributors_sampled3
top_contributor_share0,973
Cómo se puntúa
46.8/46.8Resolución de issues — 100% de issues cerradas
31.7/38.3Aceptación de PR — 63/76 PR decididos fusionados
0/15OpenSSF Scorecard: Code-Review — Found 0/23 approved changesets -- score normalized to 0
Datos de entrada utilizados
merged_prs63
open_issues0
closed_issues2
issue_closed_ratio1
closed_unmerged_prs13
Cómo se puntúa
30/30Respaldo de la propiedad — propiedad de una organización
0/20Dominio verificado
5/25Alcance del propietario — 4 seguidores de spinabot
2.4/25Trayectoria — 1 repos públicos, cuenta de ~0 años
Datos de entrada utilizados
followers4
owner_typeOrganization
is_verified
owner_loginspinabot
public_repos1
account_age_days43
Cómo se puntúa
25/25Publicado y resoluble — 1 paquete(s) en npm
35/35Recencia de publicación — última publicación hace 5 días
20/20Historial de versiones — 58 versiones en el registro
20/20No obsoleto — activo, ni obsoleto ni retirado
Datos de entrada utilizados
packages@spinabot/brigade
ecosystemsnpm
any_deprecatedno
min_days_since_publish5

Calidad de Ingeniería

¿Existen unas prácticas mínimas de ingeniería y documentación?

81Bueno · 20% del índice global
Cómo se puntúa
24/24Flujos de trabajo de CI — 7 flujo(s) de trabajo
24/24Pruebas presentes
0/16Configuración de linter
0/9.6Hooks de pre-commit
0/6.4.editorconfig
20/20OpenSSF Scorecard: CI-Tests — 7 out of 7 merged PRs checked by a CI test -- score normalized to 10
Datos de entrada utilizados
has_ci
has_tests
has_editorconfigno
has_linter_configno
has_precommit_configno

Documentación

100Excelente
Cómo se puntúa
30/30README
25/25Directorio de documentación
15/15Sitio de documentación / página del proyecto — https://www.brigade.spinabot.com
10/10Descripción del repositorio
10/10Topics — 20 topics
10/10Wiki
Datos de entrada utilizados
topicsagent-runtime, ai, ai-crew, autonomous-agents, brigade, chatgpt, clawdbot, codex, crustacean, hermes, hermes-agent, llm, moltbot, molty, multi-agent, openclaw, self-improving-ai, brigade-agent, pride-of-agents, spinabot
has_wiki
homepagehttps://www.brigade.spinabot.com
has_readme
has_docs_dir
has_description

Seguridad

¿Son sólidas las prácticas visibles de seguridad y de cadena de suministro, sin exposición jurisdiccional de alto riesgo sin resolver?

55Moderado · 16% del índice global
Cómo se puntúa
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.5Licencia — 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 — sin datos
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
1.5/7.5Vulnerabilities — 8 existing vulnerabilities detected
Datos de entrada utilizados
sourceopenssf_scorecard
checks_evaluated17
scorecard_versionv5.5.0
checks_inconclusive1
scorecard_aggregate5
Excluidos de la puntuación (sin datos o no aplicable): signed_releases. Los pesos restantes se han renormalizado.
Cómo se puntúa
35/35Dependencias directas libres de avisos conocidos — ninguna dependencia directa tiene un aviso conocido
7.3/25Dependencias indirectas libres de avisos conocidos — 3 afectados: 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/40Sin avisos pendientes — 1 paquete(s) con avisos sin atender más allá de 90 días; el más antiguo publicado hace 94 días
Datos de entrada utilizados
sourceosv
advisories3
affected_packages3
assessed_packages535
unassessed_packages0
affected_by_severityhigh 3
direct_affected_packages0
Se cotejó el cierre de dependencias en tiempo de ejecución de npm:@spinabot/brigade@1.29.4 —lo que arrastra la instalación del paquete publicado—: 535 paquetes. No se analiza la alcanzabilidad.

Preparación para IA

¿Hasta qué punto está el repositorio preparado para desarrollarse y mantenerse con agentes de codificación de IA? Es una insignia independiente y experimental — peso 0,0, de modo que se presenta por separado y no afecta a la puntuación de salud global.

64Moderado · 0% del índice global
Cómo se puntúa
45/45Instrucciones para agentes — AGENTS.md, templates/workspace/AGENTS.md
0/15Documentación legible por máquinas (llms.txt)
40/40Historial de commits legible — 85 de 85 commits humanos declaran su intención (asunto estructurado o cuerpo explicativo)
Datos de entrada utilizados
has_llms_txtno
legible_history_share1
agent_instruction_filesAGENTS.md, templates/workspace/AGENTS.md
agent_instruction_max_bytes13.148
Cómo se puntúa
0/18Arranque con un solo comando
22/22Pruebas automatizadas
0/11Configuración de lint / formato
11/11Verificación estática de tipos — convex/tsconfig.json, tsconfig.json
10/10Entorno reproducible — lockfile
0/10Práctica demostrada con agentes — ningún commit con autoría de agente entre los últimos 100
5/8Mantenimiento automatizado — automatización de dependencias configurada, no observada en los commits muestreados
3/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 3
Datos de entrada utilizados
has_nixno
has_tests
lockfilespackage-lock.json
has_dockerfileno
typed_language
bootstrap_files
has_devcontainerno
has_linter_configno
typecheck_configsconvex/tsconfig.json, tsconfig.json
agent_commit_share0
toolchain_manifests
dependency_bot_commit_share0
Cómo se puntúa
45/45Código verificable por tipos — TypeScript (tipado estático)
54.2/55Tamaños de archivo manejables — 17/1204 archivos fuente de más de 60 KB
Datos de entrada utilizados
primary_languageTypeScript
largest_source_bytes2.475.157
source_files_sampled1204
oversized_source_files17
Cómo se puntúa
0/40Esquema de API (OpenAPI/GraphQL/proto)
20/20Servidor MCP
0/40Ejemplos ejecutables
Datos de entrada utilizados
example_dirs
has_mcp_signal
api_schema_files

Datos clave

239estrellas de GitHub
3contribuidores
500commits en los últimos 12 meses
5días desde el último push
56versiones publicadas
1factor bus
0issues abiertas
npmecosistemas de paquetes

Advertencias de recopilación de datos

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

Más detalle

Historial de estrellas y forks 0 ★ / 19 ⇿
0Estrellas
19Forks
56Versiones

Cuándo se añadió cada estrella y fork, recopilado de GitHub y agrupado por día. El crecimiento acumulado se sitúa justo encima de las adiciones diarias que lo componen, de modo que ambos se leen en conjunto: la acumulación orgánica sostenida no se parece en nada a un pico abrupto y efímero. Cuando esa diferencia es medible, se informa como autenticidad del crecimiento.

0481216201932026-062026-072026-07
Mayor 0Menor 0Parche 0
OpenSSF Scorecard 5.0 / 10
5.0agregado

Evaluación de seguridad independiente y agnóstica en cuanto a herramientas, procedente del proyecto de código abierto OpenSSF Scorecard. Cada comprobación premia una práctica de seguridad, no la herramienta de un proveedor concreto. Las comprobaciones que Scorecard no pudo determinar se marcan como n/d y se excluyen de la puntuación de seguridad (nunca se cuentan como cero).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
n/dSigned-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
2Vulnerabilities8 existing vulnerabilities detected
Dependencias directas 44
RegistroPaqueteRestricción de versiónManifiesto
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
Todas las dependencias 558

Conjunto completo de dependencias resueltas según el grafo de dependencias de GitHub: 50 paquetes directos y 508 indirectos (transitivos). El cierre transitivo es completo cuando el repositorio incluye un lockfile.

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

Instalar npm:@spinabot/brigade@1.29.4 arrastra 535 paquetes, directos y transitivos: 3 tienen avisos conocidos, de los cuales 0 son dependencias directas.

PaqueteVersiónRelaciónGravedadAvisosCorregido en
brace-expansion1.1.16indirectaalta15.0.8
brace-expansion2.1.2indirectaalta15.0.8
uuid8.3.2indirectaalta113.0.1

Un aviso significa que la versión registrada en el grafo de dependencias cae dentro del rango afectado de un aviso. No se analiza la alcanzabilidad, y el grafo incluye fijaciones de desarrollo y prueba: un hallazgo puede referirse al utillaje y no al software distribuido.

Informe JSON sin procesar legible por máquina
{
  "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"
}

Las puntuaciones son señales, no garantías. Reflejan prácticas públicamente visibles en GitHub; no son una auditoría de código ni una garantía de seguridad.

Los datos ausentes se excluyen y los pesos se renormalizan; nunca se puntúan como cero. La metodología es versionada y abierta: métricas v1.13.0, esquema v0.27.0 — metodología completa · wiki de métricas.

Cómo se sitúa un resultado dentro del registro general: estadísticas agregadasnpm.