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

bakissation / mcp-google-multi

Multi-account Google MCP server for Claude Code: Gmail, Drive, Calendar, Sheets, Docs, Contacts, Search Console, and more. ~871 tools with OAuth2 multi-account switching.

TypeScriptMIT★ 7 estrellas⑂ 9 forksdesde abr 2026Ver en GitHub ↗

bakissation/mcp-google-multi tiene un índice de salud de 68 sobre 100, lo que lo sitúa en la banda Moderado. Su puntuación más alta es Engineering Quality (86/100) y la más baja, Community & Adoption (54/100). Se actualizó por última vez hace 5 días. Una sola persona concentra la mayor parte del trabajo reciente.

68
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.

68
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

Abdelbaki BerkatiCuenta personal
2 seguidores12 repositorios públicosdesde mar 2023@IdeaCraftersHQ

Este repositorio pertenece a una cuenta personal. Un proyecto con un único propietario conlleva más riesgo de continuidad que uno respaldado por una organización.

Ecosistemas de paquetes

Métricas por categoría

Vitalidad

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

82Bueno · 22% del índice global
Cómo se puntúa
36/36Recencia de push — último push hace 5 días
5.5/36Cadencia de commits — 8/52 semanas con commits
18/18Volumen de commits — 116 commits en el último año
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 16 issue activity found in the last 90 days -- score normalized to 10
Datos de entrada utilizados
commits_last_year116
human_commit_share1
days_since_last_push5
active_weeks_last_year8
Cómo se puntúa
27/27Publica versiones — 41 versiones publicadas
36/36Recencia de las versiones — última versión hace 5 días
27/27Cadencia de publicación — una versión cada ~0 días
0/10OpenSSF Scorecard: Signed-Releases — sin datos
Datos de entrada utilizados
releases_count41
latest_release_tagv5.2.0-beta.1
releases_from_tagsno
days_since_latest_release5
mean_days_between_releases0
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?

54Moderado · 18% del índice global
Cómo se puntúa
12.6/60Estrellas — 7 estrellas
7.5/25Forks — 9 forks
0/15Observadores — 1 observadores
Datos de entrada utilizados
forks9
stars7
watchers1
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
13.5/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_conduct
has_pull_request_template
Cómo se puntúa
45.4/80Descargas mensuales — 2559 descargas/mes en npm
0/20Dependientes en el registro — no lo informa este ecosistema
Datos de entrada utilizados
packagesmcp-google-multi
dependents
ecosystemsnpm
total_downloads
monthly_downloads2559
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.8/22.5Distribución de commits — el principal contribuyente firma el 96% de los commits
5.4/13.5Amplitud de contribuyentes — 4 contribuyentes
6/10OpenSSF Scorecard: Contributors — project has 2 contributing companies or organizations -- score normalized to 6
Datos de entrada utilizados
bus_factor1
contributors_sampled4
top_contributor_share0,964
Cómo se puntúa
46.8/46.8Resolución de issues — 100% de issues cerradas
36.2/38.3Aceptación de PR — 71/75 PR decididos fusionados
0/15OpenSSF Scorecard: Code-Review — Found 1/17 approved changesets -- score normalized to 0
Datos de entrada utilizados
merged_prs71
open_issues0
closed_issues16
issue_closed_ratio1
closed_unmerged_prs4
Cómo se puntúa
10/30Respaldo de la propiedad — cuenta personal (usuario)
0/20Dominio verificado — no aplicable a cuentas de usuario
3.4/25Alcance del propietario — 2 seguidores de bakissation
14.8/25Trayectoria — 12 repos públicos, cuenta de ~3 años
Datos de entrada utilizados
followers2
owner_typeUser
is_verified
owner_loginbakissation
public_repos12
account_age_days1219
Excluidos de la puntuación (sin datos o no aplicable): Dominio verificado. Los pesos restantes se han renormalizado.
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 — 38 versiones en el registro
20/20No obsoleto — activo, ni obsoleto ni retirado
Datos de entrada utilizados
packagesmcp-google-multi
ecosystemsnpm
any_deprecatedno
min_days_since_publish5

Calidad de Ingeniería

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

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

Documentación

90Excelente
Cómo se puntúa
30/30README
25/25Directorio de documentación
15/15Sitio de documentación / página del proyecto — https://berkati.xyz/case-studies/mcp-google-multi/
10/10Descripción del repositorio
10/10Topics — 15 topics
0/10Wiki
Datos de entrada utilizados
topicsclaude, gmail, google-api, google-calendar, google-contacts, google-docs, google-drive, google-sheets, mcp, mcp-server, multi-account, oauth2, typescript, google-search-console, search-console
has_wikino
homepagehttps://berkati.xyz/case-studies/mcp-google-multi/
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?

63Moderado · 16% del índice global
Cómo se puntúa
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — sin datos
2.5/2.5CI-Tests — 17 out of 17 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 1/17 approved changesets -- score normalized to 0
1.5/2.5Contributors — project has 2 contributing companies or organizations -- score normalized to 6
10/10Dangerous-Workflow — no dangerous workflow patterns detected
0/7.5Dependency-Update-Tool — no update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5Licencia — license file detected
7.5/7.5Maintained — 30 commit(s) and 16 issue activity found in the last 90 days -- score normalized to 10
5/5Packaging — packaging workflow detected
1/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 2
4.5/5SAST — SAST tool is not run on all commits -- score normalized to 9
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_evaluated16
scorecard_versionv5.5.0
checks_inconclusive2
scorecard_aggregate5,4
Excluidos de la puntuación (sin datos o no aplicable): branch_protection, 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
0/25Dependencias indirectas libres de avisos conocidos — el conjunto transitivo no es separable de las dependencias de desarrollo y prueba en este alcance
0/40Sin avisos pendientes — ningún aviso tiene fecha de publicación
Datos de entrada utilizados
sourceosv
advisories8
affected_packages5
assessed_packages698
unassessed_packages0
affected_by_severityhigh 2, moderate 2, low 1
direct_affected_packages0
Excluidos de la puntuación (sin datos o no aplicable): Dependencias indirectas libres de avisos conocidos, Sin avisos pendientes. Los pesos restantes se han renormalizado. Se cotejaron 698 dependencias resueltas con OSV. Este repositorio no publica ningún paquete que el índice resuelva, por lo que se evaluó en su lugar el grafo de dependencias del repositorio. Ese grafo mezcla fijaciones de desarrollo y prueba con las dependencias distribuidas, de modo que solo se puntúan las dependencias declaradas en tiempo de ejecución; los hallazgos transitivos se informan como contexto y quedan excluidos de la puntuación. 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.

70Bueno · 0% del índice global
Cómo se puntúa
45/45Instrucciones para agentes — CLAUDE.md
0/15Documentación legible por máquinas (llms.txt)
40/40Historial de commits legible — 99 de 100 commits humanos declaran su intención (asunto estructurado o cuerpo explicativo)
Datos de entrada utilizados
has_llms_txtno
legible_history_share0,99
agent_instruction_filesCLAUDE.md
agent_instruction_max_bytes10.565
Cómo se puntúa
0/18Arranque con un solo comando
22/22Pruebas automatizadas
11/11Configuración de lint / formato — eslint.config.js
11/11Verificación estática de tipos — tsconfig.json
10/10Entorno reproducible — lockfile
10/10Práctica demostrada con agentes — 31 de los últimos 100 commits con autoría o crédito de agente
0/8Mantenimiento automatizado — no se observan actualizaciones automáticas de dependencias
2/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 2
Datos de entrada utilizados
has_nixno
has_tests
lockfilespackage-lock.json
has_dockerfileno
typed_language
bootstrap_files
has_devcontainerno
has_linter_config
typecheck_configstsconfig.json
agent_commit_share0,31
toolchain_manifests
dependency_bot_commit_share0
Cómo se puntúa
45/45Código verificable por tipos — TypeScript (tipado estático)
54.1/55Tamaños de archivo manejables — 1/62 archivos fuente de más de 60 KB
Datos de entrada utilizados
primary_languageTypeScript
largest_source_bytes62.838
source_files_sampled62
oversized_source_files1
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

7estrellas de GitHub
4contribuidores
116commits en los últimos 12 meses
5días desde el último push
41versiones 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
  • deps.dev does not index npm:mcp-google-multi@5.1.2; advisories assessed against the repository dependency graph instead

Más detalle

Historial de estrellas y forks 0 ★ / 9 ⇿
0Estrellas
9Forks
29Versiones

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.

0246810912026-042026-062026-07
Mayor 2Menor 5Parche 2
OpenSSF Scorecard 5.4 / 10
5.4agregado

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-23 00:47 UTC

10Binary-Artifactsno binaries found in the repo
n/dBranch-Protectioninternal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md
10CI-Tests17 out of 17 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 1/17 approved changesets -- score normalized to 0
6Contributorsproject has 2 contributing companies or organizations -- score normalized to 6
10Dangerous-Workflowno dangerous workflow patterns detected
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
10Maintained30 commit(s) and 16 issue activity found in the last 90 days -- score normalized to 10
10Packagingpackaging workflow detected
2Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 2
9SASTSAST tool is not run on all commits -- score normalized to 9
10Security-Policysecurity policy file detected
n/dSigned-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
2Vulnerabilities8 existing vulnerabilities detected
Dependencias directas 7
RegistroPaqueteRestricción de versiónManifiesto
npm@modelcontextprotocol/sdk^1.29.0package.json
npmdotenv^17.4.0package.json
npmgoogleapis^171.4.0package.json
npmmime-types^3.0.2package.json
npmopen^11.0.0package.json
npmserver-destroy^1.0.1package.json
npmzod^4.3.6package.json
Todas las dependencias 698

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

RegistroPaqueteVersiónRelación
npm@modelcontextprotocol/sdk1.29.0directa
npmdotenv17.4.2directa
npmgoogleapis171.4.0directa
npmmime-types3.0.2directa
npmopen11.0.0directa
npmserver-destroy1.0.1directa
npmzod4.3.6directa
npm@actions/core3.0.1indirecta
npm@actions/exec3.0.0indirecta
npm@actions/http-client4.0.1indirecta
npm@actions/io3.0.2indirecta
npm@babel/code-frame7.29.0indirecta
npm@babel/helper-validator-identifier7.28.5indirecta
npm@colors/colors1.5.0indirecta
npm@esbuild/aix-ppc640.28.1indirecta
npm@esbuild/android-arm0.28.1indirecta
npm@esbuild/android-arm640.28.1indirecta
npm@esbuild/android-x640.28.1indirecta
npm@esbuild/darwin-arm640.28.1indirecta
npm@esbuild/darwin-x640.28.1indirecta
npm@esbuild/freebsd-arm640.28.1indirecta
npm@esbuild/freebsd-x640.28.1indirecta
npm@esbuild/linux-arm0.28.1indirecta
npm@esbuild/linux-arm640.28.1indirecta
npm@esbuild/linux-ia320.28.1indirecta
npm@esbuild/linux-loong640.28.1indirecta
npm@esbuild/linux-mips64el0.28.1indirecta
npm@esbuild/linux-ppc640.28.1indirecta
npm@esbuild/linux-riscv640.28.1indirecta
npm@esbuild/linux-s390x0.28.1indirecta
npm@esbuild/linux-x640.28.1indirecta
npm@esbuild/netbsd-arm640.28.1indirecta
npm@esbuild/netbsd-x640.28.1indirecta
npm@esbuild/openbsd-arm640.28.1indirecta
npm@esbuild/openbsd-x640.28.1indirecta
npm@esbuild/openharmony-arm640.28.1indirecta
npm@esbuild/sunos-x640.28.1indirecta
npm@esbuild/win32-arm640.28.1indirecta
npm@esbuild/win32-ia320.28.1indirecta
npm@esbuild/win32-x640.28.1indirecta
npm@eslint-community/eslint-utils4.9.1indirecta
npm@eslint-community/regexpp4.12.2indirecta
npm@eslint/config-array0.23.5indirecta
npm@eslint/config-helpers0.5.5indirecta
npm@eslint/core1.2.1indirecta
npm@eslint/js10.0.1indirecta
npm@eslint/object-schema3.0.5indirecta
npm@eslint/plugin-kit0.7.1indirecta
npm@gar/promise-retry1.0.3indirecta
npm@hono/node-server1.19.14indirecta
npm@humanfs/core0.19.2indirecta
npm@humanfs/node0.16.8indirecta
npm@humanfs/types0.15.0indirecta
npm@humanwhocodes/module-importer1.0.1indirecta
npm@humanwhocodes/retry0.4.3indirecta
npm@isaacs/fs-minipass4.0.1indirecta
npm@isaacs/string-locale-compare1.1.0indirecta
npm@jridgewell/sourcemap-codec1.5.5indirecta
npm@npmcli/agent4.0.2indirecta
npm@npmcli/arborist9.9.0indirecta
npm@npmcli/config10.12.0indirecta
npm@npmcli/fs5.0.0indirecta
npm@npmcli/git7.0.2indirecta
npm@npmcli/installed-package-contents4.0.0indirecta
npm@npmcli/map-workspaces5.0.3indirecta
npm@npmcli/metavuln-calculator9.0.3indirecta
npm@npmcli/name-from-folder4.0.0indirecta
npm@npmcli/node-gyp5.0.0indirecta
npm@npmcli/package-json7.0.5indirecta
npm@npmcli/promise-spawn9.0.1indirecta
npm@npmcli/query5.0.0indirecta
npm@npmcli/redact4.0.0indirecta
npm@npmcli/run-script10.0.4indirecta
npm@octokit/auth-token6.0.0indirecta
npm@octokit/core7.0.6indirecta
npm@octokit/endpoint11.0.3indirecta
npm@octokit/graphql9.0.3indirecta
npm@octokit/openapi-types27.0.0indirecta
npm@octokit/plugin-paginate-rest14.0.0indirecta
npm@octokit/plugin-retry8.1.0indirecta
npm@octokit/plugin-throttling11.0.3indirecta
npm@octokit/request10.0.9indirecta
npm@octokit/request-error7.1.0indirecta
npm@octokit/types16.0.0indirecta
npm@pnpm/config.env-replace1.1.0indirecta
npm@pnpm/network.ca-file1.0.2indirecta
npm@pnpm/npm-conf3.0.2indirecta
npm@rollup/rollup-android-arm-eabi4.60.4indirecta
npm@rollup/rollup-android-arm644.60.4indirecta
npm@rollup/rollup-darwin-arm644.60.4indirecta
npm@rollup/rollup-darwin-x644.60.4indirecta
npm@rollup/rollup-freebsd-arm644.60.4indirecta
npm@rollup/rollup-freebsd-x644.60.4indirecta
npm@rollup/rollup-linux-arm-gnueabihf4.60.4indirecta
npm@rollup/rollup-linux-arm-musleabihf4.60.4indirecta
npm@rollup/rollup-linux-arm64-gnu4.60.4indirecta
npm@rollup/rollup-linux-arm64-musl4.60.4indirecta
npm@rollup/rollup-linux-loong64-gnu4.60.4indirecta
npm@rollup/rollup-linux-loong64-musl4.60.4indirecta
npm@rollup/rollup-linux-ppc64-gnu4.60.4indirecta
npm@rollup/rollup-linux-ppc64-musl4.60.4indirecta
npm@rollup/rollup-linux-riscv64-gnu4.60.4indirecta
npm@rollup/rollup-linux-riscv64-musl4.60.4indirecta
npm@rollup/rollup-linux-s390x-gnu4.60.4indirecta
npm@rollup/rollup-linux-x64-gnu4.60.4indirecta
npm@rollup/rollup-linux-x64-musl4.60.4indirecta
npm@rollup/rollup-openbsd-x644.60.4indirecta
npm@rollup/rollup-openharmony-arm644.60.4indirecta
npm@rollup/rollup-win32-arm64-msvc4.60.4indirecta
npm@rollup/rollup-win32-ia32-msvc4.60.4indirecta
npm@rollup/rollup-win32-x64-gnu4.60.4indirecta
npm@rollup/rollup-win32-x64-msvc4.60.4indirecta
npm@sec-ant/readable-stream0.4.1indirecta
npm@semantic-release/commit-analyzer13.0.1indirecta
npm@semantic-release/error4.0.0indirecta
npm@semantic-release/github12.0.8indirecta
npm@semantic-release/npm13.1.5indirecta
npm@semantic-release/release-notes-generator14.1.1indirecta
npm@sigstore/bundle4.0.0indirecta
npm@sigstore/core3.2.1indirecta
npm@sigstore/protobuf-specs0.5.1indirecta
npm@sigstore/sign4.1.1indirecta
npm@sigstore/tuf4.0.2indirecta
npm@sigstore/verify3.1.1indirecta
npm@simple-libs/stream-utils1.2.0indirecta
npm@sindresorhus/is4.6.0indirecta
npm@sindresorhus/merge-streams4.0.0indirecta
npm@tufjs/canonical-json2.0.0indirecta
npm@tufjs/models4.1.0indirecta
npm@types/chai5.2.3indirecta
npm@types/deep-eql4.0.2indirecta
npm@types/esrecurse4.3.1indirecta
npm@types/estree1.0.8indirecta
npm@types/json-schema7.0.15indirecta
npm@types/mime-types3.0.1indirecta
npm@types/node25.6.0indirecta
npm@types/normalize-package-data2.4.4indirecta
npm@types/server-destroy1.0.4indirecta
npm@typescript-eslint/eslint-plugin8.59.1indirecta
npm@typescript-eslint/parser8.59.1indirecta
npm@typescript-eslint/project-service8.59.1indirecta
npm@typescript-eslint/scope-manager8.59.1indirecta
npm@typescript-eslint/tsconfig-utils8.59.1indirecta
npm@typescript-eslint/type-utils8.59.1indirecta
npm@typescript-eslint/types8.59.1indirecta
npm@typescript-eslint/typescript-estree8.59.1indirecta
npm@typescript-eslint/utils8.59.1indirecta
npm@typescript-eslint/visitor-keys8.59.1indirecta
npm@vitest/expect3.2.6indirecta
npm@vitest/mocker3.2.6indirecta
npm@vitest/pretty-format3.2.6indirecta
npm@vitest/runner3.2.6indirecta
npm@vitest/snapshot3.2.6indirecta
npm@vitest/spy3.2.6indirecta
npm@vitest/utils3.2.6indirecta
npmabbrev4.0.0indirecta
npmaccepts2.0.0indirecta
npmacorn8.16.0indirecta
npmacorn-jsx5.3.2indirecta
npmagent-base7.1.4indirecta
npmagent-base9.0.0indirecta
npmaggregate-error5.0.0indirecta
npmajv6.15.0indirecta
npmajv8.20.0indirecta
npmajv-formats3.0.1indirecta
npmansi-escapes7.3.0indirecta
npmansi-regex5.0.1indirecta
npmansi-regex6.2.2indirecta
npmansi-styles3.2.1indirecta
npmansi-styles4.3.0indirecta
npmansi-styles6.2.3indirecta
npmany-promise1.3.0indirecta
npmaproba2.1.0indirecta
npmarchy1.0.0indirecta
npmargparse2.0.1indirecta
npmargv-formatter1.0.0indirecta
npmarray-ify1.0.0indirecta
npmassertion-error2.0.1indirecta
npmbalanced-match4.0.4indirecta
npmbase64-js1.5.1indirecta
npmbefore-after-hook4.0.0indirecta
npmbignumber.js9.3.1indirecta
npmbin-links6.0.2indirecta
npmbinary-extensions3.1.0indirecta
npmbody-parser2.2.2indirecta
npmbottleneck2.19.5indirecta
npmbrace-expansion5.0.6indirecta
npmbrace-expansion5.0.7indirecta
npmbraces3.0.3indirecta
npmbuffer-equal-constant-time1.0.1indirecta
npmbundle-name4.1.0indirecta
npmbytes3.1.2indirecta
npmcac6.7.14indirecta
npmcacache20.0.4indirecta
npmcall-bind-apply-helpers1.0.2indirecta
npmcall-bound1.0.4indirecta
npmcallsites3.1.0indirecta
npmchai5.3.3indirecta
npmchalk2.4.2indirecta
npmchalk4.1.2indirecta
npmchalk5.6.2indirecta
npmchar-regex1.0.2indirecta
npmcheck-error2.1.3indirecta
npmchownr3.0.0indirecta
npmci-info4.4.0indirecta
npmcidr-regex5.0.5indirecta
npmclean-stack5.3.0indirecta
npmcli-highlight2.1.11indirecta
npmcli-table30.6.5indirecta
npmcliui7.0.4indirecta
npmcliui9.0.1indirecta
npmcmd-shim8.0.0indirecta
npmcolor-convert1.9.3indirecta
npmcolor-convert2.0.1indirecta
npmcolor-name1.1.3indirecta
npmcolor-name1.1.4indirecta
npmcommon-ancestor-path2.0.0indirecta
npmcompare-func2.0.0indirecta
npmconfig-chain1.1.13indirecta
npmcontent-disposition1.1.0indirecta
npmcontent-type1.0.5indirecta
npmcontent-type2.0.0indirecta
npmconventional-changelog-angular8.3.1indirecta
npmconventional-changelog-writer8.4.0indirecta
npmconventional-commits-filter5.0.0indirecta
npmconventional-commits-parser6.4.0indirecta
npmconvert-hrtime5.0.0indirecta
npmcookie0.7.2indirecta
npmcookie-signature1.2.2indirecta
npmcore-util-is1.0.3indirecta
npmcors2.8.6indirecta
npmcosmiconfig9.0.1indirecta
npmcross-spawn7.0.6indirecta
npmcrypto-random-string4.0.0indirecta
npmcssesc3.0.0indirecta
npmdata-uri-to-buffer4.0.1indirecta
npmdebug4.4.3indirecta
npmdeep-eql5.0.2indirecta
npmdeep-extend0.6.0indirecta
npmdeep-is0.1.4indirecta
npmdefault-browser5.5.0indirecta
npmdefault-browser-id5.0.1indirecta
npmdefine-lazy-prop3.0.0indirecta
npmdepd2.0.0indirecta
npmdiff8.0.4indirecta
npmdir-glob3.0.1indirecta
npmdot-prop5.3.0indirecta
npmdunder-proto1.0.1indirecta
npmduplexer20.1.4indirecta
npmecdsa-sig-formatter1.0.11indirecta
npmee-first1.1.1indirecta
npmemoji-regex10.6.0indirecta
npmemoji-regex8.0.0indirecta
npmemojilib2.4.0indirecta
npmencodeurl2.0.0indirecta
npmenv-ci11.2.0indirecta
npmenv-paths2.2.1indirecta
npmenvironment1.1.0indirecta
npmerror-ex1.3.4indirecta
npmes-define-property1.0.1indirecta
npmes-errors1.3.0indirecta
npmes-module-lexer1.7.0indirecta
npmes-object-atoms1.1.1indirecta
npmesbuild0.28.1indirecta
npmescalade3.2.0indirecta
npmescape-html1.0.3indirecta
npmescape-string-regexp1.0.5indirecta
npmescape-string-regexp4.0.0indirecta
npmescape-string-regexp5.0.0indirecta
npmeslint10.2.1indirecta
npmeslint-scope9.1.2indirecta
npmeslint-visitor-keys3.4.3indirecta
npmeslint-visitor-keys5.0.1indirecta
npmespree11.2.0indirecta
npmesquery1.7.0indirecta
npmesrecurse4.3.0indirecta
npmestraverse5.3.0indirecta
npmestree-walker3.0.3indirecta
npmesutils2.0.3indirecta
npmetag1.8.1indirecta
npmeventsource3.0.7indirecta
npmeventsource-parser3.0.8indirecta
npmexeca8.0.1indirecta
npmexeca9.6.1indirecta
npmexpect-type1.3.0indirecta
npmexponential-backoff3.1.3indirecta
npmexpress5.2.1indirecta
npmexpress-rate-limit8.5.1indirecta
npmextend3.0.2indirecta
npmfast-content-type-parse3.0.0indirecta
npmfast-deep-equal3.1.3indirecta
npmfast-json-stable-stringify2.1.0indirecta
npmfast-levenshtein2.0.6indirecta
npmfast-uri3.1.2indirecta
npmfastest-levenshtein1.0.16indirecta
npmfdir6.5.0indirecta
npmfetch-blob3.2.0indirecta
npmfigures2.0.0indirecta
npmfigures6.1.0indirecta
npmfile-entry-cache8.0.0indirecta
npmfill-range7.1.1indirecta
npmfinalhandler2.1.1indirecta
npmfind-up2.1.0indirecta
npmfind-up5.0.0indirecta
npmfind-up-simple1.0.1indirecta
npmfind-versions6.0.0indirecta
npmflat-cache4.0.1indirecta
npmflatted3.4.2indirecta
npmformdata-polyfill4.0.10indirecta
npmforwarded0.2.0indirecta
npmfresh2.0.0indirecta
npmfs-extra11.3.5indirecta
npmfs-minipass3.0.3indirecta
npmfsevents2.3.3indirecta
npmfunction-bind1.1.2indirecta
npmfunction-timeout1.0.2indirecta
npmgaxios7.1.4indirecta
npmgcp-metadata8.1.2indirecta
npmget-caller-file2.0.5indirecta
npmget-east-asian-width1.6.0indirecta
npmget-intrinsic1.3.0indirecta
npmget-proto1.0.1indirecta
npmget-stream6.0.1indirecta
npmget-stream8.0.1indirecta
npmget-stream9.0.1indirecta
npmgit-log-parser1.2.1indirecta
npmglob13.0.6indirecta
npmglob-parent6.0.2indirecta
npmgoogle-auth-library10.6.2indirecta
npmgoogle-logging-utils1.1.3indirecta
npmgoogleapis-common8.0.1indirecta
npmgopd1.2.0indirecta
npmgraceful-fs4.2.10indirecta
npmgraceful-fs4.2.11indirecta
npmhandlebars4.7.9indirecta
npmhas-flag3.0.0indirecta
npmhas-flag4.0.0indirecta
npmhas-symbols1.1.0indirecta
npmhasown2.0.3indirecta
npmhighlight.js10.7.3indirecta
npmhono4.12.25indirecta
npmhook-std4.0.0indirecta
npmhosted-git-info7.0.2indirecta
npmhosted-git-info9.0.3indirecta
npmhttp-cache-semantics4.2.0indirecta
npmhttp-errors2.0.1indirecta
npmhttp-proxy-agent7.0.2indirecta
npmhttp-proxy-agent9.0.0indirecta
npmhttps-proxy-agent7.0.6indirecta
npmhttps-proxy-agent9.0.0indirecta
npmhuman-signals5.0.0indirecta
npmhuman-signals8.0.1indirecta
npmiconv-lite0.7.2indirecta
npmignore5.3.2indirecta
npmignore7.0.5indirecta
npmignore-walk8.0.0indirecta
npmimport-fresh3.3.1indirecta
npmimport-from-esm2.0.0indirecta
npmimport-meta-resolve4.2.0indirecta
npmimurmurhash0.1.4indirecta
npmindent-string5.0.0indirecta
npmindex-to-position1.2.0indirecta
npminherits2.0.4indirecta
npmini1.3.8indirecta
npmini6.0.0indirecta
npminit-package-json8.2.5indirecta
npmip-address10.2.0indirecta
npmipaddr.js1.9.1indirecta
npmis-arrayish0.2.1indirecta
npmis-cidr6.0.4indirecta
npmis-docker3.0.0indirecta
npmis-extglob2.1.1indirecta
npmis-fullwidth-code-point3.0.0indirecta
npmis-glob4.0.3indirecta
npmis-in-ssh1.0.0indirecta
npmis-inside-container1.0.0indirecta
npmis-number7.0.0indirecta
npmis-obj2.0.0indirecta
npmis-plain-obj4.1.0indirecta
npmis-promise4.0.0indirecta
npmis-stream3.0.0indirecta
npmis-stream4.0.1indirecta
npmis-unicode-supported2.1.0indirecta
npmis-wsl3.1.1indirecta
npmisarray1.0.0indirecta
npmisexe2.0.0indirecta
npmisexe4.0.0indirecta
npmissue-parser7.0.2indirecta
npmjava-properties1.0.2indirecta
npmjose6.2.3indirecta
npmjs-tokens4.0.0indirecta
npmjs-tokens9.0.1indirecta
npmjs-yaml4.3.0indirecta
npmjson-bigint1.0.0indirecta
npmjson-buffer3.0.1indirecta
npmjson-parse-better-errors1.0.2indirecta
npmjson-parse-even-better-errors2.3.1indirecta
npmjson-parse-even-better-errors5.0.0indirecta
npmjson-schema-traverse0.4.1indirecta
npmjson-schema-traverse1.0.0indirecta
npmjson-schema-typed8.0.2indirecta
npmjson-stable-stringify-without-jsonify1.0.1indirecta
npmjson-stringify-nice1.1.4indirecta
npmjson-with-bigint3.5.8indirecta
npmjsonfile6.2.1indirecta
npmjsonparse1.3.1indirecta
npmjust-diff6.0.2indirecta
npmjust-diff-apply5.5.0indirecta
npmjwa2.0.1indirecta
npmjws4.0.1indirecta
npmkeyv4.5.4indirecta
npmlevn0.4.1indirecta
npmlibnpmaccess10.0.3indirecta
npmlibnpmdiff8.1.11indirecta
npmlibnpmexec10.3.1indirecta
npmlibnpmfund7.0.25indirecta
npmlibnpmorg8.0.1indirecta
npmlibnpmpack9.1.11indirecta
npmlibnpmpublish11.2.0indirecta
npmlibnpmsearch9.0.1indirecta
npmlibnpmteam8.0.2indirecta
npmlibnpmversion8.0.4indirecta
npmlines-and-columns1.2.4indirecta
npmload-json-file4.0.0indirecta
npmlocate-path2.0.0indirecta
npmlocate-path6.0.0indirecta
npmlodash-es4.18.1indirecta
npmlodash.capitalize4.2.1indirecta
npmlodash.escaperegexp4.1.2indirecta
npmlodash.isplainobject4.0.6indirecta
npmlodash.isstring4.0.1indirecta
npmlodash.uniqby4.7.0indirecta
npmloupe3.2.1indirecta
npmlru-cache10.4.3indirecta
npmlru-cache11.5.0indirecta
npmlru-cache11.5.1indirecta
npmmagic-string0.30.21indirecta
npmmake-asynchronous1.1.0indirecta
npmmake-fetch-happen15.0.6indirecta
npmmarked15.0.12indirecta
npmmarked-terminal7.3.0indirecta
npmmath-intrinsics1.1.0indirecta
npmmedia-typer1.1.0indirecta
npmmeow13.2.0indirecta
npmmerge-descriptors2.0.0indirecta
npmmerge-stream2.0.0indirecta
npmmicromatch4.0.8indirecta
npmmime4.1.0indirecta
npmmime-db1.54.0indirecta
npmmimic-fn4.0.0indirecta
npmminimatch10.2.5indirecta
npmminimist1.2.8indirecta
npmminipass3.3.6indirecta
npmminipass7.1.3indirecta
npmminipass-collect2.0.1indirecta
npmminipass-fetch5.0.2indirecta
npmminipass-flush1.0.6indirecta
npmminipass-pipeline1.2.4indirecta
npmminipass-sized2.0.0indirecta
npmminizlib3.1.0indirecta
npmms2.1.3indirecta
npmmute-stream3.0.0indirecta
npmmz2.7.0indirecta
npmnanoid3.3.12indirecta
npmnatural-compare1.4.0indirecta
npmnegotiator1.0.0indirecta
npmneo-async2.6.2indirecta
npmnerf-dart1.0.0indirecta
npmnode-domexception1.0.0indirecta
npmnode-emoji2.2.0indirecta
npmnode-fetch3.3.2indirecta
npmnode-gyp12.4.0indirecta
npmnopt9.0.0indirecta
npmnormalize-package-data6.0.2indirecta
npmnormalize-package-data8.0.0indirecta
npmnormalize-url9.0.1indirecta
npmnpm11.18.0indirecta
npmnpm-audit-report7.0.0indirecta
npmnpm-bundled5.0.0indirecta
npmnpm-install-checks8.0.0indirecta
npmnpm-normalize-package-bin5.0.0indirecta
npmnpm-package-arg13.0.2indirecta
npmnpm-packlist10.0.4indirecta
npmnpm-pick-manifest11.0.3indirecta
npmnpm-profile12.0.2indirecta
npmnpm-registry-fetch19.1.1indirecta
npmnpm-run-path5.3.0indirecta
npmnpm-run-path6.0.0indirecta
npmnpm-user-validate4.0.0indirecta
npmobject-assign4.1.1indirecta
npmobject-inspect1.13.4indirecta
npmon-finished2.4.1indirecta
npmonce1.4.0indirecta
npmonetime6.0.0indirecta
npmoptionator0.9.4indirecta
npmp-each-series3.0.0indirecta
npmp-event6.0.1indirecta
npmp-filter4.1.0indirecta
npmp-limit1.3.0indirecta
npmp-limit3.1.0indirecta
npmp-locate2.0.0indirecta
npmp-locate5.0.0indirecta
npmp-map7.0.4indirecta
npmp-reduce3.0.0indirecta
npmp-timeout6.1.4indirecta
npmp-try1.0.0indirecta
npmpacote21.5.1indirecta
npmparent-module1.0.1indirecta
npmparse-conflict-json5.0.1indirecta
npmparse-json4.0.0indirecta
npmparse-json5.2.0indirecta
npmparse-json8.3.0indirecta
npmparse-ms4.0.0indirecta
npmparse55.1.1indirecta
npmparse56.0.1indirecta
npmparse5-htmlparser2-tree-adapter6.0.1indirecta
npmparseurl1.3.3indirecta
npmpath-exists3.0.0indirecta
npmpath-exists4.0.0indirecta
npmpath-key3.1.1indirecta
npmpath-key4.0.0indirecta
npmpath-scurry2.0.2indirecta
npmpath-to-regexp8.4.2indirecta
npmpath-type4.0.0indirecta
npmpathe2.0.3indirecta
npmpathval2.0.1indirecta
npmpicocolors1.1.1indirecta
npmpicomatch2.3.2indirecta
npmpicomatch4.0.4indirecta
npmpify3.0.0indirecta
npmpkce-challenge5.0.1indirecta
npmpkg-conf2.1.0indirecta
npmpostcss8.5.15indirecta
npmpostcss-selector-parser7.1.4indirecta
npmpowershell-utils0.1.0indirecta
npmprelude-ls1.2.1indirecta
npmpretty-ms9.3.0indirecta
npmproc-log6.1.0indirecta
npmprocess-nextick-args2.0.1indirecta
npmproggy4.0.0indirecta
npmpromise-all-reject-late1.0.1indirecta
npmpromise-call-limit3.0.2indirecta
npmpromzard3.0.1indirecta
npmproto-list1.2.4indirecta
npmproxy-addr2.0.7indirecta
npmpunycode2.3.1indirecta
npmqrcode-terminal0.12.0indirecta
npmqs6.15.2indirecta
npmrange-parser1.2.1indirecta
npmraw-body3.0.2indirecta
npmrc1.2.8indirecta
npmread5.0.1indirecta
npmread-cmd-shim6.0.0indirecta
npmread-package-up11.0.0indirecta
npmread-package-up12.0.0indirecta
npmread-pkg10.1.0indirecta
npmread-pkg9.0.1indirecta
npmreadable-stream2.3.8indirecta
npmregistry-auth-token5.1.1indirecta
npmrequire-directory2.1.1indirecta
npmrequire-from-string2.0.2indirecta
npmresolve-from4.0.0indirecta
npmresolve-from5.0.0indirecta
npmrollup4.60.4indirecta
npmrouter2.2.0indirecta
npmrun-applescript7.1.0indirecta
npmsafe-buffer5.1.2indirecta
npmsafe-buffer5.2.1indirecta
npmsafer-buffer2.1.2indirecta
npmsemantic-release25.0.3indirecta
npmsemver7.7.4indirecta
npmsemver7.8.5indirecta
npmsemver-regex4.0.5indirecta
npmsend1.2.1indirecta
npmserve-static2.2.1indirecta
npmsetprototypeof1.2.0indirecta
npmshebang-command2.0.0indirecta
npmshebang-regex3.0.0indirecta
npmside-channel1.1.0indirecta
npmside-channel-list1.0.1indirecta
npmside-channel-map1.0.1indirecta
npmside-channel-weakmap1.0.2indirecta
npmsiginfo2.0.0indirecta
npmsignal-exit4.1.0indirecta
npmsignale1.4.0indirecta
npmsigstore4.1.1indirecta
npmskin-tone2.0.0indirecta
npmsmart-buffer4.2.0indirecta
npmsocks2.8.9indirecta
npmsocks-proxy-agent8.0.5indirecta
npmsource-map0.6.1indirecta
npmsource-map-js1.2.1indirecta
npmspawn-error-forwarder1.0.0indirecta
npmspdx-correct3.2.0indirecta
npmspdx-exceptions2.5.0indirecta
npmspdx-expression-parse3.0.1indirecta
npmspdx-expression-parse4.0.0indirecta
npmspdx-license-ids3.0.23indirecta
npmsplit21.0.0indirecta
npmssri13.0.1indirecta
npmstackback0.0.2indirecta
npmstatuses2.0.2indirecta
npmstd-env3.10.0indirecta
npmstream-combiner21.1.1indirecta
npmstring-width4.2.3indirecta
npmstring-width7.2.0indirecta
npmstring_decoder1.1.1indirecta
npmstrip-ansi6.0.1indirecta
npmstrip-ansi7.2.0indirecta
npmstrip-bom3.0.0indirecta
npmstrip-final-newline3.0.0indirecta
npmstrip-final-newline4.0.0indirecta
npmstrip-json-comments2.0.1indirecta
npmstrip-literal3.1.0indirecta
npmsuper-regex1.1.0indirecta
npmsupports-color10.2.2indirecta
npmsupports-color5.5.0indirecta
npmsupports-color7.2.0indirecta
npmsupports-hyperlinks3.2.0indirecta
npmtagged-tag1.0.0indirecta
npmtar7.5.19indirecta
npmtemp-dir3.0.0indirecta
npmtempy3.2.0indirecta
npmtext-table0.2.0indirecta
npmthenify3.3.1indirecta
npmthenify-all1.6.0indirecta
npmthrough22.0.5indirecta
npmtime-span5.1.0indirecta
npmtiny-relative-date2.0.2indirecta
npmtinybench2.9.0indirecta
npmtinyexec0.3.2indirecta
npmtinyglobby0.2.16indirecta
npmtinyglobby0.2.17indirecta
npmtinypool1.1.1indirecta
npmtinyrainbow2.0.0indirecta
npmtinyspy4.0.4indirecta
npmto-regex-range5.0.1indirecta
npmtoidentifier1.0.1indirecta
npmtraverse0.6.8indirecta
npmtreeverse3.0.0indirecta
npmts-api-utils2.5.0indirecta
npmtsx4.23.1indirecta
npmtuf-js4.1.0indirecta
npmtunnel0.0.6indirecta
npmtype-check0.4.0indirecta
npmtype-fest1.4.0indirecta
npmtype-fest2.19.0indirecta
npmtype-fest4.41.0indirecta
npmtype-fest5.6.0indirecta
npmtype-is2.0.1indirecta
npmtypescript6.0.3indirecta
npmtypescript-eslint8.59.1indirecta
npmuglify-js3.19.3indirecta
npmundici6.27.0indirecta
npmundici7.28.0indirecta
npmundici-types7.19.2indirecta
npmunicode-emoji-modifier-base1.0.0indirecta
npmunicorn-magic0.1.0indirecta
npmunicorn-magic0.3.0indirecta
npmunicorn-magic0.4.0indirecta
npmunique-string3.0.0indirecta
npmuniversal-user-agent7.0.3indirecta
npmuniversalify2.0.1indirecta
npmunpipe1.0.0indirecta
npmuri-js4.4.1indirecta
npmurl-join5.0.0indirecta
npmurl-template2.0.8indirecta
npmutil-deprecate1.0.2indirecta
npmvalidate-npm-package-license3.0.4indirecta
npmvalidate-npm-package-name7.0.2indirecta
npmvary1.1.2indirecta
npmvite7.3.6indirecta
npmvite-node3.2.4indirecta
npmvitest3.2.6indirecta
npmwalk-up-path4.0.0indirecta
npmweb-streams-polyfill3.3.3indirecta
npmweb-worker1.5.0indirecta
npmwhich2.0.2indirecta
npmwhich6.0.1indirecta
npmwhy-is-node-running2.3.0indirecta
npmword-wrap1.2.5indirecta
npmwordwrap1.0.0indirecta
npmwrap-ansi7.0.0indirecta
npmwrap-ansi9.0.2indirecta
npmwrappy1.0.2indirecta
npmwrite-file-atomic7.0.1indirecta
npmwsl-utils0.3.1indirecta
npmxtend4.0.2indirecta
npmy18n5.0.8indirecta
npmyallist4.0.0indirecta
npmyallist5.0.0indirecta
npmyargs16.2.0indirecta
npmyargs18.0.0indirecta
npmyargs-parser20.2.9indirecta
npmyargs-parser22.0.0indirecta
npmyocto-queue0.1.0indirecta
npmyoctocolors2.1.2indirecta
npmzod-to-json-schema3.25.2indirecta
Avisos de dependencias 5

Este repositorio no publica ningún paquete que el índice resuelva, así que se evaluó su propio grafo de dependencias — 698 paquetes, que incluyen también fijaciones de desarrollo y prueba que nunca se distribuyen: 5 tienen avisos conocidos, de los cuales 0 son directas.

PaqueteVersiónRelaciónGravedadAvisosCorregido en
brace-expansion5.0.6indirectaalta15.0.7
fast-uri3.1.2indirectaalta24.1.1
@hono/node-server1.19.14indirectamoderada12.0.5
hono4.12.25indirectamoderada34.12.27
body-parser2.2.2indirectabaja12.3.0

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": [
        "claude",
        "gmail",
        "google-api",
        "google-calendar",
        "google-contacts",
        "google-docs",
        "google-drive",
        "google-sheets",
        "mcp",
        "mcp-server",
        "multi-account",
        "oauth2",
        "typescript",
        "google-search-console",
        "search-console"
      ],
      "is_fork": false,
      "size_kb": 585,
      "has_wiki": false,
      "homepage": "https://berkati.xyz/case-studies/mcp-google-multi/",
      "languages": {
        "JavaScript": 6210,
        "TypeScript": 1408418
      },
      "pushed_at": "2026-07-17T17:49:13Z",
      "created_at": "2026-04-04T11:10:38Z",
      "owner_type": "User",
      "updated_at": "2026-07-17T17:46:01Z",
      "description": "Multi-account Google MCP server for Claude Code: Gmail, Drive, Calendar, Sheets, Docs, Contacts, Search Console, and more. ~871 tools with OAuth2 multi-account switching.",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "dev",
      "license_spdx_raw": "MIT",
      "primary_language": "TypeScript",
      "significant_languages": [
        "TypeScript"
      ]
    },
    "owner": {
      "blog": null,
      "name": "Abdelbaki Berkati",
      "type": "User",
      "login": "bakissation",
      "company": "@IdeaCraftersHQ ",
      "location": null,
      "followers": 2,
      "avatar_url": "https://avatars.githubusercontent.com/u/128464105?v=4",
      "created_at": "2023-03-21T08:23:59Z",
      "is_verified": null,
      "public_repos": 12,
      "account_age_days": 1219
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v5.2.0-beta.1",
          "kind": "prerelease",
          "published_at": "2026-07-17T17:10:25Z"
        },
        {
          "tag": "v5.2.0-alpha.7",
          "kind": "prerelease",
          "published_at": "2026-07-17T17:07:16Z"
        },
        {
          "tag": "v5.2.0-alpha.6",
          "kind": "prerelease",
          "published_at": "2026-07-17T17:05:23Z"
        },
        {
          "tag": "v5.2.0-alpha.5",
          "kind": "prerelease",
          "published_at": "2026-07-17T16:48:20Z"
        },
        {
          "tag": "v5.2.0-alpha.4",
          "kind": "prerelease",
          "published_at": "2026-07-17T16:25:28Z"
        },
        {
          "tag": "v5.2.0-alpha.3",
          "kind": "prerelease",
          "published_at": "2026-07-17T16:18:05Z"
        },
        {
          "tag": "v5.2.0-alpha.2",
          "kind": "prerelease",
          "published_at": "2026-07-17T16:12:55Z"
        },
        {
          "tag": "v5.2.0-alpha.1",
          "kind": "prerelease",
          "published_at": "2026-07-17T16:08:36Z"
        },
        {
          "tag": "v5.1.3-alpha.1",
          "kind": "prerelease",
          "published_at": "2026-07-17T15:26:49Z"
        },
        {
          "tag": "v5.1.2",
          "kind": "patch",
          "published_at": "2026-07-17T15:13:59Z"
        },
        {
          "tag": "v5.1.2-beta.1",
          "kind": "prerelease",
          "published_at": "2026-07-17T15:11:27Z"
        },
        {
          "tag": "v5.1.2-alpha.1",
          "kind": "prerelease",
          "published_at": "2026-07-17T15:08:40Z"
        },
        {
          "tag": "v5.1.1",
          "kind": "patch",
          "published_at": "2026-07-16T13:46:17Z"
        },
        {
          "tag": "v5.1.1-beta.1",
          "kind": "prerelease",
          "published_at": "2026-07-16T13:40:38Z"
        },
        {
          "tag": "v5.1.1-alpha.2",
          "kind": "prerelease",
          "published_at": "2026-07-16T13:36:14Z"
        },
        {
          "tag": "v5.1.1-alpha.1",
          "kind": "prerelease",
          "published_at": "2026-07-16T13:29:24Z"
        },
        {
          "tag": "v5.1.0",
          "kind": "minor",
          "published_at": "2026-06-11T20:50:14Z"
        },
        {
          "tag": "v5.1.0-beta.1",
          "kind": "prerelease",
          "published_at": "2026-06-11T20:30:54Z"
        },
        {
          "tag": "v5.1.0-alpha.6",
          "kind": "prerelease",
          "published_at": "2026-06-11T20:23:19Z"
        },
        {
          "tag": "v5.1.0-alpha.5",
          "kind": "prerelease",
          "published_at": "2026-06-11T20:13:19Z"
        },
        {
          "tag": "v5.1.0-alpha.4",
          "kind": "prerelease",
          "published_at": "2026-06-11T19:46:55Z"
        },
        {
          "tag": "v5.1.0-alpha.3",
          "kind": "prerelease",
          "published_at": "2026-06-11T18:56:30Z"
        },
        {
          "tag": "v5.1.0-alpha.2",
          "kind": "prerelease",
          "published_at": "2026-06-11T13:49:06Z"
        },
        {
          "tag": "v5.1.0-alpha.1",
          "kind": "prerelease",
          "published_at": "2026-06-11T13:21:48Z"
        },
        {
          "tag": "v5.0.0",
          "kind": "major",
          "published_at": "2026-05-22T15:17:50Z"
        },
        {
          "tag": "v5.0.0-beta.1",
          "kind": "prerelease",
          "published_at": "2026-05-22T15:14:42Z"
        },
        {
          "tag": "v5.0.0-alpha.1",
          "kind": "prerelease",
          "published_at": "2026-05-22T15:06:29Z"
        },
        {
          "tag": "v4.5.0-alpha.3",
          "kind": "prerelease",
          "published_at": "2026-05-22T14:01:46Z"
        },
        {
          "tag": "v4.5.0-alpha.2",
          "kind": "prerelease",
          "published_at": "2026-05-22T13:51:25Z"
        },
        {
          "tag": "v4.5.0-alpha.1",
          "kind": "prerelease",
          "published_at": "2026-05-21T20:47:25Z"
        },
        {
          "tag": "v4.3.0-alpha.3",
          "kind": "prerelease",
          "published_at": "2026-05-21T20:25:45Z"
        },
        {
          "tag": "v4.4.0",
          "kind": "minor",
          "published_at": "2026-05-21T19:53:15Z"
        },
        {
          "tag": "v4.3.0-beta.2",
          "kind": "prerelease",
          "published_at": "2026-05-21T19:51:07Z"
        },
        {
          "tag": "v4.3.0-alpha.2",
          "kind": "prerelease",
          "published_at": "2026-05-21T19:18:25Z"
        },
        {
          "tag": "v4.3.0",
          "kind": "minor",
          "published_at": "2026-05-20T21:48:40Z"
        },
        {
          "tag": "v4.3.0-beta.1",
          "kind": "prerelease",
          "published_at": "2026-05-20T21:44:04Z"
        },
        {
          "tag": "v4.3.0-alpha.1",
          "kind": "prerelease",
          "published_at": "2026-05-20T21:39:32Z"
        },
        {
          "tag": "v4.2.0",
          "kind": "minor",
          "published_at": "2026-05-20T15:19:22Z"
        },
        {
          "tag": "v4.1.0",
          "kind": "minor",
          "published_at": "2026-05-20T15:19:20Z"
        },
        {
          "tag": "v4.0.0",
          "kind": "major",
          "published_at": "2026-05-11T20:59:31Z"
        },
        {
          "tag": "v3.0.1",
          "kind": "patch",
          "published_at": "2026-04-29T22:09:29Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "8ab04c738e76412419bf3f7bf86742bc4583efb0",
          "body": "docs: invite v6 feedback issues in README and CONTRIBUTING",
          "is_bot": false,
          "headline": "Merge pull request #90 from bakissation/docs/v6-feedback-invite",
          "author_name": "Abdelbaki Berkati",
          "author_login": "bakissation",
          "committed_at": "2026-07-17T17:45:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "11ff69273c58060ae601ba0d39a063393a80bb10",
          "body": "Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: invite v6 feedback issues in README and CONTRIBUTING",
          "author_name": "Abdelbaki Berkati",
          "author_login": "bakissation",
          "committed_at": "2026-07-17T17:44:20Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "3f0456cb12299f726b376890f4b9824b7fc61100",
          "body": "fix: first-run DX and error-envelope polish",
          "is_bot": false,
          "headline": "Merge pull request #88 from bakissation/fix/dx-sweep",
          "author_name": "Abdelbaki Berkati",
          "author_login": "bakissation",
          "committed_at": "2026-07-17T17:06:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3b0e8f027db2ba09e22ffa789d377086c35a14f2",
          "body": "Auth flow: validate OAuth client credentials before opening the\nbrowser, always print the authorization URL (open() silently no-ops on\nheadless sessions), CLI-correct usage strings, and a next-step hint on\nsuccess. Invalid GOOGLE_PROFILE values warn on stderr instead of\nsilently coercing to read-onl\n[…]\nutor\nerror envelopes now carry the account field. config check summarizes\ndisabled write tools per service instead of dumping hundreds of names.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: first-run DX and error-envelope polish",
          "author_name": "Abdelbaki Berkati",
          "author_login": "bakissation",
          "committed_at": "2026-07-17T17:05:15Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "61d371c894450a46713be2c6266fc52e737c1a06",
          "body": "feat: gmail read fidelity — HTML extraction, threading headers, richer attachments",
          "is_bot": false,
          "headline": "Merge pull request #87 from bakissation/feat/gmail-read-fidelity",
          "author_name": "Abdelbaki Berkati",
          "author_login": "bakissation",
          "committed_at": "2026-07-17T17:04:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1df9418e9ad3a34dfa2e72d1b7c843955135f425",
          "body": "…ding\n\n- decodeBody: collect all text leaves, prefer text/plain anywhere over\n  text/html, concatenate sequential plain parts (forwarded messages), and\n  convert HTML-only bodies to readable text via a new htmlToText helper;\n  the 50k body cap now applies after conversion\n- parseMessage: surface bod\n[…]\n parent's real RFC 5322 Message-ID and References chain so replies\n  thread correctly outside Gmail; gmail_create_draft gains\n  replyToMessageId\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: improve Gmail read fidelity, search throughput, and reply threa…",
          "author_name": "Abdelbaki Berkati",
          "author_login": "bakissation",
          "committed_at": "2026-07-17T16:59:22Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "31299cf16b43acb7dab516b19d1cae36c700007d",
          "body": "feat: summary-first Docs reads with heading-addressable sections",
          "is_bot": false,
          "headline": "Merge pull request #86 from bakissation/feat/docs-section-reads",
          "author_name": "Abdelbaki Berkati",
          "author_login": "bakissation",
          "committed_at": "2026-07-17T16:47:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "28a93f0e24309dffbe6d9de92de19a9422bfbb0c",
          "body": "…ng, and tabId\n\ndocs_read now returns a heading index built from namedStyleType (TITLE,\nHEADING_1..6) alongside the plain text, caps text via capText with\nmaxChars (default 50000) and offset like drive_read, reads a single\nsection by heading (case-insensitive exact then substring, ambiguous\nmatches \n[…]\nId errors with the\navailable tabs). Heading spans run to the next same-or-higher heading\nor the document end, including table-nested paragraphs.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: summary-first docs_read with heading index, section reads, pagi…",
          "author_name": "Abdelbaki Berkati",
          "author_login": "bakissation",
          "committed_at": "2026-07-17T16:43:55Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "35111759b7f6e69f5bce29da0f7ebc2075340666",
          "body": "docs: rewrite README as a landing page, split reference into docs/",
          "is_bot": false,
          "headline": "Merge pull request #85 from bakissation/docs/readme-landing",
          "author_name": "Abdelbaki Berkati",
          "author_login": "bakissation",
          "committed_at": "2026-07-17T16:43:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "944d1f4a7da2febc2cb1951d48d5139015256928",
          "body": "README keeps three blocks only — what it is, novice-first npm quick\nsetup, and maintainership/credits. Configuration, write-control,\nGoogle Cloud setup, secrets-vault pattern, the features tour, and the\nv4 upgrade guide move to linked pages under docs/, updated for the\npost-coverage surface (871 tools, 17 optional bundles). Contributor\ncredits added.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: rewrite README as a landing page, split reference into docs/",
          "author_name": "Abdelbaki Berkati",
          "author_login": "bakissation",
          "committed_at": "2026-07-17T16:42:17Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "5b25c050f2010ea831e07f06c0b7282a7931693d",
          "body": "feat: registry-driven COVERAGE.md generator and docs refresh",
          "is_bot": false,
          "headline": "Merge pull request #84 from bakissation/feat/gen-coverage",
          "author_name": "Abdelbaki Berkati",
          "author_login": "bakissation",
          "committed_at": "2026-07-17T16:24:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "385349d38cfd765a6044565827e53d8cfff6cc75",
          "body": "Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: escape backslashes before pipes in coverage table cells",
          "author_name": "Abdelbaki Berkati",
          "author_login": "bakissation",
          "committed_at": "2026-07-17T16:23:28Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "9c1ab9a13f5aa6eec5edb2ace23263d9dbf962fb",
          "body": "gen:coverage enumerates the full tool surface from the registry so the\ncoverage doc can never drift from the code: summary table per service\n(curated/generated counts + enable gate) and collapsible per-tool\nlistings. SERVICES and the generated gates move to src/services.ts so\nscripts can enumerate t\n[…]\n now fails the build on any\ngenerated-vs-curated name collision. README/CLAUDE.md reflect the\nexhaustive surface (871 tools across 28 services).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: registry-driven COVERAGE.md generator and docs refresh",
          "author_name": "Abdelbaki Berkati",
          "author_login": "bakissation",
          "committed_at": "2026-07-17T16:21:12Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "c833a1137d3bd05ed1442e852dad2df113a20536",
          "body": "feat: generated coverage for every OAuth-reachable Workspace API",
          "is_bot": false,
          "headline": "Merge pull request #83 from bakissation/feat/generated-coverage",
          "author_name": "Abdelbaki Berkati",
          "author_login": "bakissation",
          "committed_at": "2026-07-17T16:17:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "40078c19915893b39554a0f2a290bf74e95350f0",
          "body": "Full gen:tools fan-out: 689 generated tools across 26 services, one\ndeferred tool per Discovery method with no curated equivalent. New\ngenerated-only services (classroom, cloudidentity, cloudsearch, vault,\nkeep, driveactivity, drivelabels, script, postmaster, groupssettings,\ngroupsmigration, licensi\n[…]\nshortcuts, admin\ndirectory, …) register under their existing service and surface a\ntyped insufficient_scope hint when a scope was never granted.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: generated coverage for every OAuth-reachable Workspace API",
          "author_name": "Abdelbaki Berkati",
          "author_login": "bakissation",
          "committed_at": "2026-07-17T16:15:57Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "f0ff2dc57c2e190f6fab9c76045f81d7d9a44982",
          "body": "feat: coverage generator with baked-method executor (tasks pilot)",
          "is_bot": false,
          "headline": "Merge pull request #82 from bakissation/feat/coverage-generator",
          "author_name": "Abdelbaki Berkati",
          "author_login": "bakissation",
          "committed_at": "2026-07-17T16:12:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0d506d99b87f9202689989bb40e2074035040ffb",
          "body": "gen:tools turns the discovery snapshot into deterministic generated\ntool files: one deferred tool per method not already curated, with\npath/query params as typed fields, a loose JSON body per the\nno-mega-union rule, an always-available fields mask, and the cud\ncomputed from HTTP semantics at gen tim\n[…]\niscovery\nfetch). Piloted end to end on tasks (the two full-update PUT methods\ncurated tools skip); snapshot + determinism tests lock the output.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: coverage generator with baked-method executor (tasks pilot)",
          "author_name": "Abdelbaki Berkati",
          "author_login": "bakissation",
          "committed_at": "2026-07-17T16:10:46Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "35a7cfe11ba44d777841fd5a851559ef0d2488e9",
          "body": "feat: add Slides tools and Forms write tools",
          "is_bot": false,
          "headline": "Merge pull request #81 from bakissation/feat/slides-forms",
          "author_name": "Abdelbaki Berkati",
          "author_login": "bakissation",
          "committed_at": "2026-07-17T16:07:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "92501fafba8a991945b3c24f7584fb37dc6c3d18",
          "body": "- New optional \"slides\" scope bundle (GOOGLE_OPTIONAL_SCOPES=slides, presentations scope) wired into the SERVICES table like forms/chat\n- 5 Slides tools covering slides:v1: slides_create, slides_get (compact per-slide text digest, full:true escape valve), slides_page_get, slides_page_thumbnail, slid\n[…]\need Cloud Pub/Sub)\n- batchUpdate tools take a loose coerced requests array pointing at Google's Request reference instead of a mega-union schema\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: add Slides tools and Forms write tools",
          "author_name": "Abdelbaki Berkati",
          "author_login": "bakissation",
          "committed_at": "2026-07-17T16:05:43Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "fd31fd2ee909f04d71299d3079f7c51bbffb6b2f",
          "body": "chore: add discovery snapshot fetcher (gen:discovery)",
          "is_bot": false,
          "headline": "Merge pull request #80 from bakissation/chore/gen-discovery",
          "author_name": "Abdelbaki Berkati",
          "author_login": "bakissation",
          "committed_at": "2026-07-17T15:57:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e444988ab388bf793d4f22e097c066075a7874bc",
          "body": "scripts/fetch-discovery.ts pulls all 32 Workspace API discovery\ndocuments (central endpoint with per-service $discovery fallback,\nsince several APIs no longer serve from the central URL) and writes\nthe gitignored discovery/ snapshot + MANIFEST.md that feeds the\ncoverage generator. tsx devDep + tsconfig.scripts.json wire scripts\ninto the typecheck gate without shipping them in dist.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: add discovery snapshot fetcher (gen:discovery)",
          "author_name": "Abdelbaki Berkati",
          "author_login": "bakissation",
          "committed_at": "2026-07-17T15:56:37Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "964dba2f1292786a31737c2e9c36992adcc1fa8c",
          "body": "chore(deps-dev): clear all open Dependabot alerts",
          "is_bot": false,
          "headline": "Merge pull request #79 from bakissation/chore/dependabot-sweep",
          "author_name": "Abdelbaki Berkati",
          "author_login": "bakissation",
          "committed_at": "2026-07-17T15:27:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "79f86d77dbe283eeb134aa3911896ad929cc8dec",
          "body": "fix: retry token rename through transient Windows sharing violations",
          "is_bot": false,
          "headline": "Merge pull request #78 from bakissation/fix/windows-rename-retry",
          "author_name": "Abdelbaki Berkati",
          "author_login": "bakissation",
          "committed_at": "2026-07-17T15:26:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "60ed8f6e1f22f90527daecb4c29690af98996813",
          "body": "- npm 11.14.1 -> 11.18.0 (via @semantic-release/npm): patched bundled tar 7.5.19, sigstore 4.1.1, @sigstore/verify 3.1.1, @sigstore/core 3.2.1, undici 6.27.0\n- undici 7.25.0 -> 7.28.0 (via @semantic-release/github): SOCKS5 TLS bypass, header injection, cache poisoning fixes\n- undici 6.25.0 -> 6.27.0\n[…]\n): merge-key DoS fix\n\nLockfile-only; all bumps within existing semver ranges. devDependency\ntransitives only, published runtime tree unaffected.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(deps-dev): clear all open Dependabot alerts",
          "author_name": "Abdelbaki Berkati",
          "author_login": "bakissation",
          "committed_at": "2026-07-17T15:25:43Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "c7616aeb7b89c07519c26c1dfe4d0c144f052cba",
          "body": "Windows classic rename (MoveFileExW without POSIX semantics) fails with\nEPERM/EACCES/EBUSY when the destination token file is momentarily held\nopen by a concurrent reader or antivirus scan. Reads take no lock, so\nthe token lock cannot prevent this. Absorb it with a short bounded\nretry (5 attempts, l\n[…]\nar backoff, ~200ms worst case), and stop the\ntmp-cleanup rmSync from masking the real write error when the same\nhandle-holder blocks the unlink.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: retry token rename through transient Windows sharing violations",
          "author_name": "Abdelbaki Berkati",
          "author_login": "bakissation",
          "committed_at": "2026-07-17T15:24:46Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "9ede86d748d37971294b5c2a653c873cb2837c7e",
          "body": "chore: back-merge main into dev (resync after v5.1.2)",
          "is_bot": false,
          "headline": "Merge pull request #77 from bakissation/main",
          "author_name": "Abdelbaki Berkati",
          "author_login": "bakissation",
          "committed_at": "2026-07-17T15:15:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "74bdefb79d2b8667f884ae504a18103be84a58c3",
          "body": "chore: promote staging to main (5.1.2 — Windows fsync fix)",
          "is_bot": false,
          "headline": "Merge pull request #75 from bakissation/staging",
          "author_name": "Abdelbaki Berkati",
          "author_login": "bakissation",
          "committed_at": "2026-07-17T15:13:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9beffed3e7335d145bca7935cd5ee23f5a727971",
          "body": "chore: promote dev to staging (Windows fsync fix)",
          "is_bot": false,
          "headline": "Merge pull request #74 from bakissation/dev",
          "author_name": "Abdelbaki Berkati",
          "author_login": "bakissation",
          "committed_at": "2026-07-17T15:10:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6441392be253f33c668a21e9efe8c1cc32799e01",
          "body": "fix: open temp token file read-write so fsync succeeds on Windows",
          "is_bot": false,
          "headline": "Merge pull request #73 from mjreddy/fix/windows-fsync-token-write",
          "author_name": "Abdelbaki Berkati",
          "author_login": "bakissation",
          "committed_at": "2026-07-17T15:07:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "65a6ba749c072c1b20cf922830b036d0a198f5e4",
          "body": "chore: back-merge main into dev (resync after v5.1.1)",
          "is_bot": false,
          "headline": "Merge pull request #72 from bakissation/main",
          "author_name": "Abdelbaki Berkati",
          "author_login": "bakissation",
          "committed_at": "2026-07-17T13:06:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6ea855bca53cd0d05b84a4461c1ee52db0a8cd5d",
          "body": "writeTokenAtomic opened the freshly written temp file read-only ('r')\nbefore calling fsync. On Windows fsync maps to FlushFileBuffers, which\nreturns EPERM when the handle lacks write access, so every encrypted\ntoken write — and therefore `auth` — fails with\n\"EPERM: operation not permitted, fsync\". POSIX permits fsync on a\nread-only descriptor, so this passes on Linux/macOS but breaks all\nWindows users. Open the descriptor read-write ('r+') instead; behavior\nis unchanged on POSIX.",
          "is_bot": false,
          "headline": "fix: open temp token file read-write so fsync succeeds on Windows",
          "author_name": "mjreddy",
          "author_login": "mjreddy",
          "committed_at": "2026-07-17T04:41:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3c4102fcf9d2b5afc0155cf605df43a0b3529449",
          "body": "chore: back-merge main into staging (resync after v5.1.1)",
          "is_bot": false,
          "headline": "Merge pull request #71 from bakissation/main",
          "author_name": "Abdelbaki Berkati",
          "author_login": "bakissation",
          "committed_at": "2026-07-16T13:46:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0193b78a38cae8b84d79d726f6bbdd64b20dd2b2",
          "body": "chore: promote staging to main (v5.1.1 stable)",
          "is_bot": false,
          "headline": "Merge pull request #70 from bakissation/staging",
          "author_name": "Abdelbaki Berkati",
          "author_login": "bakissation",
          "committed_at": "2026-07-16T13:45:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a35ed463e32a816ec70b0baae2ff7c84bab87690",
          "body": "chore: promote dev to staging (beta)",
          "is_bot": false,
          "headline": "Merge pull request #69 from bakissation/dev",
          "author_name": "Abdelbaki Berkati",
          "author_login": "bakissation",
          "committed_at": "2026-07-16T13:39:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "29ef95d22d0f7a1a25758574762f2f3082ba26c8",
          "body": "fix: recover corrupt token locks and tolerate unsignalable lock owners",
          "is_bot": false,
          "headline": "Merge pull request #68 from bakissation/fix/token-lock-recovery",
          "author_name": "Abdelbaki Berkati",
          "author_login": "bakissation",
          "committed_at": "2026-07-16T13:35:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3684943f3cf7448fb695283e3fc65488363cc5d5",
          "body": "Non-PID lock content (corrupt or interrupted lock write) previously\nskipped dead-owner recovery and spun to the 5s timeout on every write\nuntil the file was removed by hand; it is now recovered like a dead\nowner. An EPERM from the liveness probe (PID recycled by another user)\npreviously crashed the write; it is now treated as a live owner and\nwaits out the timeout instead of breaking an unverifiable lock.\n\nFollow-up to #67.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: recover corrupt token locks and tolerate unsignalable lock owners",
          "author_name": "Abdelbaki Berkati",
          "author_login": "bakissation",
          "committed_at": "2026-07-16T13:32:35Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "cfb482ee1e4cadbc725b31eddb779ca10253bfc2",
          "body": "…t-boundary\n\nfix: harden token persistence and toolset filtering",
          "is_bot": false,
          "headline": "Merge pull request #67 from trevor-commits/fix/token-store-and-toolse…",
          "author_name": "Abdelbaki Berkati",
          "author_login": "bakissation",
          "committed_at": "2026-07-16T13:28:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "89fed8e5e1ba9fc6a88c87579b70a9a5e1150817",
          "body": null,
          "is_bot": false,
          "headline": "fix: harden token persistence and toolset filtering",
          "author_name": "Trevor Gillette",
          "author_login": "trevor-commits",
          "committed_at": "2026-07-13T01:11:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3c6268081c3a008361c8c79b88348deeb694f39d",
          "body": "chore: back-merge main into dev (resync after v5.1.0)",
          "is_bot": false,
          "headline": "Merge pull request #66 from bakissation/main",
          "author_name": "Abdelbaki Berkati",
          "author_login": "bakissation",
          "committed_at": "2026-06-11T20:52:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fd615b8907f8f44793cba92b65defebbb07d738c",
          "body": "chore: back-merge main into staging (resync after v5.1.0)",
          "is_bot": false,
          "headline": "Merge pull request #65 from bakissation/main",
          "author_name": "Abdelbaki Berkati",
          "author_login": "bakissation",
          "committed_at": "2026-06-11T20:51:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b04a133c766000b5b775bc2a44b663b5e0f48a27",
          "body": "Promote staging to main: 5.1.0",
          "is_bot": false,
          "headline": "Merge pull request #64 from bakissation/staging",
          "author_name": "Abdelbaki Berkati",
          "author_login": "bakissation",
          "committed_at": "2026-06-11T20:49:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "595f17b2f9abe7bca0ac52f09f72503b2b83bb2e",
          "body": "Promote dev to staging: 5.1.0 multi-account + discover-first beta",
          "is_bot": false,
          "headline": "Merge pull request #63 from bakissation/dev",
          "author_name": "Abdelbaki Berkati",
          "author_login": "bakissation",
          "committed_at": "2026-06-11T20:30:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "77cc11e0238d4a66468ed7ff00178cd0c6d3d3d9",
          "body": "fix: retry transfer share without expirationTime on consumer accounts",
          "is_bot": false,
          "headline": "Merge pull request #62 from bakissation/fix/transfer-consumer-expiration",
          "author_name": "Abdelbaki Berkati",
          "author_login": "bakissation",
          "committed_at": "2026-06-11T20:22:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b2e1a0ab7f2f7bddf639284e01fa5c3d104e52e2",
          "body": "Free Gmail rejects expirationTime on permissions (\"Expiration dates\ncannot be set on this item\"), which made drive_transfer's primary\nshare+copy strategy always fall back to download+upload for consumer\nsources. Retry the silent reader grant without the expiration when\nthat specific error occurs — t\n[…]\ny the dead-man backstop is lost.\n\nFound by live smoke between real accounts; verified post-fix:\nconsumer→Workspace now transfers via share_copy.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: retry transfer share without expirationTime on consumer accounts",
          "author_name": "Abdelbaki Berkati",
          "author_login": "bakissation",
          "committed_at": "2026-06-11T20:21:17Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "8a450054be698fbb6a471326f880d806e7c53d34",
          "body": "feat: drive_transfer — copy or move files between configured accounts",
          "is_bot": false,
          "headline": "Merge pull request #61 from bakissation/feat/drive-transfer",
          "author_name": "Abdelbaki Berkati",
          "author_login": "bakissation",
          "committed_at": "2026-06-11T20:12:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c1cf0766041a26fb6b9a2c5a1b3862e664a106c5",
          "body": "The multi-account wedge, part 2 (FSD features/cross-account.md +\nphase3-plan.md PR B):\n\n- Strategy A (primary): silent 1h-expiring reader grant on the source,\n  server-side files.copy by the target (native fidelity, no bytes\n  through the box, target owns the copy), explicit copy name so Google\n  ne\n[…]\n_ALLOW=\"drive:transfer\" cannot silently grant it) —\n  safe-writes can copy but never move. Lossy fallbacks skip the trash\n  and keep the source.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: drive_transfer — copy or move files between configured accounts",
          "author_name": "Abdelbaki Berkati",
          "author_login": "bakissation",
          "committed_at": "2026-06-11T20:11:01Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "daa486f316f5f9985ef48cf54dc60a38829d8c4e",
          "body": "feat: cross-account fan-out (account \"*\"/CSV) and account_list",
          "is_bot": false,
          "headline": "Merge pull request #60 from bakissation/feat/cross-account-fanout",
          "author_name": "Abdelbaki Berkati",
          "author_login": "bakissation",
          "committed_at": "2026-06-11T19:46:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6ba34051a471882341ce48ad251735a3e49ea275",
          "body": "The multi-account wedge, part 1 (FSD features/cross-account.md):\n\n- Every eligible read tool's account argument now also accepts \"*\"\n  (all configured accounts) or a CSV subset like \"work,personal\".\n  The registry fans the call out per account (bounded concurrency 5)\n  and merges into {results: [{ac\n[…]\ncts duplicate aliases at startup (a\n  duplicate previously shadowed an account silently; with fan-out it\n  would double-call the surviving one).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: cross-account fan-out (account \"*\"/CSV) and account_list",
          "author_name": "Abdelbaki Berkati",
          "author_login": "bakissation",
          "committed_at": "2026-06-11T19:44:07Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "e57af5bd41ac18e67d978fe03214e084a2d78202",
          "body": "feat: response payload trimming — compact JSON, content caps, lean list views",
          "is_bot": false,
          "headline": "Merge pull request #59 from bakissation/feat/response-trimming",
          "author_name": "Abdelbaki Berkati",
          "author_login": "bakissation",
          "committed_at": "2026-06-11T18:55:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "aa7957db393bec8451b956a6888d8a6713ce2583",
          "body": "…st views\n\nCuts token waste on fat tool responses (vault R3 decision, technique\ninspired by interceptor-style response pruning):\n\n- All JSON tool outputs are re-serialized compactly via the registry\n  wrapper (~20-30% pretty-print tax removed). GOOGLE_TRIM=off restores\n  pretty JSON; it never affect\n[…]\nnsumers: gmail bodies\nover 50k are truncated unless full=true, and calendar list entries no\nlonger include created/updated or empty-valued keys.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: response payload trimming — compact JSON, content caps, lean li…",
          "author_name": "Abdelbaki Berkati",
          "author_login": "bakissation",
          "committed_at": "2026-06-11T18:54:02Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "e6d2225c6c322e96b6c262ca40884f97b29b5b34",
          "body": "feat: google_api_call + google_api_search escape hatch",
          "is_bot": false,
          "headline": "Merge pull request #58 from bakissation/feat/escape-hatch",
          "author_name": "Abdelbaki Berkati",
          "author_login": "bakissation",
          "committed_at": "2026-06-11T13:48:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e8e5d2cd9fc732632d86eaa362cd298048257ac0",
          "body": "…ace method\n\nTwo eager Layer-0 tools guarantee coverage beyond the curated set:\ngoogle_api_search queries the Google API Discovery method index\n(17 Workspace APIs incl. Slides, Drive Labels, Groups Settings) and\ngoogle_api_call invokes any method by Discovery id through the\naccount's OAuth client.\n\n\n[…]\npeated\nkeys (gaxios comma-joins arrays) and alt=json is forced for\nAtom-defaulting APIs. Responses cap at 100k chars with a truncation\nenvelope.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: google_api_call + google_api_search escape hatch for any Worksp…",
          "author_name": "Abdelbaki Berkati",
          "author_login": "bakissation",
          "committed_at": "2026-06-11T13:46:29Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "0fd51b9a92aeb90215920bea65db5dd6a74ddfda",
          "body": "feat: discover-first tool architecture with per-service discover tools",
          "is_bot": false,
          "headline": "Merge pull request #57 from bakissation/feat/discover-first",
          "author_name": "Abdelbaki Berkati",
          "author_login": "bakissation",
          "committed_at": "2026-06-11T13:20:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "95b55dd7209a057edc57ef3dbf6037931a235503",
          "body": "tools/list now advertises only one {service}_discover meta-tool per\nservice (~12 eager tools instead of ~173 schemas, roughly 1k tokens of\nidle context instead of 40k+). Calling a discover tool returns that\nservice's operation catalog (tool, summary, args, cud), reveals the\nservice, and emits notifi\n[…]\n were\ndeliberately NOT emitted: strict SDK clients reject unknown content\ntypes and strip nonstandard Tool fields (verified against SDK 1.29.0).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: discover-first tool architecture with per-service discover tools",
          "author_name": "Abdelbaki Berkati",
          "author_login": "bakissation",
          "committed_at": "2026-06-11T13:18:33Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "107e7aa642f43d9046f915407f9497e6e3a0c687",
          "body": "chore(deps): bump vitest to 3.2.6 and refresh hono/qs transitives",
          "is_bot": false,
          "headline": "Merge pull request #56 from bakissation/chore/dep-security-bumps",
          "author_name": "Abdelbaki Berkati",
          "author_login": "bakissation",
          "committed_at": "2026-06-11T12:50:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b46132d7f022a90275a10d72572f96964313f17e",
          "body": "Clears all open Dependabot alerts: vitest <3.2.6 (GHSA critical, dev-only),\nhono <4.12.21 (4 medium advisories, transitive via @modelcontextprotocol/sdk),\nqs <=6.15.1 (medium DoS, transitive via express/googleapis-common).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(deps): bump vitest to 3.2.6 and refresh hono/qs transitives",
          "author_name": "Abdelbaki Berkati",
          "author_login": "bakissation",
          "committed_at": "2026-06-11T12:49:03Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "19b779cd626bc08c35446877f4cb141ff4111132",
          "body": "chore: back-merge main into dev (resync after v5.0.0)",
          "is_bot": false,
          "headline": "Merge pull request #55 from bakissation/main",
          "author_name": "Abdelbaki Berkati",
          "author_login": "bakissation",
          "committed_at": "2026-05-22T18:25:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c67eeb482fe1926da6ff57258c5af48d17995653",
          "body": "chore: back-merge main into staging (resync after v5.0.0)",
          "is_bot": false,
          "headline": "Merge pull request #54 from bakissation/main",
          "author_name": "Abdelbaki Berkati",
          "author_login": "bakissation",
          "committed_at": "2026-05-22T18:24:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "24868d812227a1f15bc3fb8ae5eb1c24ae6a682e",
          "body": "Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "ci: fix back-merge trigger and make it resilient",
          "author_name": "Abdelbaki Berkati",
          "author_login": "bakissation",
          "committed_at": "2026-05-22T18:24:06Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "e8e73840a9a3f67664f825fa37175ef1e93f3eba",
          "body": "Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "ci: fix back-merge trigger and make it resilient",
          "author_name": "Abdelbaki Berkati",
          "author_login": "bakissation",
          "committed_at": "2026-05-22T18:24:06Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "0210822a95f8aba51748183dea1d7247921c57f2",
          "body": "Trigger on workflow_run after the release workflow completes on main\n(release/PR events created with GITHUB_TOKEN don't fire on: release).\nDirect-merge first with auto-merge fallback under set +e, so an\nalready-mergeable PR ('clean status') no longer aborts the resync.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "ci: fix back-merge trigger and make it resilient",
          "author_name": "Abdelbaki Berkati",
          "author_login": "bakissation",
          "committed_at": "2026-05-22T18:24:05Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "57224277da983065bf1d95521520fdbabf89f852",
          "body": "chore: back-merge main into dev (resync after v5.0.0)",
          "is_bot": false,
          "headline": "Merge pull request #53 from bakissation/main",
          "author_name": "Abdelbaki Berkati",
          "author_login": "bakissation",
          "committed_at": "2026-05-22T15:35:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "091ad170fffbd223ae407816bf1722a7b9a12fbb",
          "body": "ci: fix backmerge trigger (on: release → on: workflow_run)",
          "is_bot": false,
          "headline": "Merge pull request #51 from bakissation/fix/backmerge-trigger",
          "author_name": "Abdelbaki Berkati",
          "author_login": "bakissation",
          "committed_at": "2026-05-22T15:35:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7d2ff9f6e484e301393be5dbd496a055c621ccfc",
          "body": "chore: back-merge main into staging (resync after v5.0.0)",
          "is_bot": false,
          "headline": "Merge pull request #52 from bakissation/main",
          "author_name": "Abdelbaki Berkati",
          "author_login": "bakissation",
          "committed_at": "2026-05-22T15:34:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4825527e4c9d29d27fd1b252246e69cb5e3b91c0",
          "body": "…n: release\n\nGITHUB_TOKEN-created releases don't trigger on: release workflows, so the\nback-merge never ran. Trigger on the release workflow completing on main\ninstead; fetch the tag via gh release view.",
          "is_bot": false,
          "headline": "ci: fire backmerge on workflow_run (release completed on main), not o…",
          "author_name": "Abdelbaki Berkati",
          "author_login": "bakissation",
          "committed_at": "2026-05-22T15:34:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a4c3cb0449fd8f89145cc6d64f5323adc5598efa",
          "body": "Promote staging → main (5.0.0)",
          "is_bot": false,
          "headline": "Merge #50: promote staging → main (5.0.0)",
          "author_name": "Abdelbaki Berkati",
          "author_login": "bakissation",
          "committed_at": "2026-05-22T15:16:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2b833beb7157802bfded68c66ead9179a22c0f17",
          "body": "Promote dev → staging (5.0.0-beta)",
          "is_bot": false,
          "headline": "Merge #49: promote dev → staging (5.0.0-beta)",
          "author_name": "Abdelbaki Berkati",
          "author_login": "bakissation",
          "committed_at": "2026-05-22T15:13:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fa8413d7082f61f78b3a8b4c90a4dd244a44c223",
          "body": "…nter, IC-funded attribution\n\nfeat!: v5 launch prep — npm-first README + COVERAGE + OS-config token dir",
          "is_bot": false,
          "headline": "Merge #48: v5 launch prep — npm-first docs, COVERAGE, remove Alert Ce…",
          "author_name": "Abdelbaki Berkati",
          "author_login": "bakissation",
          "committed_at": "2026-05-22T15:05:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4c641e9d94b26767bc1fab2d5e68b179aee1aad1",
          "body": "…n/Sponsor button)",
          "is_bot": false,
          "headline": "docs: attribute IdeaCrafters as the funder of the project (no donatio…",
          "author_name": "Abdelbaki Berkati",
          "author_login": "bakissation",
          "committed_at": "2026-05-22T15:03:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "db6b50ff1ba51f40198e6ed7a4815eeea17264ae",
          "body": "…ocs to v5\n\nAlert Center (apps.alerts) can't be granted via user OAuth, so it's\nremoved from v5 (registration, optional bundle, error shim) — planned for\nv6 with service accounts. Removed the obsolete GOOGLE_ALLOW_ADMIN_WRITES /\nadminWritesEnabled(): admin_users_update is now gated by write-control\n\n[…]\ne,\nCOVERAGE.md, CONTRIBUTING.md to current v5 reality.\n\nBREAKING CHANGE: the alertcenter optional bundle and its two tools are\nremoved; GOOGLE_ALLOW_ADMIN_WRITES no longer exists (use GOOGLE_PROFILE).",
          "is_bot": false,
          "headline": "feat!: remove Alert Center; drop GOOGLE_ALLOW_ADMIN_WRITES; refresh d…",
          "author_name": "Abdelbaki Berkati",
          "author_login": "bakissation",
          "committed_at": "2026-05-22T14:55:52Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ceddea70e150ada4e7a8be29ab78603c7255e72d",
          "body": "…oken dir\n\nRewrite README beginner/npm-first with Infisical-recommended secret\ninjection; move the tool list to COVERAGE.md; refresh package.json\nmetadata. Default the encrypted token store to the OS config dir\n(~/.config/mcp-google-multi/tokens) and also load the working-dir .env,\nso the npm/npx fl\n[…]\n4 plaintext\ntokens; the default token directory is now ~/.config/mcp-google-multi/\ntokens (set TOKEN_STORE_PATH to override); GOOGLE_ALLOW_ADMIN_WRITES is\nremoved (replaced by write-control profiles).",
          "is_bot": false,
          "headline": "feat!: v5 launch prep — npm-first README, COVERAGE split, OS-config t…",
          "author_name": "Abdelbaki Berkati",
          "author_login": "bakissation",
          "committed_at": "2026-05-22T14:43:20Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d879018a995c5345e106e080d7f7ecae832cf051",
          "body": "…e 0)\n\nfeat: write-control — deny-by-default CUD gating (profiles + globs + config check)",
          "is_bot": false,
          "headline": "Merge #47: write-control — deny-by-default CUD gating (completes Phas…",
          "author_name": "Abdelbaki Berkati",
          "author_login": "bakissation",
          "committed_at": "2026-05-22T14:01:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e4dff81bee24d3b1b3d1bb57af779f6ebf1eb08b",
          "body": "…config check)\n\nReads are never gated; create/update/delete are deny-by-default.\nGOOGLE_PROFILE (read-only|safe-writes|full-writes), GOOGLE_READ_ONLY hard\nfilter, and GOOGLE_WRITE_ALLOW/DENY globs (service:cud or service:op,\ndeny wins). Enforced at dispatch in the registry via each tool's cud;\ndenied calls return a write_disabled error. 'config check' CLI prints the\nresolved policy + enabled/disabled CUD tools. Completes Phase 0.",
          "is_bot": false,
          "headline": "feat: write-control — deny-by-default CUD gating (profiles + globs + …",
          "author_name": "Abdelbaki Berkati",
          "author_login": "bakissation",
          "committed_at": "2026-05-22T13:56:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9f0bc400670dee9c76b8e551a82aec633aa2a8ea",
          "body": "feat: tool registry + cud metadata for all 175 tools",
          "is_bot": false,
          "headline": "Merge #46: tool registry + cud metadata for all 175 tools",
          "author_name": "Abdelbaki Berkati",
          "author_login": "bakissation",
          "committed_at": "2026-05-22T13:50:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "33d502be6c9d6184c9899c7c776051c0cafeacf5",
          "body": "Route every tool through a ToolRegistry that records {name, service, cud}\nand forwards to the MCP server — v4 parity (all tools still eager, no\nbehavior change). inferCud derives read/create/update/delete from the\ntool verb (override: drive_untrash). Unblocks write-control and the\ndiscover/deferral model. Registry + inferCud unit-tested.",
          "is_bot": false,
          "headline": "feat: tool registry + cud metadata for all 175 tools",
          "author_name": "Abdelbaki Berkati",
          "author_login": "bakissation",
          "committed_at": "2026-05-22T13:48:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "535cfdd68ccb4f547ee083327a603e01ae8181bc",
          "body": "ci: auto back-merge main → staging/dev after stable releases",
          "is_bot": false,
          "headline": "Merge #45: auto back-merge main → staging/dev after stable releases",
          "author_name": "Abdelbaki Berkati",
          "author_login": "bakissation",
          "committed_at": "2026-05-21T20:55:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9c3c2ac4c4ddf26445e2fd97108fda50b6e83bc6",
          "body": "On a stable release (release published, non-prerelease), open and\nauto-merge PRs from main into staging and dev so the alpha/beta preview\nbases re-anchor to the released version. Requires a BACKMERGE_TOKEN PAT\n(contents + pull-requests write) and repo auto-merge enabled.",
          "is_bot": false,
          "headline": "ci: auto back-merge main into staging/dev after stable releases",
          "author_name": "Abdelbaki Berkati",
          "author_login": "bakissation",
          "committed_at": "2026-05-21T20:50:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "934a18ad253dbbc26600153c3b80ef5e7de18a0f",
          "body": "…nc main→dev)\n\nfeat: error taxonomy + param coercion across all tool methods",
          "is_bot": false,
          "headline": "Merge #44: error taxonomy + param coercion across all methods (+ resy…",
          "author_name": "Abdelbaki Berkati",
          "author_login": "bakissation",
          "committed_at": "2026-05-21T20:46:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a15d2a083a737bb5a3d47f104a9e39eb908d7ec5",
          "body": null,
          "is_bot": false,
          "headline": "Merge main into slice 2 to resync the alpha base to 4.4.0",
          "author_name": "Abdelbaki Berkati",
          "author_login": "bakissation",
          "committed_at": "2026-05-21T20:36:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4a9cb53a7a4a8ad9929ac86ad1eec25cd999c480",
          "body": "Typed error envelope {error,message,hint?,retriable,account} via\nmapGoogleError (auth_required / insufficient_scope / forbidden /\nnot_found / rate_limited / invalid_scope / upstream_error). Re-auth hints\nonly on real auth errors; never embeds raw error objects (no token leak).\nString-encoded array/o\n[…]\nrray, object/record, 2D-array and boolean param across all 9\nservice files (fixes the 'Expected array, received string' client bug).\n21 unit tests; all tools register cleanly with the coerced schemas.",
          "is_bot": false,
          "headline": "feat: error taxonomy + param coercion across all tool methods",
          "author_name": "Abdelbaki Berkati",
          "author_login": "bakissation",
          "committed_at": "2026-05-21T20:36:03Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ae75d234de8dc9ba349f31d3f99de8f78d4cff2c",
          "body": "…kens (#43)\n\nPer-account encrypted token files; rewired client/auth; migrate-tokens CLI; MASTER_KEY. No new deps. 9 unit tests.",
          "is_bot": false,
          "headline": "feat: encrypted token storage (AES-256-GCM) + MASTER_KEY + migrate-to…",
          "author_name": "Abdelbaki Berkati",
          "author_login": "bakissation",
          "committed_at": "2026-05-21T20:25:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "46ffb45aa264a9b7fca5487a3dfcdd8ace097189",
          "body": "Promote staging → main (4.4.0)",
          "is_bot": false,
          "headline": "Merge pull request #41: promote staging → main (4.4.0)",
          "author_name": "Abdelbaki Berkati",
          "author_login": "bakissation",
          "committed_at": "2026-05-21T19:52:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5cf09636be7041de643a176c59065b05ff60a93b",
          "body": "Promote dev → staging (4.4.0-beta)",
          "is_bot": false,
          "headline": "Merge pull request #40: promote dev → staging",
          "author_name": "Abdelbaki Berkati",
          "author_login": "bakissation",
          "committed_at": "2026-05-21T19:50:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b0a2a64ea048aa84a4ebf7e2ae42ca18c8558391",
          "body": "Maintainer-led banner in CONTRIBUTING; roadmap on Milestones; feature PRs paused; bugs/security welcome.",
          "is_bot": false,
          "headline": "docs: mark project maintainer-led (roadmap on Milestones) (#39)",
          "author_name": "Abdelbaki Berkati",
          "author_login": "bakissation",
          "committed_at": "2026-05-21T19:47:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e6bda8c7ce615573e128b04ba41d6a34e9534637",
          "body": "Follow-up to #3 — flags the optional `htmlBody` parameter so users\ndiscover multipart/alternative support without reading the source.\n\nCo-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(readme): note htmlBody on gmail_send and gmail_create_draft (#38)",
          "author_name": "oba",
          "author_login": "obatried",
          "committed_at": "2026-05-21T19:39:53Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "eb17a23d87317678b572e1e6b2e74a5c2428fdec",
          "body": "…ternative)\n\nWhen htmlBody is set, the message is built as multipart/alternative so HTML-capable clients render the rich version and plain-only clients fall back to body. Adds buildMultipartAlternative() helper (RFC 2046 boundary via node:crypto) with 7 unit tests. Backward compatible.\n\nCo-authored-by: oba <obatried@users.noreply.github.com>",
          "is_bot": false,
          "headline": "feat: add htmlBody to gmail_send and gmail_create_draft (multipart/al…",
          "author_name": "oba",
          "author_login": "obatried",
          "committed_at": "2026-05-21T19:17:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9af8ef88ed48fe550eaa9f9b181bd0e363f3007b",
          "body": "vitest 4 pulled the rolldown (RC) + lightningcss native-binary fan-out\n(~36 low-reputation transitive dev deps); vitest 3.2.4 (esbuild-based)\ndrops them with no functional loss — 51 tests still pass. Adds a socket.yml\npinning the high-signal supply-chain alerts on.",
          "is_bot": false,
          "headline": "chore(deps): downgrade vitest 4→3 and add socket.yml (#36)",
          "author_name": "Abdelbaki Berkati",
          "author_login": "bakissation",
          "committed_at": "2026-05-21T01:01:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "12b078a2805e1679a6818d80cdc215df95687589",
          "body": "…#35)\n\nBumps the eslint -> minimatch -> brace-expansion path to the patched\n5.0.6 (GHSA-jxxr-4gwj-5jf2). Lockfile-only; production tree was already\nclean. The remaining advisory is npm's bundled copy (unfixable here).",
          "is_bot": false,
          "headline": "chore(deps): npm audit fix — patch brace-expansion ReDoS (dev-only) (…",
          "author_name": "Abdelbaki Berkati",
          "author_login": "bakissation",
          "committed_at": "2026-05-21T00:51:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9c4ce9c6c949856f203397fad08bc7cd6fffd843",
          "body": "Clears the Node 20 deprecation warnings (v5 runs on Node 24).",
          "is_bot": false,
          "headline": "ci: bump actions/checkout and actions/setup-node to v5 (#34)",
          "author_name": "Abdelbaki Berkati",
          "author_login": "bakissation",
          "committed_at": "2026-05-20T21:59:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "217aad3ed407473c39a368c0e70a25d34689e6ce",
          "body": "…MCP config) (#33)\n\nThe package is now published on npm; document install via npm/npx and the\n@latest/@dev/@staging dist-tags alongside the from-source path.",
          "is_bot": false,
          "headline": "docs(readme): add npm install reference (badge, npm/npx install, npx …",
          "author_name": "Abdelbaki Berkati",
          "author_login": "bakissation",
          "committed_at": "2026-05-20T21:53:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5827c9f3ad4c65b0022a08aadbf6be2dcdc16a66",
          "body": "Promote staging → main (v4.3.0 stable)",
          "is_bot": false,
          "headline": "Merge pull request #32 from bakissation/staging",
          "author_name": "Abdelbaki Berkati",
          "author_login": null,
          "committed_at": "2026-05-20T21:47:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dd09a76564d3d4ed33a1563d31f8b200bd68efea",
          "body": "Promote dev → staging (v4.3.0-beta)",
          "is_bot": false,
          "headline": "Merge pull request #31 from bakissation/dev",
          "author_name": "Abdelbaki Berkati",
          "author_login": null,
          "committed_at": "2026-05-20T21:43:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b657d19d122cfca49de30f112bd8cc26437f9cf7",
          "body": "…replacement (#30)\n\nMirrors drive_upload: when replacing content via localPath, set the\nrequestBody mimeType to a google-apps target so Drive converts the new\ncontent on import (e.g. replace a Google Doc body from a local .docx).",
          "is_bot": false,
          "headline": "feat(drive): add convertTo to drive_update for native-format content …",
          "author_name": "Abdelbaki Berkati",
          "author_login": "bakissation",
          "committed_at": "2026-05-20T21:38:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e17e74db4b3530144ea724604554f650322d7ea1",
          "body": "semantic-release/npm auto-detects OIDC; provenance is automatic. No\nlong-lived token, no 2FA. Requires the trusted publisher to be configured\non the npm package before merge.",
          "is_bot": false,
          "headline": "ci: publish to npm via OIDC trusted publishing (drop NPM_TOKEN) (#29)",
          "author_name": "Abdelbaki Berkati",
          "author_login": "bakissation",
          "committed_at": "2026-05-20T21:18:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7cd3080ceb2d33064226b3d725f9dbe7b4935407",
          "body": "The registry-url config makes setup-node write an .npmrc keyed to\nNODE_AUTH_TOKEN (unset), colliding with @semantic-release/npm's own\nNPM_TOKEN auth and causing a false 'Invalid npm token'.\n\nCo-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "ci: drop setup-node registry-url so semantic-release/npm owns auth (#26)",
          "author_name": "Abdelbaki Berkati",
          "author_login": "bakissation",
          "committed_at": "2026-05-20T20:14:05Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "a39f2244565a278bf39b3742a1d90cc06c87d99b",
          "body": "- add @semantic-release/npm (publishes per channel: main->latest, staging->beta, dev->alpha)\n- package.json: bin, files, main, engines, repository, publishConfig (public + provenance)\n- src/index.ts: shebang so the published bin is runnable via npx\n- release.yml: NPM_TOKEN + id-token for provenance\n\nRequires the NPM_TOKEN repo secret to be set BEFORE merge.\n\nCo-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "ci: publish to npm via semantic-release (#25)",
          "author_name": "Abdelbaki Berkati",
          "author_login": "bakissation",
          "committed_at": "2026-05-20T20:07:51Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "70f46e385255ddacdc0959f3cc45aa5ceb8fc256",
          "body": "… (#24)\n\nResolves the CodeQL alert actions/missing-workflow-permissions — the CI\nworkflow inherited broad repo-default GITHUB_TOKEN permissions. The ci job\nonly checks out code and runs npm, so contents: read is sufficient.\n\nCo-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "ci: set least-privilege permissions (contents: read) on test workflow…",
          "author_name": "Abdelbaki Berkati",
          "author_login": "bakissation",
          "committed_at": "2026-05-20T19:57:38Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "ac71652b06fc66dae778cdded419bcce15c0dbb4",
          "body": "On merge, cut a release per branch channel — dev -> x.y.z-alpha.n,\nstaging -> x.y.z-beta.n, main -> x.y.z (stable) — with notes generated\ninto GitHub Releases. Tags + Releases only (no @semantic-release/git or\n@semantic-release/npm), so nothing fights branch protection and the\ndefault GITHUB_TOKEN s\n[…]\nrozen\n  at v4.2.0 (newer notes live in GitHub Releases)\n- CONTRIBUTING + CLAUDE.md: no more manual version bumps / changelog edits\n\nCo-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "ci(release): automate multi-channel releases with semantic-release (#9)",
          "author_name": "Abdelbaki Berkati",
          "author_login": "bakissation",
          "committed_at": "2026-05-20T15:53:52Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "8704ecdc207d23eb14eb75dc2180c4eecd12904f",
          "body": "Raises the GitHub community health profile from 42% and supports the\ndev → staging → main contribution flow now that there are external\ncontributors.\n\n- CONTRIBUTING.md: dev-target PRs, three-tier promotion model, setup,\n  conventions distilled from CLAUDE.md, PR checklist\n- SECURITY.md: private vul\n[…]\naging aren't deadlocked waiting for a check that never runs\n- README Contributing section points to the new files and the dev flow\n\nCo-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(repo): add OSS community health files and multi-branch CI (#8)",
          "author_name": "Abdelbaki Berkati",
          "author_login": "bakissation",
          "committed_at": "2026-05-20T15:38:49Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "5b8a369cdd48a4b2f0e5f21f17450873c6af07e4",
          "body": "…t (#7)\n\ndrive_upload only set media.mimeType (the source type) and never set the\nresource mimeType, so Drive stored uploads verbatim — there was no way to\nturn a local Markdown/HTML/DOCX into a native, editable Google Doc.\n\nAdd an optional `convertTo` enum (the four google-apps types). When set it\n\n[…]\nn\nimport. Omitting it preserves the previous store-as-is behaviour.\n\nBump to 4.2.0; update README, CLAUDE.md, CHANGELOG.\n\nFixes #6\n\nCo-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(drive): add convertTo to drive_upload for native Workspace impor…",
          "author_name": "Abdelbaki Berkati",
          "author_login": "bakissation",
          "committed_at": "2026-05-20T15:05:04Z",
          "body_truncated": true,
          "is_coding_agent": true
        }
      ],
      "releases_count": 41,
      "commits_last_year": 116,
      "latest_release_at": "2026-07-17T17:10:25Z",
      "latest_release_tag": "v5.2.0-beta.1",
      "releases_from_tags": false,
      "days_since_last_push": 5,
      "active_weeks_last_year": 8,
      "days_since_latest_release": 5,
      "mean_days_between_releases": 0
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": true,
      "health_percentage": 100,
      "has_issue_template": false,
      "has_code_of_conduct": true,
      "has_pull_request_template": true
    },
    "ecosystem": {
      "packages": [
        {
          "name": "mcp-google-multi",
          "exists": true,
          "license": "MIT",
          "keywords": [
            "mcp",
            "model-context-protocol",
            "google",
            "gmail",
            "google-drive",
            "google-calendar",
            "google-sheets",
            "google-docs",
            "google-contacts",
            "google-workspace",
            "google-tasks",
            "google-meet",
            "search-console",
            "oauth",
            "mcp-server",
            "claude",
            "claude-code"
          ],
          "ecosystem": "npm",
          "matches_repo": true,
          "registry_url": "https://www.npmjs.com/package/mcp-google-multi",
          "is_deprecated": false,
          "latest_version": "5.1.2",
          "repository_url": "https://github.com/bakissation/mcp-google-multi",
          "versions_count": 38,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 1,
          "monthly_downloads": 2559,
          "first_published_at": "2026-05-20T21:03:38.870000Z",
          "latest_published_at": "2026-07-17T15:13:58.261000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 5
        }
      ]
    },
    "popularity": {
      "forks": 9,
      "stars": 7,
      "watchers": 1,
      "fork_history": {
        "days": [
          {
            "date": "2026-04-16",
            "count": 1
          },
          {
            "date": "2026-04-20",
            "count": 1
          },
          {
            "date": "2026-05-18",
            "count": 1
          },
          {
            "date": "2026-05-27",
            "count": 1
          },
          {
            "date": "2026-06-07",
            "count": 1
          },
          {
            "date": "2026-07-05",
            "count": 1
          },
          {
            "date": "2026-07-08",
            "count": 1
          },
          {
            "date": "2026-07-13",
            "count": 1
          },
          {
            "date": "2026-07-17",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 9,
        "total_forks": 9
      },
      "star_history": null,
      "open_issues_and_prs": 0
    },
    "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": [
        "tsconfig.json"
      ],
      "toolchain_manifests": [],
      "largest_source_bytes": 62838,
      "source_files_sampled": 62,
      "oversized_source_files": 1,
      "agent_instruction_files": [
        "CLAUDE.md"
      ],
      "agent_instruction_max_bytes": 10565
    },
    "dependencies": {
      "manifests": [
        "package.json"
      ],
      "advisories": {
        "error": null,
        "scope": "repository_graph",
        "source": "osv",
        "findings": [
          {
            "name": "brace-expansion",
            "direct": false,
            "version": "5.0.6",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-3jxr-9vmj-r5cp"
            ],
            "fixed_version": "5.0.7",
            "advisory_count": 1,
            "oldest_advisory_days": 2
          },
          {
            "name": "fast-uri",
            "direct": false,
            "version": "3.1.2",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-4c8g-83qw-93j6",
              "GHSA-v2hh-gcrm-f6hx"
            ],
            "fixed_version": "4.1.1",
            "advisory_count": 2,
            "oldest_advisory_days": 1
          },
          {
            "name": "@hono/node-server",
            "direct": false,
            "version": "1.19.14",
            "severity": "moderate",
            "ecosystem": "npm",
            "cvss_score": 5.9,
            "advisory_ids": [
              "GHSA-frvp-7c67-39w9"
            ],
            "fixed_version": "2.0.5",
            "advisory_count": 1,
            "oldest_advisory_days": 1
          },
          {
            "name": "hono",
            "direct": false,
            "version": "4.12.25",
            "severity": "moderate",
            "ecosystem": "npm",
            "cvss_score": 6.5,
            "advisory_ids": [
              "GHSA-hvrm-45r6-mjfj",
              "GHSA-w62v-xxxg-mg59",
              "GHSA-xgm2-5f3f-mvvc"
            ],
            "fixed_version": "4.12.27",
            "advisory_count": 3,
            "oldest_advisory_days": 1
          },
          {
            "name": "body-parser",
            "direct": false,
            "version": "2.2.2",
            "severity": "low",
            "ecosystem": "npm",
            "cvss_score": 3.7,
            "advisory_ids": [
              "GHSA-v422-hmwv-36x6"
            ],
            "fixed_version": "2.3.0",
            "advisory_count": 1,
            "oldest_advisory_days": 2
          }
        ],
        "collected": true,
        "malicious": [],
        "truncated": false,
        "by_severity": {
          "low": 1,
          "high": 2,
          "moderate": 2
        },
        "advisory_count": 8,
        "affected_count": 5,
        "assessed_count": 698,
        "malicious_count": 0,
        "assessed_package": null,
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "npm"
      ],
      "dependencies": [
        {
          "name": "@modelcontextprotocol/sdk",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.29.0"
        },
        {
          "name": "dotenv",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^17.4.0"
        },
        {
          "name": "googleapis",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^171.4.0"
        },
        {
          "name": "mime-types",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^3.0.2"
        },
        {
          "name": "open",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^11.0.0"
        },
        {
          "name": "server-destroy",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.0.1"
        },
        {
          "name": "zod",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^4.3.6"
        }
      ],
      "all_dependencies": {
        "error": null,
        "source": "github-sbom",
        "packages": [
          {
            "name": "@modelcontextprotocol/sdk",
            "direct": true,
            "version": "1.29.0",
            "ecosystem": "npm"
          },
          {
            "name": "dotenv",
            "direct": true,
            "version": "17.4.2",
            "ecosystem": "npm"
          },
          {
            "name": "googleapis",
            "direct": true,
            "version": "171.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "mime-types",
            "direct": true,
            "version": "3.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "open",
            "direct": true,
            "version": "11.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "server-destroy",
            "direct": true,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "zod",
            "direct": true,
            "version": "4.3.6",
            "ecosystem": "npm"
          },
          {
            "name": "@actions/core",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "@actions/exec",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "@actions/http-client",
            "direct": false,
            "version": "4.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "@actions/io",
            "direct": false,
            "version": "3.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/code-frame",
            "direct": false,
            "version": "7.29.0",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-validator-identifier",
            "direct": false,
            "version": "7.28.5",
            "ecosystem": "npm"
          },
          {
            "name": "@colors/colors",
            "direct": false,
            "version": "1.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/aix-ppc64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/android-arm",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/android-arm64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/android-x64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/darwin-arm64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/darwin-x64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/freebsd-arm64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/freebsd-x64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-arm",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-arm64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-ia32",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-loong64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-mips64el",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-ppc64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-riscv64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-s390x",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-x64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/netbsd-arm64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/netbsd-x64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/openbsd-arm64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/openbsd-x64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/openharmony-arm64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/sunos-x64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/win32-arm64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/win32-ia32",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/win32-x64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@eslint-community/eslint-utils",
            "direct": false,
            "version": "4.9.1",
            "ecosystem": "npm"
          },
          {
            "name": "@eslint-community/regexpp",
            "direct": false,
            "version": "4.12.2",
            "ecosystem": "npm"
          },
          {
            "name": "@eslint/config-array",
            "direct": false,
            "version": "0.23.5",
            "ecosystem": "npm"
          },
          {
            "name": "@eslint/config-helpers",
            "direct": false,
            "version": "0.5.5",
            "ecosystem": "npm"
          },
          {
            "name": "@eslint/core",
            "direct": false,
            "version": "1.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "@eslint/js",
            "direct": false,
            "version": "10.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "@eslint/object-schema",
            "direct": false,
            "version": "3.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "@eslint/plugin-kit",
            "direct": false,
            "version": "0.7.1",
            "ecosystem": "npm"
          },
          {
            "name": "@gar/promise-retry",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "@hono/node-server",
            "direct": false,
            "version": "1.19.14",
            "ecosystem": "npm"
          },
          {
            "name": "@humanfs/core",
            "direct": false,
            "version": "0.19.2",
            "ecosystem": "npm"
          },
          {
            "name": "@humanfs/node",
            "direct": false,
            "version": "0.16.8",
            "ecosystem": "npm"
          },
          {
            "name": "@humanfs/types",
            "direct": false,
            "version": "0.15.0",
            "ecosystem": "npm"
          },
          {
            "name": "@humanwhocodes/module-importer",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "@humanwhocodes/retry",
            "direct": false,
            "version": "0.4.3",
            "ecosystem": "npm"
          },
          {
            "name": "@isaacs/fs-minipass",
            "direct": false,
            "version": "4.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "@isaacs/string-locale-compare",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "@jridgewell/sourcemap-codec",
            "direct": false,
            "version": "1.5.5",
            "ecosystem": "npm"
          },
          {
            "name": "@npmcli/agent",
            "direct": false,
            "version": "4.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "@npmcli/arborist",
            "direct": false,
            "version": "9.9.0",
            "ecosystem": "npm"
          },
          {
            "name": "@npmcli/config",
            "direct": false,
            "version": "10.12.0",
            "ecosystem": "npm"
          },
          {
            "name": "@npmcli/fs",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "@npmcli/git",
            "direct": false,
            "version": "7.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "@npmcli/installed-package-contents",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "@npmcli/map-workspaces",
            "direct": false,
            "version": "5.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "@npmcli/metavuln-calculator",
            "direct": false,
            "version": "9.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "@npmcli/name-from-folder",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "@npmcli/node-gyp",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "@npmcli/package-json",
            "direct": false,
            "version": "7.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "@npmcli/promise-spawn",
            "direct": false,
            "version": "9.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "@npmcli/query",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "@npmcli/redact",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "@npmcli/run-script",
            "direct": false,
            "version": "10.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "@octokit/auth-token",
            "direct": false,
            "version": "6.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "@octokit/core",
            "direct": false,
            "version": "7.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "@octokit/endpoint",
            "direct": false,
            "version": "11.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "@octokit/graphql",
            "direct": false,
            "version": "9.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "@octokit/openapi-types",
            "direct": false,
            "version": "27.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "@octokit/plugin-paginate-rest",
            "direct": false,
            "version": "14.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "@octokit/plugin-retry",
            "direct": false,
            "version": "8.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "@octokit/plugin-throttling",
            "direct": false,
            "version": "11.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "@octokit/request",
            "direct": false,
            "version": "10.0.9",
            "ecosystem": "npm"
          },
          {
            "name": "@octokit/request-error",
            "direct": false,
            "version": "7.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "@octokit/types",
            "direct": false,
            "version": "16.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "@pnpm/config.env-replace",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "@pnpm/network.ca-file",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "@pnpm/npm-conf",
            "direct": false,
            "version": "3.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-android-arm-eabi",
            "direct": false,
            "version": "4.60.4",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-android-arm64",
            "direct": false,
            "version": "4.60.4",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-darwin-arm64",
            "direct": false,
            "version": "4.60.4",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-darwin-x64",
            "direct": false,
            "version": "4.60.4",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-freebsd-arm64",
            "direct": false,
            "version": "4.60.4",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-freebsd-x64",
            "direct": false,
            "version": "4.60.4",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-linux-arm-gnueabihf",
            "direct": false,
            "version": "4.60.4",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-linux-arm-musleabihf",
            "direct": false,
            "version": "4.60.4",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-linux-arm64-gnu",
            "direct": false,
            "version": "4.60.4",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-linux-arm64-musl",
            "direct": false,
            "version": "4.60.4",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-linux-loong64-gnu",
            "direct": false,
            "version": "4.60.4",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-linux-loong64-musl",
            "direct": false,
            "version": "4.60.4",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-linux-ppc64-gnu",
            "direct": false,
            "version": "4.60.4",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-linux-ppc64-musl",
            "direct": false,
            "version": "4.60.4",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-linux-riscv64-gnu",
            "direct": false,
            "version": "4.60.4",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-linux-riscv64-musl",
            "direct": false,
            "version": "4.60.4",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-linux-s390x-gnu",
            "direct": false,
            "version": "4.60.4",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-linux-x64-gnu",
            "direct": false,
            "version": "4.60.4",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-linux-x64-musl",
            "direct": false,
            "version": "4.60.4",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-openbsd-x64",
            "direct": false,
            "version": "4.60.4",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-openharmony-arm64",
            "direct": false,
            "version": "4.60.4",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-win32-arm64-msvc",
            "direct": false,
            "version": "4.60.4",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-win32-ia32-msvc",
            "direct": false,
            "version": "4.60.4",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-win32-x64-gnu",
            "direct": false,
            "version": "4.60.4",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-win32-x64-msvc",
            "direct": false,
            "version": "4.60.4",
            "ecosystem": "npm"
          },
          {
            "name": "@sec-ant/readable-stream",
            "direct": false,
            "version": "0.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "@semantic-release/commit-analyzer",
            "direct": false,
            "version": "13.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "@semantic-release/error",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "@semantic-release/github",
            "direct": false,
            "version": "12.0.8",
            "ecosystem": "npm"
          },
          {
            "name": "@semantic-release/npm",
            "direct": false,
            "version": "13.1.5",
            "ecosystem": "npm"
          },
          {
            "name": "@semantic-release/release-notes-generator",
            "direct": false,
            "version": "14.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "@sigstore/bundle",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "@sigstore/core",
            "direct": false,
            "version": "3.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "@sigstore/protobuf-specs",
            "direct": false,
            "version": "0.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "@sigstore/sign",
            "direct": false,
            "version": "4.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "@sigstore/tuf",
            "direct": false,
            "version": "4.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "@sigstore/verify",
            "direct": false,
            "version": "3.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "@simple-libs/stream-utils",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "@sindresorhus/is",
            "direct": false,
            "version": "4.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "@sindresorhus/merge-streams",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "@tufjs/canonical-json",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "@tufjs/models",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "@types/chai",
            "direct": false,
            "version": "5.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@types/deep-eql",
            "direct": false,
            "version": "4.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "@types/esrecurse",
            "direct": false,
            "version": "4.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "@types/estree",
            "direct": false,
            "version": "1.0.8",
            "ecosystem": "npm"
          },
          {
            "name": "@types/json-schema",
            "direct": false,
            "version": "7.0.15",
            "ecosystem": "npm"
          },
          {
            "name": "@types/mime-types",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "@types/node",
            "direct": false,
            "version": "25.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "@types/normalize-package-data",
            "direct": false,
            "version": "2.4.4",
            "ecosystem": "npm"
          },
          {
            "name": "@types/server-destroy",
            "direct": false,
            "version": "1.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/eslint-plugin",
            "direct": false,
            "version": "8.59.1",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/parser",
            "direct": false,
            "version": "8.59.1",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/project-service",
            "direct": false,
            "version": "8.59.1",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/scope-manager",
            "direct": false,
            "version": "8.59.1",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/tsconfig-utils",
            "direct": false,
            "version": "8.59.1",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/type-utils",
            "direct": false,
            "version": "8.59.1",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/types",
            "direct": false,
            "version": "8.59.1",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/typescript-estree",
            "direct": false,
            "version": "8.59.1",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/utils",
            "direct": false,
            "version": "8.59.1",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/visitor-keys",
            "direct": false,
            "version": "8.59.1",
            "ecosystem": "npm"
          },
          {
            "name": "@vitest/expect",
            "direct": false,
            "version": "3.2.6",
            "ecosystem": "npm"
          },
          {
            "name": "@vitest/mocker",
            "direct": false,
            "version": "3.2.6",
            "ecosystem": "npm"
          },
          {
            "name": "@vitest/pretty-format",
            "direct": false,
            "version": "3.2.6",
            "ecosystem": "npm"
          },
          {
            "name": "@vitest/runner",
            "direct": false,
            "version": "3.2.6",
            "ecosystem": "npm"
          },
          {
            "name": "@vitest/snapshot",
            "direct": false,
            "version": "3.2.6",
            "ecosystem": "npm"
          },
          {
            "name": "@vitest/spy",
            "direct": false,
            "version": "3.2.6",
            "ecosystem": "npm"
          },
          {
            "name": "@vitest/utils",
            "direct": false,
            "version": "3.2.6",
            "ecosystem": "npm"
          },
          {
            "name": "abbrev",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "accepts",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "acorn",
            "direct": false,
            "version": "8.16.0",
            "ecosystem": "npm"
          },
          {
            "name": "acorn-jsx",
            "direct": false,
            "version": "5.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "agent-base",
            "direct": false,
            "version": "7.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "agent-base",
            "direct": false,
            "version": "9.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "aggregate-error",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "ajv",
            "direct": false,
            "version": "6.15.0",
            "ecosystem": "npm"
          },
          {
            "name": "ajv",
            "direct": false,
            "version": "8.20.0",
            "ecosystem": "npm"
          },
          {
            "name": "ajv-formats",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-escapes",
            "direct": false,
            "version": "7.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-regex",
            "direct": false,
            "version": "5.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-regex",
            "direct": false,
            "version": "6.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-styles",
            "direct": false,
            "version": "3.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-styles",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-styles",
            "direct": false,
            "version": "6.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "any-promise",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "aproba",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "archy",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "argparse",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "argv-formatter",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "array-ify",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "assertion-error",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "balanced-match",
            "direct": false,
            "version": "4.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "base64-js",
            "direct": false,
            "version": "1.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "before-after-hook",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "bignumber.js",
            "direct": false,
            "version": "9.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "bin-links",
            "direct": false,
            "version": "6.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "binary-extensions",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "body-parser",
            "direct": false,
            "version": "2.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "bottleneck",
            "direct": false,
            "version": "2.19.5",
            "ecosystem": "npm"
          },
          {
            "name": "brace-expansion",
            "direct": false,
            "version": "5.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "brace-expansion",
            "direct": false,
            "version": "5.0.7",
            "ecosystem": "npm"
          },
          {
            "name": "braces",
            "direct": false,
            "version": "3.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "buffer-equal-constant-time",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "bundle-name",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "bytes",
            "direct": false,
            "version": "3.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "cac",
            "direct": false,
            "version": "6.7.14",
            "ecosystem": "npm"
          },
          {
            "name": "cacache",
            "direct": false,
            "version": "20.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "call-bind-apply-helpers",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "call-bound",
            "direct": false,
            "version": "1.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "callsites",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "chai",
            "direct": false,
            "version": "5.3.3",
            "ecosystem": "npm"
          },
          {
            "name": "chalk",
            "direct": false,
            "version": "2.4.2",
            "ecosystem": "npm"
          },
          {
            "name": "chalk",
            "direct": false,
            "version": "4.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "chalk",
            "direct": false,
            "version": "5.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "char-regex",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "check-error",
            "direct": false,
            "version": "2.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "chownr",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "ci-info",
            "direct": false,
            "version": "4.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "cidr-regex",
            "direct": false,
            "version": "5.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "clean-stack",
            "direct": false,
            "version": "5.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "cli-highlight",
            "direct": false,
            "version": "2.1.11",
            "ecosystem": "npm"
          },
          {
            "name": "cli-table3",
            "direct": false,
            "version": "0.6.5",
            "ecosystem": "npm"
          },
          {
            "name": "cliui",
            "direct": false,
            "version": "7.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "cliui",
            "direct": false,
            "version": "9.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "cmd-shim",
            "direct": false,
            "version": "8.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "color-convert",
            "direct": false,
            "version": "1.9.3",
            "ecosystem": "npm"
          },
          {
            "name": "color-convert",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "color-name",
            "direct": false,
            "version": "1.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "color-name",
            "direct": false,
            "version": "1.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "common-ancestor-path",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "compare-func",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "config-chain",
            "direct": false,
            "version": "1.1.13",
            "ecosystem": "npm"
          },
          {
            "name": "content-disposition",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "content-type",
            "direct": false,
            "version": "1.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "content-type",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "conventional-changelog-angular",
            "direct": false,
            "version": "8.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "conventional-changelog-writer",
            "direct": false,
            "version": "8.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "conventional-commits-filter",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "conventional-commits-parser",
            "direct": false,
            "version": "6.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "convert-hrtime",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "cookie",
            "direct": false,
            "version": "0.7.2",
            "ecosystem": "npm"
          },
          {
            "name": "cookie-signature",
            "direct": false,
            "version": "1.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "core-util-is",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "cors",
            "direct": false,
            "version": "2.8.6",
            "ecosystem": "npm"
          },
          {
            "name": "cosmiconfig",
            "direct": false,
            "version": "9.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "cross-spawn",
            "direct": false,
            "version": "7.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "crypto-random-string",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "cssesc",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "data-uri-to-buffer",
            "direct": false,
            "version": "4.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "debug",
            "direct": false,
            "version": "4.4.3",
            "ecosystem": "npm"
          },
          {
            "name": "deep-eql",
            "direct": false,
            "version": "5.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "deep-extend",
            "direct": false,
            "version": "0.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "deep-is",
            "direct": false,
            "version": "0.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "default-browser",
            "direct": false,
            "version": "5.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "default-browser-id",
            "direct": false,
            "version": "5.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "define-lazy-prop",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "depd",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "diff",
            "direct": false,
            "version": "8.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "dir-glob",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "dot-prop",
            "direct": false,
            "version": "5.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "dunder-proto",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "duplexer2",
            "direct": false,
            "version": "0.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "ecdsa-sig-formatter",
            "direct": false,
            "version": "1.0.11",
            "ecosystem": "npm"
          },
          {
            "name": "ee-first",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "emoji-regex",
            "direct": false,
            "version": "10.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "emoji-regex",
            "direct": false,
            "version": "8.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "emojilib",
            "direct": false,
            "version": "2.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "encodeurl",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "env-ci",
            "direct": false,
            "version": "11.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "env-paths",
            "direct": false,
            "version": "2.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "environment",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "error-ex",
            "direct": false,
            "version": "1.3.4",
            "ecosystem": "npm"
          },
          {
            "name": "es-define-property",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "es-errors",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "es-module-lexer",
            "direct": false,
            "version": "1.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "es-object-atoms",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "esbuild",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "escalade",
            "direct": false,
            "version": "3.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "escape-html",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "escape-string-regexp",
            "direct": false,
            "version": "1.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "escape-string-regexp",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "escape-string-regexp",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "eslint",
            "direct": false,
            "version": "10.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "eslint-scope",
            "direct": false,
            "version": "9.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "eslint-visitor-keys",
            "direct": false,
            "version": "3.4.3",
            "ecosystem": "npm"
          },
          {
            "name": "eslint-visitor-keys",
            "direct": false,
            "version": "5.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "espree",
            "direct": false,
            "version": "11.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "esquery",
            "direct": false,
            "version": "1.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "esrecurse",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "estraverse",
            "direct": false,
            "version": "5.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "estree-walker",
            "direct": false,
            "version": "3.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "esutils",
            "direct": false,
            "version": "2.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "etag",
            "direct": false,
            "version": "1.8.1",
            "ecosystem": "npm"
          },
          {
            "name": "eventsource",
            "direct": false,
            "version": "3.0.7",
            "ecosystem": "npm"
          },
          {
            "name": "eventsource-parser",
            "direct": false,
            "version": "3.0.8",
            "ecosystem": "npm"
          },
          {
            "name": "execa",
            "direct": false,
            "version": "8.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "execa",
            "direct": false,
            "version": "9.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "expect-type",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "exponential-backoff",
            "direct": false,
            "version": "3.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "express",
            "direct": false,
            "version": "5.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "express-rate-limit",
            "direct": false,
            "version": "8.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "extend",
            "direct": false,
            "version": "3.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "fast-content-type-parse",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "fast-deep-equal",
            "direct": false,
            "version": "3.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "fast-json-stable-stringify",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "fast-levenshtein",
            "direct": false,
            "version": "2.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "fast-uri",
            "direct": false,
            "version": "3.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "fastest-levenshtein",
            "direct": false,
            "version": "1.0.16",
            "ecosystem": "npm"
          },
          {
            "name": "fdir",
            "direct": false,
            "version": "6.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "fetch-blob",
            "direct": false,
            "version": "3.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "figures",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "figures",
            "direct": false,
            "version": "6.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "file-entry-cache",
            "direct": false,
            "version": "8.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "fill-range",
            "direct": false,
            "version": "7.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "finalhandler",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "find-up",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "find-up",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "find-up-simple",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "find-versions",
            "direct": false,
            "version": "6.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "flat-cache",
            "direct": false,
            "version": "4.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "flatted",
            "direct": false,
            "version": "3.4.2",
            "ecosystem": "npm"
          },
          {
            "name": "formdata-polyfill",
            "direct": false,
            "version": "4.0.10",
            "ecosystem": "npm"
          },
          {
            "name": "forwarded",
            "direct": false,
            "version": "0.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "fresh",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "fs-extra",
            "direct": false,
            "version": "11.3.5",
            "ecosystem": "npm"
          },
          {
            "name": "fs-minipass",
            "direct": false,
            "version": "3.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "fsevents",
            "direct": false,
            "version": "2.3.3",
            "ecosystem": "npm"
          },
          {
            "name": "function-bind",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "function-timeout",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "gaxios",
            "direct": false,
            "version": "7.1.4",
            "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": "get-stream",
            "direct": false,
            "version": "6.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "get-stream",
            "direct": false,
            "version": "8.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "get-stream",
            "direct": false,
            "version": "9.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "git-log-parser",
            "direct": false,
            "version": "1.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "glob",
            "direct": false,
            "version": "13.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "glob-parent",
            "direct": false,
            "version": "6.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "google-auth-library",
            "direct": false,
            "version": "10.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "google-logging-utils",
            "direct": false,
            "version": "1.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "googleapis-common",
            "direct": false,
            "version": "8.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "gopd",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "graceful-fs",
            "direct": false,
            "version": "4.2.10",
            "ecosystem": "npm"
          },
          {
            "name": "graceful-fs",
            "direct": false,
            "version": "4.2.11",
            "ecosystem": "npm"
          },
          {
            "name": "handlebars",
            "direct": false,
            "version": "4.7.9",
            "ecosystem": "npm"
          },
          {
            "name": "has-flag",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "has-flag",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "has-symbols",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "hasown",
            "direct": false,
            "version": "2.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "highlight.js",
            "direct": false,
            "version": "10.7.3",
            "ecosystem": "npm"
          },
          {
            "name": "hono",
            "direct": false,
            "version": "4.12.25",
            "ecosystem": "npm"
          },
          {
            "name": "hook-std",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "hosted-git-info",
            "direct": false,
            "version": "7.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "hosted-git-info",
            "direct": false,
            "version": "9.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "http-cache-semantics",
            "direct": false,
            "version": "4.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "http-errors",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "http-proxy-agent",
            "direct": false,
            "version": "7.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "http-proxy-agent",
            "direct": false,
            "version": "9.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "https-proxy-agent",
            "direct": false,
            "version": "7.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "https-proxy-agent",
            "direct": false,
            "version": "9.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "human-signals",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "human-signals",
            "direct": false,
            "version": "8.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "iconv-lite",
            "direct": false,
            "version": "0.7.2",
            "ecosystem": "npm"
          },
          {
            "name": "ignore",
            "direct": false,
            "version": "5.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "ignore",
            "direct": false,
            "version": "7.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "ignore-walk",
            "direct": false,
            "version": "8.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "import-fresh",
            "direct": false,
            "version": "3.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "import-from-esm",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "import-meta-resolve",
            "direct": false,
            "version": "4.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "imurmurhash",
            "direct": false,
            "version": "0.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "indent-string",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "index-to-position",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "inherits",
            "direct": false,
            "version": "2.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "ini",
            "direct": false,
            "version": "1.3.8",
            "ecosystem": "npm"
          },
          {
            "name": "ini",
            "direct": false,
            "version": "6.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "init-package-json",
            "direct": false,
            "version": "8.2.5",
            "ecosystem": "npm"
          },
          {
            "name": "ip-address",
            "direct": false,
            "version": "10.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "ipaddr.js",
            "direct": false,
            "version": "1.9.1",
            "ecosystem": "npm"
          },
          {
            "name": "is-arrayish",
            "direct": false,
            "version": "0.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "is-cidr",
            "direct": false,
            "version": "6.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "is-docker",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-extglob",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "is-fullwidth-code-point",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-glob",
            "direct": false,
            "version": "4.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "is-in-ssh",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-inside-container",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-number",
            "direct": false,
            "version": "7.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-obj",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-plain-obj",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-promise",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-stream",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-stream",
            "direct": false,
            "version": "4.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "is-unicode-supported",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-wsl",
            "direct": false,
            "version": "3.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "isarray",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "isexe",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "isexe",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "issue-parser",
            "direct": false,
            "version": "7.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "java-properties",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "jose",
            "direct": false,
            "version": "6.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "js-tokens",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "js-tokens",
            "direct": false,
            "version": "9.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "js-yaml",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "json-bigint",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "json-buffer",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "json-parse-better-errors",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "json-parse-even-better-errors",
            "direct": false,
            "version": "2.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "json-parse-even-better-errors",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "json-schema-traverse",
            "direct": false,
            "version": "0.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "json-schema-traverse",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "json-schema-typed",
            "direct": false,
            "version": "8.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "json-stable-stringify-without-jsonify",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "json-stringify-nice",
            "direct": false,
            "version": "1.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "json-with-bigint",
            "direct": false,
            "version": "3.5.8",
            "ecosystem": "npm"
          },
          {
            "name": "jsonfile",
            "direct": false,
            "version": "6.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "jsonparse",
            "direct": false,
            "version": "1.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "just-diff",
            "direct": false,
            "version": "6.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "just-diff-apply",
            "direct": false,
            "version": "5.5.0",
            "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": "4.5.4",
            "ecosystem": "npm"
          },
          {
            "name": "levn",
            "direct": false,
            "version": "0.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "libnpmaccess",
            "direct": false,
            "version": "10.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "libnpmdiff",
            "direct": false,
            "version": "8.1.11",
            "ecosystem": "npm"
          },
          {
            "name": "libnpmexec",
            "direct": false,
            "version": "10.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "libnpmfund",
            "direct": false,
            "version": "7.0.25",
            "ecosystem": "npm"
          },
          {
            "name": "libnpmorg",
            "direct": false,
            "version": "8.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "libnpmpack",
            "direct": false,
            "version": "9.1.11",
            "ecosystem": "npm"
          },
          {
            "name": "libnpmpublish",
            "direct": false,
            "version": "11.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "libnpmsearch",
            "direct": false,
            "version": "9.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "libnpmteam",
            "direct": false,
            "version": "8.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "libnpmversion",
            "direct": false,
            "version": "8.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "lines-and-columns",
            "direct": false,
            "version": "1.2.4",
            "ecosystem": "npm"
          },
          {
            "name": "load-json-file",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "locate-path",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "locate-path",
            "direct": false,
            "version": "6.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "lodash-es",
            "direct": false,
            "version": "4.18.1",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.capitalize",
            "direct": false,
            "version": "4.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.escaperegexp",
            "direct": false,
            "version": "4.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.isplainobject",
            "direct": false,
            "version": "4.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.isstring",
            "direct": false,
            "version": "4.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.uniqby",
            "direct": false,
            "version": "4.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "loupe",
            "direct": false,
            "version": "3.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "lru-cache",
            "direct": false,
            "version": "10.4.3",
            "ecosystem": "npm"
          },
          {
            "name": "lru-cache",
            "direct": false,
            "version": "11.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "lru-cache",
            "direct": false,
            "version": "11.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "magic-string",
            "direct": false,
            "version": "0.30.21",
            "ecosystem": "npm"
          },
          {
            "name": "make-asynchronous",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "make-fetch-happen",
            "direct": false,
            "version": "15.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "marked",
            "direct": false,
            "version": "15.0.12",
            "ecosystem": "npm"
          },
          {
            "name": "marked-terminal",
            "direct": false,
            "version": "7.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "math-intrinsics",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "media-typer",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "meow",
            "direct": false,
            "version": "13.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "merge-descriptors",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "merge-stream",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "micromatch",
            "direct": false,
            "version": "4.0.8",
            "ecosystem": "npm"
          },
          {
            "name": "mime",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "mime-db",
            "direct": false,
            "version": "1.54.0",
            "ecosystem": "npm"
          },
          {
            "name": "mimic-fn",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "minimatch",
            "direct": false,
            "version": "10.2.5",
            "ecosystem": "npm"
          },
          {
            "name": "minimist",
            "direct": false,
            "version": "1.2.8",
            "ecosystem": "npm"
          },
          {
            "name": "minipass",
            "direct": false,
            "version": "3.3.6",
            "ecosystem": "npm"
          },
          {
            "name": "minipass",
            "direct": false,
            "version": "7.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "minipass-collect",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "minipass-fetch",
            "direct": false,
            "version": "5.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "minipass-flush",
            "direct": false,
            "version": "1.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "minipass-pipeline",
            "direct": false,
            "version": "1.2.4",
            "ecosystem": "npm"
          },
          {
            "name": "minipass-sized",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "minizlib",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "ms",
            "direct": false,
            "version": "2.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "mute-stream",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "mz",
            "direct": false,
            "version": "2.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "nanoid",
            "direct": false,
            "version": "3.3.12",
            "ecosystem": "npm"
          },
          {
            "name": "natural-compare",
            "direct": false,
            "version": "1.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "negotiator",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "neo-async",
            "direct": false,
            "version": "2.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "nerf-dart",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "node-domexception",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "node-emoji",
            "direct": false,
            "version": "2.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "node-fetch",
            "direct": false,
            "version": "3.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "node-gyp",
            "direct": false,
            "version": "12.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "nopt",
            "direct": false,
            "version": "9.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "normalize-package-data",
            "direct": false,
            "version": "6.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "normalize-package-data",
            "direct": false,
            "version": "8.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "normalize-url",
            "direct": false,
            "version": "9.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "npm",
            "direct": false,
            "version": "11.18.0",
            "ecosystem": "npm"
          },
          {
            "name": "npm-audit-report",
            "direct": false,
            "version": "7.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "npm-bundled",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "npm-install-checks",
            "direct": false,
            "version": "8.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "npm-normalize-package-bin",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "npm-package-arg",
            "direct": false,
            "version": "13.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "npm-packlist",
            "direct": false,
            "version": "10.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "npm-pick-manifest",
            "direct": false,
            "version": "11.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "npm-profile",
            "direct": false,
            "version": "12.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "npm-registry-fetch",
            "direct": false,
            "version": "19.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "npm-run-path",
            "direct": false,
            "version": "5.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "npm-run-path",
            "direct": false,
            "version": "6.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "npm-user-validate",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "object-assign",
            "direct": false,
            "version": "4.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "object-inspect",
            "direct": false,
            "version": "1.13.4",
            "ecosystem": "npm"
          },
          {
            "name": "on-finished",
            "direct": false,
            "version": "2.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "once",
            "direct": false,
            "version": "1.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "onetime",
            "direct": false,
            "version": "6.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "optionator",
            "direct": false,
            "version": "0.9.4",
            "ecosystem": "npm"
          },
          {
            "name": "p-each-series",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "p-event",
            "direct": false,
            "version": "6.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "p-filter",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "p-limit",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "p-limit",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "p-locate",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "p-locate",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "p-map",
            "direct": false,
            "version": "7.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "p-reduce",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "p-timeout",
            "direct": false,
            "version": "6.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "p-try",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "pacote",
            "direct": false,
            "version": "21.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "parent-module",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "parse-conflict-json",
            "direct": false,
            "version": "5.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "parse-json",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "parse-json",
            "direct": false,
            "version": "5.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "parse-json",
            "direct": false,
            "version": "8.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "parse-ms",
            "direct": false,
            "version": "4.0.0",
            "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": "parseurl",
            "direct": false,
            "version": "1.3.3",
            "ecosystem": "npm"
          },
          {
            "name": "path-exists",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "path-exists",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "path-key",
            "direct": false,
            "version": "3.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "path-key",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "path-scurry",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "path-to-regexp",
            "direct": false,
            "version": "8.4.2",
            "ecosystem": "npm"
          },
          {
            "name": "path-type",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "pathe",
            "direct": false,
            "version": "2.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "pathval",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "picocolors",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "picomatch",
            "direct": false,
            "version": "2.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "picomatch",
            "direct": false,
            "version": "4.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "pify",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "pkce-challenge",
            "direct": false,
            "version": "5.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "pkg-conf",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "postcss",
            "direct": false,
            "version": "8.5.15",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-selector-parser",
            "direct": false,
            "version": "7.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "powershell-utils",
            "direct": false,
            "version": "0.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "prelude-ls",
            "direct": false,
            "version": "1.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "pretty-ms",
            "direct": false,
            "version": "9.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "proc-log",
            "direct": false,
            "version": "6.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "process-nextick-args",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "proggy",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "promise-all-reject-late",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "promise-call-limit",
            "direct": false,
            "version": "3.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "promzard",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "proto-list",
            "direct": false,
            "version": "1.2.4",
            "ecosystem": "npm"
          },
          {
            "name": "proxy-addr",
            "direct": false,
            "version": "2.0.7",
            "ecosystem": "npm"
          },
          {
            "name": "punycode",
            "direct": false,
            "version": "2.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "qrcode-terminal",
            "direct": false,
            "version": "0.12.0",
            "ecosystem": "npm"
          },
          {
            "name": "qs",
            "direct": false,
            "version": "6.15.2",
            "ecosystem": "npm"
          },
          {
            "name": "range-parser",
            "direct": false,
            "version": "1.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "raw-body",
            "direct": false,
            "version": "3.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "rc",
            "direct": false,
            "version": "1.2.8",
            "ecosystem": "npm"
          },
          {
            "name": "read",
            "direct": false,
            "version": "5.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "read-cmd-shim",
            "direct": false,
            "version": "6.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "read-package-up",
            "direct": false,
            "version": "11.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "read-package-up",
            "direct": false,
            "version": "12.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "read-pkg",
            "direct": false,
            "version": "10.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "read-pkg",
            "direct": false,
            "version": "9.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "readable-stream",
            "direct": false,
            "version": "2.3.8",
            "ecosystem": "npm"
          },
          {
            "name": "registry-auth-token",
            "direct": false,
            "version": "5.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "require-directory",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "require-from-string",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "resolve-from",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "resolve-from",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "rollup",
            "direct": false,
            "version": "4.60.4",
            "ecosystem": "npm"
          },
          {
            "name": "router",
            "direct": false,
            "version": "2.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "run-applescript",
            "direct": false,
            "version": "7.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "safe-buffer",
            "direct": false,
            "version": "5.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "safe-buffer",
            "direct": false,
            "version": "5.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "safer-buffer",
            "direct": false,
            "version": "2.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "semantic-release",
            "direct": false,
            "version": "25.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "semver",
            "direct": false,
            "version": "7.7.4",
            "ecosystem": "npm"
          },
          {
            "name": "semver",
            "direct": false,
            "version": "7.8.5",
            "ecosystem": "npm"
          },
          {
            "name": "semver-regex",
            "direct": false,
            "version": "4.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "send",
            "direct": false,
            "version": "1.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "serve-static",
            "direct": false,
            "version": "2.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "setprototypeof",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "shebang-command",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "shebang-regex",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "side-channel",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "side-channel-list",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "side-channel-map",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "side-channel-weakmap",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "siginfo",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "signal-exit",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "signale",
            "direct": false,
            "version": "1.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "sigstore",
            "direct": false,
            "version": "4.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "skin-tone",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "smart-buffer",
            "direct": false,
            "version": "4.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "socks",
            "direct": false,
            "version": "2.8.9",
            "ecosystem": "npm"
          },
          {
            "name": "socks-proxy-agent",
            "direct": false,
            "version": "8.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "source-map",
            "direct": false,
            "version": "0.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "source-map-js",
            "direct": false,
            "version": "1.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "spawn-error-forwarder",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "spdx-correct",
            "direct": false,
            "version": "3.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "spdx-exceptions",
            "direct": false,
            "version": "2.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "spdx-expression-parse",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "spdx-expression-parse",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "spdx-license-ids",
            "direct": false,
            "version": "3.0.23",
            "ecosystem": "npm"
          },
          {
            "name": "split2",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "ssri",
            "direct": false,
            "version": "13.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "stackback",
            "direct": false,
            "version": "0.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "statuses",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "std-env",
            "direct": false,
            "version": "3.10.0",
            "ecosystem": "npm"
          },
          {
            "name": "stream-combiner2",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "string-width",
            "direct": false,
            "version": "4.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "string-width",
            "direct": false,
            "version": "7.2.0",
            "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": "strip-ansi",
            "direct": false,
            "version": "7.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "strip-bom",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "strip-final-newline",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "strip-final-newline",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "strip-json-comments",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "strip-literal",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "super-regex",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "supports-color",
            "direct": false,
            "version": "10.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "supports-color",
            "direct": false,
            "version": "5.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "supports-color",
            "direct": false,
            "version": "7.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "supports-hyperlinks",
            "direct": false,
            "version": "3.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "tagged-tag",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "tar",
            "direct": false,
            "version": "7.5.19",
            "ecosystem": "npm"
          },
          {
            "name": "temp-dir",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "tempy",
            "direct": false,
            "version": "3.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "text-table",
            "direct": false,
            "version": "0.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "thenify",
            "direct": false,
            "version": "3.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "thenify-all",
            "direct": false,
            "version": "1.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "through2",
            "direct": false,
            "version": "2.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "time-span",
            "direct": false,
            "version": "5.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "tiny-relative-date",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "tinybench",
            "direct": false,
            "version": "2.9.0",
            "ecosystem": "npm"
          },
          {
            "name": "tinyexec",
            "direct": false,
            "version": "0.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "tinyglobby",
            "direct": false,
            "version": "0.2.16",
            "ecosystem": "npm"
          },
          {
            "name": "tinyglobby",
            "direct": false,
            "version": "0.2.17",
            "ecosystem": "npm"
          },
          {
            "name": "tinypool",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "tinyrainbow",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "tinyspy",
            "direct": false,
            "version": "4.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "to-regex-range",
            "direct": false,
            "version": "5.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "toidentifier",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "traverse",
            "direct": false,
            "version": "0.6.8",
            "ecosystem": "npm"
          },
          {
            "name": "treeverse",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "ts-api-utils",
            "direct": false,
            "version": "2.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "tsx",
            "direct": false,
            "version": "4.23.1",
            "ecosystem": "npm"
          },
          {
            "name": "tuf-js",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "tunnel",
            "direct": false,
            "version": "0.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "type-check",
            "direct": false,
            "version": "0.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "type-fest",
            "direct": false,
            "version": "1.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "type-fest",
            "direct": false,
            "version": "2.19.0",
            "ecosystem": "npm"
          },
          {
            "name": "type-fest",
            "direct": false,
            "version": "4.41.0",
            "ecosystem": "npm"
          },
          {
            "name": "type-fest",
            "direct": false,
            "version": "5.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "type-is",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "typescript",
            "direct": false,
            "version": "6.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "typescript-eslint",
            "direct": false,
            "version": "8.59.1",
            "ecosystem": "npm"
          },
          {
            "name": "uglify-js",
            "direct": false,
            "version": "3.19.3",
            "ecosystem": "npm"
          },
          {
            "name": "undici",
            "direct": false,
            "version": "6.27.0",
            "ecosystem": "npm"
          },
          {
            "name": "undici",
            "direct": false,
            "version": "7.28.0",
            "ecosystem": "npm"
          },
          {
            "name": "undici-types",
            "direct": false,
            "version": "7.19.2",
            "ecosystem": "npm"
          },
          {
            "name": "unicode-emoji-modifier-base",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "unicorn-magic",
            "direct": false,
            "version": "0.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "unicorn-magic",
            "direct": false,
            "version": "0.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "unicorn-magic",
            "direct": false,
            "version": "0.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "unique-string",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "universal-user-agent",
            "direct": false,
            "version": "7.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "universalify",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "unpipe",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "uri-js",
            "direct": false,
            "version": "4.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "url-join",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "url-template",
            "direct": false,
            "version": "2.0.8",
            "ecosystem": "npm"
          },
          {
            "name": "util-deprecate",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "validate-npm-package-license",
            "direct": false,
            "version": "3.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "validate-npm-package-name",
            "direct": false,
            "version": "7.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "vary",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "vite",
            "direct": false,
            "version": "7.3.6",
            "ecosystem": "npm"
          },
          {
            "name": "vite-node",
            "direct": false,
            "version": "3.2.4",
            "ecosystem": "npm"
          },
          {
            "name": "vitest",
            "direct": false,
            "version": "3.2.6",
            "ecosystem": "npm"
          },
          {
            "name": "walk-up-path",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "web-streams-polyfill",
            "direct": false,
            "version": "3.3.3",
            "ecosystem": "npm"
          },
          {
            "name": "web-worker",
            "direct": false,
            "version": "1.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "which",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "which",
            "direct": false,
            "version": "6.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "why-is-node-running",
            "direct": false,
            "version": "2.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "word-wrap",
            "direct": false,
            "version": "1.2.5",
            "ecosystem": "npm"
          },
          {
            "name": "wordwrap",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "wrap-ansi",
            "direct": false,
            "version": "7.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "wrap-ansi",
            "direct": false,
            "version": "9.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "wrappy",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "write-file-atomic",
            "direct": false,
            "version": "7.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "wsl-utils",
            "direct": false,
            "version": "0.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "xtend",
            "direct": false,
            "version": "4.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "y18n",
            "direct": false,
            "version": "5.0.8",
            "ecosystem": "npm"
          },
          {
            "name": "yallist",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "yallist",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "yargs",
            "direct": false,
            "version": "16.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "yargs",
            "direct": false,
            "version": "18.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "yargs-parser",
            "direct": false,
            "version": "20.2.9",
            "ecosystem": "npm"
          },
          {
            "name": "yargs-parser",
            "direct": false,
            "version": "22.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "yocto-queue",
            "direct": false,
            "version": "0.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "yoctocolors",
            "direct": false,
            "version": "2.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "zod-to-json-schema",
            "direct": false,
            "version": "3.25.2",
            "ecosystem": "npm"
          }
        ],
        "collected": true,
        "truncated": false,
        "total_count": 698,
        "direct_count": 7,
        "indirect_count": 691
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 0,
        "merged_prs": 71,
        "open_issues": 0,
        "closed_ratio": 1,
        "closed_issues": 16,
        "closed_unmerged_prs": 4
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "bakissation",
          "commits": 107,
          "avatar_url": "https://avatars.githubusercontent.com/u/128464105?v=4"
        },
        {
          "type": "User",
          "login": "obatried",
          "commits": 2,
          "avatar_url": "https://avatars.githubusercontent.com/u/82680978?v=4"
        },
        {
          "type": "User",
          "login": "trevor-commits",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/245276381?v=4"
        },
        {
          "type": "User",
          "login": "mjreddy",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/750399?v=4"
        }
      ],
      "contributors_sampled": 4,
      "top_contributor_share": 0.964
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "backmerge.yml",
        "release.yml",
        "test.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [
        "eslint.config.js"
      ],
      "has_editorconfig": false,
      "has_linter_config": true,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "package-lock.json"
      ],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 10,
            "reason": "no binaries found in the repo",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": null,
            "reason": "internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": 10,
            "reason": "17 out of 17 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 1/17 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 6,
            "reason": "project has 2 contributing companies or organizations -- score normalized to 6",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 10,
            "reason": "no dangerous workflow patterns detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 0,
            "reason": "no update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 10,
            "reason": "30 commit(s) and 16 issue activity found in the last 90 days -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": 10,
            "reason": "packaging workflow detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 2,
            "reason": "dependency not pinned by hash detected -- score normalized to 2",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 9,
            "reason": "SAST tool is not run on all commits -- score normalized to 9",
            "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": "8ab04c738e76412419bf3f7bf86742bc4583efb0",
        "ran_at": "2026-07-23T00:47:30Z",
        "aggregate_score": 5.4,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": true,
      "has_dependabot_config": false
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-21T16:32:33Z",
      "oldest_open_prs": [],
      "last_merged_pr_at": "2026-07-17T17:49:13Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": []
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/bakissation/mcp-google-multi",
    "host": "github.com",
    "name": "mcp-google-multi",
    "owner": "bakissation"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 68,
      "inputs": {
        "security": 63,
        "vitality": 82,
        "community": 54,
        "governance": 56,
        "engineering": 86
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "good",
        "name": "Vitality",
        "value": 82,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "good",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 70,
            "inputs": {
              "commits_last_year": 116,
              "human_commit_share": 1,
              "days_since_last_push": 5,
              "active_weeks_last_year": 8
            },
            "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": "8/52 weeks with commits",
                "points": 5.5,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 8
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "116 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 116
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "30 commit(s) and 16 issue activity found in the last 90 days -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "releases_count": 41,
              "latest_release_tag": "v5.2.0-beta.1",
              "releases_from_tags": false,
              "days_since_latest_release": 5,
              "mean_days_between_releases": 0
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "41 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 41
                    }
                  }
                ],
                "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 ~0 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 0
                    }
                  }
                ],
                "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": 54,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "critical",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 20,
            "inputs": {
              "forks": 9,
              "stars": 7,
              "watchers": 1,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "7 stars",
                "points": 12.6,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 7
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "9 forks",
                "points": 7.5,
                "status": "partial",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 9
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "1 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "excellent",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 92,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": true,
              "has_issue_template": false,
              "has_code_of_conduct": true,
              "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": 13.5,
                "status": "met",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 6.3,
                "status": "met",
                "details": [],
                "max_points": 6.3
              }
            ]
          },
          {
            "key": "ecosystem_adoption",
            "band": "moderate",
            "name": "Ecosystem adoption (downloads)",
            "note": "Excluded from scoring (no data or not applicable): Registry dependents. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "registry_dependents"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 57,
            "inputs": {
              "packages": [
                "mcp-google-multi"
              ],
              "dependents": null,
              "ecosystems": "npm",
              "total_downloads": null,
              "monthly_downloads": 2559
            },
            "components": [
              {
                "key": "monthly_downloads",
                "name": "Monthly downloads",
                "detail": "2,559 downloads/month across npm",
                "points": 45.4,
                "status": "partial",
                "details": [
                  {
                    "code": "downloads_monthly",
                    "params": {
                      "count": 2559,
                      "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": 21,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 4,
              "top_contributor_share": 0.964
            },
            "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 96% of commits",
                "points": 0.8,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 96
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "4 contributors",
                "points": 5.4,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 4
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 2 contributing companies or organizations -- score normalized to 6",
                "points": 6,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "good",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 83,
            "inputs": {
              "merged_prs": 71,
              "open_issues": 0,
              "closed_issues": 16,
              "issue_closed_ratio": 1,
              "closed_unmerged_prs": 4
            },
            "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": "71/75 decided PRs merged",
                "points": 36.2,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 71,
                      "decided": 75
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 1/17 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "at_risk",
            "name": "Ownership & stewardship",
            "note": "Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "verified_domain"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 35,
            "inputs": {
              "followers": 2,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "bakissation",
              "public_repos": 12,
              "account_age_days": 1219
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "personal (user) account",
                "points": 10,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_personal",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": "not applicable to user accounts",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_applicable_to_user_accounts",
                    "params": {}
                  }
                ],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "2 followers of bakissation",
                "points": 3.4,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 2,
                      "login": "bakissation"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "12 public repos, account ~3 yr old",
                "points": 14.8,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 12
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 3
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "mcp-google-multi"
              ],
              "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": "38 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 38
                    }
                  }
                ],
                "max_points": 20
              },
              {
                "key": "not_deprecated",
                "name": "Not deprecated",
                "detail": "active, not deprecated or yanked",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "package_not_deprecated",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "excellent",
        "name": "Engineering Quality",
        "value": 86,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "good",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 84,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": true,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "3 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 3
                    }
                  }
                ],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 24,
                "status": "met",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": "eslint.config.js",
                "points": 16,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "eslint.config.js"
                    }
                  }
                ],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "17 out of 17 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": 90,
            "inputs": {
              "topics": [
                "claude",
                "gmail",
                "google-api",
                "google-calendar",
                "google-contacts",
                "google-docs",
                "google-drive",
                "google-sheets",
                "mcp",
                "mcp-server",
                "multi-account",
                "oauth2",
                "typescript",
                "google-search-console",
                "search-console"
              ],
              "has_wiki": false,
              "homepage": "https://berkati.xyz/case-studies/mcp-google-multi/",
              "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://berkati.xyz/case-studies/mcp-google-multi/",
                "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": "15 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 15
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "moderate",
        "name": "Security",
        "value": 63,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "moderate",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Branch-Protection, Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "branch_protection",
                    "signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 54,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 16,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 2,
              "scorecard_aggregate": 5.4
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "17 out of 17 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 1/17 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 2 contributing companies or organizations -- score normalized to 6",
                "points": 1.5,
                "status": "partial",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "no update tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "30 commit(s) and 16 issue activity found in the last 90 days -- score normalized to 10",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow detected",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 2",
                "points": 1,
                "status": "partial",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool is not run on all commits -- score normalized to 9",
                "points": 4.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": "excellent",
            "name": "Dependency advisories",
            "note": "Excluded from scoring (no data or not applicable): Indirect dependencies free of known advisories, No advisories left outstanding. Remaining weights renormalized. Matched 698 resolved dependencies against OSV. This repository publishes no package the index resolves, so the repository dependency graph was assessed instead. That graph mixes development and test pins with shipped dependencies, so only the declared runtime dependencies are scored; transitive findings are reported as context and excluded from the score. Reachability is not analyzed.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "indirect_dependencies_free_of_known_advisories",
                    "no_advisories_left_outstanding"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              },
              {
                "code": "advisories_scope_repository",
                "params": {
                  "assessed": 698
                }
              },
              {
                "code": "advisories_repo_graph_caveat",
                "params": {}
              },
              {
                "code": "advisories_reachability",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "source": "osv",
              "advisories": 8,
              "affected_packages": 5,
              "assessed_packages": 698,
              "unassessed_packages": 0,
              "affected_by_severity": "high 2, moderate 2, low 1",
              "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": "transitive set not separable from development and test dependencies in this scope",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "advisories_scope_not_separable",
                    "params": {}
                  }
                ],
                "max_points": 25
              },
              {
                "key": "no_advisories_left_outstanding",
                "name": "No advisories left outstanding",
                "detail": "no advisory carries a publication date",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "advisories_no_publication_date",
                    "params": {}
                  }
                ],
                "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": 698,
              "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": 2
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "no confirmed policy-scope location match",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "jurisdiction_no_match",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "good",
        "name": "AI Readiness",
        "value": 70,
        "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": 0.99,
              "agent_instruction_files": [
                "CLAUDE.md"
              ],
              "agent_instruction_max_bytes": 10565
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "CLAUDE.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "CLAUDE.md"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "99 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 99,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "moderate",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 66,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "package-lock.json"
              ],
              "has_dockerfile": false,
              "typed_language": true,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": true,
              "typecheck_configs": [
                "tsconfig.json"
              ],
              "agent_commit_share": 0.31,
              "toolchain_manifests": [],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": "eslint.config.js",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "eslint.config.js"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "tsconfig.json",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "tsconfig.json"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "31 of the last 100 commits agent-authored or agent-credited",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 31,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "no automated dependency updates observed",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_dependency_automation",
                    "params": {}
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 2",
                "points": 2,
                "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": 62838,
              "source_files_sampled": 62,
              "oversized_source_files": 1
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "TypeScript (statically typed)",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "TypeScript"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "1/62 source files over 60KB",
                "points": 54.1,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 62,
                      "oversized": 1
                    }
                  }
                ],
                "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",
    "deps.dev does not index npm:mcp-google-multi@5.1.2; advisories assessed against the repository dependency graph instead"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-23T00:47:46.497207Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/b/bakissation/mcp-google-multi.svg",
  "full_name": "bakissation/mcp-google-multi",
  "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.