Informe JSON sin procesar legible por máquina
{
"data": {
"repo": {
"topics": [
"design-system",
"pwa",
"react",
"typescript",
"ui-components"
],
"is_fork": false,
"size_kb": 431,
"has_wiki": false,
"homepage": null,
"languages": {
"CSS": 70848,
"HTML": 1453,
"TypeScript": 356717
},
"pushed_at": "2026-07-20T11:46:32Z",
"created_at": "2026-06-20T11:17:13Z",
"owner_type": "Organization",
"updated_at": "2026-07-20T11:40:35Z",
"description": "Shared React UI toolkit — design tokens, cmdk command palette, responsive viewport, theming, PWA shell.",
"is_archived": false,
"is_disabled": false,
"license_spdx": "MIT",
"default_branch": "main",
"license_spdx_raw": "MIT",
"primary_language": "TypeScript",
"significant_languages": [
"TypeScript",
"CSS"
]
},
"owner": {
"blog": "https://catalog.m.etamong.com",
"name": "etamong playground",
"type": "Organization",
"login": "etamong-playground",
"company": null,
"location": "Korea, South",
"followers": 2,
"avatar_url": "https://avatars.githubusercontent.com/u/295270411?v=4",
"created_at": "2026-06-20T02:18:00Z",
"is_verified": null,
"public_repos": 13,
"account_age_days": 33
},
"license": {
"state": "standard",
"spdx_id": "MIT",
"raw_spdx": "MIT",
"file_present": true,
"scorecard_found": true,
"profile_has_license": true
},
"activity": {
"releases": [
{
"tag": "v0.41.0",
"kind": "minor",
"published_at": "2026-07-18T15:10:40Z"
},
{
"tag": "v0.39.0",
"kind": "minor",
"published_at": "2026-07-13T06:41:11Z"
},
{
"tag": "v0.38.2",
"kind": "patch",
"published_at": "2026-07-08T00:28:17Z"
},
{
"tag": "v0.38.1",
"kind": "patch",
"published_at": "2026-07-06T13:49:28Z"
},
{
"tag": "v0.38.0",
"kind": "minor",
"published_at": "2026-07-06T13:49:26Z"
},
{
"tag": "v0.37.0",
"kind": "minor",
"published_at": "2026-07-06T13:49:25Z"
},
{
"tag": "v0.36.0",
"kind": "minor",
"published_at": "2026-07-06T13:49:23Z"
},
{
"tag": "v0.35.1",
"kind": "patch",
"published_at": "2026-07-06T13:49:22Z"
},
{
"tag": "v0.35.0",
"kind": "minor",
"published_at": "2026-07-06T13:49:20Z"
},
{
"tag": "v0.34.3",
"kind": "patch",
"published_at": "2026-07-06T13:49:19Z"
},
{
"tag": "v0.34.2",
"kind": "patch",
"published_at": "2026-06-26T23:57:38Z"
},
{
"tag": "v0.34.1",
"kind": "patch",
"published_at": "2026-06-26T23:57:24Z"
},
{
"tag": "v0.34.0",
"kind": "minor",
"published_at": "2026-06-26T23:57:09Z"
},
{
"tag": "v0.33.0",
"kind": "minor",
"published_at": "2026-07-06T13:49:17Z"
}
],
"recent_commits": [
{
"oid": "80aef6fd77d6fb733334e8b87c57bb2aaf6cacf4",
"body": null,
"is_bot": true,
"headline": "docs(adr): add ADR link-stub pointing to planning",
"author_name": "ditto-m[bot]",
"author_login": "ditto-m[bot]",
"committed_at": "2026-07-20T11:39:43Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ecd991787dccff20fc9a664957e670eb514c6b5c",
"body": "… docs/adr)",
"is_bot": true,
"headline": "chore: set @etamong-playground/admin as codeowner (planning=all, else…",
"author_name": "ditto-m[bot]",
"author_login": "ditto-m[bot]",
"committed_at": "2026-07-19T12:47:30Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d92dfeb3b8113fe51c8c6478e91c99d43cc791a3",
"body": "styles.css deliberately paints only the library's own --etu-* components\nso it stays safe to import into any app; the flip side is every app must\nhand-wire the page shell, and forgetting it renders dark-mode text\ninvisible on the browser's default white body (ui#21). body.etu-page\ngives apps the sam\n[…]\n/color/font-family rule as a scoped\nopt-in class instead of a bare body {} rule.\n\nCloses etamong-playground/planning#835\n\nCo-authored-by: ditto-m[bot] <296158794+ditto-m[bot]@users.noreply.github.com>",
"is_bot": true,
"headline": "feat: opt-in body.etu-page class for the page shell (v0.41.0) (#36)",
"author_name": "ditto-m[bot]",
"author_login": "ditto-m[bot]",
"committed_at": "2026-07-18T15:05:40Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "4b67774b5cecf905955e33457a20bebaa111758d",
"body": "…k (#35)\n\nPlaywright ≥1.38 rejects a non-destructured first parameter (\"First argument\nmust use the object destructuring pattern\"), so the helper's `async (args) =>`\nthrew at registration — unusable by any consumer (they call assertViewportFit\ndirectly instead). Destructure `{ page }` (the only fixt\n[…]\nge }`. Adds e2e/viewport-fit-helper.spec.ts\nwhich registers + runs the helper as a regression guard. Fixes planning#970.\n\nCo-authored-by: ditto-m[bot] <296158794+ditto-m[bot]@users.noreply.github.com>",
"is_bot": true,
"headline": "fix(testing): defineViewportFitTests uses a destructured test callbac…",
"author_name": "ditto-m[bot]",
"author_login": "ditto-m[bot]",
"committed_at": "2026-07-18T10:02:09Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "c9a096d28a948c73a408946d03281eac4aaee93e",
"body": "…point (#34)\n\n- DialogHost: catch Escape/Enter on a document keydown listener while a\n dialog is open, matching NotificationBell/Sidebar/UserMenu. uiConfirm()\n never focuses the overlay, so the old div-scoped handler never fired;\n drop it as dead. Adds dialog keyboard regression tests.\n- Toaster:\n[…]\nllapse breakpoint 768px -> 719px, aligning with the fleet\n 720px mobile/tablet boundary (sidebar/tab-bar/viewportCore).\n\nCo-authored-by: ditto-m[bot] <296158794+ditto-m[bot]@users.noreply.github.com>",
"is_bot": true,
"headline": "fix: dialog Escape/Enter, toaster safe-area lift, DocsHub 720px break…",
"author_name": "ditto-m[bot]",
"author_login": "ditto-m[bot]",
"committed_at": "2026-07-18T06:41:11Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "fd700fab06ec7bd32a274863e9b56215645603a6",
"body": "Add es-hangul (MIT, zero-dep) and layer choseong (initial-consonant)\nmatching onto the cmdk palette: typing \"ㅍㄹㅈㅌ\" finds \"프로젝트\".\n\n- koreanMatch() in keywords.ts: choseong-only queries match against\n getChoseong(content); other queries stay plain substring, so a full\n word (\"알림\") matches by text an\n[…]\nuntToHangul is\n deprecated upstream, omitted).\n- vitest matcher + paletteFilter tests, Playwright choseong palette e2e.\n\nCo-authored-by: ditto-m[bot] <296158794+ditto-m[bot]@users.noreply.github.com>",
"is_bot": true,
"headline": "feat: Korean choseong command-palette search + es-hangul josa (#33)",
"author_name": "ditto-m[bot]",
"author_login": "ditto-m[bot]",
"committed_at": "2026-07-18T05:19:11Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "e2b6978e259f04e38cffbef5d7f836bbe307015f",
"body": "…n (#32)\n\nEmbedded WebViews (KakaoTalk / Instagram / Facebook / LINE / Naver) get\n403 disallowed_useragent from Google. fleetSignIn() (thus AuthGate,\nLoginButton, useIdentity().signIn) now tries to reopen the /auth/login\nURL in the system browser first — scheme redirect for KakaoTalk/LINE,\nChrome in\n[…]\n\nSFSafariViewController are valid OAuth surfaces). Also exported from\n/helpers for non-React callers.\n\nRefs planning#925\n\nCo-authored-by: ditto-m[bot] <296158794+ditto-m[bot]@users.noreply.github.com>",
"is_bot": true,
"headline": "feat: inAppBreakout() — bounce in-app browsers out before Google logi…",
"author_name": "ditto-m[bot]",
"author_login": "ditto-m[bot]",
"committed_at": "2026-07-13T06:38:21Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "e55cf2f08638a288185f2dd27eff5099e8978694",
"body": "Co-authored-by: ditto-m[bot] <296158794+ditto-m[bot]@users.noreply.github.com>",
"is_bot": true,
"headline": "chore: release v0.38.2 — refresh npm package description (#31)",
"author_name": "ditto-m[bot]",
"author_login": "ditto-m[bot]",
"committed_at": "2026-07-08T00:25:33Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3af5b769e66b3803248e9e84bc230074dd04d1fb",
"body": "The description field rendered as a 967-char run-on on the GitHub\nPackages page. The full component inventory lives in the README's\n\"What's in the box\" section; the package description is now a concise\none-liner matching the sibling libs.\n\nCo-authored-by: ditto-m[bot] <296158794+ditto-m[bot]@users.noreply.github.com>",
"is_bot": true,
"headline": "package.json: trim overlong npm description to a one-liner (#30)",
"author_name": "ditto-m[bot]",
"author_login": "ditto-m[bot]",
"committed_at": "2026-07-07T14:35:27Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5ceb2f24d5b4aef8f15d4bdb408cdbe562f2bab7",
"body": "Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 5.4.21 to 6.4.3.\n- [Release notes](https://github.com/vitejs/vite/releases)\n- [Changelog](https://github.com/vitejs/vite/blob/v6.4.3/packages/vite/CHANGELOG.md)\n- [Commits](https://github.com/vitejs/vite/commits/v6.4.3/package\n[…]\nndency-version: 6.4.3\n dependency-type: direct:development\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
"is_bot": true,
"headline": "chore(deps-dev): bump vite from 5.4.21 to 6.4.3 (#23)",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2026-07-06T12:28:20Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "8ba928a451971d8b89b547fb79e36549c6d62b35",
"body": "…eploys (#29)\n\nThe hosting platform now watches main, builds the showcase in a sandboxed\njob, and deploys automatically (auto-sync) — no PAGES_TOKEN secret needed.\nci.yml keeps building the showcase on PRs.\n\nCo-authored-by: ditto-m[bot] <296158794+ditto-m[bot]@users.noreply.github.com>",
"is_bot": true,
"headline": "chore: drop the showcase deploy workflow — pages build-on-sync owns d…",
"author_name": "ditto-m[bot]",
"author_login": "ditto-m[bot]",
"committed_at": "2026-07-05T23:33:47Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4f27ed27fcae40a2841e8485e882f9a829986b4a",
"body": "- registry.ts: 21 showcased features with git-verified since-versions\n and primary source paths\n- FeatureTag badge on every demo card: since vX.Y.Z (npmjs version page\n when >=0.34.2, GitHub tag otherwise) + src (GitHub blob) + npm links\n- #/versions route: features grouped by introducing release, desc, with\n demo jump links; sidebar/palette/g+v entries\n- e2e: versions view renders groups; since badge links out\n\nCo-authored-by: ditto-m[bot] <296158794+ditto-m[bot]@users.noreply.github.com>",
"is_bot": true,
"headline": "feat(showcase): per-feature version metadata + versions view (#28)",
"author_name": "ditto-m[bot]",
"author_login": "ditto-m[bot]",
"committed_at": "2026-07-05T11:03:41Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "cb308ad88405c8503f574b8919e06b6161f053b9",
"body": "* fix: command palette not dismissed by overlay click (v0.36.1)\n\n.etu-cmdk-content was a full-screen inset-0 wrapper, so Radix saw every\nclick as inside the dialog and onPointerDownOutside never fired. The\nContent is now the centered panel itself; the overlay owns the backdrop.\n\n* test: Playwright e\n[…]\nnput overflow, toast, theme persistence, mobile tab bar.\nRuns in CI as a separate job via vite dev webServer.\n\n---------\n\nCo-authored-by: ditto-m[bot] <296158794+ditto-m[bot]@users.noreply.github.com>",
"is_bot": true,
"headline": "fix: palette overlay dismiss + Playwright e2e suite (v0.38.1) (#26)",
"author_name": "ditto-m[bot]",
"author_login": "ditto-m[bot]",
"committed_at": "2026-07-05T10:44:32Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "6c4210602bcebf0d7a8002e53914560b141aa735",
"body": "Co-authored-by: ditto-m[bot] <296158794+ditto-m[bot]@users.noreply.github.com>",
"is_bot": true,
"headline": "feat(sidebar): ⌘/Ctrl+B toggles the rail (v0.38.0) (#27)",
"author_name": "ditto-m[bot]",
"author_login": "ditto-m[bot]",
"committed_at": "2026-07-05T03:12:14Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7c5c18f3cf72682d22263bdb499e63737d88b89f",
"body": "Co-authored-by: ditto-m[bot] <296158794+ditto-m[bot]@users.noreply.github.com>",
"is_bot": true,
"headline": "chore: bump version to 0.37.0 (inline-collapsible rail) (#25)",
"author_name": "ditto-m[bot]",
"author_login": "ditto-m[bot]",
"committed_at": "2026-07-05T03:04:08Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "76b5a2b262c902f81bc9c990f7d55df4a787423c",
"body": "Co-authored-by: ditto-m[bot] <296158794+ditto-m[bot]@users.noreply.github.com>",
"is_bot": true,
"headline": "feat(sidebar): rail becomes inline-collapsible at tablet+desktop (#22)",
"author_name": "ditto-m[bot]",
"author_login": "ditto-m[bot]",
"committed_at": "2026-07-05T02:56:56Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ee180aaed2bdea0acef00416a5b4477d9d35ea8f",
"body": "…t lib dist (#24)\n\n* fix: locale-aware dialog default labels; showcase typecheck without lib dist\n\n- uiConfirm/uiPrompt default buttons were hardcoded Cancel/OK — a Korean\n dialog rendered mixed-language actions; defaults now follow <html lang>\n (취소/확인 under ko), which I18nProvider/setLocale keep \n[…]\n passed\n because pnpm build runs first\n\n* fix: dialog prompt input overflowed the modal (missing box-sizing)\n\n---------\n\nCo-authored-by: ditto-m[bot] <296158794+ditto-m[bot]@users.noreply.github.com>",
"is_bot": true,
"headline": "fix: dialog i18n defaults + input overflow; showcase typecheck withou…",
"author_name": "ditto-m[bot]",
"author_login": "ditto-m[bot]",
"committed_at": "2026-07-05T02:27:41Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "f46b63b38e16eb9caefb71309b59052b71cd1ac1",
"body": "* feat: add component showcase app + pages deploy workflow\n\n- showcase/: Vite app dogfooding the library as its own shell\n (Sidebar, NavigationBar, MobileTabBar, CommandPalette, theme, i18n)\n- deploys to the ui-showcase static site on push to main\n (guarded: skips green until PAGES_TOKEN secret is\n[…]\nts-based classification), values re-read on theme toggle\n- README: document the app-side body wiring contract\n\n---------\n\nCo-authored-by: ditto-m[bot] <296158794+ditto-m[bot]@users.noreply.github.com>",
"is_bot": true,
"headline": "feat: add component showcase app + pages deploy workflow (#21)",
"author_name": "ditto-m[bot]",
"author_login": "ditto-m[bot]",
"committed_at": "2026-07-05T01:44:33Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "113c0ed06655725952addb2f13dd6f3ee889575a",
"body": "Co-authored-by: ditto-m[bot] <296158794+ditto-m[bot]@users.noreply.github.com>",
"is_bot": true,
"headline": "feat(i18n): add LanguageSwitcher + legacy storageKey migration (#20)",
"author_name": "ditto-m[bot]",
"author_login": "ditto-m[bot]",
"committed_at": "2026-07-05T01:04:37Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "04516091ac24a7bcf207e5c2359b5d9b620bb726",
"body": "…ets npmjs (v0.35.1) (#19)\n\nCo-authored-by: ditto-m[bot] <296158794+ditto-m[bot]@users.noreply.github.com>",
"is_bot": true,
"headline": "fix(publish): drop publishConfig.registry so the npmjs OIDC step targ…",
"author_name": "ditto-m[bot]",
"author_login": "ditto-m[bot]",
"committed_at": "2026-07-04T15:28:22Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "bc166398a3ecbf4fa7bd2a2c9d1765089d50a2ff",
"body": "….0) (#18)\n\nCo-authored-by: ditto-m[bot] <296158794+ditto-m[bot]@users.noreply.github.com>",
"is_bot": true,
"headline": "feat(sidebar): rail expand toggle + icon labels at tablet tier (v0.35…",
"author_name": "ditto-m[bot]",
"author_login": "ditto-m[bot]",
"committed_at": "2026-07-04T14:51:05Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "93995629678a893b0db9f0c4dd97de613948591b",
"body": "…d gitlab registry) (#17)\n\nCo-authored-by: ditto-m[bot] <296158794+ditto-m[bot]@users.noreply.github.com>",
"is_bot": true,
"headline": "chore: rename package @etamong-playground/ui (drop @etamong-lab + dea…",
"author_name": "ditto-m[bot]",
"author_login": "ditto-m[bot]",
"committed_at": "2026-07-04T14:03:09Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e8f87e9451d911b99126b7a5a8621ec771df7c74",
"body": "GitLab is decommissioned (planning#757 verification sweep); CI is GitHub Actions.\n\nCo-authored-by: ditto-m[bot] <296158794+ditto-m[bot]@users.noreply.github.com>",
"is_bot": true,
"headline": "chore(ci): remove dead GitLab CI include snippet (#16)",
"author_name": "ditto-m[bot]",
"author_login": "ditto-m[bot]",
"committed_at": "2026-07-04T01:05:31Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "52904c5fe117219c76b3f98d766056b56fe7c8e5",
"body": "Bumps [vitest](https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest) from 2.1.9 to 3.2.6.\n- [Release notes](https://github.com/vitest-dev/vitest/releases)\n- [Changelog](https://github.com/vitest-dev/vitest/blob/main/docs/releases.md)\n- [Commits](https://github.com/vitest-dev/vitest/commits\n[…]\nndency-version: 3.2.6\n dependency-type: direct:development\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
"is_bot": true,
"headline": "chore(deps-dev): bump vitest from 2.1.9 to 3.2.6 (#15)",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2026-07-01T08:01:56Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "8c577aba694932810f749d7af2e3e9a7099c581b",
"body": "…34.3 (#14)\n\nCo-authored-by: ditto-m[bot] <296158794+ditto-m[bot]@users.noreply.github.com>",
"is_bot": true,
"headline": "feat(publish): npmjs OIDC trusted publishing + repository field + v0.…",
"author_name": "ditto-m[bot]",
"author_login": "ditto-m[bot]",
"committed_at": "2026-06-27T00:01:39Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7642cd267ae8df660a2604a3d15f4686144e9c96",
"body": "* fix(publish): isolate npmjs .npmrc so the GitHub Packages scope mapping doesn't redirect the npmjs publish\n\n* chore: release v0.34.2 (bootstrap publish to npmjs)\n\n---------\n\nCo-authored-by: ditto-m[bot] <296158794+ditto-m[bot]@users.noreply.github.com>",
"is_bot": true,
"headline": "fix(publish): isolate npmjs .npmrc + release v0.34.2 (bootstrap) (#13)",
"author_name": "ditto-m[bot]",
"author_login": "ditto-m[bot]",
"committed_at": "2026-06-25T11:16:31Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "adaa06d0eaa8dd0debe3a1454dbe809d068a32c2",
"body": "Co-authored-by: ditto-m[bot] <296158794+ditto-m[bot]@users.noreply.github.com>",
"is_bot": true,
"headline": "chore: release v0.34.1 (bootstrap publish to npmjs) (#12)",
"author_name": "ditto-m[bot]",
"author_login": "ditto-m[bot]",
"committed_at": "2026-06-25T10:56:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7eb7261980b6bd4c6c6fc9a30c5a4c54b424f1d9",
"body": "…ages); drop dead Forgejo (#11)\n\nCo-authored-by: ditto-m[bot] <296158794+ditto-m[bot]@users.noreply.github.com>",
"is_bot": true,
"headline": "feat(publish): publish @etamong-playground/ui to npmjs (+ GitHub Pack…",
"author_name": "ditto-m[bot]",
"author_login": "ditto-m[bot]",
"committed_at": "2026-06-25T10:43:19Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3708d9950c7a39f7edb8b71f26113f3bd1a0416a",
"body": "feat: PolicyChangeBanner — shared hub-driven legal change banner",
"is_bot": false,
"headline": "Merge pull request #10 from etamong-playground/policy-change-banner",
"author_name": "Jooho Lee",
"author_login": "etamong",
"committed_at": "2026-06-24T01:26:35Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6d94f101ecec3bd194bbeeeab54f09ec07972718",
"body": "Generalizes the upcoming-policy-change banner that apps were duplicating\nlocally (shortener's LegalNotice, schedule-manager's local banner). Fetches\nthe legal hub status.json, filters to the app's serviceId, and renders a\ndismissible amber strip during the advance-notice window. KO/EN, adverse-aware,\nrouter-agnostic link, hydration-safe (useSyncExternalStore gate). v0.34.0.",
"is_bot": false,
"headline": "feat: PolicyChangeBanner — shared hub-driven legal change banner",
"author_name": "Jooho Lee",
"author_login": "etamong",
"committed_at": "2026-06-24T01:26:28Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f2668dc9eda11cee4eaa9cd2cfe73d7d835a0b61",
"body": null,
"is_bot": true,
"headline": "chore: set @etamong-playground/admin as default codeowner",
"author_name": "ditto-m[bot]",
"author_login": "ditto-m[bot]",
"committed_at": "2026-06-23T14:25:01Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ac371fc9ad365d791256e8a6e957b0aca6ff956f",
"body": "… can't publish packages) (#9)",
"is_bot": false,
"headline": "ci: Forgejo publishes with the npm-publish org secret (built-in token…",
"author_name": "Jooho Lee",
"author_login": "etamong",
"committed_at": "2026-06-22T15:33:49Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d762f270709e5d21290cb11658fcc92fec8e067f",
"body": "…ernal svc url) (#8)",
"is_bot": false,
"headline": "ci: detect host by github.com (Forgejo's GITHUB_SERVER_URL is the int…",
"author_name": "Jooho Lee",
"author_login": "etamong",
"committed_at": "2026-06-22T15:26:55Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4bf3d25c38f075e6a1a8604a97732a90aecbf8ec",
"body": "…es on forgejo) (#7)",
"is_bot": false,
"headline": "ci: platform-aware publish (GitHub Packages on github, Forgejo Packag…",
"author_name": "Jooho Lee",
"author_login": "etamong",
"committed_at": "2026-06-22T15:21:57Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "283c6ea81928e886f7efce714ea2b246b483bd33",
"body": "…ayground) (#5)",
"is_bot": false,
"headline": "ci: publish to GitHub Packages on version tag (rescope to @etamong-pl…",
"author_name": "Jooho Lee",
"author_login": "etamong",
"committed_at": "2026-06-22T11:55:12Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a85a57afcb75181995ca1a3f21e5a8cc727a93e4",
"body": null,
"is_bot": false,
"headline": "ci: run on GitHub-hosted runners; drop internal publish workflow",
"author_name": "Jooho Lee",
"author_login": "etamong",
"committed_at": "2026-06-20T19:57:57Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "194e2705bc4b738aa143f8a4e58e1b22f87c09e0",
"body": null,
"is_bot": false,
"headline": "docs: add issue templates",
"author_name": "Jooho Lee",
"author_login": "etamong",
"committed_at": "2026-06-20T19:57:56Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "12d39e94296067266e22aeaa0388cbfcf11a2b07",
"body": null,
"is_bot": false,
"headline": "docs: reword About",
"author_name": "Jooho Lee",
"author_login": "etamong",
"committed_at": "2026-06-20T19:44:09Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d52f94b360dd4a324badc1b96f9b439f00f014a0",
"body": null,
"is_bot": false,
"headline": "chore: prep repo for public release",
"author_name": "Jooho Lee",
"author_login": "etamong",
"committed_at": "2026-06-20T19:28:00Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "98f006805a962451ec91aae0e0634d51fb6618cc",
"body": null,
"is_bot": false,
"headline": "docs: tidy README",
"author_name": "Jooho Lee",
"author_login": "etamong",
"committed_at": "2026-06-20T19:15:59Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "532175d4af8051533cc5d28e344c1adc3a64dab6",
"body": "* ci: switch publish to arc-etamong-playground runner + Kubernetes Vault auth\n\n* fix: add data/ segment to vault KV v2 secret paths\n\nvault-action@v3 requires the full KV v2 path including data/;\nomitting it caused 403 from Vault policy check.",
"is_bot": false,
"headline": "ci: publish to GitHub Packages + Forgejo via ARC runner + Vault auth",
"author_name": "Jooho Lee",
"author_login": "etamong",
"committed_at": "2026-06-20T17:30:57Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d2cd77af97db867b00b696121ff2648c4a00755c",
"body": "…nt with infra)",
"is_bot": false,
"headline": "ci: use https://vault.m.etamong.com (reachable from cluster; consiste…",
"author_name": "Jooho Lee",
"author_login": "etamong",
"committed_at": "2026-06-20T13:24:00Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c177aa35faf5eee856d03420333df90b54688d60",
"body": "…dow)",
"is_bot": false,
"headline": "ci: set kubernetesTokenPath=/vault/sa/token (bypass dind /var/run sha…",
"author_name": "Jooho Lee",
"author_login": "etamong",
"committed_at": "2026-06-20T13:22:05Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b52e4be7f63c131f8043bafa95f65d72d0badeb4",
"body": "…role)",
"is_bot": false,
"headline": "ci: switch vault-action to kubernetes auth (arc-runner-workflows k8s …",
"author_name": "Jooho Lee",
"author_login": "etamong",
"committed_at": "2026-06-20T13:17:04Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "381cdf64ba1cdbbf0e88e91d45475333e4e1eb6d",
"body": null,
"is_bot": false,
"headline": "ci: use self-hosted ARC runner + internal Vault URL (planning#259)",
"author_name": "Jooho Lee",
"author_login": "etamong",
"committed_at": "2026-06-20T13:07:15Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1bf679a91f1d6715942bbe3dadd1c286c4a83821",
"body": null,
"is_bot": false,
"headline": "ci: add workflow_dispatch + Vault JWT auth for npm publish",
"author_name": "Jooho Lee",
"author_login": "etamong",
"committed_at": "2026-06-20T12:42:22Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e2b6a8ec1ffb113bba7837b51d5e1e5ebff8e6cb",
"body": null,
"is_bot": false,
"headline": "ci: fetch Forgejo npm token from Vault JWT (no GitHub secrets)",
"author_name": "Jooho Lee",
"author_login": "etamong",
"committed_at": "2026-06-20T12:28:44Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4823719f5a78b80c905ddce21e9d1f74c426ff48",
"body": null,
"is_bot": false,
"headline": "ci: add GHA CI + dual-publish (planning#259 Wave 2)",
"author_name": "Jooho Lee",
"author_login": "etamong",
"committed_at": "2026-06-20T11:30:29Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "22f06282acd57935f5b3d554afe8ba172d2a9715",
"body": "ci: add GitHub Actions CI (planning#259 Wave 2)",
"is_bot": false,
"headline": "Merge pull request #1 from etamong-playground/wave2-gha-ci",
"author_name": "Jooho Lee",
"author_login": "etamong",
"committed_at": "2026-06-20T11:28:24Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8f1cf9aa4f9e2fc46118f2856a732ae580ca42bd",
"body": null,
"is_bot": false,
"headline": "ci: add GitHub Actions CI (planning#259 Wave 2)",
"author_name": "Jooho Lee",
"author_login": "etamong",
"committed_at": "2026-06-20T11:28:04Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "186542a82541f54884d02e948759aa17a1765774",
"body": "feat(v0.33.0): LegalMenuItem + LegalPage + useLegalAvailability\n\nSee merge request etamong-lab/shared/libs/ui!47",
"is_bot": false,
"headline": "Merge branch 'legal-section-components' into 'main'",
"author_name": "Jooho Lee",
"author_login": "etamong",
"committed_at": "2026-06-17T00:46:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1e15b96d55c71f81cab6da0e28722e032fe003a9",
"body": "# Conflicts:\n#\tpackage.json",
"is_bot": false,
"headline": "Merge remote-tracking branch 'origin/main' into legal-section-components",
"author_name": "Jooho Lee",
"author_login": "etamong",
"committed_at": "2026-06-17T00:44:39Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5fa32925d76764cc8073d36adc17494e7bcd12cb",
"body": "fix(sidebar): keep visible on long pages (v0.32.1)\n\nSee merge request etamong-lab/shared/libs/ui!48",
"is_bot": false,
"headline": "Merge branch 'sidebar-sticky' into 'main'",
"author_name": "Jooho Lee",
"author_login": "etamong",
"committed_at": "2026-06-17T00:19:53Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "79972c5cd3ae04f185f22e94b18c8218c68182a8",
"body": null,
"is_bot": false,
"headline": "fix(sidebar): keep visible on long pages (v0.32.1)",
"author_name": "Jooho Lee",
"author_login": "etamong",
"committed_at": "2026-06-17T00:19:53Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f8f01662e222af98150c5c56d130c264c484cb6f",
"body": "Operator decision in the planning#255 kickoff thread: 'etamong 식별/SSO 안내'\nwas too jargony for a user-facing menu row. '로그인 정책' is the plainer\nsynonym (still consistent with the L1 hub doc topic) and matches how\noperators describe authentik in support channels.\n\nApps still override per-locale via the identityLabel prop.",
"is_bot": false,
"headline": "ui(legalSection): rename default identity label to '로그인 정책'",
"author_name": "Jooho Lee",
"author_login": "etamong",
"committed_at": "2026-06-17T00:15:26Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "cdf3019d32df1dbe8212b30e816526e52a789a81",
"body": "… for sibling composition\n\nThe 더보기 → 법률 정보 grouping convention (planning concepts/mobile-more-page)\nshows '법률 정보 ›' and '문의하기 ↗' as TWO rows inside a single card.\nLegalMenuItem wrapping its own .etu-legal-card forces apps to either drop\nto two adjacent cards or hand-roll their own row primitive.\n\n \n[…]\n so the\n common case of [identity / settings rows above] reads cleanly.\n\nLegalPage continues to wrap in .etu-legal-card — it owns the entire\nsub-page surface and there's no sibling to compose with.",
"is_bot": false,
"headline": "ui(legalSection): LegalMenuItem renders just the row; export LegalRow…",
"author_name": "Jooho Lee",
"author_login": "etamong",
"committed_at": "2026-06-17T00:10:32Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "cb1b89770464aa88b92be593efcb2c1114047889",
"body": "Three legal-section primitives that group the per-app /more menu's\n이용약관 / 개인정보처리방침 rows into a single 법률 정보 ›' row that\nopens an in-app /more/legal sub-page (3-level nav). The sub-page is\ndriven by the legal hub's new /api/public-manifest endpoint so docless\ninternal apps (alert-ops, draw, minccino,\n[…]\nlegal.m.etamong.com#<anchor>.\n\n11 vitest cases cover kind ordering, identity filtering, soft-TTL\ncache hit, refresh(), error path, and the empty/loading rendering.\n\nRelates to etamong-lab/planning#255",
"is_bot": false,
"headline": "feat(v0.33.0): LegalMenuItem + LegalPage + useLegalAvailability",
"author_name": "Jooho Lee",
"author_login": "etamong",
"committed_at": "2026-06-17T00:03:25Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "c0f1692fa334786ff7159b40a1acf3fe514cadec",
"body": "feat(v0.32.0): NotificationBell — fleet inbox-on-bell primitive\n\nSee merge request etamong-lab/shared/libs/ui!46",
"is_bot": false,
"headline": "Merge branch 'notification-bell' into 'main'",
"author_name": "Jooho Lee",
"author_login": "etamong",
"committed_at": "2026-06-15T22:24:21Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e190a50fbed369a6a8b89c9a5dc5b1332799bced",
"body": "… inbox surfaces\n\nBell trigger with unread badge, desktop popover (UserMenu placement\ncontract, auto-flip) and mobile bottom sheet (backdrop, safe-area inset,\nslide-up, body-scroll lock). Content-agnostic items so consumers render\ntheir own row body + inline actions.\n\nFirst consumer: pages access-request inbox — replaces a primary-nav\ntab + dedicated route with a header bell, per planning concept that\nincoming notifications belong on a global surface, not in primary nav.",
"is_bot": false,
"headline": "feat(v0.32.0): NotificationBell — bell icon + popover/sheet for fleet…",
"author_name": "Jooho Lee",
"author_login": "etamong",
"committed_at": "2026-06-15T22:22:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "06bcf0234350c0876b0c731903d70b97716ff5e4",
"body": "feat(v0.31.0): OpenInBrowserButton — PWA escape hatch\n\nSee merge request etamong-lab/shared/libs/ui!45",
"is_bot": false,
"headline": "Merge branch 'feat/open-in-browser-button' into 'main'",
"author_name": "Jooho Lee",
"author_login": "etamong",
"committed_at": "2026-06-15T21:59:13Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "fd2c9c2fd3ebb25392d0a516f69d0c04d5e0718a",
"body": null,
"is_bot": false,
"headline": "feat(v0.31.0): OpenInBrowserButton — PWA escape hatch",
"author_name": "Jooho Lee",
"author_login": "etamong",
"committed_at": "2026-06-15T21:59:13Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5d4cdb5fe00ff3e1b447a570a2d2e757a53a1931",
"body": "feat(auth): fleet-auth primitives + isShareCrawler (v0.30.0)\n\nSee merge request etamong-lab/shared/libs/ui!44",
"is_bot": false,
"headline": "Merge branch 'ui-fleet-auth' into 'main'",
"author_name": "Jooho Lee",
"author_login": "etamong",
"committed_at": "2026-06-15T16:23:38Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1a5ce3e78bfaa13a59969844b78609750aa604b6",
"body": "Implements the route contract documented at\nplanning/wiki/concepts/fleet-auth.md (planning#252). New surface for\napps to standardise on instead of hand-rolling login/logout/expired-\nsession UI per app and to retire the oauth2-proxy-vs-in-app-OIDC split.\n\n- AuthGate, useIdentity, LoginButton, LogoutB\n[…]\ndispatchers\n\nLegacy useMe/signInUrl/signOutUrl (oauth2-proxy paths) remain exported\nunchanged — apps still on the sidecar keep working.\n\nTests: 9 new cases in tests/auth.test.tsx (full suite 28 pass).",
"is_bot": false,
"headline": "feat(auth): fleet-auth primitives + isShareCrawler (v0.30.0)",
"author_name": "Jooho Lee",
"author_login": "etamong",
"committed_at": "2026-06-15T16:09:18Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "28f64af9fd737c11787e786356b51bea0c2e3d00",
"body": "fix(v0.29.1): ship root entry as a Next.js client module (RSC barrel fix)\n\nSee merge request etamong-lab/shared-old/libs/ui!43",
"is_bot": false,
"headline": "Merge branch 'fix/v0.29.1-rsc-use-client' into 'main'",
"author_name": "Jooho Lee",
"author_login": "etamong",
"committed_at": "2026-06-14T23:57:08Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "870d100e667e132fcfe262d6ff2a8762bcba6e6e",
"body": "…fix)\n\nImporting anything from `@etamong-lab/ui` (root entry) inside a Next.js\nserver component crashed at build time with `g.createContext is not a\nfunction`. The bundled `dist/index.{js,cjs}` evaluates every sub-module\n(tsup bundles via the barrel re-exports), and several of them call\n`createConte\n[…]\ned\nend-to-end by pointing res-train at a locally-packed 0.29.1 tarball and\nrunning `pnpm build` — `/me` now collects cleanly.\n\nRelates to etamong-lab/planning#0 (release_ops noise observed 2026-06-15)",
"is_bot": false,
"headline": "fix(v0.29.1): ship root entry as a Next.js client module (RSC barrel …",
"author_name": "Jooho Lee",
"author_login": "etamong",
"committed_at": "2026-06-14T23:52:20Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "c36f9f72f8a323d710864ad7463e42cd7ff5de23",
"body": "feat(testing): MSW + ko-KR Playwright fixture + viewport-fit barrel (v0.29.0)\n\nSee merge request etamong-lab/shared/libs/ui!42",
"is_bot": false,
"headline": "Merge branch 'feat/testing-msw' into 'main'",
"author_name": "Jooho Lee",
"author_login": "etamong",
"committed_at": "2026-06-14T19:11:29Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "38fd3a80e33ce6c10598a39e146b58948afeee05",
"body": "…v0.29.0)",
"is_bot": false,
"headline": "feat(testing): MSW + ko-KR Playwright fixture + viewport-fit barrel (…",
"author_name": "Jooho Lee",
"author_login": "etamong",
"committed_at": "2026-06-14T19:11:29Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "14dd0184abff8578e0c7d503f3526ce4052adb97",
"body": "v0.28.2 — registerServiceWorker currentBuild dev-warn (iOS PWA staleness)\n\nSee merge request etamong-lab/shared/libs/ui!41",
"is_bot": false,
"headline": "Merge branch 'feat/v0.28.2-sw-staleness' into 'main'",
"author_name": "Jooho Lee",
"author_login": "etamong",
"committed_at": "2026-06-14T18:53:02Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "af74adcdddc8eff2391115bd1c413e6393f490f4",
"body": "…A staleness\n\nDetects the 'SW byte-identical across deploys' failure mode (the\ncanonical iPhone PWA 'updates very slowly' trigger): when an app passes\nits deploy SHA via { currentBuild }, the helper hashes the SW body on\nmount and persists with the build SHA. On the next reload, if the SHA\nchanged b\n[…]\nertions: dev-only,\nproduction dead-code via NODE_ENV check, one warning per session per\nevent.\n\nWiki cross-ref: planning concepts/pwa-cache-and-ios-shell +\nviewport-fit-assertions (companion pattern).",
"is_bot": false,
"headline": "feat(v0.28.2): registerServiceWorker currentBuild dev-warn for iOS PW…",
"author_name": "Jooho Lee",
"author_login": "etamong",
"committed_at": "2026-06-14T18:51:15Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "48936d4cdd929ec5a7297531910801ff3caf959e",
"body": "v0.28.1 — NavigationBar safeAreaTop + 17px title + viewport-fit dev assertions + CI gate\n\nSee merge request etamong-lab/shared/libs/ui!40",
"is_bot": false,
"headline": "Merge branch 'fix/v0.28.1-navbar-font' into 'main'",
"author_name": "Jooho Lee",
"author_login": "etamong",
"committed_at": "2026-06-14T18:41:20Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "812d436005acbc75954349d342617862225060d3",
"body": "Lifts the dev-mode console.warn signal into a CI failure:\n- src/testing.ts: assertViewportFit / defineViewportFitTests /\n FLEET_VIEWPORT_PROFILES (iphone-17-pro-pwa / ipad-mini-portrait /\n desktop-1280 / android-narrow).\n- ci/viewport-fit.gitlab-ci.yml: .etu-viewport-fit job — apps\n include: { project: .../ui, file: ci/viewport-fit.gitlab-ci.yml } and\n extend.\n- @playwright/test as optional peer; apps without e2e unaffected.\n\nWiki: planning concepts/viewport-fit-assertions.md (separate MR).",
"is_bot": false,
"headline": "0.28.1: ship @etamong-lab/ui/testing + CI snippet for viewport-fit gate",
"author_name": "Jooho Lee",
"author_login": "etamong",
"committed_at": "2026-06-14T18:38:20Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "07836a35a733fca7cfcdec7c479efa2a61474cc3",
"body": "… viewport-fit assertions\n\nThree layers preventing the iOS PWA title-row regression:\n\n1. <NavigationBar safeAreaTop> — explicit opt-out for apps that already\n have a global top-chrome bar above the per-page nav. Avoids stacking\n env(safe-area-inset-top) twice.\n2. .etu-navbar-title font-size: 17p\n[…]\nd, title < 16px, or a sticky/\n fixed ancestor is also eating safe-area-top. Production dead-code-\n eliminated via NODE_ENV check.\n\nWiki: planning concepts/viewport-fit-assertions.md (separate MR).",
"is_bot": false,
"headline": "feat(v0.28.1): NavigationBar safeAreaTop prop + 17px title + dev-mode…",
"author_name": "Jooho Lee",
"author_login": "etamong",
"committed_at": "2026-06-14T18:34:53Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "8328567f30097d4da8f8384708777250d9ae294e",
"body": "v0.28.0 — i18n + responsive 3-tier + theme fallback dark\n\nSee merge request etamong-lab/shared/libs/ui!39",
"is_bot": false,
"headline": "Merge branch 'feat/v0.28-i18n-responsive' into 'main'",
"author_name": "Jooho Lee",
"author_login": "etamong",
"committed_at": "2026-06-14T17:05:36Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7fc8309c88818e76315da21e36faea3ba0d1b2e2",
"body": "- I18nProvider/useT/useLocale (KO+EN, system default, EN fallback)\n- ViewportProvider/useViewport + 3-tier breakpoints (mobile<720/tablet 720-1023/desktop≥1024)\n- Sidebar tabletMode prop (rail default, drawer, full) + SidebarToggle + useSidebarDrawer\n- noFlashLocaleScript + noFlashViewportScript\n- Theme fallback light→dark\n\nDefault Sidebar tabletMode='rail' is a visible behavior change at 720-1023px;\napps wanting v0.27 look pass tabletMode='full'.",
"is_bot": false,
"headline": "feat(v0.28.0): i18n + responsive 3-tier + theme fallback dark",
"author_name": "Jooho Lee",
"author_login": "etamong",
"committed_at": "2026-06-14T16:58:59Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b9ea58b9aac2f67064a74e85b5a17280931a48ae",
"body": "v0.27.0 — BackButton fallback (canonical one-liner)\n\nSee merge request etamong-lab/shared/libs/ui!38",
"is_bot": false,
"headline": "Merge branch 'v0.27.0' into 'main'",
"author_name": "Jooho Lee",
"author_login": "etamong",
"committed_at": "2026-06-14T16:07:44Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a205ca8ff703b51f056dc7ce57163a979f306556",
"body": null,
"is_bot": false,
"headline": "trigger MR creation",
"author_name": "Jooho Lee",
"author_login": "etamong",
"committed_at": "2026-06-14T16:03:09Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7d037dbbdf6982acbcab5edc039bb96c30351fd3",
"body": "Adoption-first refinement to the in-app back primitives shipped in\nv0.8.0. The hook/component pair is correct but uptake across the fleet\nwas zero — apps were rolling their own `history.back()` instead. v0.27.0\nmakes the right thing one prop:\n\n <BackButton fallback=\"/more\" /> //\n[…]\nton.test.tsx\ncovers 12 cases across the new one-liner + back-compat paths.\n\nWiki: planning/wiki/concepts/spa-navigation-state.md gets updated as\nadoption rolls out across the fleet (separate session).",
"is_bot": false,
"headline": "v0.27.0 — BackButton fallback (canonical one-liner)",
"author_name": "Jooho Lee",
"author_login": "etamong",
"committed_at": "2026-06-14T16:02:19Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "46b6ec41cdf8a9f36efbe9e1c4ef8c08a67cddf4",
"body": "feat: DocsHubSkill.publicUrl + install one-liner UI (v0.26.0)\n\nSee merge request etamong-lab/shared/libs/ui!37",
"is_bot": false,
"headline": "Merge branch 'docs-skill-public-url' into 'main'",
"author_name": "Jooho Lee",
"author_login": "etamong",
"committed_at": "2026-06-14T03:40:14Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "43a93869b116799fd040f702234684e2105edc58",
"body": "Adds an optional `publicUrl` to `DocsHubSkill` pointing at a stable\npublic endpoint serving the same skill markdown bytes as the download\nbutton. Convention: `https://<app>.m.etamong.com/skill.md`.\n\nWhen set, the default Claude-skill usage section leads with\n\n curl -fsSL <publicUrl> -o ~/.claude/sk\n[…]\nunauthenticated, `text/markdown`,\npublic-shaped (no tokens / user-specific routes).\n\nAdds `.etu-docs-hub-skill-install{,-cmd,-note}` styles.\n\nRelates to etamong-lab/planning#222 (public-URL contract).",
"is_bot": false,
"headline": "feat: DocsHubSkill.publicUrl + install one-liner UI (v0.26.0)",
"author_name": "Jooho Lee",
"author_login": "etamong",
"committed_at": "2026-06-14T02:59:04Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "09d502d191c21f2c97880926f0c65c196452cc28",
"body": "v0.25.0 — DataTable + Sidebar secondarySections\n\nSee merge request etamong-lab/shared/libs/ui!36",
"is_bot": false,
"headline": "Merge branch 'v0.25.0' into 'main'",
"author_name": "Jooho Lee",
"author_login": "etamong",
"committed_at": "2026-06-14T02:26:54Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "bb40276dd0ad33c3a139b8649278991a9ea3051c",
"body": null,
"is_bot": false,
"headline": "v0.25.0 — DataTable + Sidebar secondarySections",
"author_name": "Jooho Lee",
"author_login": "etamong",
"committed_at": "2026-06-14T02:19:57Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "60c631f6de01bfdea3a39c6f3edede8889004840",
"body": "feat: <Sidebar> secondarySections (folded into v0.24.0)\n\nSee merge request etamong-lab/shared/libs/ui!35",
"is_bot": false,
"headline": "Merge branch 'sidebar-v0.24.0' into 'main'",
"author_name": "Jooho Lee",
"author_login": "etamong",
"committed_at": "2026-06-14T02:15:53Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0901d31dfd148dfa62c296d29653c31a8fcad165",
"body": null,
"is_bot": false,
"headline": "feat: <Sidebar> secondarySections (folded into v0.24.0)",
"author_name": "Jooho Lee",
"author_login": "etamong",
"committed_at": "2026-06-14T02:15:53Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "325710a618c267a571d2da87e89d777eab94be43",
"body": "v0.24.0 — DataTable (wide table / narrow row-per-field cards)\n\nSee merge request etamong-lab/shared/libs/ui!34",
"is_bot": false,
"headline": "Merge branch 'feat/data-table' into 'main'",
"author_name": "Jooho Lee",
"author_login": "etamong",
"committed_at": "2026-06-14T02:09:39Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "be2b090df468a76bf3dfb8ec6fb0c3e6eca3b0df",
"body": null,
"is_bot": false,
"headline": "v0.24.0 — DataTable (wide table / narrow row-per-field cards)",
"author_name": "Jooho Lee",
"author_login": "etamong",
"committed_at": "2026-06-14T02:08:00Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "bf3fe7f411607588d6ed9e8b13de5096db8e8ee9",
"body": "v0.23.0 — NavigationBar + floating tab bar (iOS 26 Liquid Glass)\n\nSee merge request etamong-lab/shared/libs/ui!33",
"is_bot": false,
"headline": "Merge branch 'v0.23.0-liquid-glass' into 'main'",
"author_name": "Jooho Lee",
"author_login": "etamong",
"committed_at": "2026-06-13T18:45:47Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "372d737f278e830665c5e7e2b0bec3a80548a5f0",
"body": "- New <NavigationBar>: iOS-style small inline title, single 48px row\n (Android Material 3 hit floor), sticky safe-area-inset-top, fade-on-scroll\n opacity + shadow ramp, generic Unicode chevron (no SF Symbols).\n back prop accepts function | string (history.pushState + popstate) | true\n (history.b\n[…]\npaired with an @supports not solid-surface fallback for\n Android Chrome / Samsung Internet.\n- README documents the new component, Android compatibility floor, and\n the retired global avatar top bar.",
"is_bot": false,
"headline": "v0.23.0 — NavigationBar + floating tab bar (iOS 26 Liquid Glass)",
"author_name": "Jooho Lee",
"author_login": "etamong",
"committed_at": "2026-06-13T18:41:16Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "4c22826d14fd68adf52c4a816fb9c1b08d1fc988",
"body": "feat: iOS PWA shell helper + safe text-size-adjust reset (v0.22.0)\n\nSee merge request etamong-lab/shared/libs/ui!32",
"is_bot": false,
"headline": "Merge branch 'v0.22.0-ios-cache-fix' into 'main'",
"author_name": "Jooho Lee",
"author_login": "etamong",
"committed_at": "2026-06-13T18:33:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7a2384d3bc1739254d26dda6dc4eacd59b15c2fc",
"body": null,
"is_bot": false,
"headline": "feat: iOS PWA shell helper + safe text-size-adjust reset (v0.22.0)",
"author_name": "Jooho Lee",
"author_login": "etamong",
"committed_at": "2026-06-13T18:33:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f16c11e6dbc72045e5e7f177a41685761a15d9cc",
"body": "feat: <Sidebar> — desktop nav shell (counterpart to MobileTabBar)\n\nSee merge request etamong-lab/shared/libs/ui!31",
"is_bot": false,
"headline": "Merge branch 'feat/sidebar' into 'main'",
"author_name": "Jooho Lee",
"author_login": "etamong",
"committed_at": "2026-06-13T15:32:04Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b9a179958ecc47f8b05bb6980caf9f76116de347",
"body": "Implements the etamong-lab/planning fleet contract from\nwiki/concepts/sidebar-composition.md.\n\n- src/sidebar.tsx — <Sidebar> with AppHeader / PrimaryNavList /\n SecondaryNavList / SidebarFooter composition. Router-agnostic\n SidebarItem (same shape as MobileTabBarItem). No userMenu prop —\n identity\n[…]\n; description updated.\n\nDrive primary and secondary from the same arrays you feed\n<MobileTabBar items={primary.slice(0, 4).concat([moreTab])} /> and the\n/more page; one source of truth, two renderers.",
"is_bot": false,
"headline": "feat: <Sidebar> — desktop nav shell (counterpart to MobileTabBar)",
"author_name": "Jooho Lee",
"author_login": "etamong",
"committed_at": "2026-06-13T15:30:10Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "f4c4cd18ee379e08d830de30ea714a5f5c92dd51",
"body": "release: 0.20.0 — DocsHub stable\n\nSee merge request etamong-lab/shared/libs/ui!28",
"is_bot": false,
"headline": "Merge branch 'release/0.20.0' into 'main'",
"author_name": "Jooho Lee",
"author_login": "etamong",
"committed_at": "2026-06-13T09:19:29Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "97313159771d6f4541002f2ee3cdf9deadd49d4c",
"body": "Graduates DocsHub from alpha (0.20.0-alpha.*) to stable per the\nui-alpha-pilot-pattern: cherry-picked the alpha base (eff5eb3) and\nthe skill-usage section (246cb0a) onto the latest stable main; bumps\nversion to 0.20.0 so the tag publishes to the 'latest' dist-tag and\nconsumers can move from exact-pin to ^0.20.0.",
"is_bot": false,
"headline": "release: 0.20.0 stable",
"author_name": "Jooho Lee",
"author_login": "etamong",
"committed_at": "2026-06-13T09:17:03Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "46fcdf312b9326bdfd75d5f25e2d6d9ed2eeb5a9",
"body": "When a DocsHub consumer passes `skill`, DocsHub now appends a built-in\n'Claude skill 사용법' nav section explaining where to drop the downloaded\n`<name>.md` for Claude Code (`~/.claude/skills/<name>/SKILL.md`),\nCodex / other coding agents, and plain LLMs (paste body into context).\n\nSingle source of tru\n[…]\nadopts DocsHub gets the same\nskill-usage guidance without each writing its own. Override via\n`skill.usageSection` (custom node) or `null` (skip).\n\nBumps to 0.20.0-alpha.1 — pilot (pages) re-pins next.",
"is_bot": false,
"headline": "feat: DocsHub auto-appends 'Claude skill 사용법' section (alpha.1)",
"author_name": "Jooho Lee",
"author_login": "etamong",
"committed_at": "2026-06-13T09:17:03Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "82ae85f2ab3cb5c04ca9305027a3995419dd6f82",
"body": "`<DocsHub>` renders a sectioned in-app docs page (left section nav +\ncontent) with an optional top-right '📥 Claude skill 받기' button that\ndownloads a one-file Markdown skill (`<name>.md` with name+description\nfrontmatter + body) consumers can drop into Claude Code or another LLM.\n\nRouter-agnostic — s\n[…]\nto-\npublish to a non-`latest` dist-tag (the slug before the first dot —\n\"alpha\", \"rc\", …) so a stray `npm install @etamong-lab/ui` can't\ngrab them. Stable versions keep the existing `latest` behavior.",
"is_bot": false,
"headline": "feat: DocsHub (alpha) — in-app docs surface + Claude-skill download",
"author_name": "Jooho Lee",
"author_login": "etamong",
"committed_at": "2026-06-13T09:16:24Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "054c2cf596c84426905bf542b99529c49ef1bbaf",
"body": "release: v0.19.1 (UserMenu auto-flip + InstallBanner above tab bar) + revert DocsHub alphas\n\nSee merge request etamong-lab/shared/libs/ui!25",
"is_bot": false,
"headline": "Merge branch 'release/0.19.1' into 'main'",
"author_name": "Jooho Lee",
"author_login": "etamong",
"committed_at": "2026-06-13T08:57:38Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8f43a02bd80c9d95e005747a4585a080e65bd3ff",
"body": "An app that renders both has the install banner sitting at `bottom: 0.75rem`\nand the tab bar at `bottom: 0` — the banner's higher z-index then covers the\ntab bar's nav items. Use `body:has(.etu-mobile-tab-bar)` to add the tab bar's\nheight (+ safe-area inset) to the banner's offset. Bar height is a CSS\nvariable (`--etu-mobile-tab-bar-h`, default 56px) so apps with custom\nicon/label sizing can override.",
"is_bot": false,
"headline": "fix(InstallBanner): lift above <MobileTabBar> when both are mounted",
"author_name": "Jooho Lee",
"author_login": "etamong",
"committed_at": "2026-06-13T08:56:02Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5b01f6cca30d01ca46a9efb1e62c96a9ce6dacc4",
"body": "`<UserMenu placement=\"top-left\">` was sized for a vertical sidebar where the\ntrigger sits at the bottom. On the same layout's mobile breakpoint the sidebar\ncollapses into a horizontal topbar and the trigger ends up near the viewport\ntop — the dropdown then opens upward into nothing and gets clipped.\n\nMeasure the trigger's rect on open and flip each axis when the requested side\ndoesn't have room. `placement` is now a preferred hint rather than a hard\nchoice.",
"is_bot": false,
"headline": "fix(UserMenu): auto-flip placement when off-viewport (v0.20.0-alpha.1)",
"author_name": "Jooho Lee",
"author_login": "etamong",
"committed_at": "2026-06-13T08:56:02Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d474f92b502f0ebbc4274e32c87005890220fb83",
"body": "This reverts commit 7b19c0c020e33c938f4308f7b110cb3111c37dda, reversing\nchanges made to f2fa28861ab97e54897d6514f826f9ec2f97001f.",
"is_bot": false,
"headline": "Revert \"Merge branch 'feat/docs-hub-alpha' into 'main'\"",
"author_name": "Jooho Lee",
"author_login": "etamong",
"committed_at": "2026-06-13T08:55:42Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a5fbaae3bca3a15736124a1c3f437fbbd6581bed",
"body": "This reverts commit 38c53a496bb94667c9cb2fc720173becb6ca8cdd, reversing\nchanges made to 7b19c0c020e33c938f4308f7b110cb3111c37dda.",
"is_bot": false,
"headline": "Revert \"Merge branch 'feat/docs-hub-skill-usage' into 'main'\"",
"author_name": "Jooho Lee",
"author_login": "etamong",
"committed_at": "2026-06-13T08:55:42Z",
"body_truncated": false,
"is_coding_agent": false
}
],
"releases_count": 14,
"commits_last_year": 158,
"latest_release_at": "2026-07-18T15:10:40Z",
"latest_release_tag": "v0.41.0",
"releases_from_tags": false,
"days_since_last_push": 3,
"active_weeks_last_year": 6,
"days_since_latest_release": 5,
"mean_days_between_releases": 1.3
},
"community": {
"has_readme": true,
"has_license": true,
"has_description": true,
"has_contributing": false,
"health_percentage": 62,
"has_issue_template": false,
"has_code_of_conduct": false,
"has_pull_request_template": true
},
"ecosystem": {
"packages": [
{
"name": "@etamong-playground/ui",
"exists": true,
"license": "MIT",
"keywords": [],
"ecosystem": "npm",
"matches_repo": true,
"registry_url": "https://www.npmjs.com/package/@etamong-playground/ui",
"is_deprecated": false,
"latest_version": "0.41.0",
"repository_url": "https://github.com/etamong-playground/ui",
"versions_count": 10,
"total_downloads": null,
"dependents_count": null,
"deprecation_note": null,
"maintainers_count": 1,
"monthly_downloads": 2204,
"first_published_at": "2026-06-25T11:17:03.967000Z",
"latest_published_at": "2026-07-18T15:06:29.308000Z",
"latest_version_yanked": null,
"days_since_latest_publish": 5
}
]
},
"popularity": {
"forks": 0,
"stars": 0,
"watchers": 0,
"fork_history": {
"days": [],
"complete": true,
"collected": 0,
"total_forks": 0
},
"star_history": {
"days": [],
"complete": true,
"collected": 0,
"total_stars": 0,
"collected_at": null
},
"open_issues_and_prs": 1
},
"ai_readiness": {
"has_nix": false,
"example_dirs": [],
"has_llms_txt": false,
"has_dockerfile": false,
"has_mcp_signal": false,
"bootstrap_files": [],
"api_schema_files": [],
"has_devcontainer": false,
"typecheck_configs": [
"showcase/tsconfig.json",
"tsconfig.json"
],
"toolchain_manifests": [],
"largest_source_bytes": 18376,
"source_files_sampled": 76,
"oversized_source_files": 0,
"agent_instruction_files": [],
"agent_instruction_max_bytes": null
},
"dependencies": {
"manifests": [
"package.json",
"showcase/package.json"
],
"advisories": {
"error": null,
"scope": "published_package",
"source": "osv",
"findings": [],
"collected": true,
"malicious": [],
"truncated": false,
"by_severity": {},
"advisory_count": 0,
"affected_count": 0,
"assessed_count": 27,
"malicious_count": 0,
"assessed_package": "npm:@etamong-playground/ui@0.41.0",
"unassessed_count": 0,
"direct_affected_count": 0
},
"ecosystems": [
"npm"
],
"dependencies": [
{
"name": "cmdk",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^1.1.1"
},
{
"name": "es-hangul",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "2.4.0"
},
{
"name": "@etamong-playground/ui",
"manifest": "showcase/package.json",
"ecosystem": "npm",
"version_constraint": "workspace:*"
},
{
"name": "react",
"manifest": "showcase/package.json",
"ecosystem": "npm",
"version_constraint": "^18.3.1"
},
{
"name": "react-dom",
"manifest": "showcase/package.json",
"ecosystem": "npm",
"version_constraint": "^18.3.1"
}
],
"all_dependencies": {
"error": null,
"source": "github-sbom",
"packages": [
{
"name": "cmdk",
"direct": true,
"version": "1.1.1",
"ecosystem": "npm"
},
{
"name": "es-hangul",
"direct": true,
"version": "2.4.0",
"ecosystem": "npm"
},
{
"name": "react",
"direct": true,
"version": "18.3.1",
"ecosystem": "npm"
},
{
"name": "react",
"direct": true,
"version": "^18.3.1",
"ecosystem": "npm"
},
{
"name": "react-dom",
"direct": true,
"version": "18.3.1",
"ecosystem": "npm"
},
{
"name": "react-dom",
"direct": true,
"version": "^18.3.1",
"ecosystem": "npm"
},
{
"name": "@ampproject/remapping",
"direct": false,
"version": "2.3.0",
"ecosystem": "npm"
},
{
"name": "@asamuzakjp/css-color",
"direct": false,
"version": "3.2.0",
"ecosystem": "npm"
},
{
"name": "@babel/code-frame",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/compat-data",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/core",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/generator",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/helper-compilation-targets",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/helper-globals",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/helper-module-imports",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/helper-module-transforms",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/helper-plugin-utils",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/helper-string-parser",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/helper-validator-identifier",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/helper-validator-option",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/helpers",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/parser",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-react-jsx-self",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-react-jsx-source",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/runtime",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/template",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/traverse",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/types",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@bcoe/v8-coverage",
"direct": false,
"version": "0.2.3",
"ecosystem": "npm"
},
{
"name": "@csstools/color-helpers",
"direct": false,
"version": "5.1.0",
"ecosystem": "npm"
},
{
"name": "@csstools/css-calc",
"direct": false,
"version": "2.1.4",
"ecosystem": "npm"
},
{
"name": "@csstools/css-color-parser",
"direct": false,
"version": "3.1.0",
"ecosystem": "npm"
},
{
"name": "@csstools/css-parser-algorithms",
"direct": false,
"version": "3.0.5",
"ecosystem": "npm"
},
{
"name": "@csstools/css-tokenizer",
"direct": false,
"version": "3.0.4",
"ecosystem": "npm"
},
{
"name": "@esbuild/aix-ppc64",
"direct": false,
"version": "0.25.12",
"ecosystem": "npm"
},
{
"name": "@esbuild/aix-ppc64",
"direct": false,
"version": "0.27.7",
"ecosystem": "npm"
},
{
"name": "@esbuild/android-arm",
"direct": false,
"version": "0.25.12",
"ecosystem": "npm"
},
{
"name": "@esbuild/android-arm",
"direct": false,
"version": "0.27.7",
"ecosystem": "npm"
},
{
"name": "@esbuild/android-arm64",
"direct": false,
"version": "0.25.12",
"ecosystem": "npm"
},
{
"name": "@esbuild/android-arm64",
"direct": false,
"version": "0.27.7",
"ecosystem": "npm"
},
{
"name": "@esbuild/android-x64",
"direct": false,
"version": "0.25.12",
"ecosystem": "npm"
},
{
"name": "@esbuild/android-x64",
"direct": false,
"version": "0.27.7",
"ecosystem": "npm"
},
{
"name": "@esbuild/darwin-arm64",
"direct": false,
"version": "0.25.12",
"ecosystem": "npm"
},
{
"name": "@esbuild/darwin-arm64",
"direct": false,
"version": "0.27.7",
"ecosystem": "npm"
},
{
"name": "@esbuild/darwin-x64",
"direct": false,
"version": "0.25.12",
"ecosystem": "npm"
},
{
"name": "@esbuild/darwin-x64",
"direct": false,
"version": "0.27.7",
"ecosystem": "npm"
},
{
"name": "@esbuild/freebsd-arm64",
"direct": false,
"version": "0.25.12",
"ecosystem": "npm"
},
{
"name": "@esbuild/freebsd-arm64",
"direct": false,
"version": "0.27.7",
"ecosystem": "npm"
},
{
"name": "@esbuild/freebsd-x64",
"direct": false,
"version": "0.25.12",
"ecosystem": "npm"
},
{
"name": "@esbuild/freebsd-x64",
"direct": false,
"version": "0.27.7",
"ecosystem": "npm"
},
{
"name": "@esbuild/linux-arm",
"direct": false,
"version": "0.25.12",
"ecosystem": "npm"
},
{
"name": "@esbuild/linux-arm",
"direct": false,
"version": "0.27.7",
"ecosystem": "npm"
},
{
"name": "@esbuild/linux-arm64",
"direct": false,
"version": "0.25.12",
"ecosystem": "npm"
},
{
"name": "@esbuild/linux-arm64",
"direct": false,
"version": "0.27.7",
"ecosystem": "npm"
},
{
"name": "@esbuild/linux-ia32",
"direct": false,
"version": "0.25.12",
"ecosystem": "npm"
},
{
"name": "@esbuild/linux-ia32",
"direct": false,
"version": "0.27.7",
"ecosystem": "npm"
},
{
"name": "@esbuild/linux-loong64",
"direct": false,
"version": "0.25.12",
"ecosystem": "npm"
},
{
"name": "@esbuild/linux-loong64",
"direct": false,
"version": "0.27.7",
"ecosystem": "npm"
},
{
"name": "@esbuild/linux-mips64el",
"direct": false,
"version": "0.25.12",
"ecosystem": "npm"
},
{
"name": "@esbuild/linux-mips64el",
"direct": false,
"version": "0.27.7",
"ecosystem": "npm"
},
{
"name": "@esbuild/linux-ppc64",
"direct": false,
"version": "0.25.12",
"ecosystem": "npm"
},
{
"name": "@esbuild/linux-ppc64",
"direct": false,
"version": "0.27.7",
"ecosystem": "npm"
},
{
"name": "@esbuild/linux-riscv64",
"direct": false,
"version": "0.25.12",
"ecosystem": "npm"
},
{
"name": "@esbuild/linux-riscv64",
"direct": false,
"version": "0.27.7",
"ecosystem": "npm"
},
{
"name": "@esbuild/linux-s390x",
"direct": false,
"version": "0.25.12",
"ecosystem": "npm"
},
{
"name": "@esbuild/linux-s390x",
"direct": false,
"version": "0.27.7",
"ecosystem": "npm"
},
{
"name": "@esbuild/linux-x64",
"direct": false,
"version": "0.25.12",
"ecosystem": "npm"
},
{
"name": "@esbuild/linux-x64",
"direct": false,
"version": "0.27.7",
"ecosystem": "npm"
},
{
"name": "@esbuild/netbsd-arm64",
"direct": false,
"version": "0.25.12",
"ecosystem": "npm"
},
{
"name": "@esbuild/netbsd-arm64",
"direct": false,
"version": "0.27.7",
"ecosystem": "npm"
},
{
"name": "@esbuild/netbsd-x64",
"direct": false,
"version": "0.25.12",
"ecosystem": "npm"
},
{
"name": "@esbuild/netbsd-x64",
"direct": false,
"version": "0.27.7",
"ecosystem": "npm"
},
{
"name": "@esbuild/openbsd-arm64",
"direct": false,
"version": "0.25.12",
"ecosystem": "npm"
},
{
"name": "@esbuild/openbsd-arm64",
"direct": false,
"version": "0.27.7",
"ecosystem": "npm"
},
{
"name": "@esbuild/openbsd-x64",
"direct": false,
"version": "0.25.12",
"ecosystem": "npm"
},
{
"name": "@esbuild/openbsd-x64",
"direct": false,
"version": "0.27.7",
"ecosystem": "npm"
},
{
"name": "@esbuild/openharmony-arm64",
"direct": false,
"version": "0.25.12",
"ecosystem": "npm"
},
{
"name": "@esbuild/openharmony-arm64",
"direct": false,
"version": "0.27.7",
"ecosystem": "npm"
},
{
"name": "@esbuild/sunos-x64",
"direct": false,
"version": "0.25.12",
"ecosystem": "npm"
},
{
"name": "@esbuild/sunos-x64",
"direct": false,
"version": "0.27.7",
"ecosystem": "npm"
},
{
"name": "@esbuild/win32-arm64",
"direct": false,
"version": "0.25.12",
"ecosystem": "npm"
},
{
"name": "@esbuild/win32-arm64",
"direct": false,
"version": "0.27.7",
"ecosystem": "npm"
},
{
"name": "@esbuild/win32-ia32",
"direct": false,
"version": "0.25.12",
"ecosystem": "npm"
},
{
"name": "@esbuild/win32-ia32",
"direct": false,
"version": "0.27.7",
"ecosystem": "npm"
},
{
"name": "@esbuild/win32-x64",
"direct": false,
"version": "0.25.12",
"ecosystem": "npm"
},
{
"name": "@esbuild/win32-x64",
"direct": false,
"version": "0.27.7",
"ecosystem": "npm"
},
{
"name": "@inquirer/ansi",
"direct": false,
"version": "2.0.7",
"ecosystem": "npm"
},
{
"name": "@inquirer/confirm",
"direct": false,
"version": "6.1.1",
"ecosystem": "npm"
},
{
"name": "@inquirer/core",
"direct": false,
"version": "11.2.1",
"ecosystem": "npm"
},
{
"name": "@inquirer/figures",
"direct": false,
"version": "2.0.7",
"ecosystem": "npm"
},
{
"name": "@inquirer/type",
"direct": false,
"version": "4.0.7",
"ecosystem": "npm"
},
{
"name": "@isaacs/cliui",
"direct": false,
"version": "8.0.2",
"ecosystem": "npm"
},
{
"name": "@istanbuljs/schema",
"direct": false,
"version": "0.1.6",
"ecosystem": "npm"
},
{
"name": "@jridgewell/gen-mapping",
"direct": false,
"version": "0.3.13",
"ecosystem": "npm"
},
{
"name": "@jridgewell/remapping",
"direct": false,
"version": "2.3.5",
"ecosystem": "npm"
},
{
"name": "@jridgewell/resolve-uri",
"direct": false,
"version": "3.1.2",
"ecosystem": "npm"
},
{
"name": "@jridgewell/sourcemap-codec",
"direct": false,
"version": "1.5.5",
"ecosystem": "npm"
},
{
"name": "@jridgewell/trace-mapping",
"direct": false,
"version": "0.3.31",
"ecosystem": "npm"
},
{
"name": "@mswjs/interceptors",
"direct": false,
"version": "0.41.9",
"ecosystem": "npm"
},
{
"name": "@open-draft/deferred-promise",
"direct": false,
"version": "2.2.0",
"ecosystem": "npm"
},
{
"name": "@open-draft/deferred-promise",
"direct": false,
"version": "3.0.0",
"ecosystem": "npm"
},
{
"name": "@open-draft/logger",
"direct": false,
"version": "0.3.0",
"ecosystem": "npm"
},
{
"name": "@open-draft/until",
"direct": false,
"version": "2.1.0",
"ecosystem": "npm"
},
{
"name": "@pkgjs/parseargs",
"direct": false,
"version": "0.11.0",
"ecosystem": "npm"
},
{
"name": "@playwright/test",
"direct": false,
"version": "1.60.0",
"ecosystem": "npm"
},
{
"name": "@radix-ui/primitive",
"direct": false,
"version": "1.1.4",
"ecosystem": "npm"
},
{
"name": "@radix-ui/react-compose-refs",
"direct": false,
"version": "1.1.3",
"ecosystem": "npm"
},
{
"name": "@radix-ui/react-context",
"direct": false,
"version": "1.1.4",
"ecosystem": "npm"
},
{
"name": "@radix-ui/react-dialog",
"direct": false,
"version": "1.1.16",
"ecosystem": "npm"
},
{
"name": "@radix-ui/react-dismissable-layer",
"direct": false,
"version": "1.1.12",
"ecosystem": "npm"
},
{
"name": "@radix-ui/react-focus-guards",
"direct": false,
"version": "1.1.4",
"ecosystem": "npm"
},
{
"name": "@radix-ui/react-focus-scope",
"direct": false,
"version": "1.1.9",
"ecosystem": "npm"
},
{
"name": "@radix-ui/react-id",
"direct": false,
"version": "1.1.2",
"ecosystem": "npm"
},
{
"name": "@radix-ui/react-portal",
"direct": false,
"version": "1.1.11",
"ecosystem": "npm"
},
{
"name": "@radix-ui/react-presence",
"direct": false,
"version": "1.1.6",
"ecosystem": "npm"
},
{
"name": "@radix-ui/react-primitive",
"direct": false,
"version": "2.1.5",
"ecosystem": "npm"
},
{
"name": "@radix-ui/react-slot",
"direct": false,
"version": "1.2.5",
"ecosystem": "npm"
},
{
"name": "@radix-ui/react-use-callback-ref",
"direct": false,
"version": "1.1.2",
"ecosystem": "npm"
},
{
"name": "@radix-ui/react-use-controllable-state",
"direct": false,
"version": "1.2.3",
"ecosystem": "npm"
},
{
"name": "@radix-ui/react-use-effect-event",
"direct": false,
"version": "0.0.3",
"ecosystem": "npm"
},
{
"name": "@radix-ui/react-use-escape-keydown",
"direct": false,
"version": "1.1.2",
"ecosystem": "npm"
},
{
"name": "@radix-ui/react-use-layout-effect",
"direct": false,
"version": "1.1.2",
"ecosystem": "npm"
},
{
"name": "@rolldown/pluginutils",
"direct": false,
"version": "1.0.0-beta.27",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-android-arm-eabi",
"direct": false,
"version": "4.61.1",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-android-arm-eabi",
"direct": false,
"version": "4.62.2",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-android-arm64",
"direct": false,
"version": "4.61.1",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-android-arm64",
"direct": false,
"version": "4.62.2",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-darwin-arm64",
"direct": false,
"version": "4.61.1",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-darwin-arm64",
"direct": false,
"version": "4.62.2",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-darwin-x64",
"direct": false,
"version": "4.61.1",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-darwin-x64",
"direct": false,
"version": "4.62.2",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-freebsd-arm64",
"direct": false,
"version": "4.61.1",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-freebsd-arm64",
"direct": false,
"version": "4.62.2",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-freebsd-x64",
"direct": false,
"version": "4.61.1",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-freebsd-x64",
"direct": false,
"version": "4.62.2",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-linux-arm-gnueabihf",
"direct": false,
"version": "4.61.1",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-linux-arm-gnueabihf",
"direct": false,
"version": "4.62.2",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-linux-arm-musleabihf",
"direct": false,
"version": "4.61.1",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-linux-arm-musleabihf",
"direct": false,
"version": "4.62.2",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-linux-arm64-gnu",
"direct": false,
"version": "4.61.1",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-linux-arm64-gnu",
"direct": false,
"version": "4.62.2",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-linux-arm64-musl",
"direct": false,
"version": "4.61.1",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-linux-arm64-musl",
"direct": false,
"version": "4.62.2",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-linux-loong64-gnu",
"direct": false,
"version": "4.61.1",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-linux-loong64-gnu",
"direct": false,
"version": "4.62.2",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-linux-loong64-musl",
"direct": false,
"version": "4.61.1",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-linux-loong64-musl",
"direct": false,
"version": "4.62.2",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-linux-ppc64-gnu",
"direct": false,
"version": "4.61.1",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-linux-ppc64-gnu",
"direct": false,
"version": "4.62.2",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-linux-ppc64-musl",
"direct": false,
"version": "4.61.1",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-linux-ppc64-musl",
"direct": false,
"version": "4.62.2",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-linux-riscv64-gnu",
"direct": false,
"version": "4.61.1",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-linux-riscv64-gnu",
"direct": false,
"version": "4.62.2",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-linux-riscv64-musl",
"direct": false,
"version": "4.61.1",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-linux-riscv64-musl",
"direct": false,
"version": "4.62.2",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-linux-s390x-gnu",
"direct": false,
"version": "4.61.1",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-linux-s390x-gnu",
"direct": false,
"version": "4.62.2",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-linux-x64-gnu",
"direct": false,
"version": "4.61.1",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-linux-x64-gnu",
"direct": false,
"version": "4.62.2",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-linux-x64-musl",
"direct": false,
"version": "4.61.1",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-linux-x64-musl",
"direct": false,
"version": "4.62.2",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-openbsd-x64",
"direct": false,
"version": "4.61.1",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-openbsd-x64",
"direct": false,
"version": "4.62.2",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-openharmony-arm64",
"direct": false,
"version": "4.61.1",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-openharmony-arm64",
"direct": false,
"version": "4.62.2",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-win32-arm64-msvc",
"direct": false,
"version": "4.61.1",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-win32-arm64-msvc",
"direct": false,
"version": "4.62.2",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-win32-ia32-msvc",
"direct": false,
"version": "4.61.1",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-win32-ia32-msvc",
"direct": false,
"version": "4.62.2",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-win32-x64-gnu",
"direct": false,
"version": "4.61.1",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-win32-x64-gnu",
"direct": false,
"version": "4.62.2",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-win32-x64-msvc",
"direct": false,
"version": "4.61.1",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-win32-x64-msvc",
"direct": false,
"version": "4.62.2",
"ecosystem": "npm"
},
{
"name": "@testing-library/dom",
"direct": false,
"version": "10.4.1",
"ecosystem": "npm"
},
{
"name": "@testing-library/react",
"direct": false,
"version": "16.3.2",
"ecosystem": "npm"
},
{
"name": "@types/aria-query",
"direct": false,
"version": "5.0.4",
"ecosystem": "npm"
},
{
"name": "@types/babel__core",
"direct": false,
"version": "7.20.5",
"ecosystem": "npm"
},
{
"name": "@types/babel__generator",
"direct": false,
"version": "7.27.0",
"ecosystem": "npm"
},
{
"name": "@types/babel__template",
"direct": false,
"version": "7.4.4",
"ecosystem": "npm"
},
{
"name": "@types/babel__traverse",
"direct": false,
"version": "7.28.0",
"ecosystem": "npm"
},
{
"name": "@types/chai",
"direct": false,
"version": "5.2.3",
"ecosystem": "npm"
},
{
"name": "@types/deep-eql",
"direct": false,
"version": "4.0.2",
"ecosystem": "npm"
},
{
"name": "@types/estree",
"direct": false,
"version": "1.0.9",
"ecosystem": "npm"
},
{
"name": "@types/node",
"direct": false,
"version": "25.9.3",
"ecosystem": "npm"
},
{
"name": "@types/prop-types",
"direct": false,
"version": "15.7.15",
"ecosystem": "npm"
},
{
"name": "@types/react",
"direct": false,
"version": "18.3.31",
"ecosystem": "npm"
},
{
"name": "@types/react",
"direct": false,
"version": "^18.3.12",
"ecosystem": "npm"
},
{
"name": "@types/react-dom",
"direct": false,
"version": "18.3.7",
"ecosystem": "npm"
},
{
"name": "@types/react-dom",
"direct": false,
"version": "^18.3.0",
"ecosystem": "npm"
},
{
"name": "@types/set-cookie-parser",
"direct": false,
"version": "2.4.10",
"ecosystem": "npm"
},
{
"name": "@types/statuses",
"direct": false,
"version": "2.0.6",
"ecosystem": "npm"
},
{
"name": "@vitejs/plugin-react",
"direct": false,
"version": "4.7.0",
"ecosystem": "npm"
},
{
"name": "@vitejs/plugin-react",
"direct": false,
"version": "^4.3.4",
"ecosystem": "npm"
},
{
"name": "@vitest/coverage-v8",
"direct": false,
"version": "2.1.9",
"ecosystem": "npm"
},
{
"name": "@vitest/expect",
"direct": false,
"version": "3.2.6",
"ecosystem": "npm"
},
{
"name": "@vitest/mocker",
"direct": false,
"version": "3.2.6",
"ecosystem": "npm"
},
{
"name": "@vitest/pretty-format",
"direct": false,
"version": "3.2.6",
"ecosystem": "npm"
},
{
"name": "@vitest/runner",
"direct": false,
"version": "3.2.6",
"ecosystem": "npm"
},
{
"name": "@vitest/snapshot",
"direct": false,
"version": "3.2.6",
"ecosystem": "npm"
},
{
"name": "@vitest/spy",
"direct": false,
"version": "3.2.6",
"ecosystem": "npm"
},
{
"name": "@vitest/utils",
"direct": false,
"version": "3.2.6",
"ecosystem": "npm"
},
{
"name": "acorn",
"direct": false,
"version": "8.16.0",
"ecosystem": "npm"
},
{
"name": "agent-base",
"direct": false,
"version": "7.1.4",
"ecosystem": "npm"
},
{
"name": "ansi-regex",
"direct": false,
"version": "5.0.1",
"ecosystem": "npm"
},
{
"name": "ansi-regex",
"direct": false,
"version": "6.2.2",
"ecosystem": "npm"
},
{
"name": "ansi-styles",
"direct": false,
"version": "4.3.0",
"ecosystem": "npm"
},
{
"name": "ansi-styles",
"direct": false,
"version": "5.2.0",
"ecosystem": "npm"
},
{
"name": "ansi-styles",
"direct": false,
"version": "6.2.3",
"ecosystem": "npm"
},
{
"name": "any-promise",
"direct": false,
"version": "1.3.0",
"ecosystem": "npm"
},
{
"name": "aria-hidden",
"direct": false,
"version": "1.2.6",
"ecosystem": "npm"
},
{
"name": "aria-query",
"direct": false,
"version": "5.3.0",
"ecosystem": "npm"
},
{
"name": "assertion-error",
"direct": false,
"version": "2.0.1",
"ecosystem": "npm"
},
{
"name": "asynckit",
"direct": false,
"version": "0.4.0",
"ecosystem": "npm"
},
{
"name": "balanced-match",
"direct": false,
"version": "1.0.2",
"ecosystem": "npm"
},
{
"name": "balanced-match",
"direct": false,
"version": "4.0.4",
"ecosystem": "npm"
},
{
"name": "baseline-browser-mapping",
"direct": false,
"version": "2.10.41",
"ecosystem": "npm"
},
{
"name": "brace-expansion",
"direct": false,
"version": "2.1.1",
"ecosystem": "npm"
},
{
"name": "brace-expansion",
"direct": false,
"version": "5.0.6",
"ecosystem": "npm"
},
{
"name": "browserslist",
"direct": false,
"version": "4.28.4",
"ecosystem": "npm"
},
{
"name": "bundle-require",
"direct": false,
"version": "5.1.0",
"ecosystem": "npm"
},
{
"name": "cac",
"direct": false,
"version": "6.7.14",
"ecosystem": "npm"
},
{
"name": "call-bind-apply-helpers",
"direct": false,
"version": "1.0.2",
"ecosystem": "npm"
},
{
"name": "caniuse-lite",
"direct": false,
"version": "1.0.30001800",
"ecosystem": "npm"
},
{
"name": "chai",
"direct": false,
"version": "5.3.3",
"ecosystem": "npm"
},
{
"name": "check-error",
"direct": false,
"version": "2.1.3",
"ecosystem": "npm"
},
{
"name": "chokidar",
"direct": false,
"version": "4.0.3",
"ecosystem": "npm"
},
{
"name": "cli-width",
"direct": false,
"version": "4.1.0",
"ecosystem": "npm"
},
{
"name": "cliui",
"direct": false,
"version": "8.0.1",
"ecosystem": "npm"
},
{
"name": "color-convert",
"direct": false,
"version": "2.0.1",
"ecosystem": "npm"
},
{
"name": "color-name",
"direct": false,
"version": "1.1.4",
"ecosystem": "npm"
},
{
"name": "combined-stream",
"direct": false,
"version": "1.0.8",
"ecosystem": "npm"
},
{
"name": "commander",
"direct": false,
"version": "4.1.1",
"ecosystem": "npm"
},
{
"name": "confbox",
"direct": false,
"version": "0.1.8",
"ecosystem": "npm"
},
{
"name": "consola",
"direct": false,
"version": "3.4.2",
"ecosystem": "npm"
},
{
"name": "convert-source-map",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "cookie",
"direct": false,
"version": "1.1.1",
"ecosystem": "npm"
},
{
"name": "cross-spawn",
"direct": false,
"version": "7.0.6",
"ecosystem": "npm"
},
{
"name": "cssstyle",
"direct": false,
"version": "4.6.0",
"ecosystem": "npm"
},
{
"name": "csstype",
"direct": false,
"version": "3.2.3",
"ecosystem": "npm"
},
{
"name": "data-urls",
"direct": false,
"version": "5.0.0",
"ecosystem": "npm"
},
{
"name": "debug",
"direct": false,
"version": "4.4.3",
"ecosystem": "npm"
},
{
"name": "decimal.js",
"direct": false,
"version": "10.6.0",
"ecosystem": "npm"
},
{
"name": "deep-eql",
"direct": false,
"version": "5.0.2",
"ecosystem": "npm"
},
{
"name": "delayed-stream",
"direct": false,
"version": "1.0.0",
"ecosystem": "npm"
},
{
"name": "dequal",
"direct": false,
"version": "2.0.3",
"ecosystem": "npm"
},
{
"name": "detect-node-es",
"direct": false,
"version": "1.1.0",
"ecosystem": "npm"
},
{
"name": "dom-accessibility-api",
"direct": false,
"version": "0.5.16",
"ecosystem": "npm"
},
{
"name": "dunder-proto",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "eastasianwidth",
"direct": false,
"version": "0.2.0",
"ecosystem": "npm"
},
{
"name": "electron-to-chromium",
"direct": false,
"version": "1.5.386",
"ecosystem": "npm"
},
{
"name": "emoji-regex",
"direct": false,
"version": "8.0.0",
"ecosystem": "npm"
},
{
"name": "emoji-regex",
"direct": false,
"version": "9.2.2",
"ecosystem": "npm"
},
{
"name": "entities",
"direct": false,
"version": "6.0.1",
"ecosystem": "npm"
},
{
"name": "es-define-property",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "es-errors",
"direct": false,
"version": "1.3.0",
"ecosystem": "npm"
},
{
"name": "es-module-lexer",
"direct": false,
"version": "1.7.0",
"ecosystem": "npm"
},
{
"name": "es-object-atoms",
"direct": false,
"version": "1.1.2",
"ecosystem": "npm"
},
{
"name": "es-set-tostringtag",
"direct": false,
"version": "2.1.0",
"ecosystem": "npm"
},
{
"name": "esbuild",
"direct": false,
"version": "0.25.12",
"ecosystem": "npm"
},
{
"name": "esbuild",
"direct": false,
"version": "0.27.7",
"ecosystem": "npm"
},
{
"name": "escalade",
"direct": false,
"version": "3.2.0",
"ecosystem": "npm"
},
{
"name": "estree-walker",
"direct": false,
"version": "3.0.3",
"ecosystem": "npm"
},
{
"name": "expect-type",
"direct": false,
"version": "1.4.0",
"ecosystem": "npm"
},
{
"name": "fast-string-truncated-width",
"direct": false,
"version": "3.0.3",
"ecosystem": "npm"
},
{
"name": "fast-string-width",
"direct": false,
"version": "3.0.2",
"ecosystem": "npm"
},
{
"name": "fast-wrap-ansi",
"direct": false,
"version": "0.2.2",
"ecosystem": "npm"
},
{
"name": "fdir",
"direct": false,
"version": "6.5.0",
"ecosystem": "npm"
},
{
"name": "fix-dts-default-cjs-exports",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "foreground-child",
"direct": false,
"version": "3.3.1",
"ecosystem": "npm"
},
{
"name": "form-data",
"direct": false,
"version": "4.0.6",
"ecosystem": "npm"
},
{
"name": "fsevents",
"direct": false,
"version": "2.3.2",
"ecosystem": "npm"
},
{
"name": "fsevents",
"direct": false,
"version": "2.3.3",
"ecosystem": "npm"
},
{
"name": "function-bind",
"direct": false,
"version": "1.1.2",
"ecosystem": "npm"
},
{
"name": "gensync",
"direct": false,
"version": "1.0.0-beta.2",
"ecosystem": "npm"
},
{
"name": "get-caller-file",
"direct": false,
"version": "2.0.5",
"ecosystem": "npm"
},
{
"name": "get-intrinsic",
"direct": false,
"version": "1.3.0",
"ecosystem": "npm"
},
{
"name": "get-nonce",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "get-proto",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "glob",
"direct": false,
"version": "10.5.0",
"ecosystem": "npm"
},
{
"name": "gopd",
"direct": false,
"version": "1.2.0",
"ecosystem": "npm"
},
{
"name": "graphql",
"direct": false,
"version": "16.14.2",
"ecosystem": "npm"
},
{
"name": "has-flag",
"direct": false,
"version": "4.0.0",
"ecosystem": "npm"
},
{
"name": "has-symbols",
"direct": false,
"version": "1.1.0",
"ecosystem": "npm"
},
{
"name": "has-tostringtag",
"direct": false,
"version": "1.0.2",
"ecosystem": "npm"
},
{
"name": "hasown",
"direct": false,
"version": "2.0.4",
"ecosystem": "npm"
},
{
"name": "headers-polyfill",
"direct": false,
"version": "5.0.1",
"ecosystem": "npm"
},
{
"name": "html-encoding-sniffer",
"direct": false,
"version": "4.0.0",
"ecosystem": "npm"
},
{
"name": "html-escaper",
"direct": false,
"version": "2.0.2",
"ecosystem": "npm"
},
{
"name": "http-proxy-agent",
"direct": false,
"version": "7.0.2",
"ecosystem": "npm"
},
{
"name": "https-proxy-agent",
"direct": false,
"version": "7.0.6",
"ecosystem": "npm"
},
{
"name": "iconv-lite",
"direct": false,
"version": "0.6.3",
"ecosystem": "npm"
},
{
"name": "is-fullwidth-code-point",
"direct": false,
"version": "3.0.0",
"ecosystem": "npm"
},
{
"name": "is-node-process",
"direct": false,
"version": "1.2.0",
"ecosystem": "npm"
},
{
"name": "is-potential-custom-element-name",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "isexe",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "istanbul-lib-coverage",
"direct": false,
"version": "3.2.2",
"ecosystem": "npm"
},
{
"name": "istanbul-lib-report",
"direct": false,
"version": "3.0.1",
"ecosystem": "npm"
},
{
"name": "istanbul-lib-source-maps",
"direct": false,
"version": "5.0.6",
"ecosystem": "npm"
},
{
"name": "istanbul-reports",
"direct": false,
"version": "3.2.0",
"ecosystem": "npm"
},
{
"name": "jackspeak",
"direct": false,
"version": "3.4.3",
"ecosystem": "npm"
},
{
"name": "joycon",
"direct": false,
"version": "3.1.1",
"ecosystem": "npm"
},
{
"name": "js-tokens",
"direct": false,
"version": "4.0.0",
"ecosystem": "npm"
},
{
"name": "js-tokens",
"direct": false,
"version": "9.0.1",
"ecosystem": "npm"
},
{
"name": "jsdom",
"direct": false,
"version": "25.0.1",
"ecosystem": "npm"
},
{
"name": "jsesc",
"direct": false,
"version": "3.1.0",
"ecosystem": "npm"
},
{
"name": "json5",
"direct": false,
"version": "2.2.3",
"ecosystem": "npm"
},
{
"name": "lilconfig",
"direct": false,
"version": "3.1.3",
"ecosystem": "npm"
},
{
"name": "lines-and-columns",
"direct": false,
"version": "1.2.4",
"ecosystem": "npm"
},
{
"name": "load-tsconfig",
"direct": false,
"version": "0.2.5",
"ecosystem": "npm"
},
{
"name": "loose-envify",
"direct": false,
"version": "1.4.0",
"ecosystem": "npm"
},
{
"name": "loupe",
"direct": false,
"version": "3.2.1",
"ecosystem": "npm"
},
{
"name": "lru-cache",
"direct": false,
"version": "10.4.3",
"ecosystem": "npm"
},
{
"name": "lru-cache",
"direct": false,
"version": "5.1.1",
"ecosystem": "npm"
},
{
"name": "lz-string",
"direct": false,
"version": "1.5.0",
"ecosystem": "npm"
},
{
"name": "magic-string",
"direct": false,
"version": "0.30.21",
"ecosystem": "npm"
},
{
"name": "magicast",
"direct": false,
"version": "0.3.5",
"ecosystem": "npm"
},
{
"name": "make-dir",
"direct": false,
"version": "4.0.0",
"ecosystem": "npm"
},
{
"name": "math-intrinsics",
"direct": false,
"version": "1.1.0",
"ecosystem": "npm"
},
{
"name": "mime-db",
"direct": false,
"version": "1.52.0",
"ecosystem": "npm"
},
{
"name": "mime-types",
"direct": false,
"version": "2.1.35",
"ecosystem": "npm"
},
{
"name": "minimatch",
"direct": false,
"version": "10.2.5",
"ecosystem": "npm"
},
{
"name": "minimatch",
"direct": false,
"version": "9.0.9",
"ecosystem": "npm"
},
{
"name": "minipass",
"direct": false,
"version": "7.1.3",
"ecosystem": "npm"
},
{
"name": "mlly",
"direct": false,
"version": "1.8.2",
"ecosystem": "npm"
},
{
"name": "ms",
"direct": false,
"version": "2.1.3",
"ecosystem": "npm"
},
{
"name": "msw",
"direct": false,
"version": "2.14.6",
"ecosystem": "npm"
},
{
"name": "mute-stream",
"direct": false,
"version": "3.0.0",
"ecosystem": "npm"
},
{
"name": "mz",
"direct": false,
"version": "2.7.0",
"ecosystem": "npm"
},
{
"name": "nanoid",
"direct": false,
"version": "3.3.15",
"ecosystem": "npm"
},
{
"name": "node-releases",
"direct": false,
"version": "2.0.50",
"ecosystem": "npm"
},
{
"name": "nwsapi",
"direct": false,
"version": "2.2.24",
"ecosystem": "npm"
},
{
"name": "object-assign",
"direct": false,
"version": "4.1.1",
"ecosystem": "npm"
},
{
"name": "outvariant",
"direct": false,
"version": "1.4.3",
"ecosystem": "npm"
},
{
"name": "package-json-from-dist",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "parse5",
"direct": false,
"version": "7.3.0",
"ecosystem": "npm"
},
{
"name": "path-key",
"direct": false,
"version": "3.1.1",
"ecosystem": "npm"
},
{
"name": "path-scurry",
"direct": false,
"version": "1.11.1",
"ecosystem": "npm"
},
{
"name": "path-to-regexp",
"direct": false,
"version": "6.3.0",
"ecosystem": "npm"
},
{
"name": "pathe",
"direct": false,
"version": "2.0.3",
"ecosystem": "npm"
},
{
"name": "pathval",
"direct": false,
"version": "2.0.1",
"ecosystem": "npm"
},
{
"name": "picocolors",
"direct": false,
"version": "1.1.1",
"ecosystem": "npm"
},
{
"name": "picomatch",
"direct": false,
"version": "4.0.4",
"ecosystem": "npm"
},
{
"name": "picomatch",
"direct": false,
"version": "4.0.5",
"ecosystem": "npm"
},
{
"name": "pirates",
"direct": false,
"version": "4.0.7",
"ecosystem": "npm"
},
{
"name": "pkg-types",
"direct": false,
"version": "1.3.1",
"ecosystem": "npm"
},
{
"name": "playwright",
"direct": false,
"version": "1.60.0",
"ecosystem": "npm"
},
{
"name": "playwright-core",
"direct": false,
"version": "1.60.0",
"ecosystem": "npm"
},
{
"name": "postcss",
"direct": false,
"version": "8.5.16",
"ecosystem": "npm"
},
{
"name": "postcss-load-config",
"direct": false,
"version": "6.0.1",
"ecosystem": "npm"
},
{
"name": "pretty-format",
"direct": false,
"version": "27.5.1",
"ecosystem": "npm"
},
{
"name": "punycode",
"direct": false,
"version": "2.3.1",
"ecosystem": "npm"
},
{
"name": "react-is",
"direct": false,
"version": "17.0.2",
"ecosystem": "npm"
},
{
"name": "react-refresh",
"direct": false,
"version": "0.17.0",
"ecosystem": "npm"
},
{
"name": "react-remove-scroll",
"direct": false,
"version": "2.7.2",
"ecosystem": "npm"
},
{
"name": "react-remove-scroll-bar",
"direct": false,
"version": "2.3.8",
"ecosystem": "npm"
},
{
"name": "react-style-singleton",
"direct": false,
"version": "2.2.3",
"ecosystem": "npm"
},
{
"name": "readdirp",
"direct": false,
"version": "4.1.2",
"ecosystem": "npm"
},
{
"name": "require-directory",
"direct": false,
"version": "2.1.1",
"ecosystem": "npm"
},
{
"name": "resolve-from",
"direct": false,
"version": "5.0.0",
"ecosystem": "npm"
},
{
"name": "rettime",
"direct": false,
"version": "0.11.11",
"ecosystem": "npm"
},
{
"name": "rollup",
"direct": false,
"version": "4.61.1",
"ecosystem": "npm"
},
{
"name": "rollup",
"direct": false,
"version": "4.62.2",
"ecosystem": "npm"
},
{
"name": "rrweb-cssom",
"direct": false,
"version": "0.7.1",
"ecosystem": "npm"
},
{
"name": "rrweb-cssom",
"direct": false,
"version": "0.8.0",
"ecosystem": "npm"
},
{
"name": "safer-buffer",
"direct": false,
"version": "2.1.2",
"ecosystem": "npm"
},
{
"name": "saxes",
"direct": false,
"version": "6.0.0",
"ecosystem": "npm"
},
{
"name": "scheduler",
"direct": false,
"version": "0.23.2",
"ecosystem": "npm"
},
{
"name": "semver",
"direct": false,
"version": "6.3.1",
"ecosystem": "npm"
},
{
"name": "semver",
"direct": false,
"version": "7.8.4",
"ecosystem": "npm"
},
{
"name": "set-cookie-parser",
"direct": false,
"version": "3.1.0",
"ecosystem": "npm"
},
{
"name": "shebang-command",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "shebang-regex",
"direct": false,
"version": "3.0.0",
"ecosystem": "npm"
},
{
"name": "siginfo",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "signal-exit",
"direct": false,
"version": "4.1.0",
"ecosystem": "npm"
},
{
"name": "source-map",
"direct": false,
"version": "0.7.6",
"ecosystem": "npm"
},
{
"name": "source-map-js",
"direct": false,
"version": "1.2.1",
"ecosystem": "npm"
},
{
"name": "stackback",
"direct": false,
"version": "0.0.2",
"ecosystem": "npm"
},
{
"name": "statuses",
"direct": false,
"version": "2.0.2",
"ecosystem": "npm"
},
{
"name": "std-env",
"direct": false,
"version": "3.10.0",
"ecosystem": "npm"
},
{
"name": "strict-event-emitter",
"direct": false,
"version": "0.5.1",
"ecosystem": "npm"
},
{
"name": "string-width",
"direct": false,
"version": "4.2.3",
"ecosystem": "npm"
},
{
"name": "string-width",
"direct": false,
"version": "5.1.2",
"ecosystem": "npm"
},
{
"name": "strip-ansi",
"direct": false,
"version": "6.0.1",
"ecosystem": "npm"
},
{
"name": "strip-ansi",
"direct": false,
"version": "7.2.0",
"ecosystem": "npm"
},
{
"name": "strip-literal",
"direct": false,
"version": "3.1.0",
"ecosystem": "npm"
},
{
"name": "sucrase",
"direct": false,
"version": "3.35.1",
"ecosystem": "npm"
},
{
"name": "supports-color",
"direct": false,
"version": "7.2.0",
"ecosystem": "npm"
},
{
"name": "symbol-tree",
"direct": false,
"version": "3.2.4",
"ecosystem": "npm"
},
{
"name": "tagged-tag",
"direct": false,
"version": "1.0.0",
"ecosystem": "npm"
},
{
"name": "test-exclude",
"direct": false,
"version": "7.0.2",
"ecosystem": "npm"
},
{
"name": "thenify",
"direct": false,
"version": "3.3.1",
"ecosystem": "npm"
},
{
"name": "thenify-all",
"direct": false,
"version": "1.6.0",
"ecosystem": "npm"
},
{
"name": "tinybench",
"direct": false,
"version": "2.9.0",
"ecosystem": "npm"
},
{
"name": "tinyexec",
"direct": false,
"version": "0.3.2",
"ecosystem": "npm"
},
{
"name": "tinyglobby",
"direct": false,
"version": "0.2.17",
"ecosystem": "npm"
},
{
"name": "tinypool",
"direct": false,
"version": "1.1.1",
"ecosystem": "npm"
},
{
"name": "tinyrainbow",
"direct": false,
"version": "1.2.0",
"ecosystem": "npm"
},
{
"name": "tinyrainbow",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "tinyspy",
"direct": false,
"version": "4.0.4",
"ecosystem": "npm"
},
{
"name": "tldts",
"direct": false,
"version": "6.1.86",
"ecosystem": "npm"
},
{
"name": "tldts",
"direct": false,
"version": "7.4.2",
"ecosystem": "npm"
},
{
"name": "tldts-core",
"direct": false,
"version": "6.1.86",
"ecosystem": "npm"
},
{
"name": "tldts-core",
"direct": false,
"version": "7.4.2",
"ecosystem": "npm"
},
{
"name": "tough-cookie",
"direct": false,
"version": "5.1.2",
"ecosystem": "npm"
},
{
"name": "tough-cookie",
"direct": false,
"version": "6.0.1",
"ecosystem": "npm"
},
{
"name": "tr46",
"direct": false,
"version": "5.1.1",
"ecosystem": "npm"
},
{
"name": "tree-kill",
"direct": false,
"version": "1.2.2",
"ecosystem": "npm"
},
{
"name": "ts-interface-checker",
"direct": false,
"version": "0.1.13",
"ecosystem": "npm"
},
{
"name": "tslib",
"direct": false,
"version": "2.8.1",
"ecosystem": "npm"
},
{
"name": "tsup",
"direct": false,
"version": "8.5.1",
"ecosystem": "npm"
},
{
"name": "type-fest",
"direct": false,
"version": "5.7.0",
"ecosystem": "npm"
},
{
"name": "typescript",
"direct": false,
"version": "5.9.3",
"ecosystem": "npm"
},
{
"name": "typescript",
"direct": false,
"version": "^5.6.3",
"ecosystem": "npm"
},
{
"name": "ufo",
"direct": false,
"version": "1.6.4",
"ecosystem": "npm"
},
{
"name": "undici-types",
"direct": false,
"version": "7.24.6",
"ecosystem": "npm"
},
{
"name": "until-async",
"direct": false,
"version": "3.0.2",
"ecosystem": "npm"
},
{
"name": "update-browserslist-db",
"direct": false,
"version": "1.2.3",
"ecosystem": "npm"
},
{
"name": "use-callback-ref",
"direct": false,
"version": "1.3.3",
"ecosystem": "npm"
},
{
"name": "use-sidecar",
"direct": false,
"version": "1.1.3",
"ecosystem": "npm"
},
{
"name": "vite",
"direct": false,
"version": "6.4.3",
"ecosystem": "npm"
},
{
"name": "vite",
"direct": false,
"version": "^6.4.3",
"ecosystem": "npm"
},
{
"name": "vite-node",
"direct": false,
"version": "3.2.4",
"ecosystem": "npm"
},
{
"name": "vitest",
"direct": false,
"version": "3.2.6",
"ecosystem": "npm"
},
{
"name": "w3c-xmlserializer",
"direct": false,
"version": "5.0.0",
"ecosystem": "npm"
},
{
"name": "webidl-conversions",
"direct": false,
"version": "7.0.0",
"ecosystem": "npm"
},
{
"name": "whatwg-encoding",
"direct": false,
"version": "3.1.1",
"ecosystem": "npm"
},
{
"name": "whatwg-mimetype",
"direct": false,
"version": "4.0.0",
"ecosystem": "npm"
},
{
"name": "whatwg-url",
"direct": false,
"version": "14.2.0",
"ecosystem": "npm"
},
{
"name": "which",
"direct": false,
"version": "2.0.2",
"ecosystem": "npm"
},
{
"name": "why-is-node-running",
"direct": false,
"version": "2.3.0",
"ecosystem": "npm"
},
{
"name": "wrap-ansi",
"direct": false,
"version": "7.0.0",
"ecosystem": "npm"
},
{
"name": "wrap-ansi",
"direct": false,
"version": "8.1.0",
"ecosystem": "npm"
},
{
"name": "ws",
"direct": false,
"version": "8.21.0",
"ecosystem": "npm"
},
{
"name": "xml-name-validator",
"direct": false,
"version": "5.0.0",
"ecosystem": "npm"
},
{
"name": "xmlchars",
"direct": false,
"version": "2.2.0",
"ecosystem": "npm"
},
{
"name": "y18n",
"direct": false,
"version": "5.0.8",
"ecosystem": "npm"
},
{
"name": "yallist",
"direct": false,
"version": "3.1.1",
"ecosystem": "npm"
},
{
"name": "yargs",
"direct": false,
"version": "17.7.2",
"ecosystem": "npm"
},
{
"name": "yargs-parser",
"direct": false,
"version": "21.1.1",
"ecosystem": "npm"
}
],
"collected": true,
"truncated": false,
"total_count": 439,
"direct_count": 6,
"indirect_count": 433
}
},
"maintainership": {
"issues": {
"open_prs": 1,
"merged_prs": 35,
"open_issues": 0,
"closed_ratio": null,
"closed_issues": 0,
"closed_unmerged_prs": 1
},
"bus_factor": 1,
"bot_contributors": 2,
"top_contributors": [
{
"type": "User",
"login": "etamong",
"commits": 129,
"avatar_url": "https://avatars.githubusercontent.com/u/23713607?v=4"
}
],
"contributors_sampled": 1,
"top_contributor_share": 1
},
"quality_signals": {
"has_ci": true,
"has_tests": true,
"ci_workflows": [
"ci.yml",
"publish.yml"
],
"has_docs_dir": true,
"linter_configs": [],
"has_editorconfig": false,
"has_linter_config": false,
"has_precommit_config": false
},
"security_signals": {
"lockfiles": [
"pnpm-lock.yaml"
],
"scorecard": {
"checks": [
{
"name": "Binary-Artifacts",
"score": 10,
"reason": "no binaries found in the repo",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
},
{
"name": "Branch-Protection",
"score": 3,
"reason": "branch protection is not maximal on development and all release branches",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
},
{
"name": "CI-Tests",
"score": 10,
"reason": "28 out of 28 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/15 approved changesets -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
},
{
"name": "Contributors",
"score": 6,
"reason": "project has 2 contributing companies or organizations -- score normalized to 6",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
},
{
"name": "Dangerous-Workflow",
"score": 10,
"reason": "no dangerous workflow patterns detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
},
{
"name": "Dependency-Update-Tool",
"score": 10,
"reason": "update tool detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
},
{
"name": "Fuzzing",
"score": 0,
"reason": "project is not fuzzed",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
},
{
"name": "License",
"score": 10,
"reason": "license file detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
},
{
"name": "Maintained",
"score": 0,
"reason": "project was created within the last 90 days. Please review its contents carefully",
"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": 0,
"reason": "dependency not pinned by hash detected -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
},
{
"name": "SAST",
"score": 0,
"reason": "SAST tool is not run on all commits -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
},
{
"name": "Security-Policy",
"score": 4,
"reason": "security policy file detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
},
{
"name": "Signed-Releases",
"score": null,
"reason": "no releases found",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
},
{
"name": "Token-Permissions",
"score": 0,
"reason": "detected GitHub workflow tokens with excessive permissions",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
},
{
"name": "Vulnerabilities",
"score": 8,
"reason": "2 existing vulnerabilities detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
}
],
"commit": "80aef6fd77d6fb733334e8b87c57bb2aaf6cacf4",
"ran_at": "2026-07-23T22:55:08Z",
"aggregate_score": 4.5,
"scorecard_version": "v5.5.0"
},
"has_codeql_workflow": false,
"has_security_policy": true,
"has_dependabot_config": false
},
"contribution_flow": {
"collected": true,
"ci_last_run_at": "2026-07-21T19:38:29Z",
"oldest_open_prs": [
{
"number": 3,
"created_at": "2026-06-20T12:36:37Z",
"last_comment_at": null,
"last_comment_author": null
}
],
"last_merged_pr_at": "2026-07-20T11:39:43Z",
"ci_last_conclusion": "FAILURE",
"oldest_open_issues": []
}
},
"config": {
"disabled_metrics": [],
"disabled_categories": [],
"disabled_components": {}
},
"source": {
"url": "https://github.com/etamong-playground/ui",
"host": "github.com",
"name": "ui",
"owner": "etamong-playground"
},
"metrics": {
"overall": {
"key": "overall",
"band": "moderate",
"name": "Overall health",
"note": null,
"notes": [],
"value": 58,
"inputs": {
"security": 56,
"vitality": 75,
"community": 34,
"governance": 53,
"engineering": 71
},
"components": []
},
"categories": [
{
"key": "vitality",
"band": "good",
"name": "Vitality",
"value": 75,
"weight": 0.22,
"metrics": [
{
"key": "development_activity",
"band": "moderate",
"name": "Development activity",
"note": null,
"notes": [],
"value": 58,
"inputs": {
"commits_last_year": 158,
"human_commit_share": 0.71,
"days_since_last_push": 3,
"active_weeks_last_year": 6
},
"components": [
{
"key": "push_recency",
"name": "Push recency",
"detail": "last push 3 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "push_recency",
"params": {
"days": 3
}
}
],
"max_points": 36
},
{
"key": "commit_cadence",
"name": "Commit cadence",
"detail": "6/52 weeks with commits",
"points": 4.2,
"status": "partial",
"details": [
{
"code": "commit_cadence_weeks",
"params": {
"weeks": 6
}
}
],
"max_points": 36
},
{
"key": "commit_volume",
"name": "Commit volume",
"detail": "158 commits in the last year",
"points": 18,
"status": "met",
"details": [
{
"code": "commits_last_year",
"params": {
"count": 158
}
}
],
"max_points": 18
},
{
"key": "openssf_scorecard_maintained",
"name": "OpenSSF Scorecard: Maintained",
"detail": "project was created within the last 90 days. Please review its contents carefully",
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
},
{
"key": "release_discipline",
"band": "excellent",
"name": "Release discipline",
"note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"openssf_scorecard_signed_releases"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 100,
"inputs": {
"releases_count": 14,
"latest_release_tag": "v0.41.0",
"releases_from_tags": false,
"days_since_latest_release": 5,
"mean_days_between_releases": 1.3
},
"components": [
{
"key": "ships_releases",
"name": "Ships releases",
"detail": "14 releases published",
"points": 27,
"status": "met",
"details": [
{
"code": "releases_published",
"params": {
"count": 14
}
}
],
"max_points": 27
},
{
"key": "release_recency",
"name": "Release recency",
"detail": "latest release 5 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "release_recency",
"params": {
"days": 5
}
}
],
"max_points": 36
},
{
"key": "release_cadence",
"name": "Release cadence",
"detail": "a release every ~1.3 days",
"points": 27,
"status": "met",
"details": [
{
"code": "release_cadence",
"params": {
"gap": 1.3
}
}
],
"max_points": 27
},
{
"key": "openssf_scorecard_signed_releases",
"name": "OpenSSF Scorecard: Signed-Releases",
"detail": "no releases found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 10
}
]
},
{
"key": "abandonment",
"band": "excellent",
"name": "Abandonment",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"cap": null,
"state": "unverified",
"guards": [],
"signals": [],
"red_flag": false,
"multiplier_pct": 100,
"declared_reason": null,
"unverified_reason": "repository_too_young",
"unanswered_open_prs": null,
"unanswered_open_issues": null,
"days_since_last_merged_pr": null,
"days_since_last_human_commit": null,
"days_since_last_human_commit_is_floor": false
},
"components": [
{
"key": "project_is_still_maintained",
"name": "Project is still maintained",
"detail": "maintenance record not established from the collected data",
"points": 100,
"status": "met",
"details": [
{
"code": "abandonment_unverified",
"params": {}
}
],
"max_points": 100
}
]
}
],
"description": "Is the project alive — is code being written and are releases shipping?"
},
{
"key": "community",
"band": "at_risk",
"name": "Community & Adoption",
"value": 34,
"weight": 0.18,
"metrics": [
{
"key": "popularity",
"band": "critical",
"name": "Popularity & adoption",
"note": null,
"notes": [],
"value": 1,
"inputs": {
"forks": 0,
"stars": 0,
"watchers": 0,
"growth_state": "unverified",
"growth_factor_pct": 100,
"growth_unverified_reason": "no_history"
},
"components": [
{
"key": "stars",
"name": "Stars",
"detail": "0 stars",
"points": 0,
"status": "missed",
"details": [
{
"code": "stars",
"params": {
"count": 0
}
}
],
"max_points": 60
},
{
"key": "forks",
"name": "Forks",
"detail": "0 forks",
"points": 0,
"status": "missed",
"details": [
{
"code": "forks",
"params": {
"count": 0
}
}
],
"max_points": 25
},
{
"key": "watchers",
"name": "Watchers",
"detail": "0 watchers",
"points": 0,
"status": "missed",
"details": [
{
"code": "watchers",
"params": {
"count": 0
}
}
],
"max_points": 15
}
]
},
{
"key": "community_health",
"band": "moderate",
"name": "Community health",
"note": null,
"notes": [],
"value": 57,
"inputs": {
"has_readme": true,
"has_license": true,
"has_contributing": false,
"has_issue_template": false,
"has_code_of_conduct": false,
"has_pull_request_template": true
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 22.5,
"status": "met",
"details": [],
"max_points": 22.5
},
{
"key": "license",
"name": "License",
"detail": "recognized license (MIT)",
"points": 22.5,
"status": "met",
"details": [
{
"code": "license_standard",
"params": {}
},
{
"code": "license_spdx",
"params": {
"spdx": "MIT"
}
}
],
"max_points": 22.5
},
{
"key": "contributing_guide",
"name": "CONTRIBUTING guide",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 18
},
{
"key": "code_of_conduct",
"name": "Code of conduct",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 13.5
},
{
"key": "issue_template",
"name": "Issue template",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.2
},
{
"key": "pr_template",
"name": "PR template",
"detail": null,
"points": 6.3,
"status": "met",
"details": [],
"max_points": 6.3
}
]
},
{
"key": "ecosystem_adoption",
"band": "moderate",
"name": "Ecosystem adoption (downloads)",
"note": "Excluded from scoring (no data or not applicable): Registry dependents. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"registry_dependents"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 56,
"inputs": {
"packages": [
"@etamong-playground/ui"
],
"dependents": null,
"ecosystems": "npm",
"total_downloads": null,
"monthly_downloads": 2204
},
"components": [
{
"key": "monthly_downloads",
"name": "Monthly downloads",
"detail": "2,204 downloads/month across npm",
"points": 44.6,
"status": "partial",
"details": [
{
"code": "downloads_monthly",
"params": {
"count": 2204,
"ecosystems": "npm"
}
}
],
"max_points": 80
},
{
"key": "registry_dependents",
"name": "Registry dependents",
"detail": "not reported by this ecosystem",
"points": 0,
"status": "excluded",
"details": [
{
"code": "not_reported_by_this_ecosystem",
"params": {}
}
],
"max_points": 20
}
]
}
],
"description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
},
{
"key": "governance",
"band": "moderate",
"name": "Sustainability & Governance",
"value": 53,
"weight": 0.24,
"metrics": [
{
"key": "maintainer_resilience",
"band": "critical",
"name": "Maintainer resilience (bus factor)",
"note": null,
"notes": [],
"value": 16,
"inputs": {
"bus_factor": 1,
"contributors_sampled": 1,
"top_contributor_share": 1
},
"components": [
{
"key": "bus_factor",
"name": "Bus factor",
"detail": "1 contributor(s) cover half of all commits",
"points": 9,
"status": "partial",
"details": [
{
"code": "bus_factor",
"params": {
"count": 1
}
}
],
"max_points": 54
},
{
"key": "commit_distribution",
"name": "Commit distribution",
"detail": "top contributor authored 100% of commits",
"points": 0,
"status": "missed",
"details": [
{
"code": "top_contributor_share",
"params": {
"share": 100
}
}
],
"max_points": 22.5
},
{
"key": "contributor_breadth",
"name": "Contributor breadth",
"detail": "1 contributors",
"points": 1.4,
"status": "partial",
"details": [
{
"code": "contributors_sampled",
"params": {
"count": 1
}
}
],
"max_points": 13.5
},
{
"key": "openssf_scorecard_contributors",
"name": "OpenSSF Scorecard: Contributors",
"detail": "project has 2 contributing companies or organizations -- score normalized to 6",
"points": 6,
"status": "partial",
"details": [],
"max_points": 10
}
]
},
{
"key": "responsiveness",
"band": "good",
"name": "Issue & PR responsiveness",
"note": "Excluded from scoring (no data or not applicable): Issue resolution. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"issue_resolution"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 70,
"inputs": {
"merged_prs": 35,
"open_issues": 0,
"closed_issues": 0,
"issue_closed_ratio": null,
"closed_unmerged_prs": 1
},
"components": [
{
"key": "issue_resolution",
"name": "Issue resolution",
"detail": "no issues or no data",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_issues_or_data",
"params": {}
}
],
"max_points": 46.75
},
{
"key": "pr_acceptance",
"name": "PR acceptance",
"detail": "35/36 decided PRs merged",
"points": 37.2,
"status": "partial",
"details": [
{
"code": "decided_prs_merged",
"params": {
"merged": 35,
"decided": 36
}
}
],
"max_points": 38.25
},
{
"key": "openssf_scorecard_code_review",
"name": "OpenSSF Scorecard: Code-Review",
"detail": "Found 0/15 approved changesets -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
}
]
},
{
"key": "stewardship",
"band": "at_risk",
"name": "Ownership & stewardship",
"note": null,
"notes": [],
"value": 42,
"inputs": {
"followers": 2,
"owner_type": "Organization",
"is_verified": null,
"owner_login": "etamong-playground",
"public_repos": 13,
"account_age_days": 33
},
"components": [
{
"key": "ownership_backing",
"name": "Ownership backing",
"detail": "organization-owned",
"points": 30,
"status": "met",
"details": [
{
"code": "owner_organization",
"params": {}
}
],
"max_points": 30
},
{
"key": "verified_domain",
"name": "Verified domain",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 20
},
{
"key": "owner_reach",
"name": "Owner reach",
"detail": "2 followers of etamong-playground",
"points": 3.4,
"status": "partial",
"details": [
{
"code": "owner_followers",
"params": {
"count": 2,
"login": "etamong-playground"
}
}
],
"max_points": 25
},
{
"key": "track_record",
"name": "Track record",
"detail": "13 public repos, account ~0 yr old",
"points": 8.5,
"status": "partial",
"details": [
{
"code": "public_repos",
"params": {
"count": 13
}
},
{
"code": "account_age_years",
"params": {
"years": 0
}
}
],
"max_points": 25
}
]
},
{
"key": "package_maintenance",
"band": "excellent",
"name": "Package maintenance",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"packages": [
"@etamong-playground/ui"
],
"ecosystems": "npm",
"any_deprecated": false,
"min_days_since_publish": 5
},
"components": [
{
"key": "published_resolvable",
"name": "Published & resolvable",
"detail": "1 package(s) on npm",
"points": 25,
"status": "met",
"details": [
{
"code": "packages_published",
"params": {
"count": 1,
"ecosystems": "npm"
}
}
],
"max_points": 25
},
{
"key": "publish_recency",
"name": "Publish recency",
"detail": "latest publish 5 days ago",
"points": 35,
"status": "met",
"details": [
{
"code": "publish_recency",
"params": {
"days": 5
}
}
],
"max_points": 35
},
{
"key": "version_history",
"name": "Version history",
"detail": "10 published versions",
"points": 20,
"status": "met",
"details": [
{
"code": "published_versions",
"params": {
"count": 10
}
}
],
"max_points": 20
},
{
"key": "not_deprecated",
"name": "Not deprecated",
"detail": "active, not deprecated or yanked",
"points": 20,
"status": "met",
"details": [
{
"code": "package_not_deprecated",
"params": {}
}
],
"max_points": 20
}
]
}
],
"description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
},
{
"key": "engineering",
"band": "good",
"name": "Engineering Quality",
"value": 71,
"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": "28 out of 28 merged PRs checked by a CI test -- score normalized to 10",
"points": 20,
"status": "met",
"details": [],
"max_points": 20
}
]
},
{
"key": "documentation",
"band": "good",
"name": "Documentation",
"note": null,
"notes": [],
"value": 75,
"inputs": {
"topics": [
"design-system",
"pwa",
"react",
"typescript",
"ui-components"
],
"has_wiki": false,
"homepage": null,
"has_readme": true,
"has_docs_dir": true,
"has_description": true
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 30,
"status": "met",
"details": [],
"max_points": 30
},
{
"key": "documentation_directory",
"name": "Documentation directory",
"detail": null,
"points": 25,
"status": "met",
"details": [],
"max_points": 25
},
{
"key": "documentation_homepage_site",
"name": "Documentation / homepage site",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
},
{
"key": "repository_description",
"name": "Repository description",
"detail": null,
"points": 10,
"status": "met",
"details": [],
"max_points": 10
},
{
"key": "topics",
"name": "Topics",
"detail": "5 topics",
"points": 10,
"status": "met",
"details": [
{
"code": "topics_count",
"params": {
"count": 5
}
}
],
"max_points": 10
},
{
"key": "wiki",
"name": "Wiki",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
}
],
"description": "Are baseline engineering and documentation practices in place?"
},
{
"key": "security",
"band": "moderate",
"name": "Security",
"value": 56,
"weight": 0.16,
"metrics": [
{
"key": "security_posture",
"band": "at_risk",
"name": "Security posture",
"note": "Excluded from scoring (no data or not applicable): Packaging, Signed-Releases. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"packaging",
"signed_releases"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 45,
"inputs": {
"source": "openssf_scorecard",
"checks_evaluated": 16,
"scorecard_version": "v5.5.0",
"checks_inconclusive": 2,
"scorecard_aggregate": 4.5
},
"components": [
{
"key": "binary_artifacts",
"name": "Binary-Artifacts",
"detail": "no binaries found in the repo",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "branch_protection",
"name": "Branch-Protection",
"detail": "branch protection is not maximal on development and all release branches",
"points": 2.2,
"status": "partial",
"details": [],
"max_points": 7.5
},
{
"key": "ci_tests",
"name": "CI-Tests",
"detail": "28 out of 28 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/15 approved changesets -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "contributors",
"name": "Contributors",
"detail": "project has 2 contributing companies or organizations -- score normalized to 6",
"points": 1.5,
"status": "partial",
"details": [],
"max_points": 2.5
},
{
"key": "dangerous_workflow",
"name": "Dangerous-Workflow",
"detail": "no dangerous workflow patterns detected",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
},
{
"key": "dependency_update_tool",
"name": "Dependency-Update-Tool",
"detail": "update tool detected",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "fuzzing",
"name": "Fuzzing",
"detail": "project is not fuzzed",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "license",
"name": "License",
"detail": "license file detected",
"points": 2.5,
"status": "met",
"details": [],
"max_points": 2.5
},
{
"key": "maintained",
"name": "Maintained",
"detail": "project was created within the last 90 days. Please review its contents carefully",
"points": 0,
"status": "missed",
"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 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "sast",
"name": "SAST",
"detail": "SAST tool is not run on all commits -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "security_policy",
"name": "Security-Policy",
"detail": "security policy file detected",
"points": 2,
"status": "partial",
"details": [],
"max_points": 5
},
{
"key": "signed_releases",
"name": "Signed-Releases",
"detail": "no releases found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 7.5
},
{
"key": "token_permissions",
"name": "Token-Permissions",
"detail": "detected GitHub workflow tokens with excessive permissions",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "vulnerabilities",
"name": "Vulnerabilities",
"detail": "2 existing vulnerabilities detected",
"points": 6,
"status": "partial",
"details": [],
"max_points": 7.5
}
]
},
{
"key": "dependency_advisories",
"band": "excellent",
"name": "Dependency advisories",
"note": "Excluded from scoring (no data or not applicable): No advisories left outstanding. Remaining weights renormalized. Matched the npm:@etamong-playground/ui@0.41.0 runtime dependency closure — what installing the published package pulls in — 27 packages. Reachability is not analyzed.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"no_advisories_left_outstanding"
]
}
},
{
"code": "weights_renormalized",
"params": {}
},
{
"code": "advisories_scope_published",
"params": {
"package": "npm:@etamong-playground/ui@0.41.0",
"assessed": 27
}
},
{
"code": "advisories_reachability",
"params": {}
}
],
"value": 100,
"inputs": {
"source": "osv",
"advisories": 0,
"affected_packages": 0,
"assessed_packages": 27,
"unassessed_packages": 0,
"affected_by_severity": "none",
"direct_affected_packages": 0
},
"components": [
{
"key": "direct_dependencies_free_of_known_advisories",
"name": "Direct dependencies free of known advisories",
"detail": "no direct dependency carries a known advisory",
"points": 35,
"status": "met",
"details": [
{
"code": "no_direct_advisories",
"params": {}
}
],
"max_points": 35
},
{
"key": "indirect_dependencies_free_of_known_advisories",
"name": "Indirect dependencies free of known advisories",
"detail": "no indirect dependency carries a known advisory",
"points": 25,
"status": "met",
"details": [
{
"code": "no_indirect_advisories",
"params": {}
}
],
"max_points": 25
},
{
"key": "no_advisories_left_outstanding",
"name": "No advisories left outstanding",
"detail": "no advisory carries a publication date",
"points": 0,
"status": "excluded",
"details": [
{
"code": "advisories_no_publication_date",
"params": {}
}
],
"max_points": 40
}
]
},
{
"key": "malicious_dependencies",
"band": "excellent",
"name": "Malicious dependencies",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"source": "osv",
"meaning": "reported as a malicious package by the OpenSSF corpus; the remedy is removal or moving off the compromised name, never an upgrade of the same artifact. Versions the registry has since pulled are listed but not scored",
"packages": [],
"red_flag": false,
"assessed_packages": 27,
"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": 3
},
"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": 56,
"weight": 0,
"metrics": [
{
"key": "ai_agent_context",
"band": "at_risk",
"name": "Agent context & guidance",
"note": null,
"notes": [],
"value": 40,
"inputs": {
"has_llms_txt": false,
"legible_history_share": 0.944,
"agent_instruction_files": [],
"agent_instruction_max_bytes": null
},
"components": [
{
"key": "agent_instructions",
"name": "Agent instructions",
"detail": "no CLAUDE.md / AGENTS.md / editor rules",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_agent_instructions",
"params": {}
}
],
"max_points": 45
},
{
"key": "machine_readable_docs_llms_txt",
"name": "Machine-readable docs (llms.txt)",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
},
{
"key": "legible_commit_history",
"name": "Legible commit history",
"detail": "67 of 71 human commits state their intent (structured subject or explanatory body)",
"points": 40,
"status": "met",
"details": [
{
"code": "legible_history",
"params": {
"legible": 67,
"sampled": 71
}
}
],
"max_points": 40
}
]
},
{
"key": "ai_verify_loop",
"band": "moderate",
"name": "Verify loop (build / test / typecheck)",
"note": null,
"notes": [],
"value": 51,
"inputs": {
"has_nix": false,
"has_tests": true,
"lockfiles": [
"pnpm-lock.yaml"
],
"has_dockerfile": false,
"typed_language": true,
"bootstrap_files": [],
"has_devcontainer": false,
"has_linter_config": false,
"typecheck_configs": [
"showcase/tsconfig.json",
"tsconfig.json"
],
"agent_commit_share": 0,
"toolchain_manifests": [],
"dependency_bot_commit_share": 0.02
},
"components": [
{
"key": "one_command_bootstrap",
"name": "One-command bootstrap",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 18
},
{
"key": "automated_tests",
"name": "Automated tests",
"detail": null,
"points": 22,
"status": "met",
"details": [],
"max_points": 22
},
{
"key": "lint_format_config",
"name": "Lint / format config",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 11
},
{
"key": "static_type_checking",
"name": "Static type checking",
"detail": "showcase/tsconfig.json, tsconfig.json",
"points": 11,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "showcase/tsconfig.json, tsconfig.json"
}
}
],
"max_points": 11
},
{
"key": "reproducible_environment",
"name": "Reproducible environment",
"detail": "lockfile",
"points": 10,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "lockfile"
}
}
],
"max_points": 10
},
{
"key": "demonstrated_agent_practice",
"name": "Demonstrated agent practice",
"detail": "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": "2 of the last 100 commits are automated dependency updates",
"points": 8,
"status": "met",
"details": [
{
"code": "dependency_bot_commits",
"params": {
"count": 2,
"sampled": 100
}
}
],
"max_points": 8
},
{
"key": "openssf_scorecard_pinned_dependencies",
"name": "OpenSSF Scorecard: Pinned-Dependencies",
"detail": "dependency not pinned by hash detected -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
},
{
"key": "ai_code_legibility",
"band": "excellent",
"name": "Code legibility for models",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"primary_language": "TypeScript",
"largest_source_bytes": 18376,
"source_files_sampled": 76,
"oversized_source_files": 0
},
"components": [
{
"key": "type_checkable_code",
"name": "Type-checkable code",
"detail": "TypeScript (statically typed)",
"points": 45,
"status": "met",
"details": [
{
"code": "statically_typed_language",
"params": {
"language": "TypeScript"
}
}
],
"max_points": 45
},
{
"key": "manageable_file_sizes",
"name": "Manageable file sizes",
"detail": "0/76 source files over 60KB",
"points": 55,
"status": "met",
"details": [
{
"code": "oversized_source_files",
"params": {
"kb": 60,
"sampled": 76,
"oversized": 0
}
}
],
"max_points": 55
}
]
}
],
"description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
}
],
"metrics_version": "1.13.0"
},
"warnings": [],
"report_type": "repository",
"generated_at": "2026-07-23T22:55:24.993045Z",
"schema_version": "0.27.0",
"badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/e/etamong-playground/ui.svg",
"full_name": "etamong-playground/ui",
"license_state": "standard",
"license_spdx": "MIT"
}