Öffentliches Register
Software-GesundheitsberichtSchema 0.27.0 · Metriken 1.13.0 · 2026-07-24 04:07 UTC

sonyarianto / santui

Santui is your terminal home base.

RustMIT★ 12 Sterne⑂ 0 Forksseit Juni 2026Auf GitHub ansehen ↗

sonyarianto/santui erreicht einen Gesundheitsindex von 58 von 100 und liegt damit im Bereich Mittel. Am stärksten schneidet es bei Engineering Quality (81/100) ab, am schwächsten bei Security (31/100). Zuletzt vor 5 Tagen aktualisiert. Ein einzelner Mitwirkender trägt den Großteil der jüngsten Arbeit.

58
gesamt / 100
Mittel

Software-Gesundheitsindex

Metriken werden auf einer Skala von 1–100 in gewichtete Kategorien gruppiert. Der Gesamtwert beginnt als ihr Mittel; sobald öffentliche Evidenz die Richtlinie für Hochrisikojurisdiktionen auslöst, wird die Bewertung angepasst und erhält die Obergrenze 49 (Gefährdet). AI Readiness liegt außerhalb.

58
Exzellent85-100Vorbildlich; erfüllt im Wesentlichen alle geprüften Kriterien
Gut70-84Gesund; geringfügige Lücken
Mittel50-69Akzeptabel mit deutlichen Lücken; Überprüfung empfohlen
Gefährdet30-49Erhebliche Schwächen; eine Übernahme erfordert Vorsicht
Kritisch1-29Schwerwiegende Probleme (aufgegeben, nur ein Maintainer, keine Hygiene)
VitalitätCommunity &VerbreitungNachhaltigkeit &GovernanceEngineering-QualitätSicherheitAI Readiness

Bewertungsprofil

Jede Achse ist eine Kategorie. Die Form zählt mehr als der Durchschnitt — ein gesundes Projekt füllt die gesamte Fläche, während ein Profil aus Spitzen und Kratern bedeutet, dass Stärke in einer Dimension Risiken in einer anderen verdeckt.

Eigentümerschaft

Sony AKPersönliches Konto
95 Follower104 öffentliche Reposseit Juli 2010

Dieses Repository gehört einem persönlichen Konto. Ein Projekt mit nur einem Eigentümer trägt ein höheres Kontinuitätsrisiko als ein organisationsgetragenes.

Paket-Ökosysteme

RegistryPaketVersionDownloads / MonatVersionenZuletzt veröffentlichtTags
crates.iosantui-db0.2.3114219vor 5 Tagen
crates.iosantui0.2.3111720vor 5 Tagen
crates.iosantui-ipc0.2.3116822vor 5 Tagen
crates.iosantui-auth0.2.3116622vor 5 Tagen
crates.iosantui-core0.2.3122822vor 5 Tagen
npmsantui0.2.313.03630vor 5 Tagentuiterminallaunchersantui
crates.iosantui-registry0.2.3118522vor 5 Tagen

Metriken nach Kategorie

Vitalität

Lebt das Projekt — wird Code geschrieben und werden Releases ausgeliefert?

71Gut · 22 % des Gesamtindex
Wie die Bewertung erfolgt
36/36Push-Aktualität — letzter Push vor 5 Tagen
4.2/36Commit-Rhythmus — 6/52 Wochen mit Commits
18/18Commit-Volumen — 563 Commits im letzten Jahr
0/10OpenSSF Scorecard: Maintained — project was created within the last 90 days. Please review its contents carefully
Verwendete Eingangsdaten
commits_last_year563
human_commit_share1
days_since_last_push5
active_weeks_last_year6
Wie die Bewertung erfolgt
27/27Liefert Releases aus — 21 Releases veröffentlicht
36/36Release-Aktualität — letztes Release vor 1 Tagen
27/27Release-Rhythmus — ein Release etwa alle 2,6 Tage
0/10OpenSSF Scorecard: Signed-Releases — Project has not signed or included provenance with any releases.
Verwendete Eingangsdaten
releases_count21
latest_release_tagv0.2.31
releases_from_tagsnein
days_since_latest_release1
mean_days_between_releases2,6

Community & Verbreitung

Hat das Projekt Nutzer, Downloads, Aufmerksamkeit und ein einladendes Umfeld für Beitragende?

39Gefährdet · 18 % des Gesamtindex
Wie die Bewertung erfolgt
16.9/60Stars — 12 Stars
0/25Forks — 0 Forks
0/15Watcher — 0 Watcher
Verwendete Eingangsdaten
forks0
stars12
watchers0
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Wie die Bewertung erfolgt
22.5/22.5README
22.5/22.5Lizenz — anerkannte Lizenz (MIT)
0/18CONTRIBUTING-Leitfaden
0/13.5Verhaltenskodex
0/7.2Issue-Vorlage
0/6.3PR-Vorlage
Verwendete Eingangsdaten
has_readmeja
has_licenseja
has_contributingnein
has_issue_templatenein
has_code_of_conductnein
has_pull_request_templatenein
Wie die Bewertung erfolgt
48.1/80Downloads pro Monat — 4.042 Downloads/Monat über crates, npm
0/20Abhängige in der Registry — von diesem Ökosystem nicht ausgewiesen
Verwendete Eingangsdaten
packagessantui-db, santui, santui-ipc, santui-auth, santui-core, santui, santui-registry
dependents
ecosystemscrates, npm
total_downloads3.018
monthly_downloads4.042
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Abhängige in der Registry. Die verbleibenden Gewichte wurden renormalisiert.

Nachhaltigkeit & Governance

Überdauert das Projekt die Menschen, die es tragen — Bus-Faktor, Reaktionsfähigkeit, Trägerschaft und Paketpflege?

60Mittel · 24 % des Gesamtindex
Wie die Bewertung erfolgt
9/54Bus-Faktor — 1 Beitragende decken die Hälfte aller Commits ab
0/22.5Commit-Verteilung — wichtigste beitragende Person verfasste 100 % der Commits
1.4/13.5Breite der Beitragenden — 1 Beitragende
3/10OpenSSF Scorecard: Contributors — project has 1 contributing companies or organizations -- score normalized to 3
Verwendete Eingangsdaten
bus_factor1
contributors_sampled1
top_contributor_share1
Wie die Bewertung erfolgt
42.9/46.8Issue-Lösungsquote — 92 % der Issues geschlossen
38.2/38.3PR-Annahme — 3/3 entschiedene PRs gemergt
0/15OpenSSF Scorecard: Code-Review — Found 0/25 approved changesets -- score normalized to 0
Verwendete Eingangsdaten
merged_prs3
open_issues9
closed_issues100
issue_closed_ratio0,917
closed_unmerged_prs0
Wie die Bewertung erfolgt
10/30Organisatorische Trägerschaft — persönliches (Nutzer-)Konto
0/20Verifizierte Domain — für Nutzerkonten nicht anwendbar
14.3/25Reichweite des Inhabers — 95 Follower von sonyarianto
25/25Kontohistorie — 104 öffentliche Repos, Kontoalter ca. 16 Jahre
Verwendete Eingangsdaten
followers95
owner_typeUser
is_verified
owner_loginsonyarianto
public_repos104
account_age_days5.852
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Verifizierte Domain. Die verbleibenden Gewichte wurden renormalisiert.

Paketpflege

100Exzellent
Wie die Bewertung erfolgt
25/25Veröffentlicht & auflösbar — 7 Paket(e) auf crates, npm
35/35Veröffentlichungsaktualität — letzte Veröffentlichung vor 5 Tagen
20/20Versionshistorie — 30 veröffentlichte Versionen
20/20Nicht veraltet — aktiv, nicht veraltet oder zurückgezogen
Verwendete Eingangsdaten
packagessantui-db, santui, santui-ipc, santui-auth, santui-core, santui, santui-registry
ecosystemscrates, npm
any_deprecatednein
min_days_since_publish5

Engineering-Qualität

Sind grundlegende Engineering- und Dokumentationspraktiken vorhanden?

81Gut · 20 % des Gesamtindex
Wie die Bewertung erfolgt
24/24CI-Workflows — 2 Workflow(s)
24/24Tests vorhanden
0/16Linter-Konfiguration
0/9.6Pre-Commit-Hooks
0/6.4.editorconfig
20/20OpenSSF Scorecard: CI-Tests — 1 out of 1 merged PRs checked by a CI test -- score normalized to 10
Verwendete Eingangsdaten
has_cija
has_testsja
has_editorconfignein
has_linter_confignein
has_precommit_confignein

Dokumentation

100Exzellent
Wie die Bewertung erfolgt
30/30README
25/25Dokumentationsverzeichnis
15/15Dokumentations-/Homepage-Site — https://santuiapp.vercel.app
10/10Repository-Beschreibung
10/10Topics — 4 Topics
10/10Wiki
Verwendete Eingangsdaten
topicscli, plugins, ratatui, terminal
has_wikija
homepagehttps://santuiapp.vercel.app
has_readmeja
has_docs_dirja
has_descriptionja

Sicherheit

Sind die sichtbaren Sicherheits- und Lieferkettenpraktiken belastbar, ohne ungeklärte Exposition gegenüber Hochrisikojurisdiktionen?

31Gefährdet · 16 % des Gesamtindex

Sicherheitslage

31Gefährdet
Wie die Bewertung erfolgt
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — branch protection not enabled on development/release branches
2.5/2.5CI-Tests — 1 out of 1 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/7.5Code-Review — Found 0/25 approved changesets -- score normalized to 0
0.8/2.5Contributors — project has 1 contributing companies or organizations -- score normalized to 3
10/10Dangerous-Workflow — no dangerous workflow patterns detected
0/7.5Dependency-Update-Tool — no update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5Lizenz — license file detected
0/7.5Maintained — project was created within the last 90 days. Please review its contents carefully
5/5Packaging — packaging workflow detected
0/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
0/5SAST — SAST tool is not run on all commits -- score normalized to 0
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — Project has not signed or included provenance with any releases.
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
3.8/7.5Vulnerabilities — 5 existing vulnerabilities detected
Verwendete Eingangsdaten
sourceopenssf_scorecard
checks_evaluated18
scorecard_versionv5.5.0
checks_inconclusive0
scorecard_aggregate3

AI Readiness

Wie gut ist das Repository dafür ausgestattet, mit KI-Coding-Agenten entwickelt und gepflegt zu werden? Ein unabhängiges, experimentelles Badge — Gewicht 0,0, es wird eigenständig ausgewiesen und verändert den Gesamt-Gesundheitswert nicht.

74Gut · 0 % des Gesamtindex
Wie die Bewertung erfolgt
45/45Agentenanweisungen — AGENTS.md
0/15Maschinenlesbare Doku (llms.txt)
40/40Lesbare Commit-Historie — 97 von 100 menschlichen Commits benennen ihre Absicht (strukturierter Betreff oder erläuternder Text)
Verwendete Eingangsdaten
has_llms_txtnein
legible_history_share0,97
agent_instruction_filesAGENTS.md
agent_instruction_max_bytes8.657
Wie die Bewertung erfolgt
12.6/18Bootstrap mit einem Befehl — Cargo.toml, crates/app/Cargo.toml, crates/auth/Cargo.toml (Toolchain-Konvention, kein Task-Runner)
22/22Automatisierte Tests
0/11Lint-/Format-Konfiguration
11/11Statische Typprüfung — Rust (statisch typisiert)
10/10Reproduzierbare Umgebung — lockfile
0/10Belegte Agentenpraxis — keine von Agenten verfassten Commits unter den letzten 100
0/8Automatisierte Wartung — keine automatisierten Abhängigkeits-Updates beobachtet
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Verwendete Eingangsdaten
has_nixnein
has_testsja
lockfilesCargo.lock, package-lock.json
has_dockerfilenein
typed_languageja
bootstrap_files
has_devcontainernein
has_linter_confignein
typecheck_configs
agent_commit_share0
toolchain_manifestsCargo.toml, crates/app/Cargo.toml, crates/auth/Cargo.toml, crates/core/Cargo.toml, crates/db/Cargo.toml, crates/dev-setup/Cargo.toml, crates/ipc/Cargo.toml, crates/plugins/ai-chat/Cargo.toml, crates/plugins/api-monitor/Cargo.toml, crates/plugins/archive-browser/Cargo.toml, crates/plugins/ascii-table/Cargo.toml, crates/plugins/base64-encoder/Cargo.toml, crates/plugins/batch-renamer/Cargo.toml, crates/plugins/bmi-calculator/Cargo.toml, crates/plugins/bookmark-launcher/Cargo.toml, crates/plugins/breathing-exercise/Cargo.toml, crates/plugins/budget-tracker/Cargo.toml, crates/plugins/calendar-agenda/Cargo.toml, crates/plugins/case-converter/Cargo.toml, crates/plugins/cheatsheet-browser/Cargo.toml, crates/plugins/chess/Cargo.toml, crates/plugins/clipboard-history/Cargo.toml, crates/plugins/cloud-cost/Cargo.toml, crates/plugins/code-runner/Cargo.toml, crates/plugins/color-picker/Cargo.toml, crates/plugins/connection-string-builder/Cargo.toml, crates/plugins/cron-expression-helper/Cargo.toml, crates/plugins/csv-viewer/Cargo.toml, crates/plugins/currency-converter/Cargo.toml, crates/plugins/dashboard/Cargo.toml, crates/plugins/dictionary-thesaurus/Cargo.toml, crates/plugins/disk-usage/Cargo.toml, crates/plugins/dns-globe/Cargo.toml, crates/plugins/docker-dashboard/Cargo.toml, crates/plugins/email-client/Cargo.toml, crates/plugins/env-manager/Cargo.toml, crates/plugins/erd-sketch/Cargo.toml, crates/plugins/expense-splitter/Cargo.toml, crates/plugins/file-diff/Cargo.toml, crates/plugins/file-explorer/Cargo.toml, crates/plugins/flashcards/Cargo.toml, crates/plugins/fortune-cookie/Cargo.toml, crates/plugins/game-of-life/Cargo.toml, crates/plugins/git-repository-dashboard/Cargo.toml, crates/plugins/github-browser/Cargo.toml, crates/plugins/gpg-encryptor/Cargo.toml, crates/plugins/graphql-playground/Cargo.toml, crates/plugins/habit-tracker/Cargo.toml, crates/plugins/hacker-news-reader/Cargo.toml, crates/plugins/hash-calculator/Cargo.toml, crates/plugins/hex-viewer/Cargo.toml, crates/plugins/http-client/Cargo.toml, crates/plugins/iptv-player/Cargo.toml, crates/plugins/irc-client/Cargo.toml, crates/plugins/json-yaml-formatter/Cargo.toml, crates/plugins/jwt-inspector/Cargo.toml, crates/plugins/k8s-viewer/Cargo.toml, crates/plugins/kanban-board/Cargo.toml, crates/plugins/loan-calculator/Cargo.toml, crates/plugins/log-viewer/Cargo.toml, crates/plugins/lorem-generator/Cargo.toml, crates/plugins/markdown-previewer/Cargo.toml, crates/plugins/math-evaluator/Cargo.toml, crates/plugins/mermaid-renderer/Cargo.toml, crates/plugins/mongo-explorer/Cargo.toml, crates/plugins/music-player-controller/Cargo.toml, crates/plugins/music-preview/Cargo.toml, crates/plugins/mysql-browser/Cargo.toml, crates/plugins/network-bandwidth-monitor/Cargo.toml, crates/plugins/package-manager/Cargo.toml, crates/plugins/package-version-monitor/Cargo.toml, crates/plugins/password-generator/Cargo.toml, crates/plugins/path-editor/Cargo.toml, crates/plugins/periodic-table/Cargo.toml, crates/plugins/ping-traceroute/Cargo.toml, crates/plugins/pipe-runner/Cargo.toml, crates/plugins/pixel-art/Cargo.toml, crates/plugins/pomodoro-timer/Cargo.toml, crates/plugins/port-scanner/Cargo.toml, crates/plugins/postgres-console/Cargo.toml, crates/plugins/process-manager/Cargo.toml, crates/plugins/qr-generator/Cargo.toml, crates/plugins/quick-notes/Cargo.toml, crates/plugins/quran-reader/Cargo.toml, crates/plugins/radio-stream-player/Cargo.toml, crates/plugins/radio-stream-player/scraper/Cargo.toml, crates/plugins/recipe-manager/Cargo.toml, crates/plugins/redis-explorer/Cargo.toml, crates/plugins/regex-tester/Cargo.toml, crates/plugins/registry/Cargo.toml, crates/plugins/rss-reader/Cargo.toml, crates/plugins/sdk-playground/Cargo.toml, crates/plugins/service-manager/Cargo.toml, crates/plugins/slug-generator/Cargo.toml, crates/plugins/snake-game/Cargo.toml, crates/plugins/snippet-manager/Cargo.toml, crates/plugins/speed-test/Cargo.toml, crates/plugins/sprint-retro/Cargo.toml, crates/plugins/sql-playground/Cargo.toml, crates/plugins/sqlite-browser/Cargo.toml, crates/plugins/ssh-manager/Cargo.toml, crates/plugins/ssl-checker/Cargo.toml, crates/plugins/stock-ticker/Cargo.toml, crates/plugins/subnet-calculator/Cargo.toml, crates/plugins/system-monitor/Cargo.toml, crates/plugins/terminal-pet/Cargo.toml, crates/plugins/text-toolkit/Cargo.toml, crates/plugins/time-tracker/Cargo.toml, crates/plugins/todo-task-manager/Cargo.toml, crates/plugins/totp-viewer/Cargo.toml, crates/plugins/typing-test/Cargo.toml, crates/plugins/unit-converter/Cargo.toml, crates/plugins/uuid-generator/Cargo.toml, crates/plugins/wake-on-lan/Cargo.toml, crates/plugins/water-tracker/Cargo.toml, crates/plugins/weather/Cargo.toml, crates/plugins/webhook-tester/Cargo.toml, crates/plugins/websocket-client/Cargo.toml, crates/plugins/whois-lookup/Cargo.toml, crates/plugins/world-clock/Cargo.toml, crates/registry/Cargo.toml, crates/server/Cargo.toml, templates/plugin/Cargo.toml
dependency_bot_commit_share0
Wie die Bewertung erfolgt
45/45Typprüfbarer Code — Rust (statisch typisiert)
54.7/55Handhabbare Dateigrößen — 1/218 Quelldateien über 60 KB
Verwendete Eingangsdaten
primary_languageRust
largest_source_bytes89.343
source_files_sampled218
oversized_source_files1

Eckdaten

12GitHub-Sterne
1Mitwirkende
563Commits, letzte 12 Monate
5Tage seit letztem Push
21Releases
1Bus-Faktor
9offene Issues
crates.io, npmPaket-Ökosysteme

Warnungen zur Datenerhebung

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token
  • Could not fetch npm package 'santui-website' from its registry
  • Could not fetch crates package 'santui-server' from its registry
  • GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Weitere Details

OpenSSF Scorecard 3.0 / 10
3.0Gesamtwert

Unabhängige, werkzeugneutrale Sicherheitsbewertung durch das quelloffene OpenSSF Scorecard. Jede Prüfung honoriert eine Sicherheits-Praxis, nicht das Werkzeug eines bestimmten Anbieters. Prüfungen, die Scorecard nicht ermitteln konnte, sind mit k. A. markiert und vom Sicherheitswert ausgeschlossen (nie als null gezählt).Scorecard v5.5.0 · 2026-07-24 04:06 UTC

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
10CI-Tests1 out of 1 merged PRs checked by a CI test -- score normalized to 10
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/25 approved changesets -- score normalized to 0
3Contributorsproject has 1 contributing companies or organizations -- score normalized to 3
10Dangerous-Workflowno dangerous workflow patterns detected
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
0Maintainedproject was created within the last 90 days. Please review its contents carefully
10Packagingpackaging workflow detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
0SASTSAST tool is not run on all commits -- score normalized to 0
0Security-Policysecurity policy file not detected
0Signed-ReleasesProject has not signed or included provenance with any releases.
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
5Vulnerabilities5 existing vulnerabilities detected
Direkte Abhängigkeiten 57
RegistryPaketVersionsvorgabeManifest
crates.iosantui-core0.2.31crates/app/Cargo.toml
crates.iosantui-ipc0.2.31crates/app/Cargo.toml
crates.iosantui-auth0.2.31crates/app/Cargo.toml
crates.iosantui-registry0.2.31crates/app/Cargo.toml
crates.iosantui-db0.2.31crates/app/Cargo.toml
crates.iorusqlite0.40crates/app/Cargo.toml
crates.iologcrates/app/Cargo.toml
crates.ioenv_loggercrates/app/Cargo.toml
crates.iosantui-core0.2.31crates/auth/Cargo.toml
crates.ioureq3crates/auth/Cargo.toml
crates.iourl2crates/auth/Cargo.toml
crates.ioserdecrates/auth/Cargo.toml
crates.ioserde_jsoncrates/auth/Cargo.toml
crates.iodirs6crates/auth/Cargo.toml
crates.ioratatui0.30crates/core/Cargo.toml
crates.iocrossterm0.29crates/core/Cargo.toml
crates.ioserdecrates/core/Cargo.toml
crates.ioserde_jsoncrates/core/Cargo.toml
crates.iotoml1.1crates/core/Cargo.toml
crates.iologcrates/core/Cargo.toml
crates.ioctrlc3.5crates/core/Cargo.toml
crates.ionotify8crates/core/Cargo.toml
crates.ioureq3crates/core/Cargo.toml
crates.iorusqlite0.40crates/db/Cargo.toml
crates.ioserdecrates/db/Cargo.toml
crates.ioserde_jsoncrates/db/Cargo.toml
crates.ioserdecrates/dev-setup/Cargo.toml
crates.ioserde_jsoncrates/dev-setup/Cargo.toml
crates.iosha2crates/dev-setup/Cargo.toml
crates.iorayoncrates/dev-setup/Cargo.toml
crates.iosantui-core0.2.31crates/ipc/Cargo.toml
crates.ioratatui0.30crates/ipc/Cargo.toml
crates.iocrossterm0.29crates/ipc/Cargo.toml
crates.ioserdecrates/ipc/Cargo.toml
crates.ioserde_jsoncrates/ipc/Cargo.toml
crates.iobincode2crates/ipc/Cargo.toml
crates.iologcrates/ipc/Cargo.toml
crates.iosantui-core0.2.31crates/registry/Cargo.toml
crates.ioserdecrates/registry/Cargo.toml
crates.ioserde_jsoncrates/registry/Cargo.toml
crates.iotoml1.1crates/registry/Cargo.toml
crates.ioureq3crates/registry/Cargo.toml
crates.iosha20.11crates/registry/Cargo.toml
crates.iosantui-core0.2.31crates/server/Cargo.toml
crates.ioaxum0.8crates/server/Cargo.toml
crates.iotokio1crates/server/Cargo.toml
crates.iotower-http0.7crates/server/Cargo.toml
crates.ioserdecrates/server/Cargo.toml
crates.ioserde_jsoncrates/server/Cargo.toml
crates.iojsonwebtoken10crates/server/Cargo.toml
crates.iorusqlite0.40crates/server/Cargo.toml
crates.ioureq3crates/server/Cargo.toml
crates.iotracing0.1crates/server/Cargo.toml
crates.iotracing-subscriber0.3crates/server/Cargo.toml
crates.ioclap4crates/server/Cargo.toml
crates.iosantui-ipctemplates/plugin/Cargo.toml
crates.ioserde1templates/plugin/Cargo.toml
Alle Abhängigkeiten nicht erhoben

Der aufgelöste Abhängigkeitssatz konnte für diesen Bericht nicht erhoben werden: GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

JSON-Rohbericht maschinenlesbar
{
  "data": {
    "repo": {
      "topics": [
        "cli",
        "plugins",
        "ratatui",
        "terminal"
      ],
      "is_fork": false,
      "size_kb": 7765,
      "has_wiki": true,
      "homepage": "https://santuiapp.vercel.app",
      "languages": {
        "CSS": 252,
        "HTML": 4261,
        "Rust": 2835601,
        "Shell": 8404,
        "JavaScript": 4973,
        "PowerShell": 8863,
        "TypeScript": 7532
      },
      "pushed_at": "2026-07-18T18:18:47Z",
      "created_at": "2026-06-14T18:56:33Z",
      "owner_type": "User",
      "updated_at": "2026-07-18T18:18:50Z",
      "description": "Santui is your terminal home base.",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "main",
      "license_spdx_raw": "MIT",
      "primary_language": "Rust",
      "significant_languages": [
        "Rust"
      ]
    },
    "owner": {
      "blog": "https://sony-ak.com",
      "name": "Sony AK",
      "type": "User",
      "login": "sonyarianto",
      "company": null,
      "location": "Jakarta",
      "followers": 95,
      "avatar_url": "https://avatars.githubusercontent.com/u/333051?v=4",
      "created_at": "2010-07-15T14:19:16Z",
      "is_verified": null,
      "public_repos": 104,
      "account_age_days": 5852
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v0.2.31",
          "kind": "patch",
          "published_at": "2026-07-23T02:25:42Z"
        },
        {
          "tag": "v0.2.28",
          "kind": "patch",
          "published_at": "2026-07-06T22:31:00Z"
        },
        {
          "tag": "v0.2.27",
          "kind": "patch",
          "published_at": "2026-07-04T17:03:24Z"
        },
        {
          "tag": "v0.2.26",
          "kind": "patch",
          "published_at": "2026-07-01T15:20:57Z"
        },
        {
          "tag": "v0.2.25",
          "kind": "patch",
          "published_at": "2026-07-01T13:59:46Z"
        },
        {
          "tag": "v0.2.24",
          "kind": "patch",
          "published_at": "2026-06-30T15:21:59Z"
        },
        {
          "tag": "v0.2.23",
          "kind": "patch",
          "published_at": "2026-06-30T12:07:49Z"
        },
        {
          "tag": "v0.2.22",
          "kind": "patch",
          "published_at": "2026-06-29T20:44:20Z"
        },
        {
          "tag": "v0.2.21",
          "kind": "patch",
          "published_at": "2026-06-29T19:52:05Z"
        },
        {
          "tag": "v0.2.20",
          "kind": "patch",
          "published_at": "2026-06-29T14:41:19Z"
        },
        {
          "tag": "v0.2.19",
          "kind": "patch",
          "published_at": "2026-06-29T14:26:24Z"
        },
        {
          "tag": "v0.2.17",
          "kind": "patch",
          "published_at": "2026-06-28T05:59:28Z"
        },
        {
          "tag": "v0.2.16",
          "kind": "patch",
          "published_at": "2026-06-28T01:22:49Z"
        },
        {
          "tag": "v0.2.14",
          "kind": "patch",
          "published_at": "2026-06-25T18:57:12Z"
        },
        {
          "tag": "v0.2.13",
          "kind": "patch",
          "published_at": "2026-06-22T15:41:58Z"
        },
        {
          "tag": "v0.2.12",
          "kind": "patch",
          "published_at": "2026-06-22T05:56:42Z"
        },
        {
          "tag": "v0.2.11",
          "kind": "patch",
          "published_at": "2026-06-21T12:41:51Z"
        },
        {
          "tag": "v0.2.10",
          "kind": "patch",
          "published_at": "2026-06-21T10:35:26Z"
        },
        {
          "tag": "v0.2.9",
          "kind": "patch",
          "published_at": "2026-06-21T10:06:50Z"
        },
        {
          "tag": "v0.2.8",
          "kind": "patch",
          "published_at": "2026-06-21T10:03:51Z"
        },
        {
          "tag": "v0.2.7",
          "kind": "patch",
          "published_at": "2026-06-21T05:55:43Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "e8194fcad07944731aa2687e1d7dd4f659e931ac",
          "body": null,
          "is_bot": false,
          "headline": "feat(music-preview): add filter indicator, pgup/pgdn, remove # column",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-18T18:18:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cbeb3aa83632f3294cae6c1829096bd913e70eb1",
          "body": null,
          "is_bot": false,
          "headline": "chore: bump version to 0.2.31",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-18T17:54:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ac8b0d1b17049456712af56cc947e5f85b965543",
          "body": "Every installed plugin already gets an auto-generated palette entry\nfrom registry.toml via dynamic_items. The per-plugin palette_commands()\nreturning \"Plugins\" → \"Open X\" was fully redundant — the registry\nentry already opens the plugin.\n\nRadio Stream Player and Log Viewer already returned vec![]. T\n[…]\nr, Pomodoro, Hacker News, Weather, etc.) also\nlose their quick-action entries as they are equally accessible via\nthe registry entry.\n\nMusic Preview's palette_commands test was updated to expect empty.",
          "is_bot": false,
          "headline": "refactor: remove redundant palette_commands() from all plugins",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-18T17:50:40Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7c906bd440ecf34e22314d2f0df5f3cd3d321671",
          "body": null,
          "is_bot": false,
          "headline": "chore: add generated plugins.json to gitignore",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-18T17:37:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4f80a1fe65f952ad3f1dcd94848af6ae1c1e4041",
          "body": "All plugins now register under the unified 'Plugins' category instead\nof 40+ custom category names (Utilities, Developer, Music, Weather, etc.)",
          "is_bot": false,
          "headline": "refactor: normalize all palette categories to 'Plugins'",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-18T17:37:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7818f9ddc44af8302d13eefe9565b8b3321e0fb1",
          "body": "… hint\n\n- Replace open_url() with libmpv playback via player.rs\n- Add search mode (press / to search, Enter to submit, Esc to cancel)\n- Change track_id from u32 to u64 (fixes overflow for large iTunes IDs)\n- Fix table overlap with bottom border, widen Duration column\n- Show dimmed \"Search: \" hint wh\n[…]\nChange Filter: label from accent to text color\n- Update hint labels: space toggle fav, f toggle fav list\n\nfix(ipc): redirect plugin stderr to null\n\n- Prevents mpv/PipeWire noise from printing over TUI",
          "is_bot": false,
          "headline": "feat(music-preview): add mpv playback, search mode, and dimmed search…",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-18T17:25:36Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "247acf77ef2ac46413bea08c29604990501a686e",
          "body": "- Add crates/dev-setup/ binary with subcommands: dev-json, release-json,\n  list-ids, list-paths, list-globs\n- Replace inline Python in scripts/dev-setup.sh with santui-dev-setup\n- Replace 3 inline Python snippets in CI release.yml with santui-dev-setup + jq\n- Skip SHA-256 hashing in dev mode (unused\n[…]\nacker, hacker-news-reader, http-client,\n  music-preview, pomodoro-timer, rss-reader, ssh-manager, system-monitor,\n  weather, world-clock) for consistency with Plugin Registry and\n  Radio Stream Player",
          "is_bot": false,
          "headline": "refactor: replace Python build scripts with Rust (santui-dev-setup)",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-18T15:34:44Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "455c770c4d036b105f908b7e531e609a3d2c3d34",
          "body": "- Add actions/checkout@v6 to release job so plugins-manifest.json\n  is available for the empty-file validation step\n- Update AGENTS.md: warn against cargo build --workspace (disk space)\n- Fix: use theme.border for panel title_fg instead of theme.text",
          "is_bot": false,
          "headline": "fix(release): checkout repo before validating asset sizes",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-18T15:07:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ac4987a506f89bdf42b4d7d78cbdd3b62b5e68de",
          "body": "…build",
          "is_bot": false,
          "headline": "fix(code-runner): use #[cfg(unix)] for PermissionsExt to fix Windows …",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-18T14:39:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f5488c9bebff0cc9f19cb3a1e56d03a61cb13667",
          "body": null,
          "is_bot": false,
          "headline": "chore: bump version to 0.2.30",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-18T14:26:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2b11d9923a147c52773891f29323e388d2403748",
          "body": null,
          "is_bot": false,
          "headline": "chore: bump version to 0.2.30",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-18T14:26:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a91e2170c3e82a8c4a812cf808d4c1c295d4c9e6",
          "body": null,
          "is_bot": false,
          "headline": "fix: move alt+m mouse off hint to left side, lowercase alt+m",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-18T14:24:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d7c490c34023778b9305c3ed8d5c4adf26612c8b",
          "body": null,
          "is_bot": false,
          "headline": "fix(registry): use Unicode width for info line right-alignment",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-18T14:08:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ccb7c4daaeb48259f9c5932a175223f4097d6ea2",
          "body": null,
          "is_bot": false,
          "headline": "chore: update radio station database (30 enrichment runs)",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-18T13:56:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7fdf09861e49b961db9b6bd1ddb65a633a5a01b4",
          "body": "feat(registry): add plugin favorites",
          "is_bot": false,
          "headline": "Merge pull request #111 from sonyarianto/feat/ipc-binary",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-18T13:25:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7a0c19487f8cf4d380db07cb81e508f1f39d21d1",
          "body": null,
          "is_bot": false,
          "headline": "feat(registry): add plugin favorites (bookmark with ♥, filter with f)",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-18T13:25:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fe087380990b1f19a26c9f4ff542afb0a42ecc2c",
          "body": "Create a shared ureq Agent with timeout_global(10s) and use it\nin fetch_manifest and download_plugin to prevent blocking on\nslow/unreachable network.",
          "is_bot": false,
          "headline": "fix(registry): add 10s timeout to all HTTP requests",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-18T13:00:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "97bd139089f83af0d0811ba1caaa6416adc4fe8f",
          "body": "Binary bincode is now the only format for plugin→host messages.\nAll 111 first-party plugins have been migrated.",
          "is_bot": false,
          "headline": "refactor(ipc): remove JSON fallback from read_plugin_msg",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-18T08:15:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "37f6d837f6227858462e27091f8124857e8ac0d8",
          "body": "Convert all plugin respond() functions from JSON Lines to binary\nbincode using write_plugin_msg. Fix type mismatches across ~75\nplugins where hints(), palette_commands(), and key_hints()\nreturned serde_json::Value instead of Vec<(String, String)>.\nFix ~30 plugins where render() returns Vec<Value> by\ndeserializing to Vec<RenderCmd>. Restore use std::io::Write\nwhere still needed. Add mouse_capture field to Config test\nstructs.",
          "is_bot": false,
          "headline": "fix(ipc): migrate remaining 111 plugins to binary bincode format",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-18T08:14:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "41d143abc76bb3bc51d54986c6c5f915654081e2",
          "body": "- Add bincode v2 with serde+std features to santui-ipc\n- Add read_plugin_msg / write_plugin_msg helpers in protocol.rs\n  with auto-detection: first byte '{' → JSON Lines, else binary frame\n- Host reader thread uses read_plugin_msg for backward-compat parsing\n- Plubin writer uses write_plugin_msg (bi\n[…]\nplugin updated to use binary format\n- Add criterion benchmarks for JSON vs binary encode/decode\n  (binary encode is ~2x faster for typical PluginMsg with 50-row Table)\n- All 48 existing IPC tests pass",
          "is_bot": false,
          "headline": "feat(ipc): binary bincode format for PluginMsg (plugin→host)",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-18T07:42:51Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4d24027cdbfafd219143bb5c1595f661539f42ea",
          "body": null,
          "is_bot": false,
          "headline": "fix: disable mouse capture by default (opt-in via Alt+M)",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-18T07:26:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "609ed0dc8a9c238c29a341d217156f257d95294f",
          "body": null,
          "is_bot": false,
          "headline": "chore: SANTUI_NO_MOUSE env, improve help order and status bar hint",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-18T07:24:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8c8568163ec87db27ffdd1dd14b2b8d80fa416c4",
          "body": null,
          "is_bot": false,
          "headline": "docs: document that native/radio_stream_stations.db must be committed",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-18T07:22:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c953d3a23aa1514afaca4dcaaf2b82764bb1f88f",
          "body": null,
          "is_bot": false,
          "headline": "chore: update radio station database",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-18T07:21:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "922fa45d57583219e7770fa4556f5b5d8bbb96b0",
          "body": "- Add mouse_capture: bool to config.toml (default true)\n- Alt+M toggles mouse capture at runtime\n- --no-mouse CLI flag overrides config\n- Status bar shows 'mouse off' when disabled\n- mouse capture disabled events are swallowed so text selection works\n\nCloses #issue",
          "is_bot": false,
          "headline": "feat: mouse capture toggle (Alt+M), --no-mouse flag, config option",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-18T07:19:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5fcece6e6d941dfbc40c4866e4a9a218e351c5e3",
          "body": "…existing genre entries",
          "is_bot": false,
          "headline": "fix(radio-scraper): unescape HTML entities in parse_genres, clean 61 …",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-18T07:00:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2bba48c7e1a93c37e06bec794f899f0179fadab7",
          "body": "…alidation",
          "is_bot": false,
          "headline": "docs(radio-scraper): clarify --prune catches dead URLs without HEAD v…",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-18T06:58:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0070a44f776c6a18cac756bccfb91348bf489ea5",
          "body": null,
          "is_bot": false,
          "headline": "bump(radio-scraper): increase genre enrichment from 50 to 200 per run",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-18T06:46:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0d31c4561f7c701d53fc422a6f6e7ec561149f5c",
          "body": "…, --prune CLI",
          "is_bot": false,
          "headline": "feat(radio-scraper): rate limiting, UPSERT, radio_id dedup, --db-path…",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-18T06:44:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e35a9903671a9ce8d6bd7cde0f28119cecdb29ac",
          "body": "…ENTS.md",
          "is_bot": false,
          "headline": "docs: add --no-build fast dev cycle and fix stale plugin counts in AG…",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-18T06:22:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ab527a5fd960e957961295f38c2cf419447ca471",
          "body": null,
          "is_bot": false,
          "headline": "refactor: merge dns-lookup into dns-globe to remove duplicate DNS plugin",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-18T06:12:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "69b7426c339269229dae6533b697b534c4b97a7e",
          "body": "…2 plugins)",
          "is_bot": false,
          "headline": "refactor: move plugin hints from panel bottom border to IPC footer (9…",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-11T15:55:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2ba0a173f7de8e0cbf75b44f44f7dfeddc0e75ff",
          "body": "… dot in status bar",
          "is_bot": false,
          "headline": "fix(base64-encoder): remove output border box, fix trailing separator…",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-11T14:16:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7d7ffc0ba6c6748c45e02997acec758047ebb07f",
          "body": "… plugin consume ? key",
          "is_bot": false,
          "headline": "fix(base64-encoder): move hints to IPC footer, persist clipboard, let…",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-11T13:56:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "56cec499c994979500a1e19f7f5b729f900b343f",
          "body": null,
          "is_bot": false,
          "headline": "fix: ascii-table add 'l' key to load sample data",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-11T13:30:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6430e17f0dd89b884c3a0482dd40fc98d5fc8d52",
          "body": "…oss 37 plugins",
          "is_bot": false,
          "headline": "fix: correct palette_commands format and render cmd serialization acr…",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-11T13:29:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f205c55c8e8804945c8906de3cf3487ef63042a5",
          "body": null,
          "is_bot": false,
          "headline": "fix: log-viewer palette_commands format + agent test instructions",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-11T13:03:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fdfaf73eedec0463ce41b34cec66ff162b999d9b",
          "body": "- Add LoggerBuffer in santui-core (log::Log impl with ring buffer)\n- Add LogEntry type + HostMsg::LogEntries to IPC protocol\n- Wire LoggerBuffer as global logger in main.rs (forwards to env_logger\n  for stderr, hardcoded to Warn to ignore RUST_LOG leakage)\n- Register log-viewer as persistent default\n[…]\n (press 'l' to toggle)\n- Remove init watchdog (was hiding real failures behind 'forced ready')\n- Convert LogEntries from newtype variant to struct variant (serde\n  tag='type' doesn't support newtypes)",
          "is_bot": false,
          "headline": "feat: runtime log capture via LoggerBuffer + log-viewer plugin",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-11T12:44:35Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "dfc63254fec38b993041521ebe10af8faec913b8",
          "body": null,
          "is_bot": false,
          "headline": "refactor(starfield): use time-based ticks instead of frame-based",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-11T10:34:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b8dd9ee6733348a8fc8b5a2f768a6e8bfe414f44",
          "body": null,
          "is_bot": false,
          "headline": "chore: bump version to 0.2.29",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-11T10:07:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d31c6cd43a9271f6b321efa479624b8f331e0795",
          "body": null,
          "is_bot": false,
          "headline": "chore: bump version to 0.2.29",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-11T10:07:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ba6c20c120af75a6e14dfeef6b77410496429529",
          "body": "Broken streams (e.g. 1.FM with no audio) could leave the mpv event loop in\na stuck state where subsequent LoadUrl commands were never processed,\ncausing all stations to hang on 'Connecting' forever.\n\n- Every station switch now calls reset_mpv(), which creates a completely\n  fresh mpv handle + thread\n[…]\nops advancing its counter for\n  5s while Connecting/Playing, a forced reset fires automatically.\n- cfg!(test) mock mode prevents parallel tests from corrupting libmpv's\n  non-thread-safe global state.",
          "is_bot": false,
          "headline": "fix(radio-stream-player): recreate mpv handle on every station switch",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-11T10:03:06Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e7f0228b3a3b87167ceb84e202fc3533aa767516",
          "body": null,
          "is_bot": false,
          "headline": "fix(radio): pre-drain ALL stale mpv events before LoadUrl, not after",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-11T08:22:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f8a8468623903a29bb6a1b377205646bdf20c384",
          "body": "…-stream retry poisoning",
          "is_bot": false,
          "headline": "fix(radio): separate FileLoaded from Metadata events to prevent stale…",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-11T08:16:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0e24527a6627716740e8cd33e22a5d2158f5efdc",
          "body": "… from new stream",
          "is_bot": false,
          "headline": "fix(radio): only drain END_FILE events after LoadUrl, not FILE_LOADED…",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-11T08:12:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f7d04db06193b2f3e66383cce337d635f41ff7fb",
          "body": "… scrap broken seq approach\n\n- Remove fake Metadata sent immediately after every LoadUrl (was causing\n  premature Connecting -> Playing transitions that triggered retry loops)\n- Remove redundant Stop before LoadUrl in play_selected_station and retry\n  path (the 'replace' flag already stops current p\n[…]\ne machine later\n- Scrap the load_seq approach — it was fundamentally broken because\n  Stop + LoadUrl events get cross-tagged when last_load_seq is updated\n  before wait_event retrieves the old EndFile",
          "is_bot": false,
          "headline": "fix(radio): drain stale mpv events on LoadUrl, remove redundant Stop,…",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-11T07:36:46Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2634e9909da85983713eebf3fd792d3e57183394",
          "body": "- Remove spurious MpvMsg::Metadata sent immediately after every LoadUrl,\n  which caused premature Connecting -> Playing transitions before the\n  stream actually connected, triggering a retry cycle.\n- Add load_seq generation counter to filter stale EndFile events from\n  aborted previous loads when rapidly switching stations.\n- Handle EndFile(ERROR) during Connecting with immediate Error state\n  instead of silently dropping it.",
          "is_bot": false,
          "headline": "fix(radio): prevent infinite retry loop from fake Metadata on LoadUrl",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-11T07:22:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8d68f3569959666e2d425318e30f4c4cfa560444",
          "body": "…and handler",
          "is_bot": false,
          "headline": "feat(radio): persist volume across restarts; remove dead palette_comm…",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-11T07:10:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0d580b393a97bae6e661f6790a839ad79bb63e75",
          "body": "…ures",
          "is_bot": false,
          "headline": "feat(radio): add exponential backoff retry for stream connection fail…",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-11T07:01:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "25cbc8faa575d3d4d2deeb2936d7170e87f9e0e8",
          "body": null,
          "is_bot": false,
          "headline": "fix: remove redundant borrow in format arg to satisfy new clippy lint",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-11T06:33:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "35f4a6ee5fb446fad50f6b6ebf77266faaed7b3b",
          "body": "…ble allow\n\n- arboard 3.3 -> 3.6\n- feed-rs 2.3 -> 2.4\n- rand 0.8 -> 0.10 (9 crates) — updated to new API (rng(), random_range(), etc.)\n- toml 0.8 -> 1.1 — updated to Table-based API\n- notify 7 -> 8\n- sha2/sha1/md-5 0.10 -> 0.11 — fixed LowerHex formatting\n- sysinfo 0.30 -> 0.39 — updated API calls\n- tower-http 0.6 -> 0.7\n- jsonwebtoken 9 -> 10\n- tungstenite 0.24 -> 0.29 — Utf8Bytes type\n- chrono-tz 0.9 -> 0.10\n- convert_case 0.6 -> 0.11\n- qrcode 0.12 -> 0.14\n- zip 2 -> 8",
          "is_bot": false,
          "headline": "chore: bump all deps to latest versions via cargo upgrade --incompati…",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-11T06:30:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "aee573ade5b0b68f707f514261ed9665896173c5",
          "body": "…lient\n\n- New crate crates/server: axum-based server with JWT auth, REST sync API,\n  SQLite storage, and web UI dashboard/login pages\n- SyncClient in crates/core: best-effort, queue-based, non-blocking push\n  to remote server, driven from main loop\n- Config: add [server] section with server.url for \n[…]\nional sync\n- SantuiDb in main.rs enqueues writes to SyncClient on every set_value()\n- Docs: update architecture.md, README.md, AGENTS.md\n- AGENTS.md: add 'Never delete code unintentionally' convention",
          "is_bot": false,
          "headline": "feat: add optional self-hosted sync server (santui-server) and sync c…",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-10T07:00:36Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7ee3f579d57dac5fdf2d4e06f3ffb640e92c072b",
          "body": null,
          "is_bot": false,
          "headline": "word-wrap lyrics panel instead of truncating long lines",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-10T05:37:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5073c1033adc4e39d62132f122b46e3f5792bcb6",
          "body": "…Starting plugin process...' message",
          "is_bot": false,
          "headline": "remove redundant loading indicators: dot on focused panel title and '…",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-10T05:20:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f0e1aa148dee07b98900c778ad45c8835fa2608f",
          "body": null,
          "is_bot": false,
          "headline": "Replace Unicode ellipsis … with ASCII ...",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-10T05:08:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "928da19c49d2e95e951f6ad5bda148e60c6a131c",
          "body": "These plugins had entries in plugins-manifest.json but were not in the\nworkspace members list, causing cargo build and dev-setup.sh to skip them:\n\nascii-table, base64-encoder, bmi-calculator, case-converter, color-picker,\ncsv-viewer, hash-calculator, loan-calculator, lorem-generator,\npassword-generator, periodic-table, qr-generator, slug-generator,\nuuid-generator",
          "is_bot": false,
          "headline": "fix: add 14 orphaned plugins to workspace members",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-09T18:57:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "adef8ff3efa79009fd2f7de51e4a1afffd7865dc",
          "body": "… nom v1.2.4 dependency\n\nmeval v0.2.0 depends on nom v1.2.4 which will be rejected by future\nRust versions. Replaced with fasteval v0.2.4 (MIT, zero dependencies)\nwhich supports the same expression syntax and built-in functions.",
          "is_bot": false,
          "headline": "fix(math-evaluator): replace meval with fasteval to remove deprecated…",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-09T18:11:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "47eebbb15c4264c90e499f4006774d3eb52efe21",
          "body": "…ugin",
          "is_bot": false,
          "headline": "feat: add mouse support to plugin host, radio player, and registry pl…",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-09T18:07:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2599ee54670d57a44c3dbc1e0c2aea5c0dbb7ef5",
          "body": "cargo update locked 33 packages to latest compatible versions.\nFix unrelated changes in ipc render and quran-reader that were\nleftover from previous work.",
          "is_bot": false,
          "headline": "chore: bump deps and fix registry search change fallout",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-09T04:43:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3f523e14755e9aa5e8afb7825f7370769c6cd785",
          "body": "Follows the same pattern as Radio Stream Player — press / to enter\nsearch mode, type to filter by name/description/publisher, Esc to\ncancel, Enter to open detail on the filtered selection. Filtered\ncount shown as N / M available. Cursor blinks while typing.",
          "is_bot": false,
          "headline": "feat(registry): add live search to plugin list",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-08T08:33:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "46e858b947b39e0d50b8ac20ba775049d9a45027",
          "body": "…iminate 6 empty lines at bottom",
          "is_bot": false,
          "headline": "fix(registry): use correct table height (ah-4 instead of ah-10) to el…",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-08T05:25:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "61c62d005838006b44243364d84c9349fa92eb42",
          "body": "…bers",
          "is_bot": false,
          "headline": "docs: clarify plugin addition requires both manifest + Cargo.toml mem…",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-08T05:18:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5fb2af647263f111226b30fe772677a9fe52bfbb",
          "body": "Previous sessions added plugins to plugins-manifest.json and created\nsource directories but forgot to include them in the root Cargo.toml\nworkspace members list, causing dev-setup.sh to only register 79/112\nplugins. This adds the missing 31: breathing-exercise, cheatsheet-browser,\ndns-globe, dns-loo\n[…]\ng-traceroute, pipe-runner, snake-game, stock-ticker, subnet-calculator,\nterminal-pet, text-toolkit, totp-viewer, typing-test, wake-on-lan,\nwater-tracker, webhook-tester, websocket-client, whois-lookup",
          "is_bot": false,
          "headline": "fix: add 31 missing plugins to workspace members",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-08T05:06:23Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1bfec8da977272f2792252f7c41f2db3d18d4448",
          "body": "- mysql-browser: interactive MySQL database browser with mock queries,\n  SHOW TABLES, SELECT, DESCRIBE, INSERT, UPDATE, DELETE, CREATE/DROP TABLE\n- irc-client: IRC chat client with channel list, message view,\n  /join, /nick, /msg, /list commands, Ctrl+Up/Down channel switching\n- Both follow single-binary IPC plugin pattern (mock data, no external deps)",
          "is_bot": false,
          "headline": "feat: add mysql-browser and irc-client plugins",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-08T04:52:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7d89c6bba275af1743be03400369643a867f9251",
          "body": "Replace hardcoded 27-row plugin tables in README.md and website/guide/index.md\nwith a dynamic reference to the Plugin Registry. Collapse workspace trees in\nAGENTS.md and docs/development.md to show only key examples + count. Update\nrelease.yml validate step to read plugin IDs from plugins-manifest.json, and\nreplace hardcoded 18-plugin release files list with a wildcard glob.",
          "is_bot": false,
          "headline": "docs: sync plugin listings with 110-plugin count",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-08T04:42:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f1789cdf9a5b8c6a2d6452b4fcbb09d694b887a4",
          "body": null,
          "is_bot": false,
          "headline": "docs: add plugins-manifest.json note to AGENTS.md",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-08T04:37:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3ff7f76f6c81e8068a5903d4874d0d4dcfa8b363",
          "body": "This is the source of truth used by dev-setup.sh and CI\nto generate plugins.json and platform-specific release manifests.",
          "is_bot": false,
          "headline": "chore: add all 84 missing plugins to plugins-manifest.json",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-08T04:36:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2c7c37ebc52f68ad868e2fb5b6899ee946e9f987",
          "body": "…wser, Code Runner, Network Monitor, Time Tracker, Recipe Manager, Package Manager, Music Controller, Mermaid Renderer",
          "is_bot": false,
          "headline": "feat: implement 10 more plugins — AI Chat, SQLite Browser, GitHub Bro…",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-08T04:32:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7dfa90a00012a0b5c42e1f54abff0a66b5626af2",
          "body": "Add plugin implementations for:\n  api-monitor, archive-browser, batch-renamer, budget-tracker,\n  chess, cloud-cost, connection-string-builder, dashboard,\n  disk-usage, docker-dashboard, email-client, env-manager,\n  erd-sketch, file-diff, file-explorer, mongo-explorer,\n  pixel-art, port-scanner, post\n[…]\nest, sprint-retro, sql-playground, ssl-checker\n\nAll plugins follow the IPC stdio protocol pattern with bordered\npanels, semantic theme colors, consumed-key handling, and Tick\nsupport in the main loop.",
          "is_bot": false,
          "headline": "feat: implement all 28 remaining plugin IPC binaries",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-08T04:14:44Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b0e71b3654fae82e3a250c8d4165198498d332d4",
          "body": "… loss",
          "is_bot": false,
          "headline": "docs: fix git push command in release instructions to avoid tag event…",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-06T22:24:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2f5e7d6b546ee379810814e744681c9a5d25cc12",
          "body": null,
          "is_bot": false,
          "headline": "chore: bump version to 0.2.28",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-06T22:15:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1114d9c051665d408fc168624cae358e7afa1dea",
          "body": null,
          "is_bot": false,
          "headline": "docs: update docs to reflect lefthook pre-commit automation",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-06T22:12:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "71407f57c6cf2dec64ec227bea90738372e8cdfb",
          "body": null,
          "is_bot": false,
          "headline": "fix: remove github URL from about screen copyright line",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-06T22:10:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d8ffa79858bd41a53a5152895e00b76bc0310ee1",
          "body": null,
          "is_bot": false,
          "headline": "fix: highlight key names in home screen hint with accent color",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-06T22:08:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ca40b3eec72d471621ccbd04d976df93ffe6e81b",
          "body": null,
          "is_bot": false,
          "headline": "chore: fix formatting, set up lefthook pre-commit hook",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-06T22:06:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1ed7e9bc717c5c8ea2a8fc72b54dd00b52d91c33",
          "body": null,
          "is_bot": false,
          "headline": "fix: remove double spaces in home screen hint text",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-06T21:58:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a110bc1beac5ad3963cb9ffcabc4649a2a09bdd6",
          "body": null,
          "is_bot": false,
          "headline": "chore: replace 'Sony AK' with 'Santui contributors' in website footer",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-06T21:54:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cc9ad9b8a1deafb71f90ca86bc478dd5642ec36f",
          "body": null,
          "is_bot": false,
          "headline": "fix: dynamically compute copyright year, credit Santui contributors",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-06T21:53:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "94e63c45d3bf0aa09e16213682ec8d4dfdc676ec",
          "body": "…hrough gaps",
          "is_bot": false,
          "headline": "feat(splash): render logo character-by-character so starfield shows t…",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-06T21:38:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fc5956ea57699a773126a3e5a9c1fda54d87269f",
          "body": "…uring Connecting, add 10s timeout",
          "is_bot": false,
          "headline": "fix(radio): always send Metadata on stream events and guard EndFile d…",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-06T21:24:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2a87da40fc8ccd0e1fd653c982a050405a85362f",
          "body": "… title is empty",
          "is_bot": false,
          "headline": "fix(radio): transition Connecting→Playing on first Metadata even when…",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-06T21:17:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "963ca7dc5a090541d5b1c6c81c969e7de31c951f",
          "body": null,
          "is_bot": false,
          "headline": "feat(radio): show lyrics source attribution in lyrics panel footer",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-06T21:11:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7749d16a7e9367c645b50776eb7032b8ab0f8f91",
          "body": "…itioning",
          "is_bot": false,
          "headline": "refactor(radio): extract Now Playing title to constant for volume pos…",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-06T21:09:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "889ec7d0f12d6778807d200b672b7a73f0f251b4",
          "body": null,
          "is_bot": false,
          "headline": "feat(radio): show scroll position percentage on stations list",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-06T21:01:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1a6d4d5242588c7fa7bc07992a10b547239f304e",
          "body": null,
          "is_bot": false,
          "headline": "fix(radio): add 8s HTTP timeout to lrclib and itunes lyric lookups",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-06T20:56:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a18a7c85430279f12bd9e5d6ea6c39b85a64b984",
          "body": "…nting wrong group placement",
          "is_bot": false,
          "headline": "fix(core): invalidate palette cache when registry items change, preve…",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-06T20:47:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3f93f34e29fc79f5f45c4f62e9c3b6b48dafa499",
          "body": null,
          "is_bot": false,
          "headline": "fix(radio): remove redundant palette commands from home screen",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-06T20:37:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0707cf17b773977308499176eb0ca39594258316",
          "body": null,
          "is_bot": false,
          "headline": "fix(radio): dim stations table text when lyrics panel has focus",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-06T20:32:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c62f8d6fb58bfedc9051208c6be8702cad5170c4",
          "body": null,
          "is_bot": false,
          "headline": "fix(radio): Now Playing panel should never appear dimmed",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-06T20:30:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c358581053e86a572ec3304b3f62317c2b9214b9",
          "body": null,
          "is_bot": false,
          "headline": "fix(radio): align stations table header color with registry (text_muted)",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-06T20:27:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5aacebb4594da82d08c6a18abde8a345e34e875c",
          "body": "…d, bright when focused",
          "is_bot": false,
          "headline": "fix(radio): lyrics content follows panel focus — dimmed when unfocuse…",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-06T20:25:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "08dcce041963b8e2cfe564d509062e71622fae21",
          "body": "…ocused, not scroll hints",
          "is_bot": false,
          "headline": "fix(radio): show 'tab stations' hint on stations footer when lyrics f…",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-06T20:19:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a7ab27d6bd4ae90d16143d006965d237aca23776",
          "body": null,
          "is_bot": false,
          "headline": "fix(radio): stations panel appeared dimmed when lyrics were hidden",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-06T20:17:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fc97dfc8131ff3fbc4a286888d8e10e365ea3afd",
          "body": null,
          "is_bot": false,
          "headline": "revert(radio,registry): restore muted table header color",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-06T20:15:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "93aacc64e1b2893eacf90bc8401c69680f7af6d1",
          "body": null,
          "is_bot": false,
          "headline": "chore(radio): use clearer 'show lyrics'/'hide lyrics' hint labels",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-06T20:15:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "63b20bb8d791e0c86aeae408c27f059924211b61",
          "body": "…isible",
          "is_bot": false,
          "headline": "feat(radio): dim unfocused panel borders and titles when lyrics are v…",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-06T20:11:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f743baf777170206cdcd9ae7b081f156563860c8",
          "body": null,
          "is_bot": false,
          "headline": "fix(radio): opening lyrics panel no longer steals keyboard focus",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-06T20:06:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "75663de3b9dfb6c29e5aef35ffe37d9758b0e5ee",
          "body": null,
          "is_bot": false,
          "headline": "feat(radio): add Connecting state for playback lifecycle feedback",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-06T19:54:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d08d5982e44c93c4d607810ba3522aa6e271a1b9",
          "body": "… line",
          "is_bot": false,
          "headline": "fix(radio): PageUp/PageDown in lyrics now scrolls by full page, not 1…",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-06T19:50:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1c80a927e0097aa41e99903ac5fe1c64a52a58ce",
          "body": "…nt lines",
          "is_bot": false,
          "headline": "fix(radio): use accent color for table headers, add spacing before hi…",
          "author_name": "Sony AK",
          "author_login": "sonyarianto",
          "committed_at": "2026-07-06T19:42:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 21,
      "commits_last_year": 563,
      "latest_release_at": "2026-07-23T02:25:42Z",
      "latest_release_tag": "v0.2.31",
      "releases_from_tags": false,
      "days_since_last_push": 5,
      "active_weeks_last_year": 6,
      "days_since_latest_release": 1,
      "mean_days_between_releases": 2.6
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": false,
      "health_percentage": 42,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "santui-db",
          "exists": true,
          "license": "MIT",
          "keywords": [],
          "ecosystem": "crates",
          "matches_repo": true,
          "registry_url": "https://crates.io/crates/santui-db",
          "is_deprecated": false,
          "latest_version": "0.2.31",
          "repository_url": "https://github.com/sonyarianto/santui",
          "versions_count": 19,
          "total_downloads": 425,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": 142,
          "first_published_at": "2026-06-21T10:11:49.093827Z",
          "latest_published_at": "2026-07-18T18:11:43.422612Z",
          "latest_version_yanked": false,
          "days_since_latest_publish": 5
        },
        {
          "name": "santui",
          "exists": true,
          "license": "MIT",
          "keywords": [],
          "ecosystem": "crates",
          "matches_repo": true,
          "registry_url": "https://crates.io/crates/santui",
          "is_deprecated": false,
          "latest_version": "0.2.31",
          "repository_url": "https://github.com/sonyarianto/santui",
          "versions_count": 20,
          "total_downloads": 351,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": 117,
          "first_published_at": "2026-06-21T06:00:30.669747Z",
          "latest_published_at": "2026-07-18T18:14:02.953489Z",
          "latest_version_yanked": false,
          "days_since_latest_publish": 5
        },
        {
          "name": "santui-ipc",
          "exists": true,
          "license": "MIT",
          "keywords": [],
          "ecosystem": "crates",
          "matches_repo": true,
          "registry_url": "https://crates.io/crates/santui-ipc",
          "is_deprecated": false,
          "latest_version": "0.2.31",
          "repository_url": "https://github.com/sonyarianto/santui",
          "versions_count": 22,
          "total_downloads": 504,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": 168,
          "first_published_at": "2026-06-21T05:46:13.323084Z",
          "latest_published_at": "2026-07-18T18:09:16.389892Z",
          "latest_version_yanked": false,
          "days_since_latest_publish": 5
        },
        {
          "name": "santui-auth",
          "exists": true,
          "license": "MIT",
          "keywords": [],
          "ecosystem": "crates",
          "matches_repo": true,
          "registry_url": "https://crates.io/crates/santui-auth",
          "is_deprecated": false,
          "latest_version": "0.2.31",
          "repository_url": "https://github.com/sonyarianto/santui",
          "versions_count": 22,
          "total_downloads": 499,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": 166,
          "first_published_at": "2026-06-21T05:47:27.210511Z",
          "latest_published_at": "2026-07-18T18:10:31.288689Z",
          "latest_version_yanked": false,
          "days_since_latest_publish": 5
        },
        {
          "name": "santui-core",
          "exists": true,
          "license": "MIT",
          "keywords": [],
          "ecosystem": "crates",
          "matches_repo": true,
          "registry_url": "https://crates.io/crates/santui-core",
          "is_deprecated": false,
          "latest_version": "0.2.31",
          "repository_url": "https://github.com/sonyarianto/santui",
          "versions_count": 22,
          "total_downloads": 683,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": 228,
          "first_published_at": "2026-06-21T05:45:10.439762Z",
          "latest_published_at": "2026-07-18T18:08:10.005114Z",
          "latest_version_yanked": false,
          "days_since_latest_publish": 5
        },
        {
          "name": "santui",
          "exists": true,
          "license": "MIT",
          "keywords": [
            "tui",
            "terminal",
            "launcher",
            "santui"
          ],
          "ecosystem": "npm",
          "matches_repo": true,
          "registry_url": "https://www.npmjs.com/package/santui",
          "is_deprecated": false,
          "latest_version": "0.2.31",
          "repository_url": "https://github.com/sonyarianto/santui",
          "versions_count": 30,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 1,
          "monthly_downloads": 3036,
          "first_published_at": "2026-06-20T09:41:03.924000Z",
          "latest_published_at": "2026-07-18T18:07:44.164000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 5
        },
        {
          "name": "santui-registry",
          "exists": true,
          "license": "MIT",
          "keywords": [],
          "ecosystem": "crates",
          "matches_repo": true,
          "registry_url": "https://crates.io/crates/santui-registry",
          "is_deprecated": false,
          "latest_version": "0.2.31",
          "repository_url": "https://github.com/sonyarianto/santui",
          "versions_count": 22,
          "total_downloads": 556,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": 185,
          "first_published_at": "2026-06-21T05:43:53.443169Z",
          "latest_published_at": "2026-07-18T18:12:49.380189Z",
          "latest_version_yanked": false,
          "days_since_latest_publish": 5
        }
      ]
    },
    "popularity": {
      "forks": 0,
      "stars": 12,
      "watchers": 0,
      "fork_history": {
        "days": [],
        "complete": true,
        "collected": 0,
        "total_forks": 0
      },
      "star_history": null,
      "open_issues_and_prs": 9
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": false,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [
        "Cargo.toml",
        "crates/app/Cargo.toml",
        "crates/auth/Cargo.toml",
        "crates/core/Cargo.toml",
        "crates/db/Cargo.toml",
        "crates/dev-setup/Cargo.toml",
        "crates/ipc/Cargo.toml",
        "crates/plugins/ai-chat/Cargo.toml",
        "crates/plugins/api-monitor/Cargo.toml",
        "crates/plugins/archive-browser/Cargo.toml",
        "crates/plugins/ascii-table/Cargo.toml",
        "crates/plugins/base64-encoder/Cargo.toml",
        "crates/plugins/batch-renamer/Cargo.toml",
        "crates/plugins/bmi-calculator/Cargo.toml",
        "crates/plugins/bookmark-launcher/Cargo.toml",
        "crates/plugins/breathing-exercise/Cargo.toml",
        "crates/plugins/budget-tracker/Cargo.toml",
        "crates/plugins/calendar-agenda/Cargo.toml",
        "crates/plugins/case-converter/Cargo.toml",
        "crates/plugins/cheatsheet-browser/Cargo.toml",
        "crates/plugins/chess/Cargo.toml",
        "crates/plugins/clipboard-history/Cargo.toml",
        "crates/plugins/cloud-cost/Cargo.toml",
        "crates/plugins/code-runner/Cargo.toml",
        "crates/plugins/color-picker/Cargo.toml",
        "crates/plugins/connection-string-builder/Cargo.toml",
        "crates/plugins/cron-expression-helper/Cargo.toml",
        "crates/plugins/csv-viewer/Cargo.toml",
        "crates/plugins/currency-converter/Cargo.toml",
        "crates/plugins/dashboard/Cargo.toml",
        "crates/plugins/dictionary-thesaurus/Cargo.toml",
        "crates/plugins/disk-usage/Cargo.toml",
        "crates/plugins/dns-globe/Cargo.toml",
        "crates/plugins/docker-dashboard/Cargo.toml",
        "crates/plugins/email-client/Cargo.toml",
        "crates/plugins/env-manager/Cargo.toml",
        "crates/plugins/erd-sketch/Cargo.toml",
        "crates/plugins/expense-splitter/Cargo.toml",
        "crates/plugins/file-diff/Cargo.toml",
        "crates/plugins/file-explorer/Cargo.toml",
        "crates/plugins/flashcards/Cargo.toml",
        "crates/plugins/fortune-cookie/Cargo.toml",
        "crates/plugins/game-of-life/Cargo.toml",
        "crates/plugins/git-repository-dashboard/Cargo.toml",
        "crates/plugins/github-browser/Cargo.toml",
        "crates/plugins/gpg-encryptor/Cargo.toml",
        "crates/plugins/graphql-playground/Cargo.toml",
        "crates/plugins/habit-tracker/Cargo.toml",
        "crates/plugins/hacker-news-reader/Cargo.toml",
        "crates/plugins/hash-calculator/Cargo.toml",
        "crates/plugins/hex-viewer/Cargo.toml",
        "crates/plugins/http-client/Cargo.toml",
        "crates/plugins/iptv-player/Cargo.toml",
        "crates/plugins/irc-client/Cargo.toml",
        "crates/plugins/json-yaml-formatter/Cargo.toml",
        "crates/plugins/jwt-inspector/Cargo.toml",
        "crates/plugins/k8s-viewer/Cargo.toml",
        "crates/plugins/kanban-board/Cargo.toml",
        "crates/plugins/loan-calculator/Cargo.toml",
        "crates/plugins/log-viewer/Cargo.toml",
        "crates/plugins/lorem-generator/Cargo.toml",
        "crates/plugins/markdown-previewer/Cargo.toml",
        "crates/plugins/math-evaluator/Cargo.toml",
        "crates/plugins/mermaid-renderer/Cargo.toml",
        "crates/plugins/mongo-explorer/Cargo.toml",
        "crates/plugins/music-player-controller/Cargo.toml",
        "crates/plugins/music-preview/Cargo.toml",
        "crates/plugins/mysql-browser/Cargo.toml",
        "crates/plugins/network-bandwidth-monitor/Cargo.toml",
        "crates/plugins/package-manager/Cargo.toml",
        "crates/plugins/package-version-monitor/Cargo.toml",
        "crates/plugins/password-generator/Cargo.toml",
        "crates/plugins/path-editor/Cargo.toml",
        "crates/plugins/periodic-table/Cargo.toml",
        "crates/plugins/ping-traceroute/Cargo.toml",
        "crates/plugins/pipe-runner/Cargo.toml",
        "crates/plugins/pixel-art/Cargo.toml",
        "crates/plugins/pomodoro-timer/Cargo.toml",
        "crates/plugins/port-scanner/Cargo.toml",
        "crates/plugins/postgres-console/Cargo.toml",
        "crates/plugins/process-manager/Cargo.toml",
        "crates/plugins/qr-generator/Cargo.toml",
        "crates/plugins/quick-notes/Cargo.toml",
        "crates/plugins/quran-reader/Cargo.toml",
        "crates/plugins/radio-stream-player/Cargo.toml",
        "crates/plugins/radio-stream-player/scraper/Cargo.toml",
        "crates/plugins/recipe-manager/Cargo.toml",
        "crates/plugins/redis-explorer/Cargo.toml",
        "crates/plugins/regex-tester/Cargo.toml",
        "crates/plugins/registry/Cargo.toml",
        "crates/plugins/rss-reader/Cargo.toml",
        "crates/plugins/sdk-playground/Cargo.toml",
        "crates/plugins/service-manager/Cargo.toml",
        "crates/plugins/slug-generator/Cargo.toml",
        "crates/plugins/snake-game/Cargo.toml",
        "crates/plugins/snippet-manager/Cargo.toml",
        "crates/plugins/speed-test/Cargo.toml",
        "crates/plugins/sprint-retro/Cargo.toml",
        "crates/plugins/sql-playground/Cargo.toml",
        "crates/plugins/sqlite-browser/Cargo.toml",
        "crates/plugins/ssh-manager/Cargo.toml",
        "crates/plugins/ssl-checker/Cargo.toml",
        "crates/plugins/stock-ticker/Cargo.toml",
        "crates/plugins/subnet-calculator/Cargo.toml",
        "crates/plugins/system-monitor/Cargo.toml",
        "crates/plugins/terminal-pet/Cargo.toml",
        "crates/plugins/text-toolkit/Cargo.toml",
        "crates/plugins/time-tracker/Cargo.toml",
        "crates/plugins/todo-task-manager/Cargo.toml",
        "crates/plugins/totp-viewer/Cargo.toml",
        "crates/plugins/typing-test/Cargo.toml",
        "crates/plugins/unit-converter/Cargo.toml",
        "crates/plugins/uuid-generator/Cargo.toml",
        "crates/plugins/wake-on-lan/Cargo.toml",
        "crates/plugins/water-tracker/Cargo.toml",
        "crates/plugins/weather/Cargo.toml",
        "crates/plugins/webhook-tester/Cargo.toml",
        "crates/plugins/websocket-client/Cargo.toml",
        "crates/plugins/whois-lookup/Cargo.toml",
        "crates/plugins/world-clock/Cargo.toml",
        "crates/registry/Cargo.toml",
        "crates/server/Cargo.toml",
        "templates/plugin/Cargo.toml"
      ],
      "largest_source_bytes": 89343,
      "source_files_sampled": 218,
      "oversized_source_files": 1,
      "agent_instruction_files": [
        "AGENTS.md"
      ],
      "agent_instruction_max_bytes": 8657
    },
    "dependencies": {
      "manifests": [
        "Cargo.toml",
        "website/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": [
        "crates",
        "npm"
      ],
      "dependencies": [
        {
          "name": "santui-core",
          "manifest": "crates/app/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.2.31"
        },
        {
          "name": "santui-ipc",
          "manifest": "crates/app/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.2.31"
        },
        {
          "name": "santui-auth",
          "manifest": "crates/app/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.2.31"
        },
        {
          "name": "santui-registry",
          "manifest": "crates/app/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.2.31"
        },
        {
          "name": "santui-db",
          "manifest": "crates/app/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.2.31"
        },
        {
          "name": "rusqlite",
          "manifest": "crates/app/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.40"
        },
        {
          "name": "log",
          "manifest": "crates/app/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "env_logger",
          "manifest": "crates/app/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "santui-core",
          "manifest": "crates/auth/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.2.31"
        },
        {
          "name": "ureq",
          "manifest": "crates/auth/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "3"
        },
        {
          "name": "url",
          "manifest": "crates/auth/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "2"
        },
        {
          "name": "serde",
          "manifest": "crates/auth/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "serde_json",
          "manifest": "crates/auth/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "dirs",
          "manifest": "crates/auth/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "6"
        },
        {
          "name": "ratatui",
          "manifest": "crates/core/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.30"
        },
        {
          "name": "crossterm",
          "manifest": "crates/core/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.29"
        },
        {
          "name": "serde",
          "manifest": "crates/core/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "serde_json",
          "manifest": "crates/core/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "toml",
          "manifest": "crates/core/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1.1"
        },
        {
          "name": "log",
          "manifest": "crates/core/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "ctrlc",
          "manifest": "crates/core/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "3.5"
        },
        {
          "name": "notify",
          "manifest": "crates/core/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "8"
        },
        {
          "name": "ureq",
          "manifest": "crates/core/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "3"
        },
        {
          "name": "rusqlite",
          "manifest": "crates/db/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.40"
        },
        {
          "name": "serde",
          "manifest": "crates/db/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "serde_json",
          "manifest": "crates/db/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "serde",
          "manifest": "crates/dev-setup/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "serde_json",
          "manifest": "crates/dev-setup/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "sha2",
          "manifest": "crates/dev-setup/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "rayon",
          "manifest": "crates/dev-setup/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "santui-core",
          "manifest": "crates/ipc/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.2.31"
        },
        {
          "name": "ratatui",
          "manifest": "crates/ipc/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.30"
        },
        {
          "name": "crossterm",
          "manifest": "crates/ipc/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.29"
        },
        {
          "name": "serde",
          "manifest": "crates/ipc/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "serde_json",
          "manifest": "crates/ipc/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "bincode",
          "manifest": "crates/ipc/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "2"
        },
        {
          "name": "log",
          "manifest": "crates/ipc/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "santui-core",
          "manifest": "crates/registry/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.2.31"
        },
        {
          "name": "serde",
          "manifest": "crates/registry/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "serde_json",
          "manifest": "crates/registry/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "toml",
          "manifest": "crates/registry/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1.1"
        },
        {
          "name": "ureq",
          "manifest": "crates/registry/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "3"
        },
        {
          "name": "sha2",
          "manifest": "crates/registry/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.11"
        },
        {
          "name": "santui-core",
          "manifest": "crates/server/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.2.31"
        },
        {
          "name": "axum",
          "manifest": "crates/server/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.8"
        },
        {
          "name": "tokio",
          "manifest": "crates/server/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        },
        {
          "name": "tower-http",
          "manifest": "crates/server/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.7"
        },
        {
          "name": "serde",
          "manifest": "crates/server/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "serde_json",
          "manifest": "crates/server/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "jsonwebtoken",
          "manifest": "crates/server/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "10"
        },
        {
          "name": "rusqlite",
          "manifest": "crates/server/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.40"
        },
        {
          "name": "ureq",
          "manifest": "crates/server/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "3"
        },
        {
          "name": "tracing",
          "manifest": "crates/server/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.1"
        },
        {
          "name": "tracing-subscriber",
          "manifest": "crates/server/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.3"
        },
        {
          "name": "clap",
          "manifest": "crates/server/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "4"
        },
        {
          "name": "santui-ipc",
          "manifest": "templates/plugin/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "serde",
          "manifest": "templates/plugin/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        }
      ],
      "all_dependencies": {
        "error": "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
        "source": null,
        "packages": [],
        "collected": false,
        "truncated": false,
        "total_count": null,
        "direct_count": null,
        "indirect_count": null
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 0,
        "merged_prs": 3,
        "open_issues": 9,
        "closed_ratio": 0.917,
        "closed_issues": 100,
        "closed_unmerged_prs": 0
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "sonyarianto",
          "commits": 555,
          "avatar_url": "https://avatars.githubusercontent.com/u/333051?v=4"
        }
      ],
      "contributors_sampled": 1,
      "top_contributor_share": 1
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "ci.yml",
        "release.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [],
      "has_editorconfig": false,
      "has_linter_config": false,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "Cargo.lock",
        "package-lock.json"
      ],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 10,
            "reason": "no binaries found in the repo",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": 0,
            "reason": "branch protection not enabled on development/release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": 10,
            "reason": "1 out of 1 merged PRs checked by a CI test -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 0,
            "reason": "Found 0/25 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 3,
            "reason": "project has 1 contributing companies or organizations -- score normalized to 3",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 10,
            "reason": "no dangerous workflow patterns detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 0,
            "reason": "no update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 0,
            "reason": "project was created within the last 90 days. Please review its contents carefully",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": 10,
            "reason": "packaging workflow detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 0,
            "reason": "dependency not pinned by hash detected -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "SAST tool is not run on all commits -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 0,
            "reason": "security policy file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": 0,
            "reason": "Project has not signed or included provenance with any releases.",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 0,
            "reason": "detected GitHub workflow tokens with excessive permissions",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 5,
            "reason": "5 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "e8194fcad07944731aa2687e1d7dd4f659e931ac",
        "ran_at": "2026-07-24T04:06:54Z",
        "aggregate_score": 3,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": false,
      "has_dependabot_config": false
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-18T18:25:55Z",
      "oldest_open_prs": [],
      "last_merged_pr_at": "2026-07-18T13:25:53Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": [
        {
          "number": 3,
          "created_at": "2026-06-27T07:32:26Z",
          "last_comment_at": "2026-06-27T21:08:23Z",
          "last_comment_author": "sonyarianto"
        },
        {
          "number": 4,
          "created_at": "2026-06-27T07:32:29Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 6,
          "created_at": "2026-06-27T07:32:32Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 10,
          "created_at": "2026-06-27T07:32:58Z",
          "last_comment_at": "2026-06-27T21:08:21Z",
          "last_comment_author": "sonyarianto"
        },
        {
          "number": 13,
          "created_at": "2026-06-27T07:33:00Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 17,
          "created_at": "2026-06-27T21:15:25Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 24,
          "created_at": "2026-06-29T19:53:53Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 110,
          "created_at": "2026-07-11T07:14:25Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 112,
          "created_at": "2026-07-23T10:30:33Z",
          "last_comment_at": null,
          "last_comment_author": null
        }
      ]
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/sonyarianto/santui",
    "host": "github.com",
    "name": "santui",
    "owner": "sonyarianto"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 58,
      "inputs": {
        "security": 31,
        "vitality": 71,
        "community": 39,
        "governance": 60,
        "engineering": 81
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "good",
        "name": "Vitality",
        "value": 71,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "moderate",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 58,
            "inputs": {
              "commits_last_year": 563,
              "human_commit_share": 1,
              "days_since_last_push": 5,
              "active_weeks_last_year": 6
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 5 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 5
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "6/52 weeks with commits",
                "points": 4.2,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 6
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "563 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 563
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "project was created within the last 90 days. Please review its contents carefully",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": null,
            "notes": [],
            "value": 90,
            "inputs": {
              "releases_count": 21,
              "latest_release_tag": "v0.2.31",
              "releases_from_tags": false,
              "days_since_latest_release": 1,
              "mean_days_between_releases": 2.6
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "21 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 21
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 1 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 1
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~2.6 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 2.6
                    }
                  }
                ],
                "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": "at_risk",
        "name": "Community & Adoption",
        "value": 39,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "critical",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 17,
            "inputs": {
              "forks": 0,
              "stars": 12,
              "watchers": 0,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "12 stars",
                "points": 16.9,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 12
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "0 forks",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "0 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "moderate",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 50,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": false,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (MIT)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "MIT"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.3
              }
            ]
          },
          {
            "key": "ecosystem_adoption",
            "band": "moderate",
            "name": "Ecosystem adoption (downloads)",
            "note": "Excluded from scoring (no data or not applicable): Registry dependents. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "registry_dependents"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 60,
            "inputs": {
              "packages": [
                "santui-db",
                "santui",
                "santui-ipc",
                "santui-auth",
                "santui-core",
                "santui",
                "santui-registry"
              ],
              "dependents": null,
              "ecosystems": "crates, npm",
              "total_downloads": 3018,
              "monthly_downloads": 4042
            },
            "components": [
              {
                "key": "monthly_downloads",
                "name": "Monthly downloads",
                "detail": "4,042 downloads/month across crates, npm",
                "points": 48.1,
                "status": "partial",
                "details": [
                  {
                    "code": "downloads_monthly",
                    "params": {
                      "count": 4042,
                      "ecosystems": "crates, 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": 60,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 13,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 1,
              "top_contributor_share": 1
            },
            "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 100% of commits",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 100
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "1 contributors",
                "points": 1.4,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 1 contributing companies or organizations -- score normalized to 3",
                "points": 3,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "good",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 81,
            "inputs": {
              "merged_prs": 3,
              "open_issues": 9,
              "closed_issues": 100,
              "issue_closed_ratio": 0.917,
              "closed_unmerged_prs": 0
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "92% of issues closed",
                "points": 42.9,
                "status": "partial",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 92
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "3/3 decided PRs merged",
                "points": 38.2,
                "status": "met",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 3,
                      "decided": 3
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/25 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "moderate",
            "name": "Ownership & stewardship",
            "note": "Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "verified_domain"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 62,
            "inputs": {
              "followers": 95,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "sonyarianto",
              "public_repos": 104,
              "account_age_days": 5852
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "personal (user) account",
                "points": 10,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_personal",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": "not applicable to user accounts",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_applicable_to_user_accounts",
                    "params": {}
                  }
                ],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "95 followers of sonyarianto",
                "points": 14.3,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 95,
                      "login": "sonyarianto"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "104 public repos, account ~16 yr old",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 104
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 16
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "santui-db",
                "santui",
                "santui-ipc",
                "santui-auth",
                "santui-core",
                "santui",
                "santui-registry"
              ],
              "ecosystems": "crates, npm",
              "any_deprecated": false,
              "min_days_since_publish": 5
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "7 package(s) on crates, npm",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 7,
                      "ecosystems": "crates, npm"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 5 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 5
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "30 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 30
                    }
                  }
                ],
                "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": "2 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "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": "1 out of 1 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": [
                "cli",
                "plugins",
                "ratatui",
                "terminal"
              ],
              "has_wiki": true,
              "homepage": "https://santuiapp.vercel.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://santuiapp.vercel.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": "4 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 4
                    }
                  }
                ],
                "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": 31,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": null,
            "notes": [],
            "value": 31,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 18,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 0,
              "scorecard_aggregate": 3
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "branch protection not enabled on development/release branches",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "1 out of 1 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 0/25 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 1 contributing companies or organizations -- score normalized to 3",
                "points": 0.8,
                "status": "partial",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "no update tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "project was created within the last 90 days. Please review its contents carefully",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow detected",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool is not run on all commits -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "Project has not signed or included provenance with any releases.",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "detected GitHub workflow tokens with excessive permissions",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "5 existing vulnerabilities detected",
                "points": 3.8,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "high_risk_jurisdiction_exposure",
            "band": "excellent",
            "name": "High-Risk Jurisdiction Exposure",
            "note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
            "notes": [
              {
                "code": "jurisdiction_evidence_limits",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "meaning": "self-published location evidence; not nationality or citizenship",
              "red_flag": false,
              "exposures": [],
              "policy_countries": [
                "Russia",
                "Iran",
                "North Korea"
              ],
              "review_only_matches": 0,
              "assessed_self_published_locations": 3
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "no confirmed policy-scope location match",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "jurisdiction_no_match",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "good",
        "name": "AI Readiness",
        "value": 74,
        "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": 0.97,
              "agent_instruction_files": [
                "AGENTS.md"
              ],
              "agent_instruction_max_bytes": 8657
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "AGENTS.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "AGENTS.md"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "97 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 97,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "moderate",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 56,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "Cargo.lock",
                "package-lock.json"
              ],
              "has_dockerfile": false,
              "typed_language": true,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": false,
              "typecheck_configs": [],
              "agent_commit_share": 0,
              "toolchain_manifests": [
                "Cargo.toml",
                "crates/app/Cargo.toml",
                "crates/auth/Cargo.toml",
                "crates/core/Cargo.toml",
                "crates/db/Cargo.toml",
                "crates/dev-setup/Cargo.toml",
                "crates/ipc/Cargo.toml",
                "crates/plugins/ai-chat/Cargo.toml",
                "crates/plugins/api-monitor/Cargo.toml",
                "crates/plugins/archive-browser/Cargo.toml",
                "crates/plugins/ascii-table/Cargo.toml",
                "crates/plugins/base64-encoder/Cargo.toml",
                "crates/plugins/batch-renamer/Cargo.toml",
                "crates/plugins/bmi-calculator/Cargo.toml",
                "crates/plugins/bookmark-launcher/Cargo.toml",
                "crates/plugins/breathing-exercise/Cargo.toml",
                "crates/plugins/budget-tracker/Cargo.toml",
                "crates/plugins/calendar-agenda/Cargo.toml",
                "crates/plugins/case-converter/Cargo.toml",
                "crates/plugins/cheatsheet-browser/Cargo.toml",
                "crates/plugins/chess/Cargo.toml",
                "crates/plugins/clipboard-history/Cargo.toml",
                "crates/plugins/cloud-cost/Cargo.toml",
                "crates/plugins/code-runner/Cargo.toml",
                "crates/plugins/color-picker/Cargo.toml",
                "crates/plugins/connection-string-builder/Cargo.toml",
                "crates/plugins/cron-expression-helper/Cargo.toml",
                "crates/plugins/csv-viewer/Cargo.toml",
                "crates/plugins/currency-converter/Cargo.toml",
                "crates/plugins/dashboard/Cargo.toml",
                "crates/plugins/dictionary-thesaurus/Cargo.toml",
                "crates/plugins/disk-usage/Cargo.toml",
                "crates/plugins/dns-globe/Cargo.toml",
                "crates/plugins/docker-dashboard/Cargo.toml",
                "crates/plugins/email-client/Cargo.toml",
                "crates/plugins/env-manager/Cargo.toml",
                "crates/plugins/erd-sketch/Cargo.toml",
                "crates/plugins/expense-splitter/Cargo.toml",
                "crates/plugins/file-diff/Cargo.toml",
                "crates/plugins/file-explorer/Cargo.toml",
                "crates/plugins/flashcards/Cargo.toml",
                "crates/plugins/fortune-cookie/Cargo.toml",
                "crates/plugins/game-of-life/Cargo.toml",
                "crates/plugins/git-repository-dashboard/Cargo.toml",
                "crates/plugins/github-browser/Cargo.toml",
                "crates/plugins/gpg-encryptor/Cargo.toml",
                "crates/plugins/graphql-playground/Cargo.toml",
                "crates/plugins/habit-tracker/Cargo.toml",
                "crates/plugins/hacker-news-reader/Cargo.toml",
                "crates/plugins/hash-calculator/Cargo.toml",
                "crates/plugins/hex-viewer/Cargo.toml",
                "crates/plugins/http-client/Cargo.toml",
                "crates/plugins/iptv-player/Cargo.toml",
                "crates/plugins/irc-client/Cargo.toml",
                "crates/plugins/json-yaml-formatter/Cargo.toml",
                "crates/plugins/jwt-inspector/Cargo.toml",
                "crates/plugins/k8s-viewer/Cargo.toml",
                "crates/plugins/kanban-board/Cargo.toml",
                "crates/plugins/loan-calculator/Cargo.toml",
                "crates/plugins/log-viewer/Cargo.toml",
                "crates/plugins/lorem-generator/Cargo.toml",
                "crates/plugins/markdown-previewer/Cargo.toml",
                "crates/plugins/math-evaluator/Cargo.toml",
                "crates/plugins/mermaid-renderer/Cargo.toml",
                "crates/plugins/mongo-explorer/Cargo.toml",
                "crates/plugins/music-player-controller/Cargo.toml",
                "crates/plugins/music-preview/Cargo.toml",
                "crates/plugins/mysql-browser/Cargo.toml",
                "crates/plugins/network-bandwidth-monitor/Cargo.toml",
                "crates/plugins/package-manager/Cargo.toml",
                "crates/plugins/package-version-monitor/Cargo.toml",
                "crates/plugins/password-generator/Cargo.toml",
                "crates/plugins/path-editor/Cargo.toml",
                "crates/plugins/periodic-table/Cargo.toml",
                "crates/plugins/ping-traceroute/Cargo.toml",
                "crates/plugins/pipe-runner/Cargo.toml",
                "crates/plugins/pixel-art/Cargo.toml",
                "crates/plugins/pomodoro-timer/Cargo.toml",
                "crates/plugins/port-scanner/Cargo.toml",
                "crates/plugins/postgres-console/Cargo.toml",
                "crates/plugins/process-manager/Cargo.toml",
                "crates/plugins/qr-generator/Cargo.toml",
                "crates/plugins/quick-notes/Cargo.toml",
                "crates/plugins/quran-reader/Cargo.toml",
                "crates/plugins/radio-stream-player/Cargo.toml",
                "crates/plugins/radio-stream-player/scraper/Cargo.toml",
                "crates/plugins/recipe-manager/Cargo.toml",
                "crates/plugins/redis-explorer/Cargo.toml",
                "crates/plugins/regex-tester/Cargo.toml",
                "crates/plugins/registry/Cargo.toml",
                "crates/plugins/rss-reader/Cargo.toml",
                "crates/plugins/sdk-playground/Cargo.toml",
                "crates/plugins/service-manager/Cargo.toml",
                "crates/plugins/slug-generator/Cargo.toml",
                "crates/plugins/snake-game/Cargo.toml",
                "crates/plugins/snippet-manager/Cargo.toml",
                "crates/plugins/speed-test/Cargo.toml",
                "crates/plugins/sprint-retro/Cargo.toml",
                "crates/plugins/sql-playground/Cargo.toml",
                "crates/plugins/sqlite-browser/Cargo.toml",
                "crates/plugins/ssh-manager/Cargo.toml",
                "crates/plugins/ssl-checker/Cargo.toml",
                "crates/plugins/stock-ticker/Cargo.toml",
                "crates/plugins/subnet-calculator/Cargo.toml",
                "crates/plugins/system-monitor/Cargo.toml",
                "crates/plugins/terminal-pet/Cargo.toml",
                "crates/plugins/text-toolkit/Cargo.toml",
                "crates/plugins/time-tracker/Cargo.toml",
                "crates/plugins/todo-task-manager/Cargo.toml",
                "crates/plugins/totp-viewer/Cargo.toml",
                "crates/plugins/typing-test/Cargo.toml",
                "crates/plugins/unit-converter/Cargo.toml",
                "crates/plugins/uuid-generator/Cargo.toml",
                "crates/plugins/wake-on-lan/Cargo.toml",
                "crates/plugins/water-tracker/Cargo.toml",
                "crates/plugins/weather/Cargo.toml",
                "crates/plugins/webhook-tester/Cargo.toml",
                "crates/plugins/websocket-client/Cargo.toml",
                "crates/plugins/whois-lookup/Cargo.toml",
                "crates/plugins/world-clock/Cargo.toml",
                "crates/registry/Cargo.toml",
                "crates/server/Cargo.toml",
                "templates/plugin/Cargo.toml"
              ],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "Cargo.toml, crates/app/Cargo.toml, crates/auth/Cargo.toml (toolchain convention, no task runner)",
                "points": 12.6,
                "status": "partial",
                "details": [
                  {
                    "code": "toolchain_convention",
                    "params": {
                      "files": "Cargo.toml, crates/app/Cargo.toml, crates/auth/Cargo.toml"
                    }
                  }
                ],
                "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": "Rust (statically typed)",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Rust"
                    }
                  }
                ],
                "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": 100,
            "inputs": {
              "primary_language": "Rust",
              "largest_source_bytes": 89343,
              "source_files_sampled": 218,
              "oversized_source_files": 1
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "Rust (statically typed)",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Rust"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "1/218 source files over 60KB",
                "points": 54.7,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 218,
                      "oversized": 1
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token",
    "Could not fetch npm package 'santui-website' from its registry",
    "Could not fetch crates package 'santui-server' from its registry",
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-24T04:07:04.713341Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/s/sonyarianto/santui.svg",
  "full_name": "sonyarianto/santui",
  "license_state": "standard",
  "license_spdx": "MIT"
}

Bewertungen sind Signale, keine Garantien. Sie spiegeln öffentlich sichtbare Praxis auf GitHub wider — kein Code-Audit und keine Sicherheitsgarantie.

Fehlende Daten werden ausgeschlossen und die Gewichte neu normiert, nie als null bewertet. Die Methodik ist versioniert und offen: Metriken v1.13.0, Schema v0.27.0 — vollständige Methodik · Metriken-Wiki.

Wie ein einzelnes Ergebnis im Gesamtregister steht: aggregierte Statistikencrates.io, npm.