Публічний реєстр
Звіт про здоров'я програмного забезпеченнясхема 0.27.0 · метрики 1.13.0 · 2026-07-23 04:22 UTC

getagentseal / codeburn

Free, local tool to track AI coding token usage and cost across 31 tools and agents (Claude Code, Cursor, Codex, Gemini and more), by model, project, and task. npx codeburn

TypeScript · SwiftMIT★ 8 858 зірок⑂ 691 форкз квіт. 2026 р.Переглянути на GitHub ↗

getagentseal/codeburn має індекс здоров’я 70 зі 100, що відповідає смузі «Добрий». Найвищий показник — Community & Adoption (82/100), найнижчий — Security (42/100). Останнє оновлення було 1 день тому. Більшість нещодавньої роботи виконує один учасник.

70
загалом / 100
Добрий

Індекс здоров'я програмного забезпечення

Метрики згруповано у зважені категорії на шкалі 1–100. Загальна оцінка починається як їхнє середнє; коли публічні дані активують Політику юрисдикцій високого ризику, рейтинг коригується й отримує верхню межу 49 («Під ризиком»). Готовність до ШІ не входить до індексу.

70
Відмінний85-100Зразковий; відповідає практично всім перевіреним критеріям
Добрий70-84Здоровий; незначні прогалини
Помірний50-69Прийнятний, але з помітними прогалинами; рекомендовано перевірку
У зоні ризику30-49Суттєві слабкі місця; впровадження потребує обережності
Критичний1-29Серйозні проблеми (покинутий, єдиний мейнтейнер, без базової гігієни)
ЖиттєздатністьСпільнота тавпровадженняСталість таврядуванняІнженернаякістьБезпекаГотовність доШІ

Профіль оцінок

Кожна вісь — окрема категорія. Форма важить більше, ніж середнє: здоровий об'єкт заповнює всю фігуру, тоді як профіль із піками та провалами означає, що сила в одному вимірі маскує ризик в іншому.

Власність

AgentsealОрганізація
77 підписників9 публічних репозиторіївз квіт. 2026 р.

За цим репозиторієм стоїть організація — спільна, підзвітна опіка, здатна пережити будь-якого окремого мейнтейнера.

Пакетні екосистеми

РеєстрПакетВерсіяЗавантажень / місВерсіїОстання публікаціяТеги
npmcodeburn0.9.1932 310502 дні томуclaude-codecursorcodexkimidevinibm-bobopencodepicodebuffcodewhaleai-codingtoken-usagecost-trackingobservabilitydeveloper-tools

Метрики за категоріями

Життєздатність

Чи живий проєкт — чи пишеться код і чи виходять релізи?

80Добрий · 22% загального індексу
Як обчислюється оцінка
36/36Свіжість push — останній push 1 дн. тому
10.4/36Ритм комітів — 15/52 тижнів із комітами
18/18Обсяг комітів — 1 118 комітів за останній рік
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 27 issue activity found in the last 90 days -- score normalized to 10
Використані вхідні дані
commits_last_year1 118
human_commit_share1
days_since_last_push1
active_weeks_last_year15
Як обчислюється оцінка
27/27Випускає релізи — опубліковано 48 релізів
36/36Свіжість релізів — останній реліз 2 дн. тому
27/27Ритм релізів — реліз кожні ~2,1 дн.
0/10OpenSSF Scorecard: Signed-Releases — Project has not signed or included provenance with any releases.
Використані вхідні дані
releases_count48
latest_release_tagmac-v0.9.19
releases_from_tagsні
days_since_latest_release2
mean_days_between_releases2,1

Спільнота та впровадження

Чи має проєкт користувачів, завантаження, увагу та влаштовані умови для контриб’юторів?

82Добрий · 18% загального індексу
Як обчислюється оцінка
60/60Зірки — 8 858 зірок
23.7/25Форки — 691 форків
7.9/15Спостерігачі — 27 спостерігачів
Використані вхідні дані
forks691
stars8 858
watchers27
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Як обчислюється оцінка
22.5/22.5README
22.5/22.5Ліцензія — визнана ліцензія (MIT)
18/18Настанови CONTRIBUTING
0/13.5Кодекс поведінки
0/7.2Шаблон issue
6.3/6.3Шаблон PR
Використані вхідні дані
has_readmeтак
has_licenseтак
has_contributingтак
has_issue_templateні
has_code_of_conductні
has_pull_request_templateтак
Як обчислюється оцінка
60.1/80Щомісячні завантаження — 32 310 завантажень/місяць у npm
0/20Залежні пакети в реєстрі — ця екосистема цього не повідомляє
Використані вхідні дані
packagescodeburn
dependents
ecosystemsnpm
total_downloads
monthly_downloads32 310
Виключено з оцінювання (немає даних або не застосовно): Залежні пакети в реєстрі. Залишкові ваги перенормовано.

Сталість та врядування

Чи переживе проєкт своїх людей — бас-фактор, реактивність, хто за ним стоїть і як супроводжуються пакети?

62Помірний · 24% загального індексу
Як обчислюється оцінка
9/54Бас-фактор — на 1 контриб’ютор(ів) припадає половина всіх комітів
4.6/22.5Розподіл комітів — головний контриб’ютор — автор 80% комітів
13.5/13.5Широта контриб’юторів — 61 контриб’юторів
10/10OpenSSF Scorecard: Contributors — project has 14 contributing companies or organizations
Використані вхідні дані
bus_factor1
contributors_sampled61
top_contributor_share0,796
Як обчислюється оцінка
42.6/46.8Вирішення issue — закрито 91% issue
29/38.3Прийняття PR — злито 412/544 вирішених PR
1.5/15OpenSSF Scorecard: Code-Review — Found 3/29 approved changesets -- score normalized to 1
Використані вхідні дані
merged_prs412
open_issues21
closed_issues218
issue_closed_ratio0,912
closed_unmerged_prs132
Як обчислюється оцінка
30/30Підтримка власника — у власності організації
0/20Верифікований домен
13.6/25Охоплення власника — 77 підписників у getagentseal
7.8/25Послужний список — 9 публічних репозиторіїв, вік облікового запису ~0 р.
Використані вхідні дані
followers77
owner_typeOrganization
is_verified
owner_logingetagentseal
public_repos9
account_age_days95

Супровід пакетів

100Відмінний
Як обчислюється оцінка
25/25Опубліковано й доступно — 1 пакет(ів) у npm
35/35Свіжість публікацій — остання публікація 2 дн. тому
20/20Історія версій — 50 опублікованих версій
20/20Не застарілий — активний, не deprecated і не yanked
Використані вхідні дані
packagescodeburn
ecosystemsnpm
any_deprecatedні
min_days_since_publish2

Інженерна якість

Чи наявні базові інженерні практики та документація?

81Добрий · 20% загального індексу
Як обчислюється оцінка
24/24Процеси CI — 4 процес(ів) CI
24/24Наявні тести
0/16Конфігурація лінтера
0/9.6Pre-commit-хуки
0/6.4.editorconfig
20/20OpenSSF Scorecard: CI-Tests — 28 out of 28 merged PRs checked by a CI test -- score normalized to 10
Використані вхідні дані
has_ciтак
has_testsтак
has_editorconfigні
has_linter_configні
has_precommit_configні

Документація

100Відмінний
Як обчислюється оцінка
30/30README
25/25Каталог документації
15/15Сайт документації / домашня сторінка — https://codeburn.app/
10/10Опис репозиторію
10/10Теми — 12 тем
10/10Wiki
Використані вхідні дані
topicsai-coding, claude-code, cli, codex, cost-tracking, developer-tools, observability, terminal-ui, token-usage, cursor-ide, menubar, web-dashboard
has_wikiтак
homepagehttps://codeburn.app/
has_readmeтак
has_docs_dirтак
has_descriptionтак

Безпека

Чи міцні видимі практики безпеки й ланцюга постачання, без непослабленої пов’язаності з юрисдикціями високого ризику?

42У зоні ризику · 16% загального індексу

Стан безпеки

42У зоні ризику
Як обчислюється оцінка
7.5/7.5Binary-Artifacts — no binaries found in the repo
3.8/7.5Branch-Protection — branch protection is not maximal on development and all release branches
2.5/2.5CI-Tests — 28 out of 28 merged PRs checked by a CI test -- score normalized to 10
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0.8/7.5Code-Review — Found 3/29 approved changesets -- score normalized to 1
2.5/2.5Contributors — project has 14 contributing companies or organizations
10/10Dangerous-Workflow — no dangerous workflow patterns detected
0/7.5Dependency-Update-Tool — no update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5Ліцензія — license file detected
7.5/7.5Maintained — 30 commit(s) and 27 issue activity found in the last 90 days -- score normalized to 10
0/5Packaging — немає даних
0/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
0/5SAST — SAST tool is not run on all commits -- score normalized to 0
5/5Security-Policy — security policy file detected
0/7.5Signed-Releases — Project has not signed or included provenance with any releases.
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
0/7.5Vulnerabilities — 23 existing vulnerabilities detected
Використані вхідні дані
sourceopenssf_scorecard
checks_evaluated17
scorecard_versionv5.5.0
checks_inconclusive1
scorecard_aggregate4,2
Виключено з оцінювання (немає даних або не застосовно): packaging. Залишкові ваги перенормовано.

Готовність до ШІ

Наскільки репозиторій оснащений для розробки та супроводу за участі ШІ-агентів? Незалежний, експериментальний бейдж — вага 0.0, тож він подається окремо і не впливає на загальний індекс здоров'я.

61Помірний · 0% загального індексу
Як обчислюється оцінка
45/45Інструкції для агентів — docs/providers/claude.md, docs/providers/gemini.md
0/15Машиночитана документація (llms.txt)
40/40Читабельна історія комітів — намір зазначено у 100 з 100 людських комітів (структурований заголовок або пояснювальний текст)
Використані вхідні дані
has_llms_txtні
legible_history_share1
agent_instruction_filesdocs/providers/claude.md, docs/providers/gemini.md
agent_instruction_max_bytes3 012
Як обчислюється оцінка
0/18Розгортання однією командою
22/22Автоматизовані тести
0/11Конфігурація лінтера / форматера
11/11Статична перевірка типів — app/tsconfig.json, dash/tsconfig.json, tsconfig.json
10/10Відтворюване середовище — lockfile
0/10Підтверджена практика роботи з агентами — серед останніх 100 комітів немає створених агентом
0/8Автоматизоване супроводження — автоматичних оновлень залежностей не виявлено
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Використані вхідні дані
has_nixні
has_testsтак
lockfilespackage-lock.json
has_dockerfileні
typed_languageтак
bootstrap_files
has_devcontainerні
has_linter_configні
typecheck_configsapp/tsconfig.json, dash/tsconfig.json, tsconfig.json
agent_commit_share0
toolchain_manifests
dependency_bot_commit_share0
Як обчислюється оцінка
45/45Типізований код — TypeScript (статично типізована)
54.1/55Керовані розміри файлів — 8/510 файлів вихідного коду понад 60 КБ
Використані вхідні дані
primary_languageTypeScript
largest_source_bytes167 083
source_files_sampled510
oversized_source_files8
Як обчислюється оцінка
0/40Схема API (OpenAPI/GraphQL/proto)
20/20Сервер MCP
0/40Придатні до запуску приклади
Використані вхідні дані
example_dirs
has_mcp_signalтак
api_schema_files

Ключові факти

8 858зірок GitHub
61контриб'юторів
1 118комітів за останні 12 місяців
1днів від останнього пушу
48релізів
1бас-фактор
21відкритих issue
npmпакетних екосистем

Попередження щодо збору даних

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token
  • GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository
  • deps.dev does not index npm:codeburn@0.9.19; advisories assessed against the repository dependency graph instead

Докладніше

Історія зірок і форків 0 ★ / 691 ⇿
0Зірки
691Форки
48Релізи

Коли додано кожну зірку й форк — зібрано з GitHub і згруповано за днями. Кумулятивне зростання розміщено просто над денними додаваннями, з яких воно складається, тож їх видно одне проти одного: рівномірне органічне накопичення виглядає зовсім інакше, ніж різкий короткочасний сплеск. Там, де цю різницю можна виміряти, її подано як автентичність росту.

0125250375500625750690632026-042026-062026-07
Мажорні 0Мінорні 1Патчі 14
OpenSSF Scorecard 4.2 / 10
4.2сукупно

Незалежна, не прив'язана до інструментів оцінка безпеки від відкритого проєкту OpenSSF Scorecard. Кожна перевірка винагороджує практику безпеки, а не інструмент конкретного постачальника. Перевірки, які Scorecard не зміг визначити, позначено н/д і виключено з оцінки безпеки (вони ніколи не зараховуються як нуль).Scorecard v5.5.0 · 2026-07-23 04:22 UTC

10Binary-Artifactsno binaries found in the repo
5Branch-Protectionbranch protection is not maximal on development and all release branches
10CI-Tests28 out of 28 merged PRs checked by a CI test -- score normalized to 10
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
1Code-ReviewFound 3/29 approved changesets -- score normalized to 1
10Contributorsproject has 14 contributing companies or organizations
10Dangerous-Workflowno dangerous workflow patterns detected
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
10Maintained30 commit(s) and 27 issue activity found in the last 90 days -- score normalized to 10
н/дPackagingpackaging workflow not detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
0SASTSAST tool is not run on all commits -- score normalized to 0
10Security-Policysecurity policy file detected
0Signed-ReleasesProject has not signed or included provenance with any releases.
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
0Vulnerabilities23 existing vulnerabilities detected
Прямі залежності 21
РеєстрПакетОбмеження версіїМаніфест
npm@gsap/react^2.1.2app/package.json
npmgsap^3.15.0app/package.json
npmreact^19.2.7app/package.json
npmreact-dom^19.2.7app/package.json
npm@tanstack/react-query^5.62.7dash/package.json
npmclsx^2.1.1dash/package.json
npmlucide-react^0.468.0dash/package.json
npmreact^19.0.0dash/package.json
npmreact-dom^19.0.0dash/package.json
npmrecharts^3.3.0dash/package.json
npmtailwind-merge^3.0.2dash/package.json
npm@modelcontextprotocol/sdk^1.29.0package.json
npmbonjour-service^1.4.1package.json
npmchalk^5.4.1package.json
npmcommander^13.1.0package.json
npmink^7.0.0package.json
npmreact^19.2.5package.json
npmselfsigned^5.5.0package.json
npmstrip-ansi^7.2.0package.json
npmundici^7.27.2package.json
npmzod^3.25.76package.json
Усі залежності не зібрано

Не вдалося зібрати розв'язаний набір залежностей для цього звіту: GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Звіт у форматі JSON машиночитний
{
  "data": {
    "repo": {
      "topics": [
        "ai-coding",
        "claude-code",
        "cli",
        "codex",
        "cost-tracking",
        "developer-tools",
        "observability",
        "terminal-ui",
        "token-usage",
        "cursor-ide",
        "menubar",
        "web-dashboard"
      ],
      "is_fork": false,
      "size_kb": 18611,
      "has_wiki": true,
      "homepage": "https://codeburn.app/",
      "languages": {
        "CSS": 107170,
        "HTML": 56153,
        "Shell": 14216,
        "Swift": 624654,
        "JavaScript": 65456,
        "TypeScript": 4621387
      },
      "pushed_at": "2026-07-21T22:23:26Z",
      "created_at": "2026-04-13T22:11:53Z",
      "owner_type": "Organization",
      "updated_at": "2026-07-23T04:15:38Z",
      "description": "Free, local tool to track AI coding token usage and cost across 31 tools and agents (Claude Code, Cursor, Codex, Gemini and more), by model, project, and task. npx codeburn",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "main",
      "license_spdx_raw": "MIT",
      "primary_language": "TypeScript",
      "significant_languages": [
        "TypeScript",
        "Swift"
      ]
    },
    "owner": {
      "blog": "https://agentseal.org/",
      "name": "Agentseal",
      "type": "Organization",
      "login": "getagentseal",
      "company": null,
      "location": "Germany",
      "followers": 77,
      "avatar_url": "https://avatars.githubusercontent.com/u/277308000?v=4",
      "created_at": "2026-04-18T17:17:21Z",
      "is_verified": null,
      "public_repos": 9,
      "account_age_days": 95
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "mac-v0.9.19",
          "kind": "other",
          "published_at": "2026-07-20T17:22:34Z"
        },
        {
          "tag": "desktop-v0.9.19",
          "kind": "other",
          "published_at": "2026-07-20T21:03:03Z"
        },
        {
          "tag": "v0.9.19",
          "kind": "patch",
          "published_at": "2026-07-20T16:43:57Z"
        },
        {
          "tag": "desktop-v0.9.17",
          "kind": "other",
          "published_at": "2026-07-17T21:02:53Z"
        },
        {
          "tag": "desktop-v0.9.16",
          "kind": "other",
          "published_at": "2026-07-17T02:31:18Z"
        },
        {
          "tag": "mac-v0.9.16",
          "kind": "other",
          "published_at": "2026-07-17T02:24:30Z"
        },
        {
          "tag": "v0.9.16",
          "kind": "patch",
          "published_at": "2026-07-17T02:24:17Z"
        },
        {
          "tag": "desktop-v0.9.15",
          "kind": "other",
          "published_at": "2026-07-16T22:52:05Z"
        },
        {
          "tag": "mac-v0.9.15",
          "kind": "other",
          "published_at": "2026-07-02T04:32:26Z"
        },
        {
          "tag": "v0.9.15",
          "kind": "patch",
          "published_at": "2026-07-02T04:32:09Z"
        },
        {
          "tag": "mac-v0.9.14",
          "kind": "other",
          "published_at": "2026-06-22T01:53:21Z"
        },
        {
          "tag": "v0.9.14",
          "kind": "patch",
          "published_at": "2026-06-22T01:56:00Z"
        },
        {
          "tag": "mac-v0.9.13",
          "kind": "other",
          "published_at": "2026-06-14T08:36:23Z"
        },
        {
          "tag": "mac-v0.9.12",
          "kind": "other",
          "published_at": "2026-06-09T23:04:28Z"
        },
        {
          "tag": "v0.9.12",
          "kind": "patch",
          "published_at": "2026-06-09T23:02:46Z"
        },
        {
          "tag": "mac-v0.9.11",
          "kind": "other",
          "published_at": "2026-05-27T13:13:11Z"
        },
        {
          "tag": "v0.9.11",
          "kind": "patch",
          "published_at": "2026-05-27T13:12:54Z"
        },
        {
          "tag": "mac-v0.9.10",
          "kind": "other",
          "published_at": "2026-05-20T11:25:02Z"
        },
        {
          "tag": "v0.9.10",
          "kind": "patch",
          "published_at": "2026-05-20T11:24:48Z"
        },
        {
          "tag": "v0.9.9",
          "kind": "patch",
          "published_at": "2026-05-17T09:48:23Z"
        },
        {
          "tag": "mac-v0.9.9",
          "kind": "other",
          "published_at": "2026-05-17T09:44:16Z"
        },
        {
          "tag": "mac-v0.9.8",
          "kind": "other",
          "published_at": "2026-05-11T00:16:59Z"
        },
        {
          "tag": "v0.9.8",
          "kind": "patch",
          "published_at": "2026-05-11T00:16:39Z"
        },
        {
          "tag": "mac-v0.9.7",
          "kind": "other",
          "published_at": "2026-05-07T06:17:33Z"
        },
        {
          "tag": "v0.9.7",
          "kind": "patch",
          "published_at": "2026-05-07T06:16:47Z"
        },
        {
          "tag": "mac-v0.9.6",
          "kind": "other",
          "published_at": "2026-05-03T19:17:51Z"
        },
        {
          "tag": "v0.9.6",
          "kind": "patch",
          "published_at": "2026-05-03T19:17:24Z"
        },
        {
          "tag": "mac-v0.9.5",
          "kind": "other",
          "published_at": "2026-05-02T17:18:03Z"
        },
        {
          "tag": "v0.9.5",
          "kind": "patch",
          "published_at": "2026-05-01T15:17:07Z"
        },
        {
          "tag": "mac-v0.9.4",
          "kind": "other",
          "published_at": "2026-04-30T16:25:46Z"
        },
        {
          "tag": "mac-v0.9.3",
          "kind": "other",
          "published_at": "2026-04-28T03:22:36Z"
        },
        {
          "tag": "mac-v0.9.0",
          "kind": "other",
          "published_at": "2026-04-25T00:01:08Z"
        },
        {
          "tag": "mac-v0.8.9",
          "kind": "other",
          "published_at": "2026-04-24T11:50:48Z"
        },
        {
          "tag": "mac-v0.8.8",
          "kind": "other",
          "published_at": "2026-04-22T20:01:32Z"
        },
        {
          "tag": "mac-v0.8.7",
          "kind": "other",
          "published_at": "2026-04-21T20:46:47Z"
        },
        {
          "tag": "mac-v0.8.6",
          "kind": "other",
          "published_at": "2026-04-21T14:45:38Z"
        },
        {
          "tag": "mac-v0.8.5",
          "kind": "other",
          "published_at": "2026-04-21T12:29:40Z"
        },
        {
          "tag": "mac-v0.8.4",
          "kind": "other",
          "published_at": "2026-04-21T01:36:38Z"
        },
        {
          "tag": "mac-v0.8.2",
          "kind": "other",
          "published_at": "2026-04-19T23:34:55Z"
        },
        {
          "tag": "mac-v0.8.1",
          "kind": "other",
          "published_at": "2026-04-19T20:01:12Z"
        },
        {
          "tag": "mac-v0.8.0",
          "kind": "other",
          "published_at": "2026-04-19T16:57:32Z"
        },
        {
          "tag": "v0.7.4",
          "kind": "patch",
          "published_at": "2026-04-19T10:40:32Z"
        },
        {
          "tag": "mac-v0.7.5",
          "kind": "other",
          "published_at": "2026-04-18T20:42:39Z"
        },
        {
          "tag": "mac-v0.7.4",
          "kind": "other",
          "published_at": "2026-04-18T20:14:11Z"
        },
        {
          "tag": "mac-v0.7.3",
          "kind": "other",
          "published_at": "2026-04-18T14:24:32Z"
        },
        {
          "tag": "mac-v0.7.2",
          "kind": "other",
          "published_at": "2026-04-18T00:19:47Z"
        },
        {
          "tag": "v0.7.1",
          "kind": "patch",
          "published_at": "2026-04-17T12:10:55Z"
        },
        {
          "tag": "v0.7.0",
          "kind": "minor",
          "published_at": "2026-04-16T23:34:10Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "6e3c57a9ff95a624f1d9affa7384d32a67f359b7",
          "body": null,
          "is_bot": false,
          "headline": "feat(cli): add interactive sessions browser (#793)",
          "author_name": "Resham Joshi",
          "author_login": "iamtoruk",
          "committed_at": "2026-07-21T11:03:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2eb47181228e19d1e861c35d241179e4d322af44",
          "body": null,
          "is_bot": false,
          "headline": "sessions: correlate cross-provider work with pull requests (#792)",
          "author_name": "Resham Joshi",
          "author_login": "iamtoruk",
          "committed_at": "2026-07-21T09:50:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8e1caae33ac754b50566cae1b55f1c0e76d297bb",
          "body": "* sessions: fold subagent runs into PR attribution\n\nSidechain (subagent) session cost never reached the by-PR view, so a\nsession orchestrated on one model with subagent lanes on another showed\nonly the parent model on every PR row. Fold each sidechain's cost, calls,\nmodels, and categories into the p\n[…]\nverified. Fresh real-data drives (lifetime, single-day,\nand a NON-CONTIGUOUS day selection) re-prove no-double-count and\nreconciliation to the cent.\n\n---------\n\nCo-authored-by: reviewer <review@local>",
          "is_bot": false,
          "headline": "sessions: fold subagent runs into PR attribution (#791)",
          "author_name": "Resham Joshi",
          "author_login": "iamtoruk",
          "committed_at": "2026-07-21T03:47:23Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "45e93129f21c2e60bf3bd6cea4b71fc5923aa733",
          "body": "* sessions: attribute PR spend per turn instead of per session\n\nThe by-PR surfaces attributed a session's full cost to every PR it\nreferenced, so one orchestration session that touched many PRs rendered\nidentical full-session rows. Capture per-turn PR references during\ntranscript parsing and attribu\n[…]\n.\nThe expansion reset keyed only on the row URL set, so a period switch that\nreturned the same PRs kept a stale expansion open over changed numbers.\n\n---------\n\nCo-authored-by: reviewer <review@local>",
          "is_bot": false,
          "headline": "sessions: attribute PR spend per turn instead of per session (#790)",
          "author_name": "Resham Joshi",
          "author_login": "iamtoruk",
          "committed_at": "2026-07-21T03:44:29Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a9d4471d17c1830830ca945801898553f4c1121d",
          "body": "…ab (#788)\n\nPart 1 (src): expose two add-only, optional aggregations on the menubar\npayload's `current`, computed on the unscoped all-provider path from the\nsurviving-session parse (carried history cannot contribute, as expected).\n\n- current.pullRequests: aggregateByPr rows (top 20 by cost) plus the\n[…]\nsion counts) and the Pull requests component tests\n(table, external link, footnote, both empty states). Nav-reflow assertions in\nSidebar and App tests updated.\n\nCo-authored-by: reviewer <review@local>",
          "is_bot": false,
          "headline": "payload: spend by pull request and by branch; desktop Pull requests t…",
          "author_name": "Resham Joshi",
          "author_login": "iamtoruk",
          "committed_at": "2026-07-20T21:36:53Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "475ff502e05f4289e933efa340b7e7021166cdbb",
          "body": "* Resolve Fireworks-hosted models to friendly display names\n\nFireworks fleet models arrive as `accounts/fireworks/models/<slug>` and\nwere leaking the raw path/slug in reports and the dashboard (e.g.\n`fireworks/mode…`, `glm-5p2`). getShortModelName's path fallback now takes\nthe last path segment and \n[…]\n into a pure, tested aggregateModelTotals() keyed by the\nresolved display name so the rows merge into one. This also aligns the panel\nwith modelEfficiency, which is already keyed by getShortModelName.",
          "is_bot": false,
          "headline": "models: resolve Fireworks-hosted models to friendly display names (#787)",
          "author_name": "Rick Culpepper",
          "author_login": "therickfactr",
          "committed_at": "2026-07-20T21:22:12Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "15a381b7d2d6dc04109bfaa8dd43f735bfcf1ebb",
          "body": "…789)\n\nThe #782 titles threading added title to the sessions JSON row shape but\nmissed this emitter test's key list; caught by the first full-suite run\nsince the merge.\n\nCo-authored-by: reviewer <review@local>",
          "is_bot": false,
          "headline": "test: cli-emitters expects the title field sessions rows now carry (#…",
          "author_name": "Resham Joshi",
          "author_login": "iamtoruk",
          "committed_at": "2026-07-20T21:18:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8097052f679877b05c86d60712f3a1d7eafd3048",
          "body": "Compact one-row strip: correction rate with count, median time to first\nedit, and the top reworked file, plus one coaching note derived locally\nwith the same thresholds and copy as the CLI's workflow-insights\nbuildCoachingNotes. Decodes two new optional payload blocks\n(current.workflow and current.t\n[…]\nyload, so it follows the selected agent tab automatically.\n\nAdds unit tests for the duration formatter, note selection, model\nderivation, and payload decoding.\n\nCo-authored-by: reviewer <review@local>",
          "is_bot": false,
          "headline": "menubar: add Workflow strip after the Models section (#785)",
          "author_name": "Resham Joshi",
          "author_login": "iamtoruk",
          "committed_at": "2026-07-20T20:55:55Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4d2bcbac7f5018b5a41887e0d398ea8b3b017eb6",
          "body": "…w (#784)\n\nTwo Phase-1 desktop additions over the renderer's existing card grammar.\n\nOverview workflow card: a panel below the daily chart with two stat tiles\n(correction rate with count, median time to first edit) plus a top-rework\nline and one coaching caption. The caption is derived locally with \n[…]\n untitled rows keep the project as the\nheadline (unchanged). Title is also searchable and added as an optional\nSessionRow field so older CLIs render unchanged.\n\nCo-authored-by: reviewer <review@local>",
          "is_bot": false,
          "headline": "app: Workflow card on Overview and session titles in the Sessions vie…",
          "author_name": "Resham Joshi",
          "author_login": "iamtoruk",
          "committed_at": "2026-07-20T20:55:33Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "9676f53d0cc785469426580652ac04ec46752249",
          "body": "…#782)\n\nSame threading as prLinks: the cache-level title (last ai-title entry)\nrides onto SessionSummary in both the Claude and generic provider\npipelines, and the sessions table gains a TITLE column (truncated at 38\nchars, empty when a transcript never produced one, as subagent\ntranscripts typically do not). JSON rows carry it verbatim. Groundwork\nfor titles in the context browser, desktop Sessions view, and payload.\n\nCo-authored-by: reviewer <review@local>",
          "is_bot": false,
          "headline": "sessions: thread captured titles onto SessionSummary and the report (…",
          "author_name": "Resham Joshi",
          "author_login": "iamtoruk",
          "committed_at": "2026-07-20T20:01:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "739d0b76420ceb2575b278a235595be36db86841",
          "body": "… (#781)\n\nThe desktop app's Life tab failed with 'invalid period': the renderer\nand CLI both learned lifetime, but the electron IPC allowlist between\nthem did not. The menubar's period row also overflowed once Lifetime\njoined it; labels compact to the desktop strip's forms (7D, 30D, 6M,\nLife). Perio\n[…]\ne label\nchange is safe. Follow-up worth doing: derive the IPC allowlist from\nthe renderer's period module so a new period cannot miss one layer of\nthree again.\n\nCo-authored-by: reviewer <review@local>",
          "is_bot": false,
          "headline": "fix: Lifetime period end to end in the desktop app and menubar labels…",
          "author_name": "Resham Joshi",
          "author_login": "iamtoruk",
          "committed_at": "2026-07-20T19:56:27Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8676f0da01255bb4f94e8e3bacaeedad32e22f8b",
          "body": "The rich session capture (#758) stores every PR URL a transcript\nreferences, but nothing displayed it. codeburn sessions --by-pr now\ngroups spend by pull request: cost, savings, sessions, calls, and the\ndate span per PR, sorted by cost, with a GitHub-shortened label and\njson output. Attribution is b\n[…]\nrows are never mistaken for a\ngrand total. prLinks now ride from the cached file onto SessionSummary\nin both the Claude pipeline and the generic provider path.\n\nCo-authored-by: reviewer <review@local>",
          "is_bot": false,
          "headline": "sessions: spend per pull request via --by-pr (#780)",
          "author_name": "Resham Joshi",
          "author_login": "iamtoruk",
          "committed_at": "2026-07-20T19:28:10Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "00160275cd4d73f9eef359853a52556be7f5fd19",
          "body": "The Update badge previously replaced only the menubar (via the CLI's\nmenubar --force installer), and the CLI banner only copied the update\ncommand to the clipboard. One click now runs the whole sequence: update\nthe CLI in place through the package manager it was installed with\n(brew upgrade, or npm \n[…]\npears for CLI-only updates, and the banner's primary action is Update\nnow with the copyable command kept as secondary. Six resolution tests,\nmutation-verified.\n\nCo-authored-by: reviewer <review@local>",
          "is_bot": false,
          "headline": "menubar: one-click update for the CLI and the app together (#778)",
          "author_name": "Resham Joshi",
          "author_login": "iamtoruk",
          "committed_at": "2026-07-20T17:17:31Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ae1d1c026b10069d31b36e1b2aad8216541e8813",
          "body": "The update Download button opened the GitHub release page; it now\ndownloads the right artifact for the running platform directly: arm64\nor x64 dmg on macOS (preload newly exposes process.arch), the Setup exe\non Windows. Linux keeps the release page since it ships three formats\nand the user picks. Unknown platforms and preloads without arch fall\nback to the page. URL mapping is unit-tested per platform.\n\nCo-authored-by: reviewer <review@local>",
          "is_bot": false,
          "headline": "app: Download button direct-downloads the update asset (#777)",
          "author_name": "Resham Joshi",
          "author_login": "iamtoruk",
          "committed_at": "2026-07-20T17:02:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "101574a05fbea06773b5b99b9d32f3152a34bbb6",
          "body": "Co-authored-by: reviewer <review@local>",
          "is_bot": false,
          "headline": "docs: present 0.9.19 directly in the changelog (#776)",
          "author_name": "Resham Joshi",
          "author_login": "iamtoruk",
          "committed_at": "2026-07-20T16:45:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d96149b60f5bad1aac5f46ab09a14c0ecd40c5c8",
          "body": "The 1ms-heartbeat stress test fails under saturated full-suite runs when\nfilesystem starvation makes guard operations report unavailable, which\nthe fence correctly treats as fail-closed. Isolation runs, the process\ntests, and mutation checks all hold. Retries go 2 to 5 and iterations\n300 to 120: a m\n[…]\ny attempt (six percent per\nverify compounds to a per-attempt pass chance under a tenth of a\npercent), while transient starvation now has five chances to clear.\n\nCo-authored-by: reviewer <review@local>",
          "is_bot": false,
          "headline": "test: widen the fence stress test's flake shield (#775)",
          "author_name": "Resham Joshi",
          "author_login": "iamtoruk",
          "committed_at": "2026-07-20T16:39:05Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "af291ae6216af08c2cf8890e79d370f8297187e2",
          "body": "0.9.18 was packaged from the pre-fix commit (364eed4) before the final\nnine commits landed; npm versions are immutable, so the corrected\nrelease ships as 0.9.19 everywhere. The changelog entry carries over\nwith a supersede note.\n\nCo-authored-by: reviewer <review@local>",
          "is_bot": false,
          "headline": "release: 0.9.19 (#774)",
          "author_name": "Resham Joshi",
          "author_login": "iamtoruk",
          "committed_at": "2026-07-20T16:35:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "10ac583fd4b7ea46aa4e7fc824dacadd45f322c8",
          "body": "….9.18 (#773)\n\nThe changelog entry predates the final merges; it now covers the\nno-data rendering, the cross-process refresh gate, the straddle guard,\nthe turn-attribution and insights accuracy fixes, the 10-year retention,\nand the small cache/currency fixes. README download badges move from\n0.9.16 to 0.9.18.\n\nCo-authored-by: reviewer <review@local>",
          "is_bot": false,
          "headline": "docs: complete 0.9.18 notes for the post-cut train, point README at 0…",
          "author_name": "Resham Joshi",
          "author_login": "iamtoruk",
          "committed_at": "2026-07-20T16:29:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1f5fe6c5ec8464ffdb70413e198534a3cf402438",
          "body": "Under a saturated full-suite run, fd/CPU starvation can make the\ntakeover-guard fs ops report unavailable, which the fence correctly\ntreats as fail-closed; the 1ms-heartbeat stress test misread that as the\nserialization race. Retries rescue environmental noise only: the real\nrace fails roughly 6 percent per verify across 300 verifies, so a\nmutated build cannot pass any attempt.",
          "is_bot": false,
          "headline": "test: retry-shield the fence-heartbeat stress test against fs starvation",
          "author_name": "reviewer",
          "author_login": null,
          "committed_at": "2026-07-20T16:25:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "be748c81aab1821ace0688d788982fe4746e775e",
          "body": "…ge id (#772)\n\nThe incremental-append path groups the appended region before the file's\nown cached keys join the dedup set, so a streamed assistant id restated\nacross the append boundary counted twice, and the boundary merge could\nsplice it into the wrong turn (reproduced on real image-heavy session\n[…]\nout 0.3 percent of real files) and bounded to one file per\nrefresh. Regression test uses the cold-reparse oracle; mutation-verified\nagainst the unguarded code.\n\nCo-authored-by: reviewer <review@local>",
          "is_bot": false,
          "headline": "parser: full re-parse when an appended region restates a cached messa…",
          "author_name": "Resham Joshi",
          "author_login": "iamtoruk",
          "committed_at": "2026-07-20T16:22:52Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e27fe36bd5173587c7e8ac57fded4559ea8d8642",
          "body": "…ransaction (#743)\n\n* cache: strict cross-process gate for the warm session-cache refresh transaction (#645)\n\n* lock: serialize the fence against the owner's own heartbeat\n\nverifyStillOwner and the heartbeat tick both take the takeover guard;\nwithout in-process serialization the fence could observe \n[…]\n at heartbeatMs 1, mutation-\nverified against the unserialized code.\n\n---------\n\nCo-authored-by: Aditya Vikram Singh <247195684+avs-io@users.noreply.github.com>\nCo-authored-by: reviewer <review@local>",
          "is_bot": false,
          "headline": "cache: strict cross-process gate for the warm session-cache refresh t…",
          "author_name": "Aditya Vikram Singh",
          "author_login": "avs-io",
          "committed_at": "2026-07-20T16:06:35Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "17a23ead4059b1575f295b9ab15fa5b9f13026b8",
          "body": "…inflation (#762)\n\n* daily-cache: coverage-gated carry on re-derive + single-slice turn attribution\n\nP2: a tz-change re-derive no longer double-counts turns whose day bucket\nmoved across midnight — secondary slices are carried only outside the\nprovider's fresh coverage (floor widened by one day on t\n[…]\ntly one slice\n(majority-calls provider, tie broken by first call), restoring\nslice-sums equal day-counts on fresh builds, with its regression tests.\n\n---------\n\nCo-authored-by: reviewer <review@local>",
          "is_bot": false,
          "headline": "daily-cache: fix tz-change double-count and multi-provider turn-stat …",
          "author_name": "ozymandiashh",
          "author_login": "ozymandiashh",
          "committed_at": "2026-07-20T15:57:41Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d8158afb1be2464e3161ed8b415ad600cd8b4b30",
          "body": "The one cache module still hardcoding ~/.cache/codeburn; every other\ncache (session, daily, codex, pricing) honors the relocation override,\nso a user moving the cache dir kept getting this single file in the\ndefault location. Found by the pre-release functional sweep.",
          "is_bot": false,
          "headline": "currency: honor CODEBURN_CACHE_DIR for the exchange-rate cache (#766)",
          "author_name": "Resham Joshi",
          "author_login": "iamtoruk",
          "committed_at": "2026-07-20T15:28:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dbd93fee51c4d155139f6113aeb6a130d1105d7d",
          "body": "* fix(app,dash): render pre-history days as no data, not a currency zero\n\nDays before the first recorded day in history.daily were painted as a real\n0.00/0 calls in the daily activity heatmap and the daily spend charts. That\nzero is unknown, not measured, so those cells and bars now read \"No data\nre\n[…]\never drop a real first-day bucket, and an\nall-zero series lands in the established empty state.\n\nStackedBars no-data columns expose their state via aria-label, not only\na title on a non-focusable div.",
          "is_bot": false,
          "headline": "app,dash: render pre-history days as no data, not a currency zero (#765)",
          "author_name": "Resham Joshi",
          "author_login": "iamtoruk",
          "committed_at": "2026-07-20T15:03:24Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b30818138ea2bda3d3b5dee813f3a3a41ee607b4",
          "body": "…(#764)\n\nThree review leftovers plus one inconsistency found while fixing them.\n\ncomputePace returns undefined for a non-finite usedFraction instead of\nletting NaN sail through the clamp into every pace field.\n\nDaily-cache retention goes from 730 days to 3650: the cache is the only\ndurable record of\n[…]\nper 730\ndense days).\n\nThe vercel-gateway dashboard-range test pins a relative day instead of\n2026-06-01, which would have started failing once the rolling 6-month\nwindow moved past it around December.",
          "is_bot": false,
          "headline": "prerelease: quota NaN guard, 10-year daily retention, test date bomb …",
          "author_name": "Resham Joshi",
          "author_login": "iamtoruk",
          "committed_at": "2026-07-20T14:37:56Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "db8ef9b4666e844641732be31fe38aca6b4f40d3",
          "body": "…ce (#763)\n\nFive verified findings from the #756 review, each with a regression test:\n\nCorrections now count only follow-up prompts. The session-opening prompt\ncannot be correcting this assistant, however correction-shaped its task\ntext reads, and the revert pattern no longer matches ordinary 'rever\n[…]\nerage value now reaches the payload as null, never as a\nfabricated 100%.\n\nAlso shares the one-shot minimum-edit-turns threshold between\nworstOneShotCategory and the coaching gate so they cannot drift.",
          "is_bot": false,
          "headline": "insights: close the post-merge review findings on workflow intelligen…",
          "author_name": "Resham Joshi",
          "author_login": "iamtoruk",
          "committed_at": "2026-07-20T14:26:08Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "364eed44e80aa0ab9ffbcb8713f5e576eb044e22",
          "body": "chore: release 0.9.18",
          "is_bot": false,
          "headline": "Merge pull request #761 from getagentseal/chore/release-0.9.18",
          "author_name": "Resham Joshi",
          "author_login": "iamtoruk",
          "committed_at": "2026-07-20T14:18:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8386df5f3c5d025b99b214d81071d875ad318176",
          "body": null,
          "is_bot": false,
          "headline": "chore: release 0.9.18",
          "author_name": "iamtoruk",
          "author_login": "iamtoruk",
          "committed_at": "2026-07-20T14:17:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "76744124aba6fdd1df6493d4bd4a3a091e438682",
          "body": "fix(report): CLI totals read the durable daily cache, matching the menubar exactly",
          "is_bot": false,
          "headline": "Merge pull request #760 from getagentseal/fix/cli-durable-totals",
          "author_name": "Resham Joshi",
          "author_login": "iamtoruk",
          "committed_at": "2026-07-20T14:14:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "92843bc6470cb04a86d97601c64f109dd5e777af",
          "body": "fix(clients): display CLI values verbatim, align period windows, true Lifetime tab",
          "is_bot": false,
          "headline": "Merge pull request #759 from getagentseal/fix/client-math-parity",
          "author_name": "Resham Joshi",
          "author_login": "iamtoruk",
          "committed_at": "2026-07-20T14:13:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dea61bad4e41d49c6f8c2df2a151715c1bf76e15",
          "body": "…nubar exactly",
          "is_bot": false,
          "headline": "fix(report): CLI totals read the durable daily cache, matching the me…",
          "author_name": "iamtoruk",
          "author_login": "iamtoruk",
          "committed_at": "2026-07-20T13:33:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6eb8797efab2fe1499e4a4b0cdbf9e04415f3fcc",
          "body": "…ows across app/dash/menubar",
          "is_bot": false,
          "headline": "fix(clients): display CLI-computed values verbatim, align period wind…",
          "author_name": "iamtoruk",
          "author_login": "iamtoruk",
          "committed_at": "2026-07-20T13:26:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ba56ad72f58cba0368f42764c10301f4f35f7b44",
          "body": "feat(capture): parse-time capture of branch, LOC deltas, interruptions, titles, PR links",
          "is_bot": false,
          "headline": "Merge pull request #758 from getagentseal/feat/rich-session-capture",
          "author_name": "Resham Joshi",
          "author_login": "iamtoruk",
          "committed_at": "2026-07-20T13:03:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8ced2ed47f8afc590533a3d6aca6df8ca9b81745",
          "body": "…s, titles, PR links",
          "is_bot": false,
          "headline": "feat(capture): parse-time capture of branch, LOC deltas, interruption…",
          "author_name": "iamtoruk",
          "author_login": "iamtoruk",
          "committed_at": "2026-07-20T12:56:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f32c00d2b17bee2e0017ece8997cc2ef57c7d8f6",
          "body": "…t, file churn, coverage) + dash wire-up (#756)\n\n* feat(insights): workflow intelligence (corrections, time-to-first-edit, file churn, coverage) + dash wire-up\n\n* menubar: propagate workflow-intelligence fields onto the cache-backed headline\n\nThe carry-forward headline (#755) serves totals from the \n[…]\nated, so they silently defaulted on the all-provider\npath (pricingCoverage rendered a dishonest 1.0). Propagate them like the\nother scan-only fields and pin it with a carried-headline regression\ntest.",
          "is_bot": false,
          "headline": "feat(insights): workflow intelligence (corrections, time-to-first-edi…",
          "author_name": "Resham Joshi",
          "author_login": "iamtoruk",
          "committed_at": "2026-07-20T12:47:46Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e99ee4bf37ffbe1b0a3e8eada81bdf8dafe59ce1",
          "body": "Claude Code deletes session transcripts after cleanupPeriodDays (default\n30) at startup. Daily totals survive in the daily cache, but per-session\ndetail older than the cutoff is unrecoverable, and most users learn this\nonly after losing months of history. Doctor now reports the effective\nretention and, below one year, warns with the exact settings.json edit\nthat preserves transcripts.",
          "is_bot": false,
          "headline": "doctor: surface Claude Code transcript retention (#757)",
          "author_name": "Resham Joshi",
          "author_login": "iamtoruk",
          "committed_at": "2026-07-20T12:25:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "380be66b4fb7a19a57381fa3accb502966e74180",
          "body": "Re-apply the CLI/dashboard Lifetime split from #391/#416 on current main.\n\n- add lifetime as a first-class period (all stays last 6 months)\n- wire period through cli-date, dashboard key 6, and CLI commands\n- refresh cli-date and cli-json-daily regression coverage\n\nPart of #389. Supersedes #416.",
          "is_bot": false,
          "headline": "feat(cli): add lifetime period for CLI and dashboard (#753)",
          "author_name": "Monish Khandelwal",
          "author_login": "0monish",
          "committed_at": "2026-07-20T12:24:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "44df54774845458019a23f45e1acfc6c90c8292d",
          "body": "…ones (#689)\n\n* test(electron): isolate dev-resolution fixtures via CODEBURN_DEV_REPO_ROOT\n\nRework of the #681 fix per review: instead of stubbing the real repo\ndist/cli.js with snapshot-restore, the Vite-dev resolution branch gains a\nCODEBURN_DEV_REPO_ROOT override (matching the CODEBURN_PATH_DIRS \n[…]\n whenever a build had\nrun, so the toBeNull() assertion depended on the absence of a gitignored\nartifact. The override-set tests already prove the new branch and the\nnon-Vite test covers the null path.",
          "is_bot": false,
          "headline": "test(electron): make dev-resolution tests self-sufficient on fresh cl…",
          "author_name": "ozymandiashh",
          "author_login": "ozymandiashh",
          "committed_at": "2026-07-20T12:23:28Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "bcef34f08174a4bc75db318ecf2d2f38e6b4b1f8",
          "body": "…tion, run-out ETA (#726) (#728)\n\nCo-authored-by: Aditya Vikram Singh <247195684+avs-io@users.noreply.github.com>",
          "is_bot": false,
          "headline": "menubar: linear pace on Codex quota windows — deficit/reserve, projec…",
          "author_name": "Aditya Vikram Singh",
          "author_login": "avs-io",
          "committed_at": "2026-07-20T12:21:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b8435073eef59e6f6d7d126483377cd921e17153",
          "body": "…d linear pace (#725 Part 1) (#740)\n\nCo-authored-by: Aditya Vikram Singh <247195684+avs-io@users.noreply.github.com>",
          "is_bot": false,
          "headline": "quota: provider-agnostic window model with provenance, merge rule, an…",
          "author_name": "Aditya Vikram Singh",
          "author_login": "avs-io",
          "committed_at": "2026-07-20T12:21:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "92b2b5ef392daba9d03e11dfbdaddd86eabe0c58",
          "body": "Reuse one concrete six-month scan for interactive history and selected-period totals. This restores network-backed providers, removes concurrent refresh scans, and keeps non-interactive reports scoped to their requested period.",
          "is_bot": false,
          "headline": "fix(dashboard): Bound Daily Activity scans (#727)",
          "author_name": "ihearttokyo",
          "author_login": "ihearttokyo",
          "committed_at": "2026-07-20T12:21:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7f2739e130262ed1bba0c8f6d34c6ae127a2d0ab",
          "body": "…v14) (#755)\n\n* daily-cache: never lose history the sources can no longer re-derive (v14)\n\nSession files are ephemeral (Claude Code deletes transcripts after ~30\ndays), so a cached day whose sources are gone exists nowhere else. Every\ninvalidation path (schema bump, savings-config change, timezone c\n[…]\nuites 71/71 green, tsc clean. Valid-input behavior unchanged except the\nprototype-key reclassification above.\n\n---------\n\nCo-authored-by: ozymandiashh <234437643+ozymandiashh@users.noreply.github.com>",
          "is_bot": false,
          "headline": "daily-cache: never lose history the sources can no longer re-derive (…",
          "author_name": "Resham Joshi",
          "author_login": "iamtoruk",
          "committed_at": "2026-07-20T12:21:22Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2312fd2eb0f4231ed3735595c28dee11f5a1e883",
          "body": "fix(yield): case-insensitive canonical repo grouping via realpathSync.native",
          "is_bot": false,
          "headline": "Merge pull request #751 from ozymandiashh/pr/714-delta",
          "author_name": "Resham Joshi",
          "author_login": "iamtoruk",
          "committed_at": "2026-07-20T00:25:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "49b377616bfd8507157f1020360f36293f13ac04",
          "body": "feat(kimicode): Kimi Code CLI provider, parse ~/.kimi-code wire sessions",
          "is_bot": false,
          "headline": "Merge pull request #750 from ozymandiashh/pr/747-kimicode",
          "author_name": "Resham Joshi",
          "author_login": "iamtoruk",
          "committed_at": "2026-07-19T23:27:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3472885629c41725b40c19c0780ecce148b067bf",
          "body": "perf(parser): single-pass field extraction in the large-line JSONL scanner",
          "is_bot": false,
          "headline": "Merge pull request #752 from getagentseal/perf/single-pass-scanner",
          "author_name": "Resham Joshi",
          "author_login": "iamtoruk",
          "committed_at": "2026-07-19T08:24:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "56ea38917f763cd12a0acb0a42a56f34bd36138c",
          "body": "…anner",
          "is_bot": false,
          "headline": "perf(parser): single-pass field extraction in the large-line JSONL sc…",
          "author_name": "iamtoruk",
          "author_login": "iamtoruk",
          "committed_at": "2026-07-19T00:23:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2c9871b2f2244a8b5d97a997af1688e4153df04e",
          "body": "….native\n\nFollow-up to #719, closing the two deltas flagged in the #714 discussion:\n\n- fs.realpathSync preserves the caller's path casing on case-insensitive\n  filesystems (macOS APFS, Windows), so the same repo reached through\n  differently cased paths produced distinct canonical keys and split int\n[…]\n accepted residual: a main repo moved on disk after\n  'git worktree add' leaves git's linked-worktree metadata stale, so its\n  worktrees may not unify; that is git-state staleness, not a grouping bug.",
          "is_bot": false,
          "headline": "fix(yield): case-insensitive canonical repo grouping via realpathSync…",
          "author_name": "ozymandiashh",
          "author_login": "ozymandiashh",
          "committed_at": "2026-07-19T00:12:03Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "023259584731c6b8da787981ef9a83742d07501b",
          "body": "…double count",
          "is_bot": false,
          "headline": "docs(kimicode): subagent accounting verified at kimi-code source, no …",
          "author_name": "ozymandiashh",
          "author_login": "ozymandiashh",
          "committed_at": "2026-07-19T00:11:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2b95aef7e56b6c4efb8c8b565038b02f0ff6fabc",
          "body": "…ons (#747)\n\nAdds a provider for Kimi Code CLI (MoonshotAI/kimi-code, the successor of\nkimi-cli), reading ~/.kimi-code/sessions/wd_*/session_*/: state.json for\nsession metadata and per-agent agents/<id>/wire.jsonl event streams.\n\n- Usage from usage.record events: inputOther->input, output->output,\n \n[…]\ns\n  so a failed turn cannot bleed its tools into the next row.\n- KIMI_CODE_HOME override, eager registration, PROVIDER_ENV_VARS and\n  PROVIDER_PARSE_VERSIONS entries, probeRoots for doctor, docs page.",
          "is_bot": false,
          "headline": "feat(kimicode): Kimi Code CLI provider, parse ~/.kimi-code wire sessi…",
          "author_name": "ozymandiashh",
          "author_login": "ozymandiashh",
          "committed_at": "2026-07-18T23:52:37Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "916119da2197373edd2fdee86ca8fd69bbaee5cc",
          "body": "perf(parser): incremental parse of append-grown session files",
          "is_bot": false,
          "headline": "Merge pull request #749 from getagentseal/perf/incremental-append-parse",
          "author_name": "Resham Joshi",
          "author_login": "iamtoruk",
          "committed_at": "2026-07-18T23:36:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8892553d3a464cdb64badf035d7990b389ce2201",
          "body": "perf(app): spawn concurrency cap, background prefetch, Today default",
          "is_bot": false,
          "headline": "Merge pull request #748 from getagentseal/fix/app-spawn-storm",
          "author_name": "Resham Joshi",
          "author_login": "iamtoruk",
          "committed_at": "2026-07-18T23:36:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f26bf69f886baeb29bdb36d1c4e808852c90d6cf",
          "body": "…efault to today",
          "is_bot": false,
          "headline": "perf(app): cap CLI spawn concurrency, background-priority prefetch, d…",
          "author_name": "iamtoruk",
          "author_login": "iamtoruk",
          "committed_at": "2026-07-18T23:28:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8326aee4a6225c8ac37753f81a1e2a8841359e1a",
          "body": "…tead of byte 0",
          "is_bot": false,
          "headline": "perf(parser): parse appended session files from the cached offset ins…",
          "author_name": "iamtoruk",
          "author_login": "iamtoruk",
          "committed_at": "2026-07-18T23:26:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d00b33b13d3a3c5ea05b84044bb3da3550ca4fdc",
          "body": "fix(telemetry): cap cli_error per kind per day, flush app_close on quit",
          "is_bot": false,
          "headline": "Merge pull request #746 from ozymandiashh/pr/741-robustness",
          "author_name": "Resham Joshi",
          "author_login": "iamtoruk",
          "committed_at": "2026-07-18T21:32:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5a8a1d0fa4bb4f10649a4600306b7a3852325491",
          "body": "fix(classifier): attribute skills to skillBreakdown regardless of turn category",
          "is_bot": false,
          "headline": "Merge pull request #745 from ozymandiashh/pr/741-skills",
          "author_name": "Resham Joshi",
          "author_login": "iamtoruk",
          "committed_at": "2026-07-18T21:32:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "db39157ea6cf51d703183e29d1a3befc4d02d5fd",
          "body": "Two robustness fixes from the #741 telemetry audit:\n\n- cli_error had no rate limit: one install emitted 804 timeout events in a\n  single day (56% of all events ever received). track() now caps cli_error\n  at 20 per kind per calendar day. The day and per-kind counts persist in\n  the telemetry state f\n[…]\na synchronous failure can neither\n  skip the flush nor wedge quitting, and a full queue evicts its oldest\n  event rather than dropping app_close. Disabled or not-onboarded telemetry\n  quits instantly.",
          "is_bot": false,
          "headline": "fix(telemetry): cap cli_error per kind per day, flush app_close on quit",
          "author_name": "ozymandiashh",
          "author_login": "ozymandiashh",
          "committed_at": "2026-07-18T20:06:30Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "906cb2d550165a229c556d2617caa8a76ce89eec",
          "body": "feat(quickdesk): Amazon Quick Desktop provider (~/.quickwork)",
          "is_bot": false,
          "headline": "Merge pull request #735 from ozymandiashh/feat/quickdesk-provider",
          "author_name": "Resham Joshi",
          "author_login": "iamtoruk",
          "committed_at": "2026-07-18T19:57:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "56e836fa9e9c28417fa7c7857e3f9533b7e52844",
          "body": "…n category\n\nSkill attribution was gated on the turn classifying as 'general', but\nclassifyByToolPattern checks hasSkill last, so any turn invoking the Skill\ntool alongside Read/Bash/Edit/MCP got a real category and its skill was\nsilently dropped. Skill turns virtually always carry other tools, whic\n[…]\ntegory is now set for any turn with Skill tool_use; category assignment\nis untouched. The claude parse version is bumped so cached session summaries\n(which lack skill attribution) re-parse on upgrade.",
          "is_bot": false,
          "headline": "fix(classifier): attribute skills to skillBreakdown regardless of tur…",
          "author_name": "ozymandiashh",
          "author_login": "ozymandiashh",
          "committed_at": "2026-07-18T19:54:49Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1850276bd1e52c19e573951a580014f0be43aced",
          "body": "Per-provider usage capture, placeholder guard, path-id display fallback",
          "is_bot": false,
          "headline": "Merge pull request #742 from getagentseal/fix/usage-snapshot-providers",
          "author_name": "Resham Joshi",
          "author_login": "iamtoruk",
          "committed_at": "2026-07-18T11:41:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b71ec34a21d98ee6bc2c6898087323ec8852a43a",
          "body": "… display fallback",
          "is_bot": false,
          "headline": "fix(usage): per-provider snapshot capture, placeholder guard, path-id…",
          "author_name": "iamtoruk",
          "author_login": "iamtoruk",
          "committed_at": "2026-07-18T10:37:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9d5f745b5b1ea56494b97eda8492717dfbe6e42b",
          "body": "docs: desktop release flow + Linux build targets",
          "is_bot": false,
          "headline": "Merge pull request #739 from getagentseal/docs/desktop-release-flow",
          "author_name": "Resham Joshi",
          "author_login": "iamtoruk",
          "committed_at": "2026-07-17T22:09:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b8db765fd107b15dede99165da463d864383d97d",
          "body": "RELEASING.md: the desktop app is released manually under desktop-v<version>\ntags (build on macOS, gh release upload --clobber); no CI yet.\n\nDISTRIBUTION.md: document building deb/rpm and both arches from a macOS host,\nand that the rpm target needs 'brew install rpm' (rpmbuild) — it emits\ncodeburn-desktop-<version>.x86_64.rpm, the name the website links.",
          "is_bot": false,
          "headline": "docs: desktop release flow + widened Linux build targets",
          "author_name": "iamtoruk",
          "author_login": "iamtoruk",
          "committed_at": "2026-07-17T22:00:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dafe19e8152ad5c7e9a173b1fd79fea5ae14d98a",
          "body": "fix: clean build stamp + splash without hash + About update check",
          "is_bot": false,
          "headline": "Merge pull request #738 from getagentseal/fix/stamp-and-update-button",
          "author_name": "Resham Joshi",
          "author_login": "iamtoruk",
          "committed_at": "2026-07-17T21:30:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0a76626d21b8260cdffc0f22f85ee3a90fca0c23",
          "body": "…dates\n\n- build stamp ignores the pricing-snapshot files the build regenerates,\n  so a release checkout no longer shows a false -dirty\n- splash shows just the flame, CodeBurn, and the version (dropped the\n  commit-hash line); the clean build id stays in About only\n- About 'Check for updates' uses the in-app checker and reports inline\n  ('You're on the latest' / 'Update available: X · Download') instead\n  of blindly opening the releases page\n\n392/392.",
          "is_bot": false,
          "headline": "fix(app): clean build stamp, splash without hash, About checks for up…",
          "author_name": "iamtoruk",
          "author_login": "iamtoruk",
          "committed_at": "2026-07-17T21:30:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8fdace7292dc6df91b34a88dace092edc9c31f6c",
          "body": "brand: restore binary 0101 flame across all surfaces",
          "is_bot": false,
          "headline": "Merge pull request #737 from getagentseal/brand/binary-restore",
          "author_name": "Resham Joshi",
          "author_login": "iamtoruk",
          "committed_at": "2026-07-17T21:16:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "69ab1fc96c459a604d8ca64fefa952368438ca07",
          "body": "feat: telemetry captures model x purpose, MCP servers, skills",
          "is_bot": false,
          "headline": "Merge pull request #736 from getagentseal/feat/telemetry-usage-detail",
          "author_name": "Resham Joshi",
          "author_login": "iamtoruk",
          "committed_at": "2026-07-17T21:16:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a6c475b6571b6f108221908af066f267a191b06b",
          "body": "… skills\n\nThe once-daily usage_snapshot now includes each top model's primary\ntask category (which model for what purpose, one cheap by-model call\nper day), plus MCP servers and skills used (names + coarse usage\nbuckets). Names + buckets only, no prompts/paths/dollars; graceful\ndegradation if the by-model fetch fails. /telemetry page updated.",
          "is_bot": false,
          "headline": "feat(app): usage telemetry captures model x purpose, MCP servers, and…",
          "author_name": "iamtoruk",
          "author_login": "iamtoruk",
          "committed_at": "2026-07-17T21:15:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6b8d8eb7b1c5521114b0c5fa6072d67d6172cd92",
          "body": "Per owner decision: the binary 'burning code' flame is the mark\neverywhere, matching the app's identity as a code-cost tool. Desktop\napp icon + FlameMark (splash/sidebar/About/dock), menubar dock icon,\nbrand logo, and local dashboard all use the binary flame.",
          "is_bot": false,
          "headline": "brand: restore binary 0101 flame across all surfaces",
          "author_name": "iamtoruk",
          "author_login": "iamtoruk",
          "committed_at": "2026-07-17T21:14:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bdb1475251a19c79ae93cb1777b2f7274af11fbb",
          "body": "…ssions and metrics (#707)\n\nAdds an eager provider for Amazon Quick Desktop (aws.amazon.com/quick/desktop),\nwhich stores local data under ~/.quickwork. Usage source of truth is the\nper-day EMF metrics JSONL (Model, InputTokens, OutputTokens, CostUSD,\nsession_id); real CostUSD passes through the cach\n[…]\nUICKWORK_HOME; schema-tolerant (sqlite_master and PRAGMA introspection,\nper-line JSONL error isolation). The on-disk schema is reverse-engineered and\ndocumented as such in docs/providers/quickdesk.md.",
          "is_bot": false,
          "headline": "feat(quickdesk): Amazon Quick Desktop provider, parse ~/.quickwork se…",
          "author_name": "ozymandiashh",
          "author_login": "ozymandiashh",
          "committed_at": "2026-07-17T21:02:01Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2a01273b7a8801705293d7b2f5871cce2a9c950f",
          "body": "chore(app): desktop 0.9.17",
          "is_bot": false,
          "headline": "Merge pull request #734 from getagentseal/chore/desktop-0.9.17",
          "author_name": "Resham Joshi",
          "author_login": "iamtoruk",
          "committed_at": "2026-07-17T20:56:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7946b4f369e79090fc30f41d1acd9022f5ec7742",
          "body": "Patch release: Windows bundled-CLI fix (was not-found on 100% of\nWindows), enriched cli_error telemetry, and the unified solid-flame\nbrand. CLI/menubar stay 0.9.16 (no changes needing an npm/menubar\nrepublish; the desktop bundles current main's CLI).",
          "is_bot": false,
          "headline": "chore(app): desktop 0.9.17",
          "author_name": "iamtoruk",
          "author_login": "iamtoruk",
          "committed_at": "2026-07-17T20:55:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "75de4ef07cedabc0e5d6ef2fb0612262193280ce",
          "body": "…elemetry\n\nfix: resolve bundled CLI on Windows (100% not-found) + enrich cli_error telemetry",
          "is_bot": false,
          "headline": "Merge pull request #733 from getagentseal/fix/windows-cli-and-error-t…",
          "author_name": "Resham Joshi",
          "author_login": "iamtoruk",
          "committed_at": "2026-07-17T20:52:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "707d621d7ab147940c000901fafa7e9a24e4d322",
          "body": "path.startsWith('/') POSIX guard rejected the Windows bundled-CLI path\n(C:\\...\\launch.js), so 100% of Windows installs got not-found\n(confirmed in telemetry: 84 events, all win32/x64). Use path.isAbsolute\neverywhere. cli_error now carries {cmd, kind, detail?} for\nself-diagnosing errors, never paths/args/stderr.",
          "is_bot": false,
          "headline": "fix(app): resolve bundled CLI on Windows + enrich cli_error telemetry",
          "author_name": "iamtoruk",
          "author_login": "iamtoruk",
          "committed_at": "2026-07-17T20:51:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d2ff8a72f69d53989c6e73dc3e17a0778e1987b4",
          "body": "brand: original solid flame across all surfaces",
          "is_bot": false,
          "headline": "Merge pull request #732 from getagentseal/brand/solid-flame-all",
          "author_name": "Resham Joshi",
          "author_login": "iamtoruk",
          "committed_at": "2026-07-17T20:34:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "862206ea81f8e87df5ff463caabbec207923a15b",
          "body": "Retires the binary-digit flame (which muddied below ~256px) in favor\nof the original solid flame everywhere: desktop app icon + FlameMark\n(splash, sidebar, About, dock), menubar dock icon, brand logo. One\nconsistent mark that stays crisp at every size, matching the website\nfavicon and local dashboard.",
          "is_bot": false,
          "headline": "brand: original solid flame across all surfaces",
          "author_name": "iamtoruk",
          "author_login": "iamtoruk",
          "committed_at": "2026-07-17T20:33:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9df2b81deda838f1ad23145a143d2bbcf074461d",
          "body": "brand: solid flame for the local dashboard mark",
          "is_bot": false,
          "headline": "Merge pull request #731 from getagentseal/brand/dash-solid-flame",
          "author_name": "Resham Joshi",
          "author_login": "iamtoruk",
          "committed_at": "2026-07-17T20:29:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8af30ea3235b45eea904962f6ade506760090e29",
          "body": "The dashboard header logo and favicon render at 24px where the binary\nflame muddies; use the solid flame like the site favicon. Menubar dock\nicon keeps the binary squircle (large-icon context).",
          "is_bot": false,
          "headline": "brand: local dashboard uses the solid flame mark (crisp at 24px)",
          "author_name": "iamtoruk",
          "author_login": "iamtoruk",
          "committed_at": "2026-07-17T20:28:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "15cd9af1b8aae367239a7fbb1ad0faeb5a180ddf",
          "body": "brand: binary-flame logo for local dashboard + menubar icon",
          "is_bot": false,
          "headline": "Merge pull request #730 from getagentseal/brand/binary-flame-logos",
          "author_name": "Resham Joshi",
          "author_login": "iamtoruk",
          "committed_at": "2026-07-17T20:11:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "03f597a334aeac3480b6f98146f8921ae49d15e2",
          "body": "Local web dashboard favicon + header (dash/public/codeburn-logo.png)\nand the menubar dock/app-icon source (assets/menubar-logo.png,\nassets/logo.png) now use the binary-flame mark, matching the desktop\napp and website. The menu-bar status item stays monochrome-template by\nApple convention; the new dock icon lands on the next menubar release.",
          "is_bot": false,
          "headline": "brand: binary-flame logo for local dashboard and menubar app icon",
          "author_name": "iamtoruk",
          "author_login": "iamtoruk",
          "committed_at": "2026-07-17T20:10:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "eb513d3f68e5d24517685610d2db1f74aedef4d5",
          "body": "…#729)\n\nThe AppImage-only Linux build hit users with a no-application-installed\nerror on double-click, because AppImages do not self-register and need\nchmod plus libfuse2 on newer distros. Add deb and rpm electron-builder\ntargets so Linux users get a native install that lands in the app menu\nwith no\n[…]\n.\n\nREADME hero grid now lists Debian/.deb, Fedora/.rpm, and AppImage\nalongside the macOS and Windows buttons, and the desktop release notes\nexplain the deb/rpm path plus the AppImage FUSE requirement.",
          "is_bot": false,
          "headline": "desktop: ship .deb and .rpm for Linux, surface all download targets (…",
          "author_name": "Resham Joshi",
          "author_login": "iamtoruk",
          "committed_at": "2026-07-17T19:53:58Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "688467e86fab84987f266f468da9ad67f5b16b88",
          "body": "… the Plan tab (#723) (#724)\n\nCo-authored-by: Aditya Vikram Singh <247195684+avs-io@users.noreply.github.com>",
          "is_bot": false,
          "headline": "menubar: surface Codex limit-reset credits (count and next expiry) in…",
          "author_name": "Aditya Vikram Singh",
          "author_login": "avs-io",
          "committed_at": "2026-07-17T12:58:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ca46845e2ba1bc1366773ea95c5cfbcfc5f812ee",
          "body": "Desktop: update-available notifications",
          "is_bot": false,
          "headline": "Merge pull request #722 from getagentseal/feat/update-check",
          "author_name": "Resham Joshi",
          "author_login": "iamtoruk",
          "committed_at": "2026-07-17T11:58:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8fc9e303b919c02c0694e437211bd9b1f7e078e3",
          "body": "Checks the GitHub releases for newer desktop-v tags once per launch\nand every 24h (15s timeout, no identifying headers, offline = silent\nretry). A dismissible banner and a Settings About row surface the\nnewer version and link the release page; dismissal persists per\nversion so each release nags at most once. No auto-install: unsigned\nbuilds cannot, by platform constraint; the checker only notifies.\n\nApp 364/364 (+24), typechecks + build green.",
          "is_bot": false,
          "headline": "feat(app): update-available notifications",
          "author_name": "iamtoruk",
          "author_login": "iamtoruk",
          "committed_at": "2026-07-17T11:58:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3cbc96a5decd34dbcce285bddbee964d36dd4c2e",
          "body": "Bump the desktop app version and point the README download badges at the\ndesktop-v0.9.16 release assets.",
          "is_bot": false,
          "headline": "release: desktop 0.9.16 (#721)",
          "author_name": "Resham Joshi",
          "author_login": "iamtoruk",
          "committed_at": "2026-07-17T02:34:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c58a705b133f600810219381d2e8947e8d4bf968",
          "body": "Bump the version and refresh the bundled LiteLLM pricing snapshots.\n\nSince 0.9.15, roughly sixty merged changes: the /advisor escalation\nbilling and unified large-line scanners for Claude, Copilot CLI\nsession.shutdown billing and skill extraction, the CodeWhale provider,\nkiro v2 credit pricing, Open\n[…]\nREADME.\n\nEvery merged PR was re-verified against this exact tree before the bump:\nfull JS suite (3527 tests), Swift suite (97), release build smoked, and\neight area audits with live functional probes.",
          "is_bot": false,
          "headline": "release: 0.9.16 (#720)",
          "author_name": "Resham Joshi",
          "author_login": "iamtoruk",
          "committed_at": "2026-07-17T02:15:26Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b6bf233f4601dbeae046c5a468a9ac4ab8e2afa4",
          "body": "…614) (#631)\n\n* feat(optimize): mcp-deferral-gaps finding family\n\nAdd three read-only detectors for MCP tool-def deferral coverage gaps:\n\n- mcp-deferral-off: sessions carrying MCP tool-def overhead with zero\n  ToolSearch invocations and no deferred_tools_delta inventory across\n  the window. Cause at\n[…]\nhe detector's parseVersion/\nversionPredates are exported and shared instead of adding a parallel\ncomparator.\n\nRefs getagentseal/codeburn#614\n\n---------\n\nCo-authored-by: AgentSeal <hello@agentseal.org>",
          "is_bot": false,
          "headline": "feat(act): defer-* plan kinds for native deferral config (part 2 of #…",
          "author_name": "AVSR Pavan Kumar",
          "author_login": "AVSRPA1KR",
          "committed_at": "2026-07-17T02:01:54Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "261d113b77f3872b7dbc42cdba0932a7306b99cf",
          "body": "yield: group commit attribution by canonical repo root (fixes #713)",
          "is_bot": false,
          "headline": "Merge pull request #719 from getagentseal/fix/yield-repo-grouping",
          "author_name": "Resham Joshi",
          "author_login": "iamtoruk",
          "committed_at": "2026-07-17T01:59:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b95cb95ce484e0be71d7d90879f7db3a90fd143e",
          "body": "Sessions launched from monorepo subdirectories or separate worktrees\nof one repository formed independent attribution groups, each awarding\nthe same commit (double-counted productive sessions; the duplicate\nowner was not even flagged ambiguous). Groups now key on the realpath\nof git-common-dir, so a\n[…]\nhile distinct repos stay separate; ambiguity semantics\nunchanged, now correctly spanning the whole repo. rev-parse results\ncached per directory.\n\nFixes #713. Regression tests fail on the unfixed code.",
          "is_bot": false,
          "headline": "fix(yield): group commit attribution by canonical repo, not launch path",
          "author_name": "iamtoruk",
          "author_login": "iamtoruk",
          "committed_at": "2026-07-17T01:58:49Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3625b5906594dafebb6a27de3093257b5e2e0053",
          "body": "docs: add Homebrew tap bump to the release checklist",
          "is_bot": false,
          "headline": "Merge pull request #718 from getagentseal/docs/brew-release-step",
          "author_name": "Resham Joshi",
          "author_login": "iamtoruk",
          "committed_at": "2026-07-17T01:47:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "03d559e1efe65988d3fdd266e5d9a2cbc7bee83e",
          "body": "The tap sat six versions behind (issue #716) because nothing in the\nrelease process mentioned it. Step 5b documents the tarball sha bump.",
          "is_bot": false,
          "headline": "docs: Homebrew tap bump joins the CLI release checklist",
          "author_name": "iamtoruk",
          "author_login": "iamtoruk",
          "committed_at": "2026-07-17T01:46:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2ebd8a9efee479c808b598afd49fca0d55ea453c",
          "body": "Energy: zero hidden-window work + instant currency changes",
          "is_bot": false,
          "headline": "Merge pull request #717 from getagentseal/fix/energy",
          "author_name": "Resham Joshi",
          "author_login": "iamtoruk",
          "committed_at": "2026-07-17T01:42:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e4bbcaaba788ef13b8ac65bf1d5e644c391fd8ce",
          "body": "Energy (field report: ~3x Chrome drain):\n- polls skip entirely while the window is hidden/minimized, with one\n  catch-up refresh on return when data is stale; visible-but-unfocused\n  keeps polling (second-monitor case)\n- all looping animations pause under html.page-hidden (the sidebar\n  flame flicke\n[…]\n can never overwrite the applied currency\n- USD default verified end to end\n\nMeasured: hidden window = 0 new CLI spawns over 5 cadences (was: full\npolling forever). App 340/340, build + package green.",
          "is_bot": false,
          "headline": "fix(app): zero background work when hidden; currency applies instantly",
          "author_name": "iamtoruk",
          "author_login": "iamtoruk",
          "committed_at": "2026-07-17T01:41:28Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b597449bede6fe20abc1cd7cbcfda028b7176887",
          "body": "* docs(readme): four-surface hero grid with per-surface install shortcuts\n\nReplace the single TUI screenshot and the scattered optimize, compare and\nold menubar shots with one 2x2 grid under the badges: Desktop, Web,\nTerminal, and macOS Menubar, each with its one-line way in (direct\ndownload badges \n[…]\nas overstuffed for a table cell; Opus 4.6 in the signals\ntable aged into Opus 4.8; the License section ran MIT and the affiliation\nnote into one paragraph; two stray em dashes and a double blank line.",
          "is_bot": false,
          "headline": "docs(readme): four-surface hero grid with install shortcuts (#715)",
          "author_name": "Resham Joshi",
          "author_login": "iamtoruk",
          "committed_at": "2026-07-17T00:07:02Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a55251ce8f3f6859deccab4f85af9bbb349260a6",
          "body": "…t follow-ups (#712)\n\nFollow-ups to #710, completing issue #708's second ask plus the two review\nnotes:\n\n- export: new records.csv with one row per call incl. subagentType and\n  model; sessions.csv gains both fields APPENDED after all legacy columns\n  so by-index consumers are unaffected; JSON field\n[…]\no longer merges into the main bucket (test-pinned across all formats)\n- README: note that the --min-cost 0.01 default can hide sub-cent agent\n  buckets; --min-cost 0 shows the complete agent inventory",
          "is_bot": false,
          "headline": "feat(export): subagentType and model on per-record exports; --by-agen…",
          "author_name": "ozymandiashh",
          "author_login": "ozymandiashh",
          "committed_at": "2026-07-16T23:35:33Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6e66d34582e2e36a10fb4890c7358a596a0f30dc",
          "body": "Orchestrator setups pin different agents to different models (planner on\nOpus, implementers on Sonnet, scouts on Haiku). The dashboard shows\n\"Skills & Agents\" and \"By Model\" as separate panels, so there was no way\nto see which agent drove which model's spend, or catch an agent that\nsilently switched\n[…]\nboth errors politely.\n\nExposing subagentType + per-record model on `codeburn export` (so users\ncan build custom crosses over the export) is a separate follow-up and is\nintentionally out of scope here.",
          "is_bot": false,
          "headline": "feat(models): agent x model cross-breakdown (--by-agent) (#710)",
          "author_name": "Resham Joshi",
          "author_login": "iamtoruk",
          "committed_at": "2026-07-16T22:43:58Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "db289fab65105a50d18224b89628c2db55ceb7ea",
          "body": "Audit batch: prefetch storm, day-bucketing unification, warm-path efficiency",
          "is_bot": false,
          "headline": "Merge pull request #711 from getagentseal/fix/audit-batch",
          "author_name": "Resham Joshi",
          "author_login": "iamtoruk",
          "committed_at": "2026-07-16T22:37:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ae18b1fd915d0e2504194af1137936c6c54f51d1",
          "body": "…rm-path collapse\n\n- prefetch fires exactly once per provider per session; memo sized to\n  detected providers so base keys never evict (was: 12 full-history\n  parses every 30s forever from LRU thrash re-triggering the effect)\n- day-aggregator buckets whole turns by user-message timestamp,\n  matching\n[…]\nd)\n  instead of aborting; onboarding hints Full Disk Access\n- rateLimited quota copy render tests; export -f json emits valid\n  empty JSON when no data\n\nRoot 2023 (+4), app 327 (+3), typechecks clean.",
          "is_bot": false,
          "headline": "fix: audit batch — prefetch one-shot, turn-anchored day bucketing, wa…",
          "author_name": "iamtoruk",
          "author_login": "iamtoruk",
          "committed_at": "2026-07-16T22:37:03Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "71a8e8e2502d335dee63d5421af8d29d87130560",
          "body": "…tility QoS for tick spawns (#703) (#704)\n\nCo-authored-by: Aditya Vikram Singh <247195684+avs-io@users.noreply.github.com>",
          "is_bot": false,
          "headline": "menubar: skip unchanged background refreshes, 120s AC idle cadence, u…",
          "author_name": "Aditya Vikram Singh",
          "author_login": "avs-io",
          "committed_at": "2026-07-16T22:11:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4689b5afa9947149d22fb5216d4f0e4c722c0957",
          "body": "…eshes (#702)\n\n* menubar: honor Retry-After on Claude quota 429s, back off failed refreshes (#701)\n\n* Fix operator precedence in claudeDue fallback\n\n---------\n\nCo-authored-by: Aditya Vikram Singh <247195684+avs-io@users.noreply.github.com>",
          "is_bot": false,
          "headline": "menubar: honor Retry-After on Claude quota 429s, back off failed refr…",
          "author_name": "Aditya Vikram Singh",
          "author_login": "avs-io",
          "committed_at": "2026-07-16T21:52:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "568476b02dea65c910975e9b6478cfd25897c9ba",
          "body": "fix: cold_start telemetry emits once per launch",
          "is_bot": false,
          "headline": "Merge pull request #706 from getagentseal/fix/telemetry-metrics",
          "author_name": "Resham Joshi",
          "author_login": "iamtoruk",
          "committed_at": "2026-07-16T21:27:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 48,
      "commits_last_year": 1118,
      "latest_release_at": "2026-07-20T17:22:34Z",
      "latest_release_tag": "mac-v0.9.19",
      "releases_from_tags": false,
      "days_since_last_push": 1,
      "active_weeks_last_year": 15,
      "days_since_latest_release": 2,
      "mean_days_between_releases": 2.1
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": true,
      "health_percentage": 75,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": true
    },
    "ecosystem": {
      "packages": [
        {
          "name": "codeburn",
          "exists": true,
          "license": "MIT",
          "keywords": [
            "claude-code",
            "cursor",
            "codex",
            "kimi",
            "devin",
            "ibm-bob",
            "opencode",
            "pi",
            "codebuff",
            "codewhale",
            "ai-coding",
            "token-usage",
            "cost-tracking",
            "observability",
            "developer-tools"
          ],
          "ecosystem": "npm",
          "matches_repo": true,
          "registry_url": "https://www.npmjs.com/package/codeburn",
          "is_deprecated": false,
          "latest_version": "0.9.19",
          "repository_url": "https://github.com/getagentseal/codeburn",
          "versions_count": 50,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 1,
          "monthly_downloads": 32310,
          "first_published_at": "2026-04-13T22:15:36.608000Z",
          "latest_published_at": "2026-07-20T16:36:51.984000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 2
        }
      ]
    },
    "popularity": {
      "forks": 691,
      "stars": 8858,
      "watchers": 27,
      "fork_history": {
        "days": [
          {
            "date": "2026-04-13",
            "count": 2
          },
          {
            "date": "2026-04-14",
            "count": 63
          },
          {
            "date": "2026-04-15",
            "count": 57
          },
          {
            "date": "2026-04-16",
            "count": 26
          },
          {
            "date": "2026-04-17",
            "count": 18
          },
          {
            "date": "2026-04-18",
            "count": 14
          },
          {
            "date": "2026-04-19",
            "count": 21
          },
          {
            "date": "2026-04-20",
            "count": 13
          },
          {
            "date": "2026-04-21",
            "count": 22
          },
          {
            "date": "2026-04-22",
            "count": 14
          },
          {
            "date": "2026-04-23",
            "count": 3
          },
          {
            "date": "2026-04-24",
            "count": 8
          },
          {
            "date": "2026-04-25",
            "count": 26
          },
          {
            "date": "2026-04-26",
            "count": 22
          },
          {
            "date": "2026-04-27",
            "count": 6
          },
          {
            "date": "2026-04-28",
            "count": 13
          },
          {
            "date": "2026-04-29",
            "count": 7
          },
          {
            "date": "2026-04-30",
            "count": 9
          },
          {
            "date": "2026-05-01",
            "count": 7
          },
          {
            "date": "2026-05-02",
            "count": 13
          },
          {
            "date": "2026-05-03",
            "count": 15
          },
          {
            "date": "2026-05-04",
            "count": 15
          },
          {
            "date": "2026-05-05",
            "count": 6
          },
          {
            "date": "2026-05-06",
            "count": 15
          },
          {
            "date": "2026-05-07",
            "count": 20
          },
          {
            "date": "2026-05-08",
            "count": 7
          },
          {
            "date": "2026-05-09",
            "count": 5
          },
          {
            "date": "2026-05-10",
            "count": 5
          },
          {
            "date": "2026-05-11",
            "count": 6
          },
          {
            "date": "2026-05-12",
            "count": 5
          },
          {
            "date": "2026-05-13",
            "count": 4
          },
          {
            "date": "2026-05-14",
            "count": 4
          },
          {
            "date": "2026-05-15",
            "count": 8
          },
          {
            "date": "2026-05-16",
            "count": 10
          },
          {
            "date": "2026-05-17",
            "count": 2
          },
          {
            "date": "2026-05-18",
            "count": 5
          },
          {
            "date": "2026-05-19",
            "count": 5
          },
          {
            "date": "2026-05-20",
            "count": 5
          },
          {
            "date": "2026-05-21",
            "count": 3
          },
          {
            "date": "2026-05-22",
            "count": 1
          },
          {
            "date": "2026-05-23",
            "count": 2
          },
          {
            "date": "2026-05-24",
            "count": 5
          },
          {
            "date": "2026-05-25",
            "count": 5
          },
          {
            "date": "2026-05-26",
            "count": 5
          },
          {
            "date": "2026-05-27",
            "count": 4
          },
          {
            "date": "2026-05-28",
            "count": 2
          },
          {
            "date": "2026-05-29",
            "count": 3
          },
          {
            "date": "2026-05-30",
            "count": 3
          },
          {
            "date": "2026-05-31",
            "count": 3
          },
          {
            "date": "2026-06-01",
            "count": 4
          },
          {
            "date": "2026-06-02",
            "count": 4
          },
          {
            "date": "2026-06-03",
            "count": 9
          },
          {
            "date": "2026-06-04",
            "count": 6
          },
          {
            "date": "2026-06-05",
            "count": 6
          },
          {
            "date": "2026-06-06",
            "count": 4
          },
          {
            "date": "2026-06-08",
            "count": 5
          },
          {
            "date": "2026-06-09",
            "count": 2
          },
          {
            "date": "2026-06-10",
            "count": 5
          },
          {
            "date": "2026-06-11",
            "count": 5
          },
          {
            "date": "2026-06-12",
            "count": 5
          },
          {
            "date": "2026-06-13",
            "count": 10
          },
          {
            "date": "2026-06-14",
            "count": 4
          },
          {
            "date": "2026-06-15",
            "count": 2
          },
          {
            "date": "2026-06-16",
            "count": 6
          },
          {
            "date": "2026-06-17",
            "count": 2
          },
          {
            "date": "2026-06-18",
            "count": 1
          },
          {
            "date": "2026-06-19",
            "count": 3
          },
          {
            "date": "2026-06-20",
            "count": 5
          },
          {
            "date": "2026-06-22",
            "count": 2
          },
          {
            "date": "2026-06-23",
            "count": 3
          },
          {
            "date": "2026-06-24",
            "count": 1
          },
          {
            "date": "2026-06-25",
            "count": 2
          },
          {
            "date": "2026-06-26",
            "count": 2
          },
          {
            "date": "2026-06-27",
            "count": 1
          },
          {
            "date": "2026-06-28",
            "count": 1
          },
          {
            "date": "2026-06-30",
            "count": 5
          },
          {
            "date": "2026-07-01",
            "count": 3
          },
          {
            "date": "2026-07-02",
            "count": 3
          },
          {
            "date": "2026-07-03",
            "count": 1
          },
          {
            "date": "2026-07-04",
            "count": 4
          },
          {
            "date": "2026-07-05",
            "count": 1
          },
          {
            "date": "2026-07-06",
            "count": 2
          },
          {
            "date": "2026-07-07",
            "count": 2
          },
          {
            "date": "2026-07-08",
            "count": 3
          },
          {
            "date": "2026-07-09",
            "count": 4
          },
          {
            "date": "2026-07-13",
            "count": 3
          },
          {
            "date": "2026-07-14",
            "count": 4
          },
          {
            "date": "2026-07-15",
            "count": 3
          },
          {
            "date": "2026-07-17",
            "count": 3
          },
          {
            "date": "2026-07-18",
            "count": 1
          },
          {
            "date": "2026-07-19",
            "count": 1
          },
          {
            "date": "2026-07-20",
            "count": 2
          },
          {
            "date": "2026-07-21",
            "count": 3
          }
        ],
        "complete": true,
        "collected": 690,
        "total_forks": 691
      },
      "star_history": null,
      "open_issues_and_prs": 25
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": true,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [
        "app/tsconfig.json",
        "dash/tsconfig.json",
        "tsconfig.json"
      ],
      "toolchain_manifests": [],
      "largest_source_bytes": 167083,
      "source_files_sampled": 510,
      "oversized_source_files": 8,
      "agent_instruction_files": [
        "docs/providers/claude.md",
        "docs/providers/gemini.md"
      ],
      "agent_instruction_max_bytes": 3012
    },
    "dependencies": {
      "manifests": [
        "app/package.json",
        "dash/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": "@gsap/react",
          "manifest": "app/package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.1.2"
        },
        {
          "name": "gsap",
          "manifest": "app/package.json",
          "ecosystem": "npm",
          "version_constraint": "^3.15.0"
        },
        {
          "name": "react",
          "manifest": "app/package.json",
          "ecosystem": "npm",
          "version_constraint": "^19.2.7"
        },
        {
          "name": "react-dom",
          "manifest": "app/package.json",
          "ecosystem": "npm",
          "version_constraint": "^19.2.7"
        },
        {
          "name": "@tanstack/react-query",
          "manifest": "dash/package.json",
          "ecosystem": "npm",
          "version_constraint": "^5.62.7"
        },
        {
          "name": "clsx",
          "manifest": "dash/package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.1.1"
        },
        {
          "name": "lucide-react",
          "manifest": "dash/package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.468.0"
        },
        {
          "name": "react",
          "manifest": "dash/package.json",
          "ecosystem": "npm",
          "version_constraint": "^19.0.0"
        },
        {
          "name": "react-dom",
          "manifest": "dash/package.json",
          "ecosystem": "npm",
          "version_constraint": "^19.0.0"
        },
        {
          "name": "recharts",
          "manifest": "dash/package.json",
          "ecosystem": "npm",
          "version_constraint": "^3.3.0"
        },
        {
          "name": "tailwind-merge",
          "manifest": "dash/package.json",
          "ecosystem": "npm",
          "version_constraint": "^3.0.2"
        },
        {
          "name": "@modelcontextprotocol/sdk",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.29.0"
        },
        {
          "name": "bonjour-service",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.4.1"
        },
        {
          "name": "chalk",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^5.4.1"
        },
        {
          "name": "commander",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^13.1.0"
        },
        {
          "name": "ink",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^7.0.0"
        },
        {
          "name": "react",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^19.2.5"
        },
        {
          "name": "selfsigned",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^5.5.0"
        },
        {
          "name": "strip-ansi",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^7.2.0"
        },
        {
          "name": "undici",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^7.27.2"
        },
        {
          "name": "zod",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^3.25.76"
        }
      ],
      "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": 4,
        "merged_prs": 412,
        "open_issues": 21,
        "closed_ratio": 0.912,
        "closed_issues": 218,
        "closed_unmerged_prs": 132
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "iamtoruk",
          "commits": 887,
          "avatar_url": "https://avatars.githubusercontent.com/u/65915470?v=4"
        },
        {
          "type": "User",
          "login": "ozymandiashh",
          "commits": 62,
          "avatar_url": "https://avatars.githubusercontent.com/u/234437643?v=4"
        },
        {
          "type": "User",
          "login": "AgentSeal",
          "commits": 19,
          "avatar_url": "https://avatars.githubusercontent.com/u/265224789?v=4"
        },
        {
          "type": "User",
          "login": "lfl1337",
          "commits": 19,
          "avatar_url": "https://avatars.githubusercontent.com/u/80782621?v=4"
        },
        {
          "type": "User",
          "login": "spMohanty",
          "commits": 14,
          "avatar_url": "https://avatars.githubusercontent.com/u/1581312?v=4"
        },
        {
          "type": "User",
          "login": "avs-io",
          "commits": 11,
          "avatar_url": "https://avatars.githubusercontent.com/u/247195684?v=4"
        },
        {
          "type": "User",
          "login": "andklee",
          "commits": 9,
          "avatar_url": "https://avatars.githubusercontent.com/u/106256645?v=4"
        },
        {
          "type": "User",
          "login": "NihalJain",
          "commits": 8,
          "avatar_url": "https://avatars.githubusercontent.com/u/3429351?v=4"
        },
        {
          "type": "User",
          "login": "tmchow",
          "commits": 6,
          "avatar_url": "https://avatars.githubusercontent.com/u/517103?v=4"
        },
        {
          "type": "User",
          "login": "mallek",
          "commits": 6,
          "avatar_url": "https://avatars.githubusercontent.com/u/6627101?v=4"
        }
      ],
      "contributors_sampled": 61,
      "top_contributor_share": 0.796
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "block-claude-coauthor.yml",
        "ci.yml",
        "firstlook.yml",
        "release-menubar.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": 5,
            "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": 10,
            "reason": "28 out of 28 merged PRs checked by a CI test -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 1,
            "reason": "Found 3/29 approved changesets -- score normalized to 1",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 10,
            "reason": "project has 14 contributing companies or organizations",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 10,
            "reason": "no dangerous workflow patterns detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 0,
            "reason": "no update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 10,
            "reason": "30 commit(s) and 27 issue activity found in the last 90 days -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": null,
            "reason": "packaging workflow not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 0,
            "reason": "dependency not pinned by hash detected -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "SAST tool is not run on all commits -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 10,
            "reason": "security policy file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": 0,
            "reason": "Project has not signed or included provenance with any releases.",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 0,
            "reason": "detected GitHub workflow tokens with excessive permissions",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 0,
            "reason": "23 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "6e3c57a9ff95a624f1d9affa7384d32a67f359b7",
        "ran_at": "2026-07-23T04:22:04Z",
        "aggregate_score": 4.2,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": true,
      "has_dependabot_config": false
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-21T11:04:16Z",
      "oldest_open_prs": [
        {
          "number": 744,
          "created_at": "2026-07-18T12:45:21Z",
          "last_comment_at": "2026-07-20T16:22:55Z",
          "last_comment_author": "iamtoruk"
        },
        {
          "number": 783,
          "created_at": "2026-07-20T20:22:03Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 786,
          "created_at": "2026-07-20T20:26:56Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 794,
          "created_at": "2026-07-21T22:16:03Z",
          "last_comment_at": null,
          "last_comment_author": null
        }
      ],
      "last_merged_pr_at": "2026-07-21T11:03:48Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": [
        {
          "number": 106,
          "created_at": "2026-04-19T15:04:14Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 213,
          "created_at": "2026-05-04T14:01:23Z",
          "last_comment_at": "2026-05-04T22:04:29Z",
          "last_comment_author": "iamtoruk"
        },
        {
          "number": 234,
          "created_at": "2026-05-05T20:43:18Z",
          "last_comment_at": "2026-05-24T01:57:36Z",
          "last_comment_author": "m13v"
        },
        {
          "number": 389,
          "created_at": "2026-05-24T11:30:49Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 411,
          "created_at": "2026-05-28T20:44:52Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 428,
          "created_at": "2026-06-02T08:17:17Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 479,
          "created_at": "2026-06-11T14:45:42Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 574,
          "created_at": "2026-06-29T10:21:48Z",
          "last_comment_at": "2026-06-30T13:11:31Z",
          "last_comment_author": "Joon"
        },
        {
          "number": 597,
          "created_at": "2026-07-02T09:39:36Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 611,
          "created_at": "2026-07-03T13:31:45Z",
          "last_comment_at": "2026-07-16T09:13:33Z",
          "last_comment_author": "iamtoruk"
        },
        {
          "number": 626,
          "created_at": "2026-07-07T00:15:06Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 645,
          "created_at": "2026-07-09T18:49:51Z",
          "last_comment_at": "2026-07-18T11:12:21Z",
          "last_comment_author": "avs-io"
        },
        {
          "number": 703,
          "created_at": "2026-07-16T20:28:28Z",
          "last_comment_at": "2026-07-18T11:12:42Z",
          "last_comment_author": "avs-io"
        },
        {
          "number": 725,
          "created_at": "2026-07-17T13:00:15Z",
          "last_comment_at": "2026-07-17T19:10:26Z",
          "last_comment_author": "avs-io"
        },
        {
          "number": 767,
          "created_at": "2026-07-20T15:29:31Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 768,
          "created_at": "2026-07-20T15:51:43Z",
          "last_comment_at": "2026-07-20T17:02:09Z",
          "last_comment_author": "AVSRPA1KR"
        },
        {
          "number": 769,
          "created_at": "2026-07-20T15:52:00Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 770,
          "created_at": "2026-07-20T15:57:24Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 771,
          "created_at": "2026-07-20T16:05:54Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 795,
          "created_at": "2026-07-22T10:19:22Z",
          "last_comment_at": null,
          "last_comment_author": null
        }
      ]
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/getagentseal/codeburn",
    "host": "github.com",
    "name": "codeburn",
    "owner": "getagentseal"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "good",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 70,
      "inputs": {
        "security": 42,
        "vitality": 80,
        "community": 82,
        "governance": 62,
        "engineering": 81
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "good",
        "name": "Vitality",
        "value": 80,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "good",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 74,
            "inputs": {
              "commits_last_year": 1118,
              "human_commit_share": 1,
              "days_since_last_push": 1,
              "active_weeks_last_year": 15
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 1 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 1
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "15/52 weeks with commits",
                "points": 10.4,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 15
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "1118 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 1118
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "30 commit(s) and 27 issue activity found in the last 90 days -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": null,
            "notes": [],
            "value": 90,
            "inputs": {
              "releases_count": 48,
              "latest_release_tag": "mac-v0.9.19",
              "releases_from_tags": false,
              "days_since_latest_release": 2,
              "mean_days_between_releases": 2.1
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "48 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 48
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 2 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 2
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~2.1 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 2.1
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "Project has not signed or included provenance with any releases.",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "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": "good",
        "name": "Community & Adoption",
        "value": 82,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "excellent",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 92,
            "inputs": {
              "forks": 691,
              "stars": 8858,
              "watchers": 27,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "8,858 stars",
                "points": 60,
                "status": "met",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 8858
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "691 forks",
                "points": 23.7,
                "status": "partial",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 691
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "27 watchers",
                "points": 7.9,
                "status": "partial",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 27
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "good",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 77,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": true,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": true
            },
            "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": 18,
                "status": "met",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 6.3,
                "status": "met",
                "details": [],
                "max_points": 6.3
              }
            ]
          },
          {
            "key": "ecosystem_adoption",
            "band": "good",
            "name": "Ecosystem adoption (downloads)",
            "note": "Excluded from scoring (no data or not applicable): Registry dependents. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "registry_dependents"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 75,
            "inputs": {
              "packages": [
                "codeburn"
              ],
              "dependents": null,
              "ecosystems": "npm",
              "total_downloads": null,
              "monthly_downloads": 32310
            },
            "components": [
              {
                "key": "monthly_downloads",
                "name": "Monthly downloads",
                "detail": "32,310 downloads/month across npm",
                "points": 60.1,
                "status": "partial",
                "details": [
                  {
                    "code": "downloads_monthly",
                    "params": {
                      "count": 32310,
                      "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": 62,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "at_risk",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 37,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 61,
              "top_contributor_share": 0.796
            },
            "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 80% of commits",
                "points": 4.6,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 80
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "61 contributors",
                "points": 13.5,
                "status": "met",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 61
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 14 contributing companies or organizations",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "good",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 73,
            "inputs": {
              "merged_prs": 412,
              "open_issues": 21,
              "closed_issues": 218,
              "issue_closed_ratio": 0.912,
              "closed_unmerged_prs": 132
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "91% of issues closed",
                "points": 42.6,
                "status": "partial",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 91
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "412/544 decided PRs merged",
                "points": 29,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 412,
                      "decided": 544
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 3/29 approved changesets -- score normalized to 1",
                "points": 1.5,
                "status": "partial",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "moderate",
            "name": "Ownership & stewardship",
            "note": null,
            "notes": [],
            "value": 51,
            "inputs": {
              "followers": 77,
              "owner_type": "Organization",
              "is_verified": null,
              "owner_login": "getagentseal",
              "public_repos": 9,
              "account_age_days": 95
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "organization-owned",
                "points": 30,
                "status": "met",
                "details": [
                  {
                    "code": "owner_organization",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "77 followers of getagentseal",
                "points": 13.6,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 77,
                      "login": "getagentseal"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "9 public repos, account ~0 yr old",
                "points": 7.8,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 9
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 0
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "codeburn"
              ],
              "ecosystems": "npm",
              "any_deprecated": false,
              "min_days_since_publish": 2
            },
            "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 2 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 2
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "50 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 50
                    }
                  }
                ],
                "max_points": 20
              },
              {
                "key": "not_deprecated",
                "name": "Not deprecated",
                "detail": "active, not deprecated or yanked",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "package_not_deprecated",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "good",
        "name": "Engineering Quality",
        "value": 81,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "moderate",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 68,
            "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": "4 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 4
                    }
                  }
                ],
                "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": "28 out of 28 merged PRs checked by a CI test -- score normalized to 10",
                "points": 20,
                "status": "met",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "excellent",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "topics": [
                "ai-coding",
                "claude-code",
                "cli",
                "codex",
                "cost-tracking",
                "developer-tools",
                "observability",
                "terminal-ui",
                "token-usage",
                "cursor-ide",
                "menubar",
                "web-dashboard"
              ],
              "has_wiki": true,
              "homepage": "https://codeburn.app/",
              "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://codeburn.app/",
                "points": 15,
                "status": "met",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": "12 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 12
                    }
                  }
                ],
                "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": 42,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Packaging. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "packaging"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 42,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 17,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 1,
              "scorecard_aggregate": 4.2
            },
            "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": 3.8,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "28 out of 28 merged PRs checked by a CI test -- score normalized to 10",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 3/29 approved changesets -- score normalized to 1",
                "points": 0.8,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 14 contributing companies or organizations",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "no update tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "30 commit(s) and 27 issue activity found in the last 90 days -- score normalized to 10",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow not detected",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool is not run on all commits -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file detected",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "Project has not signed or included provenance with any releases.",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "detected GitHub workflow tokens with excessive permissions",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "23 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": 10
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "no confirmed policy-scope location match",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "jurisdiction_no_match",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "moderate",
        "name": "AI Readiness",
        "value": 61,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "excellent",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 85,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 1,
              "agent_instruction_files": [
                "docs/providers/claude.md",
                "docs/providers/gemini.md"
              ],
              "agent_instruction_max_bytes": 3012
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "docs/providers/claude.md, docs/providers/gemini.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "docs/providers/claude.md, docs/providers/gemini.md"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "100 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 100,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "at_risk",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 43,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "package-lock.json"
              ],
              "has_dockerfile": false,
              "typed_language": true,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": false,
              "typecheck_configs": [
                "app/tsconfig.json",
                "dash/tsconfig.json",
                "tsconfig.json"
              ],
              "agent_commit_share": 0,
              "toolchain_manifests": [],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "app/tsconfig.json, dash/tsconfig.json, tsconfig.json",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "app/tsconfig.json, dash/tsconfig.json, tsconfig.json"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "no agent-authored commits among the last 100",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_authored_commits",
                    "params": {
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "no automated dependency updates observed",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_dependency_automation",
                    "params": {}
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 99,
            "inputs": {
              "primary_language": "TypeScript",
              "largest_source_bytes": 167083,
              "source_files_sampled": 510,
              "oversized_source_files": 8
            },
            "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": "8/510 source files over 60KB",
                "points": 54.1,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 510,
                      "oversized": 8
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "critical",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 20,
            "inputs": {
              "example_dirs": [],
              "has_mcp_signal": true,
              "api_schema_files": []
            },
            "components": [
              {
                "key": "api_schema_openapi_graphql_proto",
                "name": "API schema (OpenAPI/GraphQL/proto)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 40
              },
              {
                "key": "mcp_server",
                "name": "MCP server",
                "detail": null,
                "points": 20,
                "status": "met",
                "details": [],
                "max_points": 20
              },
              {
                "key": "runnable_examples",
                "name": "Runnable examples",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 40
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token",
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
    "deps.dev does not index npm:codeburn@0.9.19; advisories assessed against the repository dependency graph instead"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-23T04:22:30.848128Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/g/getagentseal/codeburn.svg",
  "full_name": "getagentseal/codeburn",
  "license_state": "standard",
  "license_spdx": "MIT"
}

Оцінки — це сигнали, а не гарантії. Вони відображають публічно видимі практики на GitHub — це не аудит коду й не гарантія безпеки.

Відсутні дані виключаються, а ваги перенормовуються — нуль за відсутність ніколи не ставиться. Методологія версіонована й відкрита: метрики v1.13.0, схема v0.27.0 — повна методологія · вікі метрик.

Як окремий результат виглядає на тлі всього реєстру: сукупна статистикаnpm.