公开记录
软件健康报告模式 0.27.0 · 指标 1.13.0 · 2026-07-23 23:25 UTC

vicinaehq / vicinae

A focused launcher for your desktop - native, fast, extensible

C++GPL-3.0★ 8,563 星标⑂ 249 复刻始于 2025年7月在 GitHub 上查看 ↗

vicinaehq/vicinae 的健康指数为 100 分中的 69 分,处于「中等」区间。 其得分最高的类别是Vitality(96/100),最低的是Security(36/100)。 最近一次更新在今天。 近期的大部分工作由 1 位贡献者完成。

69
总分 / 100
中等

软件健康指数

指标归入加权类别,统一采用 1–100 量表。总体分先取类别加权平均;当公开证据触发高风险司法辖区政策时,评级会按政策调整,并设置 49(有风险)的上限。AI 就绪度不计入总体分。

69
优秀85-100堪称典范;基本满足所有检验标准
良好70-84健康;仅有轻微不足
中等50-69可接受,但存在明显不足;建议进行审查
存在风险30-49存在重大薄弱环节;采用时应保持审慎
危急1-29问题严重(项目被弃置、仅有单一维护者、缺乏基本工程规范)
活力社区与采用可持续性与治理工程质量安全AI 就绪度

评分画像

每条轴代表一个类别。形状比平均值更重要——健康的对象会填满整个图形,而“一峰一谷”式画像意味着某一维度的优势正掩盖另一维度的风险。

所有权

88 关注者9 个公开仓库始于 2025年7月

该仓库由组织支持——共同承担、可问责的托管责任,可延续于任何单一维护者之后。

软件包生态系统

按类别列示的指标

活力

项目是否仍有生命——是否仍在编写代码,是否仍在发布版本?

96优秀 · 占总体的 22%
评分方式
36/36推送新近度 — 最近一次推送于 0 天前
36/36提交节奏 — 52 周中有 52 周有提交
18/18提交量 — 最近一年 1,818 次提交
10/10OpenSSF Scorecard:Maintained — 30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
所用输入
commits_last_year1,818
human_commit_share1
days_since_last_push0
active_weeks_last_year52

发布纪律

90优秀
评分方式
27/27有发布版本 — 已发布 100 个发布版本
36/36发布时效 — 最近一次发布版本于 5 天前
27/27发布节奏 — 约每 5.2 天发布一次
0/10OpenSSF Scorecard:Signed-Releases — Project has not signed or included provenance with any releases.
所用输入
releases_count100
latest_release_tagv0.23.2
releases_from_tags
days_since_latest_release5
mean_days_between_releases5.2

社区与采用

项目是否拥有用户、下载量与关注度,并具备欢迎贡献者参与的配置?

79良好 · 占总体的 18%
评分方式
60/60星标 — 8,563 个星标
20/25复刻 — 249 个复刻
6/15关注者 — 13 位关注者
所用输入
forks249
stars8,563
watchers13
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history

社区健康

70良好
评分方式
22.5/22.5README
22.5/22.5许可证 — 可识别的许可证(GPL-3.0)
18/18CONTRIBUTING 指南
0/13.5行为准则
0/7.2议题模板
0/6.3PR 模板
所用输入
has_readme
has_license
has_contributing
has_issue_template
has_code_of_conduct
has_pull_request_template

可持续性与治理

项目能否在其成员之外延续——巴士系数、响应能力、由谁支持,以及软件包的维护状况?

53中等 · 占总体的 24%
评分方式
9/54巴士系数 — 1 位贡献者贡献了半数提交
3.4/22.5提交分布 — 头号贡献者编写了 85% 的提交
13.5/13.5贡献者广度 — 100 位贡献者
10/10OpenSSF Scorecard:Contributors — project has 20 contributing companies or organizations
所用输入
bus_factor1
contributors_sampled100
top_contributor_share0.849
评分方式
32.6/46.8议题解决 — 70% 的议题已关闭
36.4/38.3PR 接受 — 已裁定的 PR 中 861/906 已合并
3/15OpenSSF Scorecard:Code-Review — Found 7/30 approved changesets -- score normalized to 2
所用输入
merged_prs861
open_issues212
closed_issues489
issue_closed_ratio0.698
closed_unmerged_prs45
评分方式
30/30所有权背书 — 组织持有
0/20已验证域名
14/25所有者影响力 — vicinaehq 有 88 位关注者
9.3/25既往记录 — 9 个公开仓库,账户约 0 年
所用输入
followers88
owner_typeOrganization
is_verified
owner_loginvicinaehq
public_repos9
account_age_days360

工程质量

基础的工程与文档实践是否到位?

75良好 · 占总体的 20%

工程实践

82良好
评分方式
24/24CI 工作流 — 13 个工作流
24/24存在测试
16/16Linter 配置 — biome.json
0/9.6Pre-commit 钩子
0/6.4.editorconfig
18/20OpenSSF Scorecard:CI-Tests — 25 out of 26 merged PRs checked by a CI test -- score normalized to 9
所用输入
has_ci
has_tests
has_editorconfig
has_linter_config
has_precommit_config

文档

65中等
评分方式
30/30README
0/25文档目录
15/15文档 / 主页站点 — https://vicinae.com
10/10仓库描述
10/10主题标签 — 10 个主题标签
0/10Wiki
所用输入
topicslinux, poweruser, productivity, app-launcher, nodejs, qt, react, raycast, cpp23, macos
has_wiki
homepagehttps://vicinae.com
has_readme
has_docs_dir
has_description

安全

可见的安全与供应链实践是否稳固,且不存在未解决的高风险司法辖区暴露?

36存在风险 · 占总体的 16%

安全态势

36存在风险
评分方式
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — branch protection not enabled on development/release branches
2.2/2.5CI-Tests — 25 out of 26 merged PRs checked by a CI test -- score normalized to 9
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
1.5/7.5Code-Review — Found 7/30 approved changesets -- score normalized to 2
2.5/2.5Contributors — project has 20 contributing companies or organizations
10/10Dangerous-Workflow — no dangerous workflow patterns detected
0/7.5Dependency-Update-Tool — no update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5许可证 — license file detected
7.5/7.5Maintained — 30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
0/5Packaging — 无数据
0/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
0/5SAST — SAST tool is not run on all commits -- score normalized to 0
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — Project has not signed or included provenance with any releases.
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
2.2/7.5Vulnerabilities — 7 existing vulnerabilities detected
所用输入
sourceopenssf_scorecard
checks_evaluated17
scorecard_versionv5.5.0
checks_inconclusive1
scorecard_aggregate3.6
已排除计分(无数据或不适用):packaging。 其余权重已重新归一化。

AI 就绪度

该仓库在多大程度上具备与 AI 编码代理协同开发与维护的条件?这是一枚独立的实验性徽章——权重为 0.0,因此单独呈现,不影响总体健康评分。

82良好 · 占总体的 0%
评分方式
45/45代理指令 — AGENTS.md, CLAUDE.md
0/15机器可读文档(llms.txt)
40/40可读的提交历史 — 100 次人类提交中有 100 次说明了意图(结构化标题或解释性正文)
所用输入
has_llms_txt
legible_history_share1
agent_instruction_filesAGENTS.md, CLAUDE.md
agent_instruction_max_bytes6,267
评分方式
18/18一条命令的引导启动 — Makefile, src/browser-extension/Makefile, src/lib/figura/Makefile, src/lib/glyph/Makefile, src/lib/script-command/Makefile, src/lib/vicinae-ipc/Makefile, src/lib/xdgpp/Makefile, src/server/Makefile, src/snippet/Makefile
22/22自动化测试
11/11Lint / 格式化配置 — biome.json
11/11静态类型检查 — extra/extension-boilerplate/tsconfig.json, src/typescript/api/tsconfig.json, src/typescript/extension-manager/tsconfig.json, src/typescript/raycast-api-compat/tsconfig.json
10/10可复现环境 — Dockerfile, Nix, lockfile
0/10已体现的代理实践 — 最近 100 次提交中没有代理编写的提交
0/8自动化维护 — 未观察到自动依赖更新
0/10OpenSSF Scorecard:Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
所用输入
has_nix
has_tests
lockfilespackage-lock.json
has_dockerfile
typed_language
bootstrap_filesMakefile, src/browser-extension/Makefile, src/lib/figura/Makefile, src/lib/glyph/Makefile, src/lib/script-command/Makefile, src/lib/vicinae-ipc/Makefile, src/lib/xdgpp/Makefile, src/server/Makefile, src/snippet/Makefile
has_devcontainer
has_linter_config
typecheck_configsextra/extension-boilerplate/tsconfig.json, src/typescript/api/tsconfig.json, src/typescript/extension-manager/tsconfig.json, src/typescript/raycast-api-compat/tsconfig.json
agent_commit_share0
toolchain_manifests
dependency_bot_commit_share0
评分方式
45/45可类型检查的代码 — C++(静态类型)
54.9/55可控的文件大小 — 采样的 1,061 个源文件中有 1 个超过 60KB
所用输入
primary_languageC++
largest_source_bytes2,496,074
source_files_sampled1,061
oversized_source_files1

关键数据

8,563GitHub 星标
100贡献者
1,818最近 12 个月提交数
0距最近推送天数
100发布版本数
1巴士系数(bus factor)
212开放议题
npm软件包生态系统数

数据采集警告

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token
  • npm package 'scripts' points at a different repository (https://github.com/jaredhanson/node-scripts); excluded from ecosystem scoring
  • npm package 'template' points at a different repository (https://github.com/jonschlinkert/template); excluded from ecosystem scoring
  • GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

更多细节

Star 与 Fork 历史 0 ★ / 249 ⇿
0Star
249Fork
100发布

每颗 star 和每个 fork 的添加时间,来自 GitHub 并按天汇总。累计增长位于其构成来源——每日新增——的正上方,二者可相互对照:稳定的自然增长与短暂的突增形态截然不同。当这一差别可被衡量时,它会作为增长真实性予以报告。

05010015020025024942025-082026-022026-07
主版本 0次版本 16修订 84
OpenSSF Scorecard 3.6 / 10
3.6综合

来自开源项目 OpenSSF Scorecard 的独立、工具无关的安全评估。每项检查奖励的是安全实践本身,而非特定供应商的工具。Scorecard 无法判定的检查项标记为 不适用,并从安全评分中剔除(绝不按零分计)。Scorecard v5.5.0 · 2026-07-23 23:24 UTC

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
9CI-Tests25 out of 26 merged PRs checked by a CI test -- score normalized to 9
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
2Code-ReviewFound 7/30 approved changesets -- score normalized to 2
10Contributorsproject has 20 contributing companies or organizations
10Dangerous-Workflowno dangerous workflow patterns detected
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
10Maintained30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
不适用Packagingpackaging workflow not detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
0SASTSAST tool is not run on all commits -- score normalized to 0
0Security-Policysecurity policy file not detected
0Signed-ReleasesProject has not signed or included provenance with any releases.
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
3Vulnerabilities7 existing vulnerabilities detected
直接依赖 3
注册表软件包版本约束清单文件
npm@omnicast/apifile:../api/omnicast-api-1.0.0.tgzscripts/package.json
npm@omnicast/utilsfile:../api-utils/omnicast-utils-1.0.0.tgzscripts/package.json
npm@vicinae/apifile:../../src/typescript/apiextra/extension-boilerplate/package.json
全部依赖 未采集

本报告未能采集到解析后的依赖集合:GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

原始 JSON 报告 机器可读
{
  "data": {
    "repo": {
      "topics": [
        "linux",
        "poweruser",
        "productivity",
        "app-launcher",
        "nodejs",
        "qt",
        "react",
        "raycast",
        "cpp23",
        "macos"
      ],
      "is_fork": false,
      "size_kb": 146618,
      "has_wiki": false,
      "homepage": "https://vicinae.com",
      "languages": {
        "C": 6261,
        "C++": 5450468,
        "Nix": 24150,
        "QML": 445053,
        "GLSL": 3666,
        "HTML": 2071,
        "CMake": 88863,
        "Shell": 42135,
        "Swift": 10583,
        "Python": 3403,
        "Makefile": 10941,
        "Dockerfile": 11961,
        "Inno Setup": 3097,
        "JavaScript": 18536,
        "PowerShell": 10146,
        "TypeScript": 264486,
        "Objective-C++": 122110
      },
      "pushed_at": "2026-07-23T22:22:40Z",
      "created_at": "2025-07-28T03:49:03Z",
      "owner_type": "Organization",
      "updated_at": "2026-07-23T22:22:43Z",
      "description": "A focused launcher for your desktop - native, fast, extensible",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "GPL-3.0",
      "default_branch": "main",
      "license_spdx_raw": "GPL-3.0",
      "primary_language": "C++",
      "significant_languages": [
        "C++"
      ]
    },
    "owner": {
      "blog": "https://docs.vicinae.com",
      "name": "Vicinae HQ",
      "type": "Organization",
      "login": "vicinaehq",
      "company": null,
      "location": null,
      "followers": 88,
      "avatar_url": "https://avatars.githubusercontent.com/u/223195236?v=4",
      "created_at": "2025-07-28T03:08:02Z",
      "is_verified": null,
      "public_repos": 9,
      "account_age_days": 360
    },
    "license": {
      "state": "standard",
      "spdx_id": "GPL-3.0",
      "raw_spdx": "GPL-3.0",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v0.23.2",
          "kind": "patch",
          "published_at": "2026-07-18T15:34:23Z"
        },
        {
          "tag": "v0.23.1",
          "kind": "patch",
          "published_at": "2026-07-09T23:31:28Z"
        },
        {
          "tag": "v0.23.0",
          "kind": "minor",
          "published_at": "2026-07-07T20:49:10Z"
        },
        {
          "tag": "v0.22.3",
          "kind": "patch",
          "published_at": "2026-07-02T16:31:16Z"
        },
        {
          "tag": "v0.22.2",
          "kind": "patch",
          "published_at": "2026-07-02T01:09:14Z"
        },
        {
          "tag": "v0.22.1",
          "kind": "patch",
          "published_at": "2026-07-02T01:26:19Z"
        },
        {
          "tag": "v0.22.0",
          "kind": "minor",
          "published_at": "2026-06-21T20:44:52Z"
        },
        {
          "tag": "v0.21.7",
          "kind": "patch",
          "published_at": "2026-06-15T00:29:53Z"
        },
        {
          "tag": "v0.21.6",
          "kind": "patch",
          "published_at": "2026-06-06T19:11:19Z"
        },
        {
          "tag": "v0.21.5",
          "kind": "patch",
          "published_at": "2026-06-01T09:50:24Z"
        },
        {
          "tag": "v0.21.4",
          "kind": "patch",
          "published_at": "2026-06-01T00:42:25Z"
        },
        {
          "tag": "v0.21.3",
          "kind": "patch",
          "published_at": "2026-05-30T23:35:59Z"
        },
        {
          "tag": "v0.21.2",
          "kind": "patch",
          "published_at": "2026-05-26T21:48:12Z"
        },
        {
          "tag": "v0.21.1",
          "kind": "patch",
          "published_at": "2026-05-24T15:01:08Z"
        },
        {
          "tag": "v0.21.0",
          "kind": "minor",
          "published_at": "2026-05-14T12:26:39Z"
        },
        {
          "tag": "v0.20.15",
          "kind": "patch",
          "published_at": "2026-05-02T21:19:22Z"
        },
        {
          "tag": "v0.20.14",
          "kind": "patch",
          "published_at": "2026-04-26T22:44:50Z"
        },
        {
          "tag": "v0.20.13",
          "kind": "patch",
          "published_at": "2026-04-16T12:07:54Z"
        },
        {
          "tag": "v0.20.12",
          "kind": "patch",
          "published_at": "2026-04-06T18:57:27Z"
        },
        {
          "tag": "v0.20.11",
          "kind": "patch",
          "published_at": "2026-04-05T20:03:21Z"
        },
        {
          "tag": "v0.20.10",
          "kind": "patch",
          "published_at": "2026-04-04T18:22:17Z"
        },
        {
          "tag": "v0.20.9",
          "kind": "patch",
          "published_at": "2026-03-27T13:12:35Z"
        },
        {
          "tag": "v0.20.8",
          "kind": "patch",
          "published_at": "2026-03-23T11:59:55Z"
        },
        {
          "tag": "v0.20.7",
          "kind": "patch",
          "published_at": "2026-03-16T19:51:05Z"
        },
        {
          "tag": "v0.20.6",
          "kind": "patch",
          "published_at": "2026-03-14T22:30:54Z"
        },
        {
          "tag": "v0.20.5",
          "kind": "patch",
          "published_at": "2026-03-09T23:43:50Z"
        },
        {
          "tag": "v0.20.4",
          "kind": "patch",
          "published_at": "2026-03-09T00:26:57Z"
        },
        {
          "tag": "v0.20.3",
          "kind": "patch",
          "published_at": "2026-03-05T14:53:57Z"
        },
        {
          "tag": "v0.20.2",
          "kind": "patch",
          "published_at": "2026-03-01T02:29:12Z"
        },
        {
          "tag": "v0.20.1",
          "kind": "patch",
          "published_at": "2026-02-27T23:13:39Z"
        },
        {
          "tag": "v0.20.0",
          "kind": "minor",
          "published_at": "2026-02-26T17:41:56Z"
        },
        {
          "tag": "v0.19.9",
          "kind": "patch",
          "published_at": "2026-02-16T16:08:05Z"
        },
        {
          "tag": "v0.19.8",
          "kind": "patch",
          "published_at": "2026-02-14T02:14:58Z"
        },
        {
          "tag": "v0.19.7",
          "kind": "patch",
          "published_at": "2026-02-09T22:31:36Z"
        },
        {
          "tag": "v0.19.6",
          "kind": "patch",
          "published_at": "2026-02-06T14:56:56Z"
        },
        {
          "tag": "v0.19.4",
          "kind": "patch",
          "published_at": "2026-02-05T21:09:23Z"
        },
        {
          "tag": "v0.19.5",
          "kind": "patch",
          "published_at": "2026-02-06T01:32:33Z"
        },
        {
          "tag": "v0.19.3",
          "kind": "patch",
          "published_at": "2026-01-27T21:32:46Z"
        },
        {
          "tag": "v0.19.2",
          "kind": "patch",
          "published_at": "2026-01-25T14:16:45Z"
        },
        {
          "tag": "v0.19.1",
          "kind": "patch",
          "published_at": "2026-01-22T12:08:36Z"
        },
        {
          "tag": "v0.19.0",
          "kind": "minor",
          "published_at": "2026-01-18T23:13:26Z"
        },
        {
          "tag": "v0.18.3",
          "kind": "patch",
          "published_at": "2026-01-08T17:39:15Z"
        },
        {
          "tag": "v0.18.2",
          "kind": "patch",
          "published_at": "2026-01-07T20:01:00Z"
        },
        {
          "tag": "v0.18.1",
          "kind": "patch",
          "published_at": "2026-01-04T14:02:08Z"
        },
        {
          "tag": "v0.18.0",
          "kind": "minor",
          "published_at": "2026-01-02T11:28:45Z"
        },
        {
          "tag": "v0.17.3",
          "kind": "patch",
          "published_at": "2025-12-25T21:15:01Z"
        },
        {
          "tag": "v0.17.2",
          "kind": "patch",
          "published_at": "2025-12-23T03:39:08Z"
        },
        {
          "tag": "v0.17.1",
          "kind": "patch",
          "published_at": "2025-12-22T03:14:54Z"
        },
        {
          "tag": "v0.17.0",
          "kind": "minor",
          "published_at": "2025-12-20T21:05:00Z"
        },
        {
          "tag": "v0.16.14",
          "kind": "patch",
          "published_at": "2025-12-09T09:33:36Z"
        },
        {
          "tag": "v0.16.13",
          "kind": "patch",
          "published_at": "2025-12-07T15:21:25Z"
        },
        {
          "tag": "v0.16.12",
          "kind": "patch",
          "published_at": "2025-12-05T13:05:57Z"
        },
        {
          "tag": "v0.16.11",
          "kind": "patch",
          "published_at": "2025-12-01T11:40:01Z"
        },
        {
          "tag": "v0.16.10",
          "kind": "patch",
          "published_at": "2025-11-23T22:06:54Z"
        },
        {
          "tag": "v0.16.9",
          "kind": "patch",
          "published_at": "2025-11-23T19:01:33Z"
        },
        {
          "tag": "v0.16.8",
          "kind": "patch",
          "published_at": "2025-11-18T22:46:46Z"
        },
        {
          "tag": "v0.16.7",
          "kind": "patch",
          "published_at": "2025-11-17T21:54:59Z"
        },
        {
          "tag": "v0.16.6",
          "kind": "patch",
          "published_at": "2025-11-14T21:34:09Z"
        },
        {
          "tag": "v0.16.5",
          "kind": "patch",
          "published_at": "2025-11-12T11:21:42Z"
        },
        {
          "tag": "v0.16.4",
          "kind": "patch",
          "published_at": "2025-11-11T23:31:12Z"
        },
        {
          "tag": "v0.16.3",
          "kind": "patch",
          "published_at": "2025-11-11T21:11:44Z"
        },
        {
          "tag": "v0.16.2",
          "kind": "patch",
          "published_at": "2025-11-06T11:35:59Z"
        },
        {
          "tag": "v0.16.1",
          "kind": "patch",
          "published_at": "2025-11-03T07:22:07Z"
        },
        {
          "tag": "v0.16.0",
          "kind": "minor",
          "published_at": "2025-10-31T21:57:05Z"
        },
        {
          "tag": "v0.15.7",
          "kind": "patch",
          "published_at": "2025-10-28T19:01:31Z"
        },
        {
          "tag": "v0.15.6",
          "kind": "patch",
          "published_at": "2025-10-26T23:05:45Z"
        },
        {
          "tag": "v0.15.5",
          "kind": "patch",
          "published_at": "2025-10-25T15:39:48Z"
        },
        {
          "tag": "v0.15.4",
          "kind": "patch",
          "published_at": "2025-10-25T05:12:02Z"
        },
        {
          "tag": "v0.15.3",
          "kind": "patch",
          "published_at": "2025-10-23T01:15:59Z"
        },
        {
          "tag": "v0.15.2",
          "kind": "patch",
          "published_at": "2025-10-21T23:06:35Z"
        },
        {
          "tag": "v0.15.1",
          "kind": "patch",
          "published_at": "2025-10-19T20:41:21Z"
        },
        {
          "tag": "v0.15.0",
          "kind": "minor",
          "published_at": "2025-10-19T02:06:34Z"
        },
        {
          "tag": "v0.14.5",
          "kind": "patch",
          "published_at": "2025-10-12T02:31:32Z"
        },
        {
          "tag": "v0.14.4",
          "kind": "patch",
          "published_at": "2025-10-11T00:59:00Z"
        },
        {
          "tag": "v0.14.3",
          "kind": "patch",
          "published_at": "2025-10-08T14:53:54Z"
        },
        {
          "tag": "v0.14.2",
          "kind": "patch",
          "published_at": "2025-10-07T01:08:21Z"
        },
        {
          "tag": "v0.14.1",
          "kind": "patch",
          "published_at": "2025-10-03T18:35:41Z"
        },
        {
          "tag": "v0.14.0",
          "kind": "minor",
          "published_at": "2025-10-03T01:13:47Z"
        },
        {
          "tag": "v0.13.4",
          "kind": "patch",
          "published_at": "2025-09-30T00:35:42Z"
        },
        {
          "tag": "v0.13.3",
          "kind": "patch",
          "published_at": "2025-09-28T15:01:59Z"
        },
        {
          "tag": "v0.13.2",
          "kind": "patch",
          "published_at": "2025-09-27T20:53:54Z"
        },
        {
          "tag": "v0.13.1",
          "kind": "patch",
          "published_at": "2025-09-27T11:18:22Z"
        },
        {
          "tag": "v0.13.0",
          "kind": "minor",
          "published_at": "2025-09-26T14:38:16Z"
        },
        {
          "tag": "v0.12.2",
          "kind": "patch",
          "published_at": "2025-09-20T17:06:33Z"
        },
        {
          "tag": "v0.12.1",
          "kind": "patch",
          "published_at": "2025-09-19T18:25:05Z"
        },
        {
          "tag": "v0.12.0",
          "kind": "minor",
          "published_at": "2025-09-19T14:27:28Z"
        },
        {
          "tag": "v0.11.0",
          "kind": "minor",
          "published_at": "2025-09-17T09:05:07Z"
        },
        {
          "tag": "v0.10.0",
          "kind": "minor",
          "published_at": "2025-09-15T12:40:35Z"
        },
        {
          "tag": "v0.9.6",
          "kind": "patch",
          "published_at": "2025-09-13T11:15:14Z"
        },
        {
          "tag": "v0.9.5",
          "kind": "patch",
          "published_at": "2025-09-11T09:10:14Z"
        },
        {
          "tag": "v0.9.4",
          "kind": "patch",
          "published_at": "2025-09-10T14:23:00Z"
        },
        {
          "tag": "v0.9.2",
          "kind": "patch",
          "published_at": "2025-09-09T11:30:51Z"
        },
        {
          "tag": "v0.9.1",
          "kind": "patch",
          "published_at": "2025-09-06T17:32:54Z"
        },
        {
          "tag": "v0.9.0",
          "kind": "minor",
          "published_at": "2025-09-06T15:59:16Z"
        },
        {
          "tag": "v0.8.5",
          "kind": "patch",
          "published_at": "2025-09-04T09:08:14Z"
        },
        {
          "tag": "v0.8.4",
          "kind": "patch",
          "published_at": "2025-09-03T04:53:02Z"
        },
        {
          "tag": "v0.8.3",
          "kind": "patch",
          "published_at": "2025-09-02T05:49:09Z"
        },
        {
          "tag": "v0.8.2",
          "kind": "patch",
          "published_at": "2025-08-30T23:39:16Z"
        },
        {
          "tag": "v0.8.1",
          "kind": "patch",
          "published_at": "2025-08-29T15:44:49Z"
        },
        {
          "tag": "v0.8.0",
          "kind": "minor",
          "published_at": "2025-08-29T02:51:21Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "de75102a08956b339c3b282dd43ec9eef3b743a0",
          "body": "Now that we use an event tap to implement global shortcuts it is pretty much mandatory for us to be granted the accessibility permission on macOS. It was already required for several things such as paste, snippets, etc... to work.\n\nRequiring it at startup is more honest and avoids creating unexpected broken states.",
          "is_bot": false,
          "headline": "feat(macos): make accessibility permission mandatory (#1709)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-23T22:22:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "632ca79e9f8fc9721384921f28ec069ff48aaf53",
          "body": "* feat(macos): migrate global shortcut backend to use a tap\n\nWe now use a keyboard event tap in order to implement the global shortcut backend on macOS.\n\nThe main reason is that this allows us to bind more complex shortcuts that can't be handled by the Carbon API. This also makes it easier to match \n[…]\n or fallback to QWERTY for non latin scripts.\n\nThis will also allow us to set up more complex bindings in the future, such as an \"hyper key\" or similar.\n\n* refactor: use named constants where possible",
          "is_bot": false,
          "headline": "feat(macos): migrate global shortcut backend to use a tap (#1708)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-23T20:45:24Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d3abfbc2afe149d48c9bc3ba95f6689e965891c7",
          "body": "No shortcut preset was set to build the detail action panel, resulting\nin the primary action not being activatable using return.",
          "is_bot": false,
          "headline": "fix: use list shortcut preset for extension detail views (#1707)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-23T15:11:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fdf7542d7522eec05117816635ece92efdc3d1e7",
          "body": "We were using the item title as a unique key to identity list items\nwhich is obviously incorrect as duplicates can easily occur. This makes\nsure we use the `itemId` already communicated on the wire, which is\nexplicitly designed for that purpose.",
          "is_bot": false,
          "headline": "fix: use wire list item ID for extension lists (#1706)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-22T17:17:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "630036e784de647bcf18aedab7007ec5c4f5b2d0",
          "body": "…#1625)",
          "is_bot": false,
          "headline": "feat(nix): build browser native host messaging into main derivation (…",
          "author_name": "Yechiel",
          "author_login": "yechielw",
          "committed_at": "2026-07-20T19:21:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9a2c9ebee8f2d23e810c4d90122de701541dc086",
          "body": null,
          "is_bot": false,
          "headline": "refactor: move tryAliasFastTrack into root-view-host (#1703)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-20T00:42:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "60ef1778978bbca253ddd1fd7f22be13271a86da",
          "body": null,
          "is_bot": false,
          "headline": "fix: fully remove default action wrapper usage",
          "author_name": "Aurelien Brabant",
          "author_login": "aurelleb",
          "committed_at": "2026-07-19T23:59:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7d3cff5873211d40ff3a197346ac52c155293229",
          "body": "* feat: root search history\n\n* feat: skip entry if equal to search text\n\n* feat: honor special keybind up key\n\n* refactor: remove default action wrapper",
          "is_bot": false,
          "headline": "feat: root search history (#1702)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-19T23:45:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e7ee1d6401bb9e8547c21bdfac85f3f572caf27f",
          "body": "* fix(hyprpaper): remove deprecated commands and migrate to current\nsyntax.\n\n* fix: format",
          "is_bot": false,
          "headline": "fix(hyprpaper): remove deprecated and migrate to current syntax (#1700)",
          "author_name": "vMohammad",
          "author_login": "vMohammad24",
          "committed_at": "2026-07-19T12:36:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "74b4b62177a7e001a9d557bc76841b59341198a0",
          "body": null,
          "is_bot": false,
          "headline": "feat: windows wallpaper backend (#1699)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-18T23:51:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "eee05cd9ed6f79d89721f23dadc2305313c3ac58",
          "body": "Suppress keyup events as we hide the vicinae window or trigger a global\nshortcut.\n\nThis trick is required so that we don't end up leaking keyup events to\nwhatever is below the vicinae window.\n\nTwo typical examples:\n- <toggle_shortcut> like Ctrl+Space -> on close, the space keyup event\n  is sent to t\n[…]\nnerally leaked and can result in undesirable behavior such as\n  undoing fullscreen of an application for instance.\n\nPopular Windows launchers like Flow Launcher and PowerToys Run also have this issue.",
          "is_bot": false,
          "headline": "feat(windows): suppress leaked keyup events (#1698)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-18T23:31:33Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c55e85716e3e7a68f4b0f6ef6299d02a49623c7c",
          "body": null,
          "is_bot": false,
          "headline": "chore: bump to v0.23.2",
          "author_name": "Aurelien Brabant",
          "author_login": "aurelleb",
          "committed_at": "2026-07-18T15:23:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "27062766054e847e1749785e45edfac50455bcb7",
          "body": null,
          "is_bot": false,
          "headline": "fix: do not use first dropdown value as default for extensions",
          "author_name": "Aurelien Brabant",
          "author_login": "aurelleb",
          "committed_at": "2026-07-18T15:22:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "35d46da8887e674e94331d3206c9893d56870dc3",
          "body": null,
          "is_bot": false,
          "headline": "feat(script): allow install from local appimage",
          "author_name": "Aurelien Brabant",
          "author_login": "aurelleb",
          "committed_at": "2026-07-18T14:16:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "969deee08d8d959e31ca2e0e83e395829c0d5ffb",
          "body": "Extension commands can now specify a `keywords` array in their manifest\nin order for it to get indexed against these as well. Note that\nkeywords carry less weight than the command name.",
          "is_bot": false,
          "headline": "feat: implement extension manifest command keywords (#1695)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-18T13:35:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "77b5356d43453289345e593e30e8c4ad597f39f5",
          "body": null,
          "is_bot": false,
          "headline": "fix(appimage): input server not working (#1693)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-18T13:23:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "78eb33e27a160a6fe22df25eed45081cd10a0ef8",
          "body": null,
          "is_bot": false,
          "headline": "feat: show current time as default nav title in root (#1692)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-18T12:18:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b6bb83ed42d67f81cc3b289246510a52485d40eb",
          "body": null,
          "is_bot": false,
          "headline": "feat: make navigation wrapping opt-in (#1688)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-18T00:49:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2cac296c80197135632cb3134d542dec54954a27",
          "body": "* feat: add pagination hook\n\n* feat: implement extension pagination\n\n* feat: add paginated list examples\n\n* fix: erroneous load more calls\n\n* fix: pagination loadMore type\n\n* fix: format",
          "is_bot": false,
          "headline": "feat(api): add pagination for List and Grid components (#1687)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-17T23:48:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bb5b8664fe6a46ef25503f90ac5ba713e99737a5",
          "body": "* feat: adds new cmd verb to cli and attaches cwd to extension launch from it\n\n* feat: allow listing/launching all kinds of entrypoints\n\n* feat: add LaunchType.CommandLine for cli usage, and use cwd\n\n* feat: pass cwd as launch prop instead of process.cwd\n\n* feat: pass fallback text in launch props\n\n\n[…]\n* feat: cli alias\n\n* chore: better error message when launching command\n\n* fix: argument passing\n\n* feat: pass command name in json output\n\n---------\n\nCo-authored-by: Aurelien Brabant <gh@aurelle.dev>",
          "is_bot": false,
          "headline": "feat: vicinae cmd CLI commands (#1661)",
          "author_name": "Fredrik Mikal Wold",
          "author_login": "FredrikMWold",
          "committed_at": "2026-07-17T18:22:05Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7af67e64714e96171300478114b72e75b8c1e755",
          "body": null,
          "is_bot": false,
          "headline": "feat(nix): add launchd (macOS) support to home-manager module (#1682)",
          "author_name": "Daniel Lazaro",
          "author_login": "dnlzro",
          "committed_at": "2026-07-17T13:14:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "51a9987f288dd083fdaa8774443d058d3c557035",
          "body": null,
          "is_bot": false,
          "headline": "fix: apply new scroll handler to all scrollables (#1685)",
          "author_name": "Fredrik Mikal Wold",
          "author_login": "FredrikMWold",
          "committed_at": "2026-07-17T12:58:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6e9c29ea94d22b0b41e4c64e4551b8a629782de3",
          "body": null,
          "is_bot": false,
          "headline": "fix(macos): prevent clipboard copy HUD stealing focus (#1676)",
          "author_name": "Tinkerbells",
          "author_login": "Tinkerbells",
          "committed_at": "2026-07-17T00:57:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f1e4cff7a2fd3f0dc0d9cd4b58f2255f159a79fa",
          "body": null,
          "is_bot": false,
          "headline": "refactor: pass command controller by reference (#1674)",
          "author_name": "ayn2op",
          "author_login": "ayn2op",
          "committed_at": "2026-07-17T00:57:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d49eb96243bfc841aae5640bacb56e80095c71d5",
          "body": "Run VACUUM on the file indexer db when there is enough data to reclaim\nfrom it. Vacuuming does a full rewrite of the DB so we don't want to do\nit on each startup.",
          "is_bot": false,
          "headline": "feat(indexer): VACUUM db when enough to reclaim (#1683)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-17T00:35:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "67f3f5ea71a165d2a85c720ca8d7333fa9111f9c",
          "body": "Currently scan records accumulate indefinitely in the file indexer\ndatabase which is not very useful. We only care about the last scan for\na given entrypoint.",
          "is_bot": false,
          "headline": "feat(indexer): prune old scan records (#1681)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-16T23:06:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "818111a9a4ea895e2642a9da59c7f95e72388916",
          "body": "* feat: use fixed size thread pool to enqueue scans\n\nInstead of creating one thread per enqueued scan we now dispatch scans\nto a fixed size thread pool. This way concurrency remains fully bounded\nand we don't end up spinning up potentially thousand of threads in some\nscenarios.\n\n* fix: format",
          "is_bot": false,
          "headline": "feat(indexer): use fixed size thread pool to enqueue scans (#1680)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-16T21:37:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6ff786a409d440015a94456d9583b9e60d979aa3",
          "body": "* feat: windows settings and control panel applets\n\nAdd two new root search providers: one to list all modern Windows\nsettings, and the other to list all the control panel applets. They are\ndistinct providers so that it is easy for the user to disable one or the\nother completely (there are a lot of control panel applets, and some\nusers may not want them in the root search).\n\n* feat: use generic action name to open control panel applets\n\n* feat: use std::array where available",
          "is_bot": false,
          "headline": "feat: windows settings and control panel applets (#1679)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-16T18:23:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b8bd9b02504c8f623b5bdf8ffe6df9e8e790c792",
          "body": null,
          "is_bot": false,
          "headline": "feat: handle url scheme on windows (#1677)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-16T15:22:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a69aebb242724d5ac5261ec2c0cd66502e3b7999",
          "body": "* feat: make browser link fully cross platform\n\nThe browser link binary, invoked by the native messaging host, was using\npoll to read stdin/incoming vicinae messages. This made it not Windows\ncompatible so this PR refactors it to use a QEventLoop and a\nQLocalSocket in order to communicate with the v\n[…]\nlevant.\n\nThat same code should work on all platforms at once.\n\nBefore merging this needs testing on:\n- [ ] macOS\n- [ ] Linux\n\nJust to make sure those didn't break following this change.\n\n* fix: format",
          "is_bot": false,
          "headline": "feat: make browser link fully cross platform (#1675)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-16T13:38:31Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "0274ef4087032795d4ba06b05c0fdfc7778069a4",
          "body": "* feat: windows installer\n\n* chore: change installer name and location",
          "is_bot": false,
          "headline": "feat: windows installer (#1673)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-16T01:30:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "377450e3edadda1a7c9dea0d85bc493289903de6",
          "body": "* feat: windows app runtime\n\nImplements the `AbstractAppRuntime` interface on Windows in order to\nsupport the active app indicator, frontmost app API, and quit/force quit\napps.\n\nThis is pretty much a mirror of the XDG (linux) implementation, we use\nthe window manager to map apps to their window and classify an app with\nan open window as running.\n\n* refactor: use optional instead of 0 sentinel for non pid",
          "is_bot": false,
          "headline": "feat: windows app runtime (#1671)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-15T19:26:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3840525de0585ff12199c42b54490eed47e37a38",
          "body": "* feat: windows window management\n\n* fix: hide windows that are not bound to any virtual desktop\n\n* feat(api): make window.monitorId optional\n\n* refactor: better getter for workspace name",
          "is_bot": false,
          "headline": "feat: windows window management (#1670)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-15T18:23:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "04a44c226c36bf5359ba04193b9130872a675fbd",
          "body": null,
          "is_bot": false,
          "headline": "fix(api): set jsx mode to automatic",
          "author_name": "Aurelien Brabant",
          "author_login": "aurelleb",
          "committed_at": "2026-07-15T16:48:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "726dfb443dcf04899999e83de9b9e15facdb20ea",
          "body": "* fix(api): use named pipe to connect to vicinae server\n\n* feat: typecheck using ts compiler api directly\n\nThis way we no longer need to invoke npx and no longer assume the\nextension has TypeScript installed.\n\n* feat: use proper path to output extensions at\n\n* fix: nix hash\n\n* feat: enforce required typescript options",
          "is_bot": false,
          "headline": "feat: extension tooling on windows (#1669)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-15T13:22:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cc039e5264b4a76e7ed0a3099fc951a3d94c7825",
          "body": null,
          "is_bot": false,
          "headline": "feat: windows paste service (#1668)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-14T23:30:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "736a6ca828120794bf03b35f15907f1815a24d11",
          "body": "* feat: windows file search using system WSearch\n\n* fix: format",
          "is_bot": false,
          "headline": "feat: windows file search using built-in index (#1667)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-14T22:58:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "84bfbbe1d30259ee8fbbb1de2a2d94c13433aae3",
          "body": null,
          "is_bot": false,
          "headline": "fix: format",
          "author_name": "Aurelien Brabant",
          "author_login": "aurelleb",
          "committed_at": "2026-07-14T20:03:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "129640b0ac17e8dfe70b761c398011d184ad2983",
          "body": "* feat: windows clipboard history\n\n* refactor: extract to constants and prioritize image to http uris\n\n* fix: format\n\n* refactor: remove already defined headers",
          "is_bot": false,
          "headline": "feat: windows clipboard history (#1665)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-14T19:59:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "133506c26c800cf62cbdc18296c4da96a2e70d0c",
          "body": null,
          "is_bot": false,
          "headline": "chore: remove Windows specific popup code",
          "author_name": "Aurelien Brabant",
          "author_login": "aurelleb",
          "committed_at": "2026-07-14T16:15:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0d1d390274df953af9197becef80a1d338ce47b7",
          "body": "* feat: use native windows chrome for window and hud\n\n* fix: format\n\n* chore: add Windows formatting instructions\n\n* fix: shortcut activation and keyboard focus\n\n* refactor: get rid of resetAfterHide trick\n\n* refactor: remove adoptWindows hack\n\n* feat: always use in scene popups\n\n* fix: get rid of acrylic popup opacity",
          "is_bot": false,
          "headline": "feat: use native windows chrome for window and hud (#1662)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-14T16:14:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "94f9570f096a407d27e18073d1b01dae13c4d064",
          "body": "Raycast types `filtering` as `boolean | { keepSectionOrder: boolean }`, but the\nrender-payload parser only accepted a boolean. A payload containing\n`\"filtering\":{\"keepSectionOrder\":true}` aborted with `expected_true_or_false`,\nthe view never rendered, and the extension worker exited. This broke stoc\n[…]\nFilteringOptionsWire>`,\nmirroring the existing ActionPanel submenu handling, and collapse it to the\nenabled bool — the object form enables filtering (keepSectionOrder is not\nhonored yet).\n\nFixes #1581",
          "is_bot": false,
          "headline": "fix: accept object form of List/Grid `filtering` prop (#1651)",
          "author_name": "Noam Stolero",
          "author_login": "noamsto",
          "committed_at": "2026-07-13T19:51:05Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ece22bda174350adc8a4da0b8aa283ce2284439f",
          "body": null,
          "is_bot": false,
          "headline": "feat: force utf8 active code page (#1660)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-13T11:45:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4a3f964965d44565189f22d388b181a9e8be5cf0",
          "body": null,
          "is_bot": false,
          "headline": "nix: fixed misleading option description (#1659)",
          "author_name": "janquednau",
          "author_login": "janquednau",
          "committed_at": "2026-07-13T10:51:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d02d0325c45b006d7dc13c5fd32319362efe0077",
          "body": "* feat: windows global shortcut backend\n\n* fix: format",
          "is_bot": false,
          "headline": "feat: windows global shortcut backend (#1655)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-13T10:00:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4933bfd829dcfba4a9b0a1f83a08ce8d29f16691",
          "body": "* feat: windows app provider poc\n\n* feat: watch packaged apps\n\n* fix: compute proper app id for accurate dedup\n\n* add windows-relwithdebinfo preset\n\nbecause full debug builds run way too slow with MSVC and qt debug libs.\n\n* fix: resolve PIDL in .lnk files\n\n* fix: find all associations for directory\n\n[…]\nract common logic in helpers\n\n* fix: format\n\n* refactor: use std::variant to represent app kinds\n\n* fix: format\n\n* refactor: use ScopedCom for icon as well\n\n* feat: add run as admin action and cleanup",
          "is_bot": false,
          "headline": "feat: windows app provider (#1654)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-13T00:36:56Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8802754abf1c1db7db3a70004df0ea8783bed582",
          "body": "address review feedback",
          "is_bot": false,
          "headline": "nix: add module options for the NixOS module (#1649)",
          "author_name": "cswimr",
          "author_login": "cswimr",
          "committed_at": "2026-07-12T17:08:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e7e34695371737b371d6488c7f680b436d82093e",
          "body": "* build: successful vicinae-server compile on windows\n\n* refactor: snake_case for config structs\n\nThis is unfortunately needed in order to work around an MSVC bug where\nthe transformer silently corrupts some keys.\n\nWe just use snake case directly in the code instead of converting them\nto camelCase a\n[…]\ne sccache\n\n* fix: format\n\n* feat: add clean script\n\n* fix: do not log crash on extension manager quit\n\n* build: add cmake presets for macOS and linux\n\n* build: only allow MSVC as a compiler on windows",
          "is_bot": false,
          "headline": "feat: build with MSVC (#1648)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-11T18:20:47Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "57a2e614edb0e1494b9ec73aa24b0656efa3d33c",
          "body": null,
          "is_bot": false,
          "headline": "refactor(nav): guard native meaning behind platform checks",
          "author_name": "Aurelien Brabant",
          "author_login": "aurelleb",
          "committed_at": "2026-07-11T15:04:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b3e201ce37824db85fe9c44728750a93424b5c5a",
          "body": null,
          "is_bot": false,
          "headline": "fix: multi file copy (#1646)",
          "author_name": "Eric Kuck",
          "author_login": "EricKuck",
          "committed_at": "2026-07-11T15:02:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bafd52f3fee2d464b9293a72684a7dfd6ef729d4",
          "body": null,
          "is_bot": false,
          "headline": "feat: platform specific navigation keys (#1647)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-11T14:58:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "001b8283205d6475c10d6cd85389a1cce113d92a",
          "body": "* nix: implement SoulverCore nix module support for soulver-cpp\n\n* ci(cachix): build and cache soulver backend\n\n* nix: format\n\n* nix: refactor soulver to use with-soulver pkg\n\n* ci(nix): only build .#with-soulver",
          "is_bot": false,
          "headline": "nix: SoulverCore support (#1641)",
          "author_name": "vMohammad",
          "author_login": "vMohammad24",
          "committed_at": "2026-07-10T14:14:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "81d9a9b50b19d1b90ed682d5fd24a192e56c1b4b",
          "body": null,
          "is_bot": false,
          "headline": "chore: bump to v0.23.1",
          "author_name": "Aurelien Brabant",
          "author_login": "aurelleb",
          "committed_at": "2026-07-09T23:21:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cdf50b10db56525eff175b369ef8339b38bfb8ab",
          "body": null,
          "is_bot": false,
          "headline": "fix: libqalc tests",
          "author_name": "Aurelien Brabant",
          "author_login": "aurelleb",
          "committed_at": "2026-07-09T23:07:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b408f4eeec58cbed25133c01b398292c25fdcbb7",
          "body": "* feat: add digit grouping to calculator extension\n\n* fix: make digit grouping the default; remove related preference\n\n* fix: tests\n\n---------\n\nCo-authored-by: Aurelien Brabant <gh@aurelle.dev>",
          "is_bot": false,
          "headline": "feat: add digit grouping to libqalc backend (#1640)",
          "author_name": "Yan Li",
          "author_login": "Yusyuriv",
          "committed_at": "2026-07-09T22:10:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9a22ab04cb2587ee7632a1c2d2ba715b6ad003c4",
          "body": "* fix(api): expose Grid.throttle\n\nFor some reason the `Grid` root component didn't expose a `throttle` prop like `List` does, although fully implemented. This fixes that.\n\n* fix: pass prop properly",
          "is_bot": false,
          "headline": "fix(api): expose Grid.throttle (#1644)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-09T22:03:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6bfcc50926d801f290539422cb13f60d32e63c5e",
          "body": "* feat: add active key to WindowManagement.Screen\n\nAdd `active` key to `WindowManagement.Screen` so that the callers can\nknow which screen the vicinae window is currently shown on. Always set\nto false if the vicinae window is not shown (e.g the extension runs in\nthe background at a given interval).\n\n* fix: use reinterpret_cast to cast winId",
          "is_bot": false,
          "headline": "feat: add active key to WindowManagement.Screen (#1643)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-09T21:21:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "034df6645a5d33ebc5ba6542ed05189496fb3c1f",
          "body": "Use the native macOS API to get screen information since QT does not\nallow us to know the physical resolution of the current mode.",
          "is_bot": false,
          "headline": "feat: use native macOS API to enumerate screens (#1642)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-09T20:22:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0f55008bb888de0dab565ef21c75f6091b69d818",
          "body": "* feat(api): report screen physical resolution\n\n* feat: WindowManagement.Screen.physicalResolution\n\nAdd a `physicalResolution` key to `WindowManagement.Screen` so that\nextensions can know the physical resolution of the screen, as the\n`bounds` key reports logical coordinates (after scaling is applied\n[…]\ncularly useful for e.g wallpaper extensions where we might\nwant to suggest wallpapers that match the exact resolution\n\n* refactor: remove PixelSize in favor of QSize\n\n* fix: background effect listener",
          "is_bot": false,
          "headline": "feat(api): WindowManagement.Screen.physicalResolution (#1638)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-09T19:08:30Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "efb88407898eb791436c084e570d128ecc193643",
          "body": null,
          "is_bot": false,
          "headline": "fix(ui): image scale in extension grid (#1631)",
          "author_name": "Eric Kuck",
          "author_login": "EricKuck",
          "committed_at": "2026-07-09T17:18:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "09ba8d35ff0403e1c3df50685fdccbcc26e2ac49",
          "body": "text/uri-list should never be stored in the clipboard as a plain text string.\n\nPresumably this works on linux because QMimeDatabase does not categorize text/uri-list as inheriting from text/plain.",
          "is_bot": false,
          "headline": "fix: copy/paste file from macOS clipboard history (#1639)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-09T17:07:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0f439e139c53a96fe15f3a7286e7fe054e25ae1c",
          "body": "In some scenarios, the QT clipboard is filled with the application/x-qt-image type which means we can request the raw image data and then convert it to another format. When that happens, we now convert it to PNG automatically.\n\nCurrently the image conversion happens on the main thread, as clipboard access is not thread safe, for big images it could theoretically become a problem, but it's fine for now.\n\nFixes #1634",
          "is_bot": false,
          "headline": "fix: image not saved in macOS clipboard history (#1637)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-09T13:37:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c219f83872f8bd8432fd2ea5972df64580a5eaef",
          "body": null,
          "is_bot": false,
          "headline": "fix: qmlls support in Nix devshells (#1636)",
          "author_name": "Bodya",
          "author_login": "bpavuk",
          "committed_at": "2026-07-09T12:43:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f8ba9ab22132c0f358b99d057ffa5307ed8845c4",
          "body": null,
          "is_bot": false,
          "headline": "ci: publish release once all assets are uploaded",
          "author_name": "Aurelien Brabant",
          "author_login": "aurelleb",
          "committed_at": "2026-07-08T11:06:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b96d953b74c1e1a250d3282f3857c9935aeca3f2",
          "body": null,
          "is_bot": false,
          "headline": "chore: bump to v0.23.0",
          "author_name": "Aurelien Brabant",
          "author_login": "aurelleb",
          "committed_at": "2026-07-07T20:38:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5dfc2bc3c9a82c92f49be20e3be21229d246d6fe",
          "body": "…ivity monitor",
          "is_bot": false,
          "headline": "chore: hardlink node to vicinae-ext-runtime to make it clearer in act…",
          "author_name": "Aurelien Brabant",
          "author_login": "aurelleb",
          "committed_at": "2026-07-07T20:24:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "29dd3ffb3f2b757c5f2b0fab3e829d5814f87750",
          "body": null,
          "is_bot": false,
          "headline": "feat: support for sendDesktopNotification on macOS (#1627)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-07T20:12:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e642dd677feb1fa290a08b105a3be4c3c9f96021",
          "body": null,
          "is_bot": false,
          "headline": "build: use npm ci to install deps",
          "author_name": "Aurelien Brabant",
          "author_login": "aurelleb",
          "committed_at": "2026-07-07T19:45:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bb7ebf59c41d0a66f2d3bfbf8554382b6b57661c",
          "body": null,
          "is_bot": false,
          "headline": "fix: remove subtitle from create extension boilerplate",
          "author_name": "Aurelien Brabant",
          "author_login": "aurelleb",
          "committed_at": "2026-07-07T19:36:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9eb06d34f58e2216189769feac49771358a4c9dc",
          "body": "Fix excessively small gifs especially on high DPI screens.",
          "is_bot": false,
          "headline": "fix: compute effective dpr from frame res for gifs",
          "author_name": "Aurelien Brabant",
          "author_login": "aurelleb",
          "committed_at": "2026-07-07T19:19:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dd3f08282665c03a19ba7c01960d16de7f9b2cec",
          "body": null,
          "is_bot": false,
          "headline": "fix: grid cell inset calculations",
          "author_name": "Aurelien Brabant",
          "author_login": "aurelleb",
          "committed_at": "2026-07-07T19:19:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "750053a732c8c4ff1dac7ed50d17b8a109c23754",
          "body": "We used to cache extensions and never evicted them until next restart.",
          "is_bot": false,
          "headline": "fix: remove vicinae store caching",
          "author_name": "Aurelien Brabant",
          "author_login": "aurelleb",
          "committed_at": "2026-07-07T19:19:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3502aef7c47355714519b2458b5ebdb180bd3d08",
          "body": "* fix(extensions): do not miss detail updates\n\nWe didn't update the list detail if the update came from a subsequent\nrender. Also we added a slight debounce so that quick detail changes do\nnot flicker.\n\n* fix: set detail to current after debounce, not null",
          "is_bot": false,
          "headline": "fix(extensions): do not miss detail updates (#1626)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-07T16:57:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "aea311cb8a0b04982ff5f6d86531d19c4483073d",
          "body": "actually required for proper file search",
          "is_bot": false,
          "headline": "fix: put back FDA permission in onboarding",
          "author_name": "Aurelien Brabant",
          "author_login": "aurelleb",
          "committed_at": "2026-07-07T15:28:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1f369ef4af10f4eaa40c9c9ed26f7af153d7c5a2",
          "body": "Per the xdg-terminal-exec spec, when an X-TerminalArg* flag is defined\nas ending with '=', its value must be appended to the same argument\nwithout whitespace. The flag and value were always emitted as two\nseparate argv entries, which breaks terminals declaring the '=' form.\n\nWith ghostty (X-Terminal\n[…]\ns=' and the\napp id as separate arguments. Ghostty does not accept space-separated\nflag values and rejected the bare app id argument with a\n\"Configuration Errors\" dialog: cli:3:<app-id>: invalid field.",
          "is_bot": false,
          "headline": "fix(xdg): append terminal arg value to flags ending with '=' (#1623)",
          "author_name": "stvsu",
          "author_login": "stvsu",
          "committed_at": "2026-07-07T12:56:37Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4096191dbb8e613a668492eb255994c49445db2e",
          "body": null,
          "is_bot": false,
          "headline": "ci: macOS dmg workflow",
          "author_name": "Aurelien Brabant",
          "author_login": "aurelleb",
          "committed_at": "2026-07-07T12:29:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "356c907e4589e407778569b98cca921746e12ff3",
          "body": null,
          "is_bot": false,
          "headline": "fix: bundle libqtquickshapesdesignhelpersplugin.dylib",
          "author_name": "Aurelien Brabant",
          "author_login": "aurelleb",
          "committed_at": "2026-07-07T11:14:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bb4edb45ad7aa7eeb540c9a14cd0868ea15895ff",
          "body": null,
          "is_bot": false,
          "headline": "chore: remove fda permission requirement from onboarding",
          "author_name": "Aurelien Brabant",
          "author_login": "aurelleb",
          "committed_at": "2026-07-07T10:49:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e3b30a3f8d96dcf80ee23e6115efdc5b33c6aebc",
          "body": null,
          "is_bot": false,
          "headline": "style: reduce contrast of selection colors for vicinae inkwell",
          "author_name": "Aurelien Brabant",
          "author_login": "aurelleb",
          "committed_at": "2026-07-07T01:15:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "10112686d1a458a224bc005374973b0dfabb6352",
          "body": "Untie navigation primitive from the launcher global and move it into a proper Keyboard global helper. This way it also works outside of the launcher window.",
          "is_bot": false,
          "headline": "refactor: move keyboard navigation to global helper (#1622)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-07T01:07:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "eca1ee9c1bdd4c1dc8c4177b8d0c7e17967b036c",
          "body": "remap `cmd` key to `control` on linux and add specific names for the\nmeta keys: `meta` | `windows`.",
          "is_bot": false,
          "headline": "feat: cross platform extension keybinds (#1621)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-07T00:52:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "223aba710eba0ca6b2dd2d3d668eaf5f6cc1cf31",
          "body": "Fixes a URL encoding bug and make the bug report info relevant to macOS as well.",
          "is_bot": false,
          "headline": "feat: macOS report bug command (#1620)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-06T23:14:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "855ce3717f126887ed2730545a5358dc53695e12",
          "body": null,
          "is_bot": false,
          "headline": "fix: manage fallback command state and ordering (#1619)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-06T22:42:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1fd3299ff0929713cf45d45ec0d1e2c7072d9c4b",
          "body": "* feat: bundle SoulverCore as default calculator backend on macOS\n\n* fix: do not preprocess soulver core input\n\n* refactor: move bundle soulver core in separate function\n\n* refactor: move SwiftRuntime.cmake to top level cmake dir\n\n* chore: add utm parameters for soulver link",
          "is_bot": false,
          "headline": "feat: bundle SoulverCore as default calculator backend on macOS (#1617)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-06T21:40:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6e50108f70bf9d74e758294419e5e0400f9a0a72",
          "body": null,
          "is_bot": false,
          "headline": "fix: do not use QDBusInterface for desktop notifications (#1618)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-06T21:07:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c9ad0ede8d09fd796b30be235837acb0a11e8a8b",
          "body": "* feat: macOS onboarding process\n\n* feat: make sure tap is restarted after accessibility is granted\n\n* fix: mark onboarding as finished only when last step is completed\n\n* refactor: use glaze to store onboarding json state\n\n* fix: proper background blend rect for buttons",
          "is_bot": false,
          "headline": "feat: macOS onboarding process (#1614)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-06T17:30:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4fc71570f49915cb654b2f42fac6654d176224a6",
          "body": "* feat: implement environment.canAccess API\n\n* fix: format",
          "is_bot": false,
          "headline": "feat: implement environment.canAccess API (#1613)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-06T13:27:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6dfc50a326a54a67d0daf76ce29fcd7ebc2652b5",
          "body": null,
          "is_bot": false,
          "headline": "feat(api): expose BrowserExtension.getTabs to extensions (#1612)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-05T23:09:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "23d6131b8dbfed5b6420880db3608ca0072fe746",
          "body": null,
          "is_bot": false,
          "headline": "feat(api): throw when raycast compat shim is unavailable (#1611)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-05T20:55:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f313acfe6607ab6d2f2466aa2658e56a7a8f5c4f",
          "body": "* feat: better contrast for selection colors\n\n* fix: macOS theme awareness and light theme adjustments\n\n* fix: do not force opacity on alert dialog",
          "is_bot": false,
          "headline": "feat(theming): better contrast for selection colors (#1610)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-05T20:45:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "90d180e76a2bfe2cd585c50e9b6eda0032ad6752",
          "body": null,
          "is_bot": false,
          "headline": "ci: fix version labeling",
          "author_name": "Aurelien Brabant",
          "author_login": "aurelleb",
          "committed_at": "2026-07-05T17:20:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1fd642a7c93e744e7aa5fa0d2667eaddf241aeba",
          "body": "Signed-off-by: Marvin Beckers <mail@embik.me>",
          "is_bot": false,
          "headline": "build: split qrc based on build conditions (extensions vs core) (#1609)",
          "author_name": "Marvin Beckers",
          "author_login": "embik",
          "committed_at": "2026-07-05T16:24:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f7b687b34c93a8952cb544f60038ad0ea3922804",
          "body": "* fix: make vicinae extension CLI cross platform\n\nSo far we have been calling the vicinae binary and passing it a deeplink in order to communicate with the daemon, which doesn't fit the macOS model very well. So in this PR we just implement a tiny IPC client in TypeScript to communicate with the daemon as any regular client does.\n\n* refactor: generate typescript ipc code using figura",
          "is_bot": false,
          "headline": "fix: make vicinae extension CLI cross platform (#1606)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-05T16:16:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9878d64f2d964752a200647b7956afbbe51b288c",
          "body": "* feat: macOS auto start\n\n* refactor: reword cmake auto start option name\n\n* fix: typo",
          "is_bot": false,
          "headline": "feat: macOS auto start (#1604)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-04T22:54:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b0b907e610333501d1512c53a576d37a8698f72a",
          "body": null,
          "is_bot": false,
          "headline": "feat: macOS url scheme support (#1603)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-04T21:43:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6886cf113b6c7f9d76a2718df48efa35fcfae2d6",
          "body": "shared-mime-info 2.5.1 upgrade broke the loading of .sh script commands.",
          "is_bot": false,
          "headline": "fix: script command loading after shared-mime-info upgrade (#1602)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-04T21:41:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e2d66ed75277871c48908bb1d606dd92cdf547e4",
          "body": "* feat: fetch pinned node version for self packaged builds\n\n* feat: shell out to tar instead of linking to zlib + nits\n\n* fix: do not fallback on homebrew node on macOS",
          "is_bot": false,
          "headline": "feat: fetch pinned node version for self packaged builds (#1598)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-04T20:39:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "25831a499e9523b71f085d2be0470a574321b8f8",
          "body": "* feat: install browser extension native host manifests at runtime\n\n* fix: cross platform socket path\n\n* fix: simplify readme\n\n* nix: do not auto install manifests",
          "is_bot": false,
          "headline": "feat: install browser extension native host manifests at runtime (#1599)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-04T20:17:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4568ef7ee5afa4db103e5bd7328305ba697d1d63",
          "body": null,
          "is_bot": false,
          "headline": "build(macos): purge unused qt modules",
          "author_name": "Aurelien Brabant",
          "author_login": "aurelleb",
          "committed_at": "2026-07-04T15:01:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e12be8423637739d8b0d3766d0f771ef45e44b2d",
          "body": "* feat: dmg and notarization setup\n\n* chore: use correct icon size for vicinae\n\n* build: add shim to fix qtkeychain include path",
          "is_bot": false,
          "headline": "feat: dmg and notarization setup (#1597)",
          "author_name": "Aurelle",
          "author_login": "aurelleb",
          "committed_at": "2026-07-04T14:49:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 100,
      "commits_last_year": 1818,
      "latest_release_at": "2026-07-18T15:34:23Z",
      "latest_release_tag": "v0.23.2",
      "releases_from_tags": false,
      "days_since_last_push": 0,
      "active_weeks_last_year": 52,
      "days_since_latest_release": 5,
      "mean_days_between_releases": 5.2
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": true,
      "health_percentage": 62,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "scripts",
          "exists": true,
          "license": null,
          "keywords": [
            "require",
            "path"
          ],
          "ecosystem": "npm",
          "matches_repo": false,
          "registry_url": "https://www.npmjs.com/package/scripts",
          "is_deprecated": false,
          "latest_version": "0.1.0",
          "repository_url": "https://github.com/jaredhanson/node-scripts",
          "versions_count": 1,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 1,
          "monthly_downloads": 30001,
          "first_published_at": "2013-08-16T22:08:11.637000Z",
          "latest_published_at": "2013-08-16T22:08:13.087000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 4724
        },
        {
          "name": "template",
          "exists": true,
          "license": "MIT",
          "keywords": [
            "atpl",
            "coffee",
            "compile",
            "consolidate",
            "dot",
            "dust",
            "dustjs",
            "dustjs-helpers",
            "dustjs-linkedin",
            "eco",
            "ect",
            "ejs",
            "engine",
            "engines",
            "express",
            "haml",
            "haml-coffee",
            "hamljs",
            "handlebars",
            "helpers",
            "hogan.js",
            "jade",
            "jazz",
            "jqtpl",
            "liquor",
            "lo-dash",
            "lodash",
            "markdown",
            "mote",
            "mustache",
            "nunjucks",
            "process",
            "qejs",
            "ractive",
            "render",
            "swig",
            "template",
            "templates",
            "templayed",
            "toffee",
            "underscore",
            "view",
            "walrus",
            "whiskers",
            "yaml"
          ],
          "ecosystem": "npm",
          "matches_repo": false,
          "registry_url": "https://www.npmjs.com/package/template",
          "is_deprecated": false,
          "latest_version": "0.17.5",
          "repository_url": "https://github.com/jonschlinkert/template",
          "versions_count": 60,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 2,
          "monthly_downloads": 5353,
          "first_published_at": "2014-01-27T12:39:48.073000Z",
          "latest_published_at": "2016-12-12T17:20:45.339000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 3510
        }
      ]
    },
    "popularity": {
      "forks": 249,
      "stars": 8563,
      "watchers": 13,
      "fork_history": {
        "days": [
          {
            "date": "2025-08-15",
            "count": 2
          },
          {
            "date": "2025-08-16",
            "count": 4
          },
          {
            "date": "2025-08-17",
            "count": 2
          },
          {
            "date": "2025-08-19",
            "count": 1
          },
          {
            "date": "2025-08-20",
            "count": 1
          },
          {
            "date": "2025-08-21",
            "count": 2
          },
          {
            "date": "2025-08-23",
            "count": 1
          },
          {
            "date": "2025-08-24",
            "count": 1
          },
          {
            "date": "2025-08-25",
            "count": 1
          },
          {
            "date": "2025-08-26",
            "count": 3
          },
          {
            "date": "2025-08-27",
            "count": 1
          },
          {
            "date": "2025-08-29",
            "count": 1
          },
          {
            "date": "2025-08-30",
            "count": 2
          },
          {
            "date": "2025-08-31",
            "count": 1
          },
          {
            "date": "2025-09-02",
            "count": 1
          },
          {
            "date": "2025-09-05",
            "count": 1
          },
          {
            "date": "2025-09-07",
            "count": 1
          },
          {
            "date": "2025-09-10",
            "count": 2
          },
          {
            "date": "2025-09-11",
            "count": 1
          },
          {
            "date": "2025-09-14",
            "count": 4
          },
          {
            "date": "2025-09-15",
            "count": 3
          },
          {
            "date": "2025-09-16",
            "count": 2
          },
          {
            "date": "2025-09-17",
            "count": 1
          },
          {
            "date": "2025-09-18",
            "count": 1
          },
          {
            "date": "2025-09-19",
            "count": 1
          },
          {
            "date": "2025-09-20",
            "count": 2
          },
          {
            "date": "2025-09-21",
            "count": 1
          },
          {
            "date": "2025-09-22",
            "count": 1
          },
          {
            "date": "2025-09-23",
            "count": 1
          },
          {
            "date": "2025-09-24",
            "count": 1
          },
          {
            "date": "2025-09-26",
            "count": 1
          },
          {
            "date": "2025-09-28",
            "count": 2
          },
          {
            "date": "2025-10-01",
            "count": 1
          },
          {
            "date": "2025-10-03",
            "count": 1
          },
          {
            "date": "2025-10-04",
            "count": 2
          },
          {
            "date": "2025-10-06",
            "count": 2
          },
          {
            "date": "2025-10-07",
            "count": 1
          },
          {
            "date": "2025-10-08",
            "count": 1
          },
          {
            "date": "2025-10-11",
            "count": 2
          },
          {
            "date": "2025-10-14",
            "count": 1
          },
          {
            "date": "2025-10-15",
            "count": 1
          },
          {
            "date": "2025-10-16",
            "count": 1
          },
          {
            "date": "2025-10-23",
            "count": 1
          },
          {
            "date": "2025-10-24",
            "count": 1
          },
          {
            "date": "2025-10-25",
            "count": 2
          },
          {
            "date": "2025-10-26",
            "count": 1
          },
          {
            "date": "2025-10-27",
            "count": 1
          },
          {
            "date": "2025-10-31",
            "count": 1
          },
          {
            "date": "2025-11-01",
            "count": 2
          },
          {
            "date": "2025-11-05",
            "count": 1
          },
          {
            "date": "2025-11-07",
            "count": 1
          },
          {
            "date": "2025-11-09",
            "count": 3
          },
          {
            "date": "2025-11-11",
            "count": 1
          },
          {
            "date": "2025-11-12",
            "count": 1
          },
          {
            "date": "2025-11-13",
            "count": 1
          },
          {
            "date": "2025-11-14",
            "count": 2
          },
          {
            "date": "2025-11-15",
            "count": 1
          },
          {
            "date": "2025-11-17",
            "count": 1
          },
          {
            "date": "2025-11-18",
            "count": 2
          },
          {
            "date": "2025-11-19",
            "count": 1
          },
          {
            "date": "2025-11-20",
            "count": 1
          },
          {
            "date": "2025-11-21",
            "count": 1
          },
          {
            "date": "2025-11-22",
            "count": 1
          },
          {
            "date": "2025-11-24",
            "count": 1
          },
          {
            "date": "2025-11-25",
            "count": 1
          },
          {
            "date": "2025-11-26",
            "count": 1
          },
          {
            "date": "2025-11-28",
            "count": 1
          },
          {
            "date": "2025-11-29",
            "count": 1
          },
          {
            "date": "2025-12-02",
            "count": 1
          },
          {
            "date": "2025-12-05",
            "count": 1
          },
          {
            "date": "2025-12-06",
            "count": 2
          },
          {
            "date": "2025-12-07",
            "count": 1
          },
          {
            "date": "2025-12-09",
            "count": 1
          },
          {
            "date": "2025-12-10",
            "count": 1
          },
          {
            "date": "2025-12-13",
            "count": 1
          },
          {
            "date": "2025-12-15",
            "count": 1
          },
          {
            "date": "2025-12-17",
            "count": 1
          },
          {
            "date": "2025-12-21",
            "count": 1
          },
          {
            "date": "2025-12-23",
            "count": 1
          },
          {
            "date": "2025-12-24",
            "count": 1
          },
          {
            "date": "2025-12-28",
            "count": 1
          },
          {
            "date": "2025-12-29",
            "count": 2
          },
          {
            "date": "2026-01-01",
            "count": 1
          },
          {
            "date": "2026-01-02",
            "count": 1
          },
          {
            "date": "2026-01-04",
            "count": 1
          },
          {
            "date": "2026-01-05",
            "count": 1
          },
          {
            "date": "2026-01-06",
            "count": 1
          },
          {
            "date": "2026-01-08",
            "count": 1
          },
          {
            "date": "2026-01-11",
            "count": 1
          },
          {
            "date": "2026-01-12",
            "count": 1
          },
          {
            "date": "2026-01-14",
            "count": 1
          },
          {
            "date": "2026-01-16",
            "count": 1
          },
          {
            "date": "2026-01-17",
            "count": 1
          },
          {
            "date": "2026-01-18",
            "count": 2
          },
          {
            "date": "2026-01-20",
            "count": 1
          },
          {
            "date": "2026-01-23",
            "count": 1
          },
          {
            "date": "2026-01-26",
            "count": 2
          },
          {
            "date": "2026-01-31",
            "count": 1
          },
          {
            "date": "2026-02-01",
            "count": 1
          },
          {
            "date": "2026-02-03",
            "count": 1
          },
          {
            "date": "2026-02-05",
            "count": 2
          },
          {
            "date": "2026-02-10",
            "count": 4
          },
          {
            "date": "2026-02-13",
            "count": 1
          },
          {
            "date": "2026-02-15",
            "count": 1
          },
          {
            "date": "2026-02-18",
            "count": 1
          },
          {
            "date": "2026-02-19",
            "count": 2
          },
          {
            "date": "2026-02-20",
            "count": 2
          },
          {
            "date": "2026-02-23",
            "count": 1
          },
          {
            "date": "2026-02-26",
            "count": 1
          },
          {
            "date": "2026-02-27",
            "count": 3
          },
          {
            "date": "2026-02-28",
            "count": 4
          },
          {
            "date": "2026-03-02",
            "count": 1
          },
          {
            "date": "2026-03-04",
            "count": 3
          },
          {
            "date": "2026-03-05",
            "count": 1
          },
          {
            "date": "2026-03-12",
            "count": 1
          },
          {
            "date": "2026-03-13",
            "count": 1
          },
          {
            "date": "2026-03-16",
            "count": 1
          },
          {
            "date": "2026-03-17",
            "count": 3
          },
          {
            "date": "2026-03-18",
            "count": 2
          },
          {
            "date": "2026-03-19",
            "count": 1
          },
          {
            "date": "2026-03-20",
            "count": 1
          },
          {
            "date": "2026-03-22",
            "count": 1
          },
          {
            "date": "2026-03-25",
            "count": 1
          },
          {
            "date": "2026-03-28",
            "count": 1
          },
          {
            "date": "2026-03-30",
            "count": 1
          },
          {
            "date": "2026-04-04",
            "count": 1
          },
          {
            "date": "2026-04-05",
            "count": 1
          },
          {
            "date": "2026-04-06",
            "count": 1
          },
          {
            "date": "2026-04-07",
            "count": 2
          },
          {
            "date": "2026-04-10",
            "count": 1
          },
          {
            "date": "2026-04-13",
            "count": 2
          },
          {
            "date": "2026-04-14",
            "count": 1
          },
          {
            "date": "2026-04-16",
            "count": 1
          },
          {
            "date": "2026-04-20",
            "count": 1
          },
          {
            "date": "2026-04-21",
            "count": 1
          },
          {
            "date": "2026-04-23",
            "count": 1
          },
          {
            "date": "2026-04-25",
            "count": 2
          },
          {
            "date": "2026-04-26",
            "count": 1
          },
          {
            "date": "2026-05-04",
            "count": 1
          },
          {
            "date": "2026-05-09",
            "count": 1
          },
          {
            "date": "2026-05-11",
            "count": 1
          },
          {
            "date": "2026-05-13",
            "count": 1
          },
          {
            "date": "2026-05-14",
            "count": 1
          },
          {
            "date": "2026-05-15",
            "count": 1
          },
          {
            "date": "2026-05-17",
            "count": 1
          },
          {
            "date": "2026-05-18",
            "count": 1
          },
          {
            "date": "2026-05-19",
            "count": 2
          },
          {
            "date": "2026-05-20",
            "count": 1
          },
          {
            "date": "2026-05-22",
            "count": 1
          },
          {
            "date": "2026-05-25",
            "count": 1
          },
          {
            "date": "2026-05-27",
            "count": 1
          },
          {
            "date": "2026-05-28",
            "count": 1
          },
          {
            "date": "2026-06-01",
            "count": 1
          },
          {
            "date": "2026-06-04",
            "count": 1
          },
          {
            "date": "2026-06-05",
            "count": 1
          },
          {
            "date": "2026-06-06",
            "count": 1
          },
          {
            "date": "2026-06-07",
            "count": 1
          },
          {
            "date": "2026-06-11",
            "count": 1
          },
          {
            "date": "2026-06-12",
            "count": 1
          },
          {
            "date": "2026-06-13",
            "count": 4
          },
          {
            "date": "2026-06-15",
            "count": 3
          },
          {
            "date": "2026-06-19",
            "count": 1
          },
          {
            "date": "2026-06-22",
            "count": 2
          },
          {
            "date": "2026-06-23",
            "count": 3
          },
          {
            "date": "2026-06-25",
            "count": 1
          },
          {
            "date": "2026-06-26",
            "count": 1
          },
          {
            "date": "2026-06-27",
            "count": 2
          },
          {
            "date": "2026-07-02",
            "count": 3
          },
          {
            "date": "2026-07-03",
            "count": 1
          },
          {
            "date": "2026-07-04",
            "count": 2
          },
          {
            "date": "2026-07-06",
            "count": 1
          },
          {
            "date": "2026-07-08",
            "count": 1
          },
          {
            "date": "2026-07-09",
            "count": 2
          },
          {
            "date": "2026-07-10",
            "count": 2
          },
          {
            "date": "2026-07-12",
            "count": 2
          },
          {
            "date": "2026-07-13",
            "count": 1
          },
          {
            "date": "2026-07-14",
            "count": 3
          },
          {
            "date": "2026-07-16",
            "count": 1
          },
          {
            "date": "2026-07-18",
            "count": 2
          },
          {
            "date": "2026-07-23",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 249,
        "total_forks": 249
      },
      "star_history": null,
      "open_issues_and_prs": 237
    },
    "ai_readiness": {
      "has_nix": true,
      "example_dirs": [],
      "has_llms_txt": false,
      "has_dockerfile": true,
      "has_mcp_signal": false,
      "bootstrap_files": [
        "Makefile",
        "src/browser-extension/Makefile",
        "src/lib/figura/Makefile",
        "src/lib/glyph/Makefile",
        "src/lib/script-command/Makefile",
        "src/lib/vicinae-ipc/Makefile",
        "src/lib/xdgpp/Makefile",
        "src/server/Makefile",
        "src/snippet/Makefile"
      ],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [
        "extra/extension-boilerplate/tsconfig.json",
        "src/typescript/api/tsconfig.json",
        "src/typescript/extension-manager/tsconfig.json",
        "src/typescript/raycast-api-compat/tsconfig.json"
      ],
      "toolchain_manifests": [],
      "largest_source_bytes": 2496074,
      "source_files_sampled": 1061,
      "oversized_source_files": 1,
      "agent_instruction_files": [
        "AGENTS.md",
        "CLAUDE.md"
      ],
      "agent_instruction_max_bytes": 6267
    },
    "dependencies": {
      "manifests": [
        "scripts/package.json"
      ],
      "advisories": {
        "error": null,
        "scope": null,
        "source": null,
        "findings": [],
        "collected": false,
        "malicious": [],
        "truncated": false,
        "by_severity": {},
        "advisory_count": 0,
        "affected_count": 0,
        "assessed_count": 0,
        "malicious_count": 0,
        "assessed_package": null,
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "npm"
      ],
      "dependencies": [
        {
          "name": "@omnicast/api",
          "manifest": "scripts/package.json",
          "ecosystem": "npm",
          "version_constraint": "file:../api/omnicast-api-1.0.0.tgz"
        },
        {
          "name": "@omnicast/utils",
          "manifest": "scripts/package.json",
          "ecosystem": "npm",
          "version_constraint": "file:../api-utils/omnicast-utils-1.0.0.tgz"
        },
        {
          "name": "@vicinae/api",
          "manifest": "extra/extension-boilerplate/package.json",
          "ecosystem": "npm",
          "version_constraint": "file:../../src/typescript/api"
        }
      ],
      "all_dependencies": {
        "error": "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
        "source": null,
        "packages": [],
        "collected": false,
        "truncated": false,
        "total_count": null,
        "direct_count": null,
        "indirect_count": null
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 25,
        "merged_prs": 861,
        "open_issues": 212,
        "closed_ratio": 0.698,
        "closed_issues": 489,
        "closed_unmerged_prs": 45
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "aurelleb",
          "commits": 1942,
          "avatar_url": "https://avatars.githubusercontent.com/u/72200344?v=4"
        },
        {
          "type": "User",
          "login": "cilginc",
          "commits": 40,
          "avatar_url": "https://avatars.githubusercontent.com/u/104676201?v=4"
        },
        {
          "type": "User",
          "login": "rithvikvibhu",
          "commits": 34,
          "avatar_url": "https://avatars.githubusercontent.com/u/5113343?v=4"
        },
        {
          "type": "User",
          "login": "dagimg-dot",
          "commits": 30,
          "avatar_url": "https://avatars.githubusercontent.com/u/106905365?v=4"
        },
        {
          "type": "User",
          "login": "quadratech188",
          "commits": 29,
          "avatar_url": "https://avatars.githubusercontent.com/u/117572566?v=4"
        },
        {
          "type": "User",
          "login": "SiriusCrain",
          "commits": 15,
          "avatar_url": "https://avatars.githubusercontent.com/u/22578495?v=4"
        },
        {
          "type": "User",
          "login": "AntoineGS",
          "commits": 12,
          "avatar_url": "https://avatars.githubusercontent.com/u/16911399?v=4"
        },
        {
          "type": "User",
          "login": "pavle99",
          "commits": 12,
          "avatar_url": "https://avatars.githubusercontent.com/u/73827472?v=4"
        },
        {
          "type": "User",
          "login": "schromp",
          "commits": 9,
          "avatar_url": "https://avatars.githubusercontent.com/u/103186360?v=4"
        },
        {
          "type": "User",
          "login": "ThatOneCalculator",
          "commits": 8,
          "avatar_url": "https://avatars.githubusercontent.com/u/44733677?v=4"
        }
      ],
      "contributors_sampled": 100,
      "top_contributor_share": 0.849
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "api-release.yml",
        "build-appimage-image.yaml",
        "build-appimage.yaml",
        "build-arch-image.yaml",
        "build-linux.yaml",
        "build-macos.yaml",
        "build-windows.yaml",
        "cachix.yaml",
        "format.yaml",
        "macos-dmg.yaml",
        "nix-format.yaml",
        "nix-support.yml",
        "release.yml"
      ],
      "has_docs_dir": false,
      "linter_configs": [
        "biome.json"
      ],
      "has_editorconfig": false,
      "has_linter_config": true,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "package-lock.json"
      ],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 10,
            "reason": "no binaries found in the repo",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": 0,
            "reason": "branch protection not enabled on development/release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": 9,
            "reason": "25 out of 26 merged PRs checked by a CI test -- score normalized to 9",
            "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 7/30 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 20 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": 0,
            "reason": "no update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 10,
            "reason": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": null,
            "reason": "packaging workflow not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 0,
            "reason": "dependency not pinned by hash detected -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "SAST tool is not run on all commits -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 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": 0,
            "reason": "Project has not signed or included provenance with any releases.",
            "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": 3,
            "reason": "7 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "de75102a08956b339c3b282dd43ec9eef3b743a0",
        "ran_at": "2026-07-23T23:24:47Z",
        "aggregate_score": 3.6,
        "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-23T22:29:41Z",
      "oldest_open_prs": [
        {
          "number": 559,
          "created_at": "2025-10-27T02:07:00Z",
          "last_comment_at": "2025-10-31T20:36:38Z",
          "last_comment_author": "AntoineGS"
        },
        {
          "number": 568,
          "created_at": "2025-10-28T14:00:45Z",
          "last_comment_at": "2025-12-28T17:04:44Z",
          "last_comment_author": "AntoineGS"
        },
        {
          "number": 951,
          "created_at": "2026-01-11T09:34:03Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 984,
          "created_at": "2026-01-20T21:37:41Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 985,
          "created_at": "2026-01-20T23:41:03Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1004,
          "created_at": "2026-01-23T17:13:03Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1036,
          "created_at": "2026-01-31T08:50:41Z",
          "last_comment_at": "2026-02-03T08:27:41Z",
          "last_comment_author": "dagimg-dot"
        },
        {
          "number": 1107,
          "created_at": "2026-02-20T21:33:08Z",
          "last_comment_at": "2026-02-27T22:39:28Z",
          "last_comment_author": "aurelleb"
        },
        {
          "number": 1158,
          "created_at": "2026-03-03T18:10:39Z",
          "last_comment_at": "2026-03-31T17:16:09Z",
          "last_comment_author": "bpavuk"
        },
        {
          "number": 1212,
          "created_at": "2026-03-13T18:57:17Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1228,
          "created_at": "2026-03-17T13:29:01Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1230,
          "created_at": "2026-03-18T03:11:04Z",
          "last_comment_at": "2026-06-07T07:05:09Z",
          "last_comment_author": "Jelloeater"
        },
        {
          "number": 1259,
          "created_at": "2026-03-25T16:55:00Z",
          "last_comment_at": "2026-04-13T21:38:34Z",
          "last_comment_author": "vMohammad24"
        },
        {
          "number": 1295,
          "created_at": "2026-04-07T17:26:39Z",
          "last_comment_at": "2026-05-06T11:15:14Z",
          "last_comment_author": "SiriusCrain"
        },
        {
          "number": 1426,
          "created_at": "2026-05-20T19:35:57Z",
          "last_comment_at": "2026-05-21T00:25:41Z",
          "last_comment_author": "vMohammad24"
        },
        {
          "number": 1468,
          "created_at": "2026-06-01T08:33:59Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1490,
          "created_at": "2026-06-07T19:10:40Z",
          "last_comment_at": "2026-07-13T14:20:23Z",
          "last_comment_author": "arturict"
        },
        {
          "number": 1516,
          "created_at": "2026-06-14T11:47:51Z",
          "last_comment_at": "2026-07-13T14:20:23Z",
          "last_comment_author": "arturict"
        },
        {
          "number": 1551,
          "created_at": "2026-06-24T09:54:58Z",
          "last_comment_at": "2026-07-13T14:19:29Z",
          "last_comment_author": "arturict"
        },
        {
          "number": 1607,
          "created_at": "2026-07-05T10:07:41Z",
          "last_comment_at": "2026-07-13T14:19:29Z",
          "last_comment_author": "arturict"
        }
      ],
      "last_merged_pr_at": "2026-07-23T22:22:38Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": [
        {
          "number": 12,
          "created_at": "2025-08-14T22:17:12Z",
          "last_comment_at": "2025-08-14T23:29:09Z",
          "last_comment_author": "aurelleb"
        },
        {
          "number": 72,
          "created_at": "2025-08-17T16:53:11Z",
          "last_comment_at": "2025-11-12T10:22:17Z",
          "last_comment_author": "aurelleb"
        },
        {
          "number": 75,
          "created_at": "2025-08-17T18:53:28Z",
          "last_comment_at": "2026-07-15T18:54:58Z",
          "last_comment_author": "aurelleb"
        },
        {
          "number": 91,
          "created_at": "2025-08-20T17:39:35Z",
          "last_comment_at": "2026-06-23T12:40:13Z",
          "last_comment_author": "porridgewithraisins"
        },
        {
          "number": 105,
          "created_at": "2025-08-22T11:37:56Z",
          "last_comment_at": "2025-11-12T06:29:36Z",
          "last_comment_author": "rithvikvibhu"
        },
        {
          "number": 117,
          "created_at": "2025-08-23T05:22:15Z",
          "last_comment_at": "2025-08-24T06:57:35Z",
          "last_comment_author": "daxisunder"
        },
        {
          "number": 167,
          "created_at": "2025-08-28T22:46:48Z",
          "last_comment_at": "2025-10-31T20:02:23Z",
          "last_comment_author": "cloudglides"
        },
        {
          "number": 175,
          "created_at": "2025-08-30T06:04:10Z",
          "last_comment_at": "2025-10-04T00:32:31Z",
          "last_comment_author": "aurelleb"
        },
        {
          "number": 183,
          "created_at": "2025-08-30T20:50:26Z",
          "last_comment_at": "2025-09-03T18:22:11Z",
          "last_comment_author": "soymadip"
        },
        {
          "number": 208,
          "created_at": "2025-09-03T15:02:36Z",
          "last_comment_at": "2025-10-07T09:20:19Z",
          "last_comment_author": "officialnochill"
        },
        {
          "number": 209,
          "created_at": "2025-09-03T15:05:53Z",
          "last_comment_at": "2026-01-15T17:23:28Z",
          "last_comment_author": "EL-File4138"
        },
        {
          "number": 246,
          "created_at": "2025-09-08T15:38:33Z",
          "last_comment_at": "2025-09-14T09:56:53Z",
          "last_comment_author": "quadratech188"
        },
        {
          "number": 248,
          "created_at": "2025-09-08T18:52:14Z",
          "last_comment_at": "2025-09-09T10:33:48Z",
          "last_comment_author": "maggster165"
        },
        {
          "number": 255,
          "created_at": "2025-09-09T11:45:40Z",
          "last_comment_at": "2026-04-27T02:56:47Z",
          "last_comment_author": "aroman"
        },
        {
          "number": 268,
          "created_at": "2025-09-10T14:11:00Z",
          "last_comment_at": "2026-06-09T18:12:49Z",
          "last_comment_author": "cslamar"
        },
        {
          "number": 269,
          "created_at": "2025-09-10T14:16:26Z",
          "last_comment_at": "2026-03-17T12:52:00Z",
          "last_comment_author": "aurelleb"
        },
        {
          "number": 278,
          "created_at": "2025-09-11T15:50:07Z",
          "last_comment_at": "2025-10-08T18:17:06Z",
          "last_comment_author": "dagimg-dot"
        },
        {
          "number": 279,
          "created_at": "2025-09-11T15:50:31Z",
          "last_comment_at": "2025-09-21T19:31:38Z",
          "last_comment_author": "Damnjelly"
        },
        {
          "number": 282,
          "created_at": "2025-09-12T10:36:42Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 288,
          "created_at": "2025-09-13T13:59:00Z",
          "last_comment_at": "2025-09-13T14:00:53Z",
          "last_comment_author": "aurelleb"
        }
      ]
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/vicinaehq/vicinae",
    "host": "github.com",
    "name": "vicinae",
    "owner": "vicinaehq"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 69,
      "inputs": {
        "security": 36,
        "vitality": 96,
        "community": 79,
        "governance": 53,
        "engineering": 75
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "excellent",
        "name": "Vitality",
        "value": 96,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "excellent",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "commits_last_year": 1818,
              "human_commit_share": 1,
              "days_since_last_push": 0,
              "active_weeks_last_year": 52
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 0 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "52/52 weeks with commits",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 52
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "1818 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 1818
                    }
                  }
                ],
                "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": null,
            "notes": [],
            "value": 90,
            "inputs": {
              "releases_count": 100,
              "latest_release_tag": "v0.23.2",
              "releases_from_tags": false,
              "days_since_latest_release": 5,
              "mean_days_between_releases": 5.2
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "100 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 100
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 5 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 5
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~5.2 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 5.2
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "Project has not signed or included provenance with any releases.",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "maintained",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": null,
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": 0,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "last human commit 0 days ago",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_maintained",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "good",
        "name": "Community & Adoption",
        "value": 79,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "excellent",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 86,
            "inputs": {
              "forks": 249,
              "stars": 8563,
              "watchers": 13,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "8,563 stars",
                "points": 60,
                "status": "met",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 8563
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "249 forks",
                "points": 20,
                "status": "partial",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 249
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "13 watchers",
                "points": 6,
                "status": "partial",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 13
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "good",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 70,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": true,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (GPL-3.0)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "GPL-3.0"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 18,
                "status": "met",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 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
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "moderate",
        "name": "Sustainability & Governance",
        "value": 53,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "at_risk",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 36,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 100,
              "top_contributor_share": 0.849
            },
            "components": [
              {
                "key": "bus_factor",
                "name": "Bus factor",
                "detail": "1 contributor(s) cover half of all commits",
                "points": 9,
                "status": "partial",
                "details": [
                  {
                    "code": "bus_factor",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 54
              },
              {
                "key": "commit_distribution",
                "name": "Commit distribution",
                "detail": "top contributor authored 85% of commits",
                "points": 3.4,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 85
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "100 contributors",
                "points": 13.5,
                "status": "met",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 100
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 20 contributing companies or organizations",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "good",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 72,
            "inputs": {
              "merged_prs": 861,
              "open_issues": 212,
              "closed_issues": 489,
              "issue_closed_ratio": 0.698,
              "closed_unmerged_prs": 45
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "70% of issues closed",
                "points": 32.6,
                "status": "partial",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 70
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "861/906 decided PRs merged",
                "points": 36.4,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 861,
                      "decided": 906
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 7/30 approved changesets -- score normalized to 2",
                "points": 3,
                "status": "partial",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "moderate",
            "name": "Ownership & stewardship",
            "note": null,
            "notes": [],
            "value": 53,
            "inputs": {
              "followers": 88,
              "owner_type": "Organization",
              "is_verified": null,
              "owner_login": "vicinaehq",
              "public_repos": 9,
              "account_age_days": 360
            },
            "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": "88 followers of vicinaehq",
                "points": 14,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 88,
                      "login": "vicinaehq"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "9 public repos, account ~0 yr old",
                "points": 9.3,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 9
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 0
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "good",
        "name": "Engineering Quality",
        "value": 75,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "good",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 82,
            "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": "13 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 13
                    }
                  }
                ],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 24,
                "status": "met",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": "biome.json",
                "points": 16,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "biome.json"
                    }
                  }
                ],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "25 out of 26 merged PRs checked by a CI test -- score normalized to 9",
                "points": 18,
                "status": "partial",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "moderate",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 65,
            "inputs": {
              "topics": [
                "linux",
                "poweruser",
                "productivity",
                "app-launcher",
                "nodejs",
                "qt",
                "react",
                "raycast",
                "cpp23",
                "macos"
              ],
              "has_wiki": false,
              "homepage": "https://vicinae.com",
              "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://vicinae.com",
                "points": 15,
                "status": "met",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": "10 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 10
                    }
                  }
                ],
                "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": 36,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Packaging. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "packaging"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 36,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 17,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 1,
              "scorecard_aggregate": 3.6
            },
            "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": "25 out of 26 merged PRs checked by a CI test -- score normalized to 9",
                "points": 2.2,
                "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 7/30 approved changesets -- score normalized to 2",
                "points": 1.5,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 20 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": "no update tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow not detected",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool is not run on all commits -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "Project has not signed or included provenance with any releases.",
                "points": 0,
                "status": "missed",
                "details": [],
                "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": "7 existing vulnerabilities detected",
                "points": 2.2,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "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": 7
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "no confirmed policy-scope location match",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "jurisdiction_no_match",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "good",
        "name": "AI Readiness",
        "value": 82,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "excellent",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 85,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 1,
              "agent_instruction_files": [
                "AGENTS.md",
                "CLAUDE.md"
              ],
              "agent_instruction_max_bytes": 6267
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "AGENTS.md, CLAUDE.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "AGENTS.md, CLAUDE.md"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "100 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 100,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "good",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 72,
            "inputs": {
              "has_nix": true,
              "has_tests": true,
              "lockfiles": [
                "package-lock.json"
              ],
              "has_dockerfile": true,
              "typed_language": true,
              "bootstrap_files": [
                "Makefile",
                "src/browser-extension/Makefile",
                "src/lib/figura/Makefile",
                "src/lib/glyph/Makefile",
                "src/lib/script-command/Makefile",
                "src/lib/vicinae-ipc/Makefile",
                "src/lib/xdgpp/Makefile",
                "src/server/Makefile",
                "src/snippet/Makefile"
              ],
              "has_devcontainer": false,
              "has_linter_config": true,
              "typecheck_configs": [
                "extra/extension-boilerplate/tsconfig.json",
                "src/typescript/api/tsconfig.json",
                "src/typescript/extension-manager/tsconfig.json",
                "src/typescript/raycast-api-compat/tsconfig.json"
              ],
              "agent_commit_share": 0,
              "toolchain_manifests": [],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "Makefile, src/browser-extension/Makefile, src/lib/figura/Makefile, src/lib/glyph/Makefile, src/lib/script-command/Makefile, src/lib/vicinae-ipc/Makefile, src/lib/xdgpp/Makefile, src/server/Makefile, src/snippet/Makefile",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Makefile, src/browser-extension/Makefile, src/lib/figura/Makefile, src/lib/glyph/Makefile, src/lib/script-command/Makefile, src/lib/vicinae-ipc/Makefile, src/lib/xdgpp/Makefile, src/server/Makefile, src/snippet/Makefile"
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": "biome.json",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "biome.json"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "extra/extension-boilerplate/tsconfig.json, src/typescript/api/tsconfig.json, src/typescript/extension-manager/tsconfig.json, src/typescript/raycast-api-compat/tsconfig.json",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "extra/extension-boilerplate/tsconfig.json, src/typescript/api/tsconfig.json, src/typescript/extension-manager/tsconfig.json, src/typescript/raycast-api-compat/tsconfig.json"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "Dockerfile, Nix, lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Dockerfile, Nix, 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 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "primary_language": "C++",
              "largest_source_bytes": 2496074,
              "source_files_sampled": 1061,
              "oversized_source_files": 1
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "C++ (statically typed)",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "C++"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "1/1061 source files over 60KB",
                "points": 54.9,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 1061,
                      "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": [
    "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token",
    "npm package 'scripts' points at a different repository (https://github.com/jaredhanson/node-scripts); excluded from ecosystem scoring",
    "npm package 'template' points at a different repository (https://github.com/jonschlinkert/template); excluded from ecosystem scoring",
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-23T23:25:17.337326Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/v/vicinaehq/vicinae.svg",
  "full_name": "vicinaehq/vicinae",
  "license_state": "standard",
  "license_spdx": "GPL-3.0"
}

评分是信号,而非担保。 评分反映的是 GitHub 上公开可见的实践——不是代码审计,也不是安全保证。

缺失数据将被剔除并重新归一化权重,绝不按零分计。方法论已版本化并公开:指标 v1.13.0、模式 v0.27.0—— 完整方法论 · 指标知识库.

单项结果在整体记录中的位置: 汇总统计npm.