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

3rg0n / webex-message-handler

Lightweight Webex Mercury WebSocket + KMS message decryption — Node.js, Python, Go, Rust

TypeScript · Go · RustMIT★ 0 estrellas⑂ 2 forksdesde feb 2026Ver en GitHub ↗

3rg0n/webex-message-handler tiene un índice de salud de 59 sobre 100, lo que lo sitúa en la banda Moderado. Su puntuación más alta es Vitality (83/100) y la más baja, Community & Adoption (39/100). Se actualizó por última vez hace 3 días. Una sola persona concentra la mayor parte del trabajo reciente.

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

59
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

Ergon CopelandCuenta personal
6 seguidores18 repositorios públicosdesde mar 2020Cisco

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

RegistroPaqueteVersiónDescargas / mesVersionesÚltima publicaciónEtiquetas
Gogithub.com/3rg0n/webex-message-handler/gov0.6.15-20hace 3 días
crates.iowebex-message-handler0.6.155721hace 3 díasbotkmsmercurywebexwebsocketnetwork-programmingweb-programming
npmwebex-message-handler0.6.15234815hace 3 díaswebexmercurywebsocketkmsbotmessaging
PyPIwebex-message-handler0.6.14-17hace 5 díasbotkmsmercurymessagingwebexwebsocket

Métricas por categoría

Vitalidad

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

83Bueno · 22% del índice global
Cómo se puntúa
36/36Recencia de push — último push hace 3 días
6.9/36Cadencia de commits — 10/52 semanas con commits
17.9/18Volumen de commits — 97 commits en el último año
10/10OpenSSF Scorecard: Maintained — 10 commit(s) and 5 issue activity found in the last 90 days -- score normalized to 10
Datos de entrada utilizados
commits_last_year97
human_commit_share1
days_since_last_push3
active_weeks_last_year10
Cómo se puntúa
27/27Publica versiones — 37 versiones publicadas
36/36Recencia de las versiones — última versión hace 5 días
27/27Cadencia de publicación — una versión cada ~11 días
0/10OpenSSF Scorecard: Signed-Releases — sin datos
Datos de entrada utilizados
releases_count37
latest_release_tagv0.6.14
releases_from_tagsno
days_since_latest_release5
mean_days_between_releases11
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?

39En riesgo · 18% del índice global
Cómo se puntúa
0/60Estrellas — 0 estrellas
0/25Forks — 2 forks
0/15Observadores — 0 observadores
Datos de entrada utilizados
forks2
stars0
watchers0
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Cómo se puntúa
22.5/22.5README
22.5/22.5Licencia — licencia reconocida (MIT)
18/18Guía CONTRIBUTING
0/13.5Código de conducta
0/7.2Plantilla de issues
0/6.3Plantilla de PR
Datos de entrada utilizados
has_readme
has_license
has_contributing
has_issue_templateno
has_code_of_conductno
has_pull_request_templateno
Cómo se puntúa
45.1/80Descargas mensuales — 2405 descargas/mes en crates, go, npm, pypi
0/20Dependientes en el registro — no lo informa este ecosistema
Datos de entrada utilizados
packagesgithub.com/3rg0n/webex-message-handler/go, webex-message-handler, webex-message-handler, webex-message-handler
dependents
ecosystemscrates, go, npm, pypi
total_downloads400
monthly_downloads2405
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?

49En riesgo · 24% del índice global
Cómo se puntúa
9/54Factor bus — la mitad de los commits recae en 1 contribuyente(s)
0.5/22.5Distribución de commits — el principal contribuyente firma el 98% de los commits
2.7/13.5Amplitud de contribuyentes — 2 contribuyentes
3/10OpenSSF Scorecard: Contributors — project has 1 contributing companies or organizations -- score normalized to 3
Datos de entrada utilizados
bus_factor1
contributors_sampled2
top_contributor_share0,979
Cómo se puntúa
43.2/46.8Resolución de issues — 92% de issues cerradas
6.4/38.3Aceptación de PR — 2/12 PR decididos fusionados
0/15OpenSSF Scorecard: Code-Review — Found 1/28 approved changesets -- score normalized to 0
Datos de entrada utilizados
merged_prs2
open_issues1
closed_issues12
issue_closed_ratio0,923
closed_unmerged_prs10
Cómo se puntúa
10/30Respaldo de la propiedad — cuenta personal (usuario)
0/20Dominio verificado — no aplicable a cuentas de usuario
6.1/25Alcance del propietario — 6 seguidores de 3rg0n
21.3/25Trayectoria — 18 repos públicos, cuenta de ~6 años
Datos de entrada utilizados
followers6
owner_typeUser
is_verified
owner_login3rg0n
public_repos18
account_age_days2308
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 — 4 paquete(s) en crates, go, npm, pypi
35/35Recencia de publicación — última publicación hace 3 días
20/20Historial de versiones — 21 versiones en el registro
20/20No obsoleto — activo, ni obsoleto ni retirado
Datos de entrada utilizados
packagesgithub.com/3rg0n/webex-message-handler/go, webex-message-handler, webex-message-handler, webex-message-handler
ecosystemscrates, go, npm, pypi
any_deprecatedno
min_days_since_publish3

Calidad de Ingeniería

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

68Moderado · 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 — .eslintrc.cjs
0/9.6Hooks de pre-commit
0/6.4.editorconfig
0/20OpenSSF Scorecard: CI-Tests — 0 out of 1 merged PRs checked by a CI test -- score normalized to 0
Datos de entrada utilizados
has_ci
has_tests
has_editorconfigno
has_linter_config
has_precommit_configno
Cómo se puntúa
30/30README
25/25Directorio de documentación
0/15Sitio de documentación / página del proyecto
10/10Descripción del repositorio
0/10Topics
10/10Wiki
Datos de entrada utilizados
topics
has_wiki
homepage
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?

52Moderado · 16% del índice global
Cómo se puntúa
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — branch protection not enabled on development/release branches
0/2.5CI-Tests — 0 out of 1 merged PRs checked by a CI test -- score normalized to 0
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 1/28 approved changesets -- score normalized to 0
0.8/2.5Contributors — project has 1 contributing companies or organizations -- score normalized to 3
10/10Dangerous-Workflow — no dangerous workflow patterns detected
0/7.5Dependency-Update-Tool — no update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5Licencia — license file detected
7.5/7.5Maintained — 10 commit(s) and 5 issue activity found in the last 90 days -- score normalized to 10
5/5Packaging — packaging workflow detected
2.5/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 5
3.5/5SAST — SAST tool detected but not run on all commits
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — sin datos
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
2.2/7.5Vulnerabilities — 7 existing vulnerabilities detected
Datos de entrada utilizados
sourceopenssf_scorecard
checks_evaluated17
scorecard_versionv5.5.0
checks_inconclusive1
scorecard_aggregate4,3
Excluidos de la puntuación (sin datos o no aplicable): signed_releases. Los pesos restantes se han renormalizado.
Cómo se puntúa
26.6/35Dependencias directas libres de avisos conocidos — 1 afectados: golang.org/x/crypto v0.54.0 (unknown)
0/25Dependencias indirectas libres de avisos conocidos — el conjunto transitivo no es separable de las dependencias de desarrollo y prueba en este alcance
40/40Sin avisos pendientes — ningún aviso lleva público más de 90 días
Datos de entrada utilizados
sourceosv
advisories9
affected_packages5
assessed_packages516
unassessed_packages30
affected_by_severityhigh 4, unknown 1
direct_affected_packages1
Excluidos de la puntuación (sin datos o no aplicable): Dependencias indirectas libres de avisos conocidos. Los pesos restantes se han renormalizado. Se cotejaron 516 dependencias resueltas con OSV. 30 no pudieron evaluarse: sin versión resuelta, ecosistema no admitido o fuera de la lista de paquetes informada. 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.

66Moderado · 0% del índice global
Cómo se puntúa
0/45Instrucciones para agentes — sin CLAUDE.md / AGENTS.md / reglas de editor
0/15Documentación legible por máquinas (llms.txt)
40/40Historial de commits legible — 95 de 97 commits humanos declaran su intención (asunto estructurado o cuerpo explicativo)
Datos de entrada utilizados
has_llms_txtno
legible_history_share0,979
agent_instruction_files
agent_instruction_max_bytes
Cómo se puntúa
12.6/18Arranque con un solo comando — go/go.mod, rust/Cargo.toml (convención del toolchain, sin ejecutor de tareas)
22/22Pruebas automatizadas
11/11Configuración de lint / formato — .eslintrc.cjs
11/11Verificación estática de tipos — node/tsconfig.json
10/10Entorno reproducible — lockfile
10/10Práctica demostrada con agentes — 81 de los últimos 97 commits con autoría o crédito de agente
0/8Mantenimiento automatizado — no se observan actualizaciones automáticas de dependencias
5/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 5
Datos de entrada utilizados
has_nixno
has_tests
lockfilesgo.sum, pnpm-lock.yaml
has_dockerfileno
typed_language
bootstrap_files
has_devcontainerno
has_linter_config
typecheck_configsnode/tsconfig.json
agent_commit_share0,835
toolchain_manifestsgo/go.mod, rust/Cargo.toml
dependency_bot_commit_share0
Cómo se puntúa
45/45Código verificable por tipos — TypeScript (tipado estático)
55/55Tamaños de archivo manejables — 0/99 archivos fuente de más de 60 KB
Datos de entrada utilizados
primary_languageTypeScript
largest_source_bytes44.381
source_files_sampled99
oversized_source_files0
Cómo se puntúa
0/40Esquema de API (OpenAPI/GraphQL/proto)
0/20Servidor MCP
40/40Ejemplos ejecutables — examples
Datos de entrada utilizados
example_dirsexamples
has_mcp_signalno
api_schema_files

Datos clave

0estrellas de GitHub
2contribuidores
97commits en los últimos 12 meses
3días desde el último push
37versiones publicadas
1factor bus
1issues abiertas
crates.io, Go, npm, PyPIecosistemas de paquetes

Más detalle

Historial de estrellas y forks 0 ★ / 2 ⇿
0Estrellas
2Forks
8Versiones

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.

111222212026-042026-052026-06
Mayor 0Menor 0Parche 8
OpenSSF Scorecard 4.3 / 10
4.3agregado

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-27 14:07 UTC

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
0CI-Tests0 out of 1 merged PRs checked by a CI test -- score normalized to 0
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 1/28 approved changesets -- score normalized to 0
3Contributorsproject has 1 contributing companies or organizations -- score normalized to 3
10Dangerous-Workflowno dangerous workflow patterns detected
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
10Maintained10 commit(s) and 5 issue activity found in the last 90 days -- score normalized to 10
10Packagingpackaging workflow detected
5Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 5
7SASTSAST tool detected but not run on all commits
0Security-Policysecurity policy file not detected
n/dSigned-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
3Vulnerabilities7 existing vulnerabilities detected
Dependencias directas 31
RegistroPaqueteRestricción de versiónManifiesto
Gogithub.com/go-jose/go-jose/v4v4.1.4go/go.mod
Gogithub.com/google/uuidv1.6.0go/go.mod
Gogolang.org/x/cryptov0.54.0go/go.mod
Gogithub.com/coder/websocketv1.8.15go/go.mod
npmnode-jose^2.2.0node/package.json
npmnode-kms^0.4.1node/package.json
npmundici^8.7.0node/package.json
PyPIaiohttp>=3.14.1python/pyproject.toml
PyPIcryptography>=48.0.1python/pyproject.toml
PyPIjwcrypto>=1.5.7python/pyproject.toml
crates.iotokio1rust/Cargo.toml
crates.iotokio-tungstenite0.24rust/Cargo.toml
crates.ioreqwest0.12rust/Cargo.toml
crates.ioserde1rust/Cargo.toml
crates.ioserde_json1rust/Cargo.toml
crates.iouuid1rust/Cargo.toml
crates.iothiserror2rust/Cargo.toml
crates.iotracing0.1rust/Cargo.toml
crates.iourl2rust/Cargo.toml
crates.iofutures-util0.3rust/Cargo.toml
crates.iobase640.22rust/Cargo.toml
crates.iop2560.13rust/Cargo.toml
crates.iohkdf0.12rust/Cargo.toml
crates.iosha10.10rust/Cargo.toml
crates.iosha20.10rust/Cargo.toml
crates.iorand0.8rust/Cargo.toml
crates.ioaes-gcm0.10rust/Cargo.toml
crates.ioaes-kw0.2rust/Cargo.toml
crates.iorsa0.9rust/Cargo.toml
crates.ioregex1rust/Cargo.toml
crates.ioonce_cell1rust/Cargo.toml
Todas las dependencias 546

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

RegistroPaqueteVersiónRelación
crates.ioaes-gcmdirecta
crates.ioaes-kwdirecta
crates.iobase64directa
crates.iofutures-utildirecta
crates.iohkdfdirecta
crates.ioonce_celldirecta
crates.iop256directa
crates.ioranddirecta
crates.ioregexdirecta
crates.ioreqwestdirecta
crates.iorsadirecta
crates.ioserdedirecta
crates.ioserde_jsondirecta
crates.iosha1directa
crates.iosha2directa
crates.iothiserrordirecta
crates.iotokiodirecta
crates.iotokio-tungstenitedirecta
crates.iotracingdirecta
crates.iourldirecta
crates.iouuiddirecta
Gogithub.com/coder/websocketv1.8.15directa
Gogithub.com/go-jose/go-jose/v4v4.1.4directa
Gogithub.com/google/uuidv1.6.0directa
Gogolang.org/x/cryptov0.54.0directa
npmnode-jose2.2.0directa
npmnode-kms0.4.1directa
npmundici8.7.0directa
PyPIaiohttpdirecta
PyPIcryptographydirecta
PyPIjwcryptodirecta
crates.iotracing-subscriberindirecta
crates.iowiremockindirecta
npm@babel/code-frame7.29.0indirecta
npm@babel/code-frame8.0.0indirecta
npm@babel/compat-data8.0.0indirecta
npm@babel/core8.0.1indirecta
npm@babel/generator7.29.1indirecta
npm@babel/generator8.0.0indirecta
npm@babel/helper-compilation-targets8.0.0indirecta
npm@babel/helper-globals8.0.0indirecta
npm@babel/helper-plugin-utils7.28.6indirecta
npm@babel/helper-string-parser7.27.1indirecta
npm@babel/helper-string-parser8.0.0indirecta
npm@babel/helper-validator-identifier7.28.5indirecta
npm@babel/helper-validator-identifier8.0.2indirecta
npm@babel/helper-validator-option8.0.0indirecta
npm@babel/helpers8.0.0indirecta
npm@babel/parser7.29.2indirecta
npm@babel/parser8.0.0indirecta
npm@babel/plugin-syntax-async-generators7.8.4indirecta
npm@babel/plugin-syntax-bigint7.8.3indirecta
npm@babel/plugin-syntax-class-properties7.12.13indirecta
npm@babel/plugin-syntax-class-static-block7.14.5indirecta
npm@babel/plugin-syntax-import-attributes7.28.6indirecta
npm@babel/plugin-syntax-import-meta7.10.4indirecta
npm@babel/plugin-syntax-json-strings7.8.3indirecta
npm@babel/plugin-syntax-jsx7.28.6indirecta
npm@babel/plugin-syntax-logical-assignment-operators7.10.4indirecta
npm@babel/plugin-syntax-nullish-coalescing-operator7.8.3indirecta
npm@babel/plugin-syntax-numeric-separator7.10.4indirecta
npm@babel/plugin-syntax-object-rest-spread7.8.3indirecta
npm@babel/plugin-syntax-optional-catch-binding7.8.3indirecta
npm@babel/plugin-syntax-optional-chaining7.8.3indirecta
npm@babel/plugin-syntax-private-property-in-object7.14.5indirecta
npm@babel/plugin-syntax-top-level-await7.14.5indirecta
npm@babel/plugin-syntax-typescript7.28.6indirecta
npm@babel/template7.28.6indirecta
npm@babel/template8.0.0indirecta
npm@babel/traverse8.0.0indirecta
npm@babel/types7.29.0indirecta
npm@babel/types8.0.0indirecta
npm@bcoe/v8-coverage0.2.3indirecta
npm@cspotcode/source-map-support0.8.1indirecta
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/eslintrc2.1.4indirecta
npm@eslint/js8.57.0indirecta
npm@humanwhocodes/config-array0.11.14indirecta
npm@humanwhocodes/module-importer1.0.1indirecta
npm@humanwhocodes/object-schema2.0.3indirecta
npm@istanbuljs/load-nyc-config1.1.0indirecta
npm@istanbuljs/schema0.1.3indirecta
npm@jest/console29.7.0indirecta
npm@jest/core29.7.0indirecta
npm@jest/environment29.7.0indirecta
npm@jest/expect29.7.0indirecta
npm@jest/expect-utils29.7.0indirecta
npm@jest/fake-timers29.7.0indirecta
npm@jest/globals29.7.0indirecta
npm@jest/pattern30.0.1indirecta
npm@jest/reporters29.7.0indirecta
npm@jest/schemas29.6.3indirecta
npm@jest/schemas30.0.5indirecta
npm@jest/source-map29.6.3indirecta
npm@jest/test-result29.7.0indirecta
npm@jest/test-sequencer29.7.0indirecta
npm@jest/transform29.7.0indirecta
npm@jest/transform30.3.0indirecta
npm@jest/types29.6.3indirecta
npm@jest/types30.3.0indirecta
npm@jridgewell/gen-mapping0.3.13indirecta
npm@jridgewell/resolve-uri3.1.2indirecta
npm@jridgewell/sourcemap-codec1.5.5indirecta
npm@jridgewell/trace-mapping0.3.31indirecta
npm@jridgewell/trace-mapping0.3.9indirecta
npm@nodelib/fs.scandir2.1.5indirecta
npm@nodelib/fs.stat2.0.5indirecta
npm@nodelib/fs.walk1.2.8indirecta
npm@rollup/rollup-android-arm-eabi4.60.0indirecta
npm@rollup/rollup-android-arm644.60.0indirecta
npm@rollup/rollup-darwin-arm644.60.0indirecta
npm@rollup/rollup-darwin-x644.60.0indirecta
npm@rollup/rollup-freebsd-arm644.60.0indirecta
npm@rollup/rollup-freebsd-x644.60.0indirecta
npm@rollup/rollup-linux-arm-gnueabihf4.60.0indirecta
npm@rollup/rollup-linux-arm-musleabihf4.60.0indirecta
npm@rollup/rollup-linux-arm64-gnu4.60.0indirecta
npm@rollup/rollup-linux-arm64-musl4.60.0indirecta
npm@rollup/rollup-linux-loong64-gnu4.60.0indirecta
npm@rollup/rollup-linux-loong64-musl4.60.0indirecta
npm@rollup/rollup-linux-ppc64-gnu4.60.0indirecta
npm@rollup/rollup-linux-ppc64-musl4.60.0indirecta
npm@rollup/rollup-linux-riscv64-gnu4.60.0indirecta
npm@rollup/rollup-linux-riscv64-musl4.60.0indirecta
npm@rollup/rollup-linux-s390x-gnu4.60.0indirecta
npm@rollup/rollup-linux-x64-gnu4.60.0indirecta
npm@rollup/rollup-linux-x64-musl4.60.0indirecta
npm@rollup/rollup-openbsd-x644.60.0indirecta
npm@rollup/rollup-openharmony-arm644.60.0indirecta
npm@rollup/rollup-win32-arm64-msvc4.60.0indirecta
npm@rollup/rollup-win32-ia32-msvc4.60.0indirecta
npm@rollup/rollup-win32-x64-gnu4.60.0indirecta
npm@rollup/rollup-win32-x64-msvc4.60.0indirecta
npm@sinclair/typebox0.27.10indirecta
npm@sinclair/typebox0.34.48indirecta
npm@sinonjs/commons3.0.1indirecta
npm@sinonjs/fake-timers10.3.0indirecta
npm@tsconfig/node101.0.12indirecta
npm@tsconfig/node121.0.11indirecta
npm@tsconfig/node141.0.3indirecta
npm@tsconfig/node161.0.4indirecta
npm@types/babel__core7.20.5indirecta
npm@types/babel__generator7.27.0indirecta
npm@types/babel__template7.4.4indirecta
npm@types/babel__traverse7.28.0indirecta
npm@types/estree1.0.8indirecta
npm@types/gensync1.0.5indirecta
npm@types/graceful-fs4.1.9indirecta
npm@types/istanbul-lib-coverage2.0.6indirecta
npm@types/istanbul-lib-report3.0.3indirecta
npm@types/istanbul-reports3.0.4indirecta
npm@types/jest29.5.14indirecta
npm@types/jsesc2.5.1indirecta
npm@types/node22.13.4indirecta
npm@types/node25.5.0indirecta
npm@types/stack-utils2.0.3indirecta
npm@types/yargs17.0.35indirecta
npm@types/yargs-parser21.0.3indirecta
npm@typescript-eslint/eslint-plugin8.57.2indirecta
npm@typescript-eslint/parser8.57.2indirecta
npm@typescript-eslint/project-service8.57.2indirecta
npm@typescript-eslint/scope-manager8.57.2indirecta
npm@typescript-eslint/tsconfig-utils8.57.2indirecta
npm@typescript-eslint/type-utils8.57.2indirecta
npm@typescript-eslint/types8.57.2indirecta
npm@typescript-eslint/typescript-estree8.57.2indirecta
npm@typescript-eslint/utils8.57.2indirecta
npm@typescript-eslint/visitor-keys8.57.2indirecta
npm@ungap/structured-clone1.3.0indirecta
npmacorn8.16.0indirecta
npmacorn-jsx5.3.2indirecta
npmacorn-walk8.3.5indirecta
npmajv6.14.0indirecta
npmansi-escapes4.3.2indirecta
npmansi-regex5.0.1indirecta
npmansi-styles4.3.0indirecta
npmansi-styles5.2.0indirecta
npmany-promise1.3.0indirecta
npmanymatch3.1.3indirecta
npmarg4.1.3indirecta
npmargparse2.0.1indirecta
npmbabel-jest29.7.0indirecta
npmbabel-jest30.3.0indirecta
npmbabel-plugin-istanbul6.1.1indirecta
npmbabel-plugin-istanbul7.0.1indirecta
npmbabel-plugin-jest-hoist29.6.3indirecta
npmbabel-plugin-jest-hoist30.3.0indirecta
npmbabel-preset-current-node-syntax1.2.0indirecta
npmbabel-preset-jest29.6.3indirecta
npmbabel-preset-jest30.3.0indirecta
npmbalanced-match1.0.2indirecta
npmbalanced-match4.0.4indirecta
npmbase64-js1.5.1indirecta
npmbase64url3.0.1indirecta
npmbaseline-browser-mapping2.10.11indirecta
npmbrace-expansion1.1.13indirecta
npmbrace-expansion5.0.6indirecta
npmbraces3.0.3indirecta
npmbrowserslist4.28.1indirecta
npmbs-logger0.2.6indirecta
npmbser2.1.1indirecta
npmbuffer6.0.3indirecta
npmbuffer-from1.1.2indirecta
npmbundle-require5.1.0indirecta
npmcac6.7.14indirecta
npmcallsites3.1.0indirecta
npmcamelcase5.3.1indirecta
npmcamelcase6.3.0indirecta
npmcaniuse-lite1.0.30001781indirecta
npmchalk4.1.2indirecta
npmchar-regex1.0.2indirecta
npmchokidar4.0.3indirecta
npmci-info3.9.0indirecta
npmci-info4.4.0indirecta
npmcjs-module-lexer1.4.3indirecta
npmcliui8.0.1indirecta
npmco4.6.0indirecta
npmcollect-v8-coverage1.0.3indirecta
npmcolor-convert2.0.1indirecta
npmcolor-name1.1.4indirecta
npmcommander4.1.1indirecta
npmconcat-map0.0.1indirecta
npmconfbox0.1.8indirecta
npmconsola3.4.2indirecta
npmconvert-source-map2.0.0indirecta
npmcreate-jest29.7.0indirecta
npmcreate-require1.1.1indirecta
npmcross-spawn7.0.6indirecta
npmdebug4.4.3indirecta
npmdedent1.7.2indirecta
npmdeep-is0.1.4indirecta
npmdeepmerge4.3.1indirecta
npmdetect-newline3.1.0indirecta
npmdiff4.0.4indirecta
npmdiff-sequences29.6.3indirecta
npmdoctrine3.0.0indirecta
npmelectron-to-chromium1.5.328indirecta
npmemittery0.13.1indirecta
npmemoji-regex8.0.0indirecta
npmempathic2.0.1indirecta
npmerror-ex1.3.4indirecta
npmes6-promise2.3.0indirecta
npmes6-promise4.2.8indirecta
npmesbuild0.28.1indirecta
npmescalade3.2.0indirecta
npmescape-string-regexp2.0.0indirecta
npmescape-string-regexp4.0.0indirecta
npmeslint8.57.0indirecta
npmeslint-scope7.2.2indirecta
npmeslint-visitor-keys3.4.3indirecta
npmeslint-visitor-keys5.0.1indirecta
npmespree9.6.1indirecta
npmesquery1.7.0indirecta
npmesrecurse4.3.0indirecta
npmestraverse5.3.0indirecta
npmesutils2.0.3indirecta
npmexeca5.1.1indirecta
npmexit0.1.2indirecta
npmexpect29.7.0indirecta
npmfast-deep-equal3.1.3indirecta
npmfast-json-stable-stringify2.1.0indirecta
npmfast-levenshtein2.0.6indirecta
npmfastq1.20.1indirecta
npmfb-watchman2.0.2indirecta
npmfdir6.5.0indirecta
npmfile-entry-cache6.0.1indirecta
npmfill-range7.1.1indirecta
npmfind-up4.1.0indirecta
npmfind-up5.0.0indirecta
npmfix-dts-default-cjs-exports1.0.1indirecta
npmflat-cache3.2.0indirecta
npmflatted3.4.2indirecta
npmfs.realpath1.0.0indirecta
npmfsevents2.3.3indirecta
npmfunction-bind1.1.2indirecta
npmgensync1.0.0-beta.2indirecta
npmget-caller-file2.0.5indirecta
npmget-package-type0.1.0indirecta
npmget-stream6.0.1indirecta
npmget-tsconfig4.13.7indirecta
npmglob7.2.3indirecta
npmglob-parent6.0.2indirecta
npmglobals13.24.0indirecta
npmgraceful-fs4.2.11indirecta
npmgraphemer1.4.0indirecta
npmhandlebars4.7.9indirecta
npmhas-flag4.0.0indirecta
npmhasown2.0.2indirecta
npmhtml-escaper2.0.2indirecta
npmhuman-signals2.1.0indirecta
npmieee7541.2.1indirecta
npmignore5.3.2indirecta
npmignore7.0.5indirecta
npmimport-fresh3.3.1indirecta
npmimport-local3.2.0indirecta
npmimport-meta-resolve4.2.0indirecta
npmimurmurhash0.1.4indirecta
npminflight1.0.6indirecta
npminherits2.0.4indirecta
npmis-arrayish0.2.1indirecta
npmis-core-module2.16.1indirecta
npmis-extglob2.1.1indirecta
npmis-fullwidth-code-point3.0.0indirecta
npmis-generator-fn2.1.0indirecta
npmis-glob4.0.3indirecta
npmis-number7.0.0indirecta
npmis-path-inside3.0.3indirecta
npmis-stream2.0.1indirecta
npmisexe2.0.0indirecta
npmistanbul-lib-coverage3.2.2indirecta
npmistanbul-lib-instrument5.2.1indirecta
npmistanbul-lib-instrument6.0.3indirecta
npmistanbul-lib-report3.0.1indirecta
npmistanbul-lib-source-maps4.0.1indirecta
npmistanbul-reports3.2.0indirecta
npmjest29.7.0indirecta
npmjest-changed-files29.7.0indirecta
npmjest-circus29.7.0indirecta
npmjest-cli29.7.0indirecta
npmjest-config29.7.0indirecta
npmjest-diff29.7.0indirecta
npmjest-docblock29.7.0indirecta
npmjest-each29.7.0indirecta
npmjest-environment-node29.7.0indirecta
npmjest-get-type29.6.3indirecta
npmjest-haste-map29.7.0indirecta
npmjest-haste-map30.3.0indirecta
npmjest-leak-detector29.7.0indirecta
npmjest-matcher-utils29.7.0indirecta
npmjest-message-util29.7.0indirecta
npmjest-mock29.7.0indirecta
npmjest-pnp-resolver1.2.3indirecta
npmjest-regex-util29.6.3indirecta
npmjest-regex-util30.0.1indirecta
npmjest-resolve29.7.0indirecta
npmjest-resolve-dependencies29.7.0indirecta
npmjest-runner29.7.0indirecta
npmjest-runtime29.7.0indirecta
npmjest-snapshot29.7.0indirecta
npmjest-util29.7.0indirecta
npmjest-util30.3.0indirecta
npmjest-validate29.7.0indirecta
npmjest-watcher29.7.0indirecta
npmjest-worker29.7.0indirecta
npmjest-worker30.3.0indirecta
npmjiti2.6.1indirecta
npmjoycon3.1.1indirecta
npmjs-tokens10.0.0indirecta
npmjs-tokens4.0.0indirecta
npmjs-yaml5.0.0indirecta
npmjsesc3.1.0indirecta
npmjson-buffer3.0.1indirecta
npmjson-parse-even-better-errors2.3.1indirecta
npmjson-schema-traverse0.4.1indirecta
npmjson-stable-stringify-without-jsonify1.0.1indirecta
npmjson52.2.3indirecta
npmkeyv4.5.4indirecta
npmkleur3.0.3indirecta
npmleven3.1.0indirecta
npmlevn0.4.1indirecta
npmlilconfig3.1.3indirecta
npmlines-and-columns1.2.4indirecta
npmload-tsconfig0.2.5indirecta
npmlocate-path5.0.0indirecta
npmlocate-path6.0.0indirecta
npmlodash4.18.1indirecta
npmlodash._arraycopy3.0.0indirecta
npmlodash._arrayeach3.0.0indirecta
npmlodash._baseassign3.2.0indirecta
npmlodash._baseclone3.3.0indirecta
npmlodash._basecopy3.0.1indirecta
npmlodash._basefor3.0.3indirecta
npmlodash._bindcallback3.0.1indirecta
npmlodash._getnative3.9.1indirecta
npmlodash._isiterateecall3.0.9indirecta
npmlodash.clone3.0.3indirecta
npmlodash.clonedeep3.0.2indirecta
npmlodash.isarguments3.1.0indirecta
npmlodash.isarray3.0.4indirecta
npmlodash.keys3.1.2indirecta
npmlodash.memoize4.1.2indirecta
npmlodash.merge4.6.2indirecta
npmlong5.3.2indirecta
npmlru-cache11.5.1indirecta
npmmagic-string0.30.21indirecta
npmmake-dir4.0.0indirecta
npmmake-error1.3.6indirecta
npmmakeerror1.0.12indirecta
npmmerge-stream2.0.0indirecta
npmmicromatch4.0.8indirecta
npmmimic-fn2.1.0indirecta
npmminimatch10.2.4indirecta
npmminimatch3.1.5indirecta
npmminimist1.2.8indirecta
npmmlly1.8.2indirecta
npmms2.1.3indirecta
npmmz2.7.0indirecta
npmnatural-compare1.4.0indirecta
npmneo-async2.6.2indirecta
npmnode-forge1.4.0indirecta
npmnode-int640.4.0indirecta
npmnode-releases2.0.36indirecta
npmnormalize-path3.0.0indirecta
npmnpm-run-path4.0.1indirecta
npmobject-assign4.1.1indirecta
npmobug2.1.3indirecta
npmonce1.4.0indirecta
npmonetime5.1.2indirecta
npmoptionator0.9.4indirecta
npmp-limit2.3.0indirecta
npmp-limit3.1.0indirecta
npmp-locate4.1.0indirecta
npmp-locate5.0.0indirecta
npmp-try2.2.0indirecta
npmpako2.1.0indirecta
npmparent-module1.0.1indirecta
npmparse-json5.2.0indirecta
npmpath-exists4.0.0indirecta
npmpath-is-absolute1.0.1indirecta
npmpath-key3.1.1indirecta
npmpath-parse1.0.7indirecta
npmpathe2.0.3indirecta
npmpicocolors1.1.1indirecta
npmpicomatch2.3.2indirecta
npmpicomatch4.0.4indirecta
npmpirates4.0.7indirecta
npmpkg-dir4.2.0indirecta
npmpkg-types1.3.1indirecta
npmpostcss-load-config6.0.1indirecta
npmprelude-ls1.2.1indirecta
npmpretty-format29.7.0indirecta
npmprocess0.11.10indirecta
npmprompts2.4.2indirecta
npmpunycode2.3.1indirecta
npmpure-rand6.1.0indirecta
npmqueue-microtask1.2.3indirecta
npmreact-is18.3.1indirecta
npmreaddirp4.1.2indirecta
npmrequire-directory2.1.1indirecta
npmresolve1.22.11indirecta
npmresolve-cwd3.0.0indirecta
npmresolve-from4.0.0indirecta
npmresolve-from5.0.0indirecta
npmresolve-pkg-maps1.0.0indirecta
npmresolve.exports2.0.3indirecta
npmreusify1.1.0indirecta
npmrimraf3.0.2indirecta
npmrollup4.60.0indirecta
npmrun-parallel1.2.0indirecta
npmsemver6.3.1indirecta
npmsemver7.7.4indirecta
npmshebang-command2.0.0indirecta
npmshebang-regex3.0.0indirecta
npmsignal-exit3.0.7indirecta
npmsignal-exit4.1.0indirecta
npmsisteransi1.0.5indirecta
npmslash3.0.0indirecta
npmsource-map0.6.1indirecta
npmsource-map0.7.6indirecta
npmsource-map-support0.5.13indirecta
npmstack-utils2.0.6indirecta
npmstring-length4.0.2indirecta
npmstring-width4.2.3indirecta
npmstrip-ansi6.0.1indirecta
npmstrip-bom4.0.0indirecta
npmstrip-final-newline2.0.0indirecta
npmstrip-json-comments3.1.1indirecta
npmsucrase3.35.1indirecta
npmsupports-color7.2.0indirecta
npmsupports-color8.1.1indirecta
npmsupports-preserve-symlinks-flag1.0.0indirecta
npmtest-exclude6.0.0indirecta
npmtext-table0.2.0indirecta
npmthenify3.3.1indirecta
npmthenify-all1.6.0indirecta
npmtinyexec0.3.2indirecta
npmtinyglobby0.2.15indirecta
npmtmpl1.0.5indirecta
npmto-regex-range5.0.1indirecta
npmtree-kill1.2.2indirecta
npmts-api-utils2.5.0indirecta
npmts-interface-checker0.1.13indirecta
npmts-jest29.4.6indirecta
npmts-node10.9.2indirecta
npmtsup8.5.1indirecta
npmtsx4.21.0indirecta
npmtype-check0.4.0indirecta
npmtype-detect4.0.8indirecta
npmtype-fest0.20.2indirecta
npmtype-fest0.21.3indirecta
npmtype-fest4.41.0indirecta
npmtypescript5.9.3indirecta
npmufo1.6.3indirecta
npmuglify-js3.19.3indirecta
npmundici-types6.20.0indirecta
npmundici-types7.18.2indirecta
npmupdate-browserslist-db1.2.3indirecta
npmuri-js4.4.1indirecta
npmuuid11.1.1indirecta
npmuuid2.0.3indirecta
npmv8-compile-cache-lib3.0.1indirecta
npmv8-to-istanbul9.3.0indirecta
npmwalker1.0.8indirecta
npmwhich2.0.2indirecta
npmword-wrap1.2.5indirecta
npmwordwrap1.0.0indirecta
npmwrap-ansi7.0.0indirecta
npmwrappy1.0.2indirecta
npmwrite-file-atomic4.0.2indirecta
npmwrite-file-atomic5.0.1indirecta
npmy18n5.0.8indirecta
npmyargs17.7.2indirecta
npmyargs-parser21.1.1indirecta
npmyn3.1.1indirecta
npmyocto-queue0.1.0indirecta
PyPImypyindirecta
PyPIpytestindirecta
PyPIpytest-asyncioindirecta
PyPIruffindirecta
Avisos de dependencias 5

Este repositorio no publica ningún paquete que el índice resuelva, así que se evaluó su propio grafo de dependencias — 516 paquetes, que incluyen también fijaciones de desarrollo y prueba que nunca se distribuyen: 5 tienen avisos conocidos, de los cuales 1 son directas. 30 no pudieron evaluarse: sin versión resuelta, ecosistema no admitido, o fuera de la lista de paquetes informada.

PaqueteVersiónRelaciónGravedadAvisosCorregido en
brace-expansion1.1.13indirectaalta25.0.8
brace-expansion5.0.6indirectaalta25.0.8
js-yaml5.0.0indirectaalta35.2.2
uuid2.0.3indirectaalta113.0.1
golang.org/x/cryptov0.54.0directadesconocida1

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": [],
      "is_fork": false,
      "size_kb": 699,
      "has_wiki": true,
      "homepage": null,
      "languages": {
        "Go": 184643,
        "Rust": 184311,
        "Python": 173933,
        "JavaScript": 7266,
        "TypeScript": 235365
      },
      "pushed_at": "2026-07-23T15:42:16Z",
      "created_at": "2026-02-11T15:56:48Z",
      "owner_type": "User",
      "updated_at": "2026-07-23T15:42:06Z",
      "description": "Lightweight Webex Mercury WebSocket + KMS message decryption — Node.js, Python, Go, Rust",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "master",
      "license_spdx_raw": "MIT",
      "primary_language": "TypeScript",
      "significant_languages": [
        "TypeScript",
        "Go",
        "Rust",
        "Python"
      ]
    },
    "owner": {
      "blog": null,
      "name": "Ergon Copeland",
      "type": "User",
      "login": "3rg0n",
      "company": "Cisco",
      "location": "London, UK",
      "followers": 6,
      "avatar_url": "https://avatars.githubusercontent.com/u/62959009?v=4",
      "created_at": "2020-03-31T18:16:10Z",
      "is_verified": null,
      "public_repos": 18,
      "account_age_days": 2308
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v0.6.14",
          "kind": "patch",
          "published_at": "2026-07-21T16:28:46Z"
        },
        {
          "tag": "v0.6.13",
          "kind": "patch",
          "published_at": "2026-07-19T18:13:31Z"
        },
        {
          "tag": "v0.6.12",
          "kind": "patch",
          "published_at": "2026-06-22T17:28:32Z"
        },
        {
          "tag": "v0.6.11",
          "kind": "patch",
          "published_at": "2026-06-02T14:29:22Z"
        },
        {
          "tag": "v0.6.10",
          "kind": "patch",
          "published_at": "2026-06-01T23:20:56Z"
        },
        {
          "tag": "v0.6.9",
          "kind": "patch",
          "published_at": "2026-04-17T16:45:22Z"
        },
        {
          "tag": "v0.6.8",
          "kind": "patch",
          "published_at": "2026-04-13T15:36:04Z"
        },
        {
          "tag": "v0.6.7",
          "kind": "patch",
          "published_at": "2026-04-13T15:09:54Z"
        },
        {
          "tag": "v0.6.6",
          "kind": "patch",
          "published_at": "2026-04-13T14:02:42Z"
        },
        {
          "tag": "v0.6.5",
          "kind": "patch",
          "published_at": "2026-04-13T12:23:40Z"
        },
        {
          "tag": "v0.6.4",
          "kind": "patch",
          "published_at": "2026-04-13T12:12:47Z"
        },
        {
          "tag": "v0.6.3",
          "kind": "patch",
          "published_at": "2026-04-06T13:35:16Z"
        },
        {
          "tag": "v0.6.2",
          "kind": "patch",
          "published_at": "2026-04-05T14:58:08Z"
        },
        {
          "tag": "rust/v0.6.1",
          "kind": "other",
          "published_at": "2026-03-27T23:21:38Z"
        },
        {
          "tag": "go/v0.6.1",
          "kind": "other",
          "published_at": "2026-03-27T23:21:38Z"
        },
        {
          "tag": "python/v0.6.1",
          "kind": "other",
          "published_at": "2026-03-27T23:21:37Z"
        },
        {
          "tag": "node/v0.6.1",
          "kind": "other",
          "published_at": "2026-03-27T23:21:37Z"
        },
        {
          "tag": "rust/v0.6.0",
          "kind": "other",
          "published_at": "2026-03-27T23:11:10Z"
        },
        {
          "tag": "go/v0.6.0",
          "kind": "other",
          "published_at": "2026-03-27T23:11:10Z"
        },
        {
          "tag": "python/v0.6.0",
          "kind": "other",
          "published_at": "2026-03-27T23:11:09Z"
        },
        {
          "tag": "node/v0.6.0",
          "kind": "other",
          "published_at": "2026-03-27T23:11:09Z"
        },
        {
          "tag": "go/v0.5.1",
          "kind": "other",
          "published_at": "2026-03-16T15:18:23Z"
        },
        {
          "tag": "go/v0.5.0",
          "kind": "other",
          "published_at": "2026-02-12T13:19:51Z"
        },
        {
          "tag": "rust/v0.5.0",
          "kind": "other",
          "published_at": "2026-02-12T12:48:26Z"
        },
        {
          "tag": "python/v0.5.0",
          "kind": "other",
          "published_at": "2026-02-12T12:48:04Z"
        },
        {
          "tag": "node/v0.5.0",
          "kind": "other",
          "published_at": "2026-02-12T12:47:54Z"
        },
        {
          "tag": "rust/v0.3.2",
          "kind": "other",
          "published_at": "2026-02-12T09:15:36Z"
        },
        {
          "tag": "go/v0.3.1",
          "kind": "other",
          "published_at": "2026-02-12T09:15:26Z"
        },
        {
          "tag": "python/v0.3.1",
          "kind": "other",
          "published_at": "2026-02-12T09:15:16Z"
        },
        {
          "tag": "node/v0.3.3",
          "kind": "other",
          "published_at": "2026-02-12T09:15:06Z"
        },
        {
          "tag": "node/v0.3.2",
          "kind": "other",
          "published_at": "2026-02-12T00:03:54Z"
        },
        {
          "tag": "rust/v0.3.1",
          "kind": "other",
          "published_at": "2026-02-11T22:52:14Z"
        },
        {
          "tag": "node/v0.3.1",
          "kind": "other",
          "published_at": "2026-02-11T22:52:04Z"
        },
        {
          "tag": "rust/v0.3.0",
          "kind": "other",
          "published_at": "2026-02-11T22:18:42Z"
        },
        {
          "tag": "python/v0.3.0",
          "kind": "other",
          "published_at": "2026-02-11T22:18:32Z"
        },
        {
          "tag": "node/v0.3.0",
          "kind": "other",
          "published_at": "2026-02-11T22:18:23Z"
        },
        {
          "tag": "go/v0.3.0",
          "kind": "other",
          "published_at": "2026-02-11T22:16:16Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "fbf1c62c1a51ead882975b4f367f63f6b2e3ad9e",
          "body": "Card submit clicks arrive as a conversation.activity (verb=cardAction,\nobject.objectType=submit) whose object.inputs is a JWE-encrypted string\n(dir/A256GCM, under the activity's encryptionKeyUrl — the same key as\nmessage content). Every language's parser type-asserted inputs as an\nobject and silentl\n[…]\n Rust, each with\nnew parser + decryptor tests. Adds an opt-in shape-only debug instrument\n(WMH_DEBUG_RAW_ACTIVITY, Go) that never logs content.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(cards): decrypt JWE object.inputs on Action.Submit (v0.6.15)",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-07-23T15:39:51Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "62affeeec9f1cf670f8775b1d142e1265273bdc9",
          "body": "….6.14)\n\nThe library hard-coded the WDM endpoint wdm-a.wbx2.com and never did service\ndiscovery. Webex assigns each org to a region; registering a device in the\nwrong region yields a socket that authorizes and completes the KMS handshake\nbut never receives that org's conversation.activity (REST stil\n[…]\n the 0.6.13 \"backend\nlimitation\" note is marked superseded (root cause was client-side).\n\nThanks to Webex Engineering for the region diagnosis.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(#27): U2C region discovery — register in the org's WDM region (v0…",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-07-21T16:27:10Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "7616855fb7d2f15ee7bb4884849672e601f0029a",
          "body": "…s (v0.6.13)\n\nSecurity:\n- ReDoS (CodeQL js/polynomial-redos, high): the <spark-mention> regex used\n  two unbounded [^>]* around the attribute, backtracking polynomially on\n  crafted message HTML. Rewritten to a single bounded tag match + attribute\n  extraction, in Node and Python (both backtracking \n[…]\ncury-sandbox-activity-report.md: #27 write-up (Webex sandbox-org\n  Mercury backend limitation — not a library bug; production works, verified).\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(security): ReDoS in mention parser + device-leak parity, bump dep…",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-07-19T18:10:47Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "9bbc9ac29259f70accb780b29ba0804902e9a042",
          "body": "A dependency-free repro tool for the silent-delivery bug (#27). Connects an\nOBSERVER account via the library with debug logging, optionally creates a room +\nadds a second user, then posts round-trip messages AS A SEPARATE POSTER (so they\naren't self-filtered) via REST and reports whether the observe\n[…]\nge), stays healthy (ping/pong), but receives ZERO\nconversation.activity — all round-trips report silent delivery. Isolates the bug\nto the library's Mercury layer, independent of any application stack.",
          "is_bot": false,
          "headline": "examples: add observe-harness (standalone Mercury delivery repro)",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-07-18T20:48:23Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6a59a4ef76f7ac5a77c869d44a39222860613b9c",
          "body": "…auth frame\"\n\nThis reverts commit e9a4ce897dee23e94de26ec98df975dbf9a9d868.",
          "is_bot": false,
          "headline": "Revert \"fix(mercury): send raw token (not \"Bearer \"-prefixed) in the …",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-07-18T20:24:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e9a4ce897dee23e94de26ec98df975dbf9a9d868",
          "body": "The Mercury WebSocket authorization frame must carry the RAW access token in\ndata.token, matching the Webex JS SDK (internal-plugin-mercury socket-base.js\n_authorize: data:{token: this.token}). The Go impl prefixed it with \"Bearer \"\n(the HTTP Authorization header form), which is wrong for the WS aut\n[…]\n complete the handshake (buffer_state returns) yet\nreceive no conversation.activity pushes. Send ms.token unprefixed.\n\nVerified: build + unit tests green. Live delivery to be confirmed on the sandbox.",
          "is_bot": false,
          "headline": "fix(mercury): send raw token (not \"Bearer \"-prefixed) in the auth frame",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-07-18T20:02:54Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7239c734bbbd76955fda5e75af93482f523bbe23",
          "body": "- node/README: document the Node >=24.0.0 requirement (was undocumented)\n  and point Node 22 users to 0.6.9 (last release before the engine bump)\n- go/README: Requires Go 1.26.4+ (was stale \"1.21+\")\n- CONTRIBUTING: bump Node (18->24) and Go (1.21->1.26.4) prerequisites\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: update version requirements for v0.6.12",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-06-22T21:40:10Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "c619180aac5f133ff5ab0fb565d4c9a8b3ad1236",
          "body": "Node: bump undici 7.24.6 -> 8.5.0 (7 advisories incl. CVE-2026-12151 High,\nDependabot #24). undici 8.x needs Node >=22.19.0, so engines.node raised to\n>=24.0.0 (Node 24 LTS \"Krypton\") — BREAKING for consumers on Node 22.x.\npnpm overrides added for dev-tool transitives (js-yaml, esbuild, @babel/core)\n[…]\n/staticcheck +\ngovulncheck 0, Rust 45 (unchanged). npm audit 1 moderate remaining\n(node-kms>uuid@2, unreachable). Versions: node+python 0.6.12.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(security): remediate Dependabot/GHAS findings + bump deps (v0.6.12)",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-06-22T17:26:51Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "24baf24635727c41152a11f6b5fe705c82b403b6",
          "body": "Node: drop the uuid dependency entirely — replace uuid.v4() with built-in\ncrypto.randomUUID() (Node >=22.4.0 is already required). Resolves the\nDependabot bump to ESM-only uuid 14.x (#21) at the root instead of working\naround it. Pin node-jose's transitive uuid to >=11.1.1 and brace-expansion\nto >=5\n[…]\nonly; rand unsound only via rand::rng()+custom logger).\n\nAll tests pass: Node 142, Python 73, Rust 45. cargo audit clean; go\ngovulncheck clean.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(security): remediate Dependabot/audit findings (v0.6.11)",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-06-02T14:27:37Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "4aa46bda0162de5ccaaff1643c3f3340ccd5c312",
          "body": "Implements GitHub issues #20 and #23.\n\n#23 (all 4 languages): expose the WDM device registration read-only so\ninbound-only wrappers can make their own outbound calls (e.g. a\nConversation-service read-receipt) using cluster-correct service URLs\ninstead of hardcoding hostnames. Adds deviceRegistration\n[…]\nraw parent\nobject, so ParentID/MessageID were always empty in production.\n\nTests added across all languages; READMEs + CHANGELOG + ADR updated.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: expose WDM service catalog + fix aiohttp connector close (v0.6.10)",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-06-01T23:19:15Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "d730cd44284cf1d0751d721cac1a63af97c8b0a2",
          "body": "Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: add v0.6.9 config options to all READMEs",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-04-17T16:42:29Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "922caa8f92f26834cf31809b3890b57657446bfe",
          "body": "KMS circuit breaker prevents 30s stalls during outages by failing fast\nafter 3 consecutive failures. KMS key fetch retry handles transient\nerrors with 1 attempt + 1s delay. Optional timing metrics callback\nreports connect and decrypt latency. Delivery guarantees section added\nto all READMEs documenting at-most-once semantics.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: add KMS resilience, timing metrics, delivery docs (v0.6.9)",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-04-17T12:20:22Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "89629418f2d4265603640d6c90362522c5a188ac",
          "body": "Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(go): bump go directive to 1.26.2",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-04-13T16:26:57Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "fb0cdd56f4c8b09b556aaba890c4f1186c244424",
          "body": "Webex returns kms:// (not https://) for the kmsCluster field from the\nencryption service. The URL validator was rejecting it. Also fixed bare\ndomain matching (ciscospark.com) in Node.js and Go validators.\n\nPython was already fixed via PR #16 by @ojaber. This applies the same\nfix to Node.js, Go, and Rust with test coverage for all 4 languages.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: accept kms:// scheme for KMS cluster URL (all languages)",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-04-13T15:34:47Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "2ddf8bf40ab793010c65ecb196d5df750d8202e4",
          "body": "fix: accept kms:// scheme for KMS cluster URL",
          "is_bot": false,
          "headline": "fix: accept kms:// scheme for KMS cluster URL (#16)",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-04-13T15:14:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c59ad3f0415aec020dd845e41dc50313e317180a",
          "body": "Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: bump all versions to 0.6.7",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-04-13T14:52:37Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "01cb276181f23de763803dc6733a6a4ead934945",
          "body": "Document mentions, message edits, card actions, room events, and files\nfield across Node.js, Python, Go, and Rust READMEs.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: add v0.6.6 features to all language READMEs",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-04-13T14:19:53Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "4f19e2065ef163aaecc1a0b1c751dc49e5ea0bbb",
          "body": "…es support\n\nFive new features across all 4 languages (Node.js, Python, Go, Rust):\n\n- Mention parsing: extract mentionedPeople/mentionedGroups from <spark-mention> HTML tags\n- Message edit event (message:updated): verb=update + objectType=comment\n- Adaptive Card submissions (attachmentAction:created\n[…]\neated, room:updated): verb=create/update + objectType=conversation\n- Files field: surface file URLs from Mercury activities on DecryptedMessage\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: add mentions, message edits, card actions, room events, and fil…",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-04-13T14:01:00Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "0589666e8eb70b96a4d6fc4853cf8b29b2a66455",
          "body": "Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: bump all versions to 0.6.5",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-04-13T12:22:50Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "0a2e25a6b7fd85cdec808d75cc71dab69ce7d586",
          "body": "All four language-specific READMEs now document parentId,\ntoRestId/fromRestId, and threading usage examples.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: add threading and ID conversion to language READMEs",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-04-13T12:19:10Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "4a88101b1f8b6022803fe4f2fdf262421e5435fa",
          "body": "- Add MercuryParent type and parentId field to DecryptedMessage\n  across all 4 languages, parsed from Mercury activity parent object\n- Add toRestId/fromRestId utilities to convert between Mercury\n  activity UUIDs and Webex REST API base64-encoded IDs\n- Document threading and ID conversion in README with examples\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: add thread support (parentId) and Mercury/REST ID conversion",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-04-13T12:01:03Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "59374e8bf0a6d8596e727ef3f7c1afd68df54fd2",
          "body": "…ect.id\n\nMercury does not populate activity.object.id for encrypted messages,\nleaving DecryptedMessage.id empty. Use activity.id (the Mercury activity\nUUID) which is always present and works as parentId for threaded replies.\n\nReported by Omar Abduljaber.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: set DecryptedMessage.id from activity.id instead of activity.obj…",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-04-13T11:36:11Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "05f3d0ca032649ab807c33a6f5f522d825787694",
          "body": null,
          "is_bot": false,
          "headline": "test: cover realistic KMS cluster URLs",
          "author_name": "Omar",
          "author_login": "ojaber",
          "committed_at": "2026-04-13T02:23:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ab980d5c817e04197a46895fc5dddf2ce06e77e7",
          "body": "Webex returns a kms:// scheme in the kmsCluster field from the\nencryption service. The URL validator was requiring https://, which\ncaused KmsError during initialization. The kmsCluster value is used\nas a URI in KMS JSON payloads (not as an HTTP endpoint), so the\nkms:// scheme is correct.",
          "is_bot": false,
          "headline": "fix: accept kms:// scheme for KMS cluster URL",
          "author_name": "Omar",
          "author_login": "ojaber",
          "committed_at": "2026-04-13T01:32:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "aed3f4a116f6d1da4479d77e21a7ea3daa78d717",
          "body": "Document disposition of all 18 findings (10 fixed, 3 verified,\n4 accepted, 1 deferred) and update data flow diagram annotations.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: append remediation status to MAESTRO threat model",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-04-06T17:12:55Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "2c582b245c7321accc1b02ffd13eb70616a06213",
          "body": "Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: correct cyclonedx-py SBOM args and add continue-on-error",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-04-06T13:50:08Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "3883ec57ca4d4eb7d5713e5312ef695e0118d8d0",
          "body": "Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: update Rust test count to 30",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-04-06T13:37:18Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "97d77a010abe0cb00d1c79f91ac79ef2052020e8",
          "body": "Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: bump all versions to 0.6.3",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-04-06T13:34:44Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "40a91ede7d45095436266d10929b1ac903a52124",
          "body": "Remediates 15 of 18 findings from MAESTRO threat assessment:\n\n- F1 (Critical): Upgrade Python aiohttp 3.13.3→3.13.4 (10 HIGH CVEs),\n  pin cryptography>=46.0.6\n- F2 (High): KMS request serialization via mutex (Go, Python)\n- F3 (High): URL validation for all external API responses — enforce\n  HTTPS/WS\n[…]\nes),\nF11 (dependency pinning — lockfiles already pin), F13 (token zeroing —\nlanguage-specific complexity), F17-18 (already accepted/mitigated).\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "security: remediate MAESTRO threat model findings across all languages",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-04-06T12:33:39Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "1664207c799ca0880f9daa120f0b6677786ad072",
          "body": "Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: bump all versions to 0.6.2",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-04-05T14:57:46Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "79efe5b5445b16ed1071bd5bf2f8c1d9b1703025",
          "body": "… findings\n\nGo: go-jose/v4 v4.0.5→v4.1.4 (JWE decryption panic, DoS parsing).\nNode: lodash 4.17.23→4.18.1 via pnpm override (code injection, prototype pollution).\ngolang.org/x/crypto SSH alerts auto-resolved (unused subpackages).\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: upgrade go-jose v4.1.4 and override lodash 4.18.1 for Dependabot…",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-04-05T08:53:03Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "f1cd5eb5edcff3e08b111e342afd246530991b88",
          "body": "Scans JavaScript/TypeScript, Go, and Python on push, PR,\nand weekly schedule. Rust is not yet supported by CodeQL.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "ci: add CodeQL code scanning workflow",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-04-04T21:26:12Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "fe59856d24754df7912711dc79fe809d8f08c7e4",
          "body": "Document how to use OAuth tokens with the existing reconnect(newToken)\nAPI. The library already handles 401/4401 auth failures by emitting\nAuthError and stopping reconnection — the app just needs to refresh\nthe token and call reconnect().\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: add OAuth integration token pattern to README",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-04-03T15:32:16Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "cf4bdcf4ee727d199d0e0c9a0437e3cc7b34d60e",
          "body": "Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: add v0.6.1 changelog and update README test counts",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-03-28T10:07:10Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "c0347479cc0feb2403ed161623702237d2d436d6",
          "body": "Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: bump all versions to 0.6.1",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-03-27T23:20:49Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "dfb82b8067fd9fdbd266679d3336bbe496fc4608",
          "body": "…guages\n\nGo:\n- Upgrade go-jose v4.0.4→v4.0.5 (fixes DoS in JWE parsing, GO-2025-3485)\n- Upgrade golang.org/x/crypto v0.31.0→v0.49.0 (multiple CVEs)\n- Fix staticcheck SA1012: replace nil contexts with context.TODO() in tests\n\nPython:\n- Narrow broad exception handlers flagged by bandit (B110)\n- Replac\n[…]\nde rustls-webpki 0.103.9→0.103.10 (CRL validation, RUSTSEC-2026-0049)\n- Document rsa Marvin side-channel as false positive (encrypt-only usage)\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: security scanner findings and dependency upgrades across all lan…",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-03-27T23:08:11Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "9d8e7d7a562ed76c32cf63b2fa5ba4ca87055c7f",
          "body": "…r/websocket\n\nnhooyr.io/websocket is deprecated — the maintainer moved the library to\ngithub.com/coder/websocket. Same API, new module path.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(go): migrate websocket library from nhooyr.io/websocket to code…",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-03-27T22:45:44Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "9631cf5b7d86d3ea490de66ae864c89a20b19d62",
          "body": "- kms_client.go: check json.Unmarshal error on local JWK\n- kms_client.go: acknowledge body drain/close errors\n- device_manager.go: acknowledge body drain error\n- mercury_socket.go: acknowledge conn.Close error\n- examples/basic-bot: acknowledge Disconnect error\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(go): handle all gosec G104 unhandled error findings",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-03-27T22:26:09Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "e629bd089a3ce6dbfcb0889275c5abe3fde71f4c",
          "body": "Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: bump all versions to 0.6.0",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-03-19T21:04:55Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "9439a1bace5425517b0f1e0d3a61091d9757a785",
          "body": "…nguages\n\nGo:\n- Add RWMutex to WebexMessageHandler protecting shared state fields\n- Replace recursive reconnect() with iterative loop (prevents stack overflow)\n- Protect MercurySocket boolean fields with mutex helpers\n- Use cancelable context for activity handlers instead of context.Background()\n- L\n[…]\ndiscard\n- Set 1MB WebSocket message size limit\n- Validate ECDH remote JWK has kty=EC and crv=P-256\n- Replace unwrap() with descriptive expect()\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: concurrency, security, and robustness improvements across all la…",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-03-19T21:03:52Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "ab3dae7c2e70d8bd09d4a7b1572f12308b74b350",
          "body": "Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: add v0.5.1 to CHANGELOG",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-03-16T15:21:39Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "a51ed61852e110145586631014fa53fe5cf026cd",
          "body": "…reconnection\n\npendingPongID was accessed from multiple goroutines without mutex\nprotection. Go strings are (pointer, length) headers — concurrent\nread/write can corrupt the header, causing == to dereference a nil\ndata pointer.\n\nAlso fixes:\n- closeWebSocket now cancels context, stopping stale ping/pong goroutines\n- triggerReconnect guard prevents concurrent reconnection attempts\n- Pong timeout goroutine respects context cancellation\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(go): race condition in ping loop causes nil pointer panic during …",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-03-16T15:17:47Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "2d708ff99f5309dd6efe3fde9a2e248c062081b1",
          "body": "Changed module path from github.com/ecopelan/webex-message-handler-go\nto github.com/3rg0n/webex-message-handler/go to match the consolidated\nmonorepo structure under the 3rg0n organization.\n\nUpdated in:\n- go.mod module declaration\n- All import statements in tests and examples\n- Documentation (README.md, API.md)\n\nCo-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(go): update module path to monorepo structure",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-12T13:17:56Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "ac0593878e101717b0e123d9ed7252299da051ad",
          "body": "- Correct Rust README: tokio-tungstenite does not read proxy env vars\n- Add trust_env=True to Python native HTTP adapter for proxy support\n- Add v0.5.0 changelog entry\n\nCloses #6\nCloses #7\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: Rust README proxy docs, Python trust_env, update CHANGELOG",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-12T12:59:48Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "c6f826d49b39b8ab7b79e8ed92c19cb85fb1ffc1",
          "body": "Add mitmproxy-based proxy validation scripts for Python, Go, and Rust.\nAdd Node.js e2e integration test.\n\nCloses #9\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "test: add proxy validation and e2e test scripts for all languages",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-12T12:58:02Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "ae014164e1efd4f98f31b72e0eb6b5b33ca06b72",
          "body": "Replace deprecated elliptic.Marshal() with (*ecdsa.PublicKey).ECDH().\nRemove dead code and unused imports.\n\nCloses #12\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(go): bump to go 1.24, modernize ECDH key derivation",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-12T12:57:45Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "795b300e6b8bdc43f52d21daac1c89bcb1530f7d",
          "body": "Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: bump versions to 0.5.0 for membership event release",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-12T12:47:23Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "760e326611bf40ed7812af953e9fe6625330a7f3",
          "body": "Add MembershipActivity type and membership:created event for Mercury\nmembership activities (add, leave, assignModerator, unassignModerator)\nwith objectType=person. No decryption needed — membership activities\nare unencrypted. No self-message filtering — bots should see their\nown membership events.\n\nAlso fixes all pre-existing lint issues across Python (ruff), Rust\n(clippy), and cleans up unused imports/variables.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: add membership:created event support (all 4 languages)",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-12T12:46:32Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "f3fcc67cb5d8a5714296d99551ca511bc4440ca7",
          "body": "actions/setup-go@v5 looks for go.sum at the repo root by default.\nSince ours is in the go/ subdirectory, set cache-dependency-path.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "ci: fix Go cache warning by pointing to go/go.sum",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-12T12:04:50Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "4289d9b57839158be2dd068472dcf32c9d415cbb",
          "body": "…fix)\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(python): bump to 0.4.4 (0.4.3 published without mercury_socket …",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-12T12:03:41Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "5820460d40bcc67c0eaf62312b6c6d1178d0ec83",
          "body": "All 4 language integration tests run in parallel against the same bots.\nMessages from other tests (Python, Go, Rust) would bump the message\ncount and cause the Node.js test to falsely report self-filtering as\nbroken. Now only counts messages matching the test pattern.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(node): e2e test ignores unrelated messages from concurrent tests",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-12T12:01:36Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "ddbc02f0f7dcfd115589da113604764ddd7ea295",
          "body": "…ocket\n\n- Add `import aiohttp` (needed for WSMsgType, WSCloseCode references)\n- Change `.send()` to `.send_str()` for auth and ping messages\n  (aiohttp ClientWebSocketResponse uses send_str for text)\n- Use literal 1000 for close code instead of aiohttp.WSCloseCode.OK\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(python): add missing aiohttp import and fix send_str in mercury_s…",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-12T11:59:28Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "97e6e9a54387ec5fcbb7498b6d9922858765608b",
          "body": "…ership\n\n- Remove undefined `connector` reference in KmsClient.__init__ (NameError in production)\n- Fix connector_owner logic: let session own auto-created connector when\n  no user connector is provided, preventing \"Unclosed connector\" warnings\n- Bump Python version to 0.4.3\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(python): remove stale connector ref in KmsClient, fix session own…",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-12T11:56:37Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "9d61b9885e165e6dd95e22b8af1a1183484c1106",
          "body": "Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(python): bump version to 0.4.2",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-12T11:54:39Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "de4476b26a111841ccc646dae040972d07d15702",
          "body": "The native HTTP adapter used async context managers that closed the\naiohttp session before the caller could read response.json(). This\ncaused ClientConnectionError in production (including CI integration\ntests). Now reads the body bytes eagerly inside the try block and\nreturns a wrapper with the cached data.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(python): read HTTP response body eagerly before closing session",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-12T11:54:27Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "090f54756d697ef24fca5de6c07276e96a005281",
          "body": "- Node.js 20 → 22 (package requires >=22.4.0)\n- pnpm 8 → 9\n- Add pnpm build step before e2e test\n- Fix test command: npx tsx src/test/integration.test.ts → node test-e2e.js\n- Python 3.11 → 3.12\n- Go 1.21 → 1.24\n- actions/cache v3 → v4\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "ci: fix integration test workflow for v0.4.1",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-12T11:43:10Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "36e4fe527918d2808c8e0d097a69217bce3807e3",
          "body": "Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: bump Rust and Python versions to 0.4.1",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-12T11:33:46Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "33553c08f96163b082809325d199bdd2eb3d2c0d",
          "body": "…guages)\n\nconnect() now throws if /people/me is unreachable when\nignoreSelfMessages is enabled, preventing silent degradation to\nunprotected mode. Previously this silently skipped filtering.\n\nAdded \"Important: Implementing Loop Detection\" section to all 4\nREADMEs explaining that the library only sees the receive side and\nrecommending wrapper-level rate limiting for send loops.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: fail-closed on /people/me failure + loop detection docs (all lan…",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-12T11:19:52Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "388e818e1e17ce4d646d65a42e64dfbe1329da7c",
          "body": "The receiver bot now replies to every incoming message via REST API.\nMercury echoes the reply back. If ignoreSelfMessages works correctly,\nthe handler silently drops it. If broken, the test fails with explicit\nLOOP DETECTED or SELF-MESSAGE NOT FILTERED errors.\n\nThis would have caught the ID format mismatch bug immediately.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "test(node): bidirectional e2e test that exercises self-message filtering",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-12T11:07:43Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "44164f8cade0fd75f55d05bf6e66abb1cef02b02",
          "body": "The Webex REST API (/v1/people/me) returns base64-encoded IDs\n(ciscospark://us/PEOPLE/<uuid>) while Mercury wire format uses raw\nUUIDs. The direct equality comparison always failed, so\nignoreSelfMessages never actually filtered anything, causing infinite\nmessage loops in production.\n\nAdded extractPe\n[…]\nrmalize both formats\nto the raw UUID before comparison. Updated tests to use realistic\nmismatched ID formats that reproduce the real-world bug.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: self-message filtering ID format mismatch (all languages) — v0.4.1",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-12T11:02:41Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "cbfbfe1cce12d807216d9832e86cf50767f0a4d1",
          "body": "BREAKING CHANGES:\n- `agent` config field replaced with `dispatcher` (accepts undici Dispatcher)\n- Node.js engine requirement raised to >=22.4.0\n- Removed `ws` and `@types/ws` dependencies\n- `undici` moved to production dependency\n\nA single ProxyAgent now proxies both fetch() and WebSocket in native \n[…]\n.on() interface, preserving the existing mercury-socket contract.\n\nAll 128 unit tests pass, e2e integration test passes, mitmproxy test passes.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(node)!: migrate from ws to native WebSocket (undici) — v0.4.0",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-12T10:13:01Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "9da6eda3cad8838a12165b4145d30bf68956182d",
          "body": "Bots automatically filter their own messages out of the box,\npreventing infinite response loops without any configuration.\n\n- Node.js 0.3.3: default changed from false to true\n- Python 0.3.1: new feature with default true\n- Go: new feature with default true (*bool for nil=true)\n- Rust 0.3.2: new fea\n[…]\nth default true\n\nEach language fetches /people/me on connect, caches the bot's\nperson ID, and filters matching messages before emitting events.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: add ignoreSelfMessages (default true) to all languages",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-12T09:14:30Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "f17300d9359d4dc046c1d49c472cba7a1e80065e",
          "body": "There is no practical reason for a bot to process its own messages\nechoed back through Mercury. The bot already knows what it sent via\nthe REST API response. Defaulting to true prevents message loops\nout of the box. Set ignoreSelfMessages: false to opt out.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: default ignoreSelfMessages to true",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-12T09:06:18Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "7486361e465643a542f91ec0ba3eb965f5d13e1f",
          "body": "Replaces simulated tests with actual handler integration tests that:\n- Mock sub-components (DeviceManager, Mercury, KMS, Decryptor)\n- Let the handler's real _handleActivity filtering logic run\n- Reproduce the runaway loop bug (bot processes own echoes)\n- Prove ignoreSelfMessages prevents the loop\n- Verify /people/me caching and graceful degradation\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "test: real integration test for message loop prevention",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-12T09:02:09Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "820af7e241d2dc3f6da1fa92c7f51e5e7ad76959",
          "body": "…ion tests",
          "is_bot": false,
          "headline": "test: remove overly complex integration tests, keep simple demonstrat…",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-12T08:56:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "822263865b289af00cf6a65b80c81dc003321a51",
          "body": null,
          "is_bot": false,
          "headline": "docs: remove internal product references from tests and documentation",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-12T08:56:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ee71bf7d71969ce86d3fa08b7fa7336b12df4c7e",
          "body": null,
          "is_bot": false,
          "headline": "docs: update CHANGELOG with loop prevention tests",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-12T00:14:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "97e10ba0d3334e9f56975490f2ae96c5f73aae31",
          "body": "- Demonstrates infinite loop without ignoreSelfMessages\n- Validates filtering prevents loops\n- Shows multi-user conversation handling\n- Documents OKRatlas issue scenario",
          "is_bot": false,
          "headline": "test: add message loop prevention validation tests",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-12T00:14:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "782c70032c126c8d5be61958f46c96455181235d",
          "body": "Version 0.3.2 includes:\n- New ignoreSelfMessages feature to prevent bot message loops\n- WebSocket proxy documentation for injected mode\n- Comprehensive proxy and self-message filtering tests\n\nCo-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: bump version to 0.3.2 and add CHANGELOG",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-12T00:02:23Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "1d41e2a417b07401c786408be850082f177e6a13",
          "body": "Add built-in self-message filtering to prevent infinite response loops,\naddressing common bot development issue discovered in production usage.\n\nFeatures:\n- New ignoreSelfMessages config option (default: false)\n- Automatically fetches bot's person ID on connect()\n- Caches person ID for session lifet\n[…]\nPersonInfo type\n- _fetchBotPersonId() method\n- Filtering logic in _handleActivity()\n- 5 new tests (all passing)\n- Comprehensive documentation\n\nCo-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(node): add ignoreSelfMessages option to prevent message loops",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-12T00:00:44Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "9aeeb5c0b6f3615fd88f56227cff6bc385039b85",
          "body": "Add comprehensive documentation and examples for proxy support in\ninjected mode, addressing real-world issue where WebSocket connections\nbypassed proxy configuration.\n\nKey additions:\n- Updated README.md with proxy example for injected mode\n- Added Node.js README section on advanced proxy configurati\n[…]\nte addresses production issue discovered in\nOKRatlas deployment where HTTP requests succeeded through proxy\nbut WebSocket connections failed.\n\nCo-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(node): add WebSocket proxy configuration for injected mode",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-11T23:32:58Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "0af134881aa04afab88a7c1719ab0f23643248b1",
          "body": "Add 14 tests validating proxy configuration and usage:\n- ProxyAgent (undici) support\n- http.Agent and https.Agent support\n- Native vs injected mode validation\n- Configuration error handling\n- Environment variable pattern support\n\nAll tests passing. Added undici as devDependency for testing.\n\nCo-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "test(node): add comprehensive proxy support test suite",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-11T23:17:11Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "3138968945e97af2bc5fb07e189b469d14e05744",
          "body": "Bump version to include TypeScript fixes from commits after 0.3.0 release.\n\nCo-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(node): bump version to 0.3.1",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-11T22:48:24Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "88186bc03bca128bf0b44de1147da077bd7e4dbc",
          "body": "Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "ci: rename workflow to publish.yml to match PyPI config",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-11T22:46:47Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "72055a31bc7a95b842d010e88e9b95902e2bade5",
          "body": "Add GitHub Actions workflow for automated PyPI publishing using\ntrusted publishing (OIDC). This eliminates the need for API tokens\nand provides more secure package publishing.\n\nTo use:\n1. Configure trusted publisher at https://pypi.org/manage/account/publishing/\n2. Trigger manually or automatically on GitHub releases\n\nCo-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "ci: add trusted publishing workflow for PyPI",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-11T22:46:34Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "25e2eb6a341cf5cf7c9b8418a01d7c65d9647df1",
          "body": "Bump version to republish with unused variable fix since crates.io\ndoesn't allow republishing yanked versions.\n\nCo-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(rust): bump version to 0.3.1",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-11T22:41:23Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "59190c708fca97a17b99d04837d8814896317ee0",
          "body": "Remove leftover unused client variable from adapter refactoring.\n\nCo-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(rust): remove unused client variable",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-11T22:38:08Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "267d9cf1837401ce5d9a1ae25c19ca6a1d0939b5",
          "body": "Update proxy documentation to recommend undici's ProxyAgent instead of\nHttpsProxyAgent for Node.js v18+ environments. Node.js native fetch()\nuses undici internally, so undici's ProxyAgent provides more reliable\nproxy support than traditional https-proxy-agent.\n\nKey changes:\n- Updated README.md proxy\n[…]\n may still work in some cases, this change helps\nusers avoid the \"TypeError: fetch failed\" issue encountered in\ncorporate proxy environments.\n\nCo-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: recommend undici ProxyAgent for Node.js proxy support",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-11T22:30:21Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "2195af813947e5daa75e513c6af24f154431d788",
          "body": "- Remove unused 'agent' field from handler\n- Update WsFactoryFn type to support both native WebSocket and InjectedWebSocket\n- Remove unused http/https imports from mercury-socket\n- Use type assertions for WebSocket event listeners to support both types\n- Handle both string and Buffer types in message/close event handlers\n- All 105 tests passing\n\nCo-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Fix Node.js TypeScript build errors",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-11T22:25:15Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "c337cebd80decb2bd91e61b32b0182e116ed3c78",
          "body": "Add support for injecting custom networking implementations across all four languages (Node.js, Python, Go, Rust). This enables wrappers to intercept, log, mock, or route all network calls without the library knowing.\n\nKey changes:\n- Add explicit 'mode' config field ('native' or 'injected')\n- Implem\n[…]\n- Version bumps: Node.js 0.3.0, Python 0.3.0, Go 0.3.0, Rust 0.3.0\n\nNative mode maintains 100% backward compatibility with v0.2.0.\n\nCloses #4\n\nCo-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Implement dependency injection for fetch/WebSocket (Issue #4)",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-11T22:12:50Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "ba114cfbcbaee3a85696483f1b937bdaacb8a103",
          "body": "New features:\n- Add proxy support via connector/client parameter\n- Add integration tests with two-bot pattern",
          "is_bot": false,
          "headline": "Bump Python and Rust versions to 0.2.0",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-11T20:48:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "797be094c183cc2eae406c6327a965f596c4da19",
          "body": "New features:\n- Add proxy support via agent parameter\n- Add integration tests with two-bot pattern",
          "is_bot": false,
          "headline": "Bump version to 0.2.0",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-11T20:47:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ad209b79bac083ec30f37cca28ae7deaf9a501f8",
          "body": null,
          "is_bot": false,
          "headline": "Fix import path in Node.js integration test",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-11T20:45:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "051062ca871dfbd0c9b7b023f49c18f4930e7f7c",
          "body": "The test file doesn't need to be part of the compiled library output.\nUse tsx to run the TypeScript test directly.",
          "is_bot": false,
          "headline": "Run Node.js integration test with tsx instead of compiling",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-11T20:44:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a34421ad6993072e1ab48e3b33bbfd7c3cee2f02",
          "body": "- Node.js: Move test to src/test/ for compilation to dist/\n- Go: Update to use WEBEX_BOT_TOKEN (receiver) and WEBEX_BOT_TOKEN_TEST (sender)\n- Rust: Update to use two-bot pattern, suppress unused field warning\n\nAll tests now send message FROM sender bot TO receiver bot instead of\ntrying to send to self (which returns HTTP 400).",
          "is_bot": false,
          "headline": "Fix integration tests to use two-bot pattern",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-11T20:42:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f8869ca904ecf1be38b2db6d89070962a9da123a",
          "body": "- Bot-to-bot messaging confirmed working! (HTTP 200 OK)\n- Change from self-messaging (blocked) to sender→receiver pattern\n  - Receiver bot (WEBEX_BOT_TOKEN): OKR Atlas - runs handler, listens for messages\n  - Sender bot (WEBEX_BOT_TOKEN_TEST): experts - sends test message\n- Update Node.js test to fe\n[…]\n WEBEX_TEST_TARGET_EMAIL (no longer needed with two tokens)\n\nThis fixes the HTTP 400 error caused by bots being unable to message themselves.\n\nCo-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Update integration tests to use two-bot pattern",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-11T20:37:16Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "2608550a1c3906e54833360a72808f0abb37a103",
          "body": "- Remove invalid pnpm-workspace.yaml (was causing Node.js install failure)\n- Fix Node.js test to run built version (dist/test/integration.test.js)\n- Fix Go test linting errors (redundant newlines in fmt.Println)\n- Fix Rust test compilation error (disconnect() returns () not Result)\n- Update Python t\n[…]\nests to use WEBEX_TEST_TARGET_EMAIL\n- Update workflow to set WEBEX_TEST_TARGET_EMAIL secret\n- Update TESTING.md with workaround documentation\n\nCo-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Fix integration test issues",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-11T20:29:25Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "10a15a23489df230ca41f06bd4f57c06db118a95",
          "body": "- Add agent/connector/client parameter for proxy support (Node.js, Python, Go, Rust)\n- Add integration tests for all languages\n- Add GitHub Actions workflow for CI/CD integration testing\n- Add TESTING.md documentation\n- Set WEBEX_BOT_TOKEN secret\n\nFixes #1",
          "is_bot": false,
          "headline": "Add proxy support and integration tests for all languages",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-11T20:26:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c732c6c034d3a2ddd09a742dd67eba09bf5e736c",
          "body": "- Update repository URLs to 3rg0n/webex-message-handler\n- Rust: crates.io ready\n- Python: PyPI ready\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Update Rust and Python package metadata for publishing",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-11T18:38:53Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "cb9c18c25b8e650b504dddecc7a8bd86abd2f842",
          "body": "- Update repository URL to 3rg0n/webex-message-handler\n- Add monorepo directory field\n- Change license from Apache-2.0 to MIT (matches root)\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Update Node.js package.json for npm publish",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-11T17:21:42Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "dd9c3fcd3ad15bab3ceb5c8485e8935367db6961",
          "body": "Captures every non-obvious detail discovered while porting across\nfour languages: two-channel KMS pattern, dir vs A256KW JWE,\nJWE/JWS detection, ECDH flow, Mercury auth, concurrency pitfalls,\nand common mistakes ranked by debugging cost.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add PORTING.md with implementation insights and protocol details",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-11T16:35:04Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "e68b4a44a33f2042081d005c9c6bac0b45fda499",
          "body": "Guidelines for setup, testing, code style, and PR process\nacross all four language implementations.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add CONTRIBUTING.md",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-11T15:56:38Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "30ef06593ca15bd7ceebe783d76ba091b7829990",
          "body": "Root README with quick-start examples for all four languages,\narchitecture overview, and links to per-language API docs.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add monorepo root documentation",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-11T15:53:57Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "cebed7204ad76480dd0507d9516cd1046c6283ad",
          "body": "Rust port using tokio, reqwest, tokio-tungstenite, and josekit.\nIncludes source, tests (12 passing), examples, and API documentation.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add Rust implementation in rust/ subdirectory",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-11T15:53:13Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "5c2c385c7777035b0caca7143a1fc7101f6cd766",
          "body": "Go port using nhooyr.io/websocket, go-jose/v4, and crypto/ecdh.\nIncludes source, tests (68 passing), examples, and API documentation.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add Go implementation in go/ subdirectory",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-11T15:52:41Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "59367ae73251f8efd8777a8685e3bc5921955e9a",
          "body": "Async Python port using aiohttp, jwcrypto, and asyncio.\nIncludes source, tests (41 passing), examples, and API documentation.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add Python implementation in python/ subdirectory",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-11T15:52:13Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "e8dfd2d3c5df9139151cc817084f7310c83ca163",
          "body": "Webex Mercury WebSocket + KMS message decryption library.\nIncludes source, tests, examples, and API documentation.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add Node.js/TypeScript implementation in node/ subdirectory",
          "author_name": "Ergon Copeland",
          "author_login": "3rg0n",
          "committed_at": "2026-02-11T15:51:43Z",
          "body_truncated": false,
          "is_coding_agent": true
        }
      ],
      "releases_count": 37,
      "commits_last_year": 97,
      "latest_release_at": "2026-07-21T16:28:46Z",
      "latest_release_tag": "v0.6.14",
      "releases_from_tags": false,
      "days_since_last_push": 3,
      "active_weeks_last_year": 10,
      "days_since_latest_release": 5,
      "mean_days_between_releases": 11
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": true,
      "health_percentage": 57,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "github.com/3rg0n/webex-message-handler/go",
          "exists": true,
          "license": null,
          "keywords": [],
          "ecosystem": "go",
          "matches_repo": true,
          "registry_url": "https://pkg.go.dev/github.com/3rg0n/webex-message-handler/go",
          "is_deprecated": false,
          "latest_version": "v0.6.15",
          "repository_url": "https://github.com/3rg0n/webex-message-handler",
          "versions_count": 20,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-07-23T15:39:51Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 3
        },
        {
          "name": "webex-message-handler",
          "exists": true,
          "license": "MIT",
          "keywords": [
            "bot",
            "kms",
            "mercury",
            "webex",
            "websocket",
            "network-programming",
            "web-programming"
          ],
          "ecosystem": "crates",
          "matches_repo": true,
          "registry_url": "https://crates.io/crates/webex-message-handler",
          "is_deprecated": false,
          "latest_version": "0.6.15",
          "repository_url": "https://github.com/3rg0n/webex-message-handler",
          "versions_count": 21,
          "total_downloads": 400,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": 57,
          "first_published_at": "2026-02-11T18:53:10.017355Z",
          "latest_published_at": "2026-07-23T15:58:47.143587Z",
          "latest_version_yanked": false,
          "days_since_latest_publish": 3
        },
        {
          "name": "webex-message-handler",
          "exists": true,
          "license": "MIT",
          "keywords": [
            "webex",
            "mercury",
            "websocket",
            "kms",
            "bot",
            "messaging"
          ],
          "ecosystem": "npm",
          "matches_repo": true,
          "registry_url": "https://www.npmjs.com/package/webex-message-handler",
          "is_deprecated": false,
          "latest_version": "0.6.15",
          "repository_url": "https://github.com/3rg0n/webex-message-handler",
          "versions_count": 15,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 1,
          "monthly_downloads": 2348,
          "first_published_at": "2026-02-11T18:37:36.491000Z",
          "latest_published_at": "2026-07-23T15:58:25.600000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 3
        },
        {
          "name": "webex-message-handler",
          "exists": true,
          "license": "MIT",
          "keywords": [
            "bot",
            "kms",
            "mercury",
            "messaging",
            "webex",
            "websocket",
            "Development Status :: 4 - Beta",
            "Framework :: AsyncIO",
            "Intended Audience :: Developers",
            "License :: OSI Approved :: MIT License",
            "Programming Language :: Python :: 3",
            "Programming Language :: Python :: 3.10",
            "Programming Language :: Python :: 3.11",
            "Programming Language :: Python :: 3.12",
            "Programming Language :: Python :: 3.13",
            "Topic :: Communications :: Chat"
          ],
          "ecosystem": "pypi",
          "matches_repo": true,
          "registry_url": "https://pypi.org/project/webex-message-handler/",
          "is_deprecated": false,
          "latest_version": "0.6.14",
          "repository_url": "https://github.com/3rg0n/webex-message-handler",
          "versions_count": 17,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": "2026-02-12T12:04:13.534632Z",
          "latest_published_at": "2026-07-21T16:29:21.300074Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 5
        }
      ]
    },
    "popularity": {
      "forks": 2,
      "stars": 0,
      "watchers": 0,
      "fork_history": {
        "days": [
          {
            "date": "2026-04-13",
            "count": 1
          },
          {
            "date": "2026-06-09",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 2,
        "total_forks": 2
      },
      "star_history": {
        "days": [],
        "complete": true,
        "collected": 0,
        "total_stars": 0,
        "collected_at": null
      },
      "open_issues_and_prs": 3
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [
        "examples"
      ],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": false,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [
        "node/tsconfig.json"
      ],
      "toolchain_manifests": [
        "go/go.mod",
        "rust/Cargo.toml"
      ],
      "largest_source_bytes": 44381,
      "source_files_sampled": 99,
      "oversized_source_files": 0,
      "agent_instruction_files": [],
      "agent_instruction_max_bytes": null
    },
    "dependencies": {
      "manifests": [
        "go/go.mod",
        "node/package.json",
        "python/pyproject.toml",
        "rust/Cargo.toml"
      ],
      "advisories": {
        "error": null,
        "scope": "repository_graph",
        "source": "osv",
        "findings": [
          {
            "name": "brace-expansion",
            "direct": false,
            "version": "1.1.13",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-3jxr-9vmj-r5cp",
              "GHSA-mh99-v99m-4gvg"
            ],
            "fixed_version": "5.0.8",
            "advisory_count": 2,
            "oldest_advisory_days": 6
          },
          {
            "name": "brace-expansion",
            "direct": false,
            "version": "5.0.6",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-3jxr-9vmj-r5cp",
              "GHSA-mh99-v99m-4gvg"
            ],
            "fixed_version": "5.0.8",
            "advisory_count": 2,
            "oldest_advisory_days": 6
          },
          {
            "name": "js-yaml",
            "direct": false,
            "version": "5.0.0",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-724g-mxrg-4qvm",
              "GHSA-g796-fgmg-93mv",
              "GHSA-pm4m-ph32-ghv5"
            ],
            "fixed_version": "5.2.2",
            "advisory_count": 3,
            "oldest_advisory_days": 6
          },
          {
            "name": "uuid",
            "direct": false,
            "version": "2.0.3",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-w5hq-g745-h8pq"
            ],
            "fixed_version": "13.0.1",
            "advisory_count": 1,
            "oldest_advisory_days": 95
          },
          {
            "name": "golang.org/x/crypto",
            "direct": true,
            "version": "v0.54.0",
            "severity": "unknown",
            "ecosystem": "go",
            "cvss_score": null,
            "advisory_ids": [
              "GO-2026-5932"
            ],
            "fixed_version": null,
            "advisory_count": 1,
            "oldest_advisory_days": 19
          }
        ],
        "collected": true,
        "malicious": [],
        "truncated": false,
        "by_severity": {
          "high": 4,
          "unknown": 1
        },
        "advisory_count": 9,
        "affected_count": 5,
        "assessed_count": 516,
        "malicious_count": 0,
        "assessed_package": null,
        "unassessed_count": 30,
        "direct_affected_count": 1
      },
      "ecosystems": [
        "crates",
        "go",
        "npm",
        "pypi"
      ],
      "dependencies": [
        {
          "name": "github.com/go-jose/go-jose/v4",
          "manifest": "go/go.mod",
          "ecosystem": "go",
          "version_constraint": "v4.1.4"
        },
        {
          "name": "github.com/google/uuid",
          "manifest": "go/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.6.0"
        },
        {
          "name": "golang.org/x/crypto",
          "manifest": "go/go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.54.0"
        },
        {
          "name": "github.com/coder/websocket",
          "manifest": "go/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.8.15"
        },
        {
          "name": "node-jose",
          "manifest": "node/package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.2.0"
        },
        {
          "name": "node-kms",
          "manifest": "node/package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.4.1"
        },
        {
          "name": "undici",
          "manifest": "node/package.json",
          "ecosystem": "npm",
          "version_constraint": "^8.7.0"
        },
        {
          "name": "aiohttp",
          "manifest": "python/pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=3.14.1"
        },
        {
          "name": "cryptography",
          "manifest": "python/pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=48.0.1"
        },
        {
          "name": "jwcrypto",
          "manifest": "python/pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=1.5.7"
        },
        {
          "name": "tokio",
          "manifest": "rust/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        },
        {
          "name": "tokio-tungstenite",
          "manifest": "rust/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.24"
        },
        {
          "name": "reqwest",
          "manifest": "rust/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.12"
        },
        {
          "name": "serde",
          "manifest": "rust/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        },
        {
          "name": "serde_json",
          "manifest": "rust/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        },
        {
          "name": "uuid",
          "manifest": "rust/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        },
        {
          "name": "thiserror",
          "manifest": "rust/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "2"
        },
        {
          "name": "tracing",
          "manifest": "rust/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.1"
        },
        {
          "name": "url",
          "manifest": "rust/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "2"
        },
        {
          "name": "futures-util",
          "manifest": "rust/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.3"
        },
        {
          "name": "base64",
          "manifest": "rust/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.22"
        },
        {
          "name": "p256",
          "manifest": "rust/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.13"
        },
        {
          "name": "hkdf",
          "manifest": "rust/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.12"
        },
        {
          "name": "sha1",
          "manifest": "rust/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.10"
        },
        {
          "name": "sha2",
          "manifest": "rust/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.10"
        },
        {
          "name": "rand",
          "manifest": "rust/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.8"
        },
        {
          "name": "aes-gcm",
          "manifest": "rust/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.10"
        },
        {
          "name": "aes-kw",
          "manifest": "rust/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.2"
        },
        {
          "name": "rsa",
          "manifest": "rust/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.9"
        },
        {
          "name": "regex",
          "manifest": "rust/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        },
        {
          "name": "once_cell",
          "manifest": "rust/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        }
      ],
      "all_dependencies": {
        "error": null,
        "source": "github-sbom",
        "packages": [
          {
            "name": "aes-gcm",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "aes-kw",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "base64",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "futures-util",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "hkdf",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "once_cell",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "p256",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "rand",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "regex",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "reqwest",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "rsa",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "serde",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "serde_json",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "sha1",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "sha2",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "thiserror",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "tokio",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "tokio-tungstenite",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "tracing",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "url",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "uuid",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "github.com/coder/websocket",
            "direct": true,
            "version": "v1.8.15",
            "ecosystem": "go"
          },
          {
            "name": "github.com/go-jose/go-jose/v4",
            "direct": true,
            "version": "v4.1.4",
            "ecosystem": "go"
          },
          {
            "name": "github.com/google/uuid",
            "direct": true,
            "version": "v1.6.0",
            "ecosystem": "go"
          },
          {
            "name": "golang.org/x/crypto",
            "direct": true,
            "version": "v0.54.0",
            "ecosystem": "go"
          },
          {
            "name": "node-jose",
            "direct": true,
            "version": "2.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "node-kms",
            "direct": true,
            "version": "0.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "undici",
            "direct": true,
            "version": "8.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "aiohttp",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "cryptography",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "jwcrypto",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "tracing-subscriber",
            "direct": false,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "wiremock",
            "direct": false,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "@babel/code-frame",
            "direct": false,
            "version": "7.29.0",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/code-frame",
            "direct": false,
            "version": "8.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/compat-data",
            "direct": false,
            "version": "8.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/core",
            "direct": false,
            "version": "8.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/generator",
            "direct": false,
            "version": "7.29.1",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/generator",
            "direct": false,
            "version": "8.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-compilation-targets",
            "direct": false,
            "version": "8.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-globals",
            "direct": false,
            "version": "8.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-plugin-utils",
            "direct": false,
            "version": "7.28.6",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-string-parser",
            "direct": false,
            "version": "7.27.1",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-string-parser",
            "direct": false,
            "version": "8.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-validator-identifier",
            "direct": false,
            "version": "7.28.5",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-validator-identifier",
            "direct": false,
            "version": "8.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-validator-option",
            "direct": false,
            "version": "8.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helpers",
            "direct": false,
            "version": "8.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/parser",
            "direct": false,
            "version": "7.29.2",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/parser",
            "direct": false,
            "version": "8.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-syntax-async-generators",
            "direct": false,
            "version": "7.8.4",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-syntax-bigint",
            "direct": false,
            "version": "7.8.3",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-syntax-class-properties",
            "direct": false,
            "version": "7.12.13",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-syntax-class-static-block",
            "direct": false,
            "version": "7.14.5",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-syntax-import-attributes",
            "direct": false,
            "version": "7.28.6",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-syntax-import-meta",
            "direct": false,
            "version": "7.10.4",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-syntax-json-strings",
            "direct": false,
            "version": "7.8.3",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-syntax-jsx",
            "direct": false,
            "version": "7.28.6",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-syntax-logical-assignment-operators",
            "direct": false,
            "version": "7.10.4",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-syntax-nullish-coalescing-operator",
            "direct": false,
            "version": "7.8.3",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-syntax-numeric-separator",
            "direct": false,
            "version": "7.10.4",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-syntax-object-rest-spread",
            "direct": false,
            "version": "7.8.3",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-syntax-optional-catch-binding",
            "direct": false,
            "version": "7.8.3",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-syntax-optional-chaining",
            "direct": false,
            "version": "7.8.3",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-syntax-private-property-in-object",
            "direct": false,
            "version": "7.14.5",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-syntax-top-level-await",
            "direct": false,
            "version": "7.14.5",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-syntax-typescript",
            "direct": false,
            "version": "7.28.6",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/template",
            "direct": false,
            "version": "7.28.6",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/template",
            "direct": false,
            "version": "8.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/traverse",
            "direct": false,
            "version": "8.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/types",
            "direct": false,
            "version": "7.29.0",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/types",
            "direct": false,
            "version": "8.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "@bcoe/v8-coverage",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@cspotcode/source-map-support",
            "direct": false,
            "version": "0.8.1",
            "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/eslintrc",
            "direct": false,
            "version": "2.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "@eslint/js",
            "direct": false,
            "version": "8.57.0",
            "ecosystem": "npm"
          },
          {
            "name": "@humanwhocodes/config-array",
            "direct": false,
            "version": "0.11.14",
            "ecosystem": "npm"
          },
          {
            "name": "@humanwhocodes/module-importer",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "@humanwhocodes/object-schema",
            "direct": false,
            "version": "2.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "@istanbuljs/load-nyc-config",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "@istanbuljs/schema",
            "direct": false,
            "version": "0.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "@jest/console",
            "direct": false,
            "version": "29.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "@jest/core",
            "direct": false,
            "version": "29.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "@jest/environment",
            "direct": false,
            "version": "29.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "@jest/expect",
            "direct": false,
            "version": "29.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "@jest/expect-utils",
            "direct": false,
            "version": "29.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "@jest/fake-timers",
            "direct": false,
            "version": "29.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "@jest/globals",
            "direct": false,
            "version": "29.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "@jest/pattern",
            "direct": false,
            "version": "30.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "@jest/reporters",
            "direct": false,
            "version": "29.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "@jest/schemas",
            "direct": false,
            "version": "29.6.3",
            "ecosystem": "npm"
          },
          {
            "name": "@jest/schemas",
            "direct": false,
            "version": "30.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "@jest/source-map",
            "direct": false,
            "version": "29.6.3",
            "ecosystem": "npm"
          },
          {
            "name": "@jest/test-result",
            "direct": false,
            "version": "29.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "@jest/test-sequencer",
            "direct": false,
            "version": "29.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "@jest/transform",
            "direct": false,
            "version": "29.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "@jest/transform",
            "direct": false,
            "version": "30.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "@jest/types",
            "direct": false,
            "version": "29.6.3",
            "ecosystem": "npm"
          },
          {
            "name": "@jest/types",
            "direct": false,
            "version": "30.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "@jridgewell/gen-mapping",
            "direct": false,
            "version": "0.3.13",
            "ecosystem": "npm"
          },
          {
            "name": "@jridgewell/resolve-uri",
            "direct": false,
            "version": "3.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "@jridgewell/sourcemap-codec",
            "direct": false,
            "version": "1.5.5",
            "ecosystem": "npm"
          },
          {
            "name": "@jridgewell/trace-mapping",
            "direct": false,
            "version": "0.3.31",
            "ecosystem": "npm"
          },
          {
            "name": "@jridgewell/trace-mapping",
            "direct": false,
            "version": "0.3.9",
            "ecosystem": "npm"
          },
          {
            "name": "@nodelib/fs.scandir",
            "direct": false,
            "version": "2.1.5",
            "ecosystem": "npm"
          },
          {
            "name": "@nodelib/fs.stat",
            "direct": false,
            "version": "2.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "@nodelib/fs.walk",
            "direct": false,
            "version": "1.2.8",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-android-arm-eabi",
            "direct": false,
            "version": "4.60.0",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-android-arm64",
            "direct": false,
            "version": "4.60.0",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-darwin-arm64",
            "direct": false,
            "version": "4.60.0",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-darwin-x64",
            "direct": false,
            "version": "4.60.0",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-freebsd-arm64",
            "direct": false,
            "version": "4.60.0",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-freebsd-x64",
            "direct": false,
            "version": "4.60.0",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-linux-arm-gnueabihf",
            "direct": false,
            "version": "4.60.0",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-linux-arm-musleabihf",
            "direct": false,
            "version": "4.60.0",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-linux-arm64-gnu",
            "direct": false,
            "version": "4.60.0",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-linux-arm64-musl",
            "direct": false,
            "version": "4.60.0",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-linux-loong64-gnu",
            "direct": false,
            "version": "4.60.0",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-linux-loong64-musl",
            "direct": false,
            "version": "4.60.0",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-linux-ppc64-gnu",
            "direct": false,
            "version": "4.60.0",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-linux-ppc64-musl",
            "direct": false,
            "version": "4.60.0",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-linux-riscv64-gnu",
            "direct": false,
            "version": "4.60.0",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-linux-riscv64-musl",
            "direct": false,
            "version": "4.60.0",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-linux-s390x-gnu",
            "direct": false,
            "version": "4.60.0",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-linux-x64-gnu",
            "direct": false,
            "version": "4.60.0",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-linux-x64-musl",
            "direct": false,
            "version": "4.60.0",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-openbsd-x64",
            "direct": false,
            "version": "4.60.0",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-openharmony-arm64",
            "direct": false,
            "version": "4.60.0",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-win32-arm64-msvc",
            "direct": false,
            "version": "4.60.0",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-win32-ia32-msvc",
            "direct": false,
            "version": "4.60.0",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-win32-x64-gnu",
            "direct": false,
            "version": "4.60.0",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/rollup-win32-x64-msvc",
            "direct": false,
            "version": "4.60.0",
            "ecosystem": "npm"
          },
          {
            "name": "@sinclair/typebox",
            "direct": false,
            "version": "0.27.10",
            "ecosystem": "npm"
          },
          {
            "name": "@sinclair/typebox",
            "direct": false,
            "version": "0.34.48",
            "ecosystem": "npm"
          },
          {
            "name": "@sinonjs/commons",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "@sinonjs/fake-timers",
            "direct": false,
            "version": "10.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "@tsconfig/node10",
            "direct": false,
            "version": "1.0.12",
            "ecosystem": "npm"
          },
          {
            "name": "@tsconfig/node12",
            "direct": false,
            "version": "1.0.11",
            "ecosystem": "npm"
          },
          {
            "name": "@tsconfig/node14",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "@tsconfig/node16",
            "direct": false,
            "version": "1.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "@types/babel__core",
            "direct": false,
            "version": "7.20.5",
            "ecosystem": "npm"
          },
          {
            "name": "@types/babel__generator",
            "direct": false,
            "version": "7.27.0",
            "ecosystem": "npm"
          },
          {
            "name": "@types/babel__template",
            "direct": false,
            "version": "7.4.4",
            "ecosystem": "npm"
          },
          {
            "name": "@types/babel__traverse",
            "direct": false,
            "version": "7.28.0",
            "ecosystem": "npm"
          },
          {
            "name": "@types/estree",
            "direct": false,
            "version": "1.0.8",
            "ecosystem": "npm"
          },
          {
            "name": "@types/gensync",
            "direct": false,
            "version": "1.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "@types/graceful-fs",
            "direct": false,
            "version": "4.1.9",
            "ecosystem": "npm"
          },
          {
            "name": "@types/istanbul-lib-coverage",
            "direct": false,
            "version": "2.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "@types/istanbul-lib-report",
            "direct": false,
            "version": "3.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "@types/istanbul-reports",
            "direct": false,
            "version": "3.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "@types/jest",
            "direct": false,
            "version": "29.5.14",
            "ecosystem": "npm"
          },
          {
            "name": "@types/jsesc",
            "direct": false,
            "version": "2.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "@types/node",
            "direct": false,
            "version": "22.13.4",
            "ecosystem": "npm"
          },
          {
            "name": "@types/node",
            "direct": false,
            "version": "25.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "@types/stack-utils",
            "direct": false,
            "version": "2.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "@types/yargs",
            "direct": false,
            "version": "17.0.35",
            "ecosystem": "npm"
          },
          {
            "name": "@types/yargs-parser",
            "direct": false,
            "version": "21.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/eslint-plugin",
            "direct": false,
            "version": "8.57.2",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/parser",
            "direct": false,
            "version": "8.57.2",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/project-service",
            "direct": false,
            "version": "8.57.2",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/scope-manager",
            "direct": false,
            "version": "8.57.2",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/tsconfig-utils",
            "direct": false,
            "version": "8.57.2",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/type-utils",
            "direct": false,
            "version": "8.57.2",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/types",
            "direct": false,
            "version": "8.57.2",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/typescript-estree",
            "direct": false,
            "version": "8.57.2",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/utils",
            "direct": false,
            "version": "8.57.2",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/visitor-keys",
            "direct": false,
            "version": "8.57.2",
            "ecosystem": "npm"
          },
          {
            "name": "@ungap/structured-clone",
            "direct": false,
            "version": "1.3.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": "acorn-walk",
            "direct": false,
            "version": "8.3.5",
            "ecosystem": "npm"
          },
          {
            "name": "ajv",
            "direct": false,
            "version": "6.14.0",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-escapes",
            "direct": false,
            "version": "4.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-regex",
            "direct": false,
            "version": "5.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-styles",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-styles",
            "direct": false,
            "version": "5.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "any-promise",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "anymatch",
            "direct": false,
            "version": "3.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "arg",
            "direct": false,
            "version": "4.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "argparse",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "babel-jest",
            "direct": false,
            "version": "29.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "babel-jest",
            "direct": false,
            "version": "30.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "babel-plugin-istanbul",
            "direct": false,
            "version": "6.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "babel-plugin-istanbul",
            "direct": false,
            "version": "7.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "babel-plugin-jest-hoist",
            "direct": false,
            "version": "29.6.3",
            "ecosystem": "npm"
          },
          {
            "name": "babel-plugin-jest-hoist",
            "direct": false,
            "version": "30.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "babel-preset-current-node-syntax",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "babel-preset-jest",
            "direct": false,
            "version": "29.6.3",
            "ecosystem": "npm"
          },
          {
            "name": "babel-preset-jest",
            "direct": false,
            "version": "30.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "balanced-match",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "balanced-match",
            "direct": false,
            "version": "4.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "base64-js",
            "direct": false,
            "version": "1.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "base64url",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "baseline-browser-mapping",
            "direct": false,
            "version": "2.10.11",
            "ecosystem": "npm"
          },
          {
            "name": "brace-expansion",
            "direct": false,
            "version": "1.1.13",
            "ecosystem": "npm"
          },
          {
            "name": "brace-expansion",
            "direct": false,
            "version": "5.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "braces",
            "direct": false,
            "version": "3.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "browserslist",
            "direct": false,
            "version": "4.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "bs-logger",
            "direct": false,
            "version": "0.2.6",
            "ecosystem": "npm"
          },
          {
            "name": "bser",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "buffer",
            "direct": false,
            "version": "6.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "buffer-from",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "bundle-require",
            "direct": false,
            "version": "5.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "cac",
            "direct": false,
            "version": "6.7.14",
            "ecosystem": "npm"
          },
          {
            "name": "callsites",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "camelcase",
            "direct": false,
            "version": "5.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "camelcase",
            "direct": false,
            "version": "6.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "caniuse-lite",
            "direct": false,
            "version": "1.0.30001781",
            "ecosystem": "npm"
          },
          {
            "name": "chalk",
            "direct": false,
            "version": "4.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "char-regex",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "chokidar",
            "direct": false,
            "version": "4.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "ci-info",
            "direct": false,
            "version": "3.9.0",
            "ecosystem": "npm"
          },
          {
            "name": "ci-info",
            "direct": false,
            "version": "4.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "cjs-module-lexer",
            "direct": false,
            "version": "1.4.3",
            "ecosystem": "npm"
          },
          {
            "name": "cliui",
            "direct": false,
            "version": "8.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "co",
            "direct": false,
            "version": "4.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "collect-v8-coverage",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "color-convert",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "color-name",
            "direct": false,
            "version": "1.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "commander",
            "direct": false,
            "version": "4.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "concat-map",
            "direct": false,
            "version": "0.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "confbox",
            "direct": false,
            "version": "0.1.8",
            "ecosystem": "npm"
          },
          {
            "name": "consola",
            "direct": false,
            "version": "3.4.2",
            "ecosystem": "npm"
          },
          {
            "name": "convert-source-map",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "create-jest",
            "direct": false,
            "version": "29.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "create-require",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "cross-spawn",
            "direct": false,
            "version": "7.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "debug",
            "direct": false,
            "version": "4.4.3",
            "ecosystem": "npm"
          },
          {
            "name": "dedent",
            "direct": false,
            "version": "1.7.2",
            "ecosystem": "npm"
          },
          {
            "name": "deep-is",
            "direct": false,
            "version": "0.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "deepmerge",
            "direct": false,
            "version": "4.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "detect-newline",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "diff",
            "direct": false,
            "version": "4.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "diff-sequences",
            "direct": false,
            "version": "29.6.3",
            "ecosystem": "npm"
          },
          {
            "name": "doctrine",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "electron-to-chromium",
            "direct": false,
            "version": "1.5.328",
            "ecosystem": "npm"
          },
          {
            "name": "emittery",
            "direct": false,
            "version": "0.13.1",
            "ecosystem": "npm"
          },
          {
            "name": "emoji-regex",
            "direct": false,
            "version": "8.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "empathic",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "error-ex",
            "direct": false,
            "version": "1.3.4",
            "ecosystem": "npm"
          },
          {
            "name": "es6-promise",
            "direct": false,
            "version": "2.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "es6-promise",
            "direct": false,
            "version": "4.2.8",
            "ecosystem": "npm"
          },
          {
            "name": "esbuild",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "escalade",
            "direct": false,
            "version": "3.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "escape-string-regexp",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "escape-string-regexp",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "eslint",
            "direct": false,
            "version": "8.57.0",
            "ecosystem": "npm"
          },
          {
            "name": "eslint-scope",
            "direct": false,
            "version": "7.2.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": "9.6.1",
            "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": "esutils",
            "direct": false,
            "version": "2.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "execa",
            "direct": false,
            "version": "5.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "exit",
            "direct": false,
            "version": "0.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "expect",
            "direct": false,
            "version": "29.7.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": "fastq",
            "direct": false,
            "version": "1.20.1",
            "ecosystem": "npm"
          },
          {
            "name": "fb-watchman",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "fdir",
            "direct": false,
            "version": "6.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "file-entry-cache",
            "direct": false,
            "version": "6.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "fill-range",
            "direct": false,
            "version": "7.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "find-up",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "find-up",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "fix-dts-default-cjs-exports",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "flat-cache",
            "direct": false,
            "version": "3.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "flatted",
            "direct": false,
            "version": "3.4.2",
            "ecosystem": "npm"
          },
          {
            "name": "fs.realpath",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "fsevents",
            "direct": false,
            "version": "2.3.3",
            "ecosystem": "npm"
          },
          {
            "name": "function-bind",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "gensync",
            "direct": false,
            "version": "1.0.0-beta.2",
            "ecosystem": "npm"
          },
          {
            "name": "get-caller-file",
            "direct": false,
            "version": "2.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "get-package-type",
            "direct": false,
            "version": "0.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "get-stream",
            "direct": false,
            "version": "6.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "get-tsconfig",
            "direct": false,
            "version": "4.13.7",
            "ecosystem": "npm"
          },
          {
            "name": "glob",
            "direct": false,
            "version": "7.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "glob-parent",
            "direct": false,
            "version": "6.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "globals",
            "direct": false,
            "version": "13.24.0",
            "ecosystem": "npm"
          },
          {
            "name": "graceful-fs",
            "direct": false,
            "version": "4.2.11",
            "ecosystem": "npm"
          },
          {
            "name": "graphemer",
            "direct": false,
            "version": "1.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "handlebars",
            "direct": false,
            "version": "4.7.9",
            "ecosystem": "npm"
          },
          {
            "name": "has-flag",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "hasown",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "html-escaper",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "human-signals",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "ieee754",
            "direct": false,
            "version": "1.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "ignore",
            "direct": false,
            "version": "5.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "ignore",
            "direct": false,
            "version": "7.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "import-fresh",
            "direct": false,
            "version": "3.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "import-local",
            "direct": false,
            "version": "3.2.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": "inflight",
            "direct": false,
            "version": "1.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "inherits",
            "direct": false,
            "version": "2.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "is-arrayish",
            "direct": false,
            "version": "0.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "is-core-module",
            "direct": false,
            "version": "2.16.1",
            "ecosystem": "npm"
          },
          {
            "name": "is-extglob",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "is-fullwidth-code-point",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-generator-fn",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-glob",
            "direct": false,
            "version": "4.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "is-number",
            "direct": false,
            "version": "7.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-path-inside",
            "direct": false,
            "version": "3.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "is-stream",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "isexe",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "istanbul-lib-coverage",
            "direct": false,
            "version": "3.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "istanbul-lib-instrument",
            "direct": false,
            "version": "5.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "istanbul-lib-instrument",
            "direct": false,
            "version": "6.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "istanbul-lib-report",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "istanbul-lib-source-maps",
            "direct": false,
            "version": "4.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "istanbul-reports",
            "direct": false,
            "version": "3.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "jest",
            "direct": false,
            "version": "29.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "jest-changed-files",
            "direct": false,
            "version": "29.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "jest-circus",
            "direct": false,
            "version": "29.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "jest-cli",
            "direct": false,
            "version": "29.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "jest-config",
            "direct": false,
            "version": "29.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "jest-diff",
            "direct": false,
            "version": "29.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "jest-docblock",
            "direct": false,
            "version": "29.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "jest-each",
            "direct": false,
            "version": "29.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "jest-environment-node",
            "direct": false,
            "version": "29.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "jest-get-type",
            "direct": false,
            "version": "29.6.3",
            "ecosystem": "npm"
          },
          {
            "name": "jest-haste-map",
            "direct": false,
            "version": "29.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "jest-haste-map",
            "direct": false,
            "version": "30.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "jest-leak-detector",
            "direct": false,
            "version": "29.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "jest-matcher-utils",
            "direct": false,
            "version": "29.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "jest-message-util",
            "direct": false,
            "version": "29.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "jest-mock",
            "direct": false,
            "version": "29.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "jest-pnp-resolver",
            "direct": false,
            "version": "1.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "jest-regex-util",
            "direct": false,
            "version": "29.6.3",
            "ecosystem": "npm"
          },
          {
            "name": "jest-regex-util",
            "direct": false,
            "version": "30.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "jest-resolve",
            "direct": false,
            "version": "29.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "jest-resolve-dependencies",
            "direct": false,
            "version": "29.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "jest-runner",
            "direct": false,
            "version": "29.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "jest-runtime",
            "direct": false,
            "version": "29.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "jest-snapshot",
            "direct": false,
            "version": "29.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "jest-util",
            "direct": false,
            "version": "29.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "jest-util",
            "direct": false,
            "version": "30.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "jest-validate",
            "direct": false,
            "version": "29.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "jest-watcher",
            "direct": false,
            "version": "29.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "jest-worker",
            "direct": false,
            "version": "29.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "jest-worker",
            "direct": false,
            "version": "30.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "jiti",
            "direct": false,
            "version": "2.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "joycon",
            "direct": false,
            "version": "3.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "js-tokens",
            "direct": false,
            "version": "10.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "js-tokens",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "js-yaml",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "jsesc",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "json-buffer",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "json-parse-even-better-errors",
            "direct": false,
            "version": "2.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "json-schema-traverse",
            "direct": false,
            "version": "0.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "json-stable-stringify-without-jsonify",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "json5",
            "direct": false,
            "version": "2.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "keyv",
            "direct": false,
            "version": "4.5.4",
            "ecosystem": "npm"
          },
          {
            "name": "kleur",
            "direct": false,
            "version": "3.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "leven",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "levn",
            "direct": false,
            "version": "0.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "lilconfig",
            "direct": false,
            "version": "3.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "lines-and-columns",
            "direct": false,
            "version": "1.2.4",
            "ecosystem": "npm"
          },
          {
            "name": "load-tsconfig",
            "direct": false,
            "version": "0.2.5",
            "ecosystem": "npm"
          },
          {
            "name": "locate-path",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "locate-path",
            "direct": false,
            "version": "6.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "lodash",
            "direct": false,
            "version": "4.18.1",
            "ecosystem": "npm"
          },
          {
            "name": "lodash._arraycopy",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "lodash._arrayeach",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "lodash._baseassign",
            "direct": false,
            "version": "3.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "lodash._baseclone",
            "direct": false,
            "version": "3.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "lodash._basecopy",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "lodash._basefor",
            "direct": false,
            "version": "3.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "lodash._bindcallback",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "lodash._getnative",
            "direct": false,
            "version": "3.9.1",
            "ecosystem": "npm"
          },
          {
            "name": "lodash._isiterateecall",
            "direct": false,
            "version": "3.0.9",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.clone",
            "direct": false,
            "version": "3.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.clonedeep",
            "direct": false,
            "version": "3.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.isarguments",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.isarray",
            "direct": false,
            "version": "3.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.keys",
            "direct": false,
            "version": "3.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.memoize",
            "direct": false,
            "version": "4.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.merge",
            "direct": false,
            "version": "4.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "long",
            "direct": false,
            "version": "5.3.2",
            "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-dir",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "make-error",
            "direct": false,
            "version": "1.3.6",
            "ecosystem": "npm"
          },
          {
            "name": "makeerror",
            "direct": false,
            "version": "1.0.12",
            "ecosystem": "npm"
          },
          {
            "name": "merge-stream",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "micromatch",
            "direct": false,
            "version": "4.0.8",
            "ecosystem": "npm"
          },
          {
            "name": "mimic-fn",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "minimatch",
            "direct": false,
            "version": "10.2.4",
            "ecosystem": "npm"
          },
          {
            "name": "minimatch",
            "direct": false,
            "version": "3.1.5",
            "ecosystem": "npm"
          },
          {
            "name": "minimist",
            "direct": false,
            "version": "1.2.8",
            "ecosystem": "npm"
          },
          {
            "name": "mlly",
            "direct": false,
            "version": "1.8.2",
            "ecosystem": "npm"
          },
          {
            "name": "ms",
            "direct": false,
            "version": "2.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "mz",
            "direct": false,
            "version": "2.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "natural-compare",
            "direct": false,
            "version": "1.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "neo-async",
            "direct": false,
            "version": "2.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "node-forge",
            "direct": false,
            "version": "1.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "node-int64",
            "direct": false,
            "version": "0.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "node-releases",
            "direct": false,
            "version": "2.0.36",
            "ecosystem": "npm"
          },
          {
            "name": "normalize-path",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "npm-run-path",
            "direct": false,
            "version": "4.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "object-assign",
            "direct": false,
            "version": "4.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "obug",
            "direct": false,
            "version": "2.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "once",
            "direct": false,
            "version": "1.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "onetime",
            "direct": false,
            "version": "5.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "optionator",
            "direct": false,
            "version": "0.9.4",
            "ecosystem": "npm"
          },
          {
            "name": "p-limit",
            "direct": false,
            "version": "2.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "p-limit",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "p-locate",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "p-locate",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "p-try",
            "direct": false,
            "version": "2.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "pako",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "parent-module",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "parse-json",
            "direct": false,
            "version": "5.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "path-exists",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "path-is-absolute",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "path-key",
            "direct": false,
            "version": "3.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "path-parse",
            "direct": false,
            "version": "1.0.7",
            "ecosystem": "npm"
          },
          {
            "name": "pathe",
            "direct": false,
            "version": "2.0.3",
            "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": "pirates",
            "direct": false,
            "version": "4.0.7",
            "ecosystem": "npm"
          },
          {
            "name": "pkg-dir",
            "direct": false,
            "version": "4.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "pkg-types",
            "direct": false,
            "version": "1.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-load-config",
            "direct": false,
            "version": "6.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "prelude-ls",
            "direct": false,
            "version": "1.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "pretty-format",
            "direct": false,
            "version": "29.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "process",
            "direct": false,
            "version": "0.11.10",
            "ecosystem": "npm"
          },
          {
            "name": "prompts",
            "direct": false,
            "version": "2.4.2",
            "ecosystem": "npm"
          },
          {
            "name": "punycode",
            "direct": false,
            "version": "2.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "pure-rand",
            "direct": false,
            "version": "6.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "queue-microtask",
            "direct": false,
            "version": "1.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "react-is",
            "direct": false,
            "version": "18.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "readdirp",
            "direct": false,
            "version": "4.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "require-directory",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "resolve",
            "direct": false,
            "version": "1.22.11",
            "ecosystem": "npm"
          },
          {
            "name": "resolve-cwd",
            "direct": false,
            "version": "3.0.0",
            "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": "resolve-pkg-maps",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "resolve.exports",
            "direct": false,
            "version": "2.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "reusify",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "rimraf",
            "direct": false,
            "version": "3.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "rollup",
            "direct": false,
            "version": "4.60.0",
            "ecosystem": "npm"
          },
          {
            "name": "run-parallel",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "semver",
            "direct": false,
            "version": "6.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "semver",
            "direct": false,
            "version": "7.7.4",
            "ecosystem": "npm"
          },
          {
            "name": "shebang-command",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "shebang-regex",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "signal-exit",
            "direct": false,
            "version": "3.0.7",
            "ecosystem": "npm"
          },
          {
            "name": "signal-exit",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "sisteransi",
            "direct": false,
            "version": "1.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "slash",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "source-map",
            "direct": false,
            "version": "0.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "source-map",
            "direct": false,
            "version": "0.7.6",
            "ecosystem": "npm"
          },
          {
            "name": "source-map-support",
            "direct": false,
            "version": "0.5.13",
            "ecosystem": "npm"
          },
          {
            "name": "stack-utils",
            "direct": false,
            "version": "2.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "string-length",
            "direct": false,
            "version": "4.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "string-width",
            "direct": false,
            "version": "4.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "strip-ansi",
            "direct": false,
            "version": "6.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "strip-bom",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "strip-final-newline",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "strip-json-comments",
            "direct": false,
            "version": "3.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "sucrase",
            "direct": false,
            "version": "3.35.1",
            "ecosystem": "npm"
          },
          {
            "name": "supports-color",
            "direct": false,
            "version": "7.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "supports-color",
            "direct": false,
            "version": "8.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "supports-preserve-symlinks-flag",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "test-exclude",
            "direct": false,
            "version": "6.0.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": "tinyexec",
            "direct": false,
            "version": "0.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "tinyglobby",
            "direct": false,
            "version": "0.2.15",
            "ecosystem": "npm"
          },
          {
            "name": "tmpl",
            "direct": false,
            "version": "1.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "to-regex-range",
            "direct": false,
            "version": "5.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "tree-kill",
            "direct": false,
            "version": "1.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "ts-api-utils",
            "direct": false,
            "version": "2.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "ts-interface-checker",
            "direct": false,
            "version": "0.1.13",
            "ecosystem": "npm"
          },
          {
            "name": "ts-jest",
            "direct": false,
            "version": "29.4.6",
            "ecosystem": "npm"
          },
          {
            "name": "ts-node",
            "direct": false,
            "version": "10.9.2",
            "ecosystem": "npm"
          },
          {
            "name": "tsup",
            "direct": false,
            "version": "8.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "tsx",
            "direct": false,
            "version": "4.21.0",
            "ecosystem": "npm"
          },
          {
            "name": "type-check",
            "direct": false,
            "version": "0.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "type-detect",
            "direct": false,
            "version": "4.0.8",
            "ecosystem": "npm"
          },
          {
            "name": "type-fest",
            "direct": false,
            "version": "0.20.2",
            "ecosystem": "npm"
          },
          {
            "name": "type-fest",
            "direct": false,
            "version": "0.21.3",
            "ecosystem": "npm"
          },
          {
            "name": "type-fest",
            "direct": false,
            "version": "4.41.0",
            "ecosystem": "npm"
          },
          {
            "name": "typescript",
            "direct": false,
            "version": "5.9.3",
            "ecosystem": "npm"
          },
          {
            "name": "ufo",
            "direct": false,
            "version": "1.6.3",
            "ecosystem": "npm"
          },
          {
            "name": "uglify-js",
            "direct": false,
            "version": "3.19.3",
            "ecosystem": "npm"
          },
          {
            "name": "undici-types",
            "direct": false,
            "version": "6.20.0",
            "ecosystem": "npm"
          },
          {
            "name": "undici-types",
            "direct": false,
            "version": "7.18.2",
            "ecosystem": "npm"
          },
          {
            "name": "update-browserslist-db",
            "direct": false,
            "version": "1.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "uri-js",
            "direct": false,
            "version": "4.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "uuid",
            "direct": false,
            "version": "11.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "uuid",
            "direct": false,
            "version": "2.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "v8-compile-cache-lib",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "v8-to-istanbul",
            "direct": false,
            "version": "9.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "walker",
            "direct": false,
            "version": "1.0.8",
            "ecosystem": "npm"
          },
          {
            "name": "which",
            "direct": false,
            "version": "2.0.2",
            "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": "wrappy",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "write-file-atomic",
            "direct": false,
            "version": "4.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "write-file-atomic",
            "direct": false,
            "version": "5.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "y18n",
            "direct": false,
            "version": "5.0.8",
            "ecosystem": "npm"
          },
          {
            "name": "yargs",
            "direct": false,
            "version": "17.7.2",
            "ecosystem": "npm"
          },
          {
            "name": "yargs-parser",
            "direct": false,
            "version": "21.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "yn",
            "direct": false,
            "version": "3.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "yocto-queue",
            "direct": false,
            "version": "0.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "mypy",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "pytest",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "pytest-asyncio",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "ruff",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          }
        ],
        "collected": true,
        "truncated": false,
        "total_count": 546,
        "direct_count": 31,
        "indirect_count": 515
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 2,
        "merged_prs": 2,
        "open_issues": 1,
        "closed_ratio": 0.923,
        "closed_issues": 12,
        "closed_unmerged_prs": 10
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "3rg0n",
          "commits": 95,
          "avatar_url": "https://avatars.githubusercontent.com/u/62959009?v=4"
        },
        {
          "type": "User",
          "login": "ojaber",
          "commits": 2,
          "avatar_url": "https://avatars.githubusercontent.com/u/468248?v=4"
        }
      ],
      "contributors_sampled": 2,
      "top_contributor_share": 0.979
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "codeql.yml",
        "integration-tests.yml",
        "publish.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [
        ".eslintrc.cjs"
      ],
      "has_editorconfig": false,
      "has_linter_config": true,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "go.sum",
        "pnpm-lock.yaml"
      ],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 10,
            "reason": "no binaries found in the repo",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": 0,
            "reason": "branch protection not enabled on development/release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": 0,
            "reason": "0 out of 1 merged PRs checked by a CI test -- score normalized to 0",
            "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/28 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 3,
            "reason": "project has 1 contributing companies or organizations -- score normalized to 3",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 10,
            "reason": "no dangerous workflow patterns detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 0,
            "reason": "no update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 10,
            "reason": "10 commit(s) and 5 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": 5,
            "reason": "dependency not pinned by hash detected -- score normalized to 5",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 7,
            "reason": "SAST tool detected but not run on all commits",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 0,
            "reason": "security policy file not 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": 3,
            "reason": "7 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "fbf1c62c1a51ead882975b4f367f63f6b2e3ad9e",
        "ran_at": "2026-07-27T14:07:02Z",
        "aggregate_score": 4.3,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": true,
      "has_security_policy": false,
      "has_dependabot_config": false
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-27T07:51:30Z",
      "oldest_open_prs": [
        {
          "number": 18,
          "created_at": "2026-04-27T19:27:29Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 19,
          "created_at": "2026-04-28T02:55:02Z",
          "last_comment_at": "2026-04-28T05:15:53Z",
          "last_comment_author": "ojaber"
        }
      ],
      "last_merged_pr_at": "2026-04-13T15:14:16Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": [
        {
          "number": 26,
          "created_at": "2026-07-18T20:41:36Z",
          "last_comment_at": null,
          "last_comment_author": null
        }
      ]
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/3rg0n/webex-message-handler",
    "host": "github.com",
    "name": "webex-message-handler",
    "owner": "3rg0n"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 59,
      "inputs": {
        "security": 52,
        "vitality": 83,
        "community": 39,
        "governance": 49,
        "engineering": 68
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "good",
        "name": "Vitality",
        "value": 83,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "good",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 71,
            "inputs": {
              "commits_last_year": 97,
              "human_commit_share": 1,
              "days_since_last_push": 3,
              "active_weeks_last_year": 10
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 3 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 3
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "10/52 weeks with commits",
                "points": 6.9,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 10
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "97 commits in the last year",
                "points": 17.9,
                "status": "partial",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 97
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "10 commit(s) and 5 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": 37,
              "latest_release_tag": "v0.6.14",
              "releases_from_tags": false,
              "days_since_latest_release": 5,
              "mean_days_between_releases": 11
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "37 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 37
                    }
                  }
                ],
                "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 ~11 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 11
                    }
                  }
                ],
                "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": "at_risk",
        "name": "Community & Adoption",
        "value": 39,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "critical",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 1,
            "inputs": {
              "forks": 2,
              "stars": 0,
              "watchers": 0,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "0 stars",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "2 forks",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "0 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "good",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 70,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": true,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (MIT)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "MIT"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 18,
                "status": "met",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "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": 56,
            "inputs": {
              "packages": [
                "github.com/3rg0n/webex-message-handler/go",
                "webex-message-handler",
                "webex-message-handler",
                "webex-message-handler"
              ],
              "dependents": null,
              "ecosystems": "crates, go, npm, pypi",
              "total_downloads": 400,
              "monthly_downloads": 2405
            },
            "components": [
              {
                "key": "monthly_downloads",
                "name": "Monthly downloads",
                "detail": "2,405 downloads/month across crates, go, npm, pypi",
                "points": 45.1,
                "status": "partial",
                "details": [
                  {
                    "code": "downloads_monthly",
                    "params": {
                      "count": 2405,
                      "ecosystems": "crates, go, npm, pypi"
                    }
                  }
                ],
                "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": "at_risk",
        "name": "Sustainability & Governance",
        "value": 49,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 15,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 2,
              "top_contributor_share": 0.979
            },
            "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 98% of commits",
                "points": 0.5,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 98
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "2 contributors",
                "points": 2.7,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 1 contributing companies or organizations -- score normalized to 3",
                "points": 3,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "moderate",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 50,
            "inputs": {
              "merged_prs": 2,
              "open_issues": 1,
              "closed_issues": 12,
              "issue_closed_ratio": 0.923,
              "closed_unmerged_prs": 10
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "92% of issues closed",
                "points": 43.2,
                "status": "partial",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 92
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "2/12 decided PRs merged",
                "points": 6.4,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 2,
                      "decided": 12
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 1/28 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": 47,
            "inputs": {
              "followers": 6,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "3rg0n",
              "public_repos": 18,
              "account_age_days": 2308
            },
            "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": "6 followers of 3rg0n",
                "points": 6.1,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 6,
                      "login": "3rg0n"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "18 public repos, account ~6 yr old",
                "points": 21.3,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 18
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 6
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "github.com/3rg0n/webex-message-handler/go",
                "webex-message-handler",
                "webex-message-handler",
                "webex-message-handler"
              ],
              "ecosystems": "crates, go, npm, pypi",
              "any_deprecated": false,
              "min_days_since_publish": 3
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "4 package(s) on crates, go, npm, pypi",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 4,
                      "ecosystems": "crates, go, npm, pypi"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 3 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 3
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "21 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 21
                    }
                  }
                ],
                "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": "moderate",
        "name": "Engineering Quality",
        "value": 68,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "moderate",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 64,
            "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": ".eslintrc.cjs",
                "points": 16,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".eslintrc.cjs"
                    }
                  }
                ],
                "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": "0 out of 1 merged PRs checked by a CI test -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "good",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 75,
            "inputs": {
              "topics": [],
              "has_wiki": true,
              "homepage": null,
              "has_readme": true,
              "has_docs_dir": true,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 25,
                "status": "met",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "moderate",
        "name": "Security",
        "value": 52,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 43,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 17,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 1,
              "scorecard_aggregate": 4.3
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "branch protection not enabled on development/release branches",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "0 out of 1 merged PRs checked by a CI test -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "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/28 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 1 contributing companies or organizations -- score normalized to 3",
                "points": 0.8,
                "status": "partial",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "no update tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "10 commit(s) and 5 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 5",
                "points": 2.5,
                "status": "partial",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool detected but not run on all commits",
                "points": 3.5,
                "status": "partial",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file not detected",
                "points": 0,
                "status": "missed",
                "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": "7 existing vulnerabilities detected",
                "points": 2.2,
                "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. Remaining weights renormalized. Matched 516 resolved dependencies against OSV; 30 could not be assessed (no resolved version, an unsupported ecosystem, or beyond the reported package list). 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"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              },
              {
                "code": "advisories_scope_repository",
                "params": {
                  "assessed": 516
                }
              },
              {
                "code": "advisories_unassessed",
                "params": {
                  "count": 30
                }
              },
              {
                "code": "advisories_repo_graph_caveat",
                "params": {}
              },
              {
                "code": "advisories_reachability",
                "params": {}
              }
            ],
            "value": 89,
            "inputs": {
              "source": "osv",
              "advisories": 9,
              "affected_packages": 5,
              "assessed_packages": 516,
              "unassessed_packages": 30,
              "affected_by_severity": "high 4, unknown 1",
              "direct_affected_packages": 1
            },
            "components": [
              {
                "key": "direct_dependencies_free_of_known_advisories",
                "name": "Direct dependencies free of known advisories",
                "detail": "1 affected: golang.org/x/crypto v0.54.0 (unknown)",
                "points": 26.6,
                "status": "partial",
                "details": [
                  {
                    "code": "advisories_affected",
                    "params": {
                      "count": 1,
                      "packages": "golang.org/x/crypto v0.54.0 (unknown)"
                    }
                  }
                ],
                "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 has been public longer than 90 days",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "advisories_none_stale",
                    "params": {
                      "days": 90
                    }
                  }
                ],
                "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": 516,
              "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": 4
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "no confirmed policy-scope location match",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "jurisdiction_no_match",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "moderate",
        "name": "AI Readiness",
        "value": 66,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "at_risk",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.979,
              "agent_instruction_files": [],
              "agent_instruction_max_bytes": null
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "no CLAUDE.md / AGENTS.md / editor rules",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_instructions",
                    "params": {}
                  }
                ],
                "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": "95 of 97 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 95,
                      "sampled": 97
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "good",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 82,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "go.sum",
                "pnpm-lock.yaml"
              ],
              "has_dockerfile": false,
              "typed_language": true,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": true,
              "typecheck_configs": [
                "node/tsconfig.json"
              ],
              "agent_commit_share": 0.835,
              "toolchain_manifests": [
                "go/go.mod",
                "rust/Cargo.toml"
              ],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "go/go.mod, rust/Cargo.toml (toolchain convention, no task runner)",
                "points": 12.6,
                "status": "partial",
                "details": [
                  {
                    "code": "toolchain_convention",
                    "params": {
                      "files": "go/go.mod, rust/Cargo.toml"
                    }
                  }
                ],
                "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": ".eslintrc.cjs",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".eslintrc.cjs"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "node/tsconfig.json",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "node/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": "81 of the last 97 commits agent-authored or agent-credited",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 81,
                      "sampled": 97
                    }
                  }
                ],
                "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 5",
                "points": 5,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "primary_language": "TypeScript",
              "largest_source_bytes": 44381,
              "source_files_sampled": 99,
              "oversized_source_files": 0
            },
            "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": "0/99 source files over 60KB",
                "points": 55,
                "status": "met",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 99,
                      "oversized": 0
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "at_risk",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "example_dirs": [
                "examples"
              ],
              "has_mcp_signal": false,
              "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": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "runnable_examples",
                "name": "Runnable examples",
                "detail": "examples",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "examples"
                    }
                  }
                ],
                "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": [],
  "report_type": "repository",
  "generated_at": "2026-07-27T14:07:11.709620Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/3/3rg0n/webex-message-handler.svg",
  "full_name": "3rg0n/webex-message-handler",
  "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 agregadasGo, crates.io, npm, PyPI.