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

sinameraji / kimiflare

kimi k2.7 terminal based coding agent & harness running on your own Cloudflare account.

TypeScriptMIT★ 158 星标⑂ 18 复刻始于 2026年4月在 GitHub 上查看 ↗

sinameraji/kimiflare 的健康指数为 100 分中的 62 分,处于「中等」区间。 其得分最高的类别是Vitality(84/100),最低的是Security(37/100)。 最近一次更新在 4 天前。 近期的大部分工作由 1 位贡献者完成。

62
总分 / 100
中等

软件健康指数

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

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

评分画像

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

所有权

Sina Meraji个人账户
88 关注者30 个公开仓库始于 2014年1月

该仓库由个人账户拥有。相较于组织支持的项目,单一所有者项目的延续性风险更高。

软件包生态系统

按类别列示的指标

活力

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

84良好 · 占总体的 22%
评分方式
36/36推送新近度 — 最近一次推送于 4 天前
9.7/36提交节奏 — 52 周中有 14 周有提交
18/18提交量 — 最近一年 703 次提交
10/10OpenSSF Scorecard:Maintained — 30 commit(s) and 30 issue activity found in the last 90 days -- score normalized to 10
所用输入
commits_last_year703
human_commit_share0.69
days_since_last_push4
active_weeks_last_year14

发布纪律

100优秀
评分方式
27/27有发布版本 — 已发布 100 个发布版本
36/36发布时效 — 最近一次发布版本于 4 天前
27/27发布节奏 — 约每 1.5 天发布一次
0/10OpenSSF Scorecard:Signed-Releases — 无数据
所用输入
releases_count100
latest_release_tagv0.97.0
releases_from_tags
days_since_latest_release4
mean_days_between_releases1.5
已排除计分(无数据或不适用):OpenSSF Scorecard:Signed-Releases。 其余权重已重新归一化。

社区与采用

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

50中等 · 占总体的 18%

流行度与采用

46存在风险
评分方式
35.6/60星标 — 158 个星标
10.3/25复刻 — 18 个复刻
0/15关注者 — 1 位关注者
所用输入
forks18
stars158
watchers1
growth_stateorganic
growth_factor_pct100

社区健康

50中等
评分方式
22.5/22.5README
22.5/22.5许可证 — 可识别的许可证(MIT)
0/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
评分方式
46.8/80月度下载量 — npm 合计每月 3,221 次下载
0/20注册表被依赖数 — 该生态系统不报告此项
所用输入
packageskimiflare
dependents
ecosystemsnpm
total_downloads
monthly_downloads3,221
已排除计分(无数据或不适用):注册表被依赖数。 其余权重已重新归一化。

可持续性与治理

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

61中等 · 占总体的 24%
评分方式
9/54巴士系数 — 1 位贡献者贡献了半数提交
0.3/22.5提交分布 — 头号贡献者编写了 99% 的提交
6.8/13.5贡献者广度 — 5 位贡献者
3/10OpenSSF Scorecard:Contributors — project has 1 contributing companies or organizations -- score normalized to 3
所用输入
bus_factor1
contributors_sampled5
top_contributor_share0.988
评分方式
46.8/46.8议题解决 — 100% 的议题已关闭
35.7/38.3PR 接受 — 已裁定的 PR 中 494/529 已合并
0/15OpenSSF Scorecard:Code-Review — Found 0/18 approved changesets -- score normalized to 0
所用输入
merged_prs494
open_issues0
closed_issues98
issue_closed_ratio1
closed_unmerged_prs35
评分方式
10/30所有权背书 — 个人(用户)账户
0/20已验证域名 — 不适用于个人账户
14/25所有者影响力 — sinameraji 有 88 位关注者
22.9/25既往记录 — 30 个公开仓库,账户约 12 年
所用输入
followers88
owner_typeUser
is_verified
owner_loginsinameraji
public_repos30
account_age_days4,574
已排除计分(无数据或不适用):已验证域名。 其余权重已重新归一化。
评分方式
25/25已发布且可解析 — npm 上有 1 个软件包
35/35发布时效 — 最近一次发布于 4 天前
20/20版本历史 — 151 个已发布版本
20/20未被弃用 — 活跃,未被弃用或撤回
所用输入
packageskimiflare
ecosystemsnpm
any_deprecated
min_days_since_publish4

工程质量

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

69中等 · 占总体的 20%

工程实践

48存在风险
评分方式
24/24CI 工作流 — 3 个工作流
24/24存在测试
0/16Linter 配置
0/9.6Pre-commit 钩子
0/6.4.editorconfig
0/20OpenSSF Scorecard:CI-Tests — 0 out of 30 merged PRs checked by a CI test -- score normalized to 0
所用输入
has_ci
has_tests
has_editorconfig
has_linter_config
has_precommit_config

文档

100优秀
评分方式
30/30README
25/25文档目录
15/15文档 / 主页站点 — https://kimiflare.com
10/10仓库描述
10/10主题标签 — 10 个主题标签
10/10Wiki
所用输入
topicsagents, ai, vibe-coding, kimi-k26, harness, aigateway, cloudflare, moonshot, workers-ai, kimi-k27
has_wiki
homepagehttps://kimiflare.com
has_readme
has_docs_dir
has_description

安全

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

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

安全态势

37存在风险
评分方式
7.5/7.5Binary-Artifacts — no binaries found in the repo
2.2/7.5Branch-Protection — branch protection is not maximal on development and all release branches
0/2.5CI-Tests — 0 out of 30 merged PRs checked by a CI test -- score normalized to 0
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 0/18 approved changesets -- score normalized to 0
0.8/2.5Contributors — project has 1 contributing companies or organizations -- score normalized to 3
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 30 issue activity found in the last 90 days -- score normalized to 10
5/5Packaging — packaging workflow detected
1/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 2
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 — 无数据
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
0/7.5Vulnerabilities — 36 existing vulnerabilities detected
所用输入
sourceopenssf_scorecard
checks_evaluated17
scorecard_versionv5.5.0
checks_inconclusive1
scorecard_aggregate3.7
已排除计分(无数据或不适用):signed_releases。 其余权重已重新归一化。

AI 就绪度

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

76良好 · 占总体的 0%
评分方式
45/45代理指令 — AGENTS.md
15/15机器可读文档(llms.txt) — 存在 llms.txt
40/40可读的提交历史 — 69 次人类提交中有 69 次说明了意图(结构化标题或解释性正文)
所用输入
has_llms_txt
legible_history_share1
agent_instruction_filesAGENTS.md
agent_instruction_max_bytes827
评分方式
0/18一条命令的引导启动
22/22自动化测试
0/11Lint / 格式化配置
11/11静态类型检查 — acp/tsconfig.json, remote/agent/tsconfig.json, tsconfig.json
10/10可复现环境 — Dockerfile, lockfile
10/10已体现的代理实践 — 最近 100 次提交中有 12 次由代理编写或署名代理
0/8自动化维护 — 未观察到自动依赖更新
2/10OpenSSF Scorecard:Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 2
所用输入
has_nix
has_tests
lockfilespackage-lock.json
has_dockerfile
typed_language
bootstrap_files
has_devcontainer
has_linter_config
typecheck_configsacp/tsconfig.json, remote/agent/tsconfig.json, tsconfig.json
agent_commit_share0.12
toolchain_manifests
dependency_bot_commit_share0
评分方式
45/45可类型检查的代码 — TypeScript(静态类型)
54.1/55可控的文件大小 — 采样的 319 个源文件中有 5 个超过 60KB
所用输入
primary_languageTypeScript
largest_source_bytes165,137
source_files_sampled319
oversized_source_files5
评分方式
0/40API 模式(OpenAPI/GraphQL/proto)
20/20MCP 服务器
40/40可运行示例 — demos
所用输入
example_dirsdemos
has_mcp_signal
api_schema_files

关键数据

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

数据采集警告

  • Could not fetch npm package 'kimiflare-acp' from its registry
  • GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository
  • deps.dev does not index npm:kimiflare@0.97.0; advisories assessed against the repository dependency graph instead

更多细节

Star 与 Fork 历史 158 ★ / 18 ⇿
158Star
18Fork
87发布

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

0408012016015818352026-042026-052026-06
主版本 0次版本 60修订 27
OpenSSF Scorecard 3.7 / 10
3.7综合

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

10Binary-Artifactsno binaries found in the repo
3Branch-Protectionbranch protection is not maximal on development and all release branches
0CI-Tests0 out of 30 merged PRs checked by a CI test -- score normalized to 0
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/18 approved changesets -- score normalized to 0
3Contributorsproject has 1 contributing companies or organizations -- score normalized to 3
10Dangerous-Workflowno dangerous workflow patterns detected
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
10Maintained30 commit(s) and 30 issue activity found in the last 90 days -- score normalized to 10
10Packagingpackaging workflow detected
2Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 2
0SASTSAST tool is not run on all commits -- score normalized to 0
0Security-Policysecurity policy file not detected
不适用Signed-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
0Vulnerabilities36 existing vulnerabilities detected
直接依赖 22
注册表软件包版本约束清单文件
npm@agentclientprotocol/sdk^0.21.0acp/package.json
npm@modelcontextprotocol/sdk^1.29.0acp/package.json
npmbetter-sqlite3^12.9.0acp/package.json
npmcommander^12.1.0acp/package.json
npmdiff^7.0.0acp/package.json
npmfast-glob^3.3.2acp/package.json
npmturndown^7.2.0acp/package.json
npmqrcode^1.5.4feedback-worker/package.json
npm@modelcontextprotocol/sdk^1.29.0package.json
npm@resvg/resvg-js^2.6.2package.json
npmbetter-sqlite3^12.9.0package.json
npmcommander^12.1.0package.json
npmink^7.0.1package.json
npmink-select-input^6.2.0package.json
npmink-spinner^5.0.0package.json
npmink-text-input^6.0.0package.json
npmminimatch^10.2.5package.json
npmqrcode^1.5.4package.json
npmreact^19.2.0package.json
npmturndown^7.2.0package.json
npmtypescript^5.7.2package.json
npmvscode-languageserver-protocol^3.17.5package.json
全部依赖 未采集

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

原始 JSON 报告 机器可读
{
  "data": {
    "repo": {
      "topics": [
        "agents",
        "ai",
        "vibe-coding",
        "kimi-k26",
        "harness",
        "aigateway",
        "cloudflare",
        "moonshot",
        "workers-ai",
        "kimi-k27"
      ],
      "is_fork": false,
      "size_kb": 13595,
      "has_wiki": true,
      "homepage": "https://kimiflare.com",
      "languages": {
        "Dockerfile": 414,
        "JavaScript": 17016,
        "TypeScript": 2327234
      },
      "pushed_at": "2026-07-17T10:56:53Z",
      "created_at": "2026-04-21T12:26:17Z",
      "owner_type": "User",
      "updated_at": "2026-07-17T09:05:46Z",
      "description": "kimi k2.7 terminal based coding agent & harness running on your own Cloudflare account. ",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "main",
      "license_spdx_raw": "MIT",
      "primary_language": "TypeScript",
      "significant_languages": [
        "TypeScript"
      ]
    },
    "owner": {
      "blog": null,
      "name": "Sina Meraji",
      "type": "User",
      "login": "sinameraji",
      "company": null,
      "location": "Tokyo",
      "followers": 88,
      "avatar_url": "https://avatars.githubusercontent.com/u/6380359?v=4",
      "created_at": "2014-01-12T04:46:09Z",
      "is_verified": null,
      "public_repos": 30,
      "account_age_days": 4574
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v0.97.0",
          "kind": "minor",
          "published_at": "2026-07-17T09:05:26Z"
        },
        {
          "tag": "v0.96.1",
          "kind": "patch",
          "published_at": "2026-07-11T09:37:39Z"
        },
        {
          "tag": "v0.96.0",
          "kind": "minor",
          "published_at": "2026-07-11T08:17:32Z"
        },
        {
          "tag": "v0.95.0",
          "kind": "minor",
          "published_at": "2026-07-09T05:24:34Z"
        },
        {
          "tag": "v0.94.0",
          "kind": "minor",
          "published_at": "2026-07-09T04:37:50Z"
        },
        {
          "tag": "v0.93.1",
          "kind": "patch",
          "published_at": "2026-07-09T03:34:05Z"
        },
        {
          "tag": "v0.93.0",
          "kind": "minor",
          "published_at": "2026-07-09T00:52:19Z"
        },
        {
          "tag": "v0.92.0",
          "kind": "minor",
          "published_at": "2026-07-08T22:13:23Z"
        },
        {
          "tag": "v0.91.0",
          "kind": "minor",
          "published_at": "2026-07-08T20:35:48Z"
        },
        {
          "tag": "v0.90.1",
          "kind": "patch",
          "published_at": "2026-07-04T04:06:37Z"
        },
        {
          "tag": "v0.90.0",
          "kind": "minor",
          "published_at": "2026-07-01T05:20:38Z"
        },
        {
          "tag": "v0.89.1",
          "kind": "patch",
          "published_at": "2026-06-30T06:48:05Z"
        },
        {
          "tag": "v0.89.0",
          "kind": "minor",
          "published_at": "2026-06-30T05:37:24Z"
        },
        {
          "tag": "v0.88.4",
          "kind": "patch",
          "published_at": "2026-06-20T10:20:26Z"
        },
        {
          "tag": "v0.88.3",
          "kind": "patch",
          "published_at": "2026-06-15T06:27:37Z"
        },
        {
          "tag": "v0.88.2",
          "kind": "patch",
          "published_at": "2026-06-15T05:35:48Z"
        },
        {
          "tag": "v0.88.1",
          "kind": "patch",
          "published_at": "2026-06-13T00:36:55Z"
        },
        {
          "tag": "v0.88.0",
          "kind": "minor",
          "published_at": "2026-06-13T00:19:07Z"
        },
        {
          "tag": "v0.87.0",
          "kind": "minor",
          "published_at": "2026-06-12T12:15:13Z"
        },
        {
          "tag": "v0.86.0",
          "kind": "minor",
          "published_at": "2026-06-12T04:43:15Z"
        },
        {
          "tag": "v0.85.0",
          "kind": "minor",
          "published_at": "2026-06-11T09:56:48Z"
        },
        {
          "tag": "v0.84.1",
          "kind": "patch",
          "published_at": "2026-06-11T08:14:54Z"
        },
        {
          "tag": "v0.84.0",
          "kind": "minor",
          "published_at": "2026-06-11T06:53:12Z"
        },
        {
          "tag": "v0.83.0",
          "kind": "minor",
          "published_at": "2026-06-08T13:36:04Z"
        },
        {
          "tag": "v0.82.1",
          "kind": "patch",
          "published_at": "2026-06-04T10:31:11Z"
        },
        {
          "tag": "v0.82.0",
          "kind": "minor",
          "published_at": "2026-06-03T16:53:44Z"
        },
        {
          "tag": "v0.81.0",
          "kind": "minor",
          "published_at": "2026-06-03T06:01:30Z"
        },
        {
          "tag": "v0.80.0",
          "kind": "minor",
          "published_at": "2026-06-03T02:48:04Z"
        },
        {
          "tag": "v0.79.0",
          "kind": "minor",
          "published_at": "2026-06-02T14:14:01Z"
        },
        {
          "tag": "v0.78.0",
          "kind": "minor",
          "published_at": "2026-06-02T13:21:03Z"
        },
        {
          "tag": "v0.77.0",
          "kind": "minor",
          "published_at": "2026-06-02T11:44:15Z"
        },
        {
          "tag": "v0.76.1",
          "kind": "patch",
          "published_at": "2026-05-27T00:24:06Z"
        },
        {
          "tag": "v0.76.0",
          "kind": "minor",
          "published_at": "2026-05-26T13:05:34Z"
        },
        {
          "tag": "v0.75.0",
          "kind": "minor",
          "published_at": "2026-05-24T01:31:54Z"
        },
        {
          "tag": "v0.74.1",
          "kind": "patch",
          "published_at": "2026-05-23T01:09:41Z"
        },
        {
          "tag": "v0.74.0",
          "kind": "minor",
          "published_at": "2026-05-21T23:31:49Z"
        },
        {
          "tag": "v0.73.2",
          "kind": "patch",
          "published_at": "2026-05-21T11:26:57Z"
        },
        {
          "tag": "v0.73.1",
          "kind": "patch",
          "published_at": "2026-05-18T14:24:31Z"
        },
        {
          "tag": "v0.73.0",
          "kind": "minor",
          "published_at": "2026-05-18T14:12:22Z"
        },
        {
          "tag": "v0.72.0",
          "kind": "minor",
          "published_at": "2026-05-17T06:00:18Z"
        },
        {
          "tag": "v0.71.0",
          "kind": "minor",
          "published_at": "2026-05-17T05:03:14Z"
        },
        {
          "tag": "v0.70.0",
          "kind": "minor",
          "published_at": "2026-05-16T16:11:39Z"
        },
        {
          "tag": "v0.69.0",
          "kind": "minor",
          "published_at": "2026-05-16T15:26:23Z"
        },
        {
          "tag": "v0.68.2",
          "kind": "patch",
          "published_at": "2026-05-16T15:01:29Z"
        },
        {
          "tag": "v0.68.1",
          "kind": "patch",
          "published_at": "2026-05-16T14:44:05Z"
        },
        {
          "tag": "v0.68.0",
          "kind": "minor",
          "published_at": "2026-05-16T14:06:57Z"
        },
        {
          "tag": "v0.67.0",
          "kind": "minor",
          "published_at": "2026-05-16T14:01:29Z"
        },
        {
          "tag": "v0.66.0",
          "kind": "minor",
          "published_at": "2026-05-16T13:43:08Z"
        },
        {
          "tag": "v0.65.0",
          "kind": "minor",
          "published_at": "2026-05-16T13:30:01Z"
        },
        {
          "tag": "v0.64.0",
          "kind": "minor",
          "published_at": "2026-05-16T12:46:56Z"
        },
        {
          "tag": "v0.63.0",
          "kind": "minor",
          "published_at": "2026-05-13T12:56:02Z"
        },
        {
          "tag": "v0.62.0",
          "kind": "minor",
          "published_at": "2026-05-13T05:21:42Z"
        },
        {
          "tag": "v0.61.0",
          "kind": "minor",
          "published_at": "2026-05-13T04:25:12Z"
        },
        {
          "tag": "v0.60.1",
          "kind": "patch",
          "published_at": "2026-05-13T01:50:22Z"
        },
        {
          "tag": "v0.60.0",
          "kind": "minor",
          "published_at": "2026-05-12T23:36:39Z"
        },
        {
          "tag": "v0.59.0",
          "kind": "minor",
          "published_at": "2026-05-12T14:32:23Z"
        },
        {
          "tag": "v0.58.0",
          "kind": "minor",
          "published_at": "2026-05-12T13:46:46Z"
        },
        {
          "tag": "v0.57.0",
          "kind": "minor",
          "published_at": "2026-05-11T07:27:11Z"
        },
        {
          "tag": "v0.56.0",
          "kind": "minor",
          "published_at": "2026-05-11T04:57:08Z"
        },
        {
          "tag": "v0.55.1",
          "kind": "patch",
          "published_at": "2026-05-11T04:36:24Z"
        },
        {
          "tag": "v0.55.0",
          "kind": "minor",
          "published_at": "2026-05-11T03:28:48Z"
        },
        {
          "tag": "v0.54.1",
          "kind": "patch",
          "published_at": "2026-05-11T03:19:35Z"
        },
        {
          "tag": "v0.54.0",
          "kind": "minor",
          "published_at": "2026-05-10T23:18:17Z"
        },
        {
          "tag": "v0.53.0",
          "kind": "minor",
          "published_at": "2026-05-10T12:42:13Z"
        },
        {
          "tag": "v0.52.0",
          "kind": "minor",
          "published_at": "2026-05-10T11:25:24Z"
        },
        {
          "tag": "v0.51.0",
          "kind": "minor",
          "published_at": "2026-05-10T04:47:06Z"
        },
        {
          "tag": "v0.50.1",
          "kind": "patch",
          "published_at": "2026-05-09T16:37:29Z"
        },
        {
          "tag": "v0.50.0",
          "kind": "minor",
          "published_at": "2026-05-09T13:47:52Z"
        },
        {
          "tag": "v0.49.0",
          "kind": "minor",
          "published_at": "2026-05-09T03:58:21Z"
        },
        {
          "tag": "v0.48.5",
          "kind": "patch",
          "published_at": "2026-05-09T00:33:42Z"
        },
        {
          "tag": "v0.48.4",
          "kind": "patch",
          "published_at": "2026-05-08T11:14:34Z"
        },
        {
          "tag": "v0.48.3",
          "kind": "patch",
          "published_at": "2026-05-08T10:08:31Z"
        },
        {
          "tag": "v0.48.2",
          "kind": "patch",
          "published_at": "2026-05-07T23:31:01Z"
        },
        {
          "tag": "v0.48.1",
          "kind": "patch",
          "published_at": "2026-05-07T16:43:26Z"
        },
        {
          "tag": "v0.48.0",
          "kind": "minor",
          "published_at": "2026-05-07T15:51:37Z"
        },
        {
          "tag": "v0.47.0",
          "kind": "minor",
          "published_at": "2026-05-07T14:18:50Z"
        },
        {
          "tag": "v0.46.0",
          "kind": "minor",
          "published_at": "2026-05-07T13:54:28Z"
        },
        {
          "tag": "v0.45.0",
          "kind": "minor",
          "published_at": "2026-05-07T13:10:01Z"
        },
        {
          "tag": "v0.44.0",
          "kind": "minor",
          "published_at": "2026-05-06T17:57:13Z"
        },
        {
          "tag": "v0.43.0",
          "kind": "minor",
          "published_at": "2026-05-06T16:32:59Z"
        },
        {
          "tag": "v0.42.0",
          "kind": "minor",
          "published_at": "2026-05-06T16:23:02Z"
        },
        {
          "tag": "v0.41.0",
          "kind": "minor",
          "published_at": "2026-05-06T16:09:04Z"
        },
        {
          "tag": "v0.40.0",
          "kind": "minor",
          "published_at": "2026-05-06T15:36:37Z"
        },
        {
          "tag": "v0.39.1",
          "kind": "patch",
          "published_at": "2026-05-06T14:27:15Z"
        },
        {
          "tag": "v0.39.0",
          "kind": "minor",
          "published_at": "2026-05-06T07:37:27Z"
        },
        {
          "tag": "v0.38.1",
          "kind": "patch",
          "published_at": "2026-05-06T04:21:44Z"
        },
        {
          "tag": "v0.38.0",
          "kind": "minor",
          "published_at": "2026-05-06T03:47:14Z"
        },
        {
          "tag": "v0.37.0",
          "kind": "minor",
          "published_at": "2026-05-05T18:20:20Z"
        },
        {
          "tag": "v0.36.2",
          "kind": "patch",
          "published_at": "2026-05-05T17:36:57Z"
        },
        {
          "tag": "v0.36.1",
          "kind": "patch",
          "published_at": "2026-05-05T17:08:20Z"
        },
        {
          "tag": "v0.36.0",
          "kind": "minor",
          "published_at": "2026-05-05T15:37:14Z"
        },
        {
          "tag": "v0.35.0",
          "kind": "minor",
          "published_at": "2026-05-05T13:49:22Z"
        },
        {
          "tag": "v0.34.1",
          "kind": "patch",
          "published_at": "2026-05-05T12:29:24Z"
        },
        {
          "tag": "v0.34.0",
          "kind": "minor",
          "published_at": "2026-05-05T11:03:12Z"
        },
        {
          "tag": "v0.33.0",
          "kind": "minor",
          "published_at": "2026-05-03T14:42:42Z"
        },
        {
          "tag": "v0.32.0",
          "kind": "minor",
          "published_at": "2026-05-03T09:15:37Z"
        },
        {
          "tag": "v0.31.0",
          "kind": "minor",
          "published_at": "2026-05-01T09:45:14Z"
        },
        {
          "tag": "v0.30.0",
          "kind": "minor",
          "published_at": "2026-05-01T07:46:46Z"
        },
        {
          "tag": "v0.29.1",
          "kind": "patch",
          "published_at": "2026-05-01T03:13:54Z"
        },
        {
          "tag": "v0.29.0",
          "kind": "minor",
          "published_at": "2026-04-30T13:41:15Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "f98cab61dbbd41c9655a68e673f934e3a76bd4ca",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release 0.97.0 (#628)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-17T09:05:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "757bc7d3565bb2b75fb9189f2ebad771764837d9",
          "body": "…r (#629)\n\n- Seed moonshotai/kimi-k3 in the model registry with 1M context,\n  vision/tools/reasoning/streaming, and placeholder pricing.\n- Add moonshotai as a first-class ModelProvider with dedicated BYOK key storage.\n- Make K3 the default cloud model and let cloud onboarding pick between\n  K3, K2.7\n[…]\nOK-only on AI Gateway today.\n- Update provider labels, key-entry hints, and missing-key guidance.\n- Add registry and client tests for Moonshot routing.\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "feat(models): add Moonshot Kimi K3 support as AI Gateway BYOK provide…",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-07-17T08:06:24Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "cc2a76fdcf83c4fba459ada817a39aabde833134",
          "body": "Replace the hand-coded HTML terminal simulation on the landing page with\nauthentic, reproducible VHS recordings. Adds .tape scripts for 5 key\nscenarios (onboarding, permission modal, cost tracking, plan mode,\nmulti-model) plus helper shell scripts, npm script, and docs.\n\n- New demos/*.tape files wit\n[…]\n- Updated docs/index.html to use onboarding.gif with noscript fallback\n- Updated README.md hero to use onboarding.gif\n- Added \"record-demos\" npm script\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "feat(demos): add VHS terminal recordings for marketing (#627)",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-07-12T05:40:54Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "373862df1ffbc405cc7f688c638e568cdbcb73cc",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release 0.96.1 (#626)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-11T09:37:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d6ec8c9d411b17e2c3c0afa9fa2df4d52d9fc112",
          "body": "Picking a plan option from present_plan_options immediately reset the\nsession (wiping sessionPlanRef and message history) while leaving the\nplan-complete picker armed. Clicking \"Execute this plan\" afterwards\nre-resolved the plan from the wiped state and failed with \"No plan\nfound to start fresh with\n[…]\nthe plan so execution actually begins. The plan text is bound\nto the picker when it is armed so later state mutations can't\ninvalidate the pick.\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(plan-mode): defer fresh start until execution mode is picked (#625)",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-07-11T09:06:39Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "6b6cc76ff3d2dea846d5b6145fb049ee840e3509",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release 0.96.0 (#624)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-11T08:17:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4a1b7edb032afccda9e1b1fea87be5cdb3e0274f",
          "body": "When cloudMode is enabled (via config or --cloud), use\n@cf/moonshotai/kimi-k2.7-code as the default model and surface\nKimi-K2.7 in user-facing copy (logo, --help, error hints).\nSelf-hosted/direct Workers AI mode keeps Kimi-K2.6 as the default.\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "feat(cloud): default to Kimi-K2.7 in cloud mode (#623)",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-07-11T08:16:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1fedc4cfe4c0a9c8f2a64b50c05c7056d0d76f00",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release 0.95.0 (#622)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-09T05:24:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4a62580f8dbc6e2c264e182a36198c9739b30960",
          "body": "On KimiFlare Cloud the model is managed server-side (worker pins @cf/moonshotai/kimi-k2.7-code), so the model is now fully hidden from cloud users:\n- status bar no longer shows the model id (keeps the CLOUD badge)\n- /model is removed from the slash picker and, if typed, replies that model selection isn't available on Cloud\n- onboarding confirm screen omits the Model line in cloud mode\nSelf-hosted behaviour is unchanged.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(cloud): hide model name and picker in cloud mode (#621)",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-07-09T05:23:14Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "da231c5eca3d8d3cddc3c0bd07fb71399284d2ab",
          "body": "On the Cloud device-auth screen, Enter now opens the sign-in URL in the default browser instead of making the user copy/paste it. Updates the step-1 copy to say so.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(onboarding): press Enter to open the Cloud sign-in URL (#620)",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-07-09T05:19:24Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "4132a7dbac64ea73a2027a15feda3782ebcaa742",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release 0.94.0 (#619)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-09T04:37:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "59b4fab39763bf17e8d4da4c7940548e414f400b",
          "body": "Adds two cloud-mode slash commands:\n- /topup buys a one-time token pack (+50M) via Stripe payment-mode checkout — no second subscription — then polls usage and refreshes the budget in place when it lands.\n- /manage prints current token usage and opens the Stripe Customer Portal (card, invoices, canc\n[…]\nugh SlashContext (topup / manageMembership). billing.ts gains createTopupSession; createCustomerPortalSession was already present.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(cloud): /topup and /manage membership commands (#618)",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-07-09T04:31:56Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "5c89c921e1ee8dd09d63c26f8edfb1d7472d3807",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release 0.93.1 (#617)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-09T03:33:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a51d7e9182a16132fd883174c7a09f5258d350f8",
          "body": "…grade UX (#616)\n\n* Revert \"feat(ui): add Try again button to retryable API errors (#611)\"\n\nThis reverts commit f85a9d1aa360e6be98d20167bd6f8709ca17bdff.\n\n* fix(ui): optional expiresAt + simplify cloud quota message\n\nPR #614 removed expiresAt from the cloud_quota_exhausted producer but the event typ\n[…]\nstatus on cloud startup so relaunch reflects Pro.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: slash-command crash + restore self-hosted onboarding + Cloud /up…",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-07-09T02:44:35Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "4f4a243b0cbe0eac828a326ccde2dae6f882d008",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release 0.93.0 (#615)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-09T00:52:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f1f97aac1401701291702f195f498f970749775a",
          "body": "…ken thresholds (#614)\n\nImplements Option C for session memory management:\n\n- Adds  (default 500k) and\n  (default 2M) to config.\n- After each turn, if estimated in-memory tokens exceed the compact threshold,\n  aggressively compacts history (keepLastTurns: 1) via artifacts or LLM summary.\n- If compac\n[…]\nturn-count auto-fresh.\n- Prevents the terminal from becoming unusable during very long sessions with\n  massive accumulated context (e.g. 8–12M tokens).\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "feat(session): hybrid auto-compact + auto-fresh based on in-memory to…",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-07-09T00:14:28Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "44e8cbf522167ac7281ec7d69a995dd8ae47f677",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release 0.92.0 (#608)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-08T22:13:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cd150991fdee378617c5c0ca70f2f441bb21a708",
          "body": "- Remove duplicate /plan, /auto, /edit entries (unified /mode stays)\n- Remove /reasoning entry\n- Comment out /ui entry (Ink is the only engine; handler remains)\n- Update header comment to clarify picker vs handler relationship\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "feat(commands): clean up slash command picker (#612)",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-07-08T22:12:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f85a9d1aa360e6be98d20167bd6f8709ca17bdff",
          "body": "- ApiErrorMessage now renders a SelectInput (Try again / Dismiss) for\n  retryable errors (429, code 3040, or >=500) when onRetry is provided.\n- ChatView tracks the latest retryable api_error and passes onRetry only\n  to that event, preventing stale retries.\n- App stores the last user message in pend\n[…]\nns while still re-classifying intent\n  and starting the supervisor turn normally.\n- onDone clears pendingRetryRef so successful retries clean up state.\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "feat(ui): add Try again button to retryable API errors (#611)",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-07-08T22:11:31Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a77e5c6a4521934e7b2fa3d5808c54ef97452bd1",
          "body": "Replaces the previous default @cf/moonshotai/kimi-k2.7-code with\n@cf/moonshotai/kimi-k2.6 across config, CLI strings, logo, and all\nhardcoded fallbacks.\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "feat: make @cf/moonshotai/kimi-k2.6 the default model (#610)",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-07-08T22:10:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1026b7ef033a2b7e1a42eb5debedada048f00f4c",
          "body": "Replace the static spinner with a weighted progress indicator that\nadvances through known resume stages and streams token-by-token\nduring the LLM summary generation.\n\n- Add onProgress callback to generateContinuationSummary\n- Track resumeProgress / resumeStage in useSessionManager\n- Create ResumeProgress Ink component with block-char bar\n- Wire into app.tsx resume screen\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "feat(ui): add moving progress bar during session resume (#607)",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-07-08T22:10:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e54ed48c4728ea849c3e4c9754b4fb9cf516259e",
          "body": "Removes multi-agent-experimental from the mode list so only\nplan, edit, and auto appear in the mode picker and Shift-Tab cycle.\n\n- Remove multi-agent from MODES array and nextMode cycle\n- Remove multiAgentEnabled prop from ModePicker/ModalHost\n- Simplify Shift-Tab handler in app.tsx\n- Update /mode command hints and slash command handling\n- Clean up status bar multi-agent display fallbacks\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "feat: remove multi-agent-experimental from mode cycle (#609)",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-07-08T22:00:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3a5af2b1464d54e9dab15eed92d8bde758b2e71f",
          "body": "* feat(tools): layered PR-preferred workflow for git pushes\n\n- Add preferPullRequests and allowDirectPush config options\n- Block git push to default branch unless allowDirectPush is enabled\n- Add github_create_pr tool for opening pull requests\n- Inject PR workflow guidance into system prompt\n\nCo-aut\n[…]\n, append a gentle hint suggesting the user\nenable them to prevent accidental direct pushes.\n\nCo-authored-by: kimiflare <kimiflare@proton.me>\n\n---------\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "feat(tools): layered PR-preferred workflow for git pushes (#603)",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-07-08T21:56:12Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5f166d5d6579044cd85502e4083c4618ed3e023f",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release 0.91.0 (#606)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-08T20:35:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "634406deac5347baff1cfb49405a9053b1327b7f",
          "body": "…586)\n\n* chore(main): release 0.88.1 (#585)\n\nCo-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>\nCo-authored-by: kimiflare <kimiflare@proton.me>\n\n* feat(cloud): restore KimiFlare Cloud adapter with K2.7 free tokens\n\nRestores the KimiFlare Cloud managed-service\n[…]\n\nCo-authored-by: kimiflare <kimiflare@proton.me>\n\n---------\n\nCo-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "feat(cloud): restore KimiFlare Cloud adapter with K2.7 free tokens (#…",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-07-08T20:32:15Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7b6efbf5b359f879a1bfa664bee8f80f461e5fb7",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release 0.90.1 (#605)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-04T04:06:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "87bda6b636a64096ef21cc975e69621a4d2f9a8f",
          "body": "…ummary (#604)\n\nWhen a user selects a session to resume, show a spinner with\n'Pulling context…' while the session loads and the continuation\nsummary is generated. The chat view with the summary is then shown\nautomatically, so users no longer need to send a message first.\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "fix(ui): show loading state while resuming session and auto-display s…",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-07-04T03:29:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a6751a3d32438a26e8e58954f0a8a8a7f2d6dbb8",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release 0.90.0 (#602)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-01T05:20:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0c56f8e97e839fa1e334f9ecab9d8ae8db099e82",
          "body": "When a user resumes a session via /resume, display a two-tier context\nsummary so they don't have to ask 'where were we?':\n\n1. Instant local summary (zero latency) from session state — task,\n   modified files, and next actions.\n2. Async LLM-generated continuation summary (reusing the existing\n   gene\n[…]\ncted buildLocalResumeSummary as a pure testable function with 6\nco-located test cases. Graceful degradation if the LLM call fails or\nconfig is missing.\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "feat(ui): show session context summary on /resume (#601)",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-07-01T05:14:37Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "0158e703763003852fe209b21434ec132e713d27",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release 0.89.1 (#599)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-06-30T06:47:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ad1bb84391254d7744dacfa4fddea938c1facb6a",
          "body": "… cache hits (#600)\n\nCloudflare AI Gateway includes cf-aig-metadata in the HTTP cache key.\nSending tier (intent classification) and skl (skill count) on every turn\nmeant every request had a unique cache key, collapsing prefix-cache hit\nrates from ~93% to <50% and inflating costs 10x.\n\nThese values are still logged to cost-debug.jsonl for local analysis;\nthey just no longer poison the Gateway cache key.\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "fix(agent): remove per-turn tier/skl from gateway metadata to restore…",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-30T06:47:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cde20acc6d8a346501a12eec719cdd74db1d0b60",
          "body": "…598)\n\nInk v7 incremental rendering doesn't properly clear old wrapped lines\nwhen a bare <Text> component lets the terminal handle wrapping naturally.\n\n- Add optional width prop to CustomTextInput\n- When width is provided, wrap <Text> in <Box width={...}> with wrap=\"wrap\"\n  so Ink's layout engine ma\n[…]\n and knows the true line count\n- Pass terminal width minus prompt offset from app.tsx\n\nFixes Ink bug #909 with incremental rendering and text wrapping.\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "fix(ui): prevent ghost text when input wraps across multiple lines (#…",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-30T06:39:00Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "236454b2820fb2f4eeba56d356d85413ca1cab88",
          "body": "- Remove --camouflage-bin option and update --ui help to only mention Ink.\n- Force uiEngine to \"ink\", ignoring --ui, KIMIFLARE_UI, and config.\n- Comment out the Camouflage UI branch in src/index.tsx.\n- Make kimiflare resume print that resume is temporarily unavailable.\n- Update config docs to note u\n[…]\n update checks in app.tsx.\n- Update /ui builtin description and camouflage-resume stub.\n- Add note to ui-mode.ts that the module is temporarily unused.\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "temporarily disable Camouflage UI access and force Ink (#597)",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-30T05:57:44Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "eabff75eae6a7a29277776f105bedd2e819af8ed",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release 0.89.0 (#596)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-06-30T05:37:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5f81874776ade0440f778846d599542270c4c04d",
          "body": "…/edit (#595)\n\nThe plan-complete picker promised to start executing in auto/edit mode,\nbut in practice the agent often stopped and asked for a second\nconfirmation before doing any work.\n\nTwo root causes:\n\n1. Camouflage path: selecting auto/edit switched mode and seeded the\n   plan into messages, the\n[…]\n picker can reset the session and rebuild the system\n   prompt without seeding messages, letting submitRef.current(plan)\n   push the plan exactly once.\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "fix(ui): auto-start execution after plan-complete picker chooses auto…",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-30T05:36:45Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e02f3bc0784eb458fa5fa7c75ac359e41766ae35",
          "body": "GLM 5.2 shipped on Cloudflare Workers AI on 2026-06-16 as\n@cf/zai-org/glm-5.2. As a Workers AI (@cf/) model it reuses the existing\ndual-path routing (direct api.cloudflare.com or AI Gateway) with no\nplumbing changes — the model picker and pricing read from the registry\nautomatically.\n\nPricing pulled\n[…]\nnput $1.40/M, cached input $0.26/M, output $4.40/M; 262k context.\n\nCo-authored-by: Sina Meraji <sinameraji@Sinas-MacBook-Pro.local>\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(models): add GLM 5.2 (Zhipu AI on Workers AI) to registry (#594)",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-30T05:36:32Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "3b49505cce6090df776b7003bf739f82cb29286b",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release 0.88.4 (#593)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-06-20T10:20:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f05207fceef079954424f29958c39705f95a4256",
          "body": "…ng) (#592)\n\n* feat(debug): hidden LLM payload dump mode for context-bloat research\n\nAdd a debug-only, default-off instrumentation toggle (KIMIFLARE_DUMP_LLM=1)\nthat records the complete payload sent to the LLM plus the response, so we\ncan study what fraction of the outbound context is unhelpful (in\n[…]\next down, tool_results share\nof the payload down.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "perf(tokens): cache-safe recall + Code Mode enforcement (+ dump tooli…",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-20T10:18:59Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "8597f4c5ba6cf52be1f1622774c0f34bde939fe5",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release 0.88.3 (#590)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-06-15T06:27:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ed14cc612f60a7bca0a591922ccadacce386ed32",
          "body": "Make plan preservation deterministic with a two-layer store:\n\n1. In-session fast path: keep using sessionPlanRef/sessionPlan.\n2. Durable agent-memory backup: persist the captured plan under the\n   deterministic topic key current_dev_plan so it survives /clear,\n   executeFreshStart, or any other ref \n[…]\n in\n  plan mode; persist captured plans to memory as a fire-and-forget backup.\n- Add unit tests for MemoryManager plan storage and resolvePlanForFresh.\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "fix(agent): preserve original plan across /fresh in plan mode (#589)",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-15T05:55:56Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "06701897d0c86fdaab35b2e733e3d3f535660f00",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release 0.88.2 (#588)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-06-15T05:35:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4648b9b4def647299647878dae5cdbe5d5d4afbd",
          "body": "…#587)\n\nThe native /workers-ai/{model} path through gateway.ai.cloudflare.com\nreturns HTTP 401 for Workers AI embedding models. Switch the gateway\npath to the OpenAI-compatible /compat/embeddings endpoint with a\nworkers-ai/ model prefix, which matches how chat completions already\nroute through AI Ga\n[…]\n {data: [{embedding, index}]} response.\n- URL-encode account, gateway, and model identifiers.\n- Add unit tests for gateway and direct Workers AI paths.\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "fix(memory): route embeddings through AI Gateway /compat/embeddings (…",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-15T05:17:28Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "df874fd9915fc3d2f32468dbd57dc2c0ad24ff95",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release 0.88.1 (#585)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-06-13T00:36:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "17c144e24ad9782ec1b294d18a9e7cca0e9126de",
          "body": "…88.1 (#584)\n\n- Make React Ink the default TUI for all users. Camouflage is now strictly\n  opt-in via the --ui flag or KIMIFLARE_UI env var; persisted config can no\n  longer silently switch users to the experimental engine.\n- Update remaining Kimi-K2.6 references to Kimi-K2.7 in the logo and KIMI.md.\n- Bump package version to 0.88.1.\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "fix(ui): default to React Ink, update K2.6 to K2.7 branding, bump v0.…",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-13T00:35:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a8d0bc396f938408eb15f65545ebb9ed4645921f",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release 0.88.0 (#583)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-06-13T00:18:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ce1f51df078dbc4edaaf748b4258368d5b8937b3",
          "body": "* feat(models): add Kimi K2.7 Code as default model\n\n- Add @cf/moonshotai/kimi-k2.7-code to the model registry with 262k context,\n  vision support, and updated cached-input pricing (bash.19/M vs K2.6's bash.16/M).\n- Make K2.7 the default main model across CLI, TUI, onboarding, SDK, and\n  remote agen\n[…]\nmparisons, llms.txt, og-image) to reference Kimi K2.7 as the\ndefault model instead of K2.6.\n\nCo-authored-by: kimiflare <kimiflare@proton.me>\n\n---------\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "feat(models): add Kimi K2.7 Code as default model (#582)",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-13T00:16:26Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "16071d799c77e1ab08ec5bf449fa9413e342bc04",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release 0.87.0 (#580)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-06-12T12:14:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4a3f41f5fd2e91efc17843993947524a3b8e3ffb",
          "body": "This commit brings KimiFlare's headless/CI mode to feature parity with\nOpenCode's CLI harness. Key additions:\n\n**Enhanced Print Mode (P1):**\n- Extract runPrintMode into src/print-mode.ts with new capabilities\n- --continue / --session: resume sessions in headless mode\n- -f / --file: attach files/glob\n[…]\nry expansion (~/) supported\n\n**Tests:**\n- src/permissions-evaluator.test.ts: 10 tests for rule evaluation\n\nCloses docs/plans/headless-ci-parity-plan.md\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "feat(headless): full headless/CI parity with OpenCode (#581)",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-12T12:13:37Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1fe3a84f6bad1374234fa8a3dcda2229ef1f5a8a",
          "body": "- Remove LSP disabled notice from initLsp\n- Remove creator welcome message from startup tasks\n- Remove structured logs path/tail hint from startup tasks\n- Keep pruneOldLogs() running silently\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "feat(ui): reduce startup noise (#579)",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-12T05:13:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d763c94deacdf6c36728cb99a3d78b44ee8b3e28",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release 0.86.0 (#572)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-06-12T04:43:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3e68873035fc3abd61001a38acdf93d96fab5498",
          "body": "Wire MouseClick event handler in Camouflage mode:\n- Click code block → copy to clipboard\n- Click file path → open in $EDITOR (with optional line number)\n- Click tool execution → acknowledge toggle\n\nAlso document mouse capture toggle (S key) and click actions in HELP_KEYS.\n\nRenderer-side mouse event emission is pending upstream camouflage-tui\nsupport; this change makes kimiflare ready to react when it arrives.\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "feat(camouflage): P3.17 mouse support — host-side event handling (#578)",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-12T04:42:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2327e4890709919a694578ebab6f0bef6ac87735",
          "body": "* docs: add architecture comparison research doc\n\nCo-authored-by: kimiflare <kimiflare@proton.me>\n\n* feat(agent): parallelize read-only tools within a turn\n\nWhen every tool call in a batch is read-only (read, glob, grep,\nweb_fetch, search_web, github reads, lsp queries, etc.), execute\nthem concurren\n[…]\nus bar rotation already communicates progress; chat log\ntiming events were redundant noise.\n\nCo-authored-by: kimiflare <kimiflare@proton.me>\n\n---------\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "feat(agent): parallelize read-only tools within a turn (#576)",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-12T04:21:12Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b319a40cb87fcbb991422eeadeae861e24381ce4",
          "body": "…dling, bug fixes (#577)\n\n- Wire --db flag to renderer for SQLite session persistence\n  (stores to ~/.config/kimiflare/camouflage-sessions.db)\n- Upgrade camouflage-tui 1.1.1-beta.1 → 2.1.0-beta.1 for paste preview\n  and TodoListUpdate support\n- Send agent tasks via TodoListUpdate (vertical checklist\n[…]\nanscriptCleared events (not in Camouflage protocol)\n- Update CAMOUFLAGE_MIGRATION.md: mark P3.14–P3.16 complete,\n  document P3.17 mouse-support roadmap\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "feat(camouflage): P3 enhancements — persistence, todo list, paste han…",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-12T03:52:08Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c4b69e28595edf5af828cf78bea62ca7436ef7dc",
          "body": "…d, QR codes, changelog picker (#575)\n\nImplements Phase 2 (P2) Camouflage UI parity items:\n\n- P2.9: /cost now shows detailed session/today/month/all-time breakdown\n  with gateway section via ShowKeyValueView\n- P2.10: Multi-agent workers render as BackgroundTaskUpdate entries;\n  new /workers command \n[…]\no renders QR code as ASCII art in ShowKeyValueView\n- P2.13: /changelog-image ported to form + selectList flow with\n  BackgroundTaskUpdate task tracking\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "feat(camouflage): P2 parity — cost breakdown, workers, hooks dashboar…",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-12T03:01:57Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6b889af7d81d1e231cd054aaff93d66939127569",
          "body": "…eme persistence (#574)\n\n* feat(camouflage): P1 parity — plan complete picker, skills wizard, theme persistence\n\n- P1.6: Add plan complete picker after plan mode completes. Users can\n  choose auto mode, edit mode, or continue planning. Auto/edit resets\n  the session and seeds with the distilled plan\n[…]\nroton.me>\n\n* docs(camouflage): mark P1.5, P1.6, P1.7, P1.8 as complete in migration tracker\n\nCo-authored-by: kimiflare <kimiflare@proton.me>\n\n---------\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "feat(camouflage): P1 parity — plan complete picker, skills wizard, th…",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-12T02:05:44Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "465422ba1dcb42c7278a2d3da16bd8f8276ab721",
          "body": "- Add ANSI diff formatting in ToolExecutionStdout (formatAnsiDiff helper)\n- Store rendered diffs by tool_call_id in onToolCallFinalized, prepend in onToolResult\n- Replace shallow directory walk with glob(**/*) using buildFilePickerIgnoreList\n- Raise mention candidate cap from 200 to 300, preserve recent-files bubbling\n- Update CAMOUFLAGE_MIGRATION.md marking P0.3/P0.4 complete\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "feat(camouflage): P0.3 diff rendering + P0.4 fuzzy file picker (#573)",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-11T12:28:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "54b49e25edb83936ea981622148bc3544672cd1f",
          "body": "…571)\n\nInstantiates the four core managers in Camouflage UI mode and wires\ntheir slash commands:\n\n- MemoryManager: created at boot when memoryEnabled, with cleanup +\n  backfill running in background. /memory search queries via recall()\n  and renders results in ShowKeyValueView. /memory clear uses co\n[…]\nt full context.\n\n- runAgentTurn now receives memoryManager + hooks for full parity with\n  Ink's agent loop.\n\nCloses gap analysis Phase 1 (P0.1 + P0.2).\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "feat(camouflage): wire MemoryManager, MCP, LSP, and Hooks managers (#…",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-11T11:36:42Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3314d63a00eb1103af0f4fc4dc0419ac67c3c48c",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release 0.85.0 (#569)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-06-11T09:56:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e9368bbfa37dbdccb21a5ce53999c21a35e8740a",
          "body": "- Add generateContinuationSummary() that produces dense handoff documents\n  tailored to the current mode (auto/edit/plan/multi-agent).\n- Auto-fresh now triggers after N turns in auto/edit/multi-agent modes,\n  with a silent checkpoint before resetting.\n- /fresh command is now mode-aware: rebuilds sys\n[…]\nad of a\n  generic plan.\n- Add autoFreshEnabled and autoFreshSuggestionTurns config options.\n- Carry over session cost baseline across fresh boundaries.\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "feat(agent): mode-aware /fresh with continuation summaries (#570)",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-11T09:54:14Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "43db05b1c917fe3e0fe2d559aaf16f6d6308cf05",
          "body": "…Gs (#562)\n\n* feat: add /changelog-image command to generate shareable changelog PNGs\n\nAdds a new slash command that generates beautiful changelog images from\nmerged GitHub PRs. The image includes the project logo, latest version,\nand a styled list of recently merged PRs.\n\nNew tools:\n- github_list_m\n[…]\nlare@proton.me>\n\n* fix(changelog-image): center version pill vertically with CHANGELOG text\n\nCo-authored-by: kimiflare <kimiflare@proton.me>\n\n---------\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "feat: add /changelog-image command to generate shareable changelog PN…",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-11T09:08:28Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6a2b72ac18525f53a996cd0f5905e36c42c12e41",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release 0.84.1 (#568)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-06-11T08:14:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c328f639ad9a83bf37f849f51b4177c169e279f1",
          "body": "…mode (#567)\n\nWhen a plan-mode session completes and the user chooses to execute\n(auto/edit) or runs /fresh, the agent was receiving a stale plan-mode\nsystem prompt ('Do not call write, edit, or mutating bash commands').\n\nThe React effect that rebuilds the system prompt on mode change fires\nasynchro\n[…]\nash-commands.ts executeFreshStart (/fresh, present_plan_options)\n- ui-mode.ts /fresh handler (Camouflage)\n- ui-mode.ts plan-options picker (Camouflage)\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "fix(ui): rebuild system prompt when switching from plan to execution …",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-11T08:13:39Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "616a38dc7ec3f87c28c5a6c54dad279d5c9866ad",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release 0.84.0 (#565)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-06-11T06:53:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5aa0d597a4014df3fcd23b5c8cbd5ddc0bcb22b5",
          "body": "…566)\n\nWhen a plan-mode session completes, we now capture the distilled plan\nin a dedicated ref/variable instead of re-distilling it from message\nhistory every time the user wants to execute.\n\nPreviously, if the user chose \"continue\" in the plan-complete picker\nand asked follow-up questions, new ass\n[…]\n stored plan in /fresh\n- slash-commands.ts: add sessionPlanRef to SlashContext, use it in\n  handleFresh and clear it in handleClear / executeFreshStart\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "fix(plan-mode): preserve original plan across follow-up discussion (#…",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-11T06:38:43Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e2ceabcf414a72bfba042385861e6274a2a7edae",
          "body": "The 50-call ceiling was too conservative for modern agent workflows.\nBump the default to 200 while keeping the limit-modal safeguard so\nusers can still intervene if a runaway loop occurs.\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "feat(agent): increase default tool-call limit from 50 to 200 (#564)",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-11T06:28:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ab633707d1319e37d387054ba699e66f8aab6f7f",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release 0.83.0 (#557)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-06-08T13:35:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c413081711a7237b18f306ca3da7dc98a6cc73de",
          "body": "* feat(agent): LLM-based synthesis for multi-agent findings\n\n- Add synthesis config options: synthesisModel, synthesisStrategy, disableLlmSynthesis\n- Rewrite synthesizeFindings() with async LLM path + heuristic fallback\n- Extract legacy heuristic into private synthesizeFindingsHeuristic()\n- Add priv\n[…]\nsion — same behavior as\ncancel, but explicitly visible so users know they can keep talking.\n\nCo-authored-by: kimiflare <kimiflare@proton.me>\n\n---------\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "feat(tools): present_plan_options tool with dual-UI support (#563)",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-08T10:38:00Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5ed1e9b27fefa12eefff77dd5bad310a9ba2678e",
          "body": "…e (#559)\n\n- Strengthen system prompt instruction for tasks_set from soft suggestion\n  to imperative MUST language, requiring the model to call it before/after\n  each step and before mutating tools.\n- Add heuristic auto-advance in the agent loop: after 3 mutating tools\n  (write/edit/bash) without a \n[…]\n the current\n  in_progress task to completed and the next pending to in_progress.\n  This keeps the UI honest when the model forgets to update progress.\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "fix(agent): strengthen tasks_set prompt and add heuristic auto-advanc…",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-08T08:14:18Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "546a81a65fcb486c01495934c818aed1c91f7aad",
          "body": "- Shorten H1 from a 5-line keyword-stuffed sentence to a punchy headline\n- Shorten subtitle to one line\n- Remove the quick-answer block (massive text wall in hero)\n- Remove the Core tools table (too detailed for a landing page)\n- Trim comparison and FAQ section headers\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "fix(docs): shorten hero copy and remove text-heavy sections (#561)",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-08T08:12:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "81982837f6cac6073955310dcac3b96aa23c055d",
          "body": "When /fresh resets the session for plan→implement transitions, the\nstatus-bar dollar amount now stays continuous instead of dropping to\nbash.00.\n\n- Add  to  — hidden bookkeeping only\n-  snapshots the old session's displayed\n  cost (including any prior baseline) into the new session\n-  adds baseline \n[…]\nt leaves\n  today/month/allTime aggregates untouched\n- Wire  handler to capture old ID, force new ID creation,\n  and carry the baseline over immediately\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "feat(usage): carry over cost baseline on /fresh (#560)",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-08T08:09:17Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "39966e11ed8e34ba742ef93be5405b9f4239049d",
          "body": "Optimize the marketing site for search engines and LLM answer engines\naround high-intent terms (Claude Code alternative, Cloudflare AI coding\nagent, AI coding harness, Kimi K2 CLI).\n\nTechnical SEO:\n- Add robots.txt (welcomes AI crawlers), sitemap.xml, llms.txt, _headers.\n\nOn-page (index.html):\n- Key\n[…]\ntxt.\n\nSocial:\n- New 1200x630 og.png social card (source og-image.svg) wired into all\n  OG/Twitter tags, replacing the square logo.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(seo): SEO + GEO overhaul of kimiflare.com (#556)",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-08T07:17:59Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "48174c6b3887bf5ca853ed0a198b92496330d1eb",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release 0.82.1 (#555)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-06-04T10:30:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3b39304887c79643aa121e33038942494fb6a25f",
          "body": "…n mode (#554)\n\n- Move showPlanCompletePicker from hasFullscreenModal to hasOverlayModal\n  in useModalHost() inline flags calculation, matching computeModalFlags.\n- Add setLimitModal(null) in cleanupTurn() so stale limit modals don't\n  block the picker after plan mode completes.\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "fix(ui): prevent blank screen when PlanCompletePicker opens after pla…",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-04T10:30:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d47af66d659db9d287e3ca9ac7c778a3bd716d38",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release 0.82.0 (#548)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-06-03T16:53:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ea6946adfaf8e45f78698746934ccdc4dc5b58ca",
          "body": "…e hook (#552)\n\n* feat(update): check for camouflage-tui optional dependency updates\n\n- Add checkOptionalDependency() in update-check.ts to query npm dist-tags\n- Wire camouflage-tui beta check into Ink UI (app.tsx) startup + interval\n- Wire camouflage-tui beta check into Camouflage UI (ui-mode.ts) s\n[…]\n rapid successive updates.\n- Add regression tests for rendering, sanitization, and helpers.\n\nCo-authored-by: kimiflare <kimiflare@proton.me>\n\n---------\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "fix(ui): correct cursor rendering, add paste sanitization and usePast…",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-03T16:49:05Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7724f1332028cd685b08e7dfc53b5b961b4e68ea",
          "body": "…an (#551)\n\n- Move PlanCompletePicker from fullscreen modal to inline overlay so chat/plan\n  remain visible behind it.\n- After picking auto/edit mode, automatically submit the plan via submitRef to\n  kick off the first agent turn without requiring manual input.\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "fix(ui): make PlanCompletePicker an inline overlay and auto-submit pl…",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-03T16:42:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f07da38e8eba1ead1ff523f6bc1dd7358bf1f23f",
          "body": "…550)\n\n- Add checkOptionalDependency() in update-check.ts to query npm dist-tags\n- Wire camouflage-tui beta check into Ink UI (app.tsx) startup + interval\n- Wire camouflage-tui beta check into Camouflage UI (ui-mode.ts) startup\n- Extend /update slash command to accept 'camouflage' argument\n- Add /update camouflage to help menu\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "feat(update): check for camouflage-tui optional dependency updates (#…",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-03T15:51:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0122870d2de8c3c33e249f4e66870c7c153ce5ca",
          "body": "The camouflage UI's host-side dispatcher (ui-mode.ts) had a stub\n/logout that only toasted a no-op message, and /fresh was completely\nmissing — it fell through to 'unknown command'.\n\nThis change:\n\n- /logout now actually deletes the config file (unlink(configPath()))\n  and confirms with a toast, matc\n[…]\nipboard,\n  resets the conversation (keeping system prompts), clears the\n  transcript, and seeds the new session with the plan — identical\n  to the Ink implementation in ui/slash-commands.ts.\n\nFixes #1",
          "is_bot": false,
          "headline": "fix(camouflage): wire /logout and /fresh slash commands (#549)",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-03T14:59:14Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "debe4cc4e708bb8732854ab009752c6f94383c62",
          "body": "…ssistant msg (#547)\n\n- text-input: when value changes externally (e.g. Up/Down history) and\nthe cursor was at the end of the old text, jump it to the end of the new\ntext instead of leaving it at the old offset.\n\n- chat: only render the streaming spinner on the most recent assistant\nevent. Prevents old completed assistant messages from showing a\nlingering animation.\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "fix(ui): keep cursor at end on history nav + only spinner on latest a…",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-03T14:18:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7ae3380b2d694a45915bafdf4158ec36bb73e16b",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release 0.81.0 (#545)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-06-03T06:01:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0168a278f5f7176ebbedfcbd15b4c273060fe51a",
          "body": "- Add synthesis config options: synthesisModel, synthesisStrategy, disableLlmSynthesis\n- Rewrite synthesizeFindings() with async LLM path + heuristic fallback\n- Extract legacy heuristic into private synthesizeFindingsHeuristic()\n- Add private synthesizeFindingsLlm() with prompt building, truncation,\n[…]\nte autoSpawnWorkers() to pass credentials and prompt into synthesis\n- Add comprehensive tests for LLM, hybrid, heuristic, fallback, and streaming paths\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "feat(agent): LLM-based synthesis for multi-agent findings (#546)",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-03T05:50:44Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b3e8cda5efaf7068e5beb90219b52735e44e39b6",
          "body": "When a plan-mode turn finishes with a substantive plan, show a TUI\npicker that lets the user choose:\n1. Execute plan (auto mode)\n2. Start building with permission (edit mode)\n3. Continue planning / ask a question\n\nSelecting options 1 or 2 automatically runs /fresh (resets session,\ncopies plan to cli\n[…]\nw PlanCompletePicker component using ink-select-input\n- Added showPlanCompletePicker to useModalHost\n- Wired into ModalHost and app.tsx onDone callback\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "feat(ui): auto-prompt /fresh when plan mode completes (#544)",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-03T05:29:27Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "409f25c642e8b11d5fdef4f858d9446a8fed9b5d",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release 0.80.0 (#530)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-06-03T02:47:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5893acb8f0ee9649b8ee1bb48f4cdbeab6ff34f3",
          "body": "- Add distillSessionPlan() to extract last assistant message\n- Add cross-platform clipboard utility\n- Register /fresh slash command\n- Reset session and seed with plan on execution\n- Show tip when switching from plan to auto/edit with heavy context\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "feat: add /fresh command to reset session with distilled plan (#533)",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-03T02:37:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dbc633d927158539f76ecb0762d00849c0e41417",
          "body": "…ar worker list after synthesis (#532)\n\n- Respect cfg.workerTimeoutMs in supervisor.ts instead of only reading the env var.\n- Extend the worker timeout whenever new logs arrive or the step changes,\n  preventing premature kills on long but active tasks.\n- Clear activeWorkers state and call supervisor\n[…]\nhesis completes or fails in both Ink (app.tsx) and Camouflage (ui-mode.ts)\n  UIs, so the stale WorkerList disappears and synthesis is the final output.\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "fix(multi-agent): respect config timeout, extend on progress, and cle…",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-03T02:00:12Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4e7716da5d442e58e93b8aab5c64f95a5a8dd0d5",
          "body": "* feat(multi-agent): coordinator-side file-read cache for workers\n\nBefore spawning workers, the coordinator now pre-reads a configurable\nlist of files from the local filesystem and injects them into each\nworker's context. This eliminates redundant read tool calls across\nworkers, saving ~20-30K token\n[…]\n\n- Tests for memory-derived pre-reading (disabled, missing DB,\n  and successful derivation)\n\nCo-authored-by: kimiflare <kimiflare@proton.me>\n\n---------\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "feat(multi-agent): coordinator-side file-read cache for workers (#527)",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-03T01:12:34Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ef1900b8fd714400c5638fbecabdaadecbf0562a",
          "body": "…esult handling (#526)\n\nAdds hard-ceiling validation for worker budgets, handles budget_exhausted\nstatus from the Commute worker, and treats partial results as usable\nfindings rather than hard failures.\n\n- config.ts: KIMIFLARE_WORKER_BUDGET_MAX_USD env var (default 5.0) +\n  resolveWorkerBudgetUsd() \n[…]\n\n- spawn-worker.ts: apply same ceiling validation; treat\n  budget_exhausted as partial success\n- docs: update multi-agent-actual-status.md\n\nCloses #517\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "feat(multi-agent): client-side worker budget validation and partial-r…",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-03T01:08:50Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6c8c0d951f33e20b2f3a50825abe7b627e5b8392",
          "body": "…shallow clone (#528)\n\nThis PR addresses the coordinator-side and remote-agent-side changes\nfor issue #523 (high cold-start overhead per worker).\n\nChanges:\n- src/config.ts: add workerShallowClone and workerRepoCache flags\n  (default true) with corresponding env vars\n- src/agent/supervisor.ts: genera\n[…]\nming breakdown\n  for completed/failed workers\n- src/agent/supervisor.test.ts: assert batchId/shallowClone/repoCache\n  are present in the worker payload\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "feat(multi-agent): coordinator hints, remote-agent phase timing, and …",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-03T00:58:58Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "34433cb5b2e8280f7f812b7e33107a943ca55bbb",
          "body": "Workers running inside Cloudflare Sandboxes were limited to local file\ntools (read, glob, grep) and bash. This change wires coordinator-side\nmanagers into the worker payload so research workers get:\n\n1. **Memory context** — coordinator recalls relevant memories via\n   MemoryManager.recall() and inje\n[…]\ng.ts — workerProxyMemory/Lsp/Mcp flags\n- src/app.tsx — wire managers into supervisor\n- src/agent/supervisor.test.ts — payload context test\n\nCloses #520\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "feat(multi-agent): proxy memory, LSP, and MCP context to workers (#531)",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-02T15:37:01Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c1d29df9234ca36731a1a60ef59511f2440f0674",
          "body": "Replace the pure regex heuristic in decomposePrompt() with an\nLLM-aware decomposition pipeline:\n\n- For explicit numbered/bulleted lists, keep the existing regex split.\n- For prose prompts, use a lightweight LLM call (default: kimi-k2.5)\n  to analyze the prompt and produce 2-4 well-scoped, non-overla\n[…]\nmposition, caching\n- src/agent/supervisor.test.ts: add tests for LLM decomposition, fallback,\n  regex strategy, caching, file tree snapshot\n\nFixes #518\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "feat(agent): LLM-based task decomposition for multi-agent mode (#529)",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-02T15:24:44Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "85b517666cefebc99e5d004430e466cb6c0a6bc3",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release 0.79.0 (#516)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-06-02T14:13:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "71ace3dd2bf8b2c81e0bd01923452c9da70c2368",
          "body": "…o-present findings (#515)\n\nThis commit improves the multi-agent UX in three ways:\n\n1. **Coordinator narration**: When decomposing a heavy prompt into parallel\n   research tasks, the coordinator now narrates its plan so users can see\n   which task is delegated to each agent before work begins.\n\n2. *\n[…]\n did the agents find?\"\n\nAlso fixes a pre-existing broken test in supervisor.test.ts where the mock\nfetch returned an incorrect progress response shape.\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "feat(multi-agent): coordinator narration, step visualization, and aut…",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-02T14:12:47Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d09899784a1e499851eab375b04e156d60b2b16e",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release 0.78.0 (#513)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-06-02T13:20:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "34d7692f1e1c460685467146bb7e266f78702df7",
          "body": "…ng (#514)\n\n* fix(coordinator): deduplicate step progress logs\n\nOnly log '[coordinator] Step X/Y: ...' when the step actually changes,\nnot on every 3-second poll. Still refreshes the UI if new worker logs\narrive mid-step.\n\nCo-authored-by: kimiflare <kimiflare@proton.me>\n\n* fix(multi-agent): abort si\n[…]\n spawn when activeWorkers already in flight\n- Bump coordinator default timeout 600s -> 900s\n\nCo-authored-by: kimiflare <kimiflare@proton.me>\n\n---------\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "fix(multi-agent): abort signal, escape cancel, and user-message routi…",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-02T12:58:07Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5895c9c42cbce825942066650523917b7f1da48c",
          "body": "…king (#512)\n\n- Add teardownCommute() generator to deploy-commute.ts for disabling\n  multi-agent and cleaning up Cloudflare resources (Worker, DO namespace,\n  KV namespace, container applications).\n- Track workerName in config so teardown knows which Worker to delete.\n- Add scripts/cleanup-multi-age\n[…]\nti-agent.ts: headless redeploy using the same\n  deployCommute() generator.\n- Wire workerName through app.tsx config and multi-agent-modal.tsx teardown.\n\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "feat(multi-agent): add teardown, cleanup scripts, and workerName trac…",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-02T12:01:45Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4fd3e3a7f0dfbd34b8a91c191b2789841733c9ca",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release 0.77.0 (#504)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-06-02T11:44:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c216ab88387409f811b31cb48cc59829b8250a5c",
          "body": "…ploy, TUI settings, and resilience fixes (#511)\n\n* feat(multi-agent): wire experimental mode into camouflage UI\n\nThe camouflage engine (ui-mode.ts) has its own MODES array separate from\nthe shared mode.ts, so multi-agent-experimental never appeared in its\nShift-Tab cycle or /mode command. Adds the \n[…]\nt abort valid workers.\n\nCo-authored-by: kimiflare <kimiflare@proton.me>\n\n---------\n\nCo-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>\nCo-authored-by: kimiflare <kimiflare@proton.me>",
          "is_bot": false,
          "headline": "feat(multi-agent): full coordinator + worker architecture, one-tap de…",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-06-02T11:43:15Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "edef3eecc93f72c38009d62394b1658d324cb895",
          "body": "kimiflare pinned `camouflage-tui` at `^1.0.0-beta.1`. Caret-on-a-prerelease\nonly matches other prereleases of the SAME major.minor.patch base, so it\nmatches `1.0.0-beta.*` and stable `1.x`, but NOT new-base betas like\n`1.0.1-beta.1` or `1.1.0-beta.1`. Result: kimiflare was frozen on\n`1.0.0-beta.1` a\n[…]\ntag mismatch, so merging this before that fix\nwould regress the camouflage UI from the working 1.0.0-beta.1 to a\nbinary-less beta.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: track camouflage-tui via the `beta` dist-tag (#510)",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-05-31T04:18:32Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "752555d4cf014492aea1adfb6b0e4dba5db3fe4f",
          "body": "* feat(multi-agent): wire experimental mode into camouflage UI\n\nThe camouflage engine (ui-mode.ts) has its own MODES array separate from\nthe shared mode.ts, so multi-agent-experimental never appeared in its\nShift-Tab cycle or /mode command. Adds the mode (gated behind\nmultiAgentEnabled / KIMIFLARE_M\n[…]\ne/whole codebase, ...) that lifts these to heavy.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(multi-agent): make experimental mode usable in both UIs (#507)",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-05-31T02:39:51Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "45e314c19921e0bdba15e110960c58d7ef730b92",
          "body": "Implements execute mode in the remote worker (creates a branch + PR via\nthe GitHub Git Data API, since Cloudflare Workers have no git CLI), adds\nunit coverage for intent classification, findings synthesis, prompt\ndecomposition, and the worker HTTP client's retry behavior, and fixes a\ntypecheck error in the camouflage UI engine's narrow Mode type.\n\nCo-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(multi-agent): add worker execute mode + unit tests (#506)",
          "author_name": "Sina Meraji",
          "author_login": "sinameraji",
          "committed_at": "2026-05-29T05:31:19Z",
          "body_truncated": false,
          "is_coding_agent": true
        }
      ],
      "releases_count": 100,
      "commits_last_year": 703,
      "latest_release_at": "2026-07-17T09:05:26Z",
      "latest_release_tag": "v0.97.0",
      "releases_from_tags": false,
      "days_since_last_push": 4,
      "active_weeks_last_year": 14,
      "days_since_latest_release": 4,
      "mean_days_between_releases": 1.5
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": false,
      "health_percentage": 42,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "kimiflare",
          "exists": true,
          "license": "MIT",
          "keywords": [
            "ai",
            "cli",
            "coding-agent",
            "terminal",
            "kimi",
            "k2.7",
            "cloudflare",
            "ai-gateway",
            "workers-ai",
            "vision",
            "image-understanding",
            "llm",
            "code-generation",
            "tui",
            "mcp",
            "model-context-protocol"
          ],
          "ecosystem": "npm",
          "matches_repo": true,
          "registry_url": "https://www.npmjs.com/package/kimiflare",
          "is_deprecated": false,
          "latest_version": "0.97.0",
          "repository_url": "https://github.com/sinameraji/kimiflare",
          "versions_count": 151,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 1,
          "monthly_downloads": 3221,
          "first_published_at": "2026-04-21T15:41:42.174000Z",
          "latest_published_at": "2026-07-17T09:05:50.879000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 4
        }
      ]
    },
    "popularity": {
      "forks": 18,
      "stars": 158,
      "watchers": 1,
      "fork_history": {
        "days": [
          {
            "date": "2026-04-22",
            "count": 1
          },
          {
            "date": "2026-04-24",
            "count": 1
          },
          {
            "date": "2026-04-25",
            "count": 2
          },
          {
            "date": "2026-04-26",
            "count": 1
          },
          {
            "date": "2026-05-06",
            "count": 1
          },
          {
            "date": "2026-05-07",
            "count": 1
          },
          {
            "date": "2026-05-09",
            "count": 4
          },
          {
            "date": "2026-05-13",
            "count": 1
          },
          {
            "date": "2026-05-24",
            "count": 1
          },
          {
            "date": "2026-05-27",
            "count": 1
          },
          {
            "date": "2026-06-17",
            "count": 1
          },
          {
            "date": "2026-06-22",
            "count": 1
          },
          {
            "date": "2026-06-28",
            "count": 1
          },
          {
            "date": "2026-06-29",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 18,
        "total_forks": 18
      },
      "star_history": {
        "days": [
          {
            "date": "2026-04-21",
            "count": 2
          },
          {
            "date": "2026-04-22",
            "count": 3
          },
          {
            "date": "2026-04-23",
            "count": 9
          },
          {
            "date": "2026-04-24",
            "count": 17
          },
          {
            "date": "2026-04-25",
            "count": 3
          },
          {
            "date": "2026-04-26",
            "count": 1
          },
          {
            "date": "2026-04-27",
            "count": 10
          },
          {
            "date": "2026-04-28",
            "count": 11
          },
          {
            "date": "2026-04-29",
            "count": 6
          },
          {
            "date": "2026-04-30",
            "count": 1
          },
          {
            "date": "2026-05-01",
            "count": 5
          },
          {
            "date": "2026-05-02",
            "count": 4
          },
          {
            "date": "2026-05-03",
            "count": 4
          },
          {
            "date": "2026-05-05",
            "count": 1
          },
          {
            "date": "2026-05-06",
            "count": 3
          },
          {
            "date": "2026-05-07",
            "count": 1
          },
          {
            "date": "2026-05-08",
            "count": 9
          },
          {
            "date": "2026-05-09",
            "count": 35
          },
          {
            "date": "2026-05-10",
            "count": 7
          },
          {
            "date": "2026-05-11",
            "count": 4
          },
          {
            "date": "2026-05-12",
            "count": 5
          },
          {
            "date": "2026-05-13",
            "count": 1
          },
          {
            "date": "2026-05-14",
            "count": 2
          },
          {
            "date": "2026-05-17",
            "count": 1
          },
          {
            "date": "2026-05-20",
            "count": 1
          },
          {
            "date": "2026-05-23",
            "count": 1
          },
          {
            "date": "2026-05-27",
            "count": 1
          },
          {
            "date": "2026-06-03",
            "count": 7
          },
          {
            "date": "2026-06-13",
            "count": 2
          },
          {
            "date": "2026-06-25",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 158,
        "total_stars": 158
      },
      "open_issues_and_prs": 0
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [
        "demos"
      ],
      "has_llms_txt": true,
      "has_dockerfile": true,
      "has_mcp_signal": true,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [
        "acp/tsconfig.json",
        "remote/agent/tsconfig.json",
        "tsconfig.json"
      ],
      "toolchain_manifests": [],
      "largest_source_bytes": 165137,
      "source_files_sampled": 319,
      "oversized_source_files": 5,
      "agent_instruction_files": [
        "AGENTS.md"
      ],
      "agent_instruction_max_bytes": 827
    },
    "dependencies": {
      "manifests": [
        "acp/package.json",
        "feedback-worker/package.json",
        "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": "@agentclientprotocol/sdk",
          "manifest": "acp/package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.21.0"
        },
        {
          "name": "@modelcontextprotocol/sdk",
          "manifest": "acp/package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.29.0"
        },
        {
          "name": "better-sqlite3",
          "manifest": "acp/package.json",
          "ecosystem": "npm",
          "version_constraint": "^12.9.0"
        },
        {
          "name": "commander",
          "manifest": "acp/package.json",
          "ecosystem": "npm",
          "version_constraint": "^12.1.0"
        },
        {
          "name": "diff",
          "manifest": "acp/package.json",
          "ecosystem": "npm",
          "version_constraint": "^7.0.0"
        },
        {
          "name": "fast-glob",
          "manifest": "acp/package.json",
          "ecosystem": "npm",
          "version_constraint": "^3.3.2"
        },
        {
          "name": "turndown",
          "manifest": "acp/package.json",
          "ecosystem": "npm",
          "version_constraint": "^7.2.0"
        },
        {
          "name": "qrcode",
          "manifest": "feedback-worker/package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.5.4"
        },
        {
          "name": "@modelcontextprotocol/sdk",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.29.0"
        },
        {
          "name": "@resvg/resvg-js",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.6.2"
        },
        {
          "name": "better-sqlite3",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^12.9.0"
        },
        {
          "name": "commander",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^12.1.0"
        },
        {
          "name": "ink",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^7.0.1"
        },
        {
          "name": "ink-select-input",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^6.2.0"
        },
        {
          "name": "ink-spinner",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^5.0.0"
        },
        {
          "name": "ink-text-input",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^6.0.0"
        },
        {
          "name": "minimatch",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^10.2.5"
        },
        {
          "name": "qrcode",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.5.4"
        },
        {
          "name": "react",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^19.2.0"
        },
        {
          "name": "turndown",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^7.2.0"
        },
        {
          "name": "typescript",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^5.7.2"
        },
        {
          "name": "vscode-languageserver-protocol",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^3.17.5"
        }
      ],
      "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": 0,
        "merged_prs": 494,
        "open_issues": 0,
        "closed_ratio": 1,
        "closed_issues": 98,
        "closed_unmerged_prs": 35
      },
      "bus_factor": 1,
      "bot_contributors": 1,
      "top_contributors": [
        {
          "type": "User",
          "login": "sinameraji",
          "commits": 558,
          "avatar_url": "https://avatars.githubusercontent.com/u/6380359?v=4"
        },
        {
          "type": "User",
          "login": "nqh-packages",
          "commits": 3,
          "avatar_url": "https://avatars.githubusercontent.com/u/215308928?v=4"
        },
        {
          "type": "User",
          "login": "season179",
          "commits": 2,
          "avatar_url": "https://avatars.githubusercontent.com/u/3291108?v=4"
        },
        {
          "type": "User",
          "login": "frankmeszaros",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/15343791?v=4"
        },
        {
          "type": "User",
          "login": "marshallswain",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/128857?v=4"
        }
      ],
      "contributors_sampled": 5,
      "top_contributor_share": 0.988
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "pages.yml",
        "publish.yml",
        "release-please.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [],
      "has_editorconfig": false,
      "has_linter_config": false,
      "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": 3,
            "reason": "branch protection is not maximal on development and all release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": 0,
            "reason": "0 out of 30 merged PRs checked by a CI test -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 0,
            "reason": "Found 0/18 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 3,
            "reason": "project has 1 contributing companies or organizations -- score normalized to 3",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 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 30 issue activity found in the last 90 days -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": 10,
            "reason": "packaging workflow detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 2,
            "reason": "dependency not pinned by hash detected -- score normalized to 2",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "SAST tool is not run on all commits -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 0,
            "reason": "security policy file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": null,
            "reason": "no releases found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 0,
            "reason": "detected GitHub workflow tokens with excessive permissions",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 0,
            "reason": "36 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "f98cab61dbbd41c9655a68e673f934e3a76bd4ca",
        "ran_at": "2026-07-22T06:23:30Z",
        "aggregate_score": 3.7,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": false,
      "has_dependabot_config": false
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-17T09:05:32Z",
      "oldest_open_prs": [],
      "last_merged_pr_at": "2026-07-17T09:05:11Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": []
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/sinameraji/kimiflare",
    "host": "github.com",
    "name": "kimiflare",
    "owner": "sinameraji"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 62,
      "inputs": {
        "security": 37,
        "vitality": 84,
        "community": 50,
        "governance": 61,
        "engineering": 69
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "good",
        "name": "Vitality",
        "value": 84,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "good",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 74,
            "inputs": {
              "commits_last_year": 703,
              "human_commit_share": 0.69,
              "days_since_last_push": 4,
              "active_weeks_last_year": 14
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 4 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 4
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "14/52 weeks with commits",
                "points": 9.7,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 14
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "703 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 703
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "30 commit(s) and 30 issue activity found in the last 90 days -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "releases_count": 100,
              "latest_release_tag": "v0.97.0",
              "releases_from_tags": false,
              "days_since_latest_release": 4,
              "mean_days_between_releases": 1.5
            },
            "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 4 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 4
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~1.5 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 1.5
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "unverified",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": "repository_too_young",
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": null,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "maintenance record not established from the collected data",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_unverified",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "moderate",
        "name": "Community & Adoption",
        "value": 50,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "at_risk",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 46,
            "inputs": {
              "forks": 18,
              "stars": 158,
              "watchers": 1,
              "growth_state": "organic",
              "growth_factor_pct": 100
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "158 stars",
                "points": 35.6,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 158
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "18 forks",
                "points": 10.3,
                "status": "partial",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 18
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "1 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "moderate",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 50,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": false,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (MIT)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "MIT"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.3
              }
            ]
          },
          {
            "key": "ecosystem_adoption",
            "band": "moderate",
            "name": "Ecosystem adoption (downloads)",
            "note": "Excluded from scoring (no data or not applicable): Registry dependents. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "registry_dependents"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 58,
            "inputs": {
              "packages": [
                "kimiflare"
              ],
              "dependents": null,
              "ecosystems": "npm",
              "total_downloads": null,
              "monthly_downloads": 3221
            },
            "components": [
              {
                "key": "monthly_downloads",
                "name": "Monthly downloads",
                "detail": "3,221 downloads/month across npm",
                "points": 46.8,
                "status": "partial",
                "details": [
                  {
                    "code": "downloads_monthly",
                    "params": {
                      "count": 3221,
                      "ecosystems": "npm"
                    }
                  }
                ],
                "max_points": 80
              },
              {
                "key": "registry_dependents",
                "name": "Registry dependents",
                "detail": "not reported by this ecosystem",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_reported_by_this_ecosystem",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "moderate",
        "name": "Sustainability & Governance",
        "value": 61,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 19,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 5,
              "top_contributor_share": 0.988
            },
            "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 99% of commits",
                "points": 0.3,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 99
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "5 contributors",
                "points": 6.8,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 5
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 1 contributing companies or organizations -- score normalized to 3",
                "points": 3,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "good",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 82,
            "inputs": {
              "merged_prs": 494,
              "open_issues": 0,
              "closed_issues": 98,
              "issue_closed_ratio": 1,
              "closed_unmerged_prs": 35
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "100% of issues closed",
                "points": 46.8,
                "status": "met",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 100
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "494/529 decided PRs merged",
                "points": 35.7,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 494,
                      "decided": 529
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/18 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "moderate",
            "name": "Ownership & stewardship",
            "note": "Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "verified_domain"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 59,
            "inputs": {
              "followers": 88,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "sinameraji",
              "public_repos": 30,
              "account_age_days": 4574
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "personal (user) account",
                "points": 10,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_personal",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": "not applicable to user accounts",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_applicable_to_user_accounts",
                    "params": {}
                  }
                ],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "88 followers of sinameraji",
                "points": 14,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 88,
                      "login": "sinameraji"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "30 public repos, account ~12 yr old",
                "points": 22.9,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 30
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 12
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "kimiflare"
              ],
              "ecosystems": "npm",
              "any_deprecated": false,
              "min_days_since_publish": 4
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "1 package(s) on npm",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 1,
                      "ecosystems": "npm"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 4 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 4
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "151 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 151
                    }
                  }
                ],
                "max_points": 20
              },
              {
                "key": "not_deprecated",
                "name": "Not deprecated",
                "detail": "active, not deprecated or yanked",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "package_not_deprecated",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "moderate",
        "name": "Engineering Quality",
        "value": 69,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "at_risk",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 48,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": false,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "3 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 3
                    }
                  }
                ],
                "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": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "0 out of 30 merged PRs checked by a CI test -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "excellent",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "topics": [
                "agents",
                "ai",
                "vibe-coding",
                "kimi-k26",
                "harness",
                "aigateway",
                "cloudflare",
                "moonshot",
                "workers-ai",
                "kimi-k27"
              ],
              "has_wiki": true,
              "homepage": "https://kimiflare.com",
              "has_readme": true,
              "has_docs_dir": true,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 25,
                "status": "met",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": "https://kimiflare.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": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "at_risk",
        "name": "Security",
        "value": 37,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 37,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 17,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 1,
              "scorecard_aggregate": 3.7
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "branch protection is not maximal on development and all release branches",
                "points": 2.2,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "0 out of 30 merged PRs checked by a CI test -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 0/18 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 1 contributing companies or organizations -- score normalized to 3",
                "points": 0.8,
                "status": "partial",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no 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 30 issue activity found in the last 90 days -- score normalized to 10",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow detected",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 2",
                "points": 1,
                "status": "partial",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool is not run on all commits -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "detected GitHub workflow tokens with excessive permissions",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "36 existing vulnerabilities detected",
                "points": 0,
                "status": "missed",
                "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": 12
            },
            "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": 76,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "excellent",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "has_llms_txt": true,
              "legible_history_share": 1,
              "agent_instruction_files": [
                "AGENTS.md"
              ],
              "agent_instruction_max_bytes": 827
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "AGENTS.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "AGENTS.md"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": "llms.txt present",
                "points": 15,
                "status": "met",
                "details": [
                  {
                    "code": "llms_txt_present",
                    "params": {}
                  }
                ],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "69 of 69 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 69,
                      "sampled": 69
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "moderate",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 55,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "package-lock.json"
              ],
              "has_dockerfile": true,
              "typed_language": true,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": false,
              "typecheck_configs": [
                "acp/tsconfig.json",
                "remote/agent/tsconfig.json",
                "tsconfig.json"
              ],
              "agent_commit_share": 0.12,
              "toolchain_manifests": [],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "acp/tsconfig.json, remote/agent/tsconfig.json, tsconfig.json",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "acp/tsconfig.json, remote/agent/tsconfig.json, tsconfig.json"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "Dockerfile, lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Dockerfile, lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "12 of the last 100 commits agent-authored or agent-credited",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 12,
                      "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 2",
                "points": 2,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 99,
            "inputs": {
              "primary_language": "TypeScript",
              "largest_source_bytes": 165137,
              "source_files_sampled": 319,
              "oversized_source_files": 5
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "TypeScript (statically typed)",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "TypeScript"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "5/319 source files over 60KB",
                "points": 54.1,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 319,
                      "oversized": 5
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "moderate",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 60,
            "inputs": {
              "example_dirs": [
                "demos"
              ],
              "has_mcp_signal": true,
              "api_schema_files": []
            },
            "components": [
              {
                "key": "api_schema_openapi_graphql_proto",
                "name": "API schema (OpenAPI/GraphQL/proto)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 40
              },
              {
                "key": "mcp_server",
                "name": "MCP server",
                "detail": null,
                "points": 20,
                "status": "met",
                "details": [],
                "max_points": 20
              },
              {
                "key": "runnable_examples",
                "name": "Runnable examples",
                "detail": "demos",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "demos"
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "Could not fetch npm package 'kimiflare-acp' from its registry",
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
    "deps.dev does not index npm:kimiflare@0.97.0; advisories assessed against the repository dependency graph instead"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-22T06:23:50.106079Z",
  "schema_version": "0.26.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/s/sinameraji/kimiflare.svg",
  "full_name": "sinameraji/kimiflare",
  "license_state": "standard",
  "license_spdx": "MIT"
}

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

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

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