Registro público
Informe de salud del softwareesquema 0.27.0 · métricas 1.13.0 · 2026-07-27 03:59 UTC

nextsko / mocode-agent

Terminal AI coding assistant — mocode-agent

GoSin licencia detectada★ 0 estrellas⑂ 0 forksdesde jul 2026Ver en GitHub ↗

nextsko/mocode-agent tiene un índice de salud de 46 sobre 100, lo que lo sitúa en la banda En riesgo. Su puntuación más alta es AI Readiness (79/100) y la más baja, Community & Adoption (12/100). Se actualizó por última vez hace 6 días. Una sola persona concentra la mayor parte del trabajo reciente.

46
global / 100
En riesgo

Índice de salud del software

Las métricas se agrupan en categorías ponderadas sobre una escala de 1 a 100. El resultado global parte de su media; cuando la evidencia pública activa la Política de Jurisdicciones de Alto Riesgo, la calificación se ajusta y recibe el límite 49 (En riesgo). Preparación para IA queda fuera.

46
Excelente85-100Ejemplar; cumple prácticamente todos los criterios evaluados
Bueno70-84Saludable; carencias menores
Moderado50-69Aceptable con carencias notables; se recomienda revisión
En riesgo30-49Debilidades significativas; su adopción exige cautela
Crítico1-29Problemas graves (proyecto abandonado, un solo mantenedor, sin higiene)
VitalidadComunidad yAdopciónSostenibilidady GobernanzaCalidad deIngenieríaSeguridadPreparaciónpara IA

Perfil de puntuación

Cada eje es una categoría. La forma importa más que la media: un proyecto sano llena toda la figura, mientras que un perfil de picos y cráteres indica que la fortaleza en una dimensión enmascara el riesgo en otra.

Titularidad

nextskoCuenta personal
1 seguidor8 repositorios públicosdesde sept 2025

Este repositorio pertenece a una cuenta personal. Un proyecto con un único propietario conlleva más riesgo de continuidad que uno respaldado por una organización.

Ecosistemas de paquetes

RegistroPaqueteVersiónDescargas / mesVersionesÚltima publicación
Gogithub.com/nextsko/mocode-agentv0.7.8-13hace 6 días

Métricas por categoría

Vitalidad

¿Está vivo el proyecto: se escribe código y se publican versiones?

71Bueno · 22% del índice global
Cómo se puntúa
36/36Recencia de push — último push hace 6 días
4.8/36Cadencia de commits — 7/52 semanas con commits
18/18Volumen de commits — 187 commits en el último año
0/10OpenSSF Scorecard: Maintained — project was created within the last 90 days. Please review its contents carefully
Datos de entrada utilizados
commits_last_year187
human_commit_share0,99
days_since_last_push6
active_weeks_last_year7
Cómo se puntúa
27/27Publica versiones — 7 versiones publicadas
36/36Recencia de las versiones — última versión hace 6 días
27/27Cadencia de publicación — una versión cada ~0,2 días
0/10OpenSSF Scorecard: Signed-Releases — Project has not signed or included provenance with any releases.
Datos de entrada utilizados
releases_count7
latest_release_tagv0.7.8
releases_from_tagsno
days_since_latest_release6
mean_days_between_releases0,2

Comunidad y Adopción

¿Tiene el proyecto usuarios, descargas, atención y unas condiciones acogedoras para quienes contribuyen?

12Crítico · 18% del índice global
Cómo se puntúa
0/60Estrellas — 0 estrellas
0/25Forks — 0 forks
0/15Observadores — 0 observadores
Datos de entrada utilizados
forks0
stars0
watchers0
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Cómo se puntúa
22.5/22.5README
0/22.5Licencia — no se detectó ningún archivo de licencia
0/18Guía CONTRIBUTING
0/13.5Código de conducta
0/7.2Plantilla de issues
0/6.3Plantilla de PR
Datos de entrada utilizados
has_readme
has_licenseno
has_contributingno
has_issue_templateno
has_code_of_conductno
has_pull_request_templateno

Sostenibilidad y Gobernanza

¿Sobrevivirá el proyecto a sus personas: factor bus, capacidad de respuesta, quién lo respalda y mantenimiento del paquete?

40En riesgo · 24% del índice global
Cómo se puntúa
9/54Factor bus — la mitad de los commits recae en 1 contribuyente(s)
2.5/22.5Distribución de commits — el principal contribuyente firma el 89% de los commits
2.7/13.5Amplitud de contribuyentes — 2 contribuyentes
0/10OpenSSF Scorecard: Contributors — project has 0 contributing companies or organizations -- score normalized to 0
Datos de entrada utilizados
bus_factor1
contributors_sampled2
top_contributor_share0,891
Cómo se puntúa
0/46.8Resolución de issues — sin issues o sin datos
19.1/38.3Aceptación de PR — 1/2 PR decididos fusionados
0/15OpenSSF Scorecard: Code-Review — Found 0/29 approved changesets -- score normalized to 0
Datos de entrada utilizados
merged_prs1
open_issues0
closed_issues0
issue_closed_ratio
closed_unmerged_prs1
Excluidos de la puntuación (sin datos o no aplicable): Resolución de issues. Los pesos restantes se han renormalizado.
Cómo se puntúa
10/30Respaldo de la propiedad — cuenta personal (usuario)
0/20Dominio verificado — no aplicable a cuentas de usuario
2.2/25Alcance del propietario — 1 seguidores de nextsko
8.7/25Trayectoria — 8 repos públicos, cuenta de ~0 años
Datos de entrada utilizados
followers1
owner_typeUser
is_verified
owner_loginnextsko
public_repos8
account_age_days320
Excluidos de la puntuación (sin datos o no aplicable): Dominio verificado. Los pesos restantes se han renormalizado.
Cómo se puntúa
25/25Publicado y resoluble — 1 paquete(s) en go
35/35Recencia de publicación — última publicación hace 6 días
20/20Historial de versiones — 13 versiones en el registro
20/20No obsoleto — activo, ni obsoleto ni retirado
Datos de entrada utilizados
packagesgithub.com/nextsko/mocode-agent
ecosystemsgo
any_deprecatedno
min_days_since_publish6

Calidad de Ingeniería

¿Existen unas prácticas mínimas de ingeniería y documentación?

68Moderado · 20% del índice global
Cómo se puntúa
24/24Flujos de trabajo de CI — 2 flujo(s) de trabajo
24/24Pruebas presentes
16/16Configuración de linter — .golangci.yml
0/9.6Hooks de pre-commit
0/6.4.editorconfig
0/20OpenSSF Scorecard: CI-Tests — 0 out of 1 merged PRs checked by a CI test -- score normalized to 0
Datos de entrada utilizados
has_ci
has_tests
has_editorconfigno
has_linter_config
has_precommit_configno
Cómo se puntúa
30/30README
25/25Directorio de documentación
0/15Sitio de documentación / página del proyecto
10/10Descripción del repositorio
0/10Topics
10/10Wiki
Datos de entrada utilizados
topics
has_wiki
homepage
has_readme
has_docs_dir
has_description

Seguridad

¿Son sólidas las prácticas visibles de seguridad y de cadena de suministro, sin exposición jurisdiccional de alto riesgo sin resolver?

33En riesgo · 16% del índice global
Cómo se puntúa
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.5Licencia — 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
Datos de entrada utilizados
sourceopenssf_scorecard
checks_evaluated18
scorecard_versionv5.5.0
checks_inconclusive0
scorecard_aggregate3,3

Preparación para IA

¿Hasta qué punto está el repositorio preparado para desarrollarse y mantenerse con agentes de codificación de IA? Es una insignia independiente y experimental — peso 0,0, de modo que se presenta por separado y no afecta a la puntuación de salud global.

79Bueno · 0% del índice global
Cómo se puntúa
45/45Instrucciones para agentes — AGENTS.md, internal/transport/cmd/stats/AGENTS.md, internal/ui/AGENTS.md
0/15Documentación legible por máquinas (llms.txt)
40/40Historial de commits legible — 89 de 99 commits humanos declaran su intención (asunto estructurado o cuerpo explicativo)
Datos de entrada utilizados
has_llms_txtno
legible_history_share0,899
agent_instruction_filesAGENTS.md, internal/transport/cmd/stats/AGENTS.md, internal/ui/AGENTS.md
agent_instruction_max_bytes20.197
Cómo se puntúa
18/18Arranque con un solo comando — Taskfile.yaml, internal/ui/diffview/Taskfile.yaml
22/22Pruebas automatizadas
11/11Configuración de lint / formato — .golangci.yml
11/11Verificación estática de tipos — Go (tipado estático)
10/10Entorno reproducible — lockfile
8/10Práctica demostrada con agentes — 4 de los últimos 100 commits con autoría o crédito de agente
8/8Mantenimiento automatizado — 1 de los últimos 100 commits son actualizaciones automáticas de dependencias
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Datos de entrada utilizados
has_nixno
has_tests
lockfilesgo.sum
has_dockerfileno
typed_language
bootstrap_filesTaskfile.yaml, internal/ui/diffview/Taskfile.yaml
has_devcontainerno
has_linter_config
typecheck_configs
agent_commit_share0,04
toolchain_manifestsgo.mod
dependency_bot_commit_share0,01
Cómo se puntúa
45/45Código verificable por tipos — Go (tipado estático)
54.9/55Tamaños de archivo manejables — 1/549 archivos fuente de más de 60 KB
Datos de entrada utilizados
primary_languageGo
largest_source_bytes271.698
source_files_sampled549
oversized_source_files1
Cómo se puntúa
0/40Esquema de API (OpenAPI/GraphQL/proto)
20/20Servidor MCP
0/40Ejemplos ejecutables
Datos de entrada utilizados
example_dirs
has_mcp_signal
api_schema_files

Datos clave

0estrellas de GitHub
2contribuidores
187commits en los últimos 12 meses
6días desde el último push
7versiones publicadas
1factor bus
0issues abiertas
Goecosistemas de paquetes

Advertencias de recopilación de datos

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

Más detalle

OpenSSF Scorecard 3.3 / 10
3.3agregado

Evaluación de seguridad independiente y agnóstica en cuanto a herramientas, procedente del proyecto de código abierto OpenSSF Scorecard. Cada comprobación premia una práctica de seguridad, no la herramienta de un proveedor concreto. Las comprobaciones que Scorecard no pudo determinar se marcan como n/d y se excluyen de la puntuación de seguridad (nunca se cuentan como cero).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
Dependencias directas 69
RegistroPaqueteRestricción de versiónManifiesto
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
Todas las dependencias no recopilado

No fue posible recopilar el conjunto de dependencias resuelto para este informe: GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Informe JSON sin procesar legible por máquina
{
  "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
}

Las puntuaciones son señales, no garantías. Reflejan prácticas públicamente visibles en GitHub; no son una auditoría de código ni una garantía de seguridad.

Los datos ausentes se excluyen y los pesos se renormalizan; nunca se puntúan como cero. La metodología es versionada y abierta: métricas v1.13.0, esquema v0.27.0 — metodología completa · wiki de métricas.

Cómo se sitúa un resultado dentro del registro general: estadísticas agregadasGo.