Raw JSON report machine-readable
{
"data": {
"repo": {
"topics": [
"ecommerce",
"e-commerce",
"ecommerce-platform",
"spree-commerce",
"marketplace",
"multi-tenant",
"multi-vendor",
"multi-vendor-ecommerce",
"ecommerce-api",
"ecommerce-framework",
"open-source",
"headless",
"headless-commerce",
"headless-ecommerce",
"b2b-commerce"
],
"is_fork": false,
"size_kb": 286114,
"has_wiki": false,
"homepage": "https://spreecommerce.org",
"languages": {
"CSS": 123018,
"HTML": 624675,
"Ruby": 7764903,
"Shell": 13633,
"JavaScript": 271741,
"TypeScript": 3395966
},
"pushed_at": "2026-07-21T17:18:40Z",
"created_at": "2008-03-10T14:45:35Z",
"owner_type": "Organization",
"updated_at": "2026-07-21T21:03:15Z",
"description": "Open Source eCommerce Platform for B2B, Marketplace, and Enterprise. REST API, TypeScript SDK, and production-ready Next.js storefront. Self-host it. Own your stack. No vendor lock-in. Zero platform fees.",
"is_archived": false,
"is_disabled": false,
"license_spdx": "BSD-3-Clause",
"default_branch": "main",
"license_spdx_raw": "BSD-3-Clause",
"primary_language": "Ruby",
"significant_languages": [
"Ruby",
"TypeScript"
]
},
"owner": {
"blog": "https://spreecommerce.org",
"name": "Spree Commerce",
"type": "Organization",
"login": "spree",
"company": null,
"location": null,
"followers": 197,
"avatar_url": "https://avatars.githubusercontent.com/u/56702?v=4",
"created_at": "2009-02-22T00:54:00Z",
"is_verified": null,
"public_repos": 26,
"account_age_days": 6358
},
"license": {
"state": "standard",
"spdx_id": "BSD-3-Clause",
"raw_spdx": "BSD-3-Clause",
"file_present": true,
"scorecard_found": true,
"profile_has_license": true
},
"activity": {
"releases": [
{
"tag": "v5.4.4",
"kind": "patch",
"published_at": "2026-07-20T13:12:49Z"
},
{
"tag": "v5.5.4",
"kind": "patch",
"published_at": "2026-07-20T13:14:03Z"
},
{
"tag": "v5.5.3",
"kind": "patch",
"published_at": "2026-07-10T17:19:21Z"
},
{
"tag": "v5.5.2",
"kind": "patch",
"published_at": "2026-07-06T17:35:01Z"
},
{
"tag": "v5.5.1",
"kind": "patch",
"published_at": "2026-06-29T15:46:36Z"
},
{
"tag": "v5.5.0",
"kind": "minor",
"published_at": "2026-06-18T10:33:38Z"
},
{
"tag": "@spree/sdk@1.1.0",
"kind": "other",
"published_at": "2026-06-11T15:42:47Z"
},
{
"tag": "v5.3.6",
"kind": "patch",
"published_at": "2026-05-19T14:29:42Z"
},
{
"tag": "v5.2.8",
"kind": "patch",
"published_at": "2026-05-19T14:30:24Z"
},
{
"tag": "v5.4.3",
"kind": "patch",
"published_at": "2026-05-19T12:34:17Z"
},
{
"tag": "v5.4.2",
"kind": "patch",
"published_at": "2026-04-27T15:34:04Z"
},
{
"tag": "v5.4.1",
"kind": "patch",
"published_at": "2026-04-14T11:55:11Z"
},
{
"tag": "@spree/sdk@1.0.1",
"kind": "other",
"published_at": "2026-04-14T11:58:12Z"
},
{
"tag": "@spree/sdk@1.0.0",
"kind": "other",
"published_at": "2026-04-11T13:12:00Z"
},
{
"tag": "v5.4.0",
"kind": "minor",
"published_at": "2026-04-08T14:18:21Z"
},
{
"tag": "v5.4.0.rc3",
"kind": "other",
"published_at": "2026-03-25T15:10:35Z"
},
{
"tag": "v5.4.0.rc2",
"kind": "other",
"published_at": "2026-03-23T15:42:45Z"
},
{
"tag": "v5.4.0.rc1",
"kind": "other",
"published_at": "2026-03-20T15:25:52Z"
},
{
"tag": "v5.3.5",
"kind": "patch",
"published_at": "2026-03-12T20:25:32Z"
},
{
"tag": "v5.3.4",
"kind": "patch",
"published_at": "2026-02-23T13:36:09Z"
},
{
"tag": "v5.3.3",
"kind": "patch",
"published_at": "2026-02-16T10:30:10Z"
},
{
"tag": "4.10.3",
"kind": "patch",
"published_at": "2026-02-05T13:53:15Z"
},
{
"tag": "v5.0.8",
"kind": "patch",
"published_at": "2026-02-05T13:56:10Z"
},
{
"tag": "v5.1.10",
"kind": "patch",
"published_at": "2026-02-05T13:56:52Z"
},
{
"tag": "v5.2.7",
"kind": "patch",
"published_at": "2026-02-05T13:57:17Z"
},
{
"tag": "v5.3.2",
"kind": "patch",
"published_at": "2026-02-05T14:00:50Z"
},
{
"tag": "v5.3.1",
"kind": "patch",
"published_at": "2026-02-02T16:34:07Z"
},
{
"tag": "v5.3.0",
"kind": "minor",
"published_at": "2026-01-26T13:53:39Z"
},
{
"tag": "v5.3.0.rc2",
"kind": "other",
"published_at": "2026-01-22T15:53:34Z"
},
{
"tag": "v5.2.6",
"kind": "patch",
"published_at": "2026-01-15T11:52:24Z"
},
{
"tag": "v4.10.2",
"kind": "patch",
"published_at": "2026-01-08T11:54:47Z"
},
{
"tag": "v5.0.7",
"kind": "patch",
"published_at": "2026-01-08T11:55:51Z"
},
{
"tag": "v5.1.9",
"kind": "patch",
"published_at": "2026-01-08T11:56:35Z"
},
{
"tag": "v5.2.5",
"kind": "patch",
"published_at": "2026-01-08T11:57:15Z"
},
{
"tag": "v5.2.4",
"kind": "patch",
"published_at": "2025-12-18T18:31:15Z"
},
{
"tag": "v5.2.3",
"kind": "patch",
"published_at": "2025-12-16T08:34:08Z"
},
{
"tag": "v5.2.2",
"kind": "patch",
"published_at": "2025-12-09T16:49:59Z"
},
{
"tag": "v5.2.1",
"kind": "patch",
"published_at": "2025-12-02T15:08:40Z"
},
{
"tag": "v5.2.0",
"kind": "minor",
"published_at": "2025-11-28T11:22:49Z"
},
{
"tag": "v5.2.0.rc3",
"kind": "other",
"published_at": "2025-11-18T12:43:37Z"
},
{
"tag": "v5.2.0.rc2",
"kind": "other",
"published_at": "2025-11-09T21:13:04Z"
},
{
"tag": "v5.2.0.rc1",
"kind": "other",
"published_at": "2025-11-04T16:45:12Z"
},
{
"tag": "v5.1.8",
"kind": "patch",
"published_at": "2025-10-30T12:11:59Z"
},
{
"tag": "v5.1.7",
"kind": "patch",
"published_at": "2025-09-29T12:48:15Z"
},
{
"tag": "v5.1.6",
"kind": "patch",
"published_at": "2025-09-18T16:02:39Z"
},
{
"tag": "v5.1.5",
"kind": "patch",
"published_at": "2025-08-06T14:59:00Z"
},
{
"tag": "v5.0.6",
"kind": "patch",
"published_at": "2025-08-06T14:01:11Z"
},
{
"tag": "v5.1.4",
"kind": "patch",
"published_at": "2025-07-24T12:10:40Z"
},
{
"tag": "v5.1.3",
"kind": "patch",
"published_at": "2025-07-20T16:52:09Z"
},
{
"tag": "v5.1.2",
"kind": "patch",
"published_at": "2025-07-14T13:11:33Z"
},
{
"tag": "v5.1.1",
"kind": "patch",
"published_at": "2025-07-08T12:40:47Z"
},
{
"tag": "v5.1.0",
"kind": "minor",
"published_at": "2025-07-03T14:56:00Z"
},
{
"tag": "v5.0.5",
"kind": "patch",
"published_at": "2025-06-30T20:35:04Z"
},
{
"tag": "v5.0.4",
"kind": "patch",
"published_at": "2025-05-22T12:24:48Z"
},
{
"tag": "v5.0.3",
"kind": "patch",
"published_at": "2025-05-06T10:32:21Z"
},
{
"tag": "v5.0.2",
"kind": "patch",
"published_at": "2025-04-22T13:09:05Z"
},
{
"tag": "v5.0.1",
"kind": "patch",
"published_at": "2025-04-09T18:48:06Z"
},
{
"tag": "v5.0.0",
"kind": "major",
"published_at": "2025-04-03T14:42:16Z"
},
{
"tag": "v4.10.0",
"kind": "minor",
"published_at": "2024-09-06T12:53:03Z"
},
{
"tag": "v4.9.0",
"kind": "minor",
"published_at": "2024-08-14T12:43:11Z"
},
{
"tag": "v4.8.3",
"kind": "patch",
"published_at": "2024-06-13T11:00:32Z"
},
{
"tag": "v4.8.2",
"kind": "patch",
"published_at": "2024-05-29T13:04:37Z"
},
{
"tag": "v4.8.1",
"kind": "patch",
"published_at": "2024-05-27T14:41:17Z"
},
{
"tag": "v4.8.0",
"kind": "minor",
"published_at": "2024-05-27T14:38:56Z"
},
{
"tag": "v4.7.3",
"kind": "patch",
"published_at": "2024-05-05T17:19:41Z"
},
{
"tag": "v4.6.6",
"kind": "patch",
"published_at": "2024-05-05T17:18:58Z"
},
{
"tag": "v4.5.5",
"kind": "patch",
"published_at": "2024-05-05T17:16:45Z"
},
{
"tag": "v4.0.9",
"kind": "patch",
"published_at": "2024-04-21T20:58:03Z"
},
{
"tag": "v4.1.15",
"kind": "patch",
"published_at": "2024-04-21T20:59:28Z"
},
{
"tag": "v4.2.7",
"kind": "patch",
"published_at": "2024-04-21T21:00:47Z"
},
{
"tag": "v4.3.3",
"kind": "patch",
"published_at": "2024-04-21T21:01:40Z"
},
{
"tag": "v4.4.1",
"kind": "patch",
"published_at": "2024-04-21T21:02:47Z"
},
{
"tag": "v4.5.4",
"kind": "patch",
"published_at": "2024-04-21T21:03:37Z"
},
{
"tag": "v4.6.5",
"kind": "patch",
"published_at": "2024-04-21T21:04:11Z"
},
{
"tag": "v4.7.2",
"kind": "patch",
"published_at": "2024-04-21T21:04:51Z"
},
{
"tag": "v4.7.1",
"kind": "patch",
"published_at": "2024-01-09T13:14:19Z"
},
{
"tag": "v4.6.4",
"kind": "patch",
"published_at": "2024-01-09T13:10:44Z"
},
{
"tag": "v4.6.3",
"kind": "patch",
"published_at": "2023-11-09T13:57:30Z"
},
{
"tag": "v4.7.0",
"kind": "minor",
"published_at": "2023-11-09T18:33:15Z"
},
{
"tag": "v4.6.2",
"kind": "patch",
"published_at": "2023-09-04T18:57:10Z"
},
{
"tag": "v4.6.1",
"kind": "patch",
"published_at": "2023-07-24T14:33:07Z"
},
{
"tag": "v4.6.0",
"kind": "minor",
"published_at": "2023-05-31T10:18:30Z"
},
{
"tag": "v4.5.3",
"kind": "patch",
"published_at": "2023-05-14T12:54:07Z"
},
{
"tag": "v4.5.2",
"kind": "patch",
"published_at": "2023-04-21T07:43:07Z"
},
{
"tag": "v4.5.1",
"kind": "patch",
"published_at": "2023-01-18T12:45:34Z"
},
{
"tag": "v4.5.0",
"kind": "minor",
"published_at": "2022-12-01T17:28:56Z"
},
{
"tag": "v4.3.2",
"kind": "patch",
"published_at": "2022-06-01T16:16:58Z"
},
{
"tag": "v4.2.6",
"kind": "patch",
"published_at": "2022-06-01T16:17:32Z"
},
{
"tag": "v4.4.0",
"kind": "minor",
"published_at": "2022-01-26T13:40:08Z"
},
{
"tag": "v4.4.0.rc2",
"kind": "other",
"published_at": "2022-01-10T12:24:36Z"
},
{
"tag": "v4.3.1",
"kind": "patch",
"published_at": "2022-01-09T13:33:34Z"
},
{
"tag": "v4.4.0.rc1",
"kind": "other",
"published_at": "2021-12-04T17:15:34Z"
},
{
"tag": "v4.3.0",
"kind": "minor",
"published_at": "2021-09-14T16:13:36Z"
},
{
"tag": "v4.3.0.rc2",
"kind": "other",
"published_at": "2021-08-23T17:18:52Z"
},
{
"tag": "v4.3.0.rc1",
"kind": "other",
"published_at": "2021-08-11T15:47:44Z"
},
{
"tag": "v4.2.5",
"kind": "patch",
"published_at": "2021-05-31T10:47:05Z"
},
{
"tag": "v4.1.14",
"kind": "patch",
"published_at": "2021-05-31T10:27:30Z"
},
{
"tag": "v4.0.8",
"kind": "patch",
"published_at": "2021-05-31T10:09:36Z"
},
{
"tag": "v3.7.14.1",
"kind": "other",
"published_at": "2021-05-05T19:05:11Z"
},
{
"tag": "v4.2.3.1",
"kind": "other",
"published_at": "2021-05-05T19:08:29Z"
}
],
"recent_commits": [
{
"oid": "202d846374270c75e19b23cea5498ea559577f67",
"body": "…board) (#14342)\n\n* Add per-channel order routing rule management (Admin API + React dashboard)\n\nShips the rules-admin slice of docs/plans/6.0-order-routing.md Phase 2,\ndashboard-only — no legacy Rails admin surface (decisions.md 2026-07-21):\n\n- Admin API v3: rule CRUD nested under channels plus a t\n[…]\n picker, and\n schema-driven preference forms so plugin-registered kinds render\n automatically. Shown only when the channel's effective routing strategy\n (channel override, store fallback) is Rules.",
"is_bot": false,
"headline": "Add per-channel order routing rule management (Admin API + React dash…",
"author_name": "Damian Legawiec",
"author_login": "damianlegawiec",
"committed_at": "2026-07-21T17:18:39Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "8af053ca41360fdd93c352b1d5b07565792b34d9",
"body": "Speed up the dashboard E2E suite on CI\n\nThe 159-test suite ran serially on a single runner against the Vite dev\nserver, with every spec driving the login form — wall-clock kept growing\nwith each new spec file.\n\n- Shard the CI job across 4 runners, each booting its own isolated\n Rails + SQLite + Vit\n[…]\n-up job keeping the \"Dashboard - E2E\" check name\nstable for branch protection.\n\n\nClaude-Session: https://claude.ai/code/session_01P1e1boeUjru43c9gL27jg1\n\nCo-authored-by: Claude <noreply@anthropic.com>",
"is_bot": false,
"headline": "Parallelize dashboard E2E tests across sharded CI jobs (#14343)",
"author_name": "Damian Legawiec",
"author_login": "damianlegawiec",
"committed_at": "2026-07-21T17:17:11Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "dc332372b918ffeb92252c33372a1d71a221a7d4",
"body": "…14341)\n\nThe demo wholesale price list now carries a VolumeRule (min_quantity 10)\nalongside its customer-group rule, so trade pricing applies only on orders\nof 10+ of a single item — the way real wholesale ships in cases. Below the\nthreshold the buyer falls back to retail; there is no hard order min\n[…]\negistry serializes the two fields max-first, so the generic form alone\n would show them in the wrong order; the editor exists only to fix that.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Add a case-pack minimum to wholesale pricing (seed + admin editor) (#…",
"author_name": "Damian Legawiec",
"author_login": "damianlegawiec",
"committed_at": "2026-07-21T15:16:16Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "0d1a8145d498223f334c852b86b9037dbeed8dd5",
"body": "First fixed-group release: @spree/dashboard, -core, and -ui align on\n0.12.0. The CLI patch ships the floating-range starter template.\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Release dashboard packages 0.12.0 and @spree/cli 2.4.6 (#14340)",
"author_name": "Damian Legawiec",
"author_login": "damianlegawiec",
"committed_at": "2026-07-21T10:32:32Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "b71e61326289d7ef4038a4bd55f353569a242d52",
"body": "* Consolidate Changesets into a single root instance\n\n* Float dashboard template ranges; slim the scaffolded app to @spree/dashboard",
"is_bot": false,
"headline": "Chore/root changesets and floating dashboard template (#14339)",
"author_name": "Damian Legawiec",
"author_login": "damianlegawiec",
"committed_at": "2026-07-21T10:17:28Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8bc1cd7af4068a40df89e59c6ed49657e07f4353",
"body": null,
"is_bot": false,
"headline": "Bump spree to 5.6.0.rc4",
"author_name": "Damian Legawiec",
"author_login": "damianlegawiec",
"committed_at": "2026-07-20T16:51:44Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "fb6238c0be24e8ce0cd95feb90f701b2ab2d6a7c",
"body": "spree-starter no longer provisions Meilisearch — the Database search\nprovider is the default on every install path (decisions.md 2026-07-19).\nSPREE_MEILISEARCH=1 pnpm server:dev opts the dev server back in via a\nmonorepo-owned compose overlay that survives server:setup resets; booting\nwithout the flag reverts to DB search and removes the container.\n\nAlso updates the create-spree-app scaffold test for the new starter\ncompose and drops stale redis/meilisearch mentions in CLI comments.",
"is_bot": false,
"headline": "Make Meilisearch fully optional for monorepo server development (#14331)",
"author_name": "Damian Legawiec",
"author_login": "damianlegawiec",
"committed_at": "2026-07-20T12:30:01Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "558508216a824bc19a8718e7adf05ef1c71a3a82",
"body": null,
"is_bot": false,
"headline": "Move PrepareNestedAttributes into the spree_admin engine (#14337)",
"author_name": "Łukasz Adamczyk",
"author_login": "mad-eel",
"committed_at": "2026-07-20T12:28:04Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e1b341275c2593050d082fd29f67dfb8ed99a537",
"body": null,
"is_bot": false,
"headline": "Fix B2B plan name as it's in 6.1",
"author_name": "Damian Legawiec",
"author_login": "damianlegawiec",
"committed_at": "2026-07-20T11:39:51Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c91c92bfc10b6e535cafda9477a67fea272ed558",
"body": null,
"is_bot": false,
"headline": "Harden webhook payload handling (#14335)",
"author_name": "Damian Legawiec",
"author_login": "damianlegawiec",
"committed_at": "2026-07-20T11:13:47Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a4b0c77e8f9768bdc456b6627c8427d988440d4e",
"body": "…332)\n\n* Add allow list for optional attributes in google merchant center\n\n* Exclude item_group_id from optional attributes allowlist\n\nIt is always emitted as a required attribute, so allowing it as an\noptional metafield produced a duplicate g:item_group_id element.",
"is_bot": false,
"headline": "Add allow list for optional attributes in google merchant center (#14…",
"author_name": "Damian Legawiec",
"author_login": "damianlegawiec",
"committed_at": "2026-07-20T10:22:58Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9ab9d938ea513e0659d5032c233f4423c29c613d",
"body": "…sale seeds (#14330)\n\nStorefronts can now read the channel their requests resolve to:\nGET /api/v3/store/channel returns the current channel with its resolved\nstorefront_access posture and guest_checkout, reachable before\nauthentication so a gated storefront can render a sign-in wall instead of\nan er\n[…]\nved buyer with a 40%-off customer-group price list, so a\nfresh install can demo a blended DTC + gated B2B storefront end to end.\n\n@spree/sdk gains client.channel.get() and Channel/CustomerGroup types.",
"is_bot": false,
"headline": "Store channel context endpoint, channel-bound publishable keys, whole…",
"author_name": "Damian Legawiec",
"author_login": "damianlegawiec",
"committed_at": "2026-07-20T09:13:01Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "9b4414f8f67819ec06cda00e44c8081f0fd612d3",
"body": null,
"is_bot": false,
"headline": "Add support for newsletter unsubscribe workflow in Store SDK (#14329)",
"author_name": "Damian Legawiec",
"author_login": "damianlegawiec",
"committed_at": "2026-07-19T19:28:51Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "acc180583bd763a8f5219befcd45854674c8528e",
"body": "…328)\n\nCatches up the unreleased fixes that landed without changesets: the\ncollapsed-sidebar badge fix (#14311, dashboard-core) and the\nimport-completion cache invalidation (#14326, dashboard). Starts a\nCHANGELOG for dashboard-core.",
"is_bot": false,
"headline": "Release @spree/dashboard-core 0.10.2 and @spree/dashboard 0.10.3 (#14…",
"author_name": "Damian Legawiec",
"author_login": "damianlegawiec",
"committed_at": "2026-07-19T19:06:22Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e28ee384ce387229b3c26f622340678196200b10",
"body": "…gres-only (#14325)",
"is_bot": false,
"headline": "Plan: Solid Queue as the default job backend — single-container, Post…",
"author_name": "Damian Legawiec",
"author_login": "damianlegawiec",
"committed_at": "2026-07-19T18:27:54Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4d96f4bb0339b99b7f9143becf4a0cdc701d0d8a",
"body": "Single-node Docker deployment as the default: root-context builds",
"is_bot": false,
"headline": "Merge pull request #14323 from spree/feat/docker-single-node-deploy",
"author_name": "Damian Legawiec",
"author_login": "damianlegawiec",
"committed_at": "2026-07-19T17:00:27Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ddd539397ba397da4ac1114fdfb5ae67f7886de2",
"body": null,
"is_bot": false,
"headline": "Bump verison to 5.6.0 RC3",
"author_name": "Damian Legawiec",
"author_login": "damianlegawiec",
"committed_at": "2026-07-19T17:00:09Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ab98fc7ee95684df6325c900e5fab574a708f4a8",
"body": null,
"is_bot": false,
"headline": "Add user page sidebar injection point for admin UI extensions (#14327)",
"author_name": "ifizza",
"author_login": "ifizza",
"committed_at": "2026-07-19T16:44:58Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "dea3bf7dbe37b8aae4cf2776754335c70ca74205",
"body": "+ added overview/quickstart page\n+ added AWS EC2 guide\n+ added background jobs guide\n+ refined caching guide",
"is_bot": false,
"headline": "Update deplpyment guides",
"author_name": "Damian Legawiec",
"author_login": "damianlegawiec",
"committed_at": "2026-07-19T15:56:08Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "287c520604103e9727cbe3f3a06bdeb145f81fc9",
"body": "… group\n\nImporting the 30-product sample CSV published 1000+ events. Two cuts:\n\nBare touches no longer publish *.updated — the touch cascade (price →\nvariant → product, asset → all variants) re-announced payloads\nsubscribers already had. Detection is causal, not changeset-based: a\ntouch sets a flag,\n[…]\nStore so any\nmisuse outside the block form clears at request boundaries.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_014DzwNXZwhBsLqcJzwZwAmD",
"is_bot": false,
"headline": "Trim lifecycle event noise: no touch duplicates, one event per import…",
"author_name": "Damian Legawiec",
"author_login": "damianlegawiec",
"committed_at": "2026-07-19T15:56:08Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "1bb80695ce4604067f2e907b744957fb08d27509",
"body": "Simplify the default stack with just one web+worker node and DB",
"is_bot": false,
"headline": "Single-node Docker deployment as the default: root-context builds",
"author_name": "Damian Legawiec",
"author_login": "damianlegawiec",
"committed_at": "2026-07-19T15:54:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "77e3a007523ae538ffb5c06dd1b86170b615f2dc",
"body": "* Invalidate resource caches when a dashboard import finishes\n\nThe import pipeline creates records server-side, outside any tracked\nmutation, and the products list stays mounted under the ?import= wizard\nmodal — so the TanStack Query cache kept serving the pre-import list\nafter completion (no remoun\n[…]\nore\nmachines.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013NKETijfLwd96LxMRVZ3pM\n\n---------\n\nCo-authored-by: Claude <noreply@anthropic.com>",
"is_bot": false,
"headline": "Invalidate import-touched caches on import completion (#14326)",
"author_name": "Damian Legawiec",
"author_login": "damianlegawiec",
"committed_at": "2026-07-18T20:01:44Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "63f4a1eb1b08c591657ac917a6b2acb118eee15b",
"body": null,
"is_bot": false,
"headline": "Shrink package READMEs to identity + quick start + docs links (#14324)",
"author_name": "Damian Legawiec",
"author_login": "damianlegawiec",
"committed_at": "2026-07-18T08:15:33Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3b2a8625f1009f9ff9d12468c039702bf2697baf",
"body": "* Fix product description losing formatting on reload in dashboard\n\nThe Tiptap product description hydrated from the serializer's `description`\nfield, which returns tag-stripped, whitespace-squished plain text. On every\nreload this collapsed paragraphs and line breaks into a single block. Hydrate\nth\n[…]\nonts and other plain-text consumers. Extract plain text via a shared\n`Spree::RichTextHelper.to_plain_text` that maps block boundaries and line\nbreaks to newlines. Single-paragraph output is unchanged.",
"is_bot": false,
"headline": "Fix rich text description round-tripping in product forms (#14322)",
"author_name": "Damian Legawiec",
"author_login": "damianlegawiec",
"committed_at": "2026-07-17T14:54:36Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "c0d86e097728c2ab31edaef086979c469c2db973",
"body": "…4295)\n\n* Recalculate tax from the discounted basis for all promotion types\n\nApplying a promotion only moved the taxable basis in one of the four\ndiscount x tax-mode combinations (line-item discount with additional\ntax). Two gaps caused the rest:\n\n- Calculator::DefaultTax computed included (VAT-styl\n[…]\nhipment_spec.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_0117wy5yeay31JhFB1wkeHco\n\n---------\n\nCo-authored-by: Claude <noreply@anthropic.com>",
"is_bot": false,
"headline": "Recalculate tax from the discounted basis for all promotion types (#1…",
"author_name": "Damian Legawiec",
"author_login": "damianlegawiec",
"committed_at": "2026-07-17T12:31:39Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "2216b7db6e4924a0a45c1065cac52a4a32d135e4",
"body": "* Handle deleting immutable address correctly\n\n* use address services for create & update action in Admin V3 API address endpoint\n\n* update pending orders if necessary\n\n* return failure when nested objects like order fail to update\n\n* improve authorization + handle error on destroy\n\n* extract failur\n[…]\n, move associated incomplete orders back to address step\n\n* remove redundant comment\n\n* use update_all to unassign deleted address from incomplete orders\n\n* narrow scope for updating incomplete orders",
"is_bot": false,
"headline": "Handle immutable addresses correctly (#14300)",
"author_name": "Kacper Mękarski",
"author_login": "KacperMekarski",
"committed_at": "2026-07-17T12:30:02Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "cb60cf9aa1217bc9ea6dd1d310ba8bb97687029e",
"body": "…… (#14321)\n\nFix admin auth refresh cookie never being set over plain-http production deployments\n\nIn production, Rails silently refuses to write a Secure cookie on a\nnon-SSL request, so a production app served over plain http (e.g. the\nprebuilt Docker image on http://localhost:3000) never received \n[…]\ne dashboard\ndeployments), while http requests fall back to SameSite=Lax — safe\nbecause same-site covers both the baked-in /dashboard and local Vite\ndev, and any cross-site setup requires https anyway.",
"is_bot": false,
"headline": "Fix admin auth refresh cookie never being set over plain-http product…",
"author_name": "Damian Legawiec",
"author_login": "damianlegawiec",
"committed_at": "2026-07-17T12:29:02Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "760f29cdd5fddc08ff9271722ddae90e19410c23",
"body": null,
"is_bot": false,
"headline": "Bump version to v5.6.0.rc2",
"author_name": "Damian Legawiec",
"author_login": "damianlegawiec",
"committed_at": "2026-07-17T11:20:04Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a29cb95dd7a96e2a57ccf3be77f21769407fd536",
"body": "Pin SimpleCov to 0.x and restore original coverage DSL\n\nSimpleCov 1.0 changed how the parallel, sharded coverage results merge: a file\ncovered by its spec in one of the 12 core processes (e.g. images_helper.rb,\nwhich has images_helper_spec.rb) is reported at 0% because the other processes'\nempty res\n[…]\nv to the 0.x line, restoring the known-good ~90% baseline and\nreproducible CI.\n\n\nClaude-Session: https://claude.ai/code/session_01DtKxNMbwGECCpw247XfDKM\n\nCo-authored-by: Claude <noreply@anthropic.com>",
"is_bot": false,
"headline": "Pin SimpleCov to 0.x and restore original coverage config (#14320)",
"author_name": "Damian Legawiec",
"author_login": "damianlegawiec",
"committed_at": "2026-07-17T09:46:09Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "50e8edd3645fba6625bd34c286b5deaca4fc4432",
"body": "* Fixed: removed deprecated `stores=` usage from tests\n\n* Fixed: removed remaining deprecated plural store reads from tests\n\nComplete the migration started in the previous commit: the read-side\naccessors `stores` and `store_ids` were still used in assertions and in\nthe `custom_payment` factory, going through the deprecation bridge.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "Fixed: removed deprecated `stores=` usage from tests (#14318)",
"author_name": "Damian Legawiec",
"author_login": "damianlegawiec",
"committed_at": "2026-07-17T08:51:17Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "09ee912d85268e05516e1c45f944557ef3cc7630",
"body": "SimpleCov 1.0 deprecated the add_group/add_filter configuration methods in\nfavor of group/skip. Update all engine spec helpers to the new DSL so CI runs\nclean without deprecation warnings on the current (unpinned) SimpleCov.\n\nMatchers are unchanged, so coverage measurement is unaffected.\n\n\nClaude-Session: https://claude.ai/code/session_01DtKxNMbwGECCpw247XfDKM\n\nCo-authored-by: Claude <noreply@anthropic.com>",
"is_bot": false,
"headline": "Migrate coverage config to SimpleCov 1.0 DSL (#14319)",
"author_name": "Damian Legawiec",
"author_login": "damianlegawiec",
"committed_at": "2026-07-17T08:50:29Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "96561073d1d2fe7ac76c66d3535bfb622a015736",
"body": "Scope dashboard coverage flag to spree/dashboard in Codecov\n\nThe spree_dashboard test job uploads a SimpleCov report rooted at the whole\nmonorepo (it boots a dummy app on the full `spree` gem), but its suite only\nexercises the SPA host. Because the `dashboard` flag was never declared in\ncodecov.yml,\n[…]\n/dashboard/ so its report\nonly affects its own files, matching the other gems.\n\n\nClaude-Session: https://claude.ai/code/session_01DtKxNMbwGECCpw247XfDKM\n\nCo-authored-by: Claude <noreply@anthropic.com>",
"is_bot": false,
"headline": "Add dashboard component to Codecov configuration (#14317)",
"author_name": "Damian Legawiec",
"author_login": "damianlegawiec",
"committed_at": "2026-07-16T18:21:27Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "66daa048fb397e2fc2f1f5b2bcdfda9ee315bd6f",
"body": "* Handle race condition in find_or_create_from_oauth method\n\n* small adjustment\n\n* Refresh identity on race condition as well",
"is_bot": false,
"headline": "Handle race condition in find_or_create_from_oauth method (#14282)",
"author_name": "Kacper Mękarski",
"author_login": "KacperMekarski",
"committed_at": "2026-07-16T18:13:22Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8332de3824233deaf7a7e72ddff5dbf795a55848",
"body": null,
"is_bot": false,
"headline": "Improve the updater widget (#14316)",
"author_name": "Damian Legawiec",
"author_login": "damianlegawiec",
"committed_at": "2026-07-16T17:39:28Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c9cae77bb7908c8c70917ccd7e276c89f69aac72",
"body": null,
"is_bot": false,
"headline": "Added Spree 6 multi vendor plan (#14303)",
"author_name": "Damian Legawiec",
"author_login": "damianlegawiec",
"committed_at": "2026-07-16T15:38:04Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c5a3273aecfe8480d4223c5c234edb72040933cb",
"body": "always require the cart token",
"is_bot": false,
"headline": "Harden Store API Cart Associate endpoint (#14314)",
"author_name": "Damian Legawiec",
"author_login": "damianlegawiec",
"committed_at": "2026-07-16T15:37:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e9b22cce82d78c2eff5ba75c27c80d2b35aadf82",
"body": "Imperove post install instructions; make the dashboard accessible via argument\n\n```bash\nnpx create-spree-app --react-dashboard\n```",
"is_bot": false,
"headline": "Improve CLI/create-spree-app around new react dashboard preview (#14313)",
"author_name": "Damian Legawiec",
"author_login": "damianlegawiec",
"committed_at": "2026-07-16T13:09:54Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "09edaaf6bd3544649e69ba8606ba9708e74eb571",
"body": "* Document new RAILS_HOST and CDN_HOST env vars\n\n* fixes",
"is_bot": false,
"headline": "Document new RAILS_HOST and CDN_HOST env vars (#14312)",
"author_name": "Damian Legawiec",
"author_login": "damianlegawiec",
"committed_at": "2026-07-16T12:07:07Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4dc93127e8456d237fad4a74f0d546e4e3bdb297",
"body": "Fix nav label leaking into collapsed sidebar when item has a badge\n\nThe collapsed icon sidebar hides item labels via a `span:last-child`\nrule on the menu button. A trailing badge span (only the Getting Started\nentry has one) took that last-child slot, so its label stayed visible and\nwrapped, breakin\n[…]\nlayout. Hide both the label and badge spans\nexplicitly in collapsed icon mode.\n\n\nClaude-Session: https://claude.ai/code/session_016BGTdmYEHcSTE4FXHY6jYg\n\nCo-authored-by: Claude <noreply@anthropic.com>",
"is_bot": false,
"headline": "Fix nav item title and badge visibility in collapsed icon mode (#14311)",
"author_name": "Damian Legawiec",
"author_login": "damianlegawiec",
"committed_at": "2026-07-16T11:48:10Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "98a9a00551d7fd35dae3176853f31f04903c8958",
"body": "* Subscribe to/unsubscribe from a newsletter when toggling the `accepts_email_marketing` user attribute\n\n* Add endpoints for unsubscribing from the newsletter - for both signed in and guest customers\n\n* CR fixes: spec, missing permissions for newsletter subscribers, toggling the accepts_email_market\n[…]\nath (CR alignment; moving away\nfrom multi-store).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "Add a flow for unsubscribing from the newsletter (#14122)",
"author_name": "Łukasz Adamczyk",
"author_login": "mad-eel",
"committed_at": "2026-07-16T10:33:31Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "f145a98e1e33ad297002ad1c7ff442bb0fefdc39",
"body": "* Fix dashboard logins dying on CORS in scaffolded apps\n\nspree add dashboard wrote VITE_SPREE_API_URL=http://localhost:<port>\ninto apps/dashboard/.env.local — but that variable is the SDK's switch\nto absolute cross-origin URLs (meant for deploys on a different origin\nthan the API), so requests bypas\n[…]\n\nteaching the bug.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_014DzwNXZwhBsLqcJzwZwAmD\n\n* Release the dashboard CORS fix as @spree/cli 2.4.3",
"is_bot": false,
"headline": "Fix dashboard logins dying on CORS in scaffolded apps (#14310)",
"author_name": "Damian Legawiec",
"author_login": "damianlegawiec",
"committed_at": "2026-07-16T05:39:25Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "a5d65fae59eb89acb02292f1f5f1ba6b0bdc55a2",
"body": "…st-run setup automatically (#14308)\n\n* Never let optional app phases abort create-spree-app before setup runs\n\nA storefront or React Dashboard failure used to kill the whole scaffold\nbefore the final setup phase (spree init: fresh image pull, seeded\ndatabase, API keys) ever ran. The project it left\n[…]\npnpm.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_014DzwNXZwhBsLqcJzwZwAmD\n\n---------\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "create-spree-app always yields a working app; spree dev completes fir…",
"author_name": "Damian Legawiec",
"author_login": "damianlegawiec",
"committed_at": "2026-07-15T21:56:46Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "35649b683a0f221653575d48b74e9920aed77a2c",
"body": "Fix flaky CSV import retry E2E test\n\nThe \"imports products through the upload → mapping → progress → results\nwizard\" spec intermittently failed asserting the \"Retrying failed rows\"\ncopy after clicking retry. The retry response already carries the fresh\n`processing` status, which is cached optimistic\n[…]\nen solely by\nthe existing 2s poll, giving the retry indicator a stable window.\n\n\nClaude-Session: https://claude.ai/code/session_011q6J7AZTh2ZETcsvWCkgcH\n\nCo-authored-by: Claude <noreply@anthropic.com>",
"is_bot": false,
"headline": "Fix retry failed rows race condition with refetch (#14309)",
"author_name": "Damian Legawiec",
"author_login": "damianlegawiec",
"committed_at": "2026-07-15T21:07:20Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "cc8b4be3352c2ffe5fa0045c93b4c4f5d10032f5",
"body": "…n-sdk 0.6.0, dashboard 0.10.1, CLI 2.4.1 (#14307)\n\n* Release @spree/admin-sdk 0.6.0\n\nConsume the twelve pending changesets into the changelog. This is the\nAdmin API surface the 5.6 React Dashboard consumes — hosts installing\n@spree/dashboard@0.10.x from the registry need it; 0.5.0 lacks exports\nthe\n[…]\n too.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_014DzwNXZwhBsLqcJzwZwAmD\n\n---------\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Fix registry installs of the dashboard Vite integration; release admi…",
"author_name": "Damian Legawiec",
"author_login": "damianlegawiec",
"committed_at": "2026-07-15T17:02:16Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "2bace53ac29f91ed5d4e5e00e8ce2e571f4d5018",
"body": "Release @spree/cli 2.4.0 and create-spree-app 1.1.0\n\nApplies the staged changesets for the Developer Preview: the CLI gains\nspree add dashboard (bundled starter template pinned to the released\n@spree/dashboard* 0.10.0), spree build --production, and the fully\nnon-interactive spree plugin new; create\n[…]\nblishes them in order behind the already-published\ndashboard packages.\n\n\nClaude-Session: https://claude.ai/code/session_014DzwNXZwhBsLqcJzwZwAmD\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Release @spree/cli 2.4.0 + create-spree-app 1.1.0 (#14306)",
"author_name": "Damian Legawiec",
"author_login": "damianlegawiec",
"committed_at": "2026-07-15T15:19:11Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "b7e9f56bf05812c2956d7d3db9d1e276b5455cfc",
"body": "First release carrying the React Dashboard Developer Preview: the new\nspree_dashboard host gem ships alongside the existing gems, keeping the\nbackend in lockstep with the @spree/dashboard* npm packages.",
"is_bot": false,
"headline": "Bump version to 5.6.0.rc1 (#14305)",
"author_name": "Damian Legawiec",
"author_login": "damianlegawiec",
"committed_at": "2026-07-15T14:27:41Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5941aa99eaf6b1d4ce81d5d255026cc74ce65abf",
"body": "@spree/dashboard 0.1.0 (and 0.2.x) were published years ago and npm\nnever allows a version to be reused, so the Developer Preview starts at\n0.10.0 — all three packages in lockstep. Updates the plugin scaffold's\npeer ranges and the publishing docs to match; the CLI's embedded\nstarter template picks the new pins up automatically at build time.",
"is_bot": false,
"headline": "Bump dashboard packages to 0.10.0 (#14304)",
"author_name": "Damian Legawiec",
"author_login": "damianlegawiec",
"committed_at": "2026-07-15T13:33:40Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "249dbf3c68461288f8444d754bcf27d0fa962250",
"body": null,
"is_bot": false,
"headline": "Add more sandboxes references in README and docs",
"author_name": "Damian Legawiec",
"author_login": "damianlegawiec",
"committed_at": "2026-07-14T13:59:11Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6dc380f87bc804541664d0dc5a46a45d0bcd66d7",
"body": null,
"is_bot": false,
"headline": "Add sandbox as option in spree docs",
"author_name": "Damian Legawiec",
"author_login": "damianlegawiec",
"committed_at": "2026-07-14T13:04:57Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "233b0ad4022ebe58742224406af5b94c30d35638",
"body": "Include new React dashboard as developer preview in newly created projects",
"is_bot": false,
"headline": "Merge pull request #14301 from spree/feature/spree-cli-plugin",
"author_name": "Damian Legawiec",
"author_login": "damianlegawiec",
"committed_at": "2026-07-14T12:37:13Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3a8b5dd97b9c81f674623eff904a8d7c36280229",
"body": "Bugbot follow-up completing the release chain: create-spree-app's\ndashboard phase delegates to the project-local `spree add dashboard`,\nso publishing it before the CLI that implements the command (and embeds\nthe starter) would break dashboard scaffolding for the same-push\nwindow. Full chain: admin-sdk → dashboard → cli → create-spree-app.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_014DzwNXZwhBsLqcJzwZwAmD",
"is_bot": false,
"headline": "Gate create-spree-app release on the CLI release",
"author_name": "Damian Legawiec",
"author_login": "damianlegawiec",
"committed_at": "2026-07-14T12:05:02Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "04c705cf738dff9e2036cd5b7939f665ace6a9b9",
"body": "Bugbot follow-up on the release-cli gate: the embedded starter template\nand the dashboard packages' rewritten workspace ranges also pin\n@spree/admin-sdk, so a same-push admin-sdk version bump could still\npublish scaffolds or dashboard packages referencing a version not yet\non npm. release-dashboard \n[…]\n on release-admin-sdk, completing\nthe admin-sdk → dashboard → cli chain.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_014DzwNXZwhBsLqcJzwZwAmD",
"is_bot": false,
"headline": "Complete the npm release ordering chain with admin-sdk",
"author_name": "Damian Legawiec",
"author_login": "damianlegawiec",
"committed_at": "2026-07-14T11:47:32Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "659a75a5d36bd5eb8d8320bda4260ab43a4c485f",
"body": "Three fixes from the PR #14301 review cycle:\n\n- release-cli now needs release-dashboard (Bugbot): the CLI tarball\n embeds the dashboard-starter template pinning ^x.y.z of\n @spree/dashboard{,-ui,-core}, so publishing it before those versions\n exist on npm would ship a scaffold whose install fails.\n[…]\ning the filesystem, on top of\n the existing expanded-path prefix guard.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_014DzwNXZwhBsLqcJzwZwAmD",
"is_bot": false,
"headline": "Address PR review: release ordering, turbo edge, CodeQL hardening",
"author_name": "Damian Legawiec",
"author_login": "damianlegawiec",
"committed_at": "2026-07-14T11:30:56Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "f3b0987de6f9c0893fc94419ea6006deb55427d2",
"body": "The edge overlay points SPREE_DASHBOARD_DIST_PATH at\npackages/dashboard-starter/dist through the existing monorepo mount, so\nthe spree_dashboard gem (now in spree-starter's SPREE_PATH gem block)\nserves the built SPA at localhost:3000/dashboard with zero copying —\nand because the gem reads files per \n[…]\nlback, /dashboard/-prefixed asset URLs, and\nsame-origin API all correct.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_014DzwNXZwhBsLqcJzwZwAmD",
"is_bot": false,
"headline": "Serve the hosted dashboard from the dev server via pnpm server:*",
"author_name": "Damian Legawiec",
"author_login": "damianlegawiec",
"committed_at": "2026-07-14T10:16:18Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "b402c0c09dec20f4cb06388639e31c887b3345cf",
"body": "* Make deleting variants in rails admin safer\n\nOnly delete variants which IDs are explicitely passed in params\n\n* fixup! Make deleting variants in rails admin safer",
"is_bot": false,
"headline": "Make deleting variants in rails admin safer (#14299)",
"author_name": "Damian Legawiec",
"author_login": "damianlegawiec",
"committed_at": "2026-07-13T15:49:34Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d02d6002c5a1eae12d31ea2394d033799190eb04",
"body": "…le (#14298)\n\n* Keep the store content locale in request state, not I18n.default_locale\n\nSpree::Core::ControllerHelpers::Locale#set_locale assigned\nI18n.default_locale on every storefront/admin request (and the admin\nre-assigned it via align_i18n_default_locale_to_content!). In the i18n\ngem only `lo\n[…]\nain visit silently inherited the thread's\n stale locale.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\n\n* Update CLAUDE.md\n\n---------\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Keep the store content locale in request state, not I18n.default_loca…",
"author_name": "Damian Legawiec",
"author_login": "damianlegawiec",
"committed_at": "2026-07-13T12:02:23Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "6db2b605056c3b0a29fd04edc887ee29248c3efc",
"body": "The production image build (registry push, Render/Railway/AWS deploys)\nhad no CLI flow — and once the starter Dockerfile bakes the stock\ndashboard, anyone building a customized project's image by hand would\nsilently ship stock over their own apps/dashboard. The new flag closes\nboth gaps: it builds t\n[…]\nsolved so plain\nbuilds need no flags) lives on the spree-starter branch.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_014DzwNXZwhBsLqcJzwZwAmD",
"is_bot": false,
"headline": "Add spree build --production with customized-dashboard baking",
"author_name": "Damian Legawiec",
"author_login": "damianlegawiec",
"committed_at": "2026-07-13T09:20:29Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "0cec7f4fe93a4782ea6eb16a8caf6b287a528574",
"body": "Serving the SPA is a delivery concern, not an API concern — the host\nmoves out of spree_api into its own optional gem, opt-in via Gemfile\n(API-only installs carry no dashboard routes) and claiming the\nsuccessor slot to spree_admin for 6.0, when it takes over /admin as the\ndefault admin delivery. Con\n[…]\nS) and gains an env-fallback spec on\ntop of the relocated request suite.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_014DzwNXZwhBsLqcJzwZwAmD",
"is_bot": false,
"headline": "Extract the dashboard host into a spree_dashboard gem",
"author_name": "Damian Legawiec",
"author_login": "damianlegawiec",
"committed_at": "2026-07-13T08:38:39Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "5ce1305ab27f92e4bc2a79d13c7d90953fc513ae",
"body": "The default production topology becomes single node — the Rails app\nserves the built React Dashboard at /dashboard, same origin as the\nAdmin API, so the cross-origin machinery (CORS allowlist, SameSite=None\ncookies, per-environment builds) disappears entirely. Medusa (/app) and\nVendure (DashboardPlu\n[…]\ngle node; the static/CDN topology\nremains documented as the alternative.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_014DzwNXZwhBsLqcJzwZwAmD",
"is_bot": false,
"headline": "Serve the dashboard from the Spree server: single-node by default",
"author_name": "Damian Legawiec",
"author_login": "damianlegawiec",
"committed_at": "2026-07-13T08:02:34Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "c71039b59892e5e55fee65783f8d6cccd9435ed0",
"body": "spree add dashboard now appends a static-site service to the root\nrender.yaml when one exists (create-spree-app relocates spree-starter's\nBlueprint there): CDN-served dist/ with the SPA rewrite, rootDir\napps/dashboard, and a build command matching the project's package\nmanager. Two steps stay manual\n[…]\nr cookie/CORS\nrequirements, the Render path, and a production checklist.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_014DzwNXZwhBsLqcJzwZwAmD",
"is_bot": false,
"headline": "Register the dashboard in the project's Render Blueprint",
"author_name": "Damian Legawiec",
"author_login": "damianlegawiec",
"committed_at": "2026-07-12T17:09:25Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "4de684c07d0e4db95d34b490444b72623a9bbf62",
"body": "The Spree dashboard stack (source-only packages, heavy peer\ndependencies, registry singletons) is built and tested under pnpm, and\nthe docs already speak pnpm — scaffolding npm projects contradicted\nboth. Detection now treats an explicit invoking agent as a choice\n(pnpm create / yarn create still wi\n[…]\n— which previously\nhardcoded npm/npx regardless of the selected manager.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_014DzwNXZwhBsLqcJzwZwAmD",
"is_bot": false,
"headline": "Default new create-spree-app projects to pnpm",
"author_name": "Damian Legawiec",
"author_login": "damianlegawiec",
"committed_at": "2026-07-12T16:57:05Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "2ecebc9c16f0ca09b38b9c9e3def8171906d0677",
"body": "Replaces the spree/dashboard-starter template-repo + CI-sync-job design\nwith Vendure-style build-time embedding, after comparing how Medusa\n(separate starter repo kept current by a scheduled bot) and Vendure\n(templates inside @vendure/create, lockstep for free) distribute\nstarters. The CLI's build r\n[…]\nte repo remains a 6.0 GA option — the script takes any target\ndirectory.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_014DzwNXZwhBsLqcJzwZwAmD",
"is_bot": false,
"headline": "Embed the dashboard-starter template in the @spree/cli tarball",
"author_name": "Damian Legawiec",
"author_login": "damianlegawiec",
"committed_at": "2026-07-12T16:21:05Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "23d7433a82eea6437c81e26092c439269c315179",
"body": "The capstone walkthrough for early adopters (slated to become the main\ntutorial at 6.0): one product attribute wired through every dashboard\nsurface — form editing via the host form, a table column, numeric\nfiltering, and sorting. Leads with the decision rule the docs push\neverywhere: default to cus\n[…]\n\nallowlist, validation) is mapped to the frontend capability it unlocks.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_014DzwNXZwhBsLqcJzwZwAmD",
"is_bot": false,
"headline": "Add the attribute-end-to-end recipe",
"author_name": "Damian Legawiec",
"author_login": "damianlegawiec",
"committed_at": "2026-07-12T10:41:23Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "072c0925d89bb0c07f0cf830c6ac4e6d11bdd36b",
"body": "The recipe now leads with the zero-code path (a CustomFieldDefinition\nrenders in the Custom Fields card and saves with the form) and covers\nthe code path for real columns (formFields + a slot widget bound via\nuseHostForm — no nested form, no widget-owned save; the previous\nversion nested a <form> in\n[…]\nlic-api and the dashboard-core README list the new\nregistries and hooks.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_014DzwNXZwhBsLqcJzwZwAmD",
"is_bot": false,
"headline": "Teach the two real custom-form-field flows in the docs",
"author_name": "Damian Legawiec",
"author_login": "damianlegawiec",
"committed_at": "2026-07-12T09:44:27Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "5274ffbfe9e20f2916a3171b2470b7de7a92f42d",
"body": "Benchmarked against Medusa v2 (no form participation at all), Vendure's\nReact dashboard (page blocks receive the host form), and Saleor\n(first-party attributes only) — the missing capability was a\ncode-driven field that saves with the built-in form instead of nesting\nits own <form> with its own save\n[…]\ne widget.\n\nBoth registries are declarable through defineDashboardPlugin.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_014DzwNXZwhBsLqcJzwZwAmD",
"is_bot": false,
"headline": "Let extension fields join built-in forms' save cycle",
"author_name": "Damian Legawiec",
"author_login": "damianlegawiec",
"committed_at": "2026-07-12T09:44:27Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "88b71ee0f0f1322ca9af100d4414b69dcac69f1c",
"body": "A verification sweep of every docs page against the published packages\nfound code samples that crash or silently no-op as written:\n\n- public-api listed exports that don't exist (formatMoney/formatDate/\n mapFormErrors/Tabs/Alert/EmptyState/toast) — replaced with the real\n surface (formatPrice, form\n[…]\nboth now match\n the scaffold template and Developer Preview 0.x reality\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_014DzwNXZwhBsLqcJzwZwAmD",
"is_bot": false,
"headline": "Fix runtime-breaking errors in the dashboard docs",
"author_name": "Damian Legawiec",
"author_login": "damianlegawiec",
"committed_at": "2026-07-12T08:51:04Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "9c80ab185344e891679e8dada4b4b94c8541f44f",
"body": "Normalize plugin route mounts to POSIX separators for Windows hosts,\nwarn (instead of silently degrading) when a plugin's package.json fails\nto parse during manifest discovery, point the plugin scaffolder's\nnext-steps banner at file routes alongside the registry entry point,\nand document two route-s\n[…]\ng\nbeing a dispatcher feature that file routes must implement themselves.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_014DzwNXZwhBsLqcJzwZwAmD",
"is_bot": false,
"headline": "Apply review-round fixes from the branch code review",
"author_name": "Damian Legawiec",
"author_login": "damianlegawiec",
"committed_at": "2026-07-12T08:35:57Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "c7267123f7091f035ad96bd0ee16f5a16c86808f",
"body": "The three dashboard packages are about to appear on npm, so their\nREADMEs must stand alone: drop the stale dashboard-ui \"Phase 0\nplaceholder\" note, replace monorepo-relative links and internal plan\nreferences with docs-site links, fix @/ alias imports that no longer\nexist, and correct the private-pa\n[…]\n and fixes\na dead customization/extensions URL in the plugin scaffolder.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_014DzwNXZwhBsLqcJzwZwAmD",
"is_bot": false,
"headline": "Refresh dashboard docs and package READMEs for external readers",
"author_name": "Damian Legawiec",
"author_login": "damianlegawiec",
"committed_at": "2026-07-12T08:31:55Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "899c4c9fea5d48ccad6567afb7cbdd1c5fd3cf98",
"body": "@spree/dashboard, @spree/dashboard-core, and @spree/dashboard-ui become\npublishable at 0.1.0 with full npm metadata and per-package changeset\nconfigs. A new release job in packages.yml publishes unpublished\nversions in dependency order via pnpm publish (rewrites workspace:^\nwhile packing; source-onl\n[…]\n\nthe workspace biome.json inlined — so the template always stands alone.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_014DzwNXZwhBsLqcJzwZwAmD",
"is_bot": false,
"headline": "Release the dashboard packages as a 0.x Developer Preview",
"author_name": "Damian Legawiec",
"author_login": "damianlegawiec",
"committed_at": "2026-07-12T08:24:21Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "61b2fd494c1d99ac45ccfbd0413b855247a215b3",
"body": "New prompt (default yes, labeled Developer Preview) and --no-dashboard\nflag clone the dashboard starter into apps/dashboard/, write .env.local\n(API URL only — VITE_ values compile into the client bundle, so no\ncredentials), install deps, and extend the README, CLAUDE.md, and\nDependabot templates. Ad\n[…]\nk,\nand hardens both git clones with `--` before user-supplied templates.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_014DzwNXZwhBsLqcJzwZwAmD",
"is_bot": false,
"headline": "Offer the React Dashboard in create-spree-app",
"author_name": "Damian Legawiec",
"author_login": "damianlegawiec",
"committed_at": "2026-07-12T08:15:17Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "a433ade2b6149ae1464746e4e787419e8af3a092",
"body": "The source-only dashboard package compiles inside host programs (the\nstarter) that don't define the @ path alias, so shell source must use\nrelative imports. Applies the same codemod to the files main added\n(imports wizard, setup tasks, storefront connect, auth pages).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_014DzwNXZwhBsLqcJzwZwAmD",
"is_bot": false,
"headline": "Rewrite @/ aliases to relative imports in files new on main",
"author_name": "Damian Legawiec",
"author_login": "damianlegawiec",
"committed_at": "2026-07-12T08:05:42Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "bbc7a62ef6a38056ae0e574423b3a4be459a1885",
"body": "main introduced top-level /forgot-password and /reset-password routes;\nthe virtual route config in @spree/dashboard/vite names top-level shell\nroutes explicitly, so they must be listed there to appear in composed\nhosts. Regenerates both committed route trees.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_014DzwNXZwhBsLqcJzwZwAmD",
"is_bot": false,
"headline": "Add main's new auth routes to the virtual route skeleton",
"author_name": "Damian Legawiec",
"author_login": "damianlegawiec",
"committed_at": "2026-07-12T08:05:42Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "d47c51c6e59cefa7c13b294a3ef911395ff73318",
"body": "The docs assumed the reader was a Spree contributor: monorepo paths\n(packages/dashboard/src/...) presented as the reader's own files, links\ninto internal plan documents, a hand-rolled customizations.ts + main.tsx\nimport dance that the app already does, and examples that would crash —\nthe quickstart \n[…]\np-level \"Dashboard\" nav item with\n Overview/Customization/Recipes/Plugins/Slots Catalog groups; overview\n gains the Developer Preview callout.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Rewrite dashboard docs for readers outside the Spree codebase",
"author_name": "Damian Legawiec",
"author_login": "damianlegawiec",
"committed_at": "2026-07-12T07:56:19Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "2a2a040ce86303d84fd3772790d46c21ef9c7309",
"body": "addChild and removeChild replace the children array; updateChild\npatched the child object in place, so the patched entry kept its\nreference in the next snapshot — defeating any reference-equality\nmemoization on sidebar item components. Now both the child and the\narray get fresh references. (Review finding.)\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Make nav.updateChild replace instead of mutate in place",
"author_name": "Damian Legawiec",
"author_login": "damianlegawiec",
"committed_at": "2026-07-12T07:56:19Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "81b67dcae88cc30de7eebfeeea28f1db3cbccb77",
"body": "overview.mdx lists file routes as a distinct plugin concern (the\nspree.dashboard.routes marker → typed route tree), and quickstart points\nplugin authors at file routes while keeping the registry form for in-app\ncustomization. routes.mdx gains a \"Route collisions\" section showing the\npackage-named error the build now emits when two packages claim the same\npath.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Document file routes and route-collision behavior",
"author_name": "Damian Legawiec",
"author_login": "damianlegawiec",
"committed_at": "2026-07-12T07:56:19Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "ed7c7615562906a7e4b526b23359572cca0a0d74",
"body": "The docs referenced @spree/dashboard-sdk, a package that doesn't exist —\nthe Admin API client is @spree/admin-sdk. They also used prefixed type\nnames (AdminProduct/AdminOrder/AdminCustomer) that the SDK never\nexported; the real types are Product/Order/Customer. Several of these\nwere live import exam\n[…]\n; it actually exports the app shell\n(Dashboard, createDashboardRouter) plus the /vite and /styles.css\nsubpaths. Rewritten to match src/index.ts.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Fix phantom @spree/dashboard-sdk / Admin* type names in docs",
"author_name": "Damian Legawiec",
"author_login": "damianlegawiec",
"committed_at": "2026-07-12T07:56:19Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "443c389af4ed583c27d08c3b63c8df15dffdd18a",
"body": "Switches the example from a top-level nav entry to the addChildren form,\nnesting \"Brands\" inside the built-in Products submenu. Position 600 puts\nit after Transfers (the last built-in child at 500). Demonstrates the\nnew child-mutation API against a real built-in parent; drops the now-\nunused PackageIcon (child entries don't render icons).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Nest example Brands under the Products menu as the last item",
"author_name": "Damian Legawiec",
"author_login": "damianlegawiec",
"committed_at": "2026-07-12T07:56:19Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "2a83c4ee87c276fb368b9ee032f1b9dd69d2dcae",
"body": "Plugins could build their own submenu but couldn't add an item into a\nbuilt-in one: the only lever was nav.update('products', { children }),\nwhich replaces the whole children array and drops the built-in entries.\n\nAdd nav.addChild / removeChild / updateChild, which mutate a parent's\nchildren in plac\n[…]\nre addChildren so a plugin can add a parent and nest under it\nin one config. Nesting under a missing parent — or a duplicate child\nkey — throws.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Support nesting nav items under an existing parent",
"author_name": "Damian Legawiec",
"author_login": "damianlegawiec",
"committed_at": "2026-07-12T07:56:19Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "3973774f2a452c342b7f6b68a42993e0577a8658",
"body": "The example plugin's position (35) predated the current nav scale —\nbuilt-ins now use hundreds (Products 300, Customers 400), so 35 sorted\nBrands to the very top instead of between them. 350 slots it after\nProducts.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Fix Brands nav position to sit after Products",
"author_name": "Damian Legawiec",
"author_login": "damianlegawiec",
"committed_at": "2026-07-12T07:56:19Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "2ecd1f75beed157261c3503aa5dc0dddafb6c678",
"body": "The packed-tarball spike passed (generator parses route files under real\nnode_modules, never writes into the package). The three former open\nquestions are now resolved decisions: collision pre-flight shipped, and\nthe TanStack dependency classification + per-package caret pin policy is\ndocumented.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Record spike result and resolved decisions in the typed-routes plan",
"author_name": "Damian Legawiec",
"author_login": "damianlegawiec",
"committed_at": "2026-07-12T07:56:19Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "6484f695e57aab1f551ac48333fd7ba6cc67cdda",
"body": "Two plugins (or a plugin and the shell) declaring the same route path\npreviously surfaced as TanStack's file-path-only \"Conflicting\nconfiguration paths\" error, which authors had to map back to packages\nby hand. assertNoRouteCollisions now pre-flights the composition: it\nparses each source's createFi\n[…]\n from a\nreal node_modules install, the generator never writes into the package,\nand the starter builds with router-plugin resolved transitively.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Add route-collision pre-flight; fix TanStack dep classification",
"author_name": "Damian Legawiec",
"author_login": "damianlegawiec",
"committed_at": "2026-07-12T07:56:19Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "19a21cb601f0eb12771dbe0be2fd6ee761d716e2",
"body": "New plan 5.6-dashboard-typed-plugin-routes.md records the design, the\nverified facts (identical shell tree through the virtual skeleton, no\ngenerator writes into plugin packages, cast-free links proven via the\nstarter), and the remaining published-tarball spike. The routes guide\nnow teaches file rou\n[…]\ne runtime\nregistry scoped to in-app/dynamic cases; scaffolding and publishing\nguides follow. Resolves the project-layout plan's open question 5.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Document typed plugin routes; add the plan",
"author_name": "Damian Legawiec",
"author_login": "damianlegawiec",
"committed_at": "2026-07-12T07:56:19Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "143e2837c6feef642c88c640d57bd5defb69db2b",
"body": "New plugins get src/pages/ for components and src/routes/ with a\nready-made list file route (full final path literal, resourceSearchSchema\nvalidation), the spree.dashboard.routes marker, and the standalone-tsc\nexclusion. The entry no longer registers routes.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Scaffold file routes in the plugin template",
"author_name": "Damian Legawiec",
"author_login": "damianlegawiec",
"committed_at": "2026-07-12T07:56:19Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "6712a9a863b8af86a52122c77971dfdc2f4dacd8",
"body": "main.tsx builds the router from the host-generated tree and registers it\nprogram-wide; routeTree.gen.ts is committed on purpose — it regenerates\non every dev start/build, and its diff on package upgrades shows exactly\nwhich admin pages changed. @tanstack/react-router and react-query become\ndirect de\n[…]\nposes the shell's 44 routes plus the example\nplugin's two brands routes — its typecheck proves cast-free typed links\nto plugin pages end-to-end.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Wire the starter to the composed typed router",
"author_name": "Damian Legawiec",
"author_login": "damianlegawiec",
"committed_at": "2026-07-12T07:56:19Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "561ff56d543d6ba9feeb4bb97444b94d63abe6cc",
"body": "Brands list and detail become TanStack route files in src/routes/\n(declared via the spree.dashboard.routes marker), with the page\ncomponents in src/pages/. The entry keeps slots, nav, tables, and\ntranslations; route registration is gone — and so are the link casts,\nsince /$storeId/brands/$brandId is\n[…]\n createFileRoute\npaths only type-check against a generated route tree, which exists in\nhost programs (the starter compiles these files in-repo).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Migrate the example plugin to file routes",
"author_name": "Damian Legawiec",
"author_login": "damianlegawiec",
"committed_at": "2026-07-12T07:56:19Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "f31fa7b1d2077471e31f2d95dbe69199dcd0855c",
"body": "The route generator parses route files statically — it never executes\nthem — so plugin routes shipped as plain TanStack route files can be\ncomposed at build time without running plugin code in Node.\n\n@spree/dashboard/vite now wraps the TanStack Router generator with a\nvirtual route config: the shell\n[…]\negistry and catch-all dispatcher stay for dynamic,\nin-app registration; file routes always win since the catch-all is the\nlowest-priority match.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Compile plugin file routes into the host's typed route tree",
"author_name": "Damian Legawiec",
"author_login": "damianlegawiec",
"committed_at": "2026-07-12T07:56:19Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "c91ec2be8532be1401c51ad6d7adfd5a95dd36c8",
"body": "Plugin routes stay on the runtime registry + catch-all for the preview;\nthe open question captures the later option of compiling statically\ndeclared plugin routes into the host's route tree (typed links,\nper-route code splitting), enabled by the source-only shell + build-time\nplugin discovery already in place.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Record build-time typed route composition as a 5.6 plan open question",
"author_name": "Damian Legawiec",
"author_login": "damianlegawiec",
"committed_at": "2026-07-12T07:56:19Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "7cf111df8a01ee9fd5529206929c2ec9f289cefa",
"body": "The nav and settings-nav registries could already remove and patch\nentries, but the plugin facade only mapped arrays to add — so \"reorder\nor hide a built-in sidebar entry\", a common merchant customization,\nrequired dropping to imperative registry calls. nav and settingsNav now\nalso accept the { add,\n[…]\nrm stays as shorthand for\n{ add }. Built-ins register during shell bootstrap, before any plugin\nruns, so plugin configs can patch them reliably.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Expose nav remove/update declaratively in defineDashboardPlugin",
"author_name": "Damian Legawiec",
"author_login": "damianlegawiec",
"committed_at": "2026-07-12T07:56:19Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "ccded5cbc9c6072e11741c70de01fdf7ec5577aa",
"body": "Bolts the React Dashboard onto an existing project: clones the\ndashboard-starter template into apps/dashboard/, writes .env.local with\nthe project's API URL (no credentials — admins sign in interactively,\nand VITE_ values are compiled into the client bundle), and installs\ndependencies. Idempotent: a\n[…]\nTE) accepts a git URL or a\nlocal directory — how the monorepo tests the flow against\npackages/dashboard-starter before the template repo exists.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Add spree add dashboard command",
"author_name": "Damian Legawiec",
"author_login": "damianlegawiec",
"committed_at": "2026-07-12T07:56:19Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "7c66d957f2308b3f7d814f0d5566d35d234aaa46",
"body": "Thin host (~7 files) consuming <Dashboard /> from @spree/dashboard:\nVite config with spreeDashboardPlugin() + API proxy, entry importing\nthe shell, the virtual plugin-activation module, and a plugins.ts\ncustomization point. No TanStack Router plugin — the route tree ships\npre-generated inside the sh\n[…]\n the example plugin\nlands in the bundle via discovery, and the CSS output is byte-identical\nto the dashboard's own build (shell scanning exact).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Add packages/dashboard-starter, the canonical dashboard host template",
"author_name": "Damian Legawiec",
"author_login": "damianlegawiec",
"committed_at": "2026-07-12T07:56:19Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "f6e9654f0212bc0e92f2cb121dfcd4ede154166d",
"body": "The dashboard-starter model has hosts depend on @spree/dashboard and\nrender its shell; until now the package was only an app with its own\nentry point. src/dashboard.tsx exports the provider stack + router with\nthe i18n/nav/search bootstrap as module side effects, the package gains\na root export (plu\n[…]\nailwind classes\nwhen installed, resolved from the host root; silent when absent so\ncustom dashboards built directly on core + ui are unaffected.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Export the app shell as <Dashboard /> from @spree/dashboard",
"author_name": "Damian Legawiec",
"author_login": "damianlegawiec",
"committed_at": "2026-07-12T07:56:19Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "4f42a28e87e457c1428c5fbc1a94e0903a120ad3",
"body": "Three decisions locked in for the Developer Preview:\n\n- @spree/dashboard publishes to npm and exports the app shell as a\n <Dashboard /> component, distributed source-only (host's Vite compiles\n it, keeping the generated route types first-class). Shell source uses\n relative imports only.\n- The das\n[…]\nOnly refresh cookie). Key minting is\n removed from create-spree-app and spree add dashboard, and the two\n related open questions are resolved.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Nail down the 5.6 dashboard packaging decisions in the plan",
"author_name": "Damian Legawiec",
"author_login": "damianlegawiec",
"committed_at": "2026-07-12T07:55:42Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "65d3d4395f26aaf8905feeef61ea9501fd144b4c",
"body": "Auto-discovery previously only wired Tailwind scanning — the host still\nhad to hand-edit main.tsx to run a plugin's code, and the dashboard's\ndev-mode example wiring bypassed the discovery path entirely with a\nmanual conditional import.\n\nspreeDashboardPlugin() now also serves virtual:spree-dashboard\n[…]\n leaves\nzero traces. Docs updated: plugin install is two steps (npm package +\nbackend), with the factory pattern as the config-taking exception.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Activate discovered plugins via virtual:spree-dashboard-plugins",
"author_name": "Damian Legawiec",
"author_login": "damianlegawiec",
"committed_at": "2026-07-12T07:55:42Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "a5a04517a035c9d1904f7eadb5117e6bb3226ce8",
"body": "5.5 shipped without it, so the backend/ → api/ rename, apps/dashboard/\nscaffolding, and the spree add dashboard / spree upgrade layout commands\nnow target 5.6. Version references inside the plan follow (dual-layout\nsupport spans pre-5.6 vs 5.6+; the optional deprecation-warning question\nmoves to 5.7). Indexed in CLAUDE.md under pending design work.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Retarget the project layout & dashboard plan to 5.6",
"author_name": "Damian Legawiec",
"author_login": "damianlegawiec",
"committed_at": "2026-07-12T07:55:42Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "711aff87e9dd71ba507091337fdfdf7fa4e84ccb",
"body": "The Rails-rendered spree/admin engine is the Classic Admin; the\npackages/dashboard SPA replacing it in 6.0 is the React Dashboard. The\ndocs navigation and the dashboard overview now use these names instead\nof the ad-hoc \"Rails admin\" / \"admin dashboard\" variants.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Adopt Classic Admin / React Dashboard naming in docs",
"author_name": "Damian Legawiec",
"author_login": "damianlegawiec",
"committed_at": "2026-07-12T07:55:42Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "21a5a142fa81976fbd57710b8b9105f1a0dde21c",
"body": "Nothing imported @spree/dashboard-plugin-example, so its bugs (dead\ndetail link, slot that no page rendered) shipped unnoticed. The\ndashboard now loads it before first render when VITE_EXAMPLE_PLUGIN=true\nin dev; the DEV guard statically eliminates it from production builds.\n\nWiring it in immediatel\n[…]\ned route types are\nstrict — registry-route Links need their params cast just like `to`.\nFixed in the example and documented in the routes guide.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Run the example plugin in dashboard dev mode behind VITE_EXAMPLE_PLUGIN",
"author_name": "Damian Legawiec",
"author_login": "damianlegawiec",
"committed_at": "2026-07-12T07:55:42Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "50a6eab1b7313741500b9ef7924fd7e43895d8c4",
"body": "Every prompt now has a matching flag (--ruby-name, --module-name,\n--npm-scope, --author, --author-email, --license) and -y/--yes accepts\nthe default for whatever the flags leave unanswered, so CI and scripted\nruns work without a TTY. Author name and email default to git config\nuser.name/user.email — prefilled into the interactive prompts too.\n\nThe scaffolding guide documented most of these flags already; now the\nCLI honors them.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Make spree plugin new fully non-interactive",
"author_name": "Damian Legawiec",
"author_login": "damianlegawiec",
"committed_at": "2026-07-12T07:55:42Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "ea4e3554e2adc4b111cbfcc64510e96e6402ae62",
"body": "- extending.mdx: the SDK accepts `limit`, not `per_page`; lookups use\n prefixed IDs, not slugs (also in the request() JSDoc); link the\n renamed tutorial page directly.\n- distributing.mdx: the module-level configure() pattern can't influence\n import-time registration — ES imports are hoisted, so t\n[…]\ntern.\n- Fix two broken links (plugins/publishing, dashboard backend page) and\n point the dashboard-plugins redirect at the plugin landing page.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Correct dashboard and Admin SDK docs",
"author_name": "Damian Legawiec",
"author_login": "damianlegawiec",
"committed_at": "2026-07-12T07:55:42Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "4098e9395fa0eff04bcb9294b0b12182e50ab2cc",
"body": "Send the unresolved-plugin error overlay once per WebSocket connection\ninstead of on every HTTP request, resolve file: URLs with fileURLToPath\ninstead of a byte-offset slice, and stop overstating auto-discovery in\nthe docstring — it wires Tailwind scanning, while plugin code still\nactivates via a side-effect import in the host's main.tsx.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Polish the Vite plugin: overlay per connection, correct file: handling",
"author_name": "Damian Legawiec",
"author_login": "damianlegawiec",
"committed_at": "2026-07-12T07:55:42Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "2cb35ef66fdcdebeceec4f78e8cd013ef8963cda",
"body": "The brands list linked to /brands/$brandId but the plugin never\nregistered that route, so clicking a brand name landed on \"Page not\nfound\". The new detail page also serves as the reference for plugin\nroutes with path params — the dispatcher's params prop in action.\n\nAlso fixes the README's extension-point count (six, not five).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Add a brand detail route to the example plugin",
"author_name": "Damian Legawiec",
"author_login": "damianlegawiec",
"committed_at": "2026-07-12T07:55:42Z",
"body_truncated": false,
"is_coding_agent": true
}
],
"releases_count": 100,
"commits_last_year": 2174,
"latest_release_at": "2026-07-20T13:12:49Z",
"latest_release_tag": "v5.4.4",
"releases_from_tags": false,
"days_since_last_push": 0,
"active_weeks_last_year": 52,
"days_since_latest_release": 1,
"mean_days_between_releases": 6.9
},
"community": {
"has_readme": true,
"has_license": true,
"has_description": true,
"has_contributing": true,
"health_percentage": 100,
"has_issue_template": true,
"has_code_of_conduct": true,
"has_pull_request_template": false
},
"ecosystem": {
"packages": [
{
"name": "spree",
"exists": true,
"license": "BSD-3-Clause",
"keywords": [],
"ecosystem": "rubygems",
"matches_repo": true,
"registry_url": "https://rubygems.org/gems/spree",
"is_deprecated": false,
"latest_version": "5.5.4",
"repository_url": "https://github.com/spree/spree/tree/v5.5.4",
"versions_count": 438,
"total_downloads": 2840445,
"dependents_count": null,
"deprecation_note": null,
"maintainers_count": null,
"monthly_downloads": null,
"first_published_at": "2009-07-25T17:51:39Z",
"latest_published_at": "2026-07-20T16:53:59.496000Z",
"latest_version_yanked": null,
"days_since_latest_publish": 1
}
]
},
"popularity": {
"forks": 5285,
"stars": 15570,
"watchers": 83,
"fork_history": {
"days": [
{
"date": "2021-06-11",
"count": 1
},
{
"date": "2021-06-12",
"count": 1
},
{
"date": "2021-06-15",
"count": 1
},
{
"date": "2021-06-16",
"count": 1
},
{
"date": "2021-06-17",
"count": 2
},
{
"date": "2021-06-18",
"count": 3
},
{
"date": "2021-06-21",
"count": 1
},
{
"date": "2021-06-25",
"count": 1
},
{
"date": "2021-06-26",
"count": 1
},
{
"date": "2021-06-28",
"count": 1
},
{
"date": "2021-06-29",
"count": 1
},
{
"date": "2021-06-30",
"count": 1
},
{
"date": "2021-07-03",
"count": 1
},
{
"date": "2021-07-04",
"count": 1
},
{
"date": "2021-07-08",
"count": 1
},
{
"date": "2021-07-10",
"count": 1
},
{
"date": "2021-07-12",
"count": 1
},
{
"date": "2021-07-13",
"count": 6
},
{
"date": "2021-07-14",
"count": 1
},
{
"date": "2021-07-19",
"count": 1
},
{
"date": "2021-07-22",
"count": 3
},
{
"date": "2021-07-23",
"count": 2
},
{
"date": "2021-07-24",
"count": 2
},
{
"date": "2021-07-25",
"count": 1
},
{
"date": "2021-07-26",
"count": 1
},
{
"date": "2021-07-27",
"count": 1
},
{
"date": "2021-07-28",
"count": 3
},
{
"date": "2021-07-29",
"count": 4
},
{
"date": "2021-08-01",
"count": 1
},
{
"date": "2021-08-02",
"count": 1
},
{
"date": "2021-08-05",
"count": 1
},
{
"date": "2021-08-07",
"count": 1
},
{
"date": "2021-08-09",
"count": 2
},
{
"date": "2021-08-11",
"count": 1
},
{
"date": "2021-08-12",
"count": 1
},
{
"date": "2021-08-13",
"count": 1
},
{
"date": "2021-08-14",
"count": 1
},
{
"date": "2021-08-15",
"count": 2
},
{
"date": "2021-08-18",
"count": 2
},
{
"date": "2021-08-20",
"count": 1
},
{
"date": "2021-08-23",
"count": 1
},
{
"date": "2021-08-24",
"count": 1
},
{
"date": "2021-08-26",
"count": 3
},
{
"date": "2021-08-27",
"count": 2
},
{
"date": "2021-08-28",
"count": 1
},
{
"date": "2021-08-30",
"count": 2
},
{
"date": "2021-08-31",
"count": 1
},
{
"date": "2021-09-05",
"count": 1
},
{
"date": "2021-09-06",
"count": 2
},
{
"date": "2021-09-07",
"count": 3
},
{
"date": "2021-09-08",
"count": 1
},
{
"date": "2021-09-09",
"count": 2
},
{
"date": "2021-09-13",
"count": 1
},
{
"date": "2021-09-14",
"count": 2
},
{
"date": "2021-09-15",
"count": 2
},
{
"date": "2021-09-21",
"count": 1
},
{
"date": "2021-09-22",
"count": 3
},
{
"date": "2021-09-26",
"count": 1
},
{
"date": "2021-09-27",
"count": 2
},
{
"date": "2021-10-01",
"count": 1
},
{
"date": "2021-10-07",
"count": 1
},
{
"date": "2021-10-09",
"count": 1
},
{
"date": "2021-10-11",
"count": 2
},
{
"date": "2021-10-14",
"count": 1
},
{
"date": "2021-10-15",
"count": 3
},
{
"date": "2021-10-20",
"count": 1
},
{
"date": "2021-10-25",
"count": 2
},
{
"date": "2021-10-27",
"count": 1
},
{
"date": "2021-10-29",
"count": 1
},
{
"date": "2021-10-30",
"count": 1
},
{
"date": "2021-11-01",
"count": 2
},
{
"date": "2021-11-03",
"count": 2
},
{
"date": "2021-11-04",
"count": 1
},
{
"date": "2021-11-09",
"count": 2
},
{
"date": "2021-11-12",
"count": 1
},
{
"date": "2021-11-13",
"count": 2
},
{
"date": "2021-11-15",
"count": 3
},
{
"date": "2021-11-18",
"count": 1
},
{
"date": "2021-11-19",
"count": 1
},
{
"date": "2021-11-21",
"count": 1
},
{
"date": "2021-11-23",
"count": 1
},
{
"date": "2021-11-25",
"count": 2
},
{
"date": "2021-11-26",
"count": 2
},
{
"date": "2021-12-01",
"count": 2
},
{
"date": "2021-12-09",
"count": 1
},
{
"date": "2021-12-15",
"count": 1
},
{
"date": "2021-12-16",
"count": 1
},
{
"date": "2021-12-17",
"count": 1
},
{
"date": "2021-12-29",
"count": 2
},
{
"date": "2022-01-04",
"count": 1
},
{
"date": "2022-01-05",
"count": 1
},
{
"date": "2022-01-10",
"count": 3
},
{
"date": "2022-01-11",
"count": 1
},
{
"date": "2022-01-14",
"count": 1
},
{
"date": "2022-01-16",
"count": 1
},
{
"date": "2022-01-23",
"count": 1
},
{
"date": "2022-01-24",
"count": 1
},
{
"date": "2022-01-30",
"count": 1
},
{
"date": "2022-01-31",
"count": 3
},
{
"date": "2022-02-02",
"count": 1
},
{
"date": "2022-02-04",
"count": 1
},
{
"date": "2022-02-06",
"count": 2
},
{
"date": "2022-02-07",
"count": 2
},
{
"date": "2022-02-10",
"count": 1
},
{
"date": "2022-02-11",
"count": 1
},
{
"date": "2022-02-19",
"count": 2
},
{
"date": "2022-02-20",
"count": 2
},
{
"date": "2022-02-23",
"count": 3
},
{
"date": "2022-02-24",
"count": 2
},
{
"date": "2022-03-02",
"count": 1
},
{
"date": "2022-03-04",
"count": 1
},
{
"date": "2022-03-07",
"count": 1
},
{
"date": "2022-03-08",
"count": 1
},
{
"date": "2022-03-09",
"count": 1
},
{
"date": "2022-03-11",
"count": 1
},
{
"date": "2022-03-12",
"count": 1
},
{
"date": "2022-03-18",
"count": 2
},
{
"date": "2022-03-24",
"count": 1
},
{
"date": "2022-03-25",
"count": 2
},
{
"date": "2022-03-27",
"count": 1
},
{
"date": "2022-04-02",
"count": 1
},
{
"date": "2022-04-03",
"count": 1
},
{
"date": "2022-04-04",
"count": 2
},
{
"date": "2022-04-05",
"count": 2
},
{
"date": "2022-04-11",
"count": 2
},
{
"date": "2022-04-15",
"count": 1
},
{
"date": "2022-04-16",
"count": 1
},
{
"date": "2022-04-19",
"count": 1
},
{
"date": "2022-04-28",
"count": 2
},
{
"date": "2022-04-29",
"count": 2
},
{
"date": "2022-05-01",
"count": 1
},
{
"date": "2022-05-03",
"count": 2
},
{
"date": "2022-05-05",
"count": 1
},
{
"date": "2022-05-06",
"count": 1
},
{
"date": "2022-05-08",
"count": 1
},
{
"date": "2022-05-09",
"count": 2
},
{
"date": "2022-05-13",
"count": 1
},
{
"date": "2022-05-14",
"count": 1
},
{
"date": "2022-05-16",
"count": 1
},
{
"date": "2022-05-17",
"count": 1
},
{
"date": "2022-05-18",
"count": 1
},
{
"date": "2022-05-19",
"count": 1
},
{
"date": "2022-05-22",
"count": 1
},
{
"date": "2022-05-25",
"count": 1
},
{
"date": "2022-05-27",
"count": 1
},
{
"date": "2022-06-03",
"count": 1
},
{
"date": "2022-06-04",
"count": 1
},
{
"date": "2022-06-07",
"count": 1
},
{
"date": "2022-06-12",
"count": 1
},
{
"date": "2022-06-13",
"count": 1
},
{
"date": "2022-06-14",
"count": 1
},
{
"date": "2022-06-15",
"count": 1
},
{
"date": "2022-06-17",
"count": 2
},
{
"date": "2022-06-23",
"count": 1
},
{
"date": "2022-07-01",
"count": 1
},
{
"date": "2022-07-03",
"count": 1
},
{
"date": "2022-07-07",
"count": 1
},
{
"date": "2022-07-13",
"count": 1
},
{
"date": "2022-07-14",
"count": 1
},
{
"date": "2022-07-18",
"count": 1
},
{
"date": "2022-07-20",
"count": 1
},
{
"date": "2022-07-21",
"count": 2
},
{
"date": "2022-07-22",
"count": 1
},
{
"date": "2022-07-26",
"count": 1
},
{
"date": "2022-08-05",
"count": 1
},
{
"date": "2022-08-14",
"count": 1
},
{
"date": "2022-08-15",
"count": 1
},
{
"date": "2022-08-17",
"count": 1
},
{
"date": "2022-08-18",
"count": 1
},
{
"date": "2022-08-20",
"count": 1
},
{
"date": "2022-08-22",
"count": 1
},
{
"date": "2022-08-23",
"count": 2
},
{
"date": "2022-08-24",
"count": 2
},
{
"date": "2022-08-26",
"count": 1
},
{
"date": "2022-08-28",
"count": 1
},
{
"date": "2022-08-29",
"count": 1
},
{
"date": "2022-09-06",
"count": 1
},
{
"date": "2022-09-07",
"count": 1
},
{
"date": "2022-09-18",
"count": 1
},
{
"date": "2022-09-22",
"count": 1
},
{
"date": "2022-09-24",
"count": 1
},
{
"date": "2022-09-27",
"count": 1
},
{
"date": "2022-09-28",
"count": 1
},
{
"date": "2022-10-02",
"count": 1
},
{
"date": "2022-10-04",
"count": 2
},
{
"date": "2022-10-06",
"count": 1
},
{
"date": "2022-10-16",
"count": 1
},
{
"date": "2022-10-20",
"count": 1
},
{
"date": "2022-10-27",
"count": 1
},
{
"date": "2022-10-28",
"count": 1
},
{
"date": "2022-10-31",
"count": 1
},
{
"date": "2022-11-02",
"count": 1
},
{
"date": "2022-11-03",
"count": 2
},
{
"date": "2022-11-04",
"count": 1
},
{
"date": "2022-11-13",
"count": 1
},
{
"date": "2022-11-15",
"count": 1
},
{
"date": "2022-11-22",
"count": 1
},
{
"date": "2022-11-28",
"count": 3
},
{
"date": "2022-12-03",
"count": 1
},
{
"date": "2022-12-06",
"count": 1
},
{
"date": "2022-12-07",
"count": 1
},
{
"date": "2022-12-08",
"count": 2
},
{
"date": "2022-12-15",
"count": 1
},
{
"date": "2022-12-16",
"count": 1
},
{
"date": "2022-12-23",
"count": 1
},
{
"date": "2022-12-29",
"count": 1
},
{
"date": "2023-01-05",
"count": 1
},
{
"date": "2023-01-11",
"count": 1
},
{
"date": "2023-01-12",
"count": 1
},
{
"date": "2023-01-13",
"count": 1
},
{
"date": "2023-01-23",
"count": 1
},
{
"date": "2023-01-26",
"count": 1
},
{
"date": "2023-01-27",
"count": 1
},
{
"date": "2023-02-01",
"count": 1
},
{
"date": "2023-02-04",
"count": 1
},
{
"date": "2023-02-06",
"count": 2
},
{
"date": "2023-02-13",
"count": 1
},
{
"date": "2023-02-14",
"count": 1
},
{
"date": "2023-02-16",
"count": 1
},
{
"date": "2023-02-17",
"count": 1
},
{
"date": "2023-02-22",
"count": 1
},
{
"date": "2023-02-24",
"count": 1
},
{
"date": "2023-02-25",
"count": 1
},
{
"date": "2023-03-02",
"count": 1
},
{
"date": "2023-03-03",
"count": 1
},
{
"date": "2023-03-05",
"count": 1
},
{
"date": "2023-03-07",
"count": 1
},
{
"date": "2023-03-09",
"count": 1
},
{
"date": "2023-03-13",
"count": 1
},
{
"date": "2023-03-14",
"count": 1
},
{
"date": "2023-03-16",
"count": 1
},
{
"date": "2023-03-23",
"count": 1
},
{
"date": "2023-03-24",
"count": 1
},
{
"date": "2023-03-28",
"count": 2
},
{
"date": "2023-04-04",
"count": 1
},
{
"date": "2023-04-05",
"count": 1
},
{
"date": "2023-04-10",
"count": 1
},
{
"date": "2023-04-13",
"count": 1
},
{
"date": "2023-04-20",
"count": 1
},
{
"date": "2023-04-21",
"count": 1
},
{
"date": "2023-04-24",
"count": 1
},
{
"date": "2023-04-26",
"count": 1
},
{
"date": "2023-04-27",
"count": 1
},
{
"date": "2023-04-30",
"count": 2
},
{
"date": "2023-05-01",
"count": 1
},
{
"date": "2023-05-07",
"count": 1
},
{
"date": "2023-05-08",
"count": 1
},
{
"date": "2023-05-10",
"count": 2
},
{
"date": "2023-05-11",
"count": 1
},
{
"date": "2023-05-12",
"count": 1
},
{
"date": "2023-05-18",
"count": 1
},
{
"date": "2023-05-19",
"count": 1
},
{
"date": "2023-05-26",
"count": 1
},
{
"date": "2023-05-27",
"count": 1
},
{
"date": "2023-05-29",
"count": 1
},
{
"date": "2023-06-02",
"count": 1
},
{
"date": "2023-06-05",
"count": 1
},
{
"date": "2023-06-08",
"count": 1
},
{
"date": "2023-06-11",
"count": 1
},
{
"date": "2023-06-17",
"count": 1
},
{
"date": "2023-06-28",
"count": 1
},
{
"date": "2023-06-29",
"count": 1
},
{
"date": "2023-06-30",
"count": 1
},
{
"date": "2023-07-02",
"count": 1
},
{
"date": "2023-07-04",
"count": 1
},
{
"date": "2023-07-08",
"count": 1
},
{
"date": "2023-07-10",
"count": 1
},
{
"date": "2023-07-17",
"count": 1
},
{
"date": "2023-07-18",
"count": 1
},
{
"date": "2023-07-20",
"count": 1
},
{
"date": "2023-07-21",
"count": 1
},
{
"date": "2023-07-22",
"count": 1
},
{
"date": "2023-07-23",
"count": 1
},
{
"date": "2023-08-03",
"count": 1
},
{
"date": "2023-08-09",
"count": 1
},
{
"date": "2023-08-10",
"count": 2
},
{
"date": "2023-08-11",
"count": 1
},
{
"date": "2023-08-12",
"count": 1
},
{
"date": "2023-08-15",
"count": 1
},
{
"date": "2023-08-22",
"count": 1
},
{
"date": "2023-08-26",
"count": 1
},
{
"date": "2023-09-01",
"count": 1
},
{
"date": "2023-09-13",
"count": 1
},
{
"date": "2023-09-14",
"count": 1
},
{
"date": "2023-09-15",
"count": 1
},
{
"date": "2023-09-24",
"count": 1
},
{
"date": "2023-09-25",
"count": 1
},
{
"date": "2023-10-06",
"count": 2
},
{
"date": "2023-10-08",
"count": 1
},
{
"date": "2023-10-10",
"count": 1
},
{
"date": "2023-10-11",
"count": 1
},
{
"date": "2023-10-12",
"count": 1
},
{
"date": "2023-10-15",
"count": 1
},
{
"date": "2023-10-17",
"count": 1
},
{
"date": "2023-10-18",
"count": 1
},
{
"date": "2023-10-23",
"count": 1
},
{
"date": "2023-10-24",
"count": 1
},
{
"date": "2023-10-27",
"count": 1
},
{
"date": "2023-10-28",
"count": 1
},
{
"date": "2023-11-05",
"count": 1
},
{
"date": "2023-11-12",
"count": 1
},
{
"date": "2023-11-14",
"count": 1
},
{
"date": "2023-11-19",
"count": 1
},
{
"date": "2023-11-22",
"count": 1
},
{
"date": "2023-11-25",
"count": 1
},
{
"date": "2023-12-09",
"count": 1
},
{
"date": "2023-12-13",
"count": 1
},
{
"date": "2023-12-28",
"count": 1
},
{
"date": "2024-01-01",
"count": 1
},
{
"date": "2024-01-02",
"count": 2
},
{
"date": "2024-01-03",
"count": 1
},
{
"date": "2024-01-04",
"count": 1
},
{
"date": "2024-01-07",
"count": 1
},
{
"date": "2024-01-10",
"count": 2
},
{
"date": "2024-01-12",
"count": 1
},
{
"date": "2024-01-13",
"count": 1
},
{
"date": "2024-01-16",
"count": 1
},
{
"date": "2024-01-17",
"count": 1
},
{
"date": "2024-01-19",
"count": 1
},
{
"date": "2024-01-22",
"count": 1
},
{
"date": "2024-01-24",
"count": 2
},
{
"date": "2024-01-25",
"count": 1
},
{
"date": "2024-02-05",
"count": 1
},
{
"date": "2024-02-23",
"count": 1
},
{
"date": "2024-02-29",
"count": 1
},
{
"date": "2024-03-05",
"count": 1
},
{
"date": "2024-03-06",
"count": 2
},
{
"date": "2024-03-07",
"count": 1
},
{
"date": "2024-03-12",
"count": 1
},
{
"date": "2024-03-17",
"count": 1
},
{
"date": "2024-03-19",
"count": 1
},
{
"date": "2024-03-20",
"count": 1
},
{
"date": "2024-03-22",
"count": 1
},
{
"date": "2024-03-23",
"count": 1
},
{
"date": "2024-03-25",
"count": 1
},
{
"date": "2024-03-26",
"count": 1
},
{
"date": "2024-04-01",
"count": 1
},
{
"date": "2024-04-11",
"count": 1
},
{
"date": "2024-04-12",
"count": 1
},
{
"date": "2024-04-19",
"count": 1
},
{
"date": "2024-04-21",
"count": 1
},
{
"date": "2024-04-23",
"count": 1
},
{
"date": "2024-04-24",
"count": 2
},
{
"date": "2024-04-27",
"count": 1
},
{
"date": "2024-04-29",
"count": 3
},
{
"date": "2024-05-02",
"count": 1
},
{
"date": "2024-05-03",
"count": 1
},
{
"date": "2024-05-04",
"count": 3
},
{
"date": "2024-05-06",
"count": 1
},
{
"date": "2024-05-10",
"count": 1
},
{
"date": "2024-05-13",
"count": 1
},
{
"date": "2024-05-19",
"count": 1
},
{
"date": "2024-05-21",
"count": 1
},
{
"date": "2024-05-27",
"count": 1
},
{
"date": "2024-05-30",
"count": 1
},
{
"date": "2024-05-31",
"count": 1
},
{
"date": "2024-06-10",
"count": 1
},
{
"date": "2024-06-12",
"count": 1
},
{
"date": "2024-06-17",
"count": 1
},
{
"date": "2024-06-21",
"count": 1
},
{
"date": "2024-06-28",
"count": 1
},
{
"date": "2024-07-01",
"count": 1
},
{
"date": "2024-07-06",
"count": 1
},
{
"date": "2024-07-11",
"count": 1
},
{
"date": "2024-07-13",
"count": 1
},
{
"date": "2024-07-17",
"count": 1
},
{
"date": "2024-07-18",
"count": 1
},
{
"date": "2024-07-20",
"count": 1
},
{
"date": "2024-07-22",
"count": 1
},
{
"date": "2024-08-05",
"count": 1
},
{
"date": "2024-08-08",
"count": 1
},
{
"date": "2024-08-15",
"count": 1
},
{
"date": "2024-08-17",
"count": 1
},
{
"date": "2024-08-21",
"count": 1
},
{
"date": "2024-08-31",
"count": 1
},
{
"date": "2024-09-02",
"count": 1
},
{
"date": "2024-09-12",
"count": 1
},
{
"date": "2024-09-14",
"count": 1
},
{
"date": "2024-09-15",
"count": 2
},
{
"date": "2024-10-03",
"count": 1
},
{
"date": "2024-10-04",
"count": 1
},
{
"date": "2024-10-08",
"count": 1
},
{
"date": "2024-10-11",
"count": 1
},
{
"date": "2024-10-14",
"count": 1
},
{
"date": "2024-10-16",
"count": 1
},
{
"date": "2024-10-18",
"count": 1
},
{
"date": "2024-10-19",
"count": 1
},
{
"date": "2024-10-21",
"count": 1
},
{
"date": "2024-10-23",
"count": 6
},
{
"date": "2024-10-24",
"count": 1
},
{
"date": "2024-10-25",
"count": 1
},
{
"date": "2024-10-26",
"count": 1
},
{
"date": "2024-10-29",
"count": 1
},
{
"date": "2024-10-31",
"count": 2
},
{
"date": "2024-11-01",
"count": 1
},
{
"date": "2024-11-02",
"count": 1
},
{
"date": "2024-11-03",
"count": 1
},
{
"date": "2024-11-04",
"count": 1
},
{
"date": "2024-11-08",
"count": 1
},
{
"date": "2024-11-12",
"count": 2
},
{
"date": "2024-11-15",
"count": 1
},
{
"date": "2024-11-25",
"count": 1
},
{
"date": "2024-11-27",
"count": 1
},
{
"date": "2024-12-05",
"count": 1
},
{
"date": "2024-12-07",
"count": 1
},
{
"date": "2024-12-10",
"count": 3
},
{
"date": "2024-12-12",
"count": 1
},
{
"date": "2024-12-19",
"count": 1
},
{
"date": "2024-12-22",
"count": 2
},
{
"date": "2024-12-24",
"count": 1
},
{
"date": "2024-12-26",
"count": 1
},
{
"date": "2024-12-30",
"count": 1
},
{
"date": "2025-01-03",
"count": 1
},
{
"date": "2025-01-07",
"count": 1
},
{
"date": "2025-01-11",
"count": 1
},
{
"date": "2025-01-12",
"count": 1
},
{
"date": "2025-01-14",
"count": 6
},
{
"date": "2025-01-15",
"count": 4
},
{
"date": "2025-01-16",
"count": 10
},
{
"date": "2025-01-17",
"count": 10
},
{
"date": "2025-01-18",
"count": 4
},
{
"date": "2025-01-19",
"count": 9
},
{
"date": "2025-01-20",
"count": 4
},
{
"date": "2025-01-21",
"count": 3
},
{
"date": "2025-01-22",
"count": 2
},
{
"date": "2025-01-23",
"count": 1
},
{
"date": "2025-01-24",
"count": 2
},
{
"date": "2025-01-25",
"count": 1
},
{
"date": "2025-01-26",
"count": 2
},
{
"date": "2025-01-29",
"count": 2
},
{
"date": "2025-01-30",
"count": 1
},
{
"date": "2025-02-02",
"count": 2
},
{
"date": "2025-02-03",
"count": 1
},
{
"date": "2025-02-04",
"count": 1
},
{
"date": "2025-02-06",
"count": 1
},
{
"date": "2025-02-07",
"count": 1
},
{
"date": "2025-02-09",
"count": 1
},
{
"date": "2025-02-11",
"count": 2
},
{
"date": "2025-02-12",
"count": 3
},
{
"date": "2025-02-14",
"count": 2
},
{
"date": "2025-02-15",
"count": 3
},
{
"date": "2025-02-16",
"count": 2
},
{
"date": "2025-02-17",
"count": 3
},
{
"date": "2025-02-18",
"count": 1
},
{
"date": "2025-02-19",
"count": 2
},
{
"date": "2025-02-20",
"count": 1
},
{
"date": "2025-02-21",
"count": 2
},
{
"date": "2025-02-22",
"count": 1
},
{
"date": "2025-02-25",
"count": 2
},
{
"date": "2025-02-26",
"count": 1
},
{
"date": "2025-02-27",
"count": 1
},
{
"date": "2025-02-28",
"count": 1
},
{
"date": "2025-03-01",
"count": 1
},
{
"date": "2025-03-03",
"count": 1
},
{
"date": "2025-03-06",
"count": 1
},
{
"date": "2025-03-07",
"count": 3
},
{
"date": "2025-03-14",
"count": 2
},
{
"date": "2025-03-17",
"count": 2
},
{
"date": "2025-03-18",
"count": 2
},
{
"date": "2025-03-19",
"count": 1
},
{
"date": "2025-03-21",
"count": 1
},
{
"date": "2025-03-24",
"count": 1
},
{
"date": "2025-03-25",
"count": 1
},
{
"date": "2025-04-01",
"count": 1
},
{
"date": "2025-04-02",
"count": 1
},
{
"date": "2025-04-03",
"count": 2
},
{
"date": "2025-04-04",
"count": 1
},
{
"date": "2025-04-05",
"count": 2
},
{
"date": "2025-04-06",
"count": 1
},
{
"date": "2025-04-07",
"count": 1
},
{
"date": "2025-04-10",
"count": 2
},
{
"date": "2025-04-12",
"count": 2
},
{
"date": "2025-04-13",
"count": 2
},
{
"date": "2025-04-15",
"count": 1
},
{
"date": "2025-04-17",
"count": 1
},
{
"date": "2025-04-21",
"count": 1
},
{
"date": "2025-04-22",
"count": 2
},
{
"date": "2025-04-23",
"count": 1
},
{
"date": "2025-04-24",
"count": 1
},
{
"date": "2025-04-25",
"count": 1
},
{
"date": "2025-04-29",
"count": 1
},
{
"date": "2025-05-07",
"count": 4
},
{
"date": "2025-05-08",
"count": 2
},
{
"date": "2025-05-09",
"count": 2
},
{
"date": "2025-05-10",
"count": 1
},
{
"date": "2025-05-12",
"count": 1
},
{
"date": "2025-05-13",
"count": 1
},
{
"date": "2025-05-14",
"count": 1
},
{
"date": "2025-05-16",
"count": 1
},
{
"date": "2025-05-17",
"count": 1
},
{
"date": "2025-05-20",
"count": 1
},
{
"date": "2025-05-21",
"count": 1
},
{
"date": "2025-05-26",
"count": 1
},
{
"date": "2025-05-27",
"count": 1
},
{
"date": "2025-05-29",
"count": 1
},
{
"date": "2025-05-30",
"count": 1
},
{
"date": "2025-05-31",
"count": 1
},
{
"date": "2025-06-02",
"count": 2
},
{
"date": "2025-06-03",
"count": 2
},
{
"date": "2025-06-04",
"count": 1
},
{
"date": "2025-06-06",
"count": 1
},
{
"date": "2025-06-07",
"count": 1
},
{
"date": "2025-06-09",
"count": 1
},
{
"date": "2025-06-12",
"count": 1
},
{
"date": "2025-06-13",
"count": 2
},
{
"date": "2025-06-14",
"count": 2
},
{
"date": "2025-06-19",
"count": 1
},
{
"date": "2025-06-21",
"count": 1
},
{
"date": "2025-06-28",
"count": 1
},
{
"date": "2025-06-30",
"count": 1
},
{
"date": "2025-07-01",
"count": 2
},
{
"date": "2025-07-03",
"count": 1
},
{
"date": "2025-07-05",
"count": 1
},
{
"date": "2025-07-07",
"count": 1
},
{
"date": "2025-07-08",
"count": 1
},
{
"date": "2025-07-10",
"count": 1
},
{
"date": "2025-07-11",
"count": 2
},
{
"date": "2025-07-12",
"count": 1
},
{
"date": "2025-07-14",
"count": 2
},
{
"date": "2025-07-15",
"count": 2
},
{
"date": "2025-07-16",
"count": 1
},
{
"date": "2025-07-21",
"count": 2
},
{
"date": "2025-07-24",
"count": 3
},
{
"date": "2025-07-27",
"count": 2
},
{
"date": "2025-08-02",
"count": 1
},
{
"date": "2025-08-04",
"count": 1
},
{
"date": "2025-08-05",
"count": 1
},
{
"date": "2025-08-07",
"count": 1
},
{
"date": "2025-08-08",
"count": 1
},
{
"date": "2025-08-11",
"count": 2
},
{
"date": "2025-08-15",
"count": 1
},
{
"date": "2025-08-16",
"count": 1
},
{
"date": "2025-08-17",
"count": 2
},
{
"date": "2025-08-18",
"count": 1
},
{
"date": "2025-08-19",
"count": 1
},
{
"date": "2025-08-21",
"count": 2
},
{
"date": "2025-08-22",
"count": 1
},
{
"date": "2025-08-24",
"count": 2
},
{
"date": "2025-08-29",
"count": 1
},
{
"date": "2025-09-03",
"count": 5
},
{
"date": "2025-09-04",
"count": 3
},
{
"date": "2025-09-06",
"count": 1
},
{
"date": "2025-09-07",
"count": 1
},
{
"date": "2025-09-09",
"count": 3
},
{
"date": "2025-09-11",
"count": 1
},
{
"date": "2025-09-13",
"count": 1
},
{
"date": "2025-09-14",
"count": 1
},
{
"date": "2025-09-15",
"count": 2
},
{
"date": "2025-09-17",
"count": 1
},
{
"date": "2025-09-18",
"count": 2
},
{
"date": "2025-09-20",
"count": 2
},
{
"date": "2025-09-21",
"count": 2
},
{
"date": "2025-09-22",
"count": 1
},
{
"date": "2025-09-24",
"count": 1
},
{
"date": "2025-09-27",
"count": 2
},
{
"date": "2025-09-30",
"count": 1
},
{
"date": "2025-10-02",
"count": 2
},
{
"date": "2025-10-04",
"count": 3
},
{
"date": "2025-10-06",
"count": 1
},
{
"date": "2025-10-07",
"count": 1
},
{
"date": "2025-10-08",
"count": 1
},
{
"date": "2025-10-09",
"count": 15
},
{
"date": "2025-10-10",
"count": 1
},
{
"date": "2025-10-11",
"count": 1
},
{
"date": "2025-10-14",
"count": 1
},
{
"date": "2025-10-24",
"count": 2
},
{
"date": "2025-10-27",
"count": 2
},
{
"date": "2025-10-28",
"count": 1
},
{
"date": "2025-10-29",
"count": 6
},
{
"date": "2025-10-30",
"count": 1
},
{
"date": "2025-11-04",
"count": 3
},
{
"date": "2025-11-05",
"count": 1
},
{
"date": "2025-11-07",
"count": 1
},
{
"date": "2025-11-10",
"count": 1
},
{
"date": "2025-11-13",
"count": 2
},
{
"date": "2025-11-18",
"count": 2
},
{
"date": "2025-11-20",
"count": 1
},
{
"date": "2025-11-21",
"count": 1
},
{
"date": "2025-11-22",
"count": 2
},
{
"date": "2025-11-23",
"count": 2
},
{
"date": "2025-11-25",
"count": 1
},
{
"date": "2025-11-30",
"count": 1
},
{
"date": "2025-12-02",
"count": 2
},
{
"date": "2025-12-03",
"count": 2
},
{
"date": "2025-12-09",
"count": 1
},
{
"date": "2025-12-11",
"count": 2
},
{
"date": "2025-12-12",
"count": 1
},
{
"date": "2025-12-15",
"count": 1
},
{
"date": "2025-12-17",
"count": 2
},
{
"date": "2025-12-19",
"count": 1
},
{
"date": "2025-12-21",
"count": 1
},
{
"date": "2025-12-23",
"count": 1
},
{
"date": "2025-12-30",
"count": 1
},
{
"date": "2026-01-06",
"count": 1
},
{
"date": "2026-01-07",
"count": 3
},
{
"date": "2026-01-08",
"count": 3
},
{
"date": "2026-01-13",
"count": 1
},
{
"date": "2026-01-18",
"count": 1
},
{
"date": "2026-01-19",
"count": 2
},
{
"date": "2026-01-21",
"count": 2
},
{
"date": "2026-01-22",
"count": 1
},
{
"date": "2026-01-23",
"count": 1
},
{
"date": "2026-01-24",
"count": 1
},
{
"date": "2026-01-25",
"count": 2
},
{
"date": "2026-01-26",
"count": 1
},
{
"date": "2026-01-27",
"count": 1
},
{
"date": "2026-01-28",
"count": 1
},
{
"date": "2026-01-29",
"count": 1
},
{
"date": "2026-02-01",
"count": 1
},
{
"date": "2026-02-02",
"count": 1
},
{
"date": "2026-02-04",
"count": 2
},
{
"date": "2026-02-05",
"count": 3
},
{
"date": "2026-02-06",
"count": 1
},
{
"date": "2026-02-07",
"count": 1
},
{
"date": "2026-02-10",
"count": 1
},
{
"date": "2026-02-12",
"count": 1
},
{
"date": "2026-02-14",
"count": 1
},
{
"date": "2026-02-15",
"count": 1
},
{
"date": "2026-02-18",
"count": 2
},
{
"date": "2026-02-20",
"count": 1
},
{
"date": "2026-02-23",
"count": 1
},
{
"date": "2026-02-26",
"count": 3
},
{
"date": "2026-02-28",
"count": 1
},
{
"date": "2026-03-01",
"count": 1
},
{
"date": "2026-03-02",
"count": 1
},
{
"date": "2026-03-03",
"count": 1
},
{
"date": "2026-03-04",
"count": 3
},
{
"date": "2026-03-06",
"count": 1
},
{
"date": "2026-03-08",
"count": 1
},
{
"date": "2026-03-10",
"count": 2
},
{
"date": "2026-03-11",
"count": 1
},
{
"date": "2026-03-12",
"count": 1
},
{
"date": "2026-03-14",
"count": 1
},
{
"date": "2026-03-16",
"count": 3
},
{
"date": "2026-03-18",
"count": 1
},
{
"date": "2026-03-22",
"count": 1
},
{
"date": "2026-03-23",
"count": 3
},
{
"date": "2026-03-25",
"count": 1
},
{
"date": "2026-03-28",
"count": 1
},
{
"date": "2026-04-01",
"count": 2
},
{
"date": "2026-04-02",
"count": 1
},
{
"date": "2026-04-03",
"count": 1
},
{
"date": "2026-04-04",
"count": 1
},
{
"date": "2026-04-08",
"count": 1
},
{
"date": "2026-04-09",
"count": 1
},
{
"date": "2026-04-10",
"count": 1
},
{
"date": "2026-04-14",
"count": 2
},
{
"date": "2026-04-15",
"count": 1
},
{
"date": "2026-04-17",
"count": 1
},
{
"date": "2026-04-18",
"count": 1
},
{
"date": "2026-04-19",
"count": 1
},
{
"date": "2026-04-23",
"count": 3
},
{
"date": "2026-04-24",
"count": 2
},
{
"date": "2026-04-25",
"count": 3
},
{
"date": "2026-04-26",
"count": 4
},
{
"date": "2026-04-27",
"count": 1
},
{
"date": "2026-04-28",
"count": 2
},
{
"date": "2026-04-30",
"count": 1
},
{
"date": "2026-05-01",
"count": 1
},
{
"date": "2026-05-05",
"count": 1
},
{
"date": "2026-05-10",
"count": 1
},
{
"date": "2026-05-11",
"count": 1
},
{
"date": "2026-05-14",
"count": 2
},
{
"date": "2026-05-16",
"count": 2
},
{
"date": "2026-05-17",
"count": 1
},
{
"date": "2026-05-18",
"count": 2
},
{
"date": "2026-05-19",
"count": 1
},
{
"date": "2026-05-20",
"count": 2
},
{
"date": "2026-05-21",
"count": 2
},
{
"date": "2026-05-23",
"count": 1
},
{
"date": "2026-05-24",
"count": 1
},
{
"date": "2026-05-25",
"count": 1
},
{
"date": "2026-05-27",
"count": 2
},
{
"date": "2026-05-28",
"count": 2
},
{
"date": "2026-05-30",
"count": 1
},
{
"date": "2026-06-02",
"count": 3
},
{
"date": "2026-06-04",
"count": 1
},
{
"date": "2026-06-06",
"count": 1
},
{
"date": "2026-06-07",
"count": 1
},
{
"date": "2026-06-10",
"count": 1
},
{
"date": "2026-06-15",
"count": 3
},
{
"date": "2026-06-17",
"count": 1
},
{
"date": "2026-06-19",
"count": 1
},
{
"date": "2026-06-20",
"count": 1
},
{
"date": "2026-06-22",
"count": 2
},
{
"date": "2026-06-23",
"count": 2
},
{
"date": "2026-06-25",
"count": 3
},
{
"date": "2026-06-28",
"count": 2
},
{
"date": "2026-06-30",
"count": 3
},
{
"date": "2026-07-02",
"count": 4
},
{
"date": "2026-07-03",
"count": 1
},
{
"date": "2026-07-05",
"count": 2
},
{
"date": "2026-07-06",
"count": 1
},
{
"date": "2026-07-07",
"count": 1
},
{
"date": "2026-07-10",
"count": 1
},
{
"date": "2026-07-11",
"count": 1
},
{
"date": "2026-07-13",
"count": 3
},
{
"date": "2026-07-14",
"count": 2
},
{
"date": "2026-07-15",
"count": 1
},
{
"date": "2026-07-17",
"count": 2
},
{
"date": "2026-07-18",
"count": 2
},
{
"date": "2026-07-20",
"count": 1
}
],
"complete": false,
"collected": 1000,
"total_forks": 5285
},
"star_history": {
"days": [
{
"date": "2025-07-18",
"count": 2
},
{
"date": "2025-07-20",
"count": 3
},
{
"date": "2025-07-21",
"count": 2
},
{
"date": "2025-07-23",
"count": 1
},
{
"date": "2025-07-24",
"count": 2
},
{
"date": "2025-07-25",
"count": 2
},
{
"date": "2025-07-26",
"count": 2
},
{
"date": "2025-07-28",
"count": 6
},
{
"date": "2025-07-29",
"count": 2
},
{
"date": "2025-07-30",
"count": 1
},
{
"date": "2025-07-31",
"count": 3
},
{
"date": "2025-08-01",
"count": 2
},
{
"date": "2025-08-02",
"count": 5
},
{
"date": "2025-08-04",
"count": 10
},
{
"date": "2025-08-05",
"count": 4
},
{
"date": "2025-08-06",
"count": 2
},
{
"date": "2025-08-07",
"count": 7
},
{
"date": "2025-08-08",
"count": 2
},
{
"date": "2025-08-09",
"count": 3
},
{
"date": "2025-08-10",
"count": 3
},
{
"date": "2025-08-11",
"count": 5
},
{
"date": "2025-08-12",
"count": 1
},
{
"date": "2025-08-13",
"count": 2
},
{
"date": "2025-08-14",
"count": 10
},
{
"date": "2025-08-15",
"count": 1
},
{
"date": "2025-08-16",
"count": 3
},
{
"date": "2025-08-17",
"count": 5
},
{
"date": "2025-08-18",
"count": 4
},
{
"date": "2025-08-19",
"count": 5
},
{
"date": "2025-08-20",
"count": 1
},
{
"date": "2025-08-21",
"count": 3
},
{
"date": "2025-08-22",
"count": 2
},
{
"date": "2025-08-23",
"count": 4
},
{
"date": "2025-08-24",
"count": 3
},
{
"date": "2025-08-25",
"count": 2
},
{
"date": "2025-08-26",
"count": 3
},
{
"date": "2025-08-29",
"count": 3
},
{
"date": "2025-08-31",
"count": 5
},
{
"date": "2025-09-01",
"count": 5
},
{
"date": "2025-09-02",
"count": 3
},
{
"date": "2025-09-03",
"count": 17
},
{
"date": "2025-09-04",
"count": 9
},
{
"date": "2025-09-05",
"count": 7
},
{
"date": "2025-09-06",
"count": 5
},
{
"date": "2025-09-07",
"count": 2
},
{
"date": "2025-09-09",
"count": 4
},
{
"date": "2025-09-10",
"count": 2
},
{
"date": "2025-09-11",
"count": 4
},
{
"date": "2025-09-12",
"count": 1
},
{
"date": "2025-09-13",
"count": 1
},
{
"date": "2025-09-14",
"count": 2
},
{
"date": "2025-09-15",
"count": 5
},
{
"date": "2025-09-16",
"count": 1
},
{
"date": "2025-09-17",
"count": 3
},
{
"date": "2025-09-18",
"count": 4
},
{
"date": "2025-09-19",
"count": 4
},
{
"date": "2025-09-20",
"count": 6
},
{
"date": "2025-09-21",
"count": 3
},
{
"date": "2025-09-22",
"count": 1
},
{
"date": "2025-09-23",
"count": 1
},
{
"date": "2025-09-24",
"count": 1
},
{
"date": "2025-09-25",
"count": 1
},
{
"date": "2025-09-26",
"count": 2
},
{
"date": "2025-09-27",
"count": 3
},
{
"date": "2025-09-28",
"count": 3
},
{
"date": "2025-09-29",
"count": 2
},
{
"date": "2025-09-30",
"count": 1
},
{
"date": "2025-10-01",
"count": 2
},
{
"date": "2025-10-02",
"count": 3
},
{
"date": "2025-10-04",
"count": 2
},
{
"date": "2025-10-05",
"count": 2
},
{
"date": "2025-10-06",
"count": 7
},
{
"date": "2025-10-07",
"count": 1
},
{
"date": "2025-10-08",
"count": 4
},
{
"date": "2025-10-09",
"count": 5
},
{
"date": "2025-10-10",
"count": 1
},
{
"date": "2025-10-11",
"count": 2
},
{
"date": "2025-10-12",
"count": 1
},
{
"date": "2025-10-13",
"count": 3
},
{
"date": "2025-10-14",
"count": 1
},
{
"date": "2025-10-15",
"count": 2
},
{
"date": "2025-10-16",
"count": 1
},
{
"date": "2025-10-17",
"count": 2
},
{
"date": "2025-10-18",
"count": 4
},
{
"date": "2025-10-19",
"count": 5
},
{
"date": "2025-10-20",
"count": 2
},
{
"date": "2025-10-21",
"count": 5
},
{
"date": "2025-10-22",
"count": 2
},
{
"date": "2025-10-23",
"count": 2
},
{
"date": "2025-10-24",
"count": 3
},
{
"date": "2025-10-25",
"count": 1
},
{
"date": "2025-10-26",
"count": 3
},
{
"date": "2025-10-27",
"count": 1
},
{
"date": "2025-10-28",
"count": 2
},
{
"date": "2025-10-29",
"count": 4
},
{
"date": "2025-10-30",
"count": 4
},
{
"date": "2025-10-31",
"count": 3
},
{
"date": "2025-11-01",
"count": 2
},
{
"date": "2025-11-03",
"count": 3
},
{
"date": "2025-11-04",
"count": 2
},
{
"date": "2025-11-06",
"count": 3
},
{
"date": "2025-11-07",
"count": 3
},
{
"date": "2025-11-08",
"count": 1
},
{
"date": "2025-11-11",
"count": 4
},
{
"date": "2025-11-12",
"count": 1
},
{
"date": "2025-11-13",
"count": 1
},
{
"date": "2025-11-14",
"count": 3
},
{
"date": "2025-11-15",
"count": 5
},
{
"date": "2025-11-16",
"count": 3
},
{
"date": "2025-11-17",
"count": 2
},
{
"date": "2025-11-19",
"count": 2
},
{
"date": "2025-11-20",
"count": 4
},
{
"date": "2025-11-22",
"count": 6
},
{
"date": "2025-11-24",
"count": 1
},
{
"date": "2025-11-25",
"count": 1
},
{
"date": "2025-11-26",
"count": 1
},
{
"date": "2025-11-28",
"count": 4
},
{
"date": "2025-11-30",
"count": 3
},
{
"date": "2025-12-01",
"count": 2
},
{
"date": "2025-12-02",
"count": 2
},
{
"date": "2025-12-03",
"count": 1
},
{
"date": "2025-12-04",
"count": 3
},
{
"date": "2025-12-05",
"count": 1
},
{
"date": "2025-12-06",
"count": 1
},
{
"date": "2025-12-07",
"count": 3
},
{
"date": "2025-12-08",
"count": 8
},
{
"date": "2025-12-09",
"count": 3
},
{
"date": "2025-12-10",
"count": 2
},
{
"date": "2025-12-11",
"count": 4
},
{
"date": "2025-12-12",
"count": 2
},
{
"date": "2025-12-13",
"count": 1
},
{
"date": "2025-12-16",
"count": 4
},
{
"date": "2025-12-17",
"count": 3
},
{
"date": "2025-12-18",
"count": 2
},
{
"date": "2025-12-19",
"count": 1
},
{
"date": "2025-12-20",
"count": 1
},
{
"date": "2025-12-21",
"count": 3
},
{
"date": "2025-12-22",
"count": 2
},
{
"date": "2025-12-23",
"count": 4
},
{
"date": "2025-12-24",
"count": 2
},
{
"date": "2025-12-25",
"count": 3
},
{
"date": "2025-12-26",
"count": 3
},
{
"date": "2025-12-27",
"count": 2
},
{
"date": "2025-12-28",
"count": 2
},
{
"date": "2025-12-29",
"count": 1
},
{
"date": "2025-12-30",
"count": 2
},
{
"date": "2025-12-31",
"count": 2
},
{
"date": "2026-01-01",
"count": 2
},
{
"date": "2026-01-02",
"count": 2
},
{
"date": "2026-01-03",
"count": 2
},
{
"date": "2026-01-04",
"count": 2
},
{
"date": "2026-01-05",
"count": 1
},
{
"date": "2026-01-06",
"count": 2
},
{
"date": "2026-01-07",
"count": 2
},
{
"date": "2026-01-08",
"count": 3
},
{
"date": "2026-01-09",
"count": 2
},
{
"date": "2026-01-11",
"count": 1
},
{
"date": "2026-01-12",
"count": 3
},
{
"date": "2026-01-13",
"count": 5
},
{
"date": "2026-01-14",
"count": 2
},
{
"date": "2026-01-15",
"count": 2
},
{
"date": "2026-01-17",
"count": 2
},
{
"date": "2026-01-18",
"count": 3
},
{
"date": "2026-01-19",
"count": 1
},
{
"date": "2026-01-20",
"count": 4
},
{
"date": "2026-01-21",
"count": 2
},
{
"date": "2026-01-22",
"count": 1
},
{
"date": "2026-01-23",
"count": 4
},
{
"date": "2026-01-24",
"count": 1
},
{
"date": "2026-01-25",
"count": 2
},
{
"date": "2026-01-27",
"count": 6
},
{
"date": "2026-01-28",
"count": 4
},
{
"date": "2026-01-29",
"count": 5
},
{
"date": "2026-01-30",
"count": 4
},
{
"date": "2026-01-31",
"count": 4
},
{
"date": "2026-02-01",
"count": 2
},
{
"date": "2026-02-02",
"count": 4
},
{
"date": "2026-02-04",
"count": 2
},
{
"date": "2026-02-05",
"count": 16
},
{
"date": "2026-02-06",
"count": 3
},
{
"date": "2026-02-07",
"count": 2
},
{
"date": "2026-02-08",
"count": 3
},
{
"date": "2026-02-09",
"count": 4
},
{
"date": "2026-02-10",
"count": 4
},
{
"date": "2026-02-11",
"count": 2
},
{
"date": "2026-02-12",
"count": 2
},
{
"date": "2026-02-14",
"count": 1
},
{
"date": "2026-02-15",
"count": 3
},
{
"date": "2026-02-16",
"count": 4
},
{
"date": "2026-02-17",
"count": 1
},
{
"date": "2026-02-18",
"count": 3
},
{
"date": "2026-02-19",
"count": 2
},
{
"date": "2026-02-21",
"count": 3
},
{
"date": "2026-02-22",
"count": 2
},
{
"date": "2026-02-23",
"count": 2
},
{
"date": "2026-02-24",
"count": 2
},
{
"date": "2026-02-25",
"count": 1
},
{
"date": "2026-02-26",
"count": 5
},
{
"date": "2026-02-27",
"count": 4
},
{
"date": "2026-02-28",
"count": 3
},
{
"date": "2026-03-01",
"count": 1
},
{
"date": "2026-03-02",
"count": 4
},
{
"date": "2026-03-03",
"count": 4
},
{
"date": "2026-03-04",
"count": 3
},
{
"date": "2026-03-05",
"count": 2
},
{
"date": "2026-03-06",
"count": 5
},
{
"date": "2026-03-07",
"count": 1
},
{
"date": "2026-03-08",
"count": 2
},
{
"date": "2026-03-09",
"count": 3
},
{
"date": "2026-03-10",
"count": 7
},
{
"date": "2026-03-11",
"count": 2
},
{
"date": "2026-03-12",
"count": 1
},
{
"date": "2026-03-13",
"count": 6
},
{
"date": "2026-03-15",
"count": 1
},
{
"date": "2026-03-16",
"count": 3
},
{
"date": "2026-03-18",
"count": 2
},
{
"date": "2026-03-19",
"count": 5
},
{
"date": "2026-03-20",
"count": 1
},
{
"date": "2026-03-21",
"count": 3
},
{
"date": "2026-03-22",
"count": 1
},
{
"date": "2026-03-23",
"count": 4
},
{
"date": "2026-03-24",
"count": 2
},
{
"date": "2026-03-25",
"count": 1
},
{
"date": "2026-03-26",
"count": 4
},
{
"date": "2026-03-27",
"count": 1
},
{
"date": "2026-03-28",
"count": 4
},
{
"date": "2026-03-29",
"count": 3
},
{
"date": "2026-03-30",
"count": 1
},
{
"date": "2026-03-31",
"count": 3
},
{
"date": "2026-04-01",
"count": 4
},
{
"date": "2026-04-02",
"count": 4
},
{
"date": "2026-04-03",
"count": 3
},
{
"date": "2026-04-04",
"count": 4
},
{
"date": "2026-04-05",
"count": 2
},
{
"date": "2026-04-06",
"count": 5
},
{
"date": "2026-04-07",
"count": 4
},
{
"date": "2026-04-08",
"count": 3
},
{
"date": "2026-04-09",
"count": 4
},
{
"date": "2026-04-10",
"count": 1
},
{
"date": "2026-04-11",
"count": 3
},
{
"date": "2026-04-12",
"count": 3
},
{
"date": "2026-04-13",
"count": 5
},
{
"date": "2026-04-14",
"count": 3
},
{
"date": "2026-04-15",
"count": 3
},
{
"date": "2026-04-16",
"count": 3
},
{
"date": "2026-04-17",
"count": 4
},
{
"date": "2026-04-18",
"count": 6
},
{
"date": "2026-04-19",
"count": 6
},
{
"date": "2026-04-20",
"count": 4
},
{
"date": "2026-04-21",
"count": 2
},
{
"date": "2026-04-22",
"count": 2
},
{
"date": "2026-04-23",
"count": 2
},
{
"date": "2026-04-24",
"count": 2
},
{
"date": "2026-04-25",
"count": 3
},
{
"date": "2026-04-26",
"count": 4
},
{
"date": "2026-04-27",
"count": 4
},
{
"date": "2026-04-28",
"count": 3
},
{
"date": "2026-04-29",
"count": 4
},
{
"date": "2026-04-30",
"count": 3
},
{
"date": "2026-05-01",
"count": 3
},
{
"date": "2026-05-03",
"count": 4
},
{
"date": "2026-05-04",
"count": 3
},
{
"date": "2026-05-05",
"count": 3
},
{
"date": "2026-05-06",
"count": 6
},
{
"date": "2026-05-07",
"count": 4
},
{
"date": "2026-05-08",
"count": 3
},
{
"date": "2026-05-09",
"count": 4
},
{
"date": "2026-05-10",
"count": 4
},
{
"date": "2026-05-11",
"count": 2
},
{
"date": "2026-05-12",
"count": 5
},
{
"date": "2026-05-13",
"count": 5
},
{
"date": "2026-05-14",
"count": 2
},
{
"date": "2026-05-15",
"count": 1
},
{
"date": "2026-05-16",
"count": 4
},
{
"date": "2026-05-17",
"count": 1
},
{
"date": "2026-05-18",
"count": 1
},
{
"date": "2026-05-19",
"count": 2
},
{
"date": "2026-05-20",
"count": 2
},
{
"date": "2026-05-21",
"count": 2
},
{
"date": "2026-05-22",
"count": 2
},
{
"date": "2026-05-23",
"count": 1
},
{
"date": "2026-05-25",
"count": 5
},
{
"date": "2026-05-26",
"count": 1
},
{
"date": "2026-05-27",
"count": 1
},
{
"date": "2026-05-28",
"count": 3
},
{
"date": "2026-05-29",
"count": 3
},
{
"date": "2026-05-30",
"count": 3
},
{
"date": "2026-05-31",
"count": 3
},
{
"date": "2026-06-01",
"count": 3
},
{
"date": "2026-06-02",
"count": 3
},
{
"date": "2026-06-03",
"count": 2
},
{
"date": "2026-06-04",
"count": 2
},
{
"date": "2026-06-06",
"count": 5
},
{
"date": "2026-06-08",
"count": 4
},
{
"date": "2026-06-09",
"count": 1
},
{
"date": "2026-06-10",
"count": 6
},
{
"date": "2026-06-11",
"count": 4
},
{
"date": "2026-06-12",
"count": 7
},
{
"date": "2026-06-13",
"count": 1
},
{
"date": "2026-06-14",
"count": 1
},
{
"date": "2026-06-15",
"count": 1
},
{
"date": "2026-06-16",
"count": 4
},
{
"date": "2026-06-17",
"count": 9
},
{
"date": "2026-06-19",
"count": 2
},
{
"date": "2026-06-20",
"count": 2
},
{
"date": "2026-06-21",
"count": 2
},
{
"date": "2026-06-22",
"count": 5
},
{
"date": "2026-06-24",
"count": 7
},
{
"date": "2026-06-25",
"count": 2
},
{
"date": "2026-06-26",
"count": 2
},
{
"date": "2026-06-27",
"count": 2
},
{
"date": "2026-06-28",
"count": 1
},
{
"date": "2026-06-29",
"count": 3
},
{
"date": "2026-06-30",
"count": 2
},
{
"date": "2026-07-01",
"count": 2
},
{
"date": "2026-07-02",
"count": 2
},
{
"date": "2026-07-03",
"count": 3
},
{
"date": "2026-07-04",
"count": 5
},
{
"date": "2026-07-05",
"count": 3
},
{
"date": "2026-07-06",
"count": 2
},
{
"date": "2026-07-07",
"count": 2
},
{
"date": "2026-07-08",
"count": 1
},
{
"date": "2026-07-09",
"count": 1
},
{
"date": "2026-07-10",
"count": 4
},
{
"date": "2026-07-11",
"count": 1
},
{
"date": "2026-07-12",
"count": 1
},
{
"date": "2026-07-13",
"count": 6
},
{
"date": "2026-07-14",
"count": 5
},
{
"date": "2026-07-15",
"count": 2
},
{
"date": "2026-07-16",
"count": 5
},
{
"date": "2026-07-17",
"count": 4
},
{
"date": "2026-07-18",
"count": 3
},
{
"date": "2026-07-19",
"count": 3
},
{
"date": "2026-07-20",
"count": 3
},
{
"date": "2026-07-21",
"count": 5
}
],
"complete": false,
"collected": 1000,
"total_stars": 15570
},
"open_issues_and_prs": 125
},
"ai_readiness": {
"has_nix": false,
"example_dirs": [
"examples",
"recipes"
],
"has_llms_txt": false,
"has_dockerfile": false,
"has_mcp_signal": false,
"bootstrap_files": [],
"api_schema_files": [],
"has_devcontainer": false,
"typecheck_configs": [
"packages/admin-sdk/tsconfig.json",
"packages/cli/templates/plugin/packages/dashboard/tsconfig.json",
"packages/cli/tsconfig.json",
"packages/create-spree-app/tsconfig.json",
"packages/dashboard-core/tsconfig.json",
"packages/dashboard-plugin-example/tsconfig.json",
"packages/dashboard-starter/tsconfig.json",
"packages/dashboard-ui/tsconfig.json",
"packages/dashboard/tsconfig.json",
"packages/sdk-core/tsconfig.json",
"packages/sdk/tsconfig.json"
],
"toolchain_manifests": [],
"largest_source_bytes": 122570,
"source_files_sampled": 3285,
"oversized_source_files": 7,
"agent_instruction_files": [
"AGENTS.md",
"CLAUDE.md"
],
"agent_instruction_max_bytes": 51941
},
"dependencies": {
"manifests": [
"package.json",
"spree/Gemfile"
],
"advisories": {
"error": null,
"scope": "repository_graph",
"source": "osv",
"findings": [
{
"name": "brace-expansion",
"direct": false,
"version": "5.0.6",
"severity": "high",
"ecosystem": "npm",
"cvss_score": 7.5,
"advisory_ids": [
"GHSA-3jxr-9vmj-r5cp"
],
"fixed_version": "5.0.7",
"advisory_count": 1,
"oldest_advisory_days": 1
},
{
"name": "fast-uri",
"direct": false,
"version": "3.1.2",
"severity": "high",
"ecosystem": "npm",
"cvss_score": 7.5,
"advisory_ids": [
"GHSA-4c8g-83qw-93j6",
"GHSA-v2hh-gcrm-f6hx"
],
"fixed_version": "4.1.1",
"advisory_count": 2,
"oldest_advisory_days": 0
},
{
"name": "js-yaml",
"direct": false,
"version": "4.2.0",
"severity": "high",
"ecosystem": "npm",
"cvss_score": 7.5,
"advisory_ids": [
"GHSA-52cp-r559-cp3m"
],
"fixed_version": "4.3.0",
"advisory_count": 1,
"oldest_advisory_days": 1
},
{
"name": "@hono/node-server",
"direct": false,
"version": "1.19.14",
"severity": "moderate",
"ecosystem": "npm",
"cvss_score": 5.9,
"advisory_ids": [
"GHSA-frvp-7c67-39w9"
],
"fixed_version": "2.0.5",
"advisory_count": 1,
"oldest_advisory_days": 0
},
{
"name": "hono",
"direct": false,
"version": "4.12.25",
"severity": "moderate",
"ecosystem": "npm",
"cvss_score": 6.5,
"advisory_ids": [
"GHSA-hvrm-45r6-mjfj",
"GHSA-w62v-xxxg-mg59",
"GHSA-xgm2-5f3f-mvvc"
],
"fixed_version": "4.12.27",
"advisory_count": 3,
"oldest_advisory_days": 0
},
{
"name": "@babel/core",
"direct": false,
"version": "7.29.0",
"severity": "low",
"ecosystem": "npm",
"cvss_score": 3.2,
"advisory_ids": [
"GHSA-4x5r-pxfx-6jf8"
],
"fixed_version": "8.0.0-rc.6",
"advisory_count": 1,
"oldest_advisory_days": 36
},
{
"name": "body-parser",
"direct": false,
"version": "2.2.2",
"severity": "low",
"ecosystem": "npm",
"cvss_score": 3.7,
"advisory_ids": [
"GHSA-v422-hmwv-36x6"
],
"fixed_version": "2.3.0",
"advisory_count": 1,
"oldest_advisory_days": 1
}
],
"collected": true,
"malicious": [],
"truncated": false,
"by_severity": {
"low": 2,
"high": 3,
"moderate": 2
},
"advisory_count": 10,
"affected_count": 7,
"assessed_count": 809,
"malicious_count": 0,
"assessed_package": null,
"unassessed_count": 133,
"direct_affected_count": 0
},
"ecosystems": [
"npm",
"rubygems"
],
"dependencies": [
{
"name": "@base-ui/react",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^1.4.1"
},
{
"name": "@spree/cli",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "workspace:*"
}
],
"all_dependencies": {
"error": null,
"source": "github-sbom",
"packages": [
{
"name": "@base-ui/react",
"direct": true,
"version": "1.4.1",
"ecosystem": "npm"
},
{
"name": "@base-ui/react",
"direct": true,
"version": "^1.4.1",
"ecosystem": "npm"
},
{
"name": "@babel/code-frame",
"direct": false,
"version": "7.29.0",
"ecosystem": "npm"
},
{
"name": "@babel/compat-data",
"direct": false,
"version": "7.29.3",
"ecosystem": "npm"
},
{
"name": "@babel/core",
"direct": false,
"version": "7.29.0",
"ecosystem": "npm"
},
{
"name": "@babel/generator",
"direct": false,
"version": "7.29.1",
"ecosystem": "npm"
},
{
"name": "@babel/helper-annotate-as-pure",
"direct": false,
"version": "7.27.3",
"ecosystem": "npm"
},
{
"name": "@babel/helper-compilation-targets",
"direct": false,
"version": "7.28.6",
"ecosystem": "npm"
},
{
"name": "@babel/helper-create-class-features-plugin",
"direct": false,
"version": "7.29.3",
"ecosystem": "npm"
},
{
"name": "@babel/helper-globals",
"direct": false,
"version": "7.28.0",
"ecosystem": "npm"
},
{
"name": "@babel/helper-member-expression-to-functions",
"direct": false,
"version": "7.28.5",
"ecosystem": "npm"
},
{
"name": "@babel/helper-module-imports",
"direct": false,
"version": "7.28.6",
"ecosystem": "npm"
},
{
"name": "@babel/helper-module-transforms",
"direct": false,
"version": "7.28.6",
"ecosystem": "npm"
},
{
"name": "@babel/helper-optimise-call-expression",
"direct": false,
"version": "7.27.1",
"ecosystem": "npm"
},
{
"name": "@babel/helper-plugin-utils",
"direct": false,
"version": "7.28.6",
"ecosystem": "npm"
},
{
"name": "@babel/helper-replace-supers",
"direct": false,
"version": "7.28.6",
"ecosystem": "npm"
},
{
"name": "@babel/helper-skip-transparent-expression-wrappers",
"direct": false,
"version": "7.27.1",
"ecosystem": "npm"
},
{
"name": "@babel/helper-string-parser",
"direct": false,
"version": "7.27.1",
"ecosystem": "npm"
},
{
"name": "@babel/helper-validator-identifier",
"direct": false,
"version": "7.28.5",
"ecosystem": "npm"
},
{
"name": "@babel/helper-validator-option",
"direct": false,
"version": "7.27.1",
"ecosystem": "npm"
},
{
"name": "@babel/helpers",
"direct": false,
"version": "7.29.2",
"ecosystem": "npm"
},
{
"name": "@babel/parser",
"direct": false,
"version": "7.29.3",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-syntax-jsx",
"direct": false,
"version": "7.28.6",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-syntax-typescript",
"direct": false,
"version": "7.28.6",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-modules-commonjs",
"direct": false,
"version": "7.28.6",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-typescript",
"direct": false,
"version": "7.28.6",
"ecosystem": "npm"
},
{
"name": "@babel/preset-typescript",
"direct": false,
"version": "7.28.5",
"ecosystem": "npm"
},
{
"name": "@babel/runtime",
"direct": false,
"version": "7.29.2",
"ecosystem": "npm"
},
{
"name": "@babel/template",
"direct": false,
"version": "7.28.6",
"ecosystem": "npm"
},
{
"name": "@babel/traverse",
"direct": false,
"version": "7.29.0",
"ecosystem": "npm"
},
{
"name": "@babel/types",
"direct": false,
"version": "7.29.0",
"ecosystem": "npm"
},
{
"name": "@base-ui/utils",
"direct": false,
"version": "0.2.8",
"ecosystem": "npm"
},
{
"name": "@bcoe/v8-coverage",
"direct": false,
"version": "1.0.2",
"ecosystem": "npm"
},
{
"name": "@biomejs/biome",
"direct": false,
"version": "2.4.14",
"ecosystem": "npm"
},
{
"name": "@biomejs/biome",
"direct": false,
"version": "^2.4.14",
"ecosystem": "npm"
},
{
"name": "@biomejs/cli-darwin-arm64",
"direct": false,
"version": "2.4.14",
"ecosystem": "npm"
},
{
"name": "@biomejs/cli-darwin-x64",
"direct": false,
"version": "2.4.14",
"ecosystem": "npm"
},
{
"name": "@biomejs/cli-linux-arm64",
"direct": false,
"version": "2.4.14",
"ecosystem": "npm"
},
{
"name": "@biomejs/cli-linux-arm64-musl",
"direct": false,
"version": "2.4.14",
"ecosystem": "npm"
},
{
"name": "@biomejs/cli-linux-x64",
"direct": false,
"version": "2.4.14",
"ecosystem": "npm"
},
{
"name": "@biomejs/cli-linux-x64-musl",
"direct": false,
"version": "2.4.14",
"ecosystem": "npm"
},
{
"name": "@biomejs/cli-win32-arm64",
"direct": false,
"version": "2.4.14",
"ecosystem": "npm"
},
{
"name": "@biomejs/cli-win32-x64",
"direct": false,
"version": "2.4.14",
"ecosystem": "npm"
},
{
"name": "@changesets/apply-release-plan",
"direct": false,
"version": "7.1.1",
"ecosystem": "npm"
},
{
"name": "@changesets/assemble-release-plan",
"direct": false,
"version": "6.0.10",
"ecosystem": "npm"
},
{
"name": "@changesets/changelog-git",
"direct": false,
"version": "0.2.1",
"ecosystem": "npm"
},
{
"name": "@changesets/changelog-github",
"direct": false,
"version": "0.7.0",
"ecosystem": "npm"
},
{
"name": "@changesets/changelog-github",
"direct": false,
"version": "^0.7.0",
"ecosystem": "npm"
},
{
"name": "@changesets/cli",
"direct": false,
"version": "2.31.0",
"ecosystem": "npm"
},
{
"name": "@changesets/cli",
"direct": false,
"version": "^2.31.0",
"ecosystem": "npm"
},
{
"name": "@changesets/config",
"direct": false,
"version": "3.1.4",
"ecosystem": "npm"
},
{
"name": "@changesets/errors",
"direct": false,
"version": "0.2.0",
"ecosystem": "npm"
},
{
"name": "@changesets/get-dependents-graph",
"direct": false,
"version": "2.1.4",
"ecosystem": "npm"
},
{
"name": "@changesets/get-github-info",
"direct": false,
"version": "0.8.0",
"ecosystem": "npm"
},
{
"name": "@changesets/get-release-plan",
"direct": false,
"version": "4.0.16",
"ecosystem": "npm"
},
{
"name": "@changesets/get-version-range-type",
"direct": false,
"version": "0.4.0",
"ecosystem": "npm"
},
{
"name": "@changesets/git",
"direct": false,
"version": "3.0.4",
"ecosystem": "npm"
},
{
"name": "@changesets/logger",
"direct": false,
"version": "0.1.1",
"ecosystem": "npm"
},
{
"name": "@changesets/parse",
"direct": false,
"version": "0.4.3",
"ecosystem": "npm"
},
{
"name": "@changesets/pre",
"direct": false,
"version": "2.0.2",
"ecosystem": "npm"
},
{
"name": "@changesets/read",
"direct": false,
"version": "0.6.7",
"ecosystem": "npm"
},
{
"name": "@changesets/should-skip-package",
"direct": false,
"version": "0.1.2",
"ecosystem": "npm"
},
{
"name": "@changesets/types",
"direct": false,
"version": "4.1.0",
"ecosystem": "npm"
},
{
"name": "@changesets/types",
"direct": false,
"version": "6.1.0",
"ecosystem": "npm"
},
{
"name": "@changesets/write",
"direct": false,
"version": "0.4.0",
"ecosystem": "npm"
},
{
"name": "@clack/core",
"direct": false,
"version": "1.3.0",
"ecosystem": "npm"
},
{
"name": "@clack/prompts",
"direct": false,
"version": "1.3.0",
"ecosystem": "npm"
},
{
"name": "@clack/prompts",
"direct": false,
"version": "^1.3.0",
"ecosystem": "npm"
},
{
"name": "@date-fns/tz",
"direct": false,
"version": "1.4.1",
"ecosystem": "npm"
},
{
"name": "@dnd-kit/accessibility",
"direct": false,
"version": "3.1.1",
"ecosystem": "npm"
},
{
"name": "@dnd-kit/core",
"direct": false,
"version": "6.3.1",
"ecosystem": "npm"
},
{
"name": "@dnd-kit/core",
"direct": false,
"version": "^6.3.1",
"ecosystem": "npm"
},
{
"name": "@dnd-kit/sortable",
"direct": false,
"version": "10.0.0",
"ecosystem": "npm"
},
{
"name": "@dnd-kit/sortable",
"direct": false,
"version": "^10.0.0",
"ecosystem": "npm"
},
{
"name": "@dnd-kit/utilities",
"direct": false,
"version": "3.2.2",
"ecosystem": "npm"
},
{
"name": "@dnd-kit/utilities",
"direct": false,
"version": "^3.2.2",
"ecosystem": "npm"
},
{
"name": "@dotenvx/dotenvx",
"direct": false,
"version": "1.65.0",
"ecosystem": "npm"
},
{
"name": "@ecies/ciphers",
"direct": false,
"version": "0.2.6",
"ecosystem": "npm"
},
{
"name": "@emnapi/core",
"direct": false,
"version": "1.10.0",
"ecosystem": "npm"
},
{
"name": "@emnapi/runtime",
"direct": false,
"version": "1.10.0",
"ecosystem": "npm"
},
{
"name": "@emnapi/wasi-threads",
"direct": false,
"version": "1.2.1",
"ecosystem": "npm"
},
{
"name": "@esbuild/aix-ppc64",
"direct": false,
"version": "0.28.1",
"ecosystem": "npm"
},
{
"name": "@esbuild/android-arm",
"direct": false,
"version": "0.28.1",
"ecosystem": "npm"
},
{
"name": "@esbuild/android-arm64",
"direct": false,
"version": "0.28.1",
"ecosystem": "npm"
},
{
"name": "@esbuild/android-x64",
"direct": false,
"version": "0.28.1",
"ecosystem": "npm"
},
{
"name": "@esbuild/darwin-arm64",
"direct": false,
"version": "0.28.1",
"ecosystem": "npm"
},
{
"name": "@esbuild/darwin-x64",
"direct": false,
"version": "0.28.1",
"ecosystem": "npm"
},
{
"name": "@esbuild/freebsd-arm64",
"direct": false,
"version": "0.28.1",
"ecosystem": "npm"
},
{
"name": "@esbuild/freebsd-x64",
"direct": false,
"version": "0.28.1",
"ecosystem": "npm"
},
{
"name": "@esbuild/linux-arm",
"direct": false,
"version": "0.28.1",
"ecosystem": "npm"
},
{
"name": "@esbuild/linux-arm64",
"direct": false,
"version": "0.28.1",
"ecosystem": "npm"
},
{
"name": "@esbuild/linux-ia32",
"direct": false,
"version": "0.28.1",
"ecosystem": "npm"
},
{
"name": "@esbuild/linux-loong64",
"direct": false,
"version": "0.28.1",
"ecosystem": "npm"
},
{
"name": "@esbuild/linux-mips64el",
"direct": false,
"version": "0.28.1",
"ecosystem": "npm"
},
{
"name": "@esbuild/linux-ppc64",
"direct": false,
"version": "0.28.1",
"ecosystem": "npm"
},
{
"name": "@esbuild/linux-riscv64",
"direct": false,
"version": "0.28.1",
"ecosystem": "npm"
},
{
"name": "@esbuild/linux-s390x",
"direct": false,
"version": "0.28.1",
"ecosystem": "npm"
},
{
"name": "@esbuild/linux-x64",
"direct": false,
"version": "0.28.1",
"ecosystem": "npm"
},
{
"name": "@esbuild/netbsd-arm64",
"direct": false,
"version": "0.28.1",
"ecosystem": "npm"
},
{
"name": "@esbuild/netbsd-x64",
"direct": false,
"version": "0.28.1",
"ecosystem": "npm"
},
{
"name": "@esbuild/openbsd-arm64",
"direct": false,
"version": "0.28.1",
"ecosystem": "npm"
},
{
"name": "@esbuild/openbsd-x64",
"direct": false,
"version": "0.28.1",
"ecosystem": "npm"
},
{
"name": "@esbuild/openharmony-arm64",
"direct": false,
"version": "0.28.1",
"ecosystem": "npm"
},
{
"name": "@esbuild/sunos-x64",
"direct": false,
"version": "0.28.1",
"ecosystem": "npm"
},
{
"name": "@esbuild/win32-arm64",
"direct": false,
"version": "0.28.1",
"ecosystem": "npm"
},
{
"name": "@esbuild/win32-ia32",
"direct": false,
"version": "0.28.1",
"ecosystem": "npm"
},
{
"name": "@esbuild/win32-x64",
"direct": false,
"version": "0.28.1",
"ecosystem": "npm"
},
{
"name": "@floating-ui/core",
"direct": false,
"version": "1.7.5",
"ecosystem": "npm"
},
{
"name": "@floating-ui/dom",
"direct": false,
"version": "1.7.6",
"ecosystem": "npm"
},
{
"name": "@floating-ui/react-dom",
"direct": false,
"version": "2.1.8",
"ecosystem": "npm"
},
{
"name": "@floating-ui/utils",
"direct": false,
"version": "0.2.11",
"ecosystem": "npm"
},
{
"name": "@fontsource-variable/geist",
"direct": false,
"version": "5.2.8",
"ecosystem": "npm"
},
{
"name": "@fontsource-variable/geist",
"direct": false,
"version": "^5.2.8",
"ecosystem": "npm"
},
{
"name": "@fontsource-variable/geist-mono",
"direct": false,
"version": "5.2.7",
"ecosystem": "npm"
},
{
"name": "@fontsource-variable/geist-mono",
"direct": false,
"version": "^5.2.7",
"ecosystem": "npm"
},
{
"name": "@hono/node-server",
"direct": false,
"version": "1.19.14",
"ecosystem": "npm"
},
{
"name": "@hookform/resolvers",
"direct": false,
"version": "5.2.2",
"ecosystem": "npm"
},
{
"name": "@hookform/resolvers",
"direct": false,
"version": "^5.2.2",
"ecosystem": "npm"
},
{
"name": "@inquirer/ansi",
"direct": false,
"version": "2.0.5",
"ecosystem": "npm"
},
{
"name": "@inquirer/confirm",
"direct": false,
"version": "6.0.12",
"ecosystem": "npm"
},
{
"name": "@inquirer/core",
"direct": false,
"version": "11.1.9",
"ecosystem": "npm"
},
{
"name": "@inquirer/external-editor",
"direct": false,
"version": "1.0.3",
"ecosystem": "npm"
},
{
"name": "@inquirer/figures",
"direct": false,
"version": "2.0.5",
"ecosystem": "npm"
},
{
"name": "@inquirer/type",
"direct": false,
"version": "4.0.5",
"ecosystem": "npm"
},
{
"name": "@jridgewell/gen-mapping",
"direct": false,
"version": "0.3.13",
"ecosystem": "npm"
},
{
"name": "@jridgewell/remapping",
"direct": false,
"version": "2.3.5",
"ecosystem": "npm"
},
{
"name": "@jridgewell/resolve-uri",
"direct": false,
"version": "3.1.2",
"ecosystem": "npm"
},
{
"name": "@jridgewell/sourcemap-codec",
"direct": false,
"version": "1.5.5",
"ecosystem": "npm"
},
{
"name": "@jridgewell/trace-mapping",
"direct": false,
"version": "0.3.31",
"ecosystem": "npm"
},
{
"name": "@manypkg/find-root",
"direct": false,
"version": "1.1.0",
"ecosystem": "npm"
},
{
"name": "@manypkg/get-packages",
"direct": false,
"version": "1.1.3",
"ecosystem": "npm"
},
{
"name": "@modelcontextprotocol/sdk",
"direct": false,
"version": "1.29.0",
"ecosystem": "npm"
},
{
"name": "@mswjs/interceptors",
"direct": false,
"version": "0.41.8",
"ecosystem": "npm"
},
{
"name": "@napi-rs/wasm-runtime",
"direct": false,
"version": "1.1.4",
"ecosystem": "npm"
},
{
"name": "@noble/ciphers",
"direct": false,
"version": "1.3.0",
"ecosystem": "npm"
},
{
"name": "@noble/curves",
"direct": false,
"version": "1.9.7",
"ecosystem": "npm"
},
{
"name": "@noble/hashes",
"direct": false,
"version": "1.8.0",
"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": "@open-draft/deferred-promise",
"direct": false,
"version": "2.2.0",
"ecosystem": "npm"
},
{
"name": "@open-draft/deferred-promise",
"direct": false,
"version": "3.0.0",
"ecosystem": "npm"
},
{
"name": "@open-draft/logger",
"direct": false,
"version": "0.3.0",
"ecosystem": "npm"
},
{
"name": "@open-draft/until",
"direct": false,
"version": "2.1.0",
"ecosystem": "npm"
},
{
"name": "@oxc-project/types",
"direct": false,
"version": "0.133.0",
"ecosystem": "npm"
},
{
"name": "@playwright/test",
"direct": false,
"version": "1.59.1",
"ecosystem": "npm"
},
{
"name": "@playwright/test",
"direct": false,
"version": "^1.59.1",
"ecosystem": "npm"
},
{
"name": "@radix-ui/primitive",
"direct": false,
"version": "1.1.3",
"ecosystem": "npm"
},
{
"name": "@radix-ui/react-compose-refs",
"direct": false,
"version": "1.1.2",
"ecosystem": "npm"
},
{
"name": "@radix-ui/react-context",
"direct": false,
"version": "1.1.2",
"ecosystem": "npm"
},
{
"name": "@radix-ui/react-dialog",
"direct": false,
"version": "1.1.15",
"ecosystem": "npm"
},
{
"name": "@radix-ui/react-dismissable-layer",
"direct": false,
"version": "1.1.11",
"ecosystem": "npm"
},
{
"name": "@radix-ui/react-focus-guards",
"direct": false,
"version": "1.1.3",
"ecosystem": "npm"
},
{
"name": "@radix-ui/react-focus-scope",
"direct": false,
"version": "1.1.7",
"ecosystem": "npm"
},
{
"name": "@radix-ui/react-id",
"direct": false,
"version": "1.1.1",
"ecosystem": "npm"
},
{
"name": "@radix-ui/react-portal",
"direct": false,
"version": "1.1.9",
"ecosystem": "npm"
},
{
"name": "@radix-ui/react-presence",
"direct": false,
"version": "1.1.5",
"ecosystem": "npm"
},
{
"name": "@radix-ui/react-primitive",
"direct": false,
"version": "2.1.3",
"ecosystem": "npm"
},
{
"name": "@radix-ui/react-primitive",
"direct": false,
"version": "2.1.4",
"ecosystem": "npm"
},
{
"name": "@radix-ui/react-slot",
"direct": false,
"version": "1.2.3",
"ecosystem": "npm"
},
{
"name": "@radix-ui/react-slot",
"direct": false,
"version": "1.2.4",
"ecosystem": "npm"
},
{
"name": "@radix-ui/react-use-callback-ref",
"direct": false,
"version": "1.1.1",
"ecosystem": "npm"
},
{
"name": "@radix-ui/react-use-controllable-state",
"direct": false,
"version": "1.2.2",
"ecosystem": "npm"
},
{
"name": "@radix-ui/react-use-effect-event",
"direct": false,
"version": "0.0.2",
"ecosystem": "npm"
},
{
"name": "@radix-ui/react-use-escape-keydown",
"direct": false,
"version": "1.1.1",
"ecosystem": "npm"
},
{
"name": "@radix-ui/react-use-layout-effect",
"direct": false,
"version": "1.1.1",
"ecosystem": "npm"
},
{
"name": "@reduxjs/toolkit",
"direct": false,
"version": "2.11.2",
"ecosystem": "npm"
},
{
"name": "@rolldown/binding-android-arm64",
"direct": false,
"version": "1.0.3",
"ecosystem": "npm"
},
{
"name": "@rolldown/binding-darwin-arm64",
"direct": false,
"version": "1.0.3",
"ecosystem": "npm"
},
{
"name": "@rolldown/binding-darwin-x64",
"direct": false,
"version": "1.0.3",
"ecosystem": "npm"
},
{
"name": "@rolldown/binding-freebsd-x64",
"direct": false,
"version": "1.0.3",
"ecosystem": "npm"
},
{
"name": "@rolldown/binding-linux-arm-gnueabihf",
"direct": false,
"version": "1.0.3",
"ecosystem": "npm"
},
{
"name": "@rolldown/binding-linux-arm64-gnu",
"direct": false,
"version": "1.0.3",
"ecosystem": "npm"
},
{
"name": "@rolldown/binding-linux-arm64-musl",
"direct": false,
"version": "1.0.3",
"ecosystem": "npm"
},
{
"name": "@rolldown/binding-linux-ppc64-gnu",
"direct": false,
"version": "1.0.3",
"ecosystem": "npm"
},
{
"name": "@rolldown/binding-linux-s390x-gnu",
"direct": false,
"version": "1.0.3",
"ecosystem": "npm"
},
{
"name": "@rolldown/binding-linux-x64-gnu",
"direct": false,
"version": "1.0.3",
"ecosystem": "npm"
},
{
"name": "@rolldown/binding-linux-x64-musl",
"direct": false,
"version": "1.0.3",
"ecosystem": "npm"
},
{
"name": "@rolldown/binding-openharmony-arm64",
"direct": false,
"version": "1.0.3",
"ecosystem": "npm"
},
{
"name": "@rolldown/binding-wasm32-wasi",
"direct": false,
"version": "1.0.3",
"ecosystem": "npm"
},
{
"name": "@rolldown/binding-win32-arm64-msvc",
"direct": false,
"version": "1.0.3",
"ecosystem": "npm"
},
{
"name": "@rolldown/binding-win32-x64-msvc",
"direct": false,
"version": "1.0.3",
"ecosystem": "npm"
},
{
"name": "@rolldown/pluginutils",
"direct": false,
"version": "1.0.0-rc.7",
"ecosystem": "npm"
},
{
"name": "@rolldown/pluginutils",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-android-arm-eabi",
"direct": false,
"version": "4.62.0",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-android-arm64",
"direct": false,
"version": "4.62.0",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-darwin-arm64",
"direct": false,
"version": "4.62.0",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-darwin-x64",
"direct": false,
"version": "4.62.0",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-freebsd-arm64",
"direct": false,
"version": "4.62.0",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-freebsd-x64",
"direct": false,
"version": "4.62.0",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-linux-arm-gnueabihf",
"direct": false,
"version": "4.62.0",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-linux-arm-musleabihf",
"direct": false,
"version": "4.62.0",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-linux-arm64-gnu",
"direct": false,
"version": "4.62.0",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-linux-arm64-musl",
"direct": false,
"version": "4.62.0",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-linux-loong64-gnu",
"direct": false,
"version": "4.62.0",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-linux-loong64-musl",
"direct": false,
"version": "4.62.0",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-linux-ppc64-gnu",
"direct": false,
"version": "4.62.0",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-linux-ppc64-musl",
"direct": false,
"version": "4.62.0",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-linux-riscv64-gnu",
"direct": false,
"version": "4.62.0",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-linux-riscv64-musl",
"direct": false,
"version": "4.62.0",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-linux-s390x-gnu",
"direct": false,
"version": "4.62.0",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-linux-x64-gnu",
"direct": false,
"version": "4.62.0",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-linux-x64-musl",
"direct": false,
"version": "4.62.0",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-openbsd-x64",
"direct": false,
"version": "4.62.0",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-openharmony-arm64",
"direct": false,
"version": "4.62.0",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-win32-arm64-msvc",
"direct": false,
"version": "4.62.0",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-win32-ia32-msvc",
"direct": false,
"version": "4.62.0",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-win32-x64-gnu",
"direct": false,
"version": "4.62.0",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-win32-x64-msvc",
"direct": false,
"version": "4.62.0",
"ecosystem": "npm"
},
{
"name": "@sec-ant/readable-stream",
"direct": false,
"version": "0.4.1",
"ecosystem": "npm"
},
{
"name": "@sindresorhus/merge-streams",
"direct": false,
"version": "4.0.0",
"ecosystem": "npm"
},
{
"name": "@standard-schema/spec",
"direct": false,
"version": "1.1.0",
"ecosystem": "npm"
},
{
"name": "@standard-schema/utils",
"direct": false,
"version": "0.3.0",
"ecosystem": "npm"
},
{
"name": "@tabby_ai/hijri-converter",
"direct": false,
"version": "1.0.5",
"ecosystem": "npm"
},
{
"name": "@tailwindcss/node",
"direct": false,
"version": "4.2.4",
"ecosystem": "npm"
},
{
"name": "@tailwindcss/oxide",
"direct": false,
"version": "4.2.4",
"ecosystem": "npm"
},
{
"name": "@tailwindcss/oxide-android-arm64",
"direct": false,
"version": "4.2.4",
"ecosystem": "npm"
},
{
"name": "@tailwindcss/oxide-darwin-arm64",
"direct": false,
"version": "4.2.4",
"ecosystem": "npm"
},
{
"name": "@tailwindcss/oxide-darwin-x64",
"direct": false,
"version": "4.2.4",
"ecosystem": "npm"
},
{
"name": "@tailwindcss/oxide-freebsd-x64",
"direct": false,
"version": "4.2.4",
"ecosystem": "npm"
},
{
"name": "@tailwindcss/oxide-linux-arm-gnueabihf",
"direct": false,
"version": "4.2.4",
"ecosystem": "npm"
},
{
"name": "@tailwindcss/oxide-linux-arm64-gnu",
"direct": false,
"version": "4.2.4",
"ecosystem": "npm"
},
{
"name": "@tailwindcss/oxide-linux-arm64-musl",
"direct": false,
"version": "4.2.4",
"ecosystem": "npm"
},
{
"name": "@tailwindcss/oxide-linux-x64-gnu",
"direct": false,
"version": "4.2.4",
"ecosystem": "npm"
},
{
"name": "@tailwindcss/oxide-linux-x64-musl",
"direct": false,
"version": "4.2.4",
"ecosystem": "npm"
},
{
"name": "@tailwindcss/oxide-wasm32-wasi",
"direct": false,
"version": "4.2.4",
"ecosystem": "npm"
},
{
"name": "@tailwindcss/oxide-win32-arm64-msvc",
"direct": false,
"version": "4.2.4",
"ecosystem": "npm"
},
{
"name": "@tailwindcss/oxide-win32-x64-msvc",
"direct": false,
"version": "4.2.4",
"ecosystem": "npm"
},
{
"name": "@tailwindcss/vite",
"direct": false,
"version": "4.2.4",
"ecosystem": "npm"
},
{
"name": "@tailwindcss/vite",
"direct": false,
"version": "^4.2.4",
"ecosystem": "npm"
},
{
"name": "@tanstack/history",
"direct": false,
"version": "1.161.6",
"ecosystem": "npm"
},
{
"name": "@tanstack/hotkeys",
"direct": false,
"version": "0.8.0",
"ecosystem": "npm"
},
{
"name": "@tanstack/query-core",
"direct": false,
"version": "5.100.9",
"ecosystem": "npm"
},
{
"name": "@tanstack/react-hotkeys",
"direct": false,
"version": "0.10.0",
"ecosystem": "npm"
},
{
"name": "@tanstack/react-hotkeys",
"direct": false,
"version": "^0.10.0",
"ecosystem": "npm"
},
{
"name": "@tanstack/react-query",
"direct": false,
"version": "5.100.9",
"ecosystem": "npm"
},
{
"name": "@tanstack/react-query",
"direct": false,
"version": "^5.100.9",
"ecosystem": "npm"
},
{
"name": "@tanstack/react-router",
"direct": false,
"version": "1.169.2",
"ecosystem": "npm"
},
{
"name": "@tanstack/react-router",
"direct": false,
"version": "^1.169.2",
"ecosystem": "npm"
},
{
"name": "@tanstack/react-store",
"direct": false,
"version": "0.11.0",
"ecosystem": "npm"
},
{
"name": "@tanstack/react-store",
"direct": false,
"version": "0.9.3",
"ecosystem": "npm"
},
{
"name": "@tanstack/react-table",
"direct": false,
"version": "8.21.3",
"ecosystem": "npm"
},
{
"name": "@tanstack/react-table",
"direct": false,
"version": "^8.21.3",
"ecosystem": "npm"
},
{
"name": "@tanstack/router-core",
"direct": false,
"version": "1.169.2",
"ecosystem": "npm"
},
{
"name": "@tanstack/router-generator",
"direct": false,
"version": "1.166.42",
"ecosystem": "npm"
},
{
"name": "@tanstack/router-plugin",
"direct": false,
"version": "1.167.35",
"ecosystem": "npm"
},
{
"name": "@tanstack/router-plugin",
"direct": false,
"version": "^1.167.35",
"ecosystem": "npm"
},
{
"name": "@tanstack/router-utils",
"direct": false,
"version": "1.161.8",
"ecosystem": "npm"
},
{
"name": "@tanstack/store",
"direct": false,
"version": "0.11.0",
"ecosystem": "npm"
},
{
"name": "@tanstack/store",
"direct": false,
"version": "0.9.3",
"ecosystem": "npm"
},
{
"name": "@tanstack/table-core",
"direct": false,
"version": "8.21.3",
"ecosystem": "npm"
},
{
"name": "@tanstack/virtual-file-routes",
"direct": false,
"version": "1.161.7",
"ecosystem": "npm"
},
{
"name": "@tanstack/virtual-file-routes",
"direct": false,
"version": "1.162.0",
"ecosystem": "npm"
},
{
"name": "@tanstack/virtual-file-routes",
"direct": false,
"version": "^1.162.0",
"ecosystem": "npm"
},
{
"name": "@tiptap/core",
"direct": false,
"version": "3.22.5",
"ecosystem": "npm"
},
{
"name": "@tiptap/extension-blockquote",
"direct": false,
"version": "3.22.5",
"ecosystem": "npm"
},
{
"name": "@tiptap/extension-bold",
"direct": false,
"version": "3.22.5",
"ecosystem": "npm"
},
{
"name": "@tiptap/extension-bubble-menu",
"direct": false,
"version": "3.22.5",
"ecosystem": "npm"
},
{
"name": "@tiptap/extension-bullet-list",
"direct": false,
"version": "3.22.5",
"ecosystem": "npm"
},
{
"name": "@tiptap/extension-code",
"direct": false,
"version": "3.22.5",
"ecosystem": "npm"
},
{
"name": "@tiptap/extension-code-block",
"direct": false,
"version": "3.22.5",
"ecosystem": "npm"
},
{
"name": "@tiptap/extension-document",
"direct": false,
"version": "3.22.5",
"ecosystem": "npm"
},
{
"name": "@tiptap/extension-dropcursor",
"direct": false,
"version": "3.22.5",
"ecosystem": "npm"
},
{
"name": "@tiptap/extension-floating-menu",
"direct": false,
"version": "3.22.5",
"ecosystem": "npm"
},
{
"name": "@tiptap/extension-gapcursor",
"direct": false,
"version": "3.22.5",
"ecosystem": "npm"
},
{
"name": "@tiptap/extension-hard-break",
"direct": false,
"version": "3.22.5",
"ecosystem": "npm"
},
{
"name": "@tiptap/extension-heading",
"direct": false,
"version": "3.22.5",
"ecosystem": "npm"
},
{
"name": "@tiptap/extension-horizontal-rule",
"direct": false,
"version": "3.22.5",
"ecosystem": "npm"
},
{
"name": "@tiptap/extension-italic",
"direct": false,
"version": "3.22.5",
"ecosystem": "npm"
},
{
"name": "@tiptap/extension-link",
"direct": false,
"version": "3.22.5",
"ecosystem": "npm"
},
{
"name": "@tiptap/extension-link",
"direct": false,
"version": "^3.22.5",
"ecosystem": "npm"
},
{
"name": "@tiptap/extension-list",
"direct": false,
"version": "3.22.5",
"ecosystem": "npm"
},
{
"name": "@tiptap/extension-list-item",
"direct": false,
"version": "3.22.5",
"ecosystem": "npm"
},
{
"name": "@tiptap/extension-list-keymap",
"direct": false,
"version": "3.22.5",
"ecosystem": "npm"
},
{
"name": "@tiptap/extension-ordered-list",
"direct": false,
"version": "3.22.5",
"ecosystem": "npm"
},
{
"name": "@tiptap/extension-paragraph",
"direct": false,
"version": "3.22.5",
"ecosystem": "npm"
},
{
"name": "@tiptap/extension-placeholder",
"direct": false,
"version": "3.22.5",
"ecosystem": "npm"
},
{
"name": "@tiptap/extension-placeholder",
"direct": false,
"version": "^3.22.5",
"ecosystem": "npm"
},
{
"name": "@tiptap/extension-strike",
"direct": false,
"version": "3.22.5",
"ecosystem": "npm"
},
{
"name": "@tiptap/extension-text",
"direct": false,
"version": "3.22.5",
"ecosystem": "npm"
},
{
"name": "@tiptap/extension-underline",
"direct": false,
"version": "3.22.5",
"ecosystem": "npm"
},
{
"name": "@tiptap/extensions",
"direct": false,
"version": "3.22.5",
"ecosystem": "npm"
},
{
"name": "@tiptap/pm",
"direct": false,
"version": "3.22.5",
"ecosystem": "npm"
},
{
"name": "@tiptap/react",
"direct": false,
"version": "3.22.5",
"ecosystem": "npm"
},
{
"name": "@tiptap/react",
"direct": false,
"version": "^3.22.5",
"ecosystem": "npm"
},
{
"name": "@tiptap/starter-kit",
"direct": false,
"version": "3.22.5",
"ecosystem": "npm"
},
{
"name": "@tiptap/starter-kit",
"direct": false,
"version": "^3.22.5",
"ecosystem": "npm"
},
{
"name": "@ts-morph/common",
"direct": false,
"version": "0.27.0",
"ecosystem": "npm"
},
{
"name": "@turbo/darwin-64",
"direct": false,
"version": "2.9.18",
"ecosystem": "npm"
},
{
"name": "@turbo/darwin-arm64",
"direct": false,
"version": "2.9.18",
"ecosystem": "npm"
},
{
"name": "@turbo/linux-64",
"direct": false,
"version": "2.9.18",
"ecosystem": "npm"
},
{
"name": "@turbo/linux-arm64",
"direct": false,
"version": "2.9.18",
"ecosystem": "npm"
},
{
"name": "@turbo/windows-64",
"direct": false,
"version": "2.9.18",
"ecosystem": "npm"
},
{
"name": "@turbo/windows-arm64",
"direct": false,
"version": "2.9.18",
"ecosystem": "npm"
},
{
"name": "@tybys/wasm-util",
"direct": false,
"version": "0.10.2",
"ecosystem": "npm"
},
{
"name": "@types/chai",
"direct": false,
"version": "5.2.3",
"ecosystem": "npm"
},
{
"name": "@types/d3-array",
"direct": false,
"version": "3.2.2",
"ecosystem": "npm"
},
{
"name": "@types/d3-color",
"direct": false,
"version": "3.1.3",
"ecosystem": "npm"
},
{
"name": "@types/d3-ease",
"direct": false,
"version": "3.0.2",
"ecosystem": "npm"
},
{
"name": "@types/d3-interpolate",
"direct": false,
"version": "3.0.4",
"ecosystem": "npm"
},
{
"name": "@types/d3-path",
"direct": false,
"version": "3.1.1",
"ecosystem": "npm"
},
{
"name": "@types/d3-scale",
"direct": false,
"version": "4.0.9",
"ecosystem": "npm"
},
{
"name": "@types/d3-shape",
"direct": false,
"version": "3.1.8",
"ecosystem": "npm"
},
{
"name": "@types/d3-time",
"direct": false,
"version": "3.0.4",
"ecosystem": "npm"
},
{
"name": "@types/d3-timer",
"direct": false,
"version": "3.0.2",
"ecosystem": "npm"
},
{
"name": "@types/deep-eql",
"direct": false,
"version": "4.0.2",
"ecosystem": "npm"
},
{
"name": "@types/estree",
"direct": false,
"version": "1.0.8",
"ecosystem": "npm"
},
{
"name": "@types/estree",
"direct": false,
"version": "1.0.9",
"ecosystem": "npm"
},
{
"name": "@types/node",
"direct": false,
"version": "12.20.55",
"ecosystem": "npm"
},
{
"name": "@types/node",
"direct": false,
"version": "25.6.0",
"ecosystem": "npm"
},
{
"name": "@types/node",
"direct": false,
"version": "^25.6.0",
"ecosystem": "npm"
},
{
"name": "@types/react",
"direct": false,
"version": "19.2.14",
"ecosystem": "npm"
},
{
"name": "@types/react",
"direct": false,
"version": "^19.2.14",
"ecosystem": "npm"
},
{
"name": "@types/react-dom",
"direct": false,
"version": "19.2.3",
"ecosystem": "npm"
},
{
"name": "@types/react-dom",
"direct": false,
"version": "^19.2.3",
"ecosystem": "npm"
},
{
"name": "@types/set-cookie-parser",
"direct": false,
"version": "2.4.10",
"ecosystem": "npm"
},
{
"name": "@types/spark-md5",
"direct": false,
"version": "3.0.5",
"ecosystem": "npm"
},
{
"name": "@types/spark-md5",
"direct": false,
"version": "^3.0.5",
"ecosystem": "npm"
},
{
"name": "@types/statuses",
"direct": false,
"version": "2.0.6",
"ecosystem": "npm"
},
{
"name": "@types/use-sync-external-store",
"direct": false,
"version": "0.0.6",
"ecosystem": "npm"
},
{
"name": "@types/validate-npm-package-name",
"direct": false,
"version": "4.0.2",
"ecosystem": "npm"
},
{
"name": "@uiw/react-json-view",
"direct": false,
"version": "1.12.2",
"ecosystem": "npm"
},
{
"name": "@uiw/react-json-view",
"direct": false,
"version": "^1.12",
"ecosystem": "npm"
},
{
"name": "@vitejs/plugin-react",
"direct": false,
"version": "6.0.1",
"ecosystem": "npm"
},
{
"name": "@vitejs/plugin-react",
"direct": false,
"version": "^6.0.1",
"ecosystem": "npm"
},
{
"name": "@vitest/coverage-v8",
"direct": false,
"version": "4.1.5",
"ecosystem": "npm"
},
{
"name": "@vitest/coverage-v8",
"direct": false,
"version": "^4.1.5",
"ecosystem": "npm"
},
{
"name": "@vitest/expect",
"direct": false,
"version": "4.1.5",
"ecosystem": "npm"
},
{
"name": "@vitest/mocker",
"direct": false,
"version": "4.1.5",
"ecosystem": "npm"
},
{
"name": "@vitest/pretty-format",
"direct": false,
"version": "4.1.5",
"ecosystem": "npm"
},
{
"name": "@vitest/runner",
"direct": false,
"version": "4.1.5",
"ecosystem": "npm"
},
{
"name": "@vitest/snapshot",
"direct": false,
"version": "4.1.5",
"ecosystem": "npm"
},
{
"name": "@vitest/spy",
"direct": false,
"version": "4.1.5",
"ecosystem": "npm"
},
{
"name": "@vitest/utils",
"direct": false,
"version": "4.1.5",
"ecosystem": "npm"
},
{
"name": "accepts",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "acorn",
"direct": false,
"version": "8.15.0",
"ecosystem": "npm"
},
{
"name": "agent-base",
"direct": false,
"version": "7.1.4",
"ecosystem": "npm"
},
{
"name": "ajv",
"direct": false,
"version": "8.20.0",
"ecosystem": "npm"
},
{
"name": "ajv-formats",
"direct": false,
"version": "3.0.1",
"ecosystem": "npm"
},
{
"name": "ansi-colors",
"direct": false,
"version": "4.1.3",
"ecosystem": "npm"
},
{
"name": "ansi-regex",
"direct": false,
"version": "5.0.1",
"ecosystem": "npm"
},
{
"name": "ansi-regex",
"direct": false,
"version": "6.2.2",
"ecosystem": "npm"
},
{
"name": "ansi-styles",
"direct": false,
"version": "4.3.0",
"ecosystem": "npm"
},
{
"name": "ansis",
"direct": false,
"version": "4.2.0",
"ecosystem": "npm"
},
{
"name": "any-promise",
"direct": false,
"version": "1.3.0",
"ecosystem": "npm"
},
{
"name": "anymatch",
"direct": false,
"version": "3.1.3",
"ecosystem": "npm"
},
{
"name": "argparse",
"direct": false,
"version": "2.0.1",
"ecosystem": "npm"
},
{
"name": "aria-hidden",
"direct": false,
"version": "1.2.6",
"ecosystem": "npm"
},
{
"name": "array-union",
"direct": false,
"version": "2.1.0",
"ecosystem": "npm"
},
{
"name": "assertion-error",
"direct": false,
"version": "2.0.1",
"ecosystem": "npm"
},
{
"name": "ast-types",
"direct": false,
"version": "0.16.1",
"ecosystem": "npm"
},
{
"name": "ast-v8-to-istanbul",
"direct": false,
"version": "1.0.0",
"ecosystem": "npm"
},
{
"name": "babel-dead-code-elimination",
"direct": false,
"version": "1.0.12",
"ecosystem": "npm"
},
{
"name": "balanced-match",
"direct": false,
"version": "4.0.4",
"ecosystem": "npm"
},
{
"name": "baseline-browser-mapping",
"direct": false,
"version": "2.10.27",
"ecosystem": "npm"
},
{
"name": "better-path-resolve",
"direct": false,
"version": "1.0.0",
"ecosystem": "npm"
},
{
"name": "binary-extensions",
"direct": false,
"version": "2.3.0",
"ecosystem": "npm"
},
{
"name": "body-parser",
"direct": false,
"version": "2.2.2",
"ecosystem": "npm"
},
{
"name": "brace-expansion",
"direct": false,
"version": "5.0.6",
"ecosystem": "npm"
},
{
"name": "braces",
"direct": false,
"version": "3.0.3",
"ecosystem": "npm"
},
{
"name": "browserslist",
"direct": false,
"version": "4.28.2",
"ecosystem": "npm"
},
{
"name": "bundle-name",
"direct": false,
"version": "4.1.0",
"ecosystem": "npm"
},
{
"name": "bundle-require",
"direct": false,
"version": "5.1.0",
"ecosystem": "npm"
},
{
"name": "bytes",
"direct": false,
"version": "3.1.2",
"ecosystem": "npm"
},
{
"name": "cac",
"direct": false,
"version": "6.7.14",
"ecosystem": "npm"
},
{
"name": "call-bind-apply-helpers",
"direct": false,
"version": "1.0.2",
"ecosystem": "npm"
},
{
"name": "call-bound",
"direct": false,
"version": "1.0.4",
"ecosystem": "npm"
},
{
"name": "callsites",
"direct": false,
"version": "3.1.0",
"ecosystem": "npm"
},
{
"name": "caniuse-lite",
"direct": false,
"version": "1.0.30001792",
"ecosystem": "npm"
},
{
"name": "chai",
"direct": false,
"version": "6.2.2",
"ecosystem": "npm"
},
{
"name": "chalk",
"direct": false,
"version": "5.6.2",
"ecosystem": "npm"
},
{
"name": "chardet",
"direct": false,
"version": "2.1.1",
"ecosystem": "npm"
},
{
"name": "chokidar",
"direct": false,
"version": "3.6.0",
"ecosystem": "npm"
},
{
"name": "chokidar",
"direct": false,
"version": "4.0.3",
"ecosystem": "npm"
},
{
"name": "class-variance-authority",
"direct": false,
"version": "0.7.1",
"ecosystem": "npm"
},
{
"name": "class-variance-authority",
"direct": false,
"version": "^0.7.1",
"ecosystem": "npm"
},
{
"name": "cli-cursor",
"direct": false,
"version": "5.0.0",
"ecosystem": "npm"
},
{
"name": "cli-spinners",
"direct": false,
"version": "2.9.2",
"ecosystem": "npm"
},
{
"name": "cli-width",
"direct": false,
"version": "4.1.0",
"ecosystem": "npm"
},
{
"name": "cliui",
"direct": false,
"version": "8.0.1",
"ecosystem": "npm"
},
{
"name": "clsx",
"direct": false,
"version": "2.1.1",
"ecosystem": "npm"
},
{
"name": "clsx",
"direct": false,
"version": "^2.1.1",
"ecosystem": "npm"
},
{
"name": "cmdk",
"direct": false,
"version": "1.1.1",
"ecosystem": "npm"
},
{
"name": "cmdk",
"direct": false,
"version": "^1.1.1",
"ecosystem": "npm"
},
{
"name": "code-block-writer",
"direct": false,
"version": "13.0.3",
"ecosystem": "npm"
},
{
"name": "color-convert",
"direct": false,
"version": "2.0.1",
"ecosystem": "npm"
},
{
"name": "color-name",
"direct": false,
"version": "1.1.4",
"ecosystem": "npm"
},
{
"name": "commander",
"direct": false,
"version": "11.1.0",
"ecosystem": "npm"
},
{
"name": "commander",
"direct": false,
"version": "14.0.3",
"ecosystem": "npm"
},
{
"name": "commander",
"direct": false,
"version": "4.1.1",
"ecosystem": "npm"
},
{
"name": "commander",
"direct": false,
"version": "^14.0.3",
"ecosystem": "npm"
},
{
"name": "confbox",
"direct": false,
"version": "0.1.8",
"ecosystem": "npm"
},
{
"name": "consola",
"direct": false,
"version": "3.4.2",
"ecosystem": "npm"
},
{
"name": "console-table-printer",
"direct": false,
"version": "2.15.0",
"ecosystem": "npm"
},
{
"name": "console-table-printer",
"direct": false,
"version": "^2.15.0",
"ecosystem": "npm"
},
{
"name": "content-disposition",
"direct": false,
"version": "1.1.0",
"ecosystem": "npm"
},
{
"name": "content-type",
"direct": false,
"version": "1.0.5",
"ecosystem": "npm"
},
{
"name": "convert-source-map",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "cookie",
"direct": false,
"version": "0.7.2",
"ecosystem": "npm"
},
{
"name": "cookie",
"direct": false,
"version": "1.1.1",
"ecosystem": "npm"
},
{
"name": "cookie-es",
"direct": false,
"version": "3.1.1",
"ecosystem": "npm"
},
{
"name": "cookie-signature",
"direct": false,
"version": "1.2.2",
"ecosystem": "npm"
},
{
"name": "cors",
"direct": false,
"version": "2.8.6",
"ecosystem": "npm"
},
{
"name": "cosmiconfig",
"direct": false,
"version": "9.0.1",
"ecosystem": "npm"
},
{
"name": "cross-spawn",
"direct": false,
"version": "7.0.6",
"ecosystem": "npm"
},
{
"name": "cssesc",
"direct": false,
"version": "3.0.0",
"ecosystem": "npm"
},
{
"name": "csstype",
"direct": false,
"version": "3.2.3",
"ecosystem": "npm"
},
{
"name": "d3-array",
"direct": false,
"version": "3.2.4",
"ecosystem": "npm"
},
{
"name": "d3-color",
"direct": false,
"version": "3.1.0",
"ecosystem": "npm"
},
{
"name": "d3-ease",
"direct": false,
"version": "3.0.1",
"ecosystem": "npm"
},
{
"name": "d3-format",
"direct": false,
"version": "3.1.2",
"ecosystem": "npm"
},
{
"name": "d3-interpolate",
"direct": false,
"version": "3.0.1",
"ecosystem": "npm"
},
{
"name": "d3-path",
"direct": false,
"version": "3.1.0",
"ecosystem": "npm"
},
{
"name": "d3-scale",
"direct": false,
"version": "4.0.2",
"ecosystem": "npm"
},
{
"name": "d3-shape",
"direct": false,
"version": "3.2.0",
"ecosystem": "npm"
},
{
"name": "d3-time",
"direct": false,
"version": "3.1.0",
"ecosystem": "npm"
},
{
"name": "d3-time-format",
"direct": false,
"version": "4.1.0",
"ecosystem": "npm"
},
{
"name": "d3-timer",
"direct": false,
"version": "3.0.1",
"ecosystem": "npm"
},
{
"name": "data-uri-to-buffer",
"direct": false,
"version": "4.0.1",
"ecosystem": "npm"
},
{
"name": "dataloader",
"direct": false,
"version": "1.4.0",
"ecosystem": "npm"
},
{
"name": "date-fns",
"direct": false,
"version": "4.1.0",
"ecosystem": "npm"
},
{
"name": "date-fns",
"direct": false,
"version": "^4.1.0",
"ecosystem": "npm"
},
{
"name": "date-fns-jalali",
"direct": false,
"version": "4.1.0-0",
"ecosystem": "npm"
},
{
"name": "date-fns-tz",
"direct": false,
"version": "3.2.0",
"ecosystem": "npm"
},
{
"name": "date-fns-tz",
"direct": false,
"version": "^3.2.0",
"ecosystem": "npm"
},
{
"name": "debug",
"direct": false,
"version": "4.4.3",
"ecosystem": "npm"
},
{
"name": "decimal.js-light",
"direct": false,
"version": "2.5.1",
"ecosystem": "npm"
},
{
"name": "dedent",
"direct": false,
"version": "1.7.2",
"ecosystem": "npm"
},
{
"name": "deepmerge",
"direct": false,
"version": "4.3.1",
"ecosystem": "npm"
},
{
"name": "default-browser",
"direct": false,
"version": "5.5.0",
"ecosystem": "npm"
},
{
"name": "default-browser-id",
"direct": false,
"version": "5.0.1",
"ecosystem": "npm"
},
{
"name": "define-lazy-prop",
"direct": false,
"version": "3.0.0",
"ecosystem": "npm"
},
{
"name": "depd",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "detect-indent",
"direct": false,
"version": "6.1.0",
"ecosystem": "npm"
},
{
"name": "detect-libc",
"direct": false,
"version": "2.1.2",
"ecosystem": "npm"
},
{
"name": "detect-node-es",
"direct": false,
"version": "1.1.0",
"ecosystem": "npm"
},
{
"name": "diff",
"direct": false,
"version": "8.0.4",
"ecosystem": "npm"
},
{
"name": "dir-glob",
"direct": false,
"version": "3.0.1",
"ecosystem": "npm"
},
{
"name": "dotenv",
"direct": false,
"version": "17.4.2",
"ecosystem": "npm"
},
{
"name": "dotenv",
"direct": false,
"version": "8.6.0",
"ecosystem": "npm"
},
{
"name": "dunder-proto",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "eciesjs",
"direct": false,
"version": "0.4.18",
"ecosystem": "npm"
},
{
"name": "ee-first",
"direct": false,
"version": "1.1.1",
"ecosystem": "npm"
},
{
"name": "electron-to-chromium",
"direct": false,
"version": "1.5.352",
"ecosystem": "npm"
},
{
"name": "emoji-regex",
"direct": false,
"version": "10.6.0",
"ecosystem": "npm"
},
{
"name": "emoji-regex",
"direct": false,
"version": "8.0.0",
"ecosystem": "npm"
},
{
"name": "encodeurl",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "enhanced-resolve",
"direct": false,
"version": "5.21.0",
"ecosystem": "npm"
},
{
"name": "enquirer",
"direct": false,
"version": "2.4.1",
"ecosystem": "npm"
},
{
"name": "env-paths",
"direct": false,
"version": "2.2.1",
"ecosystem": "npm"
},
{
"name": "error-ex",
"direct": false,
"version": "1.3.4",
"ecosystem": "npm"
},
{
"name": "es-define-property",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "es-errors",
"direct": false,
"version": "1.3.0",
"ecosystem": "npm"
},
{
"name": "es-module-lexer",
"direct": false,
"version": "2.1.0",
"ecosystem": "npm"
},
{
"name": "es-object-atoms",
"direct": false,
"version": "1.1.1",
"ecosystem": "npm"
},
{
"name": "es-toolkit",
"direct": false,
"version": "1.45.1",
"ecosystem": "npm"
},
{
"name": "esbuild",
"direct": false,
"version": "0.28.1",
"ecosystem": "npm"
},
{
"name": "escalade",
"direct": false,
"version": "3.2.0",
"ecosystem": "npm"
},
{
"name": "escape-html",
"direct": false,
"version": "1.0.3",
"ecosystem": "npm"
},
{
"name": "esprima",
"direct": false,
"version": "4.0.1",
"ecosystem": "npm"
},
{
"name": "estree-walker",
"direct": false,
"version": "3.0.3",
"ecosystem": "npm"
},
{
"name": "etag",
"direct": false,
"version": "1.8.1",
"ecosystem": "npm"
},
{
"name": "eventemitter3",
"direct": false,
"version": "5.0.4",
"ecosystem": "npm"
},
{
"name": "eventsource",
"direct": false,
"version": "3.0.7",
"ecosystem": "npm"
},
{
"name": "eventsource-parser",
"direct": false,
"version": "3.0.8",
"ecosystem": "npm"
},
{
"name": "execa",
"direct": false,
"version": "5.1.1",
"ecosystem": "npm"
},
{
"name": "execa",
"direct": false,
"version": "9.6.1",
"ecosystem": "npm"
},
{
"name": "execa",
"direct": false,
"version": "^9.6.1",
"ecosystem": "npm"
},
{
"name": "expect-type",
"direct": false,
"version": "1.3.0",
"ecosystem": "npm"
},
{
"name": "express",
"direct": false,
"version": "5.2.1",
"ecosystem": "npm"
},
{
"name": "express-rate-limit",
"direct": false,
"version": "8.5.1",
"ecosystem": "npm"
},
{
"name": "extendable-error",
"direct": false,
"version": "0.1.7",
"ecosystem": "npm"
},
{
"name": "fast-deep-equal",
"direct": false,
"version": "3.1.3",
"ecosystem": "npm"
},
{
"name": "fast-equals",
"direct": false,
"version": "5.4.0",
"ecosystem": "npm"
},
{
"name": "fast-glob",
"direct": false,
"version": "3.3.3",
"ecosystem": "npm"
},
{
"name": "fast-string-truncated-width",
"direct": false,
"version": "3.0.3",
"ecosystem": "npm"
},
{
"name": "fast-string-width",
"direct": false,
"version": "3.0.2",
"ecosystem": "npm"
},
{
"name": "fast-uri",
"direct": false,
"version": "3.1.2",
"ecosystem": "npm"
},
{
"name": "fast-wrap-ansi",
"direct": false,
"version": "0.2.0",
"ecosystem": "npm"
},
{
"name": "fastq",
"direct": false,
"version": "1.20.1",
"ecosystem": "npm"
},
{
"name": "fdir",
"direct": false,
"version": "6.5.0",
"ecosystem": "npm"
},
{
"name": "fetch-blob",
"direct": false,
"version": "3.2.0",
"ecosystem": "npm"
},
{
"name": "figures",
"direct": false,
"version": "6.1.0",
"ecosystem": "npm"
},
{
"name": "fill-range",
"direct": false,
"version": "7.1.1",
"ecosystem": "npm"
},
{
"name": "finalhandler",
"direct": false,
"version": "2.1.1",
"ecosystem": "npm"
},
{
"name": "find-up",
"direct": false,
"version": "4.1.0",
"ecosystem": "npm"
},
{
"name": "fix-dts-default-cjs-exports",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "flag-icons",
"direct": false,
"version": "7.5.0",
"ecosystem": "npm"
},
{
"name": "flag-icons",
"direct": false,
"version": "^7.5.0",
"ecosystem": "npm"
},
{
"name": "formdata-polyfill",
"direct": false,
"version": "4.0.10",
"ecosystem": "npm"
},
{
"name": "forwarded",
"direct": false,
"version": "0.2.0",
"ecosystem": "npm"
},
{
"name": "fresh",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "fs-extra",
"direct": false,
"version": "11.3.5",
"ecosystem": "npm"
},
{
"name": "fs-extra",
"direct": false,
"version": "7.0.1",
"ecosystem": "npm"
},
{
"name": "fs-extra",
"direct": false,
"version": "8.1.0",
"ecosystem": "npm"
},
{
"name": "fsevents",
"direct": false,
"version": "2.3.2",
"ecosystem": "npm"
},
{
"name": "fsevents",
"direct": false,
"version": "2.3.3",
"ecosystem": "npm"
},
{
"name": "function-bind",
"direct": false,
"version": "1.1.2",
"ecosystem": "npm"
},
{
"name": "fuzzysort",
"direct": false,
"version": "3.1.0",
"ecosystem": "npm"
},
{
"name": "gensync",
"direct": false,
"version": "1.0.0-beta.2",
"ecosystem": "npm"
},
{
"name": "get-caller-file",
"direct": false,
"version": "2.0.5",
"ecosystem": "npm"
},
{
"name": "get-east-asian-width",
"direct": false,
"version": "1.5.0",
"ecosystem": "npm"
},
{
"name": "get-intrinsic",
"direct": false,
"version": "1.3.0",
"ecosystem": "npm"
},
{
"name": "get-nonce",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "get-own-enumerable-keys",
"direct": false,
"version": "1.0.0",
"ecosystem": "npm"
},
{
"name": "get-port",
"direct": false,
"version": "7.2.0",
"ecosystem": "npm"
},
{
"name": "get-port",
"direct": false,
"version": "^7.2.0",
"ecosystem": "npm"
},
{
"name": "get-proto",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "get-stream",
"direct": false,
"version": "6.0.1",
"ecosystem": "npm"
},
{
"name": "get-stream",
"direct": false,
"version": "9.0.1",
"ecosystem": "npm"
},
{
"name": "get-tsconfig",
"direct": false,
"version": "4.13.7",
"ecosystem": "npm"
},
{
"name": "glob-parent",
"direct": false,
"version": "5.1.2",
"ecosystem": "npm"
},
{
"name": "globby",
"direct": false,
"version": "11.1.0",
"ecosystem": "npm"
},
{
"name": "gopd",
"direct": false,
"version": "1.2.0",
"ecosystem": "npm"
},
{
"name": "graceful-fs",
"direct": false,
"version": "4.2.11",
"ecosystem": "npm"
},
{
"name": "graphql",
"direct": false,
"version": "16.14.0",
"ecosystem": "npm"
},
{
"name": "has-flag",
"direct": false,
"version": "4.0.0",
"ecosystem": "npm"
},
{
"name": "has-symbols",
"direct": false,
"version": "1.1.0",
"ecosystem": "npm"
},
{
"name": "hasown",
"direct": false,
"version": "2.0.3",
"ecosystem": "npm"
},
{
"name": "headers-polyfill",
"direct": false,
"version": "5.0.1",
"ecosystem": "npm"
},
{
"name": "hono",
"direct": false,
"version": "4.12.25",
"ecosystem": "npm"
},
{
"name": "html-escaper",
"direct": false,
"version": "2.0.2",
"ecosystem": "npm"
},
{
"name": "html-parse-stringify",
"direct": false,
"version": "3.0.1",
"ecosystem": "npm"
},
{
"name": "http-errors",
"direct": false,
"version": "2.0.1",
"ecosystem": "npm"
},
{
"name": "https-proxy-agent",
"direct": false,
"version": "7.0.6",
"ecosystem": "npm"
},
{
"name": "human-id",
"direct": false,
"version": "4.1.3",
"ecosystem": "npm"
},
{
"name": "human-signals",
"direct": false,
"version": "2.1.0",
"ecosystem": "npm"
},
{
"name": "human-signals",
"direct": false,
"version": "8.0.1",
"ecosystem": "npm"
},
{
"name": "i18next",
"direct": false,
"version": "26.2.0",
"ecosystem": "npm"
},
{
"name": "i18next",
"direct": false,
"version": "^26.2.0",
"ecosystem": "npm"
},
{
"name": "iconv-lite",
"direct": false,
"version": "0.7.2",
"ecosystem": "npm"
},
{
"name": "ignore",
"direct": false,
"version": "5.3.2",
"ecosystem": "npm"
},
{
"name": "immer",
"direct": false,
"version": "10.2.0",
"ecosystem": "npm"
},
{
"name": "immer",
"direct": false,
"version": "11.1.4",
"ecosystem": "npm"
},
{
"name": "import-fresh",
"direct": false,
"version": "3.3.1",
"ecosystem": "npm"
},
{
"name": "inherits",
"direct": false,
"version": "2.0.4",
"ecosystem": "npm"
},
{
"name": "internmap",
"direct": false,
"version": "2.0.3",
"ecosystem": "npm"
},
{
"name": "ip-address",
"direct": false,
"version": "10.2.0",
"ecosystem": "npm"
},
{
"name": "ipaddr.js",
"direct": false,
"version": "1.9.1",
"ecosystem": "npm"
},
{
"name": "is-arrayish",
"direct": false,
"version": "0.2.1",
"ecosystem": "npm"
},
{
"name": "is-binary-path",
"direct": false,
"version": "2.1.0",
"ecosystem": "npm"
},
{
"name": "is-docker",
"direct": false,
"version": "3.0.0",
"ecosystem": "npm"
},
{
"name": "is-extglob",
"direct": false,
"version": "2.1.1",
"ecosystem": "npm"
},
{
"name": "is-fullwidth-code-point",
"direct": false,
"version": "3.0.0",
"ecosystem": "npm"
},
{
"name": "is-glob",
"direct": false,
"version": "4.0.3",
"ecosystem": "npm"
},
{
"name": "is-in-ssh",
"direct": false,
"version": "1.0.0",
"ecosystem": "npm"
},
{
"name": "is-inside-container",
"direct": false,
"version": "1.0.0",
"ecosystem": "npm"
},
{
"name": "is-interactive",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "is-node-process",
"direct": false,
"version": "1.2.0",
"ecosystem": "npm"
},
{
"name": "is-number",
"direct": false,
"version": "7.0.0",
"ecosystem": "npm"
},
{
"name": "is-obj",
"direct": false,
"version": "3.0.0",
"ecosystem": "npm"
},
{
"name": "is-plain-obj",
"direct": false,
"version": "4.1.0",
"ecosystem": "npm"
},
{
"name": "is-promise",
"direct": false,
"version": "4.0.0",
"ecosystem": "npm"
},
{
"name": "is-regexp",
"direct": false,
"version": "3.1.0",
"ecosystem": "npm"
},
{
"name": "is-stream",
"direct": false,
"version": "2.0.1",
"ecosystem": "npm"
},
{
"name": "is-stream",
"direct": false,
"version": "4.0.1",
"ecosystem": "npm"
},
{
"name": "is-subdir",
"direct": false,
"version": "1.2.0",
"ecosystem": "npm"
},
{
"name": "is-unicode-supported",
"direct": false,
"version": "1.3.0",
"ecosystem": "npm"
},
{
"name": "is-unicode-supported",
"direct": false,
"version": "2.1.0",
"ecosystem": "npm"
},
{
"name": "is-windows",
"direct": false,
"version": "1.0.2",
"ecosystem": "npm"
},
{
"name": "is-wsl",
"direct": false,
"version": "3.1.1",
"ecosystem": "npm"
},
{
"name": "isbot",
"direct": false,
"version": "5.1.40",
"ecosystem": "npm"
},
{
"name": "isexe",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "isexe",
"direct": false,
"version": "3.1.5",
"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": "jiti",
"direct": false,
"version": "2.7.0",
"ecosystem": "npm"
},
{
"name": "jose",
"direct": false,
"version": "6.2.3",
"ecosystem": "npm"
},
{
"name": "joycon",
"direct": false,
"version": "3.1.1",
"ecosystem": "npm"
},
{
"name": "js-tokens",
"direct": false,
"version": "10.0.0",
"ecosystem": "npm"
},
{
"name": "js-tokens",
"direct": false,
"version": "4.0.0",
"ecosystem": "npm"
},
{
"name": "js-yaml",
"direct": false,
"version": "4.2.0",
"ecosystem": "npm"
},
{
"name": "jsesc",
"direct": false,
"version": "3.1.0",
"ecosystem": "npm"
},
{
"name": "json-parse-even-better-errors",
"direct": false,
"version": "2.3.1",
"ecosystem": "npm"
},
{
"name": "json-schema-traverse",
"direct": false,
"version": "1.0.0",
"ecosystem": "npm"
},
{
"name": "json-schema-typed",
"direct": false,
"version": "8.0.2",
"ecosystem": "npm"
},
{
"name": "json5",
"direct": false,
"version": "2.2.3",
"ecosystem": "npm"
},
{
"name": "jsonfile",
"direct": false,
"version": "4.0.0",
"ecosystem": "npm"
},
{
"name": "jsonfile",
"direct": false,
"version": "6.2.1",
"ecosystem": "npm"
},
{
"name": "kleur",
"direct": false,
"version": "3.0.3",
"ecosystem": "npm"
},
{
"name": "kleur",
"direct": false,
"version": "4.1.5",
"ecosystem": "npm"
},
{
"name": "lightningcss",
"direct": false,
"version": "1.32.0",
"ecosystem": "npm"
},
{
"name": "lightningcss-android-arm64",
"direct": false,
"version": "1.32.0",
"ecosystem": "npm"
},
{
"name": "lightningcss-darwin-arm64",
"direct": false,
"version": "1.32.0",
"ecosystem": "npm"
},
{
"name": "lightningcss-darwin-x64",
"direct": false,
"version": "1.32.0",
"ecosystem": "npm"
},
{
"name": "lightningcss-freebsd-x64",
"direct": false,
"version": "1.32.0",
"ecosystem": "npm"
},
{
"name": "lightningcss-linux-arm-gnueabihf",
"direct": false,
"version": "1.32.0",
"ecosystem": "npm"
},
{
"name": "lightningcss-linux-arm64-gnu",
"direct": false,
"version": "1.32.0",
"ecosystem": "npm"
},
{
"name": "lightningcss-linux-arm64-musl",
"direct": false,
"version": "1.32.0",
"ecosystem": "npm"
},
{
"name": "lightningcss-linux-x64-gnu",
"direct": false,
"version": "1.32.0",
"ecosystem": "npm"
},
{
"name": "lightningcss-linux-x64-musl",
"direct": false,
"version": "1.32.0",
"ecosystem": "npm"
},
{
"name": "lightningcss-win32-arm64-msvc",
"direct": false,
"version": "1.32.0",
"ecosystem": "npm"
},
{
"name": "lightningcss-win32-x64-msvc",
"direct": false,
"version": "1.32.0",
"ecosystem": "npm"
},
{
"name": "lilconfig",
"direct": false,
"version": "3.1.3",
"ecosystem": "npm"
},
{
"name": "lines-and-columns",
"direct": false,
"version": "1.2.4",
"ecosystem": "npm"
},
{
"name": "linkifyjs",
"direct": false,
"version": "4.3.2",
"ecosystem": "npm"
},
{
"name": "load-tsconfig",
"direct": false,
"version": "0.2.5",
"ecosystem": "npm"
},
{
"name": "locate-path",
"direct": false,
"version": "5.0.0",
"ecosystem": "npm"
},
{
"name": "lodash.startcase",
"direct": false,
"version": "4.4.0",
"ecosystem": "npm"
},
{
"name": "log-symbols",
"direct": false,
"version": "6.0.0",
"ecosystem": "npm"
},
{
"name": "lru-cache",
"direct": false,
"version": "5.1.1",
"ecosystem": "npm"
},
{
"name": "lucide-react",
"direct": false,
"version": "1.14.0",
"ecosystem": "npm"
},
{
"name": "lucide-react",
"direct": false,
"version": "^1.14.0",
"ecosystem": "npm"
},
{
"name": "magic-string",
"direct": false,
"version": "0.30.21",
"ecosystem": "npm"
},
{
"name": "magicast",
"direct": false,
"version": "0.5.2",
"ecosystem": "npm"
},
{
"name": "make-dir",
"direct": false,
"version": "4.0.0",
"ecosystem": "npm"
},
{
"name": "math-intrinsics",
"direct": false,
"version": "1.1.0",
"ecosystem": "npm"
},
{
"name": "media-typer",
"direct": false,
"version": "1.1.0",
"ecosystem": "npm"
},
{
"name": "merge-descriptors",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "merge-stream",
"direct": false,
"version": "2.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": "mime-db",
"direct": false,
"version": "1.54.0",
"ecosystem": "npm"
},
{
"name": "mime-types",
"direct": false,
"version": "3.0.2",
"ecosystem": "npm"
},
{
"name": "mimic-fn",
"direct": false,
"version": "2.1.0",
"ecosystem": "npm"
},
{
"name": "mimic-function",
"direct": false,
"version": "5.0.1",
"ecosystem": "npm"
},
{
"name": "minimatch",
"direct": false,
"version": "10.2.5",
"ecosystem": "npm"
},
{
"name": "minimist",
"direct": false,
"version": "1.2.8",
"ecosystem": "npm"
},
{
"name": "mlly",
"direct": false,
"version": "1.8.0",
"ecosystem": "npm"
},
{
"name": "mri",
"direct": false,
"version": "1.2.0",
"ecosystem": "npm"
},
{
"name": "ms",
"direct": false,
"version": "2.1.3",
"ecosystem": "npm"
},
{
"name": "msw",
"direct": false,
"version": "2.14.3",
"ecosystem": "npm"
},
{
"name": "msw",
"direct": false,
"version": "^2.14.3",
"ecosystem": "npm"
},
{
"name": "mute-stream",
"direct": false,
"version": "3.0.0",
"ecosystem": "npm"
},
{
"name": "mz",
"direct": false,
"version": "2.7.0",
"ecosystem": "npm"
},
{
"name": "nanoid",
"direct": false,
"version": "3.3.12",
"ecosystem": "npm"
},
{
"name": "negotiator",
"direct": false,
"version": "1.0.0",
"ecosystem": "npm"
},
{
"name": "next-themes",
"direct": false,
"version": "0.4.6",
"ecosystem": "npm"
},
{
"name": "next-themes",
"direct": false,
"version": "^0.4.6",
"ecosystem": "npm"
},
{
"name": "node-domexception",
"direct": false,
"version": "1.0.0",
"ecosystem": "npm"
},
{
"name": "node-fetch",
"direct": false,
"version": "2.7.0",
"ecosystem": "npm"
},
{
"name": "node-fetch",
"direct": false,
"version": "3.3.2",
"ecosystem": "npm"
},
{
"name": "node-releases",
"direct": false,
"version": "2.0.38",
"ecosystem": "npm"
},
{
"name": "normalize-path",
"direct": false,
"version": "3.0.0",
"ecosystem": "npm"
},
{
"name": "npm-run-path",
"direct": false,
"version": "4.0.1",
"ecosystem": "npm"
},
{
"name": "npm-run-path",
"direct": false,
"version": "6.0.0",
"ecosystem": "npm"
},
{
"name": "object-assign",
"direct": false,
"version": "4.1.1",
"ecosystem": "npm"
},
{
"name": "object-inspect",
"direct": false,
"version": "1.13.4",
"ecosystem": "npm"
},
{
"name": "object-treeify",
"direct": false,
"version": "1.1.33",
"ecosystem": "npm"
},
{
"name": "obug",
"direct": false,
"version": "2.1.1",
"ecosystem": "npm"
},
{
"name": "on-finished",
"direct": false,
"version": "2.4.1",
"ecosystem": "npm"
},
{
"name": "once",
"direct": false,
"version": "1.4.0",
"ecosystem": "npm"
},
{
"name": "onetime",
"direct": false,
"version": "5.1.2",
"ecosystem": "npm"
},
{
"name": "onetime",
"direct": false,
"version": "7.0.0",
"ecosystem": "npm"
},
{
"name": "open",
"direct": false,
"version": "11.0.0",
"ecosystem": "npm"
},
{
"name": "ora",
"direct": false,
"version": "8.2.0",
"ecosystem": "npm"
},
{
"name": "orderedmap",
"direct": false,
"version": "2.1.1",
"ecosystem": "npm"
},
{
"name": "outdent",
"direct": false,
"version": "0.5.0",
"ecosystem": "npm"
},
{
"name": "outvariant",
"direct": false,
"version": "1.4.3",
"ecosystem": "npm"
},
{
"name": "p-filter",
"direct": false,
"version": "2.1.0",
"ecosystem": "npm"
},
{
"name": "p-limit",
"direct": false,
"version": "2.3.0",
"ecosystem": "npm"
},
{
"name": "p-locate",
"direct": false,
"version": "4.1.0",
"ecosystem": "npm"
},
{
"name": "p-map",
"direct": false,
"version": "2.1.0",
"ecosystem": "npm"
},
{
"name": "p-try",
"direct": false,
"version": "2.2.0",
"ecosystem": "npm"
},
{
"name": "package-manager-detector",
"direct": false,
"version": "0.2.11",
"ecosystem": "npm"
},
{
"name": "parent-module",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "parse-json",
"direct": false,
"version": "5.2.0",
"ecosystem": "npm"
},
{
"name": "parse-ms",
"direct": false,
"version": "4.0.0",
"ecosystem": "npm"
},
{
"name": "parseurl",
"direct": false,
"version": "1.3.3",
"ecosystem": "npm"
},
{
"name": "path-browserify",
"direct": false,
"version": "1.0.1",
"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-key",
"direct": false,
"version": "4.0.0",
"ecosystem": "npm"
},
{
"name": "path-to-regexp",
"direct": false,
"version": "6.3.0",
"ecosystem": "npm"
},
{
"name": "path-to-regexp",
"direct": false,
"version": "8.4.2",
"ecosystem": "npm"
},
{
"name": "path-type",
"direct": false,
"version": "4.0.0",
"ecosystem": "npm"
},
{
"name": "pathe",
"direct": false,
"version": "2.0.3",
"ecosystem": "npm"
},
{
"name": "picocolors",
"direct": false,
"version": "1.1.1",
"ecosystem": "npm"
},
{
"name": "picocolors",
"direct": false,
"version": "^1.1.1",
"ecosystem": "npm"
},
{
"name": "picomatch",
"direct": false,
"version": "2.3.2",
"ecosystem": "npm"
},
{
"name": "picomatch",
"direct": false,
"version": "4.0.4",
"ecosystem": "npm"
},
{
"name": "pirates",
"direct": false,
"version": "4.0.7",
"ecosystem": "npm"
},
{
"name": "pkce-challenge",
"direct": false,
"version": "5.0.1",
"ecosystem": "npm"
},
{
"name": "pkg-types",
"direct": false,
"version": "1.3.1",
"ecosystem": "npm"
},
{
"name": "playwright",
"direct": false,
"version": "1.59.1",
"ecosystem": "npm"
},
{
"name": "playwright-core",
"direct": false,
"version": "1.59.1",
"ecosystem": "npm"
},
{
"name": "postcss",
"direct": false,
"version": "8.5.14",
"ecosystem": "npm"
},
{
"name": "postcss",
"direct": false,
"version": "8.5.15",
"ecosystem": "npm"
},
{
"name": "postcss-load-config",
"direct": false,
"version": "6.0.1",
"ecosystem": "npm"
},
{
"name": "postcss-selector-parser",
"direct": false,
"version": "7.1.1",
"ecosystem": "npm"
},
{
"name": "powershell-utils",
"direct": false,
"version": "0.1.0",
"ecosystem": "npm"
},
{
"name": "prettier",
"direct": false,
"version": "2.8.8",
"ecosystem": "npm"
},
{
"name": "prettier",
"direct": false,
"version": "3.8.3",
"ecosystem": "npm"
},
{
"name": "pretty-ms",
"direct": false,
"version": "9.3.0",
"ecosystem": "npm"
},
{
"name": "prompts",
"direct": false,
"version": "2.4.2",
"ecosystem": "npm"
},
{
"name": "prosemirror-changeset",
"direct": false,
"version": "2.4.1",
"ecosystem": "npm"
},
{
"name": "prosemirror-commands",
"direct": false,
"version": "1.7.1",
"ecosystem": "npm"
},
{
"name": "prosemirror-dropcursor",
"direct": false,
"version": "1.8.2",
"ecosystem": "npm"
},
{
"name": "prosemirror-gapcursor",
"direct": false,
"version": "1.4.1",
"ecosystem": "npm"
},
{
"name": "prosemirror-history",
"direct": false,
"version": "1.5.0",
"ecosystem": "npm"
},
{
"name": "prosemirror-keymap",
"direct": false,
"version": "1.2.3",
"ecosystem": "npm"
},
{
"name": "prosemirror-model",
"direct": false,
"version": "1.25.4",
"ecosystem": "npm"
},
{
"name": "prosemirror-schema-list",
"direct": false,
"version": "1.5.1",
"ecosystem": "npm"
},
{
"name": "prosemirror-state",
"direct": false,
"version": "1.4.4",
"ecosystem": "npm"
},
{
"name": "prosemirror-tables",
"direct": false,
"version": "1.8.5",
"ecosystem": "npm"
},
{
"name": "prosemirror-transform",
"direct": false,
"version": "1.12.0",
"ecosystem": "npm"
},
{
"name": "prosemirror-view",
"direct": false,
"version": "1.41.8",
"ecosystem": "npm"
},
{
"name": "proxy-addr",
"direct": false,
"version": "2.0.7",
"ecosystem": "npm"
},
{
"name": "qs",
"direct": false,
"version": "6.15.2",
"ecosystem": "npm"
},
{
"name": "quansync",
"direct": false,
"version": "0.2.11",
"ecosystem": "npm"
},
{
"name": "queue-microtask",
"direct": false,
"version": "1.2.3",
"ecosystem": "npm"
},
{
"name": "range-parser",
"direct": false,
"version": "1.2.1",
"ecosystem": "npm"
},
{
"name": "raw-body",
"direct": false,
"version": "3.0.2",
"ecosystem": "npm"
},
{
"name": "react",
"direct": false,
"version": "19.2.6",
"ecosystem": "npm"
},
{
"name": "react",
"direct": false,
"version": "^19.2.6",
"ecosystem": "npm"
},
{
"name": "react-colorful",
"direct": false,
"version": "5.7.0",
"ecosystem": "npm"
},
{
"name": "react-colorful",
"direct": false,
"version": "^5.7.0",
"ecosystem": "npm"
},
{
"name": "react-day-picker",
"direct": false,
"version": "9.14.0",
"ecosystem": "npm"
},
{
"name": "react-day-picker",
"direct": false,
"version": "^9.14.0",
"ecosystem": "npm"
},
{
"name": "react-dom",
"direct": false,
"version": "19.2.6",
"ecosystem": "npm"
},
{
"name": "react-dom",
"direct": false,
"version": "^19.2.6",
"ecosystem": "npm"
},
{
"name": "react-hook-form",
"direct": false,
"version": "7.75.0",
"ecosystem": "npm"
},
{
"name": "react-hook-form",
"direct": false,
"version": "^7.75.0",
"ecosystem": "npm"
},
{
"name": "react-i18next",
"direct": false,
"version": "17.0.8",
"ecosystem": "npm"
},
{
"name": "react-i18next",
"direct": false,
"version": "^17.0.8",
"ecosystem": "npm"
},
{
"name": "react-is",
"direct": false,
"version": "19.2.5",
"ecosystem": "npm"
},
{
"name": "react-redux",
"direct": false,
"version": "9.2.0",
"ecosystem": "npm"
},
{
"name": "react-remove-scroll",
"direct": false,
"version": "2.7.2",
"ecosystem": "npm"
},
{
"name": "react-remove-scroll-bar",
"direct": false,
"version": "2.3.8",
"ecosystem": "npm"
},
{
"name": "react-style-singleton",
"direct": false,
"version": "2.2.3",
"ecosystem": "npm"
},
{
"name": "read-yaml-file",
"direct": false,
"version": "2.1.0",
"ecosystem": "npm"
},
{
"name": "readdirp",
"direct": false,
"version": "3.6.0",
"ecosystem": "npm"
},
{
"name": "readdirp",
"direct": false,
"version": "4.1.2",
"ecosystem": "npm"
},
{
"name": "recast",
"direct": false,
"version": "0.23.11",
"ecosystem": "npm"
},
{
"name": "recharts",
"direct": false,
"version": "3.8.1",
"ecosystem": "npm"
},
{
"name": "recharts",
"direct": false,
"version": "^3.8.1",
"ecosystem": "npm"
},
{
"name": "redux",
"direct": false,
"version": "5.0.1",
"ecosystem": "npm"
},
{
"name": "redux-thunk",
"direct": false,
"version": "3.1.0",
"ecosystem": "npm"
},
{
"name": "require-directory",
"direct": false,
"version": "2.1.1",
"ecosystem": "npm"
},
{
"name": "require-from-string",
"direct": false,
"version": "2.0.2",
"ecosystem": "npm"
},
{
"name": "reselect",
"direct": false,
"version": "5.1.1",
"ecosystem": "npm"
},
{
"name": "resolve-from",
"direct": false,
"version": "4.0.0",
"ecosystem": "npm"
},
{
"name": "resolve-from",
"direct": false,
"version": "5.0.0",
"ecosystem": "npm"
},
{
"name": "resolve-pkg-maps",
"direct": false,
"version": "1.0.0",
"ecosystem": "npm"
},
{
"name": "restore-cursor",
"direct": false,
"version": "5.1.0",
"ecosystem": "npm"
},
{
"name": "rettime",
"direct": false,
"version": "0.11.11",
"ecosystem": "npm"
},
{
"name": "reusify",
"direct": false,
"version": "1.1.0",
"ecosystem": "npm"
},
{
"name": "rolldown",
"direct": false,
"version": "1.0.3",
"ecosystem": "npm"
},
{
"name": "rollup",
"direct": false,
"version": "4.62.0",
"ecosystem": "npm"
},
{
"name": "rope-sequence",
"direct": false,
"version": "1.3.4",
"ecosystem": "npm"
},
{
"name": "router",
"direct": false,
"version": "2.2.0",
"ecosystem": "npm"
},
{
"name": "run-applescript",
"direct": false,
"version": "7.1.0",
"ecosystem": "npm"
},
{
"name": "run-parallel",
"direct": false,
"version": "1.2.0",
"ecosystem": "npm"
},
{
"name": "safer-buffer",
"direct": false,
"version": "2.1.2",
"ecosystem": "npm"
},
{
"name": "scheduler",
"direct": false,
"version": "0.27.0",
"ecosystem": "npm"
},
{
"name": "semver",
"direct": false,
"version": "6.3.1",
"ecosystem": "npm"
},
{
"name": "semver",
"direct": false,
"version": "7.7.4",
"ecosystem": "npm"
},
{
"name": "send",
"direct": false,
"version": "1.2.1",
"ecosystem": "npm"
},
{
"name": "seroval",
"direct": false,
"version": "1.5.4",
"ecosystem": "npm"
},
{
"name": "seroval-plugins",
"direct": false,
"version": "1.5.4",
"ecosystem": "npm"
},
{
"name": "serve-static",
"direct": false,
"version": "2.2.1",
"ecosystem": "npm"
},
{
"name": "set-cookie-parser",
"direct": false,
"version": "3.1.0",
"ecosystem": "npm"
},
{
"name": "setprototypeof",
"direct": false,
"version": "1.2.0",
"ecosystem": "npm"
},
{
"name": "shadcn",
"direct": false,
"version": "4.7.0",
"ecosystem": "npm"
},
{
"name": "shadcn",
"direct": false,
"version": "^4.7.0",
"ecosystem": "npm"
},
{
"name": "shebang-command",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "shebang-regex",
"direct": false,
"version": "3.0.0",
"ecosystem": "npm"
},
{
"name": "side-channel",
"direct": false,
"version": "1.1.0",
"ecosystem": "npm"
},
{
"name": "side-channel-list",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "side-channel-map",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "side-channel-weakmap",
"direct": false,
"version": "1.0.2",
"ecosystem": "npm"
},
{
"name": "siginfo",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "signal-exit",
"direct": false,
"version": "3.0.7",
"ecosystem": "npm"
},
{
"name": "signal-exit",
"direct": false,
"version": "4.1.0",
"ecosystem": "npm"
},
{
"name": "simple-wcswidth",
"direct": false,
"version": "1.1.2",
"ecosystem": "npm"
},
{
"name": "sisteransi",
"direct": false,
"version": "1.0.5",
"ecosystem": "npm"
},
{
"name": "slash",
"direct": false,
"version": "3.0.0",
"ecosystem": "npm"
},
{
"name": "sonner",
"direct": false,
"version": "2.0.7",
"ecosystem": "npm"
},
{
"name": "sonner",
"direct": false,
"version": "^2.0.7",
"ecosystem": "npm"
},
{
"name": "source-map",
"direct": false,
"version": "0.6.1",
"ecosystem": "npm"
},
{
"name": "source-map",
"direct": false,
"version": "0.7.6",
"ecosystem": "npm"
},
{
"name": "source-map-js",
"direct": false,
"version": "1.2.1",
"ecosystem": "npm"
},
{
"name": "spark-md5",
"direct": false,
"version": "3.0.2",
"ecosystem": "npm"
},
{
"name": "spark-md5",
"direct": false,
"version": "^3.0.2",
"ecosystem": "npm"
},
{
"name": "spawndamnit",
"direct": false,
"version": "3.0.1",
"ecosystem": "npm"
},
{
"name": "stackback",
"direct": false,
"version": "0.0.2",
"ecosystem": "npm"
},
{
"name": "statuses",
"direct": false,
"version": "2.0.2",
"ecosystem": "npm"
},
{
"name": "std-env",
"direct": false,
"version": "4.1.0",
"ecosystem": "npm"
},
{
"name": "stdin-discarder",
"direct": false,
"version": "0.2.2",
"ecosystem": "npm"
},
{
"name": "strict-event-emitter",
"direct": false,
"version": "0.5.1",
"ecosystem": "npm"
},
{
"name": "string-width",
"direct": false,
"version": "4.2.3",
"ecosystem": "npm"
},
{
"name": "string-width",
"direct": false,
"version": "7.2.0",
"ecosystem": "npm"
},
{
"name": "stringify-object",
"direct": false,
"version": "5.0.0",
"ecosystem": "npm"
},
{
"name": "strip-ansi",
"direct": false,
"version": "6.0.1",
"ecosystem": "npm"
},
{
"name": "strip-ansi",
"direct": false,
"version": "7.2.0",
"ecosystem": "npm"
},
{
"name": "strip-bom",
"direct": false,
"version": "3.0.0",
"ecosystem": "npm"
},
{
"name": "strip-bom",
"direct": false,
"version": "4.0.0",
"ecosystem": "npm"
},
{
"name": "strip-final-newline",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "strip-final-newline",
"direct": false,
"version": "4.0.0",
"ecosystem": "npm"
},
{
"name": "sucrase",
"direct": false,
"version": "3.35.1",
"ecosystem": "npm"
},
{
"name": "supports-color",
"direct": false,
"version": "7.2.0",
"ecosystem": "npm"
},
{
"name": "tagged-tag",
"direct": false,
"version": "1.0.0",
"ecosystem": "npm"
},
{
"name": "tailwind-merge",
"direct": false,
"version": "3.5.0",
"ecosystem": "npm"
},
{
"name": "tailwind-merge",
"direct": false,
"version": "^3.5.0",
"ecosystem": "npm"
},
{
"name": "tailwindcss",
"direct": false,
"version": "4.2.4",
"ecosystem": "npm"
},
{
"name": "tailwindcss",
"direct": false,
"version": "^4.2.4",
"ecosystem": "npm"
},
{
"name": "tapable",
"direct": false,
"version": "2.3.3",
"ecosystem": "npm"
},
{
"name": "term-size",
"direct": false,
"version": "2.2.1",
"ecosystem": "npm"
},
{
"name": "thenify",
"direct": false,
"version": "3.3.1",
"ecosystem": "npm"
},
{
"name": "thenify-all",
"direct": false,
"version": "1.6.0",
"ecosystem": "npm"
},
{
"name": "tiny-invariant",
"direct": false,
"version": "1.3.3",
"ecosystem": "npm"
},
{
"name": "tinybench",
"direct": false,
"version": "2.9.0",
"ecosystem": "npm"
},
{
"name": "tinyexec",
"direct": false,
"version": "0.3.2",
"ecosystem": "npm"
},
{
"name": "tinyexec",
"direct": false,
"version": "1.1.2",
"ecosystem": "npm"
},
{
"name": "tinyglobby",
"direct": false,
"version": "0.2.16",
"ecosystem": "npm"
},
{
"name": "tinyglobby",
"direct": false,
"version": "0.2.17",
"ecosystem": "npm"
},
{
"name": "tinyrainbow",
"direct": false,
"version": "3.1.0",
"ecosystem": "npm"
},
{
"name": "tldts",
"direct": false,
"version": "7.0.30",
"ecosystem": "npm"
},
{
"name": "tldts-core",
"direct": false,
"version": "7.0.30",
"ecosystem": "npm"
},
{
"name": "to-regex-range",
"direct": false,
"version": "5.0.1",
"ecosystem": "npm"
},
{
"name": "toidentifier",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "tough-cookie",
"direct": false,
"version": "6.0.1",
"ecosystem": "npm"
},
{
"name": "tr46",
"direct": false,
"version": "0.0.3",
"ecosystem": "npm"
},
{
"name": "tree-kill",
"direct": false,
"version": "1.2.2",
"ecosystem": "npm"
},
{
"name": "ts-interface-checker",
"direct": false,
"version": "0.1.13",
"ecosystem": "npm"
},
{
"name": "ts-morph",
"direct": false,
"version": "26.0.0",
"ecosystem": "npm"
},
{
"name": "tsconfig-paths",
"direct": false,
"version": "4.2.0",
"ecosystem": "npm"
},
{
"name": "tslib",
"direct": false,
"version": "2.8.1",
"ecosystem": "npm"
},
{
"name": "tsup",
"direct": false,
"version": "8.5.1",
"ecosystem": "npm"
},
{
"name": "tsup",
"direct": false,
"version": "^8.0.0",
"ecosystem": "npm"
},
{
"name": "tsup",
"direct": false,
"version": "^8.5.1",
"ecosystem": "npm"
},
{
"name": "tsx",
"direct": false,
"version": "4.21.0",
"ecosystem": "npm"
},
{
"name": "tsx",
"direct": false,
"version": "^4.0.0",
"ecosystem": "npm"
},
{
"name": "tsx",
"direct": false,
"version": "^4.21.0",
"ecosystem": "npm"
},
{
"name": "turbo",
"direct": false,
"version": "2.9.18",
"ecosystem": "npm"
},
{
"name": "tw-animate-css",
"direct": false,
"version": "1.4.0",
"ecosystem": "npm"
},
{
"name": "tw-animate-css",
"direct": false,
"version": "^1.4.0",
"ecosystem": "npm"
},
{
"name": "type-fest",
"direct": false,
"version": "5.6.0",
"ecosystem": "npm"
},
{
"name": "type-is",
"direct": false,
"version": "2.0.1",
"ecosystem": "npm"
},
{
"name": "typescript",
"direct": false,
"version": "6.0.3",
"ecosystem": "npm"
},
{
"name": "typescript",
"direct": false,
"version": "^6.0.3",
"ecosystem": "npm"
},
{
"name": "typescript",
"direct": false,
"version": "~6.0.3",
"ecosystem": "npm"
},
{
"name": "ufo",
"direct": false,
"version": "1.6.3",
"ecosystem": "npm"
},
{
"name": "undici-types",
"direct": false,
"version": "7.19.2",
"ecosystem": "npm"
},
{
"name": "unicorn-magic",
"direct": false,
"version": "0.3.0",
"ecosystem": "npm"
},
{
"name": "universalify",
"direct": false,
"version": "0.1.2",
"ecosystem": "npm"
},
{
"name": "universalify",
"direct": false,
"version": "2.0.1",
"ecosystem": "npm"
},
{
"name": "unpipe",
"direct": false,
"version": "1.0.0",
"ecosystem": "npm"
},
{
"name": "unplugin",
"direct": false,
"version": "3.0.0",
"ecosystem": "npm"
},
{
"name": "until-async",
"direct": false,
"version": "3.0.2",
"ecosystem": "npm"
},
{
"name": "update-browserslist-db",
"direct": false,
"version": "1.2.3",
"ecosystem": "npm"
},
{
"name": "use-callback-ref",
"direct": false,
"version": "1.3.3",
"ecosystem": "npm"
},
{
"name": "use-sidecar",
"direct": false,
"version": "1.1.3",
"ecosystem": "npm"
},
{
"name": "use-sync-external-store",
"direct": false,
"version": "1.6.0",
"ecosystem": "npm"
},
{
"name": "util-deprecate",
"direct": false,
"version": "1.0.2",
"ecosystem": "npm"
},
{
"name": "validate-npm-package-name",
"direct": false,
"version": "7.0.2",
"ecosystem": "npm"
},
{
"name": "vary",
"direct": false,
"version": "1.1.2",
"ecosystem": "npm"
},
{
"name": "victory-vendor",
"direct": false,
"version": "37.3.6",
"ecosystem": "npm"
},
{
"name": "vite",
"direct": false,
"version": "8.0.16",
"ecosystem": "npm"
},
{
"name": "vite",
"direct": false,
"version": "^8.0.11",
"ecosystem": "npm"
},
{
"name": "vite",
"direct": false,
"version": "^8.0.16",
"ecosystem": "npm"
},
{
"name": "vitest",
"direct": false,
"version": "4.1.5",
"ecosystem": "npm"
},
{
"name": "vitest",
"direct": false,
"version": "^4.1.5",
"ecosystem": "npm"
},
{
"name": "void-elements",
"direct": false,
"version": "3.1.0",
"ecosystem": "npm"
},
{
"name": "w3c-keyname",
"direct": false,
"version": "2.2.8",
"ecosystem": "npm"
},
{
"name": "web-streams-polyfill",
"direct": false,
"version": "3.3.3",
"ecosystem": "npm"
},
{
"name": "webidl-conversions",
"direct": false,
"version": "3.0.1",
"ecosystem": "npm"
},
{
"name": "webpack-virtual-modules",
"direct": false,
"version": "0.6.2",
"ecosystem": "npm"
},
{
"name": "whatwg-url",
"direct": false,
"version": "5.0.0",
"ecosystem": "npm"
},
{
"name": "which",
"direct": false,
"version": "2.0.2",
"ecosystem": "npm"
},
{
"name": "which",
"direct": false,
"version": "4.0.0",
"ecosystem": "npm"
},
{
"name": "why-is-node-running",
"direct": false,
"version": "2.3.0",
"ecosystem": "npm"
},
{
"name": "wrap-ansi",
"direct": false,
"version": "7.0.0",
"ecosystem": "npm"
},
{
"name": "wrappy",
"direct": false,
"version": "1.0.2",
"ecosystem": "npm"
},
{
"name": "wsl-utils",
"direct": false,
"version": "0.3.1",
"ecosystem": "npm"
},
{
"name": "y18n",
"direct": false,
"version": "5.0.8",
"ecosystem": "npm"
},
{
"name": "yallist",
"direct": false,
"version": "3.1.1",
"ecosystem": "npm"
},
{
"name": "yaml",
"direct": false,
"version": "2.8.4",
"ecosystem": "npm"
},
{
"name": "yaml",
"direct": false,
"version": "^2.8.4",
"ecosystem": "npm"
},
{
"name": "yargs",
"direct": false,
"version": "17.7.2",
"ecosystem": "npm"
},
{
"name": "yargs-parser",
"direct": false,
"version": "21.1.1",
"ecosystem": "npm"
},
{
"name": "yocto-spinner",
"direct": false,
"version": "1.2.0",
"ecosystem": "npm"
},
{
"name": "yoctocolors",
"direct": false,
"version": "2.1.2",
"ecosystem": "npm"
},
{
"name": "zod",
"direct": false,
"version": "3.25.76",
"ecosystem": "npm"
},
{
"name": "zod",
"direct": false,
"version": "4.4.3",
"ecosystem": "npm"
},
{
"name": "zod",
"direct": false,
"version": "^4.4.3",
"ecosystem": "npm"
},
{
"name": "zod-to-json-schema",
"direct": false,
"version": "3.25.2",
"ecosystem": "npm"
},
{
"name": "active_link_to",
"direct": false,
"version": null,
"ecosystem": "rubygems"
},
{
"name": "active_storage_validations",
"direct": false,
"version": null,
"ecosystem": "rubygems"
},
{
"name": "acts-as-taggable-on",
"direct": false,
"version": null,
"ecosystem": "rubygems"
},
{
"name": "acts_as_list",
"direct": false,
"version": null,
"ecosystem": "rubygems"
},
{
"name": "alba",
"direct": false,
"version": null,
"ecosystem": "rubygems"
},
{
"name": "ar_lazy_preload",
"direct": false,
"version": null,
"ecosystem": "rubygems"
},
{
"name": "awesome_nested_set",
"direct": false,
"version": null,
"ecosystem": "rubygems"
},
{
"name": "bcrypt",
"direct": false,
"version": null,
"ecosystem": "rubygems"
},
{
"name": "benchmark",
"direct": false,
"version": null,
"ecosystem": "rubygems"
},
{
"name": "breadcrumbs_on_rails",
"direct": false,
"version": null,
"ecosystem": "rubygems"
},
{
"name": "cancancan",
"direct": false,
"version": null,
"ecosystem": "rubygems"
},
{
"name": "carmen",
"direct": false,
"version": null,
"ecosystem": "rubygems"
},
{
"name": "chartkick",
"direct": false,
"version": null,
"ecosystem": "rubygems"
},
{
"name": "countries",
"direct": false,
"version": null,
"ecosystem": "rubygems"
},
{
"name": "email_spec",
"direct": false,
"version": null,
"ecosystem": "rubygems"
},
{
"name": "friendly_id",
"direct": false,
"version": null,
"ecosystem": "rubygems"
},
{
"name": "friendly_id-mobility",
"direct": false,
"version": null,
"ecosystem": "rubygems"
},
{
"name": "geocoder",
"direct": false,
"version": null,
"ecosystem": "rubygems"
},
{
"name": "groupdate",
"direct": false,
"version": null,
"ecosystem": "rubygems"
},
{
"name": "highline",
"direct": false,
"version": null,
"ecosystem": "rubygems"
},
{
"name": "hightop",
"direct": false,
"version": null,
"ecosystem": "rubygems"
},
{
"name": "i18n-tasks",
"direct": false,
"version": null,
"ecosystem": "rubygems"
},
{
"name": "image_processing",
"direct": false,
"version": null,
"ecosystem": "rubygems"
},
{
"name": "importmap-rails",
"direct": false,
"version": null,
"ecosystem": "rubygems"
},
{
"name": "inline_svg",
"direct": false,
"version": null,
"ecosystem": "rubygems"
},
{
"name": "jwt",
"direct": false,
"version": null,
"ecosystem": "rubygems"
},
{
"name": "local_time",
"direct": false,
"version": null,
"ecosystem": "rubygems"
},
{
"name": "mapkick-rb",
"direct": false,
"version": null,
"ecosystem": "rubygems"
},
{
"name": "mobility",
"direct": false,
"version": null,
"ecosystem": "rubygems"
},
{
"name": "mobility-actiontext",
"direct": false,
"version": null,
"ecosystem": "rubygems"
},
{
"name": "mobility-ransack",
"direct": false,
"version": null,
"ecosystem": "rubygems"
},
{
"name": "monetize",
"direct": false,
"version": null,
"ecosystem": "rubygems"
},
{
"name": "money",
"direct": false,
"version": null,
"ecosystem": "rubygems"
},
{
"name": "name_of_person",
"direct": false,
"version": null,
"ecosystem": "rubygems"
},
{
"name": "oj",
"direct": false,
"version": null,
"ecosystem": "rubygems"
},
{
"name": "ostruct",
"direct": false,
"version": null,
"ecosystem": "rubygems"
},
{
"name": "pagy",
"direct": false,
"version": null,
"ecosystem": "rubygems"
},
{
"name": "paranoia",
"direct": false,
"version": null,
"ecosystem": "rubygems"
},
{
"name": "phonelib",
"direct": false,
"version": null,
"ecosystem": "rubygems"
},
{
"name": "rails",
"direct": false,
"version": null,
"ecosystem": "rubygems"
},
{
"name": "ransack",
"direct": false,
"version": null,
"ecosystem": "rubygems"
},
{
"name": "rexml",
"direct": false,
"version": null,
"ecosystem": "rubygems"
},
{
"name": "rswag-specs",
"direct": false,
"version": null,
"ecosystem": "rubygems"
},
{
"name": "ruby-oembed",
"direct": false,
"version": null,
"ecosystem": "rubygems"
},
{
"name": "safely_block",
"direct": false,
"version": null,
"ecosystem": "rubygems"
},
{
"name": "selenium-webdriver",
"direct": false,
"version": null,
"ecosystem": "rubygems"
},
{
"name": "spree",
"direct": false,
"version": null,
"ecosystem": "rubygems"
},
{
"name": "spree_core",
"direct": false,
"version": null,
"ecosystem": "rubygems"
},
{
"name": "spree_emails",
"direct": false,
"version": null,
"ecosystem": "rubygems"
},
{
"name": "sprockets-rails",
"direct": false,
"version": null,
"ecosystem": "rubygems"
},
{
"name": "sqids",
"direct": false,
"version": null,
"ecosystem": "rubygems"
},
{
"name": "ssrf_filter",
"direct": false,
"version": null,
"ecosystem": "rubygems"
},
{
"name": "state_machines-activemodel",
"direct": false,
"version": null,
"ecosystem": "rubygems"
},
{
"name": "state_machines-activerecord",
"direct": false,
"version": null,
"ecosystem": "rubygems"
},
{
"name": "stimulus-rails",
"direct": false,
"version": null,
"ecosystem": "rubygems"
},
{
"name": "stringex",
"direct": false,
"version": null,
"ecosystem": "rubygems"
},
{
"name": "tailwindcss-rails",
"direct": false,
"version": null,
"ecosystem": "rubygems"
},
{
"name": "tailwindcss-ruby",
"direct": false,
"version": null,
"ecosystem": "rubygems"
},
{
"name": "tinymce-rails",
"direct": false,
"version": null,
"ecosystem": "rubygems"
},
{
"name": "tracking_number",
"direct": false,
"version": null,
"ecosystem": "rubygems"
},
{
"name": "turbo-rails",
"direct": false,
"version": null,
"ecosystem": "rubygems"
},
{
"name": "typelizer",
"direct": false,
"version": null,
"ecosystem": "rubygems"
},
{
"name": "validates_zipcode",
"direct": false,
"version": null,
"ecosystem": "rubygems"
},
{
"name": "wannabe_bool",
"direct": false,
"version": null,
"ecosystem": "rubygems"
}
],
"collected": true,
"truncated": false,
"total_count": 942,
"direct_count": 2,
"indirect_count": 940
}
},
"maintainership": {
"issues": {
"open_prs": 49,
"merged_prs": 5313,
"open_issues": 76,
"closed_ratio": 0.982,
"closed_issues": 4253,
"closed_unmerged_prs": 4537
},
"bus_factor": 2,
"bot_contributors": 4,
"top_contributors": [
{
"type": "User",
"login": "damianlegawiec",
"commits": 6782,
"avatar_url": "https://avatars.githubusercontent.com/u/55154?v=4"
},
{
"type": "User",
"login": "radar",
"commits": 4059,
"avatar_url": "https://avatars.githubusercontent.com/u/2687?v=4"
},
{
"type": "User",
"login": "schof",
"commits": 2149,
"avatar_url": "https://avatars.githubusercontent.com/u/85518?v=4"
},
{
"type": "User",
"login": "MatthewKennedy",
"commits": 1027,
"avatar_url": "https://avatars.githubusercontent.com/u/1240766?v=4"
},
{
"type": "User",
"login": "BDQ",
"commits": 634,
"avatar_url": "https://avatars.githubusercontent.com/u/22470?v=4"
},
{
"type": "User",
"login": "huoxito",
"commits": 620,
"avatar_url": "https://avatars.githubusercontent.com/u/245662?v=4"
},
{
"type": "User",
"login": "romul",
"commits": 432,
"avatar_url": "https://avatars.githubusercontent.com/u/28540?v=4"
},
{
"type": "User",
"login": "LBRapid",
"commits": 343,
"avatar_url": "https://avatars.githubusercontent.com/u/19807?v=4"
},
{
"type": "User",
"login": "bbonislawski",
"commits": 285,
"avatar_url": "https://avatars.githubusercontent.com/u/7106611?v=4"
},
{
"type": "User",
"login": "mad-eel",
"commits": 266,
"avatar_url": "https://avatars.githubusercontent.com/u/18441660?v=4"
}
],
"contributors_sampled": 96,
"top_contributor_share": 0.314
},
"quality_signals": {
"has_ci": true,
"has_tests": true,
"ci_workflows": [
"docs-package.yml",
"packages.yml",
"release.yml",
"security-audit.yml",
"tests.yml"
],
"has_docs_dir": true,
"linter_configs": [
"biome.json"
],
"has_editorconfig": false,
"has_linter_config": true,
"has_precommit_config": false
},
"security_signals": {
"lockfiles": [
"pnpm-lock.yaml"
],
"scorecard": {
"checks": [
{
"name": "Binary-Artifacts",
"score": 10,
"reason": "no binaries found in the repo",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
},
{
"name": "Branch-Protection",
"score": 0,
"reason": "branch protection not enabled on development/release branches",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
},
{
"name": "CI-Tests",
"score": 10,
"reason": "23 out of 23 merged PRs checked by a CI test -- score normalized to 10",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
},
{
"name": "CII-Best-Practices",
"score": 0,
"reason": "no effort to earn an OpenSSF best practices badge detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
},
{
"name": "Code-Review",
"score": 1,
"reason": "Found 4/26 approved changesets -- score normalized to 1",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
},
{
"name": "Contributors",
"score": 10,
"reason": "project has 27 contributing companies or organizations",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
},
{
"name": "Dangerous-Workflow",
"score": 10,
"reason": "no dangerous workflow patterns detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
},
{
"name": "Dependency-Update-Tool",
"score": 10,
"reason": "update tool detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
},
{
"name": "Fuzzing",
"score": 0,
"reason": "project is not fuzzed",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
},
{
"name": "License",
"score": 10,
"reason": "license file detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
},
{
"name": "Maintained",
"score": 10,
"reason": "30 commit(s) and 12 issue activity found in the last 90 days -- score normalized to 10",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
},
{
"name": "Packaging",
"score": 10,
"reason": "packaging workflow detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
},
{
"name": "Pinned-Dependencies",
"score": 0,
"reason": "dependency not pinned by hash detected -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
},
{
"name": "SAST",
"score": 10,
"reason": "SAST tool is run on all commits",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
},
{
"name": "Security-Policy",
"score": 10,
"reason": "security policy file detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
},
{
"name": "Signed-Releases",
"score": null,
"reason": "no releases found",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
},
{
"name": "Token-Permissions",
"score": 0,
"reason": "detected GitHub workflow tokens with excessive permissions",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
},
{
"name": "Vulnerabilities",
"score": 0,
"reason": "10 existing vulnerabilities detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
}
],
"commit": "202d846374270c75e19b23cea5498ea559577f67",
"ran_at": "2026-07-21T23:24:53Z",
"aggregate_score": 5.7,
"scorecard_version": "v5.5.0"
},
"has_codeql_workflow": false,
"has_security_policy": true,
"has_dependabot_config": true
},
"contribution_flow": {
"collected": true,
"ci_last_run_at": "2026-07-21T17:32:49Z",
"oldest_open_prs": [
{
"number": 7064,
"created_at": "2016-02-15T08:05:44Z",
"last_comment_at": "2016-03-21T11:07:57Z",
"last_comment_author": "nishant-cyro"
},
{
"number": 8766,
"created_at": "2018-05-25T11:23:00Z",
"last_comment_at": "2018-05-28T15:40:48Z",
"last_comment_author": "MatthewKennedy"
},
{
"number": 11798,
"created_at": "2022-11-20T02:04:20Z",
"last_comment_at": "2022-11-20T02:05:04Z",
"last_comment_author": "viezly"
},
{
"number": 11859,
"created_at": "2023-02-22T13:25:30Z",
"last_comment_at": "2023-02-22T13:25:56Z",
"last_comment_author": "viezly"
},
{
"number": 11932,
"created_at": "2023-09-15T11:40:56Z",
"last_comment_at": "2023-10-02T09:59:02Z",
"last_comment_author": "rafalcymerys"
},
{
"number": 12196,
"created_at": "2024-10-29T14:17:49Z",
"last_comment_at": "2025-07-22T08:09:54Z",
"last_comment_author": "coderabbitai"
},
{
"number": 12278,
"created_at": "2024-12-29T13:05:40Z",
"last_comment_at": "2024-12-29T13:06:45Z",
"last_comment_author": "mbajur"
},
{
"number": 12425,
"created_at": "2025-02-20T13:34:22Z",
"last_comment_at": "2025-03-24T10:17:42Z",
"last_comment_author": "coderabbitai"
},
{
"number": 13075,
"created_at": "2025-09-08T03:45:27Z",
"last_comment_at": "2025-11-12T21:47:13Z",
"last_comment_author": "github-actions"
},
{
"number": 13326,
"created_at": "2025-11-30T12:25:28Z",
"last_comment_at": "2025-11-30T17:10:48Z",
"last_comment_author": "damianlegawiec"
},
{
"number": 13330,
"created_at": "2025-12-01T16:02:18Z",
"last_comment_at": "2025-12-01T16:24:13Z",
"last_comment_author": "dwstyagi"
},
{
"number": 13430,
"created_at": "2026-01-09T15:45:51Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 13597,
"created_at": "2026-02-16T15:18:24Z",
"last_comment_at": "2026-02-24T12:03:08Z",
"last_comment_author": "codecov"
},
{
"number": 13721,
"created_at": "2026-03-04T12:14:58Z",
"last_comment_at": "2026-03-04T12:20:45Z",
"last_comment_author": "codecov"
},
{
"number": 13726,
"created_at": "2026-03-04T17:24:53Z",
"last_comment_at": "2026-03-04T17:42:51Z",
"last_comment_author": "codecov"
},
{
"number": 13942,
"created_at": "2026-04-24T17:55:16Z",
"last_comment_at": "2026-04-24T17:55:28Z",
"last_comment_author": "github-actions"
},
{
"number": 13943,
"created_at": "2026-04-24T18:15:19Z",
"last_comment_at": "2026-04-24T18:15:30Z",
"last_comment_author": "github-actions"
},
{
"number": 13948,
"created_at": "2026-04-26T00:10:00Z",
"last_comment_at": "2026-04-26T00:10:13Z",
"last_comment_author": "github-actions"
},
{
"number": 13950,
"created_at": "2026-04-26T08:32:20Z",
"last_comment_at": "2026-04-26T08:32:32Z",
"last_comment_author": "github-actions"
},
{
"number": 13951,
"created_at": "2026-04-26T08:57:37Z",
"last_comment_at": "2026-04-26T08:57:50Z",
"last_comment_author": "github-actions"
}
],
"last_merged_pr_at": "2026-07-21T17:18:40Z",
"ci_last_conclusion": "SUCCESS",
"oldest_open_issues": [
{
"number": 5713,
"created_at": "2014-12-05T12:44:17Z",
"last_comment_at": "2014-12-09T22:29:42Z",
"last_comment_author": "JDutil"
},
{
"number": 6228,
"created_at": "2015-03-25T18:00:39Z",
"last_comment_at": "2015-03-26T15:22:14Z",
"last_comment_author": "niedfelj"
},
{
"number": 6460,
"created_at": "2015-06-03T21:26:06Z",
"last_comment_at": "2017-03-28T09:27:58Z",
"last_comment_author": "mvz"
},
{
"number": 6906,
"created_at": "2015-12-30T21:42:59Z",
"last_comment_at": "2016-10-05T15:32:43Z",
"last_comment_author": "joryhatton"
},
{
"number": 7226,
"created_at": "2016-03-18T10:52:47Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 7227,
"created_at": "2016-03-18T12:58:58Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 7506,
"created_at": "2016-07-28T08:27:38Z",
"last_comment_at": "2017-03-28T09:18:54Z",
"last_comment_author": "mvz"
},
{
"number": 7523,
"created_at": "2016-08-11T13:40:16Z",
"last_comment_at": "2016-08-15T21:23:14Z",
"last_comment_author": "krtschmr"
},
{
"number": 7592,
"created_at": "2016-09-20T21:46:05Z",
"last_comment_at": "2016-10-05T09:24:59Z",
"last_comment_author": "catalin88"
},
{
"number": 7890,
"created_at": "2017-03-26T18:27:51Z",
"last_comment_at": "2018-04-20T06:18:17Z",
"last_comment_author": "vishalzambre"
},
{
"number": 8208,
"created_at": "2017-08-07T06:08:52Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 8511,
"created_at": "2017-12-08T00:07:32Z",
"last_comment_at": "2020-12-05T07:56:55Z",
"last_comment_author": "githubble01"
},
{
"number": 8529,
"created_at": "2017-12-15T13:23:02Z",
"last_comment_at": "2018-02-13T13:33:27Z",
"last_comment_author": "pavels"
},
{
"number": 8578,
"created_at": "2018-02-05T11:56:31Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 8621,
"created_at": "2018-02-20T23:45:48Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 8719,
"created_at": "2018-05-08T07:33:28Z",
"last_comment_at": "2021-08-19T15:08:16Z",
"last_comment_author": "nflorentin"
},
{
"number": 8820,
"created_at": "2018-06-11T12:12:29Z",
"last_comment_at": "2018-06-11T18:59:27Z",
"last_comment_author": "MatthewKennedy"
},
{
"number": 9096,
"created_at": "2018-11-27T11:20:27Z",
"last_comment_at": "2019-03-22T08:14:30Z",
"last_comment_author": "PSzyszkaSpark"
},
{
"number": 9112,
"created_at": "2018-12-06T12:33:38Z",
"last_comment_at": "2019-03-11T14:26:01Z",
"last_comment_author": "jkojro"
},
{
"number": 9209,
"created_at": "2019-01-22T16:24:23Z",
"last_comment_at": "2019-01-23T18:46:59Z",
"last_comment_author": "LucasKuhn"
}
]
}
},
"config": {
"disabled_metrics": [],
"disabled_categories": [],
"disabled_components": {}
},
"source": {
"url": "https://github.com/spree/spree",
"host": "github.com",
"name": "spree",
"owner": "spree"
},
"metrics": {
"overall": {
"key": "overall",
"band": "good",
"name": "Overall health",
"note": null,
"notes": [],
"value": 84,
"inputs": {
"security": 66,
"vitality": 100,
"community": 92,
"governance": 73,
"engineering": 86
},
"components": []
},
"categories": [
{
"key": "vitality",
"band": "excellent",
"name": "Vitality",
"value": 100,
"weight": 0.22,
"metrics": [
{
"key": "development_activity",
"band": "excellent",
"name": "Development activity",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"commits_last_year": 2174,
"human_commit_share": 1,
"days_since_last_push": 0,
"active_weeks_last_year": 52
},
"components": [
{
"key": "push_recency",
"name": "Push recency",
"detail": "last push 0 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "push_recency",
"params": {
"days": 0
}
}
],
"max_points": 36
},
{
"key": "commit_cadence",
"name": "Commit cadence",
"detail": "52/52 weeks with commits",
"points": 36,
"status": "met",
"details": [
{
"code": "commit_cadence_weeks",
"params": {
"weeks": 52
}
}
],
"max_points": 36
},
{
"key": "commit_volume",
"name": "Commit volume",
"detail": "2174 commits in the last year",
"points": 18,
"status": "met",
"details": [
{
"code": "commits_last_year",
"params": {
"count": 2174
}
}
],
"max_points": 18
},
{
"key": "openssf_scorecard_maintained",
"name": "OpenSSF Scorecard: Maintained",
"detail": "30 commit(s) and 12 issue activity found in the last 90 days -- score normalized to 10",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
}
]
},
{
"key": "release_discipline",
"band": "excellent",
"name": "Release discipline",
"note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"openssf_scorecard_signed_releases"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 100,
"inputs": {
"releases_count": 100,
"latest_release_tag": "v5.4.4",
"releases_from_tags": false,
"days_since_latest_release": 1,
"mean_days_between_releases": 6.9
},
"components": [
{
"key": "ships_releases",
"name": "Ships releases",
"detail": "100 releases published",
"points": 27,
"status": "met",
"details": [
{
"code": "releases_published",
"params": {
"count": 100
}
}
],
"max_points": 27
},
{
"key": "release_recency",
"name": "Release recency",
"detail": "latest release 1 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "release_recency",
"params": {
"days": 1
}
}
],
"max_points": 36
},
{
"key": "release_cadence",
"name": "Release cadence",
"detail": "a release every ~6.9 days",
"points": 27,
"status": "met",
"details": [
{
"code": "release_cadence",
"params": {
"gap": 6.9
}
}
],
"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": 0,
"days_since_last_human_commit_is_floor": false
},
"components": [
{
"key": "project_is_still_maintained",
"name": "Project is still maintained",
"detail": "last human commit 0 days ago",
"points": 100,
"status": "met",
"details": [
{
"code": "abandonment_maintained",
"params": {
"days": 0
}
}
],
"max_points": 100
}
]
}
],
"description": "Is the project alive — is code being written and are releases shipping?"
},
{
"key": "community",
"band": "excellent",
"name": "Community & Adoption",
"value": 92,
"weight": 0.18,
"metrics": [
{
"key": "popularity",
"band": "excellent",
"name": "Popularity & adoption",
"note": null,
"notes": [],
"value": 96,
"inputs": {
"forks": 5285,
"stars": 15570,
"watchers": 83,
"growth_state": "organic",
"growth_factor_pct": 100
},
"components": [
{
"key": "stars",
"name": "Stars",
"detail": "15,570 stars",
"points": 60,
"status": "met",
"details": [
{
"code": "stars",
"params": {
"count": 15570
}
}
],
"max_points": 60
},
{
"key": "forks",
"name": "Forks",
"detail": "5,285 forks",
"points": 25,
"status": "met",
"details": [
{
"code": "forks",
"params": {
"count": 5285
}
}
],
"max_points": 25
},
{
"key": "watchers",
"name": "Watchers",
"detail": "83 watchers",
"points": 10.6,
"status": "partial",
"details": [
{
"code": "watchers",
"params": {
"count": 83
}
}
],
"max_points": 15
}
]
},
{
"key": "community_health",
"band": "excellent",
"name": "Community health",
"note": null,
"notes": [],
"value": 93,
"inputs": {
"has_readme": true,
"has_license": true,
"has_contributing": true,
"has_issue_template": true,
"has_code_of_conduct": true,
"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 (BSD-3-Clause)",
"points": 22.5,
"status": "met",
"details": [
{
"code": "license_standard",
"params": {}
},
{
"code": "license_spdx",
"params": {
"spdx": "BSD-3-Clause"
}
}
],
"max_points": 22.5
},
{
"key": "contributing_guide",
"name": "CONTRIBUTING guide",
"detail": null,
"points": 18,
"status": "met",
"details": [],
"max_points": 18
},
{
"key": "code_of_conduct",
"name": "Code of conduct",
"detail": null,
"points": 13.5,
"status": "met",
"details": [],
"max_points": 13.5
},
{
"key": "issue_template",
"name": "Issue template",
"detail": null,
"points": 7.2,
"status": "met",
"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": "good",
"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": 84,
"inputs": {
"packages": [
"spree"
],
"dependents": null,
"ecosystems": "rubygems",
"total_downloads": 2840445,
"monthly_downloads": null
},
"components": [
{
"key": "total_downloads",
"name": "Total downloads",
"detail": "2,840,445 downloads all-time across rubygems",
"points": 67.1,
"status": "partial",
"details": [
{
"code": "downloads_total",
"params": {
"count": 2840445,
"ecosystems": "rubygems"
}
}
],
"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": "good",
"name": "Sustainability & Governance",
"value": 73,
"weight": 0.24,
"metrics": [
{
"key": "maintainer_resilience",
"band": "moderate",
"name": "Maintainer resilience (bus factor)",
"note": null,
"notes": [],
"value": 64,
"inputs": {
"bus_factor": 2,
"contributors_sampled": 96,
"top_contributor_share": 0.314
},
"components": [
{
"key": "bus_factor",
"name": "Bus factor",
"detail": "2 contributor(s) cover half of all commits",
"points": 25.2,
"status": "partial",
"details": [
{
"code": "bus_factor",
"params": {
"count": 2
}
}
],
"max_points": 54
},
{
"key": "commit_distribution",
"name": "Commit distribution",
"detail": "top contributor authored 31% of commits",
"points": 15.4,
"status": "partial",
"details": [
{
"code": "top_contributor_share",
"params": {
"share": 31
}
}
],
"max_points": 22.5
},
{
"key": "contributor_breadth",
"name": "Contributor breadth",
"detail": "96 contributors",
"points": 13.5,
"status": "met",
"details": [
{
"code": "contributors_sampled",
"params": {
"count": 96
}
}
],
"max_points": 13.5
},
{
"key": "openssf_scorecard_contributors",
"name": "OpenSSF Scorecard: Contributors",
"detail": "project has 27 contributing companies or organizations",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
}
]
},
{
"key": "responsiveness",
"band": "moderate",
"name": "Issue & PR responsiveness",
"note": null,
"notes": [],
"value": 68,
"inputs": {
"merged_prs": 5313,
"open_issues": 76,
"closed_issues": 4253,
"issue_closed_ratio": 0.982,
"closed_unmerged_prs": 4537
},
"components": [
{
"key": "issue_resolution",
"name": "Issue resolution",
"detail": "98% of issues closed",
"points": 45.9,
"status": "partial",
"details": [
{
"code": "issues_closed_share",
"params": {
"share": 98
}
}
],
"max_points": 46.75
},
{
"key": "pr_acceptance",
"name": "PR acceptance",
"detail": "5313/9850 decided PRs merged",
"points": 20.6,
"status": "partial",
"details": [
{
"code": "decided_prs_merged",
"params": {
"merged": 5313,
"decided": 9850
}
}
],
"max_points": 38.25
},
{
"key": "openssf_scorecard_code_review",
"name": "OpenSSF Scorecard: Code-Review",
"detail": "Found 4/26 approved changesets -- score normalized to 1",
"points": 1.5,
"status": "partial",
"details": [],
"max_points": 15
}
]
},
{
"key": "stewardship",
"band": "moderate",
"name": "Ownership & stewardship",
"note": null,
"notes": [],
"value": 69,
"inputs": {
"followers": 197,
"owner_type": "Organization",
"is_verified": null,
"owner_login": "spree",
"public_repos": 26,
"account_age_days": 6358
},
"components": [
{
"key": "ownership_backing",
"name": "Ownership backing",
"detail": "organization-owned",
"points": 30,
"status": "met",
"details": [
{
"code": "owner_organization",
"params": {}
}
],
"max_points": 30
},
{
"key": "verified_domain",
"name": "Verified domain",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 20
},
{
"key": "owner_reach",
"name": "Owner reach",
"detail": "197 followers of spree",
"points": 16.5,
"status": "partial",
"details": [
{
"code": "owner_followers",
"params": {
"count": 197,
"login": "spree"
}
}
],
"max_points": 25
},
{
"key": "track_record",
"name": "Track record",
"detail": "26 public repos, account ~17 yr old",
"points": 22.4,
"status": "partial",
"details": [
{
"code": "public_repos",
"params": {
"count": 26
}
},
{
"code": "account_age_years",
"params": {
"years": 17
}
}
],
"max_points": 25
}
]
},
{
"key": "package_maintenance",
"band": "excellent",
"name": "Package maintenance",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"packages": [
"spree"
],
"ecosystems": "rubygems",
"any_deprecated": false,
"min_days_since_publish": 1
},
"components": [
{
"key": "published_resolvable",
"name": "Published & resolvable",
"detail": "1 package(s) on rubygems",
"points": 25,
"status": "met",
"details": [
{
"code": "packages_published",
"params": {
"count": 1,
"ecosystems": "rubygems"
}
}
],
"max_points": 25
},
{
"key": "publish_recency",
"name": "Publish recency",
"detail": "latest publish 1 days ago",
"points": 35,
"status": "met",
"details": [
{
"code": "publish_recency",
"params": {
"days": 1
}
}
],
"max_points": 35
},
{
"key": "version_history",
"name": "Version history",
"detail": "438 published versions",
"points": 20,
"status": "met",
"details": [
{
"code": "published_versions",
"params": {
"count": 438
}
}
],
"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": "excellent",
"name": "Engineering Quality",
"value": 86,
"weight": 0.2,
"metrics": [
{
"key": "engineering_practices",
"band": "good",
"name": "Engineering practices",
"note": null,
"notes": [],
"value": 84,
"inputs": {
"has_ci": true,
"has_tests": true,
"has_editorconfig": false,
"has_linter_config": true,
"has_precommit_config": false
},
"components": [
{
"key": "ci_workflows",
"name": "CI workflows",
"detail": "5 workflow(s)",
"points": 24,
"status": "met",
"details": [
{
"code": "ci_workflows",
"params": {
"count": 5
}
}
],
"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": "biome.json",
"points": 16,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "biome.json"
}
}
],
"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": "23 out of 23 merged PRs checked by a CI test -- score normalized to 10",
"points": 20,
"status": "met",
"details": [],
"max_points": 20
}
]
},
{
"key": "documentation",
"band": "excellent",
"name": "Documentation",
"note": null,
"notes": [],
"value": 90,
"inputs": {
"topics": [
"ecommerce",
"e-commerce",
"ecommerce-platform",
"spree-commerce",
"marketplace",
"multi-tenant",
"multi-vendor",
"multi-vendor-ecommerce",
"ecommerce-api",
"ecommerce-framework",
"open-source",
"headless",
"headless-commerce",
"headless-ecommerce",
"b2b-commerce"
],
"has_wiki": false,
"homepage": "https://spreecommerce.org",
"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://spreecommerce.org",
"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": "15 topics",
"points": 10,
"status": "met",
"details": [
{
"code": "topics_count",
"params": {
"count": 15
}
}
],
"max_points": 10
},
{
"key": "wiki",
"name": "Wiki",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
}
],
"description": "Are baseline engineering and documentation practices in place?"
},
{
"key": "security",
"band": "moderate",
"name": "Security",
"value": 66,
"weight": 0.16,
"metrics": [
{
"key": "security_posture",
"band": "moderate",
"name": "Security posture",
"note": "Excluded from scoring (no data or not applicable): Signed-Releases. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"signed_releases"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 57,
"inputs": {
"source": "openssf_scorecard",
"checks_evaluated": 17,
"scorecard_version": "v5.5.0",
"checks_inconclusive": 1,
"scorecard_aggregate": 5.7
},
"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": "23 out of 23 merged PRs checked by a CI test -- score normalized to 10",
"points": 2.5,
"status": "met",
"details": [],
"max_points": 2.5
},
{
"key": "cii_best_practices",
"name": "CII-Best-Practices",
"detail": "no effort to earn an OpenSSF best practices badge detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 2.5
},
{
"key": "code_review",
"name": "Code-Review",
"detail": "Found 4/26 approved changesets -- score normalized to 1",
"points": 0.8,
"status": "partial",
"details": [],
"max_points": 7.5
},
{
"key": "contributors",
"name": "Contributors",
"detail": "project has 27 contributing companies or organizations",
"points": 2.5,
"status": "met",
"details": [],
"max_points": 2.5
},
{
"key": "dangerous_workflow",
"name": "Dangerous-Workflow",
"detail": "no dangerous workflow patterns detected",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
},
{
"key": "dependency_update_tool",
"name": "Dependency-Update-Tool",
"detail": "update tool detected",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "fuzzing",
"name": "Fuzzing",
"detail": "project is not fuzzed",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "license",
"name": "License",
"detail": "license file detected",
"points": 2.5,
"status": "met",
"details": [],
"max_points": 2.5
},
{
"key": "maintained",
"name": "Maintained",
"detail": "30 commit(s) and 12 issue activity found in the last 90 days -- score normalized to 10",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "packaging",
"name": "Packaging",
"detail": "packaging workflow detected",
"points": 5,
"status": "met",
"details": [],
"max_points": 5
},
{
"key": "pinned_dependencies",
"name": "Pinned-Dependencies",
"detail": "dependency not pinned by hash detected -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "sast",
"name": "SAST",
"detail": "SAST tool is run on all commits",
"points": 5,
"status": "met",
"details": [],
"max_points": 5
},
{
"key": "security_policy",
"name": "Security-Policy",
"detail": "security policy file detected",
"points": 5,
"status": "met",
"details": [],
"max_points": 5
},
{
"key": "signed_releases",
"name": "Signed-Releases",
"detail": "no releases found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 7.5
},
{
"key": "token_permissions",
"name": "Token-Permissions",
"detail": "detected GitHub workflow tokens with excessive permissions",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "vulnerabilities",
"name": "Vulnerabilities",
"detail": "10 existing vulnerabilities detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
}
]
},
{
"key": "dependency_advisories",
"band": "excellent",
"name": "Dependency advisories",
"note": "Excluded from scoring (no data or not applicable): Indirect dependencies free of known advisories, No advisories left outstanding. Remaining weights renormalized. Matched 809 resolved dependencies against OSV; 133 could not be assessed (no resolved version, an unsupported ecosystem, or beyond the reported package list). 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": 809
}
},
{
"code": "advisories_unassessed",
"params": {
"count": 133
}
},
{
"code": "advisories_repo_graph_caveat",
"params": {}
},
{
"code": "advisories_reachability",
"params": {}
}
],
"value": 100,
"inputs": {
"source": "osv",
"advisories": 10,
"affected_packages": 7,
"assessed_packages": 809,
"unassessed_packages": 133,
"affected_by_severity": "high 3, moderate 2, low 2",
"direct_affected_packages": 0
},
"components": [
{
"key": "direct_dependencies_free_of_known_advisories",
"name": "Direct dependencies free of known advisories",
"detail": "no direct dependency carries a known advisory",
"points": 35,
"status": "met",
"details": [
{
"code": "no_direct_advisories",
"params": {}
}
],
"max_points": 35
},
{
"key": "indirect_dependencies_free_of_known_advisories",
"name": "Indirect dependencies free of known advisories",
"detail": "transitive set not separable from development and test dependencies in this scope",
"points": 0,
"status": "excluded",
"details": [
{
"code": "advisories_scope_not_separable",
"params": {}
}
],
"max_points": 25
},
{
"key": "no_advisories_left_outstanding",
"name": "No advisories left outstanding",
"detail": "no advisory carries a publication date",
"points": 0,
"status": "excluded",
"details": [
{
"code": "advisories_no_publication_date",
"params": {}
}
],
"max_points": 40
}
]
},
{
"key": "malicious_dependencies",
"band": "excellent",
"name": "Malicious dependencies",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"source": "osv",
"meaning": "reported as a malicious package by the OpenSSF corpus; the remedy is removal or moving off the compromised name, never an upgrade of the same artifact. Versions the registry has since pulled are listed but not scored",
"packages": [],
"red_flag": false,
"assessed_packages": 809,
"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": 9
},
"components": [
{
"key": "policy_exposure_multiplier",
"name": "Policy exposure multiplier",
"detail": "no confirmed policy-scope location match",
"points": 100,
"status": "met",
"details": [
{
"code": "jurisdiction_no_match",
"params": {}
}
],
"max_points": 100
}
]
}
],
"description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
},
{
"key": "ai_readiness",
"band": "good",
"name": "AI Readiness",
"value": 71,
"weight": 0,
"metrics": [
{
"key": "ai_agent_context",
"band": "excellent",
"name": "Agent context & guidance",
"note": null,
"notes": [],
"value": 85,
"inputs": {
"has_llms_txt": false,
"legible_history_share": 0.92,
"agent_instruction_files": [
"AGENTS.md",
"CLAUDE.md"
],
"agent_instruction_max_bytes": 51941
},
"components": [
{
"key": "agent_instructions",
"name": "Agent instructions",
"detail": "AGENTS.md, CLAUDE.md",
"points": 45,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "AGENTS.md, CLAUDE.md"
}
}
],
"max_points": 45
},
{
"key": "machine_readable_docs_llms_txt",
"name": "Machine-readable docs (llms.txt)",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
},
{
"key": "legible_commit_history",
"name": "Legible commit history",
"detail": "92 of 100 human commits state their intent (structured subject or explanatory body)",
"points": 40,
"status": "met",
"details": [
{
"code": "legible_history",
"params": {
"legible": 92,
"sampled": 100
}
}
],
"max_points": 40
}
]
},
{
"key": "ai_verify_loop",
"band": "moderate",
"name": "Verify loop (build / test / typecheck)",
"note": null,
"notes": [],
"value": 69,
"inputs": {
"has_nix": false,
"has_tests": true,
"lockfiles": [
"pnpm-lock.yaml"
],
"has_dockerfile": false,
"typed_language": false,
"bootstrap_files": [],
"has_devcontainer": false,
"has_linter_config": true,
"typecheck_configs": [
"packages/admin-sdk/tsconfig.json",
"packages/cli/templates/plugin/packages/dashboard/tsconfig.json",
"packages/cli/tsconfig.json",
"packages/create-spree-app/tsconfig.json",
"packages/dashboard-core/tsconfig.json",
"packages/dashboard-plugin-example/tsconfig.json",
"packages/dashboard-starter/tsconfig.json",
"packages/dashboard-ui/tsconfig.json",
"packages/dashboard/tsconfig.json",
"packages/sdk-core/tsconfig.json",
"packages/sdk/tsconfig.json"
],
"agent_commit_share": 0.67,
"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": "biome.json",
"points": 11,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "biome.json"
}
}
],
"max_points": 11
},
{
"key": "static_type_checking",
"name": "Static type checking",
"detail": "packages/admin-sdk/tsconfig.json, packages/cli/templates/plugin/packages/dashboard/tsconfig.json, packages/cli/tsconfig.json, packages/create-spree-app/tsconfig.json, packages/dashboard-core/tsconfig.json, packages/dashboard-plugin-example/tsconfig.json, packages/dashboard-starter/tsconfig.json, packages/dashboard-ui/tsconfig.json, packages/dashboard/tsconfig.json, packages/sdk-core/tsconfig.json, packages/sdk/tsconfig.json",
"points": 11,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "packages/admin-sdk/tsconfig.json, packages/cli/templates/plugin/packages/dashboard/tsconfig.json, packages/cli/tsconfig.json, packages/create-spree-app/tsconfig.json, packages/dashboard-core/tsconfig.json, packages/dashboard-plugin-example/tsconfig.json, packages/dashboard-starter/tsconfig.json, packages/dashboard-ui/tsconfig.json, packages/dashboard/tsconfig.json, packages/sdk-core/tsconfig.json, packages/sdk/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": "67 of the last 100 commits agent-authored or agent-credited",
"points": 10,
"status": "met",
"details": [
{
"code": "agent_authored_commits",
"params": {
"count": 67,
"sampled": 100
}
}
],
"max_points": 10
},
{
"key": "automated_maintenance",
"name": "Automated maintenance",
"detail": "dependency automation configured, none observed in the sampled commits",
"points": 5,
"status": "partial",
"details": [
{
"code": "dependency_bot_config_only",
"params": {}
}
],
"max_points": 8
},
{
"key": "openssf_scorecard_pinned_dependencies",
"name": "OpenSSF Scorecard: Pinned-Dependencies",
"detail": "dependency not pinned by hash detected -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
},
{
"key": "ai_code_legibility",
"band": "good",
"name": "Code legibility for models",
"note": null,
"notes": [],
"value": 82,
"inputs": {
"primary_language": "Ruby",
"largest_source_bytes": 122570,
"source_files_sampled": 3285,
"oversized_source_files": 7
},
"components": [
{
"key": "type_checkable_code",
"name": "Type-checkable code",
"detail": "Ruby with type-check config (packages/admin-sdk/tsconfig.json, packages/cli/templates/plugin/packages/dashboard/tsconfig.json, packages/cli/tsconfig.json, packages/create-spree-app/tsconfig.json, packages/dashboard-core/tsconfig.json, packages/dashboard-plugin-example/tsconfig.json, packages/dashboard-starter/tsconfig.json, packages/dashboard-ui/tsconfig.json, packages/dashboard/tsconfig.json, packages/sdk-core/tsconfig.json, packages/sdk/tsconfig.json)",
"points": 27,
"status": "partial",
"details": [
{
"code": "typecheck_config_language",
"params": {
"files": "packages/admin-sdk/tsconfig.json, packages/cli/templates/plugin/packages/dashboard/tsconfig.json, packages/cli/tsconfig.json, packages/create-spree-app/tsconfig.json, packages/dashboard-core/tsconfig.json, packages/dashboard-plugin-example/tsconfig.json, packages/dashboard-starter/tsconfig.json, packages/dashboard-ui/tsconfig.json, packages/dashboard/tsconfig.json, packages/sdk-core/tsconfig.json, packages/sdk/tsconfig.json",
"language": "Ruby"
}
}
],
"max_points": 45
},
{
"key": "manageable_file_sizes",
"name": "Manageable file sizes",
"detail": "7/3285 source files over 60KB",
"points": 54.9,
"status": "partial",
"details": [
{
"code": "oversized_source_files",
"params": {
"kb": 60,
"sampled": 3285,
"oversized": 7
}
}
],
"max_points": 55
}
]
},
{
"key": "ai_interfaces",
"band": "at_risk",
"name": "Machine-readable interfaces",
"note": null,
"notes": [],
"value": 40,
"inputs": {
"example_dirs": [
"examples",
"recipes"
],
"has_mcp_signal": false,
"api_schema_files": []
},
"components": [
{
"key": "api_schema_openapi_graphql_proto",
"name": "API schema (OpenAPI/GraphQL/proto)",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 40
},
{
"key": "mcp_server",
"name": "MCP server",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 20
},
{
"key": "runnable_examples",
"name": "Runnable examples",
"detail": "examples, recipes",
"points": 40,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "examples, recipes"
}
}
],
"max_points": 40
}
]
}
],
"description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
}
],
"metrics_version": "1.13.0"
},
"warnings": [],
"report_type": "repository",
"generated_at": "2026-07-21T23:25:32.520012Z",
"schema_version": "0.26.0",
"badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/s/spree/spree.svg",
"full_name": "spree/spree",
"license_state": "standard",
"license_spdx": "BSD-3-Clause"
}