原始 JSON 报告 机器可读
{
"data": {
"repo": {
"topics": [
"browser",
"router",
"hash",
"pushstate",
"callback",
"react"
],
"is_fork": false,
"size_kb": 4316,
"has_wiki": true,
"homepage": "https://kidkarolis.github.io/space-router/",
"languages": {
"TypeScript": 51547
},
"pushed_at": "2026-07-20T11:23:51Z",
"created_at": "2017-03-12T15:06:54Z",
"owner_type": "User",
"updated_at": "2026-07-20T11:24:35Z",
"description": "Framework agnostic router for single page apps",
"is_archived": false,
"is_disabled": false,
"license_spdx": "ISC",
"default_branch": "master",
"license_spdx_raw": "ISC",
"primary_language": "TypeScript",
"significant_languages": [
"TypeScript"
]
},
"owner": {
"blog": "https://humaans.io/",
"name": "Karolis Narkevicius",
"type": "User",
"login": "KidkArolis",
"company": "Humaans",
"location": "London",
"followers": 117,
"avatar_url": "https://avatars.githubusercontent.com/u/324440?v=4",
"created_at": "2010-07-06T16:22:58Z",
"is_verified": null,
"public_repos": 143,
"account_age_days": 5864
},
"license": {
"state": "standard",
"spdx_id": "ISC",
"raw_spdx": "ISC",
"file_present": true,
"scorecard_found": true,
"profile_has_license": true
},
"activity": {
"releases": [
{
"tag": "v2.0.0",
"kind": "major",
"published_at": "2026-07-20T11:16:43Z"
},
{
"tag": "v1.4.2",
"kind": "patch",
"published_at": "2026-07-19T10:48:55Z"
},
{
"tag": "v1.4.1",
"kind": "patch",
"published_at": "2026-07-19T00:01:33Z"
},
{
"tag": "v1.4.0",
"kind": "minor",
"published_at": "2026-07-18T23:40:51Z"
},
{
"tag": "v1.3.0",
"kind": "minor",
"published_at": "2026-07-07T18:03:32Z"
},
{
"tag": "v1.2.0",
"kind": "minor",
"published_at": "2026-07-06T19:58:45Z"
},
{
"tag": "v1.1.0",
"kind": "minor",
"published_at": "2026-07-06T17:53:48Z"
},
{
"tag": "v1.0.0",
"kind": "major",
"published_at": "2026-04-25T11:11:44Z"
},
{
"tag": "v0.9.5",
"kind": "patch",
"published_at": "2026-02-23T21:43:24Z"
},
{
"tag": "v0.9.4",
"kind": "patch",
"published_at": "2025-11-23T18:55:56Z"
},
{
"tag": "v0.9.3",
"kind": "patch",
"published_at": "2024-05-01T11:18:51Z"
},
{
"tag": "v0.9.2",
"kind": "patch",
"published_at": "2023-11-05T10:48:09Z"
},
{
"tag": "v0.9.1",
"kind": "patch",
"published_at": "2023-04-12T09:51:16Z"
},
{
"tag": "v0.9.0",
"kind": "minor",
"published_at": "2023-04-11T21:54:48Z"
},
{
"tag": "v0.8.5",
"kind": "patch",
"published_at": "2022-04-05T22:20:32Z"
},
{
"tag": "v0.8.4",
"kind": "patch",
"published_at": "2021-11-13T22:19:05Z"
},
{
"tag": "v0.8.3",
"kind": "patch",
"published_at": "2021-11-13T21:49:01Z"
},
{
"tag": "v0.8.2",
"kind": "patch",
"published_at": "2021-11-05T23:20:51Z"
},
{
"tag": "v0.8.1",
"kind": "patch",
"published_at": "2021-11-05T15:17:21Z"
},
{
"tag": "v0.8.0",
"kind": "minor",
"published_at": "2021-10-26T21:56:01Z"
},
{
"tag": "v0.7.0",
"kind": "minor",
"published_at": "2018-09-12T09:38:56Z"
},
{
"tag": "v0.6.0",
"kind": "minor",
"published_at": "2018-09-11T12:52:56Z"
},
{
"tag": "v0.5.3",
"kind": "patch",
"published_at": "2018-08-28T21:59:01Z"
},
{
"tag": "v0.5.2",
"kind": "patch",
"published_at": "2018-03-29T08:25:46Z"
},
{
"tag": "v0.5.1",
"kind": "patch",
"published_at": "2017-12-06T17:20:09Z"
},
{
"tag": "v0.5.0",
"kind": "minor",
"published_at": "2017-12-06T17:15:34Z"
},
{
"tag": "v0.4.0",
"kind": "minor",
"published_at": "2017-10-17T22:28:01Z"
},
{
"tag": "v0.3.0",
"kind": "minor",
"published_at": "2017-03-16T11:20:15Z"
},
{
"tag": "v0.2.0",
"kind": "minor",
"published_at": "2017-03-15T10:28:18Z"
},
{
"tag": "v0.1.0",
"kind": "minor",
"published_at": "2017-03-13T23:10:20Z"
}
],
"recent_commits": [
{
"oid": "15b30e674973478057ca66603860681ec69ce5c5",
"body": null,
"is_bot": false,
"headline": "Improve doc styling",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2026-07-20T11:23:44Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a25c19e6400a84e8dcb5e1cb0ee9bc7b524fc993",
"body": null,
"is_bot": false,
"headline": "2.0.0",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2026-07-20T11:16:43Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7ed845617914fb906e33d4438dc64384473cf21e",
"body": null,
"is_bot": false,
"headline": "Pin Hugo for docs builds",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2026-07-20T11:16:18Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3e81f12fc2c36e6d05c7dd0944f1bfc1265b00c2",
"body": null,
"is_bot": false,
"headline": "Add mode-aware hrefs and navigation metadata",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2026-07-20T11:14:05Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2beb56c6d9776a1c7b045bdef1feb06754970b9a",
"body": null,
"is_bot": false,
"headline": "1.4.2",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2026-07-19T10:48:55Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7dcd5bb2228a54a26e444aef00ce584bec225042",
"body": "- href (and therefore navigate) now drops unfilled :name? and :name*\n segments instead of leaving the literal pattern text in the url\n- ship declaration maps so go-to-definition lands in the published src\n- use git+https for the repository url in package.json\n- docs: clarify that listen's initial o\n[…]\nlivered via the\n scheduler, not synchronously\n- flatten test fixture: /baz/* -> /baz/:rest* so the example teaches\n the real wildcard spelling\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Drop unfilled optional and splat params in href, polish package edges",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2026-07-19T10:47:44Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "58a2bef9e33c7635e21489632cf16b0dffbe00dd",
"body": null,
"is_bot": false,
"headline": "1.4.1",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2026-07-19T00:01:33Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a736baf9256f06f59cad1ac1ead44e38a14340a4",
"body": "Types-only: From is now { pathname?, params?, query?, hash?, pattern? }\ninstead of Partial<Route> | NavigateTarget. Routes, partial routes, and\nstored navigation targets all still satisfy it structurally, and merge()\ndrops both its type parameter and the 'in' narrowing.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Tighten From to the exact fields merge reads",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2026-07-18T23:59:19Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "74b3c14dd05e11585958624812f98bfbe6801c03",
"body": null,
"is_bot": false,
"headline": "1.4.0",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2026-07-18T23:40:51Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1ff27f2ee96575a0924913b4d362b71aca51a34a",
"body": "Route metadata stays flat rather than nested under a meta field — the\nnesting was built and reverted before release. Record why, the accepted\nprice (the flatten casts, reserved field names), and the general bar for\nchanges, with a pointer comment at the casts themselves.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Document the flat route metadata decision in AGENTS.md",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2026-07-18T23:40:12Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "72521601bc76f8000b59ebf8ed2ffe6a62025cae",
"body": null,
"is_bot": false,
"headline": "Upgrade deps",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2026-07-18T23:22:55Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f239a61ca7ca37c4ff514326376308cb2cb6bf37",
"body": "…to, from)\n\n- history subscriptions get identity-owned, idempotent disposers: a stale\n disposer can't remove a newer listener, disposal invalidates pending\n emissions, failed initial delivery cleans up transactionally, and a\n rejected second router listen no longer replaces the active matcher\n- m\n[…]\npt partial routes and\n navigation targets via the new From type, matching runtime behavior\n- add a tsc --noEmit typecheck step to the test gate\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Harden history subscriptions, tolerate malformed urls, type navigate(…",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2026-07-18T23:21:53Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "190cebc42e427741c05edad1fb42ec91e2686d4a",
"body": null,
"is_bot": false,
"headline": "1.3.0",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2026-07-07T18:03:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1920c9df0f22c08a25c00f562ca676633091b0e9",
"body": "Replaces the current history entry without emitting a route change, for\ncallers that have already committed a route and only need the address\nbar to agree — e.g. after a pre-commit transform rewrote the url.\nBacked by a new history.replaceSilent, which uses replaceState in both\nhistory and hash modes (never location.replace, which fires hashchange\nand would emit) and overwrites the top of the stack in memory mode.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Add router.replaceUrl for silent, mode-aware url replacement",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2026-07-07T17:57:40Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "d07a06240e7a83a3bf65366f545372c9d91f8f3c",
"body": null,
"is_bot": false,
"headline": "1.2.0",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2026-07-06T19:58:45Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "13e2ae3eb1f4f5b256de6e827a7fbce5e6643f2a",
"body": "createRouter and createHistory accept schedule(fire, info) to control\nhow url changes are delivered to the listener. info.traversal is true\nfor back/forward traversals (popstate/hashchange), false for\nprogrammatic navigations and the initial listen. sync: true is now\nshorthand for the immediate sche\n[…]\ne guard:\nsuperseded fires no-op and the surviving one reads the url at fire\ntime, so mixed schedules collapse to a single emit of the final url.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Add a pluggable schedule option for emit delivery",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2026-07-06T19:58:16Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "f8c283eee6a2ffee1a50b84dd3f4b6894c4facfa",
"body": null,
"is_bot": false,
"headline": "1.1.0",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2026-07-06T17:53:48Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "bb1636cda738c6e5663c43d91aba8f6703afb9cf",
"body": "ava 8 requires the extensions option to be an array — the module\ntype now comes from the package's type field.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Upgrade dev dependencies",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2026-07-06T17:53:22Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "6d22662f0a2bb4f004024024b988df2b61ced37d",
"body": "- memory mode getUrl returns '' instead of undefined before any\n navigation, and replace on an empty stack creates the entry\n explicitly instead of relying on out-of-bounds index assignment\n- flatten no longer emits unmatchable entries for pathless routes\n- document the sync option and createHistory\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Tidy up API edges",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2026-07-06T17:47:30Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "8e1d832a7528861b12cd2d4965a312bc15910f25",
"body": null,
"is_bot": false,
"headline": "Merge branch 'codex/create-matcher-api'",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2026-07-06T17:41:01Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "66c606460a2c7e89b48f1d4f4ca964929de16bb6",
"body": "Add createMatcher API",
"is_bot": false,
"headline": "Merge pull request #23 from KidkArolis/codex/create-matcher-api",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2026-07-06T17:38:01Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8ded1de50abb3c34772b29364cbd448f3f5e0cf9",
"body": "Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Document createMatcher and route data path",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2026-07-06T17:35:07Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "2918253738260f02c6c02d9f86503dbf3a176970",
"body": "- match routes in a single pass in createMatcher, dropping the\n data() pattern re-lookup and the now-unused match() helper\n- require path on RouteData so matched data segments expose it\n as a plain string, while RouteDefinition keeps it optional\n- narrow Matcher.match to accept a string\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Simplify matcher internals and tighten route data types",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2026-07-06T17:28:41Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "3e6e16169b610d30fe872e54daf2f50bfd437ec9",
"body": null,
"is_bot": false,
"headline": "Simplify route data types",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2026-04-29T21:27:42Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "166b90944b5ff6f9ec192cf88cc34419c69d42b4",
"body": null,
"is_bot": false,
"headline": "Add createMatcher API",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2026-04-28T22:50:35Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1aec7a01f2d1b0708cff26c761853d0de77a6845",
"body": "Hugo removed the _internal/google_analytics_async.html template some\nversions ago, which broke `npm run release:docs`. There is no GA\nconfigured anyway, so the line was dead code. Also gitignore hugo's\nbuild lock file.\n\nCo-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Drop deprecated google_analytics_async template from docs base layout",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2026-04-25T11:13:46Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "59de521fe303eb18156f280af9f61005d4a64503",
"body": null,
"is_bot": false,
"headline": "1.0.0",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2026-04-25T11:11:44Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "66ca98d95bbf05fb01cc5f12da773e12a4828b98",
"body": "Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Add 1.0.0 changelog entry",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2026-04-25T11:09:35Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "8e878f27ad694bfcfb715448ff10dc5bc1c659c7",
"body": "- Document param flag suffixes (:name?, :name+, :name*, *) — these\n have always been real features but were never written up.\n- Note that href encodes params so values round-trip through match\n even with /, spaces and other special chars.\n- Document the navigate(to, curr) and href(to, curr) second\n[…]\n-loop cap (10 hops).\n- Advertise that TypeScript types ship out of the box.\n- Fix typos: \"applocation\", \"not not\", \"the to\", \"array of arrays\".\n\nCo-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Refresh docs",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2026-04-25T11:07:10Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "c1e638f84d72f478dc504dc916033a5618d73859",
"body": "Migrate to TypeScript, ship ESM-only, modernise build",
"is_bot": false,
"headline": "Merge pull request #21 from KidkArolis/chore/typescript-esm-only",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2026-04-25T10:56:37Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a52312a0161e039497f5725b1bdb7aa561090755",
"body": "Brings hash mode in line with history mode for the \"navigate to the\ncurrent URL\" case. History mode already re-fires the listener\nbecause pushState is silent and we manually schedule. Hash mode\nrelied on the browser's hashchange event, which doesn't fire when\nthe URL is unchanged — so listeners sile\n[…]\nual hashchange land in different\nticks and produce two emits (both with the final URL). Niche;\nlisteners are typically idempotent against this.\n\nCo-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Make hash mode emit on same-URL navigation",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2026-04-25T10:55:43Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "4633910768d2fb16d7bf0fcc01dac4181f909ca3",
"body": "Drop requestAnimationFrame for the browser path. The router emit\ndoesn't need paint alignment — downstream frameworks already batch\nstate→render. queueMicrotask works in both browser and SSR, fires\nregardless of tab visibility, and removes the SSR/browser branch.\n\nCoalesce while we're here: a burst \n[…]\nsses (calls emit synchronously). Browser\npopstate/hashchange events also flow through the scheduler so rapid\nback/forward presses coalesce too.\n\nCo-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Use queueMicrotask everywhere and coalesce emits",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2026-04-25T10:46:41Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "c8bb5d7de700a92ccc8a3e3a08017b31cd3d4c6e",
"body": "- Source: src/*.js → src/*.ts with full type annotations. Generic Data\n parameter on Route, Router, RouteDefinition so consumers get typed\n metadata. Internal imports use .ts extensions and tsc rewrites them\n to .js on emit (allowImportingTsExtensions + rewriteRelativeImport-\n Extensions).\n- Out\n[…]\nns; modernise the flag\n extraction to ?.[0] ?? ''.\n\nEngines bumped to >=18 for ESM. Published tarball: 51 files / 342 kB\n→ 18 files / 28 kB.\n\nCo-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Migrate to TypeScript, ship ESM-only, modernise the build",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2026-04-25T10:40:43Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "f55f72d59eeea6e8daa96f77385a720cf92f4b98",
"body": "Migrated config via `oxfmt --migrate=prettier`. No source-file changes;\noxfmt produces identical formatting for the existing files.\n\nCo-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Replace prettier with oxfmt",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2026-04-25T10:08:53Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "81c5b0622df1814ef6001e56a37885dad057183c",
"body": "Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Fix license SPDX identifier (ICS → ISC)",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2026-04-25T10:06:56Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "2f52c361e70a78369264dcc991fdfea322d964dc",
"body": "Fix correctness bugs in href/qs/redirects and add TypeScript types",
"is_bot": false,
"headline": "Merge pull request #20 from KidkArolis/fix/correctness-and-types",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2026-04-25T10:06:12Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0a4e0b0198a015cc4cd81b224a451ac006b252da",
"body": "…ypes\n\n- href: single regex pass over :name[+*?] placeholders. Encodes values,\n strips flags, and avoids substring collisions when params share a\n name prefix (e.g. :id inside :idName).\n- qs.parse: decode keys, keep everything after the first = in the value,\n treat + as space, handle missing =. q\n[…]\nside the hash fragment.\n- Ship index.d.ts at the package root with a generic Data parameter on\n routes/router so consumers get typed metadata.\n\nCo-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Fix correctness bugs in href/qs/redirects/lifecycle, add TypeScript t…",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2026-04-25T10:05:34Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "e1971668ff32348e97249de2440fdb44a501f2cf",
"body": null,
"is_bot": false,
"headline": "Update deps",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2026-04-07T19:53:55Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "efa406c74d02a0073ed00983870d112a17cc1df8",
"body": null,
"is_bot": false,
"headline": "Run npm update",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2026-03-05T11:35:21Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d9107d3cc35c98d26638a8ccfcbbe11bac653513",
"body": null,
"is_bot": false,
"headline": "0.9.5",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2026-02-23T21:43:24Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "14daf90183d5a9ca310430e2bf8fd1dc84ccdd9d",
"body": null,
"is_bot": false,
"headline": "Fix linting",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2026-02-23T21:42:55Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "953cb4c62724b9cfb101fcbb2ba11abf30397ea9",
"body": null,
"is_bot": false,
"headline": "Upgrade deps",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2026-02-23T21:41:37Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3e9d9d81fe5efb94d06dfab330599a6263abd53e",
"body": null,
"is_bot": false,
"headline": "Upgrade deps",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2026-02-03T22:59:27Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d8d5352dca22efc6426021a0c875f57b920683c0",
"body": null,
"is_bot": false,
"headline": "Bump deps",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2026-01-19T14:01:24Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9f8696d0e8e7f747ae543fb39be344e8e456b99a",
"body": null,
"is_bot": false,
"headline": "0.9.4",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2025-11-23T18:55:56Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4b4dab1d26ac8fd653ae06e2746d97dc7b7f63ed",
"body": null,
"is_bot": false,
"headline": "Upgrade deps",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2025-11-23T18:55:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "07a0733a5746ebf2d88b698ce7ae1c7b0d1561d0",
"body": null,
"is_bot": false,
"headline": "0.9.3",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2024-05-01T11:18:51Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "54d6c3abaa24a6f71f9167afa7a3595311150553",
"body": null,
"is_bot": false,
"headline": "Update CHANGELOG",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2024-05-01T11:18:19Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "13cee1020c7dc9107a1e861c3bd746d5942dee73",
"body": null,
"is_bot": false,
"headline": "Upgrade deps",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2024-05-01T11:17:59Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "61044308a8819f7d3ca14e7320a0585414f4e4a9",
"body": null,
"is_bot": false,
"headline": "0.9.2",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2023-11-05T10:48:09Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "48edc641173606b9a84b891419dae65c4aea629f",
"body": null,
"is_bot": false,
"headline": "Add engines.node",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2023-11-05T10:47:36Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "47fc61dffd4ee16db3f8887ce697ef5b57810969",
"body": null,
"is_bot": false,
"headline": "Upgrade all deps",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2023-11-05T10:46:51Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e023a3394d16f1ce4c99420c30e510e8684e6688",
"body": null,
"is_bot": false,
"headline": "0.9.1",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2023-04-12T09:51:16Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "15eb50feeed52c2c8a626117f39d4a2cbc72a0b3",
"body": null,
"is_bot": false,
"headline": "Revert to cjs",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2023-04-12T09:50:58Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c3578eec8d0824f86e9d15e8daa24842eba79eb6",
"body": null,
"is_bot": false,
"headline": "0.9.0",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2023-04-11T21:54:48Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2ab84b9e039575b3b56967ec60281d38dd700e68",
"body": null,
"is_bot": false,
"headline": "Check in dist files",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2023-04-11T21:54:11Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3fda66c019c56c492caacc847e452735a56f9ef9",
"body": null,
"is_bot": false,
"headline": "Upgrade all deps, switch to swc",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2023-04-11T21:53:43Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6721e45261691edc60d5d63b53abdd2c564001c9",
"body": null,
"is_bot": false,
"headline": "0.8.5",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2022-04-05T22:20:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9d12d12db0cbb7cd1fe49c8c283dfec1c9a98469",
"body": null,
"is_bot": false,
"headline": "Update dev deps",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2022-04-05T22:20:02Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a49eb62fba176a0b632141462497e6339820daa0",
"body": null,
"is_bot": false,
"headline": "Improve docs",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2022-04-05T22:16:43Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1d9ef1379834259fb645fe3d24e64f348c558672",
"body": null,
"is_bot": false,
"headline": "Fix redirects and improve merge with curr context, improve docs",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2021-11-14T19:36:05Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6f6defb5ba803cf565d6b14c7a7884a9fd914d95",
"body": null,
"is_bot": false,
"headline": "Fix redirects when not in memory mode",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2021-11-14T11:36:30Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ac06c44ba010a85e26c5846b6fdbf889ea6c99d8",
"body": null,
"is_bot": false,
"headline": "0.8.4",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2021-11-13T22:19:05Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8dda52b3d5cab4f9f5a70860da824c85a7e1eefe",
"body": null,
"is_bot": false,
"headline": "Fix the navigate(str) implementation",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2021-11-13T22:18:29Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "cc245a31e673cb83b851942549e9574973a3335b",
"body": null,
"is_bot": false,
"headline": "0.8.3",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2021-11-13T21:49:01Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "08733c9c0775653601b2f9fa2e5a4f810db133b6",
"body": null,
"is_bot": false,
"headline": "Re-add string navigation",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2021-11-13T21:48:10Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "31f12e1d8ebdac5cec11d1a6b921f6df4f3262ca",
"body": null,
"is_bot": false,
"headline": "Add --no-release-draft to np commands",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2021-11-05T23:22:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "298d7886de4b8c54826527fec964b7b18c9ff687",
"body": null,
"is_bot": false,
"headline": "0.8.2",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2021-11-05T23:20:51Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7131426b2621d0d4f0a9cc8be2df200e9f410d24",
"body": null,
"is_bot": false,
"headline": "Upgrade deps",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2021-11-05T23:20:19Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "16473bf305af13397746098e58b7e3cf7b2cbfc4",
"body": null,
"is_bot": false,
"headline": "Fix an issue with webpack bundling caused by referencing setImmediate",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2021-11-05T23:18:10Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "dfe92775f377fdd31895a7f62001efa18cd34a91",
"body": null,
"is_bot": false,
"headline": "0.8.1",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2021-11-05T15:17:21Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5f1754dfefc21499b30b11c7ce222a15f92f91cb",
"body": null,
"is_bot": false,
"headline": "Update docs and changelog with info about the new feature",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2021-11-05T15:16:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "39edd97f1637528d5f1de3ee6ea99fecad41176e",
"body": "Useful when used in async context where reading router URL is not safe",
"is_bot": false,
"headline": "Allow passing the current route to be merged instead of getUrl",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2021-11-05T15:14:05Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "dbcdb2a1c77bb275e8d07d703c2105a9ab7c47a9",
"body": null,
"is_bot": false,
"headline": "Fix the docs site meta",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2021-11-05T15:12:55Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1f873b6515f212e2eee326bb5548c0f3d3fd9b0e",
"body": null,
"is_bot": false,
"headline": "0.8.0",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2021-10-26T21:56:01Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "65bb227d1ada2106edbe78e1b8bb61aca8b877e2",
"body": null,
"is_bot": false,
"headline": "Fix prettierignore",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2021-10-26T21:55:06Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "45f62e38fd1a895b3cc40922005a1629f7c29e90",
"body": null,
"is_bot": false,
"headline": "Add npmignore",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2021-10-26T21:53:12Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "15eb51afd792ba84abc49a468a9c8155bff02d19",
"body": null,
"is_bot": false,
"headline": "Fix docs",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2021-10-26T21:50:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "44957fe6e12730dbae4bb8a8ccb9a63b64d85fcd",
"body": "And wrt to async routes or react bindings - it just needs to be re-implemented in that context\nso that it works correctly there too",
"is_bot": false,
"headline": "Readd merge option to navigate - it's super useful",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2021-10-26T21:48:38Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "51a16a12e4797ee5cc2e5d96d7faafd642c7007c",
"body": null,
"is_bot": false,
"headline": "Update CHANGELOG",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2021-10-26T21:26:02Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "de30ea0f0a8bdabedbd8b02b6264760d1a638d11",
"body": null,
"is_bot": false,
"headline": "Improve test coverage, add redirect fn support",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2021-10-24T17:03:26Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b559a515834b7a6879d140e800753cf9b5a65d37",
"body": null,
"is_bot": false,
"headline": "Fix linting",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2021-10-24T17:03:13Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "020737cc7de94f8cf331eaff5d5cb92d9c767933",
"body": null,
"is_bot": false,
"headline": "Remove unused images from the docs",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2021-10-24T17:03:08Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "504b58a7a0277562d9ff635fb04d8fd67dd518e9",
"body": null,
"is_bot": false,
"headline": "Remove old examples",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2021-10-24T17:03:00Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b35f79aa9b0493ad9ddfafb0115c6fe5959fa5b2",
"body": null,
"is_bot": false,
"headline": "Improve docs",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2021-10-24T09:30:04Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "bbc4ae81ab75e86c734e60cdcf4d2b1ac3ab8513",
"body": null,
"is_bot": false,
"headline": "Fix the link in the README",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2021-10-23T11:15:43Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e9aca03e738dc996dadbc6cbb76401673ab4dbab",
"body": null,
"is_bot": false,
"headline": "Add image to the README",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2021-10-23T11:13:31Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0eb837fdf6be01c1e7d1c1688237f32817b55832",
"body": "Next clean",
"is_bot": false,
"headline": "Merge pull request #19 from KidkArolis/next-clean",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2021-10-23T11:11:01Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "39ac72b56d59e13e1e3b3e1e69fa952abbbe8a89",
"body": null,
"is_bot": false,
"headline": "Install gh-pages",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2021-10-23T11:10:34Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "13380811eaabf26b20c8fc8eb9b29a81c8c83479",
"body": null,
"is_bot": false,
"headline": "Update docs",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2021-10-23T11:09:46Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "469ed7ded193c84ac6ecf65813cb4bf79ea02e87",
"body": null,
"is_bot": false,
"headline": "Add the build step",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2021-10-23T11:09:42Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "add75fb4270ea76f4e1ba0f7093337d76e544b9a",
"body": null,
"is_bot": false,
"headline": "Add license",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2021-10-23T10:05:25Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "365e26ec571f4623a9106894329f2aa429a378ef",
"body": "True care, truth brings",
"is_bot": false,
"headline": "All the small things",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2021-10-19T21:20:28Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e68e768dbd00a1363dbc2d9800cf6827c2d4585e",
"body": null,
"is_bot": false,
"headline": "Reformat code with prettier",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2019-03-25T21:03:01Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "353f93c83646a59e588ccd8d7c356415878ec228",
"body": null,
"is_bot": false,
"headline": "Something something file permissions",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2019-01-19T10:23:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "892c49d77625823d35c2bb37cca08d08dea8a1fd",
"body": null,
"is_bot": false,
"headline": "0.7.0",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2018-09-12T09:38:56Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "22d4fe03bc013907bf93f8c9d8cbffe0cbefa1eb",
"body": "Next",
"is_bot": false,
"headline": "Merge pull request #16 from KidkArolis/next",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2018-09-12T09:37:03Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d841271f66065933d73a9efea1514037231cf71d",
"body": null,
"is_bot": false,
"headline": "Clarify the Changelog",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2018-09-12T09:36:44Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a18fcf25615fb0e7fbeb6bc148b40522bccae5f1",
"body": null,
"is_bot": false,
"headline": "Remove superflous language",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2018-09-12T09:34:02Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6dfdf9b7fc2260ac6f0f28874825e4171920a815",
"body": null,
"is_bot": false,
"headline": "Simplify the README and add all the missing info",
"author_name": "Karolis Narkevicius",
"author_login": "KidkArolis",
"committed_at": "2018-09-12T09:33:11Z",
"body_truncated": false,
"is_coding_agent": false
}
],
"releases_count": 30,
"commits_last_year": 46,
"latest_release_at": "2026-07-20T11:16:43Z",
"latest_release_tag": "v2.0.0",
"releases_from_tags": true,
"days_since_last_push": 6,
"active_weeks_last_year": 11,
"days_since_latest_release": 6,
"mean_days_between_releases": 26.5
},
"community": {
"has_readme": true,
"has_license": true,
"has_description": true,
"has_contributing": false,
"health_percentage": 42,
"has_issue_template": false,
"has_code_of_conduct": false,
"has_pull_request_template": false
},
"ecosystem": {
"packages": [
{
"name": "space-router",
"exists": true,
"license": "ISC",
"keywords": [
"browser",
"router",
"small",
"clientside",
"universal",
"history",
"location",
"url"
],
"ecosystem": "npm",
"matches_repo": true,
"registry_url": "https://www.npmjs.com/package/space-router",
"is_deprecated": false,
"latest_version": "2.0.0",
"repository_url": "https://github.com/KidkArolis/space-router",
"versions_count": 29,
"total_downloads": null,
"dependents_count": null,
"deprecation_note": null,
"maintainers_count": 1,
"monthly_downloads": 3866,
"first_published_at": "2017-03-15T10:28:23.359000Z",
"latest_published_at": "2026-07-20T11:16:55.179000Z",
"latest_version_yanked": null,
"days_since_latest_publish": 6
}
]
},
"popularity": {
"forks": 4,
"stars": 39,
"watchers": 1,
"fork_history": {
"days": [
{
"date": "2017-10-17",
"count": 1
},
{
"date": "2019-03-08",
"count": 1
},
{
"date": "2019-09-22",
"count": 1
},
{
"date": "2020-09-09",
"count": 1
}
],
"complete": true,
"collected": 4,
"total_forks": 4
},
"star_history": null,
"open_issues_and_prs": 0
},
"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": [
"tsconfig.json"
],
"toolchain_manifests": [],
"largest_source_bytes": 49988,
"source_files_sampled": 14,
"oversized_source_files": 0,
"agent_instruction_files": [
"AGENTS.md"
],
"agent_instruction_max_bytes": 1527
},
"dependencies": {
"manifests": [
"package.json"
],
"advisories": {
"error": null,
"scope": "repository_graph",
"source": "osv",
"findings": [
{
"name": "brace-expansion",
"direct": false,
"version": "5.0.7",
"severity": "high",
"ecosystem": "npm",
"cvss_score": 7.5,
"advisory_ids": [
"GHSA-mh99-v99m-4gvg"
],
"fixed_version": "5.0.8",
"advisory_count": 1,
"oldest_advisory_days": 1
},
{
"name": "tar",
"direct": false,
"version": "7.5.20",
"severity": "moderate",
"ecosystem": "npm",
"cvss_score": 5.3,
"advisory_ids": [
"GHSA-r292-9mhp-454m"
],
"fixed_version": "7.5.21",
"advisory_count": 1,
"oldest_advisory_days": 1
}
],
"collected": true,
"malicious": [],
"truncated": false,
"by_severity": {
"high": 1,
"moderate": 1
},
"advisory_count": 2,
"affected_count": 2,
"assessed_count": 259,
"malicious_count": 0,
"assessed_package": null,
"unassessed_count": 0,
"direct_affected_count": 0
},
"ecosystems": [
"npm"
],
"dependencies": [],
"all_dependencies": {
"error": null,
"source": "github-sbom",
"packages": [
{
"name": "@bcoe/v8-coverage",
"direct": false,
"version": "1.0.2",
"ecosystem": "npm"
},
{
"name": "@cto.af/wtf8",
"direct": false,
"version": "0.0.5",
"ecosystem": "npm"
},
{
"name": "@isaacs/fs-minipass",
"direct": false,
"version": "4.0.1",
"ecosystem": "npm"
},
{
"name": "@istanbuljs/schema",
"direct": false,
"version": "0.1.6",
"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": "@mapbox/node-pre-gyp",
"direct": false,
"version": "2.0.3",
"ecosystem": "npm"
},
{
"name": "@nodelib/fs.scandir",
"direct": false,
"version": "2.1.5",
"ecosystem": "npm"
},
{
"name": "@nodelib/fs.stat",
"direct": false,
"version": "2.0.5",
"ecosystem": "npm"
},
{
"name": "@nodelib/fs.walk",
"direct": false,
"version": "1.2.8",
"ecosystem": "npm"
},
{
"name": "@oxfmt/binding-android-arm-eabi",
"direct": false,
"version": "0.59.0",
"ecosystem": "npm"
},
{
"name": "@oxfmt/binding-android-arm64",
"direct": false,
"version": "0.59.0",
"ecosystem": "npm"
},
{
"name": "@oxfmt/binding-darwin-arm64",
"direct": false,
"version": "0.59.0",
"ecosystem": "npm"
},
{
"name": "@oxfmt/binding-darwin-x64",
"direct": false,
"version": "0.59.0",
"ecosystem": "npm"
},
{
"name": "@oxfmt/binding-freebsd-x64",
"direct": false,
"version": "0.59.0",
"ecosystem": "npm"
},
{
"name": "@oxfmt/binding-linux-arm-gnueabihf",
"direct": false,
"version": "0.59.0",
"ecosystem": "npm"
},
{
"name": "@oxfmt/binding-linux-arm-musleabihf",
"direct": false,
"version": "0.59.0",
"ecosystem": "npm"
},
{
"name": "@oxfmt/binding-linux-arm64-gnu",
"direct": false,
"version": "0.59.0",
"ecosystem": "npm"
},
{
"name": "@oxfmt/binding-linux-arm64-musl",
"direct": false,
"version": "0.59.0",
"ecosystem": "npm"
},
{
"name": "@oxfmt/binding-linux-ppc64-gnu",
"direct": false,
"version": "0.59.0",
"ecosystem": "npm"
},
{
"name": "@oxfmt/binding-linux-riscv64-gnu",
"direct": false,
"version": "0.59.0",
"ecosystem": "npm"
},
{
"name": "@oxfmt/binding-linux-riscv64-musl",
"direct": false,
"version": "0.59.0",
"ecosystem": "npm"
},
{
"name": "@oxfmt/binding-linux-s390x-gnu",
"direct": false,
"version": "0.59.0",
"ecosystem": "npm"
},
{
"name": "@oxfmt/binding-linux-x64-gnu",
"direct": false,
"version": "0.59.0",
"ecosystem": "npm"
},
{
"name": "@oxfmt/binding-linux-x64-musl",
"direct": false,
"version": "0.59.0",
"ecosystem": "npm"
},
{
"name": "@oxfmt/binding-openharmony-arm64",
"direct": false,
"version": "0.59.0",
"ecosystem": "npm"
},
{
"name": "@oxfmt/binding-win32-arm64-msvc",
"direct": false,
"version": "0.59.0",
"ecosystem": "npm"
},
{
"name": "@oxfmt/binding-win32-ia32-msvc",
"direct": false,
"version": "0.59.0",
"ecosystem": "npm"
},
{
"name": "@oxfmt/binding-win32-x64-msvc",
"direct": false,
"version": "0.59.0",
"ecosystem": "npm"
},
{
"name": "@oxlint/binding-android-arm-eabi",
"direct": false,
"version": "1.74.0",
"ecosystem": "npm"
},
{
"name": "@oxlint/binding-android-arm64",
"direct": false,
"version": "1.74.0",
"ecosystem": "npm"
},
{
"name": "@oxlint/binding-darwin-arm64",
"direct": false,
"version": "1.74.0",
"ecosystem": "npm"
},
{
"name": "@oxlint/binding-darwin-x64",
"direct": false,
"version": "1.74.0",
"ecosystem": "npm"
},
{
"name": "@oxlint/binding-freebsd-x64",
"direct": false,
"version": "1.74.0",
"ecosystem": "npm"
},
{
"name": "@oxlint/binding-linux-arm-gnueabihf",
"direct": false,
"version": "1.74.0",
"ecosystem": "npm"
},
{
"name": "@oxlint/binding-linux-arm-musleabihf",
"direct": false,
"version": "1.74.0",
"ecosystem": "npm"
},
{
"name": "@oxlint/binding-linux-arm64-gnu",
"direct": false,
"version": "1.74.0",
"ecosystem": "npm"
},
{
"name": "@oxlint/binding-linux-arm64-musl",
"direct": false,
"version": "1.74.0",
"ecosystem": "npm"
},
{
"name": "@oxlint/binding-linux-ppc64-gnu",
"direct": false,
"version": "1.74.0",
"ecosystem": "npm"
},
{
"name": "@oxlint/binding-linux-riscv64-gnu",
"direct": false,
"version": "1.74.0",
"ecosystem": "npm"
},
{
"name": "@oxlint/binding-linux-riscv64-musl",
"direct": false,
"version": "1.74.0",
"ecosystem": "npm"
},
{
"name": "@oxlint/binding-linux-s390x-gnu",
"direct": false,
"version": "1.74.0",
"ecosystem": "npm"
},
{
"name": "@oxlint/binding-linux-x64-gnu",
"direct": false,
"version": "1.74.0",
"ecosystem": "npm"
},
{
"name": "@oxlint/binding-linux-x64-musl",
"direct": false,
"version": "1.74.0",
"ecosystem": "npm"
},
{
"name": "@oxlint/binding-openharmony-arm64",
"direct": false,
"version": "1.74.0",
"ecosystem": "npm"
},
{
"name": "@oxlint/binding-win32-arm64-msvc",
"direct": false,
"version": "1.74.0",
"ecosystem": "npm"
},
{
"name": "@oxlint/binding-win32-ia32-msvc",
"direct": false,
"version": "1.74.0",
"ecosystem": "npm"
},
{
"name": "@oxlint/binding-win32-x64-msvc",
"direct": false,
"version": "1.74.0",
"ecosystem": "npm"
},
{
"name": "@rollup/pluginutils",
"direct": false,
"version": "5.4.0",
"ecosystem": "npm"
},
{
"name": "@sindresorhus/merge-streams",
"direct": false,
"version": "4.0.0",
"ecosystem": "npm"
},
{
"name": "@types/estree",
"direct": false,
"version": "1.0.9",
"ecosystem": "npm"
},
{
"name": "@types/istanbul-lib-coverage",
"direct": false,
"version": "2.0.6",
"ecosystem": "npm"
},
{
"name": "@typescript/typescript-aix-ppc64",
"direct": false,
"version": "7.0.2",
"ecosystem": "npm"
},
{
"name": "@typescript/typescript-darwin-arm64",
"direct": false,
"version": "7.0.2",
"ecosystem": "npm"
},
{
"name": "@typescript/typescript-darwin-x64",
"direct": false,
"version": "7.0.2",
"ecosystem": "npm"
},
{
"name": "@typescript/typescript-freebsd-arm64",
"direct": false,
"version": "7.0.2",
"ecosystem": "npm"
},
{
"name": "@typescript/typescript-freebsd-x64",
"direct": false,
"version": "7.0.2",
"ecosystem": "npm"
},
{
"name": "@typescript/typescript-linux-arm",
"direct": false,
"version": "7.0.2",
"ecosystem": "npm"
},
{
"name": "@typescript/typescript-linux-arm64",
"direct": false,
"version": "7.0.2",
"ecosystem": "npm"
},
{
"name": "@typescript/typescript-linux-loong64",
"direct": false,
"version": "7.0.2",
"ecosystem": "npm"
},
{
"name": "@typescript/typescript-linux-mips64el",
"direct": false,
"version": "7.0.2",
"ecosystem": "npm"
},
{
"name": "@typescript/typescript-linux-ppc64",
"direct": false,
"version": "7.0.2",
"ecosystem": "npm"
},
{
"name": "@typescript/typescript-linux-riscv64",
"direct": false,
"version": "7.0.2",
"ecosystem": "npm"
},
{
"name": "@typescript/typescript-linux-s390x",
"direct": false,
"version": "7.0.2",
"ecosystem": "npm"
},
{
"name": "@typescript/typescript-linux-x64",
"direct": false,
"version": "7.0.2",
"ecosystem": "npm"
},
{
"name": "@typescript/typescript-netbsd-arm64",
"direct": false,
"version": "7.0.2",
"ecosystem": "npm"
},
{
"name": "@typescript/typescript-netbsd-x64",
"direct": false,
"version": "7.0.2",
"ecosystem": "npm"
},
{
"name": "@typescript/typescript-openbsd-arm64",
"direct": false,
"version": "7.0.2",
"ecosystem": "npm"
},
{
"name": "@typescript/typescript-openbsd-x64",
"direct": false,
"version": "7.0.2",
"ecosystem": "npm"
},
{
"name": "@typescript/typescript-sunos-x64",
"direct": false,
"version": "7.0.2",
"ecosystem": "npm"
},
{
"name": "@typescript/typescript-win32-arm64",
"direct": false,
"version": "7.0.2",
"ecosystem": "npm"
},
{
"name": "@typescript/typescript-win32-x64",
"direct": false,
"version": "7.0.2",
"ecosystem": "npm"
},
{
"name": "@vercel/nft",
"direct": false,
"version": "1.10.2",
"ecosystem": "npm"
},
{
"name": "abbrev",
"direct": false,
"version": "3.0.1",
"ecosystem": "npm"
},
{
"name": "acorn",
"direct": false,
"version": "8.17.0",
"ecosystem": "npm"
},
{
"name": "acorn-import-attributes",
"direct": false,
"version": "1.9.5",
"ecosystem": "npm"
},
{
"name": "acorn-walk",
"direct": false,
"version": "8.3.5",
"ecosystem": "npm"
},
{
"name": "agent-base",
"direct": false,
"version": "7.1.4",
"ecosystem": "npm"
},
{
"name": "ansi-regex",
"direct": false,
"version": "6.2.2",
"ecosystem": "npm"
},
{
"name": "ansi-styles",
"direct": false,
"version": "6.2.3",
"ecosystem": "npm"
},
{
"name": "argparse",
"direct": false,
"version": "1.0.10",
"ecosystem": "npm"
},
{
"name": "array-find-index",
"direct": false,
"version": "1.0.2",
"ecosystem": "npm"
},
{
"name": "array-union",
"direct": false,
"version": "2.1.0",
"ecosystem": "npm"
},
{
"name": "arrgv",
"direct": false,
"version": "1.0.2",
"ecosystem": "npm"
},
{
"name": "arrify",
"direct": false,
"version": "3.0.0",
"ecosystem": "npm"
},
{
"name": "async",
"direct": false,
"version": "3.2.6",
"ecosystem": "npm"
},
{
"name": "async-sema",
"direct": false,
"version": "3.1.1",
"ecosystem": "npm"
},
{
"name": "ava",
"direct": false,
"version": "8.0.1",
"ecosystem": "npm"
},
{
"name": "balanced-match",
"direct": false,
"version": "4.0.4",
"ecosystem": "npm"
},
{
"name": "bindings",
"direct": false,
"version": "1.5.0",
"ecosystem": "npm"
},
{
"name": "blueimp-md5",
"direct": false,
"version": "2.19.0",
"ecosystem": "npm"
},
{
"name": "brace-expansion",
"direct": false,
"version": "5.0.7",
"ecosystem": "npm"
},
{
"name": "braces",
"direct": false,
"version": "3.0.3",
"ecosystem": "npm"
},
{
"name": "c8",
"direct": false,
"version": "12.0.0",
"ecosystem": "npm"
},
{
"name": "callsites",
"direct": false,
"version": "4.2.0",
"ecosystem": "npm"
},
{
"name": "cbor2",
"direct": false,
"version": "2.3.0",
"ecosystem": "npm"
},
{
"name": "chalk",
"direct": false,
"version": "5.6.2",
"ecosystem": "npm"
},
{
"name": "chownr",
"direct": false,
"version": "3.0.0",
"ecosystem": "npm"
},
{
"name": "chunkd",
"direct": false,
"version": "2.0.1",
"ecosystem": "npm"
},
{
"name": "ci-info",
"direct": false,
"version": "4.4.0",
"ecosystem": "npm"
},
{
"name": "ci-parallel-vars",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "cli-truncate",
"direct": false,
"version": "6.1.1",
"ecosystem": "npm"
},
{
"name": "cliui",
"direct": false,
"version": "9.0.1",
"ecosystem": "npm"
},
{
"name": "code-excerpt",
"direct": false,
"version": "4.0.0",
"ecosystem": "npm"
},
{
"name": "commander",
"direct": false,
"version": "13.1.0",
"ecosystem": "npm"
},
{
"name": "common-path-prefix",
"direct": false,
"version": "3.0.0",
"ecosystem": "npm"
},
{
"name": "commondir",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "concordance",
"direct": false,
"version": "5.0.4",
"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": "convert-to-spaces",
"direct": false,
"version": "2.0.1",
"ecosystem": "npm"
},
{
"name": "cross-spawn",
"direct": false,
"version": "7.0.6",
"ecosystem": "npm"
},
{
"name": "currently-unhandled",
"direct": false,
"version": "0.4.1",
"ecosystem": "npm"
},
{
"name": "date-time",
"direct": false,
"version": "3.1.0",
"ecosystem": "npm"
},
{
"name": "debug",
"direct": false,
"version": "4.4.3",
"ecosystem": "npm"
},
{
"name": "detect-libc",
"direct": false,
"version": "2.1.2",
"ecosystem": "npm"
},
{
"name": "dir-glob",
"direct": false,
"version": "3.0.1",
"ecosystem": "npm"
},
{
"name": "email-addresses",
"direct": false,
"version": "5.0.0",
"ecosystem": "npm"
},
{
"name": "emittery",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "emoji-regex",
"direct": false,
"version": "10.6.0",
"ecosystem": "npm"
},
{
"name": "escalade",
"direct": false,
"version": "3.2.0",
"ecosystem": "npm"
},
{
"name": "escape-string-regexp",
"direct": false,
"version": "1.0.5",
"ecosystem": "npm"
},
{
"name": "escape-string-regexp",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "escape-string-regexp",
"direct": false,
"version": "5.0.0",
"ecosystem": "npm"
},
{
"name": "esprima",
"direct": false,
"version": "4.0.1",
"ecosystem": "npm"
},
{
"name": "estree-walker",
"direct": false,
"version": "2.0.2",
"ecosystem": "npm"
},
{
"name": "esutils",
"direct": false,
"version": "2.0.3",
"ecosystem": "npm"
},
{
"name": "fast-diff",
"direct": false,
"version": "1.3.0",
"ecosystem": "npm"
},
{
"name": "fast-glob",
"direct": false,
"version": "3.3.3",
"ecosystem": "npm"
},
{
"name": "fastq",
"direct": false,
"version": "1.20.1",
"ecosystem": "npm"
},
{
"name": "figures",
"direct": false,
"version": "6.1.0",
"ecosystem": "npm"
},
{
"name": "file-uri-to-path",
"direct": false,
"version": "1.0.0",
"ecosystem": "npm"
},
{
"name": "filename-reserved-regex",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "filenamify",
"direct": false,
"version": "4.3.0",
"ecosystem": "npm"
},
{
"name": "fill-range",
"direct": false,
"version": "7.1.1",
"ecosystem": "npm"
},
{
"name": "find-cache-dir",
"direct": false,
"version": "3.3.2",
"ecosystem": "npm"
},
{
"name": "find-up",
"direct": false,
"version": "4.1.0",
"ecosystem": "npm"
},
{
"name": "find-up",
"direct": false,
"version": "5.0.0",
"ecosystem": "npm"
},
{
"name": "find-up-simple",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "foreground-child",
"direct": false,
"version": "3.3.1",
"ecosystem": "npm"
},
{
"name": "fs-extra",
"direct": false,
"version": "11.3.6",
"ecosystem": "npm"
},
{
"name": "get-caller-file",
"direct": false,
"version": "2.0.5",
"ecosystem": "npm"
},
{
"name": "get-east-asian-width",
"direct": false,
"version": "1.6.0",
"ecosystem": "npm"
},
{
"name": "gh-pages",
"direct": false,
"version": "6.3.0",
"ecosystem": "npm"
},
{
"name": "glob",
"direct": false,
"version": "13.0.6",
"ecosystem": "npm"
},
{
"name": "glob-parent",
"direct": false,
"version": "5.1.2",
"ecosystem": "npm"
},
{
"name": "globby",
"direct": false,
"version": "11.1.0",
"ecosystem": "npm"
},
{
"name": "globby",
"direct": false,
"version": "16.2.2",
"ecosystem": "npm"
},
{
"name": "graceful-fs",
"direct": false,
"version": "4.2.11",
"ecosystem": "npm"
},
{
"name": "has-flag",
"direct": false,
"version": "4.0.0",
"ecosystem": "npm"
},
{
"name": "html-escaper",
"direct": false,
"version": "2.0.2",
"ecosystem": "npm"
},
{
"name": "https-proxy-agent",
"direct": false,
"version": "7.0.6",
"ecosystem": "npm"
},
{
"name": "ignore",
"direct": false,
"version": "5.3.2",
"ecosystem": "npm"
},
{
"name": "ignore",
"direct": false,
"version": "7.0.6",
"ecosystem": "npm"
},
{
"name": "ignore-by-default",
"direct": false,
"version": "2.1.0",
"ecosystem": "npm"
},
{
"name": "indent-string",
"direct": false,
"version": "5.0.0",
"ecosystem": "npm"
},
{
"name": "irregular-plurals",
"direct": false,
"version": "4.2.0",
"ecosystem": "npm"
},
{
"name": "is-extglob",
"direct": false,
"version": "2.1.1",
"ecosystem": "npm"
},
{
"name": "is-fullwidth-code-point",
"direct": false,
"version": "5.1.0",
"ecosystem": "npm"
},
{
"name": "is-glob",
"direct": false,
"version": "4.0.3",
"ecosystem": "npm"
},
{
"name": "is-number",
"direct": false,
"version": "7.0.0",
"ecosystem": "npm"
},
{
"name": "is-path-inside",
"direct": false,
"version": "4.0.0",
"ecosystem": "npm"
},
{
"name": "is-plain-object",
"direct": false,
"version": "5.0.0",
"ecosystem": "npm"
},
{
"name": "is-promise",
"direct": false,
"version": "4.0.0",
"ecosystem": "npm"
},
{
"name": "is-unicode-supported",
"direct": false,
"version": "2.1.0",
"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-reports",
"direct": false,
"version": "3.2.0",
"ecosystem": "npm"
},
{
"name": "js-string-escape",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "js-yaml",
"direct": false,
"version": "3.15.0",
"ecosystem": "npm"
},
{
"name": "jsonfile",
"direct": false,
"version": "6.2.1",
"ecosystem": "npm"
},
{
"name": "load-json-file",
"direct": false,
"version": "7.0.1",
"ecosystem": "npm"
},
{
"name": "locate-path",
"direct": false,
"version": "5.0.0",
"ecosystem": "npm"
},
{
"name": "locate-path",
"direct": false,
"version": "6.0.0",
"ecosystem": "npm"
},
{
"name": "lodash",
"direct": false,
"version": "4.18.1",
"ecosystem": "npm"
},
{
"name": "lru-cache",
"direct": false,
"version": "11.5.2",
"ecosystem": "npm"
},
{
"name": "make-dir",
"direct": false,
"version": "3.1.0",
"ecosystem": "npm"
},
{
"name": "make-dir",
"direct": false,
"version": "4.0.0",
"ecosystem": "npm"
},
{
"name": "matcher",
"direct": false,
"version": "6.0.0",
"ecosystem": "npm"
},
{
"name": "md5-hex",
"direct": false,
"version": "3.0.1",
"ecosystem": "npm"
},
{
"name": "memoize",
"direct": false,
"version": "11.0.0",
"ecosystem": "npm"
},
{
"name": "merge2",
"direct": false,
"version": "1.4.1",
"ecosystem": "npm"
},
{
"name": "micromatch",
"direct": false,
"version": "4.0.8",
"ecosystem": "npm"
},
{
"name": "mimic-function",
"direct": false,
"version": "5.0.1",
"ecosystem": "npm"
},
{
"name": "minimatch",
"direct": false,
"version": "10.2.5",
"ecosystem": "npm"
},
{
"name": "minipass",
"direct": false,
"version": "7.1.3",
"ecosystem": "npm"
},
{
"name": "minizlib",
"direct": false,
"version": "3.1.0",
"ecosystem": "npm"
},
{
"name": "ms",
"direct": false,
"version": "2.1.3",
"ecosystem": "npm"
},
{
"name": "node-fetch",
"direct": false,
"version": "2.7.0",
"ecosystem": "npm"
},
{
"name": "node-gyp-build",
"direct": false,
"version": "4.8.4",
"ecosystem": "npm"
},
{
"name": "nopt",
"direct": false,
"version": "8.1.0",
"ecosystem": "npm"
},
{
"name": "oxfmt",
"direct": false,
"version": "0.59.0",
"ecosystem": "npm"
},
{
"name": "oxlint",
"direct": false,
"version": "1.74.0",
"ecosystem": "npm"
},
{
"name": "p-limit",
"direct": false,
"version": "2.3.0",
"ecosystem": "npm"
},
{
"name": "p-limit",
"direct": false,
"version": "3.1.0",
"ecosystem": "npm"
},
{
"name": "p-locate",
"direct": false,
"version": "4.1.0",
"ecosystem": "npm"
},
{
"name": "p-locate",
"direct": false,
"version": "5.0.0",
"ecosystem": "npm"
},
{
"name": "p-map",
"direct": false,
"version": "7.0.5",
"ecosystem": "npm"
},
{
"name": "p-try",
"direct": false,
"version": "2.2.0",
"ecosystem": "npm"
},
{
"name": "package-config",
"direct": false,
"version": "5.0.0",
"ecosystem": "npm"
},
{
"name": "parse-ms",
"direct": false,
"version": "4.0.0",
"ecosystem": "npm"
},
{
"name": "path-exists",
"direct": false,
"version": "4.0.0",
"ecosystem": "npm"
},
{
"name": "path-key",
"direct": false,
"version": "3.1.1",
"ecosystem": "npm"
},
{
"name": "path-scurry",
"direct": false,
"version": "2.0.2",
"ecosystem": "npm"
},
{
"name": "path-type",
"direct": false,
"version": "4.0.0",
"ecosystem": "npm"
},
{
"name": "picomatch",
"direct": false,
"version": "2.3.2",
"ecosystem": "npm"
},
{
"name": "picomatch",
"direct": false,
"version": "4.0.5",
"ecosystem": "npm"
},
{
"name": "pkg-dir",
"direct": false,
"version": "4.2.0",
"ecosystem": "npm"
},
{
"name": "plur",
"direct": false,
"version": "6.0.0",
"ecosystem": "npm"
},
{
"name": "pretty-ms",
"direct": false,
"version": "9.3.0",
"ecosystem": "npm"
},
{
"name": "queue-microtask",
"direct": false,
"version": "1.2.3",
"ecosystem": "npm"
},
{
"name": "resolve-cwd",
"direct": false,
"version": "3.0.0",
"ecosystem": "npm"
},
{
"name": "resolve-from",
"direct": false,
"version": "5.0.0",
"ecosystem": "npm"
},
{
"name": "reusify",
"direct": false,
"version": "1.1.0",
"ecosystem": "npm"
},
{
"name": "run-parallel",
"direct": false,
"version": "1.2.0",
"ecosystem": "npm"
},
{
"name": "semver",
"direct": false,
"version": "6.3.1",
"ecosystem": "npm"
},
{
"name": "semver",
"direct": false,
"version": "7.8.5",
"ecosystem": "npm"
},
{
"name": "serialize-error",
"direct": false,
"version": "7.0.1",
"ecosystem": "npm"
},
{
"name": "shebang-command",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "shebang-regex",
"direct": false,
"version": "3.0.0",
"ecosystem": "npm"
},
{
"name": "signal-exit",
"direct": false,
"version": "4.1.0",
"ecosystem": "npm"
},
{
"name": "slash",
"direct": false,
"version": "3.0.0",
"ecosystem": "npm"
},
{
"name": "slash",
"direct": false,
"version": "5.1.0",
"ecosystem": "npm"
},
{
"name": "slice-ansi",
"direct": false,
"version": "9.0.0",
"ecosystem": "npm"
},
{
"name": "sprintf-js",
"direct": false,
"version": "1.0.3",
"ecosystem": "npm"
},
{
"name": "stack-utils",
"direct": false,
"version": "2.0.6",
"ecosystem": "npm"
},
{
"name": "string-width",
"direct": false,
"version": "7.2.0",
"ecosystem": "npm"
},
{
"name": "string-width",
"direct": false,
"version": "8.2.2",
"ecosystem": "npm"
},
{
"name": "strip-ansi",
"direct": false,
"version": "7.2.0",
"ecosystem": "npm"
},
{
"name": "strip-outer",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "supertap",
"direct": false,
"version": "3.0.1",
"ecosystem": "npm"
},
{
"name": "supports-color",
"direct": false,
"version": "7.2.0",
"ecosystem": "npm"
},
{
"name": "tar",
"direct": false,
"version": "7.5.20",
"ecosystem": "npm"
},
{
"name": "temp-dir",
"direct": false,
"version": "3.0.0",
"ecosystem": "npm"
},
{
"name": "test-exclude",
"direct": false,
"version": "8.0.0",
"ecosystem": "npm"
},
{
"name": "time-zone",
"direct": false,
"version": "1.0.0",
"ecosystem": "npm"
},
{
"name": "tinypool",
"direct": false,
"version": "2.1.0",
"ecosystem": "npm"
},
{
"name": "to-regex-range",
"direct": false,
"version": "5.0.1",
"ecosystem": "npm"
},
{
"name": "tr46",
"direct": false,
"version": "0.0.3",
"ecosystem": "npm"
},
{
"name": "trim-repeated",
"direct": false,
"version": "1.0.0",
"ecosystem": "npm"
},
{
"name": "type-fest",
"direct": false,
"version": "0.13.1",
"ecosystem": "npm"
},
{
"name": "typescript",
"direct": false,
"version": "7.0.2",
"ecosystem": "npm"
},
{
"name": "unicorn-magic",
"direct": false,
"version": "0.4.0",
"ecosystem": "npm"
},
{
"name": "universalify",
"direct": false,
"version": "2.0.1",
"ecosystem": "npm"
},
{
"name": "v8-to-istanbul",
"direct": false,
"version": "9.3.0",
"ecosystem": "npm"
},
{
"name": "webidl-conversions",
"direct": false,
"version": "3.0.1",
"ecosystem": "npm"
},
{
"name": "well-known-symbols",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "whatwg-url",
"direct": false,
"version": "5.0.0",
"ecosystem": "npm"
},
{
"name": "which",
"direct": false,
"version": "2.0.2",
"ecosystem": "npm"
},
{
"name": "wrap-ansi",
"direct": false,
"version": "9.0.2",
"ecosystem": "npm"
},
{
"name": "write-file-atomic",
"direct": false,
"version": "7.0.1",
"ecosystem": "npm"
},
{
"name": "y18n",
"direct": false,
"version": "5.0.8",
"ecosystem": "npm"
},
{
"name": "yallist",
"direct": false,
"version": "5.0.0",
"ecosystem": "npm"
},
{
"name": "yargs",
"direct": false,
"version": "18.0.0",
"ecosystem": "npm"
},
{
"name": "yargs-parser",
"direct": false,
"version": "21.1.1",
"ecosystem": "npm"
},
{
"name": "yargs-parser",
"direct": false,
"version": "22.0.0",
"ecosystem": "npm"
},
{
"name": "yocto-queue",
"direct": false,
"version": "0.1.0",
"ecosystem": "npm"
}
],
"collected": true,
"truncated": false,
"total_count": 259,
"direct_count": 0,
"indirect_count": 259
}
},
"maintainership": {
"issues": {
"open_prs": 0,
"merged_prs": 10,
"open_issues": 0,
"closed_ratio": 1,
"closed_issues": 8,
"closed_unmerged_prs": 5
},
"bus_factor": 1,
"bot_contributors": 0,
"top_contributors": [
{
"type": "User",
"login": "KidkArolis",
"commits": 149,
"avatar_url": "https://avatars.githubusercontent.com/u/324440?v=4"
},
{
"type": "User",
"login": "KwanMan",
"commits": 4,
"avatar_url": "https://avatars.githubusercontent.com/u/1779673?v=4"
}
],
"contributors_sampled": 2,
"top_contributor_share": 0.974
},
"quality_signals": {
"has_ci": false,
"has_tests": true,
"ci_workflows": [],
"has_docs_dir": true,
"linter_configs": [],
"has_editorconfig": false,
"has_linter_config": false,
"has_precommit_config": false
},
"security_signals": {
"lockfiles": [
"package-lock.json"
],
"scorecard": {
"checks": [
{
"name": "Binary-Artifacts",
"score": 10,
"reason": "no binaries found in the repo",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
},
{
"name": "Branch-Protection",
"score": 0,
"reason": "branch protection not enabled on development/release branches",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
},
{
"name": "CI-Tests",
"score": 0,
"reason": "0 out of 2 merged PRs checked by a CI test -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
},
{
"name": "CII-Best-Practices",
"score": 0,
"reason": "no effort to earn an OpenSSF best practices badge detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
},
{
"name": "Code-Review",
"score": 0,
"reason": "Found 0/28 approved changesets -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
},
{
"name": "Contributors",
"score": 3,
"reason": "project has 1 contributing companies or organizations -- score normalized to 3",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
},
{
"name": "Dangerous-Workflow",
"score": null,
"reason": "no workflows found",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
},
{
"name": "Dependency-Update-Tool",
"score": 0,
"reason": "no update tool detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
},
{
"name": "Fuzzing",
"score": 0,
"reason": "project is not fuzzed",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
},
{
"name": "License",
"score": 10,
"reason": "license file detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
},
{
"name": "Maintained",
"score": 10,
"reason": "25 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
},
{
"name": "Packaging",
"score": null,
"reason": "packaging workflow not detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
},
{
"name": "Pinned-Dependencies",
"score": null,
"reason": "no dependencies found",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
},
{
"name": "SAST",
"score": 0,
"reason": "SAST tool is not run on all commits -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
},
{
"name": "Security-Policy",
"score": 0,
"reason": "security policy file not detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
},
{
"name": "Signed-Releases",
"score": null,
"reason": "no releases found",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
},
{
"name": "Token-Permissions",
"score": null,
"reason": "No tokens found",
"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": "15b30e674973478057ca66603860681ec69ce5c5",
"ran_at": "2026-07-26T16:25:01Z",
"aggregate_score": 3.5,
"scorecard_version": "v5.5.0"
},
"has_codeql_workflow": false,
"has_security_policy": false,
"has_dependabot_config": false
},
"contribution_flow": {
"collected": true,
"ci_last_run_at": "2026-07-20T11:23:48Z",
"oldest_open_prs": [],
"last_merged_pr_at": "2026-07-06T17:38:02Z",
"ci_last_conclusion": null,
"oldest_open_issues": []
}
},
"config": {
"disabled_metrics": [],
"disabled_categories": [],
"disabled_components": {}
},
"source": {
"url": "https://github.com/KidkArolis/space-router",
"host": "github.com",
"name": "space-router",
"owner": "KidkArolis"
},
"metrics": {
"overall": {
"key": "overall",
"band": "moderate",
"name": "Overall health",
"note": null,
"notes": [],
"value": 57,
"inputs": {
"security": 48,
"vitality": 77,
"community": 44,
"governance": 58,
"engineering": 54
},
"components": []
},
"categories": [
{
"key": "vitality",
"band": "good",
"name": "Vitality",
"value": 77,
"weight": 0.22,
"metrics": [
{
"key": "development_activity",
"band": "moderate",
"name": "Development activity",
"note": null,
"notes": [],
"value": 69,
"inputs": {
"commits_last_year": 46,
"human_commit_share": 1,
"days_since_last_push": 6,
"active_weeks_last_year": 11
},
"components": [
{
"key": "push_recency",
"name": "Push recency",
"detail": "last push 6 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "push_recency",
"params": {
"days": 6
}
}
],
"max_points": 36
},
{
"key": "commit_cadence",
"name": "Commit cadence",
"detail": "11/52 weeks with commits",
"points": 7.6,
"status": "partial",
"details": [
{
"code": "commit_cadence_weeks",
"params": {
"weeks": 11
}
}
],
"max_points": 36
},
{
"key": "commit_volume",
"name": "Commit volume",
"detail": "46 commits in the last year",
"points": 15,
"status": "partial",
"details": [
{
"code": "commits_last_year",
"params": {
"count": 46
}
}
],
"max_points": 18
},
{
"key": "openssf_scorecard_maintained",
"name": "OpenSSF Scorecard: Maintained",
"detail": "25 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
}
]
},
{
"key": "release_discipline",
"band": "excellent",
"name": "Release discipline",
"note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"openssf_scorecard_signed_releases"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 88,
"inputs": {
"releases_count": 30,
"latest_release_tag": "v2.0.0",
"releases_from_tags": true,
"days_since_latest_release": 6,
"mean_days_between_releases": 26.5
},
"components": [
{
"key": "ships_releases",
"name": "Ships releases",
"detail": "30 version tags (no GitHub releases)",
"points": 16.2,
"status": "partial",
"details": [
{
"code": "version_tags_no_releases",
"params": {
"count": 30
}
}
],
"max_points": 27
},
{
"key": "release_recency",
"name": "Release recency",
"detail": "latest release 6 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "release_recency",
"params": {
"days": 6
}
}
],
"max_points": 36
},
{
"key": "release_cadence",
"name": "Release cadence",
"detail": "a release every ~26.5 days",
"points": 27,
"status": "met",
"details": [
{
"code": "release_cadence",
"params": {
"gap": 26.5
}
}
],
"max_points": 27
},
{
"key": "openssf_scorecard_signed_releases",
"name": "OpenSSF Scorecard: Signed-Releases",
"detail": "no releases found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 10
}
]
},
{
"key": "abandonment",
"band": "excellent",
"name": "Abandonment",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"cap": null,
"state": "maintained",
"guards": [],
"signals": [],
"red_flag": false,
"multiplier_pct": 100,
"declared_reason": null,
"unverified_reason": null,
"unanswered_open_prs": null,
"unanswered_open_issues": null,
"days_since_last_merged_pr": null,
"days_since_last_human_commit": 6,
"days_since_last_human_commit_is_floor": false
},
"components": [
{
"key": "project_is_still_maintained",
"name": "Project is still maintained",
"detail": "last human commit 6 days ago",
"points": 100,
"status": "met",
"details": [
{
"code": "abandonment_maintained",
"params": {
"days": 6
}
}
],
"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": 44,
"weight": 0.18,
"metrics": [
{
"key": "popularity",
"band": "at_risk",
"name": "Popularity & adoption",
"note": null,
"notes": [],
"value": 30,
"inputs": {
"forks": 4,
"stars": 39,
"watchers": 1,
"growth_state": "unverified",
"growth_factor_pct": 100,
"growth_unverified_reason": "no_history"
},
"components": [
{
"key": "stars",
"name": "Stars",
"detail": "39 stars",
"points": 25.6,
"status": "partial",
"details": [
{
"code": "stars",
"params": {
"count": 39
}
}
],
"max_points": 60
},
{
"key": "forks",
"name": "Forks",
"detail": "4 forks",
"points": 4,
"status": "partial",
"details": [
{
"code": "forks",
"params": {
"count": 4
}
}
],
"max_points": 25
},
{
"key": "watchers",
"name": "Watchers",
"detail": "1 watchers",
"points": 0,
"status": "missed",
"details": [
{
"code": "watchers",
"params": {
"count": 1
}
}
],
"max_points": 15
}
]
},
{
"key": "community_health",
"band": "moderate",
"name": "Community health",
"note": null,
"notes": [],
"value": 50,
"inputs": {
"has_readme": true,
"has_license": true,
"has_contributing": false,
"has_issue_template": false,
"has_code_of_conduct": false,
"has_pull_request_template": false
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 22.5,
"status": "met",
"details": [],
"max_points": 22.5
},
{
"key": "license",
"name": "License",
"detail": "recognized license (ISC)",
"points": 22.5,
"status": "met",
"details": [
{
"code": "license_standard",
"params": {}
},
{
"code": "license_spdx",
"params": {
"spdx": "ISC"
}
}
],
"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": 0,
"status": "missed",
"details": [],
"max_points": 6.3
}
]
},
{
"key": "ecosystem_adoption",
"band": "moderate",
"name": "Ecosystem adoption (downloads)",
"note": "Excluded from scoring (no data or not applicable): Registry dependents. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"registry_dependents"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 60,
"inputs": {
"packages": [
"space-router"
],
"dependents": null,
"ecosystems": "npm",
"total_downloads": null,
"monthly_downloads": 3866
},
"components": [
{
"key": "monthly_downloads",
"name": "Monthly downloads",
"detail": "3,866 downloads/month across npm",
"points": 47.8,
"status": "partial",
"details": [
{
"code": "downloads_monthly",
"params": {
"count": 3866,
"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": 58,
"weight": 0.24,
"metrics": [
{
"key": "maintainer_resilience",
"band": "critical",
"name": "Maintainer resilience (bus factor)",
"note": null,
"notes": [],
"value": 15,
"inputs": {
"bus_factor": 1,
"contributors_sampled": 2,
"top_contributor_share": 0.974
},
"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 97% of commits",
"points": 0.6,
"status": "partial",
"details": [
{
"code": "top_contributor_share",
"params": {
"share": 97
}
}
],
"max_points": 22.5
},
{
"key": "contributor_breadth",
"name": "Contributor breadth",
"detail": "2 contributors",
"points": 2.7,
"status": "partial",
"details": [
{
"code": "contributors_sampled",
"params": {
"count": 2
}
}
],
"max_points": 13.5
},
{
"key": "openssf_scorecard_contributors",
"name": "OpenSSF Scorecard: Contributors",
"detail": "project has 1 contributing companies or organizations -- score normalized to 3",
"points": 3,
"status": "partial",
"details": [],
"max_points": 10
}
]
},
{
"key": "responsiveness",
"band": "good",
"name": "Issue & PR responsiveness",
"note": null,
"notes": [],
"value": 72,
"inputs": {
"merged_prs": 10,
"open_issues": 0,
"closed_issues": 8,
"issue_closed_ratio": 1,
"closed_unmerged_prs": 5
},
"components": [
{
"key": "issue_resolution",
"name": "Issue resolution",
"detail": "100% of issues closed",
"points": 46.8,
"status": "met",
"details": [
{
"code": "issues_closed_share",
"params": {
"share": 100
}
}
],
"max_points": 46.75
},
{
"key": "pr_acceptance",
"name": "PR acceptance",
"detail": "10/15 decided PRs merged",
"points": 25.5,
"status": "partial",
"details": [
{
"code": "decided_prs_merged",
"params": {
"merged": 10,
"decided": 15
}
}
],
"max_points": 38.25
},
{
"key": "openssf_scorecard_code_review",
"name": "OpenSSF Scorecard: Code-Review",
"detail": "Found 0/28 approved changesets -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
}
]
},
{
"key": "stewardship",
"band": "moderate",
"name": "Ownership & stewardship",
"note": "Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"verified_domain"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 62,
"inputs": {
"followers": 117,
"owner_type": "User",
"is_verified": null,
"owner_login": "KidkArolis",
"public_repos": 143,
"account_age_days": 5864
},
"components": [
{
"key": "ownership_backing",
"name": "Ownership backing",
"detail": "personal (user) account",
"points": 10,
"status": "partial",
"details": [
{
"code": "owner_personal",
"params": {}
}
],
"max_points": 30
},
{
"key": "verified_domain",
"name": "Verified domain",
"detail": "not applicable to user accounts",
"points": 0,
"status": "excluded",
"details": [
{
"code": "not_applicable_to_user_accounts",
"params": {}
}
],
"max_points": 20
},
{
"key": "owner_reach",
"name": "Owner reach",
"detail": "117 followers of KidkArolis",
"points": 14.9,
"status": "partial",
"details": [
{
"code": "owner_followers",
"params": {
"count": 117,
"login": "KidkArolis"
}
}
],
"max_points": 25
},
{
"key": "track_record",
"name": "Track record",
"detail": "143 public repos, account ~16 yr old",
"points": 25,
"status": "met",
"details": [
{
"code": "public_repos",
"params": {
"count": 143
}
},
{
"code": "account_age_years",
"params": {
"years": 16
}
}
],
"max_points": 25
}
]
},
{
"key": "package_maintenance",
"band": "excellent",
"name": "Package maintenance",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"packages": [
"space-router"
],
"ecosystems": "npm",
"any_deprecated": false,
"min_days_since_publish": 6
},
"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 6 days ago",
"points": 35,
"status": "met",
"details": [
{
"code": "publish_recency",
"params": {
"days": 6
}
}
],
"max_points": 35
},
{
"key": "version_history",
"name": "Version history",
"detail": "29 published versions",
"points": 20,
"status": "met",
"details": [
{
"code": "published_versions",
"params": {
"count": 29
}
}
],
"max_points": 20
},
{
"key": "not_deprecated",
"name": "Not deprecated",
"detail": "active, not deprecated or yanked",
"points": 20,
"status": "met",
"details": [
{
"code": "package_not_deprecated",
"params": {}
}
],
"max_points": 20
}
]
}
],
"description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
},
{
"key": "engineering",
"band": "moderate",
"name": "Engineering Quality",
"value": 54,
"weight": 0.2,
"metrics": [
{
"key": "engineering_practices",
"band": "critical",
"name": "Engineering practices",
"note": null,
"notes": [],
"value": 24,
"inputs": {
"has_ci": false,
"has_tests": true,
"has_editorconfig": false,
"has_linter_config": false,
"has_precommit_config": false
},
"components": [
{
"key": "ci_workflows",
"name": "CI workflows",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"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": "0 out of 2 merged PRs checked by a CI test -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 20
}
]
},
{
"key": "documentation",
"band": "excellent",
"name": "Documentation",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"topics": [
"browser",
"router",
"hash",
"pushstate",
"callback",
"react"
],
"has_wiki": true,
"homepage": "https://kidkarolis.github.io/space-router/",
"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": "https://kidkarolis.github.io/space-router/",
"points": 15,
"status": "met",
"details": [],
"max_points": 15
},
{
"key": "repository_description",
"name": "Repository description",
"detail": null,
"points": 10,
"status": "met",
"details": [],
"max_points": 10
},
{
"key": "topics",
"name": "Topics",
"detail": "6 topics",
"points": 10,
"status": "met",
"details": [
{
"code": "topics_count",
"params": {
"count": 6
}
}
],
"max_points": 10
},
{
"key": "wiki",
"name": "Wiki",
"detail": null,
"points": 10,
"status": "met",
"details": [],
"max_points": 10
}
]
}
],
"description": "Are baseline engineering and documentation practices in place?"
},
{
"key": "security",
"band": "at_risk",
"name": "Security",
"value": 48,
"weight": 0.16,
"metrics": [
{
"key": "security_posture",
"band": "at_risk",
"name": "Security posture",
"note": "Excluded from scoring (no data or not applicable): Dangerous-Workflow, Packaging, Pinned-Dependencies, Signed-Releases, Token-Permissions. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"dangerous_workflow",
"packaging",
"pinned_dependencies",
"signed_releases",
"token_permissions"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 35,
"inputs": {
"source": "openssf_scorecard",
"checks_evaluated": 13,
"scorecard_version": "v5.5.0",
"checks_inconclusive": 5,
"scorecard_aggregate": 3.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 not enabled on development/release branches",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "ci_tests",
"name": "CI-Tests",
"detail": "0 out of 2 merged PRs checked by a CI test -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 2.5
},
{
"key": "cii_best_practices",
"name": "CII-Best-Practices",
"detail": "no effort to earn an OpenSSF best practices badge detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 2.5
},
{
"key": "code_review",
"name": "Code-Review",
"detail": "Found 0/28 approved changesets -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "contributors",
"name": "Contributors",
"detail": "project has 1 contributing companies or organizations -- score normalized to 3",
"points": 0.8,
"status": "partial",
"details": [],
"max_points": 2.5
},
{
"key": "dangerous_workflow",
"name": "Dangerous-Workflow",
"detail": "no workflows found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 10
},
{
"key": "dependency_update_tool",
"name": "Dependency-Update-Tool",
"detail": "no update tool detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "fuzzing",
"name": "Fuzzing",
"detail": "project is not fuzzed",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "license",
"name": "License",
"detail": "license file detected",
"points": 2.5,
"status": "met",
"details": [],
"max_points": 2.5
},
{
"key": "maintained",
"name": "Maintained",
"detail": "25 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "packaging",
"name": "Packaging",
"detail": "packaging workflow not detected",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 5
},
{
"key": "pinned_dependencies",
"name": "Pinned-Dependencies",
"detail": "no dependencies found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 5
},
{
"key": "sast",
"name": "SAST",
"detail": "SAST tool is not run on all commits -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "security_policy",
"name": "Security-Policy",
"detail": "security policy file not detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "signed_releases",
"name": "Signed-Releases",
"detail": "no releases found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 7.5
},
{
"key": "token_permissions",
"name": "Token-Permissions",
"detail": "No tokens found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"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): Indirect dependencies free of known advisories, No advisories left outstanding. Remaining weights renormalized. Matched 259 resolved dependencies against OSV. This repository publishes no package the index resolves, so the repository dependency graph was assessed instead. That graph mixes development and test pins with shipped dependencies, so only the declared runtime dependencies are scored; transitive findings are reported as context and excluded from the score. Reachability is not analyzed.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"indirect_dependencies_free_of_known_advisories",
"no_advisories_left_outstanding"
]
}
},
{
"code": "weights_renormalized",
"params": {}
},
{
"code": "advisories_scope_repository",
"params": {
"assessed": 259
}
},
{
"code": "advisories_repo_graph_caveat",
"params": {}
},
{
"code": "advisories_reachability",
"params": {}
}
],
"value": 100,
"inputs": {
"source": "osv",
"advisories": 2,
"affected_packages": 2,
"assessed_packages": 259,
"unassessed_packages": 0,
"affected_by_severity": "high 1, moderate 1",
"direct_affected_packages": 0
},
"components": [
{
"key": "direct_dependencies_free_of_known_advisories",
"name": "Direct dependencies free of known advisories",
"detail": "no direct dependency carries a known advisory",
"points": 35,
"status": "met",
"details": [
{
"code": "no_direct_advisories",
"params": {}
}
],
"max_points": 35
},
{
"key": "indirect_dependencies_free_of_known_advisories",
"name": "Indirect dependencies free of known advisories",
"detail": "transitive set not separable from development and test dependencies in this scope",
"points": 0,
"status": "excluded",
"details": [
{
"code": "advisories_scope_not_separable",
"params": {}
}
],
"max_points": 25
},
{
"key": "no_advisories_left_outstanding",
"name": "No advisories left outstanding",
"detail": "no advisory carries a publication date",
"points": 0,
"status": "excluded",
"details": [
{
"code": "advisories_no_publication_date",
"params": {}
}
],
"max_points": 40
}
]
},
{
"key": "malicious_dependencies",
"band": "excellent",
"name": "Malicious dependencies",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"source": "osv",
"meaning": "reported as a malicious package by the OpenSSF corpus; the remedy is removal or moving off the compromised name, never an upgrade of the same artifact. Versions the registry has since pulled are listed but not scored",
"packages": [],
"red_flag": false,
"assessed_packages": 259,
"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": 66,
"weight": 0,
"metrics": [
{
"key": "ai_agent_context",
"band": "moderate",
"name": "Agent context & guidance",
"note": null,
"notes": [],
"value": 57,
"inputs": {
"has_llms_txt": false,
"legible_history_share": 0.22,
"agent_instruction_files": [
"AGENTS.md"
],
"agent_instruction_max_bytes": 1527
},
"components": [
{
"key": "agent_instructions",
"name": "Agent instructions",
"detail": "AGENTS.md",
"points": 45,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "AGENTS.md"
}
}
],
"max_points": 45
},
{
"key": "machine_readable_docs_llms_txt",
"name": "Machine-readable docs (llms.txt)",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
},
{
"key": "legible_commit_history",
"name": "Legible commit history",
"detail": "22 of 100 human commits state their intent (structured subject or explanatory body)",
"points": 11.7,
"status": "partial",
"details": [
{
"code": "legible_history",
"params": {
"legible": 22,
"sampled": 100
}
}
],
"max_points": 40
}
]
},
{
"key": "ai_verify_loop",
"band": "moderate",
"name": "Verify loop (build / test / typecheck)",
"note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Pinned-Dependencies. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"openssf_scorecard_pinned_dependencies"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 59,
"inputs": {
"has_nix": false,
"has_tests": true,
"lockfiles": [
"package-lock.json"
],
"has_dockerfile": false,
"typed_language": true,
"bootstrap_files": [],
"has_devcontainer": false,
"has_linter_config": false,
"typecheck_configs": [
"tsconfig.json"
],
"agent_commit_share": 0.19,
"toolchain_manifests": [],
"dependency_bot_commit_share": 0
},
"components": [
{
"key": "one_command_bootstrap",
"name": "One-command bootstrap",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 18
},
{
"key": "automated_tests",
"name": "Automated tests",
"detail": null,
"points": 22,
"status": "met",
"details": [],
"max_points": 22
},
{
"key": "lint_format_config",
"name": "Lint / format config",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 11
},
{
"key": "static_type_checking",
"name": "Static type checking",
"detail": "tsconfig.json",
"points": 11,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "tsconfig.json"
}
}
],
"max_points": 11
},
{
"key": "reproducible_environment",
"name": "Reproducible environment",
"detail": "lockfile",
"points": 10,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "lockfile"
}
}
],
"max_points": 10
},
{
"key": "demonstrated_agent_practice",
"name": "Demonstrated agent practice",
"detail": "19 of the last 100 commits agent-authored or agent-credited",
"points": 10,
"status": "met",
"details": [
{
"code": "agent_authored_commits",
"params": {
"count": 19,
"sampled": 100
}
}
],
"max_points": 10
},
{
"key": "automated_maintenance",
"name": "Automated maintenance",
"detail": "no automated dependency updates observed",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_dependency_automation",
"params": {}
}
],
"max_points": 8
},
{
"key": "openssf_scorecard_pinned_dependencies",
"name": "OpenSSF Scorecard: Pinned-Dependencies",
"detail": "no dependencies found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"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": 49988,
"source_files_sampled": 14,
"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/14 source files over 60KB",
"points": 55,
"status": "met",
"details": [
{
"code": "oversized_source_files",
"params": {
"kb": 60,
"sampled": 14,
"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": [
"Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token"
],
"report_type": "repository",
"generated_at": "2026-07-26T16:25:08.702466Z",
"schema_version": "0.27.0",
"badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/k/KidkArolis/space-router.svg",
"full_name": "KidkArolis/space-router",
"license_state": "standard",
"license_spdx": "ISC"
}