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

krmanik / Anki-xiehanzi

Learn, read, write and practice Mandarin by drawing strokes in Anki Desktop, AnkiDroid and AnkiMobile with audio of HSK 2.0 (HSK1-6) and HSK 3.0 (HSK 1-9), BCT and YCT words.

HTML · TypeScript · SvelteLicencia propia★ 392 estrellas⑂ 32 forksdesde mar 2020Ver en GitHub ↗

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

55
global / 100
Moderado

Índice de salud del software

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

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

Perfil de puntuación

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

Titularidad

ManiCuenta personal
127 seguidores73 repositorios públicosdesde jun 2015

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

Métricas por categoría

Vitalidad

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

52Moderado · 22% del índice global
Cómo se puntúa
18/36Recencia de push — último push hace 37 días
3.5/36Cadencia de commits — 5/52 semanas con commits
18/18Volumen de commits — 120 commits en el último año
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 21 issue activity found in the last 90 days -- score normalized to 10
Datos de entrada utilizados
commits_last_year120
human_commit_share1
days_since_last_push37
active_weeks_last_year5
Cómo se puntúa
27/27Publica versiones — 18 versiones publicadas
16.2/36Recencia de las versiones — última versión hace 215 días
12.6/27Cadencia de publicación — una versión cada ~171,4 días
0/10OpenSSF Scorecard: Signed-Releases — Project has not signed or included provenance with any releases.
Datos de entrada utilizados
releases_count18
latest_release_tagv2.3
releases_from_tagsno
days_since_latest_release215
mean_days_between_releases171,4

Comunidad y Adopción

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

60Moderado · 18% del índice global
Cómo se puntúa
42/60Estrellas — 392 estrellas
12.4/25Forks — 32 forks
1.7/15Observadores — 3 observadores
Datos de entrada utilizados
forks32
stars392
watchers3
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Cómo se puntúa
22.5/22.5README
16.9/22.5Licencia — archivo de licencia presente, no es una licencia reconocida
18/18Guía CONTRIBUTING
0/13.5Código de conducta
0/7.2Plantilla de issues
0/6.3Plantilla de PR
Datos de entrada utilizados
has_readme
has_license
has_contributing
has_issue_templateno
has_code_of_conductno
has_pull_request_templateno

Sostenibilidad y Gobernanza

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

48En riesgo · 24% del índice global
Cómo se puntúa
9/54Factor bus — la mitad de los commits recae en 1 contribuyente(s)
0.1/22.5Distribución de commits — el principal contribuyente firma el 99% de los commits
2.7/13.5Amplitud de contribuyentes — 2 contribuyentes
3/10OpenSSF Scorecard: Contributors — project has 1 contributing companies or organizations -- score normalized to 3
Datos de entrada utilizados
bus_factor1
contributors_sampled2
top_contributor_share0,994
Cómo se puntúa
42.4/46.8Resolución de issues — 91% de issues cerradas
30.6/38.3Aceptación de PR — 8/10 PR decididos fusionados
0/15OpenSSF Scorecard: Code-Review — Found 0/16 approved changesets -- score normalized to 0
Datos de entrada utilizados
merged_prs8
open_issues6
closed_issues59
issue_closed_ratio0,908
closed_unmerged_prs2
Cómo se puntúa
10/30Respaldo de la propiedad — cuenta personal (usuario)
0/20Dominio verificado — no aplicable a cuentas de usuario
15.1/25Alcance del propietario — 127 seguidores de krmanik
25/25Trayectoria — 73 repos públicos, cuenta de ~11 años
Datos de entrada utilizados
followers127
owner_typeUser
is_verified
owner_loginkrmanik
public_repos73
account_age_days4060
Excluidos de la puntuación (sin datos o no aplicable): Dominio verificado. Los pesos restantes se han renormalizado.

Calidad de Ingeniería

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

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

Documentación

65Moderado
Cómo se puntúa
30/30README
0/25Directorio de documentación
15/15Sitio de documentación / página del proyecto — https://krmanik.github.io/Anki-xiehanzi
10/10Descripción del repositorio
10/10Topics — 16 topics
0/10Wiki
Datos de entrada utilizados
topicsanki, ankidroid, mandarin, chinese-language, practice-mandarin, drawing-strokes, hanzi, hanzi-writer, anki-xiehanzi, anki-decks, chinese-characters, mandarin-chinese, hacktoberfest, hsk, hsk3, new-hsk
has_wikino
homepagehttps://krmanik.github.io/Anki-xiehanzi
has_readme
has_docs_dirno
has_description

Seguridad

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

46En riesgo · 16% del índice global
Cómo se puntúa
6/7.5Binary-Artifacts — binaries present in source code
0/7.5Branch-Protection — branch protection not enabled on development/release branches
2.5/2.5CI-Tests — 1 out of 1 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/16 approved changesets -- score normalized to 0
0.8/2.5Contributors — project has 1 contributing companies or organizations -- score normalized to 3
10/10Dangerous-Workflow — no dangerous workflow patterns detected
0/7.5Dependency-Update-Tool — no update tool detected
0/5Fuzzing — project is not fuzzed
2.2/2.5Licencia — license file detected
7.5/7.5Maintained — 30 commit(s) and 21 issue activity found in the last 90 days -- score normalized to 10
0/5Packaging — sin datos
2.5/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 5
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 — Project has not signed or included provenance with any releases.
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
0/7.5Vulnerabilities — 22 existing vulnerabilities detected
Datos de entrada utilizados
sourceopenssf_scorecard
checks_evaluated17
scorecard_versionv5.5.0
checks_inconclusive1
scorecard_aggregate3,1
Excluidos de la puntuación (sin datos o no aplicable): packaging. Los pesos restantes se han renormalizado.
Cómo se puntúa
35/35Dependencias directas libres de avisos conocidos — ninguna dependencia directa tiene un aviso conocido
0/25Dependencias indirectas libres de avisos conocidos — el conjunto transitivo no es separable de las dependencias de desarrollo y prueba en este alcance
0/40Sin avisos pendientes — ningún aviso tiene fecha de publicación
Datos de entrada utilizados
sourceosv
advisories23
affected_packages13
assessed_packages691
unassessed_packages0
affected_by_severitycritical 1, high 6, moderate 4, low 2
direct_affected_packages0
Excluidos de la puntuación (sin datos o no aplicable): Dependencias indirectas libres de avisos conocidos, Sin avisos pendientes. Los pesos restantes se han renormalizado. Se cotejaron 691 dependencias resueltas con OSV. Este repositorio no publica ningún paquete que el índice resuelva, por lo que se evaluó en su lugar el grafo de dependencias del repositorio. Ese grafo mezcla fijaciones de desarrollo y prueba con las dependencias distribuidas, de modo que solo se puntúan las dependencias declaradas en tiempo de ejecución; los hallazgos transitivos se informan como contexto y quedan excluidos de la puntuación. No se analiza la alcanzabilidad.

Preparación para IA

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

63Moderado · 0% del índice global
Cómo se puntúa
45/45Instrucciones para agentes — CLAUDE.md
0/15Documentación legible por máquinas (llms.txt)
40/40Historial de commits legible — 95 de 100 commits humanos declaran su intención (asunto estructurado o cuerpo explicativo)
Datos de entrada utilizados
has_llms_txtno
legible_history_share0,95
agent_instruction_filesCLAUDE.md
agent_instruction_max_bytes5826
Cómo se puntúa
0/18Arranque con un solo comando
22/22Pruebas automatizadas
0/11Configuración de lint / formato
11/11Verificación estática de tipos — tsconfig.json
10/10Entorno reproducible — lockfile
0/10Práctica demostrada con agentes — ningún commit con autoría de agente entre los últimos 100
0/8Mantenimiento automatizado — no se observan actualizaciones automáticas de dependencias
5/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 5
Datos de entrada utilizados
has_nixno
has_tests
lockfilespackage-lock.json
has_dockerfileno
typed_languageno
bootstrap_files
has_devcontainerno
has_linter_configno
typecheck_configstsconfig.json
agent_commit_share0
toolchain_manifests
dependency_bot_commit_share0
Cómo se puntúa
27/45Código verificable por tipos — HTML con configuración de verificación de tipos (tsconfig.json)
55/55Tamaños de archivo manejables — 0/40 archivos fuente de más de 60 KB
Datos de entrada utilizados
primary_languageHTML
largest_source_bytes57.978
source_files_sampled40
oversized_source_files0
Cómo se puntúa
0/40Esquema de API (OpenAPI/GraphQL/proto)
0/20Servidor MCP
40/40Ejemplos ejecutables — notebooks
Datos de entrada utilizados
example_dirsnotebooks
has_mcp_signalno
api_schema_files

Datos clave

392estrellas de GitHub
2contribuidores
120commits en los últimos 12 meses
37días desde el último push
18versiones publicadas
1factor bus
6issues abiertas
npmecosistemas de paquetes

Advertencias de recopilación de datos

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

Más detalle

Historial de estrellas y forks 0 ★ / 32 ⇿
0Estrellas
32Forks
18Versiones

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

01325383222020-032023-052026-06
Mayor 1Menor 2Parche 9

Cada punto abarca 6 días.

OpenSSF Scorecard 3.1 / 10
3.1agregado

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

8Binary-Artifactsbinaries present in source code
0Branch-Protectionbranch protection not enabled on development/release branches
10CI-Tests1 out of 1 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/16 approved changesets -- score normalized to 0
3Contributorsproject has 1 contributing companies or organizations -- score normalized to 3
10Dangerous-Workflowno dangerous workflow patterns detected
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
9Licenselicense file detected
10Maintained30 commit(s) and 21 issue activity found in the last 90 days -- score normalized to 10
n/dPackagingpackaging workflow not detected
5Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 5
0SASTSAST tool is not run on all commits -- score normalized to 0
0Security-Policysecurity policy file not detected
0Signed-ReleasesProject has not signed or included provenance with any releases.
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
0Vulnerabilities22 existing vulnerabilities detected
Dependencias directas 10
RegistroPaqueteRestricción de versiónManifiesto
npm@hiseb/confetti^2.1.0package.json
npm@kingdanx/edge-tts-browser^1.0.0package.json
npmchinese-s2t^1.0.0package.json
npmchinese-to-pinyin^1.3.1package.json
npmgenanki-js^2.0.0package.json
npmhanzi-writer^3.6.1package.json
npmjieba-wasm^2.0.0package.json
npmsegmentit^2.0.3package.json
npmsql.js^1.10.3package.json
npmunzipit^1.4.3package.json
Todas las dependencias 691

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

RegistroPaqueteVersiónRelación
npm@hiseb/confetti2.1.0directa
npm@kingdanx/edge-tts-browser1.0.0directa
npmchinese-s2t1.0.0directa
npmchinese-to-pinyin1.3.1directa
npmgenanki-js2.0.0directa
npmhanzi-writer3.6.1directa
npmjieba-wasm2.0.0directa
npmsegmentit2.0.3directa
npmsql.js1.10.3directa
npmunzipit1.4.3directa
npm@adobe/css-tools4.5.0indirecta
npm@asamuzakjp/css-color5.1.11indirecta
npm@asamuzakjp/dom-selector7.1.1indirecta
npm@asamuzakjp/generational-cache1.0.1indirecta
npm@asamuzakjp/nwsapi2.3.9indirecta
npm@babel/code-frame7.23.5indirecta
npm@babel/helper-validator-identifier7.22.20indirecta
npm@babel/highlight7.23.4indirecta
npm@babel/runtime7.23.9indirecta
npm@bramus/specificity2.4.2indirecta
npm@csstools/color-helpers6.0.2indirecta
npm@csstools/css-calc3.2.1indirecta
npm@csstools/css-color-parser4.1.1indirecta
npm@csstools/css-parser-algorithms4.0.0indirecta
npm@csstools/css-syntax-patches-for-csstree1.1.5indirecta
npm@csstools/css-tokenizer4.0.0indirecta
npm@emnapi/core1.10.0indirecta
npm@emnapi/runtime1.10.0indirecta
npm@emnapi/wasi-threads1.2.1indirecta
npm@exodus/bytes1.15.1indirecta
npm@floating-ui/core1.7.5indirecta
npm@floating-ui/dom1.7.6indirecta
npm@floating-ui/utils0.2.11indirecta
npm@jridgewell/gen-mapping0.3.13indirecta
npm@jridgewell/remapping2.3.5indirecta
npm@jridgewell/resolve-uri3.1.1indirecta
npm@jridgewell/source-map0.3.5indirecta
npm@jridgewell/sourcemap-codec1.5.5indirecta
npm@jridgewell/trace-mapping0.3.31indirecta
npm@lucide/svelte1.17.0indirecta
npm@napi-rs/wasm-runtime1.1.4indirecta
npm@oxc-project/types0.133.0indirecta
npm@polka/url1.0.0-next.24indirecta
npm@popperjs/core2.11.8indirecta
npm@rolldown/binding-android-arm641.0.3indirecta
npm@rolldown/binding-darwin-arm641.0.3indirecta
npm@rolldown/binding-darwin-x641.0.3indirecta
npm@rolldown/binding-freebsd-x641.0.3indirecta
npm@rolldown/binding-linux-arm-gnueabihf1.0.3indirecta
npm@rolldown/binding-linux-arm64-gnu1.0.3indirecta
npm@rolldown/binding-linux-arm64-musl1.0.3indirecta
npm@rolldown/binding-linux-ppc64-gnu1.0.3indirecta
npm@rolldown/binding-linux-s390x-gnu1.0.3indirecta
npm@rolldown/binding-linux-x64-gnu1.0.3indirecta
npm@rolldown/binding-linux-x64-musl1.0.3indirecta
npm@rolldown/binding-openharmony-arm641.0.3indirecta
npm@rolldown/binding-wasm32-wasi1.0.3indirecta
npm@rolldown/binding-win32-arm64-msvc1.0.3indirecta
npm@rolldown/binding-win32-x64-msvc1.0.3indirecta
npm@rolldown/pluginutils1.0.1indirecta
npm@rollup/plugin-inject5.0.5indirecta
npm@rollup/plugin-node-resolve15.3.1indirecta
npm@rollup/pluginutils5.4.0indirecta
npm@standard-schema/spec1.1.0indirecta
npm@sveltejs/acorn-typescript1.0.10indirecta
npm@sveltejs/adapter-static3.0.10indirecta
npm@sveltejs/kit2.63.0indirecta
npm@sveltejs/load-config0.1.1indirecta
npm@sveltejs/vite-plugin-svelte7.1.2indirecta
npm@tailwindcss/node4.3.0indirecta
npm@tailwindcss/oxide4.3.0indirecta
npm@tailwindcss/oxide-android-arm644.3.0indirecta
npm@tailwindcss/oxide-darwin-arm644.3.0indirecta
npm@tailwindcss/oxide-darwin-x644.3.0indirecta
npm@tailwindcss/oxide-freebsd-x644.3.0indirecta
npm@tailwindcss/oxide-linux-arm-gnueabihf4.3.0indirecta
npm@tailwindcss/oxide-linux-arm64-gnu4.3.0indirecta
npm@tailwindcss/oxide-linux-arm64-musl4.3.0indirecta
npm@tailwindcss/oxide-linux-x64-gnu4.3.0indirecta
npm@tailwindcss/oxide-linux-x64-musl4.3.0indirecta
npm@tailwindcss/oxide-wasm32-wasi4.3.0indirecta
npm@tailwindcss/oxide-win32-arm64-msvc4.3.0indirecta
npm@tailwindcss/oxide-win32-x64-msvc4.3.0indirecta
npm@tailwindcss/vite4.3.0indirecta
npm@testing-library/dom10.4.1indirecta
npm@testing-library/jest-dom6.9.1indirecta
npm@testing-library/svelte5.3.1indirecta
npm@testing-library/svelte-core1.0.0indirecta
npm@testing-library/user-event14.6.1indirecta
npm@tybys/wasm-util0.10.2indirecta
npm@types/aria-query5.0.4indirecta
npm@types/chai5.2.3indirecta
npm@types/cookie0.6.0indirecta
npm@types/deep-eql4.0.2indirecta
npm@types/estree1.0.9indirecta
npm@types/mdast4.0.4indirecta
npm@types/node25.9.2indirecta
npm@types/parse-json4.0.2indirecta
npm@types/resolve1.20.2indirecta
npm@types/trusted-types2.0.7indirecta
npm@types/unist2.0.11indirecta
npm@vitest/expect4.1.8indirecta
npm@vitest/mocker4.1.8indirecta
npm@vitest/pretty-format4.1.8indirecta
npm@vitest/runner4.1.8indirecta
npm@vitest/snapshot4.1.8indirecta
npm@vitest/spy4.1.8indirecta
npm@vitest/utils4.1.8indirecta
npmacorn8.16.0indirecta
npmansi-colors1.1.0indirecta
npmansi-cyan0.1.1indirecta
npmansi-gray0.1.1indirecta
npmansi-red0.1.1indirecta
npmansi-regex2.1.1indirecta
npmansi-regex5.0.1indirecta
npmansi-styles3.2.1indirecta
npmansi-styles5.2.0indirecta
npmansi-wrap0.1.0indirecta
npmanymatch2.0.0indirecta
npmapexcharts5.14.0indirecta
npmappend-buffer1.0.2indirecta
npmarchy1.0.0indirecta
npmaria-query5.3.0indirecta
npmaria-query5.3.1indirecta
npmarr-diff1.1.0indirecta
npmarr-diff4.0.0indirecta
npmarr-filter1.1.2indirecta
npmarr-flatten1.1.0indirecta
npmarr-map2.0.2indirecta
npmarr-union2.1.0indirecta
npmarr-union3.1.0indirecta
npmarray-each1.0.1indirecta
npmarray-initial1.1.0indirecta
npmarray-last1.3.0indirecta
npmarray-slice0.2.3indirecta
npmarray-slice1.1.0indirecta
npmarray-sort1.0.0indirecta
npmarray-unique0.3.2indirecta
npmasn1.js4.10.1indirecta
npmassert2.1.0indirecta
npmassertion-error2.0.1indirecta
npmassign-symbols1.0.0indirecta
npmasync-done1.3.2indirecta
npmasync-each1.0.6indirecta
npmasync-settle1.0.0indirecta
npmatob2.1.2indirecta
npmavailable-typed-arrays1.0.7indirecta
npmaxobject-query4.1.0indirecta
npmbabel-plugin-macros2.8.0indirecta
npmbabel-plugin-preval4.0.0indirecta
npmbach1.2.0indirecta
npmbalanced-match1.0.2indirecta
npmbase0.11.2indirecta
npmbase64-js1.5.1indirecta
npmbidi-js1.0.3indirecta
npmbig-integer1.6.52indirecta
npmbinary-extensions1.13.1indirecta
npmbindings1.5.0indirecta
npmbn.js4.12.0indirecta
npmbn.js5.2.1indirecta
npmbn.js5.2.3indirecta
npmbrace-expansion1.1.11indirecta
npmbraces2.3.2indirecta
npmbrorand1.1.0indirecta
npmbrowser-resolve2.0.0indirecta
npmbrowserify-aes1.2.0indirecta
npmbrowserify-cipher1.0.1indirecta
npmbrowserify-des1.0.2indirecta
npmbrowserify-rsa4.1.1indirecta
npmbrowserify-sign4.2.6indirecta
npmbrowserify-zlib0.2.0indirecta
npmbuffer5.7.1indirecta
npmbuffer-equal1.0.1indirecta
npmbuffer-from1.1.2indirecta
npmbuffer-xor1.0.3indirecta
npmbuiltin-status-codes3.0.0indirecta
npmcache-base1.0.1indirecta
npmcall-bind1.0.9indirecta
npmcall-bind-apply-helpers1.0.2indirecta
npmcall-bound1.0.4indirecta
npmcallsites3.1.0indirecta
npmcamelcase3.0.0indirecta
npmchai6.2.2indirecta
npmchalk2.4.2indirecta
npmchokidar2.1.8indirecta
npmchokidar4.0.3indirecta
npmcipher-base1.0.4indirecta
npmclass-utils0.3.6indirecta
npmcliui3.2.0indirecta
npmclone2.1.2indirecta
npmclone-buffer1.0.0indirecta
npmclone-stats1.0.0indirecta
npmcloneable-readable1.1.3indirecta
npmclsx2.1.1indirecta
npmcode-point-at1.1.0indirecta
npmcollection-map1.0.0indirecta
npmcollection-visit1.0.0indirecta
npmcolor-convert1.9.3indirecta
npmcolor-name1.1.3indirecta
npmcolor-support1.1.3indirecta
npmcommander2.20.3indirecta
npmcomponent-emitter1.3.1indirecta
npmconcat-map0.0.1indirecta
npmconcat-stream1.6.2indirecta
npmconcat-with-sourcemaps1.1.0indirecta
npmconsole-browserify1.2.0indirecta
npmconstants-browserify1.0.0indirecta
npmconvert-source-map1.9.0indirecta
npmconvert-source-map2.0.0indirecta
npmcookie0.6.0indirecta
npmcopy-descriptor0.1.1indirecta
npmcopy-props2.0.5indirecta
npmcore-util-is1.0.3indirecta
npmcosmiconfig6.0.0indirecta
npmcreate-ecdh4.0.4indirecta
npmcreate-hash1.2.0indirecta
npmcreate-hmac1.1.7indirecta
npmcreate-require1.1.1indirecta
npmcrypto-browserify3.12.1indirecta
npmcrypto-js4.2.0indirecta
npmcss-tree3.2.1indirecta
npmcss.escape1.5.1indirecta
npmd1.0.1indirecta
npmdata-urls7.0.0indirecta
npmdate-fns4.4.0indirecta
npmdebug2.6.9indirecta
npmdecamelize1.2.0indirecta
npmdecimal.js10.6.0indirecta
npmdecode-uri-component0.2.2indirecta
npmdeepmerge4.3.1indirecta
npmdefault-compare1.0.0indirecta
npmdefault-resolution2.0.0indirecta
npmdefine-data-property1.1.4indirecta
npmdefine-properties1.2.1indirecta
npmdefine-property0.2.5indirecta
npmdefine-property1.0.0indirecta
npmdefine-property2.0.2indirecta
npmdequal2.0.3indirecta
npmdes.js1.1.0indirecta
npmdetect-file1.0.0indirecta
npmdetect-libc2.1.2indirecta
npmdevalue5.8.1indirecta
npmdiffie-hellman5.0.3indirecta
npmdom-accessibility-api0.5.16indirecta
npmdom-accessibility-api0.6.3indirecta
npmdomain-browser4.22.0indirecta
npmdunder-proto1.0.1indirecta
npmduplexify3.7.1indirecta
npmeach-props1.3.2indirecta
npmelliptic6.6.1indirecta
npmend-of-stream1.4.4indirecta
npmenhanced-resolve5.23.0indirecta
npmentities8.0.0indirecta
npmerror-ex1.3.2indirecta
npmes-define-property1.0.1indirecta
npmes-errors1.3.0indirecta
npmes-module-lexer2.1.0indirecta
npmes-object-atoms1.1.2indirecta
npmes5-ext0.10.62indirecta
npmes6-iterator2.0.3indirecta
npmes6-symbol3.1.3indirecta
npmes6-weak-map2.0.3indirecta
npmescape-string-regexp1.0.5indirecta
npmesm-env1.2.2indirecta
npmesrap2.2.11indirecta
npmestree-walker2.0.2indirecta
npmestree-walker3.0.3indirecta
npmevents3.3.0indirecta
npmevp_bytestokey1.0.3indirecta
npmexpand-brackets2.1.4indirecta
npmexpand-tilde2.0.2indirecta
npmexpect-type1.3.0indirecta
npmext1.7.0indirecta
npmextend3.0.2indirecta
npmextend-shallow1.1.4indirecta
npmextend-shallow2.0.1indirecta
npmextend-shallow3.0.2indirecta
npmextglob2.0.4indirecta
npmfancy-log1.3.3indirecta
npmfast-levenshtein1.1.4indirecta
npmfdir6.5.0indirecta
npmfile-saver2.0.5indirecta
npmfile-uri-to-path1.0.0indirecta
npmfill-range4.0.0indirecta
npmfind-up1.1.2indirecta
npmfind-up5.0.0indirecta
npmfindup-sync2.0.0indirecta
npmfindup-sync3.0.0indirecta
npmfined1.2.0indirecta
npmflagged-respawn1.0.1indirecta
npmflowbite2.5.2indirecta
npmflowbite3.1.2indirecta
npmflowbite-datepicker1.3.2indirecta
npmflowbite-svelte1.33.1indirecta
npmflush-write-stream1.1.1indirecta
npmfor-each0.3.5indirecta
npmfor-in1.0.2indirecta
npmfor-own1.0.0indirecta
npmfragment-cache0.2.1indirecta
npmfs-mkdirp-stream1.0.0indirecta
npmfs.realpath1.0.0indirecta
npmfsevents1.2.13indirecta
npmfsevents2.3.3indirecta
npmfunction-bind1.1.2indirecta
npmgenerator-function2.0.1indirecta
npmget-caller-file1.0.3indirecta
npmget-intrinsic1.3.0indirecta
npmget-proto1.0.1indirecta
npmget-value2.0.6indirecta
npmglob7.2.3indirecta
npmglob-parent3.1.0indirecta
npmglob-stream6.1.0indirecta
npmglob-watcher5.0.5indirecta
npmglobal-modules1.0.0indirecta
npmglobal-prefix1.0.2indirecta
npmglogg1.0.2indirecta
npmgopd1.2.0indirecta
npmgraceful-fs4.2.11indirecta
npmgulp4.0.2indirecta
npmgulp-cli2.3.0indirecta
npmgulp-concat2.6.1indirecta
npmgulp-minify3.1.0indirecta
npmgulplog1.0.0indirecta
npmhas-flag3.0.0indirecta
npmhas-property-descriptors1.0.2indirecta
npmhas-symbols1.1.0indirecta
npmhas-tostringtag1.0.2indirecta
npmhas-value0.3.1indirecta
npmhas-value1.0.0indirecta
npmhas-values0.1.4indirecta
npmhas-values1.0.0indirecta
npmhash-base3.0.5indirecta
npmhash-base3.1.2indirecta
npmhash.js1.1.7indirecta
npmhasown2.0.4indirecta
npmhmac-drbg1.0.1indirecta
npmhomedir-polyfill1.0.3indirecta
npmhosted-git-info2.8.9indirecta
npmhtml-encoding-sniffer6.0.0indirecta
npmhttps-browserify1.0.0indirecta
npmieee7541.2.1indirecta
npmimmediate3.0.6indirecta
npmimport-fresh3.3.0indirecta
npmindent-string4.0.0indirecta
npminflight1.0.6indirecta
npminherits2.0.4indirecta
npmini1.3.8indirecta
npminterpret1.4.0indirecta
npminvert-kv1.0.0indirecta
npmis-absolute1.0.0indirecta
npmis-accessor-descriptor1.0.1indirecta
npmis-arguments1.2.0indirecta
npmis-arrayish0.2.1indirecta
npmis-binary-path1.0.1indirecta
npmis-buffer1.1.6indirecta
npmis-callable1.2.7indirecta
npmis-core-module2.13.1indirecta
npmis-data-descriptor1.0.1indirecta
npmis-descriptor0.1.7indirecta
npmis-descriptor1.0.3indirecta
npmis-extendable0.1.1indirecta
npmis-extendable1.0.1indirecta
npmis-extglob2.1.1indirecta
npmis-fullwidth-code-point1.0.0indirecta
npmis-generator-function1.1.2indirecta
npmis-glob3.1.0indirecta
npmis-glob4.0.3indirecta
npmis-module1.0.0indirecta
npmis-nan1.3.2indirecta
npmis-negated-glob1.0.0indirecta
npmis-number3.0.0indirecta
npmis-number4.0.0indirecta
npmis-plain-object2.0.4indirecta
npmis-plain-object5.0.0indirecta
npmis-potential-custom-element-name1.0.1indirecta
npmis-reference3.0.3indirecta
npmis-regex1.2.1indirecta
npmis-relative1.0.0indirecta
npmis-typed-array1.1.15indirecta
npmis-unc-path1.0.0indirecta
npmis-utf80.2.1indirecta
npmis-valid-glob1.0.0indirecta
npmis-windows1.0.2indirecta
npmisarray1.0.0indirecta
npmisarray2.0.5indirecta
npmisexe2.0.0indirecta
npmisobject2.1.0indirecta
npmisobject3.0.1indirecta
npmisomorphic-timers-promises1.0.1indirecta
npmjiti1.21.0indirecta
npmjiti2.7.0indirecta
npmjs-sha2560.9.0indirecta
npmjs-tokens4.0.0indirecta
npmjsdom29.1.1indirecta
npmjson-parse-even-better-errors2.3.1indirecta
npmjson-stable-stringify-without-jsonify1.0.1indirecta
npmjszip3.10.1indirecta
npmjust-debounce1.1.0indirecta
npmkind-of1.1.0indirecta
npmkind-of3.2.2indirecta
npmkind-of4.0.0indirecta
npmkind-of5.1.0indirecta
npmkind-of6.0.3indirecta
npmkleur4.1.5indirecta
npmlast-run1.1.1indirecta
npmlazystream1.0.1indirecta
npmlcid1.0.0indirecta
npmlead1.0.0indirecta
npmlie3.3.0indirecta
npmliftoff3.1.0indirecta
npmlightningcss1.32.0indirecta
npmlightningcss-android-arm641.32.0indirecta
npmlightningcss-darwin-arm641.32.0indirecta
npmlightningcss-darwin-x641.32.0indirecta
npmlightningcss-freebsd-x641.32.0indirecta
npmlightningcss-linux-arm-gnueabihf1.32.0indirecta
npmlightningcss-linux-arm64-gnu1.32.0indirecta
npmlightningcss-linux-arm64-musl1.32.0indirecta
npmlightningcss-linux-x64-gnu1.32.0indirecta
npmlightningcss-linux-x64-musl1.32.0indirecta
npmlightningcss-win32-arm64-msvc1.32.0indirecta
npmlightningcss-win32-x64-msvc1.32.0indirecta
npmlines-and-columns1.2.4indirecta
npmload-json-file1.1.0indirecta
npmlocate-character3.0.0indirecta
npmlocate-path6.0.0indirecta
npmlru-cache11.5.1indirecta
npmlz-string1.5.0indirecta
npmmagic-string0.30.21indirecta
npmmake-iterator1.0.1indirecta
npmmap-cache0.2.2indirecta
npmmap-visit1.0.0indirecta
npmmatchdep2.0.0indirecta
npmmath-intrinsics1.1.0indirecta
npmmd5.js1.3.5indirecta
npmmdn-data2.27.1indirecta
npmmdsvex0.12.7indirecta
npmmicromatch3.1.10indirecta
npmmiller-rabin4.0.1indirecta
npmmin-indent1.0.1indirecta
npmmini-svg-data-uri1.4.4indirecta
npmminimalistic-assert1.0.1indirecta
npmminimalistic-crypto-utils1.0.1indirecta
npmminimatch3.1.2indirecta
npmmixin-deep1.3.2indirecta
npmmri1.2.0indirecta
npmmrmime2.0.0indirecta
npmms2.0.0indirecta
npmmute-stdout1.0.1indirecta
npmnan2.25.0indirecta
npmnanoid3.3.12indirecta
npmnanomatch1.2.13indirecta
npmnext-tick1.1.0indirecta
npmnode-stdlib-browser1.3.1indirecta
npmnormalize-package-data2.5.0indirecta
npmnormalize-path2.1.1indirecta
npmnormalize-path3.0.0indirecta
npmnow-and-later2.0.1indirecta
npmnumber-is-nan1.0.1indirecta
npmobject-copy0.1.0indirecta
npmobject-inspect1.13.4indirecta
npmobject-is1.1.6indirecta
npmobject-keys1.1.1indirecta
npmobject-visit1.0.1indirecta
npmobject.assign4.1.5indirecta
npmobject.defaults1.1.0indirecta
npmobject.map1.0.1indirecta
npmobject.pick1.3.0indirecta
npmobject.reduce1.0.1indirecta
npmobug2.1.2indirecta
npmonce1.4.0indirecta
npmordered-read-streams1.0.1indirecta
npmos-browserify0.3.0indirecta
npmos-locale1.4.0indirecta
npmp-limit3.1.0indirecta
npmp-locate5.0.0indirecta
npmpako1.0.11indirecta
npmparent-module1.0.1indirecta
npmparse-asn15.1.9indirecta
npmparse-filepath1.0.2indirecta
npmparse-json2.2.0indirecta
npmparse-json5.2.0indirecta
npmparse-node-version1.0.1indirecta
npmparse-passwd1.0.0indirecta
npmparse58.0.1indirecta
npmpascalcase0.1.1indirecta
npmpath-browserify1.0.1indirecta
npmpath-dirname1.0.2indirecta
npmpath-exists2.1.0indirecta
npmpath-exists4.0.0indirecta
npmpath-is-absolute1.0.1indirecta
npmpath-parse1.0.7indirecta
npmpath-root0.1.1indirecta
npmpath-root-regex0.1.2indirecta
npmpath-type1.1.0indirecta
npmpath-type4.0.0indirecta
npmpathe2.0.3indirecta
npmpbkdf23.1.6indirecta
npmpicocolors1.1.1indirecta
npmpicomatch4.0.4indirecta
npmpify2.3.0indirecta
npmpinkie2.0.4indirecta
npmpinkie-promise2.0.1indirecta
npmpkg-dir5.0.0indirecta
npmplugin-error0.1.2indirecta
npmposix-character-classes0.1.1indirecta
npmpossible-typed-array-names1.1.0indirecta
npmpostcss8.5.15indirecta
npmpretty-format27.5.1indirecta
npmpretty-hrtime1.0.3indirecta
npmpreval.macro4.0.0indirecta
npmprism-svelte0.4.7indirecta
npmprismjs1.30.0indirecta
npmprocess0.11.10indirecta
npmprocess-nextick-args2.0.1indirecta
npmpublic-encrypt4.0.3indirecta
npmpump2.0.1indirecta
npmpumpify1.5.1indirecta
npmpunycode1.4.1indirecta
npmpunycode2.3.1indirecta
npmqs6.15.2indirecta
npmquerystring-es30.2.1indirecta
npmrandombytes2.1.0indirecta
npmrandomfill1.0.4indirecta
npmreact-is17.0.2indirecta
npmread-pkg1.1.0indirecta
npmread-pkg-up1.0.1indirecta
npmreadable-stream2.3.8indirecta
npmreadable-stream3.6.2indirecta
npmreaddirp2.2.1indirecta
npmreaddirp4.1.2indirecta
npmrechoir0.6.2indirecta
npmredent3.0.0indirecta
npmregenerator-runtime0.14.1indirecta
npmregex-not1.0.2indirecta
npmremove-bom-buffer3.0.0indirecta
npmremove-bom-stream1.2.0indirecta
npmremove-trailing-separator1.1.0indirecta
npmrepeat-element1.1.4indirecta
npmrepeat-string1.6.1indirecta
npmreplace-ext1.0.1indirecta
npmreplace-homedir1.0.0indirecta
npmrequire-directory2.1.1indirecta
npmrequire-from-string2.0.2indirecta
npmrequire-main-filename1.0.1indirecta
npmresolve1.22.8indirecta
npmresolve-dir1.0.1indirecta
npmresolve-from4.0.0indirecta
npmresolve-options1.1.0indirecta
npmresolve-url0.2.1indirecta
npmret0.1.15indirecta
npmripemd1602.0.3indirecta
npmrolldown1.0.3indirecta
npmsade1.8.1indirecta
npmsafe-buffer5.1.2indirecta
npmsafe-buffer5.2.1indirecta
npmsafe-regex1.1.0indirecta
npmsafe-regex-test1.1.0indirecta
npmsaxes6.0.0indirecta
npmsemver5.7.2indirecta
npmsemver-greatest-satisfied-range1.1.0indirecta
npmset-blocking2.0.0indirecta
npmset-cookie-parser3.1.0indirecta
npmset-function-length1.2.2indirecta
npmset-value2.0.1indirecta
npmsetimmediate1.0.5indirecta
npmsha.js2.4.12indirecta
npmside-channel1.1.0indirecta
npmside-channel-list1.0.1indirecta
npmside-channel-map1.0.1indirecta
npmside-channel-weakmap1.0.2indirecta
npmsiginfo2.0.0indirecta
npmsirv3.0.2indirecta
npmsnapdragon0.8.2indirecta
npmsnapdragon-node2.1.1indirecta
npmsnapdragon-util3.0.1indirecta
npmsource-map0.5.7indirecta
npmsource-map0.6.1indirecta
npmsource-map-js1.2.1indirecta
npmsource-map-resolve0.5.3indirecta
npmsource-map-support0.5.21indirecta
npmsource-map-url0.4.1indirecta
npmsparkles1.0.1indirecta
npmspdx-correct3.2.0indirecta
npmspdx-exceptions2.4.0indirecta
npmspdx-expression-parse3.0.1indirecta
npmspdx-license-ids3.0.17indirecta
npmsplit-string3.1.0indirecta
npmstack-trace0.0.10indirecta
npmstackback0.0.2indirecta
npmstatic-extend0.1.2indirecta
npmstd-env4.1.0indirecta
npmstream-browserify3.0.0indirecta
npmstream-exhaust1.0.2indirecta
npmstream-http3.2.0indirecta
npmstream-shift1.0.3indirecta
npmstring-width1.0.2indirecta
npmstring_decoder1.1.1indirecta
npmstring_decoder1.3.0indirecta
npmstrip-ansi3.0.1indirecta
npmstrip-bom2.0.0indirecta
npmstrip-indent3.0.0indirecta
npmsupports-color5.5.0indirecta
npmsupports-preserve-symlinks-flag1.0.0indirecta
npmsvelte5.56.2indirecta
npmsvelte-check4.6.0indirecta
npmsver-compat1.5.0indirecta
npmsymbol-tree3.2.4indirecta
npmtailwind-merge3.6.0indirecta
npmtailwind-variants3.2.2indirecta
npmtailwindcss4.3.0indirecta
npmtapable2.3.3indirecta
npmterser3.17.0indirecta
npmterser5.27.0indirecta
npmthrough22.0.5indirecta
npmthrough2-filter3.0.0indirecta
npmtime-stamp1.1.0indirecta
npmtimers-browserify2.0.12indirecta
npmtinybench2.9.0indirecta
npmtinyexec1.2.4indirecta
npmtinyglobby0.2.17indirecta
npmtinyrainbow3.1.0indirecta
npmtldts7.4.2indirecta
npmtldts-core7.4.2indirecta
npmto-absolute-glob2.0.2indirecta
npmto-buffer1.2.2indirecta
npmto-object-path0.3.0indirecta
npmto-regex3.0.2indirecta
npmto-regex-range2.1.1indirecta
npmto-through2.0.0indirecta
npmtotalist3.0.1indirecta
npmtough-cookie6.0.1indirecta
npmtr466.0.0indirecta
npmtslib2.6.2indirecta
npmtty-browserify0.0.1indirecta
npmtype1.2.0indirecta
npmtype2.7.2indirecta
npmtyped-array-buffer1.0.3indirecta
npmtypedarray0.0.6indirecta
npmtypescript5.9.3indirecta
npmunc-path-regex0.1.2indirecta
npmundertaker1.3.0indirecta
npmundertaker-registry1.0.1indirecta
npmundici7.27.2indirecta
npmundici-types7.24.6indirecta
npmunion-value1.0.1indirecta
npmunique-stream2.3.1indirecta
npmunist-util-is4.1.0indirecta
npmunist-util-stringify-position2.0.3indirecta
npmunist-util-visit2.0.3indirecta
npmunist-util-visit-parents3.1.1indirecta
npmunset-value1.0.0indirecta
npmupath1.2.0indirecta
npmurix0.1.0indirecta
npmurl0.11.4indirecta
npmuse3.1.1indirecta
npmutil0.12.5indirecta
npmutil-deprecate1.0.2indirecta
npmuzip-module1.0.3indirecta
npmv8flags3.2.0indirecta
npmvalidate-npm-package-license3.0.4indirecta
npmvalue-or-function3.0.0indirecta
npmvfile-message2.0.4indirecta
npmvinyl2.2.1indirecta
npmvinyl-fs3.0.3indirecta
npmvinyl-sourcemap1.1.0indirecta
npmvite8.0.16indirecta
npmvite-plugin-node-polyfills0.28.0indirecta
npmvitefu1.1.3indirecta
npmvitest4.1.8indirecta
npmvm-browserify1.1.2indirecta
npmw3c-xmlserializer5.0.0indirecta
npmwebidl-conversions8.0.1indirecta
npmwhatwg-mimetype5.0.0indirecta
npmwhatwg-url16.0.1indirecta
npmwhich1.3.1indirecta
npmwhich-module1.0.0indirecta
npmwhich-typed-array1.1.22indirecta
npmwhy-is-node-running2.3.0indirecta
npmwrap-ansi2.1.0indirecta
npmwrappy1.0.2indirecta
npmxml-name-validator5.0.0indirecta
npmxmlchars2.2.0indirecta
npmxtend4.0.2indirecta
npmy18n3.2.2indirecta
npmyaml1.10.3indirecta
npmyaml2.9.0indirecta
npmyargs7.1.2indirecta
npmyargs-parser5.0.1indirecta
npmyocto-queue0.1.0indirecta
npmzimmerframe1.1.4indirecta
Avisos de dependencias 13

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

PaqueteVersiónRelaciónGravedadAvisosCorregido en
cipher-base1.0.4indirectacrítica11.0.5
brace-expansion1.1.11indirectaalta35.0.7
braces2.3.2indirectaalta13.0.3
elliptic6.6.1indirectaalta1
minimatch3.1.2indirectaalta310.2.3
terser3.17.0indirectaalta15.14.2
undici7.27.2indirectaalta78.5.0
@babel/runtime7.23.9indirectamoderada18.0.0-alpha.17
bn.js4.12.0indirectamoderada15.2.3
bn.js5.2.1indirectamoderada15.2.3
micromatch3.1.10indirectamoderada14.0.8
cookie0.6.0indirectabaja10.7.0
es5-ext0.10.62indirectabaja10.10.63

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

Informe JSON sin procesar legible por máquina
{
  "data": {
    "repo": {
      "topics": [
        "anki",
        "ankidroid",
        "mandarin",
        "chinese-language",
        "practice-mandarin",
        "drawing-strokes",
        "hanzi",
        "hanzi-writer",
        "anki-xiehanzi",
        "anki-decks",
        "chinese-characters",
        "mandarin-chinese",
        "hacktoberfest",
        "hsk",
        "hsk3",
        "new-hsk"
      ],
      "is_fork": false,
      "size_kb": 229969,
      "has_wiki": false,
      "homepage": "https://krmanik.github.io/Anki-xiehanzi",
      "languages": {
        "CSS": 39611,
        "HTML": 348007,
        "Svelte": 185763,
        "JavaScript": 834,
        "TypeScript": 334545,
        "Jupyter Notebook": 74450
      },
      "pushed_at": "2026-06-16T04:44:16Z",
      "created_at": "2020-03-12T16:44:59Z",
      "owner_type": "User",
      "updated_at": "2026-07-20T08:28:55Z",
      "description": "Learn, read, write and practice Mandarin by drawing strokes in Anki Desktop, AnkiDroid and AnkiMobile with audio of HSK 2.0 (HSK1-6) and HSK 3.0 (HSK 1-9), BCT and YCT words.",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": null,
      "default_branch": "main",
      "license_spdx_raw": "NOASSERTION",
      "primary_language": "HTML",
      "significant_languages": [
        "HTML",
        "TypeScript",
        "Svelte"
      ]
    },
    "owner": {
      "blog": "krmanik.github.io",
      "name": "Mani",
      "type": "User",
      "login": "krmanik",
      "company": null,
      "location": null,
      "followers": 127,
      "avatar_url": "https://avatars.githubusercontent.com/u/12841290?v=4",
      "created_at": "2015-06-11T06:49:58Z",
      "is_verified": null,
      "public_repos": 73,
      "account_age_days": 4060
    },
    "license": {
      "state": "custom",
      "spdx_id": null,
      "raw_spdx": "NOASSERTION",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v2.3",
          "kind": "other",
          "published_at": "2025-12-20T10:28:51Z"
        },
        {
          "tag": "v2.2.1",
          "kind": "patch",
          "published_at": "2024-02-19T14:55:08Z"
        },
        {
          "tag": "v2.2.0",
          "kind": "minor",
          "published_at": "2023-03-19T05:54:59Z"
        },
        {
          "tag": "v2.1.0",
          "kind": "minor",
          "published_at": "2022-10-08T17:16:37Z"
        },
        {
          "tag": "v2.0.3",
          "kind": "patch",
          "published_at": "2022-10-05T12:36:30Z"
        },
        {
          "tag": "v2.0.2",
          "kind": "patch",
          "published_at": "2022-10-04T14:34:39Z"
        },
        {
          "tag": "v2.0.1",
          "kind": "patch",
          "published_at": "2022-10-02T14:00:33Z"
        },
        {
          "tag": "v2.0.0",
          "kind": "major",
          "published_at": "2022-09-30T16:04:04Z"
        },
        {
          "tag": "v1.7.9",
          "kind": "patch",
          "published_at": "2022-04-14T15:05:00Z"
        },
        {
          "tag": "v1.7.5",
          "kind": "patch",
          "published_at": "2021-09-29T15:06:36Z"
        },
        {
          "tag": "v1.7.4",
          "kind": "patch",
          "published_at": "2021-09-27T11:40:38Z"
        },
        {
          "tag": "v1.7.3-hsk7-9",
          "kind": "prerelease",
          "published_at": "2021-05-09T05:13:22Z"
        },
        {
          "tag": "v1.7.3",
          "kind": "patch",
          "published_at": "2021-04-14T21:31:13Z"
        },
        {
          "tag": "v1.7.2",
          "kind": "patch",
          "published_at": "2021-04-14T08:44:58Z"
        },
        {
          "tag": "v1.7",
          "kind": "other",
          "published_at": "2020-08-17T18:34:15Z"
        },
        {
          "tag": "v1.6",
          "kind": "other",
          "published_at": "2020-07-12T17:30:51Z"
        },
        {
          "tag": "v1.5",
          "kind": "other",
          "published_at": "2020-07-04T19:07:39Z"
        },
        {
          "tag": "v1.4",
          "kind": "other",
          "published_at": "2020-06-30T22:15:08Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "91a69cfe05625740601b392f8ba2193de2baac75",
          "body": "HTML5 drag-and-drop never fires from a touch, so the card-type field\nreorder only worked with a mouse. Replace it with Pointer Events on the\ngrip handle (mouse + touch + pen), using setPointerCapture and\ntouch-action:none so the drag isn't stolen by page scroll.",
          "is_bot": false,
          "headline": "fix(create): make field reorder work on touch screens",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-16T04:41:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2103ad15f30c0c6e02f4e7f8c72d9153993aec57",
          "body": "…iter\n\nThe dictionary (Definitions) card always embeds the reading's sim/trad/\npinyin/zhuyin; whether each shows is gated at runtime by the sidebar\n`defaultOff` list. That list was only seeded on the back template, so a\ndeselected field (e.g. Zhuyin) still showed inside the dictionary card on\ntwo te\n[…]\nach side's selection so a field\nnot selected on a side starts hidden, including the dictionary card's\nembedded readings. The plain (chrome-less) front has no such var, so the\nreplace is a no-op there.",
          "is_bot": false,
          "headline": "fix(create): hide deselected dictionary-card readings on front and wr…",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-15T12:15:41Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "29921897830e1d71842a40d3792cde4816e67328",
          "body": "…nt used\n\nThe writing-component template hardcodes {{Simplified}}/{{Traditional}}/\n{{Pinyin}}/{{Zhuyin}} and the {{Definitions}} dictionary card regardless of\nthe front/back selection. buildNoteTemplates prunes any field no card\nselects, so a deck with the writer + Zhuyin shown on neither side dropp\n[…]\nn'\".\n\nKeep the writer-builtin fields in the model whenever any card uses the\nwriter (covers both deselection and removal from the layout). Display logic\nis unchanged; non-writer decks still ship lean.",
          "is_bot": false,
          "headline": "fix(create): keep writer-builtin fields in model when writing compone…",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-15T11:52:25Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e46a26df9da5322edab2a2b19e513d6a852fa372",
          "body": "Drop the redundant numbered Tones legend (the palette trigger already\nshows the swatches) and align Palette / Apply to / Custom colors rows.",
          "is_bot": false,
          "headline": "feat(create): tidy Colors section into aligned label/control grid",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-15T07:09:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c5c2236487aacc4b4cd0122776e18cd786d0f42f",
          "body": "Themes, tone palettes, and card-type presets each showed every option\ninline. Now each shows only the current selection as a trigger button;\nclicking opens a PickerModal with the full list. Field grid unchanged.",
          "is_bot": false,
          "headline": "feat(create): replace inline theme/tone/preset walls with pickers",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-15T06:52:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c8b83b165e3060a4f4b208f767242c5fc9c788f1",
          "body": null,
          "is_bot": false,
          "headline": "feat(create): add drag-to-reorder hint in card type editor",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-15T06:39:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b76931c4236794dddc2ad7aa60571cdfe43ce1bc",
          "body": "text-grid was registered as a draw toggle but applyField had no case for\nit, so toggling Grid did nothing and the dashed guides always showed. Tag\nthe guide-line group with .char-grid and hide it via a body .no-grid\nclass wired through applyField (covers both init and live toggle).",
          "is_bot": false,
          "headline": "fix(writer): make Grid sidebar toggle actually hide the grid",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-15T06:28:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "10f60b66ef5dc82669f077f3597c7479eec091db",
          "body": "Finished hanzi quiz glyphs now render as one centered row instead of a\nleft-aligned block. During writing, completed mini-chars stack in a\ncolumn hugging the grid's left edge rather than the window edge or\noverlapping the grid. Guard generateHanziOnFinishQuiz against a missing\nonfinish target div to avoid a null innerHTML crash.",
          "is_bot": false,
          "headline": "fix(writer): center single/finished glyphs, stack progress left of grid",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-15T06:16:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "35f20e5a2acf2f7c5d69a3ce9bdda07a02cf4588",
          "body": null,
          "is_bot": false,
          "headline": "chore: bump HSK-3.0-words-list submodule to c00a585",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-14T06:19:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7f6fe3ae287f7df383171162f278947e9018748d",
          "body": "Git tracked the file lowercase, so the canonical GitHub URL\n(/blob/main/CONTRIBUTING.md) and the README/docs links to it 404'd.\nUppercase also triggers GitHub's contributor-guidelines banner.",
          "is_bot": false,
          "headline": "docs: rename contributing.md to CONTRIBUTING.md",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-14T06:13:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d0d79f691c7a94688ec2239e967585555a3e3bb7",
          "body": "Replace the generic GitHub boilerplate in CONTRIBUTING.md with\nproject-specific guidance: the three-part layout, where word-data\nfixes go (HSK-3.0-words-list submodule), Node 20 setup, real npm/\nvitest commands, deck-generator layering, and the byte-pinned card\ntemplate warning.\n\nAdd a matching /docs/contributing page (wired into the docs nav) and\nfix the README Contribute link, which pointed at the wrong filename\nand branch.",
          "is_bot": false,
          "headline": "docs: rewrite CONTRIBUTING and add contributing docs page",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-14T06:12:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "087a36c6ba42f9a2b990edb762be7580607f4561",
          "body": null,
          "is_bot": false,
          "headline": "docs: restructure README around download + Create tool",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-14T04:31:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6892453bf776f5e17fcfa64e36d33c5a69a855ea",
          "body": "The writing-practice card template only emitted a bare \"Examples\" on/off\ntoggle; the dedicated \"Example sentences\" section and per-example colour\ntoggles were missing (they existed only on the standard front/back cards).\nBring the writer template to parity: register the ex-colour ids, build the\ntitled section, and apply the no-ex-*-color body classes.",
          "is_bot": false,
          "headline": "fix(create): show example-sentence config in sidebar on writing cards",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-14T04:21:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2341023ce06c6bada99a15d83e8bf6df698c79a2",
          "body": null,
          "is_bot": false,
          "headline": "ci: re-trigger deploy after legacy link fix",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-14T04:02:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "13f00fc8dbe720f0d49b3e50a26f60353bfe246f",
          "body": null,
          "is_bot": false,
          "headline": "ci(deploy): build from main, serve legacy at /v1, redirect /dev",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-14T03:58:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "95662a61e9af2614c45addf81eac4b4373f2a374",
          "body": "Port vite svelte",
          "is_bot": false,
          "headline": "Merge pull request #77 from krmanik/port-vite-svelte",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-14T03:51:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f74efdbb1faa698c339deb4f6c1158db1fbc3894",
          "body": "CSV read field display-names off Word props that didn't exist\n(Examples/Breakdown/Radical/HskLevel/Frequency), leaving those\ncolumns blank. Map each field to plain text and fetch example\nsentences (simplified + pinyin + translation) per word.",
          "is_bot": false,
          "headline": "fix(create): populate all fields in CSV export",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-14T03:49:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1ffe0a0260dcd9106a7345619e903597dcdce60c",
          "body": "Words missing from cedict.db fall back to Google Translate. Without a\ncache, regenerating decks (HSK 1 … 7-9) refetched the same words every\nrun. Add a 3-layer lookup: committed seed JSON → localStorage → network,\nwith in-flight dedup for concurrent requests in a single run. Seed the\nknown fallback words in static/data/gt_glosses.json so they never hit\nthe network.",
          "is_bot": false,
          "headline": "perf(create): cache google translate fallback lookups",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-14T03:42:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "87e642d6886e9c0481380397ebd415904a19b4ac",
          "body": "The hanzi-writer quiz grid was injected only after the async stroke-data\nfetch resolved, so the empty target div stayed 0px until then — the grid\npopped in white->gray late and shoved the layout.\n\n- prefillGrid() paints the gray grid synchronously at the writer's exact\n  size before the fetch, so th\n[…]\n~12px taller than the writer's final SVG.\n- reveal ch_load_status during prefill so its margin-top:-36px (net -12px)\n  no longer pulls the layout up when doPractice runs.\n- fade the grid in on appear.",
          "is_bot": false,
          "headline": "fix(writer): prefill grid sync to kill load flicker",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-14T03:29:31Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d177906579ee3bb797b3fec11ff950179f3296f8",
          "body": "Generating large decks (5k+ words) was slow/froze the UI. Three fixes:\n\n- cedict lookups filter WHERE simplified but only cedict.word is indexed,\n  so every word full-scanned 120k rows. Build idx_cedict_simplified once at\n  load (in-memory). HSK 5.6k-word add: ~69s -> ~5s.\n- getSentences used senten\n[…]\nr tokens.\n- Cache compiled SQL statements (reset/reuse vs prepare+free), cache\n  per-character breakdown info, throttle batch progress writes, and replace\n  the paragraph dedup O(n^2) scan with a Set.",
          "is_bot": false,
          "headline": "perf(create): index dict + sentence lookups for large decks",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-14T03:09:27Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e75cf8ada84004a926df329df8aed59989a0cc46",
          "body": "Wrap per-word lookups in the File / HSK / BCT / YCT add loops in\ntry/catch so one failed lookup is skipped rather than aborting the whole\nbatch, matching the paragraph flow.",
          "is_bot": false,
          "headline": "fix(create): skip failed lookups instead of aborting batch",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-14T02:30:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0413db2c70fca0c1992862774a29fdd9639e7174",
          "body": "Tokens with no tone digit / vowel (already-toned pinyin, punctuation,\njunk) make parse() return null; dereferencing it crashed conversion.\nEmit the raw syllable instead. Adds test coverage.",
          "is_bot": false,
          "headline": "fix(pinyinzhuyin): guard null parse() to avoid crash on untoned tokens",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-14T02:30:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "43d7da6aee547c3030c78d6fd8545169531bda2b",
          "body": "Seed each note's guid on word identity (Simplified+Traditional+model)\nvia FNV-1a instead of genanki's default field-hash, so styling/preset\ntweaks no longer shift guids — re-importing an updated deck updates\nexisting notes rather than duplicating them.\n\nAdd noteTags(): emit Xiehanzi + HSK::n / POS::x / Frequency::band\n(underscore-joined, space-free) so users can filter and build custom\nstudy in Anki. Wire both into generateDeck's addNote. Covered by tests.",
          "is_bot": false,
          "headline": "feat(deck): stable note GUIDs + hierarchical HSK/POS/frequency tags",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-14T02:30:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8f45a2b1240a762c141b65eb77330a6dbfbbf20e",
          "body": "+page.svelte was split from ~1600 lines into focused components; note\nthe orchestrator size and where the UI now lives.",
          "is_bot": false,
          "headline": "docs: refresh create page description after component split",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-13T14:07:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1432ae329710a68ad0ee5ff4535a98da782c1f22",
          "body": "ExportSuccess mounts @hiseb/confetti, which calls element.animate and\nneeds a canvas 2d context jsdom provides neither of, throwing two\nuncaught errors during the create-page tests. Stub element.animate and\nmock the confetti module so the burst is a no-op under test.",
          "is_bot": false,
          "headline": "test: silence confetti jsdom errors in test setup",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-13T14:07:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "045e47520dbaebeff38319fbbf64cda05d7736b6",
          "body": "Break src/routes/create/+page.svelte (~1585 lines) into composable\nparts; the page is now ~390 lines of orchestration only (state, derived\npreviews, persistence effects, export logic, layout).\n\nNew components: AppearancePanel, CardTypeEditor, PresetConfirmModal,\nLivePreview, WordSourceInput, BreakWo\n[…]\nia $bindable props (words, template, tabs/tabContent/order/\nincludeAudio, page); cross-cutting actions via callbacks. Card model IDs,\ntemplates and .apkg output untouched. check clean, 154 tests pass.",
          "is_bot": false,
          "headline": "refactor(create): split 1.6k-line page into focused components",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-13T13:45:17Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "58dd80b836dac7806a089329d394f03acb5fb27e",
          "body": null,
          "is_bot": false,
          "headline": "docs: add CLAUDE.md for Claude Code guidance",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-13T13:25:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "de01780394c834df117ae5ab6feab55e8db9844d",
          "body": "…sets",
          "is_bot": false,
          "headline": "feat(create): default separator + control buttons to back side of pre…",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-13T07:43:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "86e24a6fef73d9e8a084effd16d5b03c32ce3584",
          "body": "Show a modal after each deck export: confetti, a GitHub\nstar prompt, and social share buttons (X, Facebook, WhatsApp, Telegram,\nReddit, LinkedIn) that open native share intents.\n\nAdd 'Do not show again' — persists to localStorage; when set, the popup\nis suppressed and a Share entry appears in the nav menu (opening the\nsame share dialog). Share data/logic extracted to share.svelte.ts and a\nreusable ShareButtons component.",
          "is_bot": false,
          "headline": "feat(create): export-success popup with confetti, star & share",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-13T07:30:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f433c689f9656575b12c4f5bdf3e28dfbb10102f",
          "body": null,
          "is_bot": false,
          "headline": "docs: note AI-generated code (Claude Opus 4.8) in README",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-13T06:30:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "474fdf05d7fe976eb214c94b3dc9b0242ccc3290",
          "body": "Add 'Export a Deck' and 'Studying cards' doc pages, wire both into the\ndocs sidebar nav. Expand Introduction, Features and FAQ with word\nsources (HSK/BCT/YCT), tone palettes, card themes and example sentences.\nAdd table styling to MarkdownLayout.",
          "is_bot": false,
          "headline": "docs: add export & studying guides, expand intro/features/faq",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-13T06:29:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "54c36b88c88cea57d039477856a5c6ef3d16d92a",
          "body": null,
          "is_bot": false,
          "headline": "feat(create): default deck name to 'Anki xiehanzi {date} {unix}'",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-12T11:19:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0d9e4a4ee6d6c47677ec617acdcde345edb6189f",
          "body": "Add YCT levels 1–4 as a word source on the create page. YCT entries\ncarry their own meanings; words missing from CEDICT use the bundled\nmeaning directly instead of calling Google Translate.\n\n- wordsByYct() returns {word, meaning}[] for offline fallback\n- lookupWordWithFallback() tries CEDICT, falls back to supplied meaning\n- loadYctMeanings() feeds yct_words.json into simpleMeaningOf()\n- loadDict() loads YCT meanings eagerly alongside HSK",
          "is_bot": false,
          "headline": "feat(yct): add YCT level word source to create page",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-12T11:09:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e1f76357b0c364f70fed5403b13bef0b892d4ae9",
          "body": "- BCT_words.json: 600 (A) + 4000 (B) words converted from txt lists\n- BCT_missing_glosses.json: Google Translate glosses for 69 words absent from cedict\n- cedict.ts: wordsByBct() loads BCT_words.json; lookup() falls back to BCT glosses on cedict miss\n- create page: BCT Level option in source selector with A/B toggle + progress bar",
          "is_bot": false,
          "headline": "feat(bct): add BCT A/B word source to create page",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-12T09:03:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8ae2ebf5b23e4f2344e360ba56eb97ade95d34a2",
          "body": "Erhua entries (e.g. 面条儿) only carried the gloss \"erhua variant of\n麵條|面条[mian4 tiao2]\" with no actual meaning. resolveErhua() now parses\nthe trad|simp[pinyin] reference, looks the base word up in the already-loaded\ncedict.db and appends its real definition. Pinyin-keyed pick for multi-reading\nbases, recursion guard, no DB writes. Covers all 267 erhua refs.",
          "is_bot": false,
          "headline": "feat(dict): resolve erhua variant glosses to base definition at runtime",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-12T04:10:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c55522148a42a6593cd6fcf8a96190f49e05239d",
          "body": "Unify --pos-chip-pad to 5px 11px across all 20 themes so POS chips match\nthe meta-badge box (same font-size, line-height) and stop misaligning on\nthe POS row. Give every theme real POS chip bg + theme-context border,\na distinct dominant-sense fill, accent-tinted HSK chips, and warm freq\nchips so the three chip kinds are visually separable. Add --chip-border\nso dominant chips can carry a border (brutalist/editorial).",
          "is_bot": false,
          "headline": "fix(themes): align meta-cluster chips, distinct POS/HSK/freq fills",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-12T04:00:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bd71c895af6af1fa1bbe3ef167758c8e2ae0d534",
          "body": "Sidebar buttons placed dark --chip-fg text on an --accent background;\nin dark themes --chip-fg is near-black, so the active Front/Back toggle,\nclose button and 简/繁 select rendered dark-on-accent (unreadable).\n\n- Add --on-accent (text that contrasts --accent) to all 20 theme\n  variants, plus a fallba\n[…]\n give the\n  inactive .front-back toggle an explicit color + visible border.\n- Preview POS chip now uses the real --pos-chip-* tokens (incl.\n  --pos-chip-border) instead of mimicking the dominant chip.",
          "is_bot": false,
          "headline": "fix(themes): readable accent-fg via --on-accent token",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-12T03:46:45Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "014f24745a9acf29427cfefcec60bd4a97d27fa9",
          "body": "…colors\n\nRebuild all 20 theme variants with exact colors from reference HTML. Add\n~35 new CSS vars (--panel-border, --panel-bg, --panel-title-bg,\n--section-title-*, --tile-*, --radical-chip-*, --pos-chip-*, --hsk-*,\n--freq-*, --def-num-*, --example-item-*, --body-bg-image) consumed by\ndeckTemplate.t\n[…]\nhardcoded values.\n\nHanziWriter stroke color reads live --tone-1..5 CSS vars at runtime so\nstrokes follow the active tone palette; outline/drawing colors follow\n--stroke/--outline/--drawing theme vars.",
          "is_bot": false,
          "headline": "fix(themes): full theme fidelity — panels, sidebar, hanziwriter tone …",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-12T03:00:59Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3383d51a25bfe4c025aa46002fdc095b7e31522e",
          "body": "…tine card\n\nShow a dialog asking whether to replace the active card type or add a new\none when clicking a quick-start preset after the default card has been\nmodified. Pristine-default case still silently replaces as before.\n\nFix pre-existing test failures: update ICON selector from removed static\nbg class to inline-style attribute, fix Example Sentences preset count\nand text-case mismatch in test assertions.",
          "is_bot": false,
          "headline": "feat(presets): prompt replace-or-add when clicking preset on non-pris…",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-11T10:14:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "99c3137a91ecb0f373a7241ffd61be5ec0701a11",
          "body": "…ircle-button themes",
          "is_bot": false,
          "headline": "fix(themes): remove accent btn-next-bg from 4 themes, add border to c…",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-11T08:37:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ce969c222b9c9ba20adf6972d8a839a88cc0f0bd",
          "body": "- Group audio, theme, colors, typography into labeled cards\n- Move Mode (auto/light/dark) to Card Theme header row\n- Add colorPinyin prop to CardPreview; pinyinHtml() applies tone colors\n- Add Preview button on settings page (loads 写/汉字/的/比如/好)\n- Hide Back/Generate footer in ExportPreview when no onGenerate passed\n- Fix select min-width (palette 9rem, font 10rem) to stop arrow overlap\n- Add pt-9 to sticky right preview column",
          "is_bot": false,
          "headline": "feat(settings): regroup appearance UI and add pinyin color preview",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-11T07:31:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e0707f6175724e7bd6b39ada9c305b0df13be87f",
          "body": "…ector\n\nIntroduce CARD_THEME_GROUPS with 10 light/dark pairs (minimal, ink-paper,\noled-dark, soft-pastel, editorial, modern-app, bold-brutalist,\nvintage-dictionary, frosted-aurora, zen-muji). Each theme adapts button\nshapes, container radii, chip styling, and colors to match design spec.\n\nresolveTheme() picks the correct variant based on auto/light/dark mode;\nbuildGlobalCss() emits .card.night_mode{} overrides for Anki auto-mode.\nMode selector lives above the live previewer in CardCustomizer.",
          "is_bot": false,
          "headline": "feat(themes): add 10 paired card themes with auto/light/dark mode sel…",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-11T07:08:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "29ee93fc55534e0af95a54fe1c471b56effa3d37",
          "body": null,
          "is_bot": false,
          "headline": "feat(presets): add Example Sentences card type",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-11T01:18:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ee12904e72be37d16a7b870a3b68a53eab5a8d2a",
          "body": "- Convert all input (paragraph, word, file) to Simplified via Chinese.t2s\n  before CEDICT lookup and jieba segmentation, so Traditional-form words\n  (e.g. 英語→英语) are found in the dictionary\n- Track per-word progress in generateFromParagraph (N/total status + bar)\n- Catch per-word Google Translate CO\n[…]\nfailed word — tries longest substring first,\n  silently skips single characters\n- Modal shows matched sub-words with checkboxes (all pre-selected); user\n  can multi-select / deselect-all before adding",
          "is_bot": false,
          "headline": "feat(input): paragraph progress, CORS-fail toast, and t2s normalization",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-11T01:08:29Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d4cd68bdd49e13d340362b6a328b13bf5bfa0a3e",
          "body": "Meta layout:\n- POS, HSK level and frequency now share a single wrapping row via a\n  synthesized `meta-row` cluster (withMetaCluster), threaded through the\n  existing group machinery so the export, the export preview and the\n  designer live preview all match. Distinct pill styles per chip; chips are\n\n[…]\nve in the field value so the wrapper self-hides when empty.\n- Add a divider between successive readings in the definitions block.\n\nTests cover the cluster, the titled cards and the definition divider.",
          "is_bot": false,
          "headline": "feat(card): one-row meta chips + titled info cards",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-11T00:42:41Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "283184967260f78aec5bf506f887b9935a0bd8f3",
          "body": "The writer card never colored its big simplified/traditional hanzi because\nthe stroke engine read char_sim/char_trad via innerHTML — injecting tone\nspans would have broken the character parser. Read the character list with\ntextContent instead, then call colorChars() in initWriterCard so the\ndisplayed hanzi is tinted like every other card. Also add the missing\n.char-tone5 rule so neutral-tone syllables aren't left black.",
          "is_bot": false,
          "headline": "fix(writer): tone-color the big hanzi on writer cards",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-11T00:42:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b47dd959f3b7cce1a942ee397f9667e12938fd7b",
          "body": "When Writing Component was ticked, the export switched to the legacy writer\ntemplate which hardcodes only Simplified/Traditional/Pinyin/Zhuyin/Definitions.\nAll other selected fields (PoS, Simple Meaning, Breakdown, Radical, HSK,\nFrequency, Examples) were silently dropped from both the exported deck \n[…]\nwriter template in field order, split around the dictionary card so vertical\nposition relative to Definitions is preserved.\n\nAdd deckTemplate.test.ts with 5 cases covering the regression and ordering.",
          "is_bot": false,
          "headline": "fix(export): inject all selected fields into writer card templates",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-10T23:54:19Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "82778186d48b5ff588957572218c8f6fa8ebbeb6",
          "body": "Preview opens the export preview modal; Generate runs deck export directly\nwithout opening the modal. Modal retains its own Generate deck button.",
          "is_bot": false,
          "headline": "feat(create): split Preview & Generate into separate buttons",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-10T23:54:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b6765d975fa8a7a45e80209fec5fafe9c75e95e2",
          "body": "srcdoc iframes resolve relative URLs against the parent page (about:srcdoc),\ncausing _hanzi-writer.min.js and _hanzi-writer-data.json to 404. Rewrite\nboth to absolute app-served paths instead of stripping the script tag.",
          "is_bot": false,
          "headline": "fix(preview): rewrite writer/data paths for srcdoc iframe",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-10T23:53:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "569e9f0edafec03a8e61734e56ad5c0a2a9144d3",
          "body": null,
          "is_bot": false,
          "headline": "update example sentences",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-08T17:38:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "816d85d25c5bb4451abd6833ae56a904a0df7e47",
          "body": "The toolbar play button is now added/removed by the Audio field's front/back\ncheckbox per card type (master 'Include Audio' still gates TTS media). barFor()\nkeeps the play button + hidden [sound:] data div only on the side(s) that select\nAudio; otherwise the bar shows menu/more only. No standalone audio button. New\ncards default Audio on the back. Control bar + separator remain per-side\nselectable, reorderable, and functional on both sides.",
          "is_bot": false,
          "headline": "feat(create): per-card, per-side audio play button in the toolbar",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-08T17:38:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "73c2e04b4392de5a94a65b721e2c7e1f9fc9f6f7",
          "body": "Flex order was always computed from the fixed DEFAULT_BODY_ORDER, so moving a\nfield up/down only changed DOM order (overridden by CSS order) with no visible\neffect. elementOrder/groupOrder/buildCardCss now take the user's field sequence\n(bodyOrder, derived from the ordered fields list) so reordering reflects in both\nthe live preview and the exported card.",
          "is_bot": false,
          "headline": "fix(create): field reorder now drives card order",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-08T17:38:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4b4fd66fa7d1e7fbcbaf2d9f30a6c1345732406a",
          "body": "CardPreview renders members inside their group container (snippet-based) with\nthe group's flex/block + row/column layout and box style; group containers are\nselectable. CardCustomizer gains a Groups section: pick 2+ on-card fields and\ngroup them, select a group to edit its layout/background/border/radius/\npadding/margin, or ungroup. Groups flow through the live previews and persist\nin the card's tabContent (reset clears them).",
          "is_bot": false,
          "headline": "feat(create): group/ungroup designer UI + grouped preview",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-08T17:38:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f3d2ea773cf049e87d36c58bbeec0c210349eab9",
          "body": "Add CardGroup (members + display flex/block + row/column direction + box\nstyle) to a card's tabContent. buildNoteTemplates wraps grouped members into a\nsingle .gN container on both sides via wrapGroups; buildCardCss emits the\ncontainer's flex layout, box style and flex order. Re-add borderStyle/boxShadow\nto ElementStyle so group containers can have a visible border/shadow.",
          "is_bot": false,
          "headline": "feat(create): element group data model + export rendering",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-08T17:38:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "71f57dbecca3dbb2b512caa319af87395a398a58",
          "body": "Exact preview: extract per-note field HTML into shared buildNoteFields (single\nsource of truth, no drift) and add renderCardHtml, which substitutes real field\nvalues into the actual compiled template + DECK_CSS. ExportPreview renders each\nside in a sandboxed iframe (allow-scripts allow-same-origin);\n[…]\nexample sentences are no longer\nfetched/embedded (nor is their sidebar section shown), instead of shipping\nhidden. buildNoteTemplates filters via fieldUsedByAnyCard; Audio stays gated by\nincludeAudio.",
          "is_bot": false,
          "headline": "feat(create): pixel-exact export preview + drop unused fields",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-08T17:38:45Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "386d1ccd5f9ef4354a975e77d7fec418318990ae",
          "body": "Add a commonPinyinOnly template option that shows only a multi-reading\ncharacter's most common reading (longest definition) in the standalone\nPinyin/Zhuyin fields — the Definitions block is never touched and keeps every\nreading. commonReadingIndex/displayReadings in deck.ts drive the export field\nbuilder and the live preview; surfaced as a global toggle.",
          "is_bot": false,
          "headline": "feat(create): show-most-common-pinyin option",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-08T17:38:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6df200099430934098940d5c55518c99a0aaaa40",
          "body": "SUBTLEX has duplicate rows per homograph; the original cedict.db build picked\na wrong low-frequency row for ~327 common single-char words, tagging them\nNoun (.n.) — 了 showed Noun instead of Particle, 个 instead of Classifier,\n来 instead of Verb. Repopulated all_PoS/dominant_PoS from each word's\nhighest-frequency SUBTLEX row (327 words corrected toward the authoritative\nsource). Reproducible via HSK-3.0-words-list/Scripts and data/fix_cedict_pos.py.",
          "is_bot": false,
          "headline": "fix(data): correct part-of-speech from highest-frequency SUBTLEX row",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-08T17:38:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "34c6c348a919978af9dfe5003ab3ce0a91756466",
          "body": "Render the Examples field as a collapsible card reusing the Definitions\nchrome (meaning-bar + toggleMeaning), generalising toggleMeaning/initMeaning\nto drive both cards with separate persistence keys.\n\nDecouple example-sentence colour from the main card: example hanzi/pinyin now\nuse dedicated ex-ton\n[…]\nences' sidebar section that groups the Examples show/hide toggle\nwith independent Color hanzi / Color pinyin toggles (no-ex-hanzi-color /\nno-ex-pinyin-color), defaults seeded from the example options.",
          "is_bot": false,
          "headline": "feat(create): collapsible examples + separate example colour controls",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-08T17:38:45Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d9f828ea62cac3b180d3ae55697691131b2931ac",
          "body": "Make each example-sentence line its own customizable element in the\nAdvanced Card Designer — exampleSimplified / exampleTraditional /\nexamplePinyin / exampleTranslation — each with independent color, size,\nalignment, spacing and show/hide, scoped via the .example-* classes.\nPreview rows are individually selectable/styleable. Customiser test.",
          "is_bot": false,
          "headline": "feat(create): per-sub-part styling for example sentences",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-08T17:38:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "72f78e082c8acfad8b82248b0660dea074141410",
          "body": "…n, traditional, length, color)\n\nUse the new sentence-db columns (pinyin, translation, n_chars):\n- getSentences gains a length filter (n_chars); getSmartSentences returns\n  {simplified, traditional, pinyin, translation}, traditional via chinese-s2t,\n  ranked by difficulty+length.\n- Deck-wide Example\n[…]\nen the field is used. Card previewer fetches and renders the real ranked\n  sentences for the previewed word, honoring the options.\nPure tone + rank helpers, unit tests, export round-trip + page tests.",
          "is_bot": false,
          "headline": "feat(create): full example-sentence customisation (pinyin, translatio…",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-08T17:38:45Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "fa1f816a20f0316204b48c723addca0b1d7b334b",
          "body": "Add an Examples field sourced from hsk_sentences.db, ranked by a composite\nscore (difficulty + length) so easy, concise sentences surface first.\nSentences are fetched lazily at export and only when the field is used (the\nsentences db is a separate ~5MB download); generateDeck takes an injectable\nget\n[…]\nes for testability. Wired end-to-end: FIELD_DIV/TOGGLE, scoped\nelement + body order, sidebar toggles, CSS, preview + customiser element.\nPure rankSentences module + unit tests, export round-trip test.",
          "is_bot": false,
          "headline": "feat(create): smart example sentences field",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-08T17:38:45Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5d9dc17ea6381e6b1343835684708603f6d3f501",
          "body": "Generate now opens an Export Preview modal: per-card-type front/back\npreviews rendering the ACTUAL deck words (prev/next pager) with the chosen\nstyling + palette, alongside deck stats (counts, audio flag, HSK-level and\nfrequency-band breakdowns). CardPreview gains an optional `word` prop and\nfalls back to the 中国 example when none is given. Generation runs from\ninside the modal. Pure deckStats module + tests, component + page tests.",
          "is_bot": false,
          "headline": "feat(create): export preview with deck stats + real-word paging",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-08T17:38:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "061d9b890ddae61a4d4ab7341021b991cf2dba49",
          "body": "Move tone colors / palette / font / collapse-definitions under a\n'Customize appearance' accordion (open by default, collapsible) so the\nstyling controls are grouped and dismissable. Add a helper line\nclarifying the front/back field ticks. Page test covers the accordion.",
          "is_bot": false,
          "headline": "feat(create): group styling under a 'Customize appearance' accordion",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-08T17:38:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c714d8f6a46a06b89c19e94e7ae724bb4577282b",
          "body": "Add a reusable UnitInput (number box + unit dropdown, px default, em/rem/%)\nand use it across the Card Designer for spacing above/below, padding, hr\nmargin and custom font sizes — replacing free-text CSS-length fields.\nComponent unit tests.",
          "is_bot": false,
          "headline": "feat(create): unit-selector inputs for spacing, padding + font size",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-08T17:38:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4d7e3fca2c0dde62504aeb5fe88894d7f64bc07a",
          "body": "…edit\n\nRework the customiser as the Advanced Card Designer:\n- Edit template + tabContent live (snapshot-based Cancel) so the page stays\n  in sync; add a card-type tab switcher when more than one type exists.\n- Surface the tone palette + custom colors inside the designer.\n- Remove the card-level text-alignment control; add a card-wide text color.\nUpdate + extend component tests (switcher, alignment removal).",
          "is_bot": false,
          "headline": "feat(create): Advanced Card Designer — card-type tabs, palette, live …",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-08T17:38:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "03d845ffc8710e2abc37bdded94f9a7219297f5f",
          "body": "Add a tone-palette selector: Standard (current), Pleco (red/green/blue/\npurple/gray), MDBG Type 1/2/3 (published hex), and Custom with a per-tone\ncolor picker. The deck-wide template — including a custom palette — now\npersists to localStorage and is restored on refresh. Export honors the\npalette via buildGlobalCss (--tone-N vars + .toneN classes, below the\ncolour-toggle specificity); card + word-list previews reflect it inline.\nPure tonePresets module + unit tests.",
          "is_bot": false,
          "headline": "feat(create): tone-color palette presets + custom colors",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-08T17:38:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dd04f90c6a102d47e24447bcb78bd52011b368e2",
          "body": "New 'HSK Level' word source on step 2: pick one or more levels (1–6, 7+)\nand populate the list with every word at those levels, most-common first\n(rank-ordered). Backed by cedict.wordsByLevel with boundary-safe matching\nover comma-joined level tokens. Progress bar + page interaction test.",
          "is_bot": false,
          "headline": "feat(create): add words by HSK level",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-08T17:38:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3baa7edf0da3b1965123649207aec4f181f13212",
          "body": "Add Beginner / Intermediate / Reading / Writing / HSK Exam presets as a\nquick-start row above the card-type tabs. Clicking a preset drops in a\nready-made front/back (replacing the pristine default card the first\ntime, appending thereafter) and auto-enables audio when the preset uses\nthe Audio field. Pure cardPresets module + unit tests + page interaction\ntests.",
          "is_bot": false,
          "headline": "feat(create): one-click card-type presets",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-08T17:38:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "aaa86ca60adf4bcefb91d1cfc8077f754810b9ce",
          "body": "WordCard already surfaced an HSK badge; add a frequency-band badge\n(frequencyBand(rank)) beside it so learners can prioritise common words.\nAdd a component test covering both badges.",
          "is_bot": false,
          "headline": "feat(create): show frequency band badge in the word list",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-08T17:38:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8ecbb455188cb24e94c4bede19d1fa45d29324ba",
          "body": "…elds\n\nAdd four new selectable card fields sourced from cedict.db:\n- Character Breakdown (中→middle, 国→country)\n- Radical chips (国→囗)\n- HSK Level badge\n- Frequency band badge (Top 500)\n\nWired end-to-end: Word.breakdown via characterBreakdown(), note-value\ngeneration, FIELD_DIV/TOGGLE, scoped element styles + body order, sidebar\ntoggles on both back and writer templates, deck CSS, live preview and\ncustomiser element list. Default card type unchanged (new fields off).",
          "is_bot": false,
          "headline": "feat(create): exportable HSK level, frequency, breakdown + radical fi…",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-08T17:38:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "939a5d0970e16cf0b7b4f03650f9dfa2c6576db8",
          "body": "Add pure meta helpers (frequencyBand, hskLevels, hskLevelLabel) plus\nDB-backed lookupCharacters/characterBreakdown over the cedict.db\ncharacter table (definition, pinyin, decomposition, radical). Foundation\nfor exportable HSK/frequency/breakdown/radical card fields.",
          "is_bot": false,
          "headline": "feat(dict): character breakdown, radical + frequency/HSK helpers",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-08T17:38:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1e37f7955fdd24d570276a7f67391180383e7c38",
          "body": "- cardTemplates.test.ts: field-marker checks of the 5 reference designs.\n- deckTemplate: alignment->align-self, visible hr, measure-word pills, spaced\n  pos chips.\n- CardPreview: alignment->align-self.\n- CardCustomizer: inline field toggles, collapsible Fields block, in-card\n  alignment control.\n- create page: Export CSV pos column; Generate disabled until a word exists\n  and creates a fresh db per export.",
          "is_bot": false,
          "headline": "test: cover UI/export fixes + 5 reference card designs (71 tests)",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-08T17:38:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0907e91b0e5ced9562d035e5d76f84b40d98aa9a",
          "body": "- hr visible in export (var(--surface4), not white-on-white); preview hr darker.\n- Measure-word pills, no divider; spaced part-of-speech chips (gap 8px).\n- Export CSV fills PartOfSpeech from word.pos (was blank).\n- Alignment positions an element within the card window via flex align-self\n  (left/cen\n[…]\nral system.\n- Advanced customisation moved into the Create Card Types header.\n- Customiser: single scrollable sidebar, responsive mobile layout, inline\n  collapsible Fields block (front/back toggles).",
          "is_bot": false,
          "headline": "fix(create): export/UI polish, double-generate crash, customiser UX",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-08T17:38:44Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "28abcf8ef2bbf350e93f0e96da5e1aa8b634bf22",
          "body": "…-> zip)\n\nRuns the real generateDeck against a node sql.js DB, captures the zip\ngenanki hands to file-saver, unzips it, and reads the embedded\ncollection.anki2 to assert the exported note type carries the per-card\n.ctN-scoped CSS (colour override + flex order), the card-body wrapper in\nboth templates, and the requested field list. Browser-only deps\n(edge-tts, jieba-wasm, file-saver) are stubbed for node.",
          "is_bot": false,
          "headline": "test: end-to-end .apkg round-trip (generateDeck -> genanki -> SQLite …",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-08T17:38:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "09546bc25cf596cd379360578d1adcc3b096aac1",
          "body": "…e page)\n\n- vitest.config.ts with two projects: 'node' (pure logic) and 'dom'\n  (jsdom + compiled Svelte via vite-plugin-svelte).\n- npm test / test:watch scripts; add @testing-library/svelte, jsdom,\n  user-event, jest-dom as dev deps.\n- 50 tests: deckTemplate export generation (field assembly, audio\n[…]\ns, fields, customiser open/close, nav,\n  generate).\n- src/test/setup.ts polyfills matchMedia (flowbite) and cleans up DOM.\n- create-page test lives under src/test/ since +page.* is SvelteKit-reserved.",
          "is_bot": false,
          "headline": "test: add vitest node + jsdom suites (export logic, components, creat…",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-08T17:38:44Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "df2589cb1b7889ed09242a65fd42e72ad090df3a",
          "body": "…l repositioning, colorized-hanzi export fix\n\n- Extract pure template/CSS generation into src/lib/deckTemplate.ts (no\n  genanki/sql/edge-tts/$app deps) so the exporter logic is unit-testable;\n  deck.ts now calls buildNoteTemplates.\n- Per-card-type element styles: each card type styles its elements\n \n[…]\nAdvanced customiser edits the active tab's styles and syncs back to the\n  page previews on save; legacy global styles migrate onto the first card.\n- a11y: keyboardable card-type tabs / add-tab button.",
          "is_bot": false,
          "headline": "feat(create): per-card-type customisation, merged controls, hr/contro…",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-08T17:38:44Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "86cc4613629fcba1f2f14bff261077634c973327",
          "body": "Replace flat global style overrides with a fully per-element\ncustomisation system. Every visible region of an Anki card can be\nindividually selected and styled; changes mirror exactly in the export.\n\nNew types in deck.ts:\n  ElementStyle — 14 CSS properties (fontSize, fontFamily, fontWeight,\n    colo\n[…]\ntyles: {}\n  localStorage restored on mount (merges with DEFAULT_TEMPLATE)\n  Advanced customisation button beside Card Template heading\n  CardPreview receives elementStyles instead of former flat props",
          "is_bot": false,
          "headline": "feat: per-element WYSIWYG card customiser with localStorage persistence",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-08T17:38:44Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5b0fb5367c4f17c016b12da156b4e07c876bc4c4",
          "body": "… CJK filter\n\n- formatDefinition(): CL:Trad|Simp[pin] -> measure word chips; semicolon\n  senses numbered 1./2./3. when multiple; CSS for chips and numbered defs\n- playAudio(): null guard on getElementById('audio') null when no audio\n- HanziWriter loops: skip non-CJK chars so entries with no stroke data skip\n- meaning-container: fix stray closing </span> in char block template",
          "is_bot": false,
          "headline": "Definitions: CL chips, numbered senses, audio null guard, HanziWriter…",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-08T17:38:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ca9f59b117af3561713a0a39c104da62bc7be14f",
          "body": "- Ship persistence, hanzi-writer engine and full stroke data as .apkg\n  media (_anki-persistence.js, _hanzi-writer.min.js, _hanzi-writer-data.json)\n  so cards work without any network or CDN after initial install\n- Back template rebuilt entirely from field order via <!--FIELDS--> slot;\n  deselected \n[…]\n static CSS, so the sidebar can toggle them live\n- buildHanziDataSubset simplified: return full JSON text, skip subset build\n- fetchFile refactored to fetchFrom(dir) to serve both /img and /data media",
          "is_bot": false,
          "headline": "Deck export: offline-first refactor + field-order back rebuild",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-08T17:38:44Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f94ac5cb606816cf5bd815e0fa75ebbeeb4966fa",
          "body": "… nav buttons, wider font picker",
          "is_bot": false,
          "headline": "Redesign: Docs section (sidebar, mobile collapsible, prev/next), step…",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-08T17:38:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a65ab7bbcfb38a8797314fc3c349cf6f06fd7195",
          "body": null,
          "is_bot": false,
          "headline": "Redesign: add labels to FAQ/Features via MarkdownLayout",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-08T17:38:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bfabecc462f908a490a4a6ccc95cb2f44975a27d",
          "body": "- Sticky responsive header with mono nav + active state and a mobile hamburger\n  menu; refined multi-column footer.\n- Homepage rebuilt: hero with animated 写汉字 logo, bordered\n  feature grid, dark create banner, hover get-started cards.\n- Create page header restyled to match.",
          "is_bot": false,
          "headline": "Redesign: modern-minimal-mono layout, homepage, mobile nav",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-08T17:38:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d39303c2aa8eb3f64598216923ea91c8cf6e8ef9",
          "body": "- Add Part of Speech field: renders PoS as chips (dominant PoS emphasized),\n  selectable front/back, with order, preview and apkg support; pull dominant_PoS\n  from cedict.db.\n- When a note's Simplified and Traditional are identical, hide the redundant\n  traditional display via a runtime script in the Anki template (front + back).",
          "is_bot": false,
          "headline": "Create page: Part of Speech chip field + simplified/traditional dedupe",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-08T17:38:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "687bece3b4282f5c5937c0a0d53c12ae8cb63aa8",
          "body": "- Preview and deck render fields in the user's drag order instead of a fixed\n  order. CardPreview iterates an ordered items list (fields + writing); the\n  front QFMT is built in field order and the back's top fields are reordered to\n  match.\n- Writer card: inject Simple Meaning below the controls and above the (now\n  collapsible) dictionary; preview shows the writer control buttons.",
          "is_bot": false,
          "headline": "Create page: field order now drives card layout (front, back, writer)",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-08T17:38:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "aa399bad87b66c0657e7d34cfdc7c25229343fa0",
          "body": "…t writing sides, visible buttons\n\n- Add Simple Meaning field (clean HSK gloss from hsk_words.json) shown above\n  the renamed Dictionary Definitions (cedict); deduped when identical.\n- Card Template: collapse dictionary definitions inside a <details>; preview\n  reflects it.\n- Writing Component has i\n[…]\nles; generateDeck\n  places the writer per side and the preview shows the writer alongside the\n  selected fields.\n- Fix invisible flowbite primary buttons by defining the Tailwind v4 primary\n  palette.",
          "is_bot": false,
          "headline": "Create page: Simple Meaning field, collapsible dictionary, independen…",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-08T17:38:43Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5a1fb1a81e83dd1946868fd425d9372c2d04d4a0",
          "body": "…dering, live writer preview\n\n- Replace the input-type dropdown (which had an empty placeholder option that\n  could hide the action button) with a Word/Paragraph/File segmented control;\n  add Enter-to-add, disabled-state Generate, full-width textarea.\n- Per-word audio play button on each WordCard (HSK CDN then Edge TTS).\n- Writing Component is now a draggable row in the field list; preview renders\n  a live hanzi-writer animation on front and back when it is enabled.",
          "is_bot": false,
          "headline": "Create page: input mode buttons, per-word audio, writing-component or…",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-08T17:38:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "14cef327102d82f07613d4ca6afb620393642f00",
          "body": "Add a Card Template panel: tone colors vs black & white, toggle hanzi/pinyin\ncoloring, and pick the hanzi font (default / Kaiti / Songti). Settings drive\na CSS override appended to DECK_CSS (default = no-op, apkg unchanged) and are\nmirrored in the live preview",
          "is_bot": false,
          "headline": "Create page: card template customization (colors, B&W, fonts)",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-08T17:38:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c67f96848559398d3112edc67452823ba7c3746a",
          "body": "Merge Fields/Order and Front/Back into one per-card-type editor: each field\nrow has drag + up/down ordering and Front and Back checkboxes. Add a live\nCardPreview (front and back) rendered from a dummy word so users see what is\nshown or hidden. New card types default to Simplified on front and all\ndisplay fields on back.\n\ngenerateDeck now honours back-side selection by dropping the div for any\ndisplay field deselected on the back (default keeps all -> apkg unchanged)",
          "is_bot": false,
          "headline": "Create page: unified field editor with front/back toggles + live preview",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-08T17:38:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "75122b8d7272f82358876c98df0e95084c803ed6",
          "body": "Replace the flat table with WordCard: tone-colored hanzi (simplified +\ntraditional), per-reading pinyin/zhuyin, chips for HSK level, parts of\nspeech and classifiers, the common meaning shown first, and a collapsible\nper-reading dictionary block. Add tone-color utilities (app.css, tone.ts)\nand a single-word delete. apkg export unchanged.",
          "is_bot": false,
          "headline": "Create page: rich word cards with chips and collapsible meaning",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-08T17:38:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7abf94651bd3c246c7a841b1ce50487b33015e3d",
          "body": "New src/lib/dict/cedict.ts loads cedict.db + hsk_sentences.db (sql.js +\nunzipit) and returns per-reading pinyin/zhuyin/definitions plus common\nmeaning, parts of speech, classifiers, HSK level, frequency rank and example\nsentences. lookupWord now uses it (Google Translate fallback kept) and the\nWord \n[…]\ne rich metadata for the UI; apkg fields unchanged.\n\nRemove the superseded binary dictionary (dict.ts, cedict_ts.*, cedict.idx,\ngrammar/vocab keyword json, sql-wasm.js). Clear the word input after Add.",
          "is_bot": false,
          "headline": "Replace dictionary with cedict.db (rich data via sql.js)",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-08T17:38:43Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b4a10a696d3085bc9b19bcdb5acd6d3b55e4042b",
          "body": "- mdsvex set up with an absolute-path shared MarkdownLayout; new /faq and\n  /features routes reuse the old docs content, /decks lists the prebuilt\n  HSK .apkg downloads (modern minimal style). Navbar/footer + homepage\n  links repointed to these pages.\n- Fix Vite build hang: Tailwind v4 source(none) \n[…]\n scanning the\n  multi-MB binaries in static/data; deep-import lucide icons to avoid the\n  ~1600-module barrel.\n\nVerified: all 5 routes render with no console errors; production build\ncompletes in ~3s.",
          "is_bot": false,
          "headline": "Add FAQ/Features (mdsvex) + Decks pages; fix build hang",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-08T17:38:43Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "aa72602ef25e1de2c951e1296dde4a86e3904640",
          "body": "Delete Docusaurus config, plugin, docs, blog and the old React src\n(pages, components, css). Workflows now use npm ci + npm run build\n(adapter-static -> ./build; peaceiris adds .nojekyll for the _app dir).\nRepoint contributing.md to releases and document the npm dev workflow.\nIgnore the unzipped runtime DBs (cedict.db, hsk_sentences.db).",
          "is_bot": false,
          "headline": "Remove Docusaurus; switch GitHub Pages deploy to npm + SvelteKit",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-08T17:38:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e2de52408b817073c6be3e0796bde049b31f0709",
          "body": "Port Docusaurus homepage to Svelte: hanzi-writer 写汉字 logo animation,\nhero, Features grid, create-deck banner and getting-started cards\n(react-icons -> @lucide/svelte). Add shared navbar/footer in +layout.\nDropped docs/blog links repointed to the GitHub repo and releases.",
          "is_bot": false,
          "headline": "Add homepage + layout (navbar/footer)",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-08T17:36:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dabd21d4ae0c90a86c034c2aa6defd8b1fa5f161",
          "body": "Two-page wizard (deck/card-type config + character input) rebuilt with\nflowbite-svelte (Input, Select, Checkbox, Fileupload, Textarea, Progressbar,\nTable, Alert). React hooks -> Svelte 5 runes; wires src/lib/deck.ts for word\nlookup, paragraph segmentation and .apkg generation. Verified end-to-end:\ndict/sql/jieba/HSK init, word lookup, and apkg export produce the same model\nIDs, fields, templates and media as the original.",
          "is_bot": false,
          "headline": "Add /create route — Svelte port of the deck generator",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-08T17:36:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5ab30ecd337608946ee521782c9a3614ab5b32a0",
          "body": "Move dict.ts, pinyinzhuyin.ts, contants.ts to src/lib/dict (Anki templates\nunchanged). Add src/lib/deck.ts: pure-function port of create.tsx generation\nlogic (lookupWord, cutParagraph, generateDeck, init helpers) with identical\nmodel IDs, templates and media list. Runtime data fetched from local base\n(static/data) instead of the github.io host.",
          "is_bot": false,
          "headline": "Extract deck logic + dict to framework-agnostic src/lib",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-08T17:36:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "754aabcddaa8667b8de64180754305a1077f2587",
          "body": "Replace Docusaurus build tooling with SvelteKit (adapter-static, base\n/Anki-xiehanzi), Vite 8, Tailwind 4 + flowbite-svelte. Node polyfills wired\nfor genanki-js/sql.js. Placeholder homepage route; Docusaurus source files\nstill present, removed in a later commit.",
          "is_bot": false,
          "headline": "Scaffold SvelteKit + Vite + Tailwind/Flowbite",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-08T17:36:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "51a510541c8ae2f998844568e5b289c71b5cb9f0",
          "body": null,
          "is_bot": false,
          "headline": "feat: add dev site alert on homepage",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-08T03:04:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1f6924d9a88ac82f1120dfb6e1ed22a01212437d",
          "body": null,
          "is_bot": false,
          "headline": "ci: build both Docusaurus + SvelteKit, deploy to root + /dev",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-08T02:55:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "13b72f6152b65231836d063cdd65c80180522a12",
          "body": null,
          "is_bot": false,
          "headline": "show use ms edge info",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-06T07:18:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bcbf0afedd202a8b54918c7fe61a0f954f483663",
          "body": null,
          "is_bot": false,
          "headline": "fix if audio not included",
          "author_name": "Mani",
          "author_login": "krmanik",
          "committed_at": "2026-06-06T06:45:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 18,
      "commits_last_year": 120,
      "latest_release_at": "2025-12-20T10:28:51Z",
      "latest_release_tag": "v2.3",
      "releases_from_tags": false,
      "days_since_last_push": 37,
      "active_weeks_last_year": 5,
      "days_since_latest_release": 215,
      "mean_days_between_releases": 171.4
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": true,
      "health_percentage": 71,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": []
    },
    "popularity": {
      "forks": 32,
      "stars": 392,
      "watchers": 3,
      "fork_history": {
        "days": [
          {
            "date": "2020-03-14",
            "count": 1
          },
          {
            "date": "2020-03-15",
            "count": 1
          },
          {
            "date": "2020-04-24",
            "count": 1
          },
          {
            "date": "2020-06-30",
            "count": 1
          },
          {
            "date": "2021-02-09",
            "count": 1
          },
          {
            "date": "2021-08-12",
            "count": 1
          },
          {
            "date": "2022-03-25",
            "count": 1
          },
          {
            "date": "2022-04-04",
            "count": 1
          },
          {
            "date": "2022-04-18",
            "count": 1
          },
          {
            "date": "2022-12-01",
            "count": 1
          },
          {
            "date": "2023-07-31",
            "count": 1
          },
          {
            "date": "2023-08-19",
            "count": 1
          },
          {
            "date": "2023-10-08",
            "count": 1
          },
          {
            "date": "2023-11-03",
            "count": 1
          },
          {
            "date": "2024-03-11",
            "count": 1
          },
          {
            "date": "2024-04-14",
            "count": 1
          },
          {
            "date": "2024-09-13",
            "count": 1
          },
          {
            "date": "2024-09-22",
            "count": 1
          },
          {
            "date": "2024-10-28",
            "count": 1
          },
          {
            "date": "2024-11-08",
            "count": 1
          },
          {
            "date": "2025-01-12",
            "count": 1
          },
          {
            "date": "2025-05-06",
            "count": 1
          },
          {
            "date": "2025-06-09",
            "count": 1
          },
          {
            "date": "2025-12-10",
            "count": 1
          },
          {
            "date": "2026-01-24",
            "count": 1
          },
          {
            "date": "2026-03-09",
            "count": 1
          },
          {
            "date": "2026-03-28",
            "count": 1
          },
          {
            "date": "2026-04-15",
            "count": 1
          },
          {
            "date": "2026-05-17",
            "count": 1
          },
          {
            "date": "2026-06-05",
            "count": 1
          },
          {
            "date": "2026-06-13",
            "count": 1
          },
          {
            "date": "2026-06-22",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 32,
        "total_forks": 32
      },
      "star_history": null,
      "open_issues_and_prs": 6
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [
        "notebooks"
      ],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": false,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [
        "tsconfig.json"
      ],
      "toolchain_manifests": [],
      "largest_source_bytes": 57978,
      "source_files_sampled": 40,
      "oversized_source_files": 0,
      "agent_instruction_files": [
        "CLAUDE.md"
      ],
      "agent_instruction_max_bytes": 5826
    },
    "dependencies": {
      "manifests": [
        "package.json"
      ],
      "advisories": {
        "error": null,
        "scope": "repository_graph",
        "source": "osv",
        "findings": [
          {
            "name": "cipher-base",
            "direct": false,
            "version": "1.0.4",
            "severity": "critical",
            "ecosystem": "npm",
            "cvss_score": 9.1,
            "advisory_ids": [
              "GHSA-cpq7-6gpm-g9rc"
            ],
            "fixed_version": "1.0.5",
            "advisory_count": 1,
            "oldest_advisory_days": 336
          },
          {
            "name": "brace-expansion",
            "direct": false,
            "version": "1.1.11",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-3jxr-9vmj-r5cp",
              "GHSA-f886-m6hf-6m8v",
              "GHSA-v6h2-p8h4-qcjw"
            ],
            "fixed_version": "5.0.7",
            "advisory_count": 3,
            "oldest_advisory_days": 409
          },
          {
            "name": "braces",
            "direct": false,
            "version": "2.3.2",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-grv7-fg5c-xmjg"
            ],
            "fixed_version": "3.0.3",
            "advisory_count": 1,
            "oldest_advisory_days": 800
          },
          {
            "name": "elliptic",
            "direct": false,
            "version": "6.6.1",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.3,
            "advisory_ids": [
              "GHSA-848j-6mx2-7j84"
            ],
            "fixed_version": null,
            "advisory_count": 1,
            "oldest_advisory_days": 196
          },
          {
            "name": "minimatch",
            "direct": false,
            "version": "3.1.2",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-23c5-xmqv-rm74",
              "GHSA-3ppc-4f35-3m26",
              "GHSA-7r86-cg39-jmmj"
            ],
            "fixed_version": "10.2.3",
            "advisory_count": 3,
            "oldest_advisory_days": 155
          },
          {
            "name": "terser",
            "direct": false,
            "version": "3.17.0",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-4wf5-vphf-c2xc"
            ],
            "fixed_version": "5.14.2",
            "advisory_count": 1,
            "oldest_advisory_days": 1469
          },
          {
            "name": "undici",
            "direct": false,
            "version": "7.27.2",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-35p6-xmwp-9g52",
              "GHSA-g8m3-5g58-fq7m",
              "GHSA-hm92-r4w5-c3mj",
              "GHSA-p88m-4jfj-68fv",
              "GHSA-pr7r-676h-xcf6",
              "GHSA-vmh5-mc38-953g",
              "GHSA-vxpw-j846-p89q"
            ],
            "fixed_version": "8.5.0",
            "advisory_count": 7,
            "oldest_advisory_days": 35
          },
          {
            "name": "@babel/runtime",
            "direct": false,
            "version": "7.23.9",
            "severity": "moderate",
            "ecosystem": "npm",
            "cvss_score": 6.2,
            "advisory_ids": [
              "GHSA-968p-4wvh-cqc8"
            ],
            "fixed_version": "8.0.0-alpha.17",
            "advisory_count": 1,
            "oldest_advisory_days": 499
          },
          {
            "name": "bn.js",
            "direct": false,
            "version": "4.12.0",
            "severity": "moderate",
            "ecosystem": "npm",
            "cvss_score": 5.3,
            "advisory_ids": [
              "GHSA-378v-28hj-76wf"
            ],
            "fixed_version": "5.2.3",
            "advisory_count": 1,
            "oldest_advisory_days": 153
          },
          {
            "name": "bn.js",
            "direct": false,
            "version": "5.2.1",
            "severity": "moderate",
            "ecosystem": "npm",
            "cvss_score": 5.3,
            "advisory_ids": [
              "GHSA-378v-28hj-76wf"
            ],
            "fixed_version": "5.2.3",
            "advisory_count": 1,
            "oldest_advisory_days": 153
          },
          {
            "name": "micromatch",
            "direct": false,
            "version": "3.1.10",
            "severity": "moderate",
            "ecosystem": "npm",
            "cvss_score": 5.3,
            "advisory_ids": [
              "GHSA-952p-6rrq-rcjv"
            ],
            "fixed_version": "4.0.8",
            "advisory_count": 1,
            "oldest_advisory_days": 800
          },
          {
            "name": "cookie",
            "direct": false,
            "version": "0.6.0",
            "severity": "low",
            "ecosystem": "npm",
            "cvss_score": null,
            "advisory_ids": [
              "GHSA-pxg6-pf52-xh8x"
            ],
            "fixed_version": "0.7.0",
            "advisory_count": 1,
            "oldest_advisory_days": 657
          },
          {
            "name": "es5-ext",
            "direct": false,
            "version": "0.10.62",
            "severity": "low",
            "ecosystem": "npm",
            "cvss_score": null,
            "advisory_ids": [
              "GHSA-4gmj-3p3h-gm8h"
            ],
            "fixed_version": "0.10.63",
            "advisory_count": 1,
            "oldest_advisory_days": 878
          }
        ],
        "collected": true,
        "malicious": [],
        "truncated": false,
        "by_severity": {
          "low": 2,
          "high": 6,
          "critical": 1,
          "moderate": 4
        },
        "advisory_count": 23,
        "affected_count": 13,
        "assessed_count": 691,
        "malicious_count": 0,
        "assessed_package": null,
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "npm"
      ],
      "dependencies": [
        {
          "name": "@hiseb/confetti",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.1.0"
        },
        {
          "name": "@kingdanx/edge-tts-browser",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.0.0"
        },
        {
          "name": "chinese-s2t",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.0.0"
        },
        {
          "name": "chinese-to-pinyin",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.3.1"
        },
        {
          "name": "genanki-js",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.0.0"
        },
        {
          "name": "hanzi-writer",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^3.6.1"
        },
        {
          "name": "jieba-wasm",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.0.0"
        },
        {
          "name": "segmentit",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.0.3"
        },
        {
          "name": "sql.js",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.10.3"
        },
        {
          "name": "unzipit",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.4.3"
        }
      ],
      "all_dependencies": {
        "error": null,
        "source": "github-sbom",
        "packages": [
          {
            "name": "@hiseb/confetti",
            "direct": true,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "@kingdanx/edge-tts-browser",
            "direct": true,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "chinese-s2t",
            "direct": true,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "chinese-to-pinyin",
            "direct": true,
            "version": "1.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "genanki-js",
            "direct": true,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "hanzi-writer",
            "direct": true,
            "version": "3.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "jieba-wasm",
            "direct": true,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "segmentit",
            "direct": true,
            "version": "2.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "sql.js",
            "direct": true,
            "version": "1.10.3",
            "ecosystem": "npm"
          },
          {
            "name": "unzipit",
            "direct": true,
            "version": "1.4.3",
            "ecosystem": "npm"
          },
          {
            "name": "@adobe/css-tools",
            "direct": false,
            "version": "4.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "@asamuzakjp/css-color",
            "direct": false,
            "version": "5.1.11",
            "ecosystem": "npm"
          },
          {
            "name": "@asamuzakjp/dom-selector",
            "direct": false,
            "version": "7.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "@asamuzakjp/generational-cache",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "@asamuzakjp/nwsapi",
            "direct": false,
            "version": "2.3.9",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/code-frame",
            "direct": false,
            "version": "7.23.5",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-validator-identifier",
            "direct": false,
            "version": "7.22.20",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/highlight",
            "direct": false,
            "version": "7.23.4",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/runtime",
            "direct": false,
            "version": "7.23.9",
            "ecosystem": "npm"
          },
          {
            "name": "@bramus/specificity",
            "direct": false,
            "version": "2.4.2",
            "ecosystem": "npm"
          },
          {
            "name": "@csstools/color-helpers",
            "direct": false,
            "version": "6.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "@csstools/css-calc",
            "direct": false,
            "version": "3.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "@csstools/css-color-parser",
            "direct": false,
            "version": "4.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "@csstools/css-parser-algorithms",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "@csstools/css-syntax-patches-for-csstree",
            "direct": false,
            "version": "1.1.5",
            "ecosystem": "npm"
          },
          {
            "name": "@csstools/css-tokenizer",
            "direct": false,
            "version": "4.0.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": "@exodus/bytes",
            "direct": false,
            "version": "1.15.1",
            "ecosystem": "npm"
          },
          {
            "name": "@floating-ui/core",
            "direct": false,
            "version": "1.7.5",
            "ecosystem": "npm"
          },
          {
            "name": "@floating-ui/dom",
            "direct": false,
            "version": "1.7.6",
            "ecosystem": "npm"
          },
          {
            "name": "@floating-ui/utils",
            "direct": false,
            "version": "0.2.11",
            "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.1",
            "ecosystem": "npm"
          },
          {
            "name": "@jridgewell/source-map",
            "direct": false,
            "version": "0.3.5",
            "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": "@lucide/svelte",
            "direct": false,
            "version": "1.17.0",
            "ecosystem": "npm"
          },
          {
            "name": "@napi-rs/wasm-runtime",
            "direct": false,
            "version": "1.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "@oxc-project/types",
            "direct": false,
            "version": "0.133.0",
            "ecosystem": "npm"
          },
          {
            "name": "@polka/url",
            "direct": false,
            "version": "1.0.0-next.24",
            "ecosystem": "npm"
          },
          {
            "name": "@popperjs/core",
            "direct": false,
            "version": "2.11.8",
            "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": "@rollup/plugin-inject",
            "direct": false,
            "version": "5.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/plugin-node-resolve",
            "direct": false,
            "version": "15.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/pluginutils",
            "direct": false,
            "version": "5.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "@standard-schema/spec",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "@sveltejs/acorn-typescript",
            "direct": false,
            "version": "1.0.10",
            "ecosystem": "npm"
          },
          {
            "name": "@sveltejs/adapter-static",
            "direct": false,
            "version": "3.0.10",
            "ecosystem": "npm"
          },
          {
            "name": "@sveltejs/kit",
            "direct": false,
            "version": "2.63.0",
            "ecosystem": "npm"
          },
          {
            "name": "@sveltejs/load-config",
            "direct": false,
            "version": "0.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "@sveltejs/vite-plugin-svelte",
            "direct": false,
            "version": "7.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "@tailwindcss/node",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "@tailwindcss/oxide",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "@tailwindcss/oxide-android-arm64",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "@tailwindcss/oxide-darwin-arm64",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "@tailwindcss/oxide-darwin-x64",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "@tailwindcss/oxide-freebsd-x64",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "@tailwindcss/oxide-linux-arm-gnueabihf",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "@tailwindcss/oxide-linux-arm64-gnu",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "@tailwindcss/oxide-linux-arm64-musl",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "@tailwindcss/oxide-linux-x64-gnu",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "@tailwindcss/oxide-linux-x64-musl",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "@tailwindcss/oxide-wasm32-wasi",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "@tailwindcss/oxide-win32-arm64-msvc",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "@tailwindcss/oxide-win32-x64-msvc",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "@tailwindcss/vite",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "@testing-library/dom",
            "direct": false,
            "version": "10.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "@testing-library/jest-dom",
            "direct": false,
            "version": "6.9.1",
            "ecosystem": "npm"
          },
          {
            "name": "@testing-library/svelte",
            "direct": false,
            "version": "5.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "@testing-library/svelte-core",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "@testing-library/user-event",
            "direct": false,
            "version": "14.6.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/chai",
            "direct": false,
            "version": "5.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@types/cookie",
            "direct": false,
            "version": "0.6.0",
            "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/mdast",
            "direct": false,
            "version": "4.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "@types/node",
            "direct": false,
            "version": "25.9.2",
            "ecosystem": "npm"
          },
          {
            "name": "@types/parse-json",
            "direct": false,
            "version": "4.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "@types/resolve",
            "direct": false,
            "version": "1.20.2",
            "ecosystem": "npm"
          },
          {
            "name": "@types/trusted-types",
            "direct": false,
            "version": "2.0.7",
            "ecosystem": "npm"
          },
          {
            "name": "@types/unist",
            "direct": false,
            "version": "2.0.11",
            "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.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/utils",
            "direct": false,
            "version": "4.1.8",
            "ecosystem": "npm"
          },
          {
            "name": "acorn",
            "direct": false,
            "version": "8.16.0",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-colors",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-cyan",
            "direct": false,
            "version": "0.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-gray",
            "direct": false,
            "version": "0.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-red",
            "direct": false,
            "version": "0.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-regex",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-regex",
            "direct": false,
            "version": "5.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-styles",
            "direct": false,
            "version": "3.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-styles",
            "direct": false,
            "version": "5.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-wrap",
            "direct": false,
            "version": "0.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "anymatch",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "apexcharts",
            "direct": false,
            "version": "5.14.0",
            "ecosystem": "npm"
          },
          {
            "name": "append-buffer",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "archy",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "aria-query",
            "direct": false,
            "version": "5.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "aria-query",
            "direct": false,
            "version": "5.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "arr-diff",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "arr-diff",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "arr-filter",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "arr-flatten",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "arr-map",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "arr-union",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "arr-union",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "array-each",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "array-initial",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "array-last",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "array-slice",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "array-slice",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "array-sort",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "array-unique",
            "direct": false,
            "version": "0.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "asn1.js",
            "direct": false,
            "version": "4.10.1",
            "ecosystem": "npm"
          },
          {
            "name": "assert",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "assertion-error",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "assign-symbols",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "async-done",
            "direct": false,
            "version": "1.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "async-each",
            "direct": false,
            "version": "1.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "async-settle",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "atob",
            "direct": false,
            "version": "2.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "available-typed-arrays",
            "direct": false,
            "version": "1.0.7",
            "ecosystem": "npm"
          },
          {
            "name": "axobject-query",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "babel-plugin-macros",
            "direct": false,
            "version": "2.8.0",
            "ecosystem": "npm"
          },
          {
            "name": "babel-plugin-preval",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "bach",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "balanced-match",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "base",
            "direct": false,
            "version": "0.11.2",
            "ecosystem": "npm"
          },
          {
            "name": "base64-js",
            "direct": false,
            "version": "1.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "bidi-js",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "big-integer",
            "direct": false,
            "version": "1.6.52",
            "ecosystem": "npm"
          },
          {
            "name": "binary-extensions",
            "direct": false,
            "version": "1.13.1",
            "ecosystem": "npm"
          },
          {
            "name": "bindings",
            "direct": false,
            "version": "1.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "bn.js",
            "direct": false,
            "version": "4.12.0",
            "ecosystem": "npm"
          },
          {
            "name": "bn.js",
            "direct": false,
            "version": "5.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "bn.js",
            "direct": false,
            "version": "5.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "brace-expansion",
            "direct": false,
            "version": "1.1.11",
            "ecosystem": "npm"
          },
          {
            "name": "braces",
            "direct": false,
            "version": "2.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "brorand",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "browser-resolve",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "browserify-aes",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "browserify-cipher",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "browserify-des",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "browserify-rsa",
            "direct": false,
            "version": "4.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "browserify-sign",
            "direct": false,
            "version": "4.2.6",
            "ecosystem": "npm"
          },
          {
            "name": "browserify-zlib",
            "direct": false,
            "version": "0.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "buffer",
            "direct": false,
            "version": "5.7.1",
            "ecosystem": "npm"
          },
          {
            "name": "buffer-equal",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "buffer-from",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "buffer-xor",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "builtin-status-codes",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "cache-base",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "call-bind",
            "direct": false,
            "version": "1.0.9",
            "ecosystem": "npm"
          },
          {
            "name": "call-bind-apply-helpers",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "call-bound",
            "direct": false,
            "version": "1.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "callsites",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "camelcase",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "chai",
            "direct": false,
            "version": "6.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "chalk",
            "direct": false,
            "version": "2.4.2",
            "ecosystem": "npm"
          },
          {
            "name": "chokidar",
            "direct": false,
            "version": "2.1.8",
            "ecosystem": "npm"
          },
          {
            "name": "chokidar",
            "direct": false,
            "version": "4.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "cipher-base",
            "direct": false,
            "version": "1.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "class-utils",
            "direct": false,
            "version": "0.3.6",
            "ecosystem": "npm"
          },
          {
            "name": "cliui",
            "direct": false,
            "version": "3.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "clone",
            "direct": false,
            "version": "2.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "clone-buffer",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "clone-stats",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "cloneable-readable",
            "direct": false,
            "version": "1.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "clsx",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "code-point-at",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "collection-map",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "collection-visit",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "color-convert",
            "direct": false,
            "version": "1.9.3",
            "ecosystem": "npm"
          },
          {
            "name": "color-name",
            "direct": false,
            "version": "1.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "color-support",
            "direct": false,
            "version": "1.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "commander",
            "direct": false,
            "version": "2.20.3",
            "ecosystem": "npm"
          },
          {
            "name": "component-emitter",
            "direct": false,
            "version": "1.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "concat-map",
            "direct": false,
            "version": "0.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "concat-stream",
            "direct": false,
            "version": "1.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "concat-with-sourcemaps",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "console-browserify",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "constants-browserify",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "convert-source-map",
            "direct": false,
            "version": "1.9.0",
            "ecosystem": "npm"
          },
          {
            "name": "convert-source-map",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "cookie",
            "direct": false,
            "version": "0.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "copy-descriptor",
            "direct": false,
            "version": "0.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "copy-props",
            "direct": false,
            "version": "2.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "core-util-is",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "cosmiconfig",
            "direct": false,
            "version": "6.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "create-ecdh",
            "direct": false,
            "version": "4.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "create-hash",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "create-hmac",
            "direct": false,
            "version": "1.1.7",
            "ecosystem": "npm"
          },
          {
            "name": "create-require",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "crypto-browserify",
            "direct": false,
            "version": "3.12.1",
            "ecosystem": "npm"
          },
          {
            "name": "crypto-js",
            "direct": false,
            "version": "4.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "css-tree",
            "direct": false,
            "version": "3.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "css.escape",
            "direct": false,
            "version": "1.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "d",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "data-urls",
            "direct": false,
            "version": "7.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "date-fns",
            "direct": false,
            "version": "4.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "debug",
            "direct": false,
            "version": "2.6.9",
            "ecosystem": "npm"
          },
          {
            "name": "decamelize",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "decimal.js",
            "direct": false,
            "version": "10.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "decode-uri-component",
            "direct": false,
            "version": "0.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "deepmerge",
            "direct": false,
            "version": "4.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "default-compare",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "default-resolution",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "define-data-property",
            "direct": false,
            "version": "1.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "define-properties",
            "direct": false,
            "version": "1.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "define-property",
            "direct": false,
            "version": "0.2.5",
            "ecosystem": "npm"
          },
          {
            "name": "define-property",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "define-property",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "dequal",
            "direct": false,
            "version": "2.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "des.js",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "detect-file",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "detect-libc",
            "direct": false,
            "version": "2.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "devalue",
            "direct": false,
            "version": "5.8.1",
            "ecosystem": "npm"
          },
          {
            "name": "diffie-hellman",
            "direct": false,
            "version": "5.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "dom-accessibility-api",
            "direct": false,
            "version": "0.5.16",
            "ecosystem": "npm"
          },
          {
            "name": "dom-accessibility-api",
            "direct": false,
            "version": "0.6.3",
            "ecosystem": "npm"
          },
          {
            "name": "domain-browser",
            "direct": false,
            "version": "4.22.0",
            "ecosystem": "npm"
          },
          {
            "name": "dunder-proto",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "duplexify",
            "direct": false,
            "version": "3.7.1",
            "ecosystem": "npm"
          },
          {
            "name": "each-props",
            "direct": false,
            "version": "1.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "elliptic",
            "direct": false,
            "version": "6.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "end-of-stream",
            "direct": false,
            "version": "1.4.4",
            "ecosystem": "npm"
          },
          {
            "name": "enhanced-resolve",
            "direct": false,
            "version": "5.23.0",
            "ecosystem": "npm"
          },
          {
            "name": "entities",
            "direct": false,
            "version": "8.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "error-ex",
            "direct": false,
            "version": "1.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "es-define-property",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "es-errors",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "es-module-lexer",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "es-object-atoms",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "es5-ext",
            "direct": false,
            "version": "0.10.62",
            "ecosystem": "npm"
          },
          {
            "name": "es6-iterator",
            "direct": false,
            "version": "2.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "es6-symbol",
            "direct": false,
            "version": "3.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "es6-weak-map",
            "direct": false,
            "version": "2.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "escape-string-regexp",
            "direct": false,
            "version": "1.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "esm-env",
            "direct": false,
            "version": "1.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "esrap",
            "direct": false,
            "version": "2.2.11",
            "ecosystem": "npm"
          },
          {
            "name": "estree-walker",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "estree-walker",
            "direct": false,
            "version": "3.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "events",
            "direct": false,
            "version": "3.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "evp_bytestokey",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "expand-brackets",
            "direct": false,
            "version": "2.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "expand-tilde",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "expect-type",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "ext",
            "direct": false,
            "version": "1.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "extend",
            "direct": false,
            "version": "3.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "extend-shallow",
            "direct": false,
            "version": "1.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "extend-shallow",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "extend-shallow",
            "direct": false,
            "version": "3.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "extglob",
            "direct": false,
            "version": "2.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "fancy-log",
            "direct": false,
            "version": "1.3.3",
            "ecosystem": "npm"
          },
          {
            "name": "fast-levenshtein",
            "direct": false,
            "version": "1.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "fdir",
            "direct": false,
            "version": "6.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "file-saver",
            "direct": false,
            "version": "2.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "file-uri-to-path",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "fill-range",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "find-up",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "find-up",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "findup-sync",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "findup-sync",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "fined",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "flagged-respawn",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "flowbite",
            "direct": false,
            "version": "2.5.2",
            "ecosystem": "npm"
          },
          {
            "name": "flowbite",
            "direct": false,
            "version": "3.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "flowbite-datepicker",
            "direct": false,
            "version": "1.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "flowbite-svelte",
            "direct": false,
            "version": "1.33.1",
            "ecosystem": "npm"
          },
          {
            "name": "flush-write-stream",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "for-each",
            "direct": false,
            "version": "0.3.5",
            "ecosystem": "npm"
          },
          {
            "name": "for-in",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "for-own",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "fragment-cache",
            "direct": false,
            "version": "0.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "fs-mkdirp-stream",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "fs.realpath",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "fsevents",
            "direct": false,
            "version": "1.2.13",
            "ecosystem": "npm"
          },
          {
            "name": "fsevents",
            "direct": false,
            "version": "2.3.3",
            "ecosystem": "npm"
          },
          {
            "name": "function-bind",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "generator-function",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "get-caller-file",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "get-intrinsic",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "get-proto",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "get-value",
            "direct": false,
            "version": "2.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "glob",
            "direct": false,
            "version": "7.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "glob-parent",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "glob-stream",
            "direct": false,
            "version": "6.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "glob-watcher",
            "direct": false,
            "version": "5.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "global-modules",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "global-prefix",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "glogg",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "gopd",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "graceful-fs",
            "direct": false,
            "version": "4.2.11",
            "ecosystem": "npm"
          },
          {
            "name": "gulp",
            "direct": false,
            "version": "4.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "gulp-cli",
            "direct": false,
            "version": "2.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "gulp-concat",
            "direct": false,
            "version": "2.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "gulp-minify",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "gulplog",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "has-flag",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "has-property-descriptors",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "has-symbols",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "has-tostringtag",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "has-value",
            "direct": false,
            "version": "0.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "has-value",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "has-values",
            "direct": false,
            "version": "0.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "has-values",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "hash-base",
            "direct": false,
            "version": "3.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "hash-base",
            "direct": false,
            "version": "3.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "hash.js",
            "direct": false,
            "version": "1.1.7",
            "ecosystem": "npm"
          },
          {
            "name": "hasown",
            "direct": false,
            "version": "2.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "hmac-drbg",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "homedir-polyfill",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "hosted-git-info",
            "direct": false,
            "version": "2.8.9",
            "ecosystem": "npm"
          },
          {
            "name": "html-encoding-sniffer",
            "direct": false,
            "version": "6.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "https-browserify",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "ieee754",
            "direct": false,
            "version": "1.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "immediate",
            "direct": false,
            "version": "3.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "import-fresh",
            "direct": false,
            "version": "3.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "indent-string",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "inflight",
            "direct": false,
            "version": "1.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "inherits",
            "direct": false,
            "version": "2.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "ini",
            "direct": false,
            "version": "1.3.8",
            "ecosystem": "npm"
          },
          {
            "name": "interpret",
            "direct": false,
            "version": "1.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "invert-kv",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-absolute",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-accessor-descriptor",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "is-arguments",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-arrayish",
            "direct": false,
            "version": "0.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "is-binary-path",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "is-buffer",
            "direct": false,
            "version": "1.1.6",
            "ecosystem": "npm"
          },
          {
            "name": "is-callable",
            "direct": false,
            "version": "1.2.7",
            "ecosystem": "npm"
          },
          {
            "name": "is-core-module",
            "direct": false,
            "version": "2.13.1",
            "ecosystem": "npm"
          },
          {
            "name": "is-data-descriptor",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "is-descriptor",
            "direct": false,
            "version": "0.1.7",
            "ecosystem": "npm"
          },
          {
            "name": "is-descriptor",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "is-extendable",
            "direct": false,
            "version": "0.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "is-extendable",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "is-extglob",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "is-fullwidth-code-point",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-generator-function",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "is-glob",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-glob",
            "direct": false,
            "version": "4.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "is-module",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-nan",
            "direct": false,
            "version": "1.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "is-negated-glob",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-number",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-number",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-plain-object",
            "direct": false,
            "version": "2.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "is-plain-object",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-potential-custom-element-name",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "is-reference",
            "direct": false,
            "version": "3.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "is-regex",
            "direct": false,
            "version": "1.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "is-relative",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-typed-array",
            "direct": false,
            "version": "1.1.15",
            "ecosystem": "npm"
          },
          {
            "name": "is-unc-path",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-utf8",
            "direct": false,
            "version": "0.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "is-valid-glob",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-windows",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "isarray",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "isarray",
            "direct": false,
            "version": "2.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "isexe",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "isobject",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "isobject",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "isomorphic-timers-promises",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "jiti",
            "direct": false,
            "version": "1.21.0",
            "ecosystem": "npm"
          },
          {
            "name": "jiti",
            "direct": false,
            "version": "2.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "js-sha256",
            "direct": false,
            "version": "0.9.0",
            "ecosystem": "npm"
          },
          {
            "name": "js-tokens",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "jsdom",
            "direct": false,
            "version": "29.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "json-parse-even-better-errors",
            "direct": false,
            "version": "2.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "json-stable-stringify-without-jsonify",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "jszip",
            "direct": false,
            "version": "3.10.1",
            "ecosystem": "npm"
          },
          {
            "name": "just-debounce",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "kind-of",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "kind-of",
            "direct": false,
            "version": "3.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "kind-of",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "kind-of",
            "direct": false,
            "version": "5.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "kind-of",
            "direct": false,
            "version": "6.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "kleur",
            "direct": false,
            "version": "4.1.5",
            "ecosystem": "npm"
          },
          {
            "name": "last-run",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "lazystream",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "lcid",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "lead",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "lie",
            "direct": false,
            "version": "3.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "liftoff",
            "direct": false,
            "version": "3.1.0",
            "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": "lines-and-columns",
            "direct": false,
            "version": "1.2.4",
            "ecosystem": "npm"
          },
          {
            "name": "load-json-file",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "locate-character",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "locate-path",
            "direct": false,
            "version": "6.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "lru-cache",
            "direct": false,
            "version": "11.5.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": "make-iterator",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "map-cache",
            "direct": false,
            "version": "0.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "map-visit",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "matchdep",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "math-intrinsics",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "md5.js",
            "direct": false,
            "version": "1.3.5",
            "ecosystem": "npm"
          },
          {
            "name": "mdn-data",
            "direct": false,
            "version": "2.27.1",
            "ecosystem": "npm"
          },
          {
            "name": "mdsvex",
            "direct": false,
            "version": "0.12.7",
            "ecosystem": "npm"
          },
          {
            "name": "micromatch",
            "direct": false,
            "version": "3.1.10",
            "ecosystem": "npm"
          },
          {
            "name": "miller-rabin",
            "direct": false,
            "version": "4.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "min-indent",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "mini-svg-data-uri",
            "direct": false,
            "version": "1.4.4",
            "ecosystem": "npm"
          },
          {
            "name": "minimalistic-assert",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "minimalistic-crypto-utils",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "minimatch",
            "direct": false,
            "version": "3.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "mixin-deep",
            "direct": false,
            "version": "1.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "mri",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "mrmime",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "ms",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "mute-stdout",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "nan",
            "direct": false,
            "version": "2.25.0",
            "ecosystem": "npm"
          },
          {
            "name": "nanoid",
            "direct": false,
            "version": "3.3.12",
            "ecosystem": "npm"
          },
          {
            "name": "nanomatch",
            "direct": false,
            "version": "1.2.13",
            "ecosystem": "npm"
          },
          {
            "name": "next-tick",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "node-stdlib-browser",
            "direct": false,
            "version": "1.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "normalize-package-data",
            "direct": false,
            "version": "2.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "normalize-path",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "normalize-path",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "now-and-later",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "number-is-nan",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "object-copy",
            "direct": false,
            "version": "0.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "object-inspect",
            "direct": false,
            "version": "1.13.4",
            "ecosystem": "npm"
          },
          {
            "name": "object-is",
            "direct": false,
            "version": "1.1.6",
            "ecosystem": "npm"
          },
          {
            "name": "object-keys",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "object-visit",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "object.assign",
            "direct": false,
            "version": "4.1.5",
            "ecosystem": "npm"
          },
          {
            "name": "object.defaults",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "object.map",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "object.pick",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "object.reduce",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "obug",
            "direct": false,
            "version": "2.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "once",
            "direct": false,
            "version": "1.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "ordered-read-streams",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "os-browserify",
            "direct": false,
            "version": "0.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "os-locale",
            "direct": false,
            "version": "1.4.0",
            "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": "pako",
            "direct": false,
            "version": "1.0.11",
            "ecosystem": "npm"
          },
          {
            "name": "parent-module",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "parse-asn1",
            "direct": false,
            "version": "5.1.9",
            "ecosystem": "npm"
          },
          {
            "name": "parse-filepath",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "parse-json",
            "direct": false,
            "version": "2.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "parse-json",
            "direct": false,
            "version": "5.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "parse-node-version",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "parse-passwd",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "parse5",
            "direct": false,
            "version": "8.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "pascalcase",
            "direct": false,
            "version": "0.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "path-browserify",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "path-dirname",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "path-exists",
            "direct": false,
            "version": "2.1.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-parse",
            "direct": false,
            "version": "1.0.7",
            "ecosystem": "npm"
          },
          {
            "name": "path-root",
            "direct": false,
            "version": "0.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "path-root-regex",
            "direct": false,
            "version": "0.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "path-type",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "path-type",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "pathe",
            "direct": false,
            "version": "2.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "pbkdf2",
            "direct": false,
            "version": "3.1.6",
            "ecosystem": "npm"
          },
          {
            "name": "picocolors",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "picomatch",
            "direct": false,
            "version": "4.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "pify",
            "direct": false,
            "version": "2.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "pinkie",
            "direct": false,
            "version": "2.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "pinkie-promise",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "pkg-dir",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "plugin-error",
            "direct": false,
            "version": "0.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "posix-character-classes",
            "direct": false,
            "version": "0.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "possible-typed-array-names",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "postcss",
            "direct": false,
            "version": "8.5.15",
            "ecosystem": "npm"
          },
          {
            "name": "pretty-format",
            "direct": false,
            "version": "27.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "pretty-hrtime",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "preval.macro",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "prism-svelte",
            "direct": false,
            "version": "0.4.7",
            "ecosystem": "npm"
          },
          {
            "name": "prismjs",
            "direct": false,
            "version": "1.30.0",
            "ecosystem": "npm"
          },
          {
            "name": "process",
            "direct": false,
            "version": "0.11.10",
            "ecosystem": "npm"
          },
          {
            "name": "process-nextick-args",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "public-encrypt",
            "direct": false,
            "version": "4.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "pump",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "pumpify",
            "direct": false,
            "version": "1.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "punycode",
            "direct": false,
            "version": "1.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "punycode",
            "direct": false,
            "version": "2.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "qs",
            "direct": false,
            "version": "6.15.2",
            "ecosystem": "npm"
          },
          {
            "name": "querystring-es3",
            "direct": false,
            "version": "0.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "randombytes",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "randomfill",
            "direct": false,
            "version": "1.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "react-is",
            "direct": false,
            "version": "17.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "read-pkg",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "read-pkg-up",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "readable-stream",
            "direct": false,
            "version": "2.3.8",
            "ecosystem": "npm"
          },
          {
            "name": "readable-stream",
            "direct": false,
            "version": "3.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "readdirp",
            "direct": false,
            "version": "2.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "readdirp",
            "direct": false,
            "version": "4.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "rechoir",
            "direct": false,
            "version": "0.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "redent",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "regenerator-runtime",
            "direct": false,
            "version": "0.14.1",
            "ecosystem": "npm"
          },
          {
            "name": "regex-not",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "remove-bom-buffer",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "remove-bom-stream",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "remove-trailing-separator",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "repeat-element",
            "direct": false,
            "version": "1.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "repeat-string",
            "direct": false,
            "version": "1.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "replace-ext",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "replace-homedir",
            "direct": false,
            "version": "1.0.0",
            "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": "require-main-filename",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "resolve",
            "direct": false,
            "version": "1.22.8",
            "ecosystem": "npm"
          },
          {
            "name": "resolve-dir",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "resolve-from",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "resolve-options",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "resolve-url",
            "direct": false,
            "version": "0.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "ret",
            "direct": false,
            "version": "0.1.15",
            "ecosystem": "npm"
          },
          {
            "name": "ripemd160",
            "direct": false,
            "version": "2.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "rolldown",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "sade",
            "direct": false,
            "version": "1.8.1",
            "ecosystem": "npm"
          },
          {
            "name": "safe-buffer",
            "direct": false,
            "version": "5.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "safe-buffer",
            "direct": false,
            "version": "5.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "safe-regex",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "safe-regex-test",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "saxes",
            "direct": false,
            "version": "6.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "semver",
            "direct": false,
            "version": "5.7.2",
            "ecosystem": "npm"
          },
          {
            "name": "semver-greatest-satisfied-range",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "set-blocking",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "set-cookie-parser",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "set-function-length",
            "direct": false,
            "version": "1.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "set-value",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "setimmediate",
            "direct": false,
            "version": "1.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "sha.js",
            "direct": false,
            "version": "2.4.12",
            "ecosystem": "npm"
          },
          {
            "name": "side-channel",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "side-channel-list",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "side-channel-map",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "side-channel-weakmap",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "siginfo",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "sirv",
            "direct": false,
            "version": "3.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "snapdragon",
            "direct": false,
            "version": "0.8.2",
            "ecosystem": "npm"
          },
          {
            "name": "snapdragon-node",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "snapdragon-util",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "source-map",
            "direct": false,
            "version": "0.5.7",
            "ecosystem": "npm"
          },
          {
            "name": "source-map",
            "direct": false,
            "version": "0.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "source-map-js",
            "direct": false,
            "version": "1.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "source-map-resolve",
            "direct": false,
            "version": "0.5.3",
            "ecosystem": "npm"
          },
          {
            "name": "source-map-support",
            "direct": false,
            "version": "0.5.21",
            "ecosystem": "npm"
          },
          {
            "name": "source-map-url",
            "direct": false,
            "version": "0.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "sparkles",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "spdx-correct",
            "direct": false,
            "version": "3.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "spdx-exceptions",
            "direct": false,
            "version": "2.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "spdx-expression-parse",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "spdx-license-ids",
            "direct": false,
            "version": "3.0.17",
            "ecosystem": "npm"
          },
          {
            "name": "split-string",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "stack-trace",
            "direct": false,
            "version": "0.0.10",
            "ecosystem": "npm"
          },
          {
            "name": "stackback",
            "direct": false,
            "version": "0.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "static-extend",
            "direct": false,
            "version": "0.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "std-env",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "stream-browserify",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "stream-exhaust",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "stream-http",
            "direct": false,
            "version": "3.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "stream-shift",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "string-width",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "string_decoder",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "string_decoder",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "strip-ansi",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "strip-bom",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "strip-indent",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "supports-color",
            "direct": false,
            "version": "5.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "supports-preserve-symlinks-flag",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "svelte",
            "direct": false,
            "version": "5.56.2",
            "ecosystem": "npm"
          },
          {
            "name": "svelte-check",
            "direct": false,
            "version": "4.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "sver-compat",
            "direct": false,
            "version": "1.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "symbol-tree",
            "direct": false,
            "version": "3.2.4",
            "ecosystem": "npm"
          },
          {
            "name": "tailwind-merge",
            "direct": false,
            "version": "3.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "tailwind-variants",
            "direct": false,
            "version": "3.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "tailwindcss",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "tapable",
            "direct": false,
            "version": "2.3.3",
            "ecosystem": "npm"
          },
          {
            "name": "terser",
            "direct": false,
            "version": "3.17.0",
            "ecosystem": "npm"
          },
          {
            "name": "terser",
            "direct": false,
            "version": "5.27.0",
            "ecosystem": "npm"
          },
          {
            "name": "through2",
            "direct": false,
            "version": "2.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "through2-filter",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "time-stamp",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "timers-browserify",
            "direct": false,
            "version": "2.0.12",
            "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.17",
            "ecosystem": "npm"
          },
          {
            "name": "tinyrainbow",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "tldts",
            "direct": false,
            "version": "7.4.2",
            "ecosystem": "npm"
          },
          {
            "name": "tldts-core",
            "direct": false,
            "version": "7.4.2",
            "ecosystem": "npm"
          },
          {
            "name": "to-absolute-glob",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "to-buffer",
            "direct": false,
            "version": "1.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "to-object-path",
            "direct": false,
            "version": "0.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "to-regex",
            "direct": false,
            "version": "3.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "to-regex-range",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "to-through",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "totalist",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "tough-cookie",
            "direct": false,
            "version": "6.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "tr46",
            "direct": false,
            "version": "6.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "tslib",
            "direct": false,
            "version": "2.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "tty-browserify",
            "direct": false,
            "version": "0.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "type",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "type",
            "direct": false,
            "version": "2.7.2",
            "ecosystem": "npm"
          },
          {
            "name": "typed-array-buffer",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "typedarray",
            "direct": false,
            "version": "0.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "typescript",
            "direct": false,
            "version": "5.9.3",
            "ecosystem": "npm"
          },
          {
            "name": "unc-path-regex",
            "direct": false,
            "version": "0.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "undertaker",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "undertaker-registry",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "undici",
            "direct": false,
            "version": "7.27.2",
            "ecosystem": "npm"
          },
          {
            "name": "undici-types",
            "direct": false,
            "version": "7.24.6",
            "ecosystem": "npm"
          },
          {
            "name": "union-value",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "unique-stream",
            "direct": false,
            "version": "2.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "unist-util-is",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "unist-util-stringify-position",
            "direct": false,
            "version": "2.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "unist-util-visit",
            "direct": false,
            "version": "2.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "unist-util-visit-parents",
            "direct": false,
            "version": "3.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "unset-value",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "upath",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "urix",
            "direct": false,
            "version": "0.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "url",
            "direct": false,
            "version": "0.11.4",
            "ecosystem": "npm"
          },
          {
            "name": "use",
            "direct": false,
            "version": "3.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "util",
            "direct": false,
            "version": "0.12.5",
            "ecosystem": "npm"
          },
          {
            "name": "util-deprecate",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "uzip-module",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "v8flags",
            "direct": false,
            "version": "3.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "validate-npm-package-license",
            "direct": false,
            "version": "3.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "value-or-function",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "vfile-message",
            "direct": false,
            "version": "2.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "vinyl",
            "direct": false,
            "version": "2.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "vinyl-fs",
            "direct": false,
            "version": "3.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "vinyl-sourcemap",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "vite",
            "direct": false,
            "version": "8.0.16",
            "ecosystem": "npm"
          },
          {
            "name": "vite-plugin-node-polyfills",
            "direct": false,
            "version": "0.28.0",
            "ecosystem": "npm"
          },
          {
            "name": "vitefu",
            "direct": false,
            "version": "1.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "vitest",
            "direct": false,
            "version": "4.1.8",
            "ecosystem": "npm"
          },
          {
            "name": "vm-browserify",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "w3c-xmlserializer",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "webidl-conversions",
            "direct": false,
            "version": "8.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "whatwg-mimetype",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "whatwg-url",
            "direct": false,
            "version": "16.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "which",
            "direct": false,
            "version": "1.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "which-module",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "which-typed-array",
            "direct": false,
            "version": "1.1.22",
            "ecosystem": "npm"
          },
          {
            "name": "why-is-node-running",
            "direct": false,
            "version": "2.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "wrap-ansi",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "wrappy",
            "direct": false,
            "version": "1.0.2",
            "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": "xtend",
            "direct": false,
            "version": "4.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "y18n",
            "direct": false,
            "version": "3.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "yaml",
            "direct": false,
            "version": "1.10.3",
            "ecosystem": "npm"
          },
          {
            "name": "yaml",
            "direct": false,
            "version": "2.9.0",
            "ecosystem": "npm"
          },
          {
            "name": "yargs",
            "direct": false,
            "version": "7.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "yargs-parser",
            "direct": false,
            "version": "5.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "yocto-queue",
            "direct": false,
            "version": "0.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "zimmerframe",
            "direct": false,
            "version": "1.1.4",
            "ecosystem": "npm"
          }
        ],
        "collected": true,
        "truncated": false,
        "total_count": 691,
        "direct_count": 10,
        "indirect_count": 681
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 0,
        "merged_prs": 8,
        "open_issues": 6,
        "closed_ratio": 0.908,
        "closed_issues": 59,
        "closed_unmerged_prs": 2
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "krmanik",
          "commits": 513,
          "avatar_url": "https://avatars.githubusercontent.com/u/12841290?v=4"
        },
        {
          "type": "User",
          "login": "koynoyno",
          "commits": 3,
          "avatar_url": "https://avatars.githubusercontent.com/u/46102189?v=4"
        }
      ],
      "contributors_sampled": 2,
      "top_contributor_share": 0.994
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "deploy.yml",
        "test-deploy.yml"
      ],
      "has_docs_dir": false,
      "linter_configs": [],
      "has_editorconfig": false,
      "has_linter_config": false,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "package-lock.json"
      ],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 8,
            "reason": "binaries present in source code",
            "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": "1 out of 1 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/16 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 3,
            "reason": "project has 1 contributing companies or organizations -- score normalized to 3",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 10,
            "reason": "no dangerous workflow patterns detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 0,
            "reason": "no update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 9,
            "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 21 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": null,
            "reason": "packaging workflow not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 5,
            "reason": "dependency not pinned by hash detected -- score normalized to 5",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 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": 0,
            "reason": "Project has not signed or included provenance with any releases.",
            "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": "22 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "91a69cfe05625740601b392f8ba2193de2baac75",
        "ran_at": "2026-07-24T03:54:23Z",
        "aggregate_score": 3.1,
        "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-06-16T04:44:20Z",
      "oldest_open_prs": [],
      "last_merged_pr_at": "2026-06-14T03:51:37Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": [
        {
          "number": 58,
          "created_at": "2024-09-18T10:43:43Z",
          "last_comment_at": "2026-06-13T06:40:08Z",
          "last_comment_author": "krmanik"
        },
        {
          "number": 62,
          "created_at": "2025-01-21T13:55:47Z",
          "last_comment_at": "2025-01-24T00:59:20Z",
          "last_comment_author": "krmanik"
        },
        {
          "number": 68,
          "created_at": "2025-11-27T19:56:30Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 70,
          "created_at": "2026-01-03T11:58:37Z",
          "last_comment_at": "2026-01-29T00:11:20Z",
          "last_comment_author": "krmanik"
        },
        {
          "number": 71,
          "created_at": "2026-01-21T12:16:07Z",
          "last_comment_at": "2026-06-14T06:23:19Z",
          "last_comment_author": "krmanik"
        },
        {
          "number": 78,
          "created_at": "2026-06-13T10:28:10Z",
          "last_comment_at": "2026-06-14T04:14:03Z",
          "last_comment_author": "krmanik"
        }
      ]
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/krmanik/Anki-xiehanzi",
    "host": "github.com",
    "name": "Anki-xiehanzi",
    "owner": "krmanik"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 55,
      "inputs": {
        "security": 46,
        "vitality": 52,
        "community": 60,
        "governance": 48,
        "engineering": 67
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "moderate",
        "name": "Vitality",
        "value": 52,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "moderate",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 50,
            "inputs": {
              "commits_last_year": 120,
              "human_commit_share": 1,
              "days_since_last_push": 37,
              "active_weeks_last_year": 5
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 37 days ago",
                "points": 18,
                "status": "partial",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 37
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "5/52 weeks with commits",
                "points": 3.5,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 5
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "120 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 120
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "30 commit(s) and 21 issue activity found in the last 90 days -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "moderate",
            "name": "Release discipline",
            "note": null,
            "notes": [],
            "value": 56,
            "inputs": {
              "releases_count": 18,
              "latest_release_tag": "v2.3",
              "releases_from_tags": false,
              "days_since_latest_release": 215,
              "mean_days_between_releases": 171.4
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "18 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 18
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 215 days ago",
                "points": 16.2,
                "status": "partial",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 215
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~171.4 days",
                "points": 12.6,
                "status": "partial",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 171.4
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "Project has not signed or included provenance with any releases.",
                "points": 0,
                "status": "missed",
                "details": [],
                "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": 37,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "last human commit 37 days ago",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_maintained",
                    "params": {
                      "days": 37
                    }
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "moderate",
        "name": "Community & Adoption",
        "value": 60,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "moderate",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 56,
            "inputs": {
              "forks": 32,
              "stars": 392,
              "watchers": 3,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "392 stars",
                "points": 42,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 392
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "32 forks",
                "points": 12.4,
                "status": "partial",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 32
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "3 watchers",
                "points": 1.7,
                "status": "partial",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 3
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "moderate",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 64,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": true,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file present, not a recognized license",
                "points": 16.9,
                "status": "partial",
                "details": [
                  {
                    "code": "license_custom",
                    "params": {}
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 18,
                "status": "met",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.3
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "at_risk",
        "name": "Sustainability & Governance",
        "value": 48,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 15,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 2,
              "top_contributor_share": 0.994
            },
            "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 99% of commits",
                "points": 0.1,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 99
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "2 contributors",
                "points": 2.7,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 1 contributing companies or organizations -- score normalized to 3",
                "points": 3,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "good",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 73,
            "inputs": {
              "merged_prs": 8,
              "open_issues": 6,
              "closed_issues": 59,
              "issue_closed_ratio": 0.908,
              "closed_unmerged_prs": 2
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "91% of issues closed",
                "points": 42.4,
                "status": "partial",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 91
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "8/10 decided PRs merged",
                "points": 30.6,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 8,
                      "decided": 10
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/16 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "moderate",
            "name": "Ownership & stewardship",
            "note": "Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "verified_domain"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 63,
            "inputs": {
              "followers": 127,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "krmanik",
              "public_repos": 73,
              "account_age_days": 4060
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "personal (user) account",
                "points": 10,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_personal",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": "not applicable to user accounts",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_applicable_to_user_accounts",
                    "params": {}
                  }
                ],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "127 followers of krmanik",
                "points": 15.1,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 127,
                      "login": "krmanik"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "73 public repos, account ~11 yr old",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 73
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 11
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "moderate",
        "name": "Engineering Quality",
        "value": 67,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "moderate",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 68,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": false,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "2 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 24,
                "status": "met",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "1 out of 1 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": [
                "anki",
                "ankidroid",
                "mandarin",
                "chinese-language",
                "practice-mandarin",
                "drawing-strokes",
                "hanzi",
                "hanzi-writer",
                "anki-xiehanzi",
                "anki-decks",
                "chinese-characters",
                "mandarin-chinese",
                "hacktoberfest",
                "hsk",
                "hsk3",
                "new-hsk"
              ],
              "has_wiki": false,
              "homepage": "https://krmanik.github.io/Anki-xiehanzi",
              "has_readme": true,
              "has_docs_dir": false,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": "https://krmanik.github.io/Anki-xiehanzi",
                "points": 15,
                "status": "met",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": "16 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 16
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "at_risk",
        "name": "Security",
        "value": 46,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Packaging. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "packaging"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 32,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 17,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 1,
              "scorecard_aggregate": 3.1
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "binaries present in source code",
                "points": 6,
                "status": "partial",
                "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": "1 out of 1 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/16 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 1 contributing companies or organizations -- score normalized to 3",
                "points": 0.8,
                "status": "partial",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "no update tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.2,
                "status": "partial",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "30 commit(s) and 21 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 not detected",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 5",
                "points": 2.5,
                "status": "partial",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool 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": "Project has not signed or included provenance with any releases.",
                "points": 0,
                "status": "missed",
                "details": [],
                "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": "22 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): Indirect dependencies free of known advisories, No advisories left outstanding. Remaining weights renormalized. Matched 691 resolved dependencies against OSV. This repository publishes no package the index resolves, so the repository dependency graph was assessed instead. That graph mixes development and test pins with shipped dependencies, so only the declared runtime dependencies are scored; transitive findings are reported as context and excluded from the score. Reachability is not analyzed.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "indirect_dependencies_free_of_known_advisories",
                    "no_advisories_left_outstanding"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              },
              {
                "code": "advisories_scope_repository",
                "params": {
                  "assessed": 691
                }
              },
              {
                "code": "advisories_repo_graph_caveat",
                "params": {}
              },
              {
                "code": "advisories_reachability",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "source": "osv",
              "advisories": 23,
              "affected_packages": 13,
              "assessed_packages": 691,
              "unassessed_packages": 0,
              "affected_by_severity": "critical 1, high 6, moderate 4, low 2",
              "direct_affected_packages": 0
            },
            "components": [
              {
                "key": "direct_dependencies_free_of_known_advisories",
                "name": "Direct dependencies free of known advisories",
                "detail": "no direct dependency carries a known advisory",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "no_direct_advisories",
                    "params": {}
                  }
                ],
                "max_points": 35
              },
              {
                "key": "indirect_dependencies_free_of_known_advisories",
                "name": "Indirect dependencies free of known advisories",
                "detail": "transitive set not separable from development and test dependencies in this scope",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "advisories_scope_not_separable",
                    "params": {}
                  }
                ],
                "max_points": 25
              },
              {
                "key": "no_advisories_left_outstanding",
                "name": "No advisories left outstanding",
                "detail": "no advisory carries a publication date",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "advisories_no_publication_date",
                    "params": {}
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "malicious_dependencies",
            "band": "excellent",
            "name": "Malicious dependencies",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "source": "osv",
              "meaning": "reported as a malicious package by the OpenSSF corpus; the remedy is removal or moving off the compromised name, never an upgrade of the same artifact. Versions the registry has since pulled are listed but not scored",
              "packages": [],
              "red_flag": false,
              "assessed_packages": 691,
              "malicious_packages": 0,
              "direct_malicious_packages": 0,
              "withdrawn_malicious_packages": 0,
              "installable_malicious_packages": 0
            },
            "components": [
              {
                "key": "no_dependency_reported_as_a_malicious_package",
                "name": "No dependency reported as a malicious package",
                "detail": "no dependency is reported as a malicious package",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "no_malicious_dependencies",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          },
          {
            "key": "high_risk_jurisdiction_exposure",
            "band": "excellent",
            "name": "High-Risk Jurisdiction Exposure",
            "note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
            "notes": [
              {
                "code": "jurisdiction_evidence_limits",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "meaning": "self-published location evidence; not nationality or citizenship",
              "red_flag": false,
              "exposures": [],
              "policy_countries": [
                "Russia",
                "Iran",
                "North Korea"
              ],
              "review_only_matches": 0,
              "assessed_self_published_locations": 1
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "no confirmed policy-scope location match",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "jurisdiction_no_match",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "moderate",
        "name": "AI Readiness",
        "value": 63,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "excellent",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 85,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.95,
              "agent_instruction_files": [
                "CLAUDE.md"
              ],
              "agent_instruction_max_bytes": 5826
            },
            "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": "95 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 95,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "at_risk",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 48,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "package-lock.json"
              ],
              "has_dockerfile": false,
              "typed_language": false,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": false,
              "typecheck_configs": [
                "tsconfig.json"
              ],
              "agent_commit_share": 0,
              "toolchain_manifests": [],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "tsconfig.json",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "tsconfig.json"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "no agent-authored commits among the last 100",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_authored_commits",
                    "params": {
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "no automated dependency updates observed",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_dependency_automation",
                    "params": {}
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 5",
                "points": 5,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "good",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 82,
            "inputs": {
              "primary_language": "HTML",
              "largest_source_bytes": 57978,
              "source_files_sampled": 40,
              "oversized_source_files": 0
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "HTML with type-check config (tsconfig.json)",
                "points": 27,
                "status": "partial",
                "details": [
                  {
                    "code": "typecheck_config_language",
                    "params": {
                      "files": "tsconfig.json",
                      "language": "HTML"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "0/40 source files over 60KB",
                "points": 55,
                "status": "met",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 40,
                      "oversized": 0
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "at_risk",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "example_dirs": [
                "notebooks"
              ],
              "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": "notebooks",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "notebooks"
                    }
                  }
                ],
                "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-24T03:54:42.120879Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/k/krmanik/Anki-xiehanzi.svg",
  "full_name": "krmanik/Anki-xiehanzi",
  "license_state": "custom",
  "license_spdx": null
}

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

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

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