Öffentliches Register
Software-GesundheitsberichtSchema 0.27.0 · Metriken 1.13.0 · 2026-07-25 12:51 UTC

theseedship / mcp-ui

TypeScript · HTMLMIT★ 1 Stern⑂ 0 Forksseit Nov. 2025Auf GitHub ansehen ↗

theseedship/mcp-ui erreicht einen Gesundheitsindex von 64 von 100 und liegt damit im Bereich Mittel. Am stärksten schneidet es bei Vitality (86/100) ab, am schwächsten bei Community & Adoption (41/100). Zuletzt heute aktualisiert. Ein einzelner Mitwirkender trägt den Großteil der jüngsten Arbeit.

64
gesamt / 100
Mittel

Software-Gesundheitsindex

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

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

Bewertungsprofil

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

Eigentümerschaft

The Seed ShipOrganisation
5 Follower22 öffentliche Reposseit Apr. 2023

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

Paket-Ökosysteme

RegistryPaketVersionDownloads / MonatVersionenZuletzt veröffentlichtTags
npm@seed-ship/mcp-ui-cli5.0.041114vor 101 Tagenmcpuiclivalidationcodegencomponent-registry
npm@seed-ship/mcp-ui-spec5.5.083629vor 55 Tagenmcpuispecificationjson-schemacomponent-registry
npm@seed-ship/mcp-ui-solid6.16.0924135vor 21 Tagenmcpuisolidjscomponentsstreamingdashboardgenerative-ui

Metriken nach Kategorie

Vitalität

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

86Exzellent · 22 % des Gesamtindex
Wie die Bewertung erfolgt
36/36Push-Aktualität — letzter Push vor 0 Tagen
11.8/36Commit-Rhythmus — 17/52 Wochen mit Commits
18/18Commit-Volumen — 250 Commits im letzten Jahr
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
Verwendete Eingangsdaten
commits_last_year250
human_commit_share0,98
days_since_last_push0
active_weeks_last_year17

Release-Disziplin

100Exzellent
Wie die Bewertung erfolgt
27/27Liefert Releases aus — 100 Releases veröffentlicht
36/36Release-Aktualität — letztes Release vor 21 Tagen
27/27Release-Rhythmus — ein Release etwa alle 3,8 Tage
0/10OpenSSF Scorecard: Signed-Releases — keine Daten
Verwendete Eingangsdaten
releases_count100
latest_release_tagv6.16.0
releases_from_tagsnein
days_since_latest_release21
mean_days_between_releases3,8
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): OpenSSF Scorecard: Signed-Releases. Die verbleibenden Gewichte wurden renormalisiert.

Community & Verbreitung

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

41Gefährdet · 18 % des Gesamtindex
Wie die Bewertung erfolgt
0/60Stars — 1 Stars
0/25Forks — 0 Forks
0/15Watcher — 0 Watcher
Verwendete Eingangsdaten
forks0
stars1
watchers0
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Wie die Bewertung erfolgt
22.5/22.5README
22.5/22.5Lizenz — anerkannte Lizenz (MIT)
18/18CONTRIBUTING-Leitfaden
0/13.5Verhaltenskodex
0/7.2Issue-Vorlage
6.3/6.3PR-Vorlage
Verwendete Eingangsdaten
has_readmeja
has_licenseja
has_contributingja
has_issue_templatenein
has_code_of_conductnein
has_pull_request_templateja
Wie die Bewertung erfolgt
44.5/80Downloads pro Monat — 2.171 Downloads/Monat über npm
0/20Abhängige in der Registry — von diesem Ökosystem nicht ausgewiesen
Verwendete Eingangsdaten
packages@seed-ship/mcp-ui-cli, @seed-ship/mcp-ui-spec, @seed-ship/mcp-ui-solid
dependents
ecosystemsnpm
total_downloads
monthly_downloads2.171
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Abhängige in der Registry. Die verbleibenden Gewichte wurden renormalisiert.

Nachhaltigkeit & Governance

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

55Mittel · 24 % des Gesamtindex
Wie die Bewertung erfolgt
9/54Bus-Faktor — 1 Beitragende decken die Hälfte aller Commits ab
0/22.5Commit-Verteilung — wichtigste beitragende Person verfasste 100 % der Commits
1.4/13.5Breite der Beitragenden — 1 Beitragende
3/10OpenSSF Scorecard: Contributors — project has 1 contributing companies or organizations -- score normalized to 3
Verwendete Eingangsdaten
bus_factor1
contributors_sampled1
top_contributor_share1
Wie die Bewertung erfolgt
0/46.8Issue-Lösungsquote — keine Issues oder keine Daten
38.2/38.3PR-Annahme — 14/14 entschiedene PRs gemergt
0/15OpenSSF Scorecard: Code-Review — Found 0/17 approved changesets -- score normalized to 0
Verwendete Eingangsdaten
merged_prs14
open_issues0
closed_issues0
issue_closed_ratio
closed_unmerged_prs0
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Issue-Lösungsquote. Die verbleibenden Gewichte wurden renormalisiert.
Wie die Bewertung erfolgt
30/30Organisatorische Trägerschaft — im Besitz einer Organisation
0/20Verifizierte Domain
5.6/25Reichweite des Inhabers — 5 Follower von theseedship
16.5/25Kontohistorie — 22 öffentliche Repos, Kontoalter ca. 3 Jahre
Verwendete Eingangsdaten
followers5
owner_typeOrganization
is_verified
owner_logintheseedship
public_repos22
account_age_days1.203

Paketpflege

100Exzellent
Wie die Bewertung erfolgt
25/25Veröffentlicht & auflösbar — 3 Paket(e) auf npm
35/35Veröffentlichungsaktualität — letzte Veröffentlichung vor 21 Tagen
20/20Versionshistorie — 135 veröffentlichte Versionen
20/20Nicht veraltet — aktiv, nicht veraltet oder zurückgezogen
Verwendete Eingangsdaten
packages@seed-ship/mcp-ui-cli, @seed-ship/mcp-ui-spec, @seed-ship/mcp-ui-solid
ecosystemsnpm
any_deprecatednein
min_days_since_publish21

Engineering-Qualität

Sind grundlegende Engineering- und Dokumentationspraktiken vorhanden?

76Gut · 20 % des Gesamtindex
Wie die Bewertung erfolgt
24/24CI-Workflows — 3 Workflow(s)
24/24Tests vorhanden
16/16Linter-Konfiguration — eslint.config.js
0/9.6Pre-Commit-Hooks
0/6.4.editorconfig
20/20OpenSSF Scorecard: CI-Tests — 4 out of 4 merged PRs checked by a CI test -- score normalized to 10
Verwendete Eingangsdaten
has_cija
has_testsja
has_editorconfignein
has_linter_configja
has_precommit_confignein
Wie die Bewertung erfolgt
30/30README
25/25Dokumentationsverzeichnis
0/15Dokumentations-/Homepage-Site
0/10Repository-Beschreibung
0/10Topics
10/10Wiki
Verwendete Eingangsdaten
topics
has_wikija
homepage
has_readmeja
has_docs_dirja
has_descriptionnein

Sicherheit

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

55Mittel · 16 % des Gesamtindex

Sicherheitslage

44Gefährdet
Wie die Bewertung erfolgt
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — branch protection not enabled on development/release branches
2.5/2.5CI-Tests — 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.5Lizenz — 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 — keine Daten
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
0/7.5Vulnerabilities — 13 existing vulnerabilities detected
Verwendete Eingangsdaten
sourceopenssf_scorecard
checks_evaluated17
scorecard_versionv5.5.0
checks_inconclusive1
scorecard_aggregate4,4
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): signed_releases. Die verbleibenden Gewichte wurden renormalisiert.
Wie die Bewertung erfolgt
35/35Direkte Abhängigkeiten ohne bekannte Advisories — keine direkte Abhängigkeit trägt ein bekanntes Advisory
25/25Indirekte Abhängigkeiten ohne bekannte Advisories — keine indirekte Abhängigkeit trägt ein bekanntes Advisory
0/40Keine offenen Advisories — kein Advisory trägt ein Veröffentlichungsdatum
Verwendete Eingangsdaten
sourceosv
advisories0
affected_packages0
assessed_packages49
unassessed_packages0
affected_by_severitynone
direct_affected_packages0
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Keine offenen Advisories. Die verbleibenden Gewichte wurden renormalisiert. Abgeglichen wurde die Laufzeit-Abhängigkeitshülle von npm:@seed-ship/mcp-ui-cli@5.0.0 — das, was die Installation des veröffentlichten Pakets nach sich zieht — mit 49 Paketen. Erreichbarkeit wird nicht analysiert.

AI Readiness

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

75Gut · 0 % des Gesamtindex
Wie die Bewertung erfolgt
45/45Agentenanweisungen — CLAUDE.md
0/15Maschinenlesbare Doku (llms.txt)
40/40Lesbare Commit-Historie — 98 von 98 menschlichen Commits benennen ihre Absicht (strukturierter Betreff oder erläuternder Text)
Verwendete Eingangsdaten
has_llms_txtnein
legible_history_share1
agent_instruction_filesCLAUDE.md
agent_instruction_max_bytes3.127
Wie die Bewertung erfolgt
0/18Bootstrap mit einem Befehl
22/22Automatisierte Tests
11/11Lint-/Format-Konfiguration — eslint.config.js
11/11Statische Typprüfung — mcp-ui-cli/tsconfig.json, mcp-ui-solid/tsconfig.json, mcp-ui-spec/tsconfig.json, tsconfig.json
10/10Reproduzierbare Umgebung — lockfile
10/10Belegte Agentenpraxis — 92 der letzten 100 Commits von Agenten verfasst oder ihnen zugeschrieben
8/8Automatisierte Wartung — 2 der letzten 100 Commits sind automatisierte Abhängigkeits-Updates
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Verwendete Eingangsdaten
has_nixnein
has_testsja
lockfilespnpm-lock.yaml
has_dockerfilenein
typed_languageja
bootstrap_files
has_devcontainernein
has_linter_configja
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
Wie die Bewertung erfolgt
45/45Typprüfbarer Code — TypeScript (statisch typisiert)
54.4/55Handhabbare Dateigrößen — 2/173 Quelldateien über 60 KB
Verwendete Eingangsdaten
primary_languageTypeScript
largest_source_bytes81.424
source_files_sampled173
oversized_source_files2
Wie die Bewertung erfolgt
0/40API-Schema (OpenAPI/GraphQL/proto)
0/20MCP-Server
40/40Lauffähige Beispiele — examples, recipes
Verwendete Eingangsdaten
example_dirsexamples, recipes
has_mcp_signalnein
api_schema_files

Eckdaten

1GitHub-Sterne
1Mitwirkende
250Commits, letzte 12 Monate
0Tage seit letztem Push
100Releases
1Bus-Faktor
0offene Issues
npmPaket-Ökosysteme

Warnungen zur Datenerhebung

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

Weitere Details

OpenSSF Scorecard 4.4 / 10
4.4Gesamtwert

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

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

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

Die Installation von npm:@seed-ship/mcp-ui-cli@5.0.0 zieht 49 Pakete nach sich, direkt und transitiv: 0 tragen bekannte Advisories, davon 0 direkte Abhängigkeiten.

Keine bekannten Advisories betreffen die bewerteten Abhängigkeiten.

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

JSON-Rohbericht maschinenlesbar
{
  "data": {
    "repo": {
      "topics": [],
      "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"
}

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

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

Wie ein einzelnes Ergebnis im Gesamtregister steht: aggregierte Statistikennpm.