原始 JSON 报告 机器可读
{
"data": {
"repo": {
"topics": [],
"is_fork": false,
"size_kb": 2908,
"has_wiki": false,
"homepage": "https://www.npmjs.com/package/homey",
"languages": {
"HTML": 859,
"Python": 1847,
"JavaScript": 474660,
"TypeScript": 2540
},
"pushed_at": "2026-07-17T09:17:06Z",
"created_at": "2019-10-09T07:33:50Z",
"owner_type": "Organization",
"updated_at": "2026-07-17T09:17:06Z",
"description": "Homey Command-Line Interface (CLI)",
"is_archived": false,
"is_disabled": false,
"license_spdx": null,
"default_branch": "develop",
"license_spdx_raw": null,
"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": "absent",
"spdx_id": null,
"raw_spdx": null,
"file_present": false,
"scorecard_found": false,
"profile_has_license": false
},
"activity": {
"releases": [
{
"tag": "v4.4.1",
"kind": "patch",
"published_at": "2026-07-17T09:16:17Z"
},
{
"tag": "v4.4.0",
"kind": "minor",
"published_at": "2026-07-06T14:48:22Z"
},
{
"tag": "v4.3.1",
"kind": "patch",
"published_at": "2026-06-25T08:50:00Z"
},
{
"tag": "v4.3.0",
"kind": "minor",
"published_at": "2026-05-28T11:43:48Z"
},
{
"tag": "v4.2.3",
"kind": "patch",
"published_at": "2026-05-22T09:49:53Z"
},
{
"tag": "v4.2.2",
"kind": "patch",
"published_at": "2026-05-21T10:02:57Z"
},
{
"tag": "v4.2.1",
"kind": "patch",
"published_at": "2026-04-30T07:14:29Z"
},
{
"tag": "v4.2.0",
"kind": "minor",
"published_at": "2026-04-15T12:13:28Z"
},
{
"tag": "v4.1.1",
"kind": "patch",
"published_at": "2026-04-01T15:30:21Z"
},
{
"tag": "v4.1.0",
"kind": "minor",
"published_at": "2026-03-23T13:10:55Z"
},
{
"tag": "v4.0.11",
"kind": "patch",
"published_at": "2026-03-11T14:47:35Z"
},
{
"tag": "v4.0.10",
"kind": "patch",
"published_at": "2026-03-11T14:38:15Z"
},
{
"tag": "v4.0.9",
"kind": "patch",
"published_at": "2026-03-11T07:52:49Z"
},
{
"tag": "v4.0.8",
"kind": "patch",
"published_at": "2026-03-09T15:13:58Z"
},
{
"tag": "v4.0.7",
"kind": "patch",
"published_at": "2026-03-09T11:11:00Z"
},
{
"tag": "v4.0.5",
"kind": "patch",
"published_at": "2026-02-25T09:47:48Z"
},
{
"tag": "v4.0.4",
"kind": "patch",
"published_at": "2026-02-17T11:51:57Z"
},
{
"tag": "v4.0.3",
"kind": "patch",
"published_at": "2026-02-09T11:09:55Z"
},
{
"tag": "v4.0.2",
"kind": "patch",
"published_at": "2026-01-30T12:44:42Z"
},
{
"tag": "v4.0.1",
"kind": "patch",
"published_at": "2026-01-23T12:26:55Z"
},
{
"tag": "v4.0.0",
"kind": "major",
"published_at": "2026-01-22T14:43:08Z"
},
{
"tag": "v3.12.2",
"kind": "patch",
"published_at": "2026-01-20T13:56:37Z"
},
{
"tag": "v3.12.1",
"kind": "patch",
"published_at": "2026-01-20T13:14:16Z"
},
{
"tag": "v3.12.0",
"kind": "minor",
"published_at": "2025-12-23T21:54:38Z"
},
{
"tag": "v3.11.0",
"kind": "minor",
"published_at": "2025-12-23T11:44:40Z"
},
{
"tag": "v3.10.1",
"kind": "patch",
"published_at": "2025-12-23T11:34:53Z"
},
{
"tag": "v3.10.0",
"kind": "minor",
"published_at": "2025-12-02T08:28:21Z"
},
{
"tag": "v3.9.8",
"kind": "patch",
"published_at": "2025-11-27T13:44:41Z"
},
{
"tag": "v3.9.7",
"kind": "patch",
"published_at": "2025-11-17T08:43:44Z"
},
{
"tag": "v3.9.6",
"kind": "patch",
"published_at": "2025-10-23T15:47:16Z"
},
{
"tag": "v3.9.5",
"kind": "patch",
"published_at": "2025-10-16T12:43:06Z"
},
{
"tag": "v3.9.4",
"kind": "patch",
"published_at": "2025-08-25T11:56:19Z"
},
{
"tag": "v3.9.3",
"kind": "patch",
"published_at": "2025-08-25T11:24:03Z"
},
{
"tag": "v3.9.2",
"kind": "patch",
"published_at": "2025-08-23T09:41:42Z"
},
{
"tag": "v3.9.1",
"kind": "patch",
"published_at": "2025-08-18T14:07:51Z"
},
{
"tag": "v3.9.0",
"kind": "minor",
"published_at": "2025-08-18T13:48:04Z"
},
{
"tag": "v3.8.4",
"kind": "patch",
"published_at": "2025-08-07T12:05:20Z"
},
{
"tag": "v3.8.3",
"kind": "patch",
"published_at": "2025-07-29T06:35:54Z"
},
{
"tag": "v3.8.2",
"kind": "patch",
"published_at": "2025-07-14T12:48:06Z"
},
{
"tag": "v3.8.1",
"kind": "patch",
"published_at": "2025-05-19T15:31:54Z"
},
{
"tag": "v3.8.0",
"kind": "minor",
"published_at": "2025-05-09T14:58:38Z"
},
{
"tag": "v3.7.15",
"kind": "patch",
"published_at": "2024-12-23T13:32:43Z"
},
{
"tag": "v3.7.14",
"kind": "patch",
"published_at": "2024-12-20T13:57:40Z"
},
{
"tag": "v3.7.13",
"kind": "patch",
"published_at": "2024-12-12T15:34:24Z"
},
{
"tag": "v3.7.12",
"kind": "patch",
"published_at": "2024-11-08T07:58:21Z"
},
{
"tag": "v3.7.11",
"kind": "patch",
"published_at": "2024-10-17T12:42:06Z"
},
{
"tag": "v3.7.10",
"kind": "patch",
"published_at": "2024-10-16T12:17:24Z"
},
{
"tag": "v3.7.9",
"kind": "patch",
"published_at": "2024-10-15T13:32:30Z"
},
{
"tag": "v3.7.8",
"kind": "patch",
"published_at": "2024-10-15T13:25:51Z"
},
{
"tag": "v3.7.7",
"kind": "patch",
"published_at": "2024-10-08T11:34:27Z"
},
{
"tag": "v3.7.6",
"kind": "patch",
"published_at": "2024-09-30T11:58:01Z"
},
{
"tag": "v3.7.5",
"kind": "patch",
"published_at": "2024-09-30T11:29:22Z"
},
{
"tag": "v3.7.4",
"kind": "patch",
"published_at": "2024-09-26T12:45:41Z"
},
{
"tag": "v3.7.3",
"kind": "patch",
"published_at": "2024-09-19T09:27:38Z"
},
{
"tag": "v3.7.2",
"kind": "patch",
"published_at": "2024-09-18T15:13:11Z"
},
{
"tag": "v3.7.1",
"kind": "patch",
"published_at": "2024-09-12T08:11:28Z"
},
{
"tag": "v3.7.0",
"kind": "minor",
"published_at": "2024-09-10T11:51:47Z"
},
{
"tag": "v3.6.3",
"kind": "patch",
"published_at": "2024-08-14T12:29:48Z"
},
{
"tag": "v3.6.2",
"kind": "patch",
"published_at": "2024-08-09T10:26:27Z"
},
{
"tag": "v3.6.1",
"kind": "patch",
"published_at": "2024-07-31T09:27:35Z"
},
{
"tag": "v3.6.0",
"kind": "minor",
"published_at": "2024-07-29T14:14:07Z"
},
{
"tag": "v3.5.6",
"kind": "patch",
"published_at": "2024-07-29T13:54:50Z"
},
{
"tag": "v3.5.5",
"kind": "patch",
"published_at": "2024-07-29T13:47:07Z"
},
{
"tag": "v3.5.4",
"kind": "patch",
"published_at": "2024-07-23T13:54:57Z"
},
{
"tag": "v3.5.3",
"kind": "patch",
"published_at": "2024-07-23T13:36:54Z"
},
{
"tag": "v3.5.2",
"kind": "patch",
"published_at": "2024-07-23T11:01:19Z"
},
{
"tag": "v3.5.1",
"kind": "patch",
"published_at": "2024-07-22T09:53:06Z"
},
{
"tag": "v3.5.0",
"kind": "minor",
"published_at": "2024-07-03T11:37:08Z"
},
{
"tag": "v3.4.0",
"kind": "minor",
"published_at": "2024-06-24T10:58:05Z"
},
{
"tag": "v3.3.1",
"kind": "patch",
"published_at": "2024-05-29T15:42:34Z"
},
{
"tag": "v3.3.0",
"kind": "minor",
"published_at": "2024-05-16T07:03:46Z"
},
{
"tag": "v3.2.4",
"kind": "patch",
"published_at": "2024-04-18T11:28:10Z"
},
{
"tag": "v3.2.2",
"kind": "patch",
"published_at": "2024-03-05T19:49:19Z"
},
{
"tag": "v3.2.1",
"kind": "patch",
"published_at": "2024-02-16T10:45:49Z"
},
{
"tag": "v3.2.0",
"kind": "minor",
"published_at": "2023-12-07T12:39:49Z"
},
{
"tag": "v3.1.4",
"kind": "patch",
"published_at": "2023-11-30T15:03:03Z"
},
{
"tag": "v3.1.3",
"kind": "patch",
"published_at": "2023-11-29T08:48:25Z"
},
{
"tag": "v3.1.2",
"kind": "patch",
"published_at": "2023-11-13T14:17:50Z"
},
{
"tag": "v3.1.1",
"kind": "patch",
"published_at": "2023-11-08T08:42:53Z"
},
{
"tag": "v3.1.0",
"kind": "minor",
"published_at": "2023-11-07T14:35:33Z"
},
{
"tag": "v3.0.8",
"kind": "patch",
"published_at": "2023-10-20T07:27:36Z"
},
{
"tag": "v3.0.7",
"kind": "patch",
"published_at": "2023-10-02T14:53:17Z"
},
{
"tag": "v3.0.5",
"kind": "patch",
"published_at": "2023-08-09T09:42:05Z"
},
{
"tag": "v3.0.4",
"kind": "patch",
"published_at": "2023-07-27T09:56:34Z"
},
{
"tag": "v3.0.3",
"kind": "patch",
"published_at": "2023-07-26T13:08:47Z"
},
{
"tag": "v3.0.2",
"kind": "patch",
"published_at": "2023-07-07T14:29:53Z"
},
{
"tag": "v3.0.1",
"kind": "patch",
"published_at": "2023-07-07T10:56:39Z"
},
{
"tag": "v3.0.0",
"kind": "major",
"published_at": "2023-07-07T07:15:40Z"
},
{
"tag": "v3.0.0-rc.5",
"kind": "prerelease",
"published_at": "2023-07-07T07:08:39Z"
},
{
"tag": "v3.0.0-rc.3",
"kind": "prerelease",
"published_at": "2023-05-12T16:55:26Z"
},
{
"tag": "v3.0.0-rc.2",
"kind": "prerelease",
"published_at": "2023-05-11T12:16:20Z"
},
{
"tag": "v3.0.0-rc.1",
"kind": "prerelease",
"published_at": "2023-05-11T12:15:47Z"
},
{
"tag": "v2.34.0",
"kind": "minor",
"published_at": "2023-05-20T19:15:08Z"
},
{
"tag": "v2.33.14",
"kind": "patch",
"published_at": "2023-05-04T12:40:06Z"
},
{
"tag": "v2.33.13",
"kind": "patch",
"published_at": "2023-04-06T13:49:12Z"
},
{
"tag": "v2.33.12",
"kind": "patch",
"published_at": "2023-04-05T13:42:02Z"
},
{
"tag": "v2.33.10",
"kind": "patch",
"published_at": "2023-03-29T10:13:15Z"
},
{
"tag": "v2.33.9",
"kind": "patch",
"published_at": "2023-03-23T16:07:21Z"
},
{
"tag": "v2.33.8",
"kind": "patch",
"published_at": "2023-03-21T12:54:03Z"
}
],
"recent_commits": [
{
"oid": "d0756b0d2cf6fd1e75c51ceb32ed79d58121da28",
"body": null,
"is_bot": false,
"headline": "4.4.1",
"author_name": "Homey Github Actions Bot",
"author_login": null,
"committed_at": "2026-07-17T09:16:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "43948a4cc300760fede91f42719e2f40113a7396",
"body": "chore: update homey-lib",
"is_bot": false,
"headline": "Merge pull request #647 from athombv/bump/homey-lib-30ebc77",
"author_name": "hmeerlo",
"author_login": "hmeerlo",
"committed_at": "2026-07-17T09:13:10Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "30ebc7763545382a46df8bf4625c0826df8a054e",
"body": null,
"is_bot": false,
"headline": "chore: update homey-lib",
"author_name": "Homey Github Actions Bot",
"author_login": null,
"committed_at": "2026-07-17T08:59:56Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6ca7f0d58120d54a3bfc206aca0f34377ff7c731",
"body": "chore: require Node.js 24",
"is_bot": false,
"headline": "Merge pull request #644 from athombv/chore/require-node-24",
"author_name": "Robin Bolscher",
"author_login": "RobinBol",
"committed_at": "2026-07-08T14:16:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e51345055456c118bc63ef59332f1382e02cf9e1",
"body": "homey-api@3.17.7 declares engines.node >=24, so the effective runtime\nfloor is Node 24 even though package.json still said >=22. Bump\nengines.node to >=24 and add an .nvmrc pinned to 24 as the single source\nof truth. CI workflows now read the version via node-version-file: .nvmrc\ninstead of hardcoding it.",
"is_bot": false,
"headline": "chore: require Node.js 24",
"author_name": "Robin Bolscher",
"author_login": "RobinBol",
"committed_at": "2026-07-08T14:15:30Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "061db8ba4e3fc84c19833a0b179ed8ed3ebfe88b",
"body": null,
"is_bot": false,
"headline": "4.4.0",
"author_name": "Homey Github Actions Bot",
"author_login": null,
"committed_at": "2026-07-06T14:48:22Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "aca0d17b45adafe355851ca23600210855415db9",
"body": "Adds AI-powered app review command",
"is_bot": false,
"headline": "Merge pull request #641 from athombv/feature/aireview",
"author_name": "hmeerlo",
"author_login": "hmeerlo",
"committed_at": "2026-07-06T12:50:31Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6e4d9e4aac91ec653f6a08abc74ab58cde5410a3",
"body": "Updates the homey-lib dependency to pull in the latest fixes and improvements from the upstream library.",
"is_bot": false,
"headline": "Bumps homey-lib to ^2.51.1",
"author_name": "Herman Meerlo",
"author_login": "hmeerlo",
"committed_at": "2026-07-06T12:49:14Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d3f436b0ffff64b24b45e0d9b6c0b39dd2cedfea",
"body": "The appId is already accessible through the manifest object being passed, eliminating the need to pass it as a separate parameter.",
"is_bot": false,
"headline": "Removes redundant appId parameter from review call",
"author_name": "Herman Meerlo",
"author_login": "hmeerlo",
"committed_at": "2026-07-06T12:06:53Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "61986a5e3bbfdd030383d5b1d8789329523ecee6",
"body": "Introduces a new CLI command that runs an AI review of a Homey app against\nthe App Store guidelines, helping developers catch issues before submission.\n\nSupports both new and update submission types, configurable AI providers\n(OpenAI and Anthropic), and outputs results as either human-readable\nterminal output or machine-readable JSON. Collects app manifest, images,\nand optional custom instructions to provide comprehensive feedback with\nseverity-based findings and a final verdict.",
"is_bot": false,
"headline": "Adds AI-powered app review command",
"author_name": "Herman Meerlo",
"author_login": "hmeerlo",
"committed_at": "2026-07-03T07:17:57Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "aa5e868ac6a818d6da97c478737e58cf350ee7bf",
"body": null,
"is_bot": false,
"headline": "4.3.1",
"author_name": "Homey Github Actions Bot",
"author_login": null,
"committed_at": "2026-06-25T08:50:00Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a4b907aca454f1292d6f3521bcae3588b0e0f578",
"body": "chore: update homey-lib",
"is_bot": false,
"headline": "Merge pull request #640 from athombv/bump/homey-lib-9e8798e",
"author_name": "hmeerlo",
"author_login": "hmeerlo",
"committed_at": "2026-06-25T08:47:46Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "49e711ca8b653ab5c2bff15966f0660c4fd6a042",
"body": "Updates platform feature selection for non-local platforms",
"is_bot": false,
"headline": "Merge pull request #635 from athombv/feature/ble-advertisements",
"author_name": "hmeerlo",
"author_login": "hmeerlo",
"committed_at": "2026-06-25T08:46:05Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9e8798e0d14835cc027c54ddcbd9bcf6dada698e",
"body": null,
"is_bot": false,
"headline": "chore: update homey-lib",
"author_name": "Homey Github Actions Bot",
"author_login": null,
"committed_at": "2026-06-18T12:03:07Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "66c12b934655414416a8b6dd43385334b258f20e",
"body": null,
"is_bot": false,
"headline": "4.3.0",
"author_name": "Homey Github Actions Bot",
"author_login": null,
"committed_at": "2026-05-28T11:43:48Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ad4e6325b8c4724020324fce4908c17f222bc727",
"body": "Feature/zigbee firmware updates",
"is_bot": false,
"headline": "Merge pull request #604 from athombv/feature/zigbee-firmware-updates",
"author_name": "Niels",
"author_login": "nozols",
"committed_at": "2026-05-28T11:41:57Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a776a5c94485518eec9062146eceb232a135e376",
"body": "Ensures feature list defaults to camera streaming and BLE advertisements\nwhen running on non-local platforms, improving compatibility and clarity of\nreported capabilities. Prevents reliance on unavailable local feature detection\noutside local environments.",
"is_bot": false,
"headline": "Updates platform feature selection for non-local platforms",
"author_name": "Herman Meerlo",
"author_login": "hmeerlo",
"committed_at": "2026-05-26T12:08:39Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "564ea65809b4677cd842f1b7761f38effc30e4bb",
"body": null,
"is_bot": false,
"headline": "4.2.3",
"author_name": "Homey Github Actions Bot",
"author_login": null,
"committed_at": "2026-05-22T09:49:53Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7f34b1d9b5eee9dbaee55e0b852887ab462a740f",
"body": "chore: update homey-lib",
"is_bot": false,
"headline": "Merge pull request #632 from athombv/bump/homey-lib-a767d70",
"author_name": "Jeroen Wienk",
"author_login": "jeroenwienk",
"committed_at": "2026-05-22T09:49:22Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a767d70b8f4d9ffe0b33f501971a908ec5a9275b",
"body": null,
"is_bot": false,
"headline": "chore: update homey-lib",
"author_name": "Homey Github Actions Bot",
"author_login": null,
"committed_at": "2026-05-22T09:41:57Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0523d2c7197d93733a7e3ff3a4526045bd0b7c0f",
"body": "…lease-test\n\nFix HomeyCompose titleShort test on release branch",
"is_bot": false,
"headline": "Merge pull request #629 from athombv/fix/homey-compose-title-short-re…",
"author_name": "Jeroen Wienk",
"author_login": "jeroenwienk",
"committed_at": "2026-05-21T12:33:31Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9f01cbb9cc8a0646cf1c4e94feec58cb5a5ce184",
"body": "Master",
"is_bot": false,
"headline": "Merge pull request #630 from athombv/master",
"author_name": "Jeroen Wienk",
"author_login": "jeroenwienk",
"committed_at": "2026-05-21T12:32:40Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "76fd3f60ecf140d27dde1a45d09caa88cfb4fe65",
"body": null,
"is_bot": false,
"headline": "Fix HomeyCompose titleShort test on release branch",
"author_name": "Jeroen Wienk",
"author_login": "jeroenwienk",
"committed_at": "2026-05-21T12:25:29Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "aeacf5ee2d2bf0c62d77bcf1d086b08bd2ca0a1b",
"body": "mdim",
"is_bot": false,
"headline": "Merge pull request #627 from athombv/develop",
"author_name": "Jeroen Wienk",
"author_login": "jeroenwienk",
"committed_at": "2026-05-21T10:03:55Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8fa217bfb07e5c2c92e8546ee6b830314cba9504",
"body": null,
"is_bot": false,
"headline": "4.2.2",
"author_name": "Homey Github Actions Bot",
"author_login": null,
"committed_at": "2026-05-21T10:02:57Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c7057c5d95f4e761ea19d12facb8fa90c02a3742",
"body": "Add Compose locale support for titleShort",
"is_bot": false,
"headline": "Merge pull request #625 from athombv/feature/compose-title-short-locales",
"author_name": "Jeroen Wienk",
"author_login": "jeroenwienk",
"committed_at": "2026-05-21T10:02:21Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9c4871115b661d0cbce01512e304568ceca3f9f2",
"body": "chore: update homey-lib",
"is_bot": false,
"headline": "Merge pull request #626 from athombv/bump/homey-lib-3f5e0e1",
"author_name": "Jeroen Wienk",
"author_login": "jeroenwienk",
"committed_at": "2026-05-21T10:01:42Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3f5e0e125c5b7af90df4b95e891d3a30f7b046ff",
"body": null,
"is_bot": false,
"headline": "chore: update homey-lib",
"author_name": "Homey Github Actions Bot",
"author_login": null,
"committed_at": "2026-05-21T10:00:55Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "072f4be42c5bf141f9b9c2c628b3cad0ed84be66",
"body": null,
"is_bot": false,
"headline": "Add Compose locale support for titleShort",
"author_name": "Jeroen Wienk",
"author_login": "jeroenwienk",
"committed_at": "2026-05-21T09:57:22Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "fbd6dad60f283eaf80202cc4bf2314ec42665679",
"body": "Ensure esm flag is also correctly set when running \"homey app version\"",
"is_bot": false,
"headline": "Merge pull request #620 from athombv/fix/esm-prop-removed",
"author_name": "Jeroen Wienk",
"author_login": "jeroenwienk",
"committed_at": "2026-05-11T11:26:52Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7e1656d361cf4a9714d2aca2c1510f2d260f08e9",
"body": null,
"is_bot": false,
"headline": "Ensure esm flag is also correctly set when running \"homey app version\"",
"author_name": "Bob van de Vijver",
"author_login": "bobvandevijver",
"committed_at": "2026-05-06T15:34:02Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3c76b81442e05886e54c067be99b72be53985df5",
"body": "Merge develop into master",
"is_bot": false,
"headline": "Merge pull request #622 from athombv/develop",
"author_name": "Robin Bolscher",
"author_login": "RobinBol",
"committed_at": "2026-04-30T07:14:42Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ccf6c2e34005f4d4b9912f3efeade31b9a9d1b97",
"body": null,
"is_bot": false,
"headline": "4.2.1",
"author_name": "Homey Github Actions Bot",
"author_login": null,
"committed_at": "2026-04-30T07:14:29Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2ccd48515af16990448bc9b4078cb83c4461a569",
"body": "fix: copy venvs when validating Python apps",
"is_bot": false,
"headline": "Merge pull request #621 from athombv/fix-python-app-validation",
"author_name": "Robin Bolscher",
"author_login": "RobinBol",
"committed_at": "2026-04-30T07:13:57Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "382aca44a7fac727f5cca2abe3665223df8d03af",
"body": null,
"is_bot": false,
"headline": "fix: copy venvs when validating Python apps",
"author_name": "Joost Loohuis",
"author_login": "JELoohuis",
"committed_at": "2026-04-30T07:01:09Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5b4cd77b58380ceca78d64efdcb33056cffb7b54",
"body": null,
"is_bot": false,
"headline": "Merge branch 'develop' into feature/zigbee-firmware-updates",
"author_name": "Niels de Boer",
"author_login": "nozols",
"committed_at": "2026-04-23T07:35:20Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5bf5e8a4c5e482133aa7ccad34d18b27dbab630b",
"body": null,
"is_bot": false,
"headline": "feat(firmware-updates): add comment explaining dynamic import",
"author_name": "Niels de Boer",
"author_login": "nozols",
"committed_at": "2026-04-23T07:34:08Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "62db49fceb8da977cdacf45d6c6c0f7f88d6b877",
"body": "…error handling in readFirmwareUpdatesJson",
"is_bot": false,
"headline": "feat(firmware-updates): remove selectFirmwareFile method and improve …",
"author_name": "Niels de Boer",
"author_login": "nozols",
"committed_at": "2026-04-20T09:51:40Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a367065db5aec4ced31f67f094e1427f59863dfd",
"body": null,
"is_bot": false,
"headline": "4.2.0",
"author_name": "Homey Github Actions Bot",
"author_login": null,
"committed_at": "2026-04-20T08:19:36Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7ca02de3fe51d0865b4d25f95e4d77f37e61a4bd",
"body": "Replace embedded \\n in Log.info messages with separate Log('')\ncalls for more predictable output formatting.",
"is_bot": false,
"headline": "style(publish): Use explicit Log calls for blank-line spacing",
"author_name": "Robin Bolscher",
"author_login": "RobinBol",
"committed_at": "2026-04-20T08:19:36Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6d486a374bb81c9b2dd5d4633cb8a10346cc23b2",
"body": "Show the guidelines URL and ask the developer to confirm they have\nread them before proceeding with app publish. Skipped in headless mode.",
"is_bot": false,
"headline": "feat(publish): Add Homey App Store guidelines prompt",
"author_name": "Robin Bolscher",
"author_login": "RobinBol",
"committed_at": "2026-04-20T08:19:35Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c8a5a62a699a92c814daf0dec8ad0802f69acb99",
"body": null,
"is_bot": false,
"headline": "feat(firmware-updates): refactor `driver firmware` command",
"author_name": "Niels de Boer",
"author_login": "nozols",
"committed_at": "2026-04-20T08:17:25Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b40c0d40d8b351d09d17b8664ba4efa46276b0a9",
"body": null,
"is_bot": false,
"headline": "4.1.1",
"author_name": "Homey Github Actions Bot",
"author_login": null,
"committed_at": "2026-04-20T08:17:25Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ba07e54bffb90f1343f918ef3db06493758acaa3",
"body": null,
"is_bot": false,
"headline": "chore: update homey-lib",
"author_name": "Homey Github Actions Bot",
"author_login": null,
"committed_at": "2026-04-20T08:17:25Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "966c47e5bd5be84211b2b7a024f0efd2300747b1",
"body": "Merge develop into master",
"is_bot": false,
"headline": "Merge pull request #614 from athombv/develop",
"author_name": "Robin Bolscher",
"author_login": "RobinBol",
"committed_at": "2026-04-15T12:15:45Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1f12530046de60c35e853a6ae1b07ae1023c4827",
"body": null,
"is_bot": false,
"headline": "4.2.0",
"author_name": "Homey Github Actions Bot",
"author_login": null,
"committed_at": "2026-04-15T12:13:28Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ab64aa44ba814d7029067cad345609c6ba68f5dd",
"body": "feat(publish): Add Homey App Store guidelines prompt",
"is_bot": false,
"headline": "Merge pull request #613 from athombv/feature/publish-guidelines-prompt",
"author_name": "Robin Bolscher",
"author_login": "RobinBol",
"committed_at": "2026-04-15T12:12:59Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "084647c21069867cf7abee2d446a0a985210e0cd",
"body": "Replace embedded \\n in Log.info messages with separate Log('')\ncalls for more predictable output formatting.",
"is_bot": false,
"headline": "style(publish): Use explicit Log calls for blank-line spacing",
"author_name": "Robin Bolscher",
"author_login": "RobinBol",
"committed_at": "2026-04-15T12:10:55Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2ae42cbe49bba8bdd253252a86e61bd2b6d60f3e",
"body": "Show the guidelines URL and ask the developer to confirm they have\nread them before proceeding with app publish. Skipped in headless mode.",
"is_bot": false,
"headline": "feat(publish): Add Homey App Store guidelines prompt",
"author_name": "Robin Bolscher",
"author_login": "RobinBol",
"committed_at": "2026-04-15T12:04:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0da16d3d5f18cfb025a5063c6d2af0d7f2e7f6ce",
"body": "mdim",
"is_bot": false,
"headline": "Merge pull request #611 from athombv/develop",
"author_name": "Jeroen Wienk",
"author_login": "jeroenwienk",
"committed_at": "2026-04-01T15:31:25Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "bf7774a21dd90c2bebc53af47826dcb27891120a",
"body": null,
"is_bot": false,
"headline": "4.1.1",
"author_name": "Homey Github Actions Bot",
"author_login": null,
"committed_at": "2026-04-01T15:30:21Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d3805c9b9a40e46f0fa54086af81ef3d42e01b1f",
"body": "chore: update homey-lib",
"is_bot": false,
"headline": "Merge pull request #609 from athombv/bump/homey-lib-6051fd6",
"author_name": "Jeroen Wienk",
"author_login": "jeroenwienk",
"committed_at": "2026-03-30T09:54:19Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4d150084815aee4bad3896f302777a83e31b08f3",
"body": null,
"is_bot": false,
"headline": "Merge branch 'develop' into feature/zigbee-firmware-updates",
"author_name": "Niels de Boer",
"author_login": "nozols",
"committed_at": "2026-03-27T14:38:39Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6051fd6c338d7c2c1c712f2c3b87165e9059b29c",
"body": null,
"is_bot": false,
"headline": "chore: update homey-lib",
"author_name": "Homey Github Actions Bot",
"author_login": null,
"committed_at": "2026-03-23T15:47:52Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5d1d0ba7a4eec8f4250ec1219a2a246b8eff7a70",
"body": "Merge develop into master",
"is_bot": false,
"headline": "Merge pull request #607 from athombv/develop",
"author_name": "Robin Bolscher",
"author_login": "RobinBol",
"committed_at": "2026-03-23T13:12:07Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f15b781a55fae4c8ca89afefa2cb692b26e420a3",
"body": null,
"is_bot": false,
"headline": "4.1.0",
"author_name": "Homey Github Actions Bot",
"author_login": null,
"committed_at": "2026-03-23T13:10:55Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e42c495bd93602272182e22a33cd32907cf99211",
"body": "chore: update homey-lib",
"is_bot": false,
"headline": "Merge pull request #606 from athombv/bump/homey-lib-da0029d",
"author_name": "Robin Bolscher",
"author_login": "RobinBol",
"committed_at": "2026-03-23T13:10:04Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "da0029dfb48858422c1b8cb8b6f6fd6996dfe8ab",
"body": null,
"is_bot": false,
"headline": "chore: update homey-lib",
"author_name": "Homey Github Actions Bot",
"author_login": null,
"committed_at": "2026-03-23T12:55:52Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "68658d3fad5a6942c607ac9e25e3bdbe926d9b4a",
"body": "…sage for version range",
"is_bot": false,
"headline": "fix(firmware-updates): update firmware file references and prompt mes…",
"author_name": "Niels de Boer",
"author_login": "nozols",
"committed_at": "2026-03-16T07:50:34Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "bb3fdbb29beaef4ade0773139145d128e1c7a47b",
"body": null,
"is_bot": false,
"headline": "chore: update homey-api",
"author_name": "Jeroen Wienk",
"author_login": "jeroenwienk",
"committed_at": "2026-03-15T14:04:44Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b89ea24c97e3c410454d6593b1f24c51072a3c51",
"body": null,
"is_bot": false,
"headline": "feat(firmware-updates): add firmware command for zigbee firmware updates",
"author_name": "Niels de Boer",
"author_login": "nozols",
"committed_at": "2026-03-13T10:39:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "eed69b00acfd9a708aef72604a89cd6c8a646e8b",
"body": "…se.json",
"is_bot": false,
"headline": "feat(firmware-updates): add support for driver.firmware-updates.compo…",
"author_name": "Niels de Boer",
"author_login": "nozols",
"committed_at": "2026-03-13T10:28:43Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "13e70870b3854bb2e5bbf455b446673dc140b583",
"body": "Merge develop into master",
"is_bot": false,
"headline": "Merge pull request #602 from athombv/develop",
"author_name": "Robin Bolscher",
"author_login": "RobinBol",
"committed_at": "2026-03-11T14:47:52Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "838cbd84f3811e821ba10d056394aa071b461808",
"body": null,
"is_bot": false,
"headline": "4.0.11",
"author_name": "Homey Github Actions Bot",
"author_login": null,
"committed_at": "2026-03-11T14:47:35Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e1dc0c50fd10635a0f8b984aaf9f391c4dabe6f8",
"body": "Merge develop into master",
"is_bot": false,
"headline": "Merge pull request #599 from athombv/develop",
"author_name": "Robin Bolscher",
"author_login": "RobinBol",
"committed_at": "2026-03-11T14:38:37Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c7fd2bc1a7a315841b5c7480c4ef1c08ba8637f1",
"body": null,
"is_bot": false,
"headline": "4.0.10",
"author_name": "Homey Github Actions Bot",
"author_login": null,
"committed_at": "2026-03-11T14:38:15Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "78c2bb15075d730e904d76da842d6ab35ff0e7f2",
"body": "…endencies\n\nfix: skip copying production dependencies during app validation",
"is_bot": false,
"headline": "Merge pull request #598 from athombv/fix/validate-skip-production-dep…",
"author_name": "Robin Bolscher",
"author_login": "RobinBol",
"committed_at": "2026-03-11T14:37:52Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2af96eeb799055e8780f7e62eb54d1deb0f9bf37",
"body": "Validation only needs source files and app.json to validate against\nhomey-lib rules - it does not need production dependencies copied to the\nbuild folder.\n\nThis was originally fixed in 282223f by passing\ncopyAppProductionDependencies: false in the validate command. However,\n8708d57 (Python support) \n[…]\n\nAs a result, homey app validate now runs npm ls in the app directory,\nwhich fails for apps that don't have node_modules installed (e.g. in CI\nenvironments using the homey-app-validate GitHub Action).",
"is_bot": false,
"headline": "fix: skip copying production dependencies during app validation",
"author_name": "Robin Bolscher",
"author_login": "RobinBol",
"committed_at": "2026-03-11T10:57:50Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "d131f4613cb3a8eb47caffc00d9b1e6bdf07065c",
"body": "Merge develop into master",
"is_bot": false,
"headline": "Merge pull request #592 from athombv/develop",
"author_name": "Jeroen Wienk",
"author_login": "jeroenwienk",
"committed_at": "2026-03-11T07:53:52Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b608dbcbf498d265014d95e090397f7bf40e91fd",
"body": null,
"is_bot": false,
"headline": "4.0.9",
"author_name": "Homey Github Actions Bot",
"author_login": null,
"committed_at": "2026-03-11T07:52:49Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f8c1a2380135c3b93fffad8350e8df7c96b14a74",
"body": null,
"is_bot": false,
"headline": "chore: update homey-api",
"author_name": "Jeroen Wienk",
"author_login": "jeroenwienk",
"committed_at": "2026-03-11T07:52:14Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "41f9a622a316e24d961618086740a842f89bc36a",
"body": "chore: update homey-lib",
"is_bot": false,
"headline": "Merge pull request #596 from athombv/bump/homey-lib-eab8d07",
"author_name": "Robin Bolscher",
"author_login": "RobinBol",
"committed_at": "2026-03-10T15:47:34Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "eab8d079459c6cb6b0bd7323eb9f2b6113cc2330",
"body": null,
"is_bot": false,
"headline": "chore: update homey-lib",
"author_name": "Homey Github Actions Bot",
"author_login": null,
"committed_at": "2026-03-10T15:37:47Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "39f56e40df8984df5b4b8a18f04580af4080e17e",
"body": null,
"is_bot": false,
"headline": "chore: update python app compatibility",
"author_name": "Jeroen Wienk",
"author_login": "jeroenwienk",
"committed_at": "2026-03-10T13:50:10Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "dc33334a6892a6e99d49331e36a4cff6415e0b75",
"body": "…nology\n\nFix redundant \"LAN network\" phrasing in offline error messages",
"is_bot": false,
"headline": "Merge pull request #593 from athombv/copilot/update-lan-network-termi…",
"author_name": "hmeerlo",
"author_login": "hmeerlo",
"committed_at": "2026-03-10T13:30:13Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c3516d9cbad40965be95ac05230ae69ece517e40",
"body": "Co-authored-by: hmeerlo <448150+hmeerlo@users.noreply.github.com>",
"is_bot": true,
"headline": "fix: replace redundant 'LAN network' with 'local network'",
"author_name": "copilot-swe-agent[bot]",
"author_login": "Copilot",
"committed_at": "2026-03-10T13:28:51Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2bf3de05054e4b4ec164f4c8c8655535e3eafb84",
"body": null,
"is_bot": true,
"headline": "Initial plan",
"author_name": "copilot-swe-agent[bot]",
"author_login": "Copilot",
"committed_at": "2026-03-10T13:26:38Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "39b3b6992cf640ffbbc2ba8488a611bed72b7f2c",
"body": null,
"is_bot": false,
"headline": "Merge branch 'master' into develop",
"author_name": "Robin Bolscher",
"author_login": "RobinBol",
"committed_at": "2026-03-09T15:14:57Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c346af49332c12ab596a668f69d585993b52df72",
"body": null,
"is_bot": false,
"headline": "4.0.8",
"author_name": "Homey Github Actions Bot",
"author_login": null,
"committed_at": "2026-03-09T15:13:58Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d26664a578b03a8bf77a13ed5a97ab8d66d84fe3",
"body": "chore: update homey-lib",
"is_bot": false,
"headline": "Merge pull request #591 from athombv/bump/homey-lib-03760c3",
"author_name": "Robin Bolscher",
"author_login": "RobinBol",
"committed_at": "2026-03-09T15:12:10Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "03760c3afa076f91b885a12750c4abd2ef82b745",
"body": null,
"is_bot": false,
"headline": "chore: update homey-lib",
"author_name": "Homey Github Actions Bot",
"author_login": null,
"committed_at": "2026-03-09T15:11:34Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f0dba4cae4de62ae8ca4823e7f9bdfc8faabbde6",
"body": null,
"is_bot": false,
"headline": "4.0.7",
"author_name": "Jeroen Wienk",
"author_login": "jeroenwienk",
"committed_at": "2026-03-09T11:11:00Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6003b1d08258aa852347f3f5b29ef53a07c5184f",
"body": null,
"is_bot": false,
"headline": "Merge remote-tracking branch 'origin/feature/python' into develop",
"author_name": "Jeroen Wienk",
"author_login": "jeroenwienk",
"committed_at": "2026-03-09T10:59:14Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "92f6979ddd2a612b3035fb449306cb069ae404b7",
"body": null,
"is_bot": false,
"headline": "ci: restore publish slack notification",
"author_name": "Jeroen Wienk",
"author_login": "jeroenwienk",
"committed_at": "2026-03-08T14:21:39Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "da86e01726ff822bf6eb5f8933af930758e923d6",
"body": null,
"is_bot": false,
"headline": "ci: test publish workflow without slack",
"author_name": "Jeroen Wienk",
"author_login": "jeroenwienk",
"committed_at": "2026-03-08T14:15:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "acf9ebc2fe6bf788c81124b2060077332c3d9398",
"body": null,
"is_bot": false,
"headline": "ci: use oidc for npm publish",
"author_name": "Jeroen Wienk",
"author_login": "jeroenwienk",
"committed_at": "2026-03-08T14:10:11Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9712719e6a1a293995bac21858cc5e10a1610726",
"body": null,
"is_bot": false,
"headline": "ci: add manual publish dry run",
"author_name": "Jeroen Wienk",
"author_login": "jeroenwienk",
"committed_at": "2026-03-08T13:58:08Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2f57ae8ad19b67cb955061438b9755bbafcb2b16",
"body": null,
"is_bot": false,
"headline": "ci: use active npm userconfig for publish",
"author_name": "Jeroen Wienk",
"author_login": "jeroenwienk",
"committed_at": "2026-03-08T13:55:27Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d03e74f0e54f9f3d4e011b0a754cf0e70948e885",
"body": null,
"is_bot": false,
"headline": "ci: separate install and publish auth",
"author_name": "Jeroen Wienk",
"author_login": "jeroenwienk",
"committed_at": "2026-03-08T13:52:41Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0d2cc10ea9f02b38869ec0ec8698bdabb8bc5ab4",
"body": null,
"is_bot": false,
"headline": "ci: install deps before publish",
"author_name": "Jeroen Wienk",
"author_login": "jeroenwienk",
"committed_at": "2026-03-08T13:46:02Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d88698a298ba0d8f4efea393e8b26e3bc7785397",
"body": "feat(cli): add runtime-generated homey api devices commands",
"is_bot": false,
"headline": "Merge pull request #581 from athombv/feature/api-homey-runtime-devices",
"author_name": "Jeroen Wienk",
"author_login": "jeroenwienk",
"committed_at": "2026-03-08T13:39:57Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "05bc592fde400d0553f9f54d505634b2d2e5be7f",
"body": null,
"is_bot": false,
"headline": "ci: align workflows with node 22",
"author_name": "Jeroen Wienk",
"author_login": "jeroenwienk",
"committed_at": "2026-03-08T13:37:19Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8d371260cfdafb4ad7d655a54a82e1798492f1cf",
"body": null,
"is_bot": false,
"headline": "fix(cli): remove dead manager handler state",
"author_name": "Jeroen Wienk",
"author_login": "jeroenwienk",
"committed_at": "2026-03-08T13:34:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3aa97ea472aa1a48e66cb704cab1f99ea52e2e43",
"body": null,
"is_bot": false,
"headline": "4.0.6",
"author_name": "Jeroen Wienk",
"author_login": "jeroenwienk",
"committed_at": "2026-03-08T13:15:28Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "63e5db9cfe1ea4dce1b4f58401c32c0f0b0f39e7",
"body": null,
"is_bot": false,
"headline": "Merge remote-tracking branch 'origin/testing' into develop",
"author_name": "Jeroen Wienk",
"author_login": "jeroenwienk",
"committed_at": "2026-03-08T13:07:53Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "37774f95b77d0064f8446c110d1c6e96c918e278",
"body": null,
"is_bot": false,
"headline": "chore: update homey-api to 3.17.1",
"author_name": "Jeroen Wienk",
"author_login": "jeroenwienk",
"committed_at": "2026-03-07T16:17:02Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "470dad9d565376f44cafd0942879190bc360f7e4",
"body": null,
"is_bot": false,
"headline": "add api discovery diagnose command",
"author_name": "Jeroen Wienk",
"author_login": "jeroenwienk",
"committed_at": "2026-03-07T15:31:58Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "700cf24b587d2f10720ab1fea0a210e9efd6a830",
"body": null,
"is_bot": false,
"headline": "fix api runtime client cleanup",
"author_name": "Jeroen Wienk",
"author_login": "jeroenwienk",
"committed_at": "2026-03-07T14:16:36Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "32feaa186990d6cf052cb980eb15e7a18f8fbdf0",
"body": null,
"is_bot": false,
"headline": "feat(cli): add json and jq output to core commands",
"author_name": "Jeroen Wienk",
"author_login": "jeroenwienk",
"committed_at": "2026-03-07T10:41:13Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "22b9d6b04cbdebabca6d3574c67e422bfeb3a79c",
"body": null,
"is_bot": false,
"headline": "chore(api): note auth fallback follow-up",
"author_name": "Jeroen Wienk",
"author_login": "jeroenwienk",
"committed_at": "2026-03-07T00:40:41Z",
"body_truncated": false,
"is_coding_agent": false
}
],
"releases_count": 99,
"commits_last_year": 344,
"latest_release_at": "2026-07-17T09:16:17Z",
"latest_release_tag": "v4.4.1",
"releases_from_tags": true,
"days_since_last_push": 4,
"active_weeks_last_year": 39,
"days_since_latest_release": 4,
"mean_days_between_releases": 12.9
},
"community": {
"has_readme": true,
"has_license": false,
"has_description": true,
"has_contributing": false,
"health_percentage": 25,
"has_issue_template": false,
"has_code_of_conduct": false,
"has_pull_request_template": false
},
"ecosystem": {
"packages": [
{
"name": "homey",
"exists": true,
"license": "ISC",
"keywords": [],
"ecosystem": "npm",
"matches_repo": true,
"registry_url": "https://www.npmjs.com/package/homey",
"is_deprecated": false,
"latest_version": "4.4.1",
"repository_url": "https://github.com/athombv/node-homey",
"versions_count": 248,
"total_downloads": null,
"dependents_count": null,
"deprecation_note": null,
"maintainers_count": 3,
"monthly_downloads": 8126,
"first_published_at": "2017-04-28T08:36:17.782000Z",
"latest_published_at": "2026-07-17T09:17:26.960000Z",
"latest_version_yanked": null,
"days_since_latest_publish": 4
}
]
},
"popularity": {
"forks": 20,
"stars": 12,
"watchers": 3,
"fork_history": {
"days": [
{
"date": "2020-02-17",
"count": 1
},
{
"date": "2021-03-30",
"count": 1
},
{
"date": "2022-01-10",
"count": 1
},
{
"date": "2023-04-01",
"count": 1
},
{
"date": "2023-08-05",
"count": 1
},
{
"date": "2023-10-26",
"count": 1
},
{
"date": "2024-01-24",
"count": 1
},
{
"date": "2024-02-08",
"count": 1
},
{
"date": "2024-08-13",
"count": 1
},
{
"date": "2024-10-01",
"count": 1
},
{
"date": "2024-11-02",
"count": 1
},
{
"date": "2025-01-31",
"count": 1
},
{
"date": "2025-03-23",
"count": 1
},
{
"date": "2025-07-07",
"count": 1
},
{
"date": "2025-10-24",
"count": 1
},
{
"date": "2025-12-18",
"count": 1
},
{
"date": "2026-04-21",
"count": 1
},
{
"date": "2026-05-11",
"count": 1
},
{
"date": "2026-06-28",
"count": 1
},
{
"date": "2026-07-12",
"count": 1
}
],
"complete": true,
"collected": 20,
"total_forks": 20
},
"star_history": {
"days": [
{
"date": "2020-10-05",
"count": 1
},
{
"date": "2021-02-28",
"count": 1
},
{
"date": "2022-05-07",
"count": 1
},
{
"date": "2023-02-02",
"count": 1
},
{
"date": "2023-03-29",
"count": 1
},
{
"date": "2023-12-12",
"count": 1
},
{
"date": "2024-07-17",
"count": 1
},
{
"date": "2024-09-11",
"count": 1
},
{
"date": "2024-12-17",
"count": 1
},
{
"date": "2025-12-30",
"count": 1
},
{
"date": "2026-05-13",
"count": 1
}
],
"complete": true,
"collected": 11,
"total_stars": 12
},
"open_issues_and_prs": 6
},
"ai_readiness": {
"has_nix": false,
"example_dirs": [],
"has_llms_txt": false,
"has_dockerfile": false,
"has_mcp_signal": false,
"bootstrap_files": [],
"api_schema_files": [],
"has_devcontainer": false,
"typecheck_configs": [],
"toolchain_manifests": [],
"largest_source_bytes": 123471,
"source_files_sampled": 118,
"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.3.4",
"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": "protobufjs",
"direct": false,
"version": "7.5.4",
"severity": "critical",
"ecosystem": "npm",
"cvss_score": 9.8,
"advisory_ids": [
"GHSA-2pr8-phx7-x9h3",
"GHSA-66ff-xgx4-vchm",
"GHSA-685m-2w69-288q",
"GHSA-75px-5xx7-5xc7",
"GHSA-f38q-mgvj-vph7",
"GHSA-fx83-v9x8-x52w",
"GHSA-j3f2-48v5-ccww",
"GHSA-jggg-4jg4-v7c6",
"GHSA-jvwf-75h9-cwgg",
"GHSA-q6x5-8v7m-xcrf"
],
"fixed_version": "8.6.6",
"advisory_count": 12,
"oldest_advisory_days": 96
},
{
"name": "sharp",
"direct": true,
"version": "0.33.4",
"severity": "high",
"ecosystem": "npm",
"cvss_score": 7.3,
"advisory_ids": [
"GHSA-f88m-g3jw-g9cj"
],
"fixed_version": "0.35.0",
"advisory_count": 1,
"oldest_advisory_days": 0
},
{
"name": "@grpc/grpc-js",
"direct": false,
"version": "1.14.3",
"severity": "high",
"ecosystem": "npm",
"cvss_score": 7.5,
"advisory_ids": [
"GHSA-5375-pq7m-f5r2",
"GHSA-99f4-grh7-6pcq"
],
"fixed_version": "1.14.4",
"advisory_count": 2,
"oldest_advisory_days": 40
},
{
"name": "brace-expansion",
"direct": false,
"version": "1.1.12",
"severity": "high",
"ecosystem": "npm",
"cvss_score": 7.5,
"advisory_ids": [
"GHSA-3jxr-9vmj-r5cp",
"GHSA-f886-m6hf-6m8v"
],
"fixed_version": "5.0.7",
"advisory_count": 2,
"oldest_advisory_days": 117
},
{
"name": "brace-expansion",
"direct": false,
"version": "5.0.4",
"severity": "high",
"ecosystem": "npm",
"cvss_score": 7.5,
"advisory_ids": [
"GHSA-3jxr-9vmj-r5cp",
"GHSA-f886-m6hf-6m8v",
"GHSA-jxxr-4gwj-5jf2"
],
"fixed_version": "5.0.7",
"advisory_count": 3,
"oldest_advisory_days": 117
},
{
"name": "engine.io",
"direct": false,
"version": "6.6.5",
"severity": "high",
"ecosystem": "npm",
"cvss_score": 7.5,
"advisory_ids": [
"GHSA-r635-g3xr-vw7x"
],
"fixed_version": "6.6.7",
"advisory_count": 1,
"oldest_advisory_days": 1
},
{
"name": "form-data",
"direct": false,
"version": "4.0.5",
"severity": "high",
"ecosystem": "npm",
"cvss_score": 7.5,
"advisory_ids": [
"GHSA-hmw2-7cc7-3qxx"
],
"fixed_version": "4.0.6",
"advisory_count": 1,
"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": "path-to-regexp",
"direct": false,
"version": "0.1.12",
"severity": "high",
"ecosystem": "npm",
"cvss_score": 7.5,
"advisory_ids": [
"GHSA-37ch-88jc-xwx2"
],
"fixed_version": "0.1.13",
"advisory_count": 1,
"oldest_advisory_days": 116
},
{
"name": "picomatch",
"direct": false,
"version": "2.3.1",
"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": "socket.io-parser",
"direct": false,
"version": "3.3.4",
"severity": "high",
"ecosystem": "npm",
"cvss_score": 7.5,
"advisory_ids": [
"GHSA-677m-j7p3-52f9"
],
"fixed_version": "4.2.6",
"advisory_count": 1,
"oldest_advisory_days": 125
},
{
"name": "socket.io-parser",
"direct": false,
"version": "4.2.4",
"severity": "high",
"ecosystem": "npm",
"cvss_score": 7.5,
"advisory_ids": [
"GHSA-677m-j7p3-52f9"
],
"fixed_version": "4.2.6",
"advisory_count": 1,
"oldest_advisory_days": 125
},
{
"name": "tmp",
"direct": false,
"version": "0.0.33",
"severity": "high",
"ecosystem": "npm",
"cvss_score": 7.5,
"advisory_ids": [
"GHSA-52f5-9888-hmc6",
"GHSA-ph9p-34f9-6g65"
],
"fixed_version": "0.2.6",
"advisory_count": 2,
"oldest_advisory_days": 349
},
{
"name": "tmp",
"direct": false,
"version": "0.2.5",
"severity": "high",
"ecosystem": "npm",
"cvss_score": 7.5,
"advisory_ids": [
"GHSA-ph9p-34f9-6g65"
],
"fixed_version": "0.2.6",
"advisory_count": 1,
"oldest_advisory_days": 56
},
{
"name": "uuid",
"direct": false,
"version": "10.0.0",
"severity": "high",
"ecosystem": "npm",
"cvss_score": 7.5,
"advisory_ids": [
"GHSA-w5hq-g745-h8pq"
],
"fixed_version": "13.0.1",
"advisory_count": 1,
"oldest_advisory_days": 90
},
{
"name": "ws",
"direct": false,
"version": "7.5.10",
"severity": "high",
"ecosystem": "npm",
"cvss_score": 7.5,
"advisory_ids": [
"GHSA-96hv-2xvq-fx4p"
],
"fixed_version": "8.21.0",
"advisory_count": 1,
"oldest_advisory_days": 36
},
{
"name": "ws",
"direct": false,
"version": "8.17.1",
"severity": "high",
"ecosystem": "npm",
"cvss_score": 7.5,
"advisory_ids": [
"GHSA-58qx-3vcg-4xpx",
"GHSA-96hv-2xvq-fx4p"
],
"fixed_version": "8.21.0",
"advisory_count": 2,
"oldest_advisory_days": 64
},
{
"name": "ws",
"direct": false,
"version": "8.18.3",
"severity": "high",
"ecosystem": "npm",
"cvss_score": 7.5,
"advisory_ids": [
"GHSA-58qx-3vcg-4xpx",
"GHSA-96hv-2xvq-fx4p"
],
"fixed_version": "8.21.0",
"advisory_count": 2,
"oldest_advisory_days": 64
},
{
"name": "smol-toml",
"direct": true,
"version": "1.6.0",
"severity": "moderate",
"ecosystem": "npm",
"cvss_score": 5.3,
"advisory_ids": [
"GHSA-v3rj-xjv7-4jmq"
],
"fixed_version": "1.6.1",
"advisory_count": 1,
"oldest_advisory_days": 118
},
{
"name": "@protobufjs/utf8",
"direct": false,
"version": "1.1.0",
"severity": "moderate",
"ecosystem": "npm",
"cvss_score": 5.3,
"advisory_ids": [
"GHSA-q6x5-8v7m-xcrf"
],
"fixed_version": "8.0.2",
"advisory_count": 1,
"oldest_advisory_days": 70
},
{
"name": "got",
"direct": false,
"version": "9.6.0",
"severity": "moderate",
"ecosystem": "npm",
"cvss_score": 5.3,
"advisory_ids": [
"GHSA-pfrx-2q88-qq97"
],
"fixed_version": "12.1.0",
"advisory_count": 1,
"oldest_advisory_days": 1494
},
{
"name": "parseuri",
"direct": false,
"version": "0.0.6",
"severity": "moderate",
"ecosystem": "npm",
"cvss_score": 5.3,
"advisory_ids": [
"GHSA-6fx8-h7jm-663j"
],
"fixed_version": null,
"advisory_count": 1,
"oldest_advisory_days": 552
},
{
"name": "qs",
"direct": false,
"version": "6.14.2",
"severity": "moderate",
"ecosystem": "npm",
"cvss_score": 5.3,
"advisory_ids": [
"GHSA-q8mj-m7cp-5q26"
],
"fixed_version": "6.15.2",
"advisory_count": 1,
"oldest_advisory_days": 60
},
{
"name": "yaml",
"direct": false,
"version": "2.8.2",
"severity": "moderate",
"ecosystem": "npm",
"cvss_score": 4.3,
"advisory_ids": [
"GHSA-48c2-rrv3-qjmp"
],
"fixed_version": "2.8.3",
"advisory_count": 1,
"oldest_advisory_days": 118
},
{
"name": "body-parser",
"direct": false,
"version": "1.20.4",
"severity": "low",
"ecosystem": "npm",
"cvss_score": 3.7,
"advisory_ids": [
"GHSA-v422-hmwv-36x6"
],
"fixed_version": "2.3.0",
"advisory_count": 1,
"oldest_advisory_days": 1
}
],
"collected": true,
"malicious": [],
"truncated": false,
"by_severity": {
"low": 1,
"high": 17,
"critical": 2,
"moderate": 6
},
"advisory_count": 47,
"affected_count": 26,
"assessed_count": 463,
"malicious_count": 0,
"assessed_package": null,
"unassessed_count": 0,
"direct_affected_count": 2
},
"ecosystems": [
"npm"
],
"dependencies": [
{
"name": "@anthropic-ai/sdk",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^0.91.0"
},
{
"name": "cli-table",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^0.3.11"
},
{
"name": "colors",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^1.1.2 <=1.4.0"
},
{
"name": "deepmerge",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^4.3.1"
},
{
"name": "dockerode",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^4.0.2"
},
{
"name": "express",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^4.19.2"
},
{
"name": "figures",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^3.2.0"
},
{
"name": "filesize",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^6.4.0"
},
{
"name": "fs-extra",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^10.1.0"
},
{
"name": "get-port",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^5.1.1"
},
{
"name": "homey-api",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^3.17.7"
},
{
"name": "homey-lib",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^2.51.3"
},
{
"name": "ignore-walk",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^3.0.3"
},
{
"name": "inquirer",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "8.1.2"
},
{
"name": "object-path",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^0.11.4"
},
{
"name": "open",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^8.4.2"
},
{
"name": "openai",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^4.52.7"
},
{
"name": "p-queue",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^6.6.2"
},
{
"name": "semver",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^7.6.0"
},
{
"name": "sharp",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^0.33.4"
},
{
"name": "smol-toml",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^1.6.0"
},
{
"name": "socket.io",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^4.7.5"
},
{
"name": "socket.io-client",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^4.7.5"
},
{
"name": "tar-fs",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^2.1.1"
},
{
"name": "tmp-promise",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^3.0.3"
},
{
"name": "update-notifier",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^5.1.0"
},
{
"name": "yargs",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^18.0.0"
}
],
"all_dependencies": {
"error": null,
"source": "github-sbom",
"packages": [
{
"name": "@anthropic-ai/sdk",
"direct": true,
"version": "0.91.1",
"ecosystem": "npm"
},
{
"name": "cli-table",
"direct": true,
"version": "0.3.11",
"ecosystem": "npm"
},
{
"name": "colors",
"direct": true,
"version": "1.0.3",
"ecosystem": "npm"
},
{
"name": "colors",
"direct": true,
"version": "1.4.0",
"ecosystem": "npm"
},
{
"name": "deepmerge",
"direct": true,
"version": "4.3.1",
"ecosystem": "npm"
},
{
"name": "dockerode",
"direct": true,
"version": "4.0.9",
"ecosystem": "npm"
},
{
"name": "express",
"direct": true,
"version": "4.22.1",
"ecosystem": "npm"
},
{
"name": "figures",
"direct": true,
"version": "3.2.0",
"ecosystem": "npm"
},
{
"name": "filesize",
"direct": true,
"version": "6.4.0",
"ecosystem": "npm"
},
{
"name": "fs-extra",
"direct": true,
"version": "10.1.0",
"ecosystem": "npm"
},
{
"name": "get-port",
"direct": true,
"version": "5.1.1",
"ecosystem": "npm"
},
{
"name": "homey-api",
"direct": true,
"version": "3.17.7",
"ecosystem": "npm"
},
{
"name": "homey-lib",
"direct": true,
"version": "2.51.3",
"ecosystem": "npm"
},
{
"name": "ignore-walk",
"direct": true,
"version": "3.0.4",
"ecosystem": "npm"
},
{
"name": "inquirer",
"direct": true,
"version": "8.1.2",
"ecosystem": "npm"
},
{
"name": "object-path",
"direct": true,
"version": "0.11.8",
"ecosystem": "npm"
},
{
"name": "open",
"direct": true,
"version": "8.4.2",
"ecosystem": "npm"
},
{
"name": "openai",
"direct": true,
"version": "4.52.7",
"ecosystem": "npm"
},
{
"name": "p-queue",
"direct": true,
"version": "6.6.2",
"ecosystem": "npm"
},
{
"name": "semver",
"direct": true,
"version": "5.7.2",
"ecosystem": "npm"
},
{
"name": "semver",
"direct": true,
"version": "6.3.1",
"ecosystem": "npm"
},
{
"name": "semver",
"direct": true,
"version": "7.6.2",
"ecosystem": "npm"
},
{
"name": "sharp",
"direct": true,
"version": "0.33.4",
"ecosystem": "npm"
},
{
"name": "smol-toml",
"direct": true,
"version": "1.6.0",
"ecosystem": "npm"
},
{
"name": "socket.io",
"direct": true,
"version": "4.8.3",
"ecosystem": "npm"
},
{
"name": "socket.io-client",
"direct": true,
"version": "2.5.0",
"ecosystem": "npm"
},
{
"name": "socket.io-client",
"direct": true,
"version": "4.7.5",
"ecosystem": "npm"
},
{
"name": "tar-fs",
"direct": true,
"version": "2.1.4",
"ecosystem": "npm"
},
{
"name": "tmp-promise",
"direct": true,
"version": "3.0.3",
"ecosystem": "npm"
},
{
"name": "update-notifier",
"direct": true,
"version": "5.1.0",
"ecosystem": "npm"
},
{
"name": "yargs",
"direct": true,
"version": "17.7.2",
"ecosystem": "npm"
},
{
"name": "yargs",
"direct": true,
"version": "18.0.0",
"ecosystem": "npm"
},
{
"name": "@babel/runtime",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@balena/dockerignore",
"direct": false,
"version": "1.0.2",
"ecosystem": "npm"
},
{
"name": "@emnapi/runtime",
"direct": false,
"version": "1.2.0",
"ecosystem": "npm"
},
{
"name": "@eslint-community/eslint-utils",
"direct": false,
"version": "4.9.1",
"ecosystem": "npm"
},
{
"name": "@eslint-community/regexpp",
"direct": false,
"version": "4.12.2",
"ecosystem": "npm"
},
{
"name": "@eslint/config-array",
"direct": false,
"version": "0.23.2",
"ecosystem": "npm"
},
{
"name": "@eslint/config-helpers",
"direct": false,
"version": "0.5.2",
"ecosystem": "npm"
},
{
"name": "@eslint/core",
"direct": false,
"version": "1.1.0",
"ecosystem": "npm"
},
{
"name": "@eslint/js",
"direct": false,
"version": "10.0.1",
"ecosystem": "npm"
},
{
"name": "@eslint/object-schema",
"direct": false,
"version": "3.0.2",
"ecosystem": "npm"
},
{
"name": "@eslint/plugin-kit",
"direct": false,
"version": "0.6.0",
"ecosystem": "npm"
},
{
"name": "@grpc/grpc-js",
"direct": false,
"version": "1.14.3",
"ecosystem": "npm"
},
{
"name": "@grpc/proto-loader",
"direct": false,
"version": "0.7.15",
"ecosystem": "npm"
},
{
"name": "@grpc/proto-loader",
"direct": false,
"version": "0.8.0",
"ecosystem": "npm"
},
{
"name": "@humanfs/core",
"direct": false,
"version": "0.19.1",
"ecosystem": "npm"
},
{
"name": "@humanfs/node",
"direct": false,
"version": "0.16.7",
"ecosystem": "npm"
},
{
"name": "@humanwhocodes/module-importer",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "@humanwhocodes/retry",
"direct": false,
"version": "0.4.3",
"ecosystem": "npm"
},
{
"name": "@img/sharp-darwin-arm64",
"direct": false,
"version": "0.33.4",
"ecosystem": "npm"
},
{
"name": "@img/sharp-darwin-x64",
"direct": false,
"version": "0.33.4",
"ecosystem": "npm"
},
{
"name": "@img/sharp-libvips-darwin-arm64",
"direct": false,
"version": "1.0.2",
"ecosystem": "npm"
},
{
"name": "@img/sharp-libvips-darwin-x64",
"direct": false,
"version": "1.0.2",
"ecosystem": "npm"
},
{
"name": "@img/sharp-libvips-linux-arm",
"direct": false,
"version": "1.0.2",
"ecosystem": "npm"
},
{
"name": "@img/sharp-libvips-linux-arm64",
"direct": false,
"version": "1.0.2",
"ecosystem": "npm"
},
{
"name": "@img/sharp-libvips-linux-s390x",
"direct": false,
"version": "1.0.2",
"ecosystem": "npm"
},
{
"name": "@img/sharp-libvips-linux-x64",
"direct": false,
"version": "1.0.2",
"ecosystem": "npm"
},
{
"name": "@img/sharp-libvips-linuxmusl-arm64",
"direct": false,
"version": "1.0.2",
"ecosystem": "npm"
},
{
"name": "@img/sharp-libvips-linuxmusl-x64",
"direct": false,
"version": "1.0.2",
"ecosystem": "npm"
},
{
"name": "@img/sharp-linux-arm",
"direct": false,
"version": "0.33.4",
"ecosystem": "npm"
},
{
"name": "@img/sharp-linux-arm64",
"direct": false,
"version": "0.33.4",
"ecosystem": "npm"
},
{
"name": "@img/sharp-linux-s390x",
"direct": false,
"version": "0.33.4",
"ecosystem": "npm"
},
{
"name": "@img/sharp-linux-x64",
"direct": false,
"version": "0.33.4",
"ecosystem": "npm"
},
{
"name": "@img/sharp-linuxmusl-arm64",
"direct": false,
"version": "0.33.4",
"ecosystem": "npm"
},
{
"name": "@img/sharp-linuxmusl-x64",
"direct": false,
"version": "0.33.4",
"ecosystem": "npm"
},
{
"name": "@img/sharp-wasm32",
"direct": false,
"version": "0.33.4",
"ecosystem": "npm"
},
{
"name": "@img/sharp-win32-ia32",
"direct": false,
"version": "0.33.4",
"ecosystem": "npm"
},
{
"name": "@img/sharp-win32-x64",
"direct": false,
"version": "0.33.4",
"ecosystem": "npm"
},
{
"name": "@js-sdsl/ordered-map",
"direct": false,
"version": "4.4.2",
"ecosystem": "npm"
},
{
"name": "@protobufjs/aspromise",
"direct": false,
"version": "1.1.2",
"ecosystem": "npm"
},
{
"name": "@protobufjs/base64",
"direct": false,
"version": "1.1.2",
"ecosystem": "npm"
},
{
"name": "@protobufjs/codegen",
"direct": false,
"version": "2.0.4",
"ecosystem": "npm"
},
{
"name": "@protobufjs/eventemitter",
"direct": false,
"version": "1.1.0",
"ecosystem": "npm"
},
{
"name": "@protobufjs/fetch",
"direct": false,
"version": "1.1.0",
"ecosystem": "npm"
},
{
"name": "@protobufjs/float",
"direct": false,
"version": "1.0.2",
"ecosystem": "npm"
},
{
"name": "@protobufjs/inquire",
"direct": false,
"version": "1.1.0",
"ecosystem": "npm"
},
{
"name": "@protobufjs/path",
"direct": false,
"version": "1.1.2",
"ecosystem": "npm"
},
{
"name": "@protobufjs/pool",
"direct": false,
"version": "1.1.0",
"ecosystem": "npm"
},
{
"name": "@protobufjs/utf8",
"direct": false,
"version": "1.1.0",
"ecosystem": "npm"
},
{
"name": "@sindresorhus/is",
"direct": false,
"version": "0.14.0",
"ecosystem": "npm"
},
{
"name": "@socket.io/component-emitter",
"direct": false,
"version": "3.1.1",
"ecosystem": "npm"
},
{
"name": "@szmarczak/http-timer",
"direct": false,
"version": "1.1.2",
"ecosystem": "npm"
},
{
"name": "@types/cors",
"direct": false,
"version": "2.8.19",
"ecosystem": "npm"
},
{
"name": "@types/esrecurse",
"direct": false,
"version": "4.3.1",
"ecosystem": "npm"
},
{
"name": "@types/estree",
"direct": false,
"version": "1.0.8",
"ecosystem": "npm"
},
{
"name": "@types/json-schema",
"direct": false,
"version": "7.0.15",
"ecosystem": "npm"
},
{
"name": "@types/node",
"direct": false,
"version": "18.19.39",
"ecosystem": "npm"
},
{
"name": "@types/node",
"direct": false,
"version": "20.12.7",
"ecosystem": "npm"
},
{
"name": "@types/node-fetch",
"direct": false,
"version": "2.6.11",
"ecosystem": "npm"
},
{
"name": "abort-controller",
"direct": false,
"version": "3.0.0",
"ecosystem": "npm"
},
{
"name": "accepts",
"direct": false,
"version": "1.3.8",
"ecosystem": "npm"
},
{
"name": "acorn",
"direct": false,
"version": "8.16.0",
"ecosystem": "npm"
},
{
"name": "acorn-jsx",
"direct": false,
"version": "5.3.2",
"ecosystem": "npm"
},
{
"name": "after",
"direct": false,
"version": "0.8.2",
"ecosystem": "npm"
},
{
"name": "agentkeepalive",
"direct": false,
"version": "4.5.0",
"ecosystem": "npm"
},
{
"name": "ajv",
"direct": false,
"version": "6.14.0",
"ecosystem": "npm"
},
{
"name": "ansi-align",
"direct": false,
"version": "3.0.1",
"ecosystem": "npm"
},
{
"name": "ansi-escapes",
"direct": false,
"version": "4.3.2",
"ecosystem": "npm"
},
{
"name": "ansi-escapes",
"direct": false,
"version": "7.3.0",
"ecosystem": "npm"
},
{
"name": "ansi-regex",
"direct": false,
"version": "5.0.1",
"ecosystem": "npm"
},
{
"name": "ansi-regex",
"direct": false,
"version": "6.2.2",
"ecosystem": "npm"
},
{
"name": "ansi-styles",
"direct": false,
"version": "4.3.0",
"ecosystem": "npm"
},
{
"name": "ansi-styles",
"direct": false,
"version": "6.2.3",
"ecosystem": "npm"
},
{
"name": "array-flatten",
"direct": false,
"version": "1.1.1",
"ecosystem": "npm"
},
{
"name": "arraybuffer.slice",
"direct": false,
"version": "0.0.7",
"ecosystem": "npm"
},
{
"name": "asn1",
"direct": false,
"version": "0.2.6",
"ecosystem": "npm"
},
{
"name": "asynckit",
"direct": false,
"version": "0.4.0",
"ecosystem": "npm"
},
{
"name": "backo2",
"direct": false,
"version": "1.0.2",
"ecosystem": "npm"
},
{
"name": "balanced-match",
"direct": false,
"version": "1.0.2",
"ecosystem": "npm"
},
{
"name": "balanced-match",
"direct": false,
"version": "4.0.4",
"ecosystem": "npm"
},
{
"name": "base64-arraybuffer",
"direct": false,
"version": "0.1.4",
"ecosystem": "npm"
},
{
"name": "base64-js",
"direct": false,
"version": "1.5.1",
"ecosystem": "npm"
},
{
"name": "base64id",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "bcrypt-pbkdf",
"direct": false,
"version": "1.0.2",
"ecosystem": "npm"
},
{
"name": "bl",
"direct": false,
"version": "4.1.0",
"ecosystem": "npm"
},
{
"name": "blob",
"direct": false,
"version": "0.0.5",
"ecosystem": "npm"
},
{
"name": "body-parser",
"direct": false,
"version": "1.20.4",
"ecosystem": "npm"
},
{
"name": "boxen",
"direct": false,
"version": "5.1.2",
"ecosystem": "npm"
},
{
"name": "brace-expansion",
"direct": false,
"version": "1.1.12",
"ecosystem": "npm"
},
{
"name": "brace-expansion",
"direct": false,
"version": "5.0.4",
"ecosystem": "npm"
},
{
"name": "braces",
"direct": false,
"version": "3.0.3",
"ecosystem": "npm"
},
{
"name": "buffer",
"direct": false,
"version": "5.7.1",
"ecosystem": "npm"
},
{
"name": "buffer",
"direct": false,
"version": "6.0.3",
"ecosystem": "npm"
},
{
"name": "buildcheck",
"direct": false,
"version": "0.0.7",
"ecosystem": "npm"
},
{
"name": "bytes",
"direct": false,
"version": "3.1.2",
"ecosystem": "npm"
},
{
"name": "cacheable-request",
"direct": false,
"version": "6.1.0",
"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": "camelcase",
"direct": false,
"version": "6.3.0",
"ecosystem": "npm"
},
{
"name": "chalk",
"direct": false,
"version": "4.1.1",
"ecosystem": "npm"
},
{
"name": "chardet",
"direct": false,
"version": "0.7.0",
"ecosystem": "npm"
},
{
"name": "chownr",
"direct": false,
"version": "1.1.4",
"ecosystem": "npm"
},
{
"name": "ci-info",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "cli-boxes",
"direct": false,
"version": "2.2.1",
"ecosystem": "npm"
},
{
"name": "cli-cursor",
"direct": false,
"version": "3.1.0",
"ecosystem": "npm"
},
{
"name": "cli-cursor",
"direct": false,
"version": "5.0.0",
"ecosystem": "npm"
},
{
"name": "cli-spinners",
"direct": false,
"version": "2.6.0",
"ecosystem": "npm"
},
{
"name": "cli-truncate",
"direct": false,
"version": "5.2.0",
"ecosystem": "npm"
},
{
"name": "cli-width",
"direct": false,
"version": "3.0.0",
"ecosystem": "npm"
},
{
"name": "cliui",
"direct": false,
"version": "8.0.1",
"ecosystem": "npm"
},
{
"name": "cliui",
"direct": false,
"version": "9.0.1",
"ecosystem": "npm"
},
{
"name": "clone",
"direct": false,
"version": "1.0.4",
"ecosystem": "npm"
},
{
"name": "clone-response",
"direct": false,
"version": "1.0.3",
"ecosystem": "npm"
},
{
"name": "color",
"direct": false,
"version": "4.2.3",
"ecosystem": "npm"
},
{
"name": "color-convert",
"direct": false,
"version": "2.0.1",
"ecosystem": "npm"
},
{
"name": "color-name",
"direct": false,
"version": "1.1.4",
"ecosystem": "npm"
},
{
"name": "color-string",
"direct": false,
"version": "1.9.1",
"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": "14.0.3",
"ecosystem": "npm"
},
{
"name": "component-bind",
"direct": false,
"version": "1.0.0",
"ecosystem": "npm"
},
{
"name": "component-emitter",
"direct": false,
"version": "1.3.1",
"ecosystem": "npm"
},
{
"name": "component-inherit",
"direct": false,
"version": "0.0.3",
"ecosystem": "npm"
},
{
"name": "concat-map",
"direct": false,
"version": "0.0.1",
"ecosystem": "npm"
},
{
"name": "configstore",
"direct": false,
"version": "5.0.1",
"ecosystem": "npm"
},
{
"name": "content-disposition",
"direct": false,
"version": "0.5.4",
"ecosystem": "npm"
},
{
"name": "content-type",
"direct": false,
"version": "1.0.5",
"ecosystem": "npm"
},
{
"name": "cookie",
"direct": false,
"version": "0.7.2",
"ecosystem": "npm"
},
{
"name": "cookie-signature",
"direct": false,
"version": "1.0.6",
"ecosystem": "npm"
},
{
"name": "cors",
"direct": false,
"version": "2.8.6",
"ecosystem": "npm"
},
{
"name": "cpu-features",
"direct": false,
"version": "0.0.10",
"ecosystem": "npm"
},
{
"name": "cross-spawn",
"direct": false,
"version": "7.0.6",
"ecosystem": "npm"
},
{
"name": "crypto-random-string",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "debug",
"direct": false,
"version": "2.6.9",
"ecosystem": "npm"
},
{
"name": "debug",
"direct": false,
"version": "3.1.0",
"ecosystem": "npm"
},
{
"name": "debug",
"direct": false,
"version": "4.3.4",
"ecosystem": "npm"
},
{
"name": "debug",
"direct": false,
"version": "4.4.3",
"ecosystem": "npm"
},
{
"name": "decompress-response",
"direct": false,
"version": "3.3.0",
"ecosystem": "npm"
},
{
"name": "deep-extend",
"direct": false,
"version": "0.6.0",
"ecosystem": "npm"
},
{
"name": "deep-is",
"direct": false,
"version": "0.1.4",
"ecosystem": "npm"
},
{
"name": "defaults",
"direct": false,
"version": "1.0.3",
"ecosystem": "npm"
},
{
"name": "defer-to-connect",
"direct": false,
"version": "1.1.3",
"ecosystem": "npm"
},
{
"name": "define-lazy-prop",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "delayed-stream",
"direct": false,
"version": "1.0.0",
"ecosystem": "npm"
},
{
"name": "depd",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "destroy",
"direct": false,
"version": "1.2.0",
"ecosystem": "npm"
},
{
"name": "detect-libc",
"direct": false,
"version": "2.0.3",
"ecosystem": "npm"
},
{
"name": "docker-modem",
"direct": false,
"version": "5.0.6",
"ecosystem": "npm"
},
{
"name": "dot-prop",
"direct": false,
"version": "5.3.0",
"ecosystem": "npm"
},
{
"name": "dunder-proto",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "duplexer3",
"direct": false,
"version": "0.1.5",
"ecosystem": "npm"
},
{
"name": "ee-first",
"direct": false,
"version": "1.1.1",
"ecosystem": "npm"
},
{
"name": "emoji-regex",
"direct": false,
"version": "10.6.0",
"ecosystem": "npm"
},
{
"name": "emoji-regex",
"direct": false,
"version": "8.0.0",
"ecosystem": "npm"
},
{
"name": "encodeurl",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "end-of-stream",
"direct": false,
"version": "1.4.4",
"ecosystem": "npm"
},
{
"name": "engine.io",
"direct": false,
"version": "6.6.5",
"ecosystem": "npm"
},
{
"name": "engine.io-client",
"direct": false,
"version": "3.5.6",
"ecosystem": "npm"
},
{
"name": "engine.io-client",
"direct": false,
"version": "6.5.4",
"ecosystem": "npm"
},
{
"name": "engine.io-parser",
"direct": false,
"version": "2.2.1",
"ecosystem": "npm"
},
{
"name": "engine.io-parser",
"direct": false,
"version": "5.2.3",
"ecosystem": "npm"
},
{
"name": "environment",
"direct": false,
"version": "1.1.0",
"ecosystem": "npm"
},
{
"name": "es-define-property",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "es-errors",
"direct": false,
"version": "1.3.0",
"ecosystem": "npm"
},
{
"name": "es-object-atoms",
"direct": false,
"version": "1.1.1",
"ecosystem": "npm"
},
{
"name": "es-set-tostringtag",
"direct": false,
"version": "2.1.0",
"ecosystem": "npm"
},
{
"name": "escalade",
"direct": false,
"version": "3.1.1",
"ecosystem": "npm"
},
{
"name": "escape-goat",
"direct": false,
"version": "2.1.1",
"ecosystem": "npm"
},
{
"name": "escape-html",
"direct": false,
"version": "1.0.3",
"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": "10.0.2",
"ecosystem": "npm"
},
{
"name": "eslint-config-prettier",
"direct": false,
"version": "10.1.8",
"ecosystem": "npm"
},
{
"name": "eslint-scope",
"direct": false,
"version": "9.1.1",
"ecosystem": "npm"
},
{
"name": "eslint-visitor-keys",
"direct": false,
"version": "3.4.3",
"ecosystem": "npm"
},
{
"name": "eslint-visitor-keys",
"direct": false,
"version": "5.0.1",
"ecosystem": "npm"
},
{
"name": "espree",
"direct": false,
"version": "11.1.1",
"ecosystem": "npm"
},
{
"name": "esquery",
"direct": false,
"version": "1.7.0",
"ecosystem": "npm"
},
{
"name": "esrecurse",
"direct": false,
"version": "4.3.0",
"ecosystem": "npm"
},
{
"name": "estraverse",
"direct": false,
"version": "5.3.0",
"ecosystem": "npm"
},
{
"name": "esutils",
"direct": false,
"version": "2.0.3",
"ecosystem": "npm"
},
{
"name": "etag",
"direct": false,
"version": "1.8.1",
"ecosystem": "npm"
},
{
"name": "event-target-shim",
"direct": false,
"version": "5.0.1",
"ecosystem": "npm"
},
{
"name": "eventemitter3",
"direct": false,
"version": "4.0.7",
"ecosystem": "npm"
},
{
"name": "eventemitter3",
"direct": false,
"version": "5.0.4",
"ecosystem": "npm"
},
{
"name": "external-editor",
"direct": false,
"version": "3.1.0",
"ecosystem": "npm"
},
{
"name": "fast-deep-equal",
"direct": false,
"version": "3.1.3",
"ecosystem": "npm"
},
{
"name": "fast-json-stable-stringify",
"direct": false,
"version": "2.1.0",
"ecosystem": "npm"
},
{
"name": "fast-levenshtein",
"direct": false,
"version": "2.0.6",
"ecosystem": "npm"
},
{
"name": "file-entry-cache",
"direct": false,
"version": "8.0.0",
"ecosystem": "npm"
},
{
"name": "fill-range",
"direct": false,
"version": "7.1.1",
"ecosystem": "npm"
},
{
"name": "finalhandler",
"direct": false,
"version": "1.3.2",
"ecosystem": "npm"
},
{
"name": "find-up",
"direct": false,
"version": "5.0.0",
"ecosystem": "npm"
},
{
"name": "flat-cache",
"direct": false,
"version": "4.0.1",
"ecosystem": "npm"
},
{
"name": "flatted",
"direct": false,
"version": "3.3.4",
"ecosystem": "npm"
},
{
"name": "form-data",
"direct": false,
"version": "4.0.5",
"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": "forwarded",
"direct": false,
"version": "0.2.0",
"ecosystem": "npm"
},
{
"name": "fresh",
"direct": false,
"version": "0.5.2",
"ecosystem": "npm"
},
{
"name": "fs-constants",
"direct": false,
"version": "1.0.0",
"ecosystem": "npm"
},
{
"name": "function-bind",
"direct": false,
"version": "1.1.2",
"ecosystem": "npm"
},
{
"name": "get-caller-file",
"direct": false,
"version": "2.0.5",
"ecosystem": "npm"
},
{
"name": "get-east-asian-width",
"direct": false,
"version": "1.5.0",
"ecosystem": "npm"
},
{
"name": "get-intrinsic",
"direct": false,
"version": "1.3.0",
"ecosystem": "npm"
},
{
"name": "get-proto",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "get-stream",
"direct": false,
"version": "4.1.0",
"ecosystem": "npm"
},
{
"name": "get-stream",
"direct": false,
"version": "5.2.0",
"ecosystem": "npm"
},
{
"name": "glob-parent",
"direct": false,
"version": "6.0.2",
"ecosystem": "npm"
},
{
"name": "global-dirs",
"direct": false,
"version": "3.0.0",
"ecosystem": "npm"
},
{
"name": "globals",
"direct": false,
"version": "17.4.0",
"ecosystem": "npm"
},
{
"name": "gopd",
"direct": false,
"version": "1.2.0",
"ecosystem": "npm"
},
{
"name": "got",
"direct": false,
"version": "9.6.0",
"ecosystem": "npm"
},
{
"name": "graceful-fs",
"direct": false,
"version": "4.2.10",
"ecosystem": "npm"
},
{
"name": "has-binary2",
"direct": false,
"version": "1.0.3",
"ecosystem": "npm"
},
{
"name": "has-cors",
"direct": false,
"version": "1.1.0",
"ecosystem": "npm"
},
{
"name": "has-flag",
"direct": false,
"version": "4.0.0",
"ecosystem": "npm"
},
{
"name": "has-symbols",
"direct": false,
"version": "1.1.0",
"ecosystem": "npm"
},
{
"name": "has-tostringtag",
"direct": false,
"version": "1.0.2",
"ecosystem": "npm"
},
{
"name": "has-yarn",
"direct": false,
"version": "2.1.0",
"ecosystem": "npm"
},
{
"name": "hasown",
"direct": false,
"version": "2.0.2",
"ecosystem": "npm"
},
{
"name": "http-cache-semantics",
"direct": false,
"version": "4.1.1",
"ecosystem": "npm"
},
{
"name": "http-errors",
"direct": false,
"version": "2.0.1",
"ecosystem": "npm"
},
{
"name": "humanize-ms",
"direct": false,
"version": "1.2.1",
"ecosystem": "npm"
},
{
"name": "husky",
"direct": false,
"version": "9.1.7",
"ecosystem": "npm"
},
{
"name": "iconv-lite",
"direct": false,
"version": "0.4.24",
"ecosystem": "npm"
},
{
"name": "ieee754",
"direct": false,
"version": "1.2.1",
"ecosystem": "npm"
},
{
"name": "ignore",
"direct": false,
"version": "5.3.2",
"ecosystem": "npm"
},
{
"name": "image-size",
"direct": false,
"version": "0.6.3",
"ecosystem": "npm"
},
{
"name": "import-lazy",
"direct": false,
"version": "2.1.0",
"ecosystem": "npm"
},
{
"name": "imurmurhash",
"direct": false,
"version": "0.1.4",
"ecosystem": "npm"
},
{
"name": "indexof",
"direct": false,
"version": "0.0.1",
"ecosystem": "npm"
},
{
"name": "inherits",
"direct": false,
"version": "2.0.4",
"ecosystem": "npm"
},
{
"name": "ini",
"direct": false,
"version": "1.3.8",
"ecosystem": "npm"
},
{
"name": "ini",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "ipaddr.js",
"direct": false,
"version": "1.9.1",
"ecosystem": "npm"
},
{
"name": "is-arrayish",
"direct": false,
"version": "0.3.2",
"ecosystem": "npm"
},
{
"name": "is-ci",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "is-docker",
"direct": false,
"version": "2.2.1",
"ecosystem": "npm"
},
{
"name": "is-extglob",
"direct": false,
"version": "2.1.1",
"ecosystem": "npm"
},
{
"name": "is-fullwidth-code-point",
"direct": false,
"version": "3.0.0",
"ecosystem": "npm"
},
{
"name": "is-fullwidth-code-point",
"direct": false,
"version": "5.1.0",
"ecosystem": "npm"
},
{
"name": "is-glob",
"direct": false,
"version": "4.0.3",
"ecosystem": "npm"
},
{
"name": "is-installed-globally",
"direct": false,
"version": "0.4.0",
"ecosystem": "npm"
},
{
"name": "is-interactive",
"direct": false,
"version": "1.0.0",
"ecosystem": "npm"
},
{
"name": "is-npm",
"direct": false,
"version": "5.0.0",
"ecosystem": "npm"
},
{
"name": "is-number",
"direct": false,
"version": "7.0.0",
"ecosystem": "npm"
},
{
"name": "is-obj",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "is-path-inside",
"direct": false,
"version": "3.0.3",
"ecosystem": "npm"
},
{
"name": "is-typedarray",
"direct": false,
"version": "1.0.0",
"ecosystem": "npm"
},
{
"name": "is-unicode-supported",
"direct": false,
"version": "0.1.0",
"ecosystem": "npm"
},
{
"name": "is-wsl",
"direct": false,
"version": "2.2.0",
"ecosystem": "npm"
},
{
"name": "is-yarn-global",
"direct": false,
"version": "0.3.0",
"ecosystem": "npm"
},
{
"name": "isarray",
"direct": false,
"version": "2.0.1",
"ecosystem": "npm"
},
{
"name": "isexe",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "json-buffer",
"direct": false,
"version": "3.0.0",
"ecosystem": "npm"
},
{
"name": "json-buffer",
"direct": false,
"version": "3.0.1",
"ecosystem": "npm"
},
{
"name": "json-schema-to-ts",
"direct": false,
"version": "3.1.1",
"ecosystem": "npm"
},
{
"name": "json-schema-traverse",
"direct": false,
"version": "0.4.1",
"ecosystem": "npm"
},
{
"name": "json-stable-stringify-without-jsonify",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "jsonfile",
"direct": false,
"version": "6.1.0",
"ecosystem": "npm"
},
{
"name": "keyv",
"direct": false,
"version": "3.1.0",
"ecosystem": "npm"
},
{
"name": "keyv",
"direct": false,
"version": "4.5.4",
"ecosystem": "npm"
},
{
"name": "latest-version",
"direct": false,
"version": "5.1.0",
"ecosystem": "npm"
},
{
"name": "levn",
"direct": false,
"version": "0.4.1",
"ecosystem": "npm"
},
{
"name": "lint-staged",
"direct": false,
"version": "16.3.2",
"ecosystem": "npm"
},
{
"name": "listr2",
"direct": false,
"version": "9.0.5",
"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.camelcase",
"direct": false,
"version": "4.3.0",
"ecosystem": "npm"
},
{
"name": "log-symbols",
"direct": false,
"version": "4.1.0",
"ecosystem": "npm"
},
{
"name": "log-update",
"direct": false,
"version": "6.1.0",
"ecosystem": "npm"
},
{
"name": "long",
"direct": false,
"version": "5.3.2",
"ecosystem": "npm"
},
{
"name": "lowercase-keys",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "lowercase-keys",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "make-dir",
"direct": false,
"version": "3.1.0",
"ecosystem": "npm"
},
{
"name": "math-intrinsics",
"direct": false,
"version": "1.1.0",
"ecosystem": "npm"
},
{
"name": "media-typer",
"direct": false,
"version": "0.3.0",
"ecosystem": "npm"
},
{
"name": "merge-descriptors",
"direct": false,
"version": "1.0.3",
"ecosystem": "npm"
},
{
"name": "methods",
"direct": false,
"version": "1.1.2",
"ecosystem": "npm"
},
{
"name": "micromatch",
"direct": false,
"version": "4.0.8",
"ecosystem": "npm"
},
{
"name": "mime",
"direct": false,
"version": "1.6.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": "mimic-fn",
"direct": false,
"version": "2.1.0",
"ecosystem": "npm"
},
{
"name": "mimic-function",
"direct": false,
"version": "5.0.1",
"ecosystem": "npm"
},
{
"name": "mimic-response",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "minimatch",
"direct": false,
"version": "10.2.4",
"ecosystem": "npm"
},
{
"name": "minimatch",
"direct": false,
"version": "3.1.5",
"ecosystem": "npm"
},
{
"name": "minimist",
"direct": false,
"version": "1.2.6",
"ecosystem": "npm"
},
{
"name": "mkdirp-classic",
"direct": false,
"version": "0.5.3",
"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": "mute-stream",
"direct": false,
"version": "0.0.8",
"ecosystem": "npm"
},
{
"name": "nan",
"direct": false,
"version": "2.25.0",
"ecosystem": "npm"
},
{
"name": "natural-compare",
"direct": false,
"version": "1.4.0",
"ecosystem": "npm"
},
{
"name": "negotiator",
"direct": false,
"version": "0.6.3",
"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": "normalize-url",
"direct": false,
"version": "4.5.1",
"ecosystem": "npm"
},
{
"name": "object-assign",
"direct": false,
"version": "4.1.1",
"ecosystem": "npm"
},
{
"name": "object-inspect",
"direct": false,
"version": "1.13.4",
"ecosystem": "npm"
},
{
"name": "on-finished",
"direct": false,
"version": "2.4.1",
"ecosystem": "npm"
},
{
"name": "once",
"direct": false,
"version": "1.4.0",
"ecosystem": "npm"
},
{
"name": "onetime",
"direct": false,
"version": "5.1.2",
"ecosystem": "npm"
},
{
"name": "onetime",
"direct": false,
"version": "7.0.0",
"ecosystem": "npm"
},
{
"name": "optionator",
"direct": false,
"version": "0.9.4",
"ecosystem": "npm"
},
{
"name": "ora",
"direct": false,
"version": "5.4.1",
"ecosystem": "npm"
},
{
"name": "os-tmpdir",
"direct": false,
"version": "1.0.2",
"ecosystem": "npm"
},
{
"name": "p-cancelable",
"direct": false,
"version": "1.1.0",
"ecosystem": "npm"
},
{
"name": "p-finally",
"direct": false,
"version": "1.0.0",
"ecosystem": "npm"
},
{
"name": "p-limit",
"direct": false,
"version": "3.1.0",
"ecosystem": "npm"
},
{
"name": "p-locate",
"direct": false,
"version": "5.0.0",
"ecosystem": "npm"
},
{
"name": "p-timeout",
"direct": false,
"version": "3.2.0",
"ecosystem": "npm"
},
{
"name": "package-json",
"direct": false,
"version": "6.5.0",
"ecosystem": "npm"
},
{
"name": "parseqs",
"direct": false,
"version": "0.0.6",
"ecosystem": "npm"
},
{
"name": "parseuri",
"direct": false,
"version": "0.0.6",
"ecosystem": "npm"
},
{
"name": "parseurl",
"direct": false,
"version": "1.3.3",
"ecosystem": "npm"
},
{
"name": "path-exists",
"direct": false,
"version": "4.0.0",
"ecosystem": "npm"
},
{
"name": "path-key",
"direct": false,
"version": "3.1.1",
"ecosystem": "npm"
},
{
"name": "path-to-regexp",
"direct": false,
"version": "0.1.12",
"ecosystem": "npm"
},
{
"name": "picomatch",
"direct": false,
"version": "2.3.1",
"ecosystem": "npm"
},
{
"name": "prelude-ls",
"direct": false,
"version": "1.2.1",
"ecosystem": "npm"
},
{
"name": "prepend-http",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "prettier",
"direct": false,
"version": "3.8.1",
"ecosystem": "npm"
},
{
"name": "protobufjs",
"direct": false,
"version": "7.5.4",
"ecosystem": "npm"
},
{
"name": "proxy-addr",
"direct": false,
"version": "2.0.7",
"ecosystem": "npm"
},
{
"name": "pump",
"direct": false,
"version": "3.0.0",
"ecosystem": "npm"
},
{
"name": "punycode",
"direct": false,
"version": "2.1.1",
"ecosystem": "npm"
},
{
"name": "pupa",
"direct": false,
"version": "2.1.1",
"ecosystem": "npm"
},
{
"name": "qs",
"direct": false,
"version": "6.14.2",
"ecosystem": "npm"
},
{
"name": "range-parser",
"direct": false,
"version": "1.2.1",
"ecosystem": "npm"
},
{
"name": "raw-body",
"direct": false,
"version": "2.5.3",
"ecosystem": "npm"
},
{
"name": "rc",
"direct": false,
"version": "1.2.8",
"ecosystem": "npm"
},
{
"name": "readable-stream",
"direct": false,
"version": "3.6.0",
"ecosystem": "npm"
},
{
"name": "registry-auth-token",
"direct": false,
"version": "4.2.2",
"ecosystem": "npm"
},
{
"name": "registry-url",
"direct": false,
"version": "5.1.0",
"ecosystem": "npm"
},
{
"name": "require-directory",
"direct": false,
"version": "2.1.1",
"ecosystem": "npm"
},
{
"name": "responselike",
"direct": false,
"version": "1.0.2",
"ecosystem": "npm"
},
{
"name": "restore-cursor",
"direct": false,
"version": "3.1.0",
"ecosystem": "npm"
},
{
"name": "restore-cursor",
"direct": false,
"version": "5.1.0",
"ecosystem": "npm"
},
{
"name": "rfdc",
"direct": false,
"version": "1.4.1",
"ecosystem": "npm"
},
{
"name": "run-async",
"direct": false,
"version": "2.4.1",
"ecosystem": "npm"
},
{
"name": "rxjs",
"direct": false,
"version": "7.3.0",
"ecosystem": "npm"
},
{
"name": "safe-buffer",
"direct": false,
"version": "5.2.1",
"ecosystem": "npm"
},
{
"name": "safer-buffer",
"direct": false,
"version": "2.1.2",
"ecosystem": "npm"
},
{
"name": "semver-diff",
"direct": false,
"version": "3.1.1",
"ecosystem": "npm"
},
{
"name": "send",
"direct": false,
"version": "0.19.2",
"ecosystem": "npm"
},
{
"name": "serve-static",
"direct": false,
"version": "1.16.3",
"ecosystem": "npm"
},
{
"name": "setprototypeof",
"direct": false,
"version": "1.2.0",
"ecosystem": "npm"
},
{
"name": "shebang-command",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "shebang-regex",
"direct": false,
"version": "3.0.0",
"ecosystem": "npm"
},
{
"name": "side-channel",
"direct": false,
"version": "1.1.0",
"ecosystem": "npm"
},
{
"name": "side-channel-list",
"direct": false,
"version": "1.0.0",
"ecosystem": "npm"
},
{
"name": "side-channel-map",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "side-channel-weakmap",
"direct": false,
"version": "1.0.2",
"ecosystem": "npm"
},
{
"name": "signal-exit",
"direct": false,
"version": "3.0.3",
"ecosystem": "npm"
},
{
"name": "signal-exit",
"direct": false,
"version": "4.1.0",
"ecosystem": "npm"
},
{
"name": "simple-swizzle",
"direct": false,
"version": "0.2.2",
"ecosystem": "npm"
},
{
"name": "slice-ansi",
"direct": false,
"version": "7.1.2",
"ecosystem": "npm"
},
{
"name": "slice-ansi",
"direct": false,
"version": "8.0.0",
"ecosystem": "npm"
},
{
"name": "socket.io-adapter",
"direct": false,
"version": "2.5.6",
"ecosystem": "npm"
},
{
"name": "socket.io-parser",
"direct": false,
"version": "3.3.4",
"ecosystem": "npm"
},
{
"name": "socket.io-parser",
"direct": false,
"version": "4.2.4",
"ecosystem": "npm"
},
{
"name": "split-ca",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "ssh2",
"direct": false,
"version": "1.17.0",
"ecosystem": "npm"
},
{
"name": "statuses",
"direct": false,
"version": "2.0.2",
"ecosystem": "npm"
},
{
"name": "string-argv",
"direct": false,
"version": "0.3.2",
"ecosystem": "npm"
},
{
"name": "string-width",
"direct": false,
"version": "4.2.3",
"ecosystem": "npm"
},
{
"name": "string-width",
"direct": false,
"version": "7.2.0",
"ecosystem": "npm"
},
{
"name": "string-width",
"direct": false,
"version": "8.2.0",
"ecosystem": "npm"
},
{
"name": "string_decoder",
"direct": false,
"version": "1.3.0",
"ecosystem": "npm"
},
{
"name": "strip-ansi",
"direct": false,
"version": "6.0.1",
"ecosystem": "npm"
},
{
"name": "strip-ansi",
"direct": false,
"version": "7.1.2",
"ecosystem": "npm"
},
{
"name": "strip-ansi",
"direct": false,
"version": "7.2.0",
"ecosystem": "npm"
},
{
"name": "strip-json-comments",
"direct": false,
"version": "2.0.1",
"ecosystem": "npm"
},
{
"name": "supports-color",
"direct": false,
"version": "7.2.0",
"ecosystem": "npm"
},
{
"name": "tar-stream",
"direct": false,
"version": "2.2.0",
"ecosystem": "npm"
},
{
"name": "through",
"direct": false,
"version": "2.3.8",
"ecosystem": "npm"
},
{
"name": "tinycolor2",
"direct": false,
"version": "1.6.0",
"ecosystem": "npm"
},
{
"name": "tinyexec",
"direct": false,
"version": "1.0.2",
"ecosystem": "npm"
},
{
"name": "tmp",
"direct": false,
"version": "0.0.33",
"ecosystem": "npm"
},
{
"name": "tmp",
"direct": false,
"version": "0.2.5",
"ecosystem": "npm"
},
{
"name": "to-array",
"direct": false,
"version": "0.1.4",
"ecosystem": "npm"
},
{
"name": "to-readable-stream",
"direct": false,
"version": "1.0.0",
"ecosystem": "npm"
},
{
"name": "to-regex-range",
"direct": false,
"version": "5.0.1",
"ecosystem": "npm"
},
{
"name": "toidentifier",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "tr46",
"direct": false,
"version": "0.0.3",
"ecosystem": "npm"
},
{
"name": "ts-algebra",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "tslib",
"direct": false,
"version": "2.1.0",
"ecosystem": "npm"
},
{
"name": "tslib",
"direct": false,
"version": "2.6.3",
"ecosystem": "npm"
},
{
"name": "tweetnacl",
"direct": false,
"version": "0.14.5",
"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": "type-fest",
"direct": false,
"version": "0.21.3",
"ecosystem": "npm"
},
{
"name": "type-is",
"direct": false,
"version": "1.6.18",
"ecosystem": "npm"
},
{
"name": "typedarray-to-buffer",
"direct": false,
"version": "3.1.5",
"ecosystem": "npm"
},
{
"name": "undici-types",
"direct": false,
"version": "5.26.5",
"ecosystem": "npm"
},
{
"name": "unique-string",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "universalify",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "unpipe",
"direct": false,
"version": "1.0.0",
"ecosystem": "npm"
},
{
"name": "uri-js",
"direct": false,
"version": "4.4.1",
"ecosystem": "npm"
},
{
"name": "url-parse-lax",
"direct": false,
"version": "3.0.0",
"ecosystem": "npm"
},
{
"name": "util-deprecate",
"direct": false,
"version": "1.0.2",
"ecosystem": "npm"
},
{
"name": "utils-merge",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "uuid",
"direct": false,
"version": "10.0.0",
"ecosystem": "npm"
},
{
"name": "vary",
"direct": false,
"version": "1.1.2",
"ecosystem": "npm"
},
{
"name": "wcwidth",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "web-streams-polyfill",
"direct": false,
"version": "3.3.3",
"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": "whatwg-url",
"direct": false,
"version": "5.0.0",
"ecosystem": "npm"
},
{
"name": "which",
"direct": false,
"version": "2.0.2",
"ecosystem": "npm"
},
{
"name": "widest-line",
"direct": false,
"version": "3.1.0",
"ecosystem": "npm"
},
{
"name": "word-wrap",
"direct": false,
"version": "1.2.5",
"ecosystem": "npm"
},
{
"name": "wrap-ansi",
"direct": false,
"version": "7.0.0",
"ecosystem": "npm"
},
{
"name": "wrap-ansi",
"direct": false,
"version": "9.0.2",
"ecosystem": "npm"
},
{
"name": "wrappy",
"direct": false,
"version": "1.0.2",
"ecosystem": "npm"
},
{
"name": "write-file-atomic",
"direct": false,
"version": "3.0.3",
"ecosystem": "npm"
},
{
"name": "ws",
"direct": false,
"version": "7.5.10",
"ecosystem": "npm"
},
{
"name": "ws",
"direct": false,
"version": "8.17.1",
"ecosystem": "npm"
},
{
"name": "ws",
"direct": false,
"version": "8.18.3",
"ecosystem": "npm"
},
{
"name": "xdg-basedir",
"direct": false,
"version": "4.0.0",
"ecosystem": "npm"
},
{
"name": "xmlhttprequest-ssl",
"direct": false,
"version": "1.6.3",
"ecosystem": "npm"
},
{
"name": "xmlhttprequest-ssl",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "y18n",
"direct": false,
"version": "5.0.8",
"ecosystem": "npm"
},
{
"name": "yaml",
"direct": false,
"version": "2.8.2",
"ecosystem": "npm"
},
{
"name": "yargs-parser",
"direct": false,
"version": "21.1.1",
"ecosystem": "npm"
},
{
"name": "yargs-parser",
"direct": false,
"version": "22.0.0",
"ecosystem": "npm"
},
{
"name": "yeast",
"direct": false,
"version": "0.1.2",
"ecosystem": "npm"
},
{
"name": "yocto-queue",
"direct": false,
"version": "0.1.0",
"ecosystem": "npm"
}
],
"collected": true,
"truncated": false,
"total_count": 463,
"direct_count": 32,
"indirect_count": 431
}
},
"maintainership": {
"issues": {
"open_prs": 6,
"merged_prs": 544,
"open_issues": 0,
"closed_ratio": null,
"closed_issues": 0,
"closed_unmerged_prs": 97
},
"bus_factor": 3,
"bot_contributors": 2,
"top_contributors": [
{
"type": "User",
"login": "RobinBol",
"commits": 268,
"avatar_url": "https://avatars.githubusercontent.com/u/5762579?v=4"
},
{
"type": "User",
"login": "tjallingt",
"commits": 252,
"avatar_url": "https://avatars.githubusercontent.com/u/5736783?v=4"
},
{
"type": "User",
"login": "jeroenwienk",
"commits": 248,
"avatar_url": "https://avatars.githubusercontent.com/u/6419150?v=4"
},
{
"type": "User",
"login": "WeeJeWel",
"commits": 106,
"avatar_url": "https://avatars.githubusercontent.com/u/319873?v=4"
},
{
"type": "User",
"login": "mrlukasbos",
"commits": 75,
"avatar_url": "https://avatars.githubusercontent.com/u/1770461?v=4"
},
{
"type": "User",
"login": "JELoohuis",
"commits": 44,
"avatar_url": "https://avatars.githubusercontent.com/u/173936232?v=4"
},
{
"type": "User",
"login": "hmeerlo",
"commits": 44,
"avatar_url": "https://avatars.githubusercontent.com/u/448150?v=4"
},
{
"type": "User",
"login": "HarwinBorger",
"commits": 40,
"avatar_url": "https://avatars.githubusercontent.com/u/3984675?v=4"
},
{
"type": "User",
"login": "WLefferts",
"commits": 25,
"avatar_url": "https://avatars.githubusercontent.com/u/37363850?v=4"
},
{
"type": "User",
"login": "nozols",
"commits": 20,
"avatar_url": "https://avatars.githubusercontent.com/u/6298632?v=4"
}
],
"contributors_sampled": 25,
"top_contributor_share": 0.23
},
"quality_signals": {
"has_ci": true,
"has_tests": true,
"ci_workflows": [
"lint.yml",
"npm-version.yml",
"publish-package-npm.yml",
"test.yml",
"update-homey-lib.yml"
],
"has_docs_dir": false,
"linter_configs": [
"eslint.config.mjs"
],
"has_editorconfig": false,
"has_linter_config": true,
"has_precommit_config": false
},
"security_signals": {
"lockfiles": [
"package-lock.json"
],
"scorecard": {
"checks": [
{
"name": "Binary-Artifacts",
"score": 10,
"reason": "no binaries found in the repo",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
},
{
"name": "Branch-Protection",
"score": 0,
"reason": "branch protection not enabled on development/release branches",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
},
{
"name": "CI-Tests",
"score": 7,
"reason": "11 out of 15 merged PRs checked by a CI test -- score normalized to 7",
"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": 2,
"reason": "Found 4/14 approved changesets -- score normalized to 2",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
},
{
"name": "Contributors",
"score": 10,
"reason": "project has 9 contributing companies or organizations",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
},
{
"name": "Dangerous-Workflow",
"score": 10,
"reason": "no dangerous workflow patterns detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
},
{
"name": "Dependency-Update-Tool",
"score": 10,
"reason": "update tool detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
},
{
"name": "Fuzzing",
"score": 0,
"reason": "project is not fuzzed",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
},
{
"name": "License",
"score": 0,
"reason": "license file not detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
},
{
"name": "Maintained",
"score": 10,
"reason": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
},
{
"name": "Packaging",
"score": null,
"reason": "packaging workflow not detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
},
{
"name": "Pinned-Dependencies",
"score": 4,
"reason": "dependency not pinned by hash detected -- score normalized to 4",
"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": "39 existing vulnerabilities detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
}
],
"commit": "d0756b0d2cf6fd1e75c51ceb32ed79d58121da28",
"ran_at": "2026-07-22T06:43:36Z",
"aggregate_score": 4.4,
"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-17T09:16:19Z",
"oldest_open_prs": [
{
"number": 426,
"created_at": "2024-08-15T11:08:59Z",
"last_comment_at": "2024-11-21T21:42:02Z",
"last_comment_author": "shaarkys"
},
{
"number": 573,
"created_at": "2026-02-02T11:45:03Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 618,
"created_at": "2026-04-21T18:01:35Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 624,
"created_at": "2026-05-13T13:39:49Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 645,
"created_at": "2026-07-12T11:49:14Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 646,
"created_at": "2026-07-15T13:27:55Z",
"last_comment_at": null,
"last_comment_author": null
}
],
"last_merged_pr_at": "2026-07-17T09:13:11Z",
"ci_last_conclusion": null,
"oldest_open_issues": []
}
},
"config": {
"disabled_metrics": [],
"disabled_categories": [],
"disabled_components": {}
},
"source": {
"url": "https://github.com/athombv/node-homey",
"host": "github.com",
"name": "node-homey",
"owner": "athombv"
},
"metrics": {
"overall": {
"key": "overall",
"band": "moderate",
"name": "Overall health",
"note": null,
"notes": [],
"value": 67,
"inputs": {
"security": 48,
"vitality": 90,
"community": 37,
"governance": 78,
"engineering": 69
},
"components": []
},
"categories": [
{
"key": "vitality",
"band": "excellent",
"name": "Vitality",
"value": 90,
"weight": 0.22,
"metrics": [
{
"key": "development_activity",
"band": "excellent",
"name": "Development activity",
"note": null,
"notes": [],
"value": 91,
"inputs": {
"commits_last_year": 344,
"human_commit_share": 0.98,
"days_since_last_push": 4,
"active_weeks_last_year": 39
},
"components": [
{
"key": "push_recency",
"name": "Push recency",
"detail": "last push 4 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "push_recency",
"params": {
"days": 4
}
}
],
"max_points": 36
},
{
"key": "commit_cadence",
"name": "Commit cadence",
"detail": "39/52 weeks with commits",
"points": 27,
"status": "partial",
"details": [
{
"code": "commit_cadence_weeks",
"params": {
"weeks": 39
}
}
],
"max_points": 36
},
{
"key": "commit_volume",
"name": "Commit volume",
"detail": "344 commits in the last year",
"points": 18,
"status": "met",
"details": [
{
"code": "commits_last_year",
"params": {
"count": 344
}
}
],
"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": 99,
"latest_release_tag": "v4.4.1",
"releases_from_tags": true,
"days_since_latest_release": 4,
"mean_days_between_releases": 12.9
},
"components": [
{
"key": "ships_releases",
"name": "Ships releases",
"detail": "99 version tags (no GitHub releases)",
"points": 16.2,
"status": "partial",
"details": [
{
"code": "version_tags_no_releases",
"params": {
"count": 99
}
}
],
"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 ~12.9 days",
"points": 27,
"status": "met",
"details": [
{
"code": "release_cadence",
"params": {
"gap": 12.9
}
}
],
"max_points": 27
},
{
"key": "openssf_scorecard_signed_releases",
"name": "OpenSSF Scorecard: Signed-Releases",
"detail": "no releases found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 10
}
]
},
{
"key": "abandonment",
"band": "excellent",
"name": "Abandonment",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"cap": null,
"state": "maintained",
"guards": [],
"signals": [],
"red_flag": false,
"multiplier_pct": 100,
"declared_reason": null,
"unverified_reason": null,
"unanswered_open_prs": null,
"unanswered_open_issues": null,
"days_since_last_merged_pr": null,
"days_since_last_human_commit": 4,
"days_since_last_human_commit_is_floor": false
},
"components": [
{
"key": "project_is_still_maintained",
"name": "Project is still maintained",
"detail": "last human commit 4 days ago",
"points": 100,
"status": "met",
"details": [
{
"code": "abandonment_maintained",
"params": {
"days": 4
}
}
],
"max_points": 100
}
]
}
],
"description": "Is the project alive — is code being written and are releases shipping?"
},
{
"key": "community",
"band": "at_risk",
"name": "Community & Adoption",
"value": 37,
"weight": 0.18,
"metrics": [
{
"key": "popularity",
"band": "critical",
"name": "Popularity & adoption",
"note": null,
"notes": [],
"value": 29,
"inputs": {
"forks": 20,
"stars": 12,
"watchers": 3,
"growth_state": "unverified",
"growth_factor_pct": 100,
"growth_unverified_reason": "below_threshold"
},
"components": [
{
"key": "stars",
"name": "Stars",
"detail": "12 stars",
"points": 16.9,
"status": "partial",
"details": [
{
"code": "stars",
"params": {
"count": 12
}
}
],
"max_points": 60
},
{
"key": "forks",
"name": "Forks",
"detail": "20 forks",
"points": 10.7,
"status": "partial",
"details": [
{
"code": "forks",
"params": {
"count": 20
}
}
],
"max_points": 25
},
{
"key": "watchers",
"name": "Watchers",
"detail": "3 watchers",
"points": 1.7,
"status": "partial",
"details": [
{
"code": "watchers",
"params": {
"count": 3
}
}
],
"max_points": 15
}
]
},
{
"key": "community_health",
"band": "critical",
"name": "Community health",
"note": null,
"notes": [],
"value": 25,
"inputs": {
"has_readme": true,
"has_license": false,
"has_contributing": false,
"has_issue_template": false,
"has_code_of_conduct": false,
"has_pull_request_template": false
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 22.5,
"status": "met",
"details": [],
"max_points": 22.5
},
{
"key": "license",
"name": "License",
"detail": "no license file detected",
"points": 0,
"status": "missed",
"details": [
{
"code": "license_absent",
"params": {}
}
],
"max_points": 22.5
},
{
"key": "contributing_guide",
"name": "CONTRIBUTING guide",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 18
},
{
"key": "code_of_conduct",
"name": "Code of conduct",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 13.5
},
{
"key": "issue_template",
"name": "Issue template",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.2
},
{
"key": "pr_template",
"name": "PR template",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 6.3
}
]
},
{
"key": "ecosystem_adoption",
"band": "moderate",
"name": "Ecosystem adoption (downloads)",
"note": "Excluded from scoring (no data or not applicable): Registry dependents. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"registry_dependents"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 65,
"inputs": {
"packages": [
"homey"
],
"dependents": null,
"ecosystems": "npm",
"total_downloads": null,
"monthly_downloads": 8126
},
"components": [
{
"key": "monthly_downloads",
"name": "Monthly downloads",
"detail": "8,126 downloads/month across npm",
"points": 52.1,
"status": "partial",
"details": [
{
"code": "downloads_monthly",
"params": {
"count": 8126,
"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": 78,
"weight": 0.24,
"metrics": [
{
"key": "maintainer_resilience",
"band": "good",
"name": "Maintainer resilience (bus factor)",
"note": null,
"notes": [],
"value": 77,
"inputs": {
"bus_factor": 3,
"contributors_sampled": 25,
"top_contributor_share": 0.23
},
"components": [
{
"key": "bus_factor",
"name": "Bus factor",
"detail": "3 contributor(s) cover half of all commits",
"points": 36,
"status": "partial",
"details": [
{
"code": "bus_factor",
"params": {
"count": 3
}
}
],
"max_points": 54
},
{
"key": "commit_distribution",
"name": "Commit distribution",
"detail": "top contributor authored 23% of commits",
"points": 17.3,
"status": "partial",
"details": [
{
"code": "top_contributor_share",
"params": {
"share": 23
}
}
],
"max_points": 22.5
},
{
"key": "contributor_breadth",
"name": "Contributor breadth",
"detail": "25 contributors",
"points": 13.5,
"status": "met",
"details": [
{
"code": "contributors_sampled",
"params": {
"count": 25
}
}
],
"max_points": 13.5
},
{
"key": "openssf_scorecard_contributors",
"name": "OpenSSF Scorecard: Contributors",
"detail": "project has 9 contributing companies or organizations",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
}
]
},
{
"key": "responsiveness",
"band": "moderate",
"name": "Issue & PR responsiveness",
"note": "Excluded from scoring (no data or not applicable): Issue resolution. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"issue_resolution"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 67,
"inputs": {
"merged_prs": 544,
"open_issues": 0,
"closed_issues": 0,
"issue_closed_ratio": null,
"closed_unmerged_prs": 97
},
"components": [
{
"key": "issue_resolution",
"name": "Issue resolution",
"detail": "no issues or no data",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_issues_or_data",
"params": {}
}
],
"max_points": 46.75
},
{
"key": "pr_acceptance",
"name": "PR acceptance",
"detail": "544/641 decided PRs merged",
"points": 32.5,
"status": "partial",
"details": [
{
"code": "decided_prs_merged",
"params": {
"merged": 544,
"decided": 641
}
}
],
"max_points": 38.25
},
{
"key": "openssf_scorecard_code_review",
"name": "OpenSSF Scorecard: Code-Review",
"detail": "Found 4/14 approved changesets -- score normalized to 2",
"points": 3,
"status": "partial",
"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"
],
"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": "248 published versions",
"points": 20,
"status": "met",
"details": [
{
"code": "published_versions",
"params": {
"count": 248
}
}
],
"max_points": 20
},
{
"key": "not_deprecated",
"name": "Not deprecated",
"detail": "active, not deprecated or yanked",
"points": 20,
"status": "met",
"details": [
{
"code": "package_not_deprecated",
"params": {}
}
],
"max_points": 20
}
]
}
],
"description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
},
{
"key": "engineering",
"band": "moderate",
"name": "Engineering Quality",
"value": 69,
"weight": 0.2,
"metrics": [
{
"key": "engineering_practices",
"band": "good",
"name": "Engineering practices",
"note": null,
"notes": [],
"value": 78,
"inputs": {
"has_ci": true,
"has_tests": true,
"has_editorconfig": false,
"has_linter_config": true,
"has_precommit_config": false
},
"components": [
{
"key": "ci_workflows",
"name": "CI workflows",
"detail": "5 workflow(s)",
"points": 24,
"status": "met",
"details": [
{
"code": "ci_workflows",
"params": {
"count": 5
}
}
],
"max_points": 24
},
{
"key": "tests_present",
"name": "Tests present",
"detail": null,
"points": 24,
"status": "met",
"details": [],
"max_points": 24
},
{
"key": "linter_config",
"name": "Linter config",
"detail": "eslint.config.mjs",
"points": 16,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "eslint.config.mjs"
}
}
],
"max_points": 16
},
{
"key": "pre_commit_hooks",
"name": "Pre-commit hooks",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 9.6
},
{
"key": "editorconfig",
"name": ".editorconfig",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 6.4
},
{
"key": "openssf_scorecard_ci_tests",
"name": "OpenSSF Scorecard: CI-Tests",
"detail": "11 out of 15 merged PRs checked by a CI test -- score normalized to 7",
"points": 14,
"status": "partial",
"details": [],
"max_points": 20
}
]
},
{
"key": "documentation",
"band": "moderate",
"name": "Documentation",
"note": null,
"notes": [],
"value": 55,
"inputs": {
"topics": [],
"has_wiki": false,
"homepage": "https://www.npmjs.com/package/homey",
"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://www.npmjs.com/package/homey",
"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": 48,
"weight": 0.16,
"metrics": [
{
"key": "security_posture",
"band": "at_risk",
"name": "Security posture",
"note": "Excluded from scoring (no data or not applicable): Packaging, Signed-Releases. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"packaging",
"signed_releases"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 44,
"inputs": {
"source": "openssf_scorecard",
"checks_evaluated": 16,
"scorecard_version": "v5.5.0",
"checks_inconclusive": 2,
"scorecard_aggregate": 4.4
},
"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": "11 out of 15 merged PRs checked by a CI test -- score normalized to 7",
"points": 1.8,
"status": "partial",
"details": [],
"max_points": 2.5
},
{
"key": "cii_best_practices",
"name": "CII-Best-Practices",
"detail": "no effort to earn an OpenSSF best practices badge detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 2.5
},
{
"key": "code_review",
"name": "Code-Review",
"detail": "Found 4/14 approved changesets -- score normalized to 2",
"points": 1.5,
"status": "partial",
"details": [],
"max_points": 7.5
},
{
"key": "contributors",
"name": "Contributors",
"detail": "project has 9 contributing companies or organizations",
"points": 2.5,
"status": "met",
"details": [],
"max_points": 2.5
},
{
"key": "dangerous_workflow",
"name": "Dangerous-Workflow",
"detail": "no dangerous workflow patterns detected",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
},
{
"key": "dependency_update_tool",
"name": "Dependency-Update-Tool",
"detail": "update tool detected",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "fuzzing",
"name": "Fuzzing",
"detail": "project is not fuzzed",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "license",
"name": "License",
"detail": "license file not detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 2.5
},
{
"key": "maintained",
"name": "Maintained",
"detail": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "packaging",
"name": "Packaging",
"detail": "packaging workflow not detected",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 5
},
{
"key": "pinned_dependencies",
"name": "Pinned-Dependencies",
"detail": "dependency not pinned by hash detected -- score normalized to 4",
"points": 2,
"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": "39 existing vulnerabilities detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
}
]
},
{
"key": "dependency_advisories",
"band": "moderate",
"name": "Dependency advisories",
"note": "Excluded from scoring (no data or not applicable): Indirect dependencies free of known advisories. Remaining weights renormalized. Matched 463 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": 463
}
},
{
"code": "advisories_repo_graph_caveat",
"params": {}
},
{
"code": "advisories_reachability",
"params": {}
}
],
"value": 64,
"inputs": {
"source": "osv",
"advisories": 47,
"affected_packages": 26,
"assessed_packages": 463,
"unassessed_packages": 0,
"affected_by_severity": "critical 2, high 17, moderate 6, low 1",
"direct_affected_packages": 2
},
"components": [
{
"key": "direct_dependencies_free_of_known_advisories",
"name": "Direct dependencies free of known advisories",
"detail": "2 affected: sharp 0.33.4 (high 7.3), smol-toml 1.6.0 (moderate 5.3)",
"points": 12.9,
"status": "partial",
"details": [
{
"code": "advisories_affected",
"params": {
"count": 2,
"packages": "sharp 0.33.4 (high 7.3), smol-toml 1.6.0 (moderate 5.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": "1 advisory-carrying package(s) unaddressed past 90 days; oldest published 118 days ago",
"points": 35.3,
"status": "partial",
"details": [
{
"code": "advisories_stale",
"params": {
"days": 90,
"count": 1,
"oldest": 118
}
}
],
"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": 463,
"malicious_packages": 0,
"direct_malicious_packages": 0,
"withdrawn_malicious_packages": 0,
"installable_malicious_packages": 0
},
"components": [
{
"key": "no_dependency_reported_as_a_malicious_package",
"name": "No dependency reported as a malicious package",
"detail": "no dependency is reported as a malicious package",
"points": 100,
"status": "met",
"details": [
{
"code": "no_malicious_dependencies",
"params": {}
}
],
"max_points": 100
}
]
},
{
"key": "high_risk_jurisdiction_exposure",
"band": "excellent",
"name": "High-Risk Jurisdiction Exposure",
"note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
"notes": [
{
"code": "jurisdiction_evidence_limits",
"params": {}
}
],
"value": 100,
"inputs": {
"meaning": "self-published location evidence; not nationality or citizenship",
"red_flag": false,
"exposures": [],
"policy_countries": [
"Russia",
"Iran",
"North Korea"
],
"review_only_matches": 0,
"assessed_self_published_locations": 8
},
"components": [
{
"key": "policy_exposure_multiplier",
"name": "Policy exposure multiplier",
"detail": "no confirmed policy-scope location match",
"points": 100,
"status": "met",
"details": [
{
"code": "jurisdiction_no_match",
"params": {}
}
],
"max_points": 100
}
]
}
],
"description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
},
{
"key": "ai_readiness",
"band": "at_risk",
"name": "AI Readiness",
"value": 45,
"weight": 0,
"metrics": [
{
"key": "ai_agent_context",
"band": "at_risk",
"name": "Agent context & guidance",
"note": null,
"notes": [],
"value": 38,
"inputs": {
"has_llms_txt": false,
"legible_history_share": 0.714,
"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": "70 of 98 human commits state their intent (structured subject or explanatory body)",
"points": 38.1,
"status": "partial",
"details": [
{
"code": "legible_history",
"params": {
"legible": 70,
"sampled": 98
}
}
],
"max_points": 40
}
]
},
{
"key": "ai_verify_loop",
"band": "at_risk",
"name": "Verify loop (build / test / typecheck)",
"note": null,
"notes": [],
"value": 47,
"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,
"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": "eslint.config.mjs",
"points": 11,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "eslint.config.mjs"
}
}
],
"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": "no agent-authored commits among the last 100",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_agent_authored_commits",
"params": {
"sampled": 100
}
}
],
"max_points": 10
},
{
"key": "automated_maintenance",
"name": "Automated maintenance",
"detail": "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 4",
"points": 4,
"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": 123471,
"source_files_sampled": 118,
"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/118 source files over 60KB",
"points": 54.5,
"status": "partial",
"details": [
{
"code": "oversized_source_files",
"params": {
"kb": 60,
"sampled": 118,
"oversized": 1
}
}
],
"max_points": 55
}
]
}
],
"description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
}
],
"metrics_version": "1.13.0"
},
"warnings": [
"deps.dev does not index npm:homey@4.4.1; advisories assessed against the repository dependency graph instead"
],
"report_type": "repository",
"generated_at": "2026-07-22T06:44:00.369556Z",
"schema_version": "0.26.0",
"badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/a/athombv/node-homey.svg",
"full_name": "athombv/node-homey",
"license_state": "absent",
"license_spdx": null
}