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

theseedship / mcp-ui

TypeScript · HTMLMIT★ 1 estrella⑂ 0 forksdesde nov 2025Ver en GitHub ↗

theseedship/mcp-ui tiene un índice de salud de 64 sobre 100, lo que lo sitúa en la banda Moderado. Su puntuación más alta es Vitality (86/100) y la más baja, Community & Adoption (41/100). Se actualizó por última vez hoy. Una sola persona concentra la mayor parte del trabajo reciente.

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

64
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

The Seed ShipOrganización
5 seguidores22 repositorios públicosdesde abr 2023

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

Ecosistemas de paquetes

RegistroPaqueteVersiónDescargas / mesVersionesÚltima publicaciónEtiquetas
npm@seed-ship/mcp-ui-cli5.0.041114hace 101 díasmcpuiclivalidationcodegencomponent-registry
npm@seed-ship/mcp-ui-spec5.5.083629hace 55 díasmcpuispecificationjson-schemacomponent-registry
npm@seed-ship/mcp-ui-solid6.16.0924135hace 21 díasmcpuisolidjscomponentsstreamingdashboardgenerative-ui

Métricas por categoría

Vitalidad

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

86Excelente · 22% del índice global
Cómo se puntúa
36/36Recencia de push — último push hace 0 días
11.8/36Cadencia de commits — 17/52 semanas con commits
18/18Volumen de commits — 250 commits en el último año
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
Datos de entrada utilizados
commits_last_year250
human_commit_share0,98
days_since_last_push0
active_weeks_last_year17
Cómo se puntúa
27/27Publica versiones — 100 versiones publicadas
36/36Recencia de las versiones — última versión hace 21 días
27/27Cadencia de publicación — una versión cada ~3,8 días
0/10OpenSSF Scorecard: Signed-Releases — sin datos
Datos de entrada utilizados
releases_count100
latest_release_tagv6.16.0
releases_from_tagsno
days_since_latest_release21
mean_days_between_releases3,8
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?

41En riesgo · 18% del índice global
Cómo se puntúa
0/60Estrellas — 1 estrellas
0/25Forks — 0 forks
0/15Observadores — 0 observadores
Datos de entrada utilizados
forks0
stars1
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
6.3/6.3Plantilla de PR
Datos de entrada utilizados
has_readme
has_license
has_contributing
has_issue_templateno
has_code_of_conductno
has_pull_request_template
Cómo se puntúa
44.5/80Descargas mensuales — 2171 descargas/mes en npm
0/20Dependientes en el registro — no lo informa este ecosistema
Datos de entrada utilizados
packages@seed-ship/mcp-ui-cli, @seed-ship/mcp-ui-spec, @seed-ship/mcp-ui-solid
dependents
ecosystemsnpm
total_downloads
monthly_downloads2171
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?

55Moderado · 24% del índice global
Cómo se puntúa
9/54Factor bus — la mitad de los commits recae en 1 contribuyente(s)
0/22.5Distribución de commits — el principal contribuyente firma el 100% de los commits
1.4/13.5Amplitud de contribuyentes — 1 contribuyentes
3/10OpenSSF Scorecard: Contributors — project has 1 contributing companies or organizations -- score normalized to 3
Datos de entrada utilizados
bus_factor1
contributors_sampled1
top_contributor_share1
Cómo se puntúa
0/46.8Resolución de issues — sin issues o sin datos
38.2/38.3Aceptación de PR — 14/14 PR decididos fusionados
0/15OpenSSF Scorecard: Code-Review — Found 0/17 approved changesets -- score normalized to 0
Datos de entrada utilizados
merged_prs14
open_issues0
closed_issues0
issue_closed_ratio
closed_unmerged_prs0
Excluidos de la puntuación (sin datos o no aplicable): Resolución de issues. Los pesos restantes se han renormalizado.
Cómo se puntúa
30/30Respaldo de la propiedad — propiedad de una organización
0/20Dominio verificado
5.6/25Alcance del propietario — 5 seguidores de theseedship
16.5/25Trayectoria — 22 repos públicos, cuenta de ~3 años
Datos de entrada utilizados
followers5
owner_typeOrganization
is_verified
owner_logintheseedship
public_repos22
account_age_days1203
Cómo se puntúa
25/25Publicado y resoluble — 3 paquete(s) en npm
35/35Recencia de publicación — última publicación hace 21 días
20/20Historial de versiones — 135 versiones en el registro
20/20No obsoleto — activo, ni obsoleto ni retirado
Datos de entrada utilizados
packages@seed-ship/mcp-ui-cli, @seed-ship/mcp-ui-spec, @seed-ship/mcp-ui-solid
ecosystemsnpm
any_deprecatedno
min_days_since_publish21

Calidad de Ingeniería

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

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

Documentación

65Moderado
Cómo se puntúa
30/30README
25/25Directorio de documentación
0/15Sitio de documentación / página del proyecto
0/10Descripción del repositorio
0/10Topics
10/10Wiki
Datos de entrada utilizados
topics
has_wiki
homepage
has_readme
has_docs_dir
has_descriptionno

Seguridad

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

55Moderado · 16% del índice global
Cómo se puntúa
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — branch protection not enabled on development/release branches
2.5/2.5CI-Tests — 4 out of 4 merged PRs checked by a CI test -- score normalized to 10
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 0/17 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
7.5/7.5Dependency-Update-Tool — update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5Licencia — license file detected
7.5/7.5Maintained — 30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
5/5Packaging — packaging workflow detected
0/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
0/5SAST — SAST tool is not run on all commits -- score normalized to 0
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
0/7.5Vulnerabilities — 13 existing vulnerabilities detected
Datos de entrada utilizados
sourceopenssf_scorecard
checks_evaluated17
scorecard_versionv5.5.0
checks_inconclusive1
scorecard_aggregate4,4
Excluidos de la puntuación (sin datos o no aplicable): signed_releases. Los pesos restantes se han renormalizado.
Cómo se puntúa
35/35Dependencias directas libres de avisos conocidos — ninguna dependencia directa tiene un aviso conocido
25/25Dependencias indirectas libres de avisos conocidos — ninguna dependencia indirecta tiene un aviso conocido
0/40Sin avisos pendientes — ningún aviso tiene fecha de publicación
Datos de entrada utilizados
sourceosv
advisories0
affected_packages0
assessed_packages49
unassessed_packages0
affected_by_severitynone
direct_affected_packages0
Excluidos de la puntuación (sin datos o no aplicable): Sin avisos pendientes. Los pesos restantes se han renormalizado. Se cotejó el cierre de dependencias en tiempo de ejecución de npm:@seed-ship/mcp-ui-cli@5.0.0 —lo que arrastra la instalación del paquete publicado—: 49 paquetes. No se analiza la alcanzabilidad.

Preparación para IA

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

75Bueno · 0% del índice global
Cómo se puntúa
45/45Instrucciones para agentes — CLAUDE.md
0/15Documentación legible por máquinas (llms.txt)
40/40Historial de commits legible — 98 de 98 commits humanos declaran su intención (asunto estructurado o cuerpo explicativo)
Datos de entrada utilizados
has_llms_txtno
legible_history_share1
agent_instruction_filesCLAUDE.md
agent_instruction_max_bytes3127
Cómo se puntúa
0/18Arranque con un solo comando
22/22Pruebas automatizadas
11/11Configuración de lint / formato — eslint.config.js
11/11Verificación estática de tipos — mcp-ui-cli/tsconfig.json, mcp-ui-solid/tsconfig.json, mcp-ui-spec/tsconfig.json, tsconfig.json
10/10Entorno reproducible — lockfile
10/10Práctica demostrada con agentes — 92 de los últimos 100 commits con autoría o crédito de agente
8/8Mantenimiento automatizado — 2 de los últimos 100 commits son actualizaciones automáticas de dependencias
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Datos de entrada utilizados
has_nixno
has_tests
lockfilespnpm-lock.yaml
has_dockerfileno
typed_language
bootstrap_files
has_devcontainerno
has_linter_config
typecheck_configsmcp-ui-cli/tsconfig.json, mcp-ui-solid/tsconfig.json, mcp-ui-spec/tsconfig.json, tsconfig.json
agent_commit_share0,92
toolchain_manifests
dependency_bot_commit_share0,02
Cómo se puntúa
45/45Código verificable por tipos — TypeScript (tipado estático)
54.4/55Tamaños de archivo manejables — 2/173 archivos fuente de más de 60 KB
Datos de entrada utilizados
primary_languageTypeScript
largest_source_bytes81.424
source_files_sampled173
oversized_source_files2
Cómo se puntúa
0/40Esquema de API (OpenAPI/GraphQL/proto)
0/20Servidor MCP
40/40Ejemplos ejecutables — examples, recipes
Datos de entrada utilizados
example_dirsexamples, recipes
has_mcp_signalno
api_schema_files

Datos clave

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

Advertencias de recopilación de datos

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

Más detalle

OpenSSF Scorecard 4.4 / 10
4.4agregado

Evaluación de seguridad independiente y agnóstica en cuanto a herramientas, procedente del proyecto de código abierto OpenSSF Scorecard. Cada comprobación premia una práctica de seguridad, no la herramienta de un proveedor concreto. Las comprobaciones que Scorecard no pudo determinar se marcan como n/d y se excluyen de la puntuación de seguridad (nunca se cuentan como cero).Scorecard v5.5.0 · 2026-07-25 12:51 UTC

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
10CI-Tests4 out of 4 merged PRs checked by a CI test -- score normalized to 10
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/17 approved changesets -- score normalized to 0
3Contributorsproject has 1 contributing companies or organizations -- score normalized to 3
10Dangerous-Workflowno dangerous workflow patterns detected
10Dependency-Update-Toolupdate tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
10Maintained30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
10Packagingpackaging workflow detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
0SASTSAST tool is not run on all commits -- score normalized to 0
0Security-Policysecurity policy file not detected
n/dSigned-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
0Vulnerabilities13 existing vulnerabilities detected
Dependencias directas 13
RegistroPaqueteRestricción de versiónManifiesto
npm@seed-ship/mcp-ui-specworkspace:*mcp-ui-cli/package.json
npmajv^8.18.0mcp-ui-cli/package.json
npmchalk^5.3.0mcp-ui-cli/package.json
npmcommander^11.1.0mcp-ui-cli/package.json
npmjson-schema-to-typescript^15.0.4mcp-ui-cli/package.json
npmora^7.0.1mcp-ui-cli/package.json
npmzod^3.22.4mcp-ui-cli/package.json
npm@seed-ship/mcp-ui-specworkspace:^5.3.0mcp-ui-solid/package.json
npm@types/dompurify^3.0.5mcp-ui-solid/package.json
npmdompurify^3.4.1mcp-ui-solid/package.json
npmmarked^16.3.0mcp-ui-solid/package.json
npmzod^3.22.4mcp-ui-solid/package.json
npmzod^3.22.4mcp-ui-spec/package.json
Todas las dependencias 589

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

RegistroPaqueteVersiónRelación
npm@types/dompurify3.2.0directa
npm@types/dompurify^3.0.5directa
npmajv6.14.0directa
npmajv8.18.0directa
npmajv^8.18.0directa
npmchalk4.1.2directa
npmchalk5.6.2directa
npmchalk^5.3.0directa
npmcommander11.1.0directa
npmcommander7.2.0directa
npmcommander^11.1.0directa
npmdompurify3.4.11directa
npmdompurify^3.4.1directa
npmjson-schema-to-typescript15.0.4directa
npmjson-schema-to-typescript^15.0.4directa
npmmarked16.4.2directa
npmmarked^16.3.0directa
npmora7.0.1directa
npmora^7.0.1directa
npmzod3.25.76directa
npmzod^3.22.4directa
npm@acemir/cssom0.9.23indirecta
npm@antv/algorithm0.1.26indirecta
npm@antv/component2.1.11indirecta
npm@antv/event-emitter0.1.3indirecta
npm@antv/expr1.0.2indirecta
npm@antv/g6.3.1indirecta
npm@antv/g-canvas2.2.0indirecta
npm@antv/g-lite2.7.0indirecta
npm@antv/g-math3.1.0indirecta
npm@antv/g-plugin-dragndrop2.1.1indirecta
npm@antv/g65.1.0indirecta
npm@antv/graphlib2.0.4indirecta
npm@antv/hierarchy0.7.1indirecta
npm@antv/layout2.0.0indirecta
npm@antv/scale0.4.16indirecta
npm@antv/util2.0.17indirecta
npm@antv/util3.3.11indirecta
npm@antv/vendor1.0.11indirecta
npm@apidevtools/json-schema-ref-parser11.9.3indirecta
npm@asamuzakjp/css-color4.0.5indirecta
npm@asamuzakjp/dom-selector6.7.4indirecta
npm@asamuzakjp/nwsapi2.3.9indirecta
npm@babel/code-frame7.27.1indirecta
npm@babel/compat-data7.28.5indirecta
npm@babel/core7.28.5indirecta
npm@babel/generator7.28.5indirecta
npm@babel/helper-compilation-targets7.27.2indirecta
npm@babel/helper-globals7.28.0indirecta
npm@babel/helper-module-imports7.18.6indirecta
npm@babel/helper-module-imports7.27.1indirecta
npm@babel/helper-module-transforms7.28.3indirecta
npm@babel/helper-plugin-utils7.27.1indirecta
npm@babel/helper-string-parser7.27.1indirecta
npm@babel/helper-validator-identifier7.28.5indirecta
npm@babel/helper-validator-option7.27.1indirecta
npm@babel/helpers7.28.4indirecta
npm@babel/parser7.28.5indirecta
npm@babel/plugin-syntax-jsx7.27.1indirecta
npm@babel/runtime7.28.4indirecta
npm@babel/template7.27.2indirecta
npm@babel/traverse7.28.5indirecta
npm@babel/types7.28.5indirecta
npm@csstools/color-helpers5.1.0indirecta
npm@csstools/css-calc2.1.4indirecta
npm@csstools/css-color-parser3.1.0indirecta
npm@csstools/css-parser-algorithms3.0.5indirecta
npm@csstools/css-syntax-patches-for-csstree1.0.16indirecta
npm@csstools/css-tokenizer3.0.4indirecta
npm@duckdb/duckdb-wasm1.32.0indirecta
npm@emnapi/core1.10.0indirecta
npm@emnapi/runtime1.10.0indirecta
npm@emnapi/wasi-threads1.2.1indirecta
npm@esbuild/aix-ppc640.27.2indirecta
npm@esbuild/android-arm0.27.2indirecta
npm@esbuild/android-arm640.27.2indirecta
npm@esbuild/android-x640.27.2indirecta
npm@esbuild/darwin-arm640.27.2indirecta
npm@esbuild/darwin-x640.27.2indirecta
npm@esbuild/freebsd-arm640.27.2indirecta
npm@esbuild/freebsd-x640.27.2indirecta
npm@esbuild/linux-arm0.27.2indirecta
npm@esbuild/linux-arm640.27.2indirecta
npm@esbuild/linux-ia320.27.2indirecta
npm@esbuild/linux-loong640.27.2indirecta
npm@esbuild/linux-mips64el0.27.2indirecta
npm@esbuild/linux-ppc640.27.2indirecta
npm@esbuild/linux-riscv640.27.2indirecta
npm@esbuild/linux-s390x0.27.2indirecta
npm@esbuild/linux-x640.27.2indirecta
npm@esbuild/netbsd-arm640.27.2indirecta
npm@esbuild/netbsd-x640.27.2indirecta
npm@esbuild/openbsd-arm640.27.2indirecta
npm@esbuild/openbsd-x640.27.2indirecta
npm@esbuild/openharmony-arm640.27.2indirecta
npm@esbuild/sunos-x640.27.2indirecta
npm@esbuild/win32-arm640.27.2indirecta
npm@esbuild/win32-ia320.27.2indirecta
npm@esbuild/win32-x640.27.2indirecta
npm@eslint-community/eslint-utils4.9.0indirecta
npm@eslint-community/regexpp4.12.2indirecta
npm@eslint/eslintrc2.1.4indirecta
npm@eslint/js8.57.1indirecta
npm@humanwhocodes/config-array0.13.0indirecta
npm@humanwhocodes/module-importer1.0.1indirecta
npm@humanwhocodes/object-schema2.0.3indirecta
npm@jridgewell/gen-mapping0.3.13indirecta
npm@jridgewell/remapping2.3.5indirecta
npm@jridgewell/resolve-uri3.1.2indirecta
npm@jridgewell/sourcemap-codec1.5.5indirecta
npm@jridgewell/trace-mapping0.3.31indirecta
npm@jsdevtools/ono7.1.3indirecta
npm@kurkle/color0.3.4indirecta
npm@mapbox/point-geometry1.1.0indirecta
npm@mapbox/vector-tile2.0.4indirecta
npm@napi-rs/wasm-runtime1.1.5indirecta
npm@nodelib/fs.scandir2.1.5indirecta
npm@nodelib/fs.stat2.0.5indirecta
npm@nodelib/fs.walk1.2.8indirecta
npm@oxc-project/types0.133.0indirecta
npm@polka/url1.0.0-next.29indirecta
npm@rolldown/binding-android-arm641.0.3indirecta
npm@rolldown/binding-darwin-arm641.0.3indirecta
npm@rolldown/binding-darwin-x641.0.3indirecta
npm@rolldown/binding-freebsd-x641.0.3indirecta
npm@rolldown/binding-linux-arm-gnueabihf1.0.3indirecta
npm@rolldown/binding-linux-arm64-gnu1.0.3indirecta
npm@rolldown/binding-linux-arm64-musl1.0.3indirecta
npm@rolldown/binding-linux-ppc64-gnu1.0.3indirecta
npm@rolldown/binding-linux-s390x-gnu1.0.3indirecta
npm@rolldown/binding-linux-x64-gnu1.0.3indirecta
npm@rolldown/binding-linux-x64-musl1.0.3indirecta
npm@rolldown/binding-openharmony-arm641.0.3indirecta
npm@rolldown/binding-wasm32-wasi1.0.3indirecta
npm@rolldown/binding-win32-arm64-msvc1.0.3indirecta
npm@rolldown/binding-win32-x64-msvc1.0.3indirecta
npm@rolldown/pluginutils1.0.1indirecta
npm@size-limit/esbuild12.0.0indirecta
npm@size-limit/esbuild^12.0.0indirecta
npm@size-limit/esbuild-why12.0.0indirecta
npm@size-limit/esbuild-why^12.0.0indirecta
npm@size-limit/file12.0.0indirecta
npm@size-limit/preset-small-lib12.0.0indirecta
npm@size-limit/preset-small-lib^12.0.0indirecta
npm@solidjs/testing-library0.8.10indirecta
npm@solidjs/testing-library^0.8.5indirecta
npm@standard-schema/spec1.1.0indirecta
npm@swc/helpers0.5.18indirecta
npm@tanstack/solid-virtual3.13.18indirecta
npm@tanstack/solid-virtual^3.13.18indirecta
npm@tanstack/virtual-core3.13.18indirecta
npm@testing-library/dom10.4.1indirecta
npm@tybys/wasm-util0.10.2indirecta
npm@types/aria-query5.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/chai5.2.3indirecta
npm@types/command-line-args5.2.3indirecta
npm@types/command-line-usage5.0.4indirecta
npm@types/css-font-loading-module0.0.7indirecta
npm@types/d3-array3.2.2indirecta
npm@types/d3-color3.1.3indirecta
npm@types/d3-dispatch3.0.7indirecta
npm@types/d3-dsv3.0.7indirecta
npm@types/d3-ease3.0.2indirecta
npm@types/d3-fetch3.0.7indirecta
npm@types/d3-force3.0.10indirecta
npm@types/d3-format3.0.4indirecta
npm@types/d3-geo3.1.0indirecta
npm@types/d3-hierarchy3.1.7indirecta
npm@types/d3-interpolate3.0.4indirecta
npm@types/d3-path3.1.1indirecta
npm@types/d3-quadtree3.0.6indirecta
npm@types/d3-random3.0.3indirecta
npm@types/d3-scale4.0.9indirecta
npm@types/d3-scale-chromatic3.1.0indirecta
npm@types/d3-shape3.1.8indirecta
npm@types/d3-time3.0.4indirecta
npm@types/d3-timer3.0.2indirecta
npm@types/deep-eql4.0.2indirecta
npm@types/estree1.0.9indirecta
npm@types/geojson7946.0.16indirecta
npm@types/json-schema7.0.15indirecta
npm@types/leaflet1.9.21indirecta
npm@types/leaflet^1.9.8indirecta
npm@types/leaflet.markercluster1.5.6indirecta
npm@types/leaflet.markercluster^1.5.6indirecta
npm@types/lodash4.17.20indirecta
npm@types/node20.19.25indirecta
npm@types/node22.19.11indirecta
npm@types/node^22.0.0indirecta
npm@types/rbush3.0.4indirecta
npm@types/semver7.7.1indirecta
npm@types/trusted-types2.0.7indirecta
npm@typescript-eslint/eslint-plugin6.21.0indirecta
npm@typescript-eslint/eslint-plugin7.18.0indirecta
npm@typescript-eslint/eslint-plugin^6.15.0indirecta
npm@typescript-eslint/parser6.21.0indirecta
npm@typescript-eslint/parser7.18.0indirecta
npm@typescript-eslint/parser^6.15.0indirecta
npm@typescript-eslint/scope-manager6.21.0indirecta
npm@typescript-eslint/scope-manager7.18.0indirecta
npm@typescript-eslint/type-utils6.21.0indirecta
npm@typescript-eslint/type-utils7.18.0indirecta
npm@typescript-eslint/types6.21.0indirecta
npm@typescript-eslint/types7.18.0indirecta
npm@typescript-eslint/typescript-estree6.21.0indirecta
npm@typescript-eslint/typescript-estree7.18.0indirecta
npm@typescript-eslint/utils6.21.0indirecta
npm@typescript-eslint/utils7.18.0indirecta
npm@typescript-eslint/visitor-keys6.21.0indirecta
npm@typescript-eslint/visitor-keys7.18.0indirecta
npm@ungap/structured-clone1.3.0indirecta
npm@vitest/expect4.1.8indirecta
npm@vitest/mocker4.1.8indirecta
npm@vitest/pretty-format4.0.9indirecta
npm@vitest/pretty-format4.1.8indirecta
npm@vitest/runner4.1.8indirecta
npm@vitest/snapshot4.1.8indirecta
npm@vitest/spy4.1.8indirecta
npm@vitest/ui4.0.9indirecta
npm@vitest/ui^4.0.9indirecta
npm@vitest/utils4.0.9indirecta
npm@vitest/utils4.1.8indirecta
npmacorn8.15.0indirecta
npmacorn-jsx5.3.2indirecta
npmagent-base7.1.4indirecta
npmansi-regex5.0.1indirecta
npmansi-regex6.2.2indirecta
npmansi-styles4.3.0indirecta
npmansi-styles5.2.0indirecta
npmapache-arrow17.0.0indirecta
npmargparse2.0.1indirecta
npmaria-query5.3.0indirecta
npmarray-back3.1.0indirecta
npmarray-back6.2.2indirecta
npmarray-union2.1.0indirecta
npmassertion-error2.0.1indirecta
npmbabel-plugin-jsx-dom-expressions0.40.3indirecta
npmbabel-preset-solid1.9.10indirecta
npmbalanced-match4.0.4indirecta
npmbase64-arraybuffer1.0.2indirecta
npmbase64-js1.5.1indirecta
npmbaseline-browser-mapping2.8.28indirecta
npmbidi-js1.0.3indirecta
npmbl5.1.0indirecta
npmbrace-expansion5.0.5indirecta
npmbraces3.0.3indirecta
npmbrowserslist4.28.0indirecta
npmbubblesets-js2.3.4indirecta
npmbuffer6.0.3indirecta
npmbundle-name4.1.0indirecta
npmbytes-iec3.1.1indirecta
npmcallsites3.1.0indirecta
npmcaniuse-lite1.0.30001754indirecta
npmchai6.2.2indirecta
npmchalk-template0.4.0indirecta
npmchart.js4.5.1indirecta
npmchart.js^4.5.1indirecta
npmcli-cursor4.0.0indirecta
npmcli-spinners2.9.2indirecta
npmcliui8.0.1indirecta
npmcolor-convert2.0.1indirecta
npmcolor-name1.1.4indirecta
npmcolor-string1.9.1indirecta
npmcolor2k2.0.3indirecta
npmcomlink4.4.2indirecta
npmcommand-line-args5.2.1indirecta
npmcommand-line-usage7.0.3indirecta
npmconvert-source-map2.0.0indirecta
npmcross-spawn7.0.6indirecta
npmcss-line-break2.1.0indirecta
npmcss-tree3.1.0indirecta
npmcssstyle5.3.3indirecta
npmcsstype3.2.1indirecta
npmd3-array3.2.4indirecta
npmd3-binarytree1.0.2indirecta
npmd3-color3.1.0indirecta
npmd3-dispatch3.0.1indirecta
npmd3-dsv3.0.1indirecta
npmd3-ease3.0.1indirecta
npmd3-fetch3.0.1indirecta
npmd3-force3.0.0indirecta
npmd3-force-3d3.0.6indirecta
npmd3-format3.1.2indirecta
npmd3-geo3.1.1indirecta
npmd3-geo-projection4.0.0indirecta
npmd3-hierarchy3.1.2indirecta
npmd3-interpolate3.0.1indirecta
npmd3-octree1.1.0indirecta
npmd3-path3.1.0indirecta
npmd3-quadtree3.0.1indirecta
npmd3-random3.0.1indirecta
npmd3-regression1.3.10indirecta
npmd3-scale4.0.2indirecta
npmd3-scale-chromatic3.1.0indirecta
npmd3-shape3.2.0indirecta
npmd3-time3.1.0indirecta
npmd3-time-format4.1.0indirecta
npmd3-timer3.0.1indirecta
npmdagre0.8.5indirecta
npmdata-urls6.0.0indirecta
npmdebug4.4.3indirecta
npmdecimal.js10.6.0indirecta
npmdeep-is0.1.4indirecta
npmdefault-browser5.4.0indirecta
npmdefault-browser-id5.0.1indirecta
npmdefine-lazy-prop2.0.0indirecta
npmdefine-lazy-prop3.0.0indirecta
npmdequal2.0.3indirecta
npmdetect-libc2.1.2indirecta
npmdir-glob3.0.1indirecta
npmdoctrine3.0.0indirecta
npmdom-accessibility-api0.5.16indirecta
npmeastasianwidth0.2.0indirecta
npmelectron-to-chromium1.5.254indirecta
npmemoji-regex10.6.0indirecta
npmemoji-regex8.0.0indirecta
npmentities6.0.1indirecta
npmes-module-lexer2.1.0indirecta
npmesbuild0.27.2indirecta
npmesbuild-visualizer0.7.0indirecta
npmescalade3.2.0indirecta
npmescape-string-regexp4.0.0indirecta
npmeslint8.57.1indirecta
npmeslint^8.56.0indirecta
npmeslint-scope7.2.2indirecta
npmeslint-visitor-keys3.4.3indirecta
npmespree9.6.1indirecta
npmesquery1.6.0indirecta
npmesrecurse4.3.0indirecta
npmestraverse5.3.0indirecta
npmestree-walker3.0.3indirecta
npmesutils2.0.3indirecta
npmeventemitter35.0.4indirecta
npmexpect-type1.3.0indirecta
npmfast-deep-equal3.1.3indirecta
npmfast-glob3.3.3indirecta
npmfast-json-stable-stringify2.1.0indirecta
npmfast-levenshtein2.0.6indirecta
npmfast-uri3.1.2indirecta
npmfastq1.19.1indirecta
npmfdir6.5.0indirecta
npmfecha4.2.3indirecta
npmfflate0.8.2indirecta
npmfile-entry-cache6.0.1indirecta
npmfill-range7.1.1indirecta
npmfind-replace3.0.0indirecta
npmfind-up5.0.0indirecta
npmflat-cache3.2.0indirecta
npmflatbuffers24.12.23indirecta
npmflatted3.4.2indirecta
npmfs.realpath1.0.0indirecta
npmfsevents2.3.3indirecta
npmgensync1.0.0-beta.2indirecta
npmget-caller-file2.0.5indirecta
npmgl-matrix3.4.4indirecta
npmglob7.2.3indirecta
npmglob-parent5.1.2indirecta
npmglob-parent6.0.2indirecta
npmglobals13.24.0indirecta
npmglobby11.1.0indirecta
npmgraphemer1.4.0indirecta
npmgraphlib2.1.8indirecta
npmhas-flag4.0.0indirecta
npmhighlight.js11.11.1indirecta
npmhtml-encoding-sniffer4.0.0indirecta
npmhtml-entities2.3.3indirecta
npmhtml2canvas1.4.1indirecta
npmhttp-proxy-agent7.0.2indirecta
npmhttps-proxy-agent7.0.6indirecta
npmiconv-lite0.6.3indirecta
npmieee7541.2.1indirecta
npmignore5.3.2indirecta
npmimport-fresh3.3.1indirecta
npmimurmurhash0.1.4indirecta
npminflight1.0.6indirecta
npminherits2.0.4indirecta
npminternmap2.0.3indirecta
npmis-any-array3.0.0indirecta
npmis-arrayish0.3.4indirecta
npmis-docker2.2.1indirecta
npmis-docker3.0.0indirecta
npmis-extglob2.1.1indirecta
npmis-fullwidth-code-point3.0.0indirecta
npmis-glob4.0.3indirecta
npmis-in-ssh1.0.0indirecta
npmis-inside-container1.0.0indirecta
npmis-interactive2.0.0indirecta
npmis-number7.0.0indirecta
npmis-path-inside3.0.3indirecta
npmis-potential-custom-element-name1.0.1indirecta
npmis-unicode-supported1.3.0indirecta
npmis-what4.1.16indirecta
npmis-wsl2.2.0indirecta
npmis-wsl3.1.0indirecta
npmisexe2.0.0indirecta
npmjs-tokens4.0.0indirecta
npmjs-yaml4.1.1indirecta
npmjsdom27.2.0indirecta
npmjsdom^27.2.0indirecta
npmjsesc3.1.0indirecta
npmjson-bignum0.0.3indirecta
npmjson-buffer3.0.1indirecta
npmjson-schema-traverse0.4.1indirecta
npmjson-schema-traverse1.0.0indirecta
npmjson-stable-stringify-without-jsonify1.0.1indirecta
npmjson52.2.3indirecta
npmkeyv4.5.4indirecta
npmleaflet1.9.4indirecta
npmleaflet.markercluster1.5.3indirecta
npmleaflet.markercluster^1.5.3indirecta
npmlevn0.4.1indirecta
npmlightningcss1.32.0indirecta
npmlightningcss-android-arm641.32.0indirecta
npmlightningcss-darwin-arm641.32.0indirecta
npmlightningcss-darwin-x641.32.0indirecta
npmlightningcss-freebsd-x641.32.0indirecta
npmlightningcss-linux-arm-gnueabihf1.32.0indirecta
npmlightningcss-linux-arm64-gnu1.32.0indirecta
npmlightningcss-linux-arm64-musl1.32.0indirecta
npmlightningcss-linux-x64-gnu1.32.0indirecta
npmlightningcss-linux-x64-musl1.32.0indirecta
npmlightningcss-win32-arm64-msvc1.32.0indirecta
npmlightningcss-win32-x64-msvc1.32.0indirecta
npmlilconfig3.1.3indirecta
npmlocate-path6.0.0indirecta
npmlodash4.18.1indirecta
npmlodash.camelcase4.3.0indirecta
npmlodash.merge4.6.2indirecta
npmlog-symbols5.1.0indirecta
npmlru-cache11.2.2indirecta
npmlru-cache5.1.1indirecta
npmlz-string1.5.0indirecta
npmmagic-string0.30.21indirecta
npmmdn-data2.12.2indirecta
npmmerge-anything5.1.7indirecta
npmmerge21.4.1indirecta
npmmicromatch4.0.8indirecta
npmmimic-fn2.1.0indirecta
npmminimatch10.2.5indirecta
npmminimist1.2.8indirecta
npmml-array-max2.0.0indirecta
npmml-array-min2.0.0indirecta
npmml-array-rescale2.0.0indirecta
npmml-matrix6.12.2indirecta
npmmrmime2.0.1indirecta
npmms2.1.3indirecta
npmnanoid3.3.15indirecta
npmnanoid5.1.6indirecta
npmnanospinner1.2.2indirecta
npmnatural-compare1.4.0indirecta
npmnode-releases2.0.27indirecta
npmobug2.1.1indirecta
npmonce1.4.0indirecta
npmonetime5.1.2indirecta
npmopen11.0.0indirecta
npmopen8.4.2indirecta
npmoptionator0.9.4indirecta
npmp-limit3.1.0indirecta
npmp-locate5.0.0indirecta
npmparent-module1.0.1indirecta
npmparse57.3.0indirecta
npmparse58.0.0indirecta
npmpath-exists4.0.0indirecta
npmpath-is-absolute1.0.1indirecta
npmpath-key3.1.1indirecta
npmpath-type4.0.0indirecta
npmpathe2.0.3indirecta
npmpbf4.0.1indirecta
npmpicocolors1.1.1indirecta
npmpicomatch2.3.2indirecta
npmpicomatch4.0.4indirecta
npmpmtiles3.2.1indirecta
npmpostcss8.5.15indirecta
npmpotpack1.0.2indirecta
npmpowershell-utils0.1.0indirecta
npmprelude-ls1.2.1indirecta
npmprettier3.6.2indirecta
npmpretty-format27.5.1indirecta
npmprotocol-buffers-schema3.6.1indirecta
npmprotomaps-leaflet4.1.1indirecta
npmpunycode2.3.1indirecta
npmqueue-microtask1.2.3indirecta
npmquickselect2.0.0indirecta
npmrbush3.0.1indirecta
npmreact-is17.0.2indirecta
npmreadable-stream3.6.2indirecta
npmrequire-directory2.1.1indirecta
npmrequire-from-string2.0.2indirecta
npmresolve-from4.0.0indirecta
npmresolve-protobuf-schema2.1.0indirecta
npmrestore-cursor4.0.0indirecta
npmreusify1.1.0indirecta
npmrimraf3.0.2indirecta
npmrolldown1.0.3indirecta
npmrun-applescript7.1.0indirecta
npmrun-parallel1.2.0indirecta
npmrw1.3.3indirecta
npmsafe-buffer5.2.1indirecta
npmsafer-buffer2.1.2indirecta
npmsaxes6.0.0indirecta
npmsemver6.3.1indirecta
npmsemver7.7.3indirecta
npmseroval1.5.0indirecta
npmseroval-plugins1.5.0indirecta
npmshebang-command2.0.0indirecta
npmshebang-regex3.0.0indirecta
npmsiginfo2.0.0indirecta
npmsignal-exit3.0.7indirecta
npmsimple-swizzle0.2.4indirecta
npmsirv3.0.2indirecta
npmsize-limit12.0.0indirecta
npmsize-limit^12.0.0indirecta
npmslash3.0.0indirecta
npmsolid-js1.9.11indirecta
npmsolid-js^1.9.11indirecta
npmsolid-refresh0.6.3indirecta
npmsource-map-js1.2.1indirecta
npmstackback0.0.2indirecta
npmstd-env4.1.0indirecta
npmstdin-discarder0.1.0indirecta
npmstring-width4.2.3indirecta
npmstring-width6.1.0indirecta
npmstring_decoder1.3.0indirecta
npmstrip-ansi6.0.1indirecta
npmstrip-ansi7.1.2indirecta
npmstrip-json-comments3.1.1indirecta
npmsupports-color7.2.0indirecta
npmsvg-path-parser1.1.0indirecta
npmsymbol-tree3.2.4indirecta
npmtable-layout4.1.1indirecta
npmtext-segmentation1.0.3indirecta
npmtext-table0.2.0indirecta
npmtinybench2.9.0indirecta
npmtinyexec1.2.4indirecta
npmtinyglobby0.2.15indirecta
npmtinyglobby0.2.17indirecta
npmtinyrainbow3.0.3indirecta
npmtinyrainbow3.1.0indirecta
npmtldts7.0.17indirecta
npmtldts-core7.0.17indirecta
npmto-regex-range5.0.1indirecta
npmtotalist3.0.1indirecta
npmtough-cookie6.0.0indirecta
npmtr466.0.0indirecta
npmts-api-utils1.4.3indirecta
npmtslib2.8.1indirecta
npmtype-check0.4.0indirecta
npmtype-fest0.20.2indirecta
npmtypescript5.9.3indirecta
npmtypescript^5.3.3indirecta
npmtypescript-eslint7.18.0indirecta
npmtypical4.0.0indirecta
npmtypical7.3.0indirecta
npmundici-types6.21.0indirecta
npmupdate-browserslist-db1.1.4indirecta
npmuri-js4.4.1indirecta
npmutil-deprecate1.0.2indirecta
npmutrie1.0.2indirecta
npmvite8.0.16indirecta
npmvite^6.4.1indirecta
npmvite-plugin-solid2.11.10indirecta
npmvite-plugin-solid^2.11.8indirecta
npmvitefu1.1.1indirecta
npmvitest4.1.8indirecta
npmvitest^4.0.8indirecta
npmw3c-xmlserializer5.0.0indirecta
npmwebidl-conversions8.0.0indirecta
npmwhatwg-encoding3.1.1indirecta
npmwhatwg-mimetype4.0.0indirecta
npmwhatwg-url15.1.0indirecta
npmwhich2.0.2indirecta
npmwhy-is-node-running2.3.0indirecta
npmword-wrap1.2.5indirecta
npmwordwrapjs5.1.1indirecta
npmwrap-ansi7.0.0indirecta
npmwrappy1.0.2indirecta
npmws8.18.3indirecta
npmwsl-utils0.3.1indirecta
npmxml-name-validator5.0.0indirecta
npmxmlchars2.2.0indirecta
npmy18n5.0.8indirecta
npmyallist3.1.1indirecta
npmyargs17.7.2indirecta
npmyargs-parser21.1.1indirecta
npmyocto-queue0.1.0indirecta
Avisos de dependencias 0

Instalar npm:@seed-ship/mcp-ui-cli@5.0.0 arrastra 49 paquetes, directos y transitivos: 0 tienen avisos conocidos, de los cuales 0 son dependencias directas.

Ningún aviso conocido afecta a las dependencias evaluadas.

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": 1307,
      "has_wiki": true,
      "homepage": null,
      "languages": {
        "CSS": 13836,
        "HTML": 321360,
        "JavaScript": 11012,
        "TypeScript": 1258834
      },
      "pushed_at": "2026-07-25T12:46:27Z",
      "created_at": "2025-11-16T04:08:18Z",
      "owner_type": "Organization",
      "updated_at": "2026-07-09T14:33:57Z",
      "description": null,
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "main",
      "license_spdx_raw": "MIT",
      "primary_language": "TypeScript",
      "significant_languages": [
        "TypeScript",
        "HTML"
      ]
    },
    "owner": {
      "blog": "https://the-seed-ship.com/",
      "name": "The Seed Ship",
      "type": "Organization",
      "login": "theseedship",
      "company": null,
      "location": "France",
      "followers": 5,
      "avatar_url": "https://avatars.githubusercontent.com/u/130248931?v=4",
      "created_at": "2023-04-08T19:28:20Z",
      "is_verified": null,
      "public_repos": 22,
      "account_age_days": 1203
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v6.16.0",
          "kind": "minor",
          "published_at": "2026-07-03T20:12:25Z"
        },
        {
          "tag": "v6.15.0",
          "kind": "minor",
          "published_at": "2026-05-31T00:51:15Z"
        },
        {
          "tag": "v6.14.0",
          "kind": "minor",
          "published_at": "2026-05-31T00:18:10Z"
        },
        {
          "tag": "v6.13.0",
          "kind": "minor",
          "published_at": "2026-05-31T00:02:18Z"
        },
        {
          "tag": "v6.12.0",
          "kind": "minor",
          "published_at": "2026-05-30T23:50:36Z"
        },
        {
          "tag": "v5.5.0-spec",
          "kind": "prerelease",
          "published_at": "2026-05-30T23:31:22Z"
        },
        {
          "tag": "v6.11.0",
          "kind": "minor",
          "published_at": "2026-05-30T23:22:12Z"
        },
        {
          "tag": "v5.4.0-spec",
          "kind": "prerelease",
          "published_at": "2026-05-30T23:11:46Z"
        },
        {
          "tag": "v6.10.0",
          "kind": "minor",
          "published_at": "2026-05-30T22:37:43Z"
        },
        {
          "tag": "v6.9.0",
          "kind": "minor",
          "published_at": "2026-05-30T22:27:40Z"
        },
        {
          "tag": "v6.8.2",
          "kind": "patch",
          "published_at": "2026-05-30T22:02:36Z"
        },
        {
          "tag": "v6.8.1",
          "kind": "patch",
          "published_at": "2026-05-30T21:23:10Z"
        },
        {
          "tag": "v6.8.0",
          "kind": "minor",
          "published_at": "2026-05-22T18:13:17Z"
        },
        {
          "tag": "v6.7.0",
          "kind": "minor",
          "published_at": "2026-05-22T16:11:07Z"
        },
        {
          "tag": "v5.3.0-spec",
          "kind": "prerelease",
          "published_at": "2026-05-22T16:08:52Z"
        },
        {
          "tag": "v5.2.0-spec",
          "kind": "prerelease",
          "published_at": "2026-05-22T15:30:58Z"
        },
        {
          "tag": "v6.6.1",
          "kind": "patch",
          "published_at": "2026-05-22T15:08:39Z"
        },
        {
          "tag": "v6.6.0",
          "kind": "minor",
          "published_at": "2026-05-21T01:09:37Z"
        },
        {
          "tag": "v5.1.0-spec",
          "kind": "prerelease",
          "published_at": "2026-05-21T01:09:37Z"
        },
        {
          "tag": "v6.5.0",
          "kind": "minor",
          "published_at": "2026-05-09T22:47:18Z"
        },
        {
          "tag": "v5.0.6",
          "kind": "patch",
          "published_at": "2026-05-09T22:41:48Z"
        },
        {
          "tag": "v6.4.0",
          "kind": "minor",
          "published_at": "2026-05-03T02:22:28Z"
        },
        {
          "tag": "v6.3.1",
          "kind": "patch",
          "published_at": "2026-05-03T01:50:15Z"
        },
        {
          "tag": "v6.3.0",
          "kind": "minor",
          "published_at": "2026-05-03T01:05:18Z"
        },
        {
          "tag": "v5.0.5",
          "kind": "patch",
          "published_at": "2026-05-03T00:48:50Z"
        },
        {
          "tag": "v6.2.0",
          "kind": "minor",
          "published_at": "2026-05-03T00:01:23Z"
        },
        {
          "tag": "v6.1.0",
          "kind": "minor",
          "published_at": "2026-05-02T23:37:37Z"
        },
        {
          "tag": "v5.0.4",
          "kind": "patch",
          "published_at": "2026-05-02T19:29:35Z"
        },
        {
          "tag": "v6.0.0",
          "kind": "major",
          "published_at": "2026-05-02T19:29:28Z"
        },
        {
          "tag": "v5.7.0",
          "kind": "minor",
          "published_at": "2026-05-02T17:56:24Z"
        },
        {
          "tag": "v5.0.3",
          "kind": "patch",
          "published_at": "2026-05-02T17:36:40Z"
        },
        {
          "tag": "v5.6.0",
          "kind": "minor",
          "published_at": "2026-04-27T15:19:29Z"
        },
        {
          "tag": "v5.0.2",
          "kind": "patch",
          "published_at": "2026-04-27T14:49:46Z"
        },
        {
          "tag": "v5.5.1",
          "kind": "patch",
          "published_at": "2026-04-27T13:40:58Z"
        },
        {
          "tag": "v5.5.0",
          "kind": "minor",
          "published_at": "2026-04-27T07:49:20Z"
        },
        {
          "tag": "v5.0.1",
          "kind": "patch",
          "published_at": "2026-04-27T07:16:22Z"
        },
        {
          "tag": "v5.4.0",
          "kind": "minor",
          "published_at": "2026-04-26T16:40:03Z"
        },
        {
          "tag": "v5.3.1",
          "kind": "patch",
          "published_at": "2026-04-24T22:20:00Z"
        },
        {
          "tag": "v5.3.0",
          "kind": "minor",
          "published_at": "2026-04-22T17:52:19Z"
        },
        {
          "tag": "v5.2.0",
          "kind": "minor",
          "published_at": "2026-04-21T23:43:13Z"
        },
        {
          "tag": "v5.1.0",
          "kind": "minor",
          "published_at": "2026-04-14T18:48:05Z"
        },
        {
          "tag": "v5.0.0",
          "kind": "major",
          "published_at": "2026-04-14T17:58:05Z"
        },
        {
          "tag": "v4.3.9",
          "kind": "patch",
          "published_at": "2026-04-14T17:33:33Z"
        },
        {
          "tag": "v4.3.8",
          "kind": "patch",
          "published_at": "2026-04-12T06:22:45Z"
        },
        {
          "tag": "v4.3.7",
          "kind": "patch",
          "published_at": "2026-04-11T21:02:18Z"
        },
        {
          "tag": "v4.3.6",
          "kind": "patch",
          "published_at": "2026-04-11T20:47:30Z"
        },
        {
          "tag": "v4.3.5",
          "kind": "patch",
          "published_at": "2026-04-11T20:30:16Z"
        },
        {
          "tag": "v4.3.4",
          "kind": "patch",
          "published_at": "2026-04-11T20:23:59Z"
        },
        {
          "tag": "v4.3.3",
          "kind": "patch",
          "published_at": "2026-04-11T20:19:38Z"
        },
        {
          "tag": "v4.3.2",
          "kind": "patch",
          "published_at": "2026-04-11T19:49:39Z"
        },
        {
          "tag": "v4.3.1",
          "kind": "patch",
          "published_at": "2026-04-11T14:42:20Z"
        },
        {
          "tag": "v4.3.0",
          "kind": "minor",
          "published_at": "2026-04-11T12:12:20Z"
        },
        {
          "tag": "v4.2.2",
          "kind": "patch",
          "published_at": "2026-04-11T11:13:20Z"
        },
        {
          "tag": "v4.2.1",
          "kind": "patch",
          "published_at": "2026-04-11T04:36:40Z"
        },
        {
          "tag": "v4.2.0",
          "kind": "minor",
          "published_at": "2026-04-11T03:48:15Z"
        },
        {
          "tag": "v4.1.0",
          "kind": "minor",
          "published_at": "2026-04-07T05:45:11Z"
        },
        {
          "tag": "v4.0.6",
          "kind": "patch",
          "published_at": "2026-04-07T03:46:57Z"
        },
        {
          "tag": "v4.0.5",
          "kind": "patch",
          "published_at": "2026-04-07T03:36:17Z"
        },
        {
          "tag": "v4.0.4",
          "kind": "patch",
          "published_at": "2026-04-07T02:04:17Z"
        },
        {
          "tag": "v4.0.3",
          "kind": "patch",
          "published_at": "2026-04-07T01:25:25Z"
        },
        {
          "tag": "v4.0.2",
          "kind": "patch",
          "published_at": "2026-04-07T00:31:22Z"
        },
        {
          "tag": "v4.0.1",
          "kind": "patch",
          "published_at": "2026-04-07T00:18:30Z"
        },
        {
          "tag": "v4.0.0",
          "kind": "major",
          "published_at": "2026-04-06T23:58:39Z"
        },
        {
          "tag": "v3.0.5",
          "kind": "patch",
          "published_at": "2026-04-06T23:09:27Z"
        },
        {
          "tag": "v3.0.4",
          "kind": "patch",
          "published_at": "2026-04-06T22:21:25Z"
        },
        {
          "tag": "v3.0.3",
          "kind": "patch",
          "published_at": "2026-04-06T22:19:22Z"
        },
        {
          "tag": "v3.0.2",
          "kind": "patch",
          "published_at": "2026-04-06T21:36:47Z"
        },
        {
          "tag": "v3.0.1",
          "kind": "patch",
          "published_at": "2026-04-06T21:12:13Z"
        },
        {
          "tag": "v3.0.0",
          "kind": "major",
          "published_at": "2026-04-06T20:12:57Z"
        },
        {
          "tag": "v2.15.0",
          "kind": "minor",
          "published_at": "2026-04-06T20:07:26Z"
        },
        {
          "tag": "v2.14.0",
          "kind": "minor",
          "published_at": "2026-04-06T18:50:51Z"
        },
        {
          "tag": "v2.13.0",
          "kind": "minor",
          "published_at": "2026-04-06T17:57:23Z"
        },
        {
          "tag": "v2.12.0",
          "kind": "minor",
          "published_at": "2026-04-06T13:55:02Z"
        },
        {
          "tag": "v2.11.0",
          "kind": "minor",
          "published_at": "2026-04-06T11:10:55Z"
        },
        {
          "tag": "v2.10.3",
          "kind": "patch",
          "published_at": "2026-04-06T10:18:02Z"
        },
        {
          "tag": "v2.10.2",
          "kind": "patch",
          "published_at": "2026-04-06T10:13:59Z"
        },
        {
          "tag": "v2.10.1",
          "kind": "patch",
          "published_at": "2026-04-06T10:12:01Z"
        },
        {
          "tag": "v2.10.0",
          "kind": "minor",
          "published_at": "2026-04-06T10:09:27Z"
        },
        {
          "tag": "v2.9.0",
          "kind": "minor",
          "published_at": "2026-04-06T02:10:19Z"
        },
        {
          "tag": "v2.8.3",
          "kind": "patch",
          "published_at": "2026-04-06T01:21:02Z"
        },
        {
          "tag": "v2.8.2",
          "kind": "patch",
          "published_at": "2026-04-05T23:44:43Z"
        },
        {
          "tag": "v2.8.1",
          "kind": "patch",
          "published_at": "2026-04-05T23:30:30Z"
        },
        {
          "tag": "v2.8.0",
          "kind": "minor",
          "published_at": "2026-04-05T23:25:40Z"
        },
        {
          "tag": "v2.7.0",
          "kind": "minor",
          "published_at": "2026-04-05T19:20:31Z"
        },
        {
          "tag": "v2.6.4",
          "kind": "patch",
          "published_at": "2026-04-05T18:22:37Z"
        },
        {
          "tag": "v2.6.3",
          "kind": "patch",
          "published_at": "2026-04-05T18:10:40Z"
        },
        {
          "tag": "v2.6.2",
          "kind": "patch",
          "published_at": "2026-04-05T17:24:31Z"
        },
        {
          "tag": "v2.6.1",
          "kind": "patch",
          "published_at": "2026-04-05T16:29:39Z"
        },
        {
          "tag": "v2.6.0",
          "kind": "minor",
          "published_at": "2026-04-05T16:23:10Z"
        },
        {
          "tag": "v2.5.3",
          "kind": "patch",
          "published_at": "2026-04-05T00:28:25Z"
        },
        {
          "tag": "v2.5.2",
          "kind": "patch",
          "published_at": "2026-04-05T00:04:38Z"
        },
        {
          "tag": "v2.5.1",
          "kind": "patch",
          "published_at": "2026-04-04T21:10:06Z"
        },
        {
          "tag": "v2.5.0",
          "kind": "minor",
          "published_at": "2026-04-04T21:06:40Z"
        },
        {
          "tag": "v2.4.0",
          "kind": "minor",
          "published_at": "2026-04-04T19:57:59Z"
        },
        {
          "tag": "v2.3.0",
          "kind": "minor",
          "published_at": "2026-04-03T19:21:05Z"
        },
        {
          "tag": "v2.2.11",
          "kind": "patch",
          "published_at": "2026-04-03T19:12:10Z"
        },
        {
          "tag": "v2.2.10",
          "kind": "patch",
          "published_at": "2026-04-03T17:37:29Z"
        },
        {
          "tag": "v2.2.9",
          "kind": "patch",
          "published_at": "2026-04-03T12:11:45Z"
        },
        {
          "tag": "v2.2.8",
          "kind": "patch",
          "published_at": "2026-03-31T15:06:16Z"
        },
        {
          "tag": "v2.2.7",
          "kind": "patch",
          "published_at": "2026-03-31T14:44:42Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "02449a057818c02b82cfe21588c3ddb6b65163fd",
          "body": "docs(solid): close the graph node/edge cap decision — ship uncapped",
          "is_bot": false,
          "headline": "Merge pull request #14 from theseedship/docs/close-graph-caps-decision",
          "author_name": "Nicolas",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-07-03T20:39:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2bfa1f53322fdbbc0cac22b55acbd6c4b3e5f938",
          "body": "BRIEF-graph-component-g6.md §12 item 3 (maxGraphNodes/maxGraphEdges) had been\nleft as an open 'decision needed'. Recorded the resolution: ship uncapped for\nnow — graphs are rare and the existing 512KB payload cap already bounds size in\npractice; the only residual risk is client-side G6 render perf o\n[…]\nted the trigger to revisit (add a\n.max() with fallback degradation if a real large-graph case appears).\n\nDoc-only; no code change.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(solid): close the graph node/edge cap decision — ship uncapped",
          "author_name": "Nicolas Geysse",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-07-03T20:36:36Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "1edc9598c60a07d64c28a06ebebbdf2594e2d5a0",
          "body": "Post-audit polish pass (v6.16.0): type-drift fix, escapeHtml, streaming tests, docs cleanup",
          "is_bot": false,
          "headline": "Merge pull request #13 from theseedship/chore/polish-quickwins",
          "author_name": "Nicolas",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-07-03T20:10:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bfb760dedebfef7863c5767e6be879fe159c46bb",
          "body": "…blank (Codex P2)\n\nDeriving ComponentType from the spec added `composite` to the validation gate's\nknown set, so a `composite` component now passes validation. But `composite` is\na UILayout discriminator with no leaf render branch in ComponentRenderer: a\ntop-level composite is handled as a layout, b\n[…]\nle outcome). Adds a render test for a composite\nnested in a layout's components[].\n\ntypecheck + build clean, 778 solid tests pass.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(solid): composite components[] leaf shows the P1.6 notice, not a …",
          "author_name": "Nicolas Geysse",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-07-03T20:03:19Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "852ac5dcc35243220ef507865b8064446231901d",
          "body": "`./components` is a published package.json subpath, so\n`import { ActionRenderer } from '@seed-ship/mcp-ui-solid/components'` is public\nAPI — removing it in a 6.16.0 minor would break consumers. Restore the stub and\nits `./components` re-exports (documented as legacy, removal deferred to the next\nMAJ\n[…]\nmponents subpath entrypoint.\n\ntypecheck + build clean, 777 solid tests pass; dist/components.d.ts re-exports\nActionRenderer again.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(solid): keep ActionRenderer public export (Greptile P1)",
          "author_name": "Nicolas Geysse",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-07-03T19:49:01Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "1dcb76da2534bc78cc49c325b1f25b69263fb589",
          "body": "Bumps @seed-ship/mcp-ui-solid 6.15.0 -> 6.16.0 and records the polish-pass\nchangelog: composite type-drift fix (ComponentType now derived from the spec),\nescapeHtml consolidation, first behavioral coverage of the SSE streaming\nengine, dead ActionRenderer stub removal, and docstring fixes.\n\ntypecheck + build clean, 777 solid tests pass.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(solid): release v6.16.0 — post-audit polish pass",
          "author_name": "Nicolas Geysse",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-07-03T19:33:18Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "dd966ff0775a4d02d53a09f3f662af93d09589e9",
          "body": "Post-audit doc cleanup — the root docs had drifted well behind the packages\n(solid 6.16.0, spec 5.5.0):\n\n- Delete PUBLISH_STATUS.md: a one-time v1.0.0 npm-2FA publish-status note, fully\n  obsolete now that all packages are published.\n- Archive super-improve.md + sprint-ultimate.md under docs/archive\n[…]\n this monorepo-wide file stopped at 5.2.0. Added a banner pointing\n  readers to the per-package changelogs as the source of truth.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: archive stale root planning logs + refresh README/CHANGELOG",
          "author_name": "Nicolas Geysse",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-07-03T19:33:18Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "596ef3873186d0b1981779ebc1d8159f4fd1fcc8",
          "body": "The 469-line streaming hook — SSE connect, out-of-order component buffering /\nreordering, reconnect-with-backoff, terminal error handling — had zero\nbehavioral coverage: its only prior reference was StreamingUIRenderer.parity's\n`vi.mock(...)` that replaces it wholesale.\n\nAdds useStreamingUI.test.ts.\n[…]\nterminal (no reconnect, single fetch);\n- recoverable error reconnects with backoff, then recovers.\n\ntypecheck clean, 4 tests pass.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "test(solid): cover the SSE streaming engine (useStreamingUI)",
          "author_name": "Nicolas Geysse",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-07-03T19:25:26Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "ecbf55b781839717891116d886f3c8fc02deded9",
          "body": "…string\n\n- Delete components/ActionRenderer.tsx: a legacy stub (`ActionSpec = any`,\n  `{action, onExecute, disabled}` shape) with zero JSX consumers. The live\n  ActionRenderer is inline in UIResourceRenderer and takes `{component}`. The\n  stub was re-exported only from components/index.ts and never \n[…]\n the docstring named a `component:error` telemetry event\n  that does not exist — every degrade caller emits `render:error`. Fixed.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(solid): drop dead ActionRenderer stub + fix stale telemetry doc…",
          "author_name": "Nicolas Geysse",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-07-03T19:16:29Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "2f5177b927cd6ed5f4488468b6aee2c01ebd7a1f",
          "body": "MapRenderer and GraphRenderer each carried their own private `escapeHtml` and\nthe two disagreed: MapRenderer escaped `& < > \"` but MISSED the single quote,\nGraphRenderer escaped all five. Both feed untrusted payload values into\nHTML-string popup/tooltip bindings, so the divergence was a real (if low\n[…]\nal copies removed.\n- utils/escape-html.test.ts: covers all five chars incl. the single quote\n  MapRenderer previously let through.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "refactor(solid): consolidate escapeHtml into a shared util",
          "author_name": "Nicolas Geysse",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-07-03T19:16:29Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "a2381afa6a52ce46a16531bb050b512856b550b9",
          "body": "…tores composite)\n\nSolid hand-maintained two parallel lists of the component-type enum — the\n`ComponentType` union in types/index.ts and the `KNOWN_COMPONENT_TYPES` Set in\nvalidation.ts — separate from the spec's `ComponentTypeSchema`, the single\nsource of truth. They drifted: `composite` is in the \n[…]\ne composite case).\n- fix the stale \"14/17 types\" count in the SPEC_VALIDATORS docstring.\n\ntypecheck clean, full solid suite green.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(solid): derive ComponentType + known-types set from the spec (res…",
          "author_name": "Nicolas Geysse",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-07-03T19:16:29Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "9a14485136041b489e1f92a00e1b93a949679c31",
          "body": "…nd_yarn-44ed45f192\n\nchore(deps): Bump the npm_and_yarn group across 1 directory with 2 updates",
          "is_bot": false,
          "headline": "Merge pull request #12 from theseedship/dependabot/npm_and_yarn/npm_a…",
          "author_name": "Nicolas",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-07-03T18:36:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c58a2e60502a45b9a862ac337c3d01c6d131cd40",
          "body": "…dates\n\nBumps the npm_and_yarn group with 2 updates in the / directory: [dompurify](https://github.com/cure53/DOMPurify) and [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite).\n\n\nUpdates `dompurify` from 3.4.1 to 3.4.11\n- [Release notes](https://github.com/cure53/DOMPurify/releases)\n- [C\n[…]\nependency-group: npm_and_yarn\n- dependency-name: vite\n  dependency-version: 8.0.16\n  dependency-type: indirect\n  dependency-group: npm_and_yarn\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "chore(deps): Bump the npm_and_yarn group across 1 directory with 2 up…",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-06-23T03:22:19Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1907b204288e36b9bd07d3e0dd7d87f87f1d1725",
          "body": "…nd_yarn-4825ac1e2e\n\nchore(deps-dev): Bump vitest from 4.0.9 to 4.1.8 in the npm_and_yarn group across 1 directory",
          "is_bot": false,
          "headline": "Merge pull request #11 from theseedship/dependabot/npm_and_yarn/npm_a…",
          "author_name": "Nicolas",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-06-23T03:18:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2c8579c495265560f41684bf3da2da736d94ec9e",
          "body": "Bumps the npm_and_yarn group with 1 update in the / directory: [vitest](https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest).\n\n\nUpdates `vitest` from 4.0.9 to 4.1.8\n- [Release notes](https://github.com/vitest-dev/vitest/releases)\n- [Changelog](https://github.com/vitest-dev/vitest/blob/mai\n[…]\n)\n\n---\nupdated-dependencies:\n- dependency-name: vitest\n  dependency-version: 4.1.8\n  dependency-type: indirect\n  dependency-group: npm_and_yarn\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "chore(deps-dev): Bump vitest",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-06-01T23:33:59Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a58edf9d25a19aaf700970ed5d200496d7deb9bc",
          "body": "…sh fix)\n\nThe v6.15.0 commit shipped before the suite was green. Two corrections:\n- `footer` is a valid type with a real renderer but had no dispatch branch in\n  ComponentRenderer (only auto-injected at layout level), so a standalone\n  footer component rendered a silent blank — exactly the P1.6 fail\n[…]\nfailed` (firstErrorCode:\n  'UNKNOWN_COMPONENT_TYPE'). Fixed the assertion + title.\n\ntypecheck + build clean, 763 solid tests pass.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(solid): add footer dispatch branch + fix P1.6 test (v6.15.0 publi…",
          "author_name": "Nicolas Geysse",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-05-31T01:00:13Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "f0ecaa35112b2f07f0234ab26b16e508c3ef10c0",
          "body": "…5.0)\n\nP1.6 of AUDIT-2026-05-30-visual-renderers-g6-ontology.\n\nAn unrecognized component `type` has no renderer branch, so it rendered\nnothing — and under `errorMode: 'silent'` it passed the validation gate\nwithout even an error card (fully invisible failure). The gate now routes any\nUNKNOWN_COMPONE\n[…]\nonal.\n\nBehavior change only for previously-invisible unknown types. typecheck + build\nclean, 763 solid tests pass (+3 P1.6 tests).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(solid): unknown component types never render a silent blank (v6.1…",
          "author_name": "Nicolas Geysse",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-05-31T00:50:25Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "51fffabb451bda4a638a9a44ca39b8d0422dc552",
          "body": "The first cut assumed jsdom lacked the chart.js peer; it is a devDependency, so\nisChartJSAvailable() resolved true and the native canvas path rendered instead\nof the fallback. Drive the decision with renderer: 'iframe' (gated purely on\nallowQuickchartFallback, independent of chart.js availability) and assert on the\nactual degraded message. Both tests pass; 760 solid tests green.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "test(solid): fix P1.7 quickchart opt-in test (v6.14.0 publish fix)",
          "author_name": "Nicolas Geysse",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-05-31T00:22:30Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "6c2b4341b2f62ab859904db78f8ec00f594c7b42",
          "body": "….14.0)\n\nP1.7 of AUDIT-2026-05-30-visual-renderers-g6-ontology.\n\nThe chart renderer could silently fall back to quickchart.io when the native\nchart.js peer was missing (auto mode), encoding the full chart config (labels +\ndata) into an external image URL — an implicit network call that can leak\nsens\n[…]\n a payload must not opt itself into an external call.\n\ntypecheck + build clean, 760 solid tests pass (+2 quickchart opt-in tests).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(solid): make quickchart.io chart fallback an explicit opt-in (v6…",
          "author_name": "Nicolas Geysse",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-05-31T00:17:27Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "c53af919fb52441e0ca464ffef851672f991d829",
          "body": "…3.0)\n\nAudit follow-up to P1.4/P1.5. A `type: 'graph'` component could not be\nexpressed as a typed `UIComponent` — the params union ended at\n`MapComponentParams`, so the v6.12.0 GraphRegistry example had to be empty.\n\n- add `GraphComponentParams`, `GraphNode`, `GraphEdge`, `GraphLayout` to\n  mcp-ui-\n[…]\n+ runtime assignability).\n\nType-widening only; existing valid code keeps compiling. typecheck + build\nclean, 758 solid tests pass.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(solid): make graph first-class in UIComponent params union (v6.1…",
          "author_name": "Nicolas Geysse",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-05-31T00:01:32Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "650f7e5df40e450ca4d7baf05e25f94b35af79c2",
          "body": "P1.5 of AUDIT-2026-05-30-visual-renderers-g6-ontology.\n\n`ComponentRegistry` knew `graph` via KNOWN_COMPONENT_TYPES and the schema but\nhad no registry entry. Adds `GraphRegistry` (registry now 20 types) and a\nregistry ↔ schema parity test: every ComponentTypeSchema option must have a\nregistry entry, \n[…]\nGraphComponentParams joins the UIComponent params union.\n\ntypecheck + build clean, 756 solid tests pass (registry suite 70 -> 77).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(solid): register graph + registry/schema parity test (v6.12.0)",
          "author_name": "Nicolas Geysse",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-05-30T23:49:54Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "0edcdce79449a5b6c6188e8920a736d72e33255a",
          "body": "…v5.5.0)\n\nP1.4 of AUDIT-2026-05-30-visual-renderers-g6-ontology.\n\n`src/types.ts` exported a hand-maintained 8-member `ComponentType`\n(chart|table|metric|text|composite|image|link|action) that had drifted from the\n21-member `ComponentTypeSchema`, so TS consumers of the legacy type believed\n`graph`/`m\n[…]\n`) that fails the build\nif they ever diverge again.\n\nType-widening only; existing valid code keeps compiling. 142 spec tests pass.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(spec): infer ComponentType from schema — kill legacy type drift (…",
          "author_name": "Nicolas Geysse",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-05-30T23:30:42Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "e2f555317cd81069e0fabfae5c5ff46febd73650",
          "body": "…dening (v6.11.0)\n\nP1.3 + P1.2 follow-up of AUDIT-2026-05-30-visual-renderers-g6-ontology.\n\nP1.3 — PMTiles no longer fails silently. A failed PMTiles overlay (commonly\nthe optional `protomaps-leaflet` peer missing) was only a console.warn, leaving\nan unexplained empty layer. `<MapRenderer>` now keep\n[…]\nraw HTML\nonly under `allowHtmlPopups`). Helper exported + unit-tested.\n\n749 tests pass (+6 marker tests), typecheck + build clean.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(solid): surface PMTiles failures + wire marker escaping — map har…",
          "author_name": "Nicolas Geysse",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-05-30T23:21:24Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "f6b07e555f0c0a2d60a81ce36a8b8a32812aa7c2",
          "body": "….4.0)\n\nP2.2 of AUDIT-2026-05-30-visual-renderers-g6-ontology.\n\n- add `graph` to `ConnectorPreferredLayoutSchema` so a connector can hint a\n  node-link graph for relational results (`renderHints.preferredLayout: 'graph'`).\n- ship 3 example fixtures: provenance/source, process/dependencies, and\n  ont\n[…]\n so the directory-scanned\nexample set is consistent between local and CI.\n\nAdditive enum change; existing payloads are unaffected.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(spec): add `graph` to connector preferredLayout render hints (v5…",
          "author_name": "Nicolas Geysse",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-05-30T23:10:26Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "6e6d32997191d8818dd844efcbcce5601b71588e",
          "body": "….10.0)\n\nLeaflet renders bound tooltip/popup strings as HTML, so marker.tooltip,\nmarker.popup and a GeoJSON popup.template were an XSS vector on the\nuntrusted (LLM/connector) payload path. Audit P1.2.\n\n<MapRenderer> now escapes marker.tooltip/popup by default and ignores a raw\npopup.template (falls \n[…]\nuildPopupContent. +14 tests\n(MapRenderer.security.test.ts). Full suite 745 passed / 1 skipped, typecheck\n+ build + prettier clean.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(solid): escape map popups/tooltips by default — XSS hardening (v6…",
          "author_name": "Nicolas Geysse",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-05-30T22:36:52Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "0992d1e385e8215f9532b335998c884372a8c056",
          "body": "Repairs the v6.9.0 commit (353adab) which didn't typecheck and never\nactually modified ChartJSRenderer (those edits silently no-op'd):\n\n- telemetry: `component:error` is not a valid TelemetryEvent type — use\n  `render:error` with `errorMessage`, and default `id` to '' (it's optional\n  on the rendere\n[…]\nchangelog: correct the test-count claim (731 passed, +14 tests).\n\ntypecheck clean, build clean, full suite 731 passed / 1 skipped.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(solid): correct telemetry event + wire chart degradation (v6.9.0)",
          "author_name": "Nicolas Geysse",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-05-30T22:27:00Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "353adabb4e755bb69f31dd0c07e64b1f38bcab11",
          "body": "Every heavy renderer now follows the same three-rung contract (audit P2.5):\nnative render → degraded-but-useful table on throw → component:error\ntelemetry (detail.degraded=true). Previously a render-path failure left a\nblank canvas/container (graph, chart) or a bare red string (map).\n\n- graph: G6 th\n[…]\nrenderers-g6-ontology.md.\n\n+20 tests (projections + DegradedFallback). Full suite: 737 passed,\n1 skipped. typecheck + build clean.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(solid): renderer fallback ladder — no silent blanks (v6.9.0)",
          "author_name": "Nicolas Geysse",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-05-30T22:23:08Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "aa3566ac04fd4ca32799783dbb80e64124de160f",
          "body": "A fully-valid component has `errors === undefined`, so\n`errors?.some(...)` is `undefined`, not `false` — the new geojson/layers/\npmtiles map tests must assert toBeFalsy(), not toBe(false). The logic fix\nitself was correct; only the assertions were wrong.\n\nFull suite: 717 passed, 1 skipped. typecheck + prettier clean.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "test(solid): assert toBeFalsy for valid-map cases (fix v6.8.2 CI)",
          "author_name": "Nicolas Geysse",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-05-30T22:01:52Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "59862421290154ba50d1c7437137addd10b6414d",
          "body": "cd63665 shipped the v6.8.2 tests + bump but NOT the validation.ts change\nitself (an earlier `git checkout` reverted it and the re-edit silently\nno-op'd), so CI failed: tests expected the new behaviour against old logic.\n\nThis commit:\n- applies the real widening in validation.ts (accept a map with AN\n[…]\n?.some(...)` is undefined — assert\n  toBeFalsy(), not toBe(false).\n\nFull suite: 717 passed, 1 skipped. typecheck + prettier clean.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(solid): apply the actual map-validator widening (amends cd63665)",
          "author_name": "Nicolas Geysse",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-05-30T22:00:11Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "cd63665f742175949c8c99bf1834052385935e70",
          "body": "…6.8.2)\n\nvalidateComponent rejected a type:'map' as INVALID_MAP unless it had center\nor markers. Since spec@5.2.0 a map can render purely from params.geojson,\nnamed layers, or a pmtiles source (e.g. a Cadastre/choropleth map with an\nauto-fit viewport and no markers) — those valid maps, which <MapRen\n[…]\null suite: 717 passed, 1 skipped. typecheck clean.\n\nPer audit docs/briefs/AUDIT-2026-05-30-visual-renderers-g6-ontology.md (P1.1).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(solid): accept map rendered purely from geojson/layers/pmtiles (v…",
          "author_name": "Nicolas Geysse",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-05-30T21:38:47Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "7ccbd91eeab9d52515b831330da5cb469fb0a123",
          "body": "…6.8.1)\n\nThe previous v6.8.1 attempt's contract test drove the full component through\njsdom, but the container ref is gated behind an async availability <Show>, so\n`new Graph(...)` is never reached in a test renderer → all 6 tests timed out\nand CI failed (nothing published; npm stayed at 6.8.0).\n\nEx\n[…]\n behaviour is unchanged — onMount\nnow just calls the helper.\n\nFull suite green: 713 passed, 1 skipped. typecheck + prettier clean.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(solid): extract pure buildGraphConfig + green G6 contract test (v…",
          "author_name": "Nicolas Geysse",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-05-30T21:22:16Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "ddb7b8490a024a1237227936787e973a188a50a2",
          "body": "… (v6.8.1)\n\nThe first v6.8.1 attempt (c5b0640) wired `rendererPref: 'svg'` via\n`await import('@antv/g-svg')`. g-svg is a transitive dep of @antv/g6, not\nstatically resolvable at build time, so vite failed to transform the module\nand EVERY test importing GraphRenderer broke (publish CI failed; nothin\n[…]\ng factory.\n- brief BRIEF-graph-component-g6.md corrected to match.\n\nFull suite: 713 passed, 1 skipped. typecheck + prettier clean.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(solid): repair G6 svg path — never ship unresolvable g-svg import…",
          "author_name": "Nicolas Geysse",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-05-30T21:15:02Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "c5b064081feb031e1054668a5d877dea06a0aaca",
          "body": "GraphRenderer passed `renderer: 'canvas' | 'svg'` (a string) to the G6 v5\nGraph constructor. In G6 v5 `renderer` is a factory `(layer) => IRenderer`,\nnot a string (that was the v4 contract), so G6 threw \"renderer is not a\nfunction\" — and because the default path also passed the string 'canvas',\nEVER\n[…]\ndocs/briefs/AUDIT-2026-05-30-visual-renderers-g6-ontology.md (P0).\n\nFull suite: 713 passed, 1 skipped. typecheck + prettier clean.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(solid): G6 v5 renderer is a factory, not a string (v6.8.1)",
          "author_name": "Nicolas Geysse",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-05-30T21:08:58Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "436c35df7282a36fc9586b0e33fb73cdaee710ab",
          "body": "DEFAULT_RESOURCE_LIMITS.maxPayloadSize moved from 50*1024 to 512*1024.\nThe shared payload-size guard rejected otherwise-valid type:'map'\ncomponents carrying a realistic params.geojson FeatureCollection as\nPAYLOAD_TOO_LARGE — a dense multi-feature map (e.g. a département-wide\nchoropleth) runs 300-500\n[…]\nad-size tests (ceiling, ~350KB map accepted,\n  >512KB map + non-map rejected, stricter caller limit honoured)\n- bump 6.7.0 → 6.8.0\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(solid): raise default payload-size limit 50KB → 512KB (v6.8.0)",
          "author_name": "Nicolas Geysse",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-05-22T18:12:14Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "b026f04c0a2fe45960bbbfb4be2249552a69cb37",
          "body": "feat: MacroRun Phase 2 — agnostic contract + pure adapters",
          "is_bot": false,
          "headline": "Merge pull request #10 from theseedship/feat/macro-run-phase-2",
          "author_name": "Nicolas",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-05-22T16:07:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0abdd6687ad3b4bef2219a87c0f5fce61b017ccd",
          "body": "Adds the agnostic MacroRun contract and the pure adapters that turn it\ninto existing MCP-UI primitives. Consolidated from deposium_MCPs\ndocs/2026/briefs/2026-05-22-macro-run-runtime-contract-consolidation.md.\n\nmcp-ui-spec (5.2.0 -> 5.3.0):\n- MacroRunV1 / MacroStepV1 / MacroInterrogationV1 Zod schema\n[…]\nValidation: 132 spec tests, 44 solid adapter tests (702 solid suite,\n0 regression), tsc --noEmit on both packages, Prettier clean.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: MacroRun Phase 2 — agnostic contract + pure adapters",
          "author_name": "Nicolas Geysse",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-05-22T16:04:00Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "485e9ce0f83733f8390d71bb822d569a19e82ab8",
          "body": "feat(spec): align map component contract with MapRenderer (v5.2.0)",
          "is_bot": false,
          "headline": "Merge pull request #9 from theseedship/feat/map-geojson-contract",
          "author_name": "Nicolas",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-05-22T15:27:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "278662852f945ffef026e14a8d4e7faf40cc3bd6",
          "body": "mcp-ui-solid's <MapRenderer> has supported GeoJSON, choropleth, popups,\nnamed layers, marker clustering and PMTiles since its v3.1.0, but\nMapComponentParamsSchema only validated `markers` — a host emitting\ntype:'map' with params.geojson had those fields silently stripped by Zod.\n\nAdds GeoJSON schema\n[…]\nest: schemas-map-v5.2.0.test.ts (17 cases)\n- docs: README \"Map Component Contract\" section, CHANGELOG 5.2.0\n- bump: 5.1.0 -> 5.2.0\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(spec): align map component contract with MapRenderer (v5.2.0)",
          "author_name": "Nicolas Geysse",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-05-22T15:24:51Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "0a22b89eaded811400c49091f92883ab2610ec63",
          "body": "Both files predated Prettier enforcement and never conformed to the\nrepo's .prettierrc (semi: true, etc.). Reformatting them in a dedicated\nstyle-only commit keeps the v5.2.0 map-contract feature diff readable —\nno logic changes here, formatting only.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "style(spec): apply Prettier to schemas/index.ts and README.md",
          "author_name": "Nicolas Geysse",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-05-22T15:24:24Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "e1c0cb62a11ace735a4e7324d6dc3a9c34c7c362",
          "body": "ActionParamsSchema.action allows 'tool-call' | 'link' | 'submit', but at\nruntime `submit` was inert: ActionGroupRenderer only branched on\ntool-call/link, and the standalone `action` renderer emitted a native\ntype=\"submit\" button — which only fires inside a real <form>. Standalone\nresources rendered \n[…]\nl integration through real\nuseAction → MCPActionContext → host executor, both render surfaces).\nFull suite 677 passed / 1 skipped.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(solid): execute action:'submit' outside <form> contexts (v6.6.1)",
          "author_name": "Nicolas Geysse",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-05-22T15:06:06Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "466231cdaef619344d6b9b41a13ebb2b2c3ae4f0",
          "body": "…visories\n\nDependabot flagged fast-uri@3.1.0 (pinned in the lockfile via\najv@8.18.0 ← @seed-ship/mcp-ui-cli):\n\n- host confusion via percent-encoded authority delimiters (<= 3.1.1)\n- path traversal via percent-encoded dot segments (<= 3.1.0)\n\n3.1.2 clears both. ajv's own range (^3.0.6) already permit\n[…]\nesh already get 3.1.2, so no published-package\nversion bump is needed.\n\nBuilds + tests green (spec 90, cli 7, solid 667 + 1 skip).\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(security): override fast-uri >=3.1.2 — fixes 2 high-severity ad…",
          "author_name": "Nicolas Geysse",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-05-21T01:08:43Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "a69422398e231caf557643bf9ab05995e2f81093",
          "body": "The 6.6.0 release bumped mcp-ui-solid's dependency on @seed-ship/mcp-ui-spec\nto workspace:^5.1.0; the lockfile needs to match for CI's --frozen-lockfile.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: update pnpm-lock.yaml for mcp-ui-spec ^5.1.0 bump",
          "author_name": "Nicolas Geysse",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-05-21T00:54:22Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "1006b55093d8ac7e15d8c8f85cb33b085cf0e671",
          "body": "Quick-reference summary at the top of the roadmap: D1-D10 + R1-R4 are the\nbinding decisions; earlier \"decision required\" notes are historical. Lists\nthe 5-step MCPUI execution order.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(roadmap): add \"Etat final des decisions\" summary section",
          "author_name": "Nicolas Geysse",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-05-21T00:52:47Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "4d7c6eaccd0d4e532f1ff56464aef0dc2d4cdb59",
          "body": "Sprint OpenData / macros (ROADMAP-opendata-macro-mcpui.md, D1-D10 + R1-R4).\n\nmcp-ui-solid 6.5.0 -> 6.6.0 (minor — additive):\n- D3 StreamingUIRenderer parity, D2 MCPUIStringsProvider, R3\n  PresentationFeedback, D5/D6 connector adapters subpath.\nmcp-ui-spec 5.0.6 -> 5.1.0 (minor — additive):\n- R1 Conn\n[…]\nnew features (What's New v6.6.0 / Connector Contracts).\n\nBuilds green (spec/cli/solid). Tests: spec 90, cli 7, solid 667 + 1 skip.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(release): mcp-ui-solid 6.6.0 + mcp-ui-spec 5.1.0",
          "author_name": "Nicolas Geysse",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-05-21T00:52:09Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "a7a50f1a7ba61171c8de75d1aef7012a30e6d19d",
          "body": "Closes the connector half of D5/D6 of ROADMAP-opendata-macro-mcpui.md.\n\nNew dedicated subpath export @seed-ship/mcp-ui-solid/adapters — never\nimported by the core renderer path, so consumers that don't emit\nconnector results pay nothing for it.\n\n- connectorResultToUILayout(result): assembles a Conne\n[…]\naves to Phase 2.\n\nTests: 15 new (incl. all spec fixtures assemble cleanly + R2 degraded\npaths). Full suite 667 passed / 1 skipped.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(solid): D5/D6 — opt-in connector adapters at /adapters subpath",
          "author_name": "Nicolas Geysse",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-05-21T00:45:44Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "eddd4df2cc5d1854d025b7aabd2e53d186e78efb",
          "body": "Closes R3 / D9 / Phase 4 of ROADMAP-opendata-macro-mcpui.md.\n\nNew opt-in feedback widget, DISTINCT from FeedbackInline (two separate\ncomponents, exports, payloads — the response-quality axis and the\npresentation axis never collapse, per R3):\n\n- FeedbackInline    — was the answer good?\n- Presentation\n[…]\n/ ConnectorPreferredLayout\n  re-exported from the package root for convenience.\n\nTests: 10 new. Full suite 652 passed / 1 skipped.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(solid): R3 — PresentationFeedback component (Phase 4)",
          "author_name": "Nicolas Geysse",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-05-21T00:39:41Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "4ab5c97a7bfa7937b2df146d44a3663cf09f1c31",
          "body": "…ack)\n\nCloses the spec half of R3 / D9 of ROADMAP-opendata-macro-mcpui.md.\n\nThe payload <PresentationFeedback> (in mcp-ui-solid) emits when a user\nrates how a connector result was PRESENTED — a separate axis from\nresponse-quality feedback (FeedbackInline). Lives in the spec because,\nlike ConnectorDy\n[…]\n tags.\n- ConnectorPreferredLayoutSchema extracted + shared between\n  ConnectorRenderHintsSchema and ConnectorRenderFeedbackSchema.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(spec): R3 — ConnectorRenderFeedback contract (presentation feedb…",
          "author_name": "Nicolas Geysse",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-05-21T00:39:41Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "b71788e161297cc5fe098bd98775a1493c56faf8",
          "body": "Closes R1 of ROADMAP-opendata-macro-mcpui.md.\n\nThe canonical JSON contract a connector / MCP server emits to describe a\nrich, ready-to-render result. It crosses repo boundaries (MCPs emitter ->\nmcp-ui-solid consumer) deployed independently — so it lives in mcp-ui-spec\n(the shared contract layer), no\n[…]\ntate) — every one\nasserted to parse against the schema.\n\nTests: 13 new (schema validation + all fixtures parse). Spec suite 90/90.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(spec): R1 — ConnectorDynamicResultV1 contract + fixtures",
          "author_name": "Nicolas Geysse",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-05-21T00:29:45Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "e5607fea69f689d718606b2e78c330d45613d86b",
          "body": "… strings\n\nCloses D2 / R4 of ROADMAP-opendata-macro-mcpui.md.\n\nMCP-UI hardcoded a handful of its own chrome strings (expand tooltip,\nfeedback acks...) as an inconsistent FR/EN mix. New opt-in context lets a\nhost localize them — without an i18n framework, without per-renderer\nlocale props.\n\n- MCPUISt\n[…]\ndbackInline / ExpandableWrapper tests updated accordingly.\n\nTests: 8 new (MCPUIStringsContext). Full suite 642 passed / 1 skipped.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(solid): D2 — MCPUIStringsProvider, i18n for the library's chrome…",
          "author_name": "Nicolas Geysse",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-05-21T00:14:51Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "31f418f78eba3f1556052641fba10fb3a87da246",
          "body": "size-limit is a regression guardrail, not a hard cap. Post-D3 the\n\"Streaming renderer\" entry's graph equals the full renderer set and the\nfigure is dominated by lazy chunks (not eager load cost). 1 MB gives\ncomfortable headroom without nagging. size-limit does not gate CI.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(solid): raise Streaming renderer size-limit to 1 MB",
          "author_name": "Nicolas Geysse",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-05-20T23:54:52Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "f4d9468eb4e6c04156fe4b10df7277aaa8875a90",
          "body": "… (Gap 1 parity)\n\nCloses Gap 1 of ROADMAP-opendata-macro-mcpui.md (sprint OpenData/macros).\n\nStreamingUIRenderer previously rendered each streamed component through an\ninline simplified renderer that only showed a type label + title — a\nstreamed table/chart/map did NOT render the real component.\n\nEa\n[…]\nidentical DOM for table /\nmetric / action-group, legacy placeholder markers gone). Full suite 634\npassed / 1 skipped / 0 failures.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(solid): D3 — StreamingUIRenderer delegates to UIResourceRenderer…",
          "author_name": "Nicolas Geysse",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-05-20T23:52:25Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "a18fe63717d34edf54ad5755fac71350c7685a36",
          "body": "…ry + D6 fix + ConnectorDynamicResultV1\n\nEditorial pass after R1-R4 ratification:\n- Add Final Decision Summary at top: D1-D10 + R1-R4 binding, earlier\n  \"decision required\" notes historical, execution order fixed.\n- Fix D6 directly: adapters never in docs/briefs (was contradicted by A3).\n- Consolidate ConnectorDynamicResultV1 in R1: final type with\n  schemaVersion (R2) + queryHash (A1) + calc rule.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(roadmap): finalize OpenData/macro roadmap — Final Decision Summa…",
          "author_name": "Nicolas Geysse",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-05-20T23:31:38Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "5c0d0ab35660e1ad91036d7986a3bc09e2df7553",
          "body": "Two tag pushes in quick succession used to race : the second workflow\nwould hit E403 trying to publish a package the first workflow had\nalready pushed, then `pnpm -r publish` would propagate the failure and\nbail out before publishing its own package.\n\nConcrete: pushing v5.0.6 (spec) then v6.5.0 (sol\n[…]\nr-package loop that\nchecks npm before publishing and skips already-published versions.\nIdempotent — safe to re-run, race-tolerant.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "ci(publish): skip already-published packages instead of bailing on E403",
          "author_name": "Nicolas Geysse",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-05-09T22:46:33Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "a85c34dcf53654a7a82a943bb32085d2b4b2b605",
          "body": "…ervability\n\nCloses Demande 1.3 + Demande 2 of deposium's `BRIEF-MCPUI-2026-05-10.md`\n(rescue-duplicate root-cause investigation).\n\nAdds:\n\n1. `getUiResourceStableKey(content): string` — passthrough when\n   `content.id` is non-empty, else FNV-1a 32-bit hash of normalized\n   content (id + metadata.gen\n[…]\nhe clock.\n\nTests: 34 new (15 stable-key + 9 dup-registry + 10 identity-renderer).\nFull suite: 627 passed / 1 skipped / 0 failures.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(solid): v6.5.0 — identity stability + opt-in duplicate-mount obs…",
          "author_name": "Nicolas Geysse",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-05-09T22:40:40Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "3c4fd36b81f0f643427c96e2f59284f4d695cd9b",
          "body": "Closes Demande 1.1 + 1.2 of deposium's `BRIEF-MCPUI-2026-05-10.md`.\n\nDocumentation-only patch — no schema changes. README now formalizes\nthe identity contract for runtime UILayout/UIComponent payloads\n(distinct from the registry-side Component definitions documented\npreviously):\n\n- `id` is obligatoi\n[…]\n6.5.0`.\n\nCodifies behavior that was previously implicit so host apps and\nproducers can rely on it without reading renderer source.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(spec): v5.0.6 — document Runtime Payload Identity contract",
          "author_name": "Nicolas Geysse",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-05-09T22:40:22Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "59928f317141293f981340e13dcace6f908277ce",
          "body": "Both Export menus shipped by the renderers (table : Copy TSV / Download\nCSV / Download JSON ; graph : Download PNG / Mermaid / JSON) now mount\nvia solid-js/web Portal on document.body instead of an in-tree\nposition: absolute sibling.\n\nEliminates two long-standing pain points :\n\n  1. overflow: hidden\n[…]\nboth root and\n/components subpaths for consumer reuse. 7 tests added.\n\nCloses axe 3 of SOLID-MCPUI-IMPROVEMENT-AXES-2026-05-03.md.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(solid): v6.4.0 — Portal-mounted Export dropdowns (axe 3)",
          "author_name": "Nicolas Geysse",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-05-03T02:21:47Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "b65278dcfec1ec7a757af524c413cc7e4fa41436",
          "body": "Forwards the v6.3.0 ExpandableWrapper.toolbarVariant prop from the\ntop-level UIResourceRendererProps down through ComponentRenderer to\nall 8 internal renderers wrapped in ExpandableWrapper : table, chart\n(Chart.js path), graph, map, video, carousel, image-gallery, code.\n\nPre-v6.3.1 consumers had to \n[…]\nsurface needs always-visible\naffordances on touch + non-hovering UX.\n\nAdditive prop, default unchanged. 3 tests in fluidity suite.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(solid): v6.3.1 — forward toolbarVariant from <UIResourceRenderer>",
          "author_name": "Nicolas Geysse",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-05-03T01:49:26Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "95cd0826500a42c5bf3f108b72ddefc7ec0f0f1d",
          "body": "…arVariant (axes 1+4)\n\nTwo consumer-friendly props from deposium_solid handoff\nSOLID-MCPUI-IMPROVEMENT-AXES-2026-05-03.md.\n\n═══ TableParams.maxHeight (axe 1) ═══\n\nOpt-out for the lib's hardcoded inline-mode max-height cap (400px,\n500px when virtualizing, applied when > 8 rows). Forced internal\nscrol\n[…]\n\n\n═══ Out of scope ═══\n\nAxe 2 (dark-theme native CSS vars) → v7.0.0 with design brief.\nAxe 3 (Portal dropdowns, 3 sites) → v6.4.0.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(solid): v6.3.0 — TableParams.maxHeight + ExpandableWrapper toolb…",
          "author_name": "Nicolas Geysse",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-05-03T01:04:41Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "084ed544d8a9372b45b574a49ccc1e06cb624b4f",
          "body": "…sium handoff)\n\nAdds opt-out for the lib's hardcoded inline-mode max-height cap on\ntables (400px / 500px when > 8 rows). Driven by deposium_solid's\nSOLID-MCPUI-IMPROVEMENT-AXES-2026-05-03.md handoff.\n\n- maxHeight?: 'auto' | number | string\n  - 'auto' → no cap, parent container handles overflow\n  - n\n[…]\n- undefined → existing behavior unchanged (400/500px caps)\n\nRenderer support ships in @seed-ship/mcp-ui-solid@6.3.0. Non-breaking.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(spec): v5.0.5 — TableComponentParamsSchema.maxHeight (axe 1 depo…",
          "author_name": "Nicolas Geysse",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-05-03T00:48:03Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "dda743f4be66787542fbffd555a731924dee5d61",
          "body": "…lery + Code search & download)\n\nCompletes the v6.1.0 fluidity audit across 5 more renderers, same UX\npattern: ExpandableWrapper for fullscreen, copy data via the modal-\nheader copy button, responsive expanded mode, format-specific export.\n\n═══ Fullscreen + copy on 4 renderers ═══\n\n- MapRenderer: wr\n[…]\nZIP-all download (would add JSZip dep)\n- Map PNG snapshot export (would add leaflet-image dep)\n- ImageGallery / Map / Video search\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(solid): v6.2.0 — cross-renderer fluidity (Map/Video/Carousel/Gal…",
          "author_name": "Nicolas Geysse",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-05-03T00:00:37Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "c5a9573b7a9662b830a4a8279929140ec24784ae",
          "body": "…port defaults\n\nUX consistency / fluidity release. Three small but visible behaviors\nthat were inconsistent across renderers.\n\n═══ Fixed — fullscreen sizing for chart, table, graph ═══\n\nWhen the user clicked expand and went fullscreen, the visualization\nstayed at its inline default size (250px chart\n[…]\napped in ExpandableWrapper (no fullscreen, no copy/export) ;\nImageGallery / Video / Carousel have no integrated copy/export menus.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(solid): v6.1.0 — fullscreen responsive + table search + chart ex…",
          "author_name": "Nicolas Geysse",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-05-02T23:37:00Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "cfd028822777918c89f695a626109a9fc6a7c381",
          "body": "…port menu\n\nMajor version marker — no API breakage. Bumps to v6 to signal the\nsubstantial wave shipped over the 5.x line: B.1 closure (14/17 types\nspec-driven), B.5 telemetry sink, citation chips in tables, and now\nthis graph primitive. Existing consumers can upgrade 5.x → 6.0.0 with\nZERO migration \n[…]\nck message on\n'graph' payloads ; everything else renders identically. Apps\ninstalling @antv/g6 ^5 get graph rendering immediately.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(solid): v6.0.0 — 'graph' ComponentType + lazy @antv/g6 + copy/ex…",
          "author_name": "Nicolas Geysse",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-05-02T19:28:38Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "7887105bdea756569a25d268d0ec62416e267833",
          "body": "… + 'graph' ComponentType\n\nAdds a generic node-link visualization primitive to the spec.\nDomain-neutral by design — `weight` on both nodes and edges is a\ngeneric ranking signal whose semantics (rerank score / co-retrieval\ncount / criticality / token contribution / frequency / etc.) are\nopaque to the\n[…]\nnstead of a crash.\n\nTests: +26 in schemas-graph-v5.0.4.test.ts. Total spec: 77/77 pass.\nNon-breaking — 'graph' is purely additive.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(spec): v5.0.4 — Graph schemas (Node/Edge with weight, 7 layouts)…",
          "author_name": "Nicolas Geysse",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-05-02T19:28:09Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "a074addc22bd8b9e11d2895fb6898856f2d27df2",
          "body": "Implements docs/briefs/BRIEF-citations-in-table-cells.md (deposium\nbrief). Lifts chip-rendering responsibility out of consumer apps so any\nhost stops mirroring chip HTML byte-for-byte.\n\nPublic API:\n- TableComponentParams.citationMap (optional, JSON-serializable)\n  Record<string|number, { page, file?\n[…]\nide\nrenderCitationChipHTML + replaceCitationsInCellHTML helpers) and\nemit raw `[📄 CITATION N]` markers with citationMap in params.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(solid): v5.7.0 — citation chips inside TableRenderer cells (opt-in)",
          "author_name": "Nicolas Geysse",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-05-02T17:55:46Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "f19a6c95c6eca8cdf0fc6882209f3fbc0f2c1814",
          "body": "…lid@5.7.0)\n\nAdds the data-only half of the citation-chips-in-table-cells feature\nspec'd in mcp-ui-solid/docs/briefs/BRIEF-citations-in-table-cells.md.\n\n- CitationEntrySchema { page (number|string), file?, file_id? }\n- TableComponentParamsSchema.citationMap (optional record<string,\n  CitationEntry>)\n[…]\nr function override\n(which can't be JSON-serialized) stay in mcp-ui-solid. Tests: +3.\nTotal spec: 51/51 pass. Backward compatible.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(spec): v5.0.3 — CitationEntry + TableParams.citationMap (prep so…",
          "author_name": "Nicolas Geysse",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-05-02T17:36:02Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "16256fc23366b924ef0511e5e1a8300be7e1d65a",
          "body": "Two combined items from deposium audit MCP-UI-AUDIT-2026-04-26.md §M.\n\n═══ B.1 final — map + form migrated to spec-driven Zod ═══\n\nAfter spec@5.0.2 relaxed MapComponentParamsSchema (LatLngPoint union)\nand FormFieldSchema.name regex (per audit §L answers), both types\njoined SPEC_VALIDATORS dispatch i\n[…]\n.6.4).\n3. Aggregate dashboard: P50/P95 render durations per ComponentType,\n   top validation:failed codes, action dispatch counts.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(solid): v5.6.0 — close B.1 (map+form Zod) + ship B.5 telemetry sink",
          "author_name": "Nicolas Geysse",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-04-27T15:18:46Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "8bbb4a1345347f44102d2e38da4cf772009ed9b2",
          "body": "Driven by deposium audit answers (MCP-UI-AUDIT-2026-04-26.md §M.2 + M.3)\nafter exhaustive grep on production payloads.\n\nMapComponentParamsSchema.center + MapMarkerSchema.position now accept\nEITHER `[lat, lng]` tuple OR `{lat, lng}` object — mirrors Leaflet's\nown polymorphic LatLngLiteral ∪ LatLngTup\n[…]\nss.\n\nNon-breaking. Unblocks `mcp-ui-solid@5.6.0` to migrate map + form to\nspec-driven Zod (close out B.1 to 14/17 ComponentTypes).\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(spec): v5.0.2 — relax map.center + form field.name (B.1 final prep)",
          "author_name": "Nicolas Geysse",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-04-27T14:49:08Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "d0be65d23b65667a04b32edd8413d2cb386bb00d",
          "body": "setup-node@v5 auto-enables `package-manager-cache` which probes the\nruntime for the `pnpm` executable BEFORE the rest of the workflow runs.\nWith the prior order (Node setup → pnpm setup), it failed with\n\"Unable to locate executable file: pnpm\" on the bump commit (a6e6ba7).\n\nMoved `pnpm/action-setup@v5` ahead of `actions/setup-node@v5` in all 3\nworkflows. Documented inline.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(ci): swap pnpm + Node setup order for setup-node@v5 compat",
          "author_name": "Nicolas Geysse",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-04-27T13:50:17Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "a6e6ba7a2d76c0644d59348d819d9ec68b9266c1",
          "body": "GitHub announced that Node 20 actions will be force-switched to Node 24\non June 2, 2026 (removal Sept 16, 2026). Bumping all 4 actions in 3\nworkflows to their v5 release lines:\n\n- actions/checkout@v4    → v5\n- actions/setup-node@v4  → v5\n- actions/cache@v4       → v5\n- pnpm/action-setup@v4   → v5\n\nW\n[…]\nase@v1 in release.yml left untouched (not in\nthe deprecation list).\n\nNo code change. CI run on this commit will validate the bump.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(ci): bump GitHub Actions v4 → v5 (Node 20 → Node 24 deprecation)",
          "author_name": "Nicolas Geysse",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-04-27T13:44:48Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "2ba7edfe12128f5c80009787d9f574e871de2dc1",
          "body": "SECURITY FIX (validateIframeDomain): the predicate at validation.ts:572\nwas `allowed === 'localhost'` — checking the WHITELIST ENTRY (the literal\nstring) instead of the URL's hostname. Once 'localhost' was added to\nDEFAULT_IFRAME_DOMAINS (present since the beginning), the iframe domain\nwhitelist was\n[…]\n-evil.com (typo-squat) and continued acceptance of whitelist +\nsubdomains + localhost + 127.0.0.x. Total suite: 530/530 (was 523).\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(solid)!: v5.5.1 — iframe whitelist security bug + 2 test cosmetics",
          "author_name": "Nicolas Geysse",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-04-27T13:40:18Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "e474f7141b5b580f87c3531c46d7d1f045df2de5",
          "body": "Refactor `services/validation.ts` to consume Zod schemas from\n`@seed-ship/mcp-ui-spec` (added v5.0.1) for 12 of the 17 ComponentTypes\n(metric, text, iframe, image, link, action, video, carousel,\nimage-gallery, action-group, code, artifact). The remaining 5\n(chart, table, form, map, modal) stay imper\n[…]\nnd↔frontend via\n`@seed-ship/mcp-ui-spec` (cf. audit §J.2).\n\nNon-breaking. New peer dep: @seed-ship/mcp-ui-spec ^5.0.1 (workspace).\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(solid): v5.5.0 — validation.ts → spec-driven Zod (B.1 PR2)",
          "author_name": "Nicolas Geysse",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-04-27T07:48:42Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "91824e59219a7b601dab66fd1430096cc43c0480",
          "body": "Adds Zod schemas + inferred types for the 9 ComponentTypes that didn't\nhave one (chart, table, metric, text, iframe, image, link, carousel,\nartifact). The 8 existing schemas (action, action-group, video,\nimage-gallery, form, modal, code, map) are untouched.\n\nMirrors the runtime shapes declared in `m\n[…]\nads at the source before emitting `done` events\n(cf. MCP-UI-AUDIT-2026-04-26.md §J.2).\n\nNon-breaking. No existing schema modified.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(spec): v5.0.1 — 9 primitive component params Zod schemas (B.1 PR1)",
          "author_name": "Nicolas Geysse",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-04-27T07:15:45Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "0a9edf4911c9e1a0caeed0cfd5da1f76cd65332a",
          "body": "Combo non-breaking from deposium audit MCP-UI-AUDIT-2026-04-26.md.\n\nB.2 Runtime debug mode\n- setDebugMode() / isDebugEnabled() exported\n- 4 activation sources: NODE_ENV, MCP_UI_DEBUG env, globalThis flag,\n  programmatic override\n- Lets prod sessions enable verbose logs without recompile (Docker dev\n\n[…]\n errors still go through\n  GenerativeUIErrorBoundary's fallback\n\nTests: 505/505 (vs 484 on v5.3.1) — +21 new tests across 3 files.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(solid): v5.4.0 — observability + UX combo (B.2 + B.3 + B.4)",
          "author_name": "Nicolas Geysse",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-04-26T16:39:31Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "9bd6372d5b8f0e1545b6cf2b36fe4b1ac10e1195",
          "body": "Resolves the postcss XSS-via-unescaped-</style> alert. postcss is a\ntransitive dep of vite/vitest (dev only), so this is a lockfile-only\nchange — no published package version bump required.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(ci): pin postcss >=8.5.10 via pnpm override (Dependabot #35)",
          "author_name": "Nicolas Geysse",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-04-24T22:23:19Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "921af83af6beeb46b7789a934825c0ba39c05ec7",
          "body": "Resolves 4 open advisories (#31-#34): SAFE_FOR_TEMPLATES bypass in\nRETURN_DOM mode, FORBID_TAGS bypass via function-form ADD_TAGS,\nprototype-pollution → XSS via CUSTOM_ELEMENT_HANDLING fallback, and\nADD_TAGS short-circuit FORBID_TAGS bypass. All fixed in 3.4.0.\n\nNo API surface change; 484/484 tests pass.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(solid): v5.3.1 — bump dompurify to ^3.4.1 (Dependabot security)",
          "author_name": "Nicolas Geysse",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-04-24T22:19:28Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "2ed83a9cd12577e647ce93de6d31b80903a4a8ab",
          "body": "… useServerCapabilities + recipes)\n\nCloses the items in mcp-ui's court per the mcp-ui ↔ deposium_MCPs alignment\ndoc (2026-04-22). All additions are optional and additive; v5.2.0 consumers\nupgrade with zero code changes.\n\nA. <ElicitationForm> — schema-driven renderer wrapping <ChatPrompt> +\n   elicit\n[…]\nsium POST /api/feedback shape as a worked example.\n\nTests: 484/484 passing (+17 new — 7 ElicitationForm + 10 server-capabilities).\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(solid): v5.3.0 — alignment with deposium_MCPs (ElicitationForm +…",
          "author_name": "Nicolas Geysse",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-04-22T17:39:29Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "97b86195e91d1f1359b65392986c75e59075d85b",
          "body": "…icitation\n\nScope consolidated from v5.1.0 consensus carry-forward (D1 + D2) plus two\nitems arising from the MCP SDK audit 2026-04-14 (D5, D6).\n\nD1 — createScratchpadStore factory\n  - createScratchpadStore() returns isolated ScratchpadStoreHandle\n  - ScratchpadStoreProvider + ScratchpadStoreContext \n[…]\n(7)\n  - services/chat-bus.test.ts — 8 new elicitation tests\n\nDesign doc: docs/2026/r&d/mcpui-v5.2.0-scope.md in the Deposium repo.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(solid): v5.2.0 — D1/D2 carry-forward + D5 FeedbackInline + D6 el…",
          "author_name": "Nicolas Geysse",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-04-21T23:36:42Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "76f7fb883fcd21b8a98e192a8bf9c8a78943356e",
          "body": "D4 — custom choice rendering (additive, non-breaking):\n- ChoicePromptConfig.optionRenderer?: (option, index) => JSX.Element\n  render prop for custom option bodies. mcp-ui still wraps the returned\n  JSX in the <button> with onClick handler and focus handling.\n- ChoicePromptConfig.buttonClass? + conta\n[…]\ne-entrance + abort (D2 + D3 code)\n- correlationId native in ChatPromptConfig → ChatPromptResponse\n- progress_update SSE event type\n\nCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(solid): v5.1.0 — D4 optionRenderer + D3 AbortSignal contract docs",
          "author_name": "Nicolas Geysse",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-04-14T18:47:33Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "a93692141c1d7400db22184ad4b047a56c4dc95f",
          "body": "All three packages bumped in lockstep:\n- @seed-ship/mcp-ui-solid 4.3.9 → 5.0.0\n- @seed-ship/mcp-ui-spec 3.2.0 → 5.0.0\n- @seed-ship/mcp-ui-cli 3.0.0 → 5.0.0\n\nBreaking:\n- Remove ClarificationEvent.options[].file_id from the TypeScript type\n  (deprecated in v4.3.9, removed as announced). clarificationT\n[…]\nuto-reject vs FIFO)\n- ChatPrompt AbortSignal wiring\n- ChoicePromptConfig.optionRenderer slot\n\nTests: 433 passing (no regressions).\n\nCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(release): v5.0.0 — synchronized major + docs consolidation",
          "author_name": "Nicolas Geysse",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-04-14T17:57:17Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "ae6b9b0ab182c9433538a5213b603f28cfc5eb12",
          "body": "Additive, non-breaking except retrait code mort 'select' prompt type.\n\nTypes (chat-bus.ts):\n- G1: ChoicePromptConfig.options[].metadata? (free-form, opaque)\n- G3: ClarificationEvent.options[].metadata? + type?, file_id deprecated\n- G5: ChatPromptResponse.dismissed JSDoc (X/Cancel vs explicit vs abor\n[…]\nackfill for 4.3.6, 4.3.7, 4.3.8 (previously missing)\n\nTests: +10 (6 clarificationToPromptConfig + 4 createMockChatBus) = 433 pass.\n\nCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(solid): v4.3.9 — Sprint 52 multi-agent primitives (G1-G11)",
          "author_name": "Nicolas Geysse",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-04-14T17:33:00Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "4fe6163193d2d54ecad8bb534cc3ffcdd301cab1",
          "body": "Matched search terms highlighted with bg-yellow-200 / dark:bg-[#222F49]\nacross all visible cells. highlightQuery helper skips HTML tag content.\nFullscreen: removed h-full on table wrapper so it shrinks to content,\neliminating the phantom scrollbar when rows don't fill viewport.\n\nCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(solid): v4.3.8 — search highlight + fullscreen height fix",
          "author_name": "Nicolas Geysse",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-04-12T06:22:13Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "a4419f225b9b43c44243a6ccedd868a7f27c744d",
          "body": "Replace progressive \"show more\" with unified Prev/Next pagination.\nFullscreen shows page size selector (10/30/60/100/All). Table fills\nviewport in fullscreen (calc(100vh - 180px)). Header bg-gray-100\n(was bg-gray-50) for better contrast in chat view.\n\nCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(solid): v4.3.7 — Prev/Next pagination + page size selector",
          "author_name": "Nicolas Geysse",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-04-11T21:01:50Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "a81333fc0edf9e751066b649ecf80ecdb84a034e",
          "body": "Sticky thead bg changed from bg-gray-900/50 (translucent) to\nbg-gray-900 (opaque) so header is readable over chat bubbles.\nSearch input capped at max-w-xs min-w-[200px] instead of w-full.\n\nCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(solid): v4.3.6 — opaque sticky header + compact search input",
          "author_name": "Nicolas Geysse",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-04-11T20:46:59Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "9c19169fc21e153b74f70c2ae072a8246dd5ee7e",
          "body": "Table scroll container now bounded (400px chat, 70vh fullscreen) when\nrows > 8, making sticky thead work. Default copy/export changed from\nTSV to CSV. TSV removed from default export formats (still available\nif server explicitly sets formats: ['tsv']).\n\nCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(solid): v4.3.5 — sticky table header + default export CSV over TSV",
          "author_name": "Nicolas Geysse",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-04-11T20:29:47Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "fc5dd110e64a35a4a1fe40cdcf106ce4c1cd060e",
          "body": "…een)\n\nExpandableWrapper provides isExpanded via SolidJS context. TableRenderer\nuses it to adapt pageSize: compact (min 10) in chat view, full pageSize\nin expanded view. Zero server changes needed. useExpanded hook exported.\n\nCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(solid): v4.3.4 — context-aware table pagination (chat vs fullscr…",
          "author_name": "Nicolas Geysse",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-04-11T20:23:27Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "f186444ca2af45bb8de9c4f91721869773e8e539",
          "body": "Client-side search input above tables. Filters all columns in real-time\nwith accent-insensitive matching, 200ms debounce, and clear button.\nPagination applies after filtering. Auto-enabled when rows > 10.\n\nCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(solid): v4.3.3 — table search filter (searchable)",
          "author_name": "Nicolas Geysse",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-04-11T20:19:07Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "fb2c187d3b12ddd0fa880291bb20cbbbe308d503",
          "body": "Adds progressive \"show more\" pagination mode to TableRenderer.\nWhen showAllLabel is set, table shows first pageSize rows with\nan append button instead of Prev/Next paged navigation. Sort\nresets to first batch. Backward-compatible with existing paged mode.\n\nCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(solid): v4.3.2 — progressive table pagination (showAllLabel)",
          "author_name": "Nicolas Geysse",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-04-11T19:49:09Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "634e99dbf6605e07c02c3f93eeac10e38a086e05",
          "body": "Collapsible debugTrace panel under form sections showing per-field\nprefill/source/muted state, submitted values, auto-submit decision\nreasoning, optional server _debug data, and raw SSE payload viewer.\nActivated via debugTrace prop on ScratchpadPanel.\n\nCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(solid): v4.3.1 — debug trace mode for forms & PPR",
          "author_name": "Nicolas Geysse",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-04-11T14:41:51Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "2016c99f06da9a6facdeed8b50b61b6128dc82a4",
          "body": "P1: prefillMode \"resolve\" for autocomplete (client-side name→code)\nP2: smart tag display (label not code) for select/autocomplete\nP3: prefill confidence summary (\"N champs pré-remplis sur M\")\nP4: auto-submit toast mode (compact view when all fields prefilled)\nP5: valueFormat regex validation with valueFormatHint\nP6: autocomplete always submits valueField (blur auto-resolve)\n\nCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(spec,solid): v4.3.0 — prefill enhancements Phase B (P1-P6)",
          "author_name": "Nicolas Geysse",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-04-11T12:11:44Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "3beaafd122ef1a6737a3e8e119049a85410a1059",
          "body": "Ensures dist contains prefill support (v4.2.1 dist was stale).\nAdded changelog entry and README section for prefilled forms feature.\n\nCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(solid): v4.2.2 — prefilled forms changelog + README + rebuild",
          "author_name": "Nicolas Geysse",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-04-11T11:12:40Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "707485a1362dbc8cbbd5a244c61d1ddafa2384f1",
          "body": "EmbeddedFormSection (scratchpad forms) was initializing formData as {}\nignoring field.prefill values. Now initializes with prefill, re-applies\non streaming updates, and supports autoSubmitDelay countdown.\n\nCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(solid): v4.2.1 — prefill initialization in EmbeddedFormSection",
          "author_name": "Nicolas Geysse",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-04-11T04:35:52Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "884773d6a13d404d32b5e3f2306e31d6b1a33d6c",
          "body": "Add prefill, displayHint, source, muted fields to FormFieldSchema and\nautoSubmitDelay to FormComponentParams. FormFieldRenderer shows source\nbadges, muted styling with focus-to-active, and displayHint captions.\nFormRenderer initializes with prefill values and supports auto-submit\ncountdown when all required fields are prefilled.\n\nCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(spec,solid): v4.2.0 — prefilled forms with source indicators",
          "author_name": "Nicolas Geysse",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-04-11T03:44:51Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "a5e2d2964b36425703d9e340a56e0e37d4402035",
          "body": "P1 — Agent visible:\n- AgentCard section: avatar + name + status badge + capabilities + current step\n- AgentStatusBadge: auto-detected in scratchpad header from agent_card sections\n- Standardized [MCP-UI:Component] logging with agentId/stepId\n\nP2 — HITL bidirectional:\n- ActionSection enriched: title \n[…]\nadded/removed/changed entries with color coding + stats\n\n23 scratchpad section types total. on:click for all interactive elements.\n\nCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(solid): v4.1.0 — AITL agent toolkit (P1-P5)",
          "author_name": "Nicolas Geysse",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-04-07T05:44:41Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "6311e1ebef7b2f641de298459c34c93beca548c0",
          "body": "…Click\n\nRoot cause: SolidJS onClick compiles to $$click (event delegation) which\nrequires delegateEvents() at the document level. When the component is\nimported as a library in SolidStart (via \"solid\" condition), the delegation\nmay not be initialized in the consuming app's context.\n\nFix: use on:clic\n[…]\n Before: _el$103.$$click = () => handleSort(column.key)\n  After:  addEventListener(_el$103, \"click\", () => handleSort(column.key))\n\nCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(solid): v4.0.6 — TableRenderer sort click: on:click instead of on…",
          "author_name": "Nicolas Geysse",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-04-07T03:46:25Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "3ba67b38db776d947c0a3c129da5188b6fb3d715",
          "body": "Bug 1 (pagination freeze): virtualization was conflicting with client\npagination — now auto-disabled when pagination is active.\n\nBug 2 (tri non actif): added full client-side sorting to TableRenderer.\nClick header: asc → desc → reset. Type-aware (auto-detects number\ncolumns). Sort indicators (↕/↑/↓)\n[…]\nt-side\ndata — no need for server to send sortable: true.\n\nSort resets pagination to page 0. Pagination now slices from sortedRows.\n\nCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(solid): v4.0.5 — TableRenderer sortable columns + pagination fix",
          "author_name": "Nicolas Geysse",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-04-07T03:35:46Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "f2f68e929aafd34d14073a4e878af9bf9938cedc",
          "body": "DataPreviewSection + TableRenderer both auto-paginate when rows > pageSize.\nServer sends rows[] as before — zero server changes needed.\n\n- pageSize=0 disables pagination\n- initialPage prop (0-indexed)\n- showPageInfo: \"Showing X–Y of Z\" counter (default: true)\n- onPageChange callback for server-side \n[…]\n\n- Export CSV/JSON always exports ALL rows (not just current page)\n- Export tooltip shows \"(N rows)\" count\n- Sort resets page to 0\n\nCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(solid): v4.0.4 — client-side auto-pagination for tables",
          "author_name": "Nicolas Geysse",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-04-07T02:03:46Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "af83b51b4c878de32b235745d781659a73f00f05",
          "body": "Click column header to cycle: asc → desc → reset.\nType-aware sorting: number (numeric), date (chronological),\nstring (locale-sensitive with localeCompare fr).\nSort indicator arrows on headers (↕ neutral, ↑ asc, ↓ desc).\nActive sort column highlighted in blue. Exports respect sort order.\nPage resets to 1 on sort change.\n\nCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(solid): v4.0.3 — sortable columns in DataPreviewSection",
          "author_name": "Nicolas Geysse",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-04-07T01:24:55Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "6caff29f473d564390cb9219fd5248343b395de9",
          "body": "SSE transport may deliver section content as JSON strings instead of\nparsed objects. Added parseContent() helper that auto-parses strings\nfor all 17 section types (data, filter, action, steps, form,\nunderstanding, feedback, prompt, stepper, error, source_card, diff,\nverified_text, data_preview, map, chart). Only 'message' is excluded\n(uses String() directly).\n\nCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(solid): v4.0.2 — parseContent() on all scratchpad sections",
          "author_name": "Nicolas Geysse",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-04-07T00:30:52Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "8a9c04f7465b6f81722e2bd27e114945142283bf",
          "body": "…mat tolerance\n\nFix 1 (CRITICAL): DataPreviewSection now uses resolveContent() with defensive\nguards — handles store proxy content, wrapped content, and missing columns/rows.\nShows warning fallback instead of crashing to JSON.stringify.\n\nFix 2 (DX): ActionSection accepts both content: [...] and content: { actions: [...] }\nformats. Logs a console.warn when the wrapped format is used.\n\nCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(solid): v4.0.1 — DataPreviewSection rendering + ActionSection for…",
          "author_name": "Nicolas Geysse",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-04-07T00:17:58Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "920fe1dc67e25e943217855f3d6e528b62e483eb",
          "body": "Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: update lockfile for protomaps-leaflet peer dep",
          "author_name": "Nicolas Geysse",
          "author_login": "nicolas-geysse",
          "committed_at": "2026-04-06T23:58:01Z",
          "body_truncated": false,
          "is_coding_agent": true
        }
      ],
      "releases_count": 100,
      "commits_last_year": 250,
      "latest_release_at": "2026-07-03T20:12:25Z",
      "latest_release_tag": "v6.16.0",
      "releases_from_tags": false,
      "days_since_last_push": 0,
      "active_weeks_last_year": 17,
      "days_since_latest_release": 21,
      "mean_days_between_releases": 3.8
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": false,
      "has_contributing": true,
      "health_percentage": 50,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": true
    },
    "ecosystem": {
      "packages": [
        {
          "name": "@seed-ship/mcp-ui-cli",
          "exists": true,
          "license": "MIT",
          "keywords": [
            "mcp",
            "ui",
            "cli",
            "validation",
            "codegen",
            "component-registry"
          ],
          "ecosystem": "npm",
          "matches_repo": true,
          "registry_url": "https://www.npmjs.com/package/@seed-ship/mcp-ui-cli",
          "is_deprecated": false,
          "latest_version": "5.0.0",
          "repository_url": "https://github.com/theseedship/mcp-ui",
          "versions_count": 14,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 1,
          "monthly_downloads": 411,
          "first_published_at": "2025-11-16T05:05:34.260000Z",
          "latest_published_at": "2026-04-14T17:58:46.925000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 101
        },
        {
          "name": "@seed-ship/mcp-ui-spec",
          "exists": true,
          "license": "MIT",
          "keywords": [
            "mcp",
            "ui",
            "specification",
            "json-schema",
            "component-registry"
          ],
          "ecosystem": "npm",
          "matches_repo": true,
          "registry_url": "https://www.npmjs.com/package/@seed-ship/mcp-ui-spec",
          "is_deprecated": false,
          "latest_version": "5.5.0",
          "repository_url": "https://github.com/theseedship/mcp-ui",
          "versions_count": 29,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 1,
          "monthly_downloads": 836,
          "first_published_at": "2025-11-16T05:05:31.685000Z",
          "latest_published_at": "2026-05-30T23:31:58.281000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 55
        },
        {
          "name": "@seed-ship/mcp-ui-solid",
          "exists": true,
          "license": "MIT",
          "keywords": [
            "mcp",
            "ui",
            "solidjs",
            "components",
            "streaming",
            "dashboard",
            "generative-ui"
          ],
          "ecosystem": "npm",
          "matches_repo": true,
          "registry_url": "https://www.npmjs.com/package/@seed-ship/mcp-ui-solid",
          "is_deprecated": false,
          "latest_version": "6.16.0",
          "repository_url": "https://github.com/theseedship/mcp-ui",
          "versions_count": 135,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 1,
          "monthly_downloads": 924,
          "first_published_at": "2025-11-16T05:05:29.235000Z",
          "latest_published_at": "2026-07-03T20:13:29.721000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 21
        }
      ]
    },
    "popularity": {
      "forks": 0,
      "stars": 1,
      "watchers": 0,
      "fork_history": {
        "days": [],
        "complete": true,
        "collected": 0,
        "total_forks": 0
      },
      "star_history": null,
      "open_issues_and_prs": 1
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [
        "examples",
        "recipes"
      ],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": false,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [
        "mcp-ui-cli/tsconfig.json",
        "mcp-ui-solid/tsconfig.json",
        "mcp-ui-spec/tsconfig.json",
        "tsconfig.json"
      ],
      "toolchain_manifests": [],
      "largest_source_bytes": 81424,
      "source_files_sampled": 173,
      "oversized_source_files": 2,
      "agent_instruction_files": [
        "CLAUDE.md"
      ],
      "agent_instruction_max_bytes": 3127
    },
    "dependencies": {
      "manifests": [
        "mcp-ui-cli/package.json",
        "mcp-ui-solid/package.json",
        "mcp-ui-spec/package.json",
        "package.json"
      ],
      "advisories": {
        "error": null,
        "scope": "published_package",
        "source": "osv",
        "findings": [],
        "collected": true,
        "malicious": [],
        "truncated": false,
        "by_severity": {},
        "advisory_count": 0,
        "affected_count": 0,
        "assessed_count": 49,
        "malicious_count": 0,
        "assessed_package": "npm:@seed-ship/mcp-ui-cli@5.0.0",
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "npm"
      ],
      "dependencies": [
        {
          "name": "@seed-ship/mcp-ui-spec",
          "manifest": "mcp-ui-cli/package.json",
          "ecosystem": "npm",
          "version_constraint": "workspace:*"
        },
        {
          "name": "ajv",
          "manifest": "mcp-ui-cli/package.json",
          "ecosystem": "npm",
          "version_constraint": "^8.18.0"
        },
        {
          "name": "chalk",
          "manifest": "mcp-ui-cli/package.json",
          "ecosystem": "npm",
          "version_constraint": "^5.3.0"
        },
        {
          "name": "commander",
          "manifest": "mcp-ui-cli/package.json",
          "ecosystem": "npm",
          "version_constraint": "^11.1.0"
        },
        {
          "name": "json-schema-to-typescript",
          "manifest": "mcp-ui-cli/package.json",
          "ecosystem": "npm",
          "version_constraint": "^15.0.4"
        },
        {
          "name": "ora",
          "manifest": "mcp-ui-cli/package.json",
          "ecosystem": "npm",
          "version_constraint": "^7.0.1"
        },
        {
          "name": "zod",
          "manifest": "mcp-ui-cli/package.json",
          "ecosystem": "npm",
          "version_constraint": "^3.22.4"
        },
        {
          "name": "@seed-ship/mcp-ui-spec",
          "manifest": "mcp-ui-solid/package.json",
          "ecosystem": "npm",
          "version_constraint": "workspace:^5.3.0"
        },
        {
          "name": "@types/dompurify",
          "manifest": "mcp-ui-solid/package.json",
          "ecosystem": "npm",
          "version_constraint": "^3.0.5"
        },
        {
          "name": "dompurify",
          "manifest": "mcp-ui-solid/package.json",
          "ecosystem": "npm",
          "version_constraint": "^3.4.1"
        },
        {
          "name": "marked",
          "manifest": "mcp-ui-solid/package.json",
          "ecosystem": "npm",
          "version_constraint": "^16.3.0"
        },
        {
          "name": "zod",
          "manifest": "mcp-ui-solid/package.json",
          "ecosystem": "npm",
          "version_constraint": "^3.22.4"
        },
        {
          "name": "zod",
          "manifest": "mcp-ui-spec/package.json",
          "ecosystem": "npm",
          "version_constraint": "^3.22.4"
        }
      ],
      "all_dependencies": {
        "error": null,
        "source": "github-sbom",
        "packages": [
          {
            "name": "@types/dompurify",
            "direct": true,
            "version": "3.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "@types/dompurify",
            "direct": true,
            "version": "^3.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "ajv",
            "direct": true,
            "version": "6.14.0",
            "ecosystem": "npm"
          },
          {
            "name": "ajv",
            "direct": true,
            "version": "8.18.0",
            "ecosystem": "npm"
          },
          {
            "name": "ajv",
            "direct": true,
            "version": "^8.18.0",
            "ecosystem": "npm"
          },
          {
            "name": "chalk",
            "direct": true,
            "version": "4.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "chalk",
            "direct": true,
            "version": "5.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "chalk",
            "direct": true,
            "version": "^5.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "commander",
            "direct": true,
            "version": "11.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "commander",
            "direct": true,
            "version": "7.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "commander",
            "direct": true,
            "version": "^11.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "dompurify",
            "direct": true,
            "version": "3.4.11",
            "ecosystem": "npm"
          },
          {
            "name": "dompurify",
            "direct": true,
            "version": "^3.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "json-schema-to-typescript",
            "direct": true,
            "version": "15.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "json-schema-to-typescript",
            "direct": true,
            "version": "^15.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "marked",
            "direct": true,
            "version": "16.4.2",
            "ecosystem": "npm"
          },
          {
            "name": "marked",
            "direct": true,
            "version": "^16.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "ora",
            "direct": true,
            "version": "7.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "ora",
            "direct": true,
            "version": "^7.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "zod",
            "direct": true,
            "version": "3.25.76",
            "ecosystem": "npm"
          },
          {
            "name": "zod",
            "direct": true,
            "version": "^3.22.4",
            "ecosystem": "npm"
          },
          {
            "name": "@acemir/cssom",
            "direct": false,
            "version": "0.9.23",
            "ecosystem": "npm"
          },
          {
            "name": "@antv/algorithm",
            "direct": false,
            "version": "0.1.26",
            "ecosystem": "npm"
          },
          {
            "name": "@antv/component",
            "direct": false,
            "version": "2.1.11",
            "ecosystem": "npm"
          },
          {
            "name": "@antv/event-emitter",
            "direct": false,
            "version": "0.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "@antv/expr",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "@antv/g",
            "direct": false,
            "version": "6.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "@antv/g-canvas",
            "direct": false,
            "version": "2.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "@antv/g-lite",
            "direct": false,
            "version": "2.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "@antv/g-math",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "@antv/g-plugin-dragndrop",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "@antv/g6",
            "direct": false,
            "version": "5.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "@antv/graphlib",
            "direct": false,
            "version": "2.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "@antv/hierarchy",
            "direct": false,
            "version": "0.7.1",
            "ecosystem": "npm"
          },
          {
            "name": "@antv/layout",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "@antv/scale",
            "direct": false,
            "version": "0.4.16",
            "ecosystem": "npm"
          },
          {
            "name": "@antv/util",
            "direct": false,
            "version": "2.0.17",
            "ecosystem": "npm"
          },
          {
            "name": "@antv/util",
            "direct": false,
            "version": "3.3.11",
            "ecosystem": "npm"
          },
          {
            "name": "@antv/vendor",
            "direct": false,
            "version": "1.0.11",
            "ecosystem": "npm"
          },
          {
            "name": "@apidevtools/json-schema-ref-parser",
            "direct": false,
            "version": "11.9.3",
            "ecosystem": "npm"
          },
          {
            "name": "@asamuzakjp/css-color",
            "direct": false,
            "version": "4.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "@asamuzakjp/dom-selector",
            "direct": false,
            "version": "6.7.4",
            "ecosystem": "npm"
          },
          {
            "name": "@asamuzakjp/nwsapi",
            "direct": false,
            "version": "2.3.9",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/code-frame",
            "direct": false,
            "version": "7.27.1",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/compat-data",
            "direct": false,
            "version": "7.28.5",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/core",
            "direct": false,
            "version": "7.28.5",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/generator",
            "direct": false,
            "version": "7.28.5",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-compilation-targets",
            "direct": false,
            "version": "7.27.2",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-globals",
            "direct": false,
            "version": "7.28.0",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-module-imports",
            "direct": false,
            "version": "7.18.6",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-module-imports",
            "direct": false,
            "version": "7.27.1",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-module-transforms",
            "direct": false,
            "version": "7.28.3",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-plugin-utils",
            "direct": false,
            "version": "7.27.1",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-string-parser",
            "direct": false,
            "version": "7.27.1",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-validator-identifier",
            "direct": false,
            "version": "7.28.5",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-validator-option",
            "direct": false,
            "version": "7.27.1",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helpers",
            "direct": false,
            "version": "7.28.4",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/parser",
            "direct": false,
            "version": "7.28.5",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-syntax-jsx",
            "direct": false,
            "version": "7.27.1",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/runtime",
            "direct": false,
            "version": "7.28.4",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/template",
            "direct": false,
            "version": "7.27.2",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/traverse",
            "direct": false,
            "version": "7.28.5",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/types",
            "direct": false,
            "version": "7.28.5",
            "ecosystem": "npm"
          },
          {
            "name": "@csstools/color-helpers",
            "direct": false,
            "version": "5.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "@csstools/css-calc",
            "direct": false,
            "version": "2.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "@csstools/css-color-parser",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "@csstools/css-parser-algorithms",
            "direct": false,
            "version": "3.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "@csstools/css-syntax-patches-for-csstree",
            "direct": false,
            "version": "1.0.16",
            "ecosystem": "npm"
          },
          {
            "name": "@csstools/css-tokenizer",
            "direct": false,
            "version": "3.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "@duckdb/duckdb-wasm",
            "direct": false,
            "version": "1.32.0",
            "ecosystem": "npm"
          },
          {
            "name": "@emnapi/core",
            "direct": false,
            "version": "1.10.0",
            "ecosystem": "npm"
          },
          {
            "name": "@emnapi/runtime",
            "direct": false,
            "version": "1.10.0",
            "ecosystem": "npm"
          },
          {
            "name": "@emnapi/wasi-threads",
            "direct": false,
            "version": "1.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/aix-ppc64",
            "direct": false,
            "version": "0.27.2",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/android-arm",
            "direct": false,
            "version": "0.27.2",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/android-arm64",
            "direct": false,
            "version": "0.27.2",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/android-x64",
            "direct": false,
            "version": "0.27.2",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/darwin-arm64",
            "direct": false,
            "version": "0.27.2",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/darwin-x64",
            "direct": false,
            "version": "0.27.2",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/freebsd-arm64",
            "direct": false,
            "version": "0.27.2",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/freebsd-x64",
            "direct": false,
            "version": "0.27.2",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-arm",
            "direct": false,
            "version": "0.27.2",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-arm64",
            "direct": false,
            "version": "0.27.2",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-ia32",
            "direct": false,
            "version": "0.27.2",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-loong64",
            "direct": false,
            "version": "0.27.2",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-mips64el",
            "direct": false,
            "version": "0.27.2",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-ppc64",
            "direct": false,
            "version": "0.27.2",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-riscv64",
            "direct": false,
            "version": "0.27.2",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-s390x",
            "direct": false,
            "version": "0.27.2",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-x64",
            "direct": false,
            "version": "0.27.2",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/netbsd-arm64",
            "direct": false,
            "version": "0.27.2",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/netbsd-x64",
            "direct": false,
            "version": "0.27.2",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/openbsd-arm64",
            "direct": false,
            "version": "0.27.2",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/openbsd-x64",
            "direct": false,
            "version": "0.27.2",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/openharmony-arm64",
            "direct": false,
            "version": "0.27.2",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/sunos-x64",
            "direct": false,
            "version": "0.27.2",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/win32-arm64",
            "direct": false,
            "version": "0.27.2",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/win32-ia32",
            "direct": false,
            "version": "0.27.2",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/win32-x64",
            "direct": false,
            "version": "0.27.2",
            "ecosystem": "npm"
          },
          {
            "name": "@eslint-community/eslint-utils",
            "direct": false,
            "version": "4.9.0",
            "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.1",
            "ecosystem": "npm"
          },
          {
            "name": "@humanwhocodes/config-array",
            "direct": false,
            "version": "0.13.0",
            "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": "@jridgewell/gen-mapping",
            "direct": false,
            "version": "0.3.13",
            "ecosystem": "npm"
          },
          {
            "name": "@jridgewell/remapping",
            "direct": false,
            "version": "2.3.5",
            "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": "@jsdevtools/ono",
            "direct": false,
            "version": "7.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "@kurkle/color",
            "direct": false,
            "version": "0.3.4",
            "ecosystem": "npm"
          },
          {
            "name": "@mapbox/point-geometry",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "@mapbox/vector-tile",
            "direct": false,
            "version": "2.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "@napi-rs/wasm-runtime",
            "direct": false,
            "version": "1.1.5",
            "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": "@oxc-project/types",
            "direct": false,
            "version": "0.133.0",
            "ecosystem": "npm"
          },
          {
            "name": "@polka/url",
            "direct": false,
            "version": "1.0.0-next.29",
            "ecosystem": "npm"
          },
          {
            "name": "@rolldown/binding-android-arm64",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "@rolldown/binding-darwin-arm64",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "@rolldown/binding-darwin-x64",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "@rolldown/binding-freebsd-x64",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "@rolldown/binding-linux-arm-gnueabihf",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "@rolldown/binding-linux-arm64-gnu",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "@rolldown/binding-linux-arm64-musl",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "@rolldown/binding-linux-ppc64-gnu",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "@rolldown/binding-linux-s390x-gnu",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "@rolldown/binding-linux-x64-gnu",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "@rolldown/binding-linux-x64-musl",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "@rolldown/binding-openharmony-arm64",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "@rolldown/binding-wasm32-wasi",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "@rolldown/binding-win32-arm64-msvc",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "@rolldown/binding-win32-x64-msvc",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "@rolldown/pluginutils",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "@size-limit/esbuild",
            "direct": false,
            "version": "12.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "@size-limit/esbuild",
            "direct": false,
            "version": "^12.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "@size-limit/esbuild-why",
            "direct": false,
            "version": "12.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "@size-limit/esbuild-why",
            "direct": false,
            "version": "^12.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "@size-limit/file",
            "direct": false,
            "version": "12.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "@size-limit/preset-small-lib",
            "direct": false,
            "version": "12.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "@size-limit/preset-small-lib",
            "direct": false,
            "version": "^12.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "@solidjs/testing-library",
            "direct": false,
            "version": "0.8.10",
            "ecosystem": "npm"
          },
          {
            "name": "@solidjs/testing-library",
            "direct": false,
            "version": "^0.8.5",
            "ecosystem": "npm"
          },
          {
            "name": "@standard-schema/spec",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "@swc/helpers",
            "direct": false,
            "version": "0.5.18",
            "ecosystem": "npm"
          },
          {
            "name": "@tanstack/solid-virtual",
            "direct": false,
            "version": "3.13.18",
            "ecosystem": "npm"
          },
          {
            "name": "@tanstack/solid-virtual",
            "direct": false,
            "version": "^3.13.18",
            "ecosystem": "npm"
          },
          {
            "name": "@tanstack/virtual-core",
            "direct": false,
            "version": "3.13.18",
            "ecosystem": "npm"
          },
          {
            "name": "@testing-library/dom",
            "direct": false,
            "version": "10.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "@tybys/wasm-util",
            "direct": false,
            "version": "0.10.2",
            "ecosystem": "npm"
          },
          {
            "name": "@types/aria-query",
            "direct": false,
            "version": "5.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/chai",
            "direct": false,
            "version": "5.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@types/command-line-args",
            "direct": false,
            "version": "5.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@types/command-line-usage",
            "direct": false,
            "version": "5.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "@types/css-font-loading-module",
            "direct": false,
            "version": "0.0.7",
            "ecosystem": "npm"
          },
          {
            "name": "@types/d3-array",
            "direct": false,
            "version": "3.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "@types/d3-color",
            "direct": false,
            "version": "3.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "@types/d3-dispatch",
            "direct": false,
            "version": "3.0.7",
            "ecosystem": "npm"
          },
          {
            "name": "@types/d3-dsv",
            "direct": false,
            "version": "3.0.7",
            "ecosystem": "npm"
          },
          {
            "name": "@types/d3-ease",
            "direct": false,
            "version": "3.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "@types/d3-fetch",
            "direct": false,
            "version": "3.0.7",
            "ecosystem": "npm"
          },
          {
            "name": "@types/d3-force",
            "direct": false,
            "version": "3.0.10",
            "ecosystem": "npm"
          },
          {
            "name": "@types/d3-format",
            "direct": false,
            "version": "3.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "@types/d3-geo",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "@types/d3-hierarchy",
            "direct": false,
            "version": "3.1.7",
            "ecosystem": "npm"
          },
          {
            "name": "@types/d3-interpolate",
            "direct": false,
            "version": "3.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "@types/d3-path",
            "direct": false,
            "version": "3.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "@types/d3-quadtree",
            "direct": false,
            "version": "3.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "@types/d3-random",
            "direct": false,
            "version": "3.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "@types/d3-scale",
            "direct": false,
            "version": "4.0.9",
            "ecosystem": "npm"
          },
          {
            "name": "@types/d3-scale-chromatic",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "@types/d3-shape",
            "direct": false,
            "version": "3.1.8",
            "ecosystem": "npm"
          },
          {
            "name": "@types/d3-time",
            "direct": false,
            "version": "3.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "@types/d3-timer",
            "direct": false,
            "version": "3.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "@types/deep-eql",
            "direct": false,
            "version": "4.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "@types/estree",
            "direct": false,
            "version": "1.0.9",
            "ecosystem": "npm"
          },
          {
            "name": "@types/geojson",
            "direct": false,
            "version": "7946.0.16",
            "ecosystem": "npm"
          },
          {
            "name": "@types/json-schema",
            "direct": false,
            "version": "7.0.15",
            "ecosystem": "npm"
          },
          {
            "name": "@types/leaflet",
            "direct": false,
            "version": "1.9.21",
            "ecosystem": "npm"
          },
          {
            "name": "@types/leaflet",
            "direct": false,
            "version": "^1.9.8",
            "ecosystem": "npm"
          },
          {
            "name": "@types/leaflet.markercluster",
            "direct": false,
            "version": "1.5.6",
            "ecosystem": "npm"
          },
          {
            "name": "@types/leaflet.markercluster",
            "direct": false,
            "version": "^1.5.6",
            "ecosystem": "npm"
          },
          {
            "name": "@types/lodash",
            "direct": false,
            "version": "4.17.20",
            "ecosystem": "npm"
          },
          {
            "name": "@types/node",
            "direct": false,
            "version": "20.19.25",
            "ecosystem": "npm"
          },
          {
            "name": "@types/node",
            "direct": false,
            "version": "22.19.11",
            "ecosystem": "npm"
          },
          {
            "name": "@types/node",
            "direct": false,
            "version": "^22.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "@types/rbush",
            "direct": false,
            "version": "3.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "@types/semver",
            "direct": false,
            "version": "7.7.1",
            "ecosystem": "npm"
          },
          {
            "name": "@types/trusted-types",
            "direct": false,
            "version": "2.0.7",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/eslint-plugin",
            "direct": false,
            "version": "6.21.0",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/eslint-plugin",
            "direct": false,
            "version": "7.18.0",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/eslint-plugin",
            "direct": false,
            "version": "^6.15.0",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/parser",
            "direct": false,
            "version": "6.21.0",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/parser",
            "direct": false,
            "version": "7.18.0",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/parser",
            "direct": false,
            "version": "^6.15.0",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/scope-manager",
            "direct": false,
            "version": "6.21.0",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/scope-manager",
            "direct": false,
            "version": "7.18.0",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/type-utils",
            "direct": false,
            "version": "6.21.0",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/type-utils",
            "direct": false,
            "version": "7.18.0",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/types",
            "direct": false,
            "version": "6.21.0",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/types",
            "direct": false,
            "version": "7.18.0",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/typescript-estree",
            "direct": false,
            "version": "6.21.0",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/typescript-estree",
            "direct": false,
            "version": "7.18.0",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/utils",
            "direct": false,
            "version": "6.21.0",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/utils",
            "direct": false,
            "version": "7.18.0",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/visitor-keys",
            "direct": false,
            "version": "6.21.0",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/visitor-keys",
            "direct": false,
            "version": "7.18.0",
            "ecosystem": "npm"
          },
          {
            "name": "@ungap/structured-clone",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "@vitest/expect",
            "direct": false,
            "version": "4.1.8",
            "ecosystem": "npm"
          },
          {
            "name": "@vitest/mocker",
            "direct": false,
            "version": "4.1.8",
            "ecosystem": "npm"
          },
          {
            "name": "@vitest/pretty-format",
            "direct": false,
            "version": "4.0.9",
            "ecosystem": "npm"
          },
          {
            "name": "@vitest/pretty-format",
            "direct": false,
            "version": "4.1.8",
            "ecosystem": "npm"
          },
          {
            "name": "@vitest/runner",
            "direct": false,
            "version": "4.1.8",
            "ecosystem": "npm"
          },
          {
            "name": "@vitest/snapshot",
            "direct": false,
            "version": "4.1.8",
            "ecosystem": "npm"
          },
          {
            "name": "@vitest/spy",
            "direct": false,
            "version": "4.1.8",
            "ecosystem": "npm"
          },
          {
            "name": "@vitest/ui",
            "direct": false,
            "version": "4.0.9",
            "ecosystem": "npm"
          },
          {
            "name": "@vitest/ui",
            "direct": false,
            "version": "^4.0.9",
            "ecosystem": "npm"
          },
          {
            "name": "@vitest/utils",
            "direct": false,
            "version": "4.0.9",
            "ecosystem": "npm"
          },
          {
            "name": "@vitest/utils",
            "direct": false,
            "version": "4.1.8",
            "ecosystem": "npm"
          },
          {
            "name": "acorn",
            "direct": false,
            "version": "8.15.0",
            "ecosystem": "npm"
          },
          {
            "name": "acorn-jsx",
            "direct": false,
            "version": "5.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "agent-base",
            "direct": false,
            "version": "7.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-regex",
            "direct": false,
            "version": "5.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-regex",
            "direct": false,
            "version": "6.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-styles",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-styles",
            "direct": false,
            "version": "5.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "apache-arrow",
            "direct": false,
            "version": "17.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "argparse",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "aria-query",
            "direct": false,
            "version": "5.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "array-back",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "array-back",
            "direct": false,
            "version": "6.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "array-union",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "assertion-error",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "babel-plugin-jsx-dom-expressions",
            "direct": false,
            "version": "0.40.3",
            "ecosystem": "npm"
          },
          {
            "name": "babel-preset-solid",
            "direct": false,
            "version": "1.9.10",
            "ecosystem": "npm"
          },
          {
            "name": "balanced-match",
            "direct": false,
            "version": "4.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "base64-arraybuffer",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "base64-js",
            "direct": false,
            "version": "1.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "baseline-browser-mapping",
            "direct": false,
            "version": "2.8.28",
            "ecosystem": "npm"
          },
          {
            "name": "bidi-js",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "bl",
            "direct": false,
            "version": "5.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "brace-expansion",
            "direct": false,
            "version": "5.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "braces",
            "direct": false,
            "version": "3.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "browserslist",
            "direct": false,
            "version": "4.28.0",
            "ecosystem": "npm"
          },
          {
            "name": "bubblesets-js",
            "direct": false,
            "version": "2.3.4",
            "ecosystem": "npm"
          },
          {
            "name": "buffer",
            "direct": false,
            "version": "6.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "bundle-name",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "bytes-iec",
            "direct": false,
            "version": "3.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "callsites",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "caniuse-lite",
            "direct": false,
            "version": "1.0.30001754",
            "ecosystem": "npm"
          },
          {
            "name": "chai",
            "direct": false,
            "version": "6.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "chalk-template",
            "direct": false,
            "version": "0.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "chart.js",
            "direct": false,
            "version": "4.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "chart.js",
            "direct": false,
            "version": "^4.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "cli-cursor",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "cli-spinners",
            "direct": false,
            "version": "2.9.2",
            "ecosystem": "npm"
          },
          {
            "name": "cliui",
            "direct": false,
            "version": "8.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "color-convert",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "color-name",
            "direct": false,
            "version": "1.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "color-string",
            "direct": false,
            "version": "1.9.1",
            "ecosystem": "npm"
          },
          {
            "name": "color2k",
            "direct": false,
            "version": "2.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "comlink",
            "direct": false,
            "version": "4.4.2",
            "ecosystem": "npm"
          },
          {
            "name": "command-line-args",
            "direct": false,
            "version": "5.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "command-line-usage",
            "direct": false,
            "version": "7.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "convert-source-map",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "cross-spawn",
            "direct": false,
            "version": "7.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "css-line-break",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "css-tree",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "cssstyle",
            "direct": false,
            "version": "5.3.3",
            "ecosystem": "npm"
          },
          {
            "name": "csstype",
            "direct": false,
            "version": "3.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "d3-array",
            "direct": false,
            "version": "3.2.4",
            "ecosystem": "npm"
          },
          {
            "name": "d3-binarytree",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "d3-color",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "d3-dispatch",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "d3-dsv",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "d3-ease",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "d3-fetch",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "d3-force",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "d3-force-3d",
            "direct": false,
            "version": "3.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "d3-format",
            "direct": false,
            "version": "3.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "d3-geo",
            "direct": false,
            "version": "3.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "d3-geo-projection",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "d3-hierarchy",
            "direct": false,
            "version": "3.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "d3-interpolate",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "d3-octree",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "d3-path",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "d3-quadtree",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "d3-random",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "d3-regression",
            "direct": false,
            "version": "1.3.10",
            "ecosystem": "npm"
          },
          {
            "name": "d3-scale",
            "direct": false,
            "version": "4.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "d3-scale-chromatic",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "d3-shape",
            "direct": false,
            "version": "3.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "d3-time",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "d3-time-format",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "d3-timer",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "dagre",
            "direct": false,
            "version": "0.8.5",
            "ecosystem": "npm"
          },
          {
            "name": "data-urls",
            "direct": false,
            "version": "6.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "debug",
            "direct": false,
            "version": "4.4.3",
            "ecosystem": "npm"
          },
          {
            "name": "decimal.js",
            "direct": false,
            "version": "10.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "deep-is",
            "direct": false,
            "version": "0.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "default-browser",
            "direct": false,
            "version": "5.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "default-browser-id",
            "direct": false,
            "version": "5.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "define-lazy-prop",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "define-lazy-prop",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "dequal",
            "direct": false,
            "version": "2.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "detect-libc",
            "direct": false,
            "version": "2.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "dir-glob",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "doctrine",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "dom-accessibility-api",
            "direct": false,
            "version": "0.5.16",
            "ecosystem": "npm"
          },
          {
            "name": "eastasianwidth",
            "direct": false,
            "version": "0.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "electron-to-chromium",
            "direct": false,
            "version": "1.5.254",
            "ecosystem": "npm"
          },
          {
            "name": "emoji-regex",
            "direct": false,
            "version": "10.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "emoji-regex",
            "direct": false,
            "version": "8.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "entities",
            "direct": false,
            "version": "6.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "es-module-lexer",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "esbuild",
            "direct": false,
            "version": "0.27.2",
            "ecosystem": "npm"
          },
          {
            "name": "esbuild-visualizer",
            "direct": false,
            "version": "0.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "escalade",
            "direct": false,
            "version": "3.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "escape-string-regexp",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "eslint",
            "direct": false,
            "version": "8.57.1",
            "ecosystem": "npm"
          },
          {
            "name": "eslint",
            "direct": false,
            "version": "^8.56.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": "espree",
            "direct": false,
            "version": "9.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "esquery",
            "direct": false,
            "version": "1.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "esrecurse",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "estraverse",
            "direct": false,
            "version": "5.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "estree-walker",
            "direct": false,
            "version": "3.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "esutils",
            "direct": false,
            "version": "2.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "eventemitter3",
            "direct": false,
            "version": "5.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "expect-type",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "fast-deep-equal",
            "direct": false,
            "version": "3.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "fast-glob",
            "direct": false,
            "version": "3.3.3",
            "ecosystem": "npm"
          },
          {
            "name": "fast-json-stable-stringify",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "fast-levenshtein",
            "direct": false,
            "version": "2.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "fast-uri",
            "direct": false,
            "version": "3.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "fastq",
            "direct": false,
            "version": "1.19.1",
            "ecosystem": "npm"
          },
          {
            "name": "fdir",
            "direct": false,
            "version": "6.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "fecha",
            "direct": false,
            "version": "4.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "fflate",
            "direct": false,
            "version": "0.8.2",
            "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-replace",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "find-up",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "flat-cache",
            "direct": false,
            "version": "3.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "flatbuffers",
            "direct": false,
            "version": "24.12.23",
            "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": "gensync",
            "direct": false,
            "version": "1.0.0-beta.2",
            "ecosystem": "npm"
          },
          {
            "name": "get-caller-file",
            "direct": false,
            "version": "2.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "gl-matrix",
            "direct": false,
            "version": "3.4.4",
            "ecosystem": "npm"
          },
          {
            "name": "glob",
            "direct": false,
            "version": "7.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "glob-parent",
            "direct": false,
            "version": "5.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "glob-parent",
            "direct": false,
            "version": "6.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "globals",
            "direct": false,
            "version": "13.24.0",
            "ecosystem": "npm"
          },
          {
            "name": "globby",
            "direct": false,
            "version": "11.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "graphemer",
            "direct": false,
            "version": "1.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "graphlib",
            "direct": false,
            "version": "2.1.8",
            "ecosystem": "npm"
          },
          {
            "name": "has-flag",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "highlight.js",
            "direct": false,
            "version": "11.11.1",
            "ecosystem": "npm"
          },
          {
            "name": "html-encoding-sniffer",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "html-entities",
            "direct": false,
            "version": "2.3.3",
            "ecosystem": "npm"
          },
          {
            "name": "html2canvas",
            "direct": false,
            "version": "1.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "http-proxy-agent",
            "direct": false,
            "version": "7.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "https-proxy-agent",
            "direct": false,
            "version": "7.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "iconv-lite",
            "direct": false,
            "version": "0.6.3",
            "ecosystem": "npm"
          },
          {
            "name": "ieee754",
            "direct": false,
            "version": "1.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "ignore",
            "direct": false,
            "version": "5.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "import-fresh",
            "direct": false,
            "version": "3.3.1",
            "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": "internmap",
            "direct": false,
            "version": "2.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "is-any-array",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-arrayish",
            "direct": false,
            "version": "0.3.4",
            "ecosystem": "npm"
          },
          {
            "name": "is-docker",
            "direct": false,
            "version": "2.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "is-docker",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-extglob",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "is-fullwidth-code-point",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-glob",
            "direct": false,
            "version": "4.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "is-in-ssh",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-inside-container",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-interactive",
            "direct": false,
            "version": "2.0.0",
            "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-potential-custom-element-name",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "is-unicode-supported",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-what",
            "direct": false,
            "version": "4.1.16",
            "ecosystem": "npm"
          },
          {
            "name": "is-wsl",
            "direct": false,
            "version": "2.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-wsl",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "isexe",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "js-tokens",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "js-yaml",
            "direct": false,
            "version": "4.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "jsdom",
            "direct": false,
            "version": "27.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "jsdom",
            "direct": false,
            "version": "^27.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "jsesc",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "json-bignum",
            "direct": false,
            "version": "0.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "json-buffer",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "json-schema-traverse",
            "direct": false,
            "version": "0.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "json-schema-traverse",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "json-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": "leaflet",
            "direct": false,
            "version": "1.9.4",
            "ecosystem": "npm"
          },
          {
            "name": "leaflet.markercluster",
            "direct": false,
            "version": "1.5.3",
            "ecosystem": "npm"
          },
          {
            "name": "leaflet.markercluster",
            "direct": false,
            "version": "^1.5.3",
            "ecosystem": "npm"
          },
          {
            "name": "levn",
            "direct": false,
            "version": "0.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "lightningcss",
            "direct": false,
            "version": "1.32.0",
            "ecosystem": "npm"
          },
          {
            "name": "lightningcss-android-arm64",
            "direct": false,
            "version": "1.32.0",
            "ecosystem": "npm"
          },
          {
            "name": "lightningcss-darwin-arm64",
            "direct": false,
            "version": "1.32.0",
            "ecosystem": "npm"
          },
          {
            "name": "lightningcss-darwin-x64",
            "direct": false,
            "version": "1.32.0",
            "ecosystem": "npm"
          },
          {
            "name": "lightningcss-freebsd-x64",
            "direct": false,
            "version": "1.32.0",
            "ecosystem": "npm"
          },
          {
            "name": "lightningcss-linux-arm-gnueabihf",
            "direct": false,
            "version": "1.32.0",
            "ecosystem": "npm"
          },
          {
            "name": "lightningcss-linux-arm64-gnu",
            "direct": false,
            "version": "1.32.0",
            "ecosystem": "npm"
          },
          {
            "name": "lightningcss-linux-arm64-musl",
            "direct": false,
            "version": "1.32.0",
            "ecosystem": "npm"
          },
          {
            "name": "lightningcss-linux-x64-gnu",
            "direct": false,
            "version": "1.32.0",
            "ecosystem": "npm"
          },
          {
            "name": "lightningcss-linux-x64-musl",
            "direct": false,
            "version": "1.32.0",
            "ecosystem": "npm"
          },
          {
            "name": "lightningcss-win32-arm64-msvc",
            "direct": false,
            "version": "1.32.0",
            "ecosystem": "npm"
          },
          {
            "name": "lightningcss-win32-x64-msvc",
            "direct": false,
            "version": "1.32.0",
            "ecosystem": "npm"
          },
          {
            "name": "lilconfig",
            "direct": false,
            "version": "3.1.3",
            "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.camelcase",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.merge",
            "direct": false,
            "version": "4.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "log-symbols",
            "direct": false,
            "version": "5.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "lru-cache",
            "direct": false,
            "version": "11.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "lru-cache",
            "direct": false,
            "version": "5.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "lz-string",
            "direct": false,
            "version": "1.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "magic-string",
            "direct": false,
            "version": "0.30.21",
            "ecosystem": "npm"
          },
          {
            "name": "mdn-data",
            "direct": false,
            "version": "2.12.2",
            "ecosystem": "npm"
          },
          {
            "name": "merge-anything",
            "direct": false,
            "version": "5.1.7",
            "ecosystem": "npm"
          },
          {
            "name": "merge2",
            "direct": false,
            "version": "1.4.1",
            "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.5",
            "ecosystem": "npm"
          },
          {
            "name": "minimist",
            "direct": false,
            "version": "1.2.8",
            "ecosystem": "npm"
          },
          {
            "name": "ml-array-max",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "ml-array-min",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "ml-array-rescale",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "ml-matrix",
            "direct": false,
            "version": "6.12.2",
            "ecosystem": "npm"
          },
          {
            "name": "mrmime",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "ms",
            "direct": false,
            "version": "2.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "nanoid",
            "direct": false,
            "version": "3.3.15",
            "ecosystem": "npm"
          },
          {
            "name": "nanoid",
            "direct": false,
            "version": "5.1.6",
            "ecosystem": "npm"
          },
          {
            "name": "nanospinner",
            "direct": false,
            "version": "1.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "natural-compare",
            "direct": false,
            "version": "1.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "node-releases",
            "direct": false,
            "version": "2.0.27",
            "ecosystem": "npm"
          },
          {
            "name": "obug",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "once",
            "direct": false,
            "version": "1.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "onetime",
            "direct": false,
            "version": "5.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "open",
            "direct": false,
            "version": "11.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "open",
            "direct": false,
            "version": "8.4.2",
            "ecosystem": "npm"
          },
          {
            "name": "optionator",
            "direct": false,
            "version": "0.9.4",
            "ecosystem": "npm"
          },
          {
            "name": "p-limit",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "p-locate",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "parent-module",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "parse5",
            "direct": false,
            "version": "7.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "parse5",
            "direct": false,
            "version": "8.0.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-type",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "pathe",
            "direct": false,
            "version": "2.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "pbf",
            "direct": false,
            "version": "4.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "picocolors",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "picomatch",
            "direct": false,
            "version": "2.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "picomatch",
            "direct": false,
            "version": "4.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "pmtiles",
            "direct": false,
            "version": "3.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "postcss",
            "direct": false,
            "version": "8.5.15",
            "ecosystem": "npm"
          },
          {
            "name": "potpack",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "powershell-utils",
            "direct": false,
            "version": "0.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "prelude-ls",
            "direct": false,
            "version": "1.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "prettier",
            "direct": false,
            "version": "3.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "pretty-format",
            "direct": false,
            "version": "27.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "protocol-buffers-schema",
            "direct": false,
            "version": "3.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "protomaps-leaflet",
            "direct": false,
            "version": "4.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "punycode",
            "direct": false,
            "version": "2.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "queue-microtask",
            "direct": false,
            "version": "1.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "quickselect",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "rbush",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "react-is",
            "direct": false,
            "version": "17.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "readable-stream",
            "direct": false,
            "version": "3.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "require-directory",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "require-from-string",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "resolve-from",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "resolve-protobuf-schema",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "restore-cursor",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "reusify",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "rimraf",
            "direct": false,
            "version": "3.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "rolldown",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "run-applescript",
            "direct": false,
            "version": "7.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "run-parallel",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "rw",
            "direct": false,
            "version": "1.3.3",
            "ecosystem": "npm"
          },
          {
            "name": "safe-buffer",
            "direct": false,
            "version": "5.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "safer-buffer",
            "direct": false,
            "version": "2.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "saxes",
            "direct": false,
            "version": "6.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "semver",
            "direct": false,
            "version": "6.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "semver",
            "direct": false,
            "version": "7.7.3",
            "ecosystem": "npm"
          },
          {
            "name": "seroval",
            "direct": false,
            "version": "1.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "seroval-plugins",
            "direct": false,
            "version": "1.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "shebang-command",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "shebang-regex",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "siginfo",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "signal-exit",
            "direct": false,
            "version": "3.0.7",
            "ecosystem": "npm"
          },
          {
            "name": "simple-swizzle",
            "direct": false,
            "version": "0.2.4",
            "ecosystem": "npm"
          },
          {
            "name": "sirv",
            "direct": false,
            "version": "3.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "size-limit",
            "direct": false,
            "version": "12.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "size-limit",
            "direct": false,
            "version": "^12.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "slash",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "solid-js",
            "direct": false,
            "version": "1.9.11",
            "ecosystem": "npm"
          },
          {
            "name": "solid-js",
            "direct": false,
            "version": "^1.9.11",
            "ecosystem": "npm"
          },
          {
            "name": "solid-refresh",
            "direct": false,
            "version": "0.6.3",
            "ecosystem": "npm"
          },
          {
            "name": "source-map-js",
            "direct": false,
            "version": "1.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "stackback",
            "direct": false,
            "version": "0.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "std-env",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "stdin-discarder",
            "direct": false,
            "version": "0.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "string-width",
            "direct": false,
            "version": "4.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "string-width",
            "direct": false,
            "version": "6.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "string_decoder",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "strip-ansi",
            "direct": false,
            "version": "6.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "strip-ansi",
            "direct": false,
            "version": "7.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "strip-json-comments",
            "direct": false,
            "version": "3.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "supports-color",
            "direct": false,
            "version": "7.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "svg-path-parser",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "symbol-tree",
            "direct": false,
            "version": "3.2.4",
            "ecosystem": "npm"
          },
          {
            "name": "table-layout",
            "direct": false,
            "version": "4.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "text-segmentation",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "text-table",
            "direct": false,
            "version": "0.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "tinybench",
            "direct": false,
            "version": "2.9.0",
            "ecosystem": "npm"
          },
          {
            "name": "tinyexec",
            "direct": false,
            "version": "1.2.4",
            "ecosystem": "npm"
          },
          {
            "name": "tinyglobby",
            "direct": false,
            "version": "0.2.15",
            "ecosystem": "npm"
          },
          {
            "name": "tinyglobby",
            "direct": false,
            "version": "0.2.17",
            "ecosystem": "npm"
          },
          {
            "name": "tinyrainbow",
            "direct": false,
            "version": "3.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "tinyrainbow",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "tldts",
            "direct": false,
            "version": "7.0.17",
            "ecosystem": "npm"
          },
          {
            "name": "tldts-core",
            "direct": false,
            "version": "7.0.17",
            "ecosystem": "npm"
          },
          {
            "name": "to-regex-range",
            "direct": false,
            "version": "5.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "totalist",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "tough-cookie",
            "direct": false,
            "version": "6.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "tr46",
            "direct": false,
            "version": "6.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "ts-api-utils",
            "direct": false,
            "version": "1.4.3",
            "ecosystem": "npm"
          },
          {
            "name": "tslib",
            "direct": false,
            "version": "2.8.1",
            "ecosystem": "npm"
          },
          {
            "name": "type-check",
            "direct": false,
            "version": "0.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "type-fest",
            "direct": false,
            "version": "0.20.2",
            "ecosystem": "npm"
          },
          {
            "name": "typescript",
            "direct": false,
            "version": "5.9.3",
            "ecosystem": "npm"
          },
          {
            "name": "typescript",
            "direct": false,
            "version": "^5.3.3",
            "ecosystem": "npm"
          },
          {
            "name": "typescript-eslint",
            "direct": false,
            "version": "7.18.0",
            "ecosystem": "npm"
          },
          {
            "name": "typical",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "typical",
            "direct": false,
            "version": "7.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "undici-types",
            "direct": false,
            "version": "6.21.0",
            "ecosystem": "npm"
          },
          {
            "name": "update-browserslist-db",
            "direct": false,
            "version": "1.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "uri-js",
            "direct": false,
            "version": "4.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "util-deprecate",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "utrie",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "vite",
            "direct": false,
            "version": "8.0.16",
            "ecosystem": "npm"
          },
          {
            "name": "vite",
            "direct": false,
            "version": "^6.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "vite-plugin-solid",
            "direct": false,
            "version": "2.11.10",
            "ecosystem": "npm"
          },
          {
            "name": "vite-plugin-solid",
            "direct": false,
            "version": "^2.11.8",
            "ecosystem": "npm"
          },
          {
            "name": "vitefu",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "vitest",
            "direct": false,
            "version": "4.1.8",
            "ecosystem": "npm"
          },
          {
            "name": "vitest",
            "direct": false,
            "version": "^4.0.8",
            "ecosystem": "npm"
          },
          {
            "name": "w3c-xmlserializer",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "webidl-conversions",
            "direct": false,
            "version": "8.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "whatwg-encoding",
            "direct": false,
            "version": "3.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "whatwg-mimetype",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "whatwg-url",
            "direct": false,
            "version": "15.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "which",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "why-is-node-running",
            "direct": false,
            "version": "2.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "word-wrap",
            "direct": false,
            "version": "1.2.5",
            "ecosystem": "npm"
          },
          {
            "name": "wordwrapjs",
            "direct": false,
            "version": "5.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "wrap-ansi",
            "direct": false,
            "version": "7.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "wrappy",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "ws",
            "direct": false,
            "version": "8.18.3",
            "ecosystem": "npm"
          },
          {
            "name": "wsl-utils",
            "direct": false,
            "version": "0.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "xml-name-validator",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "xmlchars",
            "direct": false,
            "version": "2.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "y18n",
            "direct": false,
            "version": "5.0.8",
            "ecosystem": "npm"
          },
          {
            "name": "yallist",
            "direct": false,
            "version": "3.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "yargs",
            "direct": false,
            "version": "17.7.2",
            "ecosystem": "npm"
          },
          {
            "name": "yargs-parser",
            "direct": false,
            "version": "21.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "yocto-queue",
            "direct": false,
            "version": "0.1.0",
            "ecosystem": "npm"
          }
        ],
        "collected": true,
        "truncated": false,
        "total_count": 589,
        "direct_count": 21,
        "indirect_count": 568
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 1,
        "merged_prs": 14,
        "open_issues": 0,
        "closed_ratio": null,
        "closed_issues": 0,
        "closed_unmerged_prs": 0
      },
      "bus_factor": 1,
      "bot_contributors": 1,
      "top_contributors": [
        {
          "type": "User",
          "login": "nicolas-geysse",
          "commits": 248,
          "avatar_url": "https://avatars.githubusercontent.com/u/8360521?v=4"
        }
      ],
      "contributors_sampled": 1,
      "top_contributor_share": 1
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "ci.yml",
        "publish.yml",
        "release.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [
        "eslint.config.js"
      ],
      "has_editorconfig": false,
      "has_linter_config": true,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "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": 10,
            "reason": "4 out of 4 merged PRs checked by a CI test -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 0,
            "reason": "Found 0/17 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": 10,
            "reason": "update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 10,
            "reason": "30 commit(s) and 0 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": 0,
            "reason": "dependency not pinned by hash detected -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "SAST tool is not run on all commits -- score normalized to 0",
            "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": 0,
            "reason": "13 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "02449a057818c02b82cfe21588c3ddb6b65163fd",
        "ran_at": "2026-07-25T12:51:27Z",
        "aggregate_score": 4.4,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": false,
      "has_dependabot_config": false
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-25T12:46:32Z",
      "oldest_open_prs": [
        {
          "number": 15,
          "created_at": "2026-07-25T12:46:28Z",
          "last_comment_at": "2026-07-25T12:46:51Z",
          "last_comment_author": "socket-security"
        }
      ],
      "last_merged_pr_at": "2026-07-03T20:39:49Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": []
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/theseedship/mcp-ui",
    "host": "github.com",
    "name": "mcp-ui",
    "owner": "theseedship"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 64,
      "inputs": {
        "security": 55,
        "vitality": 86,
        "community": 41,
        "governance": 55,
        "engineering": 76
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "excellent",
        "name": "Vitality",
        "value": 86,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "good",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 76,
            "inputs": {
              "commits_last_year": 250,
              "human_commit_share": 0.98,
              "days_since_last_push": 0,
              "active_weeks_last_year": 17
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 0 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "17/52 weeks with commits",
                "points": 11.8,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 17
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "250 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 250
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "30 commit(s) and 0 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": 100,
              "latest_release_tag": "v6.16.0",
              "releases_from_tags": false,
              "days_since_latest_release": 21,
              "mean_days_between_releases": 3.8
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "100 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 100
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 21 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 21
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~3.8 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 3.8
                    }
                  }
                ],
                "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": "maintained",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": null,
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": 21,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "last human commit 21 days ago",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_maintained",
                    "params": {
                      "days": 21
                    }
                  }
                ],
                "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": 41,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "critical",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 1,
            "inputs": {
              "forks": 0,
              "stars": 1,
              "watchers": 0,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "1 stars",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "0 forks",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "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": 77,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": true,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (MIT)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "MIT"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 18,
                "status": "met",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 6.3,
                "status": "met",
                "details": [],
                "max_points": 6.3
              }
            ]
          },
          {
            "key": "ecosystem_adoption",
            "band": "moderate",
            "name": "Ecosystem adoption (downloads)",
            "note": "Excluded from scoring (no data or not applicable): Registry dependents. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "registry_dependents"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 56,
            "inputs": {
              "packages": [
                "@seed-ship/mcp-ui-cli",
                "@seed-ship/mcp-ui-spec",
                "@seed-ship/mcp-ui-solid"
              ],
              "dependents": null,
              "ecosystems": "npm",
              "total_downloads": null,
              "monthly_downloads": 2171
            },
            "components": [
              {
                "key": "monthly_downloads",
                "name": "Monthly downloads",
                "detail": "2,171 downloads/month across npm",
                "points": 44.5,
                "status": "partial",
                "details": [
                  {
                    "code": "downloads_monthly",
                    "params": {
                      "count": 2171,
                      "ecosystems": "npm"
                    }
                  }
                ],
                "max_points": 80
              },
              {
                "key": "registry_dependents",
                "name": "Registry dependents",
                "detail": "not reported by this ecosystem",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_reported_by_this_ecosystem",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "moderate",
        "name": "Sustainability & Governance",
        "value": 55,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 13,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 1,
              "top_contributor_share": 1
            },
            "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 100% of commits",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 100
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "1 contributors",
                "points": 1.4,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "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": "good",
            "name": "Issue & PR responsiveness",
            "note": "Excluded from scoring (no data or not applicable): Issue resolution. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "issue_resolution"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 72,
            "inputs": {
              "merged_prs": 14,
              "open_issues": 0,
              "closed_issues": 0,
              "issue_closed_ratio": null,
              "closed_unmerged_prs": 0
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "no issues or no data",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_issues_or_data",
                    "params": {}
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "14/14 decided PRs merged",
                "points": 38.2,
                "status": "met",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 14,
                      "decided": 14
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/17 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "moderate",
            "name": "Ownership & stewardship",
            "note": null,
            "notes": [],
            "value": 52,
            "inputs": {
              "followers": 5,
              "owner_type": "Organization",
              "is_verified": null,
              "owner_login": "theseedship",
              "public_repos": 22,
              "account_age_days": 1203
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "organization-owned",
                "points": 30,
                "status": "met",
                "details": [
                  {
                    "code": "owner_organization",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "5 followers of theseedship",
                "points": 5.6,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 5,
                      "login": "theseedship"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "22 public repos, account ~3 yr old",
                "points": 16.5,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 22
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 3
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "@seed-ship/mcp-ui-cli",
                "@seed-ship/mcp-ui-spec",
                "@seed-ship/mcp-ui-solid"
              ],
              "ecosystems": "npm",
              "any_deprecated": false,
              "min_days_since_publish": 21
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "3 package(s) on npm",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 3,
                      "ecosystems": "npm"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 21 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 21
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "135 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 135
                    }
                  }
                ],
                "max_points": 20
              },
              {
                "key": "not_deprecated",
                "name": "Not deprecated",
                "detail": "active, not deprecated or yanked",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "package_not_deprecated",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "good",
        "name": "Engineering Quality",
        "value": 76,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "good",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 84,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": true,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "3 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 3
                    }
                  }
                ],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 24,
                "status": "met",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": "eslint.config.js",
                "points": 16,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "eslint.config.js"
                    }
                  }
                ],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "4 out of 4 merged PRs checked by a CI test -- score normalized to 10",
                "points": 20,
                "status": "met",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "moderate",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 65,
            "inputs": {
              "topics": [],
              "has_wiki": true,
              "homepage": null,
              "has_readme": true,
              "has_docs_dir": true,
              "has_description": false
            },
            "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": 0,
                "status": "missed",
                "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": 55,
        "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": 44,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 17,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 1,
              "scorecard_aggregate": 4.4
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "branch protection not enabled on development/release branches",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "4 out of 4 merged PRs checked by a CI test -- score normalized to 10",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 0/17 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": "update tool detected",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "30 commit(s) and 0 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 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool is not run on all commits -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "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": "13 existing vulnerabilities detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "dependency_advisories",
            "band": "excellent",
            "name": "Dependency advisories",
            "note": "Excluded from scoring (no data or not applicable): No advisories left outstanding. Remaining weights renormalized. Matched the npm:@seed-ship/mcp-ui-cli@5.0.0 runtime dependency closure — what installing the published package pulls in — 49 packages. Reachability is not analyzed.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "no_advisories_left_outstanding"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              },
              {
                "code": "advisories_scope_published",
                "params": {
                  "package": "npm:@seed-ship/mcp-ui-cli@5.0.0",
                  "assessed": 49
                }
              },
              {
                "code": "advisories_reachability",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "source": "osv",
              "advisories": 0,
              "affected_packages": 0,
              "assessed_packages": 49,
              "unassessed_packages": 0,
              "affected_by_severity": "none",
              "direct_affected_packages": 0
            },
            "components": [
              {
                "key": "direct_dependencies_free_of_known_advisories",
                "name": "Direct dependencies free of known advisories",
                "detail": "no direct dependency carries a known advisory",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "no_direct_advisories",
                    "params": {}
                  }
                ],
                "max_points": 35
              },
              {
                "key": "indirect_dependencies_free_of_known_advisories",
                "name": "Indirect dependencies free of known advisories",
                "detail": "no indirect dependency carries a known advisory",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "no_indirect_advisories",
                    "params": {}
                  }
                ],
                "max_points": 25
              },
              {
                "key": "no_advisories_left_outstanding",
                "name": "No advisories left outstanding",
                "detail": "no advisory carries a publication date",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "advisories_no_publication_date",
                    "params": {}
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "malicious_dependencies",
            "band": "excellent",
            "name": "Malicious dependencies",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "source": "osv",
              "meaning": "reported as a malicious package by the OpenSSF corpus; the remedy is removal or moving off the compromised name, never an upgrade of the same artifact. Versions the registry has since pulled are listed but not scored",
              "packages": [],
              "red_flag": false,
              "assessed_packages": 49,
              "malicious_packages": 0,
              "direct_malicious_packages": 0,
              "withdrawn_malicious_packages": 0,
              "installable_malicious_packages": 0
            },
            "components": [
              {
                "key": "no_dependency_reported_as_a_malicious_package",
                "name": "No dependency reported as a malicious package",
                "detail": "no dependency is reported as a malicious package",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "no_malicious_dependencies",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          },
          {
            "key": "high_risk_jurisdiction_exposure",
            "band": "excellent",
            "name": "High-Risk Jurisdiction Exposure",
            "note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
            "notes": [
              {
                "code": "jurisdiction_evidence_limits",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "meaning": "self-published location evidence; not nationality or citizenship",
              "red_flag": false,
              "exposures": [],
              "policy_countries": [
                "Russia",
                "Iran",
                "North Korea"
              ],
              "review_only_matches": 0,
              "assessed_self_published_locations": 2
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "no confirmed policy-scope location match",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "jurisdiction_no_match",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "good",
        "name": "AI Readiness",
        "value": 75,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "excellent",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 85,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 1,
              "agent_instruction_files": [
                "CLAUDE.md"
              ],
              "agent_instruction_max_bytes": 3127
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "CLAUDE.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "CLAUDE.md"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "98 of 98 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 98,
                      "sampled": 98
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "good",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 72,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "pnpm-lock.yaml"
              ],
              "has_dockerfile": false,
              "typed_language": true,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": true,
              "typecheck_configs": [
                "mcp-ui-cli/tsconfig.json",
                "mcp-ui-solid/tsconfig.json",
                "mcp-ui-spec/tsconfig.json",
                "tsconfig.json"
              ],
              "agent_commit_share": 0.92,
              "toolchain_manifests": [],
              "dependency_bot_commit_share": 0.02
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": "eslint.config.js",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "eslint.config.js"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "mcp-ui-cli/tsconfig.json, mcp-ui-solid/tsconfig.json, mcp-ui-spec/tsconfig.json, tsconfig.json",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "mcp-ui-cli/tsconfig.json, mcp-ui-solid/tsconfig.json, mcp-ui-spec/tsconfig.json, tsconfig.json"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "92 of the last 100 commits agent-authored or agent-credited",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 92,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "2 of the last 100 commits are automated dependency updates",
                "points": 8,
                "status": "met",
                "details": [
                  {
                    "code": "dependency_bot_commits",
                    "params": {
                      "count": 2,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 99,
            "inputs": {
              "primary_language": "TypeScript",
              "largest_source_bytes": 81424,
              "source_files_sampled": 173,
              "oversized_source_files": 2
            },
            "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": "2/173 source files over 60KB",
                "points": 54.4,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 173,
                      "oversized": 2
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "at_risk",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "example_dirs": [
                "examples",
                "recipes"
              ],
              "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, recipes",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "examples, recipes"
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-25T12:51:40.181723Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/t/theseedship/mcp-ui.svg",
  "full_name": "theseedship/mcp-ui",
  "license_state": "standard",
  "license_spdx": "MIT"
}

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

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

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