Informe JSON sin procesar legible por máquina
{
"data": {
"repo": {
"topics": [],
"is_fork": false,
"size_kb": 10311,
"has_wiki": false,
"homepage": "https://homey.app",
"languages": {
"JavaScript": 272453
},
"pushed_at": "2026-07-20T06:00:41Z",
"created_at": "2015-07-13T10:35:14Z",
"owner_type": "Organization",
"updated_at": "2026-07-17T08:58:07Z",
"description": "Shared code between Homey, Developer Tools and Documentation",
"is_archived": false,
"is_disabled": false,
"license_spdx": "GPL-3.0",
"default_branch": "develop",
"license_spdx_raw": "GPL-3.0",
"primary_language": "JavaScript",
"significant_languages": [
"JavaScript"
]
},
"owner": {
"blog": "https://homey.app",
"name": "Athom B.V.",
"type": "Organization",
"login": "athombv",
"company": null,
"location": null,
"followers": 187,
"avatar_url": "https://avatars.githubusercontent.com/u/8502422?v=4",
"created_at": "2014-08-20T12:11:00Z",
"is_verified": null,
"public_repos": 132,
"account_age_days": 4353
},
"license": {
"state": "standard",
"spdx_id": "GPL-3.0",
"raw_spdx": "GPL-3.0",
"file_present": true,
"scorecard_found": true,
"profile_has_license": true
},
"activity": {
"releases": [
{
"tag": "v2.51.3",
"kind": "patch",
"published_at": "2026-07-17T08:59:07Z"
},
{
"tag": "v2.51.2",
"kind": "patch",
"published_at": "2026-07-15T13:26:54Z"
},
{
"tag": "v2.51.1",
"kind": "patch",
"published_at": "2026-07-06T12:44:22Z"
},
{
"tag": "v2.51.0",
"kind": "minor",
"published_at": "2026-07-06T12:18:39Z"
},
{
"tag": "v2.50.5",
"kind": "patch",
"published_at": "2026-06-18T12:02:16Z"
},
{
"tag": "v2.50.4",
"kind": "patch",
"published_at": "2026-06-18T08:51:38Z"
},
{
"tag": "v2.50.3",
"kind": "patch",
"published_at": "2026-06-09T07:31:49Z"
},
{
"tag": "v2.50.2",
"kind": "patch",
"published_at": "2026-05-22T09:41:10Z"
},
{
"tag": "v2.50.1",
"kind": "patch",
"published_at": "2026-05-21T10:00:06Z"
},
{
"tag": "v2.50.0",
"kind": "minor",
"published_at": "2026-04-22T11:50:38Z"
},
{
"tag": "v2.49.2",
"kind": "patch",
"published_at": "2026-04-20T08:29:34Z"
},
{
"tag": "v2.49.1",
"kind": "patch",
"published_at": "2026-04-17T08:51:07Z"
},
{
"tag": "v2.49.0",
"kind": "minor",
"published_at": "2026-03-31T09:55:16Z"
},
{
"tag": "v2.48.1",
"kind": "patch",
"published_at": "2026-03-23T15:47:11Z"
},
{
"tag": "v2.48.0",
"kind": "minor",
"published_at": "2026-03-23T12:55:10Z"
},
{
"tag": "v2.47.0",
"kind": "minor",
"published_at": "2026-03-16T11:38:12Z"
},
{
"tag": "v2.46.1",
"kind": "patch",
"published_at": "2026-03-10T15:34:49Z"
},
{
"tag": "v2.46.0",
"kind": "minor",
"published_at": "2026-03-10T15:03:47Z"
},
{
"tag": "v2.45.4",
"kind": "patch",
"published_at": "2026-03-10T14:08:40Z"
},
{
"tag": "v2.45.3",
"kind": "patch",
"published_at": "2026-03-09T15:10:39Z"
},
{
"tag": "v2.45.2",
"kind": "patch",
"published_at": "2026-03-09T11:26:22Z"
},
{
"tag": "v2.45.1",
"kind": "patch",
"published_at": "2026-02-24T14:40:50Z"
},
{
"tag": "v2.45.0",
"kind": "minor",
"published_at": "2026-02-19T14:52:38Z"
},
{
"tag": "v2.44.5",
"kind": "patch",
"published_at": "2026-02-17T11:40:44Z"
},
{
"tag": "v2.44.4",
"kind": "patch",
"published_at": "2026-02-06T10:22:27Z"
},
{
"tag": "v2.44.3",
"kind": "patch",
"published_at": "2026-01-23T12:20:49Z"
},
{
"tag": "v2.44.2",
"kind": "patch",
"published_at": "2026-01-23T12:16:00Z"
},
{
"tag": "v2.44.1",
"kind": "patch",
"published_at": "2026-01-05T15:40:34Z"
},
{
"tag": "v2.44.0",
"kind": "minor",
"published_at": "2025-12-22T14:41:34Z"
},
{
"tag": "v2.43.0",
"kind": "minor",
"published_at": "2025-12-22T14:29:20Z"
},
{
"tag": "v2.42.1",
"kind": "patch",
"published_at": "2025-12-04T12:33:03Z"
},
{
"tag": "v2.42.0",
"kind": "minor",
"published_at": "2025-12-04T10:20:21Z"
},
{
"tag": "v2.41.0",
"kind": "minor",
"published_at": "2025-10-28T10:46:57Z"
},
{
"tag": "v2.40.0",
"kind": "minor",
"published_at": "2025-10-28T10:25:24Z"
},
{
"tag": "v2.39.2",
"kind": "patch",
"published_at": "2025-10-06T13:26:48Z"
},
{
"tag": "v2.39.1",
"kind": "patch",
"published_at": "2025-08-26T06:59:40Z"
},
{
"tag": "v2.39.0",
"kind": "minor",
"published_at": "2025-08-18T12:09:58Z"
},
{
"tag": "v2.38.3",
"kind": "patch",
"published_at": "2025-08-07T12:00:33Z"
},
{
"tag": "v2.38.2",
"kind": "patch",
"published_at": "2025-08-01T14:42:32Z"
},
{
"tag": "v2.38.1",
"kind": "patch",
"published_at": "2025-08-01T14:27:32Z"
},
{
"tag": "v2.38.0",
"kind": "minor",
"published_at": "2025-08-01T13:11:31Z"
},
{
"tag": "v2.37.4",
"kind": "patch",
"published_at": "2025-07-28T17:52:46Z"
},
{
"tag": "v2.37.3",
"kind": "patch",
"published_at": "2025-07-18T09:01:24Z"
},
{
"tag": "v2.37.2",
"kind": "patch",
"published_at": "2025-07-17T06:40:10Z"
},
{
"tag": "v2.37.1",
"kind": "patch",
"published_at": "2025-06-30T15:26:51Z"
},
{
"tag": "v2.37.0",
"kind": "minor",
"published_at": "2025-06-17T09:24:37Z"
},
{
"tag": "v2.36.0",
"kind": "minor",
"published_at": "2025-06-10T08:43:17Z"
},
{
"tag": "v2.35.4",
"kind": "patch",
"published_at": "2025-05-27T09:25:54Z"
},
{
"tag": "v2.35.3",
"kind": "patch",
"published_at": "2025-05-19T15:28:13Z"
},
{
"tag": "v2.35.2",
"kind": "patch",
"published_at": "2025-05-14T09:49:53Z"
},
{
"tag": "v2.35.1",
"kind": "patch",
"published_at": "2025-05-13T10:50:18Z"
},
{
"tag": "v2.35.0",
"kind": "minor",
"published_at": "2025-05-09T12:50:15Z"
},
{
"tag": "v2.34.0",
"kind": "minor",
"published_at": "2025-02-18T14:31:43Z"
},
{
"tag": "v2.33.2",
"kind": "patch",
"published_at": "2025-01-20T10:50:45Z"
},
{
"tag": "v2.33.1",
"kind": "patch",
"published_at": "2024-12-23T13:31:21Z"
},
{
"tag": "v2.33.0",
"kind": "minor",
"published_at": "2024-12-12T15:27:54Z"
},
{
"tag": "v2.32.11",
"kind": "patch",
"published_at": "2024-11-26T10:15:03Z"
},
{
"tag": "v2.32.10",
"kind": "patch",
"published_at": "2024-11-26T09:07:48Z"
},
{
"tag": "v2.32.9",
"kind": "patch",
"published_at": "2024-11-25T16:12:31Z"
},
{
"tag": "v2.32.8",
"kind": "patch",
"published_at": "2024-10-15T13:23:00Z"
},
{
"tag": "v2.32.7",
"kind": "patch",
"published_at": "2024-09-30T11:55:34Z"
},
{
"tag": "v2.32.6",
"kind": "patch",
"published_at": "2024-09-30T11:26:57Z"
},
{
"tag": "v2.32.5",
"kind": "patch",
"published_at": "2024-09-25T09:40:17Z"
},
{
"tag": "v2.32.4",
"kind": "patch",
"published_at": "2024-09-23T09:12:21Z"
},
{
"tag": "v2.32.3",
"kind": "patch",
"published_at": "2024-09-19T09:23:46Z"
},
{
"tag": "v2.32.2",
"kind": "patch",
"published_at": "2024-09-16T11:56:49Z"
},
{
"tag": "v2.32.1",
"kind": "patch",
"published_at": "2024-09-12T07:55:16Z"
},
{
"tag": "v2.32.0",
"kind": "minor",
"published_at": "2024-09-10T11:19:58Z"
},
{
"tag": "v2.31.4",
"kind": "patch",
"published_at": "2024-08-21T12:07:20Z"
},
{
"tag": "v2.31.3",
"kind": "patch",
"published_at": "2024-08-21T12:00:31Z"
},
{
"tag": "v2.31.2",
"kind": "patch",
"published_at": "2024-08-16T09:04:46Z"
},
{
"tag": "v2.31.1",
"kind": "patch",
"published_at": "2024-08-14T12:26:14Z"
},
{
"tag": "v2.31.0",
"kind": "minor",
"published_at": "2024-08-14T10:32:06Z"
},
{
"tag": "v2.30.1",
"kind": "patch",
"published_at": "2024-07-30T11:47:41Z"
},
{
"tag": "v2.30.0",
"kind": "minor",
"published_at": "2024-07-10T11:28:18Z"
},
{
"tag": "v2.29.0",
"kind": "minor",
"published_at": "2024-07-10T11:01:17Z"
},
{
"tag": "v2.28.1",
"kind": "patch",
"published_at": "2024-07-03T11:19:01Z"
},
{
"tag": "v2.28.0",
"kind": "minor",
"published_at": "2024-06-28T08:53:45Z"
},
{
"tag": "v2.27.0",
"kind": "minor",
"published_at": "2024-06-28T07:27:33Z"
},
{
"tag": "v2.26.1",
"kind": "patch",
"published_at": "2024-06-24T10:55:37Z"
},
{
"tag": "v2.26.0",
"kind": "minor",
"published_at": "2024-06-24T07:50:14Z"
},
{
"tag": "v2.25.0",
"kind": "minor",
"published_at": "2024-05-07T12:43:30Z"
},
{
"tag": "v2.24.1",
"kind": "patch",
"published_at": "2024-05-06T14:12:59Z"
},
{
"tag": "v2.24.0",
"kind": "minor",
"published_at": "2024-04-18T09:49:18Z"
},
{
"tag": "v2.23.0",
"kind": "minor",
"published_at": "2023-12-07T12:37:17Z"
},
{
"tag": "v2.22.2",
"kind": "patch",
"published_at": "2023-11-10T15:29:43Z"
},
{
"tag": "v2.22.1",
"kind": "patch",
"published_at": "2023-11-08T08:41:15Z"
},
{
"tag": "v2.22.0",
"kind": "minor",
"published_at": "2023-11-07T14:22:07Z"
},
{
"tag": "v2.21.6",
"kind": "patch",
"published_at": "2023-09-29T08:22:22Z"
},
{
"tag": "v2.21.4",
"kind": "patch",
"published_at": "2023-09-11T15:05:05Z"
},
{
"tag": "v2.21.3",
"kind": "patch",
"published_at": "2023-04-06T09:29:06Z"
},
{
"tag": "v2.21.2",
"kind": "patch",
"published_at": "2023-03-21T12:41:46Z"
},
{
"tag": "v2.21.1",
"kind": "patch",
"published_at": "2023-03-13T15:31:11Z"
},
{
"tag": "v2.21.0",
"kind": "minor",
"published_at": "2023-03-06T11:29:42Z"
},
{
"tag": "v2.20.0",
"kind": "minor",
"published_at": "2023-01-30T15:48:53Z"
},
{
"tag": "v2.19.0",
"kind": "minor",
"published_at": "2022-11-04T15:13:00Z"
},
{
"tag": "v2.18.2",
"kind": "patch",
"published_at": "2022-10-27T12:32:28Z"
},
{
"tag": "v2.18.1",
"kind": "patch",
"published_at": "2022-10-20T08:30:41Z"
},
{
"tag": "v2.18.0",
"kind": "minor",
"published_at": "2022-10-20T08:16:57Z"
},
{
"tag": "v2.17.2",
"kind": "patch",
"published_at": "2022-05-18T16:02:28Z"
}
],
"recent_commits": [
{
"oid": "2b1033208cd4d03654c59e83bbeb8eb933ab03ab",
"body": "Works around an OpenAI backend routing bug that intermittently rejects\nimage_url blocks on vision-capable models by retrying up to three times\nwith a short backoff before surfacing the failure.\n\nWraps upstream errors with richer metadata (status, code, request id,\nresponse body) to make debugging failed reviews far easier, and logs\nimage references via debug output.\n\nAdds a dry-run env flag to build and inspect the request payload\nwithout actually calling the model.",
"is_bot": false,
"headline": "Retries transient OpenAI 400s and improves error diagnostics",
"author_name": "Herman Meerlo",
"author_login": "hmeerlo",
"committed_at": "2026-07-17T08:57:27Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "afb3a9b4b5eb7dc21ee9827904adee7056c146b2",
"body": null,
"is_bot": false,
"headline": "Merge branch 'fix/improve-aireview' into develop",
"author_name": "Herman Meerlo",
"author_login": "hmeerlo",
"committed_at": "2026-07-15T13:24:51Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8a753cafdce89fca207f9f8871fcc995c57fd866",
"body": "Adds a separate brand-icon reference anchor and rewrites the \"no Homey name or logo\" guideline to clearly distinguish text vs. visual triggers.\n\nSpells out explicit carve-outs (stylised H, monochrome/gradient rings, generally colourful graphics) that must not be flagged, to reduce false positives wh\n[…]\nly matching anything round and colourful as the Homey mark.\n\nClarifies that the \"bias toward warning\" rule does not apply to these carve-outs, since flagging them would amount to a fabricated finding.",
"is_bot": false,
"headline": "Tightens Homey logo detection rules in AI reviewer prompt",
"author_name": "Herman Meerlo",
"author_login": "hmeerlo",
"committed_at": "2026-07-14T13:34:58Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "c88ca4573a2ec874eeb6a7cb5ef2e52bc36c7462",
"body": "Introduces a canonical templates file capturing the review team's tone-of-voice and phrasing, and wires it into the system prompt so findings are grounded in the exact messages developers already receive.\n\nAnnotates every checklist rule with a specific Guideline reference URL and requires developer-\n[…]\nad of vague \"per the checklist\" citations.\n\nAlso clarifies that xlarge app and driver images are optional to prevent false-positive findings, and splits driver sub-rules for finer-grained referencing.",
"is_bot": false,
"headline": "Adds feedback templates and guideline URLs to AI reviewer",
"author_name": "Herman Meerlo",
"author_login": "hmeerlo",
"committed_at": "2026-07-14T09:42:40Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "a84bab320e660feec0ca5e732eadd2e63472ac16",
"body": "Clarifies scope of several review rules to prevent over-flagging:\n\n- Defines what actually counts as a Homey name/logo violation, treating ambiguous cases as warnings rather than blockers.\n- Explicitly allows text that naturally appears on devices or packaging in driver images.\n- Narrows app-name ch\n[…]\nes concrete visual descriptions for image findings; adjective-only evidence must be dropped.\n- Refines deduping guidance so the same rule violated across multiple loci collapses into a single finding.",
"is_bot": false,
"headline": "Tightens AI reviewer prompt to curb false positives",
"author_name": "Herman Meerlo",
"author_login": "hmeerlo",
"committed_at": "2026-07-14T09:38:42Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "66043cdbbfc9ad888fa8e3a1688b1749eba52574",
"body": "…indings\n\nBundles canonical Homey/Athom brand assets (starting with the Homey logo) as reference image blocks attached to every review, giving the model a concrete visual anchor for guideline 1.4 checks instead of relying on pattern recognition alone. Reference blocks are clearly labelled and prompt\n[…]\nline-literal violation, and the skip-if-unsure rule is preserved for technical checks the model is known to get wrong (SVG byte-equivalence, pixel-resolution measurement, trademark substring matches).",
"is_bot": false,
"headline": "Add brand reference images and shift review bias to flag borderline f…",
"author_name": "Herman Meerlo",
"author_login": "hmeerlo",
"committed_at": "2026-07-09T10:57:21Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "1315cdb4ef15a1625af8354a648cecea89b88616",
"body": "Tightens the reviewer prompt to eliminate first-person narration (\"I found...\", \"I noticed...\") that makes output read like a bot describing its own inspection, in favor of stating the app's state as observable fact.\n\nStandardizes asset vocabulary to match the App Store's own terms (App Image, Drive\n[…]\no internal working documents (checklist, reviewer reference) that developers cannot access.\n\nAdds a full worked example so the model has a concrete target for the finished title and explanation style.",
"is_bot": false,
"headline": "Refine AI reviewer prompt tone and vocabulary",
"author_name": "Herman Meerlo",
"author_login": "hmeerlo",
"committed_at": "2026-07-09T10:02:40Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "1d77ffb63d8c3b264b86bf2745ac1da72b7356bc",
"body": "Applies destructuring, adjusts arrow function parentheses, and adds targeted lint disables for long lines that would harm readability if wrapped (prompt prose, schema descriptions, and detailed error messages).\n\nAlso splits an overly long debug log into intermediate variables for clarity.",
"is_bot": false,
"headline": "Fixes ESLint warnings across AIReviewer and App modules",
"author_name": "Herman Meerlo",
"author_login": "hmeerlo",
"committed_at": "2026-07-06T12:41:13Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "26ceedb731618f8335934bdb7e19eb43713dc967",
"body": null,
"is_bot": false,
"headline": "Merge branch 'master' into develop",
"author_name": "Herman Meerlo",
"author_login": "hmeerlo",
"committed_at": "2026-07-06T12:32:39Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "786e79b073668876bc198f80d7b5defc226a2fce",
"body": null,
"is_bot": false,
"headline": "Update webpack artefact",
"author_name": "Herman Meerlo",
"author_login": "hmeerlo",
"committed_at": "2026-07-06T12:13:05Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "117e1c703193dac1cf54de4059dcd87f8e7e6e1b",
"body": null,
"is_bot": false,
"headline": "Merge branch 'develop'",
"author_name": "Herman Meerlo",
"author_login": "hmeerlo",
"committed_at": "2026-07-06T12:12:27Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b7d7bcd2a8e42dc66e8516dd0c443aed7117c632",
"body": "Adds AIReviewer module for multi-provider app reviews",
"is_bot": false,
"headline": "Merge pull request #714 from athombv/feature/aireview",
"author_name": "hmeerlo",
"author_login": "hmeerlo",
"committed_at": "2026-07-06T12:05:04Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "42bcd2d250b184f3537a1bcb1f2055cb37f2f41f",
"body": "The previous check only guarded the total request payload (~20MB, OpenAI's\nceiling). Anthropic rejects any single base64 image over 5MB, so a user\nwith one oversized image would slip past the total check and hit an\nopaque provider error. This enforces both limits up-front with a clear\nmessage.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "Adds per-image size check for Anthropic's 5MB limit",
"author_name": "Herman Meerlo",
"author_login": "hmeerlo",
"committed_at": "2026-07-06T11:46:35Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "e95bfe031579780fcb88c3b6695d0000117db552",
"body": "The AIReviewer already receives the parsed manifest, so accepting appId\nas a separate argument was pure duplication. Consumers can drop it.\nExisting callers that still pass appId are unaffected (the extra key is\nsilently ignored during destructuring).\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "Removes redundant appId parameter, derives from manifest.id",
"author_name": "Herman Meerlo",
"author_login": "hmeerlo",
"committed_at": "2026-07-06T11:43:39Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "69dc627c28470b023c5965251eb99c1b2097dd2f",
"body": "Reframes the internal checklist as a companion to the public App Store Guidelines rather than a derivative of an internal Google Doc, so the source of truth lives where developers can actually see it.\n\nAdds previously-undocumented rules that reviewers already enforce (SDK v3 requirement, permission \n[…]\n flags them as known drift pending sync to the public site.\n\nDrops Athom-specific framing from the prompt and docs so severity parsing and interpretation guidance read as neutral reviewer conventions.",
"is_bot": false,
"headline": "Align reviewer docs with public guidelines",
"author_name": "Herman Meerlo",
"author_login": "hmeerlo",
"committed_at": "2026-07-06T11:26:33Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "84c7f753566ed0fb91e0aeb204313bf08bf53334",
"body": "fix: repair ESLint and add lint CI job",
"is_bot": false,
"headline": "Merge pull request #715 from athombv/fix/eslint-ci",
"author_name": "Robin Bolscher",
"author_login": "RobinBol",
"committed_at": "2026-07-03T14:23:08Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "99fbe8c69023ef3d22a24daaacbe78bffed994cb",
"body": "- Disable template-curly-spacing and indent rules (ESLint 7.x bugs)\n- Fix unused widgetId variable (Object.entries -> Object.values)\n- Add scripts/ and webpack.config.js to .eslintignore\n- Auto-fix style issues\n- Add separate lint.yml workflow",
"is_bot": false,
"headline": "fix: repair ESLint and add lint CI job",
"author_name": "Robin Bolscher",
"author_login": "RobinBol",
"committed_at": "2026-07-03T14:22:09Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1bb5d25d34ef79367d3758da160302e2be7ba2db",
"body": "Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>",
"is_bot": false,
"headline": "Potential fix for pull request finding",
"author_name": "hmeerlo",
"author_login": "hmeerlo",
"committed_at": "2026-07-03T08:13:15Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "f93392a1b2fdce9d2052d086390344618b238e17",
"body": "Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>",
"is_bot": false,
"headline": "Potential fix for pull request finding",
"author_name": "hmeerlo",
"author_login": "hmeerlo",
"committed_at": "2026-07-03T08:12:42Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "6c3f098426d67776d16916cef863ceab341c204e",
"body": "Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>",
"is_bot": false,
"headline": "Potential fix for pull request finding",
"author_name": "hmeerlo",
"author_login": "hmeerlo",
"committed_at": "2026-07-03T08:08:11Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "4b72e629a2f26d10aa3688d6467b04515feba294",
"body": "Anthropic's API requires HTTPS URLs for the `url` source type and rejects inline base64 payloads there. Detects data URLs and converts them into the appropriate `base64` source with the correct media type so inline image bytes are transmitted correctly instead of failing at the API boundary.",
"is_bot": false,
"headline": "Handles data URLs for Anthropic image blocks",
"author_name": "Herman Meerlo",
"author_login": "hmeerlo",
"committed_at": "2026-07-03T08:07:02Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4566c266f84a445a098db87305a124e4e06faa44",
"body": "Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>",
"is_bot": false,
"headline": "Potential fix for pull request finding",
"author_name": "hmeerlo",
"author_login": "hmeerlo",
"committed_at": "2026-07-03T08:05:52Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "e4051e8cfc0ea540fe5c2b2367bdc11d09e54915",
"body": "Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>",
"is_bot": false,
"headline": "Potential fix for pull request finding",
"author_name": "hmeerlo",
"author_login": "hmeerlo",
"committed_at": "2026-07-03T08:05:35Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "f21b7e965881cfecf00e1ad2c73dd94523978500",
"body": "Introduces a Node-only review pipeline that abstracts over OpenAI and\nAnthropic behind a provider-neutral tool schema, letting callers request\nstructured verdicts, severities, and categorized findings via a single\nfactory entry point.\n\nGuards the require with try/catch and adds a webpack IgnorePlugin rule so\nthe browser/RN bundles remain loadable and simply resolve the export to\nundefined, keeping the server-side feature from breaking client builds.",
"is_bot": false,
"headline": "Adds AIReviewer module for multi-provider app reviews",
"author_name": "Herman Meerlo",
"author_login": "hmeerlo",
"committed_at": "2026-07-03T07:17:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "47aaa0b697bcebff127683a778d68372c3660fec",
"body": "Merge develop into master",
"is_bot": false,
"headline": "Merge pull request #711 from athombv/develop",
"author_name": "Wouter",
"author_login": "wouter-athom",
"committed_at": "2026-06-18T12:00:39Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a4a7b103ba27ab100695fa1082224a10da05c25d",
"body": null,
"is_bot": false,
"headline": "ci: generated locales",
"author_name": "Homey Github Actions Bot",
"author_login": null,
"committed_at": "2026-06-18T11:59:10Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "80bc84df1d491abd8d4a51239690f17f84ef4ee6",
"body": "Fix capability title capitalisation and French translation",
"is_bot": false,
"headline": "Merge pull request #710 from athombv/chore/capability-translations",
"author_name": "Wouter",
"author_login": "wouter-athom",
"committed_at": "2026-06-18T11:58:46Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "34aa3b657ccec14907d44290e67e6872317fa87d",
"body": "Picks the relevant changes from #619 by @OlivierZal:\n- fan_speed: \"Fan Speed\" → \"Fan speed\" (sentence case)\n- thermostat_mode: French title \"Mode thermostat\" → \"Mode du thermostat\"\n\nCo-Authored-By: Olivier Zalmanski <88216225+OlivierZal@users.noreply.github.com>\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Fix capability title capitalisation and French translation",
"author_name": "Wouter Kamp",
"author_login": "wouter-athom",
"committed_at": "2026-06-18T11:45:20Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "8c67eb42c8d49724596405c8dae558be1ef2e009",
"body": "Merge develop into master",
"is_bot": false,
"headline": "Merge pull request #708 from athombv/develop",
"author_name": "Wouter",
"author_login": "wouter-athom",
"committed_at": "2026-06-18T08:43:54Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "133e76e4291e5564f9cb422c69e2b3d2cc173886",
"body": null,
"is_bot": false,
"headline": "ci: generated locales",
"author_name": "Homey Github Actions Bot",
"author_login": null,
"committed_at": "2026-06-18T08:38:11Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3d5d26cb8ad5f94afc294bdf1ef2228075c835b0",
"body": "Chore/update enum translations",
"is_bot": false,
"headline": "Merge pull request #696 from athombv/chore/update-enum-translations",
"author_name": "Wouter",
"author_login": "wouter-athom",
"committed_at": "2026-06-18T08:37:48Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7deee9f561e571d3580540afee4a1fc2799bd1bb",
"body": null,
"is_bot": false,
"headline": "Merge branch 'develop'",
"author_name": "Herman Meerlo",
"author_login": "hmeerlo",
"committed_at": "2026-06-09T07:28:26Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5a39419ee78c0ec9a7cd14e0031c74172314383d",
"body": "Adds BLE advertisements feature to supported platforms",
"is_bot": false,
"headline": "Merge pull request #705 from athombv/feature/ble-advertisements",
"author_name": "hmeerlo",
"author_login": "hmeerlo",
"committed_at": "2026-06-09T07:24:55Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3f8ee21c28e6251d321b89763e8e83117d2d68fd",
"body": "…_2026-06-01Z\n\n🌐 Language update from Lingohub 🤖 on 2026-06-01Z",
"is_bot": false,
"headline": "Merge pull request #706 from athombv/lingohub_language_update_develop…",
"author_name": "Robin Bolscher",
"author_login": "RobinBol",
"committed_at": "2026-06-02T13:29:24Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6eaac844eafe5170783e7f5927127410f3d83b4d",
"body": null,
"is_bot": false,
"headline": "Merge branch 'develop' into lingohub_language_update_develop_2026-06-01Z",
"author_name": "Robin Bolscher",
"author_login": "RobinBol",
"committed_at": "2026-06-02T13:29:15Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7efa35fc6574cb659414b5decb08ab236cb46440",
"body": "…_2026-05-25Z\n\n🌐 Language update from Lingohub 🤖 on 2026-05-25Z",
"is_bot": false,
"headline": "Merge pull request #704 from athombv/lingohub_language_update_develop…",
"author_name": "Robin Bolscher",
"author_login": "RobinBol",
"committed_at": "2026-06-02T13:26:43Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ba1eb6d7f6cbe1e5e90d3aa964f731b4b9c7862e",
"body": null,
"is_bot": false,
"headline": "updated nl translations to use imperative form",
"author_name": "Wouter Kamp",
"author_login": "wouter-athom",
"committed_at": "2026-06-01T07:51:37Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "99d0ed012dd1c7bb68033cbf752fcf8d2fa9fd58",
"body": null,
"is_bot": false,
"headline": "ci: applied locales",
"author_name": "Homey Github Actions Bot",
"author_login": null,
"committed_at": "2026-06-01T06:00:56Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a449d01980074b3105977db18b6fee312dc42c08",
"body": "Project Name: node-homey-lib\nProject Link: https://app.lingohub.com/project/pr_13RFK20VujJq-24039/branches/prb_15PXO7gzUYuE-11865\nUser: Lingohub Robot\n\nEasy language translations with Lingohub 🚀",
"is_bot": true,
"headline": "🌐 Language update from Lingohub 🤖",
"author_name": "lingohub[bot]",
"author_login": "lingohub[bot]",
"committed_at": "2026-06-01T06:00:31Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3a6fa8cf4550d4832d5a1419845fc5514bf1f902",
"body": "Enables BLE advertisements support for select platforms to expand feature compatibility and future integration possibilities.",
"is_bot": false,
"headline": "Adds BLE advertisements feature to supported platforms",
"author_name": "Herman Meerlo",
"author_login": "hmeerlo",
"committed_at": "2026-05-26T07:32:44Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7d7d48025499586e6c47b16e639cec6cd64d60a1",
"body": null,
"is_bot": false,
"headline": "ci: applied locales",
"author_name": "Homey Github Actions Bot",
"author_login": null,
"committed_at": "2026-05-25T06:00:54Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f657d276faeb140dd568f71e09bb1b1ba236d63e",
"body": "Project Name: node-homey-lib\nProject Link: https://app.lingohub.com/project/pr_13RFK20VujJq-24039/branches/prb_15PXO7gzUYuE-11865\nUser: Lingohub Robot\n\nEasy language translations with Lingohub 🚀",
"is_bot": true,
"headline": "🌐 Language update from Lingohub 🤖",
"author_name": "lingohub[bot]",
"author_login": "lingohub[bot]",
"committed_at": "2026-05-25T06:00:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0350b10b01b3e5efa90f53391da08a63c54b08ee",
"body": "mdim",
"is_bot": false,
"headline": "Merge pull request #702 from athombv/develop",
"author_name": "Jeroen Wienk",
"author_login": "jeroenwienk",
"committed_at": "2026-05-22T09:40:04Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3c20874fef4e4636d8f34c5f72bef77a71080458",
"body": "…ompatibility\n\nRequire Homey 13.2.1 for capability titleShort",
"is_bot": false,
"headline": "Merge pull request #701 from athombv/feature/capability-title-short-c…",
"author_name": "Jeroen Wienk",
"author_login": "jeroenwienk",
"committed_at": "2026-05-22T09:38:40Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ffcf4b9c2dc940150cd520bd822d55c3cd001014",
"body": null,
"is_bot": false,
"headline": "Address capability titleShort review feedback",
"author_name": "Jeroen Wienk",
"author_login": "jeroenwienk",
"committed_at": "2026-05-22T09:37:25Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f9207e3aa0dadf5358cbcc2dc18c21abc40be50e",
"body": null,
"is_bot": false,
"headline": "Merge branch 'production' into master",
"author_name": "Jeroen Wienk",
"author_login": "jeroenwienk",
"committed_at": "2026-05-21T09:58:24Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "26786f04223cd84f71781237dcd5be5911f69201",
"body": null,
"is_bot": false,
"headline": "Require Homey 13.2.1 for capability titleShort",
"author_name": "Jeroen Wienk",
"author_login": "jeroenwienk",
"committed_at": "2026-05-21T09:55:55Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5a4dfd933cf70cfc593455bf35ead7ba7ba7ecca",
"body": "mdim",
"is_bot": false,
"headline": "Merge pull request #698 from athombv/develop",
"author_name": "Jeroen Wienk",
"author_login": "jeroenwienk",
"committed_at": "2026-05-21T09:51:21Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "076ae4823bee34869be8a6a298631e2e087ef9e4",
"body": "# Conflicts:\n#\twebpack/index.js",
"is_bot": false,
"headline": "Merge remote-tracking branch 'origin/master' into develop",
"author_name": "Jeroen Wienk",
"author_login": "jeroenwienk",
"committed_at": "2026-05-21T09:49:15Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5800fa3f04dfe97da52dbaab78c4244b1836c75b",
"body": "test: cover titleShort app capability validation",
"is_bot": false,
"headline": "Merge pull request #699 from athombv/feature/title-short-app-validation",
"author_name": "Jeroen Wienk",
"author_login": "jeroenwienk",
"committed_at": "2026-05-21T09:37:27Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "71e90e88751048feab12a473d22ed49e5e5e3467",
"body": null,
"is_bot": false,
"headline": "test: cover titleShort app capability validation",
"author_name": "Jeroen Wienk",
"author_login": "jeroenwienk",
"committed_at": "2026-05-21T09:27:14Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c00861ffa597eb7b639d375ae473c16dfc7155a3",
"body": null,
"is_bot": false,
"headline": "ci: generated locales",
"author_name": "Homey Github Actions Bot",
"author_login": null,
"committed_at": "2026-05-21T09:20:05Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0a629194d9474666cf44cdbcbecfe12e79402a8a",
"body": "feat: add shortTitle to alarm capabilities",
"is_bot": false,
"headline": "Merge pull request #692 from athombv/feature/alarm-short-titles",
"author_name": "Jeroen Wienk",
"author_login": "jeroenwienk",
"committed_at": "2026-05-21T09:19:40Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a1c9536dca022ec3848557c694c1ba31aed59b76",
"body": null,
"is_bot": false,
"headline": "chore: update generated titleShort artifacts",
"author_name": "Jeroen Wienk",
"author_login": "jeroenwienk",
"committed_at": "2026-05-21T09:14:27Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1a07ed044933651b326b91ece6ac627aec2d24db",
"body": null,
"is_bot": false,
"headline": "updated swing_mode translations",
"author_name": "Wouter Kamp",
"author_login": "wouter-athom",
"committed_at": "2026-05-13T12:15:41Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8a515f318292986ac89ae3bfdb024adcaabb4e02",
"body": null,
"is_bot": false,
"headline": "updated target_power_mode and thermostat_mode",
"author_name": "Wouter Kamp",
"author_login": "wouter-athom",
"committed_at": "2026-05-13T11:27:20Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6fbf3d5ed2cc3c7766dcb6bd07ef1bbe4e43718b",
"body": null,
"is_bot": false,
"headline": "updated translations for enum capabilities",
"author_name": "Wouter Kamp",
"author_login": "wouter-athom",
"committed_at": "2026-05-13T11:17:13Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5e16871cff902bf2204d6e01603d434377a32f19",
"body": "Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "refactor: rename shortTitle to titleShort",
"author_name": "Harwin",
"author_login": "HarwinBorger",
"committed_at": "2026-04-28T11:41:12Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "062d3d1e62f619a40c5235e0234dd111967d21e7",
"body": "Adds an optional i18n shortTitle field to all 43 alarm_*.json capability\nfiles and declares it in the capability schema. The shortened form drops\nthe localized \"alarm\" word so UI surfaces with limited space can show\ne.g. \"Motion\" instead of \"Motion Alarm\".\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: add shortTitle to alarm capabilities",
"author_name": "Harwin",
"author_login": "HarwinBorger",
"committed_at": "2026-04-28T11:32:24Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "52e9713ee4147986f3ec171dad941d99552fbc43",
"body": null,
"is_bot": false,
"headline": "2.50.0",
"author_name": "Homey Github Actions Bot",
"author_login": null,
"committed_at": "2026-04-22T11:50:38Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ce415d8633071f27c09d537d2709f73d132c355c",
"body": null,
"is_bot": false,
"headline": "build: update webpack artefact",
"author_name": "Homey Github Actions Bot",
"author_login": null,
"committed_at": "2026-04-22T11:50:37Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "57b213e9362035a457617dc7fcc424a0e832b93c",
"body": "MMIP (#minor)",
"is_bot": false,
"headline": "Merge pull request #689 from athombv/master",
"author_name": "Niels",
"author_login": "nozols",
"committed_at": "2026-04-22T11:50:10Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "59b91a4ab9c6b267e04c980100decea5917235c9",
"body": "MDIM",
"is_bot": false,
"headline": "Merge pull request #688 from athombv/develop",
"author_name": "Niels",
"author_login": "nozols",
"committed_at": "2026-04-22T11:48:47Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7250c1c82d545aa1ff4fc160c5aa53c6d2a285e7",
"body": "feat(zwave): add firmware updates",
"is_bot": false,
"headline": "Merge pull request #684 from athombv/feature/zwave-firmware-updates",
"author_name": "Niels",
"author_login": "nozols",
"committed_at": "2026-04-22T11:46:47Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "659df601b4ee8af8da82a1ca6ff2ffe462823bd1",
"body": null,
"is_bot": false,
"headline": "2.49.2",
"author_name": "Homey Github Actions Bot",
"author_login": null,
"committed_at": "2026-04-20T08:29:34Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "edacfa20198cf8c6d1f1b2674872a3251ff57a5b",
"body": null,
"is_bot": false,
"headline": "build: update webpack artefact",
"author_name": "Homey Github Actions Bot",
"author_login": null,
"committed_at": "2026-04-20T08:29:33Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a504127156e8229fe318e35922bd2d742a28a77a",
"body": "Merge Master (#patch)",
"is_bot": false,
"headline": "Merge pull request #687 from athombv/master",
"author_name": "Wouter",
"author_login": "wouter-athom",
"committed_at": "2026-04-20T08:29:05Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "fadf2dd29bdc0a70f3f56a327801dfa37b8f465f",
"body": "Merge develop",
"is_bot": false,
"headline": "Merge pull request #686 from athombv/develop",
"author_name": "Wouter",
"author_login": "wouter-athom",
"committed_at": "2026-04-20T08:27:44Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6f5d80972df5e7fc3c6a9d01a75b0001f06ab7be",
"body": null,
"is_bot": false,
"headline": "ci: generated locales",
"author_name": "Homey Github Actions Bot",
"author_login": null,
"committed_at": "2026-04-20T08:10:41Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "18d4a0cdcf05e1bf89ea81535c5af7c6c38e26a5",
"body": "updated wrong translations for fair and moderate air quality level",
"is_bot": false,
"headline": "Merge pull request #685 from athombv/fix/level-aqi-translations",
"author_name": "Wouter",
"author_login": "wouter-athom",
"committed_at": "2026-04-20T08:10:19Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ccb417349918cc51e2f617c48b0e71b46819ebdf",
"body": null,
"is_bot": false,
"headline": "updated wrong translations for fair and moderate air quality level",
"author_name": "Wouter Kamp",
"author_login": "wouter-athom",
"committed_at": "2026-04-20T07:57:28Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8f5a0f9e7222deee3da512bf705fe856c450d361",
"body": null,
"is_bot": false,
"headline": "chore: copilot review feedback",
"author_name": "Niels de Boer",
"author_login": "nozols",
"committed_at": "2026-04-20T07:52:36Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "cb784ff9695ce10c7cebf79f5e7aade3ac91dc8e",
"body": null,
"is_bot": false,
"headline": "feat(zwave): add firmware updates",
"author_name": "Niels de Boer",
"author_login": "nozols",
"committed_at": "2026-04-20T07:34:44Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f9e66cac176bca825174f7da443d46d986b6dddb",
"body": null,
"is_bot": false,
"headline": "2.49.1",
"author_name": "Homey Github Actions Bot",
"author_login": null,
"committed_at": "2026-04-17T08:51:07Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3064d76180d282913988ec0e5ddd3cb0e751a9af",
"body": null,
"is_bot": false,
"headline": "build: update webpack artefact",
"author_name": "Homey Github Actions Bot",
"author_login": null,
"committed_at": "2026-04-17T08:51:06Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ba7092134cd2e697119bb5089431fd01cc9beba9",
"body": "MMIP (#patch)",
"is_bot": false,
"headline": "Merge pull request #682 from athombv/master",
"author_name": "Niels",
"author_login": "nozols",
"committed_at": "2026-04-17T08:50:41Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "fe1ce18bf1619944d4b9252556b868d2174366ab",
"body": "MDIM",
"is_bot": false,
"headline": "Merge pull request #681 from athombv/develop",
"author_name": "Niels",
"author_login": "nozols",
"committed_at": "2026-04-17T08:49:15Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "43a181101857c471ad6cb4298f85b0745740ac2e",
"body": null,
"is_bot": false,
"headline": "feat(zigbee-firmware): add wake instruction field",
"author_name": "Niels de Boer",
"author_login": "nozols",
"committed_at": "2026-04-17T08:43:22Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a8e43b6f273594c2f5a8ac09490aaac87e90cd05",
"body": "master → production",
"is_bot": false,
"headline": "Merge pull request #678 from athombv/master",
"author_name": "Emile Nijssen",
"author_login": "WeeJeWel",
"committed_at": "2026-03-31T09:57:37Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "472cc8ed988d658101521c6ac832ae4e4abf425f",
"body": null,
"is_bot": false,
"headline": "Merge branch 'production' into master",
"author_name": "Emile Nijssen",
"author_login": "WeeJeWel",
"committed_at": "2026-03-31T09:57:25Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6b6ddb22fa2100707977e7cfe94abfeaa2486ba5",
"body": "develop → master",
"is_bot": false,
"headline": "Merge pull request #677 from athombv/develop",
"author_name": "Emile Nijssen",
"author_login": "WeeJeWel",
"committed_at": "2026-03-31T09:56:43Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "169a3f3e594bc6e4633ca540f180579ba5373343",
"body": null,
"is_bot": false,
"headline": "Merge branch 'master' into develop",
"author_name": "Emile Nijssen",
"author_login": "WeeJeWel",
"committed_at": "2026-03-31T09:56:08Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f65e03757a6cd8dd4a7e3c289f1a82f78625a6e4",
"body": null,
"is_bot": false,
"headline": "2.49.0",
"author_name": "Emile Nijssen",
"author_login": "WeeJeWel",
"committed_at": "2026-03-31T09:55:16Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c7c7a3d054735cbb1f6a630ce6b54b05de704fc8",
"body": null,
"is_bot": false,
"headline": "2.46.0",
"author_name": "Emile Nijssen",
"author_login": "WeeJeWel",
"committed_at": "2026-03-31T09:54:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "eac824b152fc97c191b1ed3e78d916fb8089b1b4",
"body": null,
"is_bot": false,
"headline": "add zone icons",
"author_name": "Emile Nijssen",
"author_login": "WeeJeWel",
"committed_at": "2026-03-31T09:54:40Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "650a105edef4fd472b8ff7c2ae22f79682d44624",
"body": null,
"is_bot": false,
"headline": "2.48.1",
"author_name": "Homey Github Actions Bot",
"author_login": null,
"committed_at": "2026-03-23T15:47:11Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c417d68d9aefe5a4ea8063261fbede7286cd31b3",
"body": null,
"is_bot": false,
"headline": "build: update webpack artefact",
"author_name": "Homey Github Actions Bot",
"author_login": null,
"committed_at": "2026-03-23T15:47:10Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0fab2555dc5e8ed97b7a60546639e1146168b3f9",
"body": "Merge master into production (#patch)",
"is_bot": false,
"headline": "Merge pull request #675 from athombv/master",
"author_name": "Robin Bolscher",
"author_login": "RobinBol",
"committed_at": "2026-03-23T15:46:44Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a17f7a09f4d322226e6df8898fe8523eee642039",
"body": "Merge develop into master",
"is_bot": false,
"headline": "Merge pull request #674 from athombv/develop",
"author_name": "Robin Bolscher",
"author_login": "RobinBol",
"committed_at": "2026-03-23T15:45:41Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a1bcabb0db1f03f41a55234defd7e0cb893d3059",
"body": "Remove hardcoded \"Automatic\" references from flow card hints since\nthe device value is now optional and custom values can be added.\nReplace with generic \"Other modes are determined by the device.\"",
"is_bot": false,
"headline": "fix(locale): update target_power_mode flow card hints to be generic",
"author_name": "Robin Bolscher",
"author_login": "RobinBol",
"committed_at": "2026-03-23T15:44:26Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6b6864d033e469603b4a5f2ce538a26c6eb4601a",
"body": null,
"is_bot": false,
"headline": "2.48.0",
"author_name": "Homey Github Actions Bot",
"author_login": null,
"committed_at": "2026-03-23T12:55:10Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b437c61b2203c09dca35103cc51c888f8b1d17e3",
"body": null,
"is_bot": false,
"headline": "build: update webpack artefact",
"author_name": "Homey Github Actions Bot",
"author_login": null,
"committed_at": "2026-03-23T12:55:09Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "db9bc5c815973cadfa8419e8d03bd8b71003245d",
"body": "Merge master into production (#minor)",
"is_bot": false,
"headline": "Merge pull request #673 from athombv/master",
"author_name": "Robin Bolscher",
"author_login": "RobinBol",
"committed_at": "2026-03-23T12:54:42Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d8c87c69f139e737577b2ccb6a7e63aee86b24ac",
"body": "Merge develop into master",
"is_bot": false,
"headline": "Merge pull request #672 from athombv/develop",
"author_name": "Robin Bolscher",
"author_login": "RobinBol",
"committed_at": "2026-03-23T12:53:34Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "22d6feb134315317d5564972bf1dcf605a8b7447",
"body": "…_2026-03-23Z\n\n🌐 Language update from Lingohub 🤖 on 2026-03-23Z",
"is_bot": false,
"headline": "Merge pull request #670 from athombv/lingohub_language_update_develop…",
"author_name": "Robin Bolscher",
"author_login": "RobinBol",
"committed_at": "2026-03-23T12:52:20Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a77f9983abc5c6482484dd650e72802a0541150f",
"body": null,
"is_bot": false,
"headline": "ci: applied locales",
"author_name": "Homey Github Actions Bot",
"author_login": null,
"committed_at": "2026-03-23T12:49:03Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8afd69af78d2cdf6653dec502cb19cfb64bf0813",
"body": null,
"is_bot": false,
"headline": "ci: generated locales",
"author_name": "Homey Github Actions Bot",
"author_login": null,
"committed_at": "2026-03-23T12:45:27Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "88b0c9aba7bdc03a59167fc9de92ae6db43b5e90",
"body": "Added a newline character to the end of JSON files when writing updated content to ensure proper formatting and compatibility with tools that expect a newline at the end of files.",
"is_bot": false,
"headline": "fix(locale): ensure JSON files end with a newline after writing",
"author_name": "Robin Bolscher",
"author_login": "RobinBol",
"committed_at": "2026-03-23T12:44:27Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6ea37fbf4a58e965ae8201df32ac20d1fd280ce8",
"body": "…vice-mode\n\nfeat: make device mode optional for target_power_mode",
"is_bot": false,
"headline": "Merge pull request #669 from athombv/feature/target-power-optional-de…",
"author_name": "Robin Bolscher",
"author_login": "RobinBol",
"committed_at": "2026-03-23T12:41:36Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "452c635d9e0be6baecaf7425011c59882ac55d34",
"body": null,
"is_bot": false,
"headline": "test: add regression test for malformed target_power_mode entries",
"author_name": "Robin Bolscher",
"author_login": "RobinBol",
"committed_at": "2026-03-23T12:39:43Z",
"body_truncated": false,
"is_coding_agent": false
}
],
"releases_count": 100,
"commits_last_year": 358,
"latest_release_at": "2026-07-17T08:59:07Z",
"latest_release_tag": "v2.51.3",
"releases_from_tags": true,
"days_since_last_push": 1,
"active_weeks_last_year": 34,
"days_since_latest_release": 4,
"mean_days_between_releases": 9.5
},
"community": {
"has_readme": true,
"has_license": true,
"has_description": true,
"has_contributing": true,
"health_percentage": 62,
"has_issue_template": false,
"has_code_of_conduct": true,
"has_pull_request_template": false
},
"ecosystem": {
"packages": [
{
"name": "homey-lib",
"exists": true,
"license": "ISC",
"keywords": [],
"ecosystem": "npm",
"matches_repo": true,
"registry_url": "https://www.npmjs.com/package/homey-lib",
"is_deprecated": false,
"latest_version": "2.51.3",
"repository_url": "https://github.com/athombv/node-homey-lib",
"versions_count": 289,
"total_downloads": null,
"dependents_count": null,
"deprecation_note": null,
"maintainers_count": 3,
"monthly_downloads": 15568,
"first_published_at": "2015-12-11T19:42:34.988000Z",
"latest_published_at": "2026-07-17T08:59:16.240000Z",
"latest_version_yanked": null,
"days_since_latest_publish": 4
}
]
},
"popularity": {
"forks": 26,
"stars": 23,
"watchers": 11,
"fork_history": {
"days": [
{
"date": "2016-06-01",
"count": 1
},
{
"date": "2016-06-15",
"count": 1
},
{
"date": "2016-06-22",
"count": 1
},
{
"date": "2017-05-10",
"count": 1
},
{
"date": "2018-07-24",
"count": 1
},
{
"date": "2018-08-13",
"count": 1
},
{
"date": "2018-11-08",
"count": 1
},
{
"date": "2019-01-16",
"count": 1
},
{
"date": "2019-03-08",
"count": 1
},
{
"date": "2020-07-01",
"count": 1
},
{
"date": "2020-10-06",
"count": 1
},
{
"date": "2020-12-09",
"count": 1
},
{
"date": "2021-02-14",
"count": 1
},
{
"date": "2021-03-22",
"count": 1
},
{
"date": "2021-05-05",
"count": 1
},
{
"date": "2021-05-06",
"count": 1
},
{
"date": "2021-11-10",
"count": 1
},
{
"date": "2022-02-20",
"count": 1
},
{
"date": "2022-03-06",
"count": 1
},
{
"date": "2022-06-10",
"count": 1
},
{
"date": "2023-04-06",
"count": 1
},
{
"date": "2023-06-15",
"count": 1
},
{
"date": "2025-05-23",
"count": 1
},
{
"date": "2025-12-24",
"count": 1
},
{
"date": "2026-04-22",
"count": 1
}
],
"complete": true,
"collected": 25,
"total_forks": 26
},
"star_history": {
"days": [
{
"date": "2015-09-02",
"count": 1
},
{
"date": "2017-10-24",
"count": 1
},
{
"date": "2019-04-09",
"count": 1
},
{
"date": "2019-12-22",
"count": 1
},
{
"date": "2020-08-08",
"count": 1
},
{
"date": "2020-10-06",
"count": 1
},
{
"date": "2021-01-18",
"count": 1
},
{
"date": "2021-05-05",
"count": 1
},
{
"date": "2021-05-06",
"count": 1
},
{
"date": "2022-03-06",
"count": 1
},
{
"date": "2022-05-23",
"count": 1
},
{
"date": "2024-07-17",
"count": 1
},
{
"date": "2024-11-03",
"count": 1
},
{
"date": "2025-01-22",
"count": 1
},
{
"date": "2025-02-10",
"count": 1
},
{
"date": "2025-05-14",
"count": 1
},
{
"date": "2025-08-30",
"count": 1
},
{
"date": "2025-12-09",
"count": 1
},
{
"date": "2025-12-15",
"count": 1
},
{
"date": "2026-01-12",
"count": 1
},
{
"date": "2026-03-19",
"count": 1
},
{
"date": "2026-05-09",
"count": 1
},
{
"date": "2026-06-01",
"count": 1
}
],
"complete": true,
"collected": 23,
"total_stars": 23
},
"open_issues_and_prs": 21
},
"ai_readiness": {
"has_nix": false,
"example_dirs": [
"examples"
],
"has_llms_txt": false,
"has_dockerfile": false,
"has_mcp_signal": false,
"bootstrap_files": [],
"api_schema_files": [],
"has_devcontainer": false,
"typecheck_configs": [],
"toolchain_manifests": [],
"largest_source_bytes": 979342,
"source_files_sampled": 50,
"oversized_source_files": 1,
"agent_instruction_files": [],
"agent_instruction_max_bytes": null
},
"dependencies": {
"manifests": [
"package.json"
],
"advisories": {
"error": null,
"scope": "repository_graph",
"source": "osv",
"findings": [
{
"name": "flatted",
"direct": false,
"version": "3.2.1",
"severity": "critical",
"ecosystem": "npm",
"cvss_score": 9.8,
"advisory_ids": [
"GHSA-25h7-pfq9-p65f",
"GHSA-rf6f-7fwh-wjgh"
],
"fixed_version": "3.4.2",
"advisory_count": 2,
"oldest_advisory_days": 130
},
{
"name": "semver",
"direct": true,
"version": "6.3.0",
"severity": "high",
"ecosystem": "npm",
"cvss_score": 7.5,
"advisory_ids": [
"GHSA-c2qf-rxjj-qqgw"
],
"fixed_version": "7.5.2",
"advisory_count": 1,
"oldest_advisory_days": 1126
},
{
"name": "semver",
"direct": true,
"version": "7.3.5",
"severity": "high",
"ecosystem": "npm",
"cvss_score": 7.5,
"advisory_ids": [
"GHSA-c2qf-rxjj-qqgw"
],
"fixed_version": "7.5.2",
"advisory_count": 1,
"oldest_advisory_days": 1126
},
{
"name": "brace-expansion",
"direct": false,
"version": "1.1.11",
"severity": "high",
"ecosystem": "npm",
"cvss_score": 7.5,
"advisory_ids": [
"GHSA-3jxr-9vmj-r5cp",
"GHSA-f886-m6hf-6m8v",
"GHSA-v6h2-p8h4-qcjw"
],
"fixed_version": "5.0.7",
"advisory_count": 3,
"oldest_advisory_days": 407
},
{
"name": "braces",
"direct": false,
"version": "3.0.2",
"severity": "high",
"ecosystem": "npm",
"cvss_score": 7.5,
"advisory_ids": [
"GHSA-grv7-fg5c-xmjg"
],
"fixed_version": "3.0.3",
"advisory_count": 1,
"oldest_advisory_days": 798
},
{
"name": "fast-uri",
"direct": false,
"version": "3.0.6",
"severity": "high",
"ecosystem": "npm",
"cvss_score": 7.5,
"advisory_ids": [
"GHSA-4c8g-83qw-93j6",
"GHSA-q3j6-qgpj-74h6",
"GHSA-v2hh-gcrm-f6hx",
"GHSA-v39h-62p7-jpjc"
],
"fixed_version": "4.1.1",
"advisory_count": 4,
"oldest_advisory_days": 74
},
{
"name": "js-yaml",
"direct": false,
"version": "3.14.1",
"severity": "high",
"ecosystem": "npm",
"cvss_score": 7.5,
"advisory_ids": [
"GHSA-52cp-r559-cp3m",
"GHSA-h67p-54hq-rp68",
"GHSA-mh29-5h37-fv8m"
],
"fixed_version": "4.3.0",
"advisory_count": 3,
"oldest_advisory_days": 249
},
{
"name": "js-yaml",
"direct": false,
"version": "4.1.0",
"severity": "high",
"ecosystem": "npm",
"cvss_score": 7.5,
"advisory_ids": [
"GHSA-52cp-r559-cp3m",
"GHSA-h67p-54hq-rp68",
"GHSA-mh29-5h37-fv8m"
],
"fixed_version": "4.3.0",
"advisory_count": 3,
"oldest_advisory_days": 249
},
{
"name": "js-yaml",
"direct": false,
"version": "4.1.1",
"severity": "high",
"ecosystem": "npm",
"cvss_score": 7.5,
"advisory_ids": [
"GHSA-52cp-r559-cp3m",
"GHSA-h67p-54hq-rp68"
],
"fixed_version": "4.3.0",
"advisory_count": 2,
"oldest_advisory_days": 36
},
{
"name": "lodash",
"direct": false,
"version": "4.17.23",
"severity": "high",
"ecosystem": "npm",
"cvss_score": 8.1,
"advisory_ids": [
"GHSA-f23m-r3pf-42rh",
"GHSA-r5fr-rjxr-66jc"
],
"fixed_version": "4.18.0",
"advisory_count": 2,
"oldest_advisory_days": 111
},
{
"name": "minimatch",
"direct": false,
"version": "3.1.2",
"severity": "high",
"ecosystem": "npm",
"cvss_score": 7.5,
"advisory_ids": [
"GHSA-23c5-xmqv-rm74",
"GHSA-3ppc-4f35-3m26",
"GHSA-7r86-cg39-jmmj"
],
"fixed_version": "10.2.3",
"advisory_count": 3,
"oldest_advisory_days": 153
},
{
"name": "minimatch",
"direct": false,
"version": "4.2.1",
"severity": "high",
"ecosystem": "npm",
"cvss_score": 7.5,
"advisory_ids": [
"GHSA-23c5-xmqv-rm74",
"GHSA-3ppc-4f35-3m26",
"GHSA-7r86-cg39-jmmj"
],
"fixed_version": "10.2.3",
"advisory_count": 3,
"oldest_advisory_days": 153
},
{
"name": "picomatch",
"direct": false,
"version": "2.3.0",
"severity": "high",
"ecosystem": "npm",
"cvss_score": 7.5,
"advisory_ids": [
"GHSA-3v7f-55p6-f55p",
"GHSA-c2c7-rcm5-vvqj"
],
"fixed_version": "4.0.4",
"advisory_count": 2,
"oldest_advisory_days": 118
},
{
"name": "picomatch",
"direct": false,
"version": "4.0.3",
"severity": "high",
"ecosystem": "npm",
"cvss_score": 7.5,
"advisory_ids": [
"GHSA-3v7f-55p6-f55p",
"GHSA-c2c7-rcm5-vvqj"
],
"fixed_version": "4.0.4",
"advisory_count": 2,
"oldest_advisory_days": 118
},
{
"name": "serialize-javascript",
"direct": false,
"version": "6.0.0",
"severity": "high",
"ecosystem": "npm",
"cvss_score": 8.1,
"advisory_ids": [
"GHSA-5c6j-r48x-rmvq",
"GHSA-76p7-773f-r4q5",
"GHSA-qj8w-gfj5-8c6v"
],
"fixed_version": "7.0.5",
"advisory_count": 3,
"oldest_advisory_days": 526
},
{
"name": "serialize-javascript",
"direct": false,
"version": "6.0.2",
"severity": "high",
"ecosystem": "npm",
"cvss_score": 8.1,
"advisory_ids": [
"GHSA-5c6j-r48x-rmvq",
"GHSA-qj8w-gfj5-8c6v"
],
"fixed_version": "7.0.5",
"advisory_count": 2,
"oldest_advisory_days": 144
},
{
"name": "ajv",
"direct": true,
"version": "6.12.3",
"severity": "moderate",
"ecosystem": "npm",
"cvss_score": 5.3,
"advisory_ids": [
"GHSA-2g4f-4pwh-qvx6"
],
"fixed_version": "8.18.0",
"advisory_count": 1,
"oldest_advisory_days": 160
},
{
"name": "ajv",
"direct": true,
"version": "6.12.6",
"severity": "moderate",
"ecosystem": "npm",
"cvss_score": 5.3,
"advisory_ids": [
"GHSA-2g4f-4pwh-qvx6"
],
"fixed_version": "8.18.0",
"advisory_count": 1,
"oldest_advisory_days": 160
},
{
"name": "ajv",
"direct": true,
"version": "8.17.1",
"severity": "moderate",
"ecosystem": "npm",
"cvss_score": 5.3,
"advisory_ids": [
"GHSA-2g4f-4pwh-qvx6"
],
"fixed_version": "8.18.0",
"advisory_count": 1,
"oldest_advisory_days": 160
},
{
"name": "ajv",
"direct": true,
"version": "8.6.2",
"severity": "moderate",
"ecosystem": "npm",
"cvss_score": 5.3,
"advisory_ids": [
"GHSA-2g4f-4pwh-qvx6"
],
"fixed_version": "8.18.0",
"advisory_count": 1,
"oldest_advisory_days": 160
},
{
"name": "diff",
"direct": false,
"version": "5.0.0",
"severity": "moderate",
"ecosystem": "npm",
"cvss_score": 5.3,
"advisory_ids": [
"GHSA-73rr-hh4g-fpgx"
],
"fixed_version": "8.0.3",
"advisory_count": 1,
"oldest_advisory_days": 188
},
{
"name": "nanoid",
"direct": false,
"version": "3.3.1",
"severity": "moderate",
"ecosystem": "npm",
"cvss_score": 4.3,
"advisory_ids": [
"GHSA-mwcw-c2x4-8c55"
],
"fixed_version": "5.0.9",
"advisory_count": 1,
"oldest_advisory_days": 590
},
{
"name": "word-wrap",
"direct": false,
"version": "1.2.3",
"severity": "moderate",
"ecosystem": "npm",
"cvss_score": 5.3,
"advisory_ids": [
"GHSA-j8xg-fqg3-53r7"
],
"fixed_version": "1.2.4",
"advisory_count": 1,
"oldest_advisory_days": 1125
},
{
"name": "webpack",
"direct": false,
"version": "5.98.0",
"severity": "low",
"ecosystem": "npm",
"cvss_score": 3.7,
"advisory_ids": [
"GHSA-38r7-794h-5758",
"GHSA-8fgc-7cc6-rx7x"
],
"fixed_version": "5.104.1",
"advisory_count": 2,
"oldest_advisory_days": 166
}
],
"collected": true,
"malicious": [],
"truncated": false,
"by_severity": {
"low": 1,
"high": 15,
"critical": 1,
"moderate": 7
},
"advisory_count": 46,
"affected_count": 24,
"assessed_count": 417,
"malicious_count": 0,
"assessed_package": null,
"unassessed_count": 0,
"direct_affected_count": 6
},
"ecosystems": [
"npm"
],
"dependencies": [
{
"name": "ajv",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^6.1.1"
},
{
"name": "buffer",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^6.0.3"
},
{
"name": "debug",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "4.4.3"
},
{
"name": "image-size",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^0.6.2"
},
{
"name": "semver",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^5.7.0"
},
{
"name": "tinycolor2",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^1.4.1"
}
],
"all_dependencies": {
"error": null,
"source": "github-sbom",
"packages": [
{
"name": "ajv",
"direct": true,
"version": "6.12.3",
"ecosystem": "npm"
},
{
"name": "ajv",
"direct": true,
"version": "6.12.6",
"ecosystem": "npm"
},
{
"name": "ajv",
"direct": true,
"version": "8.17.1",
"ecosystem": "npm"
},
{
"name": "ajv",
"direct": true,
"version": "8.6.2",
"ecosystem": "npm"
},
{
"name": "buffer",
"direct": true,
"version": "6.0.3",
"ecosystem": "npm"
},
{
"name": "debug",
"direct": true,
"version": "2.6.9",
"ecosystem": "npm"
},
{
"name": "debug",
"direct": true,
"version": "3.2.7",
"ecosystem": "npm"
},
{
"name": "debug",
"direct": true,
"version": "4.3.3",
"ecosystem": "npm"
},
{
"name": "debug",
"direct": true,
"version": "4.4.3",
"ecosystem": "npm"
},
{
"name": "image-size",
"direct": true,
"version": "0.6.2",
"ecosystem": "npm"
},
{
"name": "semver",
"direct": true,
"version": "5.7.2",
"ecosystem": "npm"
},
{
"name": "semver",
"direct": true,
"version": "6.3.0",
"ecosystem": "npm"
},
{
"name": "semver",
"direct": true,
"version": "7.3.5",
"ecosystem": "npm"
},
{
"name": "tinycolor2",
"direct": true,
"version": "1.4.1",
"ecosystem": "npm"
},
{
"name": "@anthropic-ai/sdk",
"direct": false,
"version": "0.91.1",
"ecosystem": "npm"
},
{
"name": "@apidevtools/json-schema-ref-parser",
"direct": false,
"version": "11.9.3",
"ecosystem": "npm"
},
{
"name": "@babel/code-frame",
"direct": false,
"version": "7.12.11",
"ecosystem": "npm"
},
{
"name": "@babel/code-frame",
"direct": false,
"version": "7.22.13",
"ecosystem": "npm"
},
{
"name": "@babel/generator",
"direct": false,
"version": "7.23.0",
"ecosystem": "npm"
},
{
"name": "@babel/helper-environment-visitor",
"direct": false,
"version": "7.22.20",
"ecosystem": "npm"
},
{
"name": "@babel/helper-function-name",
"direct": false,
"version": "7.23.0",
"ecosystem": "npm"
},
{
"name": "@babel/helper-hoist-variables",
"direct": false,
"version": "7.22.5",
"ecosystem": "npm"
},
{
"name": "@babel/helper-split-export-declaration",
"direct": false,
"version": "7.22.6",
"ecosystem": "npm"
},
{
"name": "@babel/helper-string-parser",
"direct": false,
"version": "7.22.5",
"ecosystem": "npm"
},
{
"name": "@babel/helper-validator-identifier",
"direct": false,
"version": "7.14.8",
"ecosystem": "npm"
},
{
"name": "@babel/helper-validator-identifier",
"direct": false,
"version": "7.22.20",
"ecosystem": "npm"
},
{
"name": "@babel/highlight",
"direct": false,
"version": "7.14.5",
"ecosystem": "npm"
},
{
"name": "@babel/highlight",
"direct": false,
"version": "7.22.20",
"ecosystem": "npm"
},
{
"name": "@babel/parser",
"direct": false,
"version": "7.14.8",
"ecosystem": "npm"
},
{
"name": "@babel/parser",
"direct": false,
"version": "7.23.0",
"ecosystem": "npm"
},
{
"name": "@babel/runtime",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/template",
"direct": false,
"version": "7.22.15",
"ecosystem": "npm"
},
{
"name": "@babel/traverse",
"direct": false,
"version": "7.23.2",
"ecosystem": "npm"
},
{
"name": "@babel/types",
"direct": false,
"version": "7.14.8",
"ecosystem": "npm"
},
{
"name": "@babel/types",
"direct": false,
"version": "7.23.0",
"ecosystem": "npm"
},
{
"name": "@discoveryjs/json-ext",
"direct": false,
"version": "0.5.3",
"ecosystem": "npm"
},
{
"name": "@eslint/eslintrc",
"direct": false,
"version": "0.4.3",
"ecosystem": "npm"
},
{
"name": "@humanwhocodes/config-array",
"direct": false,
"version": "0.5.0",
"ecosystem": "npm"
},
{
"name": "@humanwhocodes/object-schema",
"direct": false,
"version": "1.2.0",
"ecosystem": "npm"
},
{
"name": "@jridgewell/gen-mapping",
"direct": false,
"version": "0.3.8",
"ecosystem": "npm"
},
{
"name": "@jridgewell/resolve-uri",
"direct": false,
"version": "3.1.1",
"ecosystem": "npm"
},
{
"name": "@jridgewell/set-array",
"direct": false,
"version": "1.2.1",
"ecosystem": "npm"
},
{
"name": "@jridgewell/source-map",
"direct": false,
"version": "0.3.6",
"ecosystem": "npm"
},
{
"name": "@jridgewell/sourcemap-codec",
"direct": false,
"version": "1.4.15",
"ecosystem": "npm"
},
{
"name": "@jridgewell/trace-mapping",
"direct": false,
"version": "0.3.25",
"ecosystem": "npm"
},
{
"name": "@jsdevtools/ono",
"direct": false,
"version": "7.1.3",
"ecosystem": "npm"
},
{
"name": "@types/eslint",
"direct": false,
"version": "9.6.1",
"ecosystem": "npm"
},
{
"name": "@types/eslint-scope",
"direct": false,
"version": "3.7.7",
"ecosystem": "npm"
},
{
"name": "@types/estree",
"direct": false,
"version": "1.0.7",
"ecosystem": "npm"
},
{
"name": "@types/json-schema",
"direct": false,
"version": "7.0.15",
"ecosystem": "npm"
},
{
"name": "@types/lodash",
"direct": false,
"version": "4.17.24",
"ecosystem": "npm"
},
{
"name": "@types/node",
"direct": false,
"version": "18.19.130",
"ecosystem": "npm"
},
{
"name": "@types/node",
"direct": false,
"version": "22.13.13",
"ecosystem": "npm"
},
{
"name": "@types/node-fetch",
"direct": false,
"version": "2.6.13",
"ecosystem": "npm"
},
{
"name": "@ungap/promise-all-settled",
"direct": false,
"version": "1.1.2",
"ecosystem": "npm"
},
{
"name": "@webassemblyjs/ast",
"direct": false,
"version": "1.14.1",
"ecosystem": "npm"
},
{
"name": "@webassemblyjs/floating-point-hex-parser",
"direct": false,
"version": "1.13.2",
"ecosystem": "npm"
},
{
"name": "@webassemblyjs/helper-api-error",
"direct": false,
"version": "1.13.2",
"ecosystem": "npm"
},
{
"name": "@webassemblyjs/helper-buffer",
"direct": false,
"version": "1.14.1",
"ecosystem": "npm"
},
{
"name": "@webassemblyjs/helper-numbers",
"direct": false,
"version": "1.13.2",
"ecosystem": "npm"
},
{
"name": "@webassemblyjs/helper-wasm-bytecode",
"direct": false,
"version": "1.13.2",
"ecosystem": "npm"
},
{
"name": "@webassemblyjs/helper-wasm-section",
"direct": false,
"version": "1.14.1",
"ecosystem": "npm"
},
{
"name": "@webassemblyjs/ieee754",
"direct": false,
"version": "1.13.2",
"ecosystem": "npm"
},
{
"name": "@webassemblyjs/leb128",
"direct": false,
"version": "1.13.2",
"ecosystem": "npm"
},
{
"name": "@webassemblyjs/utf8",
"direct": false,
"version": "1.13.2",
"ecosystem": "npm"
},
{
"name": "@webassemblyjs/wasm-edit",
"direct": false,
"version": "1.14.1",
"ecosystem": "npm"
},
{
"name": "@webassemblyjs/wasm-gen",
"direct": false,
"version": "1.14.1",
"ecosystem": "npm"
},
{
"name": "@webassemblyjs/wasm-opt",
"direct": false,
"version": "1.14.1",
"ecosystem": "npm"
},
{
"name": "@webassemblyjs/wasm-parser",
"direct": false,
"version": "1.14.1",
"ecosystem": "npm"
},
{
"name": "@webassemblyjs/wast-printer",
"direct": false,
"version": "1.14.1",
"ecosystem": "npm"
},
{
"name": "@webpack-cli/configtest",
"direct": false,
"version": "2.1.1",
"ecosystem": "npm"
},
{
"name": "@webpack-cli/info",
"direct": false,
"version": "2.0.2",
"ecosystem": "npm"
},
{
"name": "@webpack-cli/serve",
"direct": false,
"version": "2.0.5",
"ecosystem": "npm"
},
{
"name": "@xtuc/ieee754",
"direct": false,
"version": "1.2.0",
"ecosystem": "npm"
},
{
"name": "@xtuc/long",
"direct": false,
"version": "4.2.2",
"ecosystem": "npm"
},
{
"name": "abort-controller",
"direct": false,
"version": "3.0.0",
"ecosystem": "npm"
},
{
"name": "acorn",
"direct": false,
"version": "7.4.1",
"ecosystem": "npm"
},
{
"name": "acorn",
"direct": false,
"version": "8.14.1",
"ecosystem": "npm"
},
{
"name": "acorn-jsx",
"direct": false,
"version": "5.3.2",
"ecosystem": "npm"
},
{
"name": "agentkeepalive",
"direct": false,
"version": "4.6.0",
"ecosystem": "npm"
},
{
"name": "ajv-formats",
"direct": false,
"version": "2.1.1",
"ecosystem": "npm"
},
{
"name": "ajv-keywords",
"direct": false,
"version": "5.1.0",
"ecosystem": "npm"
},
{
"name": "ansi-colors",
"direct": false,
"version": "4.1.1",
"ecosystem": "npm"
},
{
"name": "ansi-regex",
"direct": false,
"version": "5.0.1",
"ecosystem": "npm"
},
{
"name": "ansi-styles",
"direct": false,
"version": "3.2.1",
"ecosystem": "npm"
},
{
"name": "ansi-styles",
"direct": false,
"version": "4.3.0",
"ecosystem": "npm"
},
{
"name": "anymatch",
"direct": false,
"version": "3.1.2",
"ecosystem": "npm"
},
{
"name": "argparse",
"direct": false,
"version": "1.0.10",
"ecosystem": "npm"
},
{
"name": "argparse",
"direct": false,
"version": "2.0.1",
"ecosystem": "npm"
},
{
"name": "array-includes",
"direct": false,
"version": "3.1.3",
"ecosystem": "npm"
},
{
"name": "array.prototype.flat",
"direct": false,
"version": "1.2.4",
"ecosystem": "npm"
},
{
"name": "astral-regex",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "asynckit",
"direct": false,
"version": "0.4.0",
"ecosystem": "npm"
},
{
"name": "babel-eslint",
"direct": false,
"version": "10.1.0",
"ecosystem": "npm"
},
{
"name": "balanced-match",
"direct": false,
"version": "1.0.0",
"ecosystem": "npm"
},
{
"name": "base64-js",
"direct": false,
"version": "1.5.1",
"ecosystem": "npm"
},
{
"name": "binary-extensions",
"direct": false,
"version": "2.2.0",
"ecosystem": "npm"
},
{
"name": "brace-expansion",
"direct": false,
"version": "1.1.11",
"ecosystem": "npm"
},
{
"name": "braces",
"direct": false,
"version": "3.0.2",
"ecosystem": "npm"
},
{
"name": "browser-stdout",
"direct": false,
"version": "1.3.1",
"ecosystem": "npm"
},
{
"name": "browserslist",
"direct": false,
"version": "4.24.4",
"ecosystem": "npm"
},
{
"name": "buffer-from",
"direct": false,
"version": "1.1.2",
"ecosystem": "npm"
},
{
"name": "call-bind",
"direct": false,
"version": "1.0.8",
"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": "6.3.0",
"ecosystem": "npm"
},
{
"name": "caniuse-lite",
"direct": false,
"version": "1.0.30001707",
"ecosystem": "npm"
},
{
"name": "chalk",
"direct": false,
"version": "2.4.1",
"ecosystem": "npm"
},
{
"name": "chalk",
"direct": false,
"version": "2.4.2",
"ecosystem": "npm"
},
{
"name": "chalk",
"direct": false,
"version": "4.1.1",
"ecosystem": "npm"
},
{
"name": "chalk",
"direct": false,
"version": "4.1.2",
"ecosystem": "npm"
},
{
"name": "chokidar",
"direct": false,
"version": "3.5.3",
"ecosystem": "npm"
},
{
"name": "chrome-trace-event",
"direct": false,
"version": "1.0.3",
"ecosystem": "npm"
},
{
"name": "cliui",
"direct": false,
"version": "7.0.4",
"ecosystem": "npm"
},
{
"name": "clone-deep",
"direct": false,
"version": "4.0.1",
"ecosystem": "npm"
},
{
"name": "color-convert",
"direct": false,
"version": "1.9.3",
"ecosystem": "npm"
},
{
"name": "color-convert",
"direct": false,
"version": "2.0.1",
"ecosystem": "npm"
},
{
"name": "color-name",
"direct": false,
"version": "1.1.3",
"ecosystem": "npm"
},
{
"name": "color-name",
"direct": false,
"version": "1.1.4",
"ecosystem": "npm"
},
{
"name": "colorette",
"direct": false,
"version": "2.0.20",
"ecosystem": "npm"
},
{
"name": "combined-stream",
"direct": false,
"version": "1.0.8",
"ecosystem": "npm"
},
{
"name": "commander",
"direct": false,
"version": "10.0.1",
"ecosystem": "npm"
},
{
"name": "commander",
"direct": false,
"version": "2.20.3",
"ecosystem": "npm"
},
{
"name": "concat-map",
"direct": false,
"version": "0.0.1",
"ecosystem": "npm"
},
{
"name": "confusing-browser-globals",
"direct": false,
"version": "1.0.10",
"ecosystem": "npm"
},
{
"name": "cross-spawn",
"direct": false,
"version": "7.0.6",
"ecosystem": "npm"
},
{
"name": "decamelize",
"direct": false,
"version": "4.0.0",
"ecosystem": "npm"
},
{
"name": "deep-is",
"direct": false,
"version": "0.1.3",
"ecosystem": "npm"
},
{
"name": "define-data-property",
"direct": false,
"version": "1.1.4",
"ecosystem": "npm"
},
{
"name": "define-properties",
"direct": false,
"version": "1.2.1",
"ecosystem": "npm"
},
{
"name": "delayed-stream",
"direct": false,
"version": "1.0.0",
"ecosystem": "npm"
},
{
"name": "diff",
"direct": false,
"version": "5.0.0",
"ecosystem": "npm"
},
{
"name": "doctrine",
"direct": false,
"version": "2.1.0",
"ecosystem": "npm"
},
{
"name": "doctrine",
"direct": false,
"version": "3.0.0",
"ecosystem": "npm"
},
{
"name": "dunder-proto",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "electron-to-chromium",
"direct": false,
"version": "1.5.123",
"ecosystem": "npm"
},
{
"name": "emoji-regex",
"direct": false,
"version": "8.0.0",
"ecosystem": "npm"
},
{
"name": "enhanced-resolve",
"direct": false,
"version": "5.18.1",
"ecosystem": "npm"
},
{
"name": "enquirer",
"direct": false,
"version": "2.3.6",
"ecosystem": "npm"
},
{
"name": "envinfo",
"direct": false,
"version": "7.14.0",
"ecosystem": "npm"
},
{
"name": "error-ex",
"direct": false,
"version": "1.3.2",
"ecosystem": "npm"
},
{
"name": "es-abstract",
"direct": false,
"version": "1.18.3",
"ecosystem": "npm"
},
{
"name": "es-define-property",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "es-errors",
"direct": false,
"version": "1.3.0",
"ecosystem": "npm"
},
{
"name": "es-module-lexer",
"direct": false,
"version": "1.6.0",
"ecosystem": "npm"
},
{
"name": "es-object-atoms",
"direct": false,
"version": "1.1.1",
"ecosystem": "npm"
},
{
"name": "es-set-tostringtag",
"direct": false,
"version": "2.1.0",
"ecosystem": "npm"
},
{
"name": "es-to-primitive",
"direct": false,
"version": "1.2.1",
"ecosystem": "npm"
},
{
"name": "escalade",
"direct": false,
"version": "3.2.0",
"ecosystem": "npm"
},
{
"name": "escape-string-regexp",
"direct": false,
"version": "1.0.5",
"ecosystem": "npm"
},
{
"name": "escape-string-regexp",
"direct": false,
"version": "4.0.0",
"ecosystem": "npm"
},
{
"name": "eslint",
"direct": false,
"version": "7.31.0",
"ecosystem": "npm"
},
{
"name": "eslint-config-airbnb-base",
"direct": false,
"version": "14.2.1",
"ecosystem": "npm"
},
{
"name": "eslint-config-athom",
"direct": false,
"version": "2.1.1",
"ecosystem": "npm"
},
{
"name": "eslint-import-resolver-node",
"direct": false,
"version": "0.3.4",
"ecosystem": "npm"
},
{
"name": "eslint-module-utils",
"direct": false,
"version": "2.6.1",
"ecosystem": "npm"
},
{
"name": "eslint-plugin-es",
"direct": false,
"version": "3.0.1",
"ecosystem": "npm"
},
{
"name": "eslint-plugin-import",
"direct": false,
"version": "2.23.4",
"ecosystem": "npm"
},
{
"name": "eslint-plugin-mocha",
"direct": false,
"version": "6.3.0",
"ecosystem": "npm"
},
{
"name": "eslint-plugin-node",
"direct": false,
"version": "11.1.0",
"ecosystem": "npm"
},
{
"name": "eslint-scope",
"direct": false,
"version": "5.1.1",
"ecosystem": "npm"
},
{
"name": "eslint-utils",
"direct": false,
"version": "2.1.0",
"ecosystem": "npm"
},
{
"name": "eslint-visitor-keys",
"direct": false,
"version": "1.3.0",
"ecosystem": "npm"
},
{
"name": "eslint-visitor-keys",
"direct": false,
"version": "2.1.0",
"ecosystem": "npm"
},
{
"name": "espree",
"direct": false,
"version": "7.3.1",
"ecosystem": "npm"
},
{
"name": "esprima",
"direct": false,
"version": "4.0.1",
"ecosystem": "npm"
},
{
"name": "esquery",
"direct": false,
"version": "1.4.0",
"ecosystem": "npm"
},
{
"name": "esrecurse",
"direct": false,
"version": "4.3.0",
"ecosystem": "npm"
},
{
"name": "estraverse",
"direct": false,
"version": "4.2.0",
"ecosystem": "npm"
},
{
"name": "estraverse",
"direct": false,
"version": "5.2.0",
"ecosystem": "npm"
},
{
"name": "estraverse",
"direct": false,
"version": "5.3.0",
"ecosystem": "npm"
},
{
"name": "esutils",
"direct": false,
"version": "2.0.3",
"ecosystem": "npm"
},
{
"name": "event-target-shim",
"direct": false,
"version": "5.0.1",
"ecosystem": "npm"
},
{
"name": "events",
"direct": false,
"version": "3.3.0",
"ecosystem": "npm"
},
{
"name": "fast-deep-equal",
"direct": false,
"version": "3.1.3",
"ecosystem": "npm"
},
{
"name": "fast-json-stable-stringify",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "fast-levenshtein",
"direct": false,
"version": "2.0.6",
"ecosystem": "npm"
},
{
"name": "fast-uri",
"direct": false,
"version": "3.0.6",
"ecosystem": "npm"
},
{
"name": "fastest-levenshtein",
"direct": false,
"version": "1.0.12",
"ecosystem": "npm"
},
{
"name": "fdir",
"direct": false,
"version": "6.5.0",
"ecosystem": "npm"
},
{
"name": "file-entry-cache",
"direct": false,
"version": "6.0.1",
"ecosystem": "npm"
},
{
"name": "fill-range",
"direct": false,
"version": "7.0.1",
"ecosystem": "npm"
},
{
"name": "find-up",
"direct": false,
"version": "2.1.0",
"ecosystem": "npm"
},
{
"name": "find-up",
"direct": false,
"version": "4.1.0",
"ecosystem": "npm"
},
{
"name": "find-up",
"direct": false,
"version": "5.0.0",
"ecosystem": "npm"
},
{
"name": "flat",
"direct": false,
"version": "5.0.2",
"ecosystem": "npm"
},
{
"name": "flat-cache",
"direct": false,
"version": "3.0.4",
"ecosystem": "npm"
},
{
"name": "flatted",
"direct": false,
"version": "3.2.1",
"ecosystem": "npm"
},
{
"name": "form-data",
"direct": false,
"version": "4.0.6",
"ecosystem": "npm"
},
{
"name": "form-data-encoder",
"direct": false,
"version": "1.7.2",
"ecosystem": "npm"
},
{
"name": "formdata-node",
"direct": false,
"version": "4.4.1",
"ecosystem": "npm"
},
{
"name": "fs.realpath",
"direct": false,
"version": "1.0.0",
"ecosystem": "npm"
},
{
"name": "fsevents",
"direct": false,
"version": "2.3.2",
"ecosystem": "npm"
},
{
"name": "function-bind",
"direct": false,
"version": "1.1.2",
"ecosystem": "npm"
},
{
"name": "functional-red-black-tree",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "get-caller-file",
"direct": false,
"version": "2.0.5",
"ecosystem": "npm"
},
{
"name": "get-intrinsic",
"direct": false,
"version": "1.3.0",
"ecosystem": "npm"
},
{
"name": "get-proto",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "glob",
"direct": false,
"version": "7.1.3",
"ecosystem": "npm"
},
{
"name": "glob",
"direct": false,
"version": "7.2.0",
"ecosystem": "npm"
},
{
"name": "glob-parent",
"direct": false,
"version": "5.1.2",
"ecosystem": "npm"
},
{
"name": "glob-to-regexp",
"direct": false,
"version": "0.4.1",
"ecosystem": "npm"
},
{
"name": "globals",
"direct": false,
"version": "11.12.0",
"ecosystem": "npm"
},
{
"name": "globals",
"direct": false,
"version": "13.10.0",
"ecosystem": "npm"
},
{
"name": "gopd",
"direct": false,
"version": "1.2.0",
"ecosystem": "npm"
},
{
"name": "graceful-fs",
"direct": false,
"version": "4.2.11",
"ecosystem": "npm"
},
{
"name": "growl",
"direct": false,
"version": "1.10.5",
"ecosystem": "npm"
},
{
"name": "has",
"direct": false,
"version": "1.0.3",
"ecosystem": "npm"
},
{
"name": "has-bigints",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "has-flag",
"direct": false,
"version": "3.0.0",
"ecosystem": "npm"
},
{
"name": "has-flag",
"direct": false,
"version": "4.0.0",
"ecosystem": "npm"
},
{
"name": "has-property-descriptors",
"direct": false,
"version": "1.0.2",
"ecosystem": "npm"
},
{
"name": "has-symbols",
"direct": false,
"version": "1.1.0",
"ecosystem": "npm"
},
{
"name": "has-tostringtag",
"direct": false,
"version": "1.0.2",
"ecosystem": "npm"
},
{
"name": "hasown",
"direct": false,
"version": "2.0.4",
"ecosystem": "npm"
},
{
"name": "he",
"direct": false,
"version": "1.2.0",
"ecosystem": "npm"
},
{
"name": "hosted-git-info",
"direct": false,
"version": "2.8.9",
"ecosystem": "npm"
},
{
"name": "humanize-ms",
"direct": false,
"version": "1.2.1",
"ecosystem": "npm"
},
{
"name": "ieee754",
"direct": false,
"version": "1.2.1",
"ecosystem": "npm"
},
{
"name": "ignore",
"direct": false,
"version": "4.0.6",
"ecosystem": "npm"
},
{
"name": "ignore",
"direct": false,
"version": "5.1.8",
"ecosystem": "npm"
},
{
"name": "import-fresh",
"direct": false,
"version": "3.3.0",
"ecosystem": "npm"
},
{
"name": "import-local",
"direct": false,
"version": "3.0.2",
"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": "interpret",
"direct": false,
"version": "3.1.1",
"ecosystem": "npm"
},
{
"name": "is-arrayish",
"direct": false,
"version": "0.2.1",
"ecosystem": "npm"
},
{
"name": "is-bigint",
"direct": false,
"version": "1.0.2",
"ecosystem": "npm"
},
{
"name": "is-binary-path",
"direct": false,
"version": "2.1.0",
"ecosystem": "npm"
},
{
"name": "is-boolean-object",
"direct": false,
"version": "1.1.1",
"ecosystem": "npm"
},
{
"name": "is-callable",
"direct": false,
"version": "1.2.7",
"ecosystem": "npm"
},
{
"name": "is-core-module",
"direct": false,
"version": "2.5.0",
"ecosystem": "npm"
},
{
"name": "is-date-object",
"direct": false,
"version": "1.0.4",
"ecosystem": "npm"
},
{
"name": "is-extglob",
"direct": false,
"version": "2.1.1",
"ecosystem": "npm"
},
{
"name": "is-fullwidth-code-point",
"direct": false,
"version": "3.0.0",
"ecosystem": "npm"
},
{
"name": "is-glob",
"direct": false,
"version": "4.0.3",
"ecosystem": "npm"
},
{
"name": "is-negative-zero",
"direct": false,
"version": "2.0.1",
"ecosystem": "npm"
},
{
"name": "is-number",
"direct": false,
"version": "7.0.0",
"ecosystem": "npm"
},
{
"name": "is-number-object",
"direct": false,
"version": "1.0.5",
"ecosystem": "npm"
},
{
"name": "is-plain-obj",
"direct": false,
"version": "2.1.0",
"ecosystem": "npm"
},
{
"name": "is-plain-object",
"direct": false,
"version": "2.0.4",
"ecosystem": "npm"
},
{
"name": "is-primitive",
"direct": false,
"version": "3.0.1",
"ecosystem": "npm"
},
{
"name": "is-regex",
"direct": false,
"version": "1.2.1",
"ecosystem": "npm"
},
{
"name": "is-string",
"direct": false,
"version": "1.0.6",
"ecosystem": "npm"
},
{
"name": "is-symbol",
"direct": false,
"version": "1.0.4",
"ecosystem": "npm"
},
{
"name": "is-unicode-supported",
"direct": false,
"version": "0.1.0",
"ecosystem": "npm"
},
{
"name": "isexe",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "isobject",
"direct": false,
"version": "3.0.1",
"ecosystem": "npm"
},
{
"name": "jest-worker",
"direct": false,
"version": "27.5.1",
"ecosystem": "npm"
},
{
"name": "js-tokens",
"direct": false,
"version": "4.0.0",
"ecosystem": "npm"
},
{
"name": "js-yaml",
"direct": false,
"version": "3.14.1",
"ecosystem": "npm"
},
{
"name": "js-yaml",
"direct": false,
"version": "4.1.0",
"ecosystem": "npm"
},
{
"name": "js-yaml",
"direct": false,
"version": "4.1.1",
"ecosystem": "npm"
},
{
"name": "jsesc",
"direct": false,
"version": "2.5.2",
"ecosystem": "npm"
},
{
"name": "json-parse-better-errors",
"direct": false,
"version": "1.0.2",
"ecosystem": "npm"
},
{
"name": "json-parse-even-better-errors",
"direct": false,
"version": "2.3.1",
"ecosystem": "npm"
},
{
"name": "json-schema-to-ts",
"direct": false,
"version": "3.1.1",
"ecosystem": "npm"
},
{
"name": "json-schema-to-typescript",
"direct": false,
"version": "15.0.4",
"ecosystem": "npm"
},
{
"name": "json-schema-traverse",
"direct": false,
"version": "0.4.1",
"ecosystem": "npm"
},
{
"name": "json-schema-traverse",
"direct": false,
"version": "1.0.0",
"ecosystem": "npm"
},
{
"name": "json-stable-stringify-without-jsonify",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "json5",
"direct": false,
"version": "2.2.3",
"ecosystem": "npm"
},
{
"name": "kind-of",
"direct": false,
"version": "6.0.3",
"ecosystem": "npm"
},
{
"name": "levn",
"direct": false,
"version": "0.4.1",
"ecosystem": "npm"
},
{
"name": "load-json-file",
"direct": false,
"version": "4.0.0",
"ecosystem": "npm"
},
{
"name": "loader-runner",
"direct": false,
"version": "4.3.0",
"ecosystem": "npm"
},
{
"name": "locate-path",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "locate-path",
"direct": false,
"version": "5.0.0",
"ecosystem": "npm"
},
{
"name": "locate-path",
"direct": false,
"version": "6.0.0",
"ecosystem": "npm"
},
{
"name": "lodash",
"direct": false,
"version": "4.17.23",
"ecosystem": "npm"
},
{
"name": "lodash.clonedeep",
"direct": false,
"version": "4.5.0",
"ecosystem": "npm"
},
{
"name": "lodash.merge",
"direct": false,
"version": "4.6.2",
"ecosystem": "npm"
},
{
"name": "lodash.truncate",
"direct": false,
"version": "4.4.2",
"ecosystem": "npm"
},
{
"name": "log-symbols",
"direct": false,
"version": "4.1.0",
"ecosystem": "npm"
},
{
"name": "lru-cache",
"direct": false,
"version": "6.0.0",
"ecosystem": "npm"
},
{
"name": "math-intrinsics",
"direct": false,
"version": "1.1.0",
"ecosystem": "npm"
},
{
"name": "merge-stream",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "mime-db",
"direct": false,
"version": "1.52.0",
"ecosystem": "npm"
},
{
"name": "mime-types",
"direct": false,
"version": "2.1.35",
"ecosystem": "npm"
},
{
"name": "minimatch",
"direct": false,
"version": "3.1.2",
"ecosystem": "npm"
},
{
"name": "minimatch",
"direct": false,
"version": "4.2.1",
"ecosystem": "npm"
},
{
"name": "minimist",
"direct": false,
"version": "1.2.8",
"ecosystem": "npm"
},
{
"name": "mocha",
"direct": false,
"version": "9.2.2",
"ecosystem": "npm"
},
{
"name": "mock-fs",
"direct": false,
"version": "5.1.2",
"ecosystem": "npm"
},
{
"name": "ms",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "ms",
"direct": false,
"version": "2.1.2",
"ecosystem": "npm"
},
{
"name": "ms",
"direct": false,
"version": "2.1.3",
"ecosystem": "npm"
},
{
"name": "nanoid",
"direct": false,
"version": "3.3.1",
"ecosystem": "npm"
},
{
"name": "natural-compare",
"direct": false,
"version": "1.4.0",
"ecosystem": "npm"
},
{
"name": "neo-async",
"direct": false,
"version": "2.6.2",
"ecosystem": "npm"
},
{
"name": "node-domexception",
"direct": false,
"version": "1.0.0",
"ecosystem": "npm"
},
{
"name": "node-fetch",
"direct": false,
"version": "2.7.0",
"ecosystem": "npm"
},
{
"name": "node-releases",
"direct": false,
"version": "2.0.19",
"ecosystem": "npm"
},
{
"name": "normalize-package-data",
"direct": false,
"version": "2.5.0",
"ecosystem": "npm"
},
{
"name": "normalize-path",
"direct": false,
"version": "3.0.0",
"ecosystem": "npm"
},
{
"name": "object-inspect",
"direct": false,
"version": "1.13.4",
"ecosystem": "npm"
},
{
"name": "object-keys",
"direct": false,
"version": "1.1.1",
"ecosystem": "npm"
},
{
"name": "object-path",
"direct": false,
"version": "0.11.8",
"ecosystem": "npm"
},
{
"name": "object.assign",
"direct": false,
"version": "4.1.7",
"ecosystem": "npm"
},
{
"name": "object.entries",
"direct": false,
"version": "1.1.4",
"ecosystem": "npm"
},
{
"name": "object.values",
"direct": false,
"version": "1.1.4",
"ecosystem": "npm"
},
{
"name": "once",
"direct": false,
"version": "1.4.0",
"ecosystem": "npm"
},
{
"name": "openai",
"direct": false,
"version": "4.104.0",
"ecosystem": "npm"
},
{
"name": "optionator",
"direct": false,
"version": "0.9.1",
"ecosystem": "npm"
},
{
"name": "p-limit",
"direct": false,
"version": "1.3.0",
"ecosystem": "npm"
},
{
"name": "p-limit",
"direct": false,
"version": "2.3.0",
"ecosystem": "npm"
},
{
"name": "p-limit",
"direct": false,
"version": "3.1.0",
"ecosystem": "npm"
},
{
"name": "p-locate",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "p-locate",
"direct": false,
"version": "4.1.0",
"ecosystem": "npm"
},
{
"name": "p-locate",
"direct": false,
"version": "5.0.0",
"ecosystem": "npm"
},
{
"name": "p-try",
"direct": false,
"version": "1.0.0",
"ecosystem": "npm"
},
{
"name": "p-try",
"direct": false,
"version": "2.2.0",
"ecosystem": "npm"
},
{
"name": "parent-module",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "parse-json",
"direct": false,
"version": "4.0.0",
"ecosystem": "npm"
},
{
"name": "path-exists",
"direct": false,
"version": "3.0.0",
"ecosystem": "npm"
},
{
"name": "path-exists",
"direct": false,
"version": "4.0.0",
"ecosystem": "npm"
},
{
"name": "path-is-absolute",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "path-key",
"direct": false,
"version": "3.1.1",
"ecosystem": "npm"
},
{
"name": "path-parse",
"direct": false,
"version": "1.0.7",
"ecosystem": "npm"
},
{
"name": "path-type",
"direct": false,
"version": "3.0.0",
"ecosystem": "npm"
},
{
"name": "picocolors",
"direct": false,
"version": "1.1.1",
"ecosystem": "npm"
},
{
"name": "picomatch",
"direct": false,
"version": "2.3.0",
"ecosystem": "npm"
},
{
"name": "picomatch",
"direct": false,
"version": "4.0.3",
"ecosystem": "npm"
},
{
"name": "pify",
"direct": false,
"version": "3.0.0",
"ecosystem": "npm"
},
{
"name": "pkg-dir",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "pkg-dir",
"direct": false,
"version": "4.2.0",
"ecosystem": "npm"
},
{
"name": "pkg-up",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "prelude-ls",
"direct": false,
"version": "1.2.1",
"ecosystem": "npm"
},
{
"name": "prettier",
"direct": false,
"version": "3.8.1",
"ecosystem": "npm"
},
{
"name": "progress",
"direct": false,
"version": "2.0.3",
"ecosystem": "npm"
},
{
"name": "punycode",
"direct": false,
"version": "2.1.1",
"ecosystem": "npm"
},
{
"name": "ramda",
"direct": false,
"version": "0.27.1",
"ecosystem": "npm"
},
{
"name": "randombytes",
"direct": false,
"version": "2.1.0",
"ecosystem": "npm"
},
{
"name": "read-pkg",
"direct": false,
"version": "3.0.0",
"ecosystem": "npm"
},
{
"name": "read-pkg-up",
"direct": false,
"version": "3.0.0",
"ecosystem": "npm"
},
{
"name": "readdirp",
"direct": false,
"version": "3.6.0",
"ecosystem": "npm"
},
{
"name": "rechoir",
"direct": false,
"version": "0.8.0",
"ecosystem": "npm"
},
{
"name": "regexpp",
"direct": false,
"version": "3.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.20.0",
"ecosystem": "npm"
},
{
"name": "resolve-cwd",
"direct": false,
"version": "3.0.0",
"ecosystem": "npm"
},
{
"name": "resolve-from",
"direct": false,
"version": "4.0.0",
"ecosystem": "npm"
},
{
"name": "resolve-from",
"direct": false,
"version": "5.0.0",
"ecosystem": "npm"
},
{
"name": "rimraf",
"direct": false,
"version": "3.0.2",
"ecosystem": "npm"
},
{
"name": "safe-buffer",
"direct": false,
"version": "5.1.2",
"ecosystem": "npm"
},
{
"name": "schema-utils",
"direct": false,
"version": "4.3.0",
"ecosystem": "npm"
},
{
"name": "serialize-javascript",
"direct": false,
"version": "6.0.0",
"ecosystem": "npm"
},
{
"name": "serialize-javascript",
"direct": false,
"version": "6.0.2",
"ecosystem": "npm"
},
{
"name": "set-function-length",
"direct": false,
"version": "1.2.2",
"ecosystem": "npm"
},
{
"name": "set-value",
"direct": false,
"version": "4.1.0",
"ecosystem": "npm"
},
{
"name": "shallow-clone",
"direct": false,
"version": "3.0.1",
"ecosystem": "npm"
},
{
"name": "shebang-command",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "shebang-regex",
"direct": false,
"version": "3.0.0",
"ecosystem": "npm"
},
{
"name": "slice-ansi",
"direct": false,
"version": "4.0.0",
"ecosystem": "npm"
},
{
"name": "source-map",
"direct": false,
"version": "0.6.1",
"ecosystem": "npm"
},
{
"name": "source-map-support",
"direct": false,
"version": "0.5.21",
"ecosystem": "npm"
},
{
"name": "spdx-correct",
"direct": false,
"version": "3.1.1",
"ecosystem": "npm"
},
{
"name": "spdx-exceptions",
"direct": false,
"version": "2.3.0",
"ecosystem": "npm"
},
{
"name": "spdx-expression-parse",
"direct": false,
"version": "3.0.1",
"ecosystem": "npm"
},
{
"name": "spdx-license-ids",
"direct": false,
"version": "3.0.9",
"ecosystem": "npm"
},
{
"name": "sprintf-js",
"direct": false,
"version": "1.0.3",
"ecosystem": "npm"
},
{
"name": "string-width",
"direct": false,
"version": "4.2.2",
"ecosystem": "npm"
},
{
"name": "string-width",
"direct": false,
"version": "4.2.3",
"ecosystem": "npm"
},
{
"name": "string.prototype.trimend",
"direct": false,
"version": "1.0.4",
"ecosystem": "npm"
},
{
"name": "string.prototype.trimstart",
"direct": false,
"version": "1.0.4",
"ecosystem": "npm"
},
{
"name": "strip-ansi",
"direct": false,
"version": "6.0.0",
"ecosystem": "npm"
},
{
"name": "strip-ansi",
"direct": false,
"version": "6.0.1",
"ecosystem": "npm"
},
{
"name": "strip-bom",
"direct": false,
"version": "3.0.0",
"ecosystem": "npm"
},
{
"name": "strip-json-comments",
"direct": false,
"version": "3.1.1",
"ecosystem": "npm"
},
{
"name": "supports-color",
"direct": false,
"version": "5.5.0",
"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": "table",
"direct": false,
"version": "6.7.1",
"ecosystem": "npm"
},
{
"name": "tapable",
"direct": false,
"version": "2.2.1",
"ecosystem": "npm"
},
{
"name": "terser",
"direct": false,
"version": "5.39.0",
"ecosystem": "npm"
},
{
"name": "terser-webpack-plugin",
"direct": false,
"version": "5.3.14",
"ecosystem": "npm"
},
{
"name": "text-table",
"direct": false,
"version": "0.2.0",
"ecosystem": "npm"
},
{
"name": "tinyglobby",
"direct": false,
"version": "0.2.15",
"ecosystem": "npm"
},
{
"name": "to-fast-properties",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "to-regex-range",
"direct": false,
"version": "5.0.1",
"ecosystem": "npm"
},
{
"name": "tr46",
"direct": false,
"version": "0.0.3",
"ecosystem": "npm"
},
{
"name": "ts-algebra",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "tsconfig-paths",
"direct": false,
"version": "3.10.1",
"ecosystem": "npm"
},
{
"name": "type-check",
"direct": false,
"version": "0.4.0",
"ecosystem": "npm"
},
{
"name": "type-fest",
"direct": false,
"version": "0.20.2",
"ecosystem": "npm"
},
{
"name": "typescript",
"direct": false,
"version": "5.9.3",
"ecosystem": "npm"
},
{
"name": "unbox-primitive",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "undici-types",
"direct": false,
"version": "5.26.5",
"ecosystem": "npm"
},
{
"name": "undici-types",
"direct": false,
"version": "6.20.0",
"ecosystem": "npm"
},
{
"name": "update-browserslist-db",
"direct": false,
"version": "1.1.3",
"ecosystem": "npm"
},
{
"name": "uri-js",
"direct": false,
"version": "4.4.1",
"ecosystem": "npm"
},
{
"name": "v8-compile-cache",
"direct": false,
"version": "2.3.0",
"ecosystem": "npm"
},
{
"name": "validate-npm-package-license",
"direct": false,
"version": "3.0.4",
"ecosystem": "npm"
},
{
"name": "watchpack",
"direct": false,
"version": "2.4.2",
"ecosystem": "npm"
},
{
"name": "web-streams-polyfill",
"direct": false,
"version": "4.0.0-beta.3",
"ecosystem": "npm"
},
{
"name": "webidl-conversions",
"direct": false,
"version": "3.0.1",
"ecosystem": "npm"
},
{
"name": "webpack",
"direct": false,
"version": "5.98.0",
"ecosystem": "npm"
},
{
"name": "webpack-cli",
"direct": false,
"version": "5.1.4",
"ecosystem": "npm"
},
{
"name": "webpack-merge",
"direct": false,
"version": "5.8.0",
"ecosystem": "npm"
},
{
"name": "webpack-sources",
"direct": false,
"version": "3.2.3",
"ecosystem": "npm"
},
{
"name": "whatwg-url",
"direct": false,
"version": "5.0.0",
"ecosystem": "npm"
},
{
"name": "which",
"direct": false,
"version": "2.0.2",
"ecosystem": "npm"
},
{
"name": "which-boxed-primitive",
"direct": false,
"version": "1.0.2",
"ecosystem": "npm"
},
{
"name": "wildcard",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "word-wrap",
"direct": false,
"version": "1.2.3",
"ecosystem": "npm"
},
{
"name": "workerpool",
"direct": false,
"version": "6.2.0",
"ecosystem": "npm"
},
{
"name": "wrap-ansi",
"direct": false,
"version": "7.0.0",
"ecosystem": "npm"
},
{
"name": "wrappy",
"direct": false,
"version": "1.0.2",
"ecosystem": "npm"
},
{
"name": "y18n",
"direct": false,
"version": "5.0.8",
"ecosystem": "npm"
},
{
"name": "yallist",
"direct": false,
"version": "4.0.0",
"ecosystem": "npm"
},
{
"name": "yargs",
"direct": false,
"version": "16.2.0",
"ecosystem": "npm"
},
{
"name": "yargs-parser",
"direct": false,
"version": "20.2.4",
"ecosystem": "npm"
},
{
"name": "yargs-unparser",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "yocto-queue",
"direct": false,
"version": "0.1.0",
"ecosystem": "npm"
}
],
"collected": true,
"truncated": false,
"total_count": 417,
"direct_count": 14,
"indirect_count": 403
}
},
"maintainership": {
"issues": {
"open_prs": 14,
"merged_prs": 580,
"open_issues": 7,
"closed_ratio": 0.794,
"closed_issues": 27,
"closed_unmerged_prs": 90
},
"bus_factor": 2,
"bot_contributors": 3,
"top_contributors": [
{
"type": "User",
"login": "RobinBol",
"commits": 387,
"avatar_url": "https://avatars.githubusercontent.com/u/5762579?v=4"
},
{
"type": "User",
"login": "WeeJeWel",
"commits": 260,
"avatar_url": "https://avatars.githubusercontent.com/u/319873?v=4"
},
{
"type": "User",
"login": "jeroenwienk",
"commits": 106,
"avatar_url": "https://avatars.githubusercontent.com/u/6419150?v=4"
},
{
"type": "User",
"login": "nozols",
"commits": 83,
"avatar_url": "https://avatars.githubusercontent.com/u/6298632?v=4"
},
{
"type": "User",
"login": "hmeerlo",
"commits": 67,
"avatar_url": "https://avatars.githubusercontent.com/u/448150?v=4"
},
{
"type": "User",
"login": "tjallingt",
"commits": 61,
"avatar_url": "https://avatars.githubusercontent.com/u/5736783?v=4"
},
{
"type": "User",
"login": "wouter-athom",
"commits": 22,
"avatar_url": "https://avatars.githubusercontent.com/u/159017548?v=4"
},
{
"type": "User",
"login": "jeroenvollenbrock",
"commits": 20,
"avatar_url": "https://avatars.githubusercontent.com/u/4551130?v=4"
},
{
"type": "User",
"login": "applingua",
"commits": 15,
"avatar_url": "https://avatars.githubusercontent.com/u/805838?v=4"
},
{
"type": "User",
"login": "MarleenBee",
"commits": 14,
"avatar_url": "https://avatars.githubusercontent.com/u/64000784?v=4"
}
],
"contributors_sampled": 28,
"top_contributor_share": 0.358
},
"quality_signals": {
"has_ci": true,
"has_tests": true,
"ci_workflows": [
"apply_locales.yml",
"deploy.yml",
"generate_locales.yml",
"lint.yml",
"static.yml",
"test.yml"
],
"has_docs_dir": false,
"linter_configs": [
".eslintrc.js"
],
"has_editorconfig": true,
"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": 10,
"reason": "5 out of 5 merged PRs checked by a CI test -- score normalized to 10",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
},
{
"name": "CII-Best-Practices",
"score": 0,
"reason": "no effort to earn an OpenSSF best practices badge detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
},
{
"name": "Code-Review",
"score": 0,
"reason": "Found 1/16 approved changesets -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
},
{
"name": "Contributors",
"score": 10,
"reason": "project has 7 contributing companies or organizations",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
},
{
"name": "Dangerous-Workflow",
"score": 0,
"reason": "dangerous workflow patterns detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
},
{
"name": "Dependency-Update-Tool",
"score": 10,
"reason": "update tool detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
},
{
"name": "Fuzzing",
"score": 0,
"reason": "project is not fuzzed",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
},
{
"name": "License",
"score": 10,
"reason": "license file detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
},
{
"name": "Maintained",
"score": 10,
"reason": "30 commit(s) and 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": 10,
"reason": "packaging workflow detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
},
{
"name": "Pinned-Dependencies",
"score": 5,
"reason": "dependency not pinned by hash detected -- score normalized to 5",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
},
{
"name": "SAST",
"score": 0,
"reason": "SAST tool is not run on all commits -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
},
{
"name": "Security-Policy",
"score": 0,
"reason": "security policy file not detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
},
{
"name": "Signed-Releases",
"score": null,
"reason": "no releases found",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
},
{
"name": "Token-Permissions",
"score": 0,
"reason": "detected GitHub workflow tokens with excessive permissions",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
},
{
"name": "Vulnerabilities",
"score": 0,
"reason": "30 existing vulnerabilities detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
}
],
"commit": "2b1033208cd4d03654c59e83bbeb8eb933ab03ab",
"ran_at": "2026-07-22T05:46:07Z",
"aggregate_score": 3.8,
"scorecard_version": "v5.5.0"
},
"has_codeql_workflow": false,
"has_security_policy": false,
"has_dependabot_config": false
},
"contribution_flow": {
"collected": true,
"ci_last_run_at": "2026-07-17T08:57:35Z",
"oldest_open_prs": [
{
"number": 332,
"created_at": "2022-02-02T08:49:06Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 348,
"created_at": "2022-06-10T18:24:47Z",
"last_comment_at": "2022-06-10T18:24:51Z",
"last_comment_author": "CLAassistant"
},
{
"number": 400,
"created_at": "2024-06-20T12:37:04Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 454,
"created_at": "2024-08-29T04:20:14Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 456,
"created_at": "2024-09-02T10:08:50Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 522,
"created_at": "2025-01-10T19:44:22Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 587,
"created_at": "2025-09-05T11:59:38Z",
"last_comment_at": "2025-09-05T14:40:08Z",
"last_comment_author": "copilot-swe-agent"
},
{
"number": 690,
"created_at": "2026-04-22T23:33:30Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 695,
"created_at": "2026-05-12T15:48:05Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 713,
"created_at": "2026-06-29T06:00:19Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 716,
"created_at": "2026-07-06T06:00:13Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 717,
"created_at": "2026-07-13T06:00:13Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 718,
"created_at": "2026-07-13T10:56:13Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 719,
"created_at": "2026-07-20T06:00:18Z",
"last_comment_at": null,
"last_comment_author": null
}
],
"last_merged_pr_at": "2026-07-06T12:05:04Z",
"ci_last_conclusion": null,
"oldest_open_issues": [
{
"number": 70,
"created_at": "2017-12-04T21:39:24Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 76,
"created_at": "2018-02-26T11:57:01Z",
"last_comment_at": "2018-02-27T08:50:00Z",
"last_comment_author": "nattlip"
},
{
"number": 82,
"created_at": "2018-03-08T16:19:31Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 277,
"created_at": "2021-04-29T08:42:02Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 384,
"created_at": "2024-01-14T12:41:12Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 521,
"created_at": "2025-01-10T18:27:09Z",
"last_comment_at": "2025-01-11T20:34:41Z",
"last_comment_author": "sebglon"
},
{
"number": 586,
"created_at": "2025-09-05T11:59:34Z",
"last_comment_at": null,
"last_comment_author": null
}
]
}
},
"config": {
"disabled_metrics": [],
"disabled_categories": [],
"disabled_components": {}
},
"source": {
"url": "https://github.com/athombv/node-homey-lib",
"host": "github.com",
"name": "node-homey-lib",
"owner": "athombv"
},
"metrics": {
"overall": {
"key": "overall",
"band": "good",
"name": "Overall health",
"note": null,
"notes": [],
"value": 70,
"inputs": {
"security": 38,
"vitality": 88,
"community": 63,
"governance": 74,
"engineering": 76
},
"components": []
},
"categories": [
{
"key": "vitality",
"band": "excellent",
"name": "Vitality",
"value": 88,
"weight": 0.22,
"metrics": [
{
"key": "development_activity",
"band": "excellent",
"name": "Development activity",
"note": null,
"notes": [],
"value": 88,
"inputs": {
"commits_last_year": 358,
"human_commit_share": 0.98,
"days_since_last_push": 1,
"active_weeks_last_year": 34
},
"components": [
{
"key": "push_recency",
"name": "Push recency",
"detail": "last push 1 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "push_recency",
"params": {
"days": 1
}
}
],
"max_points": 36
},
{
"key": "commit_cadence",
"name": "Commit cadence",
"detail": "34/52 weeks with commits",
"points": 23.5,
"status": "partial",
"details": [
{
"code": "commit_cadence_weeks",
"params": {
"weeks": 34
}
}
],
"max_points": 36
},
{
"key": "commit_volume",
"name": "Commit volume",
"detail": "358 commits in the last year",
"points": 18,
"status": "met",
"details": [
{
"code": "commits_last_year",
"params": {
"count": 358
}
}
],
"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": 88,
"inputs": {
"releases_count": 100,
"latest_release_tag": "v2.51.3",
"releases_from_tags": true,
"days_since_latest_release": 4,
"mean_days_between_releases": 9.5
},
"components": [
{
"key": "ships_releases",
"name": "Ships releases",
"detail": "100 version tags (no GitHub releases)",
"points": 16.2,
"status": "partial",
"details": [
{
"code": "version_tags_no_releases",
"params": {
"count": 100
}
}
],
"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 ~9.5 days",
"points": 27,
"status": "met",
"details": [
{
"code": "release_cadence",
"params": {
"gap": 9.5
}
}
],
"max_points": 27
},
{
"key": "openssf_scorecard_signed_releases",
"name": "OpenSSF Scorecard: Signed-Releases",
"detail": "no releases found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 10
}
]
},
{
"key": "abandonment",
"band": "excellent",
"name": "Abandonment",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"cap": null,
"state": "maintained",
"guards": [],
"signals": [],
"red_flag": false,
"multiplier_pct": 100,
"declared_reason": null,
"unverified_reason": null,
"unanswered_open_prs": null,
"unanswered_open_issues": null,
"days_since_last_merged_pr": null,
"days_since_last_human_commit": 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": "moderate",
"name": "Community & Adoption",
"value": 63,
"weight": 0.18,
"metrics": [
{
"key": "popularity",
"band": "at_risk",
"name": "Popularity & adoption",
"note": null,
"notes": [],
"value": 39,
"inputs": {
"forks": 26,
"stars": 23,
"watchers": 11,
"growth_state": "unverified",
"growth_factor_pct": 100,
"growth_unverified_reason": "below_threshold"
},
"components": [
{
"key": "stars",
"name": "Stars",
"detail": "23 stars",
"points": 21.8,
"status": "partial",
"details": [
{
"code": "stars",
"params": {
"count": 23
}
}
],
"max_points": 60
},
{
"key": "forks",
"name": "Forks",
"detail": "26 forks",
"points": 11.7,
"status": "partial",
"details": [
{
"code": "forks",
"params": {
"count": 26
}
}
],
"max_points": 25
},
{
"key": "watchers",
"name": "Watchers",
"detail": "11 watchers",
"points": 5.6,
"status": "partial",
"details": [
{
"code": "watchers",
"params": {
"count": 11
}
}
],
"max_points": 15
}
]
},
{
"key": "community_health",
"band": "excellent",
"name": "Community health",
"note": null,
"notes": [],
"value": 85,
"inputs": {
"has_readme": true,
"has_license": true,
"has_contributing": true,
"has_issue_template": false,
"has_code_of_conduct": true,
"has_pull_request_template": false
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 22.5,
"status": "met",
"details": [],
"max_points": 22.5
},
{
"key": "license",
"name": "License",
"detail": "recognized license (GPL-3.0)",
"points": 22.5,
"status": "met",
"details": [
{
"code": "license_standard",
"params": {}
},
{
"code": "license_spdx",
"params": {
"spdx": "GPL-3.0"
}
}
],
"max_points": 22.5
},
{
"key": "contributing_guide",
"name": "CONTRIBUTING guide",
"detail": null,
"points": 18,
"status": "met",
"details": [],
"max_points": 18
},
{
"key": "code_of_conduct",
"name": "Code of conduct",
"detail": null,
"points": 13.5,
"status": "met",
"details": [],
"max_points": 13.5
},
{
"key": "issue_template",
"name": "Issue template",
"detail": null,
"points": 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": 70,
"inputs": {
"packages": [
"homey-lib"
],
"dependents": null,
"ecosystems": "npm",
"total_downloads": null,
"monthly_downloads": 15568
},
"components": [
{
"key": "monthly_downloads",
"name": "Monthly downloads",
"detail": "15,568 downloads/month across npm",
"points": 55.9,
"status": "partial",
"details": [
{
"code": "downloads_monthly",
"params": {
"count": 15568,
"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": "good",
"name": "Sustainability & Governance",
"value": 74,
"weight": 0.24,
"metrics": [
{
"key": "maintainer_resilience",
"band": "moderate",
"name": "Maintainer resilience (bus factor)",
"note": null,
"notes": [],
"value": 63,
"inputs": {
"bus_factor": 2,
"contributors_sampled": 28,
"top_contributor_share": 0.358
},
"components": [
{
"key": "bus_factor",
"name": "Bus factor",
"detail": "2 contributor(s) cover half of all commits",
"points": 25.2,
"status": "partial",
"details": [
{
"code": "bus_factor",
"params": {
"count": 2
}
}
],
"max_points": 54
},
{
"key": "commit_distribution",
"name": "Commit distribution",
"detail": "top contributor authored 36% of commits",
"points": 14.4,
"status": "partial",
"details": [
{
"code": "top_contributor_share",
"params": {
"share": 36
}
}
],
"max_points": 22.5
},
{
"key": "contributor_breadth",
"name": "Contributor breadth",
"detail": "28 contributors",
"points": 13.5,
"status": "met",
"details": [
{
"code": "contributors_sampled",
"params": {
"count": 28
}
}
],
"max_points": 13.5
},
{
"key": "openssf_scorecard_contributors",
"name": "OpenSSF Scorecard: Contributors",
"detail": "project has 7 contributing companies or organizations",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
}
]
},
{
"key": "responsiveness",
"band": "good",
"name": "Issue & PR responsiveness",
"note": null,
"notes": [],
"value": 70,
"inputs": {
"merged_prs": 580,
"open_issues": 7,
"closed_issues": 27,
"issue_closed_ratio": 0.794,
"closed_unmerged_prs": 90
},
"components": [
{
"key": "issue_resolution",
"name": "Issue resolution",
"detail": "79% of issues closed",
"points": 37.1,
"status": "partial",
"details": [
{
"code": "issues_closed_share",
"params": {
"share": 79
}
}
],
"max_points": 46.75
},
{
"key": "pr_acceptance",
"name": "PR acceptance",
"detail": "580/670 decided PRs merged",
"points": 33.1,
"status": "partial",
"details": [
{
"code": "decided_prs_merged",
"params": {
"merged": 580,
"decided": 670
}
}
],
"max_points": 38.25
},
{
"key": "openssf_scorecard_code_review",
"name": "OpenSSF Scorecard: Code-Review",
"detail": "Found 1/16 approved changesets -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
}
]
},
{
"key": "stewardship",
"band": "good",
"name": "Ownership & stewardship",
"note": null,
"notes": [],
"value": 71,
"inputs": {
"followers": 187,
"owner_type": "Organization",
"is_verified": null,
"owner_login": "athombv",
"public_repos": 132,
"account_age_days": 4353
},
"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": "187 followers of athombv",
"points": 16.4,
"status": "partial",
"details": [
{
"code": "owner_followers",
"params": {
"count": 187,
"login": "athombv"
}
}
],
"max_points": 25
},
{
"key": "track_record",
"name": "Track record",
"detail": "132 public repos, account ~11 yr old",
"points": 25,
"status": "met",
"details": [
{
"code": "public_repos",
"params": {
"count": 132
}
},
{
"code": "account_age_years",
"params": {
"years": 11
}
}
],
"max_points": 25
}
]
},
{
"key": "package_maintenance",
"band": "excellent",
"name": "Package maintenance",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"packages": [
"homey-lib"
],
"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": "289 published versions",
"points": 20,
"status": "met",
"details": [
{
"code": "published_versions",
"params": {
"count": 289
}
}
],
"max_points": 20
},
{
"key": "not_deprecated",
"name": "Not deprecated",
"detail": "active, not deprecated or yanked",
"points": 20,
"status": "met",
"details": [
{
"code": "package_not_deprecated",
"params": {}
}
],
"max_points": 20
}
]
}
],
"description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
},
{
"key": "engineering",
"band": "good",
"name": "Engineering Quality",
"value": 76,
"weight": 0.2,
"metrics": [
{
"key": "engineering_practices",
"band": "excellent",
"name": "Engineering practices",
"note": null,
"notes": [],
"value": 90,
"inputs": {
"has_ci": true,
"has_tests": true,
"has_editorconfig": true,
"has_linter_config": true,
"has_precommit_config": false
},
"components": [
{
"key": "ci_workflows",
"name": "CI workflows",
"detail": "6 workflow(s)",
"points": 24,
"status": "met",
"details": [
{
"code": "ci_workflows",
"params": {
"count": 6
}
}
],
"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.js",
"points": 16,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": ".eslintrc.js"
}
}
],
"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": 6.4,
"status": "met",
"details": [],
"max_points": 6.4
},
{
"key": "openssf_scorecard_ci_tests",
"name": "OpenSSF Scorecard: CI-Tests",
"detail": "5 out of 5 merged PRs checked by a CI test -- score normalized to 10",
"points": 20,
"status": "met",
"details": [],
"max_points": 20
}
]
},
{
"key": "documentation",
"band": "moderate",
"name": "Documentation",
"note": null,
"notes": [],
"value": 55,
"inputs": {
"topics": [],
"has_wiki": false,
"homepage": "https://homey.app",
"has_readme": true,
"has_docs_dir": false,
"has_description": true
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 30,
"status": "met",
"details": [],
"max_points": 30
},
{
"key": "documentation_directory",
"name": "Documentation directory",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 25
},
{
"key": "documentation_homepage_site",
"name": "Documentation / homepage site",
"detail": "https://homey.app",
"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": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
},
{
"key": "wiki",
"name": "Wiki",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
}
],
"description": "Are baseline engineering and documentation practices in place?"
},
{
"key": "security",
"band": "at_risk",
"name": "Security",
"value": 38,
"weight": 0.16,
"metrics": [
{
"key": "security_posture",
"band": "at_risk",
"name": "Security posture",
"note": "Excluded from scoring (no data or not applicable): Signed-Releases. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"signed_releases"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 38,
"inputs": {
"source": "openssf_scorecard",
"checks_evaluated": 17,
"scorecard_version": "v5.5.0",
"checks_inconclusive": 1,
"scorecard_aggregate": 3.8
},
"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": "5 out of 5 merged PRs checked by a CI test -- score normalized to 10",
"points": 2.5,
"status": "met",
"details": [],
"max_points": 2.5
},
{
"key": "cii_best_practices",
"name": "CII-Best-Practices",
"detail": "no effort to earn an OpenSSF best practices badge detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 2.5
},
{
"key": "code_review",
"name": "Code-Review",
"detail": "Found 1/16 approved changesets -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "contributors",
"name": "Contributors",
"detail": "project has 7 contributing companies or organizations",
"points": 2.5,
"status": "met",
"details": [],
"max_points": 2.5
},
{
"key": "dangerous_workflow",
"name": "Dangerous-Workflow",
"detail": "dangerous workflow patterns detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
},
{
"key": "dependency_update_tool",
"name": "Dependency-Update-Tool",
"detail": "update tool detected",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "fuzzing",
"name": "Fuzzing",
"detail": "project is not fuzzed",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "license",
"name": "License",
"detail": "license file detected",
"points": 2.5,
"status": "met",
"details": [],
"max_points": 2.5
},
{
"key": "maintained",
"name": "Maintained",
"detail": "30 commit(s) and 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 detected",
"points": 5,
"status": "met",
"details": [],
"max_points": 5
},
{
"key": "pinned_dependencies",
"name": "Pinned-Dependencies",
"detail": "dependency not pinned by hash detected -- score normalized to 5",
"points": 2.5,
"status": "partial",
"details": [],
"max_points": 5
},
{
"key": "sast",
"name": "SAST",
"detail": "SAST tool is not run on all commits -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "security_policy",
"name": "Security-Policy",
"detail": "security policy file not detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "signed_releases",
"name": "Signed-Releases",
"detail": "no releases found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 7.5
},
{
"key": "token_permissions",
"name": "Token-Permissions",
"detail": "detected GitHub workflow tokens with excessive permissions",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "vulnerabilities",
"name": "Vulnerabilities",
"detail": "30 existing vulnerabilities detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
}
]
},
{
"key": "dependency_advisories",
"band": "at_risk",
"name": "Dependency advisories",
"note": "Excluded from scoring (no data or not applicable): Indirect dependencies free of known advisories. Remaining weights renormalized. Matched 417 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": 417
}
},
{
"code": "advisories_repo_graph_caveat",
"params": {}
},
{
"code": "advisories_reachability",
"params": {}
}
],
"value": 39,
"inputs": {
"source": "osv",
"advisories": 46,
"affected_packages": 24,
"assessed_packages": 417,
"unassessed_packages": 0,
"affected_by_severity": "critical 1, high 15, moderate 7, low 1",
"direct_affected_packages": 6
},
"components": [
{
"key": "direct_dependencies_free_of_known_advisories",
"name": "Direct dependencies free of known advisories",
"detail": "6 affected: semver 6.3.0 (high 7.5), semver 7.3.5 (high 7.5), ajv 6.12.3 (moderate 5.3), +3 more",
"points": 8.2,
"status": "partial",
"details": [
{
"code": "advisories_affected",
"params": {
"count": 6,
"packages": "semver 6.3.0 (high 7.5), semver 7.3.5 (high 7.5), ajv 6.12.3 (moderate 5.3)"
}
},
{
"code": "advisories_affected_more",
"params": {
"count": 3
}
}
],
"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": "6 advisory-carrying package(s) unaddressed past 90 days; oldest published 1126 days ago",
"points": 21,
"status": "partial",
"details": [
{
"code": "advisories_stale",
"params": {
"days": 90,
"count": 6,
"oldest": 1126
}
}
],
"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": 417,
"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": 6
},
"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": "at_risk",
"name": "AI Readiness",
"value": 49,
"weight": 0,
"metrics": [
{
"key": "ai_agent_context",
"band": "at_risk",
"name": "Agent context & guidance",
"note": null,
"notes": [],
"value": 40,
"inputs": {
"has_llms_txt": false,
"legible_history_share": 0.745,
"agent_instruction_files": [],
"agent_instruction_max_bytes": null
},
"components": [
{
"key": "agent_instructions",
"name": "Agent instructions",
"detail": "no CLAUDE.md / AGENTS.md / editor rules",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_agent_instructions",
"params": {}
}
],
"max_points": 45
},
{
"key": "machine_readable_docs_llms_txt",
"name": "Machine-readable docs (llms.txt)",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
},
{
"key": "legible_commit_history",
"name": "Legible commit history",
"detail": "73 of 98 human commits state their intent (structured subject or explanatory body)",
"points": 39.7,
"status": "partial",
"details": [
{
"code": "legible_history",
"params": {
"legible": 73,
"sampled": 98
}
}
],
"max_points": 40
}
]
},
{
"key": "ai_verify_loop",
"band": "moderate",
"name": "Verify loop (build / test / typecheck)",
"note": null,
"notes": [],
"value": 58,
"inputs": {
"has_nix": false,
"has_tests": true,
"lockfiles": [
"package-lock.json"
],
"has_dockerfile": false,
"typed_language": false,
"bootstrap_files": [],
"has_devcontainer": false,
"has_linter_config": true,
"typecheck_configs": [],
"agent_commit_share": 0.1,
"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.js",
"points": 11,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": ".eslintrc.js"
}
}
],
"max_points": 11
},
{
"key": "static_type_checking",
"name": "Static type checking",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"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": "10 of the last 100 commits agent-authored or agent-credited",
"points": 10,
"status": "met",
"details": [
{
"code": "agent_authored_commits",
"params": {
"count": 10,
"sampled": 100
}
}
],
"max_points": 10
},
{
"key": "automated_maintenance",
"name": "Automated maintenance",
"detail": "no automated dependency updates observed",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_dependency_automation",
"params": {}
}
],
"max_points": 8
},
{
"key": "openssf_scorecard_pinned_dependencies",
"name": "OpenSSF Scorecard: Pinned-Dependencies",
"detail": "dependency not pinned by hash detected -- score normalized to 5",
"points": 5,
"status": "partial",
"details": [],
"max_points": 10
}
]
},
{
"key": "ai_code_legibility",
"band": "moderate",
"name": "Code legibility for models",
"note": null,
"notes": [],
"value": 54,
"inputs": {
"primary_language": "JavaScript",
"largest_source_bytes": 979342,
"source_files_sampled": 50,
"oversized_source_files": 1
},
"components": [
{
"key": "type_checkable_code",
"name": "Type-checkable code",
"detail": "JavaScript without a type-check config",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_typecheck_config_language",
"params": {
"language": "JavaScript"
}
}
],
"max_points": 45
},
{
"key": "manageable_file_sizes",
"name": "Manageable file sizes",
"detail": "1/50 source files over 60KB",
"points": 53.9,
"status": "partial",
"details": [
{
"code": "oversized_source_files",
"params": {
"kb": 60,
"sampled": 50,
"oversized": 1
}
}
],
"max_points": 55
}
]
},
{
"key": "ai_interfaces",
"band": "at_risk",
"name": "Machine-readable interfaces",
"note": null,
"notes": [],
"value": 40,
"inputs": {
"example_dirs": [
"examples"
],
"has_mcp_signal": false,
"api_schema_files": []
},
"components": [
{
"key": "api_schema_openapi_graphql_proto",
"name": "API schema (OpenAPI/GraphQL/proto)",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 40
},
{
"key": "mcp_server",
"name": "MCP server",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 20
},
{
"key": "runnable_examples",
"name": "Runnable examples",
"detail": "examples",
"points": 40,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "examples"
}
}
],
"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:homey-lib@2.51.3; advisories assessed against the repository dependency graph instead"
],
"report_type": "repository",
"generated_at": "2026-07-22T05:46:31.632772Z",
"schema_version": "0.26.0",
"badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/a/athombv/node-homey-lib.svg",
"full_name": "athombv/node-homey-lib",
"license_state": "standard",
"license_spdx": "GPL-3.0"
}