Registro público
Informe de salud del softwareesquema 0.26.0 · métricas 1.13.0 · 2026-07-22 20:52 UTC

stellarlinkco / agentsdk-go

Build AI agents in light speed

GoMIT★ 156 estrellas⑂ 27 forksdesde nov 2025Ver en GitHub ↗

stellarlinkco/agentsdk-go tiene un índice de salud de 68 sobre 100, lo que lo sitúa en la banda Moderado. Su puntuación más alta es Engineering Quality (89/100) y la más baja, Security (44/100). Se actualizó por última vez hace 5 días. Una sola persona concentra la mayor parte del trabajo reciente.

68
global / 100
Moderado

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

68
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

47 seguidores14 repositorios públicosdesde jun 2025

Este repositorio está respaldado por una organización: una custodia compartida y responsable que puede sobrevivir a cualquier mantenedor individual.

Ecosistemas de paquetes

RegistroPaqueteVersiónDescargas / mesVersionesÚltima publicación
Gogithub.com/stellarlinkco/agentsdk-gov1.2.1-32hace 5 días

Métricas por categoría

Vitalidad

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

85Excelente · 22% del índice global
Cómo se puntúa
36/36Recencia de push — último push hace 5 días
13.8/36Cadencia de commits — 20/52 semanas con commits
18/18Volumen de commits — 275 commits en el último año
7/10OpenSSF Scorecard: Maintained — 8 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 7
Datos de entrada utilizados
commits_last_year275
human_commit_share0,61
days_since_last_push5
active_weeks_last_year20
Cómo se puntúa
27/27Publica versiones — 35 versiones publicadas
36/36Recencia de las versiones — última versión hace 5 días
27/27Cadencia de publicación — una versión cada ~17,5 días
0/10OpenSSF Scorecard: Signed-Releases — sin datos
Datos de entrada utilizados
releases_count35
latest_release_tagv1.2.1
releases_from_tagsno
days_since_latest_release5
mean_days_between_releases17,5
Excluidos de la puntuación (sin datos o no aplicable): OpenSSF Scorecard: Signed-Releases. Los pesos restantes se han renormalizado.

Comunidad y Adopción

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

52Moderado · 18% del índice global
Cómo se puntúa
35.5/60Estrellas — 156 estrellas
11.8/25Forks — 27 forks
0/15Observadores — 0 observadores
Datos de entrada utilizados
forks27
stars156
watchers0
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Cómo se puntúa
22.5/22.5README
22.5/22.5Licencia — licencia reconocida (MIT)
0/18Guía CONTRIBUTING
0/13.5Código de conducta
0/7.2Plantilla de issues
6.3/6.3Plantilla de PR
Datos de entrada utilizados
has_readme
has_license
has_contributingno
has_issue_templateno
has_code_of_conductno
has_pull_request_template

Sostenibilidad y Gobernanza

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

62Moderado · 24% del índice global
Cómo se puntúa
9/54Factor bus — la mitad de los commits recae en 1 contribuyente(s)
1.4/22.5Distribución de commits — el principal contribuyente firma el 94% de los commits
6.8/13.5Amplitud de contribuyentes — 5 contribuyentes
10/10OpenSSF Scorecard: Contributors — project has 7 contributing companies or organizations
Datos de entrada utilizados
bus_factor1
contributors_sampled5
top_contributor_share0,936
Cómo se puntúa
45.7/46.8Resolución de issues — 98% de issues cerradas
33.3/38.3Aceptación de PR — 47/54 PR decididos fusionados
3/15OpenSSF Scorecard: Code-Review — Found 7/28 approved changesets -- score normalized to 2
Datos de entrada utilizados
merged_prs47
open_issues1
closed_issues45
issue_closed_ratio0,978
closed_unmerged_prs7
Cómo se puntúa
30/30Respaldo de la propiedad — propiedad de una organización
0/20Dominio verificado
12.1/25Alcance del propietario — 47 seguidores de stellarlinkco
10.8/25Trayectoria — 14 repos públicos, cuenta de ~1 años
Datos de entrada utilizados
followers47
owner_typeOrganization
is_verified
owner_loginstellarlinkco
public_repos14
account_age_days401
Cómo se puntúa
25/25Publicado y resoluble — 1 paquete(s) en go
35/35Recencia de publicación — última publicación hace 5 días
20/20Historial de versiones — 32 versiones en el registro
20/20No obsoleto — activo, ni obsoleto ni retirado
Datos de entrada utilizados
packagesgithub.com/stellarlinkco/agentsdk-go
ecosystemsgo
any_deprecatedno
min_days_since_publish5

Calidad de Ingeniería

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

89Excelente · 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
9.6/9.6Hooks de pre-commit
6.4/6.4.editorconfig
18/20OpenSSF Scorecard: CI-Tests — 11 out of 12 merged PRs checked by a CI test -- score normalized to 9
Datos de entrada utilizados
has_ci
has_tests
has_editorconfig
has_linter_config
has_precommit_config
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?

44En 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
2.2/2.5CI-Tests — 11 out of 12 merged PRs checked by a CI test -- score normalized to 9
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
1.5/7.5Code-Review — Found 7/28 approved changesets -- score normalized to 2
2.5/2.5Contributors — project has 7 contributing companies or organizations
10/10Dangerous-Workflow — no dangerous workflow patterns detected
7.5/7.5Dependency-Update-Tool — update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5Licencia — license file detected
5.2/7.5Maintained — 8 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 7
0/5Packaging — sin datos
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
2/5Security-Policy — security policy file detected
0/7.5Signed-Releases — sin datos
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
0/7.5Vulnerabilities — 19 existing vulnerabilities detected
Datos de entrada utilizados
sourceopenssf_scorecard
checks_evaluated16
scorecard_versionv5.5.0
checks_inconclusive2
scorecard_aggregate4,4
Excluidos de la puntuación (sin datos o no aplicable): packaging, signed_releases. Los pesos restantes se han renormalizado.

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.

82Bueno · 0% del índice global
Cómo se puntúa
45/45Instrucciones para agentes — AGENTS.md, CLAUDE.md, test/integration/testdata/.agents/agents/test-agent/AGENT.md
0/15Documentación legible por máquinas (llms.txt)
40/40Historial de commits legible — 60 de 61 commits humanos declaran su intención (asunto estructurado o cuerpo explicativo)
Datos de entrada utilizados
has_llms_txtno
legible_history_share0,984
agent_instruction_filesAGENTS.md, CLAUDE.md, test/integration/testdata/.agents/agents/test-agent/AGENT.md
agent_instruction_max_bytes10.509
Cómo se puntúa
18/18Arranque con un solo comando — Makefile
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 — Dockerfile, lockfile
0/10Práctica demostrada con agentes — ningún commit con autoría de agente entre los últimos 100
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_dockerfile
typed_language
bootstrap_filesMakefile
has_devcontainerno
has_linter_config
typecheck_configs
agent_commit_share0
toolchain_manifestsgo.mod
dependency_bot_commit_share0,01
Cómo se puntúa
45/45Código verificable por tipos — Go (tipado estático)
55/55Tamaños de archivo manejables — 0/378 archivos fuente de más de 60 KB
Datos de entrada utilizados
primary_languageGo
largest_source_bytes27.894
source_files_sampled378
oversized_source_files0
Cómo se puntúa
0/40Esquema de API (OpenAPI/GraphQL/proto)
20/20Servidor MCP
40/40Ejemplos ejecutables — demos, examples
Datos de entrada utilizados
example_dirsdemos, examples
has_mcp_signal
api_schema_files

Datos clave

156estrellas de GitHub
5contribuidores
275commits en los últimos 12 meses
5días desde el último push
35versiones publicadas
1factor bus
1issues abiertas
Goecosistemas de paquetes

Advertencias de recopilación de datos

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token
  • GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Más detalle

Historial de estrellas y forks 0 ★ / 27 ⇿
0Estrellas
27Forks
31Versiones

Cuándo se añadió cada estrella y fork, recopilado de GitHub y agrupado por día. El crecimiento acumulado se sitúa justo encima de las adiciones diarias que lo componen, de modo que ambos se leen en conjunto: la acumulación orgánica sostenida no se parece en nada a un pico abrupto y efímero. Cuando esa diferencia es medible, se informa como autenticidad del crecimiento.

05101520252542025-122026-032026-07
Mayor 1Menor 8Parche 22
OpenSSF Scorecard 4.4 / 10
4.4agregado

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-22 20:51 UTC

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
9CI-Tests11 out of 12 merged PRs checked by a CI test -- score normalized to 9
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
2Code-ReviewFound 7/28 approved changesets -- score normalized to 2
10Contributorsproject has 7 contributing companies or organizations
10Dangerous-Workflowno dangerous workflow patterns detected
10Dependency-Update-Toolupdate tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
7Maintained8 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 7
n/dPackagingpackaging workflow not detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
0SASTSAST tool is not run on all commits -- score normalized to 0
4Security-Policysecurity policy file detected
n/dSigned-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
0Vulnerabilities19 existing vulnerabilities detected
Dependencias directas 13
RegistroPaqueteRestricción de versiónManifiesto
Gogithub.com/anthropics/anthropic-sdk-gov1.18.0go.mod
Gogithub.com/bmatcuk/doublestar/v4v4.9.1go.mod
Gogithub.com/fsnotify/fsnotifyv1.9.0go.mod
Gogithub.com/google/uuidv1.6.0go.mod
Gogithub.com/modelcontextprotocol/go-sdkv1.1.0go.mod
Gogithub.com/openai/openai-gov1.12.0go.mod
Gogithub.com/stretchr/testifyv1.11.1go.mod
Gogo.opentelemetry.io/otelv1.40.0go.mod
Gogo.opentelemetry.io/otel/exporters/otlp/otlptracev1.40.0go.mod
Gogo.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttpv1.40.0go.mod
Gogo.opentelemetry.io/otel/sdkv1.40.0go.mod
Gogo.opentelemetry.io/otel/tracev1.40.0go.mod
Gogopkg.in/yaml.v3v3.0.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": 49036,
      "has_wiki": true,
      "homepage": null,
      "languages": {
        "Go": 1525154,
        "HTML": 11567,
        "Shell": 5083,
        "Makefile": 1190,
        "Dockerfile": 1015
      },
      "pushed_at": "2026-07-17T13:08:32Z",
      "created_at": "2025-11-15T16:41:25Z",
      "owner_type": "Organization",
      "updated_at": "2026-07-17T12:52:31Z",
      "description": "Build AI agents in light speed",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "main",
      "license_spdx_raw": "MIT",
      "primary_language": "Go",
      "significant_languages": [
        "Go"
      ]
    },
    "owner": {
      "blog": "https://stellarlink.co",
      "name": "重庆星纬智联 stellarlink.co",
      "type": "Organization",
      "login": "stellarlinkco",
      "company": null,
      "location": "China",
      "followers": 47,
      "avatar_url": "https://avatars.githubusercontent.com/u/216462265?v=4",
      "created_at": "2025-06-16T01:18:41Z",
      "is_verified": null,
      "public_repos": 14,
      "account_age_days": 401
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v1.2.1",
          "kind": "patch",
          "published_at": "2026-07-17T13:08:40Z"
        },
        {
          "tag": "v1.2.0",
          "kind": "minor",
          "published_at": "2026-05-09T15:02:50Z"
        },
        {
          "tag": "v1.1.0",
          "kind": "minor",
          "published_at": "2026-04-07T05:26:02Z"
        },
        {
          "tag": "v1.0.0",
          "kind": "major",
          "published_at": "2026-03-22T13:28:58Z"
        },
        {
          "tag": "v0.9.5",
          "kind": "patch",
          "published_at": "2026-03-04T05:17:12Z"
        },
        {
          "tag": "v0.9.3",
          "kind": "patch",
          "published_at": "2026-02-27T14:17:32Z"
        },
        {
          "tag": "v0.9.2",
          "kind": "patch",
          "published_at": "2026-02-13T15:06:05Z"
        },
        {
          "tag": "v0.9.1",
          "kind": "patch",
          "published_at": "2026-02-10T14:17:14Z"
        },
        {
          "tag": "v0.9.0",
          "kind": "minor",
          "published_at": "2026-02-10T08:28:17Z"
        },
        {
          "tag": "v0.8.4",
          "kind": "patch",
          "published_at": "2026-02-10T03:15:47Z"
        },
        {
          "tag": "v0.8.3",
          "kind": "patch",
          "published_at": "2026-02-08T15:13:08Z"
        },
        {
          "tag": "v0.8.2",
          "kind": "patch",
          "published_at": "2026-02-08T09:21:58Z"
        },
        {
          "tag": "v0.8.1",
          "kind": "patch",
          "published_at": "2026-02-08T09:12:09Z"
        },
        {
          "tag": "v0.8.0",
          "kind": "minor",
          "published_at": "2026-02-07T10:47:59Z"
        },
        {
          "tag": "v0.7.1",
          "kind": "patch",
          "published_at": "2026-02-06T15:23:41Z"
        },
        {
          "tag": "v0.7.0",
          "kind": "minor",
          "published_at": "2026-02-06T06:58:10Z"
        },
        {
          "tag": "v0.6.8",
          "kind": "patch",
          "published_at": "2026-02-04T02:01:12Z"
        },
        {
          "tag": "v0.6.7",
          "kind": "patch",
          "published_at": "2026-02-03T14:23:20Z"
        },
        {
          "tag": "v0.6.6",
          "kind": "patch",
          "published_at": "2026-01-26T07:50:28Z"
        },
        {
          "tag": "v0.6.5",
          "kind": "patch",
          "published_at": "2026-01-26T07:32:23Z"
        },
        {
          "tag": "v0.6.4",
          "kind": "patch",
          "published_at": "2026-01-03T14:27:02Z"
        },
        {
          "tag": "v0.6.3",
          "kind": "patch",
          "published_at": "2025-12-30T07:13:21Z"
        },
        {
          "tag": "v0.6.2",
          "kind": "patch",
          "published_at": "2025-12-29T16:13:54Z"
        },
        {
          "tag": "v0.6.1",
          "kind": "patch",
          "published_at": "2025-12-29T06:28:10Z"
        },
        {
          "tag": "v0.6.0",
          "kind": "minor",
          "published_at": "2025-12-27T09:20:08Z"
        },
        {
          "tag": "v0.5.2",
          "kind": "patch",
          "published_at": "2025-12-26T03:56:06Z"
        },
        {
          "tag": "v0.5.1",
          "kind": "patch",
          "published_at": "2025-12-24T09:57:32Z"
        },
        {
          "tag": "v0.5.0",
          "kind": "minor",
          "published_at": "2025-12-23T03:37:14Z"
        },
        {
          "tag": "v0.4.3",
          "kind": "patch",
          "published_at": "2025-12-22T14:56:44Z"
        },
        {
          "tag": "v0.4.2",
          "kind": "patch",
          "published_at": "2025-12-18T15:35:36Z"
        },
        {
          "tag": "v0.4.1",
          "kind": "patch",
          "published_at": "2025-12-18T06:40:15Z"
        },
        {
          "tag": "v0.4.0",
          "kind": "minor",
          "published_at": "2025-12-12T16:24:50Z"
        },
        {
          "tag": "0.3",
          "kind": "other",
          "published_at": "2025-11-26T14:58:51Z"
        },
        {
          "tag": "0.2",
          "kind": "other",
          "published_at": "2025-11-23T15:51:29Z"
        },
        {
          "tag": "0.1",
          "kind": "other",
          "published_at": "2025-11-22T09:09:59Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "00317e1ccbb7738abbd86b78869f0cb1d573efc4",
          "body": "Bumps [actions/setup-go](https://github.com/actions/setup-go) from 5 to 7.\n- [Release notes](https://github.com/actions/setup-go/releases)\n- [Commits](https://github.com/actions/setup-go/compare/v5...v7)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-go\n  dependency-version: '7'\n  depen\n[…]\nirect:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(deps): bump actions/setup-go from 5 to 7 (#110)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-17T12:52:24Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c1913a851d9db0b586d2cc13820a44d7ec024b19",
          "body": null,
          "is_bot": false,
          "headline": "docs(readme): document engineering workflow",
          "author_name": "ben",
          "author_login": "cexll",
          "committed_at": "2026-05-15T14:55:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "520402aabfad73cdbabb5e3efec54c0a62f8f860",
          "body": null,
          "is_bot": false,
          "headline": "chore(eng): initialize engineering guardrails",
          "author_name": "ben",
          "author_login": "cexll",
          "committed_at": "2026-05-15T14:52:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2729de26949071307e392b76cf1e2310150279db",
          "body": null,
          "is_bot": false,
          "headline": "fix segmented parallel tool execution",
          "author_name": "ben",
          "author_login": "cexll",
          "committed_at": "2026-05-15T14:28:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a410380267f66829f32b70356f6579b9bf9c9122",
          "body": "fix(model): replace \".\" placeholder with zero-width space for empty C…",
          "is_bot": false,
          "headline": "Merge pull request #97 from etrace-io/zerowidthspace",
          "author_name": "ben",
          "author_login": "cexll",
          "committed_at": "2026-05-15T13:17:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9d876f319ea107d9aaefaea4823c95848dad11c3",
          "body": "…ontent\n\nOpenAI requires non-empty Content in user messages. Using visible\n\".\" pollutes the UI and creates feedback loops when the model\nechoes it back. Switch to ​ (zero-width space) instead.",
          "is_bot": false,
          "headline": "fix(model): replace \".\" placeholder with zero-width space for empty C…",
          "author_name": "codingcrush",
          "author_login": "CodingCrush",
          "committed_at": "2026-05-14T06:04:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6e7c9ca39f0211415939886ab2bd813153074b8f",
          "body": "* feat(api): expose session history for external persistence\n\n* fix(api): harden session history persistence API\n\nReturn session history as immutable snapshots and surface loader failures so callers do not silently lose restored context.\n\nGenerated with SWE-Agent.ai\n\nCo-Authored-By: SWE-Agent.ai <noreply@swe-agent.ai>\n\n---------\n\nCo-authored-by: codingcrush <codingcrush@163.com>\nCo-authored-by: SWE-Agent.ai <noreply@swe-agent.ai>",
          "is_bot": false,
          "headline": "fix(api): harden session history persistence (#94)",
          "author_name": "ben",
          "author_login": "cexll",
          "committed_at": "2026-05-09T14:57:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e82fc4a62b0f8314942c6face0ca30f0ec984ac3",
          "body": "…emantics (#93)",
          "is_bot": false,
          "headline": "feat(glob): replace filepath.Glob with doublestar for bash-style ** s…",
          "author_name": "CodingCrush",
          "author_login": "CodingCrush",
          "committed_at": "2026-05-09T13:58:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "883f33eb1f01b6f2083326b1668452ab73a17bb3",
          "body": null,
          "is_bot": false,
          "headline": "fix(ci): stabilize windows stop hook test",
          "author_name": "ben",
          "author_login": "cexll",
          "committed_at": "2026-04-07T05:15:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "be6348c0a0844e89b5bcbdbae3713e51e808cf33",
          "body": null,
          "is_bot": false,
          "headline": "fix(ci): resolve errcheck failures",
          "author_name": "ben",
          "author_login": "cexll",
          "committed_at": "2026-04-07T03:25:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "24967d114caddedb62178949b2ed79183c07f357",
          "body": null,
          "is_bot": false,
          "headline": "feat(v2.2): add teams orchestration",
          "author_name": "ben",
          "author_login": "cexll",
          "committed_at": "2026-04-07T03:17:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9e98a197d97f4f0b38348d08772980c4f72813a2",
          "body": "Group A — Agent Loop Reliability:\n- A1: micro-compaction — strips reasoning blocks, media, truncates tool\n  results at zero LLM cost (pkg/api/micro_compact.go)\n- A2: token budget + diminishing returns detection (pkg/api/token_budget.go)\n- A3: tool concurrency partitioning — read-only/concurrency-saf\n[…]\nkg/hooks/types.go)\nNew example: examples/13-v21-features — all features verified with\nstub models, no API key required\n\nGenerated with SWE-Agent.ai\n\nCo-Authored-By: SWE-Agent.ai <noreply@swe-agent.ai>",
          "is_bot": false,
          "headline": "feat(v2.1): implement all 17 AEC features",
          "author_name": "ben",
          "author_login": "cexll",
          "committed_at": "2026-04-07T02:44:18Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4b0950903f6dfbc80703a93b553479a636bcc980",
          "body": "os.WriteFile on Linux emits two fsnotify events (truncate + write).\nWithout debouncing, the watcher fires on truncate and reads an empty\nfile. Add 50ms debounce via time.AfterFunc so the reload happens after\nthe write completes.\n\nFixes flaky TestRulesLoader_WatchChanges in CI.\n\nGenerated with SWE-Agent.ai\n\nCo-Authored-By: SWE-Agent.ai <noreply@swe-agent.ai>",
          "is_bot": false,
          "headline": "fix(config): debounce rules watcher to prevent reading truncated files",
          "author_name": "ben",
          "author_login": "cexll",
          "committed_at": "2026-03-20T03:05:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8f137928662ef893af10be8c5c1987bca17d9ff1",
          "body": "- Delete RELEASE_NOTES.md (outdated v1 content, consolidated into CHANGELOG)\n- Add v2.0.0 entry covering module rename, package consolidation, API changes\n- Remove duplicate Chinese entries from historical versions\n- Clean up old entries for consistency\n\nGenerated with SWE-Agent.ai\n\nCo-Authored-By: SWE-Agent.ai <noreply@swe-agent.ai>",
          "is_bot": false,
          "headline": "docs: remove RELEASE_NOTES.md, update CHANGELOG.md for v2",
          "author_name": "ben",
          "author_login": "cexll",
          "committed_at": "2026-03-20T02:31:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e8ea5c74de7be63849ec68013ad28cdddcd3923b",
          "body": "Fix outdated code examples in Chinese README to match current v2 API:\n- model.NewAnthropicProvider() → &model.AnthropicProvider{}\n- middleware.Middleware{} → middleware.Funcs{}\n- RunStream without error return → with error return\n- String event types → typed constants (api.EventContentBlockDelta)\n- \n[…]\nAutoCompact section and HTTP event types\n- Add Trace/SmartDefaults doc links\n- Add Features/Examples section structure\n\nGenerated with SWE-Agent.ai\n\nCo-Authored-By: SWE-Agent.ai <noreply@swe-agent.ai>",
          "is_bot": false,
          "headline": "docs: sync README_zh.md with v2 API changes",
          "author_name": "ben",
          "author_login": "cexll",
          "committed_at": "2026-03-20T02:19:33Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ee0cbb185434249f9d5228a7c190556a342b3ebe",
          "body": "…n, dead code removal (#90)\n\n* chore: rename module to github.com/stellarlinkco/agentsdk-go\n\n* docs: update module path, .agents/ config refs, and AGENTS.md for v2\n\n* feat(v2): remove deprecated packages (acp, agent, core, prompts, tasks, commands)\n\n* feat(v2): remove pkg/security (absorbed into pkg\n[…]\nv2): drop approval queue doc\n\n* fix(ci): lint clean + stabilize tests\n\n* fix(config): stabilize watcher test; honor HOME\n\n* chore(v2): meet PRD metrics; trim tool docs\n\n* docs(v2): add upgrading guide",
          "is_bot": false,
          "headline": "feat(v2): SDK v2 simplification — module rename, package consolidatio…",
          "author_name": "ben",
          "author_login": "cexll",
          "committed_at": "2026-03-20T02:10:24Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6a9179b60a1f5f53ba8416d3075e463146ade9a3",
          "body": "…… (#87)\n\n* fix:After activating the approval queue, there is a problem with the whitelist of approval commands.\n\n* fix: align permission approvals with command-level cache\n\n* docs: update approval queue semantics\n\n* docs: clarify ApprovalWhitelistTTL semantics\n\n* test: make approval expiration dete\n[…]\nved records with whitelist\n\n* fix(security): don't reuse auto-approved records as command approvals\n\n---------\n\nCo-authored-by: zhanbei <zhanbei@databuff.com>\nCo-authored-by: ben <evanxian9@gmail.com>",
          "is_bot": false,
          "headline": "fix:After activating the approval queue, there is a problem with the …",
          "author_name": "desmond",
          "author_login": "zhanbei1",
          "committed_at": "2026-03-15T15:57:20Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "bc2681cc9d3e089ea172552d7b2d60cc553883ea",
          "body": "* fix(compact): preserve tool transactions during compaction\n\n* fix(compact): keep preserved user text after summary\n\n* fix(rollout): avoid compact event filename collisions\n\n---------\n\nCo-authored-by: ben <evanxian9@gmail.com>",
          "is_bot": false,
          "headline": "fix(compact): preserve tool transactions during compaction (#85)",
          "author_name": "LiHtCocoa",
          "author_login": "LiHtCocoa",
          "committed_at": "2026-03-15T12:21:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "64ce21e1c93df2a22e450eec10e01fc7815b395b",
          "body": "* test(api): fix hook-based tests on Windows\n\n* feat(acp): add sdk-first adapter, session replay, and cli mode\n\n* test(acp): add in-process dual-end protocol coverage\n\n* refactor(acp): reuse api history persistence helpers\n\n* feat(acp): enforce ask/code/architect mode semantics\n\n* feat(acp): wire sd\n[…]\n* feat(acp): bridge Edit via client fs capabilities\n\n* fix(lint): address errcheck and gofmt issues\n\n* fix(acp): harden sessions and test timeouts\n\n---------\n\nCo-authored-by: ben <evanxian9@gmail.com>",
          "is_bot": false,
          "headline": "feat(acp): add SDK-first ACP adapter with stable session APIs (#80)",
          "author_name": "yoke",
          "author_login": "yoke233",
          "committed_at": "2026-03-04T04:37:58Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "898ff895f58ae6099d96c23c4784bdbc9947e101",
          "body": "* tool/bash: unblock stream readers after timeout\n\n* tool/bash: fix stream timeout unblock without output race",
          "is_bot": false,
          "headline": "tool/bash: prevent StreamExecute hang after timeout/cancel (#82)",
          "author_name": "LiHtCocoa",
          "author_login": "LiHtCocoa",
          "committed_at": "2026-03-04T04:15:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "88413ee7557b9eb4404174a05165f65ce937f50f",
          "body": null,
          "is_bot": false,
          "headline": "message: count reasoning and tool result in naive counter (#81)",
          "author_name": "LiHtCocoa",
          "author_login": "LiHtCocoa",
          "committed_at": "2026-03-04T04:11:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a96b9897fb1a5a8f88aae98016d1a8522e9c33ef",
          "body": "* model/openai: encode tool arguments as JSON object\n\nDefault assistant tool call function.arguments to {} when Arguments is nil or marshaling fails.\n\nFixes #78.\n\n* test: fix errcheck in openai e2e test\n\n* test(middleware): close trace middleware",
          "is_bot": false,
          "headline": "Fix OpenAI tool call arguments JSON encoding (#79)",
          "author_name": "ben",
          "author_login": "cexll",
          "committed_at": "2026-02-27T14:12:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fb19b18ca7fdfb18ca72ce84910b5e9b4ddf6957",
          "body": "- Increase default maxCommandBytes from 4096 to 32768\n- Increase default maxArgs from 64 to 512\n- Add SetMaxCommandBytes/SetMaxArgs on Validator\n- Add SetCommandLimits on Sandbox and BashTool\n- Enables code-generation agents to write files via bash\n\nGenerated with SWE-Agent.ai\n\nCo-Authored-By: SWE-Agent.ai <noreply@swe-agent.ai>",
          "is_bot": false,
          "headline": "feat(security): configurable command length and argument limits",
          "author_name": "ben",
          "author_login": "cexll",
          "committed_at": "2026-02-16T14:49:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f58b34e4d96a36b1ea5c1d2eaff40f8fa1aee1ba",
          "body": "- OpenTelemetry: 1.39.0 → 1.40.0\n- gRPC: 1.77.0 → 1.78.0\n- grpc-gateway: 2.27.3 → 2.27.7\n- Add openai-go v1.12.0\n- Update golang.org/x packages (net, oauth2, sys, text, tools)\n\nGenerated with SWE-Agent.ai\n\nCo-Authored-By: SWE-Agent.ai <noreply@swe-agent.ai>",
          "is_bot": false,
          "headline": "chore(deps): update dependencies in examples/08-askuserquestion",
          "author_name": "ben",
          "author_login": "cexll",
          "committed_at": "2026-02-13T15:05:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "75bfc7fbbc4eb874db57d9e4d83f2e5437cb487e",
          "body": "- Hook tests: write .bat scripts on Windows with cmd-compatible syntax\n  (exit /b, echo, findstr) instead of Unix shell scripts\n- executor_additional_test: use \"cd >&2\" on Windows instead of \"pwd >&2\"\n- hooks_adapter_test/options_more_test: use \"&\" command chaining and\n  \"exit /b\" for inline command\n[…]\ne.go: add Close() to release open file handles, fixing Windows\n  TempDir cleanup failure due to file locking semantics\n\nGenerated with SWE-Agent.ai\n\nCo-Authored-By: SWE-Agent.ai <noreply@swe-agent.ai>",
          "is_bot": false,
          "headline": "fix: make tests cross-platform for Windows CI",
          "author_name": "ben",
          "author_login": "cexll",
          "committed_at": "2026-02-13T14:08:49Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2cc12940d9af68b323fb0f80df2b73fff80d67fe",
          "body": "Split the single build job into test (ubuntu/macos/windows matrix)\nand lint-and-coverage (ubuntu-only) to verify cross-platform\ncompilation and test correctness.\n\nGenerated with SWE-Agent.ai\n\nCo-Authored-By: SWE-Agent.ai <noreply@swe-agent.ai>",
          "is_bot": false,
          "headline": "ci: add multi-platform test matrix for macOS and Windows",
          "author_name": "ben",
          "author_login": "cexll",
          "committed_at": "2026-02-13T13:32:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9698f31be21aea07e5c08e93a2f596a246c159ce",
          "body": "…thForWalk\n\nRefactor buildResponsesMultimodalInput to eliminate 5 duplicate switch\ncases via responsesRoleForMessage helper. Add tests for system/developer/\nunknown role branches, TaskStore.Close no-op, and splitPathForWalk.\n\nGenerated with SWE-Agent.ai\n\nCo-Authored-By: SWE-Agent.ai <noreply@swe-agent.ai>",
          "is_bot": false,
          "headline": "test: improve coverage for multimodal roles, TaskStore.Close, splitPa…",
          "author_name": "ben",
          "author_login": "cexll",
          "committed_at": "2026-02-13T12:33:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "45f00e958d1ec7fe16c2eb4a43568074eebeaa99",
          "body": "Remove trailing blank lines flagged by golangci-lint gofmt check.\n\nGenerated with SWE-Agent.ai\n\nCo-Authored-By: SWE-Agent.ai <noreply@swe-agent.ai>",
          "is_bot": false,
          "headline": "style: fix gofmt formatting issues",
          "author_name": "ben",
          "author_login": "cexll",
          "committed_at": "2026-02-13T12:09:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "34296d6aeb4a76ee1288b1565758a564ec5095fb",
          "body": "The looksLikeScriptPath function was removed when newShellCommand was\nsimplified to a 2-branch GOOS check. The test referencing it caused\na CI typecheck failure.\n\nGenerated with SWE-Agent.ai\n\nCo-Authored-By: SWE-Agent.ai <noreply@swe-agent.ai>",
          "is_bot": false,
          "headline": "fix(ci): remove stale TestLooksLikeScriptPath test",
          "author_name": "ben",
          "author_login": "cexll",
          "committed_at": "2026-02-13T12:06:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8047f8b20b79770e8ede86faee158553aec62599",
          "body": "feat(mcp): add tool filters, per-tool timeouts, and review fixes",
          "is_bot": false,
          "headline": "Merge pull request #77 from cexll/feat/mcp-tool-filters",
          "author_name": "ben",
          "author_login": "cexll",
          "committed_at": "2026-02-13T12:03:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b5e55b89f5deb43e452df0e6dab56694d205428a",
          "body": null,
          "is_bot": false,
          "headline": "feat(mcp): add tool filters/timeouts and address review regressions",
          "author_name": "yaguang",
          "author_login": "yoke233",
          "committed_at": "2026-02-13T12:02:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5888c5cc947677e860cdf7cc476d50200d30efaa",
          "body": "feat(model): add multimodal content block support for OpenAI",
          "is_bot": false,
          "headline": "Merge pull request #76 from cexll/feat/openai-multimodal",
          "author_name": "ben",
          "author_login": "cexll",
          "committed_at": "2026-02-13T12:01:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2d9bb6c9178b397b19e503547833a111a8aa4255",
          "body": "feat(tasks): inject task store and allow custom subagent types",
          "is_bot": false,
          "headline": "Merge pull request #75 from cexll/feat/taskstore-interface",
          "author_name": "ben",
          "author_login": "cexll",
          "committed_at": "2026-02-13T12:00:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ae8a96adb367a33b64cb802e25d93fb54c0fffac",
          "body": "fix(security): split openNoFollow by platform + review fixes",
          "is_bot": false,
          "headline": "Merge pull request #74 from cexll/fix/windows-security",
          "author_name": "ben",
          "author_login": "cexll",
          "committed_at": "2026-02-13T12:00:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7fb692070b03d36f3c1b71aa3f71a557d1331203",
          "body": "- Simplify newShellCommand to 2-branch GOOS check\n- Document Windows openNoFollow security gap\n- Fix variable shadowing in prompts/hooks.go and skills.go\n- Revert trace.go performance regression\n\nGenerated with SWE-Agent.ai\n\nCo-Authored-By: SWE-Agent.ai <noreply@swe-agent.ai>",
          "is_bot": false,
          "headline": "fix: address review issues for Windows security PR",
          "author_name": "ben",
          "author_login": "cexll",
          "committed_at": "2026-02-13T11:26:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b337c18ae6566fae0671efec901071ee0a58d033",
          "body": "- Add tool role handling in buildResponsesMultimodalInput\n- Document openAIImageURL default media type\n- Add test for tool message preservation\n\nGenerated with SWE-Agent.ai\n\nCo-Authored-By: SWE-Agent.ai <noreply@swe-agent.ai>",
          "is_bot": false,
          "headline": "fix: handle tool messages in multimodal input and document defaults",
          "author_name": "ben",
          "author_login": "cexll",
          "committed_at": "2026-02-13T11:22:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2171272be66fb90657a7ff4ca2ee9a6a847a9151",
          "body": "- Add Snapshot() to Store interface for completeness\n- Remove redundant initLocked() in NewTaskStoreFromSnapshot\n- Document Close() no-op rationale\n\nGenerated with SWE-Agent.ai\n\nCo-Authored-By: SWE-Agent.ai <noreply@swe-agent.ai>",
          "is_bot": false,
          "headline": "fix: improve TaskStore interface design",
          "author_name": "ben",
          "author_login": "cexll",
          "committed_at": "2026-02-13T11:20:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c7e781dfc7aac1bba718cb5db1d7462b0ef99959",
          "body": null,
          "is_bot": false,
          "headline": "fix(model): map ContentBlocks images for OpenAI chat and responses",
          "author_name": "yaguang",
          "author_login": "yoke233",
          "committed_at": "2026-02-13T11:16:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7aedfeea987491e810775a20aef7930f994aa38b",
          "body": null,
          "is_bot": false,
          "headline": "feat(tasks): inject task store and allow custom subagent types",
          "author_name": "yaguang",
          "author_login": "yoke233",
          "committed_at": "2026-02-13T11:16:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "58f5d1f4ffccdcfdf93c65dffea94a0db2740129",
          "body": null,
          "is_bot": false,
          "headline": "fix(windows): stabilize cross-platform paths and tests",
          "author_name": "yaguang",
          "author_login": "yoke233",
          "committed_at": "2026-02-13T11:16:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "671cdc897a76c358acc0406d45c2d7d683bbb7e1",
          "body": null,
          "is_bot": false,
          "headline": "fix(security): normalize windows paths in resolver and matcher",
          "author_name": "yaguang",
          "author_login": "yoke233",
          "committed_at": "2026-02-13T11:16:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a8cec454d31b95123a7786ebb64667e9b4a3efea",
          "body": null,
          "is_bot": false,
          "headline": "fix(security): split openNoFollow by platform",
          "author_name": "yaguang",
          "author_login": "yoke233",
          "committed_at": "2026-02-13T11:16:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e51f03ceb22d22258ea5b8f5c55ca99f59762e6c",
          "body": "Generated with SWE-Agent.ai\n\nCo-Authored-By: SWE-Agent.ai <noreply@swe-agent.ai>",
          "is_bot": false,
          "headline": "docs(readme): translate Chinese tool registration notes to English",
          "author_name": "ben",
          "author_login": "cexll",
          "committed_at": "2026-02-11T12:02:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "df5c5f035fe3d4e454fede0d7e7edd0f629c8477",
          "body": "The 05-embed → 06-embed rename left .gitignore still referencing the old\npath, so examples/06-embed/.claude/settings.json was ignored and the\ngo:embed directive failed in CI.\n\nGenerated with SWE-Agent.ai\n\nCo-Authored-By: SWE-Agent.ai <noreply@swe-agent.ai>",
          "is_bot": false,
          "headline": "fix(ci): update .gitignore for renamed 06-embed example",
          "author_name": "ben",
          "author_login": "cexll",
          "committed_at": "2026-02-11T11:59:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c25337ea91a114418d6f3196cb742a8d0a6a7f6f",
          "body": "…ayout\n\nRemove obsolete examples (05-feature-test, 05-multimodel-llm, 06-v0.4.0-features),\nrenumber 05-embed → 06-embed and 05-multimodel → 07-multimodel to make room for\n05-custom-tools, and update all documentation to reflect the new 12-example structure.\n\nGenerated with SWE-Agent.ai\n\nCo-Authored-By: SWE-Agent.ai <noreply@swe-agent.ai>",
          "is_bot": false,
          "headline": "refactor(examples): renumber and consolidate examples to 12-example l…",
          "author_name": "ben",
          "author_login": "cexll",
          "committed_at": "2026-02-11T11:55:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "49b024e33a80e1c0933115bf2e28a3e0aa6fec95",
          "body": "…sages\n\nWhen a user message has both Content (text prompt) and ContentBlocks\n(images/documents), the text was silently dropped during Anthropic API\nconversion. This caused multimodal requests to lose the user's text\ninstruction, making the model unable to understand what to do with the\nattached media.\n\nGenerated with SWE-Agent.ai\n\nCo-Authored-By: SWE-Agent.ai <noreply@swe-agent.ai>",
          "is_bot": false,
          "headline": "fix(model): include text content when ContentBlocks exist in user mes…",
          "author_name": "ben",
          "author_login": "cexll",
          "committed_at": "2026-02-10T14:16:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0d6b28f0450e0ae17bba6520c7dd201aec166c84",
          "body": "…ments\n\nAdd ContentBlocks []ContentBlock alongside existing Content string field\nto support images (base64/URL) and PDF documents in user messages with\nzero breaking changes. When ContentBlocks is non-empty it takes precedence;\nwhen empty, Content is used as before.\n\nChanges across 8 production file\n[…]\napi/runtime_helpers.go: package bridge functions\n- examples/12-multimodal: end-to-end demo (text, base64 image, mixed)\n\nGenerated with SWE-Agent.ai\n\nCo-Authored-By: SWE-Agent.ai <noreply@swe-agent.ai>",
          "is_bot": false,
          "headline": "feat(model): add multimodal content block support for images and docu…",
          "author_name": "ben",
          "author_login": "cexll",
          "committed_at": "2026-02-10T08:27:09Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "babee96c3d04897b4150e4f9438ecf52dacadf10",
          "body": "Apply gofmt to fix struct field alignment in openai.go, interface.go,\nconverter.go, runtime_helpers.go and doc comment formatting in example.\nSuppress errcheck for best-effort reasoning_content JSON extraction.\n\nGenerated with SWE-Agent.ai\n\nCo-Authored-By: SWE-Agent.ai <noreply@swe-agent.ai>",
          "is_bot": false,
          "headline": "fix(ci): resolve gofmt alignment and errcheck lint failures",
          "author_name": "ben",
          "author_login": "cexll",
          "committed_at": "2026-02-10T03:23:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c3c188f5fbf8dc5e29264b48cfef5c6c4831f7eb",
          "body": "Support reasoning_content/thinking blocks for both OpenAI and Anthropic\nproviders. Tested with DeepSeek deepseek-reasoner via both endpoints.",
          "is_bot": false,
          "headline": "Merge PR #72: reasoning_content passthrough for thinking models",
          "author_name": "ben",
          "author_login": "cexll",
          "committed_at": "2026-02-10T03:14:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d09ce72c5a4848f42e6d86e8a440b75bff12f40d",
          "body": "Extract thinking blocks from Anthropic responses into ReasoningContent,\necho them back via NewThinkingBlock in buildAssistantContent, pass through\nunknown model names in mapModelName, and set WithAuthToken for Bearer auth\ncompatibility with DeepSeek's Anthropic endpoint. Add integration tests\nand update example to support --provider anthropic flag.\n\nGenerated with SWE-Agent.ai\n\nCo-Authored-By: SWE-Agent.ai <noreply@swe-agent.ai>",
          "is_bot": false,
          "headline": "feat(model): add Anthropic provider reasoning_content support",
          "author_name": "ben",
          "author_login": "cexll",
          "committed_at": "2026-02-10T03:14:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "80a10f6cf480ef7c2c5a2cd8dc6e024ae036ba4a",
          "body": "…n tests\n\nAdd unit tests verifying ReasoningContent passthrough in CloneMessage,\nconvertMessages, and buildOpenAIAssistantMessage. Add DeepSeek integration\ntests (non-streaming, streaming, multi-turn) and an example demonstrating\nreasoning_content capture and display.\n\nGenerated with SWE-Agent.ai\n\nCo-Authored-By: SWE-Agent.ai <noreply@swe-agent.ai>",
          "is_bot": false,
          "headline": "test(model): add reasoning_content unit tests and DeepSeek integratio…",
          "author_name": "ben",
          "author_login": "cexll",
          "committed_at": "2026-02-10T02:20:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f9b20da710419182df910442fd2c2b60266237e2",
          "body": "Thinking models (DeepSeek-R1, Kimi k2.5, kimi-k2-thinking) return a\nreasoning_content field in assistant messages. Some providers like\nMoonshot require this field echoed back in conversation history,\notherwise multi-turn requests fail with 400 errors.\n\nAdd ReasoningContent to model.Message and message.Message, threading\nit through capture, history storage, and re-sending via SetExtraFields.\n\nBackward compatible: zero-value empty string, non-thinking models\nunaffected.",
          "is_bot": false,
          "headline": "feat(model): support reasoning_content passthrough for thinking models",
          "author_name": "LiHtCocoa",
          "author_login": "LiHtCocoa",
          "committed_at": "2026-02-09T16:11:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "83933ec93a9d5db4d51a085e7b891ef5e3a16c06",
          "body": "Ensures the configured API key overrides any ANTHROPIC_AUTH_TOKEN or\nANTHROPIC_API_KEY from the environment when constructing the client.\n\nGenerated with SWE-Agent.ai\n\nCo-Authored-By: SWE-Agent.ai <noreply@swe-agent.ai>",
          "is_bot": true,
          "headline": "fix(model): explicitly set API key in Anthropic client request options",
          "author_name": "swe-agent[bot]",
          "author_login": null,
          "committed_at": "2026-02-08T15:12:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7012894efd553a44ea781290aeeed9702ef88214",
          "body": "SA1012 staticcheck flagged passing nil Context to Complete() in\nCompleteStream test stubs. Use context.Background() instead.\n\nGenerated with SWE-Agent.ai\n\nCo-Authored-By: SWE-Agent.ai <noreply@swe-agent.ai>",
          "is_bot": true,
          "headline": "fix(ci): replace nil context with context.Background() in test stubs",
          "author_name": "swe-agent[bot]",
          "author_login": null,
          "committed_at": "2026-02-08T09:16:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ab517e53e391879d8987e0cbaf59fa8733821058",
          "body": "…roxies\n\nAPI proxies may return empty tool_use.input ({}) in non-streaming mode\nwhile streaming mode works correctly. Switch Generate() and compactor\nto use CompleteStream internally, which is also the production-standard\npath for the Anthropic API.\n\nChanges:\n- pkg/api/agent.go: Generate() uses Comp\n[…]\nnthropicProvider for AUTH_TOKEN fallback\n- examples/09-task-system: remove separate go.mod, integrate into main module\n\nGenerated with SWE-Agent.ai\n\nCo-Authored-By: SWE-Agent.ai <noreply@swe-agent.ai>",
          "is_bot": true,
          "headline": "fix(api): use streaming by default to fix empty tool_use.input from p…",
          "author_name": "swe-agent[bot]",
          "author_login": null,
          "committed_at": "2026-02-08T09:10:53Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a922ba036e0e37d325034af2a8fe5ca50be53790",
          "body": "…sponses API\n\n- Add OpenAI Chat Completions API implementation (pkg/model/openai.go)\n- Add OpenAI Responses API implementation (pkg/model/openai_responses.go)\n- Add comprehensive unit tests for both APIs\n- Add OpenAIProvider with double-checked locking for thread-safe caching\n- Fix tool call orderin\n[…]\n logic tests\n- Add multi-LLM example (examples/05-multimodel-llm)\n- Update .gitignore to include trace-out directories\n\nGenerated with SWE-Agent.ai\n\nCo-Authored-By: SWE-Agent.ai <noreply@swe-agent.ai>",
          "is_bot": true,
          "headline": "feat(model): add OpenAI provider support with Chat Completions and Re…",
          "author_name": "swe-agent[bot]",
          "author_login": null,
          "committed_at": "2026-02-07T10:45:05Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d8c29fec97f1039711320ae785cfe545e90b457e",
          "body": "- Dockerfile: bump Go 1.23→1.24 to match go.mod, update model name\n- CI: add build step, replace redundant test with race-enabled test\n- hooks: flatten ContextCompacted/ModelSelected payloads (M1)\n- hooks: fix Once dedup when Name is empty, fall back to Command (M2)\n- agent: RunStream SessionEnd emits dynamic reason (M6)\n\nGenerated with SWE-Agent.ai\n\nCo-Authored-By: SWE-Agent.ai <noreply@swe-agent.ai>",
          "is_bot": true,
          "headline": "fix(ci): update CI pipeline and fix hook issues",
          "author_name": "swe-agent[bot]",
          "author_login": null,
          "committed_at": "2026-02-06T15:22:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "01c2171356b3ee27b10bac6e739950c4458aad2a",
          "body": "- Update hooks documentation in CLAUDE.md to reflect new Claude Code spec\n  (exit codes, flat payload, HookOutput, events, ShellHook options)\n- Add .claude/hooks/pre_push_ci.sh: runs golangci-lint + go test before git push\n- Add .claude/settings.json: register PreToolUse hook for Bash tool\n\nGenerated with SWE-Agent.ai\n\nCo-Authored-By: SWE-Agent.ai <noreply@swe-agent.ai>",
          "is_bot": true,
          "headline": "docs(hooks): update CLAUDE.md and add pre-push CI hook",
          "author_name": "swe-agent[bot]",
          "author_login": null,
          "committed_at": "2026-02-06T06:59:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c3726fda73cd3838f619af3fe24693a588aed28f",
          "body": "- Fix gofmt formatting in executor.go, types.go, hooks_adapter_test.go, hooks_bridge_test.go\n- Fix errcheck: check NewSelector and os.ReadFile return values in tests\n- Fix errcheck: check json.Unmarshal return values in tests\n- Fix gosec G306: use 0o700 with nolint for test script helper\n\nGenerated with SWE-Agent.ai\n\nCo-Authored-By: SWE-Agent.ai <noreply@swe-agent.ai>",
          "is_bot": true,
          "headline": "fix(lint): resolve golangci-lint errors for hooks alignment",
          "author_name": "swe-agent[bot]",
          "author_login": null,
          "committed_at": "2026-02-06T06:33:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5aeef81226d029e9fc8dfadaf1327abeaa452796",
          "body": "BREAKING CHANGE: Hook exit code semantics changed from 0=allow/1=deny/2=ask\nto Claude Code spec: 0=success(parse JSON), 2=blocking error, other=non-blocking.\n\nCore changes:\n- Exit codes: 0=success(parse JSON stdout), 2=blocking error(stderr), other=non-blocking(log & continue)\n- JSON output: structu\n[…]\nesence, timeout positivity\n- Examples: updated 10-hooks example with new spec (flat payload, JSON output, async hooks)\n\nGenerated with SWE-Agent.ai\n\nCo-Authored-By: SWE-Agent.ai <noreply@swe-agent.ai>",
          "is_bot": true,
          "headline": "feat(hooks): align hooks implementation with Claude Code specification",
          "author_name": "swe-agent[bot]",
          "author_login": null,
          "committed_at": "2026-02-06T06:17:33Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d65e06e2a2f4065e64abe9b1c09549b67d60edaf",
          "body": "- Fix gofmt formatting issues in multiple files\n- Add proper error checking for type assertions\n- Check return values of Register, ReadFile, Marshal, NewRequest\n- Use context.TODO() instead of nil context in tests\n- Change WriteFile permission from 0644 to 0600 (gosec)\n- Add nolint directive for deprecated mcp.BuildSessionTransport\n- Remove unused equalStringSlices function\n\nGenerated with SWE-Agent.ai\n\nCo-Authored-By: SWE-Agent.ai <noreply@swe-agent.ai>",
          "is_bot": true,
          "headline": "fix(lint): resolve golangci-lint errors for CI",
          "author_name": "swe-agent[bot]",
          "author_login": null,
          "committed_at": "2026-02-04T02:00:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ead74cccf9fccc29483a531eba01e17b0af1d5b1",
          "body": "Generated with SWE-Agent.ai\n\nCo-Authored-By: SWE-Agent.ai <noreply@swe-agent.ai>",
          "is_bot": true,
          "headline": "test(prompts): add tests for commands, skills, and subagents",
          "author_name": "swe-agent[bot]",
          "author_login": null,
          "committed_at": "2026-02-04T01:44:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bcb1fd0b9d67d6610834cdfd64ee71594d4c8c00",
          "body": "- Update CLAUDE.md with latest project guidance\n- Refresh README.md and README_zh.md\n- Update RELEASE_NOTES.md with v0.6.8 changes\n- Update API reference and architecture docs\n- Update security documentation\n- Refresh examples/04-advanced after plugins removal\n\nGenerated with SWE-Agent.ai\n\nCo-Authored-By: SWE-Agent.ai <noreply@swe-agent.ai>",
          "is_bot": true,
          "headline": "docs: update documentation for v0.6.8 release",
          "author_name": "swe-agent[bot]",
          "author_login": null,
          "committed_at": "2026-02-04T01:44:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c3e195386b79709d83c345a2ca11950bd3371e3b",
          "body": "- Add platform-specific files for Unix/Windows compatibility\n  - runtime_helpers_{unix,windows}.go\n  - resolver_{unix,windows}.go\n  - bash_{unix,windows}.go\n  - persister_{unix,windows}.go\n- Add claude_embed_hooks.go for embedded hook support\n- Add claude_md.go for CLAUDE.md parsing\n- Add task_types.go and todo_write.go for task system\n\nGenerated with SWE-Agent.ai\n\nCo-Authored-By: SWE-Agent.ai <noreply@swe-agent.ai>",
          "is_bot": true,
          "headline": "feat: add platform-specific implementations and new modules",
          "author_name": "swe-agent[bot]",
          "author_login": null,
          "committed_at": "2026-02-04T01:44:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "32a4c1af63981f6de2b212df438688ac1340aee2",
          "body": "- Split large test files into focused *_additional_test.go files\n- Improve test organization across all packages\n- Maintain 91% overall test coverage\n- All tests pass with race detection enabled\n\nAffected packages:\n- pkg/api, pkg/config, pkg/middleware\n- pkg/model, pkg/security, pkg/tool\n\nGenerated with SWE-Agent.ai\n\nCo-Authored-By: SWE-Agent.ai <noreply@swe-agent.ai>",
          "is_bot": true,
          "headline": "test: reorganize and split large test files",
          "author_name": "swe-agent[bot]",
          "author_login": null,
          "committed_at": "2026-02-04T01:44:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "165f45565a08434705466d1287d1574e48833f2a",
          "body": "- Expand registry capabilities with improved MCP support\n- Update bash and file tools for better error handling\n- Improve executor and persister modules\n- Add new tool registration patterns\n\nGenerated with SWE-Agent.ai\n\nCo-Authored-By: SWE-Agent.ai <noreply@swe-agent.ai>",
          "is_bot": true,
          "headline": "refactor(tool): enhance registry and builtin tools",
          "author_name": "swe-agent[bot]",
          "author_login": null,
          "committed_at": "2026-02-04T01:44:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9df4c2364630bda25bd8e355bbd22976c4bc7ef3",
          "body": "- Simplify settings merge logic in pkg/config\n- Remove unused test helpers\n- Improve security approval handling\n- Update resolver for cleaner permission checks\n\nGenerated with SWE-Agent.ai\n\nCo-Authored-By: SWE-Agent.ai <noreply@swe-agent.ai>",
          "is_bot": true,
          "headline": "refactor(config,security): cleanup settings merge and approval",
          "author_name": "swe-agent[bot]",
          "author_login": null,
          "committed_at": "2026-02-04T01:44:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "def75e053f8f665259f359918fa26615f4544d9a",
          "body": "- Simplify pkg/api/agent.go with improved session handling\n- Refactor MCP bridge for cleaner tool registration\n- Update options and runtime helpers\n- Minor improvements to hooks executor and agent core\n\nGenerated with SWE-Agent.ai\n\nCo-Authored-By: SWE-Agent.ai <noreply@swe-agent.ai>",
          "is_bot": true,
          "headline": "refactor(api): streamline runtime and MCP integration",
          "author_name": "swe-agent[bot]",
          "author_login": null,
          "committed_at": "2026-02-04T01:43:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "65a950f1f40760a0b0c8cda482aeedcde7132545",
          "body": "- Remove pkg/tool/builtin/task_store.go (185 lines)\n- Update task tools to use centralized pkg/runtime/tasks/store\n- Improve separation of concerns between tools and storage\n- All task-related tests pass with improved coverage\n\nGenerated with SWE-Agent.ai\n\nCo-Authored-By: SWE-Agent.ai <noreply@swe-agent.ai>",
          "is_bot": true,
          "headline": "refactor(tool): consolidate task storage to runtime/tasks",
          "author_name": "swe-agent[bot]",
          "author_login": null,
          "committed_at": "2026-02-04T01:43:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bae6a0d3d61d1057c0806005318e1ab78dc58c8b",
          "body": "- Delete pkg/plugins/ directory (10 files)\n- Remove pkg/api/plugins_bridge.go and tests\n- Remove examples/04-advanced/.claude-plugin/ directory\n- Remove examples/04-advanced/plugins.go\n\nThe plugins system was experimental and has been superseded by\nthe skills and commands runtime. This cleanup reduces codebase\ncomplexity by ~2000 lines.\n\nGenerated with SWE-Agent.ai\n\nCo-Authored-By: SWE-Agent.ai <noreply@swe-agent.ai>",
          "is_bot": true,
          "headline": "refactor: remove deprecated plugins system",
          "author_name": "swe-agent[bot]",
          "author_login": null,
          "committed_at": "2026-02-04T01:43:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "224caab0266f0fac98fdd2a109ff5565aae9d691",
          "body": null,
          "is_bot": true,
          "headline": "update ignore",
          "author_name": "swe-agent[bot]",
          "author_login": null,
          "committed_at": "2026-02-03T02:35:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a2b582c4a7e0b4469247b944e09fe6934bb2ec4b",
          "body": "- Demonstrate TaskCreate, TaskList, TaskGet, TaskUpdate tools\n- Show task dependency chain (A -> B -> C)\n- Verify automatic dependency resolution on completion\n\nGenerated with SWE-Agent.ai\n\nCo-Authored-By: SWE-Agent.ai <noreply@swe-agent.ai>",
          "is_bot": true,
          "headline": "docs(examples): add task system demo",
          "author_name": "swe-agent[bot]",
          "author_login": null,
          "committed_at": "2026-02-03T02:34:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a92019a8b77f1b97d20b8008414db78e621bfa1f",
          "body": "- Add diskHistoryPersister for session history storage\n- Store history as JSON files under .claude/history/\n- Auto-cleanup old sessions based on cleanupPeriodDays setting\n- Integrate with historyStore loader for session restore\n\nGenerated with SWE-Agent.ai\n\nCo-Authored-By: SWE-Agent.ai <noreply@swe-agent.ai>",
          "is_bot": true,
          "headline": "feat(api): add disk-based history persistence",
          "author_name": "swe-agent[bot]",
          "author_login": null,
          "committed_at": "2026-02-03T02:34:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "35b41977a33ffd0cbcb3793db37fa255f33a8a11",
          "body": "- Add pkg/prompts package for parsing .claude directory from embed.FS\n- Support skills, commands, subagents, and hooks parsing\n- Parse YAML frontmatter for metadata extraction\n- Return ready-to-use registration structures for api.Options\n- 89.6% test coverage\n\nUsage:\n  builtins := prompts.Parse(clau\n[…]\nlls,\n      Commands:   builtins.Commands,\n      Subagents:  builtins.Subagents,\n      TypedHooks: builtins.Hooks,\n  })\n\nGenerated with SWE-Agent.ai\n\nCo-Authored-By: SWE-Agent.ai <noreply@swe-agent.ai>",
          "is_bot": true,
          "headline": "feat(prompts): add compile-time prompt packaging from embed.FS",
          "author_name": "swe-agent[bot]",
          "author_login": null,
          "committed_at": "2026-02-03T02:34:19Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3fd675e99e8b9853df8a8833ec3b44c4fb4837bf",
          "body": "- Change CleanupPeriodDays from int to *int for explicit nil handling\n- Add loader callback to historyStore for disk-based session restore\n- Update docs to reflect history persistence behavior\n\nGenerated with SWE-Agent.ai\n\nCo-Authored-By: SWE-Agent.ai <noreply@swe-agent.ai>",
          "is_bot": true,
          "headline": "feat(config): add history persistence with cleanupPeriodDays setting",
          "author_name": "swe-agent[bot]",
          "author_login": null,
          "committed_at": "2026-02-03T02:32:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "69d8174b91230b54832e55c10439caa51d4bf935",
          "body": "- Check json.Marshal error returns in bash.go, bashstatus.go\n- Add nolint:errcheck comments for best-effort operations\n- Fix json.Number case order in coerceString/stringValue (staticcheck)\n- Fix ineffassign in async_manager.go\n- Change file permissions from 0644 to 0600 in file_sandbox.go (gosec)\n- Add nolint:gosec for checked uint conversion in read.go\n- Remove unused serverHost function in webfetch_test.go\n\nGenerated with SWE-Agent.ai\n\nCo-Authored-By: SWE-Agent.ai <noreply@swe-agent.ai>",
          "is_bot": true,
          "headline": "fix(lint): resolve golangci-lint issues in builtin tools",
          "author_name": "swe-agent[bot]",
          "author_login": null,
          "committed_at": "2026-02-03T02:32:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "32782b11a7195cce7a1a52ff1874aaa93b46d8a8",
          "body": "Generated with SWE-Agent.ai\n\nCo-Authored-By: SWE-Agent.ai <noreply@swe-agent.ai>",
          "is_bot": true,
          "headline": "refactor(api): remove unused tasks package import",
          "author_name": "swe-agent[bot]",
          "author_login": null,
          "committed_at": "2026-02-03T02:32:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "72491e505469c79523ee898fb6bc3d0886acdb4b",
          "body": "- TaskCreateTool now uses toolbuiltin.TaskStore instead of tasks.TaskStore\n- All task tools (TaskCreate, TaskList, TaskGet, TaskUpdate) share the same store\n- Added CreateTask method to toolbuiltin.TaskStore\n- Added Description and ActiveForm fields to Task struct\n- Added integration test TestTaskToolsShareSameStore\n- Removed orphaned pkg/tasks package\n\nGenerated with SWE-Agent.ai\n\nCo-Authored-By: SWE-Agent.ai <noreply@swe-agent.ai>",
          "is_bot": true,
          "headline": "fix(task): unify TaskStore across all task tools",
          "author_name": "swe-agent[bot]",
          "author_login": null,
          "committed_at": "2026-02-03T02:32:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3e0bfae9c42e04f9cd7468e553525a15e7e941e9",
          "body": "Generated with SWE-Agent.ai\n\nCo-Authored-By: SWE-Agent.ai <noreply@swe-agent.ai>",
          "is_bot": true,
          "headline": "style: fix gofmt formatting issues",
          "author_name": "swe-agent[bot]",
          "author_login": null,
          "committed_at": "2026-02-03T02:00:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "08ca2d50971fa842f7d524f00dda62c3ccab0652",
          "body": "…r support\n\n- Add PostToolUseFailure to validateEvent in executor.go\n- Add WithWorkDir option for hook command execution\n- Pass ProjectRoot as workdir in hooks_bridge.go\n- Add examples/10-hooks with pre/post tool use scripts\n- Increase test coverage from 88.9% to 94.7%\n- Support Claude Code array format and SDK simplified format\n\nGenerated with SWE-Agent.ai\n\nCo-Authored-By: SWE-Agent.ai <noreply@swe-agent.ai>",
          "is_bot": true,
          "headline": "feat(hooks): complete hooks system with all 12 event types and workdi…",
          "author_name": "swe-agent[bot]",
          "author_login": null,
          "committed_at": "2026-02-03T01:51:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1d4053c79e342d3abd906175a978d9396ceb0dfb",
          "body": null,
          "is_bot": true,
          "headline": "Merge branch 'main' of github.com:cexll/agentsdk-go",
          "author_name": "swe-agent[bot]",
          "author_login": null,
          "committed_at": "2026-01-28T09:49:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d92bf932d54bd4abb3b3cb949ee87cf7ebfd8ca6",
          "body": null,
          "is_bot": true,
          "headline": "fix bash desc",
          "author_name": "swe-agent[bot]",
          "author_login": null,
          "committed_at": "2026-01-28T09:49:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "367beaf0494ab90b8dcdebabeab5817d5ec7d04b",
          "body": "feat(tasks): implement TaskStore core storage",
          "is_bot": false,
          "headline": "Merge pull request #70 from cexll/swe-agent/issue-55",
          "author_name": "ben",
          "author_login": "cexll",
          "committed_at": "2026-01-28T09:43:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "91c8998b88801dc3db44ff77f60aca7f6ef86b31",
          "body": "…dencies (#71)\n\nCo-authored-by: swe-agent[bot] <0+swe-agent[bot]@users.noreply.github.com>",
          "is_bot": false,
          "headline": "feat(task-system): implement TaskUpdate tool with bidirectional depen…",
          "author_name": "ben",
          "author_login": "cexll",
          "committed_at": "2026-01-28T09:42:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5fe51ce8116c108194ed95383785f7f5c6a1607a",
          "body": null,
          "is_bot": true,
          "headline": "fix(tasks): check error returns in tests",
          "author_name": "swe-agent[bot]",
          "author_login": null,
          "committed_at": "2026-01-28T09:42:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "300a33a7988b8eee899152b92a8bb9f34109b527",
          "body": "Co-authored-by: swe-agent[bot] <0+swe-agent[bot]@users.noreply.github.com>",
          "is_bot": false,
          "headline": "feat(task-system): remove TodoWrite tool (#69)",
          "author_name": "ben",
          "author_login": "cexll",
          "committed_at": "2026-01-28T09:37:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1f571e35413bda1cbc259e4d3f7c779a3967b319",
          "body": "* feat(task-system): implement TaskCreate tool (#56)\n\n- Add minimal TaskStore with in-memory storage and unique ID generation\n- Implement TaskCreateTool with Name, Description, Schema, Execute methods\n- Validate required fields (subject, activeForm) and optional description\n- Return taskId in JSON f\n[…]\ne context cancellation and nil store cases\n\nCloses #56\n\n* test: update tool count assertions for TaskCreate (#56)\n\n---------\n\nCo-authored-by: swe-agent[bot] <0+swe-agent[bot]@users.noreply.github.com>",
          "is_bot": false,
          "headline": "feat(task-system): implement TaskCreate tool (#56) (#68)",
          "author_name": "ben",
          "author_login": "cexll",
          "committed_at": "2026-01-28T09:20:38Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b7c0b322535059e67fe835fee4d59d3e01119bba",
          "body": null,
          "is_bot": true,
          "headline": "feat(tasks): implement TaskStore core storage",
          "author_name": "swe-agent[bot]",
          "author_login": null,
          "committed_at": "2026-01-28T09:17:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5f3af8e059c98c2f8a0b88c799bee7d3749e8893",
          "body": "Co-authored-by: swe-agent[bot] <0+swe-agent[bot]@users.noreply.github.com>",
          "is_bot": false,
          "headline": "feat(task): implement TaskList and TaskGet tools (#67)",
          "author_name": "ben",
          "author_login": "cexll",
          "committed_at": "2026-01-28T08:53:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "169627ed7098b3080a010f5e28b98b2dbb8b7023",
          "body": "- Add TaskCreate/TaskGet/TaskUpdate/TaskList to deriveTarget\n- Extract task_id parameter for permission matching\n- Add comprehensive unit tests for all Task* tools\n\nCloses #64\n\nCo-authored-by: swe-agent[bot] <0+swe-agent[bot]@users.noreply.github.com>",
          "is_bot": false,
          "headline": "feat(security): add Task* tools to permission matcher (#66)",
          "author_name": "ben",
          "author_login": "cexll",
          "committed_at": "2026-01-28T08:45:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9f8471156feeb43aa529705f6dd6b87e147ea774",
          "body": "Generated with SWE-Agent.ai\n\nCo-Authored-By: SWE-Agent.ai <noreply@swe-agent.ai>",
          "is_bot": true,
          "headline": "chore: remove deprecated ANTHROPIC_AUTH_TOKEN warning",
          "author_name": "swe-agent[bot]",
          "author_login": null,
          "committed_at": "2026-01-26T07:49:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3fae78f564b4623d0adb3ed34b7314f6aa2db9c1",
          "body": "…solated\n\nCreate separate script files for each goroutine to avoid concurrent\nexecution of the same file causing ETXTBSY on Linux CI.\n\nGenerated with SWE-Agent.ai\n\nCo-Authored-By: SWE-Agent.ai <noreply@swe-agent.ai>",
          "is_bot": true,
          "headline": "fix: resolve Text file busy race condition in TestConcurrentCallsAreI…",
          "author_name": "swe-agent[bot]",
          "author_login": null,
          "committed_at": "2026-01-26T07:36:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "061c64fed414041899fc6c793831798c2de332df",
          "body": "Adds examples/05-feature-test to verify new features:\n- Glob/Grep respectGitignore functionality\n- SpoolWriter large output persistence\n\nGenerated with SWE-Agent.ai\n\nCo-Authored-By: SWE-Agent.ai <noreply@swe-agent.ai>",
          "is_bot": true,
          "headline": "feat: add feature test example for respectGitignore and SpoolWriter",
          "author_name": "swe-agent[bot]",
          "author_login": null,
          "committed_at": "2026-01-26T07:31:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0d52fc7cddeb4079f6050f83a1262cfcc7357f2b",
          "body": "- Fix unchecked error return in TestMatchEmpty\n- Change WriteFile permissions from 0644 to 0600 (gosec G306)\n- Apply gofmt formatting\n\nGenerated with SWE-Agent.ai\n\nCo-Authored-By: SWE-Agent.ai <noreply@swe-agent.ai>",
          "is_bot": true,
          "headline": "fix: resolve lint issues in test files",
          "author_name": "swe-agent[bot]",
          "author_login": null,
          "committed_at": "2026-01-26T07:14:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3e27e40fe656509cb38a80eefd0e2503ee190602",
          "body": "- Remove getManagedSettingsPath() function and managed layer loading\n- Update configuration precedence: runtime overrides > local > project > defaults\n- Remove related test cases and helper functions\n- Update documentation (CLAUDE.md, README.md, README_zh.md, getting-started.md)\n\nGenerated with SWE-Agent.ai\n\nCo-Authored-By: SWE-Agent.ai <noreply@swe-agent.ai>",
          "is_bot": true,
          "headline": "refactor: remove managed-settings.json support",
          "author_name": "swe-agent[bot]",
          "author_login": null,
          "committed_at": "2026-01-26T07:01:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6c1e2fe8a512e9b585dc1f8d3e5b67a9972b0520",
          "body": "Change API key resolution order:\n1. Configured APIKey (highest priority)\n2. ANTHROPIC_API_KEY (standard SDK variable)\n3. ANTHROPIC_AUTH_TOKEN (legacy, prints deprecation warning)\n\nGenerated with SWE-Agent.ai\n\nCo-Authored-By: SWE-Agent.ai <noreply@swe-agent.ai>",
          "is_bot": true,
          "headline": "fix: ANTHROPIC_API_KEY takes priority over ANTHROPIC_AUTH_TOKEN (#61)",
          "author_name": "swe-agent[bot]",
          "author_login": null,
          "committed_at": "2026-01-26T06:53:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3f49e7ffaf9c9e1800be2616cb8048b78077dce1",
          "body": "Implements per-project .gitignore pattern filtering for Glob and Grep tools,\nmatching Claude Code 2.1.0's \"respectGitignore per-project control\" feature.\n\nChanges:\n- Add `respectGitignore` config option to Settings (default: true)\n- Create `pkg/gitignore` package for .gitignore pattern parsing\n- Int\n[…]\nore() method to toggle behavior\n\nCloses #42\n\nGenerated with SWE-Agent.ai\n\nCo-authored-by: swe-agent[bot] <0+swe-agent[bot]@users.noreply.github.com>\nCo-authored-by: SWE-Agent.ai <noreply@swe-agent.ai>",
          "is_bot": false,
          "headline": "feat: add respectGitignore support for Glob/Grep tools (#42) (#60)",
          "author_name": "ben",
          "author_login": "cexll",
          "committed_at": "2026-01-24T05:19:17Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5b097763a66d595036654df15f526e9f1761a045",
          "body": "* feat: implement universal tool output persistence layer (#44)\n\n实现通用的工具输出持久化层,自动将超过阈值的工具输出保存到磁盘。\n\n## 主要改动\n\n### 核心实现\n- **通用 SpoolWriter** (pkg/tool/output.go)\n  - 从 #39 提取为通用组件\n  - 阈值内存缓冲,超阈值自动落盘\n  - 落盘失败时截断模式,不影响工具执行\n\n- **OutputPersister 中间件** (pkg/tool/persister.go)\n  - Executor 级别的输出后处理\n  - 默认阈值 \n[…]\nAgent.ai\n\nCo-Authored-By: SWE-Agent.ai <noreply@swe-agent.ai>\n\n---------\n\nCo-authored-by: swe-agent[bot] <0+swe-agent[bot]@users.noreply.github.com>\nCo-authored-by: SWE-Agent.ai <noreply@swe-agent.ai>",
          "is_bot": false,
          "headline": "feat: implement skills hot-reload support (#41) (#48)",
          "author_name": "ben",
          "author_login": "cexll",
          "committed_at": "2026-01-11T13:46:17Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3abf017ff860a16cdd5ccd5c698a3d6c7ae605b8",
          "body": "* feat: implement universal tool output persistence layer (#44)\n\n实现通用的工具输出持久化层,自动将超过阈值的工具输出保存到磁盘。\n\n## 主要改动\n\n### 核心实现\n- **通用 SpoolWriter** (pkg/tool/output.go)\n  - 从 #39 提取为通用组件\n  - 阈值内存缓冲,超阈值自动落盘\n  - 落盘失败时截断模式,不影响工具执行\n\n- **OutputPersister 中间件** (pkg/tool/persister.go)\n  - Executor 级别的输出后处理\n  - 默认阈值 \n[…]\nAgent.ai\n\nCo-Authored-By: SWE-Agent.ai <noreply@swe-agent.ai>\n\n---------\n\nCo-authored-by: swe-agent[bot] <0+swe-agent[bot]@users.noreply.github.com>\nCo-authored-by: SWE-Agent.ai <noreply@swe-agent.ai>",
          "is_bot": false,
          "headline": "feat: implement universal tool output persistence layer (#44) (#47)",
          "author_name": "ben",
          "author_login": "cexll",
          "committed_at": "2026-01-11T12:22:54Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2fb5e4f579351857ed6c21ff571a9db423177a96",
          "body": "* feat: implement large bash output disk persistence (#39)\n\n实现大型 Bash 输出自动保存到磁盘功能,防止关键信息丢失。\n\n## 主要改动\n\n### 核心实现\n- **输出管理器** (pkg/tool/builtin/bash.go)\n  - 新增 bashOutputSpool 和 spoolWriter 实现输出缓冲和落盘\n  - 输出超过阈值时自动写入 /tmp/agentsdk/bash-output/{sessionID}/\n  - 支持 stdout/stderr 分开处理后合并\n  - 返回文件路径引用 [Outpu\n[…]\nAgent.ai\n\nCo-Authored-By: SWE-Agent.ai <noreply@swe-agent.ai>\n\n---------\n\nCo-authored-by: swe-agent[bot] <0+swe-agent[bot]@users.noreply.github.com>\nCo-authored-by: SWE-Agent.ai <noreply@swe-agent.ai>",
          "is_bot": false,
          "headline": "Fix #39: 大型 Bash 输出保存到磁盘 (#46)",
          "author_name": "ben",
          "author_login": "cexll",
          "committed_at": "2026-01-09T09:15:50Z",
          "body_truncated": true,
          "is_coding_agent": false
        }
      ],
      "releases_count": 35,
      "commits_last_year": 275,
      "latest_release_at": "2026-07-17T13:08:40Z",
      "latest_release_tag": "v1.2.1",
      "releases_from_tags": false,
      "days_since_last_push": 5,
      "active_weeks_last_year": 20,
      "days_since_latest_release": 5,
      "mean_days_between_releases": 17.5
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": false,
      "health_percentage": 62,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": true
    },
    "ecosystem": {
      "packages": [
        {
          "name": "github.com/stellarlinkco/agentsdk-go",
          "exists": true,
          "license": null,
          "keywords": [],
          "ecosystem": "go",
          "matches_repo": true,
          "registry_url": "https://pkg.go.dev/github.com/stellarlinkco/agentsdk-go",
          "is_deprecated": false,
          "latest_version": "v1.2.1",
          "repository_url": "https://github.com/stellarlinkco/agentsdk-go",
          "versions_count": 32,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-07-17T12:52:24Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 5
        }
      ]
    },
    "popularity": {
      "forks": 27,
      "stars": 156,
      "watchers": 0,
      "fork_history": {
        "days": [
          {
            "date": "2025-12-03",
            "count": 1
          },
          {
            "date": "2026-01-09",
            "count": 4
          },
          {
            "date": "2026-01-10",
            "count": 1
          },
          {
            "date": "2026-01-19",
            "count": 1
          },
          {
            "date": "2026-02-03",
            "count": 1
          },
          {
            "date": "2026-02-09",
            "count": 2
          },
          {
            "date": "2026-02-10",
            "count": 1
          },
          {
            "date": "2026-02-11",
            "count": 1
          },
          {
            "date": "2026-02-12",
            "count": 2
          },
          {
            "date": "2026-02-18",
            "count": 1
          },
          {
            "date": "2026-03-08",
            "count": 1
          },
          {
            "date": "2026-03-11",
            "count": 1
          },
          {
            "date": "2026-03-20",
            "count": 1
          },
          {
            "date": "2026-03-25",
            "count": 1
          },
          {
            "date": "2026-05-07",
            "count": 1
          },
          {
            "date": "2026-05-11",
            "count": 1
          },
          {
            "date": "2026-05-12",
            "count": 1
          },
          {
            "date": "2026-06-04",
            "count": 1
          },
          {
            "date": "2026-06-06",
            "count": 1
          },
          {
            "date": "2026-07-05",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 25,
        "total_forks": 27
      },
      "star_history": null,
      "open_issues_and_prs": 11
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [
        "demos",
        "examples"
      ],
      "has_llms_txt": false,
      "has_dockerfile": true,
      "has_mcp_signal": true,
      "bootstrap_files": [
        "Makefile"
      ],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [
        "go.mod"
      ],
      "largest_source_bytes": 27894,
      "source_files_sampled": 378,
      "oversized_source_files": 0,
      "agent_instruction_files": [
        "AGENTS.md",
        "CLAUDE.md",
        "test/integration/testdata/.agents/agents/test-agent/AGENT.md"
      ],
      "agent_instruction_max_bytes": 10509
    },
    "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": "github.com/anthropics/anthropic-sdk-go",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.18.0"
        },
        {
          "name": "github.com/bmatcuk/doublestar/v4",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v4.9.1"
        },
        {
          "name": "github.com/fsnotify/fsnotify",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.9.0"
        },
        {
          "name": "github.com/google/uuid",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.6.0"
        },
        {
          "name": "github.com/modelcontextprotocol/go-sdk",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.1.0"
        },
        {
          "name": "github.com/openai/openai-go",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.12.0"
        },
        {
          "name": "github.com/stretchr/testify",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.11.1"
        },
        {
          "name": "go.opentelemetry.io/otel",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.40.0"
        },
        {
          "name": "go.opentelemetry.io/otel/exporters/otlp/otlptrace",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.40.0"
        },
        {
          "name": "go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.40.0"
        },
        {
          "name": "go.opentelemetry.io/otel/sdk",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.40.0"
        },
        {
          "name": "go.opentelemetry.io/otel/trace",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.40.0"
        },
        {
          "name": "gopkg.in/yaml.v3",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v3.0.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": 10,
        "merged_prs": 47,
        "open_issues": 1,
        "closed_ratio": 0.978,
        "closed_issues": 45,
        "closed_unmerged_prs": 7
      },
      "bus_factor": 1,
      "bot_contributors": 1,
      "top_contributors": [
        {
          "type": "User",
          "login": "cexll",
          "commits": 205,
          "avatar_url": "https://avatars.githubusercontent.com/u/26520956?v=4"
        },
        {
          "type": "User",
          "login": "yoke233",
          "commits": 7,
          "avatar_url": "https://avatars.githubusercontent.com/u/2161917?v=4"
        },
        {
          "type": "User",
          "login": "LiHtCocoa",
          "commits": 4,
          "avatar_url": "https://avatars.githubusercontent.com/u/104016753?v=4"
        },
        {
          "type": "User",
          "login": "CodingCrush",
          "commits": 2,
          "avatar_url": "https://avatars.githubusercontent.com/u/21290558?v=4"
        },
        {
          "type": "User",
          "login": "zhanbei1",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/23068139?v=4"
        }
      ],
      "contributors_sampled": 5,
      "top_contributor_share": 0.936
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "ci.yml",
        "release.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [
        ".golangci.yml"
      ],
      "has_editorconfig": true,
      "has_linter_config": true,
      "has_precommit_config": true
    },
    "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": 9,
            "reason": "11 out of 12 merged PRs checked by a CI test -- score normalized to 9",
            "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": 2,
            "reason": "Found 7/28 approved changesets -- score normalized to 2",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 10,
            "reason": "project has 7 contributing companies or organizations",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 10,
            "reason": "no dangerous workflow patterns detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 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": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 7,
            "reason": "8 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 7",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": null,
            "reason": "packaging workflow not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 0,
            "reason": "dependency not pinned by hash detected -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "SAST tool is not run on all commits -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 4,
            "reason": "security policy file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": null,
            "reason": "no releases found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 0,
            "reason": "detected GitHub workflow tokens with excessive permissions",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 0,
            "reason": "19 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "00317e1ccbb7738abbd86b78869f0cb1d573efc4",
        "ran_at": "2026-07-22T20:51:59Z",
        "aggregate_score": 4.4,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": true,
      "has_dependabot_config": true
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-17T13:08:43Z",
      "oldest_open_prs": [
        {
          "number": 95,
          "created_at": "2026-05-11T02:22:16Z",
          "last_comment_at": "2026-05-22T07:22:53Z",
          "last_comment_author": "vicleung01"
        },
        {
          "number": 96,
          "created_at": "2026-05-14T04:56:39Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 98,
          "created_at": "2026-05-15T14:53:53Z",
          "last_comment_at": "2026-05-15T14:53:53Z",
          "last_comment_author": "dependabot"
        },
        {
          "number": 99,
          "created_at": "2026-05-15T14:53:55Z",
          "last_comment_at": "2026-05-15T14:53:55Z",
          "last_comment_author": "dependabot"
        },
        {
          "number": 101,
          "created_at": "2026-05-15T14:53:59Z",
          "last_comment_at": "2026-05-15T14:54:00Z",
          "last_comment_author": "dependabot"
        },
        {
          "number": 102,
          "created_at": "2026-05-15T14:53:59Z",
          "last_comment_at": "2026-05-15T14:54:00Z",
          "last_comment_author": "dependabot"
        },
        {
          "number": 103,
          "created_at": "2026-05-15T14:54:01Z",
          "last_comment_at": "2026-05-15T14:54:02Z",
          "last_comment_author": "dependabot"
        },
        {
          "number": 105,
          "created_at": "2026-05-15T14:54:05Z",
          "last_comment_at": "2026-05-15T14:54:06Z",
          "last_comment_author": "dependabot"
        },
        {
          "number": 106,
          "created_at": "2026-05-15T14:54:06Z",
          "last_comment_at": "2026-05-15T14:54:06Z",
          "last_comment_author": "dependabot"
        },
        {
          "number": 109,
          "created_at": "2026-06-19T11:53:38Z",
          "last_comment_at": "2026-07-17T12:54:32Z",
          "last_comment_author": "cexll"
        }
      ],
      "last_merged_pr_at": "2026-07-17T12:52:24Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": [
        {
          "number": 38,
          "created_at": "2026-01-09T01:45:59Z",
          "last_comment_at": null,
          "last_comment_author": null
        }
      ]
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/stellarlinkco/agentsdk-go",
    "host": "github.com",
    "name": "agentsdk-go",
    "owner": "stellarlinkco"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 68,
      "inputs": {
        "security": 44,
        "vitality": 85,
        "community": 52,
        "governance": 62,
        "engineering": 89
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "excellent",
        "name": "Vitality",
        "value": 85,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "good",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 75,
            "inputs": {
              "commits_last_year": 275,
              "human_commit_share": 0.61,
              "days_since_last_push": 5,
              "active_weeks_last_year": 20
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 5 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 5
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "20/52 weeks with commits",
                "points": 13.8,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 20
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "275 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 275
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "8 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 7",
                "points": 7,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "releases_count": 35,
              "latest_release_tag": "v1.2.1",
              "releases_from_tags": false,
              "days_since_latest_release": 5,
              "mean_days_between_releases": 17.5
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "35 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 35
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 5 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 5
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~17.5 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 17.5
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "maintained",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": null,
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": 68,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "last human commit 68 days ago",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_maintained",
                    "params": {
                      "days": 68
                    }
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "moderate",
        "name": "Community & Adoption",
        "value": 52,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "at_risk",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 47,
            "inputs": {
              "forks": 27,
              "stars": 156,
              "watchers": 0,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "156 stars",
                "points": 35.5,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 156
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "27 forks",
                "points": 11.8,
                "status": "partial",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 27
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "0 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "moderate",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 57,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": false,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (MIT)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "MIT"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 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": 6.3,
                "status": "met",
                "details": [],
                "max_points": 6.3
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "moderate",
        "name": "Sustainability & Governance",
        "value": 62,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 27,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 5,
              "top_contributor_share": 0.936
            },
            "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 94% of commits",
                "points": 1.4,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 94
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "5 contributors",
                "points": 6.8,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 5
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 7 contributing companies or organizations",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "good",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 82,
            "inputs": {
              "merged_prs": 47,
              "open_issues": 1,
              "closed_issues": 45,
              "issue_closed_ratio": 0.978,
              "closed_unmerged_prs": 7
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "98% of issues closed",
                "points": 45.7,
                "status": "partial",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 98
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "47/54 decided PRs merged",
                "points": 33.3,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 47,
                      "decided": 54
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 7/28 approved changesets -- score normalized to 2",
                "points": 3,
                "status": "partial",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "moderate",
            "name": "Ownership & stewardship",
            "note": null,
            "notes": [],
            "value": 53,
            "inputs": {
              "followers": 47,
              "owner_type": "Organization",
              "is_verified": null,
              "owner_login": "stellarlinkco",
              "public_repos": 14,
              "account_age_days": 401
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "organization-owned",
                "points": 30,
                "status": "met",
                "details": [
                  {
                    "code": "owner_organization",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "47 followers of stellarlinkco",
                "points": 12.1,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 47,
                      "login": "stellarlinkco"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "14 public repos, account ~1 yr old",
                "points": 10.8,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 14
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 1
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "github.com/stellarlinkco/agentsdk-go"
              ],
              "ecosystems": "go",
              "any_deprecated": false,
              "min_days_since_publish": 5
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "1 package(s) on go",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 1,
                      "ecosystems": "go"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 5 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 5
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "32 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 32
                    }
                  }
                ],
                "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": "excellent",
        "name": "Engineering Quality",
        "value": 89,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "excellent",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 98,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": true,
              "has_linter_config": true,
              "has_precommit_config": true
            },
            "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": 9.6,
                "status": "met",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 6.4,
                "status": "met",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "11 out of 12 merged PRs checked by a CI test -- score normalized to 9",
                "points": 18,
                "status": "partial",
                "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": 44,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Packaging, Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "packaging",
                    "signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 44,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 16,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 2,
              "scorecard_aggregate": 4.4
            },
            "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": "11 out of 12 merged PRs checked by a CI test -- score normalized to 9",
                "points": 2.2,
                "status": "partial",
                "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 7/28 approved changesets -- score normalized to 2",
                "points": 1.5,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 7 contributing companies or organizations",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "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 detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "8 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 7",
                "points": 5.2,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow not detected",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool is not run on all commits -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file detected",
                "points": 2,
                "status": "partial",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "detected GitHub workflow tokens with excessive permissions",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "19 existing vulnerabilities detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "high_risk_jurisdiction_exposure",
            "band": "excellent",
            "name": "High-Risk Jurisdiction Exposure",
            "note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
            "notes": [
              {
                "code": "jurisdiction_evidence_limits",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "meaning": "self-published location evidence; not nationality or citizenship",
              "red_flag": false,
              "exposures": [],
              "policy_countries": [
                "Russia",
                "Iran",
                "North Korea"
              ],
              "review_only_matches": 0,
              "assessed_self_published_locations": 5
            },
            "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": 82,
        "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.984,
              "agent_instruction_files": [
                "AGENTS.md",
                "CLAUDE.md",
                "test/integration/testdata/.agents/agents/test-agent/AGENT.md"
              ],
              "agent_instruction_max_bytes": 10509
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "AGENTS.md, CLAUDE.md, test/integration/testdata/.agents/agents/test-agent/AGENT.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "AGENTS.md, CLAUDE.md, test/integration/testdata/.agents/agents/test-agent/AGENT.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": "60 of 61 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 60,
                      "sampled": 61
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "good",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 80,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "go.sum"
              ],
              "has_dockerfile": true,
              "typed_language": true,
              "bootstrap_files": [
                "Makefile"
              ],
              "has_devcontainer": false,
              "has_linter_config": true,
              "typecheck_configs": [],
              "agent_commit_share": 0,
              "toolchain_manifests": [
                "go.mod"
              ],
              "dependency_bot_commit_share": 0.01
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "Makefile",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Makefile"
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": ".golangci.yml",
                "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": "Dockerfile, lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Dockerfile, lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "no agent-authored commits among the last 100",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_authored_commits",
                    "params": {
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "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": 27894,
              "source_files_sampled": 378,
              "oversized_source_files": 0
            },
            "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": "0/378 source files over 60KB",
                "points": 55,
                "status": "met",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 378,
                      "oversized": 0
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "moderate",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 60,
            "inputs": {
              "example_dirs": [
                "demos",
                "examples"
              ],
              "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": "demos, examples",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "demos, examples"
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token",
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-22T20:52:12.226645Z",
  "schema_version": "0.26.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/s/stellarlinkco/agentsdk-go.svg",
  "full_name": "stellarlinkco/agentsdk-go",
  "license_state": "standard",
  "license_spdx": "MIT"
}

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.26.0 — metodología completa · wiki de métricas.

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