Raw JSON report machine-readable
{
"data": {
"repo": {
"topics": [
"ai",
"design-systems",
"figma",
"figma-api",
"figma-plugins",
"mcp"
],
"is_fork": false,
"size_kb": 3174,
"has_wiki": true,
"homepage": "https://southleft.com",
"languages": {
"HTML": 130307,
"Shell": 22160,
"JavaScript": 547207,
"TypeScript": 2154277
},
"pushed_at": "2026-07-17T00:31:58Z",
"created_at": "2025-10-05T16:28:53Z",
"owner_type": "Organization",
"updated_at": "2026-07-21T16:19:09Z",
"description": "Your design system as an API. Connect AI to Figma for extraction, creation, and debugging.",
"is_archived": false,
"is_disabled": false,
"license_spdx": "MIT",
"default_branch": "main",
"license_spdx_raw": "MIT",
"primary_language": "TypeScript",
"significant_languages": [
"TypeScript",
"JavaScript"
]
},
"owner": {
"blog": "https://southleft.com",
"name": "Southleft, LLC",
"type": "Organization",
"login": "southleft",
"company": null,
"location": "New Orleans, LA",
"followers": 117,
"avatar_url": "https://avatars.githubusercontent.com/u/60514814?v=4",
"created_at": "2020-01-31T15:10:43Z",
"is_verified": null,
"public_repos": 30,
"account_age_days": 2363
},
"license": {
"state": "standard",
"spdx_id": "MIT",
"raw_spdx": "MIT",
"file_present": true,
"scorecard_found": true,
"profile_has_license": true
},
"activity": {
"releases": [
{
"tag": "v1.36.0",
"kind": "minor",
"published_at": "2026-07-17T00:26:17Z"
},
{
"tag": "v1.35.0",
"kind": "minor",
"published_at": "2026-07-09T12:12:16Z"
},
{
"tag": "v1.34.0",
"kind": "minor",
"published_at": "2026-07-03T18:24:27Z"
},
{
"tag": "v1.33.1",
"kind": "patch",
"published_at": "2026-07-03T03:14:14Z"
},
{
"tag": "v1.33.0",
"kind": "minor",
"published_at": "2026-07-03T01:47:04Z"
},
{
"tag": "v1.32.1",
"kind": "patch",
"published_at": "2026-07-01T02:55:33Z"
},
{
"tag": "v1.32.0",
"kind": "minor",
"published_at": "2026-06-21T04:37:52Z"
},
{
"tag": "v1.31.0",
"kind": "minor",
"published_at": "2026-06-05T13:48:28Z"
},
{
"tag": "v1.30.0",
"kind": "minor",
"published_at": "2026-06-03T02:40:51Z"
},
{
"tag": "v1.29.2",
"kind": "patch",
"published_at": "2026-06-03T01:12:00Z"
},
{
"tag": "v1.29.0",
"kind": "minor",
"published_at": "2026-05-22T13:50:37Z"
},
{
"tag": "v1.28.1",
"kind": "patch",
"published_at": "2026-05-18T20:01:07Z"
},
{
"tag": "v1.28.0",
"kind": "minor",
"published_at": "2026-05-18T19:36:05Z"
},
{
"tag": "v1.27.1",
"kind": "patch",
"published_at": "2026-05-17T01:19:22Z"
},
{
"tag": "v1.27.0",
"kind": "minor",
"published_at": "2026-05-17T00:58:55Z"
},
{
"tag": "v1.26.0",
"kind": "minor",
"published_at": "2026-05-16T19:10:24Z"
},
{
"tag": "v1.25.0",
"kind": "minor",
"published_at": "2026-05-14T02:39:23Z"
},
{
"tag": "v1.24.0",
"kind": "minor",
"published_at": "2026-05-14T02:02:49Z"
},
{
"tag": "v1.23.0",
"kind": "minor",
"published_at": "2026-05-09T15:41:44Z"
},
{
"tag": "v1.22.1",
"kind": "patch",
"published_at": "2026-04-07T02:12:12Z"
},
{
"tag": "v1.21.0",
"kind": "minor",
"published_at": "2026-04-01T16:51:33Z"
},
{
"tag": "v1.20.0",
"kind": "minor",
"published_at": "2026-03-29T20:49:49Z"
},
{
"tag": "v1.19.2",
"kind": "patch",
"published_at": "2026-03-27T13:59:24Z"
},
{
"tag": "v1.19.1",
"kind": "patch",
"published_at": "2026-03-27T13:13:20Z"
},
{
"tag": "v1.19.0",
"kind": "minor",
"published_at": "2026-03-25T11:07:01Z"
},
{
"tag": "v1.11.0",
"kind": "minor",
"published_at": "2026-03-25T00:21:55Z"
},
{
"tag": "v1.18.0",
"kind": "minor",
"published_at": "2026-03-25T00:21:40Z"
},
{
"tag": "v1.17.4",
"kind": "patch",
"published_at": "2026-03-25T00:21:29Z"
},
{
"tag": "v1.17.3",
"kind": "patch",
"published_at": "2026-03-25T00:21:29Z"
},
{
"tag": "v1.17.2",
"kind": "patch",
"published_at": "2026-03-25T00:21:28Z"
},
{
"tag": "v1.17.1",
"kind": "patch",
"published_at": "2026-03-25T00:21:27Z"
},
{
"tag": "v1.17.0",
"kind": "minor",
"published_at": "2026-03-25T00:21:26Z"
},
{
"tag": "v1.16.0",
"kind": "minor",
"published_at": "2026-03-25T00:21:12Z"
},
{
"tag": "v1.15.5",
"kind": "patch",
"published_at": "2026-03-25T00:20:57Z"
},
{
"tag": "v1.15.4",
"kind": "patch",
"published_at": "2026-03-25T00:20:56Z"
},
{
"tag": "v1.15.3",
"kind": "patch",
"published_at": "2026-03-25T00:20:55Z"
},
{
"tag": "v1.15.2",
"kind": "patch",
"published_at": "2026-03-25T00:20:54Z"
},
{
"tag": "v1.15.1",
"kind": "patch",
"published_at": "2026-03-25T00:20:53Z"
},
{
"tag": "v1.15.0",
"kind": "minor",
"published_at": "2026-03-25T00:20:52Z"
},
{
"tag": "v1.14.0",
"kind": "minor",
"published_at": "2026-03-25T00:20:36Z"
},
{
"tag": "v1.13.1",
"kind": "patch",
"published_at": "2026-03-25T00:20:36Z"
},
{
"tag": "v1.13.0",
"kind": "minor",
"published_at": "2026-03-25T00:20:35Z"
},
{
"tag": "v1.12.2",
"kind": "patch",
"published_at": "2026-03-25T00:20:21Z"
},
{
"tag": "v1.12.1",
"kind": "patch",
"published_at": "2026-03-25T00:20:20Z"
},
{
"tag": "v1.12.0",
"kind": "minor",
"published_at": "2026-03-25T00:20:19Z"
},
{
"tag": "v1.11.6",
"kind": "patch",
"published_at": "2026-03-25T00:20:04Z"
},
{
"tag": "v1.11.5",
"kind": "patch",
"published_at": "2026-03-25T00:20:02Z"
},
{
"tag": "v1.11.4",
"kind": "patch",
"published_at": "2026-03-25T00:20:01Z"
},
{
"tag": "v1.11.2",
"kind": "patch",
"published_at": "2026-03-25T00:20:00Z"
},
{
"tag": "v1.11.1",
"kind": "patch",
"published_at": "2026-03-25T00:19:49Z"
},
{
"tag": "v1.10.1",
"kind": "patch",
"published_at": "2026-03-25T00:21:55Z"
},
{
"tag": "v1.10.0",
"kind": "minor",
"published_at": "2026-02-13T05:42:44Z"
},
{
"tag": "v1.9.1",
"kind": "patch",
"published_at": "2026-02-12T22:10:23Z"
},
{
"tag": "v1.9.0",
"kind": "minor",
"published_at": "2026-02-11T03:39:47Z"
},
{
"tag": "v1.8.0",
"kind": "minor",
"published_at": "2026-02-09T02:07:39Z"
},
{
"tag": "v1.7.0",
"kind": "minor",
"published_at": "2026-02-06T04:42:31Z"
},
{
"tag": "v1.5.0",
"kind": "minor",
"published_at": "2026-01-30T22:51:43Z"
},
{
"tag": "v1.4.2",
"kind": "patch",
"published_at": "2026-01-28T03:00:49Z"
},
{
"tag": "v1.4.1",
"kind": "patch",
"published_at": "2026-01-28T02:55:37Z"
},
{
"tag": "v1.4.0",
"kind": "minor",
"published_at": "2026-01-27T15:23:47Z"
},
{
"tag": "v1.3.0",
"kind": "minor",
"published_at": "2026-01-23T20:44:41Z"
},
{
"tag": "v1.2.1",
"kind": "patch",
"published_at": "2026-01-19T14:53:49Z"
},
{
"tag": "v1.1.2",
"kind": "patch",
"published_at": "2026-01-17T20:41:50Z"
},
{
"tag": "v1.1.1",
"kind": "patch",
"published_at": "2026-01-15T21:26:07Z"
},
{
"tag": "v1.1.0",
"kind": "minor",
"published_at": "2026-01-15T21:01:29Z"
},
{
"tag": "v1.0.0",
"kind": "major",
"published_at": "2025-10-20T17:06:54Z"
}
],
"recent_commits": [
{
"oid": "138975494458585123bf0d89840e46ddb7bd01ae",
"body": null,
"is_bot": false,
"headline": "Merge feature/target-lock — v1.36.0",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-07-17T00:31:48Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "51d3188b5cf6db1c350b7f22e41a4f6618028ab8",
"body": "figma_navigate gains lock:true to pin the active file; new connections,\nreconnects, and user selection/page changes in other files no longer move\nthe command target. Auto-releases on disconnect/navigate-away.\nfigma_list_open_files reports targetLocked.\n\nPost-review: simplified the connect gate to 'i\n[…]\nhe\n'|| !_activeFileKey' clause was dead per the lock invariant), and added\ncoverage for lock-release-on-disconnect and lock-preserved-on-reconnect.\n\nServer-only release — no plugin re-import required.",
"is_bot": false,
"headline": "chore: Release v1.36.0 — target lock for multi-file parallel work",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-07-17T00:31:44Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "922c0538203f51ba913e9f13472ca7f70c29aad4",
"body": "figma_navigate gains a lock:true flag that pins the active file so new\nconnections, reconnects, and the user's own selection/page changes in\nother files no longer move the command target. Lets an agent work in one\nfile while the user works in another without writes routing to the wrong\nfile. Auto-re\n[…]\nvigates away;\nfigma_list_open_files now reports targetLocked.\n\nServer: _targetLocked gates the three active-file promotion sites;\nsetActiveFile(fileKey, lock?), lockTarget/unlockTarget/isTargetLocked.",
"is_bot": false,
"headline": "feat: add target lock for multi-file parallel work",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-07-17T00:25:41Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "e15a7c979f9658e015c4490920bfe4f174ed072c",
"body": "5 new tools (figma_create_slot, figma_get_slots, figma_append_to_slot,\nfigma_reset_slot, figma_add_slot_property) closing #29, based on PR #77\nby @simonesalvucci and updated to the GA slots Plugin API. Also fixes\nthe release script's cloud tool count (slot-tools.ts was missing from\nauto_count_cloud) and 25+ stale tool-count references.",
"is_bot": false,
"headline": "chore: Release v1.35.0 — Figma Slots write support",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-07-09T12:24:34Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6501b817f89265817e349edc517ea7115f5dbc9e",
"body": "- APPEND_TO_SLOT: prepare/validate content BEFORE clearExisting (bad\n sourceNodeId no longer empties the slot then errors); guard COMPONENT\n before clone (no more orphaned main-component clones)\n- VARIANT defaultValue passthrough restored — live-validated that Figma\n REQUIRES a non-empty default \n[…]\n- Width-only/height-only resizes honored; string/number coercion for\n slot content properties; nested-slot name collisions prefer own slots\n- figma_get_slots response gains consistent success wrapper",
"is_bot": false,
"headline": "fix(slots): pre-merge review findings",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-07-09T12:16:29Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "47eb076d852a4cc14e5ca9f7b029b53b097bce36",
"body": "Live E2E caught clones landing outside the slot's visible bounds because\nthey keep their original x/y. Auto-layout slots are unaffected (Figma\nmanages position).",
"is_bot": false,
"headline": "fix(slots): snap cloned nodes to slot origin in NONE-layout slots",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-07-09T12:04:52Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "30dbdc1f4ddc48f055f24eea5468928687352e4c",
"body": "- createSlot() now works on variant components inside a COMPONENT_SET\n (GA lifted the beta restriction the PR guarded against) — allow it\n- Document rename-after-create as the naming API: renaming the slot node\n renames the linked SLOT property key live (createSlot name arg is ignored)\n- Forward '\n[…]\ni.html handleResult whitelist so\n figma_append_to_slot returns its slot payload (relay drops unlisted fields)\n- Merge slot-aware ai_instruction with append-to-slot guidance in\n ANALYZE_COMPONENT_SET",
"is_bot": false,
"headline": "fix(slots): update PR #77 to GA slots API — live-validated 2026-07-09",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-07-09T11:55:53Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "97db96a84b95e06ef2cfe413e36a9e341ee90e07",
"body": "Implements slot creation, inspection, population, and reset tools now that SlotNode is available in Figma's open beta, closing the gap described in issue #29.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
"is_bot": false,
"headline": "Add Figma Slots API support via Desktop Bridge.",
"author_name": "Simone Salvucci",
"author_login": "simonesalvucci",
"committed_at": "2026-07-09T11:49:27Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "f139a1a25b9140f54c208dfe6723b22ba3c20721",
"body": "figma_import_tokens applies the full diff plan (creates collections/\nvariables, ID-matched renames, VARIABLE_ALIAS writes, replace-gated\ndeletes); DTCG 2025.10 dialect opt-in on export + accepted on import;\nscopes/codeSyntax round-trip; alias values in figma_setup_design_tokens;\nnew figma_create_component_set tool.\n\nPLUGIN RE-IMPORT REQUIRED (code.js/ui.html changed).\n\nTests: 1336 passing.",
"is_bot": false,
"headline": "chore: Release v1.34.0 — Bidirectional Token Sync v2 + DTCG 2025.10",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-07-03T18:38:03Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "501091ec54688c41bcf30e010e121c92ff3a782c",
"body": "…ut scaling\n\n- Import diff now matches by round-trip variable ID before path: a token\n path rename routes to the update phase as a name change (toRename)\n instead of create+delete — under strategy='replace' the old behavior\n would have PERMANENTLY DELETED the original variable and detached all\n \n[…]\nphaned collections when addMode fails;\n alias-pass failures counted once\n\nFindings from the pre-release code review (RELEASING.md independent\nreview step). Tests: 183 across token/write-tools suites.",
"is_bot": false,
"headline": "fix: pre-release review findings — rename safety, color guards, timeo…",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-07-03T18:23:28Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "87171bcc0ef6c2c02c38a545c0f1904a5287f4b2",
"body": "…sign_tokens\n\nRound-trip: variable scopes (omitted when default/ALL_SCOPES) and\ncodeSyntax (WEB/ANDROID/iOS) stash into $extensions[figma-console-mcp]\non export and flow back through import — diff compares them\n(order-insensitive scopes; code-side absent = no opinion, never\nresets Figma metadata), a\n[…]\ng the batch. Semantic collections no\nlonger require raw figma_execute.\n\nTests: 161 across token/write-tools suites (19 new). Legacy + 2025\nexport byte-identity re-verified for tokens without metadata.",
"is_bot": false,
"headline": "feat(tokens): scopes/codeSyntax round-trip + alias values in setup_de…",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-07-03T17:54:05Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "fb6dfd3ef0fb43c6eee40419adabe0782336c491",
"body": "…5-dialect",
"is_bot": false,
"headline": "Merge branch 'claude/compassionate-meitner-d3a779' into feat/dtcg-202…",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-07-03T17:39:47Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d8565c176e87d556e031aef76710ac9b52c21389",
"body": "Export: opt-in dtcgDialect='2025' emits object colors ({colorSpace,\ncomponents, alpha, hex} from full-precision Figma floats) and object\ndimensions ({value, unit:'px'}). Default 'legacy' output proven\nbyte-identical to previous releases — existing consumers unaffected.\n\nImport: accepts BOTH dialects\n[…]\n gated behind strategy='replace' with loud warnings;\n merge stays reporting-only\n- Per-item error isolation preserved (applyResult.errors[])\n\nTests: 110 token tests (26 dialect + 14 apply-phase new).",
"is_bot": false,
"headline": "feat(tokens): DTCG 2025.10 dialect + full bidirectional import",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-07-03T17:39:47Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "82fd61b3748ce40a255525159fbf0c185dc1b102",
"body": "One-call component set creation from a variant axes matrix (e.g.\n{State: [default, hover, disabled], Size: [sm, lg]}): builds all\ncombination variants, names them Prop=Value comma-joined, combines\nvia combineAsVariants, and arranges with the in-place grid logic.\nStructured-command pattern: code.js handler + ui.html relay\npassthrough + connector method on IFigmaConnector (WebSocket + Cloud).\nFonts preloaded before text writes; variant keys returned for\ninstantiation.",
"is_bot": false,
"headline": "feat: figma_create_component_set — declarative variant-set creation",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-07-03T17:34:28Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "26b87b426479f364a4d2cf990f4585ac7cff10aa",
"body": "The plugin staleness check now compares against the PLUGIN_VERSION\nembedded in the bundled figma-desktop-bridge/code.js (what a re-import\ninstalls) instead of the npm package version, so server-only releases\nno longer flag up-to-date plugins as stale. PLUGIN_VERSION now means\n'last release in which plugin files changed' and release.sh bumps it\nconditionally. 1245 tests passing (9 new).",
"is_bot": false,
"headline": "chore: Release v1.33.2 — version-handshake false-positive fix",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-07-03T14:17:27Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "03be8d7689fd8ea1005b4f9816d787533084e645",
"body": "…iles (kills v1.33.1 false stale banner)",
"is_bot": false,
"headline": "Merge fix: plugin version handshake compares against bundled plugin f…",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-07-03T14:14:02Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8d346b0944175bea587e327495788b2103701ac5",
"body": "… version\n\nServer-only releases (e.g. v1.33.1, deps only) bumped package.json without\ntouching figma-desktop-bridge/, but the FILE_INFO handshake compared the\nplugin's reported version against SERVER_VERSION with strict !== — falsely\nflagging up-to-date plugins as stale and nagging users to re-impor\n[…]\nPluginVersion;\n figma_diagnose cites the bundled version\n- Regression tests: handshake e2e with injected bundled version + new\n PLUGIN_VERSION invariants (may lag package.json, must never exceed it)",
"is_bot": false,
"headline": "fix: compare plugin version against bundled plugin files, not package…",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-07-03T14:13:48Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "35840a72bfdc24abf8b9ff974e0b495c0aab9388",
"body": "…ount-anchor fix\n\nClaude-Session: https://claude.ai/code/session_01SyvXc6tqa1PEi3uWiWTdzs",
"is_bot": false,
"headline": "chore: Release v1.33.1 — security dependency sweep + release-script c…",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-07-03T03:18:42Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "10bd6707eb024bd4962e8343fe6e547eb4a0aef6",
"body": "…e bumps\n\nnpm audit fix (no --force): ws 8.21.0, hono 4.12.27, undici 7.28.0,\nhandlebars 4.7.9 (the critical), lodash, path-to-regexp, basic-ftp,\nfast-uri, vite, and friends — all within existing semver ranges, so no\nAPI changes. wrangler deliberately pinned at 4.72.0: newer versions\nrequire Node >=\n[…]\nppens.\n\nSupersedes dependabot PRs #81 (hono), #82 (vite), #84 (undici; wrangler\npart deferred for the Node engine requirement).\n\nClaude-Session: https://claude.ai/code/session_01SyvXc6tqa1PEi3uWiWTdzs",
"is_bot": false,
"headline": "fix(deps): resolve all runtime + critical security alerts via in-rang…",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-07-03T03:14:11Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "9cb514912c33f04e60bed007d9ebaac6c5be9ffc",
"body": "Claude-Session: https://claude.ai/code/session_01SyvXc6tqa1PEi3uWiWTdzs",
"is_bot": false,
"headline": "chore: Release v1.33.0 — connection UX overhaul + 33-fix codebase audit",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-07-03T01:52:14Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "fbd078af72a0db2ea9bb84e9f006325cfbaa25a0",
"body": "…rror signal\n\n- probeServerHealth: execFileSync (no shell) + integer port validation;\n data.port comes from world-writable /tmp files and must not reach a\n shell string. Error semantics mirror the async variant (ENOENT).\n- healthProbeArgs: os.devNull instead of literal /dev/null — Windows\n ships \n[…]\nURLs.\n- screenshot fallback: prefer error.isAuthError over a bare \"403\"\n substring, which also matches node IDs like \"403:12\".\n\nClaude-Session: https://claude.ai/code/session_01SyvXc6tqa1PEi3uWiWTdzs",
"is_bot": false,
"headline": "fix: address Copilot review — probe hardening, branch fileKey, auth-e…",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-07-03T01:45:29Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "b3b4cf5c2f963fae92222367793ff72a69259ca6",
"body": "…ected'\n\nThe cloud status line was event-driven while the main pill derives from\nfacts, so a stale restored pairing code failing on load wrote a bare\n'Disconnected' under a green 'Connected' pill. Cloud states are now\nderived in one place (renderCloudStatus), every string is labeled\n'Cloud', routine\n[…]\nsed, and only\nactionable states (pairing lost) speak up uninvited. Pause renders as\n'Cloud: paused' rather than a lost pairing.\n\nClaude-Session: https://claude.ai/code/session_01SyvXc6tqa1PEi3uWiWTdzs",
"is_bot": false,
"headline": "fix(plugin): derive cloud pairing status — kill the orphaned 'Disconn…",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-07-03T01:39:55Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "e79b8ca5cff26c8bb98c7f31bd6549d352c81885",
"body": "…aling\n\nBased on a three-track deep dive (forensic lifecycle trace, alternative-\narchitecture research, designer-persona UX audit) into why product\ndesigners struggle with the Desktop Bridge connection dance.\n\nPlugin UI (ui.html — requires manifest re-import; with auto-discovery\nshipped, this should\n[…]\n-probes before returning an honest error\n\nFull deep-dive with file:line evidence and the deferred broker/\nthin-shell roadmap: .notes/CONNECTION-ARCHITECTURE-DEEP-DIVE.md (local).\n\nTests: 1236 passing.",
"is_bot": false,
"headline": "feat: connection UX overhaul — honest status, auto-discovery, self-he…",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-07-02T04:18:42Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "1c8466c65a65bbbb9c2fd25054e6edab1b8a0737",
"body": "# Conflicts:\n#\tsrc/core/figma-tools.ts",
"is_bot": false,
"headline": "Merge branch 'claude/goofy-burnell-f85648' into fix/audit-2026-07-01",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-07-02T04:01:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1c94dd20c08d6bca0cf33493c22f5735d98c17b0",
"body": "figma_get_variables defaults to format='summary' (description already\nrecommended it; explicit format='full' unaffected). Design-system kit\ndelta-encodes variant visualSpecs against the set-level spec instead of\nrepeating near-identical specs per variant; removes never-attached\nchildSpecs dead compute.",
"is_bot": false,
"headline": "perf: trim default payloads in figma_get_variables and design-system kit",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-07-02T03:59:45Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d368bca8f48224004b3e8987376aadfe9cd099f6",
"body": "# Conflicts:\n#\tsrc/core/write-tools.ts",
"is_bot": false,
"headline": "Merge branch 'claude/kind-meninsky-3e4132' into fix/audit-2026-07-01",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-07-02T03:59:28Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2144d4eb2e51027a22d089bb4c54188066574fad",
"body": "Repositions variants via x/y on the EXISTING component set's children\n(layoutMode forced to NONE first) instead of clone/remove/combineAsVariants,\nso the set keeps its node ID and all placed instances survive. Also pulls\nthe set out of a previous run's container before cleanup and uses\nabsoluteTransform coords for container placement, fixing re-run breakage.",
"is_bot": false,
"headline": "feat(write-tools): arrange component set variants in place",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-07-02T03:58:14Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "726aedd758a5dccba3acda9f320f17a399308f6d",
"body": "…, caching, REST, and plugin layers\n\nMulti-agent audit (5 auditors, 4 fixers) with every finding verified\nagainst live code paths; token-pipeline findings reproduced at runtime.\n\nToken pipeline (round-trip fidelity):\n- DTCG multi-mode export lost all non-primary modes on re-import\n (writer/parser $\n[…]\nent_image accept dashed\nids, search results truncate multi-KB descriptions.\n\nTests: 1223 passing (20 new regression tests incl. multi-mode\nround-trip, TIMING/EASING mapping, cross-collection aliases).",
"is_bot": false,
"headline": "fix: full-codebase audit — 33 verified fixes across tokens, transport…",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-07-02T03:02:56Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "ec698302460e7bfbf8db2329cea5912850ad6dde",
"body": "…(v1.32.1)\n\nComponent docs documented variable-bound colors as raw hex (Figma Variable\ncolumn showed —) while spacing tokens worked. Two root causes:\n\n1. The id→name lookup map read .id/.name off enrichment entries whose keys\n are variableId/variableName, so every color lookup missed.\n2. Variable \n[…]\n.name/variableName mismatch in\ntoken-parity cross-referencing.\n\nVerified live: 100/100 colors on the Eventz Textarea resolve to token\nnames (was 0/100). Reported by Robin Di Capua. 1203 tests passing.",
"is_bot": false,
"headline": "fix(docs): resolve color token names in figma_generate_component_doc …",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-07-01T02:54:22Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "e8a9dc1898610baacaaef40c5778c90e5203af73",
"body": "Components could define slots since June 2026, but our traversal caught the\n'can only read componentPropertyDefinitions on a set/non-variant' error and\nskipped slot sublayers — so analysis, dev handoff, and component reads silently\nomitted a core part of the component's public API.\n\nAdds extractSlot\n[…]\njs changed). Note: slots are new enough that real\ndesign systems have not adopted them yet — this is correctness as the platform\nevolved, validated by fixture rather than against production slot data.",
"is_bot": false,
"headline": "feat(components): extract Figma slot contracts (SlotNode, GA June 2026)",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-06-28T03:31:14Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "0700d35c55fc9e5aef4e3ef8e0a219fa1b157454",
"body": "…iption\n\nExtends the existing tool with an optional 'description' param (and makes\nmodeId/value optional) so an existing variable's 'How to use this variable'\ntext can be edited — previously only settable at creation time. Reuses the\nexisting setVariableDescription connector method + SET_VARIABLE_DE\n[…]\nange, no plugin re-import.\nBackward-compatible (value-only callers unaffected). Exported as DTCG\n$description by figma_export_tokens.\n\nFollow-up to the variables-description capability TJ asked about.",
"is_bot": false,
"headline": "feat(variables): figma_update_variable can now set a variable's descr…",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-06-28T02:47:45Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "b111b9e37aa23492cce08a5ce8e0114a77ac258a",
"body": "…eight 1.4.12 fix)\n\nfigma_lint_design no longer red-flags line height <1.5x as a WCAG failure.\n1.4.12 Text Spacing requires SUPPORTING user spacing overrides, not shipping\n1.5x. Line/paragraph-spacing scoped to multi-line text; readability hints\ndecoupled from the 'wcag' group into opt-in 'best-prac\n[…]\nessibility.\n\nNo new tools, no arg-shape changes. Plugin re-import required to pick up the\nnew audit behavior (bridge protocol unchanged). 1196 tests passing.\n\nReported by Isabella (a11y collaborator).",
"is_bot": false,
"headline": "chore: Release v1.32.0 — WCAG-accurate accessibility auditing (line-h…",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-06-21T04:41:30Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "94a2e8235ad614b4bb858327539b485989e14384",
"body": "…+ decouple best-practice\n\nWCAG 1.4.12 Text Spacing is a 'support user overrides' criterion, not a\nrequirement to ship 1.5x line height. The lint audit over-flagged every\ntext node <1.5 (incl. single-line labels) and grouped these readability\nhints under the 'wcag' conformance set.\n\n- code.js: line-\n[…]\nspacing-support' advisory\n (fixed-px typography) — where 1.4.12/1.4.4 are actually verifiable.\n- tests: regrouping + multi-line guard coverage (1196 green).\n\nReported by Isabella (a11y collaborator).",
"is_bot": false,
"headline": "fix(a11y): line-height <1.5 is not a WCAG fail — scope to multi-line …",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-06-21T04:37:40Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "7b6796ae911935933aa5a3f7516075f5730d505d",
"body": null,
"is_bot": false,
"headline": "Merge branch 'feature/desktop-bridge-ui-v0.2.1'",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-06-05T13:46:58Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9de4ecbfdc8023e5f3066875fc67c36105eb7b50",
"body": "…ie reaper + auto-reconnect)\n\nFixes the most-reported reliability bug: the bridge dropping and staying\ndown until the user closed the plugin, restarted their MCP client, or\nkilled ports by hand. Root cause was zombie MCP server processes squatting\nthe WebSocket port range after a bad shutdown.\n\n- Re\n[…]\n 'Start Here' section, home banner, README banner/roadmap\n\nNo new tools. Plugin re-import required (ui.html + code.js changed).\n1190 tests passing, incl. SIGTERM-ignoring-orphan reap integration test.",
"is_bot": false,
"headline": "chore: Release v1.31.0 — self-healing Desktop Bridge connection (zomb…",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-06-05T13:46:54Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "486a94afd6356ace85a5da1bcd5172d943553cc4",
"body": null,
"is_bot": false,
"headline": "Merge branch 'main' into feature/desktop-bridge-ui-v0.2.1",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-06-05T13:39:06Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c89fb0bcb9db36710207ca9f8f2bb6bac3d39ea7",
"body": "…ding + typography)",
"is_bot": false,
"headline": "Merge feature/console-skill-tool-fixes — v1.30.0 (native variable bin…",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-06-03T02:44:30Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "037d0010cf12ca4558de17f6b787db2173b93459",
"body": "…e tools",
"is_bot": false,
"headline": "chore: Release v1.30.0 — native variable binding + typography in writ…",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-06-03T02:44:24Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c92317c339908b7a905fd32b709d3a8ce5b7af28",
"body": "- figma_set_fills / figma_set_strokes: new optional per-paint variableId binds a\n color variable to the fill/stroke via setBoundVariableForPaint (works on any plan\n via the bridge); color is now optional when variableId is provided.\n- figma_set_text: new fontFamily/fontStyle params with space-inse\n[…]\nnnectors forward fontStyle.\n\nValidated live against the CollegeTown design system: fill/stroke variable binding,\nfont normalization + fallback, instantiate font preload, and override-failure warnings.",
"is_bot": false,
"headline": "fix(tools): close Figma Plugin API gaps that forced raw figma_execute",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-06-03T02:40:29Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "e41629d98aa29d5f0582f005d04dba88dce2e4df",
"body": "…vel auto-detection",
"is_bot": false,
"headline": "chore: Release v1.29.2 — faithful component-doc rendering + atomic-le…",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-06-03T01:10:28Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d459187c7ec5b579bdabab2e248dd45e902a6f82",
"body": "…tadata\n\nThe first auto-detect pass relied on the published `containing_frame.pageId`\n(from /components + /component_sets) to find a component's home page. Many real\nfiles — including ones whose components have publish keys — return an empty\n/component_sets list over REST, so that path resolved noth\n[…]\ningle page whose subtree still contains the\nnode is its home page; walk back from there to the nearest ATOMS/MOLECULES/\nORGANISMS/TEMPLATES divider. One REST call, no dependency on library publishing.",
"is_bot": false,
"headline": "fix(component-doc): resolve atomic level without published library me…",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-06-02T15:51:09Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "01507dcab6e8c64478a843d5f3034de94ff8bfda",
"body": "…ic level\n\n- Parse single '#' headings in Figma component descriptions, not just '##'/'###',\n so sections (Usage Guidelines, Implementation Considerations, Accessibility\n Requirements, Content Configuration) render as real sections instead of leaking\n as '- # Heading' list items.\n- Frontmatter de\n[…]\n target node, fixing a doubled ?node-id=.\n- Auto-detect the component's atomic-design level (atom/molecule/organism/template)\n from its Figma page section and emit it as 'level:' frontmatter + a tag.",
"is_bot": false,
"headline": "fix(component-doc): faithful description rendering + auto-detect atom…",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-06-02T15:40:00Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "854481469028d1070dcce3cf7fe22ade93533be4",
"body": "…ariable-resolver fix",
"is_bot": false,
"headline": "Merge main (v1.29.1) into desktop-bridge-ui — sync PLUGIN_VERSION + v…",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-05-31T13:25:52Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2e18e224279435c5cc26ce173b8d5dc486f8c9b0",
"body": "…olution)",
"is_bot": false,
"headline": "Merge fix/variables-bridge-first — v1.29.1 (bridge-first variable res…",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-05-30T19:27:22Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a6e1ef4cd4beae42d38c7bb8f89276a67de5c7f2",
"body": "…(no 403 for non-Enterprise)",
"is_bot": false,
"headline": "chore: Release v1.29.1 — bridge-first variables in design_system_kit …",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-05-30T19:27:22Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9127fccdeeede0e36c65a255e970cfad59e6bedc",
"body": "…stem_kit description\n\nfigma_get_variables already states variables work on any plan; figma_get_design_system_kit\ndid not, so in cloud mode the model lacked the signal that the bridge/relay is the\nplan-independent route and would abandon variables on a 403. Adds: tokens/variables are\nread via the connected Desktop Bridge or cloud relay (any plan, no Enterprise), and a 403\nfrom the Variables REST API means \"connect the bridge and retry,\" not \"variables unavailable.\"",
"is_bot": false,
"headline": "docs(variables): signal plan-independent variable access in design_sy…",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-05-30T19:09:54Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1a6571c963c4afd71f1dbf21ac0949f01ca80449",
"body": "…e 403 for non-Enterprise)\n\nfigma_get_design_system_kit fetched variables via the Enterprise-only REST\nVariables API directly (design-system-tools.ts: api.getLocalVariables), with no\nDesktop Bridge fallback and no connector passed in. For the majority of users\n(Starter/Pro/Org) that returns 403 \"Lim\n[…]\n (figma_get_variables, figma_export_tokens,\nlocal token-browser path) are already bridge-first; design_system_kit was the sole\nREST-only offender.\n\nTests: +7 (variable-resolver). Full suite 1185 pass.",
"is_bot": false,
"headline": "fix(variables): bridge-first resolution for design system kit (no mor…",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-05-30T18:36:50Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "9418e68c7709d32ed46cd413126e4228a37f74ec",
"body": "…d zombie reaper\n\nAdds a user-facing \"Plugin Interface\" section (status strip, Pause/Reconnect,\nN-server badge, Info/Log panels, log intelligence, theme-follows-Figma) and an\n\"Automatic cleanup of stale servers\" subsection explaining the zombie cause of\nthe \"not connected, restart the plugin\" sympto\n[…]\nion +\nshutdown-backstop fix. Updates troubleshooting to note auto-reconnect means a\nplugin restart is usually unnecessary. No stale screenshots imported (PR #56\nshots predate the mask/theme removals).",
"is_bot": false,
"headline": "docs(desktop-bridge): document plugin UI, auto-reconnect watchdog, an…",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-05-30T17:49:39Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "548cc4c6857e6f2d22ac25f3a3979859b409f8ad",
"body": "…ectly\n\nThe manual sun/moon toggle (and its OS-preference fallback) duplicated control\nthat Figma already owns via themeColors:true. Removed the button and toggleTheme;\napplyTheme now mirrors Figma's injected figma-light/figma-dark class onto\nbody[data-theme] (with a MutationObserver for live theme switches, OS fallback\nif the class is absent), so the status/log color tokens always match Figma.\nOne less control to manage; the plugin theme can no longer drift from Figma.",
"is_bot": false,
"headline": "refactor(desktop-bridge): remove theme toggle, follow Figma theme dir…",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-05-30T17:46:55Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ab658f1c0b7a7f53667b153e471146dd8a5f5870",
"body": "…acy)\n\nThe eye toggle masked the connected file/page name in the Info panel, but\nFigma already shows both in the tab/title bar and left sidebar — so masking\nthem inside the plugin provides no real privacy, just an extra control and\nstate to manage. Removed the toggle and always show the values; the Info panel\nitself stays (confirms which file the bridge is on, useful with multiple\nservers). Trims UI surface in line with the small-footprint goal.",
"is_bot": false,
"headline": "refactor(desktop-bridge): remove file/page mask toggle (illusory priv…",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-05-30T17:43:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c2805760f5277471742e7000959c186b6325fee2",
"body": "…ected until restart\" cause)\n\nDiagnosed live: 8 stale dist/local.js servers (3-9 days old) squatted ports\n9223-9231, forcing new servers onto fallback ports with no plugin attached, so\nthe client reports \"server running but no plugin connected, restart the plugin\".\nThe reaper that should prevent thi\n[…]\n but have not advertised yet; parses portable ps etime (macOS rejects etimes).\n\nTests: +5 (SIGKILL-escalation integration proof, age-guard sparing, reaper\nlifecycle, constants). Full suite 1183 pass.",
"is_bot": false,
"headline": "fix(port-discovery): reliably reap zombie MCP servers (real \"not conn…",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-05-30T15:56:03Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "8393a5af5969b85bbfa1d1689e3ba86697d1874e",
"body": "Fixes the long-standing \"plugin says not connected until I restart it\" bug.\n\nRoot cause: the plugin scanned for MCP servers once on load (3-retry burst,\nthen stopped). If the MCP client/server started AFTER that window, the plugin\nnever re-probed, so the server saw no plugin connection until a full \n[…]\nshows clickable \"Reconnect\" when disconnected\n instead of a misleading \"Pause\". Pause sets userPaused so the watchdog\n respects a deliberate pause.\n\nAll 1178 tests pass; ui.html script parses clean.",
"is_bot": false,
"headline": "feat(desktop-bridge): auto-reconnect watchdog + one-click Reconnect",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-05-30T15:35:24Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "54df2d3b3a615c54041b2f424ddbf1423cb20bae",
"body": "… stale 1.28.1 from older fork base)",
"is_bot": false,
"headline": "fix(desktop-bridge): restore PLUGIN_VERSION to 1.29.0 (PR #56 carried…",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-05-30T14:58:56Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9420778b3bc0ecd3840e52a8ed3945e84322415c",
"body": "…e, server-count badge, Pause/Resume rescan)\n\nFrom PR #56 (Dave Gregurke), functional files only. Excludes fork-maintenance\nartifacts: ui-full.html duplicate, CLAUDE.md fork-ownership section, .gitattributes,\nscripts/sync-fork.sh.\n\n- code.js: collapsed window 180x50 -> 240x40\n- ui.html: human-readab\n[…]\nxport, theme toggle icon fix, live 'N server(s)' badge\n (2s poll), Pause/Resume that re-scans ports without a full plugin restart.\nAll 69 bridge command handlers preserved (no functional regression).",
"is_bot": false,
"headline": "feat(desktop-bridge): cherry-pick v0.2.1 UI redesign (log intelligenc…",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-05-30T14:57:47Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "77528d06ef307e3420c72a3c70214d1f3677b5d8",
"body": "Two small follow-ups to v1.29.0 born from this release. The granular\naccess token in ~/.npmrc had expired mid-flight: by the time npm publish\nreturned 401 at Phase 5, the release script had already bumped versions,\nscaffolded the CHANGELOG, created the GitHub Release, and pushed the tag.\n\nChanges:\n\n\n[…]\nequired by per-package 2FA enforcement\n - Why disabling account 2FA does not help (per-package rule takes\n precedence)\n - The 3-command renewal recipe\n\nNo version bump — this is docs/script-only.",
"is_bot": false,
"headline": "chore: release script — npm auth precheck + token rotation recipe",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-05-22T15:15:31Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "4e61ad24e2b2fb0a5043da137bc42deede2282b8",
"body": "…nt + library variables)\n\nThree new tools fill the gap between \"I have a component key from search results\"\nand \"I can actually use it\" — without requiring the library file URL or Enterprise plan.\n\n- figma_get_library_component_by_key (REST): resolves any 40-char component key to\n full componentPro\n[…]\nloses the workflow loop: search_design_system → figma_get_library_component_by_key →\nfigma_instantiate_component → figma_get_library_variables → figma_import_library_variable\n→ existing binding tools.",
"is_bot": false,
"headline": "chore: Release v1.29.0 — shared library inspection (key-based compone…",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-05-22T13:57:17Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "f8c57b403b03a8183cf4be0eebea50cea0051701",
"body": "…SON formatters + Tailwind v4 namespace dedup\n\nBug fix patch surfacing from live-fire testing of the v1.28.0 formatters against multi-tier semantic-token design systems (Altitude Design System, lib-NEF-v5). Four bugs that produced garbage output for alias-heavy semantic-token sets, now fixed and cov\n[…]\n-comparison.md (should be 9 / 95 / 103).\n- Stale \"Fully implemented: dtcg + css-vars\" error messages in formatters/stubs.ts + parsers/stubs.ts — now list the actual supported set.\n\n1151 tests passing.",
"is_bot": false,
"headline": "chore: Release v1.28.1 — fix alias resolution in Tailwind v3 / TS / J…",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-05-18T20:00:15Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "5390b0ec968cd772ccfde20bd82222d5d0dfd0c6",
"body": null,
"is_bot": false,
"headline": "Merge feature/token-formatters-phase-2 into main — v1.28.0 release",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-05-18T19:39:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e5956e77085f38efcf23163616bad1e1d5dfa44c",
"body": "Seven new output formats shipped (Tailwind v4, Tailwind v3, SCSS, TS\nmodule, JSON flat/nested, Style Dictionary v3, Tokens Studio). Combined\nwith DTCG + CSS variables, figma_export_tokens now ships 10 fully-\nimplemented output formats. No third-party build-tool install required\nfor any popular styli\n[…]\nse 3.5 audit caught two real issues that the release script regex\nmissed:\n- README banner still referenced v1.27.0/v1.27.1\n- '93 tools' Cloud Mode references in table cells\n\nBoth fixed before publish.",
"is_bot": false,
"headline": "chore: Release v1.28.0 — full formatter coverage for figma_export_tokens",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-05-18T19:39:05Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "fbb10473be14664d033c73b5c0d9677626d1bc4f",
"body": "…/Planned'\n\nCaught by the user reading docs/tools.md output-formats table after the\nv1.27.1 release shipped. The status column labeled rows as 'Phase 1' /\n'Phase 2' — internal-roadmap terminology with no public meaning. Users\nhad no way to interpret it (no published roadmap to cross-reference).\n\nFix\n[…]\nso this class of leak gets\ncaught next release. Logged in Anti-Patterns Caught section.\n\nNext: actually implementing the formatters now marked 'Planned' so the\nstatus column doesn't stay aspirational.",
"is_bot": false,
"headline": "docs: replace internal 'Phase 1/2' jargon with user-friendly 'Shipped…",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-05-18T19:23:53Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "7830c933958314d2930038de443f2d938ecf117c",
"body": "Phase 3.5 stale-content audit (the one I just added to RELEASING.md)\ncaught two real issues on the v1.27.1 release that I'd already missed:\n\n1. README banner still said '(v1.27.0)' — should reference v1.27.1 per\n the rule that banner version stamps must match package.json. Now\n reads '(v1.27.0, \n[…]\nn of the new Phase 3.5 audit and it fired\ncorrectly. The .notes/RELEASING.md file was updated to clarify the\nbanner version-stamp rule (the (vX.Y.0, patched vX.Y.Z) form is\nexplicitly documented now).",
"is_bot": false,
"headline": "docs: banner + recent-releases entries refreshed for v1.27.1",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-05-17T03:12:37Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "1570d5688212366402ad5a95659648c480cff9ab",
"body": "No code behavior changes. Catches the stale-content surface that the\nv1.27.0 release missed:\n\n- README front-page banner was still announcing v1.23.0\n- 'Phase 1 ships with DTCG only' language across tool descriptions,\n error messages, and internal comments — even though CSS variables\n formatter sh\n[…]\nredeploys Cloud Mode so the AI-facing tool\ndescriptions reach users (without 1.27.1, those still serve the v1.27.0\nstale text in dist/local.js and the Cloudflare deployment).\n\nFull suite 1129 passing.",
"is_bot": false,
"headline": "chore: Release v1.27.1 — docs patch sweeping stale Phase 1/2 language",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-05-17T01:18:48Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "6658ad0b9f451f3bd4529a3e6a7ff4932533739e",
"body": "…urce\n\nUser flagged the GitHub README still showing the v1.23.0 banner as the\nfront-and-center \"What's New\" callout — three minor versions out of date\n(v1.24, v1.25, v1.26 all shipped without updating it; v1.27.0 release\nalso missed it). Triggered an exhaustive audit via three parallel\nsub-agents (R\n[…]\nions (the latter\nship to users on their next MCP reconnect — Local Mode picks up the\nnew dist after `npm update @latest`; Cloud Mode picks up immediately\non wrangler deploy).\n\nFull suite 1129 passing.",
"is_bot": false,
"headline": "docs(audit): exhaustive stale-content sweep across README + docs + so…",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-05-17T01:16:03Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "b71d2a180ae643234250963c461bf7d0faf5dbbf",
"body": null,
"is_bot": false,
"headline": "Merge feature/figma-tokens-sync into main — v1.27.0 release",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-05-17T01:02:11Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "510128301a7bb3c13e3fe99e70724fd0bde062be",
"body": null,
"is_bot": false,
"headline": "chore: Release v1.27.0 — bidirectional Figma↔code token sync",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-05-17T01:02:04Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "56671b7cb6810baf9883c2afdbf41a936af0a90e",
"body": "…ersion\n\nThree pre-merge fixes from the code review of feature/figma-tokens-sync\nbefore v1.27.0 release.\n\n1. Cloud Mode fs landmine (BLOCKING per review). The new tools were\n registered identically in src/index.ts (Cloud Mode) but called\n readFileSync / readdirSync / writeFileSync / process.cwd(\n[…]\nript update so scripts/release.sh now bumps this\n string alongside src/index.ts's three version literals and the\n plugin's PLUGIN_VERSION.\n\n2 new tests added (29 tokens tests, 1129 total passing).",
"is_bot": false,
"headline": "fix(tokens): Cloud Mode fs guard + alias-skip warnings + dynamic mcpV…",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-05-17T00:55:38Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "cc3710cc161a8d6f8f9a87beeef859b272878747",
"body": "…a now\n\nWired the diff plan into real Figma variable mutations via the plugin's\nexecuteCodeViaUI bridge. Updates flow:\n\n 1. Compute diff plan as before (toUpdate / toCreate / toDelete buckets).\n 2. For each toUpdate entry: look up the Figma variableId + collectionId\n from the code-side token's\n[…]\nponse shape adds an applyResult { applied, failed, errors } block\nwhen not dry-run and there were toUpdate entries. The mode label in the\nresponse is now 'applied' instead of 'not-applied-in-phase-1'.",
"is_bot": false,
"headline": "feat(tokens): apply phase — figma_import_tokens actually mutates Figm…",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-05-16T21:31:08Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "d049aff745a6f1aaa19d8b6b97218bf12715deed",
"body": "User-spotted accuracy issues from the third real-Figma round-trip\ntest against CollegeTown:\n\n1. 70 broken `var(--ds-unknown)` references in 3-mode.css.\n\n The converter previously emitted `{ reference: \"{unknown}\" }` for any\n alias whose target wasn't in the local variable set — i.e. variables\n \n[…]\n resolve `{__library:...}` references to their literal\n values instead of skipping them in CSS output. Not in this commit.\n\n2 regression tests added (27 tokens tests total, full suite 1127\npassing).",
"is_bot": false,
"headline": "fix(tokens): cross-library alias preservation + CSS string quoting",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-05-16T21:21:37Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "da87484126590992ac368da8b6a40ef6be78bb00",
"body": "Real Figma variable names can contain spaces (CollegeTown has\n'tailwind colors/purple/50'). The previous css-vars formatter joined\npath segments with '-' without normalizing each segment, producing\ninvalid CSS identifiers like '--ds-tailwind colors-purple-50' with an\nunescaped space.\n\nFix: pathToCss\n[…]\ncolors-purple-50)'\nmatches the property name that's actually declared elsewhere).\n\nRegression test added with a 'tailwind colors' source name + an alias\npointing at it. Suite: 25 tokens tests passing.",
"is_bot": false,
"headline": "fix(tokens): slugify each path segment in css-vars output",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-05-16T20:45:17Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "e969112133de70544b068320ab3b5b31cf535946",
"body": "Two changes from the third round of real-Figma testing.\n\n1. Order-independent diff comparison. Final 60 false-positive toUpdates\n on the CollegeTown test were tokens whose values matched exactly but\n whose mode key insertion order differed:\n Figma: { Light, Dark, Vibrant } (collection o\n[…]\nanonical to source/, CSS vars to generated/ with\n ds- prefix and splitByCollection.\n\n4 new Jest tests covering primitives, aliases, dark-mode convention,\nprefix. Full suite: 1124 passing (was 1120).",
"is_bot": false,
"headline": "feat(tokens): order-independent diff + CSS variables formatter",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-05-16T20:39:59Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "ed3874c14a7834d9dc3ef81d28cd54d610743971",
"body": "…ensions\n\nCaught by the second real-Figma round-trip against CollegeTown. After the\nslug round-trip and merge dedup fixes, parsedTokenCount was correct (713\nmatching Figma exactly), set names matched perfectly, and 627 of 713 tokens\nshowed unchanged. But the 60 multi-mode tokens in the \"3. Mode\" col\n[…]\n(modulo cross-library aliases, which\nare a separate Phase 2 issue tracked separately).\n\nRegression test added: splitByMode + parse → modes recovered correctly.\nSuite: 20 tokens tests passing (was 19).",
"is_bot": false,
"headline": "fix(tokens): splitByMode round-trip — embed fileMode in document $ext…",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-05-16T20:34:19Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "702c787c9b73aa0268fd9abf254dc120f95467e8",
"body": "…sponse\n\nThree correctness fixes from the second round of real-Figma testing\nagainst CollegeTown Design System.\n\n1. Set names slugified for JSON keys lose their original form. A Figma\n collection named \"1. TailwindCSS\" becomes JSON key \"1-tailwindcss\",\n and the parser previously used that slug a\n[…]\n the apply; full entries available via figma_get_variables for IDs.\n\nRegression test added for the set-name slug round-trip with\n\"1. TailwindCSS\" collection name. Full suite: 1119 passing (was 1118).",
"is_bot": false,
"headline": "fix(tokens): set-name slug round-trip, multi-mode dedup, slim diff re…",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-05-16T20:29:03Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "da4d14112794b52811adc388cf3dcb99721e178a",
"body": "Two bugs caught by the first real-Figma test against CollegeTown Design System:\n\n1. ESM require bug. collectInputFiles dynamically imported readdirSync via\n require(\"node:fs\") inside the function body. The MCP runs as ESM (per\n tsconfig.local.json's \"module\": \"Node16\"), so require is undefined a\n[…]\n+ derived outputs\" split.\n\nBoth validated by running figma_export_tokens against a real 4-collection\n713-token file and verifying the 7 split-by-mode/collection DTCG files land\nin the right directory.",
"is_bot": false,
"headline": "fix(tokens): ESM require + canonical output routing",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-05-16T20:22:37Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "db5f4350f8508f79a01a01d0db4ce63e1109e7d3",
"body": "… DTCG round-trip\n\nPhase 1 of the bidirectional Figma <-> code token sync engine. Two new MCP\ntools that together replace Style Dictionary and Tokens Studio's export\npipeline for popular styling methods. DTCG (W3C Design Tokens Community\nGroup) is the canonical pivot format; other styling outputs co\n[…]\n-platform needs can still consume our DTCG output downstream.\n\nDesign doc: .notes/FIGMA-TOKENS-SYNC-DESIGN.md (gitignored per project\nconvention; included in this commit's working tree for reference).",
"is_bot": false,
"headline": "feat(tokens): scaffold figma_export_tokens + figma_import_tokens with…",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-05-16T20:16:28Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "63fc35aafe5ec08200533ea63e3c1b5539ec27c4",
"body": "…ire-compatible upgrades\n\nPrevious wording said \"re-import the manifest after a package update\" as a\nblanket instruction, which is misleading. In practice most upgrades stay\nwire-compatible with the previous plugin — every tool, every command, and\nevery WebSocket protocol message still works without\n[…]\n up (status-pill copy, pluginVersion reporting)\n - Be explicit that release notes will call out required re-imports\n explicitly when they apply\n\nNo code or test changes. Tests still 1100/36 green.",
"is_bot": false,
"headline": "docs: clarify that re-importing the plugin manifest is optional for w…",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-05-16T19:20:19Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "9ddf78a3ca0083582cbf915ffd85d3deaa36bd62",
"body": null,
"is_bot": false,
"headline": "Merge feature/cleanup-and-clarity into main — v1.26.0 release",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-05-16T19:13:56Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b4f665e6c6fe00135dab648d643ab9b5f7203919",
"body": "…tion",
"is_bot": false,
"headline": "chore: Release v1.26.0 — Local-mode CDP removal + identity disambigua…",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-05-16T19:13:52Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ffe4bf017515fee136f03733a2ad00cefc21532f",
"body": "- docs/setup.md L415: Cloud Mode \"What You Can Do (83 Tools)\" → (93 Tools)\n- docs/use-cases.md L412: Cloud pairing flow \"All write tools (43 total)\"\n → \"All 93 Cloud Mode tools — including write/create tools\"\n\nBoth were missed by the earlier sweep because they used \"(N Tools)\"\nand \"(N total)\" patterns rather than the \"94 tools\" / \"**94**\" patterns\nthe bulk sed targeted. Caught by a follow-up subagent audit.",
"is_bot": false,
"headline": "chore(docs): fix two stale tool-count cells found in final verification",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-05-16T17:18:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b503371e5737ad84517030c76d4691bd29e5acf2",
"body": "…ode boundaries\n\nWhat was wrong, what changed, and why each chunk got rewritten:\n\nTool counts (off across the board)\n Old docs said \"94 tools\" in Local and \"83 tools\" in Cloud / \"61 tools\" in\n Remote-paired / \"44 tools\" / \"15 tools\" in various tables. Grepping the\n registered tool names in src/lo\n[…]\nppeteer-CDP path was removed.\n\ntools.md figma_navigate description\n Was Always use this first to initialize the browser - no longer true in\n Local mode. Split the description to show both behaviors.",
"is_bot": false,
"headline": "chore(docs): scrub Markdown docs — tool counts, bootloader removal, m…",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-05-16T17:11:05Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "5ecf200d3a30f27a0c5ed8d46e412d581e53a3c8",
"body": "package.json:\n - description: the previous npm description (\"MCP server for accessing\n Figma plugin console logs and screenshots via Cloudflare Workers or\n local mode\") only covered 2 tools out of 94 — console logs and\n screenshots — and was the first thing prospective users saw on npm.\n \n[…]\n documented in .env.mcp) and accepted as a Bearer\n token in cloud mode. Now: \"Optional server-wide PAT for testing.\n Cloud production uses per-user OAuth; local NPX mode reads this env\n var.\"",
"is_bot": false,
"headline": "chore(docs): package.json, wrangler, delete orphan launcher scripts",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-05-16T16:53:40Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "ae1ffe8a3ced07b9bfed676eae88f99f75228d29",
"body": "Findings from the tool-description audit applied:\n\nfigma_get_variables (src/core/figma-tools.ts):\n - JSDoc block (lines 1040–1052): replaced the \"TWO-CALL PATTERN\n (console snippet)\" workflow description with the actual resolution\n order — cache → Desktop Bridge plugin → REST API → Styles API\n[…]\n description, one in the runtime resource_link header — both removed.\n\nVerification:\n - tsc --noEmit -p tsconfig.local.json: clean\n - jest: 1100 / 1100 passing\n - Tool surface unchanged (94 → 94)",
"is_bot": false,
"headline": "chore(docs): scrub tool descriptions — accurate to current behavior",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-05-16T16:52:15Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "1ff65d3964da99b18df24be145857bddf0a9f376",
"body": "… runtime strings + plugin code comments\n\nUser-visible runtime strings:\n - src/local.ts:1229 (LLM-facing ai_instruction in figma_get_status): no\n longer claims \"the plugin's bootloader will automatically scan all\n ports\" — the bootloader was deleted in Phase 2 (commit 03ffea1).\n Now says t\n[…]\nthis file (or any test file — CDP path is gone). Header\n now correctly summarizes what's actually tested.\n\nVerification:\n - tsc --noEmit -p tsconfig.local.json: clean\n - jest: 1100 / 1100 passing",
"is_bot": false,
"headline": "chore(docs): scrub stale CDP / bootloader / Puppeteer references from…",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-05-16T16:49:51Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "9081df2a528acea4fcde372f1490a2ed3a9c5254",
"body": "Tail-end documentation cleanup so nothing in user-facing or AI-instruction\ndocs still implies a CDP fallback exists:\n\n - docs/architecture.md: the IFigmaConnector connector table dropped\n the \"Local Desktop / FigmaDesktopConnector / CDP fallback\" row.\n Added a one-line note explaining the tra\n[…]\n tsconfig.local.json: clean\n - tsc --noEmit -p tsconfig.cloudflare.json: only pre-existing Env errors\n - npm run build:local: clean\n - jest: 1100 / 1100 passing\n - Tool surface unchanged (94 → 94)",
"is_bot": false,
"headline": "docs: scrub remaining CDP references (Phase 3 8 — final)",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-05-16T16:04:18Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "90fe164e29ed6b0c7277501c027e006643dbc259",
"body": "Now that the CDP source files and config have been removed, the two\nlocal-mode-only browser-automation dependencies have no consumers:\n\n - puppeteer-core (^23.11.1) — used by LocalBrowserManager and\n FigmaDesktopConnector for the Figma Desktop --remote-debugging-port\n connection. Both files d\n[…]\n tsconfig.local.json: clean\n - tsc --noEmit -p tsconfig.cloudflare.json: only pre-existing Env errors\n - npm run build:local: clean\n - jest: 1100 / 1100 passing\n - Tool surface unchanged (94 → 94)",
"is_bot": false,
"headline": "chore(deps): drop puppeteer-core + chrome-remote-interface (Phase 3 7)",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-05-16T16:03:01Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "26b79b80f362212265cb4aa5cbc80260a6a5d8bf",
"body": "… (Phase 3 6)\n\nThe local-mode `debugHost` / `debugPort` config block was the CDP launch\nconfiguration — telling LocalBrowserManager which host/port to\n`puppeteer.connect()` to. With Phase 3 5 deleting LocalBrowserManager,\nnothing reads these fields anymore.\n\nChanges:\n - src/core/config.ts: drop the\n[…]\nrification:\n - tsc --noEmit -p tsconfig.local.json: clean\n - tsc --noEmit -p tsconfig.cloudflare.json: only pre-existing Env errors\n - jest: 1100 / 1100 passing\n - Tool surface unchanged (94 → 94)",
"is_bot": false,
"headline": "chore: drop LocalModeConfig (debugHost / debugPort) from config types…",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-05-16T16:01:10Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "ffb8b39ad4aab97167ff700425dae8ff8f18c0a4",
"body": "…pe to 'websocket' (Phase 3 5)\n\nAfter 4a–4e nothing reachable in either local or cloud mode references\nthe local Puppeteer/CDP layer. Dropping all of it:\n\n - src/core/figma-desktop-connector.ts (~1,693 lines) — the CDP-side\n IFigmaConnector implementation\n - src/browser/local.ts — LocalBrowserM\n[…]\nBrowserManager |\n IBrowserManager across src/ tests/: 0 hits\n\nCloud mode (src/browser-manager.ts, @cloudflare/puppeteer) is untouched\nand continues to work the same way — it never used these files.",
"is_bot": false,
"headline": "chore: delete CDP source files; narrow IFigmaConnector.getTransportTy…",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-05-16T15:59:22Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "bb641eec538be36e52ecf7bee404a2615fb2fda7",
"body": "…sterFigmaAPITools params (Phase 3 4e)\n\nThe last surface that referenced the old CDP/Puppeteer machinery in\nlocal mode comes out:\n\n src/local.ts\n - Drop the `import { LocalBrowserManager }` and `import { ConsoleMonitor }`\n and `import { FigmaDesktopConnector }` lines\n - Drop `private bro\n[…]\nsportType to 'websocket'\n 6. drop LocalModeConfig + debugHost/debugPort from src/core/config.ts +\n types\n 7. drop puppeteer-core + chrome-remote-interface from package.json\n 8. final docs scrub",
"is_bot": false,
"headline": "refactor: drop browserManager + consoleMonitor fields and unused regi…",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-05-15T20:12:12Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "233d1706b91cef267baa57a94fabab015135f50c",
"body": "…console to WS-only (Phase 3 4d)\n\nFinal pass over the dual-transport literals that were carried in alongside\nthe now-deleted CDP branches:\n\n figma_watch_console: the entire handler was a 50-line `useCDP ? cdpPath\n : wsPath` ternary tree. After 4a, ConsoleMonitor is never running so\n useCDP is alw\n[…]\nc --noEmit -p tsconfig.cloudflare.json: only pre-existing Env errors\n - jest: 1101/1101 passing\n - Tool surface unchanged (94 → 94)\n - grep useCDP|\"cdp\"|'cdp' in src/local.ts: 0 hits in active code",
"is_bot": false,
"headline": "refactor(local): drop useCDP / 'cdp' literals — collapse figma_watch_…",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-05-15T20:02:59Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "43286ca5420bd8e2b854b90e8ab90d4797cb7287",
"body": "…ndlers (Phase 3 4c)\n\nAfter 4a the LocalBrowserManager field is always null, so every\n`if (this.browserManager) { … }` / `?.isRunning()` branch in local.ts is\ndead code. This commit collapses them to the WebSocket-only path that was\nalready living next door in each affected handler.\n\nTouched handler\n[…]\nVerification:\n - tsc --noEmit -p tsconfig.local.json: clean\n - tsc --noEmit -p tsconfig.cloudflare.json: only pre-existing Env errors\n - jest: 1101/1101 passing\n - Tool surface unchanged (94 → 94)",
"is_bot": false,
"headline": "refactor(local): collapse browserManager dead branches across tool ha…",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-05-15T19:59:55Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "92be3b4d347a7b566dc111a41d0dc0a0a5f3c76f",
"body": "…figma_clear_console (Phase 3 4b)\n\nAfter 4a, ConsoleMonitor is never constructed. Three of the surviving dead\nbranches were independently reachable (i.e. not nested inside a\nbrowserManager guard) and worth removing now so the WS-only intent is\nobvious to anyone reading the code:\n\n 1. figma_get_cons\n[…]\nVerification:\n - tsc --noEmit -p tsconfig.local.json: clean\n - tsc --noEmit -p tsconfig.cloudflare.json: only pre-existing Env errors\n - jest: 1101/1101 passing\n - Tool surface unchanged (94 → 94)",
"is_bot": false,
"headline": "refactor(local): collapse the CDP branch in figma_get_console_logs + …",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-05-15T19:53:26Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "b279eccee4476859142a7ca2ee87256fdaad6a1a",
"body": "…or (Phase 3 4a)\n\nensureInitialized() previously did two things:\n 1. Constructed LocalBrowserManager (a Puppeteer client that connected to\n Figma Desktop via --remote-debugging-port=9222 — CDP)\n 2. Constructed ConsoleMonitor bound to that Puppeteer Page\n\nBoth have been superseded by the WebSoc\n[…]\nVerification:\n - tsc --noEmit -p tsconfig.local.json: clean\n - tsc --noEmit -p tsconfig.cloudflare.json: only pre-existing Env errors\n - jest: 1101/1101 passing\n - Tool surface unchanged (94 → 94)",
"is_bot": false,
"headline": "refactor(local): stop constructing LocalBrowserManager + ConsoleMonit…",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-05-15T19:50:34Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "8db936118c46dec1e222a3247d972c9effd8fd23",
"body": "…(Phase 3)\n\nThe CDP-fallback branches inside figma-tools.ts tool handlers are reachable\nonly if `getDesktopConnector` is undefined — but both call sites\n(`src/local.ts:5961` and `src/index.ts:1019`) always pass a non-null\n`getDesktopConnector`. The legacy else-branches that dynamically imported\nFigm\n[…]\n01/1101 passing\n - Tool surface unchanged (94 → 94)\n - grep -c \"\\bbrowserManager\\b\" src/core/figma-tools.ts: 0\n - grep -c \"FigmaDesktopConnector\\|figma-desktop-connector\" src/core/figma-tools.ts: 0",
"is_bot": false,
"headline": "refactor: drop CDP fallback paths from figma-tools.ts handler bodies …",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-05-15T18:00:39Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "4262bed84a5d16cee952f23695816d5b2a95d57a",
"body": "…@cloudflare/puppeteer\n\nConsoleMonitor's Page and WebWorker types came from puppeteer-core for a\nhistorical reason: both local mode (LocalBrowserManager via puppeteer-core)\nand cloud mode (BrowserManager via @cloudflare/puppeteer) instantiated it\nagainst their respective Page implementations. The co\n[…]\n\n - tsc --noEmit -p tsconfig.cloudflare.json: only the pre-existing Env\n errors remain\n - Tool surface unchanged (94 → 94)\n - Jest from commit 1 exit 0 (commit 2 is type-only, no runtime change)",
"is_bot": false,
"headline": "refactor: migrate ConsoleMonitor type imports from puppeteer-core to …",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-05-15T17:55:21Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "c8407d2c009bfb2513da98f6f9ff9b5b046caee0",
"body": "Before deleting src/browser/{base,local,cloudflare}.ts in a later commit,\nsever the cloud BrowserManager's dependency on browser/base.ts.\n\nsrc/browser-manager.ts (cloud Cloudflare-Browser-Rendering manager) imported\nonly the NavigationResult type from browser/base.ts — no other symbols. Now\nthat typ\n[…]\n src/index.ts:101/938/982 remain (documented as pre-existing\n on main in CLAUDE.md \"Known Issues\")\n - Tool surface unchanged (94 → 94 unique figma_* tools)\n\nAtomic, type-only, zero runtime change.",
"is_bot": false,
"headline": "refactor: inline NavigationResult into browser-manager.ts (Phase 3 prep)",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-05-15T17:53:59Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "0faf925b70237b40ed1f461c0ddbd5814c16db2e",
"body": "…-tools dedupe\n\nThe Phase-2 write-tools dedupe (commit 69b02d3) excised lines 1957–5958 of\nlocal.ts on the assumption — based on the Phase-0 audit — that the entire\nrange was 30 inline copies of write-tools.ts. The audit was wrong about\nthe boundaries: five READ-SIDE tools had been interleaved betwe\n[…]\nt catch the regression because\n tests target write-tools.ts and the registrar's outputs, not the\n inline read-tool blocks — worth a follow-up test for tool-list parity)\n - dist/local.js rebuilt",
"is_bot": false,
"headline": "fix: restore 5 read-side library/design-system tools dropped by write…",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-05-15T03:29:45Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "69b02d3db204c1ada19a8bd1fc7a56cf85238372",
"body": "…eTools (-3950 lines)\n\nFor ~9 months, local mode and cloud mode have each been carrying their own\ncopy of 30 write tools — local.ts lines 1957–5958 contained inline\ndefinitions that mirrored src/core/write-tools.ts byte-for-byte (modulo\nindentation and `this.getDesktopConnector()` vs the passed-in g\n[…]\ny\n\nBackup of the pre-dedupe local.ts saved at /tmp/local.ts.bak in case any\nbehavioral drift surfaces post-merge — diff against current to recover\nany tool-specific copy that wasn't in write-tools.ts.",
"is_bot": false,
"headline": "refactor: dedupe write tools — local.ts now delegates to registerWrit…",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-05-15T03:14:18Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "03ffea10ff34e29e4dc334cbd63b8d5a9a9ffa98",
"body": "…ead code)\n\nThe \"bootloader pattern\" was an experimental v1.14.0 design that loaded a\nthin ui.html and fetched the full UI HTML from the MCP server at runtime,\nthe goal being to avoid the Figma plugin re-import dance every time the UI\nchanged. It was superseded — the shipped manifest references ui.h\n[…]\nstead of the deleted file\n\nNet deletion: ~55 KB plugin file + ~120 lines of unreferenced server +\nplugin code.\n\nVerification:\n - tsc --noEmit -p tsconfig.local.json: clean\n - jest: 1101/1101 passing",
"is_bot": false,
"headline": "chore: delete ui-full.html + bootloader code paths (HIGH-confidence d…",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-05-15T03:11:14Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "533cdf7e2ef31082ae6441d2732e92af9d454544",
"body": "…, not the IIFE-scoped var\n\nThe mode label (\"Local\" / \"Cloud\" / \"Local + Cloud\") in the status pill\nnever appeared in practice because renderModeText() was defined at the\ntop of the script and tried to read `activeConnections` directly — but\nthat variable is declared with `var` inside the connection\n[…]\nn window\n - Re-run from Plugins → Development → Figma Desktop Bridge\n - Pill should now read \"Local ready\" while connected to a local\n MCP server, or \"Local + Cloud ready\" if cloud is also paired",
"is_bot": false,
"headline": "fix: plugin mode banner reads activeConnections via the global getter…",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-05-15T03:06:01Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "0edf949ecf0e3b0a584bb56b599490ca3cb2bc78",
"body": "Replaces the static \"MCP\" label in the Desktop Bridge plugin's status pill\nwith a live mode indicator — \"Local\", \"Cloud\", or \"Local + Cloud\" — so\nusers can see at a glance which transport is actually carrying their\nsession. Before this change the pill said only \"MCP ready\" regardless of\nwhich transp\n[…]\nill will read \"Local + Cloud ready\" or \"Cloud ready\" instead of just\n\"MCP ready\" — giving her an immediate signal that something switched.\n\nRequires plugin re-import to take effect for existing users.",
"is_bot": false,
"headline": "feat: plugin status pill shows Local / Cloud transport mode",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-05-15T02:54:49Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "0ab9fb49ec37e8899d216a4eec2b53b8cb106dd2",
"body": "…r with [figma-console-mcp]\n\nThe earlier identity work only covered tools that route through\nadaptiveResponse (about 5 call sites in figma-tools.ts) plus the new\nfigma_diagnose tool. The remaining ~90 tools in the codebase built their\nown response objects directly and shipped without an _mcp field —\n[…]\nFuture tools added to the server are covered automatically.\nThe full jest suite (36 suites / 1101 tests) passes without modification —\nthe wrap is invisible to handlers and to mock-server-based tests.",
"is_bot": false,
"headline": "feat: universal identity wrap — tag every tool response + thrown erro…",
"author_name": "Terrance Pitre",
"author_login": "tpitre",
"committed_at": "2026-05-15T02:49:26Z",
"body_truncated": true,
"is_coding_agent": false
}
],
"releases_count": 66,
"commits_last_year": 553,
"latest_release_at": "2026-07-17T00:26:17Z",
"latest_release_tag": "v1.36.0",
"releases_from_tags": false,
"days_since_last_push": 4,
"active_weeks_last_year": 33,
"days_since_latest_release": 4,
"mean_days_between_releases": 4.9
},
"community": {
"has_readme": true,
"has_license": true,
"has_description": true,
"has_contributing": false,
"health_percentage": 50,
"has_issue_template": false,
"has_code_of_conduct": false,
"has_pull_request_template": false
},
"ecosystem": {
"packages": [
{
"name": "figma-console-mcp",
"exists": true,
"license": "MIT",
"keywords": [
"mcp",
"figma",
"plugin",
"design-tokens",
"design-systems",
"variables",
"figjam",
"slides",
"accessibility",
"ai",
"anthropic",
"claude",
"cloudflare"
],
"ecosystem": "npm",
"matches_repo": true,
"registry_url": "https://www.npmjs.com/package/figma-console-mcp",
"is_deprecated": false,
"latest_version": "1.36.0",
"repository_url": "https://github.com/southleft/figma-console-mcp",
"versions_count": 81,
"total_downloads": null,
"dependents_count": null,
"deprecation_note": null,
"maintainers_count": 1,
"monthly_downloads": 99709,
"first_published_at": "2025-11-08T11:48:16.636000Z",
"latest_published_at": "2026-07-17T00:32:31.958000Z",
"latest_version_yanked": null,
"days_since_latest_publish": 4
}
]
},
"popularity": {
"forks": 224,
"stars": 2024,
"watchers": 28,
"fork_history": {
"days": [
{
"date": "2026-01-15",
"count": 2
},
{
"date": "2026-01-16",
"count": 2
},
{
"date": "2026-01-17",
"count": 2
},
{
"date": "2026-01-18",
"count": 1
},
{
"date": "2026-01-20",
"count": 2
},
{
"date": "2026-01-22",
"count": 1
},
{
"date": "2026-01-24",
"count": 2
},
{
"date": "2026-01-27",
"count": 2
},
{
"date": "2026-01-28",
"count": 1
},
{
"date": "2026-01-29",
"count": 1
},
{
"date": "2026-02-02",
"count": 4
},
{
"date": "2026-02-04",
"count": 1
},
{
"date": "2026-02-08",
"count": 1
},
{
"date": "2026-02-09",
"count": 4
},
{
"date": "2026-02-10",
"count": 3
},
{
"date": "2026-02-11",
"count": 1
},
{
"date": "2026-02-13",
"count": 1
},
{
"date": "2026-02-14",
"count": 1
},
{
"date": "2026-02-15",
"count": 4
},
{
"date": "2026-02-16",
"count": 3
},
{
"date": "2026-02-17",
"count": 2
},
{
"date": "2026-02-18",
"count": 2
},
{
"date": "2026-02-19",
"count": 4
},
{
"date": "2026-02-21",
"count": 3
},
{
"date": "2026-02-22",
"count": 1
},
{
"date": "2026-02-23",
"count": 4
},
{
"date": "2026-02-24",
"count": 2
},
{
"date": "2026-02-26",
"count": 2
},
{
"date": "2026-02-27",
"count": 2
},
{
"date": "2026-03-01",
"count": 4
},
{
"date": "2026-03-02",
"count": 2
},
{
"date": "2026-03-03",
"count": 1
},
{
"date": "2026-03-04",
"count": 5
},
{
"date": "2026-03-05",
"count": 1
},
{
"date": "2026-03-06",
"count": 3
},
{
"date": "2026-03-08",
"count": 1
},
{
"date": "2026-03-09",
"count": 3
},
{
"date": "2026-03-10",
"count": 4
},
{
"date": "2026-03-11",
"count": 4
},
{
"date": "2026-03-12",
"count": 5
},
{
"date": "2026-03-13",
"count": 5
},
{
"date": "2026-03-15",
"count": 2
},
{
"date": "2026-03-16",
"count": 4
},
{
"date": "2026-03-17",
"count": 2
},
{
"date": "2026-03-18",
"count": 5
},
{
"date": "2026-03-19",
"count": 8
},
{
"date": "2026-03-20",
"count": 5
},
{
"date": "2026-03-21",
"count": 4
},
{
"date": "2026-03-22",
"count": 1
},
{
"date": "2026-03-23",
"count": 3
},
{
"date": "2026-03-24",
"count": 3
},
{
"date": "2026-03-25",
"count": 3
},
{
"date": "2026-03-26",
"count": 2
},
{
"date": "2026-03-27",
"count": 1
},
{
"date": "2026-03-28",
"count": 5
},
{
"date": "2026-03-29",
"count": 1
},
{
"date": "2026-03-30",
"count": 1
},
{
"date": "2026-04-01",
"count": 2
},
{
"date": "2026-04-02",
"count": 1
},
{
"date": "2026-04-03",
"count": 2
},
{
"date": "2026-04-04",
"count": 1
},
{
"date": "2026-04-05",
"count": 1
},
{
"date": "2026-04-06",
"count": 3
},
{
"date": "2026-04-07",
"count": 3
},
{
"date": "2026-04-09",
"count": 2
},
{
"date": "2026-04-10",
"count": 3
},
{
"date": "2026-04-12",
"count": 1
},
{
"date": "2026-04-14",
"count": 3
},
{
"date": "2026-04-15",
"count": 3
},
{
"date": "2026-04-16",
"count": 2
},
{
"date": "2026-04-17",
"count": 1
},
{
"date": "2026-04-18",
"count": 1
},
{
"date": "2026-04-19",
"count": 1
},
{
"date": "2026-04-22",
"count": 1
},
{
"date": "2026-04-24",
"count": 1
},
{
"date": "2026-04-27",
"count": 1
},
{
"date": "2026-04-28",
"count": 2
},
{
"date": "2026-04-29",
"count": 1
},
{
"date": "2026-05-01",
"count": 1
},
{
"date": "2026-05-05",
"count": 1
},
{
"date": "2026-05-10",
"count": 1
},
{
"date": "2026-05-19",
"count": 1
},
{
"date": "2026-05-20",
"count": 1
},
{
"date": "2026-05-23",
"count": 1
},
{
"date": "2026-05-25",
"count": 1
},
{
"date": "2026-05-26",
"count": 1
},
{
"date": "2026-05-27",
"count": 1
},
{
"date": "2026-05-29",
"count": 1
},
{
"date": "2026-06-03",
"count": 1
},
{
"date": "2026-06-04",
"count": 1
},
{
"date": "2026-06-10",
"count": 2
},
{
"date": "2026-06-17",
"count": 1
},
{
"date": "2026-06-18",
"count": 1
},
{
"date": "2026-06-21",
"count": 1
},
{
"date": "2026-06-22",
"count": 2
},
{
"date": "2026-06-23",
"count": 1
},
{
"date": "2026-06-26",
"count": 1
},
{
"date": "2026-06-29",
"count": 1
},
{
"date": "2026-07-02",
"count": 1
},
{
"date": "2026-07-05",
"count": 3
},
{
"date": "2026-07-06",
"count": 1
},
{
"date": "2026-07-08",
"count": 2
},
{
"date": "2026-07-09",
"count": 2
},
{
"date": "2026-07-10",
"count": 2
},
{
"date": "2026-07-14",
"count": 1
},
{
"date": "2026-07-15",
"count": 4
},
{
"date": "2026-07-17",
"count": 1
}
],
"complete": true,
"collected": 224,
"total_forks": 224
},
"star_history": {
"days": [
{
"date": "2026-03-16",
"count": 10
},
{
"date": "2026-03-17",
"count": 27
},
{
"date": "2026-03-18",
"count": 21
},
{
"date": "2026-03-19",
"count": 39
},
{
"date": "2026-03-20",
"count": 22
},
{
"date": "2026-03-21",
"count": 19
},
{
"date": "2026-03-22",
"count": 13
},
{
"date": "2026-03-23",
"count": 16
},
{
"date": "2026-03-24",
"count": 31
},
{
"date": "2026-03-25",
"count": 31
},
{
"date": "2026-03-26",
"count": 17
},
{
"date": "2026-03-27",
"count": 18
},
{
"date": "2026-03-28",
"count": 12
},
{
"date": "2026-03-29",
"count": 6
},
{
"date": "2026-03-30",
"count": 8
},
{
"date": "2026-03-31",
"count": 14
},
{
"date": "2026-04-01",
"count": 10
},
{
"date": "2026-04-02",
"count": 20
},
{
"date": "2026-04-03",
"count": 8
},
{
"date": "2026-04-04",
"count": 5
},
{
"date": "2026-04-05",
"count": 3
},
{
"date": "2026-04-06",
"count": 8
},
{
"date": "2026-04-07",
"count": 16
},
{
"date": "2026-04-08",
"count": 12
},
{
"date": "2026-04-09",
"count": 10
},
{
"date": "2026-04-10",
"count": 15
},
{
"date": "2026-04-11",
"count": 4
},
{
"date": "2026-04-12",
"count": 6
},
{
"date": "2026-04-13",
"count": 12
},
{
"date": "2026-04-14",
"count": 14
},
{
"date": "2026-04-15",
"count": 11
},
{
"date": "2026-04-16",
"count": 15
},
{
"date": "2026-04-17",
"count": 10
},
{
"date": "2026-04-18",
"count": 3
},
{
"date": "2026-04-19",
"count": 5
},
{
"date": "2026-04-20",
"count": 11
},
{
"date": "2026-04-21",
"count": 10
},
{
"date": "2026-04-22",
"count": 6
},
{
"date": "2026-04-23",
"count": 9
},
{
"date": "2026-04-24",
"count": 3
},
{
"date": "2026-04-25",
"count": 7
},
{
"date": "2026-04-26",
"count": 3
},
{
"date": "2026-04-27",
"count": 6
},
{
"date": "2026-04-28",
"count": 10
},
{
"date": "2026-04-29",
"count": 11
},
{
"date": "2026-04-30",
"count": 8
},
{
"date": "2026-05-01",
"count": 2
},
{
"date": "2026-05-02",
"count": 1
},
{
"date": "2026-05-03",
"count": 2
},
{
"date": "2026-05-04",
"count": 8
},
{
"date": "2026-05-05",
"count": 6
},
{
"date": "2026-05-06",
"count": 8
},
{
"date": "2026-05-07",
"count": 8
},
{
"date": "2026-05-08",
"count": 5
},
{
"date": "2026-05-09",
"count": 4
},
{
"date": "2026-05-10",
"count": 4
},
{
"date": "2026-05-11",
"count": 5
},
{
"date": "2026-05-12",
"count": 7
},
{
"date": "2026-05-13",
"count": 3
},
{
"date": "2026-05-14",
"count": 5
},
{
"date": "2026-05-15",
"count": 6
},
{
"date": "2026-05-16",
"count": 3
},
{
"date": "2026-05-17",
"count": 1
},
{
"date": "2026-05-18",
"count": 6
},
{
"date": "2026-05-19",
"count": 6
},
{
"date": "2026-05-20",
"count": 3
},
{
"date": "2026-05-21",
"count": 12
},
{
"date": "2026-05-22",
"count": 6
},
{
"date": "2026-05-23",
"count": 1
},
{
"date": "2026-05-24",
"count": 2
},
{
"date": "2026-05-25",
"count": 2
},
{
"date": "2026-05-26",
"count": 5
},
{
"date": "2026-05-27",
"count": 8
},
{
"date": "2026-05-28",
"count": 4
},
{
"date": "2026-05-29",
"count": 5
},
{
"date": "2026-05-30",
"count": 4
},
{
"date": "2026-05-31",
"count": 5
},
{
"date": "2026-06-01",
"count": 2
},
{
"date": "2026-06-02",
"count": 4
},
{
"date": "2026-06-03",
"count": 10
},
{
"date": "2026-06-04",
"count": 8
},
{
"date": "2026-06-05",
"count": 6
},
{
"date": "2026-06-06",
"count": 3
},
{
"date": "2026-06-07",
"count": 3
},
{
"date": "2026-06-08",
"count": 8
},
{
"date": "2026-06-09",
"count": 5
},
{
"date": "2026-06-10",
"count": 4
},
{
"date": "2026-06-11",
"count": 4
},
{
"date": "2026-06-12",
"count": 2
},
{
"date": "2026-06-13",
"count": 4
},
{
"date": "2026-06-14",
"count": 3
},
{
"date": "2026-06-15",
"count": 9
},
{
"date": "2026-06-16",
"count": 8
},
{
"date": "2026-06-17",
"count": 6
},
{
"date": "2026-06-18",
"count": 13
},
{
"date": "2026-06-19",
"count": 6
},
{
"date": "2026-06-21",
"count": 3
},
{
"date": "2026-06-22",
"count": 3
},
{
"date": "2026-06-23",
"count": 6
},
{
"date": "2026-06-24",
"count": 9
},
{
"date": "2026-06-25",
"count": 5
},
{
"date": "2026-06-26",
"count": 5
},
{
"date": "2026-06-27",
"count": 4
},
{
"date": "2026-06-28",
"count": 2
},
{
"date": "2026-06-29",
"count": 4
},
{
"date": "2026-06-30",
"count": 3
},
{
"date": "2026-07-01",
"count": 2
},
{
"date": "2026-07-02",
"count": 9
},
{
"date": "2026-07-03",
"count": 1
},
{
"date": "2026-07-04",
"count": 3
},
{
"date": "2026-07-05",
"count": 10
},
{
"date": "2026-07-06",
"count": 9
},
{
"date": "2026-07-07",
"count": 3
},
{
"date": "2026-07-08",
"count": 12
},
{
"date": "2026-07-09",
"count": 7
},
{
"date": "2026-07-10",
"count": 8
},
{
"date": "2026-07-11",
"count": 2
},
{
"date": "2026-07-12",
"count": 4
},
{
"date": "2026-07-13",
"count": 2
},
{
"date": "2026-07-14",
"count": 12
},
{
"date": "2026-07-15",
"count": 12
},
{
"date": "2026-07-16",
"count": 5
},
{
"date": "2026-07-17",
"count": 9
},
{
"date": "2026-07-18",
"count": 2
},
{
"date": "2026-07-19",
"count": 3
},
{
"date": "2026-07-20",
"count": 4
},
{
"date": "2026-07-21",
"count": 7
}
],
"complete": false,
"collected": 1000,
"total_stars": 2024
},
"open_issues_and_prs": 43
},
"ai_readiness": {
"has_nix": false,
"example_dirs": [],
"has_llms_txt": false,
"has_dockerfile": false,
"has_mcp_signal": true,
"bootstrap_files": [],
"api_schema_files": [],
"has_devcontainer": false,
"typecheck_configs": [
"tsconfig.json"
],
"toolchain_manifests": [],
"largest_source_bytes": 295107,
"source_files_sampled": 142,
"oversized_source_files": 10,
"agent_instruction_files": [
"CLAUDE.md"
],
"agent_instruction_max_bytes": 1324
},
"dependencies": {
"manifests": [
"package.json"
],
"advisories": {
"error": null,
"scope": "repository_graph",
"source": "osv",
"findings": [
{
"name": "ws",
"direct": true,
"version": "8.18.0",
"severity": "high",
"ecosystem": "npm",
"cvss_score": 7.5,
"advisory_ids": [
"GHSA-58qx-3vcg-4xpx",
"GHSA-96hv-2xvq-fx4p"
],
"fixed_version": "8.21.0",
"advisory_count": 2,
"oldest_advisory_days": 63
},
{
"name": "brace-expansion",
"direct": false,
"version": "1.1.15",
"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": 0
},
{
"name": "undici",
"direct": false,
"version": "7.18.2",
"severity": "high",
"ecosystem": "npm",
"cvss_score": 7.5,
"advisory_ids": [
"GHSA-2mjp-6q6p-2qxm",
"GHSA-35p6-xmwp-9g52",
"GHSA-4992-7rv2-5pvq",
"GHSA-f269-vfmq-vjvj",
"GHSA-g8m3-5g58-fq7m",
"GHSA-p88m-4jfj-68fv",
"GHSA-phc3-fgpg-7m6h",
"GHSA-pr7r-676h-xcf6",
"GHSA-v9p9-hfj2-hcw8",
"GHSA-vrm6-8vpv-qv8q"
],
"fixed_version": "8.5.0",
"advisory_count": 11,
"oldest_advisory_days": 129
},
{
"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": 0
},
{
"name": "esbuild",
"direct": false,
"version": "0.27.3",
"severity": "low",
"ecosystem": "npm",
"cvss_score": 2.5,
"advisory_ids": [
"GHSA-g7r4-m6w7-qqqr"
],
"fixed_version": "0.28.1",
"advisory_count": 1,
"oldest_advisory_days": 38
}
],
"collected": true,
"truncated": false,
"by_severity": {
"low": 2,
"high": 3
},
"advisory_count": 16,
"affected_count": 5,
"assessed_count": 690,
"assessed_package": null,
"unassessed_count": 0,
"direct_affected_count": 1
},
"ecosystems": [
"npm"
],
"dependencies": [
{
"name": "@cloudflare/puppeteer",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^1.0.4"
},
{
"name": "@modelcontextprotocol/ext-apps",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^1.0.1"
},
{
"name": "@modelcontextprotocol/sdk",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^1.26.0"
},
{
"name": "agents",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^0.7.1"
},
{
"name": "axe-core",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^4.11.2"
},
{
"name": "jsdom",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^29.0.1"
},
{
"name": "pino",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^9.5.0"
},
{
"name": "pino-pretty",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^13.0.0"
},
{
"name": "uuid",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^11.0.3"
},
{
"name": "ws",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^8.19.0"
},
{
"name": "zod",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^3.25.76"
}
],
"all_dependencies": {
"error": null,
"source": "github-sbom",
"packages": [
{
"name": "@cloudflare/puppeteer",
"direct": true,
"version": "1.0.4",
"ecosystem": "npm"
},
{
"name": "@modelcontextprotocol/ext-apps",
"direct": true,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "@modelcontextprotocol/sdk",
"direct": true,
"version": "1.26.0",
"ecosystem": "npm"
},
{
"name": "agents",
"direct": true,
"version": "0.7.1",
"ecosystem": "npm"
},
{
"name": "axe-core",
"direct": true,
"version": "4.11.2",
"ecosystem": "npm"
},
{
"name": "jsdom",
"direct": true,
"version": "29.0.1",
"ecosystem": "npm"
},
{
"name": "pino",
"direct": true,
"version": "9.13.1",
"ecosystem": "npm"
},
{
"name": "pino-pretty",
"direct": true,
"version": "13.1.1",
"ecosystem": "npm"
},
{
"name": "uuid",
"direct": true,
"version": "11.1.1",
"ecosystem": "npm"
},
{
"name": "ws",
"direct": true,
"version": "8.18.0",
"ecosystem": "npm"
},
{
"name": "ws",
"direct": true,
"version": "8.21.0",
"ecosystem": "npm"
},
{
"name": "zod",
"direct": true,
"version": "3.25.76",
"ecosystem": "npm"
},
{
"name": "@ai-sdk/gateway",
"direct": false,
"version": "3.0.60",
"ecosystem": "npm"
},
{
"name": "@ai-sdk/provider",
"direct": false,
"version": "3.0.8",
"ecosystem": "npm"
},
{
"name": "@ai-sdk/provider-utils",
"direct": false,
"version": "4.0.16",
"ecosystem": "npm"
},
{
"name": "@apidevtools/json-schema-ref-parser",
"direct": false,
"version": "11.9.3",
"ecosystem": "npm"
},
{
"name": "@asamuzakjp/css-color",
"direct": false,
"version": "5.1.5",
"ecosystem": "npm"
},
{
"name": "@asamuzakjp/dom-selector",
"direct": false,
"version": "7.0.6",
"ecosystem": "npm"
},
{
"name": "@asamuzakjp/nwsapi",
"direct": false,
"version": "2.3.9",
"ecosystem": "npm"
},
{
"name": "@babel/code-frame",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/compat-data",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/core",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/generator",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/helper-compilation-targets",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/helper-globals",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/helper-module-imports",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/helper-module-transforms",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/helper-plugin-utils",
"direct": false,
"version": "7.27.1",
"ecosystem": "npm"
},
{
"name": "@babel/helper-string-parser",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/helper-validator-identifier",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/helper-validator-option",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/helpers",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/parser",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-syntax-async-generators",
"direct": false,
"version": "7.8.4",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-syntax-bigint",
"direct": false,
"version": "7.8.3",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-syntax-class-properties",
"direct": false,
"version": "7.12.13",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-syntax-class-static-block",
"direct": false,
"version": "7.14.5",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-syntax-import-attributes",
"direct": false,
"version": "7.27.1",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-syntax-import-meta",
"direct": false,
"version": "7.10.4",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-syntax-json-strings",
"direct": false,
"version": "7.8.3",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-syntax-jsx",
"direct": false,
"version": "7.27.1",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-syntax-logical-assignment-operators",
"direct": false,
"version": "7.10.4",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-syntax-nullish-coalescing-operator",
"direct": false,
"version": "7.8.3",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-syntax-numeric-separator",
"direct": false,
"version": "7.10.4",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-syntax-object-rest-spread",
"direct": false,
"version": "7.8.3",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-syntax-optional-catch-binding",
"direct": false,
"version": "7.8.3",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-syntax-optional-chaining",
"direct": false,
"version": "7.8.3",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-syntax-private-property-in-object",
"direct": false,
"version": "7.14.5",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-syntax-top-level-await",
"direct": false,
"version": "7.14.5",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-syntax-typescript",
"direct": false,
"version": "7.27.1",
"ecosystem": "npm"
},
{
"name": "@babel/runtime",
"direct": false,
"version": "7.28.6",
"ecosystem": "npm"
},
{
"name": "@babel/runtime-corejs3",
"direct": false,
"version": "7.29.0",
"ecosystem": "npm"
},
{
"name": "@babel/template",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/traverse",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/types",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@bcoe/v8-coverage",
"direct": false,
"version": "0.2.3",
"ecosystem": "npm"
},
{
"name": "@biomejs/biome",
"direct": false,
"version": "2.2.5",
"ecosystem": "npm"
},
{
"name": "@biomejs/cli-darwin-arm64",
"direct": false,
"version": "2.2.5",
"ecosystem": "npm"
},
{
"name": "@biomejs/cli-darwin-x64",
"direct": false,
"version": "2.2.5",
"ecosystem": "npm"
},
{
"name": "@biomejs/cli-linux-arm64",
"direct": false,
"version": "2.2.5",
"ecosystem": "npm"
},
{
"name": "@biomejs/cli-linux-arm64-musl",
"direct": false,
"version": "2.2.5",
"ecosystem": "npm"
},
{
"name": "@biomejs/cli-linux-x64",
"direct": false,
"version": "2.2.5",
"ecosystem": "npm"
},
{
"name": "@biomejs/cli-linux-x64-musl",
"direct": false,
"version": "2.2.5",
"ecosystem": "npm"
},
{
"name": "@biomejs/cli-win32-arm64",
"direct": false,
"version": "2.2.5",
"ecosystem": "npm"
},
{
"name": "@biomejs/cli-win32-x64",
"direct": false,
"version": "2.2.5",
"ecosystem": "npm"
},
{
"name": "@bramus/specificity",
"direct": false,
"version": "2.4.2",
"ecosystem": "npm"
},
{
"name": "@cfworker/json-schema",
"direct": false,
"version": "4.1.1",
"ecosystem": "npm"
},
{
"name": "@cloudflare/kv-asset-handler",
"direct": false,
"version": "0.4.2",
"ecosystem": "npm"
},
{
"name": "@cloudflare/unenv-preset",
"direct": false,
"version": "2.15.0",
"ecosystem": "npm"
},
{
"name": "@cloudflare/workerd-darwin-64",
"direct": false,
"version": "1.20260310.1",
"ecosystem": "npm"
},
{
"name": "@cloudflare/workerd-darwin-arm64",
"direct": false,
"version": "1.20260310.1",
"ecosystem": "npm"
},
{
"name": "@cloudflare/workerd-linux-64",
"direct": false,
"version": "1.20260310.1",
"ecosystem": "npm"
},
{
"name": "@cloudflare/workerd-linux-arm64",
"direct": false,
"version": "1.20260310.1",
"ecosystem": "npm"
},
{
"name": "@cloudflare/workerd-windows-64",
"direct": false,
"version": "1.20260310.1",
"ecosystem": "npm"
},
{
"name": "@cloudflare/workers-types",
"direct": false,
"version": "4.20260702.1",
"ecosystem": "npm"
},
{
"name": "@cspotcode/source-map-support",
"direct": false,
"version": "0.8.1",
"ecosystem": "npm"
},
{
"name": "@csstools/color-helpers",
"direct": false,
"version": "6.0.2",
"ecosystem": "npm"
},
{
"name": "@csstools/css-calc",
"direct": false,
"version": "3.1.1",
"ecosystem": "npm"
},
{
"name": "@csstools/css-color-parser",
"direct": false,
"version": "4.0.2",
"ecosystem": "npm"
},
{
"name": "@csstools/css-parser-algorithms",
"direct": false,
"version": "4.0.0",
"ecosystem": "npm"
},
{
"name": "@csstools/css-syntax-patches-for-csstree",
"direct": false,
"version": "1.1.2",
"ecosystem": "npm"
},
{
"name": "@csstools/css-tokenizer",
"direct": false,
"version": "4.0.0",
"ecosystem": "npm"
},
{
"name": "@emnapi/runtime",
"direct": false,
"version": "1.11.2",
"ecosystem": "npm"
},
{
"name": "@esbuild/aix-ppc64",
"direct": false,
"version": "0.25.4",
"ecosystem": "npm"
},
{
"name": "@esbuild/aix-ppc64",
"direct": false,
"version": "0.27.3",
"ecosystem": "npm"
},
{
"name": "@esbuild/android-arm",
"direct": false,
"version": "0.25.4",
"ecosystem": "npm"
},
{
"name": "@esbuild/android-arm",
"direct": false,
"version": "0.27.3",
"ecosystem": "npm"
},
{
"name": "@esbuild/android-arm64",
"direct": false,
"version": "0.25.4",
"ecosystem": "npm"
},
{
"name": "@esbuild/android-arm64",
"direct": false,
"version": "0.27.3",
"ecosystem": "npm"
},
{
"name": "@esbuild/android-x64",
"direct": false,
"version": "0.25.4",
"ecosystem": "npm"
},
{
"name": "@esbuild/android-x64",
"direct": false,
"version": "0.27.3",
"ecosystem": "npm"
},
{
"name": "@esbuild/darwin-arm64",
"direct": false,
"version": "0.25.4",
"ecosystem": "npm"
},
{
"name": "@esbuild/darwin-arm64",
"direct": false,
"version": "0.27.3",
"ecosystem": "npm"
},
{
"name": "@esbuild/darwin-x64",
"direct": false,
"version": "0.25.4",
"ecosystem": "npm"
},
{
"name": "@esbuild/darwin-x64",
"direct": false,
"version": "0.27.3",
"ecosystem": "npm"
},
{
"name": "@esbuild/freebsd-arm64",
"direct": false,
"version": "0.25.4",
"ecosystem": "npm"
},
{
"name": "@esbuild/freebsd-arm64",
"direct": false,
"version": "0.27.3",
"ecosystem": "npm"
},
{
"name": "@esbuild/freebsd-x64",
"direct": false,
"version": "0.25.4",
"ecosystem": "npm"
},
{
"name": "@esbuild/freebsd-x64",
"direct": false,
"version": "0.27.3",
"ecosystem": "npm"
},
{
"name": "@esbuild/linux-arm",
"direct": false,
"version": "0.25.4",
"ecosystem": "npm"
},
{
"name": "@esbuild/linux-arm",
"direct": false,
"version": "0.27.3",
"ecosystem": "npm"
},
{
"name": "@esbuild/linux-arm64",
"direct": false,
"version": "0.25.4",
"ecosystem": "npm"
},
{
"name": "@esbuild/linux-arm64",
"direct": false,
"version": "0.27.3",
"ecosystem": "npm"
},
{
"name": "@esbuild/linux-ia32",
"direct": false,
"version": "0.25.4",
"ecosystem": "npm"
},
{
"name": "@esbuild/linux-ia32",
"direct": false,
"version": "0.27.3",
"ecosystem": "npm"
},
{
"name": "@esbuild/linux-loong64",
"direct": false,
"version": "0.25.4",
"ecosystem": "npm"
},
{
"name": "@esbuild/linux-loong64",
"direct": false,
"version": "0.27.3",
"ecosystem": "npm"
},
{
"name": "@esbuild/linux-mips64el",
"direct": false,
"version": "0.25.4",
"ecosystem": "npm"
},
{
"name": "@esbuild/linux-mips64el",
"direct": false,
"version": "0.27.3",
"ecosystem": "npm"
},
{
"name": "@esbuild/linux-ppc64",
"direct": false,
"version": "0.25.4",
"ecosystem": "npm"
},
{
"name": "@esbuild/linux-ppc64",
"direct": false,
"version": "0.27.3",
"ecosystem": "npm"
},
{
"name": "@esbuild/linux-riscv64",
"direct": false,
"version": "0.25.4",
"ecosystem": "npm"
},
{
"name": "@esbuild/linux-riscv64",
"direct": false,
"version": "0.27.3",
"ecosystem": "npm"
},
{
"name": "@esbuild/linux-s390x",
"direct": false,
"version": "0.25.4",
"ecosystem": "npm"
},
{
"name": "@esbuild/linux-s390x",
"direct": false,
"version": "0.27.3",
"ecosystem": "npm"
},
{
"name": "@esbuild/linux-x64",
"direct": false,
"version": "0.25.4",
"ecosystem": "npm"
},
{
"name": "@esbuild/linux-x64",
"direct": false,
"version": "0.27.3",
"ecosystem": "npm"
},
{
"name": "@esbuild/netbsd-arm64",
"direct": false,
"version": "0.25.4",
"ecosystem": "npm"
},
{
"name": "@esbuild/netbsd-arm64",
"direct": false,
"version": "0.27.3",
"ecosystem": "npm"
},
{
"name": "@esbuild/netbsd-x64",
"direct": false,
"version": "0.25.4",
"ecosystem": "npm"
},
{
"name": "@esbuild/netbsd-x64",
"direct": false,
"version": "0.27.3",
"ecosystem": "npm"
},
{
"name": "@esbuild/openbsd-arm64",
"direct": false,
"version": "0.25.4",
"ecosystem": "npm"
},
{
"name": "@esbuild/openbsd-arm64",
"direct": false,
"version": "0.27.3",
"ecosystem": "npm"
},
{
"name": "@esbuild/openbsd-x64",
"direct": false,
"version": "0.25.4",
"ecosystem": "npm"
},
{
"name": "@esbuild/openbsd-x64",
"direct": false,
"version": "0.27.3",
"ecosystem": "npm"
},
{
"name": "@esbuild/openharmony-arm64",
"direct": false,
"version": "0.27.3",
"ecosystem": "npm"
},
{
"name": "@esbuild/sunos-x64",
"direct": false,
"version": "0.25.4",
"ecosystem": "npm"
},
{
"name": "@esbuild/sunos-x64",
"direct": false,
"version": "0.27.3",
"ecosystem": "npm"
},
{
"name": "@esbuild/win32-arm64",
"direct": false,
"version": "0.25.4",
"ecosystem": "npm"
},
{
"name": "@esbuild/win32-arm64",
"direct": false,
"version": "0.27.3",
"ecosystem": "npm"
},
{
"name": "@esbuild/win32-ia32",
"direct": false,
"version": "0.25.4",
"ecosystem": "npm"
},
{
"name": "@esbuild/win32-ia32",
"direct": false,
"version": "0.27.3",
"ecosystem": "npm"
},
{
"name": "@esbuild/win32-x64",
"direct": false,
"version": "0.25.4",
"ecosystem": "npm"
},
{
"name": "@esbuild/win32-x64",
"direct": false,
"version": "0.27.3",
"ecosystem": "npm"
},
{
"name": "@exodus/bytes",
"direct": false,
"version": "1.15.0",
"ecosystem": "npm"
},
{
"name": "@hono/node-server",
"direct": false,
"version": "1.19.14",
"ecosystem": "npm"
},
{
"name": "@img/colour",
"direct": false,
"version": "1.1.0",
"ecosystem": "npm"
},
{
"name": "@img/sharp-darwin-arm64",
"direct": false,
"version": "0.34.5",
"ecosystem": "npm"
},
{
"name": "@img/sharp-darwin-x64",
"direct": false,
"version": "0.34.5",
"ecosystem": "npm"
},
{
"name": "@img/sharp-libvips-darwin-arm64",
"direct": false,
"version": "1.2.4",
"ecosystem": "npm"
},
{
"name": "@img/sharp-libvips-darwin-x64",
"direct": false,
"version": "1.2.4",
"ecosystem": "npm"
},
{
"name": "@img/sharp-libvips-linux-arm",
"direct": false,
"version": "1.2.4",
"ecosystem": "npm"
},
{
"name": "@img/sharp-libvips-linux-arm64",
"direct": false,
"version": "1.2.4",
"ecosystem": "npm"
},
{
"name": "@img/sharp-libvips-linux-ppc64",
"direct": false,
"version": "1.2.4",
"ecosystem": "npm"
},
{
"name": "@img/sharp-libvips-linux-riscv64",
"direct": false,
"version": "1.2.4",
"ecosystem": "npm"
},
{
"name": "@img/sharp-libvips-linux-s390x",
"direct": false,
"version": "1.2.4",
"ecosystem": "npm"
},
{
"name": "@img/sharp-libvips-linux-x64",
"direct": false,
"version": "1.2.4",
"ecosystem": "npm"
},
{
"name": "@img/sharp-libvips-linuxmusl-arm64",
"direct": false,
"version": "1.2.4",
"ecosystem": "npm"
},
{
"name": "@img/sharp-libvips-linuxmusl-x64",
"direct": false,
"version": "1.2.4",
"ecosystem": "npm"
},
{
"name": "@img/sharp-linux-arm",
"direct": false,
"version": "0.34.5",
"ecosystem": "npm"
},
{
"name": "@img/sharp-linux-arm64",
"direct": false,
"version": "0.34.5",
"ecosystem": "npm"
},
{
"name": "@img/sharp-linux-ppc64",
"direct": false,
"version": "0.34.5",
"ecosystem": "npm"
},
{
"name": "@img/sharp-linux-riscv64",
"direct": false,
"version": "0.34.5",
"ecosystem": "npm"
},
{
"name": "@img/sharp-linux-s390x",
"direct": false,
"version": "0.34.5",
"ecosystem": "npm"
},
{
"name": "@img/sharp-linux-x64",
"direct": false,
"version": "0.34.5",
"ecosystem": "npm"
},
{
"name": "@img/sharp-linuxmusl-arm64",
"direct": false,
"version": "0.34.5",
"ecosystem": "npm"
},
{
"name": "@img/sharp-linuxmusl-x64",
"direct": false,
"version": "0.34.5",
"ecosystem": "npm"
},
{
"name": "@img/sharp-wasm32",
"direct": false,
"version": "0.34.5",
"ecosystem": "npm"
},
{
"name": "@img/sharp-win32-arm64",
"direct": false,
"version": "0.34.5",
"ecosystem": "npm"
},
{
"name": "@img/sharp-win32-ia32",
"direct": false,
"version": "0.34.5",
"ecosystem": "npm"
},
{
"name": "@img/sharp-win32-x64",
"direct": false,
"version": "0.34.5",
"ecosystem": "npm"
},
{
"name": "@istanbuljs/load-nyc-config",
"direct": false,
"version": "1.1.0",
"ecosystem": "npm"
},
{
"name": "@istanbuljs/schema",
"direct": false,
"version": "0.1.3",
"ecosystem": "npm"
},
{
"name": "@jest/console",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "@jest/core",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "@jest/environment",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "@jest/expect",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "@jest/expect-utils",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "@jest/fake-timers",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "@jest/globals",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "@jest/reporters",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "@jest/schemas",
"direct": false,
"version": "29.6.3",
"ecosystem": "npm"
},
{
"name": "@jest/source-map",
"direct": false,
"version": "29.6.3",
"ecosystem": "npm"
},
{
"name": "@jest/test-result",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "@jest/test-sequencer",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "@jest/transform",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "@jest/types",
"direct": false,
"version": "29.6.3",
"ecosystem": "npm"
},
{
"name": "@jridgewell/gen-mapping",
"direct": false,
"version": "0.3.13",
"ecosystem": "npm"
},
{
"name": "@jridgewell/remapping",
"direct": false,
"version": "2.3.5",
"ecosystem": "npm"
},
{
"name": "@jridgewell/resolve-uri",
"direct": false,
"version": "3.1.2",
"ecosystem": "npm"
},
{
"name": "@jridgewell/sourcemap-codec",
"direct": false,
"version": "1.5.5",
"ecosystem": "npm"
},
{
"name": "@jridgewell/trace-mapping",
"direct": false,
"version": "0.3.31",
"ecosystem": "npm"
},
{
"name": "@jridgewell/trace-mapping",
"direct": false,
"version": "0.3.9",
"ecosystem": "npm"
},
{
"name": "@jsdevtools/ono",
"direct": false,
"version": "7.1.3",
"ecosystem": "npm"
},
{
"name": "@opentelemetry/api",
"direct": false,
"version": "1.9.0",
"ecosystem": "npm"
},
{
"name": "@oven/bun-darwin-aarch64",
"direct": false,
"version": "1.3.6",
"ecosystem": "npm"
},
{
"name": "@oven/bun-darwin-x64",
"direct": false,
"version": "1.3.6",
"ecosystem": "npm"
},
{
"name": "@oven/bun-darwin-x64-baseline",
"direct": false,
"version": "1.3.6",
"ecosystem": "npm"
},
{
"name": "@oven/bun-linux-aarch64",
"direct": false,
"version": "1.3.6",
"ecosystem": "npm"
},
{
"name": "@oven/bun-linux-aarch64-musl",
"direct": false,
"version": "1.3.6",
"ecosystem": "npm"
},
{
"name": "@oven/bun-linux-x64",
"direct": false,
"version": "1.3.6",
"ecosystem": "npm"
},
{
"name": "@oven/bun-linux-x64-baseline",
"direct": false,
"version": "1.3.6",
"ecosystem": "npm"
},
{
"name": "@oven/bun-linux-x64-musl",
"direct": false,
"version": "1.3.6",
"ecosystem": "npm"
},
{
"name": "@oven/bun-linux-x64-musl-baseline",
"direct": false,
"version": "1.3.6",
"ecosystem": "npm"
},
{
"name": "@oven/bun-windows-x64",
"direct": false,
"version": "1.3.6",
"ecosystem": "npm"
},
{
"name": "@oven/bun-windows-x64-baseline",
"direct": false,
"version": "1.3.6",
"ecosystem": "npm"
},
{
"name": "@poppinss/colors",
"direct": false,
"version": "4.1.6",
"ecosystem": "npm"
},
{
"name": "@poppinss/dumper",
"direct": false,
"version": "0.6.5",
"ecosystem": "npm"
},
{
"name": "@poppinss/exception",
"direct": false,
"version": "1.2.3",
"ecosystem": "npm"
},
{
"name": "@puppeteer/browsers",
"direct": false,
"version": "2.2.4",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-android-arm-eabi",
"direct": false,
"version": "4.59.0",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-android-arm64",
"direct": false,
"version": "4.59.0",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-darwin-arm64",
"direct": false,
"version": "4.59.0",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-darwin-x64",
"direct": false,
"version": "4.59.0",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-freebsd-arm64",
"direct": false,
"version": "4.59.0",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-freebsd-x64",
"direct": false,
"version": "4.59.0",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-linux-arm-gnueabihf",
"direct": false,
"version": "4.59.0",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-linux-arm-musleabihf",
"direct": false,
"version": "4.59.0",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-linux-arm64-gnu",
"direct": false,
"version": "4.59.0",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-linux-arm64-musl",
"direct": false,
"version": "4.59.0",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-linux-loong64-gnu",
"direct": false,
"version": "4.59.0",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-linux-loong64-musl",
"direct": false,
"version": "4.59.0",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-linux-ppc64-gnu",
"direct": false,
"version": "4.59.0",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-linux-ppc64-musl",
"direct": false,
"version": "4.59.0",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-linux-riscv64-gnu",
"direct": false,
"version": "4.59.0",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-linux-riscv64-musl",
"direct": false,
"version": "4.59.0",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-linux-s390x-gnu",
"direct": false,
"version": "4.59.0",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-linux-x64-gnu",
"direct": false,
"version": "4.59.0",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-linux-x64-musl",
"direct": false,
"version": "4.59.0",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-openbsd-x64",
"direct": false,
"version": "4.59.0",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-openharmony-arm64",
"direct": false,
"version": "4.59.0",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-win32-arm64-msvc",
"direct": false,
"version": "4.59.0",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-win32-ia32-msvc",
"direct": false,
"version": "4.59.0",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-win32-x64-gnu",
"direct": false,
"version": "4.59.0",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-win32-x64-msvc",
"direct": false,
"version": "4.59.0",
"ecosystem": "npm"
},
{
"name": "@sinclair/typebox",
"direct": false,
"version": "0.27.8",
"ecosystem": "npm"
},
{
"name": "@sindresorhus/is",
"direct": false,
"version": "7.2.0",
"ecosystem": "npm"
},
{
"name": "@sinonjs/commons",
"direct": false,
"version": "3.0.1",
"ecosystem": "npm"
},
{
"name": "@sinonjs/fake-timers",
"direct": false,
"version": "10.3.0",
"ecosystem": "npm"
},
{
"name": "@speed-highlight/core",
"direct": false,
"version": "1.2.17",
"ecosystem": "npm"
},
{
"name": "@standard-schema/spec",
"direct": false,
"version": "1.1.0",
"ecosystem": "npm"
},
{
"name": "@tootallnate/quickjs-emscripten",
"direct": false,
"version": "0.23.0",
"ecosystem": "npm"
},
{
"name": "@types/babel__core",
"direct": false,
"version": "7.20.5",
"ecosystem": "npm"
},
{
"name": "@types/babel__generator",
"direct": false,
"version": "7.27.0",
"ecosystem": "npm"
},
{
"name": "@types/babel__template",
"direct": false,
"version": "7.4.4",
"ecosystem": "npm"
},
{
"name": "@types/babel__traverse",
"direct": false,
"version": "7.28.0",
"ecosystem": "npm"
},
{
"name": "@types/estree",
"direct": false,
"version": "1.0.8",
"ecosystem": "npm"
},
{
"name": "@types/graceful-fs",
"direct": false,
"version": "4.1.9",
"ecosystem": "npm"
},
{
"name": "@types/istanbul-lib-coverage",
"direct": false,
"version": "2.0.6",
"ecosystem": "npm"
},
{
"name": "@types/istanbul-lib-report",
"direct": false,
"version": "3.0.3",
"ecosystem": "npm"
},
{
"name": "@types/istanbul-reports",
"direct": false,
"version": "3.0.4",
"ecosystem": "npm"
},
{
"name": "@types/jest",
"direct": false,
"version": "29.5.14",
"ecosystem": "npm"
},
{
"name": "@types/jsdom",
"direct": false,
"version": "28.0.1",
"ecosystem": "npm"
},
{
"name": "@types/json-schema",
"direct": false,
"version": "7.0.15",
"ecosystem": "npm"
},
{
"name": "@types/lodash",
"direct": false,
"version": "4.17.20",
"ecosystem": "npm"
},
{
"name": "@types/node",
"direct": false,
"version": "22.18.8",
"ecosystem": "npm"
},
{
"name": "@types/stack-utils",
"direct": false,
"version": "2.0.3",
"ecosystem": "npm"
},
{
"name": "@types/tough-cookie",
"direct": false,
"version": "4.0.5",
"ecosystem": "npm"
},
{
"name": "@types/uuid",
"direct": false,
"version": "10.0.0",
"ecosystem": "npm"
},
{
"name": "@types/ws",
"direct": false,
"version": "8.18.1",
"ecosystem": "npm"
},
{
"name": "@types/yargs",
"direct": false,
"version": "17.0.33",
"ecosystem": "npm"
},
{
"name": "@types/yargs-parser",
"direct": false,
"version": "21.0.3",
"ecosystem": "npm"
},
{
"name": "@types/yauzl",
"direct": false,
"version": "2.10.3",
"ecosystem": "npm"
},
{
"name": "@vercel/oidc",
"direct": false,
"version": "3.1.0",
"ecosystem": "npm"
},
{
"name": "accepts",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "agent-base",
"direct": false,
"version": "7.1.4",
"ecosystem": "npm"
},
{
"name": "ai",
"direct": false,
"version": "6.0.106",
"ecosystem": "npm"
},
{
"name": "ajv",
"direct": false,
"version": "8.18.0",
"ecosystem": "npm"
},
{
"name": "ajv-formats",
"direct": false,
"version": "3.0.1",
"ecosystem": "npm"
},
{
"name": "ansi-escapes",
"direct": false,
"version": "4.3.2",
"ecosystem": "npm"
},
{
"name": "ansi-regex",
"direct": false,
"version": "5.0.1",
"ecosystem": "npm"
},
{
"name": "ansi-regex",
"direct": false,
"version": "6.2.2",
"ecosystem": "npm"
},
{
"name": "ansi-styles",
"direct": false,
"version": "4.3.0",
"ecosystem": "npm"
},
{
"name": "ansi-styles",
"direct": false,
"version": "5.2.0",
"ecosystem": "npm"
},
{
"name": "ansi-styles",
"direct": false,
"version": "6.2.3",
"ecosystem": "npm"
},
{
"name": "anymatch",
"direct": false,
"version": "3.1.3",
"ecosystem": "npm"
},
{
"name": "argparse",
"direct": false,
"version": "1.0.10",
"ecosystem": "npm"
},
{
"name": "argparse",
"direct": false,
"version": "2.0.1",
"ecosystem": "npm"
},
{
"name": "ast-types",
"direct": false,
"version": "0.13.4",
"ecosystem": "npm"
},
{
"name": "atomic-sleep",
"direct": false,
"version": "1.0.0",
"ecosystem": "npm"
},
{
"name": "b4a",
"direct": false,
"version": "1.7.3",
"ecosystem": "npm"
},
{
"name": "babel-jest",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "babel-plugin-istanbul",
"direct": false,
"version": "6.1.1",
"ecosystem": "npm"
},
{
"name": "babel-plugin-jest-hoist",
"direct": false,
"version": "29.6.3",
"ecosystem": "npm"
},
{
"name": "babel-preset-current-node-syntax",
"direct": false,
"version": "1.2.0",
"ecosystem": "npm"
},
{
"name": "babel-preset-jest",
"direct": false,
"version": "29.6.3",
"ecosystem": "npm"
},
{
"name": "balanced-match",
"direct": false,
"version": "1.0.2",
"ecosystem": "npm"
},
{
"name": "bare-events",
"direct": false,
"version": "2.7.0",
"ecosystem": "npm"
},
{
"name": "bare-fs",
"direct": false,
"version": "4.4.5",
"ecosystem": "npm"
},
{
"name": "bare-os",
"direct": false,
"version": "3.6.2",
"ecosystem": "npm"
},
{
"name": "bare-path",
"direct": false,
"version": "3.0.0",
"ecosystem": "npm"
},
{
"name": "bare-stream",
"direct": false,
"version": "2.7.0",
"ecosystem": "npm"
},
{
"name": "bare-url",
"direct": false,
"version": "2.2.2",
"ecosystem": "npm"
},
{
"name": "base64-js",
"direct": false,
"version": "1.5.1",
"ecosystem": "npm"
},
{
"name": "baseline-browser-mapping",
"direct": false,
"version": "2.10.41",
"ecosystem": "npm"
},
{
"name": "basic-ftp",
"direct": false,
"version": "5.3.1",
"ecosystem": "npm"
},
{
"name": "bidi-js",
"direct": false,
"version": "1.0.3",
"ecosystem": "npm"
},
{
"name": "blake3-wasm",
"direct": false,
"version": "2.1.5",
"ecosystem": "npm"
},
{
"name": "body-parser",
"direct": false,
"version": "2.2.2",
"ecosystem": "npm"
},
{
"name": "brace-expansion",
"direct": false,
"version": "1.1.15",
"ecosystem": "npm"
},
{
"name": "braces",
"direct": false,
"version": "3.0.3",
"ecosystem": "npm"
},
{
"name": "browserslist",
"direct": false,
"version": "4.28.4",
"ecosystem": "npm"
},
{
"name": "bs-logger",
"direct": false,
"version": "0.2.6",
"ecosystem": "npm"
},
{
"name": "bser",
"direct": false,
"version": "2.1.1",
"ecosystem": "npm"
},
{
"name": "buffer",
"direct": false,
"version": "5.7.1",
"ecosystem": "npm"
},
{
"name": "buffer-crc32",
"direct": false,
"version": "0.2.13",
"ecosystem": "npm"
},
{
"name": "buffer-from",
"direct": false,
"version": "1.1.2",
"ecosystem": "npm"
},
{
"name": "bytes",
"direct": false,
"version": "3.1.2",
"ecosystem": "npm"
},
{
"name": "call-bind-apply-helpers",
"direct": false,
"version": "1.0.2",
"ecosystem": "npm"
},
{
"name": "call-bound",
"direct": false,
"version": "1.0.4",
"ecosystem": "npm"
},
{
"name": "callsites",
"direct": false,
"version": "3.1.0",
"ecosystem": "npm"
},
{
"name": "camelcase",
"direct": false,
"version": "5.3.1",
"ecosystem": "npm"
},
{
"name": "camelcase",
"direct": false,
"version": "6.3.0",
"ecosystem": "npm"
},
{
"name": "caniuse-lite",
"direct": false,
"version": "1.0.30001800",
"ecosystem": "npm"
},
{
"name": "chalk",
"direct": false,
"version": "4.1.2",
"ecosystem": "npm"
},
{
"name": "char-regex",
"direct": false,
"version": "1.0.2",
"ecosystem": "npm"
},
{
"name": "ci-info",
"direct": false,
"version": "3.9.0",
"ecosystem": "npm"
},
{
"name": "cjs-module-lexer",
"direct": false,
"version": "1.4.3",
"ecosystem": "npm"
},
{
"name": "cliui",
"direct": false,
"version": "8.0.1",
"ecosystem": "npm"
},
{
"name": "cliui",
"direct": false,
"version": "9.0.1",
"ecosystem": "npm"
},
{
"name": "co",
"direct": false,
"version": "4.6.0",
"ecosystem": "npm"
},
{
"name": "collect-v8-coverage",
"direct": false,
"version": "1.0.2",
"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": "colorette",
"direct": false,
"version": "2.0.20",
"ecosystem": "npm"
},
{
"name": "concat-map",
"direct": false,
"version": "0.0.1",
"ecosystem": "npm"
},
{
"name": "content-disposition",
"direct": false,
"version": "1.0.1",
"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-signature",
"direct": false,
"version": "1.2.2",
"ecosystem": "npm"
},
{
"name": "core-js-pure",
"direct": false,
"version": "3.48.0",
"ecosystem": "npm"
},
{
"name": "cors",
"direct": false,
"version": "2.8.5",
"ecosystem": "npm"
},
{
"name": "create-jest",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "cron-schedule",
"direct": false,
"version": "6.0.0",
"ecosystem": "npm"
},
{
"name": "cross-env",
"direct": false,
"version": "7.0.3",
"ecosystem": "npm"
},
{
"name": "cross-spawn",
"direct": false,
"version": "7.0.6",
"ecosystem": "npm"
},
{
"name": "css-tree",
"direct": false,
"version": "3.2.1",
"ecosystem": "npm"
},
{
"name": "data-uri-to-buffer",
"direct": false,
"version": "6.0.2",
"ecosystem": "npm"
},
{
"name": "data-urls",
"direct": false,
"version": "7.0.0",
"ecosystem": "npm"
},
{
"name": "dateformat",
"direct": false,
"version": "4.6.3",
"ecosystem": "npm"
},
{
"name": "debug",
"direct": false,
"version": "4.4.3",
"ecosystem": "npm"
},
{
"name": "decimal.js",
"direct": false,
"version": "10.6.0",
"ecosystem": "npm"
},
{
"name": "dedent",
"direct": false,
"version": "1.7.0",
"ecosystem": "npm"
},
{
"name": "deepmerge",
"direct": false,
"version": "4.3.1",
"ecosystem": "npm"
},
{
"name": "degenerator",
"direct": false,
"version": "5.0.1",
"ecosystem": "npm"
},
{
"name": "depd",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "detect-libc",
"direct": false,
"version": "2.1.2",
"ecosystem": "npm"
},
{
"name": "detect-newline",
"direct": false,
"version": "3.1.0",
"ecosystem": "npm"
},
{
"name": "devtools-protocol",
"direct": false,
"version": "0.0.1299070",
"ecosystem": "npm"
},
{
"name": "diff-sequences",
"direct": false,
"version": "29.6.3",
"ecosystem": "npm"
},
{
"name": "dunder-proto",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "ee-first",
"direct": false,
"version": "1.1.1",
"ecosystem": "npm"
},
{
"name": "electron-to-chromium",
"direct": false,
"version": "1.5.385",
"ecosystem": "npm"
},
{
"name": "emittery",
"direct": false,
"version": "0.13.1",
"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": "end-of-stream",
"direct": false,
"version": "1.4.5",
"ecosystem": "npm"
},
{
"name": "entities",
"direct": false,
"version": "6.0.1",
"ecosystem": "npm"
},
{
"name": "error-ex",
"direct": false,
"version": "1.3.4",
"ecosystem": "npm"
},
{
"name": "error-stack-parser-es",
"direct": false,
"version": "1.0.5",
"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-object-atoms",
"direct": false,
"version": "1.1.2",
"ecosystem": "npm"
},
{
"name": "esbuild",
"direct": false,
"version": "0.25.4",
"ecosystem": "npm"
},
{
"name": "esbuild",
"direct": false,
"version": "0.27.3",
"ecosystem": "npm"
},
{
"name": "escalade",
"direct": false,
"version": "3.2.0",
"ecosystem": "npm"
},
{
"name": "escape-html",
"direct": false,
"version": "1.0.3",
"ecosystem": "npm"
},
{
"name": "escape-string-regexp",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "escodegen",
"direct": false,
"version": "2.1.0",
"ecosystem": "npm"
},
{
"name": "esprima",
"direct": false,
"version": "4.0.1",
"ecosystem": "npm"
},
{
"name": "estraverse",
"direct": false,
"version": "5.3.0",
"ecosystem": "npm"
},
{
"name": "esutils",
"direct": false,
"version": "2.0.3",
"ecosystem": "npm"
},
{
"name": "etag",
"direct": false,
"version": "1.8.1",
"ecosystem": "npm"
},
{
"name": "event-target-polyfill",
"direct": false,
"version": "0.0.4",
"ecosystem": "npm"
},
{
"name": "events-universal",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "eventsource",
"direct": false,
"version": "3.0.7",
"ecosystem": "npm"
},
{
"name": "eventsource-parser",
"direct": false,
"version": "3.0.6",
"ecosystem": "npm"
},
{
"name": "execa",
"direct": false,
"version": "5.1.1",
"ecosystem": "npm"
},
{
"name": "exit",
"direct": false,
"version": "0.1.2",
"ecosystem": "npm"
},
{
"name": "expect",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "express",
"direct": false,
"version": "5.2.1",
"ecosystem": "npm"
},
{
"name": "express-rate-limit",
"direct": false,
"version": "8.5.2",
"ecosystem": "npm"
},
{
"name": "extract-zip",
"direct": false,
"version": "2.0.1",
"ecosystem": "npm"
},
{
"name": "fast-copy",
"direct": false,
"version": "3.0.2",
"ecosystem": "npm"
},
{
"name": "fast-deep-equal",
"direct": false,
"version": "3.1.3",
"ecosystem": "npm"
},
{
"name": "fast-fifo",
"direct": false,
"version": "1.3.2",
"ecosystem": "npm"
},
{
"name": "fast-json-stable-stringify",
"direct": false,
"version": "2.1.0",
"ecosystem": "npm"
},
{
"name": "fast-safe-stringify",
"direct": false,
"version": "2.1.1",
"ecosystem": "npm"
},
{
"name": "fast-uri",
"direct": false,
"version": "3.1.3",
"ecosystem": "npm"
},
{
"name": "fb-watchman",
"direct": false,
"version": "2.0.2",
"ecosystem": "npm"
},
{
"name": "fd-slicer",
"direct": false,
"version": "1.1.0",
"ecosystem": "npm"
},
{
"name": "fdir",
"direct": false,
"version": "6.5.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": "forwarded",
"direct": false,
"version": "0.2.0",
"ecosystem": "npm"
},
{
"name": "fresh",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "fs.realpath",
"direct": false,
"version": "1.0.0",
"ecosystem": "npm"
},
{
"name": "fsevents",
"direct": false,
"version": "2.3.3",
"ecosystem": "npm"
},
{
"name": "function-bind",
"direct": false,
"version": "1.1.2",
"ecosystem": "npm"
},
{
"name": "gensync",
"direct": false,
"version": "1.0.0-beta.2",
"ecosystem": "npm"
},
{
"name": "get-caller-file",
"direct": false,
"version": "2.0.5",
"ecosystem": "npm"
},
{
"name": "get-east-asian-width",
"direct": false,
"version": "1.5.0",
"ecosystem": "npm"
},
{
"name": "get-intrinsic",
"direct": false,
"version": "1.3.0",
"ecosystem": "npm"
},
{
"name": "get-package-type",
"direct": false,
"version": "0.1.0",
"ecosystem": "npm"
},
{
"name": "get-proto",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "get-stream",
"direct": false,
"version": "5.2.0",
"ecosystem": "npm"
},
{
"name": "get-stream",
"direct": false,
"version": "6.0.1",
"ecosystem": "npm"
},
{
"name": "get-tsconfig",
"direct": false,
"version": "4.10.1",
"ecosystem": "npm"
},
{
"name": "get-uri",
"direct": false,
"version": "6.0.5",
"ecosystem": "npm"
},
{
"name": "glob",
"direct": false,
"version": "7.2.3",
"ecosystem": "npm"
},
{
"name": "gopd",
"direct": false,
"version": "1.2.0",
"ecosystem": "npm"
},
{
"name": "graceful-fs",
"direct": false,
"version": "4.2.11",
"ecosystem": "npm"
},
{
"name": "handlebars",
"direct": false,
"version": "4.7.9",
"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.2",
"ecosystem": "npm"
},
{
"name": "help-me",
"direct": false,
"version": "5.0.0",
"ecosystem": "npm"
},
{
"name": "hono",
"direct": false,
"version": "4.12.27",
"ecosystem": "npm"
},
{
"name": "html-encoding-sniffer",
"direct": false,
"version": "6.0.0",
"ecosystem": "npm"
},
{
"name": "html-escaper",
"direct": false,
"version": "2.0.2",
"ecosystem": "npm"
},
{
"name": "http-errors",
"direct": false,
"version": "2.0.1",
"ecosystem": "npm"
},
{
"name": "http-proxy-agent",
"direct": false,
"version": "7.0.2",
"ecosystem": "npm"
},
{
"name": "https-proxy-agent",
"direct": false,
"version": "7.0.6",
"ecosystem": "npm"
},
{
"name": "human-signals",
"direct": false,
"version": "2.1.0",
"ecosystem": "npm"
},
{
"name": "iconv-lite",
"direct": false,
"version": "0.7.2",
"ecosystem": "npm"
},
{
"name": "ieee754",
"direct": false,
"version": "1.2.1",
"ecosystem": "npm"
},
{
"name": "import-local",
"direct": false,
"version": "3.2.0",
"ecosystem": "npm"
},
{
"name": "imurmurhash",
"direct": false,
"version": "0.1.4",
"ecosystem": "npm"
},
{
"name": "inflight",
"direct": false,
"version": "1.0.6",
"ecosystem": "npm"
},
{
"name": "inherits",
"direct": false,
"version": "2.0.4",
"ecosystem": "npm"
},
{
"name": "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-core-module",
"direct": false,
"version": "2.16.1",
"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-generator-fn",
"direct": false,
"version": "2.1.0",
"ecosystem": "npm"
},
{
"name": "is-glob",
"direct": false,
"version": "4.0.3",
"ecosystem": "npm"
},
{
"name": "is-number",
"direct": false,
"version": "7.0.0",
"ecosystem": "npm"
},
{
"name": "is-potential-custom-element-name",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "is-promise",
"direct": false,
"version": "4.0.0",
"ecosystem": "npm"
},
{
"name": "is-stream",
"direct": false,
"version": "2.0.1",
"ecosystem": "npm"
},
{
"name": "isexe",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "istanbul-lib-coverage",
"direct": false,
"version": "3.2.2",
"ecosystem": "npm"
},
{
"name": "istanbul-lib-instrument",
"direct": false,
"version": "5.2.1",
"ecosystem": "npm"
},
{
"name": "istanbul-lib-instrument",
"direct": false,
"version": "6.0.3",
"ecosystem": "npm"
},
{
"name": "istanbul-lib-report",
"direct": false,
"version": "3.0.1",
"ecosystem": "npm"
},
{
"name": "istanbul-lib-source-maps",
"direct": false,
"version": "4.0.1",
"ecosystem": "npm"
},
{
"name": "istanbul-reports",
"direct": false,
"version": "3.2.0",
"ecosystem": "npm"
},
{
"name": "jest",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "jest-changed-files",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "jest-circus",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "jest-cli",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "jest-config",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "jest-diff",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "jest-docblock",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "jest-each",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "jest-environment-node",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "jest-get-type",
"direct": false,
"version": "29.6.3",
"ecosystem": "npm"
},
{
"name": "jest-haste-map",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "jest-leak-detector",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "jest-matcher-utils",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "jest-message-util",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "jest-mock",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "jest-pnp-resolver",
"direct": false,
"version": "1.2.3",
"ecosystem": "npm"
},
{
"name": "jest-regex-util",
"direct": false,
"version": "29.6.3",
"ecosystem": "npm"
},
{
"name": "jest-resolve",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "jest-resolve-dependencies",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "jest-runner",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "jest-runtime",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "jest-snapshot",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "jest-util",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "jest-validate",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "jest-watcher",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "jest-worker",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "jose",
"direct": false,
"version": "6.1.3",
"ecosystem": "npm"
},
{
"name": "joycon",
"direct": false,
"version": "3.1.1",
"ecosystem": "npm"
},
{
"name": "js-base64",
"direct": false,
"version": "3.7.8",
"ecosystem": "npm"
},
{
"name": "js-tokens",
"direct": false,
"version": "4.0.0",
"ecosystem": "npm"
},
{
"name": "js-yaml",
"direct": false,
"version": "3.15.0",
"ecosystem": "npm"
},
{
"name": "js-yaml",
"direct": false,
"version": "4.3.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",
"direct": false,
"version": "0.4.0",
"ecosystem": "npm"
},
{
"name": "json-schema-to-typescript",
"direct": false,
"version": "15.0.4",
"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": "kleur",
"direct": false,
"version": "3.0.3",
"ecosystem": "npm"
},
{
"name": "kleur",
"direct": false,
"version": "4.1.5",
"ecosystem": "npm"
},
{
"name": "leven",
"direct": false,
"version": "3.1.0",
"ecosystem": "npm"
},
{
"name": "lines-and-columns",
"direct": false,
"version": "1.2.4",
"ecosystem": "npm"
},
{
"name": "locate-path",
"direct": false,
"version": "5.0.0",
"ecosystem": "npm"
},
{
"name": "lodash",
"direct": false,
"version": "4.18.1",
"ecosystem": "npm"
},
{
"name": "lodash.memoize",
"direct": false,
"version": "4.1.2",
"ecosystem": "npm"
},
{
"name": "lru-cache",
"direct": false,
"version": "11.2.7",
"ecosystem": "npm"
},
{
"name": "lru-cache",
"direct": false,
"version": "5.1.1",
"ecosystem": "npm"
},
{
"name": "lru-cache",
"direct": false,
"version": "7.18.3",
"ecosystem": "npm"
},
{
"name": "make-dir",
"direct": false,
"version": "4.0.0",
"ecosystem": "npm"
},
{
"name": "make-error",
"direct": false,
"version": "1.3.6",
"ecosystem": "npm"
},
{
"name": "makeerror",
"direct": false,
"version": "1.0.12",
"ecosystem": "npm"
},
{
"name": "math-intrinsics",
"direct": false,
"version": "1.1.0",
"ecosystem": "npm"
},
{
"name": "mdn-data",
"direct": false,
"version": "2.27.1",
"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": "micromatch",
"direct": false,
"version": "4.0.8",
"ecosystem": "npm"
},
{
"name": "mime-db",
"direct": false,
"version": "1.52.0",
"ecosystem": "npm"
},
{
"name": "mime-db",
"direct": false,
"version": "1.54.0",
"ecosystem": "npm"
},
{
"name": "mime-types",
"direct": false,
"version": "2.1.35",
"ecosystem": "npm"
},
{
"name": "mime-types",
"direct": false,
"version": "3.0.2",
"ecosystem": "npm"
},
{
"name": "mimetext",
"direct": false,
"version": "3.0.28",
"ecosystem": "npm"
},
{
"name": "mimic-fn",
"direct": false,
"version": "2.1.0",
"ecosystem": "npm"
},
{
"name": "miniflare",
"direct": false,
"version": "4.20260310.0",
"ecosystem": "npm"
},
{
"name": "minimatch",
"direct": false,
"version": "3.1.5",
"ecosystem": "npm"
},
{
"name": "minimist",
"direct": false,
"version": "1.2.8",
"ecosystem": "npm"
},
{
"name": "ms",
"direct": false,
"version": "2.1.3",
"ecosystem": "npm"
},
{
"name": "nanoid",
"direct": false,
"version": "3.3.15",
"ecosystem": "npm"
},
{
"name": "nanoid",
"direct": false,
"version": "5.1.6",
"ecosystem": "npm"
},
{
"name": "natural-compare",
"direct": false,
"version": "1.4.0",
"ecosystem": "npm"
},
{
"name": "negotiator",
"direct": false,
"version": "1.0.0",
"ecosystem": "npm"
},
{
"name": "neo-async",
"direct": false,
"version": "2.6.2",
"ecosystem": "npm"
},
{
"name": "netmask",
"direct": false,
"version": "2.0.2",
"ecosystem": "npm"
},
{
"name": "node-int64",
"direct": false,
"version": "0.4.0",
"ecosystem": "npm"
},
{
"name": "node-releases",
"direct": false,
"version": "2.0.50",
"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": "object-assign",
"direct": false,
"version": "4.1.1",
"ecosystem": "npm"
},
{
"name": "object-inspect",
"direct": false,
"version": "1.13.4",
"ecosystem": "npm"
},
{
"name": "on-exit-leak-free",
"direct": false,
"version": "2.1.2",
"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": "p-limit",
"direct": false,
"version": "2.3.0",
"ecosystem": "npm"
},
{
"name": "p-limit",
"direct": false,
"version": "3.1.0",
"ecosystem": "npm"
},
{
"name": "p-locate",
"direct": false,
"version": "4.1.0",
"ecosystem": "npm"
},
{
"name": "p-try",
"direct": false,
"version": "2.2.0",
"ecosystem": "npm"
},
{
"name": "pac-proxy-agent",
"direct": false,
"version": "7.2.0",
"ecosystem": "npm"
},
{
"name": "pac-resolver",
"direct": false,
"version": "7.0.1",
"ecosystem": "npm"
},
{
"name": "parse-json",
"direct": false,
"version": "5.2.0",
"ecosystem": "npm"
},
{
"name": "parse5",
"direct": false,
"version": "7.3.0",
"ecosystem": "npm"
},
{
"name": "parse5",
"direct": false,
"version": "8.0.0",
"ecosystem": "npm"
},
{
"name": "parseurl",
"direct": false,
"version": "1.3.3",
"ecosystem": "npm"
},
{
"name": "partyserver",
"direct": false,
"version": "0.3.2",
"ecosystem": "npm"
},
{
"name": "partysocket",
"direct": false,
"version": "1.1.16",
"ecosystem": "npm"
},
{
"name": "path-exists",
"direct": false,
"version": "4.0.0",
"ecosystem": "npm"
},
{
"name": "path-is-absolute",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "path-key",
"direct": false,
"version": "3.1.1",
"ecosystem": "npm"
},
{
"name": "path-parse",
"direct": false,
"version": "1.0.7",
"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": "pathe",
"direct": false,
"version": "2.0.3",
"ecosystem": "npm"
},
{
"name": "pend",
"direct": false,
"version": "1.2.0",
"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.5",
"ecosystem": "npm"
},
{
"name": "pino-abstract-transport",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "pino-std-serializers",
"direct": false,
"version": "7.0.0",
"ecosystem": "npm"
},
{
"name": "pirates",
"direct": false,
"version": "4.0.7",
"ecosystem": "npm"
},
{
"name": "pkce-challenge",
"direct": false,
"version": "5.0.0",
"ecosystem": "npm"
},
{
"name": "pkg-dir",
"direct": false,
"version": "4.2.0",
"ecosystem": "npm"
},
{
"name": "postcss",
"direct": false,
"version": "8.5.16",
"ecosystem": "npm"
},
{
"name": "prettier",
"direct": false,
"version": "3.6.2",
"ecosystem": "npm"
},
{
"name": "pretty-format",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "process-warning",
"direct": false,
"version": "5.0.0",
"ecosystem": "npm"
},
{
"name": "progress",
"direct": false,
"version": "2.0.3",
"ecosystem": "npm"
},
{
"name": "prompts",
"direct": false,
"version": "2.4.2",
"ecosystem": "npm"
},
{
"name": "proxy-addr",
"direct": false,
"version": "2.0.7",
"ecosystem": "npm"
},
{
"name": "proxy-agent",
"direct": false,
"version": "6.5.0",
"ecosystem": "npm"
},
{
"name": "proxy-from-env",
"direct": false,
"version": "1.1.0",
"ecosystem": "npm"
},
{
"name": "pump",
"direct": false,
"version": "3.0.3",
"ecosystem": "npm"
},
{
"name": "punycode",
"direct": false,
"version": "2.3.1",
"ecosystem": "npm"
},
{
"name": "pure-rand",
"direct": false,
"version": "6.1.0",
"ecosystem": "npm"
},
{
"name": "qs",
"direct": false,
"version": "6.15.3",
"ecosystem": "npm"
},
{
"name": "quick-format-unescaped",
"direct": false,
"version": "4.0.4",
"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.0",
"ecosystem": "npm"
},
{
"name": "react-is",
"direct": false,
"version": "18.3.1",
"ecosystem": "npm"
},
{
"name": "real-require",
"direct": false,
"version": "0.2.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": "resolve",
"direct": false,
"version": "1.22.10",
"ecosystem": "npm"
},
{
"name": "resolve-cwd",
"direct": false,
"version": "3.0.0",
"ecosystem": "npm"
},
{
"name": "resolve-from",
"direct": false,
"version": "5.0.0",
"ecosystem": "npm"
},
{
"name": "resolve-pkg-maps",
"direct": false,
"version": "1.0.0",
"ecosystem": "npm"
},
{
"name": "resolve.exports",
"direct": false,
"version": "2.0.3",
"ecosystem": "npm"
},
{
"name": "rollup",
"direct": false,
"version": "4.59.0",
"ecosystem": "npm"
},
{
"name": "router",
"direct": false,
"version": "2.2.0",
"ecosystem": "npm"
},
{
"name": "safe-stable-stringify",
"direct": false,
"version": "2.5.0",
"ecosystem": "npm"
},
{
"name": "safer-buffer",
"direct": false,
"version": "2.1.2",
"ecosystem": "npm"
},
{
"name": "saxes",
"direct": false,
"version": "6.0.0",
"ecosystem": "npm"
},
{
"name": "secure-json-parse",
"direct": false,
"version": "4.1.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": "serve-static",
"direct": false,
"version": "2.2.1",
"ecosystem": "npm"
},
{
"name": "setprototypeof",
"direct": false,
"version": "1.2.0",
"ecosystem": "npm"
},
{
"name": "sharp",
"direct": false,
"version": "0.34.5",
"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.1",
"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": "signal-exit",
"direct": false,
"version": "3.0.7",
"ecosystem": "npm"
},
{
"name": "sisteransi",
"direct": false,
"version": "1.0.5",
"ecosystem": "npm"
},
{
"name": "slash",
"direct": false,
"version": "3.0.0",
"ecosystem": "npm"
},
{
"name": "slow-redact",
"direct": false,
"version": "0.3.1",
"ecosystem": "npm"
},
{
"name": "smart-buffer",
"direct": false,
"version": "4.2.0",
"ecosystem": "npm"
},
{
"name": "socks",
"direct": false,
"version": "2.8.7",
"ecosystem": "npm"
},
{
"name": "socks-proxy-agent",
"direct": false,
"version": "8.0.5",
"ecosystem": "npm"
},
{
"name": "sonic-boom",
"direct": false,
"version": "4.2.0",
"ecosystem": "npm"
},
{
"name": "source-map",
"direct": false,
"version": "0.6.1",
"ecosystem": "npm"
},
{
"name": "source-map-js",
"direct": false,
"version": "1.2.1",
"ecosystem": "npm"
},
{
"name": "source-map-support",
"direct": false,
"version": "0.5.13",
"ecosystem": "npm"
},
{
"name": "split2",
"direct": false,
"version": "4.2.0",
"ecosystem": "npm"
},
{
"name": "sprintf-js",
"direct": false,
"version": "1.0.3",
"ecosystem": "npm"
},
{
"name": "stack-utils",
"direct": false,
"version": "2.0.6",
"ecosystem": "npm"
},
{
"name": "statuses",
"direct": false,
"version": "2.0.2",
"ecosystem": "npm"
},
{
"name": "streamx",
"direct": false,
"version": "2.23.0",
"ecosystem": "npm"
},
{
"name": "string-length",
"direct": false,
"version": "4.0.2",
"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": "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": "4.0.0",
"ecosystem": "npm"
},
{
"name": "strip-final-newline",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "strip-json-comments",
"direct": false,
"version": "3.1.1",
"ecosystem": "npm"
},
{
"name": "strip-json-comments",
"direct": false,
"version": "5.0.3",
"ecosystem": "npm"
},
{
"name": "supports-color",
"direct": false,
"version": "10.2.2",
"ecosystem": "npm"
},
{
"name": "supports-color",
"direct": false,
"version": "7.2.0",
"ecosystem": "npm"
},
{
"name": "supports-color",
"direct": false,
"version": "8.1.1",
"ecosystem": "npm"
},
{
"name": "supports-preserve-symlinks-flag",
"direct": false,
"version": "1.0.0",
"ecosystem": "npm"
},
{
"name": "symbol-tree",
"direct": false,
"version": "3.2.4",
"ecosystem": "npm"
},
{
"name": "tar-fs",
"direct": false,
"version": "3.1.1",
"ecosystem": "npm"
},
{
"name": "tar-stream",
"direct": false,
"version": "3.1.7",
"ecosystem": "npm"
},
{
"name": "test-exclude",
"direct": false,
"version": "6.0.0",
"ecosystem": "npm"
},
{
"name": "text-decoder",
"direct": false,
"version": "1.2.3",
"ecosystem": "npm"
},
{
"name": "thread-stream",
"direct": false,
"version": "3.1.0",
"ecosystem": "npm"
},
{
"name": "through",
"direct": false,
"version": "2.3.8",
"ecosystem": "npm"
},
{
"name": "tinyglobby",
"direct": false,
"version": "0.2.15",
"ecosystem": "npm"
},
{
"name": "tldts",
"direct": false,
"version": "7.0.27",
"ecosystem": "npm"
},
{
"name": "tldts-core",
"direct": false,
"version": "7.0.27",
"ecosystem": "npm"
},
{
"name": "tmpl",
"direct": false,
"version": "1.0.5",
"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": "6.0.0",
"ecosystem": "npm"
},
{
"name": "ts-jest",
"direct": false,
"version": "29.4.4",
"ecosystem": "npm"
},
{
"name": "tslib",
"direct": false,
"version": "2.8.1",
"ecosystem": "npm"
},
{
"name": "tsx",
"direct": false,
"version": "4.20.6",
"ecosystem": "npm"
},
{
"name": "type-detect",
"direct": false,
"version": "4.0.8",
"ecosystem": "npm"
},
{
"name": "type-fest",
"direct": false,
"version": "0.21.3",
"ecosystem": "npm"
},
{
"name": "type-fest",
"direct": false,
"version": "4.41.0",
"ecosystem": "npm"
},
{
"name": "type-is",
"direct": false,
"version": "2.0.1",
"ecosystem": "npm"
},
{
"name": "typescript",
"direct": false,
"version": "5.9.3",
"ecosystem": "npm"
},
{
"name": "uglify-js",
"direct": false,
"version": "3.19.3",
"ecosystem": "npm"
},
{
"name": "unbzip2-stream",
"direct": false,
"version": "1.4.3",
"ecosystem": "npm"
},
{
"name": "undici",
"direct": false,
"version": "7.18.2",
"ecosystem": "npm"
},
{
"name": "undici",
"direct": false,
"version": "7.28.0",
"ecosystem": "npm"
},
{
"name": "undici-types",
"direct": false,
"version": "6.21.0",
"ecosystem": "npm"
},
{
"name": "undici-types",
"direct": false,
"version": "7.24.7",
"ecosystem": "npm"
},
{
"name": "unenv",
"direct": false,
"version": "2.0.0-rc.24",
"ecosystem": "npm"
},
{
"name": "unpipe",
"direct": false,
"version": "1.0.0",
"ecosystem": "npm"
},
{
"name": "update-browserslist-db",
"direct": false,
"version": "1.2.3",
"ecosystem": "npm"
},
{
"name": "v8-to-istanbul",
"direct": false,
"version": "9.3.0",
"ecosystem": "npm"
},
{
"name": "vary",
"direct": false,
"version": "1.1.2",
"ecosystem": "npm"
},
{
"name": "vite",
"direct": false,
"version": "6.4.3",
"ecosystem": "npm"
},
{
"name": "vite-plugin-singlefile",
"direct": false,
"version": "2.3.0",
"ecosystem": "npm"
},
{
"name": "w3c-xmlserializer",
"direct": false,
"version": "5.0.0",
"ecosystem": "npm"
},
{
"name": "walker",
"direct": false,
"version": "1.0.8",
"ecosystem": "npm"
},
{
"name": "webidl-conversions",
"direct": false,
"version": "8.0.1",
"ecosystem": "npm"
},
{
"name": "whatwg-mimetype",
"direct": false,
"version": "5.0.0",
"ecosystem": "npm"
},
{
"name": "whatwg-url",
"direct": false,
"version": "16.0.1",
"ecosystem": "npm"
},
{
"name": "which",
"direct": false,
"version": "2.0.2",
"ecosystem": "npm"
},
{
"name": "wordwrap",
"direct": false,
"version": "1.0.0",
"ecosystem": "npm"
},
{
"name": "workerd",
"direct": false,
"version": "1.20260310.1",
"ecosystem": "npm"
},
{
"name": "wrangler",
"direct": false,
"version": "4.72.0",
"ecosystem": "npm"
},
{
"name": "wrap-ansi",
"direct": false,
"version": "7.0.0",
"ecosystem": "npm"
},
{
"name": "wrap-ansi",
"direct": false,
"version": "9.0.2",
"ecosystem": "npm"
},
{
"name": "wrappy",
"direct": false,
"version": "1.0.2",
"ecosystem": "npm"
},
{
"name": "write-file-atomic",
"direct": false,
"version": "4.0.2",
"ecosystem": "npm"
},
{
"name": "xml-name-validator",
"direct": false,
"version": "5.0.0",
"ecosystem": "npm"
},
{
"name": "xmlchars",
"direct": false,
"version": "2.2.0",
"ecosystem": "npm"
},
{
"name": "y18n",
"direct": false,
"version": "5.0.8",
"ecosystem": "npm"
},
{
"name": "yallist",
"direct": false,
"version": "3.1.1",
"ecosystem": "npm"
},
{
"name": "yargs",
"direct": false,
"version": "17.7.2",
"ecosystem": "npm"
},
{
"name": "yargs",
"direct": false,
"version": "18.0.0",
"ecosystem": "npm"
},
{
"name": "yargs-parser",
"direct": false,
"version": "21.1.1",
"ecosystem": "npm"
},
{
"name": "yargs-parser",
"direct": false,
"version": "22.0.0",
"ecosystem": "npm"
},
{
"name": "yauzl",
"direct": false,
"version": "2.10.0",
"ecosystem": "npm"
},
{
"name": "yocto-queue",
"direct": false,
"version": "0.1.0",
"ecosystem": "npm"
},
{
"name": "youch",
"direct": false,
"version": "4.1.0-beta.10",
"ecosystem": "npm"
},
{
"name": "youch-core",
"direct": false,
"version": "0.3.3",
"ecosystem": "npm"
},
{
"name": "zod-to-json-schema",
"direct": false,
"version": "3.25.1",
"ecosystem": "npm"
}
],
"collected": true,
"truncated": false,
"total_count": 690,
"direct_count": 12,
"indirect_count": 678
}
},
"maintainership": {
"issues": {
"open_prs": 19,
"merged_prs": 17,
"open_issues": 24,
"closed_ratio": 0.489,
"closed_issues": 23,
"closed_unmerged_prs": 17
},
"bus_factor": 1,
"bot_contributors": 0,
"top_contributors": [
{
"type": "User",
"login": "tpitre",
"commits": 534,
"avatar_url": "https://avatars.githubusercontent.com/u/645765?v=4"
},
{
"type": "User",
"login": "klgral",
"commits": 5,
"avatar_url": "https://avatars.githubusercontent.com/u/22195254?v=4"
},
{
"type": "User",
"login": "lukemoderwell",
"commits": 3,
"avatar_url": "https://avatars.githubusercontent.com/u/2180358?v=4"
},
{
"type": "User",
"login": "ahmed-khaire",
"commits": 2,
"avatar_url": "https://avatars.githubusercontent.com/u/4311670?v=4"
},
{
"type": "User",
"login": "claude",
"commits": 2,
"avatar_url": "https://avatars.githubusercontent.com/u/81847?v=4"
},
{
"type": "User",
"login": "Gururagavendra",
"commits": 1,
"avatar_url": "https://avatars.githubusercontent.com/u/84856326?v=4"
},
{
"type": "User",
"login": "ionmesca",
"commits": 1,
"avatar_url": "https://avatars.githubusercontent.com/u/103584532?v=4"
},
{
"type": "User",
"login": "nick-inkeep",
"commits": 1,
"avatar_url": "https://avatars.githubusercontent.com/u/122398915?v=4"
},
{
"type": "User",
"login": "robinhumphreys",
"commits": 1,
"avatar_url": "https://avatars.githubusercontent.com/u/97599438?v=4"
},
{
"type": "User",
"login": "chaba11",
"commits": 1,
"avatar_url": "https://avatars.githubusercontent.com/u/39912868?v=4"
}
],
"contributors_sampled": 11,
"top_contributor_share": 0.967
},
"quality_signals": {
"has_ci": false,
"has_tests": true,
"ci_workflows": [],
"has_docs_dir": true,
"linter_configs": [
".eslintrc.json",
"biome.json"
],
"has_editorconfig": false,
"has_linter_config": true,
"has_precommit_config": false
},
"security_signals": {
"lockfiles": [
"package-lock.json"
],
"scorecard": {
"checks": [
{
"name": "Binary-Artifacts",
"score": 10,
"reason": "no binaries found in the repo",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
},
{
"name": "Branch-Protection",
"score": 0,
"reason": "branch protection not enabled on development/release branches",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
},
{
"name": "CI-Tests",
"score": 0,
"reason": "0 out of 1 merged PRs checked by a CI test -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
},
{
"name": "CII-Best-Practices",
"score": 0,
"reason": "no effort to earn an OpenSSF best practices badge detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
},
{
"name": "Code-Review",
"score": 0,
"reason": "Found 0/22 approved changesets -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
},
{
"name": "Contributors",
"score": 3,
"reason": "project has 1 contributing companies or organizations -- score normalized to 3",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
},
{
"name": "Dangerous-Workflow",
"score": null,
"reason": "no workflows found",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
},
{
"name": "Dependency-Update-Tool",
"score": 0,
"reason": "no update tool detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
},
{
"name": "Fuzzing",
"score": 0,
"reason": "project is not fuzzed",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
},
{
"name": "License",
"score": 10,
"reason": "license file detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
},
{
"name": "Maintained",
"score": 10,
"reason": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
},
{
"name": "Packaging",
"score": null,
"reason": "packaging workflow not detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
},
{
"name": "Pinned-Dependencies",
"score": 0,
"reason": "dependency not pinned by hash detected -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
},
{
"name": "SAST",
"score": 0,
"reason": "SAST tool is not run on all commits -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
},
{
"name": "Security-Policy",
"score": 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": null,
"reason": "No tokens found",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
},
{
"name": "Vulnerabilities",
"score": 0,
"reason": "16 existing vulnerabilities detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
}
],
"commit": "138975494458585123bf0d89840e46ddb7bd01ae",
"ran_at": "2026-07-21T17:02:52Z",
"aggregate_score": 3.1,
"scorecard_version": "v5.5.0"
},
"has_codeql_workflow": false,
"has_security_policy": true,
"has_dependabot_config": false
}
},
"config": {
"disabled_metrics": [],
"disabled_categories": [],
"disabled_components": {}
},
"source": {
"url": "https://github.com/southleft/figma-console-mcp",
"host": "github.com",
"name": "figma-console-mcp",
"owner": "southleft"
},
"metrics": {
"overall": {
"key": "overall",
"band": "moderate",
"name": "Overall health",
"note": null,
"notes": [],
"value": 65,
"inputs": {
"security": 39,
"vitality": 92,
"community": 71,
"governance": 55,
"engineering": 64
},
"components": []
},
"categories": [
{
"key": "vitality",
"band": "excellent",
"name": "Vitality",
"value": 92,
"weight": 0.22,
"metrics": [
{
"key": "development_activity",
"band": "excellent",
"name": "Development activity",
"note": null,
"notes": [],
"value": 87,
"inputs": {
"commits_last_year": 553,
"human_commit_share": 1,
"days_since_last_push": 4,
"active_weeks_last_year": 33
},
"components": [
{
"key": "push_recency",
"name": "Push recency",
"detail": "last push 4 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "push_recency",
"params": {
"days": 4
}
}
],
"max_points": 36
},
{
"key": "commit_cadence",
"name": "Commit cadence",
"detail": "33/52 weeks with commits",
"points": 22.8,
"status": "partial",
"details": [
{
"code": "commit_cadence_weeks",
"params": {
"weeks": 33
}
}
],
"max_points": 36
},
{
"key": "commit_volume",
"name": "Commit volume",
"detail": "553 commits in the last year",
"points": 18,
"status": "met",
"details": [
{
"code": "commits_last_year",
"params": {
"count": 553
}
}
],
"max_points": 18
},
{
"key": "openssf_scorecard_maintained",
"name": "OpenSSF Scorecard: Maintained",
"detail": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
}
]
},
{
"key": "release_discipline",
"band": "excellent",
"name": "Release discipline",
"note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"openssf_scorecard_signed_releases"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 100,
"inputs": {
"releases_count": 66,
"latest_release_tag": "v1.36.0",
"releases_from_tags": false,
"days_since_latest_release": 4,
"mean_days_between_releases": 4.9
},
"components": [
{
"key": "ships_releases",
"name": "Ships releases",
"detail": "66 releases published",
"points": 27,
"status": "met",
"details": [
{
"code": "releases_published",
"params": {
"count": 66
}
}
],
"max_points": 27
},
{
"key": "release_recency",
"name": "Release recency",
"detail": "latest release 4 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "release_recency",
"params": {
"days": 4
}
}
],
"max_points": 36
},
{
"key": "release_cadence",
"name": "Release cadence",
"detail": "a release every ~4.9 days",
"points": 27,
"status": "met",
"details": [
{
"code": "release_cadence",
"params": {
"gap": 4.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": 4,
"days_since_last_human_commit_is_floor": false
},
"components": [
{
"key": "project_is_still_maintained",
"name": "Project is still maintained",
"detail": "last human commit 4 days ago",
"points": 100,
"status": "met",
"details": [
{
"code": "abandonment_maintained",
"params": {
"days": 4
}
}
],
"max_points": 100
}
]
}
],
"description": "Is the project alive — is code being written and are releases shipping?"
},
{
"key": "community",
"band": "good",
"name": "Community & Adoption",
"value": 71,
"weight": 0.18,
"metrics": [
{
"key": "popularity",
"band": "good",
"name": "Popularity & adoption",
"note": null,
"notes": [],
"value": 81,
"inputs": {
"forks": 224,
"stars": 2024,
"watchers": 28,
"growth_state": "organic",
"growth_factor_pct": 100
},
"components": [
{
"key": "stars",
"name": "Stars",
"detail": "2,024 stars",
"points": 53.6,
"status": "partial",
"details": [
{
"code": "stars",
"params": {
"count": 2024
}
}
],
"max_points": 60
},
{
"key": "forks",
"name": "Forks",
"detail": "224 forks",
"points": 19.6,
"status": "partial",
"details": [
{
"code": "forks",
"params": {
"count": 224
}
}
],
"max_points": 25
},
{
"key": "watchers",
"name": "Watchers",
"detail": "28 watchers",
"points": 8,
"status": "partial",
"details": [
{
"code": "watchers",
"params": {
"count": 28
}
}
],
"max_points": 15
}
]
},
{
"key": "community_health",
"band": "moderate",
"name": "Community health",
"note": null,
"notes": [],
"value": 50,
"inputs": {
"has_readme": true,
"has_license": true,
"has_contributing": false,
"has_issue_template": false,
"has_code_of_conduct": false,
"has_pull_request_template": false
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 22.5,
"status": "met",
"details": [],
"max_points": 22.5
},
{
"key": "license",
"name": "License",
"detail": "recognized license (MIT)",
"points": 22.5,
"status": "met",
"details": [
{
"code": "license_standard",
"params": {}
},
{
"code": "license_spdx",
"params": {
"spdx": "MIT"
}
}
],
"max_points": 22.5
},
{
"key": "contributing_guide",
"name": "CONTRIBUTING guide",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 18
},
{
"key": "code_of_conduct",
"name": "Code of conduct",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 13.5
},
{
"key": "issue_template",
"name": "Issue template",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.2
},
{
"key": "pr_template",
"name": "PR template",
"detail": null,
"points": 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": 83,
"inputs": {
"packages": [
"figma-console-mcp"
],
"dependents": null,
"ecosystems": "npm",
"total_downloads": null,
"monthly_downloads": 99709
},
"components": [
{
"key": "monthly_downloads",
"name": "Monthly downloads",
"detail": "99,709 downloads/month across npm",
"points": 66.6,
"status": "partial",
"details": [
{
"code": "downloads_monthly",
"params": {
"count": 99709,
"ecosystems": "npm"
}
}
],
"max_points": 80
},
{
"key": "registry_dependents",
"name": "Registry dependents",
"detail": "not reported by this ecosystem",
"points": 0,
"status": "excluded",
"details": [
{
"code": "not_reported_by_this_ecosystem",
"params": {}
}
],
"max_points": 20
}
]
}
],
"description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
},
{
"key": "governance",
"band": "moderate",
"name": "Sustainability & Governance",
"value": 55,
"weight": 0.24,
"metrics": [
{
"key": "maintainer_resilience",
"band": "critical",
"name": "Maintainer resilience (bus factor)",
"note": null,
"notes": [],
"value": 26,
"inputs": {
"bus_factor": 1,
"contributors_sampled": 11,
"top_contributor_share": 0.967
},
"components": [
{
"key": "bus_factor",
"name": "Bus factor",
"detail": "1 contributor(s) cover half of all commits",
"points": 9,
"status": "partial",
"details": [
{
"code": "bus_factor",
"params": {
"count": 1
}
}
],
"max_points": 54
},
{
"key": "commit_distribution",
"name": "Commit distribution",
"detail": "top contributor authored 97% of commits",
"points": 0.7,
"status": "partial",
"details": [
{
"code": "top_contributor_share",
"params": {
"share": 97
}
}
],
"max_points": 22.5
},
{
"key": "contributor_breadth",
"name": "Contributor breadth",
"detail": "11 contributors",
"points": 13.5,
"status": "met",
"details": [
{
"code": "contributors_sampled",
"params": {
"count": 11
}
}
],
"max_points": 13.5
},
{
"key": "openssf_scorecard_contributors",
"name": "OpenSSF Scorecard: Contributors",
"detail": "project has 1 contributing companies or organizations -- score normalized to 3",
"points": 3,
"status": "partial",
"details": [],
"max_points": 10
}
]
},
{
"key": "responsiveness",
"band": "at_risk",
"name": "Issue & PR responsiveness",
"note": null,
"notes": [],
"value": 42,
"inputs": {
"merged_prs": 17,
"open_issues": 24,
"closed_issues": 23,
"issue_closed_ratio": 0.489,
"closed_unmerged_prs": 17
},
"components": [
{
"key": "issue_resolution",
"name": "Issue resolution",
"detail": "49% of issues closed",
"points": 22.9,
"status": "partial",
"details": [
{
"code": "issues_closed_share",
"params": {
"share": 49
}
}
],
"max_points": 46.75
},
{
"key": "pr_acceptance",
"name": "PR acceptance",
"detail": "17/34 decided PRs merged",
"points": 19.1,
"status": "partial",
"details": [
{
"code": "decided_prs_merged",
"params": {
"merged": 17,
"decided": 34
}
}
],
"max_points": 38.25
},
{
"key": "openssf_scorecard_code_review",
"name": "OpenSSF Scorecard: Code-Review",
"detail": "Found 0/22 approved changesets -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
}
]
},
{
"key": "stewardship",
"band": "moderate",
"name": "Ownership & stewardship",
"note": null,
"notes": [],
"value": 68,
"inputs": {
"followers": 117,
"owner_type": "Organization",
"is_verified": null,
"owner_login": "southleft",
"public_repos": 30,
"account_age_days": 2363
},
"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": "117 followers of southleft",
"points": 14.9,
"status": "partial",
"details": [
{
"code": "owner_followers",
"params": {
"count": 117,
"login": "southleft"
}
}
],
"max_points": 25
},
{
"key": "track_record",
"name": "Track record",
"detail": "30 public repos, account ~6 yr old",
"points": 22.9,
"status": "partial",
"details": [
{
"code": "public_repos",
"params": {
"count": 30
}
},
{
"code": "account_age_years",
"params": {
"years": 6
}
}
],
"max_points": 25
}
]
},
{
"key": "package_maintenance",
"band": "excellent",
"name": "Package maintenance",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"packages": [
"figma-console-mcp"
],
"ecosystems": "npm",
"any_deprecated": false,
"min_days_since_publish": 4
},
"components": [
{
"key": "published_resolvable",
"name": "Published & resolvable",
"detail": "1 package(s) on npm",
"points": 25,
"status": "met",
"details": [
{
"code": "packages_published",
"params": {
"count": 1,
"ecosystems": "npm"
}
}
],
"max_points": 25
},
{
"key": "publish_recency",
"name": "Publish recency",
"detail": "latest publish 4 days ago",
"points": 35,
"status": "met",
"details": [
{
"code": "publish_recency",
"params": {
"days": 4
}
}
],
"max_points": 35
},
{
"key": "version_history",
"name": "Version history",
"detail": "81 published versions",
"points": 20,
"status": "met",
"details": [
{
"code": "published_versions",
"params": {
"count": 81
}
}
],
"max_points": 20
},
{
"key": "not_deprecated",
"name": "Not deprecated",
"detail": "active, not deprecated or yanked",
"points": 20,
"status": "met",
"details": [
{
"code": "package_not_deprecated",
"params": {}
}
],
"max_points": 20
}
]
}
],
"description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
},
{
"key": "engineering",
"band": "moderate",
"name": "Engineering Quality",
"value": 64,
"weight": 0.2,
"metrics": [
{
"key": "engineering_practices",
"band": "at_risk",
"name": "Engineering practices",
"note": null,
"notes": [],
"value": 40,
"inputs": {
"has_ci": false,
"has_tests": true,
"has_editorconfig": false,
"has_linter_config": true,
"has_precommit_config": false
},
"components": [
{
"key": "ci_workflows",
"name": "CI workflows",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 24
},
{
"key": "tests_present",
"name": "Tests present",
"detail": null,
"points": 24,
"status": "met",
"details": [],
"max_points": 24
},
{
"key": "linter_config",
"name": "Linter config",
"detail": ".eslintrc.json, biome.json",
"points": 16,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": ".eslintrc.json, 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": "0 out of 1 merged PRs checked by a CI test -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 20
}
]
},
{
"key": "documentation",
"band": "excellent",
"name": "Documentation",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"topics": [
"ai",
"design-systems",
"figma",
"figma-api",
"figma-plugins",
"mcp"
],
"has_wiki": true,
"homepage": "https://southleft.com",
"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://southleft.com",
"points": 15,
"status": "met",
"details": [],
"max_points": 15
},
{
"key": "repository_description",
"name": "Repository description",
"detail": null,
"points": 10,
"status": "met",
"details": [],
"max_points": 10
},
{
"key": "topics",
"name": "Topics",
"detail": "6 topics",
"points": 10,
"status": "met",
"details": [
{
"code": "topics_count",
"params": {
"count": 6
}
}
],
"max_points": 10
},
{
"key": "wiki",
"name": "Wiki",
"detail": null,
"points": 10,
"status": "met",
"details": [],
"max_points": 10
}
]
}
],
"description": "Are baseline engineering and documentation practices in place?"
},
{
"key": "security",
"band": "at_risk",
"name": "Security",
"value": 39,
"weight": 0.16,
"metrics": [
{
"key": "security_posture",
"band": "at_risk",
"name": "Security posture",
"note": "Excluded from scoring (no data or not applicable): Dangerous-Workflow, Packaging, Signed-Releases, Token-Permissions. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"dangerous_workflow",
"packaging",
"signed_releases",
"token_permissions"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 31,
"inputs": {
"source": "openssf_scorecard",
"checks_evaluated": 14,
"scorecard_version": "v5.5.0",
"checks_inconclusive": 4,
"scorecard_aggregate": 3.1
},
"components": [
{
"key": "binary_artifacts",
"name": "Binary-Artifacts",
"detail": "no binaries found in the repo",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "branch_protection",
"name": "Branch-Protection",
"detail": "branch protection not enabled on development/release branches",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "ci_tests",
"name": "CI-Tests",
"detail": "0 out of 1 merged PRs checked by a CI test -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 2.5
},
{
"key": "cii_best_practices",
"name": "CII-Best-Practices",
"detail": "no effort to earn an OpenSSF best practices badge detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 2.5
},
{
"key": "code_review",
"name": "Code-Review",
"detail": "Found 0/22 approved changesets -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "contributors",
"name": "Contributors",
"detail": "project has 1 contributing companies or organizations -- score normalized to 3",
"points": 0.8,
"status": "partial",
"details": [],
"max_points": 2.5
},
{
"key": "dangerous_workflow",
"name": "Dangerous-Workflow",
"detail": "no workflows found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 10
},
{
"key": "dependency_update_tool",
"name": "Dependency-Update-Tool",
"detail": "no update tool detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "fuzzing",
"name": "Fuzzing",
"detail": "project is not fuzzed",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "license",
"name": "License",
"detail": "license file detected",
"points": 2.5,
"status": "met",
"details": [],
"max_points": 2.5
},
{
"key": "maintained",
"name": "Maintained",
"detail": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "packaging",
"name": "Packaging",
"detail": "packaging workflow not detected",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 5
},
{
"key": "pinned_dependencies",
"name": "Pinned-Dependencies",
"detail": "dependency not pinned by hash detected -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "sast",
"name": "SAST",
"detail": "SAST tool is not run on all commits -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "security_policy",
"name": "Security-Policy",
"detail": "security policy file detected",
"points": 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": "No tokens found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 7.5
},
{
"key": "vulnerabilities",
"name": "Vulnerabilities",
"detail": "16 existing vulnerabilities detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
}
]
},
{
"key": "dependency_advisories",
"band": "good",
"name": "Dependency advisories",
"note": "Excluded from scoring (no data or not applicable): Indirect dependencies free of known advisories. Remaining weights renormalized. Matched 690 resolved dependencies against OSV. This repository publishes no package the index resolves, so the repository dependency graph was assessed instead. That graph mixes development and test pins with shipped dependencies, so only the declared runtime dependencies are scored; transitive findings are reported as context and excluded from the score. Reachability is not analyzed.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"indirect_dependencies_free_of_known_advisories"
]
}
},
{
"code": "weights_renormalized",
"params": {}
},
{
"code": "advisories_scope_repository",
"params": {
"assessed": 690
}
},
{
"code": "advisories_repo_graph_caveat",
"params": {}
},
{
"code": "advisories_reachability",
"params": {}
}
],
"value": 72,
"inputs": {
"source": "osv",
"advisories": 16,
"affected_packages": 5,
"assessed_packages": 690,
"unassessed_packages": 0,
"affected_by_severity": "high 3, low 2",
"direct_affected_packages": 1
},
"components": [
{
"key": "direct_dependencies_free_of_known_advisories",
"name": "Direct dependencies free of known advisories",
"detail": "1 affected: ws 8.18.0 (high 7.5)",
"points": 14,
"status": "partial",
"details": [
{
"code": "advisories_affected",
"params": {
"count": 1,
"packages": "ws 8.18.0 (high 7.5)"
}
}
],
"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 has been public longer than 90 days",
"points": 40,
"status": "met",
"details": [
{
"code": "advisories_none_stale",
"params": {
"days": 90
}
}
],
"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": 690,
"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": 8
},
"components": [
{
"key": "policy_exposure_multiplier",
"name": "Policy exposure multiplier",
"detail": "no confirmed policy-scope location match",
"points": 100,
"status": "met",
"details": [
{
"code": "jurisdiction_no_match",
"params": {}
}
],
"max_points": 100
}
]
}
],
"description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
},
{
"key": "ai_readiness",
"band": "moderate",
"name": "AI Readiness",
"value": 65,
"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.87,
"agent_instruction_files": [
"CLAUDE.md"
],
"agent_instruction_max_bytes": 1324
},
"components": [
{
"key": "agent_instructions",
"name": "Agent instructions",
"detail": "CLAUDE.md",
"points": 45,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "CLAUDE.md"
}
}
],
"max_points": 45
},
{
"key": "machine_readable_docs_llms_txt",
"name": "Machine-readable docs (llms.txt)",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
},
{
"key": "legible_commit_history",
"name": "Legible commit history",
"detail": "87 of 100 human commits state their intent (structured subject or explanatory body)",
"points": 40,
"status": "met",
"details": [
{
"code": "legible_history",
"params": {
"legible": 87,
"sampled": 100
}
}
],
"max_points": 40
}
]
},
{
"key": "ai_verify_loop",
"band": "moderate",
"name": "Verify loop (build / test / typecheck)",
"note": null,
"notes": [],
"value": 56,
"inputs": {
"has_nix": false,
"has_tests": true,
"lockfiles": [
"package-lock.json"
],
"has_dockerfile": false,
"typed_language": true,
"bootstrap_files": [],
"has_devcontainer": false,
"has_linter_config": true,
"typecheck_configs": [
"tsconfig.json"
],
"agent_commit_share": 0.01,
"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": ".eslintrc.json, biome.json",
"points": 11,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": ".eslintrc.json, biome.json"
}
}
],
"max_points": 11
},
{
"key": "static_type_checking",
"name": "Static type checking",
"detail": "tsconfig.json",
"points": 11,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "tsconfig.json"
}
}
],
"max_points": 11
},
{
"key": "reproducible_environment",
"name": "Reproducible environment",
"detail": "lockfile",
"points": 10,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "lockfile"
}
}
],
"max_points": 10
},
{
"key": "demonstrated_agent_practice",
"name": "Demonstrated agent practice",
"detail": "1 of the last 100 commits agent-authored or agent-credited",
"points": 2,
"status": "partial",
"details": [
{
"code": "agent_authored_commits",
"params": {
"count": 1,
"sampled": 100
}
}
],
"max_points": 10
},
{
"key": "automated_maintenance",
"name": "Automated maintenance",
"detail": "no automated dependency updates observed",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_dependency_automation",
"params": {}
}
],
"max_points": 8
},
{
"key": "openssf_scorecard_pinned_dependencies",
"name": "OpenSSF Scorecard: Pinned-Dependencies",
"detail": "dependency not pinned by hash detected -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
},
{
"key": "ai_code_legibility",
"band": "excellent",
"name": "Code legibility for models",
"note": null,
"notes": [],
"value": 96,
"inputs": {
"primary_language": "TypeScript",
"largest_source_bytes": 295107,
"source_files_sampled": 142,
"oversized_source_files": 10
},
"components": [
{
"key": "type_checkable_code",
"name": "Type-checkable code",
"detail": "TypeScript (statically typed)",
"points": 45,
"status": "met",
"details": [
{
"code": "statically_typed_language",
"params": {
"language": "TypeScript"
}
}
],
"max_points": 45
},
{
"key": "manageable_file_sizes",
"name": "Manageable file sizes",
"detail": "10/142 source files over 60KB",
"points": 51.1,
"status": "partial",
"details": [
{
"code": "oversized_source_files",
"params": {
"kb": 60,
"sampled": 142,
"oversized": 10
}
}
],
"max_points": 55
}
]
},
{
"key": "ai_interfaces",
"band": "critical",
"name": "Machine-readable interfaces",
"note": null,
"notes": [],
"value": 20,
"inputs": {
"example_dirs": [],
"has_mcp_signal": true,
"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": 20,
"status": "met",
"details": [],
"max_points": 20
},
{
"key": "runnable_examples",
"name": "Runnable examples",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"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": [
"deps.dev does not index npm:figma-console-mcp@1.36.0; advisories assessed against the repository dependency graph instead"
],
"report_type": "repository",
"generated_at": "2026-07-21T17:03:06.162274Z",
"schema_version": "0.23.0",
"badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/s/southleft/figma-console-mcp.svg",
"full_name": "southleft/figma-console-mcp",
"license_state": "standard",
"license_spdx": "MIT"
}