Öffentliches Register
Software-GesundheitsberichtSchema 0.27.0 · Metriken 1.13.0 · 2026-07-27 03:59 UTC

nextsko / mocode-agent

Terminal AI coding assistant — mocode-agent

GoKeine Lizenz erkannt★ 0 Sterne⑂ 0 Forksseit Juli 2026Auf GitHub ansehen ↗

nextsko/mocode-agent erreicht einen Gesundheitsindex von 46 von 100 und liegt damit im Bereich Gefährdet. Am stärksten schneidet es bei AI Readiness (79/100) ab, am schwächsten bei Community & Adoption (12/100). Zuletzt vor 6 Tagen aktualisiert. Ein einzelner Mitwirkender trägt den Großteil der jüngsten Arbeit.

46
gesamt / 100
Gefährdet

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.

46
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

nextskoPersönliches Konto
1 Follower8 öffentliche Reposseit Sept. 2025

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/nextsko/mocode-agentv0.7.8-13vor 6 Tagen

Metriken nach Kategorie

Vitalität

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

71Gut · 22 % des Gesamtindex
Wie die Bewertung erfolgt
36/36Push-Aktualität — letzter Push vor 6 Tagen
4.8/36Commit-Rhythmus — 7/52 Wochen mit Commits
18/18Commit-Volumen — 187 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_year187
human_commit_share0,99
days_since_last_push6
active_weeks_last_year7
Wie die Bewertung erfolgt
27/27Liefert Releases aus — 7 Releases veröffentlicht
36/36Release-Aktualität — letztes Release vor 6 Tagen
27/27Release-Rhythmus — ein Release etwa alle 0,2 Tage
0/10OpenSSF Scorecard: Signed-Releases — Project has not signed or included provenance with any releases.
Verwendete Eingangsdaten
releases_count7
latest_release_tagv0.7.8
releases_from_tagsnein
days_since_latest_release6
mean_days_between_releases0,2

Community & Verbreitung

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

12Kritisch · 18 % des Gesamtindex
Wie die Bewertung erfolgt
0/60Stars — 0 Stars
0/25Forks — 0 Forks
0/15Watcher — 0 Watcher
Verwendete Eingangsdaten
forks0
stars0
watchers0
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Wie die Bewertung erfolgt
22.5/22.5README
0/22.5Lizenz — keine Lizenzdatei erkannt
0/18CONTRIBUTING-Leitfaden
0/13.5Verhaltenskodex
0/7.2Issue-Vorlage
0/6.3PR-Vorlage
Verwendete Eingangsdaten
has_readmeja
has_licensenein
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?

40Gefährdet · 24 % des Gesamtindex
Wie die Bewertung erfolgt
9/54Bus-Faktor — 1 Beitragende decken die Hälfte aller Commits ab
2.5/22.5Commit-Verteilung — wichtigste beitragende Person verfasste 89 % der Commits
2.7/13.5Breite der Beitragenden — 2 Beitragende
0/10OpenSSF Scorecard: Contributors — project has 0 contributing companies or organizations -- score normalized to 0
Verwendete Eingangsdaten
bus_factor1
contributors_sampled2
top_contributor_share0,891
Wie die Bewertung erfolgt
0/46.8Issue-Lösungsquote — keine Issues oder keine Daten
19.1/38.3PR-Annahme — 1/2 entschiedene PRs gemergt
0/15OpenSSF Scorecard: Code-Review — Found 0/29 approved changesets -- score normalized to 0
Verwendete Eingangsdaten
merged_prs1
open_issues0
closed_issues0
issue_closed_ratio
closed_unmerged_prs1
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
2.2/25Reichweite des Inhabers — 1 Follower von nextsko
8.7/25Kontohistorie — 8 öffentliche Repos, Kontoalter ca. 0 Jahre
Verwendete Eingangsdaten
followers1
owner_typeUser
is_verified
owner_loginnextsko
public_repos8
account_age_days320
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 6 Tagen
20/20Versionshistorie — 13 veröffentlichte Versionen
20/20Nicht veraltet — aktiv, nicht veraltet oder zurückgezogen
Verwendete Eingangsdaten
packagesgithub.com/nextsko/mocode-agent
ecosystemsgo
any_deprecatednein
min_days_since_publish6

Engineering-Qualität

Sind grundlegende Engineering- und Dokumentationspraktiken vorhanden?

68Mittel · 20 % des Gesamtindex
Wie die Bewertung erfolgt
24/24CI-Workflows — 2 Workflow(s)
24/24Tests vorhanden
16/16Linter-Konfiguration — .golangci.yml
0/9.6Pre-Commit-Hooks
0/6.4.editorconfig
0/20OpenSSF Scorecard: CI-Tests — 0 out of 1 merged PRs checked by a CI test -- score normalized to 0
Verwendete Eingangsdaten
has_cija
has_testsja
has_editorconfignein
has_linter_configja
has_precommit_confignein
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?

33Gefährdet · 16 % des Gesamtindex

Sicherheitslage

33Gefä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 — 0 out of 1 merged PRs checked by a CI test -- score normalized to 0
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 0/29 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
7.5/7.5Dependency-Update-Tool — update tool detected
0/5Fuzzing — project is not fuzzed
0/2.5Lizenz — license file not detected
0/7.5Maintained — project was created within the last 90 days. Please review its contents carefully
5/5Packaging — packaging workflow detected
0/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
0/5SAST — SAST tool is not run on all commits -- score normalized to 0
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — Project has not signed or included provenance with any releases.
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
4.5/7.5Vulnerabilities — 4 existing vulnerabilities detected
Verwendete Eingangsdaten
sourceopenssf_scorecard
checks_evaluated18
scorecard_versionv5.5.0
checks_inconclusive0
scorecard_aggregate3,3

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.

79Gut · 0 % des Gesamtindex
Wie die Bewertung erfolgt
45/45Agentenanweisungen — AGENTS.md, internal/transport/cmd/stats/AGENTS.md, internal/ui/AGENTS.md
0/15Maschinenlesbare Doku (llms.txt)
40/40Lesbare Commit-Historie — 89 von 99 menschlichen Commits benennen ihre Absicht (strukturierter Betreff oder erläuternder Text)
Verwendete Eingangsdaten
has_llms_txtnein
legible_history_share0,899
agent_instruction_filesAGENTS.md, internal/transport/cmd/stats/AGENTS.md, internal/ui/AGENTS.md
agent_instruction_max_bytes20.197
Wie die Bewertung erfolgt
18/18Bootstrap mit einem Befehl — Taskfile.yaml, internal/ui/diffview/Taskfile.yaml
22/22Automatisierte Tests
11/11Lint-/Format-Konfiguration — .golangci.yml
11/11Statische Typprüfung — Go (statisch typisiert)
10/10Reproduzierbare Umgebung — lockfile
8/10Belegte Agentenpraxis — 4 der letzten 100 Commits von Agenten verfasst oder ihnen zugeschrieben
8/8Automatisierte Wartung — 1 der letzten 100 Commits sind automatisierte Abhängigkeits-Updates
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Verwendete Eingangsdaten
has_nixnein
has_testsja
lockfilesgo.sum
has_dockerfilenein
typed_languageja
bootstrap_filesTaskfile.yaml, internal/ui/diffview/Taskfile.yaml
has_devcontainernein
has_linter_configja
typecheck_configs
agent_commit_share0,04
toolchain_manifestsgo.mod
dependency_bot_commit_share0,01
Wie die Bewertung erfolgt
45/45Typprüfbarer Code — Go (statisch typisiert)
54.9/55Handhabbare Dateigrößen — 1/549 Quelldateien über 60 KB
Verwendete Eingangsdaten
primary_languageGo
largest_source_bytes271.698
source_files_sampled549
oversized_source_files1
Wie die Bewertung erfolgt
0/40API-Schema (OpenAPI/GraphQL/proto)
20/20MCP-Server
0/40Lauffähige Beispiele
Verwendete Eingangsdaten
example_dirs
has_mcp_signalja
api_schema_files

Eckdaten

0GitHub-Sterne
2Mitwirkende
187Commits, letzte 12 Monate
6Tage seit letztem Push
7Releases
1Bus-Faktor
0offene Issues
GoPaket-Ökosysteme

Warnungen zur Datenerhebung

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

Weitere Details

OpenSSF Scorecard 3.3 / 10
3.3Gesamtwert

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-27 03:59 UTC

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
0CI-Tests0 out of 1 merged PRs checked by a CI test -- score normalized to 0
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/29 approved changesets -- score normalized to 0
0Contributorsproject has 0 contributing companies or organizations -- score normalized to 0
10Dangerous-Workflowno dangerous workflow patterns detected
10Dependency-Update-Toolupdate tool detected
0Fuzzingproject is not fuzzed
0Licenselicense file not detected
0Maintainedproject was created within the last 90 days. Please review its contents carefully
10Packagingpackaging workflow detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
0SASTSAST tool is not run on all commits -- score normalized to 0
0Security-Policysecurity policy file not detected
0Signed-ReleasesProject has not signed or included provenance with any releases.
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
6Vulnerabilities4 existing vulnerabilities detected
Direkte Abhängigkeiten 69
RegistryPaketVersionsvorgabeManifest
Gocharm.land/bubbles/v2v2.1.1go.mod
Gocharm.land/bubbletea/v2v2.0.8go.mod
Gocharm.land/catwalkv0.49.28go.mod
Gocharm.land/fang/v2v2.0.1go.mod
Gocharm.land/fantasyv0.38.1go.mod
Gocharm.land/glamour/v2v2.0.1go.mod
Gocharm.land/lipgloss/v2v2.0.4go.mod
Gocharm.land/log/v2v2.0.0go.mod
Gogithub.com/BurntSushi/tomlv1.6.0go.mod
Gogithub.com/JohannesKaufmann/html-to-markdownv1.6.0go.mod
Gogithub.com/PuerkitoBio/goqueryv1.12.0go.mod
Gogithub.com/alecthomas/chroma/v2v2.27.0go.mod
Gogithub.com/atotto/clipboardv0.1.4go.mod
Gogithub.com/aymanbagabas/go-nativeclipboardv0.1.3go.mod
Gogithub.com/aymanbagabas/go-udiffv0.4.1go.mod
Gogithub.com/bmatcuk/doublestar/v4v4.10.0go.mod
Gogithub.com/charlievieth/fastwalkv1.0.14go.mod
Gogithub.com/charmbracelet/colorprofilev0.4.3go.mod
Gogithub.com/charmbracelet/ultravioletv0.0.0-20260703014108-f5a850f9c2b7go.mod
Gogithub.com/charmbracelet/x/ansiv0.11.7go.mod
Gogithub.com/charmbracelet/x/editorv0.2.0go.mod
Gogithub.com/charmbracelet/x/etagv0.2.0go.mod
Gogithub.com/charmbracelet/x/exp/charmtonev0.0.0-20260109001716-2fbdffcb221fgo.mod
Gogithub.com/charmbracelet/x/exp/goldenv0.0.0-20250806222409-83e3a29d542fgo.mod
Gogithub.com/charmbracelet/x/exp/orderedv0.1.0go.mod
Gogithub.com/charmbracelet/x/exp/slicev0.0.0-20260422141420-a6cbdff8a7e2go.mod
Gogithub.com/charmbracelet/x/exp/stringsv0.1.0go.mod
Gogithub.com/charmbracelet/x/powernapv0.1.6go.mod
Gogithub.com/charmbracelet/x/termv0.2.2go.mod
Gogithub.com/clipperhouse/displaywidthv0.11.0go.mod
Gogithub.com/clipperhouse/uax29/v2v2.7.0go.mod
Gogithub.com/disintegration/imagingv1.6.2go.mod
Gogithub.com/dustin/go-humanizev1.0.1go.mod
Gogithub.com/gen2brain/beeepv0.11.2go.mod
Gogithub.com/go-git/go-git/v5v5.19.1go.mod
Gogithub.com/google/uuidv1.6.0go.mod
Gogithub.com/invopop/jsonschemav0.14.0go.mod
Gogithub.com/itchyny/gojqv0.12.19go.mod
Gogithub.com/joho/godotenvv1.5.1go.mod
Gogithub.com/jordanella/go-ansi-paintbrushv0.0.0-20240728195301-b7ad996ecf3dgo.mod
Gogithub.com/kbinani/screenshotv0.0.0-20250624051815-089614a94018go.mod
Gogithub.com/kevinburke/ssh_configv1.6.0go.mod
Gogithub.com/lucasb-eyer/go-colorfulv1.4.0go.mod
Gogithub.com/mattn/go-isattyv0.0.23go.mod
Gogithub.com/modelcontextprotocol/go-sdkv1.6.1go.mod
Gogithub.com/nxadm/tailv1.4.11go.mod
Gogithub.com/openai/openai-go/v3v3.43.0go.mod
Gogithub.com/pkg/browserv0.0.0-20240102092130-5ac0b6a4141cgo.mod
Gogithub.com/qjebbs/go-jsonsv1.0.0-alpha.6go.mod
Gogithub.com/rivo/unisegv0.4.7go.mod
Gogithub.com/sahilm/fuzzyv0.1.3go.mod
Gogithub.com/sourcegraph/jsonrpc2v0.2.1go.mod
Gogithub.com/spf13/cobrav1.10.2go.mod
Gogithub.com/stretchr/testifyv1.11.1go.mod
Gogithub.com/tidwall/gjsonv1.19.0go.mod
Gogithub.com/tidwall/sjsonv1.2.5go.mod
Gogithub.com/yeqown/go-qrcodev1.5.10go.mod
Gogithub.com/zeebo/xxh3v1.1.0go.mod
Gogo.uber.org/goleakv1.3.0go.mod
Gogolang.org/x/cryptov0.54.0go.mod
Gogolang.org/x/netv0.57.0go.mod
Gogolang.org/x/syncv0.22.0go.mod
Gogolang.org/x/sysv0.47.0go.mod
Gogolang.org/x/textv0.40.0go.mod
Gogopkg.in/natefinch/lumberjack.v2v2.2.1go.mod
Gogopkg.in/yaml.v3v3.0.1go.mod
Gomodernc.org/sqlitev1.54.0go.mod
Gomvdan.cc/sh/moreinterpv0.0.0-20250902163504-3cf4fd5717a5go.mod
Gomvdan.cc/sh/v3v3.13.1go.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": 8716,
      "has_wiki": true,
      "homepage": null,
      "languages": {
        "Go": 2917618,
        "CSS": 4257,
        "HTML": 54913,
        "Shell": 13554,
        "Python": 291047,
        "JavaScript": 25900,
        "TypeScript": 5054,
        "Go Template": 23413
      },
      "pushed_at": "2026-07-20T16:40:34Z",
      "created_at": "2026-07-19T14:57:55Z",
      "owner_type": "User",
      "updated_at": "2026-07-20T16:41:21Z",
      "description": "Terminal AI coding assistant — mocode-agent",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": null,
      "default_branch": "main",
      "license_spdx_raw": null,
      "primary_language": "Go",
      "significant_languages": [
        "Go"
      ]
    },
    "owner": {
      "blog": null,
      "name": "nextsko",
      "type": "User",
      "login": "nextsko",
      "company": null,
      "location": null,
      "followers": 1,
      "avatar_url": "https://avatars.githubusercontent.com/u/231282484?v=4",
      "created_at": "2025-09-09T15:52:40Z",
      "is_verified": null,
      "public_repos": 8,
      "account_age_days": 320
    },
    "license": {
      "state": "absent",
      "spdx_id": null,
      "raw_spdx": null,
      "file_present": false,
      "scorecard_found": false,
      "profile_has_license": false
    },
    "activity": {
      "releases": [
        {
          "tag": "v0.7.8",
          "kind": "patch",
          "published_at": "2026-07-20T13:47:07Z"
        },
        {
          "tag": "v0.7.7",
          "kind": "patch",
          "published_at": "2026-07-19T16:56:38Z"
        },
        {
          "tag": "v0.7.6",
          "kind": "patch",
          "published_at": "2026-07-19T16:37:20Z"
        },
        {
          "tag": "v0.7.5",
          "kind": "patch",
          "published_at": "2026-07-19T16:25:50Z"
        },
        {
          "tag": "v0.7.4",
          "kind": "patch",
          "published_at": "2026-07-19T16:14:00Z"
        },
        {
          "tag": "v0.7.3",
          "kind": "patch",
          "published_at": "2026-07-19T15:58:26Z"
        },
        {
          "tag": "v0.7.2",
          "kind": "patch",
          "published_at": "2026-07-19T15:57:13Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "0e0b447f601354569fc65ce007d01ca740e486bf",
          "body": "详细描述:\n- 删除 kngs 知识管理系统(store/watcher/init)\n- 删除 memory 记忆系统(service/tools/search)\n- 清理 agent、app、tools 层相关依赖\n- 新增 docs/architecture/templates 目录",
          "is_bot": false,
          "headline": "♻️ refactor(core): 移除 knowledge 知识库模块",
          "author_name": "nextsko",
          "author_login": "nextsko",
          "committed_at": "2026-07-20T16:39:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e32b171a944afdd3a27498a2e9774a61472652fe",
          "body": "详细描述:\n- 删除 evaluation 评估模块(criterion/evalset/llmjudge)\n- 删除 hooks 钩子运行机制模块\n- 清理 coordinator、UI 层相关依赖",
          "is_bot": false,
          "headline": "♻️ refactor(core): 移除 hooks/evaluation 死代码",
          "author_name": "nextsko",
          "author_login": "nextsko",
          "committed_at": "2026-07-20T16:09:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c6bd0513cd9f478e115820b5fb697b474c71977a",
          "body": "详细描述:\n- 删除 candidate 候选选择器模块(llmselector、evalselector)\n- 删除 extension 生命周期钩子管理模块\n- 删除 roundtable 圆桌多 Agent 协作模块\n- 清理 coordinator、config、workspace 相关依赖",
          "is_bot": false,
          "headline": "♻️ refactor(agent): 移除 roundtable 圆桌机制及相关代码",
          "author_name": "nextsko",
          "author_login": "nextsko",
          "committed_at": "2026-07-20T15:19:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5f490d63d74f0654bf5563e77c5a857a0cd9448f",
          "body": "- docs/plans/dead-chain-removal.md: 完整 active link 边界分析\n  + 9 类子系统 dead/active 状态表 + Phase A/B/C 执行清单\n- docs/plans/self-evolution/03-current-status-and-integration-plan.md:\n  evolution 子系统当前 wiring 状态 + 5 阶段集成计划",
          "is_bot": false,
          "headline": "📝 docs(plans): 归档 dead-chain 决策 + self-evolution 集成计划",
          "author_name": "nextsko",
          "author_login": "nextsko",
          "committed_at": "2026-07-20T14:26:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c13f38773b1fe73066dd599a7fbcd4a72bcc6924",
          "body": "删除两个 0 引用的 dead chain (-2738 行):\n- internal/core/evolution/ (14 文件): reviewer/dreamer/cron/distillation\n  子系统代码完整但 coordinator 未接线, 永不执行\n- internal/domain/types/ (3 文件): 空 types 包, 无任何导入\n\n配套修复 7 个 test/源文件跟随调整:\n- sessionlog_test.go, tools/registry_*_test.go,\n  tools/{result,runtime,transfer}.go + _test.go\n\n验证:\n- go build -buildvcs=false ./...  -> PASS\n- 详见 docs/plans/dead-chain-removal.md 风险矩阵",
          "is_bot": false,
          "headline": "🧹 refactor(deps): 移除 dead chain — evolution + domain/types",
          "author_name": "nextsko",
          "author_login": "nextsko",
          "committed_at": "2026-07-20T14:26:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c05d94a9da091f9be5b9916d633a48deb66ec21e",
          "body": "- 触发原因: /summary slash 命令异步化 (M0-M5 全部合并)\n- 主变更: 避免 TUI 同步阻塞; pubsub 链路完成\n- 改动统计: 8 文件 +185/-23 (按 3 commit 切分)",
          "is_bot": false,
          "headline": "🔧 chore: 升级版本到 0.7.8-fromsko",
          "author_name": "nextsko",
          "author_login": "nextsko",
          "committed_at": "2026-07-20T13:36:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3d4f5d53326ac2bc77aae7a3c1eb418ac93a3d76",
          "body": "- 状态表 M0-M5 全部改为 ✅ 已合并\n- 追加变更日志: 文件级 diff 统计 + 决策偏差 + 验证结果 + 端到端步骤 + 未覆盖项\n- 记录 B1 busy 守卫保留 / SummarizeWithPath 命名 / 单测补全留给后续 PR",
          "is_bot": false,
          "headline": "📝 docs(plans): 标记 /summary 异步化方案为已落地",
          "author_name": "nextsko",
          "author_login": "nextsko",
          "committed_at": "2026-07-20T13:28:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a6c81e9ce81bcfc4731b73e0e1b30195ab92bb7b",
          "body": "- ui_dialogs.ActionSummarize: 调用 AgentEnqueueSummary 而非 AgentSummarize,\n  立即返回 \"Summarizing session…\" InfoMsg\n- 移除 filepath.Glob 写盘后扫描 (改由 SummaryCompletedMsg.Path 直接带路径)\n- ui.Update 加 agent.SummaryCompletedMsg case:\n  - 成功 -> InfoMsg \"Session summary saved: <path>\"\n  - 失败 -> ReportError \"Failed to summarize: …\"\n  - 空路径 -> InfoMsg \"Session summarized\"\n- 保留 isAgentBusy() 守卫 (B1 选项: 防 UI spam)",
          "is_bot": false,
          "headline": "🎨 refactor(ui): 切换 /summary slash 走异步 + UI 接收 SummaryCompletedMsg",
          "author_name": "nextsko",
          "author_login": "nextsko",
          "committed_at": "2026-07-20T13:27:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0e9e0d2850a5b7dcc7c4521210e932714fcab731",
          "body": "- 加 SummaryCompletedMsg 类型 + summaryDone broker (coordinator)\n- 加 SummarizeWithPath 返回导出路径, 作为 M2 出参基础\n- 加 EnqueueSummaryAndDrain: 入队后立即 drain (不等 Run defer)\n- 加 SummarySubscribe 暴露给 app.events 转发\n- session_summary_queue: drain 时 publish SummaryCompletedMsg\n- workspace 接口 + app_workspace: 实现 AgentEnqueueSummary\n- app.InitCoderAgent 末尾挂 summary 订阅到 app.events",
          "is_bot": false,
          "headline": "♻️ refactor: 暴露 /summary 异步化底层链路",
          "author_name": "nextsko",
          "author_login": "nextsko",
          "committed_at": "2026-07-20T13:27:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "aff5b359944a652a2086c53869126813608fd1af",
          "body": "…entation notes\n\nThree documents covering the design journey of mocode's self-evolution\nsubsystem:\n\n- 00-upstream-survey.md — Deep code-level analysis of four upstream agent\n  projects' self-evolution mechanisms:\n  * MiMo-Code (TypeScript, OpenCode fork): /dream + /distill + Checkpoint\n    writer + \n[…]\nthout embedder, fail-open semantics, snapshot metrics placeholder),\n  9 known limitations (L1-L9) with v2 fix directions, delta vs upstream\n  systems, v2/v3 roadmap, and the Evaluator prune rationale.",
          "is_bot": false,
          "headline": "📝 docs(plans/self-evolution): upstream survey + architecture + implem…",
          "author_name": "nextsko",
          "author_login": "nextsko",
          "committed_at": "2026-07-19T22:58:55Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "0977acf960424881e4977407b01358df7d2674db",
          "body": "… framework\n\nIntroduce the self-evolution subsystem so the agent becomes more useful over time:\n\n- Reviewer: every N turns, a detached background agent extracts durable user\n  preferences / project rules / verified facts into memory (hermes-agent\n  background_review pattern).\n- Dreamer: when the ses\n[…]\n  Background review agent\n  dreamer/     Idle consolidation agent\n  evolutioncron/ SuggestionEngine + guardrails + cron runner\n  system.go    Top-level System handle (AfterTurn / TickIdle / StartCron)",
          "is_bot": false,
          "headline": "✨ feat(evolution): self-evolution system v1 + prune Evaluator offline…",
          "author_name": "nextsko",
          "author_login": "nextsko",
          "committed_at": "2026-07-19T22:58:17Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "125319f82b963649a5ac841fa7f0e9a3e05848bf",
          "body": "详细描述:\n- docs/plans/summary-async/01-sync-blocking-root-cause.md(183 行):\n  /summary slash 同步阻塞 TUI 的根因分析:tea.Cmd 直包 RPC 调用 Update 循环冻结,\n  澄清 drainQueuedSummaries 触发时机。\n- docs/plans/summary-async/02-async-fix-options.md(228 行):\n  三方案对比:就地异步 / 复用 summaryQueue(选定)+ 主动 drain / 假进度;含\n  busy 守卫语义差异(B1/B2/B\n[…]\n手动测试矩阵;含 V1–V4 端到端验证步骤。\n- docs/README.md:新增「参考研究(外部项目深度分析)」分类索引表,覆盖\n  search-tools × 5、agentic-fetch × 3、summary-async × 5 共 13 个新文档。\n- 5 篇 summary-async 合计 1038 行 + README 索引 18 行新增。\n- 仅新增文档,未触及任何源码。",
          "is_bot": false,
          "headline": "📝 docs(plans): 增加 summary-async 异步化方案 5 篇 + docs/README 索引",
          "author_name": "nextsko",
          "author_login": "nextsko",
          "committed_at": "2026-07-19T22:06:48Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b0a13df3fc66f60055c557b427b8213e8f63c7fd",
          "body": "详细描述:\n- docs/plans/agentic-fetch/01-context-canceled-failure.md(149 行):\n  agentic_fetch 端点不可用时反复报「context canceled」的失败链路追踪:从子 Agent\n  继承父 context → SDK RequestTimeout → 硬失败路径全貌。\n- docs/plans/agentic-fetch/02-fallback-strategy.md(144 行):\n  四层降级策略设计:L1 缓存 → L2 主链 Provider → L3 静态快照 / DuckDuckGo 直退\n  路\n[…]\n策)。\n- docs/plans/agentic-fetch/03-context-isolation-plan.md(172 行):\n  子 Agent context 隔离改造方案:独立 deadline、软取消 vs 硬取消分类、SDK 切换、\n  接口兼容性矩阵。\n- 3 篇合计 465 行,作为 agentic_fetch 工具的根因分析 + 修复蓝图。\n- 仅新增文档,未触及任何源码。",
          "is_bot": false,
          "headline": "📝 docs(plans): 增加 agentic_fetch 失败链路与降级方案 3 篇",
          "author_name": "nextsko",
          "author_login": "nextsko",
          "committed_at": "2026-07-19T22:06:39Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c5fb203017eb9a46860b8e433f48bac3ee645d30",
          "body": "详细描述:\n- docs/plans/search-tools/01-grep-tool-architecture.md(705 行):\n  oh-my-pi grep 工具 TS 层完整架构,含输入处理管道、路径解析、输出格式化。\n- docs/plans/search-tools/02-web-search-provider-chain.md(512 行):\n  Web Search 22 Provider 懒加载 Registry + Fallback 链 + Credential 解析。\n- docs/plans/search-tools/03-ast-grep-design.md(4\n[…]\n现要点。\n- docs/plans/search-tools/05-search-testing-observability.md(271 行):\n  搜索工具测试金字塔 + 可观测性指标 + 会话级行为测试策略。\n- 5 篇文档合计 2738 行,记录 oh-my-pi 项目的搜索工具体系作为 mocode 工具系统\n  改进的参考设计,每篇都标注来源文件路径。\n- 仅新增文档,未触及任何源码。",
          "is_bot": false,
          "headline": "📝 docs(plans): 增加 search-tools 深度研究 5 篇",
          "author_name": "nextsko",
          "author_login": "nextsko",
          "committed_at": "2026-07-19T22:06:33Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "063a8d3b87a123e09e54eb3a459e5fb360a80421",
          "body": "详细描述:\n- 新增 docs/plans/README.md,作为 plans/ 子目录的组织规范与索引:\n  * 按主题分子目录,编号前缀保持顺序\n  * 父级 docs/README.md 同步索引\n  * 修正 ASCII 目录树前缀(tool-call-arguments/ 改为 ├──,summary-async/ 保留 └──)\n- 新增 docs/plans/tool-call-arguments/01-empty-arguments-bad-request.md,记录\n  Step 3.7 Flash 等 provider 在 Yolo 模式多轮工具调用下报\n  「400 B\n[…]\nte vs Stream 路径不对称\n  * 4 套修复方案对比:归一化 / 拦截重试 / 上游 PR / 历史 JSONL 迁移\n  * 测试矩阵 + 上游 PR diff 草稿 + 验证 checklist + 跟踪元数据\n- 仅新增 2 个文件,并修正 plans/README.md 中一处 ASCII 树前后缀不一致的小问题。\n- 状态标记为「🟡 开放中」,等待后续开发实施修复 A 方案。",
          "is_bot": false,
          "headline": "📝 docs(plans): 建立 plans/ 子目录索引 + tool-call-arguments 跟踪笔记",
          "author_name": "nextsko",
          "author_login": "nextsko",
          "committed_at": "2026-07-19T22:06:27Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7ce9dd7ace0fbb5bdee8e0c4bbc2db2411bc39ee",
          "body": "详细描述:\n- docs/guides/04-gfw-workarounds.md 末尾新增「Windows 下批量 Git Clone 踩坑记录」一节,\n  覆盖:\n  1) .git/objects/pack/*.lock 残留目录的清理(含 powershell 强杀进程)\n  2) Git for Windows 不读取 HTTP_PROXY/HTTPS_PROXY,需 git config --global 显式配置\n  3) 目录已存在会阻断后续 clone 的现象与应对\n  4) 实测结论:能直连时优先直连\n  5) 小建议表:批量 / 目录冲突 / 卡死误判 / 清理失败\n- 文中部分示例保留 C:\\Users\\16143 本机路径作为上下文说明,不含任何凭证。\n- 仅修改 docs/guides/04-gfw-workarounds.md,未触及任何源码。",
          "is_bot": false,
          "headline": "📝 docs(guides): 补充 Windows 下批量 Git Clone 踩坑记录",
          "author_name": "nextsko",
          "author_login": "nextsko",
          "committed_at": "2026-07-19T22:06:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "974e5e5ee55620e79c39f8dc3e274a16775cabdb",
          "body": "详细描述:\n- 新增 docs/architecture/06-playwright-cli-design.md,记录 Playwright CLI 适配层\n  的设计:薄分发层 + Skill 包装器,所有命令委派给 playwright-core 的 CLI client。\n- 主要覆盖 program()、skillCheck.js、bundled SKILL.md 三块关系,以及视频\n  录制、网络拦截、会话管理等核心能力。\n- 仅新增文档,未触及任何源码。",
          "is_bot": false,
          "headline": "📝 docs(architecture): 增加 Playwright CLI 设计说明",
          "author_name": "nextsko",
          "author_login": "nextsko",
          "committed_at": "2026-07-19T22:06:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e3ecad992a89a337670fd95e20c3095abfd04685",
          "body": "详细描述:\n- 新增 docs/architecture/05-wechat-butler-arch.md,记录 WeChat iLink Bot 平台\n  的完整实现链路(Gateway Runtime → Transport → 协议层 → Agent 执行层)。\n- 文档面向后续接手 WeChat 集成的开发者,包含入口层、传输层、解码/编码层、\n  会话管理、Agent 调用等关键模块与责任划分。\n- 仅新增文件,未触及任何源码。",
          "is_bot": false,
          "headline": "📝 docs(architecture): 增加 WeChat Butler 架构文档",
          "author_name": "nextsko",
          "author_login": "nextsko",
          "committed_at": "2026-07-19T22:06:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "09134c7f437b7ef9789231a4a4d0edb9a816f176",
          "body": "详细描述:\n- 将 docs/guides/10-mcp-configuration.md 的示例中硬编码的真实 BigModel\n  API token 替换为占位符 <YOUR_BIGMODEL_API_TOKEN>;原 token 形如\n  {user_id}.{secret},暴露在 audit 中属于高风险事故。\n- 在字段说明中追加安全提示:推荐用 env / 系统环境变量承载 token,\n  提示读者立即到 Z.ai 控制台 rotate 任何曾经在文档中以明文贴出的 key。\n- 仅修改 docs/guides/10-mcp-configuration.md,避免与其它 untracked 文件\n  混提,确保后续可单独 revert。",
          "is_bot": false,
          "headline": "🐛 fix(docs): redact leaked Z.ai BigModel API key in MCP guide",
          "author_name": "nextsko",
          "author_login": "nextsko",
          "committed_at": "2026-07-19T22:04:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4774518e0b6472d7c249ad27a1a7c27a3f8fea6a",
          "body": null,
          "is_bot": false,
          "headline": "fix(npm): 恢复 platform 包发布 + 保留 NPM_CONFIG_USERCONFIG 修复",
          "author_name": "fromsko",
          "author_login": "Fromsko",
          "committed_at": "2026-07-19T16:49:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "667d668020b5afdb52669be46459fee5a8d2a048",
          "body": null,
          "is_bot": false,
          "headline": "fix(npm): unset NPM_CONFIG_USERCONFIG 让 .npmrc 写入生效",
          "author_name": "fromsko",
          "author_login": "Fromsko",
          "committed_at": "2026-07-19T16:30:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6a9b76c9677247b481c51576077d1e99094516ef",
          "body": null,
          "is_bot": false,
          "headline": "fix(npm): 只发布 @fromsko/mocode-cli 主包,不推送 platform 分包",
          "author_name": "fromsko",
          "author_login": "Fromsko",
          "committed_at": "2026-07-19T16:17:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7cbacd8b190bf874322da295f72333965a887c9e",
          "body": null,
          "is_bot": false,
          "headline": "fix(npm): 完善 publish.sh 中 .npmrc 配置修复 npm publish 404",
          "author_name": "fromsko",
          "author_login": "Fromsko",
          "committed_at": "2026-07-19T16:06:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d3d30d9aef347eb24b2f0075b6c4445d50374be2",
          "body": null,
          "is_bot": false,
          "headline": "chore(release): bump version to v0.7.3",
          "author_name": "fromsko",
          "author_login": "Fromsko",
          "committed_at": "2026-07-19T15:50:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f298c77def962ca23a10ab23bb2337e75270a6e6",
          "body": null,
          "is_bot": false,
          "headline": "fix(.goreleaser.yml): 移除 stray </input> 标签修复 YAML 解析",
          "author_name": "fromsko",
          "author_login": "Fromsko",
          "committed_at": "2026-07-19T15:48:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ba224978ea7060cc520e319a8ec6422df41966ff",
          "body": null,
          "is_bot": false,
          "headline": "fix(cmd): 移除损坏的 heartbit 乱码,使 --version 终端全平台兼容",
          "author_name": "fromsko",
          "author_login": "Fromsko",
          "committed_at": "2026-07-19T15:35:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0e9267e373571c54b5bd94019b75656b1f143b97",
          "body": null,
          "is_bot": false,
          "headline": "fix(release): 修正 .goreleaser.yml 中旧仓库名 mocode-build 引用",
          "author_name": "fromsko",
          "author_login": "Fromsko",
          "committed_at": "2026-07-19T15:32:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b4c2b44d05ef3f17a16cb2731573da55d5b02250",
          "body": null,
          "is_bot": false,
          "headline": "fix(deps): 修复 openai-go v3 依赖升级后的 RequestOption 类型不匹配问题",
          "author_name": "fromsko",
          "author_login": "Fromsko",
          "committed_at": "2026-07-19T15:21:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d9d2908c2143ac3e63318e1482780148adecc38a",
          "body": "chore(deps): 合并 Go 依赖库升级",
          "is_bot": true,
          "headline": "chore(deps): bump the all group with 18 updates (#2)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-19T15:15:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "31d50b9fa04846641cc1c1e3b7f627ee33a72e04",
          "body": null,
          "is_bot": false,
          "headline": "chore(release): 升级版本到 v0.7.1,并修正 Taskfile 版本路径",
          "author_name": "fromsko",
          "author_login": "Fromsko",
          "committed_at": "2026-07-19T15:09:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bb78a3a2b604bd5900abbdf7c6e9616d2538b455",
          "body": null,
          "is_bot": false,
          "headline": "chore(ci): 更新 Taskfile 释放逻辑,支持推送至 agent 远端及 test.yml 校验",
          "author_name": "fromsko",
          "author_login": "Fromsko",
          "committed_at": "2026-07-19T15:04:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "69bcc54089eb61a8244e8d86cf4309c6a475ff20",
          "body": null,
          "is_bot": false,
          "headline": "chore(ci): 删除冗余的 build.yml 工作流",
          "author_name": "fromsko",
          "author_login": "Fromsko",
          "committed_at": "2026-07-19T14:59:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ba706cab4ab515f504f526b07fbcb8314e4a87e9",
          "body": null,
          "is_bot": false,
          "headline": "🔧 config: 修复 goreleaser 发布目标为 mocode-build",
          "author_name": "fromsko",
          "author_login": "Fromsko",
          "committed_at": "2026-07-19T14:37:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "36267fdb93c05b46ba7cc248e373a8bab4bbac5b",
          "body": null,
          "is_bot": false,
          "headline": "feat(npm): @fromsko/mocode-cli optional-deps 模式,biome/claude-code 同款结构",
          "author_name": "fromsko",
          "author_login": "Fromsko",
          "committed_at": "2026-07-19T14:36:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "42a480f649f47740791bfdc8de12524f7945a406",
          "body": null,
          "is_bot": false,
          "headline": "feat(ci): 合并 release CI、多平台 goreleaser、@mocode/cli npm 包",
          "author_name": "fromsko",
          "author_login": "Fromsko",
          "committed_at": "2026-07-19T14:25:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "770e92d0949cf88a718d3b7dbfd012586a24dd12",
          "body": null,
          "is_bot": false,
          "headline": "🔧 config: 修复 goreleaser 发布目标为 nextsko",
          "author_name": "fromsko",
          "author_login": "Fromsko",
          "committed_at": "2026-07-19T14:19:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ddd7ab3d745e97690adbaf0c5443762513b45b14",
          "body": null,
          "is_bot": false,
          "headline": "♻️ refactor: 工具系统扁平化与配置优化",
          "author_name": "fromsko",
          "author_login": "Fromsko",
          "committed_at": "2026-07-19T14:10:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f49550f034ce13cb1d42fec9269a16a02456bef9",
          "body": "- .github/workflows/test.yml: --config=.golangci.ci.yml → --config=.golangci.yml\n- Taskfile.yaml: LINT_CONFIG 默认值 .golangci.ci.yml → .golangci.yml\n- Taskfile.yaml: lint:strict 改为统一引用 {{.LINT_CONFIG}},超时由 5m 提升到 10m\n- README.md: 修正 task lint 说明,去除'legacy'措辞",
          "is_bot": false,
          "headline": "🔧 chore(ci): 统一 golangci 配置路径并修正 lint 描述",
          "author_name": "fromsko",
          "author_login": "Fromsko",
          "committed_at": "2026-07-19T07:01:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "37c7c96c0c630ded35f53540ac1a81143ff8a9a3",
          "body": "所有 internal/core/agent/tools/builtin/ 与 plugins/ 下的工具实现已扁平化到根级 tools/ 包。\n\n调用方批量更新(76+ 文件):\n- internal/core/agent/*        agent 协调器、agentic_fetch_tool、agent_lifecycle 等\n- internal/core/app/*           app 实例化、LSP 事件\n- internal/core/config/*        config 与 store 相关\n- internal/core/toolutil/lsputil  \n[…]\n    → tools\n- internal/core/agent/tools/lsp    → tools/lsp\n- internal/core/agent/tools/mcp    → tools/mcp\n- internal/core/agent/tools/filter → tools/filter\n\nDataDirectory 字段访问统一替换为 infra.DataDir() 调用。",
          "is_bot": false,
          "headline": "🗑️ refactor(internal): 删除旧的 internal/core/agent/tools/ 目录",
          "author_name": "fromsko",
          "author_login": "Fromsko",
          "committed_at": "2026-07-19T07:01:09Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c9d21b795a0a0f2c2722d0d26409b91ef35bda7f",
          "body": "将 internal/core/agent/tools/builtin/ 与 plugins/ 下所有工具实现扁平化到 tools/ 根目录,\n使用 builtin_xxx_xxx.go / plugin_xxx_xxx.go 命名规范区分来源。\n\n子包结构(保留):\n- tools/lsp/                LSP 客户端/管理器/处理器\n- tools/lsp/util/           LSP 工具函数\n- tools/mcp/                MCP 协议支持\n- tools/filter/             工具过滤器\n- tools/plugi\n[…]\n- tools/plugins/gitopscommon/  Git 操作共享逻辑\n- tools/plugins/giteacommon/   Gitea 共享\n- tools/plugins/sshcommon/  SSH 共享服务\n\n新增工具实现 60+ 个,统一 package tools。\n通过 tools/tools.go 重新导出 netcommon 等子包的关键类型供外部代码使用。",
          "is_bot": false,
          "headline": "♻️ refactor(tools): 扁平化所有工具实现到 tools/ 根包",
          "author_name": "fromsko",
          "author_login": "Fromsko",
          "committed_at": "2026-07-19T07:00:55Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e4bb03d8c04095bd4e36503316ce3792f4e1dd08",
          "body": "- tools/registry.go 重写为 plugin struct 内联注册,去除动态注册 loader\n- tools/loader.go 删除(由静态 Build() 函数取代)\n- 删除 tools/builtin/all、tools/plugins/all、tools/plugins/{glob,grep,think,todos,web_fetch,web_search} 旧子包,工具实现将扁平化到 tools/ 根目录\n- 保留 tools/filter/、tools/plugins/{netcommon,searchcommon} 作为支持性子包\n- 框架核心契约(Tool, ToolContext, ToolResult)保留不变",
          "is_bot": false,
          "headline": "♻️ refactor(tools): 升级根级 tools/ 框架并删除旧 builtin/plugins 子包",
          "author_name": "fromsko",
          "author_login": "Fromsko",
          "committed_at": "2026-07-19T07:00:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c7ee86e2718a78cb689e8f4bf55de00ca77e17a5",
          "body": "- 删除 docs/ 下已迁移到 guides/ 的旧目录(tui-spec/、superpowers/、design/ 原文件、dev-notes/)\n- 删除根级游离文档(ci-fix-log、evaluation-plan、evolution-loop-plan、slash-command-arch、tool-system-comparison),均已归入新分类\n- 删除 pkg/ —— 全仓搜索确认无任何 import,已无实际用途\n- 删除 openspec/、examples/ 空目录\n- 删除根目录遗留文件 .golangci.ci.yml、CONTRIBUTING.md、HOOKS.md、LICENSE.md",
          "is_bot": false,
          "headline": "🗑️ chore: 删除冗余的旧目录与遗留文档",
          "author_name": "fromsko",
          "author_login": "Fromsko",
          "committed_at": "2026-07-19T07:00:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "be2320f3eb6a222a131bbb78d623a810bd6b2d2e",
          "body": "将原 docs/ 下分散的子目录(tui-spec/、superpowers/、design/、dev-notes/)统一合并到三个分类:\n\n- docs/README.md           新建总目录索引\n- docs/architecture/01-04  原有架构文档重新编号\n- docs/design/01-15       合并 tui-spec + superpowers + design 共 15 篇\n- docs/guides/01-09        迁移原 dev-notes/ 全部 9 篇\n\n每个子目录独立从 01 开始编号,便于按主题检索与维护。",
          "is_bot": false,
          "headline": "📝 docs: 重组 docs/ 目录结构并按子目录独立编号",
          "author_name": "fromsko",
          "author_login": "Fromsko",
          "committed_at": "2026-07-19T07:00:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e203f8fb0d1738f857e5d003ee065d50607eb6c9",
          "body": "详细描述:\n- 将 help 相关方法迁移到 ui_help.go\n- 将 paste 相关逻辑迁移到 ui_paste.go\n- 将 agent runtime/topology 相关逻辑迁移到 ui_agent_runtime.go\n- 将 agent cancel/todo continuation/notification 迁移到 ui_agent_control.go\n- 移除 ui.go 中不再使用的 encoding/json、net/http 等依赖导入",
          "is_bot": false,
          "headline": "♻️ refactor(ui): 拆分 ui.go 大文件为按职责划分的独立模块",
          "author_name": "fromsko",
          "author_login": "Fromsko",
          "committed_at": "2026-07-16T19:20:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1eed6eb6db9a11aa4fc5df1365ec714748833372",
          "body": "详细描述:\n- 新增 tool_call_integrity 规则块\n- 要求所有工具调用必须提供完整且符合 schema 的参数\n- 明确禁止空调用、占位调用或缺失必填参数的工具调用\n- 对校验错误建立明确的 remediation 路径",
          "is_bot": false,
          "headline": "✨ feat(core): 在 coder agent 模板中增加 tool_call 完整性校验",
          "author_name": "fromsko",
          "author_login": "Fromsko",
          "committed_at": "2026-07-16T19:20:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "458900d105c1852b203934bdb204061a3d255aa3",
          "body": "详细描述:\n- 更新 docs/tui-spec/README.md 目录,补全 08-10 章节索引和页数统计\n- 新增 08-team-mode-architecture.md 团队模式架构解析\n- 新增 09-hermes-and-claude-code-evolution.md 自进化与动态工作流演进\n- 新增 10-tty-input-and-bg-tasks.md TTY 输入与后台任务追踪\n- 新增 .plans/toolkit-migration 系列计划文档",
          "is_bot": false,
          "headline": "📝 docs: 扩展 TUI 规范并新增架构文档与 toolkit 计划",
          "author_name": "fromsko",
          "author_login": "Fromsko",
          "committed_at": "2026-07-16T19:20:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "860e07dc7d940bab3a064e2a7023a547dc36fff3",
          "body": "- Update Taskfile install task behavior\n- Tune message debounce behavior",
          "is_bot": false,
          "headline": "🔧 chore: update taskfile and app debounce details",
          "author_name": "fromsko",
          "author_login": "Fromsko",
          "committed_at": "2026-07-16T18:50:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "584a20c629b88f7de25a4b14f4f05b9e3c19c0ef",
          "body": "- Tune tool rendering, debounce, and toast behavior\n- Refresh slash/theme constants and dialog handlers\n- Adjust completions and panel view wiring",
          "is_bot": false,
          "headline": "🔧 chore: update UI components, styles, and model details",
          "author_name": "fromsko",
          "author_login": "Fromsko",
          "committed_at": "2026-07-16T18:50:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1538df845d724832ec1e05011cb0bacc48f3fd10",
          "body": "- Add Workspace.ReloadConfig and ReloadMCP\n- Register /reload and /reload-mcp slash commands\n- Add dialog actions and handlers for reload flows",
          "is_bot": false,
          "headline": "✨ feat: add /reload and /reload-mcp support",
          "author_name": "fromsko",
          "author_login": "Fromsko",
          "committed_at": "2026-07-16T18:50:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fd5dabf2332822ac77bb7de509a0909a707789be",
          "body": "- Add rule priority order and failure recovery requirements\n- Reduce duplicated guidance while keeping hard constraints\n- Keep all template variables intact",
          "is_bot": false,
          "headline": "♻️ refactor: simplify coder system prompt template",
          "author_name": "fromsko",
          "author_login": "Fromsko",
          "committed_at": "2026-07-16T18:50:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f5bec3a1f8d3c8181ef4e7f8da4c8ba3e332d18e",
          "body": "- Delete internal/core/agent/evo/* and internal/core/agent/evolution/*\n- Remove internal/transport/cmd/evolve.go\n- Remove injected evolution/error-learner wiring from agent and coordinator",
          "is_bot": false,
          "headline": "♻️ refactor: remove self-evolution packages and injection paths",
          "author_name": "fromsko",
          "author_login": "Fromsko",
          "committed_at": "2026-07-16T18:50:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4ddd8ff0de0773a6075fa6a8c6c6bfd06b977661",
          "body": "- Add coding standards, design techniques, state/layout guidance\n- Add component API and extending/testing references\n- Add HTML-to-TUI prototyping and Claude code patterns",
          "is_bot": false,
          "headline": "📝 docs: add TUI specification documents",
          "author_name": "fromsko",
          "author_login": "Fromsko",
          "committed_at": "2026-07-16T18:50:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a8daae45c58a4f4d54a874086388fa3da57c0af1",
          "body": null,
          "is_bot": false,
          "headline": "append docs/tool-system-comparison.md",
          "author_name": "pi-crew agent",
          "author_login": null,
          "committed_at": "2026-06-30T08:57:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0a585864f9cccd93e2851c41bc8e3131387a2248",
          "body": null,
          "is_bot": false,
          "headline": "✨ feat: 迁移首批插件工具",
          "author_name": "pi-crew agent",
          "author_login": null,
          "committed_at": "2026-06-30T02:22:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e4eeac10fcf332a7f54d26cba75160d4071a7732",
          "body": null,
          "is_bot": false,
          "headline": "✨ feat: 迁移后台任务内置工具",
          "author_name": "pi-crew agent",
          "author_login": null,
          "committed_at": "2026-06-30T02:22:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d29ddc53925df59206589d39472c0a0defd9b774",
          "body": null,
          "is_bot": false,
          "headline": "🐛 fix: 修复工具注册并发竞态",
          "author_name": "pi-crew agent",
          "author_login": null,
          "committed_at": "2026-06-30T02:21:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5eec5bc393e90d44b3f981eff63848a6e2c13cf8",
          "body": null,
          "is_bot": false,
          "headline": "✨ feat: 增加工具运行时依赖上下文",
          "author_name": "pi-crew agent",
          "author_login": null,
          "committed_at": "2026-06-30T02:21:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5100e387c4c38a863d80be0625a0fd26967420b4",
          "body": null,
          "is_bot": false,
          "headline": "feat(agent): add agentToolContext adapter skeleton",
          "author_name": "pi-crew agent",
          "author_login": null,
          "committed_at": "2026-06-29T16:56:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "31f5b9ee7eb3d1f403910eb7f7b4f349d14bae1b",
          "body": null,
          "is_bot": false,
          "headline": "test(tools): cover registry and loader behaviour",
          "author_name": "Mocode Agent",
          "author_login": null,
          "committed_at": "2026-06-29T16:44:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ecab0d4912d3aa262e3892a2cb5f74502a5c4ec7",
          "body": null,
          "is_bot": false,
          "headline": "test(tools/filter): port filter tests to new Tool contract",
          "author_name": "mocode agent",
          "author_login": null,
          "committed_at": "2026-06-29T16:33:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a5cf65f2a755ad2cff93066c79dbe0bd6217b515",
          "body": null,
          "is_bot": false,
          "headline": "feat(tools): add framework-agnostic filter",
          "author_name": "pi-crew",
          "author_login": null,
          "committed_at": "2026-06-29T16:25:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "58d83ce00c505ea76b5b89c3d8145e3335bfb81d",
          "body": null,
          "is_bot": false,
          "headline": "feat(tools): implement registry with init-time loader",
          "author_name": "pi-crew agent",
          "author_login": null,
          "committed_at": "2026-06-29T16:22:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2e4b152f14f2f7d99818a4ce0766cf2ea161e9d4",
          "body": "Introduce the toolkit's 9+ core type declarations in tools/contracts.go:\n4 main interfaces (Tool, ToolProvider, ToolContext, Capable), 3 supporting\ninterfaces (PermissionChecker, MCPHandles, ToolCallbacks), 3 structs\n(Schema, ToolResult, MCPServerHandle), and 1 type alias (Capability).\n\nAttachment i\n[…]\nure-refactor\nPR1). They will be consumed by 40+ tool implementations, the Coordinator\ndispatch path, and the capability/permission filter layer.\n\nDO NOT add fields, methods, or types not in the brief.",
          "is_bot": false,
          "headline": "feat(tools): define Tool/ToolProvider/ToolContext contracts",
          "author_name": "mocode",
          "author_login": null,
          "committed_at": "2026-06-29T16:03:22Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "adbf0fcaaaf2abfcc5c64f02aea3473d2b88e309",
          "body": null,
          "is_bot": false,
          "headline": "feat(tools): scaffold toolkit package with package doc",
          "author_name": "fromsko",
          "author_login": "Fromsko",
          "committed_at": "2026-06-29T15:51:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1d567b3b0d7085026ff9b44beeb7db278b92eeaf",
          "body": "Pre-existing environment issue documented per AGENTS.md\n'Troubleshooting Methodology' step 7.\n\nSymptom: go build / go test fail with\n  compile: version 'go1.26.3' does not match go tool version 'go1.26.4'\neven though go version reports go1.26.4.\n\nRoot cause: default GOROOT (C:\\Users\\16143\\.g\\go) is \n[…]\ne.\n\nVerified locally on this host:\n  go build -buildvcs=false ./...               # PASS (no output)\n  go test -count=1 -short -p=2 -timeout 120s ./internal/core/agent/...\n  # 30 packages PASS, 0 FAIL",
          "is_bot": false,
          "headline": "docs+tooling: document Go 1.26.4 toolchain mismatch on Windows",
          "author_name": "fromsko",
          "author_login": "Fromsko",
          "committed_at": "2026-06-29T14:54:13Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "229da6944d138e006b00a12757764d6ce71eb1b7",
          "body": "* docs/superpowers/plans/2026-06-29-agent-architecture-refactor.md:\n  1160-line implementation plan covering three PRs (scaffold,\n  migrate, cutover), 45 tasks mapped 1:1 against tasks.md's 7\n  groups, 10 risk/mitigation rows, and per-PR rollback commands.\n\n* openspec/changes/agent-architecture-refa\n[…]\node: standard\n    - isolation: worktree\n    - plan: docs/superpowers/plans/2026-06-29-agent-architecture-refactor.md\n  plus build_pause: null (resuming execution from the plan-ready\n  decision point).",
          "is_bot": false,
          "headline": "chore(agent-refactor): add implementation plan and lock in work mode",
          "author_name": "fromsko",
          "author_login": "Fromsko",
          "committed_at": "2026-06-29T14:44:20Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "af70d425b8bc7c1d7997c89b2cf4f9ed868745d3",
          "body": null,
          "is_bot": false,
          "headline": "chore: ignore /.worktrees/ for isolated build worktrees",
          "author_name": "fromsko",
          "author_login": "Fromsko",
          "committed_at": "2026-06-29T14:44:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a915455dfa1b56cd2046b8ac726cb6f5d4335e34",
          "body": "Bootstraps the agent-architecture-refactor change through comet stages 1-2:\n\n* OpenSpec change at openspec/changes/agent-architecture-refactor/:\n  - proposal.md: redesign internal/core/agent/tools/ as a top-level\n    framework-agnostic toolkit (github.com/package-register/mocode/tools)\n    with inte\n[…]\nswap, external versioning).\n\n* .gitignore: add /.crew/ for pi-crew runtime state.\n\nThis is a checkpoint commit; no source code is changed yet. The\nimplementation lands in the build phase that follows.",
          "is_bot": false,
          "headline": "feat(agent): design agent architecture refactor (comet open + design)",
          "author_name": "fromsko",
          "author_login": "Fromsko",
          "committed_at": "2026-06-29T14:34:17Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6dc5f553a8751743567699a3db733cd7509829b4",
          "body": "…by scenario\n\nShellType (POSIX/Cmd/PowerShell) was defined but never wired into Shell/Options/NewShell — pure dead code. Replaced with a design note: mvdan/sh is the single backend; future PowerShell support goes in a separate tool, not a ShellType switch.\n\nTool-selection guidance in bash.tpl and co\n[…]\nd of grep') to scenario-based: searching→grep tool, reading→view/read_files, listing→ls/glob, command execution→bash. Addresses MiniMax provider's 306x head/grep bias — explains why, not just 'don't'.",
          "is_bot": false,
          "headline": "♻️ refactor(shell): remove dead ShellType enum, guide tool selection …",
          "author_name": "fromsko",
          "author_login": "Fromsko",
          "committed_at": "2026-06-26T07:36:52Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "219a2708a292e0ddc932b100ba2b8aa5f9d34231",
          "body": "Typing a bare \"@\" used to dump every context item — MCP servers, skills,\nfiles, dirs, workflows — into one flat list with no separation. Now each\ncategory marker (@mcp:/@skill:/@file:/@dir:/@workflow:) becomes a\nnon-selectable section header (MCP / Skills / Files / Directories /\nWorkflows), so the p\n[…]\nits Filter() string — and the headers vanish once a query narrows results.\n\nTestSetAtItems_GroupsByCategoryHeader verifies MCP/Files headers appear in\norder; TestSectionLabel covers the label mapping.",
          "is_bot": false,
          "headline": "✨ feat(ui): group @ context completions into labeled sections",
          "author_name": "fromsko",
          "author_login": "Fromsko",
          "committed_at": "2026-06-26T04:07:15Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b195287944ffa464ab06f2082e84d368c946986e",
          "body": "…lp to its dialog",
          "is_bot": false,
          "headline": "feat(ui): add /copy command for the last assistant reply and wire /he…",
          "author_name": "fromsko",
          "author_login": "Fromsko",
          "committed_at": "2026-06-26T03:52:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "62f295e4958c1cb335d74c3bc42067a73e8ebbe8",
          "body": "The /evo loop previously dead-ended: fixation wrote the agent under\n~/local/mocode/evo/ but nothing loaded it back, so it was never actually\nselectable or runnable. This commit closes the full loop end-to-end.\n\nMaterialize (internal/core/agent/evo/materialize.go): projects a fixed agent\ninto a confi\n[…]\ntact).\n- TestClosedLoop_FixateMaterializeLoadRun: the full chain (fixate → materialize\n  → config loads it → runnable; re-fixation overwrites idempotently).\n- evo + config + cmd tests pass non-cached.",
          "is_bot": false,
          "headline": "✨ feat(evo): close the loop — fixed agents become runnable modes",
          "author_name": "fromsko",
          "author_login": "Fromsko",
          "committed_at": "2026-06-26T03:21:35Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "49bc370feecb3f1b702de48078b1e39d8b1ecb21",
          "body": null,
          "is_bot": false,
          "headline": "feat(evo): surface /evo in the slash completion list and dialog dispatch",
          "author_name": "fromsko",
          "author_login": "Fromsko",
          "committed_at": "2026-06-26T02:58:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ea1466d276852da8cc80edd20b95f409b9ff02ee",
          "body": "Absorb trpc-agent-go/hermes-agent patterns and finish the system-integration\nseams so each layer depends only downward:\n\n- WeChat tool plugins no longer import the integration layer; a domain\n  messenger port is injected via the coordinator (SetMessenger) and wired\n  from transport, removing the cor\n[…]\nasses.\n- Drop the unused Windows ConPTY stub (the emulator path is the working\n  Windows interactive solution) and add a layercheck helper plus governance\n  notes documenting the container boundaries.",
          "is_bot": false,
          "headline": "feat: integrate layered ports, evolution gates, and tool observability",
          "author_name": "fromsko",
          "author_login": "Fromsko",
          "committed_at": "2026-06-26T02:51:42Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8e987f9c246f625a32939b76830390ee9f88a56a",
          "body": "The /evo loop now captures the distinct tools each successful run called as\nemergent skills for the fixed agent's manifest (\"自我涌现出技能\"). The\ncoordinator extracts tool names from the result steps' ToolCallPart messages\n(in first-use order, deduplicated) and threads them through the extension\nContext; the observability extension passes them to RecordIteration, which\nfolds them into State.CapturedSkills — persisted into the manifest on\nfixation.",
          "is_bot": false,
          "headline": "✨ feat(evo): capture exercised tools as emergent skills",
          "author_name": "fromsko",
          "author_login": "Fromsko",
          "committed_at": "2026-06-25T22:12:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4b1f4dff857a32d984217b9d255c8fc652cc789d",
          "body": "The /evo loop now distills each successful turn into a generalized,\ntransferable principle via the configured small model, rather than keeping\nthe literal task. This is the hermes GEPA insight (read the turn, propose a\ntargeted improvement) made real: successive turns contribute abstracted\nlessons, \n[…]\n\n- Workspace facade exposes AgentSmallLanguageModel; enterEvoMode installs\n  evo.LLMDistiller when a small model is available.\n- eval.go's coordinatorAgent stub implements the new SmallModel() method.",
          "is_bot": false,
          "headline": "✨ feat(evo): LLM-backed lesson distillation for genuine emergence",
          "author_name": "fromsko",
          "author_login": "Fromsko",
          "committed_at": "2026-06-25T22:08:55Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5b00e4284ea4e48c554b03048345a73e956f0bfc",
          "body": "…illation\n\nCloses the \"maintain optimal theory\" gap: the /evo loop now reconstructs\nthe optimal theory on top of the active agent's proven system prompt, and\nprepares the seam for genuine emergence (LLM-backed lesson distillation).\n\nProven base capture:\n- Coordinator exposes ActiveAgentSystemPrompt(\n[…]\nr has the full successful turn to reason about.\n\nAlso fixes a void-return misuse in the parallel background_tty_windows.go\n(windows.ClosePseudoConsole returns no value) that blocked the Windows build.",
          "is_bot": false,
          "headline": "✨ feat(evo): capture proven base prompt and thread responses for dist…",
          "author_name": "fromsko",
          "author_login": "Fromsko",
          "committed_at": "2026-06-25T22:01:54Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f44771b175a9f1dcab5901ae2eff04470262fd1a",
          "body": "The /evo loop previously fixed whichever prompt was seen last. Now the\nState reconstructs an optimal-theory system prompt: it captures a proven\nbase at Enter and layers deduplicated lessons distilled from each\nsuccessful turn on top, so fixation preserves what already worked and\ngains the emergent r\n[…]\n, dedup). The UI passes an empty base for now (the proven prompt is\nnot yet surfaced through the workspace facade); capturing it is a\ndocumented refinement, and the loop is correct with lessons alone.",
          "is_bot": false,
          "headline": "✨ feat(evo): reconstruct a genuine optimal theory from runs",
          "author_name": "fromsko",
          "author_login": "Fromsko",
          "committed_at": "2026-06-25T21:47:20Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "970a067337915d5478535d04b02b5a58f788b92c",
          "body": "The /evo observability loop previously only saw the main Run path;\ndelegated sub-agent runs (the Agent tool, roundtable turns, parallel/DAG\nbatches) ran via runSubAgentWithMeta and were invisible to extensions.\n\nFire BeforeRun before the sub-agent executes and AfterRun/OnError after,\nmirroring the main Run dispatch. This closes the observability gap so the\nevo optimal-theory reconstruction captures the full delegation graph, not\njust top-level prompts.",
          "is_bot": false,
          "headline": "✨ feat(agent): fire extension events for sub-agent runs",
          "author_name": "fromsko",
          "author_login": "Fromsko",
          "committed_at": "2026-06-25T21:42:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fcaab2bafdf66ec16b6e4f66cbe22ac4f768b66e",
          "body": "Makes the /evo self-evolving loop real: each run during a /evo session is\nobserved and folded into the reconstructed optimal-theory prompt, which is\nthen fixed on exit.\n\ncoordinator (on_xxx dispatch):\n- SetExtensions/RegisterExtension/UnregisterExtension on the Coordinator\n  interface; the coordinat\n[…]\nompletes the parallel provider extraction that was blocking the\nbuild: coordinator_providers.go (the build*Provider methods) with its\nnet/http import fixed, and coordinator.go's stale imports removed.",
          "is_bot": false,
          "headline": "✨ feat(evo): wire observability loop into the coordinator",
          "author_name": "fromsko",
          "author_login": "Fromsko",
          "committed_at": "2026-06-25T21:37:01Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "71c0914b29e9894a7f702c23d9d1d4cd87b6f397",
          "body": "Closes the /evo loop: a fixed agent can be loaded and surfaced like a mode.\nLoadAgents enumerates every固化 agent under the evo root (skipping any with\nan unreadable active revision), and LoadAgent fetches one by name. ModeID\nnamespaces them as \"evo:<name>\" so they cannot collide with built-in agent\nids. 2 tests.",
          "is_bot": false,
          "headline": "✨ feat(evo): load tamed agents back as selectable modes",
          "author_name": "fromsko",
          "author_login": "Fromsko",
          "committed_at": "2026-06-25T21:19:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ac7e569995a59abbfeffe15b46735b6fca3b8429",
          "body": "Adds the /evo special mode: a self-evolution session with a distinct\nred/purple identity, second-confirmation exit, and固化 (fixation) of the\ntamed agent on exit.\n\ncore/agent/evo (new, mode-agnostic runtime):\n- Manifest: the on-disk description of a fixed agent (name, title,\n  system_prompt, skills, a\n[…]\n/evo exit\" fixes the converged context into\n  ~/local/mocode/evo/agent-<name>/ and restores the default theme.\n- evo.State + evoPrevTheme fields on the UI model; infoCmd helper for\n  transient toasts.",
          "is_bot": false,
          "headline": "✨ feat(evo): add /evo self-evolution mode with theme swap and fixation",
          "author_name": "fromsko",
          "author_login": "Fromsko",
          "committed_at": "2026-06-25T21:17:20Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5baab5ab6292d2fccad7591dcbca34f00851a4a8",
          "body": "Three foundational pieces for the self-evolution work, all verified green\ntogether:\n\n1. Extension/callback core (internal/core/agent/extension): a composable\n   on_xxx lifecycle hook system adapted from trpc-agent-go's\n   PluginManager/Callbacks. The Manager owns a named-extension registry\n   with d\n[…]\nstration in\ncompat.go (its JobInputToolName re-export was missing) and the shell\nExecStreamWithStdin path (a dead newInterp call). These were left\nincomplete in the tree; both are now wired and green.",
          "is_bot": false,
          "headline": "✨ feat(agent): add extension system, fix store layering, add evo theme",
          "author_name": "fromsko",
          "author_login": "Fromsko",
          "committed_at": "2026-06-25T20:56:14Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b2954470c77a282fc53b7a831d8964785d14f670",
          "body": "internal/ had grown to 37 flat top-level packages with no enforced\nlayering, making ownership boundaries and dependency direction hard to\nread. Group them into 7 architectural containers with strictly downward\ndependencies:\n\n  util/        ext, csync, infra, fsext, diff, log, errcoll, version, pubsu\n[…]\nroducer integration stays deferred). Import blocks\nre-sorted via goimports -local. go build ./... and go vet ./... green;\ntests pass except the pre-existing util/fsext Windows path-separator\nfailures.",
          "is_bot": false,
          "headline": "♻️ refactor(structure): reorganize internal/ into layered containers",
          "author_name": "fromsko",
          "author_login": "Fromsko",
          "committed_at": "2026-06-25T20:29:42Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6945ebddf7e6cf33689dd5eac15b10ecb1b0c3d4",
          "body": "- Merge sessionlog bug.md and errcoll JSONL in Producer\n- Emit quality rule patch when turn_score average is low\n- Add errcoll/quality/convergence tests and toolutil context tests\n- Document closed three-ring evolution loop in evolution-loop-plan.md\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "✨ feat(evolution): close quality loop and unify error sources",
          "author_name": "fromsko",
          "author_login": "Fromsko",
          "committed_at": "2026-06-25T19:45:43Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "94accecf938594d3fb5bc4f65c71e82166a5267e",
          "body": "Wire LLM-judge turn scoring into the coordinator, add eval/evolve CLI\ncommands with candidate packages, and register WeChat/session export tools.",
          "is_bot": false,
          "headline": "✨ feat: add evaluation loop, evolution scoring, and export plugins",
          "author_name": "fromsko",
          "author_login": "Fromsko",
          "committed_at": "2026-06-25T19:36:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a1d9f39762e28a07f8c40c5161bf8317e646d6c1",
          "body": "…l/ext\n\nReplace internal/stringext and internal/filepathext with a single ext\npackage and update call sites.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "♻️ refactor(structure): fold string and filepath helpers into interna…",
          "author_name": "fromsko",
          "author_login": "Fromsko",
          "committed_at": "2026-06-25T19:35:32Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "ebabdbbc7ef10d6f9f7669efd76be9dcc37c692b",
          "body": "Drop the React web frontend, embedded server/swagger stack, client\nworkspace backend, and MiniMax quota orchestration paths; simplify CLI\nto TUI, admin, gateway, and run entrypoints.",
          "is_bot": false,
          "headline": "🗑️ chore: remove web UI and in-process HTTP transport",
          "author_name": "fromsko",
          "author_login": "Fromsko",
          "committed_at": "2026-06-25T19:34:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "863417aeb01cd649320eb015e1c3a0432790d193",
          "body": "Flatten exec/file/network/search plugin groupings into per-tool packages,\ncolocate LSP client code under agent/tools/lsp, and update registry wiring.",
          "is_bot": false,
          "headline": "♻️ refactor(tools): one folder per builtin and plugin tool",
          "author_name": "fromsko",
          "author_login": "Fromsko",
          "committed_at": "2026-06-25T19:33:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c4c933d4d0508a15531c7de0633cea7347973151",
          "body": "- Rewrite AGENTS.md, internal/README, HOOKS, CONTRIBUTING, and baseline docs\n- Rename tools→shellruntime, commands→slash, gateway→wechat/gateway\n- Add memory JSONL persistence, unified log paths, message update debounce\n- Add httputil middleware, web localhost default, admin Bearer token\n- Split ui_mcp/ui_wechat and app_sessions; remove cron; build to bin/mocode\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "♻️ refactor(structure): implement multi-review governance roadmap",
          "author_name": "fromsko",
          "author_login": "Fromsko",
          "committed_at": "2026-06-25T18:05:10Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "eb2fe26859c07e1719d6070852b2cb0f3acba4dc",
          "body": "详细描述:\n- 每用户独立 Butler 会话,SessionKey(wx:userID) 绑定与 per-user 锁\n- 回合级回复提取,AgentIsSessionBusy 轮询等待,避免读到 stale 回复\n- 修复 /switch、deleteSession 的会话绑定清理\n- channel 按用户串行处理消息,Reply 失败最多重试 3 次\n- /send、/screenshot 收件人改为 msg.UserID,不再误发给 bot 账号\n- butler_prompt agent 工具示例改为合法 JSON\n- 新增 butler_test.go 覆盖 SessionKey、busy-wait、switch 等场景\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "🐛 fix(wechat): stabilize Butler per-user sessions and reply handling",
          "author_name": "fromsko",
          "author_login": "Fromsko",
          "committed_at": "2026-06-25T17:04:45Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "20e2b97c01c37396ca4a7420bcf695819a6df1fb",
          "body": "…ompression, cron scheduler\n\n- Session Search (FTS5): SQLite-based full-text search across all session messages\n  with three modes: discovery (FTS5 query), scroll (message window), browse (recent sessions)\n  Auto-rebuilds index on first use from existing JSONL message files\n\n- Context Auto-Compressi\n[…]\n: File-based cron job management with 5-field expression support,\n  cross-process locking, job result persistence, and delivery handler interface.\n  Zero external dependencies (no robfig/cron needed).",
          "is_bot": false,
          "headline": "feat: add P0 hermes-inspired capabilities - session search, context c…",
          "author_name": "fromsko",
          "author_login": "Fromsko",
          "committed_at": "2026-06-23T05:31:35Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "63bfb89f94ee1b68ae3b8975930540768a0b3cd2",
          "body": "…o code'",
          "is_bot": false,
          "headline": "chore: bump version to v0.7.0, rebrand TUI from 'Fromsko Code' to 'oM…",
          "author_name": "fromsko",
          "author_login": "Fromsko",
          "committed_at": "2026-06-23T03:25:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "882daf7384b5a68e5bd74f81beeb5bb16885e082",
          "body": "Three package consolidations across internal/:\n\n1. capability -> commands: capability was a thin abstraction layer over commands (imported it for Argument type, defined CommandRegistry/Provider/Descriptor). Merged into commands, updated 5 importers.\n\n2. orchestration/swarm -> orchestration: parent d\n[…]\nss fsext, lsp, config, commands, agent, store, ui, session.\n\ngateway -> wechat was attempted but reverted: creates import cycle (wechat->workspace->agent->tools->wechat).\n\nAll tests pass. Build clean.",
          "is_bot": false,
          "headline": "♻️ refactor: consolidate capability, orchestration, and infra packages",
          "author_name": "fromsko",
          "author_login": "Fromsko",
          "committed_at": "2026-06-22T21:36:43Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4ca3f238d17c6176e760d62c672113f7326143e2",
          "body": "…ckage\n\nThe agent/toolutil parent directory had no .go files — it was purely a namespace wrapper around 6 sub-packages (shared, toolctx, capability, callback, retry, lsputil) that are all tool utilities. Consolidated into one flat package.\n\nKey changes: shared.GetSessionFromContext -> toolutil.GetSe\n[…]\ntry.DefaultPolicy -> toolutil.DefaultRetryPolicy. 38 files updated across builtin, plugins, and registry. callback.go's toolctx import eliminated (intra-package call).\n\nAll 37 tests pass. Build clean.",
          "is_bot": false,
          "headline": "♻️ refactor(toolutil): flatten 6 sub-packages into single toolutil pa…",
          "author_name": "fromsko",
          "author_login": "Fromsko",
          "committed_at": "2026-06-22T21:15:39Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a9820fcf1f75e3fffe39def219d68a5258f08065",
          "body": "…remove code\n\nRemove code.md (orphan duplicate of coder) and coordinator.md (overlaps plan). Merge coordinator's unique logic (context management, execution brief, progress reporting) into plan.md.\n\nStrengthen plan.md with thinking methodology (verify-first, causal chains, anti-hallucination guard),\n[…]\n-file edit safety constraints (transactional edits, post-edit verification, error classification taxonomy, concurrency limits).\n\nChange default mode from plan to coder for uniqueness and no ambiguity.",
          "is_bot": false,
          "headline": "♻️ refactor(modes): consolidate modes - merge coordinator into plan, …",
          "author_name": "fromsko",
          "author_login": "Fromsko",
          "committed_at": "2026-06-22T20:59:12Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1c379ae589617fc4a96b10eaab10039f6ffa1c8c",
          "body": "…rm hints\n\nAdd thinking methodology (Verify->Plan->Code loop, anti-hallucination guard, structured debugging) and output discipline (zero fluff, logical rigor, conciseness hierarchy) sourced from reference docs.\n\nAdd Windows platform notes gated on Platform=windows: mvdan/sh POSIX emulation, forward-slash shell paths, native Windows tool paths, forbid invented Unix paths, require path verification.",
          "is_bot": false,
          "headline": "✨ feat(prompt): strengthen coder template with methodology and platfo…",
          "author_name": "fromsko",
          "author_login": "Fromsko",
          "committed_at": "2026-06-22T20:59:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a7816b5c6a2d564e7d00fe264a45620ea74ab0a6",
          "body": "Tool renderers were calling json.Unmarshal on opts.ToolCall.Input before\nchecking IsPending(). During streaming, Input is an empty string until the\nparams JSON completes, causing unmarshal failure and a spurious 'ERROR\nInvalid parameters' display. Most visible on Edit/MultiEdit due to large\nparam payloads creating a long streaming window.\n\nGuard all 12 renderer sites (file.go x6, bash.go, fetch.go, search.go x4)\nto skip unmarshal when Input is empty.",
          "is_bot": false,
          "headline": "🐛 fix(ui): skip param unmarshal during tool-call streaming",
          "author_name": "fromsko",
          "author_login": "Fromsko",
          "committed_at": "2026-06-22T20:58:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4f9e6846da6d17fec98518cbeda7cae096eaa6e4",
          "body": "- 删除 requirements.md (需求文档)\n- 删除 tasks.md (任务清单)",
          "is_bot": false,
          "headline": "📝 docs: 移除 FileMentionMenu Redesign 项目文档",
          "author_name": "fromsko",
          "author_login": "Fromsko",
          "committed_at": "2026-06-17T06:13:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f35a2bd90b679c2e1207a5432f5f76a9899db565",
          "body": "…irmations\n\n- Add comprehensive compress_test.go for tool message compression levels\n\n- Test nil compressor, LevelFull, LevelTrim, LevelCompact, LevelSummary\n\n- Verify tool name propagation for bash-specific trimming rules\n\n- Add .workflow-confirmations.json to .gitignore",
          "is_bot": false,
          "headline": "✅ test(agent): add compress tool message tests + ignore workflow conf…",
          "author_name": "fromsko",
          "author_login": "Fromsko",
          "committed_at": "2026-06-14T16:21:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 7,
      "commits_last_year": 187,
      "latest_release_at": "2026-07-20T13:47:07Z",
      "latest_release_tag": "v0.7.8",
      "releases_from_tags": false,
      "days_since_last_push": 6,
      "active_weeks_last_year": 7,
      "days_since_latest_release": 6,
      "mean_days_between_releases": 0.2
    },
    "community": {
      "has_readme": true,
      "has_license": false,
      "has_description": true,
      "has_contributing": false,
      "health_percentage": 28,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "github.com/nextsko/mocode-agent",
          "exists": true,
          "license": null,
          "keywords": [],
          "ecosystem": "go",
          "matches_repo": true,
          "registry_url": "https://pkg.go.dev/github.com/nextsko/mocode-agent",
          "is_deprecated": false,
          "latest_version": "v0.7.8",
          "repository_url": "https://github.com/nextsko/mocode-agent",
          "versions_count": 13,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-07-20T13:36:41Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 6
        }
      ]
    },
    "popularity": {
      "forks": 0,
      "stars": 0,
      "watchers": 0,
      "fork_history": {
        "days": [],
        "complete": true,
        "collected": 0,
        "total_forks": 0
      },
      "star_history": {
        "days": [],
        "complete": true,
        "collected": 0,
        "total_stars": 0,
        "collected_at": null
      },
      "open_issues_and_prs": 2
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": true,
      "bootstrap_files": [
        "Taskfile.yaml",
        "internal/ui/diffview/Taskfile.yaml"
      ],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [
        "go.mod"
      ],
      "largest_source_bytes": 271698,
      "source_files_sampled": 549,
      "oversized_source_files": 1,
      "agent_instruction_files": [
        "AGENTS.md",
        "internal/transport/cmd/stats/AGENTS.md",
        "internal/ui/AGENTS.md"
      ],
      "agent_instruction_max_bytes": 20197
    },
    "dependencies": {
      "manifests": [
        "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"
      ],
      "dependencies": [
        {
          "name": "charm.land/bubbles/v2",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v2.1.1"
        },
        {
          "name": "charm.land/bubbletea/v2",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v2.0.8"
        },
        {
          "name": "charm.land/catwalk",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.49.28"
        },
        {
          "name": "charm.land/fang/v2",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v2.0.1"
        },
        {
          "name": "charm.land/fantasy",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.38.1"
        },
        {
          "name": "charm.land/glamour/v2",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v2.0.1"
        },
        {
          "name": "charm.land/lipgloss/v2",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v2.0.4"
        },
        {
          "name": "charm.land/log/v2",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v2.0.0"
        },
        {
          "name": "github.com/BurntSushi/toml",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.6.0"
        },
        {
          "name": "github.com/JohannesKaufmann/html-to-markdown",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.6.0"
        },
        {
          "name": "github.com/PuerkitoBio/goquery",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.12.0"
        },
        {
          "name": "github.com/alecthomas/chroma/v2",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v2.27.0"
        },
        {
          "name": "github.com/atotto/clipboard",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.1.4"
        },
        {
          "name": "github.com/aymanbagabas/go-nativeclipboard",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.1.3"
        },
        {
          "name": "github.com/aymanbagabas/go-udiff",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.4.1"
        },
        {
          "name": "github.com/bmatcuk/doublestar/v4",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v4.10.0"
        },
        {
          "name": "github.com/charlievieth/fastwalk",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.0.14"
        },
        {
          "name": "github.com/charmbracelet/colorprofile",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.4.3"
        },
        {
          "name": "github.com/charmbracelet/ultraviolet",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.0.0-20260703014108-f5a850f9c2b7"
        },
        {
          "name": "github.com/charmbracelet/x/ansi",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.11.7"
        },
        {
          "name": "github.com/charmbracelet/x/editor",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.2.0"
        },
        {
          "name": "github.com/charmbracelet/x/etag",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.2.0"
        },
        {
          "name": "github.com/charmbracelet/x/exp/charmtone",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.0.0-20260109001716-2fbdffcb221f"
        },
        {
          "name": "github.com/charmbracelet/x/exp/golden",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.0.0-20250806222409-83e3a29d542f"
        },
        {
          "name": "github.com/charmbracelet/x/exp/ordered",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.1.0"
        },
        {
          "name": "github.com/charmbracelet/x/exp/slice",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.0.0-20260422141420-a6cbdff8a7e2"
        },
        {
          "name": "github.com/charmbracelet/x/exp/strings",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.1.0"
        },
        {
          "name": "github.com/charmbracelet/x/powernap",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.1.6"
        },
        {
          "name": "github.com/charmbracelet/x/term",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.2.2"
        },
        {
          "name": "github.com/clipperhouse/displaywidth",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.11.0"
        },
        {
          "name": "github.com/clipperhouse/uax29/v2",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v2.7.0"
        },
        {
          "name": "github.com/disintegration/imaging",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.6.2"
        },
        {
          "name": "github.com/dustin/go-humanize",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.0.1"
        },
        {
          "name": "github.com/gen2brain/beeep",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.11.2"
        },
        {
          "name": "github.com/go-git/go-git/v5",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v5.19.1"
        },
        {
          "name": "github.com/google/uuid",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.6.0"
        },
        {
          "name": "github.com/invopop/jsonschema",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.14.0"
        },
        {
          "name": "github.com/itchyny/gojq",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.12.19"
        },
        {
          "name": "github.com/joho/godotenv",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.5.1"
        },
        {
          "name": "github.com/jordanella/go-ansi-paintbrush",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.0.0-20240728195301-b7ad996ecf3d"
        },
        {
          "name": "github.com/kbinani/screenshot",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.0.0-20250624051815-089614a94018"
        },
        {
          "name": "github.com/kevinburke/ssh_config",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.6.0"
        },
        {
          "name": "github.com/lucasb-eyer/go-colorful",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.4.0"
        },
        {
          "name": "github.com/mattn/go-isatty",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.0.23"
        },
        {
          "name": "github.com/modelcontextprotocol/go-sdk",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.6.1"
        },
        {
          "name": "github.com/nxadm/tail",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.4.11"
        },
        {
          "name": "github.com/openai/openai-go/v3",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v3.43.0"
        },
        {
          "name": "github.com/pkg/browser",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.0.0-20240102092130-5ac0b6a4141c"
        },
        {
          "name": "github.com/qjebbs/go-jsons",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.0.0-alpha.6"
        },
        {
          "name": "github.com/rivo/uniseg",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.4.7"
        },
        {
          "name": "github.com/sahilm/fuzzy",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.1.3"
        },
        {
          "name": "github.com/sourcegraph/jsonrpc2",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.2.1"
        },
        {
          "name": "github.com/spf13/cobra",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.10.2"
        },
        {
          "name": "github.com/stretchr/testify",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.11.1"
        },
        {
          "name": "github.com/tidwall/gjson",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.19.0"
        },
        {
          "name": "github.com/tidwall/sjson",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.2.5"
        },
        {
          "name": "github.com/yeqown/go-qrcode",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.5.10"
        },
        {
          "name": "github.com/zeebo/xxh3",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.1.0"
        },
        {
          "name": "go.uber.org/goleak",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.3.0"
        },
        {
          "name": "golang.org/x/crypto",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.54.0"
        },
        {
          "name": "golang.org/x/net",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.57.0"
        },
        {
          "name": "golang.org/x/sync",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.22.0"
        },
        {
          "name": "golang.org/x/sys",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.47.0"
        },
        {
          "name": "golang.org/x/text",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.40.0"
        },
        {
          "name": "gopkg.in/natefinch/lumberjack.v2",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v2.2.1"
        },
        {
          "name": "gopkg.in/yaml.v3",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v3.0.1"
        },
        {
          "name": "modernc.org/sqlite",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.54.0"
        },
        {
          "name": "mvdan.cc/sh/moreinterp",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.0.0-20250902163504-3cf4fd5717a5"
        },
        {
          "name": "mvdan.cc/sh/v3",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v3.13.1"
        }
      ],
      "all_dependencies": {
        "error": "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
        "source": null,
        "packages": [],
        "collected": false,
        "truncated": false,
        "total_count": null,
        "direct_count": null,
        "indirect_count": null
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 2,
        "merged_prs": 1,
        "open_issues": 0,
        "closed_ratio": null,
        "closed_issues": 0,
        "closed_unmerged_prs": 1
      },
      "bus_factor": 1,
      "bot_contributors": 1,
      "top_contributors": [
        {
          "type": "User",
          "login": "Fromsko",
          "commits": 156,
          "avatar_url": "https://avatars.githubusercontent.com/u/99723642?v=4"
        },
        {
          "type": "User",
          "login": "nextsko",
          "commits": 19,
          "avatar_url": "https://avatars.githubusercontent.com/u/231282484?v=4"
        }
      ],
      "contributors_sampled": 2,
      "top_contributor_share": 0.891
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "release.yml",
        "test.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [
        ".golangci.yml"
      ],
      "has_editorconfig": false,
      "has_linter_config": true,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "go.sum"
      ],
      "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": 0,
            "reason": "0 out of 1 merged PRs checked by a CI test -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 0,
            "reason": "Found 0/29 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": 10,
            "reason": "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": 0,
            "reason": "license file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 0,
            "reason": "project was created within the last 90 days. Please review its contents carefully",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": 10,
            "reason": "packaging workflow detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 0,
            "reason": "dependency not pinned by hash detected -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "SAST tool is not run on all commits -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 0,
            "reason": "security policy file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": 0,
            "reason": "Project has not signed or included provenance with any releases.",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 0,
            "reason": "detected GitHub workflow tokens with excessive permissions",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 6,
            "reason": "4 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "0e0b447f601354569fc65ce007d01ca740e486bf",
        "ran_at": "2026-07-27T03:59:34Z",
        "aggregate_score": 3.3,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": false,
      "has_dependabot_config": true
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-20T16:42:53Z",
      "oldest_open_prs": [
        {
          "number": 3,
          "created_at": "2026-07-20T09:26:10Z",
          "last_comment_at": "2026-07-20T09:26:11Z",
          "last_comment_author": "dependabot"
        },
        {
          "number": 4,
          "created_at": "2026-07-20T09:26:34Z",
          "last_comment_at": "2026-07-20T09:26:35Z",
          "last_comment_author": "dependabot"
        }
      ],
      "last_merged_pr_at": "2026-07-19T15:15:18Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": []
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/nextsko/mocode-agent",
    "host": "github.com",
    "name": "mocode-agent",
    "owner": "nextsko"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "at_risk",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 46,
      "inputs": {
        "security": 33,
        "vitality": 71,
        "community": 12,
        "governance": 40,
        "engineering": 68
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "good",
        "name": "Vitality",
        "value": 71,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "moderate",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 59,
            "inputs": {
              "commits_last_year": 187,
              "human_commit_share": 0.99,
              "days_since_last_push": 6,
              "active_weeks_last_year": 7
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 6 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 6
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "7/52 weeks with commits",
                "points": 4.8,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 7
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "187 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 187
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "project was created within the last 90 days. Please review its contents carefully",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": null,
            "notes": [],
            "value": 90,
            "inputs": {
              "releases_count": 7,
              "latest_release_tag": "v0.7.8",
              "releases_from_tags": false,
              "days_since_latest_release": 6,
              "mean_days_between_releases": 0.2
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "7 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 7
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 6 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 6
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~0.2 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 0.2
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "Project has not signed or included provenance with any releases.",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "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": 12,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "critical",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 1,
            "inputs": {
              "forks": 0,
              "stars": 0,
              "watchers": 0,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "0 stars",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "0 forks",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "0 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "critical",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 25,
            "inputs": {
              "has_readme": true,
              "has_license": false,
              "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": "no license file detected",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "license_absent",
                    "params": {}
                  }
                ],
                "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": "at_risk",
        "name": "Sustainability & Governance",
        "value": 40,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 14,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 2,
              "top_contributor_share": 0.891
            },
            "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 89% of commits",
                "points": 2.5,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 89
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "2 contributors",
                "points": 2.7,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "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": "at_risk",
            "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": 36,
            "inputs": {
              "merged_prs": 1,
              "open_issues": 0,
              "closed_issues": 0,
              "issue_closed_ratio": null,
              "closed_unmerged_prs": 1
            },
            "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/2 decided PRs merged",
                "points": 19.1,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 1,
                      "decided": 2
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/29 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "critical",
            "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": 26,
            "inputs": {
              "followers": 1,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "nextsko",
              "public_repos": 8,
              "account_age_days": 320
            },
            "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": "1 followers of nextsko",
                "points": 2.2,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 1,
                      "login": "nextsko"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "8 public repos, account ~0 yr old",
                "points": 8.7,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 8
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 0
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "github.com/nextsko/mocode-agent"
              ],
              "ecosystems": "go",
              "any_deprecated": false,
              "min_days_since_publish": 6
            },
            "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 6 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 6
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "13 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 13
                    }
                  }
                ],
                "max_points": 20
              },
              {
                "key": "not_deprecated",
                "name": "Not deprecated",
                "detail": "active, not deprecated or yanked",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "package_not_deprecated",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "moderate",
        "name": "Engineering Quality",
        "value": 68,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "moderate",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 64,
            "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",
                "points": 16,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".golangci.yml"
                    }
                  }
                ],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "0 out of 1 merged PRs checked by a CI test -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "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": 33,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": null,
            "notes": [],
            "value": 33,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 18,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 0,
              "scorecard_aggregate": 3.3
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "branch protection not enabled on development/release branches",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "0 out of 1 merged PRs checked by a CI test -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 0/29 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": "update tool detected",
                "points": 7.5,
                "status": "met",
                "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 not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "project was created within the last 90 days. Please review its contents carefully",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow detected",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool is not run on all commits -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "Project has not signed or included provenance with any releases.",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "detected GitHub workflow tokens with excessive permissions",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "4 existing vulnerabilities detected",
                "points": 4.5,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "high_risk_jurisdiction_exposure",
            "band": "excellent",
            "name": "High-Risk Jurisdiction Exposure",
            "note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
            "notes": [
              {
                "code": "jurisdiction_evidence_limits",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "meaning": "self-published location evidence; not nationality or citizenship",
              "red_flag": false,
              "exposures": [],
              "policy_countries": [
                "Russia",
                "Iran",
                "North Korea"
              ],
              "review_only_matches": 0,
              "assessed_self_published_locations": 1
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "no confirmed policy-scope location match",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "jurisdiction_no_match",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "good",
        "name": "AI Readiness",
        "value": 79,
        "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.899,
              "agent_instruction_files": [
                "AGENTS.md",
                "internal/transport/cmd/stats/AGENTS.md",
                "internal/ui/AGENTS.md"
              ],
              "agent_instruction_max_bytes": 20197
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "AGENTS.md, internal/transport/cmd/stats/AGENTS.md, internal/ui/AGENTS.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "AGENTS.md, internal/transport/cmd/stats/AGENTS.md, internal/ui/AGENTS.md"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "89 of 99 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 89,
                      "sampled": 99
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "excellent",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 88,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "go.sum"
              ],
              "has_dockerfile": false,
              "typed_language": true,
              "bootstrap_files": [
                "Taskfile.yaml",
                "internal/ui/diffview/Taskfile.yaml"
              ],
              "has_devcontainer": false,
              "has_linter_config": true,
              "typecheck_configs": [],
              "agent_commit_share": 0.04,
              "toolchain_manifests": [
                "go.mod"
              ],
              "dependency_bot_commit_share": 0.01
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "Taskfile.yaml, internal/ui/diffview/Taskfile.yaml",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Taskfile.yaml, internal/ui/diffview/Taskfile.yaml"
                    }
                  }
                ],
                "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",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".golangci.yml"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "Go (statically typed)",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Go"
                    }
                  }
                ],
                "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": "4 of the last 100 commits agent-authored or agent-credited",
                "points": 8,
                "status": "partial",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 4,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "1 of the last 100 commits are automated dependency updates",
                "points": 8,
                "status": "met",
                "details": [
                  {
                    "code": "dependency_bot_commits",
                    "params": {
                      "count": 1,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "primary_language": "Go",
              "largest_source_bytes": 271698,
              "source_files_sampled": 549,
              "oversized_source_files": 1
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "Go (statically typed)",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Go"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "1/549 source files over 60KB",
                "points": 54.9,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 549,
                      "oversized": 1
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "critical",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 20,
            "inputs": {
              "example_dirs": [],
              "has_mcp_signal": true,
              "api_schema_files": []
            },
            "components": [
              {
                "key": "api_schema_openapi_graphql_proto",
                "name": "API schema (OpenAPI/GraphQL/proto)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 40
              },
              {
                "key": "mcp_server",
                "name": "MCP server",
                "detail": null,
                "points": 20,
                "status": "met",
                "details": [],
                "max_points": 20
              },
              {
                "key": "runnable_examples",
                "name": "Runnable examples",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 40
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-27T03:59:41.643377Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/n/nextsko/mocode-agent.svg",
  "full_name": "nextsko/mocode-agent",
  "license_state": "absent",
  "license_spdx": null
}

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

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

Wie ein einzelnes Ergebnis im Gesamtregister steht: aggregierte StatistikenGo.