Öffentliches Register
Software-GesundheitsberichtSchema 0.26.0 · Metriken 1.13.0 · 2026-07-22 06:49 UTC

WuErPing / solo

Solo Walk. Solo Code. Up to AI.

TypeScript · GoMIT★ 5 Sterne⑂ 1 Forkseit Mai 2026Auf GitHub ansehen ↗

WuErPing/solo erreicht einen Gesundheitsindex von 55 von 100 und liegt damit im Bereich Mittel. Am stärksten schneidet es bei AI Readiness (88/100) ab, am schwächsten bei Community & Adoption (29/100). Zuletzt vor 4 Tagen aktualisiert. Ein einzelner Mitwirkender trägt den Großteil der jüngsten Arbeit.

55
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.

55
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

Andy WuPersönliches Konto
14 Follower85 öffentliche Reposseit Juli 2012

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öffentlicht
Gogithub.com/WuErPing/solov0.11.0-5vor 5 Tagen

Metriken nach Kategorie

Vitalität

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

72Gut · 22 % des Gesamtindex
Wie die Bewertung erfolgt
36/36Push-Aktualität — letzter Push vor 4 Tagen
6.9/36Commit-Rhythmus — 10/52 Wochen mit Commits
18/18Commit-Volumen — 194 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_year194
human_commit_share1
days_since_last_push4
active_weeks_last_year10
Wie die Bewertung erfolgt
16.2/27Liefert Releases aus — 5 Versions-Tags (keine GitHub-Releases)
36/36Release-Aktualität — letztes Release vor 5 Tagen
27/27Release-Rhythmus — ein Release etwa alle 9,2 Tage
0/10OpenSSF Scorecard: Signed-Releases — keine Daten
Verwendete Eingangsdaten
releases_count5
latest_release_tagv0.11.0
releases_from_tagsja
days_since_latest_release5
mean_days_between_releases9,2
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): OpenSSF Scorecard: Signed-Releases. Die verbleibenden Gewichte wurden renormalisiert.

Community & Verbreitung

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

29Kritisch · 18 % des Gesamtindex
Wie die Bewertung erfolgt
9.8/60Stars — 5 Stars
0/25Forks — 1 Forks
0/15Watcher — 0 Watcher
Verwendete Eingangsdaten
forks1
stars5
watchers0
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonbelow_threshold
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

Nachhaltigkeit & Governance

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

54Mittel · 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
0/10OpenSSF Scorecard: Contributors — project has 0 contributing companies or organizations -- score normalized to 0
Verwendete Eingangsdaten
bus_factor1
contributors_sampled1
top_contributor_share1
Wie die Bewertung erfolgt
0/46.8Issue-Lösungsquote — keine Issues oder keine Daten
38.2/38.3PR-Annahme — 1/1 entschiedene PRs gemergt
0/15OpenSSF Scorecard: Code-Review — Found 0/30 approved changesets -- score normalized to 0
Verwendete Eingangsdaten
merged_prs1
open_issues0
closed_issues0
issue_closed_ratio
closed_unmerged_prs0
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Issue-Lösungsquote. Die verbleibenden Gewichte wurden renormalisiert.
Wie die Bewertung erfolgt
10/30Organisatorische Trägerschaft — persönliches (Nutzer-)Konto
0/20Verifizierte Domain — für Nutzerkonten nicht anwendbar
8.5/25Reichweite des Inhabers — 14 Follower von WuErPing
25/25Kontohistorie — 85 öffentliche Repos, Kontoalter ca. 13 Jahre
Verwendete Eingangsdaten
followers14
owner_typeUser
is_verified
owner_loginWuErPing
public_repos85
account_age_days5.107
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 — 1 Paket(e) auf go
35/35Veröffentlichungsaktualität — letzte Veröffentlichung vor 5 Tagen
20/20Versionshistorie — 5 veröffentlichte Versionen
20/20Nicht veraltet — aktiv, nicht veraltet oder zurückgezogen
Verwendete Eingangsdaten
packagesgithub.com/WuErPing/solo
ecosystemsgo
any_deprecatednein
min_days_since_publish5

Engineering-Qualität

Sind grundlegende Engineering- und Dokumentationspraktiken vorhanden?

78Gut · 20 % des Gesamtindex
Wie die Bewertung erfolgt
24/24CI-Workflows — 2 Workflow(s)
24/24Tests vorhanden
16/16Linter-Konfiguration — .golangci.yml, eslint.config.js, eslint.config.mjs
0/9.6Pre-Commit-Hooks
0/6.4.editorconfig
0/20OpenSSF Scorecard: CI-Tests — keine Daten
Verwendete Eingangsdaten
has_cija
has_testsja
has_editorconfignein
has_linter_configja
has_precommit_confignein
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): OpenSSF Scorecard: CI-Tests. Die verbleibenden Gewichte wurden renormalisiert.
Wie die Bewertung erfolgt
30/30README
25/25Dokumentationsverzeichnis
0/15Dokumentations-/Homepage-Site
10/10Repository-Beschreibung
0/10Topics
10/10Wiki
Verwendete Eingangsdaten
topics
has_wikija
homepage
has_readmeja
has_docs_dirja
has_descriptionja

Sicherheit

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

32Gefährdet · 16 % des Gesamtindex

Sicherheitslage

32Gefä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
0/2.5CI-Tests — keine Daten
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 0/30 approved changesets -- score normalized to 0
0/2.5Contributors — project has 0 contributing companies or organizations -- score normalized to 0
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
0/5Packaging — keine Daten
1.5/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 3
0/5SAST — no SAST tool detected
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — keine Daten
7.5/7.5Token-Permissions — GitHub workflow tokens follow principle of least privilege
0/7.5Vulnerabilities — 21 existing vulnerabilities detected
Verwendete Eingangsdaten
sourceopenssf_scorecard
checks_evaluated15
scorecard_versionv5.5.0
checks_inconclusive3
scorecard_aggregate3,2
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): ci_tests, packaging, signed_releases. Die verbleibenden Gewichte wurden renormalisiert.

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.

88Exzellent · 0 % des Gesamtindex
Wie die Bewertung erfolgt
45/45Agentenanweisungen — AGENTS.md, CLAUDE.md
0/15Maschinenlesbare Doku (llms.txt)
40/40Lesbare Commit-Historie — 96 von 100 menschlichen Commits benennen ihre Absicht (strukturierter Betreff oder erläuternder Text)
Verwendete Eingangsdaten
has_llms_txtnein
legible_history_share0,96
agent_instruction_filesAGENTS.md, CLAUDE.md
agent_instruction_max_bytes4.724
Wie die Bewertung erfolgt
18/18Bootstrap mit einem Befehl — Makefile
22/22Automatisierte Tests
11/11Lint-/Format-Konfiguration — .golangci.yml, eslint.config.js, eslint.config.mjs
11/11Statische Typprüfung — app-bridge/tsconfig.json, app/tsconfig.json, packages/highlight/tsconfig.json, tsconfig.json
10/10Reproduzierbare Umgebung — lockfile
10/10Belegte Agentenpraxis — 26 der letzten 100 Commits von Agenten verfasst oder ihnen zugeschrieben
0/8Automatisierte Wartung — keine automatisierten Abhängigkeits-Updates beobachtet
3/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 3
Verwendete Eingangsdaten
has_nixnein
has_testsja
lockfilesgo.sum, package-lock.json
has_dockerfilenein
typed_languageja
bootstrap_filesMakefile
has_devcontainernein
has_linter_configja
typecheck_configsapp-bridge/tsconfig.json, app/tsconfig.json, packages/highlight/tsconfig.json, tsconfig.json
agent_commit_share0,26
toolchain_manifestscli/go.mod, daemon/go.mod, docs/analysis/demo/iterm2-agent-detection/go.mod, protocol/go.mod, relay-go/go.mod
dependency_bot_commit_share0
Wie die Bewertung erfolgt
45/45Typprüfbarer Code — TypeScript (statisch typisiert)
54.6/55Handhabbare Dateigrößen — 10/1.313 Quelldateien über 60 KB
Verwendete Eingangsdaten
primary_languageTypeScript
largest_source_bytes127.261
source_files_sampled1.313
oversized_source_files10

Eckdaten

5GitHub-Sterne
1Mitwirkende
194Commits, letzte 12 Monate
4Tage seit letztem Push
5Releases
1Bus-Faktor
0offene Issues
Go, npm, RubyGemsPaket-Ökosysteme

Warnungen zur Datenerhebung

  • GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Weitere Details

Stern- und Fork-Verlauf 5 ★ / 1 ⇿
5Sterne
1Forks
3Releases

Wann jeder Stern und Fork hinzugefügt wurde, von GitHub erfasst und nach Tagen gruppiert. Das kumulierte Wachstum steht direkt über den täglichen Zugängen, aus denen es besteht, sodass beide gegeneinander lesbar sind: stetiger organischer Zuwachs sieht ganz anders aus als ein abrupter, kurzlebiger Ausschlag. Wo dieser Unterschied messbar ist, wird er als Wachstumsauthentizität ausgewiesen.

0123455122026-062026-062026-06
Major 0Minor 2Patch 1
OpenSSF Scorecard 3.2 / 10
3.2Gesamtwert

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-22 06:48 UTC

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
k. A.CI-Testsno pull request found
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/30 approved changesets -- score normalized to 0
0Contributorsproject has 0 contributing companies or organizations -- score normalized to 0
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
k. A.Packagingpackaging workflow not detected
3Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 3
0SASTno SAST tool detected
0Security-Policysecurity policy file not detected
k. A.Signed-Releasesno releases found
10Token-PermissionsGitHub workflow tokens follow principle of least privilege
0Vulnerabilities21 existing vulnerabilities detected
Direkte Abhängigkeiten 97
RegistryPaketVersionsvorgabeManifest
npmbase64-js^1.5.1app-bridge/package.json
npmtweetnacl^1.0.3app-bridge/package.json
npmzod^3.23.8app-bridge/package.json
RubyGemsfastlaneapp/Gemfile
npm@dnd-kit/core^6.3.1app/package.json
npm@dnd-kit/sortable^10.0.0app/package.json
npm@dnd-kit/utilities^3.2.2app/package.json
npm@floating-ui/react-native^0.10.7app/package.json
npm@getsolo/highlight*app/package.json
npm@gorhom/bottom-sheet^5.2.6app/package.json
npm@gorhom/portal^1.0.14app/package.json
npm@react-native-async-storage/async-storage2.2.0app/package.json
npm@react-native-masked-view/masked-view0.3.2app/package.json
npm@react-native/normalize-colors0.86.0app/package.json
npm@react-navigation/native^7.3.4app/package.json
npm@tanstack/react-query^5.90.11app/package.json
npm@tanstack/react-virtual^3.13.21app/package.json
npm@xterm/addon-clipboard^0.2.0app/package.json
npm@xterm/addon-fit^0.11.0app/package.json
npm@xterm/addon-image^0.9.0app/package.json
npm@xterm/addon-ligatures^0.10.0app/package.json
npm@xterm/addon-search^0.16.0app/package.json
npm@xterm/addon-unicode11^0.9.0app/package.json
npm@xterm/addon-web-links^0.12.0app/package.json
npm@xterm/addon-webgl^0.19.0app/package.json
npm@xterm/xterm^6.0.0app/package.json
npmbase64-js^1.5.1app/package.json
npmbuffer^6.0.3app/package.json
npmexpo^57app/package.json
npmexpo-asset~57.0.5app/package.json
npmexpo-build-properties~57.0.5app/package.json
npmexpo-camera~57.0.2app/package.json
npmexpo-clipboard~57.0.1app/package.json
npmexpo-constants~57.0.5app/package.json
npmexpo-crypto~57.0.1app/package.json
npmexpo-dev-client~57.0.6app/package.json
npmexpo-file-system~57.0.1app/package.json
npmexpo-haptics~57.0.1app/package.json
npmexpo-image~57.0.1app/package.json
npmexpo-image-picker~57.0.4app/package.json
npmexpo-keep-awake~57.0.1app/package.json
npmexpo-linking~57.0.3app/package.json
npmexpo-notifications~57.0.5app/package.json
npmexpo-router~57.0.6app/package.json
npmexpo-sharing~57.0.5app/package.json
npmexpo-splash-screen~57.0.4app/package.json
npmexpo-system-ui~57.0.1app/package.json
npmexpo-updates~57.0.7app/package.json
npmfast-deep-equal^3.1.3app/package.json
npmlucide-react-native^1.21.0app/package.json
npmmnemonic-id^3.2.7app/package.json
npmqrcode^1.5.4app/package.json
npmreact19.2.3app/package.json
npmreact-dom19.2.3app/package.json
npmreact-native0.86.0app/package.json
npmreact-native-draggable-flatlist^4.0.3app/package.json
npmreact-native-edge-to-edge^1.7.0app/package.json
npmreact-native-gesture-handler~2.32.0app/package.json
npmreact-native-keyboard-controller1.21.9app/package.json
npmreact-native-markdown-display^7.0.2app/package.json
npmreact-native-nitro-modules0.35.5app/package.json
npmreact-native-reanimated4.5.0app/package.json
npmreact-native-safe-area-context~5.7.0app/package.json
npmreact-native-screens4.25.2app/package.json
npmreact-native-svg15.15.4app/package.json
npmreact-native-unistyles^3.0.15app/package.json
npmreact-native-web~0.21.0app/package.json
npmreact-native-webview13.16.1app/package.json
npmreact-native-worklets0.10.0app/package.json
npmtiny-invariant^1.3.3app/package.json
npmtweetnacl^1.0.3app/package.json
npmuse-sync-external-store^1.6.0app/package.json
npmzod^3.23.8app/package.json
npmzustand^5.0.9app/package.json
Gogithub.com/WuErPing/solo/protocolv0.0.0-00010101000000-000000000000cli/go.mod
Gogithub.com/fatih/colorv1.19.0cli/go.mod
Gogithub.com/google/uuidv1.6.0cli/go.mod
Gogithub.com/gorilla/websocketv1.5.3cli/go.mod
Gogithub.com/skip2/go-qrcodev0.0.0-20200617195104-da1b6568686ecli/go.mod
Gogithub.com/spf13/cobrav1.10.2cli/go.mod
Gogolang.org/x/cryptov0.51.0cli/go.mod
Gogopkg.in/yaml.v3v3.0.1cli/go.mod
Gogithub.com/BurntSushi/tomlv1.6.0daemon/go.mod
Gogithub.com/WuErPing/solo/protocolv0.0.0daemon/go.mod
Gogithub.com/creack/ptyv1.1.21daemon/go.mod
Gogithub.com/google/uuidv1.6.0daemon/go.mod
Gogithub.com/gorilla/websocketv1.5.3daemon/go.mod
Gogithub.com/prometheus/client_golangv1.23.2daemon/go.mod
Gogithub.com/prometheus/client_modelv0.6.2daemon/go.mod
Gogithub.com/robfig/cron/v3v3.0.1daemon/go.mod
Gogolang.org/x/cryptov0.50.0daemon/go.mod
Gogolang.org/x/syncv0.21.0daemon/go.mod
Gogopkg.in/yaml.v3v3.0.1daemon/go.mod
Gogithub.com/WuErPing/solo/protocolv0.0.0relay-go/go.mod
Gogithub.com/gorilla/websocketv1.5.3relay-go/go.mod
Gogithub.com/prometheus/client_golangv1.23.2relay-go/go.mod
Gogolang.org/x/cryptov0.51.0relay-go/go.mod
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": [],
      "is_fork": false,
      "size_kb": 8924,
      "has_wiki": true,
      "homepage": null,
      "languages": {
        "Go": 2469712,
        "HTML": 1931,
        "Ruby": 1132,
        "Shell": 20252,
        "Makefile": 6834,
        "JavaScript": 21466,
        "TypeScript": 6078106
      },
      "pushed_at": "2026-07-17T16:39:17Z",
      "created_at": "2026-05-17T12:51:56Z",
      "owner_type": "User",
      "updated_at": "2026-07-17T16:39:53Z",
      "description": "Solo Walk. Solo Code. Up to AI.",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "main",
      "license_spdx_raw": "MIT",
      "primary_language": "TypeScript",
      "significant_languages": [
        "TypeScript",
        "Go"
      ]
    },
    "owner": {
      "blog": null,
      "name": "Andy Wu",
      "type": "User",
      "login": "WuErPing",
      "company": null,
      "location": null,
      "followers": 14,
      "avatar_url": "https://avatars.githubusercontent.com/u/2055091?v=4",
      "created_at": "2012-07-28T03:07:47Z",
      "is_verified": null,
      "public_repos": 85,
      "account_age_days": 5107
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v0.11.0",
          "kind": "minor",
          "published_at": "2026-07-16T12:44:01Z"
        },
        {
          "tag": "v0.8.0",
          "kind": "minor",
          "published_at": "2026-06-22T15:18:13Z"
        },
        {
          "tag": "v0.7.0",
          "kind": "minor",
          "published_at": "2026-06-20T17:00:42Z"
        },
        {
          "tag": "v0.6.5",
          "kind": "patch",
          "published_at": "2026-06-18T21:26:46Z"
        },
        {
          "tag": "v0.6.0",
          "kind": "minor",
          "published_at": "2026-06-09T17:15:48Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "5a37859ae7aaacded228bdb6281524ed939f3417",
          "body": "… schema ordering\n\nAdd product design for a chat-based schedule assistant that lets users\ncreate and edit schedules via natural language, powered by existing LLM\nproviders. The LLM produces proposals only; all mutations go through\nexisting schedule RPCs after explicit user confirmation.\n\nAlso reorder WorkspaceGitRuntimeSchema in generated protocol-schemas and\nremove an unused import in the websocket transport test.",
          "is_bot": false,
          "headline": "docs: add chat-based schedule assistant design and clean up generated…",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-07-17T16:38:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "278e5054e74929a4c98cb34c00a649395eb1f856",
          "body": "On web, unistyles StyleSheet.create objects carry an enumerable\n`unistyles_<id>: {}` metadata key. Reanimated's CSSManager flattens\nAnimated.* style props and validates every entry, throwing\n`[Reanimated] Invalid value for \"unistyles_<id>\": an empty object is\nnot a valid style value.` (reanimated sr\n[…]\ne to work\n  around TS's inability to discriminate the union through Updater<T>\n- terminal-emulator-runtime.browser.test: resize the outer container\n  (not root) since the runtime owns root.style.width",
          "is_bot": false,
          "headline": "fix(app): eliminate remaining unistyles-style crashes on Animated.*",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-07-17T13:45:25Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5d94385ed3a84b5d86443fccca270a5aa1bce99a",
          "body": "Co-authored-by: kimi-code <kimi-code-cli>",
          "is_bot": false,
          "headline": "fix(app): stop reanimated entering/exiting crashes from unistyles styles",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-07-17T12:31:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "41606df3d98c5f12bad15db35d2782fc22d46138",
          "body": "…st routes\n\nCo-authored-by: kimi-code <kimi-code-cli>",
          "is_bot": false,
          "headline": "fix(app): keep sidebar mounted by routing Agents/Tmux/Schedules to ho…",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-07-17T00:30:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "354b83c04a6abf86dc84c49e9ec21e147c57d759",
          "body": "…tch + fork useIsFocused)\n\n- fix(app): make WorkspaceScreen/ExplorerSidebar focus prop-driven\n- fix(app): keep unistyles styles out of Animated.View style arrays\n- fix(app): strip uniProps from unistyles web withUnistyles forwarded props\n- fix(app): eliminate nested <button> in sidebar rows\n- refactor(app): extract PrBadge, relocate host-runtime-bootstrap, stub notifications on web\n- test(app): add web interop guard tests and sidebar navigation e2e spec\n\nCo-authored-by: kimi-code <kimi-code-cli>",
          "is_bot": false,
          "headline": "- fix(app): restore navigation context on web screens (expo-router pa…",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-07-16T23:56:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b8aa8bfe3248431a99e853b768e212b00fb3fcea",
          "body": "…f expo-router\n\nexpo-router SDK 57 no longer re-exports useIsFocused, causing a runtime\n\"useIsFocused is not a function\" crash. Switch all 10 source files to\nimport from @react-navigation/native (the actual exporter) and add it\nas a direct dependency. Includes a regression guard test.",
          "is_bot": false,
          "headline": "fix(app): import useIsFocused from @react-navigation/native instead o…",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-07-16T11:37:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dea8de1dcaffbd3be5d26bf220423a54fe616bc6",
          "body": "- SDK 54→55: React 19.2, RN 0.83, babel-preset-expo 55\n- SDK 55→56: RN 0.85, TS 6.0.3, @react-navigation/native→expo-router migration\n- SDK 56→57: RN 0.86, reanimated 4.5, worklets 0.10\n- Disabled React Compiler ESLint rules (343 pre-existing violations for follow-up)\n- No test regressions (1854 passed, 4 pre-existing browser failures)",
          "is_bot": false,
          "headline": "Merge branch 'expo-upgrade': Expo SDK 54→57 upgrade",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-07-16T11:25:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0e9990d2c11661baefe739e6aacb45fff47ffeb7",
          "body": "…ler lint rules\n\n- Auto-merge duplicate expo-router imports created during @react-navigation\n  migration (import/no-duplicates)\n- Disable React Compiler ESLint rules (react-hooks/refs, set-state-in-effect,\n  preserve-manual-memoization, immutability, etc.) introduced in SDK 55+\n  eslint-config-expo.\n[…]\nse flag 343 pre-existing code patterns and should\n  be re-enabled and fixed in follow-up PRs.\n- Remove unused LoopListItem import (pre-existing lint warning)\n- Lint passes with 0 errors and 0 warnings",
          "is_bot": false,
          "headline": "fix(app): merge duplicate expo-router imports and disable React Compi…",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-07-16T11:19:32Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1dabc410cbe2efb1c2feb811e1bf0d471b286f3c",
          "body": "- Update all Expo packages to SDK 57 compatible versions\n- React Native 0.85→0.86, react-native-reanimated 4.3→4.5\n- react-native-worklets 0.8→0.10, gesture-handler 2.31→2.32\n- babel-preset-expo 56→57, eslint-config-expo 56→57\n- No typecheck regressions (2 pre-existing errors unchanged)\n- No test regressions (1854 passed, 4 pre-existing browser failures)",
          "is_bot": false,
          "headline": "chore(app): upgrade Expo SDK 56→57",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-07-16T11:14:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5568ed176389a63ab61fbc67776afb9664cc5d36",
          "body": "- Update all Expo packages to SDK 56 compatible versions\n- React 19.2.0→19.2.3, React Native 0.83→0.85\n- TypeScript 5.9→6.0.3, babel-preset-expo 55→56\n- Migrate @react-navigation/native imports to expo-router\n  (useIsFocused, useFocusEffect, useNavigation now from expo-router)\n- Remove @react-naviga\n[…]\ndate test mocks to use expo-router instead of @react-navigation/native\n- No typecheck regressions (2 pre-existing errors unchanged)\n- No test regressions (1854 passed, 4 pre-existing browser failures)",
          "is_bot": false,
          "headline": "chore(app): upgrade Expo SDK 55→56",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-07-16T09:13:45Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4732a24fbb6bbe5d9db0ee468a341a717017f6e3",
          "body": "- Update all Expo packages to SDK 55 compatible versions\n- React 19.1→19.2, React Native 0.81→0.83\n- babel-preset-expo 54→55, eslint-config-expo 10→55\n- Update @types/react to ~19.2.10 in root and app\n- No typecheck regressions (2 pre-existing errors unchanged)\n- No test regressions (1854 passed, 4 pre-existing browser failures)",
          "is_bot": false,
          "headline": "chore(app): upgrade Expo SDK 54→55",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-07-16T08:33:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "36f3c849e11f456044e3c4bd9daff8a5714cf9da",
          "body": "After host wake-from-sleep the relay drops both control and data sockets,\nbut the daemon kept stale data sockets in its map. A new data socket\nattached by the mobile client would race with the stale one, leaving\nthe Android app stuck on \"connecting\" even after app restart.\n\nClose all data connections at the top of connectControl so a fresh\ncontrol session always starts from a clean slate.",
          "is_bot": false,
          "headline": "fix(daemon,relayclient): close stale data sockets on control reconnect",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-07-16T07:07:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0ff9bcc8b0e00541ef77f1fa9ccb153f87d4e38c",
          "body": "- Add friendlyTmuxError() to convert raw exec errors (exit status 1, binary not found) into readable messages\n- Show \"New tmux\" and \"Refresh\" buttons below error text in tmux dashboard screen\n- Cover both backend error conversion and frontend error state in tests\n\ndocs(product): consolidate loop-sch\n[…]\np-dive.md into loop-schedule-spec.md Appendix A\n- Update roadmap-2026.md to v2.5 with Loop Engineering industry trends (Andrew Ng, Saboo, Osmani)\n- Remove deleted file references from roadmap and spec",
          "is_bot": false,
          "headline": "fix(tmux): show user-friendly error messages and recovery actions",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-07-14T13:14:50Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a34a16807483c850268f145a03bc89cd84d80afa",
          "body": "Loop template/instance model, shared AgentTemplate, LLM provider settings,\nand HTTP client hardening. See CHANGELOG for details.",
          "is_bot": false,
          "headline": "release: app v0.10.0, app-bridge v0.4.0, daemon v0.5.0",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-07-07T03:06:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "edf4757bb6870a55fe2595600eb69ab01b4d30a8",
          "body": "…RPC types\n\nfeat(daemon,loop): add template CRUD, log file separation, and instance grouping\nfeat(app-bridge): add template RPC schemas, message registration, and client methods\nfeat(app): add template hooks, instance detail screen, and group loops by template\ntest(daemon,loop): cover template operations and log file storage\ndocs(product): update prototype for template/instance model\nfix(daemon,server): extract requestId from raw JSON on decode failure",
          "is_bot": false,
          "headline": "feat(protocol): add LoopTemplateSummary and template list/get/delete …",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-07-07T02:58:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c69839d67b2ae44300b827f6a1f881dfc57900c1",
          "body": "…ndler errors\n\n- refactor(daemon): extract shared streamevents builder and detector across providers\n- feat(app): add babel-preset-expo dependency and align vitest versions\n- chore(deps): update go modules and rename bottom-sheet patch to 5.2.14\n\nCo-authored-by: kimi <kimi-code-cli>",
          "is_bot": false,
          "headline": "- feat(app-bridge): add shared structured logger and log swallowed ha…",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-06-30T07:44:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f39fff5f31857596d711dd1e7220a460055743a4",
          "body": "- fix(daemon/push,opencode): use bounded clients to avoid goroutine leaks\n- test(daemon): cover httpx timeouts and skip flaky attention test in short mode\n- build(npm): build highlight workspace on postinstall\n- chore(app-bridge): regenerate protocol schemas with reordered workspace defs\n\nCo-authored-by: kimi-code <moonshot/kimi-k2>",
          "is_bot": false,
          "headline": "- feat(daemon/httpx): add shared HTTP clients with sane timeouts",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-06-30T01:59:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a01985e9c82a7310c08e51be10203898c05ee752",
          "body": "# Conflicts:\n#\tdocs/README.md\n#\tdocs/decisions/adr-001-shared-agent-template-for-loop-and-schedule.md",
          "is_bot": false,
          "headline": "Merge branch 'solo-loop-agents'",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-06-29T16:43:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b01e40874505e2e43d2a5b53ea72d96a08cf3ec4",
          "body": "…pace runtime defs\n\n- refactor(app-bridge/schedule): remove unused ScheduleTargetSchema import\n\nCo-authored-by: kimi-code <kimi-code>",
          "is_bot": false,
          "headline": "- chore(app-bridge): regenerate protocol schemas with reordered works…",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-06-29T16:18:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6e5b97483dd28edf88d2dbaff0632ef230e898b6",
          "body": "…hedule\n\n- feat(loop): feed verify failures back to worker and bound verify timeout\n- feat(loop,agent): default loop worker to the provider's most autonomous mode\n- feat(app): add loop logs view and re-run action on loop detail screen\n- feat(app): add permission-mode picker to loop create screen\n- f\n[…]\nared AgentTemplate\n- test(loop,agent,protocol): cover templates, worker feedback, and schemas\n- docs(adr): add ADR-001 shared agent template for loop and schedule\n\nCo-authored-by: Kimi <kimi-code-cli>",
          "is_bot": false,
          "headline": "- feat(protocol,app-bridge): add shared AgentTemplate for loop and sc…",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-06-29T15:58:33Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "44fe66a7754b101814e4b54c543448478720d16e",
          "body": "…edule\n\n- docs(readme): add decisions section and renumber chapters\n- docs(product): add ASCII prototype overview\n\nCo-authored-by: kimi-code <kimi>",
          "is_bot": false,
          "headline": "- docs(decisions): add ADR-001 shared agent template for loop and sch…",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-06-29T08:36:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "949cb4df3ee630f43dfebe0d9c0110ab6325c1dc",
          "body": "…ect name\n\n- fix(daemon): implement solo_worktree_archive_request and persist archive removal\n- fix(daemon): correct DeleteWorktree safety check and repo-root resolution\n- test(app,daemon): add worktree-slug tests and archive handler registration test\n- style(protocol): apply gofmt to message_loop and message_tmux\n\nCo-authored-by: Kimi <kimi-code-cli>",
          "is_bot": false,
          "headline": "- feat(app): derive new-workspace slug from prompt, PR title, or proj…",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-06-28T17:00:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "596244a34ac2331c618a8434879e53245a3e23a6",
          "body": "…spawned agents\n\n- fix(app-bridge,schedule): tolerate malformed schedule targets in list responses\n- fix(app): show schedule query errors and optimistic cache update on create\n- refactor(app/e2e): update schedule tests for provider-only save/load/edit\n- refactor(app): remove existing-agent tab from schedule modals\n- fix(app-bridge): add missing llmProviders field in workspace rpc test\n\nCo-authored-by: Kimi Code CLI <kimi-code-cli>",
          "is_bot": false,
          "headline": "- feat(daemon,schedule): add provider schedule target and auto-close …",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-06-28T16:27:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "14efd8603d23b22ebc02356f799204266620e757",
          "body": "- feat(settings): support adding custom coding agent providers\n- refactor(settings): present LLM provider form in AdaptiveModalSheet\n- refactor(app): reorder Tmux entry in sidebar\n- docs(roadmap): update 2026 roadmap and remove HTML export\n\nCo-authored-by: kimi <kimi-code-cli>",
          "is_bot": false,
          "headline": "- feat(daemon,settings): add LLM provider configuration backend and UI",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-06-26T14:59:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cad18483392a666f5de5ed3ab918e52caae8248f",
          "body": "Co-authored-by: kimi-code-cli <kimi-k2>",
          "is_bot": false,
          "headline": "docs(roadmap): add human-agent and agent-to-agent handoff features",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-06-24T18:55:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5c2bb451e7ce606ba698a507e8b62069a2b2936e",
          "body": "…shboard\" → \"Tmux\"\n\nCo-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "refactor(app): rename sidebar labels \"Dashboard\" → \"Agents\", \"Tmux Da…",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-06-24T11:42:49Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "e571fd37f3242cdd636b218da386f2a30b26ade8",
          "body": "- Add 7 boundary tests to genzod generator covering pointer edge cases\n  (*int, *float64, *bool, *Inner, *[]string, *map[string]string),\n  omitempty combinations, array edge cases (2D, pointer elements,\n  interface slices), map edge cases (struct/pointer/slice values),\n  non-string key error path, k\n[…]\ns null, not undefined)\n- Add null coercion in normalizeAgentSnapshot and test fixtures for\n  labels/pendingPermissions to match Agent interface\n\nCo-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(app-bridge,protocol): harden schema-first infrastructure",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-06-24T06:55:49Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "9df0b2eeb7123350fcbde46ba7bf2b69045c4bb0",
          "body": "- Migrate 9 hand-written Zod schemas to genzod-generated, fix pointer/nullable bug in genzod\n- Add typed unions for WorkspaceDescriptor fields (ProjectKind, WorkspaceKind, WorkspaceStatus)\n- Unify StatusLoaderBucket as alias for SidebarStateBucket\n- Add CI lint rule (check-schema-duplication) to prevent hand-written schema duplication\n- Bump app 0.8.0 → 0.9.0, daemon 0.3.0 → 0.4.0\n\nCo-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "release: app v0.9.0, daemon v0.4.0",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-06-24T01:54:36Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "bddeb5566b0a9ef069a3bb3ad9d750272224e61b",
          "body": "…ptorSchema\n\nReplace hand-written WorkspaceDescriptorPayloadSchema with genzod-generated\nWorkspaceDescriptorSchema, eliminating dual schema definitions (§7-R3).\nRemove 6 dead fields (diffStat, project, aheadBehind, etc.) from the type\nsystem. Add null-safe wrappers for Go pointer fields and workspaceDirectory\ndefault transform. Fix identity preservation in patchWorkspaceScripts by\nnormalizing null→undefined before comparison.\n\nCo-authored-by: claude-code <claude-opus-4-7>",
          "is_bot": false,
          "headline": "refactor(app-bridge,app): migrate to genzod-generated WorkspaceDescri…",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-06-23T13:31:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "844f2a8e0a3e9c6fb772958ba764726f38822c53",
          "body": "The daemon expects WSProtocolVersion=2 but the client was sending\nprotocolVersion=1, causing every connection to be rejected with\n\"incompatible protocol version\" and triggering a reconnect loop.\n\nCo-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(app-bridge): send correct protocol version in hello message",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-06-23T07:09:36Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "4ac3c1471e47b6040961b6cfba5d8fee3af788a5",
          "body": "refactor(daemon,agent): split provider implementations into sub-packages\n\nMoved provider files from daemon/internal/agent/ to\ndaemon/internal/agent/providers/{claude,codex,kimi,opencode,pi}/\nand renamed CodexAgentClient to Client for consistency with\nthe sub-package layout. Resolved merge conflicts by combining\nthe branch's package-qualified type references with main's\nunused-parameter underscore convention.",
          "is_bot": false,
          "headline": "Merge branch 'worktree-refactor-agent-split-providers'",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-06-23T07:04:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e4c77abfd156a7c77f887f74d023970006f0c53a",
          "body": "… log failures\n\n- fix(daemon,agent): enforce per-agent timeline row limit with FIFO eviction\n- feat(daemon,config): add TimelineMaxRowsPerAgent configuration (default 10000)\n- feat(daemon,metrics): add timeline_rows_total and timeline_rows_dropped_total metrics\n- test(daemon): cover persistTurn failures and timeline limit eviction\n\nCo-authored-by: kimi-code-cli <kimi>",
          "is_bot": false,
          "headline": "- fix(daemon,memory): propagate persistTurn errors to Flush/Close and…",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-06-23T06:59:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "85b309b05b978ad534a07ba5eea11c4f265c9338",
          "body": "Move 5 provider implementations (Claude, Kimi, Pi, Codex, OpenCode) from\nthe monolithic agent/ package into agent/providers/{name}/ sub-packages.\nExtract shared utilities (DeriveToolCallDetail, HumanReadablePermission)\nto base/util.go and contract test helpers to providers/contracttest/.\n\nThe agent/\n[…]\n Mock\nprovider stays in agent/ due to circular dependency with agent tests.\n\nProvider registration in server/daemon.go updated to import sub-packages\ndirectly (claude.NewClient, kimi.NewClient, etc.).",
          "is_bot": false,
          "headline": "refactor(agent): split provider implementations into sub-packages",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-06-23T04:42:47Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "bf759306cd7722f6c6ae6ba47f82d096a62b6599",
          "body": "- fix(app): rewrite useCallback factory calls as inline arrows in session-context\n- fix(app): copy revalidation timer ref in cleanup to satisfy eslint\n- build(deps): override app-bridge zod to ^3.23.8 to avoid v4 API mismatch\n\nCo-authored-by: opencode <kimi>",
          "is_bot": false,
          "headline": "fix(app,deps): resolve lint and typecheck failures",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-06-23T04:40:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d12b2427e26bf442f0e9ff38fd29333b8b9c16b5",
          "body": "- fix(highlight): move package back to packages/highlight\n- fix(app): resolve useCallback exhaustive-deps warnings in session-context\n- build(deps): pin app-bridge zod to ^3.23.8 via npm override\n\nCo-authored-by: opencode <kimi>",
          "is_bot": false,
          "headline": "fix(ci): resolve make ci failures",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-06-23T04:40:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0a86415b7ec84e499b20a5068a2763950a43e3a2",
          "body": "Co-authored-by: opencode <kimi>",
          "is_bot": false,
          "headline": "chore(highlight): move highlight package into patches directory",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-06-23T04:27:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a305c922c2c6a293e94f91e3daae0061c9fd4c13",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'solo-go-2-ts'",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-06-23T04:26:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7c87077d0bad6a82acebcf1cc2b906596fde0227",
          "body": "- add genzod generator and cmd/genzod CLI using go/ast\n- generate workspace Zod schemas from Go structs\n- re-export generated schemas in app-bridge messages\n- fix TS7056 for large discriminated unions with explicit types\n- integrate schema generation into Makefile and CI diff check\n\nCo-authored-by: kimi <kimi-code-cli>",
          "is_bot": false,
          "headline": "feat(protocol, app-bridge): add Go-to-TypeScript Zod codegen",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-06-23T04:25:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e50cea52ff4d8d2e0253662ca58c616bfaac296e",
          "body": "- extract tmux scan/agent detection into session_tmux_scan.go\n- extract pane capture and wrapping into session_tmux_pane.go\n- extract session lifecycle helpers into session_tmux_session.go\n- add session_structure_test.go to enforce <500 line handler files\n- clean stale placeholder comments from session.go\n- fix pre-existing lint warnings in provider_codex.go and agent_integration_test.go\n\nCo-authored-by: Kimi Code <kimi-code-cli>",
          "is_bot": false,
          "headline": "refactor(daemon/session): split tmux logic into focused files",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-06-23T04:05:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "eb0248b9d7b517493c9a3da27383e210954265ee",
          "body": "Decompose the 1,672-line God Object into focused modules using a\nfactory function pattern:\n\n- session-notifications.ts — OS notification factory + helpers\n- agent-operations.ts — sendAgentMessage factory\n- session-helpers.ts — pure helpers + reducer glue + pending buffer\n- session-agent-sync.ts — sn\n[…]\no removes 9 dead-code _-prefixed callbacks (~150 lines).\n\nTDD-first: 112 tests across 14 files, all passing. TypeScript and ESLint\nclean. Public API 100% preserved (SessionProvider + type re-exports).",
          "is_bot": false,
          "headline": "refactor(app): split session-context into domain modules",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-06-23T01:22:56Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "447334f52ce23fe682e0405852eb848cc15c957a",
          "body": "…sets\n\nAdd architecture, flywheel, pillars, and tech-tree diagrams (SVG+PNG),\nan HTML render, and rewrite the roadmap around a project-as-anchor\nproduct thesis.",
          "is_bot": false,
          "headline": "docs(roadmap): update 2026 roadmap to project-centric version with as…",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-06-22T18:51:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3b164f475ca7645e179f2ee749eff03b0f014c11",
          "body": "Extract agent, chat, git, schedule, terminal, and workspace RPC logic\nout of the monolithic DaemonClient into dedicated modules with tests\nand a shared test harness + mock transport.",
          "is_bot": false,
          "headline": "refactor(app-bridge): split daemon-client into per-domain RPC modules",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-06-22T18:51:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cab3d495c2eaab05e24a1afb9d446c41958131ff",
          "body": "- feat(schedule): add working directory field and fix save/load schema mismatch\n- feat(sidebar): color sidebar icons and add loop/schedule count badges\n- feat(loop): support editing all fields from detail page\n- feat(agent): add Codex provider support\n- chore(protocol): bump WSProtocolVersion to 2\n-\n[…]\n.3.0, cli to 0.2.0\n- docs(architecture): update README and architecture diagrams\n- test(schedule): add E2E and unit tests for schedule creation and dashboard\n\nCo-authored-by: Kimi Code <kimi-code-cli>",
          "is_bot": false,
          "headline": "chore(release): bump version to 0.8.0",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-06-22T15:18:13Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2b25a44791b60391d5d58ad02a69ee3012c7d657",
          "body": "Remove unused imports and variables in loop/schedule project count hooks\n(ProjectPathSource, useQueryClient) that caused lint warnings. Fix two\nagent integration tests that used hardcoded /tmp paths for cwd, causing\nTempDir cleanup failures, and add proper agent cleanup via\ndeleteAgentForTest.\n\nCo-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: resolve lint warnings and fix flaky integration tests",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-06-22T03:07:39Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "2497933d6a9aea99a35f5d0100dac7ee5b21c10a",
          "body": "Add colored icons to sidebar navigation items (Sessions=green,\nDashboard=amber, Schedules=blue, Loops=purple, Tmux Dashboard=orange)\non both mobile and desktop. Update project row badges to match:\npane badge→orange, loop badge→purple, schedule badge→blue. Add\niconColor prop to SidebarHeaderRow for custom icon coloring.\n\nCo-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(sidebar): color sidebar icons and align project badge colors",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-06-21T17:15:33Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "a90c09df58ca565d232e6988efb23e10c3961352",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'worktree-stateless-inventing-umbrella'",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-06-21T16:44:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a1cd89fa7bc63b265e3f01868ec505eecd06c151",
          "body": "Show loop (Repeat icon, purple) and schedule (Calendar icon, blue)\ncount badges on sidebar project rows, matching the existing agent/pane\nbadge pattern. Clicking a badge navigates to the corresponding page.\n\n- Add generic cwd→project matcher with tilde expansion inferred from\n  project paths (works \n[…]\nheduleCount\n- Wire hooks into left-sidebar and thread badges through sidebar-workspace-list\n- Add unit tests (48 total) and E2E tests (3 tests)\n\nCo-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(sidebar): add loop and schedule count badges to project rows",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-06-21T16:43:27Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "e221a43d3912b99ef6dc31608769b1206e6d8d84",
          "body": "Extend the loop update API to support prompt, cwd, verifyChecks, and\nmaxIterations in addition to name and archive. The edit modal on the\nloop detail page now exposes all these fields with validation matching\nthe create form.\n\nCo-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(loop): support editing all fields from the detail page",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-06-21T16:21:50Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "20be7e42c5858f5d96e77ec0e26278e3ea53d364",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'worktree-functional-whistling-hearth'",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-06-21T01:53:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "034cb65e38580d3b072627a53351d099365c5252",
          "body": "…ebase\n\nAdd full Codex CLI provider backend following the stdio-based provider\npattern (Pi/Claude). Uses `codex exec --experimental-json` for\nnon-interactive JSON streaming with event translation to protocol\nstream events. Includes unit tests, contract test, and daemon\nregistration.\n\nAlso update README, docs index, components, and analysis docs to\nreflect the current codebase state (v0.7.0).\n\nCo-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(agent): implement Codex provider and update docs for current cod…",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-06-21T01:52:03Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "a21fed6a696248c464d52473f210b7e2749fcbd4",
          "body": "Run Go module tests, lint jobs, and typecheck jobs concurrently instead\nof sequentially. Benchmark showed test-go drops from 75.8s to 59.5s;\ncombined CI time improves ~30-35s. Also adds benchmark results doc.\n\nCo-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "perf(ci): parallelize test-go, lint, and typecheck with xargs -P0",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-06-20T18:39:38Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "b04639d9e75711dcc2e7555eb1442b9e0bed18ec",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'worktree-w-feature-deadcode'",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-06-20T18:07:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2e8106bd54f47ca15da1b87d4bfc7796402bba9f",
          "body": "The captureTmuxPane function now returns (string, int, error) to include\npane column width. Update all test call sites to handle the new return.\n\nCo-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(test): update captureTmuxPane calls for new paneCols return value",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-06-20T18:06:57Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "1d0eef8b91242569931a80c16d39d192944e3db6",
          "body": "Fix incorrect findings: TerminalCell/TerminalCursor are used in\nTerminalSnapshot, AgentSessionConfig is used in daemon-client, safeRandomId\nis used in daemon-client-transport. Reclassify 3 daemon-client methods as\nE2E test-only. Update counts from ~127 to ~118 findings.\n\nCo-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: update dead code analysis with re-verification corrections",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-06-20T18:02:38Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "a5629b135e8f817caa9bb95afd38b1ff9b93e989",
          "body": "Co-authored-by: Qoder <noreply@qoder.dev>",
          "is_bot": false,
          "headline": "chore: bump app to 0.7.0, app-bridge to 0.2.3, and update CHANGELOG",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-06-20T17:23:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "855bef416f3d11ff9f4d3e145e204247b9b8e61f",
          "body": "Co-authored-by: Qoder <noreply@qoder.dev>",
          "is_bot": false,
          "headline": "chore: bump app to 0.7.0 and app-bridge to 0.2.3",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-06-20T17:00:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8065eeab7f9126cf7854321940118309db3e8d0b",
          "body": "Replace clear()+write() (terminal.reset then async write) with a single\nin-place repaint write (\\x1b[3J\\x1b[H + content + \\x1b[J). xterm no longer\nrenders an empty buffer between reset and write, so the \"Thinking...\" spinner\nupdating each poll no longer flickers the whole 1:1 window.\n\nCo-authored-by: Qoder <noreply@qoder.dev>",
          "is_bot": false,
          "headline": "- fix(terminal): eliminate snapshot flicker with in-place repaint",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-06-20T17:00:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e0f46e17caf3f184c9e0de3ef0e81426b50ae475",
          "body": "…n-DOM 1:1 horizontal scroller\n\n- fix(terminal): make the root div the horizontal scroller so panning works inside the DOM iframe/WebView\n- refactor(terminal): add fitToWidth runtime support and stop requesting rewrapped cols\n- test(tmux): update screen and browser tests for fit-to-width and root-scroller behavior\n- chore(app): add Expo ESLint flat config\n- docs: rework tmux pane handoff for the full-content fit design\n\nCo-authored-by: Qoder <noreply@qoder.dev>",
          "is_bot": false,
          "headline": "- feat(tmux): render full native pane content with scale-to-fit and i…",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-06-20T14:47:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "db0c5df895290496e75113200b822c1eec5ca850",
          "body": "- feat(protocol): add paneCols to TmuxCapturePaneResponsePayload\n- feat(terminal): add forceCols and allowHorizontalScroll props to runtime\n- test(tmux): add paneCols hook tests, width toggle screen tests, and browser runtime tests\n- test(e2e): add tmux pane horizontal scroll E2E test\n- feat(agent):\n[…]\nclaude and kimi\n- docs: add analysis docs, tmux pane handoff, and loop schedule spec\n- feat(app): add pending-create-finalize utility and improve error boundary\n\nCo-authored-by: Claude <mimo-v2.5-pro>",
          "is_bot": false,
          "headline": "- feat(tmux): add horizontal scroll toggle for tmux pane xterm screen",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-06-20T11:55:05Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "930675ba3a56caf3155dd490d7cf673767cb7464",
          "body": "Version is now set at build time via -ldflags instead of being hardcoded.\nDev builds default to {tag}-dev-{YYYYMMDDHHMMSS}[-dirty], release builds\ncan override with VERSION=v0.6.5 make solo.\n\nAlso fixes t.Fatal calls in HTTP handler goroutines (test-only).\n\nCo-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(daemon): inject version at build time via ldflags",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-06-18T21:39:42Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "66b40adf86f1e4f11c4a75cde39255a2ab91d9dd",
          "body": "Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: bump version to 0.6.5",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-06-18T21:26:46Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d2ff7062698fa86c8e2a0bb1b7f2553777e127dd",
          "body": "…setExtendsTimeout\n\nReplace plain int with atomic.Int64 for pingCount, which is written by\nthe HTTP handler goroutine and read by the test goroutine.\n\nCo-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(daemon): fix data race on pingCount in TestConsumeSSE_HeartbeatRe…",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-06-18T21:09:18Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "fbdcb59cee4ee4f9d1097aef52e811de52e33731",
          "body": "…orkflow\n\n- Pass ptmx as parameter to readLoop instead of reading t.ptmx without\n  lock, which raced with Close() setting t.ptmx = nil under lock\n- Add build:workspace-deps step before app typecheck in ci.yml so\n  @getsolo/highlight is available when tsc runs\n\nCo-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(ci): fix data race in readLoop and add missing build step in CI w…",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-06-18T21:01:19Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "0c71040d8a355dc52c9cf910e8ec4ee5bf08ed4d",
          "body": "…iming issues\n\n- Add closed flag to fakeGitCommander to prevent wg.Add/wg.Wait race when\n  background goroutines from IsDirtyCached outlive the test cleanup\n- Increase readUntilAgentUpdateAttention timeout from 10s to 30s for\n  race-detector load\n- Increase TestTerminalManager_KillAll post-KillAll sleep from 100ms to 500ms\n\nCo-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(daemon): fix flaky CI tests — data race in fakeGitCommander and t…",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-06-18T20:50:33Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "c7f08cd05e104a3ac8989f903ba24e2c5bab8dcb",
          "body": "Close() sets t.ptmx = nil under lock while readLoop() reads t.ptmx\nwithout lock. Capture a local reference at loop start so the read\npath never races with Close().\n\nCo-authored-by: opencode <xiaomi-token-plan-cn/mimo-v2.5-pro>",
          "is_bot": false,
          "headline": "fix(daemon): capture local ptmx reference in readLoop to fix data race",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-06-18T19:40:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "16e22552efa65e45654fa65ca2f8a62c4cdca179",
          "body": "Build workspace deps before typecheck to fix missing @getsolo/highlight\non fresh checkouts. Use `make ci` as the pre-commit gate.\n\nCo-authored-by: opencode <xiaomi-token-plan-cn/mimo-v2.5-pro>",
          "is_bot": false,
          "headline": "chore(makefile): add ci target with lint, test, and typecheck",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-06-18T19:25:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "00b81ed59f49228f7cb13d66cf4ade4e8ba9e899",
          "body": "…tests with coverage)\n\n- fix(app): fix pre-existing test failures in composer mock and voice-removal checks\n\nCo-authored-by: opencode <xiaomi-token-plan-cn/mimo-v2.5-pro>",
          "is_bot": false,
          "headline": "- chore(makefile): add test targets mirroring CI (go test + app unit …",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-06-18T19:08:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "78a9eef18517546872fc2ce8ca3cc00f6156049c",
          "body": "…tibility\n\n- fix(app): replace removed Github icon with Code in composer\n- fix(app): resolve 45 TypeScript type errors across 18 files\n\nCo-authored-by: claude <mimo-v2.5-pro>",
          "is_bot": false,
          "headline": "- fix(app): upgrade lucide-react-native to ^1.21.0 for React 19 compa…",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-06-18T15:54:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "64928315e433f254c4803a899766821b9f88407c",
          "body": "…sages\n\n- fix(ci): add external_api tag to Go test command for explicit skip\n\nCo-authored-by: Claude Opus 4.7 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "- fix(app): fix TypeScript type errors in pair-scan, _layout, and mes…",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-06-18T14:55:28Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "24a2323dc00ee7db245ddc61bc787bc7196fab34",
          "body": "vitest 4.1.7 in app-bridge conflicted with vitest 3.2.4 in app due to\nnpm hoisting. @vitest/coverage-v8 resolved to the wrong vitest version,\nbreaking BaseCoverageProvider import.\n\nCo-authored-by: Claude Opus 4.7 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(app-bridge): downgrade vitest to ^3.2.4 to match app workspace",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-06-18T14:31:50Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "8fd10720e2e1f0957d07c9ddc4f24673a1bd8c6e",
          "body": "Same pattern as pi integration tests — these depend on local binaries.\n\nCo-authored-by: Claude Opus 4.7 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(daemon): add external_api build tag to kimi and pi provider tests",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-06-18T14:27:51Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "f2b9e6a4e673668fb6033ef1d22fd1c2dcc1c906",
          "body": "These tests depend on the local `pi` binary and fail when it's not\ninstalled. Add !short && !external_api build tags to skip them in CI.\n\nCo-authored-by: Claude Opus 4.7 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(daemon): add external_api build tag to pi integration tests",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-06-18T14:26:47Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "7f432569fed4e28ce1393e7a212d1beac467f558",
          "body": "… in CI\n\n- fix(app): add @getsolo/highlight alias in vitest config for CI resolution\n\nCo-authored-by: Claude Opus 4.7 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "- fix(daemon): add external_api build tag to skip reasoning E2E tests…",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-06-18T14:16:11Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "c2801c824ddec42ec43f6ff7b3169045bcba2cbc",
          "body": "The browser test project requires Playwright chromium which is not\ninstalled in CI. Add --project=unit to skip it.\n\nCo-authored-by: Claude Opus 4.7 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(ci): run only unit tests in app coverage step",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-06-18T12:38:46Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "05f198631ecdd6cb801159dbcd8b25157a61769b",
          "body": "TestClearAgentAttentionResponseAndUpdate was timing out at 5s waiting\nfor the agent_update broadcast after clear_agent_attention. Bump the\ndeadline to 10s to account for async processing latency.\n\nCo-authored-by: Claude Opus 4.7 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(daemon): increase readUntilAgentAttention timeout to fix flaky test",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-06-18T12:33:52Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "785f540e5e92fffa0973de768d3c43f14995de7c",
          "body": "… test mock\n\nThe lucide-react-native mock was missing ChevronDown and ChevronUp,\ncausing 33 tests to fail with \"No export is defined\" error.\n\nCo-authored-by: Claude Opus 4.7 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(app): add missing ChevronDown/ChevronUp icons to tmux-pane-screen…",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-06-18T12:29:06Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d2d0371d01cb9189d31fd58f671ae339c6546a99",
          "body": "- fix(app): fix lint errors and clean up warnings\n  - move useCallback before early return in tmux-pane-screen to fix rules-of-hooks\n  - ignore @getsolo/highlight in import/no-unresolved (workspace dep not built before lint)\n  - remove unused imports across 8 files\n  - remove unused pad2 function in schedule-create-modal\n  - remove stale eslint-disable directive in ansi-text-renderer test\n  - convert Array<T> to T[] in 4 test files\n\nCo-authored-by: Claude Opus 4.7 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "- fix(protocol): gofmt alignment in RemoveProjectResponse struct",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-06-18T11:55:46Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "66b1d674be381044a1f50ec8a9bc247fb2b1e358",
          "body": "Co-authored-by: qoder <glm-5.2>",
          "is_bot": false,
          "headline": "chore: bump daemon to 0.2.0 and app-bridge to 0.2.1",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-06-18T11:24:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c7924a8c5e18b019ee1606e4e7bd6656e7200db7",
          "body": "…daemon restart\n\n- fix(tmux,daemon): detect version-suffixed agent commands like qodercli-1.0.22\n- fix(sidebar,app): use Solo-managed agent counts instead of tmux CLI panes for agent badge\n- fix(tmux,app): deduplicate pane counts when project has multiple workspaces\n- fix(tmux,app): exclude exited agents from sidebar agent count\n- feat(protocol,app-bridge): add remove_project RPC for bulk workspace removal\n- chore: bump version to 0.6.4\n\nCo-authored-by: qoder <glm-5.2>",
          "is_bot": false,
          "headline": "- fix(workspace,daemon): fix stale git branch names in sidebar after …",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-06-18T11:22:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "882a3cdcff9639b0eaa24718ebe16543b68cf6e6",
          "body": "…ect rows\n\n- feat(tmux): add directory filtering to tmux dashboard with filter banner\n- test(e2e): add tmux pane counts sidebar badge e2e test\n- docs(analysis): add tmux project matcher spec, plan, and architecture review\n- chore: bump version to 0.6.4\n\nCo-authored-by: opencode <xiaomi-token-plan-cn/mimo-v2.5-pro>",
          "is_bot": false,
          "headline": "- feat(sidebar,tmux): add pane and agent count badges to sidebar proj…",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-06-18T06:33:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "daeffbd0f2c891159cbc16e2e62d066cde1098b4",
          "body": "Co-authored-by: opencode <xiaomi-token-plan-cn/mimo-v2.5-pro>",
          "is_bot": false,
          "headline": "chore: bump version to 0.6.3",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-06-17T08:39:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "72e4637274d761cf878536b369b590bd4040889f",
          "body": "…nsistency\n\n- feat(protocol): add LastContentChangeHHMM and LastContentChangeAgo fields\n- feat(daemon): add formatUnixHHMM and formatWindowActivity helpers\n- refactor(app): remove client-side formatHHMM/formatWindowActivity, use daemon strings\n- fix(app): show HH:MM unconditionally outside statusLin\n[…]\nWindowActivity\n- test(app): update mocks to use daemon-provided time strings\n- test(e2e): strengthen HH:MM assertion with ±1min tolerance\n\nCo-authored-by: opencode <xiaomi-token-plan-cn/mimo-v2.5-pro>",
          "is_bot": false,
          "headline": "- refactor(tmux): move time display computation to daemon for data co…",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-06-16T17:51:41Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8ee124c1f2d8742cdcb15efde7af26b368b630b4",
          "body": "…y time\n\n- Add LastContentChange field to protocol (TmuxPaneInfo, TmuxAgentInfo)\n- Implement hash-based content change detection in daemon (detectAgentActivity)\n- Add 3-second noise filter for window_activity on otherPanes (filterWindowActivity)\n- Add lastContentChange and activity to app-bridge Zod\n[…]\ntentChange descending in frontend\n- Display HH:MM and relative time (\"just now\", \"Xm ago\") on tmux cards\n- Add daemon, frontend unit, and Playwright E2E tests\n\nCo-authored-by: opencode <mimo-v2.5-pro>",
          "is_bot": false,
          "headline": "feat(tmux): sort dashboard by last content change and display activit…",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-06-16T16:51:30Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "121573a5216042724b8237c3e7e97b4327d6b326",
          "body": "…op Automation section, update tmux features and test counts\n\n- docs(analysis, product): update test counts (app 1663, e2e 35), cliutil rename, loop implemented status\n- style(protocol, cli, daemon): fix gofmt/goimports formatting in loop and server files\n\nCo-authored-by: opencode <xiaomi-token-plan-cn/mimo-v2.5-pro>",
          "is_bot": false,
          "headline": "- docs(readme, zh-CN): add Loop Engine to architecture diagram and Lo…",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-06-16T08:38:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d5dfcf1951885dfa045017f2511043ee45229195",
          "body": "…ridge, app and CLI\n\n- refactor(cli): rename internal/util to cliutil and consolidate output helpers\n- refactor(daemon): streamline agent providers, manager and relay client internals\n- refactor(relay): clean up metrics, e2ee channel and session management\n- refactor(protocol): normalize schedule and tmux message structures\n- test(daemon,loop): update tests and add Playwright e2e coverage\n\nCo-authored-by: opencode <xiaomi-token-plan-cn/mimo-v2.5-pro>",
          "is_bot": false,
          "headline": "- feat(loop): add end-to-end loop CRUD across protocol, daemon, app-b…",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-06-16T07:53:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3b9148f002ed54e4fe632352574cf43672723bd6",
          "body": "…mon, app-bridge and app\n\n- feat(tmux): add stale entry cleanup on rescan via DeleteByAgentName before Merge\n- refactor(tmux): simplify extractAgentLaunchCmd to ps-only, remove pane scrollback code\n\nPane scrollback (capture-pane -e) was unreliable for TUI agents that use\nthe alternate screen buffer \n[…]\nnsiRe, and\npaneID parameter from extractAgentLaunchCmd. The ps-based approach via\nfindAgentDescendant remains the single source of truth.\n\nCo-authored-by: opencode <xiaomi-token-plan-cn/mimo-v2.5-pro>",
          "is_bot": false,
          "headline": "- feat(tmux): add delete command history support across protocol, dae…",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-06-15T18:26:02Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d3678b8c5ba8030b8c7fe8500f1a4691913e77db",
          "body": "…-layer cascade fix - Strip ANSI SGR/OSC codes from capture-pane -e output before regex matching - Add isSuspiciousPsArgs heuristic and agentNameByPrefix fallback (kimi-code → kimi) - Upgrade bare ps result from pane scrollback when flags are present - Add isStaleLaunchCmd (suspicious + LookPath) cl\n[…]\n for launch-cmd detection, ANSI stripping, prefix matching, load cleanup - docs(analysis): add deep-dive on kimi→kimi-code cascade failure and defense-in-depth fix\n\nCo-authored-by: Qoder <qoder-agent>",
          "is_bot": false,
          "headline": "- fix(tmux): resolve kimi --yolo misidentified as kimi-code via eight…",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-06-15T08:15:09Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b2429322f6fbd871d1660c37d9c49a6d3ec52f9b",
          "body": "…ridge and app\n\n- feat(tmux-dashboard): add close button to agent/pane cards with confirmation dialog\n- feat(tmux-dashboard): add run confirmation and agents tab switch on history run\n- test(e2e): add Playwright tests for tmux close-session flow\n\nCo-authored-by: opencode <xiaomi-token-plan-cn/mimo-v2.5-pro>",
          "is_bot": false,
          "headline": "- feat(tmux): add kill-session support across protocol, daemon, app-b…",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-06-14T18:52:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6987dd135fd993e1472a4d90e1b01a7ed8c5bf10",
          "body": "Co-authored-by: opencode <xiaomi-token-plan-cn/mimo-v2.5-pro>",
          "is_bot": false,
          "headline": "docs: update tmux features, test counts, and terminal themes across docs",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-06-14T17:51:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c3088ee990daf8b1eaebf6c81d7cf96631d19f87",
          "body": "Co-authored-by: opencode <xiaomi-token-plan-cn/mimo-v2.5-pro>",
          "is_bot": false,
          "headline": "docs(readme): update test counts and tmux dashboard features",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-06-14T17:47:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ef7b7db8dc6c64d718cd4c4ab0936d7a33c34fa2",
          "body": "Co-authored-by: opencode <xiaomi-token-plan-cn/mimo-v2.5-pro>",
          "is_bot": false,
          "headline": "feat(tmux): add new session creation from dashboard",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-06-14T17:42:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "89d0fc99f08a85f91bd6606e214be0b3982ed5be",
          "body": "- Extract full launch command (with flags) via pgrep + ps -o args=\n- Persist deduplicated command history to ~/.solo/agent-commands.json\n- Add History tab to tmux dashboard with copy-to-clipboard\n- Add history command picker in tmux pane Send view\n\nCo-authored-by: opencode <xiaomi-token-plan-cn/mimo-v2.5-pro>",
          "is_bot": false,
          "headline": "feat(tmux): add coding agent command history tracking and display",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-06-14T16:51:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "47f2720a5afa3e5a5ec3851fe38775f34a8392db",
          "body": "- Extend tmux/list_agents RPC to return non-agent panes as otherPanes\n- Add TmuxPaneInfo protocol type and Zod schema with null-safe defaults\n- Fix Go nil slice JSON encoding (null → []) with make([]T, 0)\n- Add \"Other Panes\" tab with command-name NameCard grouping and filtering\n- Extend TmuxAgentSto\n[…]\nxPane union type\n- Handle missing agentName in tmux-pane-screen for non-agent panes\n- Add tests for otherPanes parsing, command grouping, and tab switching\n\nCo-authored-by: claude-code <mimo-v2.5-pro>",
          "is_bot": false,
          "headline": "feat(tmux): add non-agent pane display to tmux dashboard",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-06-14T15:30:08Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f9416b3cf62f0f3b2df206339bcbfd8947df1a3f",
          "body": "…to themes\n\n- feat(terminal): add Bash preset and auto theme with OSC 10/11 default colors\n- feat(terminal): parse default colors from pane content via OSC sequences\n- feat(terminal): apply minimum contrast adjustment to ANSI-rendered text\n- refactor(terminal): simplify resolveTerminalColors to syst\n[…]\nst, and OSC parsing\n- docs(product): add roadmap, feature directions, and loop schedule design docs\n- chore(app): bump version to 0.6.1\n- chore: update .gitignore\n\nCo-authored-by: kimi <kimi-code-cli>",
          "is_bot": false,
          "headline": "feat(tmux): move terminal color detection to frontend and add Bash/au…",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-06-14T10:51:07Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "19d11d6a4d82f39371bdae666663262ce559f9d2",
          "body": "- docs(readme, architecture, product, providers): update provider roster, CI pipeline, tmux themes, schedule modules and test counts\n- docs(solo-dev-base): bump skill version, update repo map, providers, recent architecture changes and CI\n- docs(agents): add documentation index pointer\n- docs(testing): update app unit test count to 1617\n\nCo-authored-by: kimi <kimi-k2.5>",
          "is_bot": false,
          "headline": "docs: sync docs, skill and rules with current codebase",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-06-13T04:05:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "45e7d73b5bae091a7bf42799c1a4f558c96be92f",
          "body": "- refactor(tmux-pane): extract terminal color resolution to resolveTerminalColors\n- refactor(terminal-themes): simplify theme presets to system/dark/light/tmux\n- fix(agent): sort provider model variants for deterministic test output\n- test(agent): add manager_config, provider_claude_translate, provi\n[…]\nndlers tests\n- docs: consolidate coverage/tmux/product docs, delete 11 stale files, update indexes\n- chore: add .codegraph/ to .gitignore\n\nCo-authored-by: opencode <xiaomi-token-plan-cn/mimo-v2.5-pro>",
          "is_bot": false,
          "headline": "- feat(tmux-pane): add slash command filtering and tmux theme support",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-06-12T10:31:16Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c36fb2bb7da7adbb1fac9c374cc393d06bb664a8",
          "body": "…tines\n\n- perf(tmux): coalesce concurrent capture-pane requests via singleflight\n\nCo-authored-by: claude <claude-opus-4-7>",
          "is_bot": false,
          "headline": "- perf(tmux): parallelize extractTmuxStatusLine with concurrent gorou…",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-06-10T19:04:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4b00f562d62d73bacb2d76a6c12afc1e8796f063",
          "body": "- perf(tmux): batch child process detection to reduce N+1 subprocess calls\n\nCo-authored-by: claude <claude-opus-4-7>",
          "is_bot": false,
          "headline": "- refactor(tmux): add subprocess timeouts to prevent goroutine blocking",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-06-10T18:22:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d04802dfee1a5932afdbbfe417506d5fbf8fe1d5",
          "body": "…m host page to general settings\n\n- feat(tmux): detect exited agents via title-only match and add status field\n- chore: add eslint-plugin-complexity, remove expo-audio, update .gitignore\n- docs: add agent-send-presets design doc\n\nCo-authored-by: Trae CLI <glm-5.1>",
          "is_bot": false,
          "headline": "- refactor(settings): move Providers, Operations, and Tmux agents fro…",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-06-10T13:57:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9e1c11c54a91db62bc8434101c016949853a5908",
          "body": "Co-authored-by: opencode <mimo-v2.5-pro>",
          "is_bot": false,
          "headline": "chore(version): bump app to 0.6.0 with changelog",
          "author_name": "Andy",
          "author_login": "WuErPing",
          "committed_at": "2026-06-09T17:15:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 5,
      "commits_last_year": 194,
      "latest_release_at": "2026-07-16T12:44:01Z",
      "latest_release_tag": "v0.11.0",
      "releases_from_tags": true,
      "days_since_last_push": 4,
      "active_weeks_last_year": 10,
      "days_since_latest_release": 5,
      "mean_days_between_releases": 9.2
    },
    "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": "github.com/WuErPing/solo",
          "exists": true,
          "license": null,
          "keywords": [],
          "ecosystem": "go",
          "matches_repo": true,
          "registry_url": "https://pkg.go.dev/github.com/WuErPing/solo",
          "is_deprecated": false,
          "latest_version": "v0.11.0",
          "repository_url": "https://github.com/WuErPing/solo",
          "versions_count": 5,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-07-16T12:44:01Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 5
        }
      ]
    },
    "popularity": {
      "forks": 1,
      "stars": 5,
      "watchers": 0,
      "fork_history": {
        "days": [
          {
            "date": "2026-06-22",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 1,
        "total_forks": 1
      },
      "star_history": {
        "days": [
          {
            "date": "2026-06-06",
            "count": 1
          },
          {
            "date": "2026-06-08",
            "count": 2
          },
          {
            "date": "2026-06-14",
            "count": 1
          },
          {
            "date": "2026-06-22",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 5,
        "total_stars": 5
      },
      "open_issues_and_prs": 0
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": false,
      "bootstrap_files": [
        "Makefile"
      ],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [
        "app-bridge/tsconfig.json",
        "app/tsconfig.json",
        "packages/highlight/tsconfig.json",
        "tsconfig.json"
      ],
      "toolchain_manifests": [
        "cli/go.mod",
        "daemon/go.mod",
        "docs/analysis/demo/iterm2-agent-detection/go.mod",
        "protocol/go.mod",
        "relay-go/go.mod"
      ],
      "largest_source_bytes": 127261,
      "source_files_sampled": 1313,
      "oversized_source_files": 10,
      "agent_instruction_files": [
        "AGENTS.md",
        "CLAUDE.md"
      ],
      "agent_instruction_max_bytes": 4724
    },
    "dependencies": {
      "manifests": [
        "app-bridge/package.json",
        "app/Gemfile",
        "app/package.json",
        "cli/go.mod",
        "daemon/go.mod",
        "package.json",
        "protocol/go.mod",
        "relay-go/go.mod"
      ],
      "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": [
        "go",
        "npm",
        "rubygems"
      ],
      "dependencies": [
        {
          "name": "base64-js",
          "manifest": "app-bridge/package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.5.1"
        },
        {
          "name": "tweetnacl",
          "manifest": "app-bridge/package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.0.3"
        },
        {
          "name": "zod",
          "manifest": "app-bridge/package.json",
          "ecosystem": "npm",
          "version_constraint": "^3.23.8"
        },
        {
          "name": "fastlane",
          "manifest": "app/Gemfile",
          "ecosystem": "rubygems",
          "version_constraint": null
        },
        {
          "name": "@dnd-kit/core",
          "manifest": "app/package.json",
          "ecosystem": "npm",
          "version_constraint": "^6.3.1"
        },
        {
          "name": "@dnd-kit/sortable",
          "manifest": "app/package.json",
          "ecosystem": "npm",
          "version_constraint": "^10.0.0"
        },
        {
          "name": "@dnd-kit/utilities",
          "manifest": "app/package.json",
          "ecosystem": "npm",
          "version_constraint": "^3.2.2"
        },
        {
          "name": "@floating-ui/react-native",
          "manifest": "app/package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.10.7"
        },
        {
          "name": "@getsolo/highlight",
          "manifest": "app/package.json",
          "ecosystem": "npm",
          "version_constraint": "*"
        },
        {
          "name": "@gorhom/bottom-sheet",
          "manifest": "app/package.json",
          "ecosystem": "npm",
          "version_constraint": "^5.2.6"
        },
        {
          "name": "@gorhom/portal",
          "manifest": "app/package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.0.14"
        },
        {
          "name": "@react-native-async-storage/async-storage",
          "manifest": "app/package.json",
          "ecosystem": "npm",
          "version_constraint": "2.2.0"
        },
        {
          "name": "@react-native-masked-view/masked-view",
          "manifest": "app/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.3.2"
        },
        {
          "name": "@react-native/normalize-colors",
          "manifest": "app/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.86.0"
        },
        {
          "name": "@react-navigation/native",
          "manifest": "app/package.json",
          "ecosystem": "npm",
          "version_constraint": "^7.3.4"
        },
        {
          "name": "@tanstack/react-query",
          "manifest": "app/package.json",
          "ecosystem": "npm",
          "version_constraint": "^5.90.11"
        },
        {
          "name": "@tanstack/react-virtual",
          "manifest": "app/package.json",
          "ecosystem": "npm",
          "version_constraint": "^3.13.21"
        },
        {
          "name": "@xterm/addon-clipboard",
          "manifest": "app/package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.2.0"
        },
        {
          "name": "@xterm/addon-fit",
          "manifest": "app/package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.11.0"
        },
        {
          "name": "@xterm/addon-image",
          "manifest": "app/package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.9.0"
        },
        {
          "name": "@xterm/addon-ligatures",
          "manifest": "app/package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.10.0"
        },
        {
          "name": "@xterm/addon-search",
          "manifest": "app/package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.16.0"
        },
        {
          "name": "@xterm/addon-unicode11",
          "manifest": "app/package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.9.0"
        },
        {
          "name": "@xterm/addon-web-links",
          "manifest": "app/package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.12.0"
        },
        {
          "name": "@xterm/addon-webgl",
          "manifest": "app/package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.19.0"
        },
        {
          "name": "@xterm/xterm",
          "manifest": "app/package.json",
          "ecosystem": "npm",
          "version_constraint": "^6.0.0"
        },
        {
          "name": "base64-js",
          "manifest": "app/package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.5.1"
        },
        {
          "name": "buffer",
          "manifest": "app/package.json",
          "ecosystem": "npm",
          "version_constraint": "^6.0.3"
        },
        {
          "name": "expo",
          "manifest": "app/package.json",
          "ecosystem": "npm",
          "version_constraint": "^57"
        },
        {
          "name": "expo-asset",
          "manifest": "app/package.json",
          "ecosystem": "npm",
          "version_constraint": "~57.0.5"
        },
        {
          "name": "expo-build-properties",
          "manifest": "app/package.json",
          "ecosystem": "npm",
          "version_constraint": "~57.0.5"
        },
        {
          "name": "expo-camera",
          "manifest": "app/package.json",
          "ecosystem": "npm",
          "version_constraint": "~57.0.2"
        },
        {
          "name": "expo-clipboard",
          "manifest": "app/package.json",
          "ecosystem": "npm",
          "version_constraint": "~57.0.1"
        },
        {
          "name": "expo-constants",
          "manifest": "app/package.json",
          "ecosystem": "npm",
          "version_constraint": "~57.0.5"
        },
        {
          "name": "expo-crypto",
          "manifest": "app/package.json",
          "ecosystem": "npm",
          "version_constraint": "~57.0.1"
        },
        {
          "name": "expo-dev-client",
          "manifest": "app/package.json",
          "ecosystem": "npm",
          "version_constraint": "~57.0.6"
        },
        {
          "name": "expo-file-system",
          "manifest": "app/package.json",
          "ecosystem": "npm",
          "version_constraint": "~57.0.1"
        },
        {
          "name": "expo-haptics",
          "manifest": "app/package.json",
          "ecosystem": "npm",
          "version_constraint": "~57.0.1"
        },
        {
          "name": "expo-image",
          "manifest": "app/package.json",
          "ecosystem": "npm",
          "version_constraint": "~57.0.1"
        },
        {
          "name": "expo-image-picker",
          "manifest": "app/package.json",
          "ecosystem": "npm",
          "version_constraint": "~57.0.4"
        },
        {
          "name": "expo-keep-awake",
          "manifest": "app/package.json",
          "ecosystem": "npm",
          "version_constraint": "~57.0.1"
        },
        {
          "name": "expo-linking",
          "manifest": "app/package.json",
          "ecosystem": "npm",
          "version_constraint": "~57.0.3"
        },
        {
          "name": "expo-notifications",
          "manifest": "app/package.json",
          "ecosystem": "npm",
          "version_constraint": "~57.0.5"
        },
        {
          "name": "expo-router",
          "manifest": "app/package.json",
          "ecosystem": "npm",
          "version_constraint": "~57.0.6"
        },
        {
          "name": "expo-sharing",
          "manifest": "app/package.json",
          "ecosystem": "npm",
          "version_constraint": "~57.0.5"
        },
        {
          "name": "expo-splash-screen",
          "manifest": "app/package.json",
          "ecosystem": "npm",
          "version_constraint": "~57.0.4"
        },
        {
          "name": "expo-system-ui",
          "manifest": "app/package.json",
          "ecosystem": "npm",
          "version_constraint": "~57.0.1"
        },
        {
          "name": "expo-updates",
          "manifest": "app/package.json",
          "ecosystem": "npm",
          "version_constraint": "~57.0.7"
        },
        {
          "name": "fast-deep-equal",
          "manifest": "app/package.json",
          "ecosystem": "npm",
          "version_constraint": "^3.1.3"
        },
        {
          "name": "lucide-react-native",
          "manifest": "app/package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.21.0"
        },
        {
          "name": "mnemonic-id",
          "manifest": "app/package.json",
          "ecosystem": "npm",
          "version_constraint": "^3.2.7"
        },
        {
          "name": "qrcode",
          "manifest": "app/package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.5.4"
        },
        {
          "name": "react",
          "manifest": "app/package.json",
          "ecosystem": "npm",
          "version_constraint": "19.2.3"
        },
        {
          "name": "react-dom",
          "manifest": "app/package.json",
          "ecosystem": "npm",
          "version_constraint": "19.2.3"
        },
        {
          "name": "react-native",
          "manifest": "app/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.86.0"
        },
        {
          "name": "react-native-draggable-flatlist",
          "manifest": "app/package.json",
          "ecosystem": "npm",
          "version_constraint": "^4.0.3"
        },
        {
          "name": "react-native-edge-to-edge",
          "manifest": "app/package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.7.0"
        },
        {
          "name": "react-native-gesture-handler",
          "manifest": "app/package.json",
          "ecosystem": "npm",
          "version_constraint": "~2.32.0"
        },
        {
          "name": "react-native-keyboard-controller",
          "manifest": "app/package.json",
          "ecosystem": "npm",
          "version_constraint": "1.21.9"
        },
        {
          "name": "react-native-markdown-display",
          "manifest": "app/package.json",
          "ecosystem": "npm",
          "version_constraint": "^7.0.2"
        },
        {
          "name": "react-native-nitro-modules",
          "manifest": "app/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.35.5"
        },
        {
          "name": "react-native-reanimated",
          "manifest": "app/package.json",
          "ecosystem": "npm",
          "version_constraint": "4.5.0"
        },
        {
          "name": "react-native-safe-area-context",
          "manifest": "app/package.json",
          "ecosystem": "npm",
          "version_constraint": "~5.7.0"
        },
        {
          "name": "react-native-screens",
          "manifest": "app/package.json",
          "ecosystem": "npm",
          "version_constraint": "4.25.2"
        },
        {
          "name": "react-native-svg",
          "manifest": "app/package.json",
          "ecosystem": "npm",
          "version_constraint": "15.15.4"
        },
        {
          "name": "react-native-unistyles",
          "manifest": "app/package.json",
          "ecosystem": "npm",
          "version_constraint": "^3.0.15"
        },
        {
          "name": "react-native-web",
          "manifest": "app/package.json",
          "ecosystem": "npm",
          "version_constraint": "~0.21.0"
        },
        {
          "name": "react-native-webview",
          "manifest": "app/package.json",
          "ecosystem": "npm",
          "version_constraint": "13.16.1"
        },
        {
          "name": "react-native-worklets",
          "manifest": "app/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.10.0"
        },
        {
          "name": "tiny-invariant",
          "manifest": "app/package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.3.3"
        },
        {
          "name": "tweetnacl",
          "manifest": "app/package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.0.3"
        },
        {
          "name": "use-sync-external-store",
          "manifest": "app/package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.6.0"
        },
        {
          "name": "zod",
          "manifest": "app/package.json",
          "ecosystem": "npm",
          "version_constraint": "^3.23.8"
        },
        {
          "name": "zustand",
          "manifest": "app/package.json",
          "ecosystem": "npm",
          "version_constraint": "^5.0.9"
        },
        {
          "name": "github.com/WuErPing/solo/protocol",
          "manifest": "cli/go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.0.0-00010101000000-000000000000"
        },
        {
          "name": "github.com/fatih/color",
          "manifest": "cli/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.19.0"
        },
        {
          "name": "github.com/google/uuid",
          "manifest": "cli/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.6.0"
        },
        {
          "name": "github.com/gorilla/websocket",
          "manifest": "cli/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.5.3"
        },
        {
          "name": "github.com/skip2/go-qrcode",
          "manifest": "cli/go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.0.0-20200617195104-da1b6568686e"
        },
        {
          "name": "github.com/spf13/cobra",
          "manifest": "cli/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.10.2"
        },
        {
          "name": "golang.org/x/crypto",
          "manifest": "cli/go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.51.0"
        },
        {
          "name": "gopkg.in/yaml.v3",
          "manifest": "cli/go.mod",
          "ecosystem": "go",
          "version_constraint": "v3.0.1"
        },
        {
          "name": "github.com/BurntSushi/toml",
          "manifest": "daemon/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.6.0"
        },
        {
          "name": "github.com/WuErPing/solo/protocol",
          "manifest": "daemon/go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.0.0"
        },
        {
          "name": "github.com/creack/pty",
          "manifest": "daemon/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.1.21"
        },
        {
          "name": "github.com/google/uuid",
          "manifest": "daemon/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.6.0"
        },
        {
          "name": "github.com/gorilla/websocket",
          "manifest": "daemon/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.5.3"
        },
        {
          "name": "github.com/prometheus/client_golang",
          "manifest": "daemon/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.23.2"
        },
        {
          "name": "github.com/prometheus/client_model",
          "manifest": "daemon/go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.6.2"
        },
        {
          "name": "github.com/robfig/cron/v3",
          "manifest": "daemon/go.mod",
          "ecosystem": "go",
          "version_constraint": "v3.0.1"
        },
        {
          "name": "golang.org/x/crypto",
          "manifest": "daemon/go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.50.0"
        },
        {
          "name": "golang.org/x/sync",
          "manifest": "daemon/go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.21.0"
        },
        {
          "name": "gopkg.in/yaml.v3",
          "manifest": "daemon/go.mod",
          "ecosystem": "go",
          "version_constraint": "v3.0.1"
        },
        {
          "name": "github.com/WuErPing/solo/protocol",
          "manifest": "relay-go/go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.0.0"
        },
        {
          "name": "github.com/gorilla/websocket",
          "manifest": "relay-go/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.5.3"
        },
        {
          "name": "github.com/prometheus/client_golang",
          "manifest": "relay-go/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.23.2"
        },
        {
          "name": "golang.org/x/crypto",
          "manifest": "relay-go/go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.51.0"
        }
      ],
      "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": 1,
        "open_issues": 0,
        "closed_ratio": null,
        "closed_issues": 0,
        "closed_unmerged_prs": 0
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "WuErPing",
          "commits": 194,
          "avatar_url": "https://avatars.githubusercontent.com/u/2055091?v=4"
        }
      ],
      "contributors_sampled": 1,
      "top_contributor_share": 1
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "ci.yml",
        "e2e-nightly.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [
        ".golangci.yml",
        "eslint.config.js",
        "eslint.config.mjs"
      ],
      "has_editorconfig": false,
      "has_linter_config": true,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "go.sum",
        "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": null,
            "reason": "no pull request found",
            "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/30 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 0,
            "reason": "project has 0 contributing companies or organizations -- score normalized to 0",
            "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": null,
            "reason": "packaging workflow not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 3,
            "reason": "dependency not pinned by hash detected -- score normalized to 3",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "no SAST tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 0,
            "reason": "security policy file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": null,
            "reason": "no releases found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 10,
            "reason": "GitHub workflow tokens follow principle of least privilege",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 0,
            "reason": "21 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "5a37859ae7aaacded228bdb6281524ed939f3417",
        "ran_at": "2026-07-22T06:48:57Z",
        "aggregate_score": 3.2,
        "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-22T05:21:03Z",
      "oldest_open_prs": [],
      "last_merged_pr_at": "2026-06-07T12:57:25Z",
      "ci_last_conclusion": "FAILURE",
      "oldest_open_issues": []
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/WuErPing/solo",
    "host": "github.com",
    "name": "solo",
    "owner": "WuErPing"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 55,
      "inputs": {
        "security": 32,
        "vitality": 72,
        "community": 29,
        "governance": 54,
        "engineering": 78
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "good",
        "name": "Vitality",
        "value": 72,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "moderate",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 61,
            "inputs": {
              "commits_last_year": 194,
              "human_commit_share": 1,
              "days_since_last_push": 4,
              "active_weeks_last_year": 10
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 4 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 4
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "10/52 weeks with commits",
                "points": 6.9,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 10
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "194 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 194
                    }
                  }
                ],
                "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": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 88,
            "inputs": {
              "releases_count": 5,
              "latest_release_tag": "v0.11.0",
              "releases_from_tags": true,
              "days_since_latest_release": 5,
              "mean_days_between_releases": 9.2
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "5 version tags (no GitHub releases)",
                "points": 16.2,
                "status": "partial",
                "details": [
                  {
                    "code": "version_tags_no_releases",
                    "params": {
                      "count": 5
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 5 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 5
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~9.2 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 9.2
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "unverified",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": "repository_too_young",
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": null,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "maintenance record not established from the collected data",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_unverified",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "critical",
        "name": "Community & Adoption",
        "value": 29,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "critical",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 10,
            "inputs": {
              "forks": 1,
              "stars": 5,
              "watchers": 0,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "below_threshold"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "5 stars",
                "points": 9.8,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 5
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "1 forks",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "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
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "moderate",
        "name": "Sustainability & Governance",
        "value": 54,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 10,
            "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 0 contributing companies or organizations -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "good",
            "name": "Issue & PR responsiveness",
            "note": "Excluded from scoring (no data or not applicable): Issue resolution. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "issue_resolution"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 72,
            "inputs": {
              "merged_prs": 1,
              "open_issues": 0,
              "closed_issues": 0,
              "issue_closed_ratio": null,
              "closed_unmerged_prs": 0
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "no issues or no data",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_issues_or_data",
                    "params": {}
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "1/1 decided PRs merged",
                "points": 38.2,
                "status": "met",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 1,
                      "decided": 1
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/30 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": 54,
            "inputs": {
              "followers": 14,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "WuErPing",
              "public_repos": 85,
              "account_age_days": 5107
            },
            "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": "14 followers of WuErPing",
                "points": 8.5,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 14,
                      "login": "WuErPing"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "85 public repos, account ~13 yr old",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 85
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 13
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "github.com/WuErPing/solo"
              ],
              "ecosystems": "go",
              "any_deprecated": false,
              "min_days_since_publish": 5
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "1 package(s) on go",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 1,
                      "ecosystems": "go"
                    }
                  }
                ],
                "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": "5 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 5
                    }
                  }
                ],
                "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": 78,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "good",
            "name": "Engineering practices",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: CI-Tests. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_ci_tests"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 80,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": true,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "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": ".golangci.yml, eslint.config.js, eslint.config.mjs",
                "points": 16,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".golangci.yml, eslint.config.js, eslint.config.mjs"
                    }
                  }
                ],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "no pull request found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "good",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 75,
            "inputs": {
              "topics": [],
              "has_wiki": true,
              "homepage": null,
              "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": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "at_risk",
        "name": "Security",
        "value": 32,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): CI-Tests, Packaging, Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "ci_tests",
                    "packaging",
                    "signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 32,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 15,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 3,
              "scorecard_aggregate": 3.2
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "branch protection not enabled on development/release branches",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "no pull request found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "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/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 0 contributing companies or organizations -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "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 not detected",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 3",
                "points": 1.5,
                "status": "partial",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "no SAST tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "GitHub workflow tokens follow principle of least privilege",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "21 existing vulnerabilities detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "excellent",
        "name": "AI Readiness",
        "value": 88,
        "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.96,
              "agent_instruction_files": [
                "AGENTS.md",
                "CLAUDE.md"
              ],
              "agent_instruction_max_bytes": 4724
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "AGENTS.md, CLAUDE.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "AGENTS.md, CLAUDE.md"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "96 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 96,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "excellent",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 85,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "go.sum",
                "package-lock.json"
              ],
              "has_dockerfile": false,
              "typed_language": true,
              "bootstrap_files": [
                "Makefile"
              ],
              "has_devcontainer": false,
              "has_linter_config": true,
              "typecheck_configs": [
                "app-bridge/tsconfig.json",
                "app/tsconfig.json",
                "packages/highlight/tsconfig.json",
                "tsconfig.json"
              ],
              "agent_commit_share": 0.26,
              "toolchain_manifests": [
                "cli/go.mod",
                "daemon/go.mod",
                "docs/analysis/demo/iterm2-agent-detection/go.mod",
                "protocol/go.mod",
                "relay-go/go.mod"
              ],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "Makefile",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Makefile"
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": ".golangci.yml, eslint.config.js, eslint.config.mjs",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".golangci.yml, eslint.config.js, eslint.config.mjs"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "app-bridge/tsconfig.json, app/tsconfig.json, packages/highlight/tsconfig.json, tsconfig.json",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "app-bridge/tsconfig.json, app/tsconfig.json, packages/highlight/tsconfig.json, tsconfig.json"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "26 of the last 100 commits agent-authored or agent-credited",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 26,
                      "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 3",
                "points": 3,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "primary_language": "TypeScript",
              "largest_source_bytes": 127261,
              "source_files_sampled": 1313,
              "oversized_source_files": 10
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "TypeScript (statically typed)",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "TypeScript"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "10/1313 source files over 60KB",
                "points": 54.6,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 1313,
                      "oversized": 10
                    }
                  }
                ],
                "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": [
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-22T06:49:03.047794Z",
  "schema_version": "0.26.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/w/WuErPing/solo.svg",
  "full_name": "WuErPing/solo",
  "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.26.0 — vollständige Methodik · Metriken-Wiki.

Wie ein einzelnes Ergebnis im Gesamtregister steht: aggregierte StatistikenGo.