Registro público
Informe de salud del softwareesquema 0.27.0 · métricas 1.13.0 · 2026-07-26 04:44 UTC

sunnchao / sub2api

Go · VueLGPL-3.0★ 0 estrellas⑂ 0 forksdesde dic 2025forkVer en GitHub ↗

sunnchao/sub2api tiene un índice de salud de 48 sobre 100, lo que lo sitúa en la banda En riesgo. Su puntuación más alta es Vitality (88/100) y la más baja, Community & Adoption (12/100). Se actualizó por última vez hoy. 2 personas concentran la mayor parte del trabajo reciente.

48
global / 100
En riesgo

Índice de salud del software

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

48
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

sunnchaoCuenta personal
1 seguidor83 repositorios públicosdesde nov 2015

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

Ecosistemas de paquetes

RegistroPaqueteVersiónDescargas / mesVersionesÚltima publicación
Gogithub.com/Wei-Shaw/sub2apiapunta a otro repositorio; no se puntúav0.1.165-159hace 0 días

Métricas por categoría

Vitalidad

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

88Excelente · 22% del índice global
Cómo se puntúa
36/36Recencia de push — último push hace 0 días
22.2/36Cadencia de commits — 32/52 semanas con commits
18/18Volumen de commits — 5268 commits en el último año
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
Datos de entrada utilizados
commits_last_year5268
human_commit_share0,97
days_since_last_push0
active_weeks_last_year32
Cómo se puntúa
27/27Publica versiones — 96 versiones publicadas
36/36Recencia de las versiones — última versión hace 0 días
27/27Cadencia de publicación — una versión cada ~2,7 días
0/10OpenSSF Scorecard: Signed-Releases — Project has not signed or included provenance with any releases.
Datos de entrada utilizados
releases_count96
latest_release_tagv0.1.165
releases_from_tagsno
days_since_latest_release0
mean_days_between_releases2,7

Comunidad y Adopción

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

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

Sostenibilidad y Gobernanza

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

38En riesgo · 24% del índice global
Cómo se puntúa
25.2/54Factor bus — la mitad de los commits recae en 2 contribuyente(s)
13.4/22.5Distribución de commits — el principal contribuyente firma el 41% de los commits
13.5/13.5Amplitud de contribuyentes — 99 contribuyentes
10/10OpenSSF Scorecard: Contributors — project has 10 contributing companies or organizations
Datos de entrada utilizados
bus_factor2
contributors_sampled99
top_contributor_share0,406
Cómo se puntúa
0/46.8Resolución de issues — sin issues o sin datos
0/38.3Aceptación de PR — sin PR decididos o sin datos
0/15OpenSSF Scorecard: Code-Review — Found 0/30 approved changesets -- score normalized to 0
Datos de entrada utilizados
merged_prs0
open_issues0
closed_issues0
issue_closed_ratio
closed_unmerged_prs0
Excluidos de la puntuación (sin datos o no aplicable): Resolución de issues, Aceptación de PR. Los pesos restantes se han renormalizado.
Cómo se puntúa
10/30Respaldo de la propiedad — cuenta personal (usuario)
0/20Dominio verificado — no aplicable a cuentas de usuario
2.2/25Alcance del propietario — 1 seguidores de sunnchao
25/25Trayectoria — 83 repos públicos, cuenta de ~10 años
Datos de entrada utilizados
followers1
owner_typeUser
is_verified
owner_loginsunnchao
public_repos83
account_age_days3918
Excluidos de la puntuación (sin datos o no aplicable): Dominio verificado. Los pesos restantes se han renormalizado.

Calidad de Ingeniería

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

62Moderado · 20% del índice global
Cómo se puntúa
24/24Flujos de trabajo de CI — 4 flujo(s) de trabajo
24/24Pruebas presentes
16/16Configuración de linter — .eslintrc.cjs, .golangci.yml
0/9.6Hooks de pre-commit
0/6.4.editorconfig
0/20OpenSSF Scorecard: CI-Tests — sin datos
Datos de entrada utilizados
has_ci
has_tests
has_editorconfigno
has_linter_config
has_precommit_configno
Excluidos de la puntuación (sin datos o no aplicable): OpenSSF Scorecard: CI-Tests. Los pesos restantes se han renormalizado.

Documentación

35En riesgo
Cómo se puntúa
0/30README
25/25Directorio de documentación
0/15Sitio de documentación / página del proyecto
0/10Descripción del repositorio
0/10Topics
10/10Wiki
Datos de entrada utilizados
topics
has_wiki
homepage
has_readmeno
has_docs_dir
has_descriptionno

Seguridad

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

34En riesgo · 16% del índice global
Cómo se puntúa
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — branch protection not enabled on development/release branches
0/2.5CI-Tests — sin datos
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 0/30 approved changesets -- score normalized to 0
2.5/2.5Contributors — project has 10 contributing companies or organizations
10/10Dangerous-Workflow — no dangerous workflow patterns detected
0/7.5Dependency-Update-Tool — no update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5Licencia — license file detected
7.5/7.5Maintained — 30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
5/5Packaging — packaging workflow detected
0/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
0/5SAST — no SAST tool detected
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — Project has not signed or included provenance with any releases.
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
0/7.5Vulnerabilities — 66 existing vulnerabilities detected
Datos de entrada utilizados
sourceopenssf_scorecard
checks_evaluated17
scorecard_versionv5.5.0
checks_inconclusive1
scorecard_aggregate3,4
Excluidos de la puntuación (sin datos o no aplicable): ci_tests. 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.

66Moderado · 0% del índice global
Cómo se puntúa
0/45Instrucciones para agentes — sin CLAUDE.md / AGENTS.md / reglas de editor
0/15Documentación legible por máquinas (llms.txt)
40/40Historial de commits legible — 87 de 97 commits humanos declaran su intención (asunto estructurado o cuerpo explicativo)
Datos de entrada utilizados
has_llms_txtno
legible_history_share0,897
agent_instruction_files
agent_instruction_max_bytes
Cómo se puntúa
18/18Arranque con un solo comando — Makefile, backend/Makefile, deploy/Makefile
22/22Pruebas automatizadas
11/11Configuración de lint / formato — .eslintrc.cjs, .golangci.yml
11/11Verificación estática de tipos — frontend/tsconfig.json
10/10Entorno reproducible — Dockerfile, lockfile
2/10Práctica demostrada con agentes — 1 de los últimos 100 commits con autoría o crédito de agente
0/8Mantenimiento automatizado — no se observan 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, pnpm-lock.yaml
has_dockerfile
typed_language
bootstrap_filesMakefile, backend/Makefile, deploy/Makefile
has_devcontainerno
has_linter_config
typecheck_configsfrontend/tsconfig.json
agent_commit_share0,01
toolchain_manifestsbackend/go.mod
dependency_bot_commit_share0
Cómo se puntúa
45/45Código verificable por tipos — Go (tipado estático)
53.3/55Tamaños de archivo manejables — 76/2531 archivos fuente de más de 60 KB
Datos de entrada utilizados
primary_languageGo
largest_source_bytes1.800.692
source_files_sampled2531
oversized_source_files76

Datos clave

0estrellas de GitHub
99contribuidores
5268commits en los últimos 12 meses
0días desde el último push
96versiones publicadas
2factor bus
0issues abiertas
Go, npmecosistemas de paquetes

Advertencias de recopilación de datos

  • Community profile unavailable
  • go package 'github.com/Wei-Shaw/sub2api' points at a different repository (https://github.com/Wei-Shaw/sub2api); excluded from ecosystem scoring
  • GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Más detalle

OpenSSF Scorecard 3.4 / 10
3.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-26 04:43 UTC

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
n/dCI-Testsno pull request found
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/30 approved changesets -- score normalized to 0
10Contributorsproject has 10 contributing companies or organizations
10Dangerous-Workflowno dangerous workflow patterns detected
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
10Maintained30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
10Packagingpackaging workflow detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
0SASTno SAST tool detected
0Security-Policysecurity policy file not detected
0Signed-ReleasesProject has not signed or included provenance with any releases.
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
0Vulnerabilities66 existing vulnerabilities detected
Dependencias directas 67
RegistroPaqueteRestricción de versiónManifiesto
Goentgo.io/entv0.14.5backend/go.mod
Gogithub.com/DATA-DOG/go-sqlmockv1.5.2backend/go.mod
Gogithub.com/alicebob/miniredis/v2v2.38.0backend/go.mod
Gogithub.com/alitto/pond/v2v2.6.2backend/go.mod
Gogithub.com/andybalholm/brotliv1.2.0backend/go.mod
Gogithub.com/aws/aws-sdk-go-v2v1.41.5backend/go.mod
Gogithub.com/aws/aws-sdk-go-v2/configv1.32.10backend/go.mod
Gogithub.com/aws/aws-sdk-go-v2/credentialsv1.19.10backend/go.mod
Gogithub.com/aws/aws-sdk-go-v2/service/s3v1.97.3backend/go.mod
Gogithub.com/cespare/xxhash/v2v2.3.0backend/go.mod
Gogithub.com/coder/websocketv1.8.14backend/go.mod
Gogithub.com/dgraph-io/ristrettov0.2.0backend/go.mod
Gogithub.com/gin-gonic/ginv1.9.1backend/go.mod
Gogithub.com/golang-jwt/jwt/v5v5.2.2backend/go.mod
Gogithub.com/google/uuidv1.6.0backend/go.mod
Gogithub.com/google/wirev0.7.0backend/go.mod
Gogithub.com/gorilla/websocketv1.5.3backend/go.mod
Gogithub.com/imroc/req/v3v3.57.0backend/go.mod
Gogithub.com/klauspost/compressv1.18.2backend/go.mod
Gogithub.com/lib/pqv1.10.9backend/go.mod
Gogithub.com/patrickmn/go-cachev2.1.0+incompatiblebackend/go.mod
Gogithub.com/pquerna/otpv1.5.0backend/go.mod
Gogithub.com/redis/go-redis/v9v9.17.2backend/go.mod
Gogithub.com/refraction-networking/utlsv1.8.2backend/go.mod
Gogithub.com/robfig/cron/v3v3.0.1backend/go.mod
Gogithub.com/shirou/gopsutil/v4v4.25.6backend/go.mod
Gogithub.com/shopspring/decimalv1.4.0backend/go.mod
Gogithub.com/smartwalle/alipay/v3v3.2.29backend/go.mod
Gogithub.com/spf13/viperv1.18.2backend/go.mod
Gogithub.com/stretchr/testifyv1.11.1backend/go.mod
Gogithub.com/stripe/stripe-go/v85v85.0.0backend/go.mod
Gogithub.com/testcontainers/testcontainers-go/modules/postgresv0.40.0backend/go.mod
Gogithub.com/testcontainers/testcontainers-go/modules/redisv0.40.0backend/go.mod
Gogithub.com/tidwall/gjsonv1.18.0backend/go.mod
Gogithub.com/tidwall/sjsonv1.2.5backend/go.mod
Gogithub.com/tiktoken-go/tokenizerv0.8.0backend/go.mod
Gogithub.com/wechatpay-apiv3/wechatpay-gov0.2.21backend/go.mod
Gogithub.com/zeromicro/go-zerov1.9.4backend/go.mod
Gogo.uber.org/zapv1.24.0backend/go.mod
Gogolang.org/x/cryptov0.53.0backend/go.mod
Gogolang.org/x/imagev0.39.0backend/go.mod
Gogolang.org/x/modv0.37.0backend/go.mod
Gogolang.org/x/netv0.56.0backend/go.mod
Gogolang.org/x/syncv0.21.0backend/go.mod
Gogolang.org/x/termv0.44.0backend/go.mod
Gogopkg.in/natefinch/lumberjack.v2v2.2.1backend/go.mod
Gogopkg.in/yaml.v3v3.0.1backend/go.mod
Gomodernc.org/sqlitev1.44.3backend/go.mod
npm@airwallex/components-sdk^1.30.2frontend/package.json
npm@lobehub/icons^4.0.2frontend/package.json
npm@stripe/stripe-js^9.0.1frontend/package.json
npm@tanstack/vue-virtual^3.13.23frontend/package.json
npm@vueuse/core^10.7.0frontend/package.json
npmaxios^1.18.0frontend/package.json
npmchart.js^4.4.1frontend/package.json
npmdompurify^3.3.1frontend/package.json
npmdriver.js^1.4.0frontend/package.json
npmfile-saver^2.0.5frontend/package.json
npmmarked^17.0.1frontend/package.json
npmpinia^2.1.7frontend/package.json
npmqrcode^1.5.4frontend/package.json
npmvue^3.4.0frontend/package.json
npmvue-chartjs^5.3.0frontend/package.json
npmvue-draggable-plus^0.6.1frontend/package.json
npmvue-i18n^9.14.5frontend/package.json
npmvue-router^4.2.5frontend/package.json
npmxlsx^0.18.5frontend/package.json
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": true,
      "size_kb": 85907,
      "has_wiki": true,
      "homepage": null,
      "languages": {
        "Go": 21818535,
        "CSS": 30015,
        "Vue": 4948834,
        "HTML": 374,
        "Shell": 86072,
        "Python": 9027,
        "PLpgSQL": 43346,
        "Makefile": 2932,
        "Dockerfile": 11286,
        "JavaScript": 32007,
        "TypeScript": 2828981,
        "Go Template": 174
      },
      "pushed_at": "2026-07-26T03:30:54Z",
      "created_at": "2025-12-23T07:05:40Z",
      "owner_type": "User",
      "updated_at": "2026-07-26T02:07:08Z",
      "description": null,
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "LGPL-3.0",
      "default_branch": "main",
      "license_spdx_raw": "LGPL-3.0",
      "primary_language": "Go",
      "significant_languages": [
        "Go",
        "Vue"
      ]
    },
    "owner": {
      "blog": null,
      "name": "sunnchao",
      "type": "User",
      "login": "sunnchao",
      "company": null,
      "location": null,
      "followers": 1,
      "avatar_url": "https://avatars.githubusercontent.com/u/15606489?v=4",
      "created_at": "2015-11-02T07:10:07Z",
      "is_verified": null,
      "public_repos": 83,
      "account_age_days": 3918
    },
    "license": {
      "state": "standard",
      "spdx_id": "LGPL-3.0",
      "raw_spdx": "LGPL-3.0",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": false
    },
    "activity": {
      "releases": [
        {
          "tag": "v0.1.165",
          "kind": "patch",
          "published_at": "2026-07-26T03:41:01Z"
        },
        {
          "tag": "v0.1.162",
          "kind": "patch",
          "published_at": "2026-07-21T02:20:43Z"
        },
        {
          "tag": "v0.1.161.3",
          "kind": "other",
          "published_at": "2026-07-19T02:48:11Z"
        },
        {
          "tag": "v0.1.160",
          "kind": "patch",
          "published_at": "2026-07-18T11:55:18Z"
        },
        {
          "tag": "v0.1.151.1",
          "kind": "other",
          "published_at": "2026-07-12T09:15:04Z"
        },
        {
          "tag": "v0.1.151",
          "kind": "patch",
          "published_at": "2026-07-12T08:54:40Z"
        },
        {
          "tag": "v0.1.146",
          "kind": "patch",
          "published_at": "2026-07-07T08:54:08Z"
        },
        {
          "tag": "v0.1.143.1",
          "kind": "other",
          "published_at": "2026-07-03T10:05:31Z"
        },
        {
          "tag": "v0.1.143",
          "kind": "patch",
          "published_at": "2026-07-03T08:58:17Z"
        },
        {
          "tag": "v0.1.142",
          "kind": "patch",
          "published_at": "2026-07-01T13:30:15Z"
        },
        {
          "tag": "v0.1.141",
          "kind": "patch",
          "published_at": "2026-06-30T22:22:16Z"
        },
        {
          "tag": "v0.1.139",
          "kind": "patch",
          "published_at": "2026-06-29T02:49:08Z"
        },
        {
          "tag": "v0.1.138",
          "kind": "patch",
          "published_at": "2026-06-25T08:36:46Z"
        },
        {
          "tag": "v0.1.137",
          "kind": "patch",
          "published_at": "2026-06-19T02:39:41Z"
        },
        {
          "tag": "v0.1.135",
          "kind": "patch",
          "published_at": "2026-06-08T11:39:25Z"
        },
        {
          "tag": "v0.1.133",
          "kind": "patch",
          "published_at": "2026-06-02T06:29:11Z"
        },
        {
          "tag": "v0.1.132",
          "kind": "patch",
          "published_at": "2026-05-28T12:01:45Z"
        },
        {
          "tag": "v0.1.131",
          "kind": "patch",
          "published_at": "2026-05-26T10:36:08Z"
        },
        {
          "tag": "v0.1.130",
          "kind": "patch",
          "published_at": "2026-05-24T01:39:53Z"
        },
        {
          "tag": "v0.1.129",
          "kind": "patch",
          "published_at": "2026-05-20T14:31:23Z"
        },
        {
          "tag": "v0.1.127",
          "kind": "patch",
          "published_at": "2026-05-20T01:00:53Z"
        },
        {
          "tag": "v0.1.126.1",
          "kind": "other",
          "published_at": "2026-05-12T14:16:53Z"
        },
        {
          "tag": "v0.1.125.2",
          "kind": "other",
          "published_at": "2026-05-09T09:31:10Z"
        },
        {
          "tag": "v0.1.125",
          "kind": "patch",
          "published_at": "2026-05-08T06:16:37Z"
        },
        {
          "tag": "v0.1.123",
          "kind": "patch",
          "published_at": "2026-05-04T12:26:51Z"
        },
        {
          "tag": "v0.1.122",
          "kind": "patch",
          "published_at": "2026-05-04T09:56:08Z"
        },
        {
          "tag": "v0.1.119",
          "kind": "patch",
          "published_at": "2026-04-26T07:33:49Z"
        },
        {
          "tag": "v0.1.117",
          "kind": "patch",
          "published_at": "2026-04-24T02:04:51Z"
        },
        {
          "tag": "v0.1.116",
          "kind": "patch",
          "published_at": "2026-04-23T15:14:05Z"
        },
        {
          "tag": "v0.1.115.1",
          "kind": "other",
          "published_at": "2026-04-23T01:50:47Z"
        },
        {
          "tag": "v0.1.115",
          "kind": "patch",
          "published_at": "2026-04-21T08:57:20Z"
        },
        {
          "tag": "v0.1.114",
          "kind": "patch",
          "published_at": "2026-04-17T13:52:22Z"
        },
        {
          "tag": "v0.1.112.1",
          "kind": "other",
          "published_at": "2026-04-15T03:25:17Z"
        },
        {
          "tag": "v0.1.108",
          "kind": "patch",
          "published_at": "2026-04-07T12:27:13Z"
        },
        {
          "tag": "v0.1.106.1",
          "kind": "other",
          "published_at": "2026-03-31T03:13:25Z"
        },
        {
          "tag": "v0.1.104.1",
          "kind": "other",
          "published_at": "2026-03-22T12:16:49Z"
        },
        {
          "tag": "v0.1.103.1",
          "kind": "other",
          "published_at": "2026-03-19T09:14:01Z"
        },
        {
          "tag": "v0.1.101",
          "kind": "patch",
          "published_at": "2026-03-16T05:29:25Z"
        },
        {
          "tag": "v0.1.100.1",
          "kind": "other",
          "published_at": "2026-03-16T03:56:19Z"
        },
        {
          "tag": "v0.1.100",
          "kind": "patch",
          "published_at": "2026-03-16T03:56:42Z"
        },
        {
          "tag": "v0.1.96.2",
          "kind": "other",
          "published_at": "2026-03-13T13:53:06Z"
        },
        {
          "tag": "v0.1.96.1",
          "kind": "other",
          "published_at": "2026-03-13T02:37:02Z"
        },
        {
          "tag": "v0.1.96",
          "kind": "patch",
          "published_at": "2026-03-13T02:05:58Z"
        },
        {
          "tag": "v0.1.94.1",
          "kind": "other",
          "published_at": "2026-03-09T08:57:05Z"
        },
        {
          "tag": "v0.1.93.1",
          "kind": "other",
          "published_at": "2026-03-07T23:19:44Z"
        },
        {
          "tag": "v0.1.94",
          "kind": "patch",
          "published_at": "2026-03-07T23:18:49Z"
        },
        {
          "tag": "v0.1.91",
          "kind": "patch",
          "published_at": "2026-03-06T00:55:08Z"
        },
        {
          "tag": "v0.1.90",
          "kind": "patch",
          "published_at": "2026-03-05T05:22:15Z"
        },
        {
          "tag": "v0.1.88",
          "kind": "patch",
          "published_at": "2026-03-03T11:36:29Z"
        },
        {
          "tag": "v0.1.87",
          "kind": "patch",
          "published_at": "2026-02-28T02:58:12Z"
        },
        {
          "tag": "v0.1.86",
          "kind": "patch",
          "published_at": "2026-02-26T06:50:56Z"
        },
        {
          "tag": "v0.1.84",
          "kind": "patch",
          "published_at": "2026-02-19T00:07:13Z"
        },
        {
          "tag": "v0.1.78",
          "kind": "patch",
          "published_at": "2026-02-10T06:27:26Z"
        },
        {
          "tag": "v0.1.70.2",
          "kind": "other",
          "published_at": "2026-02-06T03:40:13Z"
        },
        {
          "tag": "v0.1.66.4",
          "kind": "other",
          "published_at": "2026-02-03T15:17:47Z"
        },
        {
          "tag": "v0.1.66.3",
          "kind": "other",
          "published_at": "2026-02-03T15:27:17Z"
        },
        {
          "tag": "v0.1.66.1",
          "kind": "other",
          "published_at": "2026-02-03T08:33:59Z"
        },
        {
          "tag": "v0.1.65.1",
          "kind": "other",
          "published_at": "2026-01-30T02:08:49Z"
        },
        {
          "tag": "v0.1.64.2",
          "kind": "other",
          "published_at": "2026-01-30T02:06:30Z"
        },
        {
          "tag": "v0.1.64.1",
          "kind": "other",
          "published_at": "2026-01-28T12:56:59Z"
        },
        {
          "tag": "v0.1.60.1",
          "kind": "other",
          "published_at": "2026-01-25T13:45:30Z"
        },
        {
          "tag": "v0.1.59.1",
          "kind": "other",
          "published_at": "2026-01-23T08:04:29Z"
        },
        {
          "tag": "v0.1.58.2",
          "kind": "other",
          "published_at": "2026-01-20T10:03:31Z"
        },
        {
          "tag": "v0.1.56.4",
          "kind": "other",
          "published_at": "2026-01-19T02:25:53Z"
        },
        {
          "tag": "v0.1.56.3",
          "kind": "other",
          "published_at": "2026-01-16T02:15:12Z"
        },
        {
          "tag": "v0.1.56.2",
          "kind": "other",
          "published_at": "2026-01-15T13:31:45Z"
        },
        {
          "tag": "v0.1.55.1",
          "kind": "other",
          "published_at": "2026-01-14T13:48:37Z"
        },
        {
          "tag": "v0.1.53.2",
          "kind": "other",
          "published_at": "2026-01-13T08:02:45Z"
        },
        {
          "tag": "v0.1.53.1",
          "kind": "other",
          "published_at": "2026-01-13T06:47:39Z"
        },
        {
          "tag": "v0.1.51.1",
          "kind": "other",
          "published_at": "2026-01-12T09:51:07Z"
        },
        {
          "tag": "v0.1.49.1",
          "kind": "other",
          "published_at": "2026-01-11T13:06:43Z"
        },
        {
          "tag": "v0.1.47.1",
          "kind": "other",
          "published_at": "2026-01-09T14:07:05Z"
        },
        {
          "tag": "v0.1.45.1",
          "kind": "other",
          "published_at": "2026-01-09T01:13:30Z"
        },
        {
          "tag": "v0.1.41.2",
          "kind": "other",
          "published_at": "2026-01-07T13:04:44Z"
        },
        {
          "tag": "v0.1.38.3",
          "kind": "other",
          "published_at": "2026-01-05T15:08:47Z"
        },
        {
          "tag": "v0.1.38.2",
          "kind": "other",
          "published_at": "2026-01-05T14:54:00Z"
        },
        {
          "tag": "v0.1.35.8",
          "kind": "other",
          "published_at": "2026-01-05T03:06:53Z"
        },
        {
          "tag": "v0.1.35.7",
          "kind": "other",
          "published_at": "2026-01-05T02:51:57Z"
        },
        {
          "tag": "v0.1.35.6",
          "kind": "other",
          "published_at": "2026-01-05T02:34:05Z"
        },
        {
          "tag": "v0.1.35.5",
          "kind": "other",
          "published_at": "2026-01-05T02:18:58Z"
        },
        {
          "tag": "v0.1.35.4",
          "kind": "other",
          "published_at": "2026-01-05T01:31:00Z"
        },
        {
          "tag": "v0.1.34.7",
          "kind": "other",
          "published_at": "2026-01-04T03:52:35Z"
        },
        {
          "tag": "v0.1.34.6",
          "kind": "other",
          "published_at": "2026-01-03T13:40:19Z"
        },
        {
          "tag": "v0.1.34.5",
          "kind": "other",
          "published_at": "2026-01-03T12:25:05Z"
        },
        {
          "tag": "v0.1.34.4",
          "kind": "other",
          "published_at": "2026-01-03T02:24:08Z"
        },
        {
          "tag": "v0.1.32.1",
          "kind": "other",
          "published_at": "2025-12-31T01:45:58Z"
        },
        {
          "tag": "v0.1.30.1",
          "kind": "other",
          "published_at": "2025-12-29T13:06:42Z"
        },
        {
          "tag": "v0.1.29.1",
          "kind": "other",
          "published_at": "2025-12-28T12:25:08Z"
        },
        {
          "tag": "v0.1.27.1",
          "kind": "other",
          "published_at": "2025-12-27T14:18:59Z"
        },
        {
          "tag": "v0.1.25.5",
          "kind": "other",
          "published_at": "2025-12-27T14:04:40Z"
        },
        {
          "tag": "v0.1.25.4",
          "kind": "other",
          "published_at": "2025-12-27T14:00:25Z"
        },
        {
          "tag": "v0.1.25.3",
          "kind": "other",
          "published_at": "2025-12-27T12:35:06Z"
        },
        {
          "tag": "v0.1.25.2",
          "kind": "other",
          "published_at": "2025-12-27T08:23:01Z"
        },
        {
          "tag": "v0.1.25.1",
          "kind": "other",
          "published_at": "2025-12-27T03:08:37Z"
        },
        {
          "tag": "v0.1.24.1",
          "kind": "other",
          "published_at": "2025-12-26T15:09:51Z"
        },
        {
          "tag": "v0.1.18.1",
          "kind": "other",
          "published_at": "2025-12-26T01:42:31Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "2730c1c43b29be003925b033f3f9e645e726bb8c",
          "body": null,
          "is_bot": true,
          "headline": "chore: sync VERSION to 0.1.165 [skip ci]",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-25T13:59:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e9a58c1cb8b5ef626a75c93b4d953fde5e67aa29",
          "body": "…edup\n\nfix(auth): 注册查重归一化邮箱别名,防止单收件箱批量注册",
          "is_bot": false,
          "headline": "Merge pull request #4814 from yiancode/fix/email-alias-registration-d…",
          "author_name": "Wesley Liddick",
          "author_login": "Wei-Shaw",
          "committed_at": "2026-07-25T12:54:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ef0ca5bdf53e21b0f460792e2d52d2f2ac58945c",
          "body": null,
          "is_bot": false,
          "headline": "style: 修正 dotStrippedEmailExpr 注释以满足 gofmt 文档注释规则",
          "author_name": "shaw",
          "author_login": "Wei-Shaw",
          "committed_at": "2026-07-25T11:51:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bc3acd6e2882da8f594bc610254d6ff1cbd61fae",
          "body": "对 #4814 的审计跟进修复:\n\n- 域名尾随点绕过:user@gmail.com. 的域名不在 gmail 家族名单内,点号折叠与\n  googlemail 归一被整体跳过,别名刷号原样可复现。归一化入口统一去掉 FQDN 根点。\n- 误拒合法用户:剥 \"+后缀\" 缺空串守卫,+alice@ 与 +bob@ 都折叠成 @domain,\n  该域后续 \"+x@\" 注册会永久 EMAIL_EXISTS 且无自助恢复。改为仅当 \"+\" 不在首位时剥离。\n- 无界不可索引全表扫描:原实现按 LOWER(email) LIKE '%@domain' 把整域邮箱读进内存,\n  且挂在公开未鉴权的 se\n[…]\n免同一收件箱的多个别名变体同时通过服务层前置查重。管理员建号仍走\n  Create,不受别名限制。\n- 能力断言静默 fail-open:别名查重方法上提到 UserRepository 端口(编译期强制),\n  移除可选接口类型断言与静默降级分支。\n- OAuth 邮箱注册的两条建号路径(同样发放注册赠额)纳入同一查重口径;邮箱换绑/绑定\n  不纳入,否则用户把邮箱改成自己收件箱的别名会被误拒。",
          "is_bot": false,
          "headline": "fix(auth): 收紧注册别名查重(根点绕过 / 误拒 / 无界扫描 / 并发竞态)",
          "author_name": "shaw",
          "author_login": "Wei-Shaw",
          "committed_at": "2026-07-25T11:40:53Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b6f9277515d8072fb56e07901eae07d41f3d0284",
          "body": "Registration duplicate checks compared the email verbatim (lowercase +\ntrim only), so a single inbox could spawn unlimited accounts via provider\nalias features: plus addressing (user+tag@gmail.com) and the Gmail dot\ntrick (u.s.e.r@gmail.com) both deliver to the same mailbox but were seen\nas distinct\n[…]\n registration only — email storage, display, login, and delivery\nare unchanged. OAuth-bound emails (already provider-verified) are out of\nscope.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(auth): normalize email aliases in registration dedup",
          "author_name": "yian",
          "author_login": "yiancode",
          "committed_at": "2026-07-25T11:19:15Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "2e2638c01de2db8523578fd308b7c28a0cf02969",
          "body": "…-fetch-floor\n\nfix(ollama): 修复 PG<=16 上 due 判定失效并恢复抓取下限",
          "is_bot": false,
          "headline": "Merge pull request #4864 from Wei-Shaw/fix/ollama-usage-pg-compat-and…",
          "author_name": "Wesley Liddick",
          "author_login": "Wei-Shaw",
          "committed_at": "2026-07-25T10:58:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1763db3a2df815c06af635422db3121f0b8eeac2",
          "body": "#4850 的用量刷新调度有三个问题,本次一并修复。\n\njsonpath .datetime() 直到 PostgreSQL 17 才接受 ISO-8601 的 Z 标识符,\n而服务写入的快照时间戳全部是 UTC(即 Z 形式)。在 PG 14/15/16 上\nollamaCloudUsageParseRFC3339SQL 因此把 fetched_at / last_attempt_at /\nnext_refresh_at 全部解析成 NULL,due 判定整条退化为 fail-open 分支:\n每轮 20 个刷新额度被 id 最小的非 due 组占满,id 更大的组永远不会刷新——\n正是该 \n[…]\n\"不应\n  返回\",解析失败会落入 fail-open 而被捕获)。已验证该测试在 PG 15 上\n  无此修复时失败、有修复时通过。\n- 新增 min fetch interval 下限与 debounce/interval 交叉校验的单元测试。\n- integration harness 新增 SUB2API_TEST_POSTGRES_IMAGE 覆盖,使套件可\n  针对最低受支持版本运行。",
          "is_bot": false,
          "headline": "fix(ollama): 修复 PG<=16 上 due 判定失效并恢复抓取下限",
          "author_name": "shaw",
          "author_login": "Wei-Shaw",
          "committed_at": "2026-07-25T10:34:37Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "bb0c38306f5a663b9e4dd652446cc43e242d1372",
          "body": "feat(ollama): 按模型请求刷新云端用量",
          "is_bot": false,
          "headline": "Merge pull request #4850 from alfadb/feat/ollama-usage-request-debounce",
          "author_name": "Wesley Liddick",
          "author_login": "Wei-Shaw",
          "committed_at": "2026-07-25T10:09:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b403f88f513da8f81f5a3cb451f22b4493bbd917",
          "body": "ListDue 在 LIMIT 前用与 service 纯函数一致的 debounce/max-wait/backoff\n规则筛真正 due 组,防止有活动但未到期的组占满每轮 20 名额。",
          "is_bot": false,
          "headline": "fix(ollama): 避免刷新候选饥饿",
          "author_name": "alfadb",
          "author_login": "alfadb",
          "committed_at": "2026-07-25T07:37:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f1eaed31ed2c16da44c4e3d4acb4169f55db4082",
          "body": "兼容旧客户端省略 debounce_minutes 的 PUT 请求。",
          "is_bot": false,
          "headline": "fix(ollama): 写入设置时缺省 debounce 补 1",
          "author_name": "alfadb",
          "author_login": "alfadb",
          "committed_at": "2026-07-25T07:37:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0f72b7dca7b6ef18e081b7912a366694baeeeb6b",
          "body": "将 Ollama Cloud settings HTML 自动抓取从固定间隔轮询改为请求驱动的\ntrailing debounce + max-wait:无新请求不再抓取,连续请求最晚在\nmax-wait 强制刷新;失败退避仍优先于活动 due。新增 debounce_minutes\n(默认 1),interval_minutes 保留为最长等待兼容字段。",
          "is_bot": false,
          "headline": "feat(ollama): 按模型请求刷新云端用量",
          "author_name": "alfadb",
          "author_login": "alfadb",
          "committed_at": "2026-07-25T07:37:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "43d4bae2464387817560a1aeb0b023cd0c9b22ee",
          "body": "feat(openai): 支持 ChatGPT Live / Frameless 网关",
          "is_bot": false,
          "headline": "Merge pull request #4843 from slovx2/feature/openai-live-gateway",
          "author_name": "Wesley Liddick",
          "author_login": "Wei-Shaw",
          "committed_at": "2026-07-25T07:27:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5374ce2a0f3172464638848d2899c10113e86994",
          "body": "…ateway",
          "is_bot": false,
          "headline": "Merge remote-tracking branch 'origin/main' into feature/openai-live-g…",
          "author_name": "shaw",
          "author_login": "Wei-Shaw",
          "committed_at": "2026-07-25T07:16:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7acc13a29b531aace9f5271082394974e3a064bb",
          "body": "三处功能修复(审计发现):\n\n1. 租约续租失败按会话终结处理。RefreshLiveLease 的 Lua 在 leaseID 被 GC 后不会\n   重新 ZADD,重连拿不回并发槽;原先把 ErrLiveUnavailable 当临时错误交给 observer\n   重连,会让会话以约 1 秒一轮的节奏空转到 ExpiresAt(最长 60 分钟),期间持着\n   上游 WS 连接却不计入账号/用户/API Key 的任何并发限制。\n\n2. observer 因过期放弃时补写 usage log。waitForLiveObserverRetry 原先把过期判定\n   混在重试条件里并返回\n[…]\ned,消除 ProxyLiveSideband 与\n   observeLiveCall 之间的判据漂移风险。\n\n迁移改名 186/187 -> 188/189:原编号会成为第三个 186,且 187 与已合入 main 的\n#4801 的 187_add_usage_log_session_id.sql 撞号。文件名即迁移主键,功能无害但易误读。\n\n新增两个测试均经变异验证(去掉修复后会失败)。",
          "is_bot": false,
          "headline": "fix(live): 租约丢失终止会话并补齐过期时的 usage log",
          "author_name": "shaw",
          "author_login": "Wei-Shaw",
          "committed_at": "2026-07-25T07:15:59Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b99ea955d94537d14d354c91140a97750c5956d6",
          "body": "…eview\n\nfix(frontend): 修复home页公告弹窗样式错乱问题,增加后台公告预览功能",
          "is_bot": false,
          "headline": "Merge pull request #4818 from weiness/fix/announcement-display-and-pr…",
          "author_name": "Wesley Liddick",
          "author_login": "Wei-Shaw",
          "committed_at": "2026-07-25T06:44:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e6a3030bebb8f28f129fdf46d89835ae2df29a64",
          "body": "…t-content\n\nfix(gemini): preserve image output in chat completions",
          "is_bot": false,
          "headline": "Merge pull request #4803 from wucm667/fix/issue-4798-gemini-image-cha…",
          "author_name": "Wesley Liddick",
          "author_login": "Wei-Shaw",
          "committed_at": "2026-07-25T06:43:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3176cdee1731bd7b15123eee47b891122f5de060",
          "body": "…-choice\n\nSupersedes the earlier attempt #4439 by @KnWsdHunter, which its own author closed on 2026-07-20 and which was never merged. This PR discloses that prior work in its description and contributes a broader 6-case test table. Courtesy credit to @KnWsdHunter for the original diagnosis.",
          "is_bot": false,
          "headline": "Merge pull request #4823 from wucm667/fix/issue-4819-drop-orphan-tool…",
          "author_name": "Wesley Liddick",
          "author_login": "Wei-Shaw",
          "committed_at": "2026-07-25T06:43:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6b267e4f40185cbb92823f89751360ca253e432a",
          "body": "解决 frontend/pnpm-lock.yaml 冲突:采用 main 的 frontend/package.json 与\nfrontend/pnpm-lock.yaml。本 PR 附带的 postcss ^8.4.32 -> ^8.5.22 并非安全降级\n(高于 main 的 pnpm.overrides 下限 >=8.5.18),但与本 PR 的公告弹窗主题无关,\n回退后 PR 范围回归其本职改动。\n本 PR 的功能改动(AnnouncementBell/Popup、announcement-markdown.css、\nAnnouncementsView、i18n)未受影响。",
          "is_bot": false,
          "headline": "Merge branch 'main' into fix/announcement-display-and-preview",
          "author_name": "shaw",
          "author_login": "Wei-Shaw",
          "committed_at": "2026-07-25T06:33:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f06c8c56985c2925732ff3d63a7ebbd2fa54302c",
          "body": "解决 frontend/pnpm-lock.yaml 冲突:采用 main 的 frontend/package.json 与\nfrontend/pnpm-lock.yaml,回退本 PR 附带的 postcss ^8.4.32 -> ^8.5.12 改动。\nmain 已通过 pnpm.overrides (\"postcss@<8.5.18\": \">=8.5.18\") 强制安全下限,\n本 PR 的直接依赖下限低于该值,保留会与 overrides 冲突且无安全收益。\n本 PR 的功能改动(gemini_* compat service 及其测试)未受影响。",
          "is_bot": false,
          "headline": "Merge branch 'main' into fix/issue-4798-gemini-image-chat-content",
          "author_name": "shaw",
          "author_login": "Wei-Shaw",
          "committed_at": "2026-07-25T06:33:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8bed40c67b10525e8fed382d221e3709a6818246",
          "body": "解决 frontend/pnpm-lock.yaml 冲突:采用 main 的 frontend/package.json 与\nfrontend/pnpm-lock.yaml,回退本 PR 附带的 postcss ^8.4.32 -> ^8.5.12 改动。\nmain 已通过 pnpm.overrides (\"postcss@<8.5.18\": \">=8.5.18\") 强制安全下限,\n本 PR 的直接依赖下限低于该值,保留会与 overrides 冲突且无安全收益。\n本 PR 的功能改动(openai_gateway_grok.go 及其测试)未受影响。",
          "is_bot": false,
          "headline": "Merge branch 'main' into fix/issue-4819-drop-orphan-tool-choice",
          "author_name": "shaw",
          "author_login": "Wei-Shaw",
          "committed_at": "2026-07-25T06:32:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a29a62112b0cf93892020d910b60ff308303a21b",
          "body": "…sient-cooldown\n\nfix(openai): preserve pool-mode same-account retries",
          "is_bot": false,
          "headline": "Merge pull request #4842 from Cynicismcart/fix/openai-pool-retry-tran…",
          "author_name": "Wesley Liddick",
          "author_login": "Wei-Shaw",
          "committed_at": "2026-07-25T06:30:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "eb03be0dbfb42c3dc341f51a3cfb608736394974",
          "body": "fix(grok): avoid pool cooldown on 5xx",
          "is_bot": false,
          "headline": "Merge pull request #4788 from wucm667/fix/issue-4782-pool-5xx-cooldown",
          "author_name": "Wesley Liddick",
          "author_login": "Wei-Shaw",
          "committed_at": "2026-07-25T06:29:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6d956bdc20f0d8c38275d4d77b628a8ff776711c",
          "body": "feat(usage): persist client session identifiers",
          "is_bot": false,
          "headline": "Merge pull request #4801 from SemonCat/feat/persist-session-id",
          "author_name": "Wesley Liddick",
          "author_login": "Wei-Shaw",
          "committed_at": "2026-07-25T06:03:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "333acde7d189b5a604854bc4fc5bb768c7ad58c9",
          "body": "…-item-id-v2\n\nfix(openai): sanitize API-key responses item IDs",
          "is_bot": false,
          "headline": "Merge pull request #4832 from ListenCodes/fix/openai-apikey-responses…",
          "author_name": "Wesley Liddick",
          "author_login": "Wei-Shaw",
          "committed_at": "2026-07-25T05:42:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9994eaa70f0867d36245d91e68157a76c020f756",
          "body": "…pace\n\nfix(openai): strip input item namespaces before HTTP forwarding / HTTP 转发前移除 input 项 namespace",
          "is_bot": false,
          "headline": "Merge pull request #4804 from scp-planet/fix/openai-strip-input-names…",
          "author_name": "Wesley Liddick",
          "author_login": "Wei-Shaw",
          "committed_at": "2026-07-25T05:42:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a9866f03dbbd69cba68b50c26f12f498369c92b2",
          "body": "…-copy\n\nfix(frontend): adapt affiliate copy controls for mobile",
          "is_bot": false,
          "headline": "Merge pull request #4841 from wucm667/fix/issue-4838-affiliate-mobile…",
          "author_name": "Wesley Liddick",
          "author_login": "Wei-Shaw",
          "committed_at": "2026-07-25T05:42:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0e39e21fa22701295121fdb2d778e9cae3675486",
          "body": "fix(images): log requested quality and size",
          "is_bot": false,
          "headline": "Merge pull request #4796 from 404QAQ/codex/fix-image-request-diagnostics",
          "author_name": "Wesley Liddick",
          "author_login": "Wei-Shaw",
          "committed_at": "2026-07-25T05:41:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "95cc6ee2c06bb3cc72dd506bc14b6856c2777248",
          "body": "fix(pricing): skip remote scheduler without URL",
          "is_bot": false,
          "headline": "Merge pull request #4793 from 404QAQ/codex/fix-pricing-empty-remote-url",
          "author_name": "Wesley Liddick",
          "author_login": "Wei-Shaw",
          "committed_at": "2026-07-25T05:41:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "db6fbdbf2921c8437f5407ca2087637d738c7c99",
          "body": null,
          "is_bot": false,
          "headline": "fix(openai): satisfy Live CI checks",
          "author_name": "song",
          "author_login": "slovx2",
          "committed_at": "2026-07-25T04:51:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "988d4b577e818b3fdc4c40bae954fe1e49c6a2d5",
          "body": null,
          "is_bot": false,
          "headline": "feat(openai): add macOS Live attestation",
          "author_name": "song",
          "author_login": "slovx2",
          "committed_at": "2026-07-25T04:50:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ec23716ee4db0a5a8295e8212f46236cdae416e3",
          "body": null,
          "is_bot": false,
          "headline": "fix(openai): align Live request metadata",
          "author_name": "song",
          "author_login": "slovx2",
          "committed_at": "2026-07-25T04:50:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e6eb23eaac8f76f60c7fbe2d707416eb4ea4e343",
          "body": null,
          "is_bot": false,
          "headline": "feat(openai): add Live gateway support",
          "author_name": "song",
          "author_login": "slovx2",
          "committed_at": "2026-07-25T04:50:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "37ed639d1e696daf1e3266aae3c172e837a53842",
          "body": "fix(security): 升 postcss 到 >=8.5.18 修复 frontend-security 红灯",
          "is_bot": false,
          "headline": "Merge pull request #4852 from Wei-Shaw/fix/bump-postcss-audit",
          "author_name": "Wesley Liddick",
          "author_login": "Wei-Shaw",
          "committed_at": "2026-07-25T04:01:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a5aae5db9a4fbe8000f07ff200bbab42bcd3da82",
          "body": "新披露两条 high 级公告命中锁文件里的 postcss@8.5.6,frontend-security 的\naudit exception 检查失败:\n\n- GHSA-6g55-p6wh-862q(2026-07-23 披露,修复版 8.5.12)\n  CSS 注释中攻击者可控的 sourceMappingURL 导致任意文件读取与信息泄露\n- GHSA-r28c-9q8g-f849(2026-07-24 披露,修复版 8.5.18)\n  Previous Source Map 自动加载存在路径穿越,导致任意 .map 文件泄露\n\npostcss 不只是 devDependency —— \n[…]\n自身依赖的\n补丁级跟随,diff 无其他无关变动。\n\n验证:复现 CI 失败步骤(pnpm audit --prod --audit-level=high +\ntools/check_pnpm_audit_exceptions.py)已通过;CI 所用 pnpm 9 的\n--frozen-lockfile 接受该锁文件;vue-tsc --noEmit、pnpm build、vitest 均通过。",
          "is_bot": false,
          "headline": "fix(security): 升 postcss 到 >=8.5.18 修复 frontend-security 红灯",
          "author_name": "shaw",
          "author_login": "Wei-Shaw",
          "committed_at": "2026-07-25T03:45:42Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6c9b84cc7aaddd8e1490f8c4c194c650134aaeb5",
          "body": "模型登记:/v1/models 清单、Bedrock 默认映射(us.anthropic.claude-opus-5-v1)、\n定价条目($5/$25 per MTok、1M 上下文、128K 输出)、前端模型清单与\nAnthropic/Bedrock 预设映射、限流 scope 简称。\n\n同时修复两个会静默出错的问题:\n\n- 定价家族兜底 3 倍超收:定价数据缺 claude-opus-5 时,matchByModelFamily\n  的 Phase 2 关键字兜底会落到 opus-4 系列、getFallbackPricing 会落到\n  claude-3-opus,两条路都按 $15/$\n[…]\n的 1M 上下文是默认能力。\n\nAntigravity 暂不接入:无上游支持证据,mapAntigravityModel 对未映射模型返回\n空字符串即\"该账号不支持\",fails closed 安全。\n\n回归测试 internal/service/claude_opus5_test.go 覆盖定价两层兜底、Bedrock\n三个闸门、thinking 转换与模型清单;逐个回退上述修复已确认测试会红。",
          "is_bot": false,
          "headline": "feat: 适配 Anthropic 新模型 claude-opus-5",
          "author_name": "shaw",
          "author_login": "Wei-Shaw",
          "committed_at": "2026-07-25T03:22:42Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "521db6869e3b577a14cf8192a0f907e04d52a104",
          "body": "Avoid recording the generic account-model transient cooldown for pool-mode statuses explicitly configured for same-account retry. This lets the bounded request-local retry budget complete while preserving cooldowns for other statuses and non-pool accounts.",
          "is_bot": false,
          "headline": "fix(openai): preserve pool-mode same-account retries",
          "author_name": "Cynicismcart",
          "author_login": "Cynicismcart",
          "committed_at": "2026-07-24T21:31:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "30d146e8b57169053587b6ee2e7f4880df20dccd",
          "body": null,
          "is_bot": false,
          "headline": "fix(frontend): adapt affiliate copy controls for mobile",
          "author_name": "wucm667",
          "author_login": "wucm667",
          "committed_at": "2026-07-24T20:27:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1891faa68d673b02c04cc17de0d54c2726821e4d",
          "body": null,
          "is_bot": false,
          "headline": "fix(openai): keep item ID sanitization linear",
          "author_name": "LIULIXING",
          "author_login": null,
          "committed_at": "2026-07-24T17:40:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "41456b69dd9e905b3e97a136d4219d62a9be60d5",
          "body": null,
          "is_bot": false,
          "headline": "fix(frontend): upgrade postcss for security audit",
          "author_name": "wucm667",
          "author_login": "wucm667",
          "committed_at": "2026-07-24T14:37:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c5d9d57940ff5f4566fc9db82f9143d64b8486a6",
          "body": null,
          "is_bot": false,
          "headline": "fix(openai): sanitize API-key responses item IDs",
          "author_name": "ListenCodes",
          "author_login": "ListenCodes",
          "committed_at": "2026-07-24T12:15:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "41f12e874d443cf2ee021414f73e42df9d928458",
          "body": null,
          "is_bot": false,
          "headline": "fix(grok): drop orphaned Responses tool choice",
          "author_name": "wucm667",
          "author_login": "wucm667",
          "committed_at": "2026-07-24T08:25:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "67bb446b5c362aabfac6e7708db1a93d760eb363",
          "body": null,
          "is_bot": false,
          "headline": "fix(deps): upgrade postcss for GHSA-6g55-p6wh-862q",
          "author_name": "weiness",
          "author_login": "weiness",
          "committed_at": "2026-07-24T08:12:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "972a4a471ef984e4a1bb52cb2248ed58ab94d591",
          "body": null,
          "is_bot": false,
          "headline": "feat(admin): add announcement preview action",
          "author_name": "weiness",
          "author_login": "weiness",
          "committed_at": "2026-07-24T07:44:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7b387e479d1c1a6cc71698121e52d62064d2fade",
          "body": null,
          "is_bot": false,
          "headline": "fix(frontend): share announcement rich text styles",
          "author_name": "weiness",
          "author_login": "weiness",
          "committed_at": "2026-07-24T07:44:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b5979050f3f94887c4220ff42156958d95163115",
          "body": null,
          "is_bot": false,
          "headline": "fix(frontend): upgrade postcss for security audit",
          "author_name": "wucm667",
          "author_login": "wucm667",
          "committed_at": "2026-07-24T00:33:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8276fdf6058d2b07ed51a89e3649c8cef2472aa7",
          "body": null,
          "is_bot": false,
          "headline": "fix: resolve Gemini compat test lint",
          "author_name": "wucm667",
          "author_login": "wucm667",
          "committed_at": "2026-07-23T19:00:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d2d4fb9221633b9f3c01dc48ec39adb4be2c4d15",
          "body": null,
          "is_bot": false,
          "headline": "fix(openai): satisfy buffer write lint checks",
          "author_name": "scp-planet",
          "author_login": "scp-planet",
          "committed_at": "2026-07-23T18:59:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1bdf99109b4841303f36e0d6f0bc4602eb24d53b",
          "body": null,
          "is_bot": false,
          "headline": "fix(openai): strip input namespaces for api key accounts",
          "author_name": "scp-planet",
          "author_login": "scp-planet",
          "committed_at": "2026-07-23T18:59:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e70fbf32044444aa3e34e905bbbcd8494962a0d6",
          "body": null,
          "is_bot": false,
          "headline": "fix(openai): strip residual input namespaces before HTTP forwarding",
          "author_name": "scp-planet",
          "author_login": "scp-planet",
          "committed_at": "2026-07-23T18:59:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4dc0aedbfeaecceb716012f36cbe423cb9ac1dee",
          "body": null,
          "is_bot": false,
          "headline": "fix(gemini): preserve image output in chat completions",
          "author_name": "wucm667",
          "author_login": "wucm667",
          "committed_at": "2026-07-23T18:42:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1c0cb24c7eb7ee39e614f254a8c72e62ead70287",
          "body": null,
          "is_bot": false,
          "headline": "feat(usage): persist client session identifiers",
          "author_name": "Edison42",
          "author_login": "SemonCat",
          "committed_at": "2026-07-23T17:22:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4fd9182affebe773d662e93ff9b5e9f3605c6486",
          "body": null,
          "is_bot": false,
          "headline": "fix(images): log requested quality and size",
          "author_name": "404QAQ",
          "author_login": "404QAQ",
          "committed_at": "2026-07-23T15:04:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "38cc916f7dc38c29e39ab654516aa23435c5a993",
          "body": null,
          "is_bot": false,
          "headline": "fix(pricing): skip remote scheduler without URL",
          "author_name": "404QAQ",
          "author_login": "404QAQ",
          "committed_at": "2026-07-23T14:43:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "51f354f5c298c82c42e2918616cb0fe4adb1f364",
          "body": null,
          "is_bot": false,
          "headline": "fix(grok): avoid pool cooldown on 5xx",
          "author_name": "wucm667",
          "author_login": "wucm667",
          "committed_at": "2026-07-23T12:24:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cb24522dd53f8f363d008e3afdc8e4baf9788cab",
          "body": null,
          "is_bot": true,
          "headline": "chore: sync VERSION to 0.1.164 [skip ci]",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-23T09:54:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cd8bb98c44303b2c8f04c0da340447c992f0cb7d",
          "body": "…20260723\n\nfix: optimize Codex identity imports and OpenAI account tests",
          "is_bot": false,
          "headline": "Merge pull request #4774 from superman2003/fix/issues-4763-4765-4769-…",
          "author_name": "Wesley Liddick",
          "author_login": "Wei-Shaw",
          "committed_at": "2026-07-23T09:38:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1be6f3018867d808f18c81c1885881337fec2328",
          "body": "ollamaUsageTestRepo.ListDueOllamaCloudUsageAccounts 返回浅拷贝共享\nExtra/Credentials map,RunDue 过滤循环的无锁读与组写协程在 r.mu 下的\nmap 删改构成数据竞争(-race 可复现;无 -race 时也可能触发 runtime\nconcurrent map read/write fatal 导致 CI 偶发崩溃)。两条返回路径改为\nr.mu 下 mergeMap 深拷贝,并补全 ListOllamaCloudUsageGroupAccounts\n只拷 Extra 不拷 Credentials 的半克隆,与基类 GetByID 惯例对齐。\n生产仓储每次查询返回全新行,不受影响。",
          "is_bot": false,
          "headline": "fix(ollama): 测试仓储到期查询深拷贝消除数据竞争",
          "author_name": "shaw",
          "author_login": "Wei-Shaw",
          "committed_at": "2026-07-23T09:14:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2faa0891e4f8de12983eac25585ef2a7eeeb1692",
          "body": "- PUT /admin/accounts/:id/ollama-cloud-usage/session 加入审计整体不入库\n  路由,并把裸键 session 纳入键级脱敏兜底,防止浏览器会话 Cookie 明文\n  留存 audit_logs.request_body\n- UpdateCredentials 的 Ollama 清理分支加顶层 credentials DISTINCT 守卫,\n  凭证未变化的持久化不再误清 openai 探测快照或重写 NULL extra",
          "is_bot": false,
          "headline": "fix(ollama): 审计日志不落会话明文并收紧凭证清理守卫",
          "author_name": "shaw",
          "author_login": "Wei-Shaw",
          "committed_at": "2026-07-23T08:43:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3f03c93bc698ee6cc4a826e0ea50bc46a64c40cc",
          "body": "feat(ollama): 支持 Cloud 官方用量自动刷新",
          "is_bot": false,
          "headline": "Merge pull request #4776 from alfadb/feature/ollama-cloud-usage",
          "author_name": "Wesley Liddick",
          "author_login": "Wei-Shaw",
          "committed_at": "2026-07-23T08:36:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5ac4a9fac2aa348ce964295c525da50dfaf8f8a8",
          "body": null,
          "is_bot": false,
          "headline": "feat(ollama): 支持 Cloud 官方用量自动刷新",
          "author_name": "alfadb",
          "author_login": "alfadb",
          "committed_at": "2026-07-23T07:50:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2c76506e072af3aa1a853ef7da71fec7a9ad60d7",
          "body": "…-deep-link\n\nfeat(payment): add mobile Alipay precreate deep link",
          "is_bot": false,
          "headline": "Merge pull request #4734 from wjx2951874/feat/alipay-mobile-precreate…",
          "author_name": "Wesley Liddick",
          "author_login": "Wei-Shaw",
          "committed_at": "2026-07-23T06:06:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dd5956be5e695b34ebde2d728f826b4ee6f24ef2",
          "body": null,
          "is_bot": false,
          "headline": "fix(openai): prefer concrete GPT-5.6 test model",
          "author_name": "superman2003",
          "author_login": "superman2003",
          "committed_at": "2026-07-23T05:44:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5dfe838c218c0f5b0ba9ce1935a9f0874473996a",
          "body": null,
          "is_bot": false,
          "headline": "fix(admin): optimize Codex identity import index",
          "author_name": "superman2003",
          "author_login": "superman2003",
          "committed_at": "2026-07-23T05:43:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6aeea70ee008825604ac3293ca0f216e951795d1",
          "body": "…ream-quarantine\n\nfix(openai): quarantine proxies after incomplete SSE streams",
          "is_bot": false,
          "headline": "Merge pull request #4749 from heathermhuang/codex/fix-openai-proxy-st…",
          "author_name": "Wesley Liddick",
          "author_login": "Wei-Shaw",
          "committed_at": "2026-07-23T03:20:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6f7bad3f2fa3a5727485848a1d0c4c132fcf4cb8",
          "body": "…t-cooldown\n\nfix(grok): cool down accounts after upstream 402",
          "is_bot": false,
          "headline": "Merge pull request #4751 from heathermhuang/codex/fix-grok-402-accoun…",
          "author_name": "Wesley Liddick",
          "author_login": "Wei-Shaw",
          "committed_at": "2026-07-23T03:19:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fbc88edf90d726d465e627cb4215fce873b4a673",
          "body": "…grok-image\n\nfix(simple-mode): enable images for auto-created Grok default",
          "is_bot": false,
          "headline": "Merge pull request #4750 from heathermhuang/codex/fix-simple-default-…",
          "author_name": "Wesley Liddick",
          "author_login": "Wei-Shaw",
          "committed_at": "2026-07-23T03:19:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "da5c80e1139aff114904ef542508bc5e1e027e70",
          "body": "…alize\n\nfix(openai): OAuth 透传路径补齐 input 规范化,修复 Input must be a list",
          "is_bot": false,
          "headline": "Merge pull request #4724 from fengshao1227/fix/passthrough-input-norm…",
          "author_name": "Wesley Liddick",
          "author_login": "Wei-Shaw",
          "committed_at": "2026-07-23T03:19:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "09b1309c91e7621a93817d2ba98f86d8b7be5ca4",
          "body": "…model-normalization\n\nfix(billing): normalize channel pricing model names",
          "is_bot": false,
          "headline": "Merge pull request #4755 from wucm667/fix/issue-4754-channel-pricing-…",
          "author_name": "Wesley Liddick",
          "author_login": "Wei-Shaw",
          "committed_at": "2026-07-23T03:18:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "aee9ab36cb12bf45d3c49563b12f755d599f4cc9",
          "body": "fix(frontend): import Grok keys into Grok Build",
          "is_bot": false,
          "headline": "Merge pull request #4721 from superman2003/fix/ccswitch-grokbuild-4720",
          "author_name": "Wesley Liddick",
          "author_login": "Wei-Shaw",
          "committed_at": "2026-07-23T03:18:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "31e7ae8195817dc7f4dbacd399d1bd5116aad3de",
          "body": "…format\n\nfix(admin): 模型限流恢复时间进位到天并在提示中补全日期",
          "is_bot": false,
          "headline": "Merge pull request #4726 from feitianbubu/fix/model-rate-limit-reset-…",
          "author_name": "Wesley Liddick",
          "author_login": "Wei-Shaw",
          "committed_at": "2026-07-23T03:17:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ba88cc239cdbe689bc5785dd36238caf6ecb14ef",
          "body": "… model\n\nComposite public aliases (e.g. all/claude) reach the Anthropic/Gemini\nbilling core via OriginalModel/ChannelMappedModel source overrides.\nUnknown aliases resolved to no pricing and silently recorded $0 cost,\nwhile family-word aliases were mispriced by the fallback family match\n(Opus traffic\n[…]\nrequested public alias, consistent with every other endpoint\n  (billing unaffected: empty BillingModelSource never triggers source\n  overrides)\n\nPriced traffic and non-composite groups are unaffected.",
          "is_bot": false,
          "headline": "fix(billing): bill composite alias requests by the concrete forwarded…",
          "author_name": "shaw",
          "author_login": "Wei-Shaw",
          "committed_at": "2026-07-23T02:26:58Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "90c4f50a5ed5073ab5149803968eb0f326c26c38",
          "body": "The composite-groups PR (#3581) replaced the raw ent SubscriptionPlan\nresponse of GET /admin/payment/plans with a projection struct but\ndropped the currency field added by #4323. PlanEditDialog then read an\nundefined currency, sent an empty string on save, and silently wiped\nthe stored plan currency. Restore currency plus created_at/updated_at\nso the projection preserves the full original response shape.",
          "is_bot": false,
          "headline": "fix(admin): restore currency and timestamps in admin plan list response",
          "author_name": "shaw",
          "author_login": "Wei-Shaw",
          "committed_at": "2026-07-23T02:26:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3e5d4af411977b0b14860ac5796831c02b0fb1be",
          "body": "feat: Add composite group route registry",
          "is_bot": false,
          "headline": "Merge pull request #3581 from heathermhuang/codex/composite-groups",
          "author_name": "Wesley Liddick",
          "author_login": "Wei-Shaw",
          "committed_at": "2026-07-23T02:09:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ca6b192728f7737530dfeaaa7c1802fb0cdcbaa5",
          "body": null,
          "is_bot": false,
          "headline": "fix: preserve composite video content routing",
          "author_name": "Heatherm Huang",
          "author_login": "heathermhuang",
          "committed_at": "2026-07-23T01:26:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cb81e17feadbb02435d2e82485151e37c9e098bd",
          "body": null,
          "is_bot": false,
          "headline": "test: align composite route contracts after rebase",
          "author_name": "Heatherm Huang",
          "author_login": "heathermhuang",
          "committed_at": "2026-07-23T01:20:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1c7959d0de5de3df4ba681a6d01bc13b92682794",
          "body": null,
          "is_bot": false,
          "headline": "fix: allow composite grok chat completions",
          "author_name": "Heatherm Huang",
          "author_login": "heathermhuang",
          "committed_at": "2026-07-23T01:20:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1d2dfab86d3393d6d050915c7abfe0e88cf401f1",
          "body": null,
          "is_bot": false,
          "headline": "fix: allow composite grok messages routing",
          "author_name": "Heatherm Huang",
          "author_login": "heathermhuang",
          "committed_at": "2026-07-23T01:20:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "06e7d12640c263106d4a79dcde4371df6fcd70fb",
          "body": null,
          "is_bot": false,
          "headline": "Fix composite Grok video status routing",
          "author_name": "Heatherm Huang",
          "author_login": "heathermhuang",
          "committed_at": "2026-07-23T01:20:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ee332cee640196040bd4d11e6a6c98592151fbea",
          "body": null,
          "is_bot": false,
          "headline": "Fix composite model defaults for linked platforms",
          "author_name": "Heatherm Huang",
          "author_login": "heathermhuang",
          "committed_at": "2026-07-23T01:20:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2e774a48b388c021fe244f4d526bdb6986a4e421",
          "body": null,
          "is_bot": false,
          "headline": "Align Grok composite example with live model",
          "author_name": "Heatherm Huang",
          "author_login": "heathermhuang",
          "committed_at": "2026-07-23T01:20:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ce3272c41bd8b716e0864ab9ef2b2c5a16fe0609",
          "body": null,
          "is_bot": false,
          "headline": "Build composite subscription bucket two",
          "author_name": "Heatherm Huang",
          "author_login": "heathermhuang",
          "committed_at": "2026-07-23T01:20:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3a683fff55736253836619b55b87c36b2e59cc52",
          "body": null,
          "is_bot": false,
          "headline": "Fix composite route alias attribution",
          "author_name": "Heatherm Huang",
          "author_login": "heathermhuang",
          "committed_at": "2026-07-23T01:20:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ff666be530c35650b63b338b08b17127cc0a9844",
          "body": null,
          "is_bot": false,
          "headline": "Fix composite route lint issues",
          "author_name": "Heatherm Huang",
          "author_login": "heathermhuang",
          "committed_at": "2026-07-23T01:20:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a008b63c1644d66f2a9eff27598a1d8bf9370c76",
          "body": null,
          "is_bot": false,
          "headline": "Add composite group route registry",
          "author_name": "Heatherm Huang",
          "author_login": "heathermhuang",
          "committed_at": "2026-07-23T01:20:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c8d1e2e16fd830fbc87736dd879c245c7c7243ab",
          "body": null,
          "is_bot": false,
          "headline": "Harden composite group product surfaces",
          "author_name": "Heatherm Huang",
          "author_login": "heathermhuang",
          "committed_at": "2026-07-23T01:19:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ebc1028771718c2c9c8685407bcaf3f12aac651b",
          "body": null,
          "is_bot": false,
          "headline": "Add composite group routing",
          "author_name": "Heatherm Huang",
          "author_login": "heathermhuang",
          "committed_at": "2026-07-23T01:19:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fa2da0409ecba08d0cb3258d5d1a5e23f9d71757",
          "body": null,
          "is_bot": false,
          "headline": "chore: update sponsors",
          "author_name": "shaw",
          "author_login": "Wei-Shaw",
          "committed_at": "2026-07-23T01:04:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "44093579e963662514487eb9e312af974545add3",
          "body": null,
          "is_bot": false,
          "headline": "fix(billing): normalize channel pricing model names",
          "author_name": "wucm667",
          "author_login": "wucm667",
          "committed_at": "2026-07-22T20:25:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "47ad29db3ebdabc758b232710f52007cfc4235ff",
          "body": null,
          "is_bot": false,
          "headline": "fix(openai): quarantine proxies after stream disconnects",
          "author_name": "Heatherm Huang",
          "author_login": "heathermhuang",
          "committed_at": "2026-07-22T16:12:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "33d694b89b568e66226f6329cef287c3e432ea4d",
          "body": null,
          "is_bot": false,
          "headline": "fix(simple-mode): enable images for auto Grok default",
          "author_name": "Heatherm Huang",
          "author_login": "heathermhuang",
          "committed_at": "2026-07-22T16:08:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ca0d3314cf67aa9342ae9aa2fd75a443859cf638",
          "body": null,
          "is_bot": false,
          "headline": "fix(grok): cool down accounts after 402",
          "author_name": "Heatherm Huang",
          "author_login": "heathermhuang",
          "committed_at": "2026-07-22T16:06:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "63cef605940c9acf0ef6f1827065877f18952c5d",
          "body": null,
          "is_bot": false,
          "headline": "chore: update sponsors",
          "author_name": "shaw",
          "author_login": "Wei-Shaw",
          "committed_at": "2026-07-22T14:21:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7914433011cacb32ce0d7fb4ade4bdb529934cb9",
          "body": null,
          "is_bot": false,
          "headline": "feat(payment): add mobile Alipay precreate deep link",
          "author_name": "wjx2951874",
          "author_login": "wjx2951874",
          "committed_at": "2026-07-22T11:18:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "60013c5f100be7b4f2e6caee415883d221d33e32",
          "body": null,
          "is_bot": true,
          "headline": "chore: sync VERSION to 0.1.163 [skip ci]",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-22T09:08:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "48d58d72ff57fb15a8ab28afcb4f0acc4c31291e",
          "body": null,
          "is_bot": false,
          "headline": "fix(admin): 模型限流恢复时间进位到天并在提示中补全日期",
          "author_name": "feitianbubu",
          "author_login": "feitianbubu",
          "committed_at": "2026-07-22T08:57:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3e26dfa5bbf4b4a7d1d2287a9488926b9ea3e256",
          "body": null,
          "is_bot": false,
          "headline": "style: 统一 input 包装类型为 []any,与正常 OAuth 路径一致",
          "author_name": "li",
          "author_login": "fengshao1227",
          "committed_at": "2026-07-22T08:49:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "851436c552bdc003d4a1b1affa13b19855494b8d",
          "body": "openai_passthrough=true 的 OAuth 账号透传路径\n(normalizeOpenAIPassthroughOAuthBody) 未对 input 字段做\nstring→array 转换,导致上游拒绝 \"Input must be a list\"。\n\n正常 OAuth 路径 (openai_codex_transform.go:290) 已有此逻辑,\n透传路径遗漏。补齐三种非数组 input 的规范化:\n- string → [{type:\"message\",role:\"user\",content:<text>}]\n- 空白 string → []\n- 单 object → [<object>]",
          "is_bot": false,
          "headline": "fix(openai): OAuth 透传路径补齐 input 规范化,修复 Input must be a list",
          "author_name": "li",
          "author_login": "fengshao1227",
          "committed_at": "2026-07-22T08:46:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a3a1575e9df524b529a92bb8cf4ef63231c34cf9",
          "body": null,
          "is_bot": false,
          "headline": "fix(frontend): import Grok keys into Grok Build",
          "author_name": "superman2003",
          "author_login": "superman2003",
          "committed_at": "2026-07-22T08:12:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d0bdd7e771636a8d315f542cafd39484f39bd60c",
          "body": "formatMultiplier rounded any value >= 0.01 with toFixed(2), so a\nconfigured multiplier like 0.035 displayed as 0.04x in the /usage and\n/admin/usage cost tooltips. Format with up to 4 decimals and trim\ntrailing zeros while keeping at least 2 decimals; display-only fix,\nbilling amounts were already computed from the true multiplier.",
          "is_bot": false,
          "headline": "fix(usage): keep significant decimals in cost tooltip rate multiplier",
          "author_name": "shaw",
          "author_login": "Wei-Shaw",
          "committed_at": "2026-07-22T06:57:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cffea2979b8ebbe25108528bb827047c85dcf6db",
          "body": "fix(usage): 统一后台使用记录模型筛选口径,解决 grok 相关模型无法过滤问题",
          "is_bot": false,
          "headline": "Merge pull request #4701 from nagi330/fix/records-model-filter-0721",
          "author_name": "Wesley Liddick",
          "author_login": "Wei-Shaw",
          "committed_at": "2026-07-22T06:51:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 96,
      "commits_last_year": 5268,
      "latest_release_at": "2026-07-26T03:41:01Z",
      "latest_release_tag": "v0.1.165",
      "releases_from_tags": false,
      "days_since_last_push": 0,
      "active_weeks_last_year": 32,
      "days_since_latest_release": 0,
      "mean_days_between_releases": 2.7
    },
    "community": {
      "has_readme": false,
      "has_license": false,
      "has_description": false,
      "has_contributing": false,
      "health_percentage": null,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "github.com/Wei-Shaw/sub2api",
          "exists": true,
          "license": null,
          "keywords": [],
          "ecosystem": "go",
          "matches_repo": false,
          "registry_url": "https://pkg.go.dev/github.com/Wei-Shaw/sub2api",
          "is_deprecated": false,
          "latest_version": "v0.1.165",
          "repository_url": "https://github.com/Wei-Shaw/sub2api",
          "versions_count": 159,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-07-25T12:54:37Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 0
        }
      ]
    },
    "popularity": {
      "forks": 0,
      "stars": 0,
      "watchers": 0,
      "fork_history": {
        "days": [],
        "complete": true,
        "collected": 0,
        "total_forks": 0
      },
      "star_history": {
        "days": [],
        "complete": true,
        "collected": 0,
        "total_stars": 0,
        "collected_at": null
      },
      "open_issues_and_prs": 0
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [],
      "has_llms_txt": false,
      "has_dockerfile": true,
      "has_mcp_signal": false,
      "bootstrap_files": [
        "Makefile",
        "backend/Makefile",
        "deploy/Makefile"
      ],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [
        "frontend/tsconfig.json"
      ],
      "toolchain_manifests": [
        "backend/go.mod"
      ],
      "largest_source_bytes": 1800692,
      "source_files_sampled": 2531,
      "oversized_source_files": 76,
      "agent_instruction_files": [],
      "agent_instruction_max_bytes": null
    },
    "dependencies": {
      "manifests": [
        "backend/go.mod",
        "frontend/package.json"
      ],
      "advisories": {
        "error": null,
        "scope": null,
        "source": null,
        "findings": [],
        "collected": false,
        "malicious": [],
        "truncated": false,
        "by_severity": {},
        "advisory_count": 0,
        "affected_count": 0,
        "assessed_count": 0,
        "malicious_count": 0,
        "assessed_package": null,
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "go",
        "npm"
      ],
      "dependencies": [
        {
          "name": "entgo.io/ent",
          "manifest": "backend/go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.14.5"
        },
        {
          "name": "github.com/DATA-DOG/go-sqlmock",
          "manifest": "backend/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.5.2"
        },
        {
          "name": "github.com/alicebob/miniredis/v2",
          "manifest": "backend/go.mod",
          "ecosystem": "go",
          "version_constraint": "v2.38.0"
        },
        {
          "name": "github.com/alitto/pond/v2",
          "manifest": "backend/go.mod",
          "ecosystem": "go",
          "version_constraint": "v2.6.2"
        },
        {
          "name": "github.com/andybalholm/brotli",
          "manifest": "backend/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.2.0"
        },
        {
          "name": "github.com/aws/aws-sdk-go-v2",
          "manifest": "backend/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.41.5"
        },
        {
          "name": "github.com/aws/aws-sdk-go-v2/config",
          "manifest": "backend/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.32.10"
        },
        {
          "name": "github.com/aws/aws-sdk-go-v2/credentials",
          "manifest": "backend/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.19.10"
        },
        {
          "name": "github.com/aws/aws-sdk-go-v2/service/s3",
          "manifest": "backend/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.97.3"
        },
        {
          "name": "github.com/cespare/xxhash/v2",
          "manifest": "backend/go.mod",
          "ecosystem": "go",
          "version_constraint": "v2.3.0"
        },
        {
          "name": "github.com/coder/websocket",
          "manifest": "backend/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.8.14"
        },
        {
          "name": "github.com/dgraph-io/ristretto",
          "manifest": "backend/go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.2.0"
        },
        {
          "name": "github.com/gin-gonic/gin",
          "manifest": "backend/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.9.1"
        },
        {
          "name": "github.com/golang-jwt/jwt/v5",
          "manifest": "backend/go.mod",
          "ecosystem": "go",
          "version_constraint": "v5.2.2"
        },
        {
          "name": "github.com/google/uuid",
          "manifest": "backend/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.6.0"
        },
        {
          "name": "github.com/google/wire",
          "manifest": "backend/go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.7.0"
        },
        {
          "name": "github.com/gorilla/websocket",
          "manifest": "backend/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.5.3"
        },
        {
          "name": "github.com/imroc/req/v3",
          "manifest": "backend/go.mod",
          "ecosystem": "go",
          "version_constraint": "v3.57.0"
        },
        {
          "name": "github.com/klauspost/compress",
          "manifest": "backend/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.18.2"
        },
        {
          "name": "github.com/lib/pq",
          "manifest": "backend/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.10.9"
        },
        {
          "name": "github.com/patrickmn/go-cache",
          "manifest": "backend/go.mod",
          "ecosystem": "go",
          "version_constraint": "v2.1.0+incompatible"
        },
        {
          "name": "github.com/pquerna/otp",
          "manifest": "backend/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.5.0"
        },
        {
          "name": "github.com/redis/go-redis/v9",
          "manifest": "backend/go.mod",
          "ecosystem": "go",
          "version_constraint": "v9.17.2"
        },
        {
          "name": "github.com/refraction-networking/utls",
          "manifest": "backend/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.8.2"
        },
        {
          "name": "github.com/robfig/cron/v3",
          "manifest": "backend/go.mod",
          "ecosystem": "go",
          "version_constraint": "v3.0.1"
        },
        {
          "name": "github.com/shirou/gopsutil/v4",
          "manifest": "backend/go.mod",
          "ecosystem": "go",
          "version_constraint": "v4.25.6"
        },
        {
          "name": "github.com/shopspring/decimal",
          "manifest": "backend/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.4.0"
        },
        {
          "name": "github.com/smartwalle/alipay/v3",
          "manifest": "backend/go.mod",
          "ecosystem": "go",
          "version_constraint": "v3.2.29"
        },
        {
          "name": "github.com/spf13/viper",
          "manifest": "backend/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.18.2"
        },
        {
          "name": "github.com/stretchr/testify",
          "manifest": "backend/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.11.1"
        },
        {
          "name": "github.com/stripe/stripe-go/v85",
          "manifest": "backend/go.mod",
          "ecosystem": "go",
          "version_constraint": "v85.0.0"
        },
        {
          "name": "github.com/testcontainers/testcontainers-go/modules/postgres",
          "manifest": "backend/go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.40.0"
        },
        {
          "name": "github.com/testcontainers/testcontainers-go/modules/redis",
          "manifest": "backend/go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.40.0"
        },
        {
          "name": "github.com/tidwall/gjson",
          "manifest": "backend/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.18.0"
        },
        {
          "name": "github.com/tidwall/sjson",
          "manifest": "backend/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.2.5"
        },
        {
          "name": "github.com/tiktoken-go/tokenizer",
          "manifest": "backend/go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.8.0"
        },
        {
          "name": "github.com/wechatpay-apiv3/wechatpay-go",
          "manifest": "backend/go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.2.21"
        },
        {
          "name": "github.com/zeromicro/go-zero",
          "manifest": "backend/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.9.4"
        },
        {
          "name": "go.uber.org/zap",
          "manifest": "backend/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.24.0"
        },
        {
          "name": "golang.org/x/crypto",
          "manifest": "backend/go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.53.0"
        },
        {
          "name": "golang.org/x/image",
          "manifest": "backend/go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.39.0"
        },
        {
          "name": "golang.org/x/mod",
          "manifest": "backend/go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.37.0"
        },
        {
          "name": "golang.org/x/net",
          "manifest": "backend/go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.56.0"
        },
        {
          "name": "golang.org/x/sync",
          "manifest": "backend/go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.21.0"
        },
        {
          "name": "golang.org/x/term",
          "manifest": "backend/go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.44.0"
        },
        {
          "name": "gopkg.in/natefinch/lumberjack.v2",
          "manifest": "backend/go.mod",
          "ecosystem": "go",
          "version_constraint": "v2.2.1"
        },
        {
          "name": "gopkg.in/yaml.v3",
          "manifest": "backend/go.mod",
          "ecosystem": "go",
          "version_constraint": "v3.0.1"
        },
        {
          "name": "modernc.org/sqlite",
          "manifest": "backend/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.44.3"
        },
        {
          "name": "@airwallex/components-sdk",
          "manifest": "frontend/package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.30.2"
        },
        {
          "name": "@lobehub/icons",
          "manifest": "frontend/package.json",
          "ecosystem": "npm",
          "version_constraint": "^4.0.2"
        },
        {
          "name": "@stripe/stripe-js",
          "manifest": "frontend/package.json",
          "ecosystem": "npm",
          "version_constraint": "^9.0.1"
        },
        {
          "name": "@tanstack/vue-virtual",
          "manifest": "frontend/package.json",
          "ecosystem": "npm",
          "version_constraint": "^3.13.23"
        },
        {
          "name": "@vueuse/core",
          "manifest": "frontend/package.json",
          "ecosystem": "npm",
          "version_constraint": "^10.7.0"
        },
        {
          "name": "axios",
          "manifest": "frontend/package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.18.0"
        },
        {
          "name": "chart.js",
          "manifest": "frontend/package.json",
          "ecosystem": "npm",
          "version_constraint": "^4.4.1"
        },
        {
          "name": "dompurify",
          "manifest": "frontend/package.json",
          "ecosystem": "npm",
          "version_constraint": "^3.3.1"
        },
        {
          "name": "driver.js",
          "manifest": "frontend/package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.4.0"
        },
        {
          "name": "file-saver",
          "manifest": "frontend/package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.0.5"
        },
        {
          "name": "marked",
          "manifest": "frontend/package.json",
          "ecosystem": "npm",
          "version_constraint": "^17.0.1"
        },
        {
          "name": "pinia",
          "manifest": "frontend/package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.1.7"
        },
        {
          "name": "qrcode",
          "manifest": "frontend/package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.5.4"
        },
        {
          "name": "vue",
          "manifest": "frontend/package.json",
          "ecosystem": "npm",
          "version_constraint": "^3.4.0"
        },
        {
          "name": "vue-chartjs",
          "manifest": "frontend/package.json",
          "ecosystem": "npm",
          "version_constraint": "^5.3.0"
        },
        {
          "name": "vue-draggable-plus",
          "manifest": "frontend/package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.6.1"
        },
        {
          "name": "vue-i18n",
          "manifest": "frontend/package.json",
          "ecosystem": "npm",
          "version_constraint": "^9.14.5"
        },
        {
          "name": "vue-router",
          "manifest": "frontend/package.json",
          "ecosystem": "npm",
          "version_constraint": "^4.2.5"
        },
        {
          "name": "xlsx",
          "manifest": "frontend/package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.18.5"
        }
      ],
      "all_dependencies": {
        "error": "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
        "source": null,
        "packages": [],
        "collected": false,
        "truncated": false,
        "total_count": null,
        "direct_count": null,
        "indirect_count": null
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 0,
        "merged_prs": 0,
        "open_issues": 0,
        "closed_ratio": null,
        "closed_issues": 0,
        "closed_unmerged_prs": 0
      },
      "bus_factor": 2,
      "bot_contributors": 1,
      "top_contributors": [
        {
          "type": "User",
          "login": "Wei-Shaw",
          "commits": 1810,
          "avatar_url": "https://avatars.githubusercontent.com/u/26101719?v=4"
        },
        {
          "type": "User",
          "login": "IanShaw027",
          "commits": 533,
          "avatar_url": "https://avatars.githubusercontent.com/u/131567472?v=4"
        },
        {
          "type": "User",
          "login": "touwaeriol",
          "commits": 459,
          "avatar_url": "https://avatars.githubusercontent.com/u/52620633?v=4"
        },
        {
          "type": "User",
          "login": "slovx2",
          "commits": 154,
          "avatar_url": "https://avatars.githubusercontent.com/u/2713715?v=4"
        },
        {
          "type": "User",
          "login": "wucm667",
          "commits": 127,
          "avatar_url": "https://avatars.githubusercontent.com/u/109257021?v=4"
        },
        {
          "type": "User",
          "login": "heathermhuang",
          "commits": 107,
          "avatar_url": "https://avatars.githubusercontent.com/u/2759991?v=4"
        },
        {
          "type": "User",
          "login": "BenjaminAaron196",
          "commits": 98,
          "avatar_url": "https://avatars.githubusercontent.com/u/96227918?v=4"
        },
        {
          "type": "User",
          "login": "StarryKira",
          "commits": 62,
          "avatar_url": "https://avatars.githubusercontent.com/u/59300016?v=4"
        },
        {
          "type": "User",
          "login": "cyhhao",
          "commits": 57,
          "avatar_url": "https://avatars.githubusercontent.com/u/5381613?v=4"
        },
        {
          "type": "User",
          "login": "jianjianai",
          "commits": 56,
          "avatar_url": "https://avatars.githubusercontent.com/u/59829816?v=4"
        }
      ],
      "contributors_sampled": 99,
      "top_contributor_share": 0.406
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "backend-ci.yml",
        "cla.yml",
        "release.yml",
        "security-scan.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [
        ".eslintrc.cjs",
        ".golangci.yml"
      ],
      "has_editorconfig": false,
      "has_linter_config": true,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "go.sum",
        "pnpm-lock.yaml"
      ],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 10,
            "reason": "no binaries found in the repo",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": 0,
            "reason": "branch protection not enabled on development/release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": null,
            "reason": "no pull request found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 0,
            "reason": "Found 0/30 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 10,
            "reason": "project has 10 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": 0,
            "reason": "no update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 10,
            "reason": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": 10,
            "reason": "packaging workflow detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 0,
            "reason": "dependency not pinned by hash detected -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "no SAST tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 0,
            "reason": "security policy file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": 0,
            "reason": "Project has not signed or included provenance with any releases.",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 0,
            "reason": "detected GitHub workflow tokens with excessive permissions",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 0,
            "reason": "66 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "2730c1c43b29be003925b033f3f9e645e726bb8c",
        "ran_at": "2026-07-26T04:43:55Z",
        "aggregate_score": 3.4,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": false,
      "has_dependabot_config": false
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-26T02:06:50Z",
      "oldest_open_prs": [],
      "last_merged_pr_at": null,
      "ci_last_conclusion": null,
      "oldest_open_issues": []
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/sunnchao/sub2api",
    "host": "github.com",
    "name": "sub2api",
    "owner": "sunnchao"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "at_risk",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 48,
      "inputs": {
        "security": 34,
        "vitality": 88,
        "community": 12,
        "governance": 38,
        "engineering": 62
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "excellent",
        "name": "Vitality",
        "value": 88,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "excellent",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 86,
            "inputs": {
              "commits_last_year": 5268,
              "human_commit_share": 0.97,
              "days_since_last_push": 0,
              "active_weeks_last_year": 32
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 0 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "32/52 weeks with commits",
                "points": 22.2,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 32
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "5268 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 5268
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": null,
            "notes": [],
            "value": 90,
            "inputs": {
              "releases_count": 96,
              "latest_release_tag": "v0.1.165",
              "releases_from_tags": false,
              "days_since_latest_release": 0,
              "mean_days_between_releases": 2.7
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "96 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 96
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 0 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~2.7 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 2.7
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "Project has not signed or included provenance with any releases.",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "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": 0,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "last human commit 0 days ago",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_maintained",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "critical",
        "name": "Community & Adoption",
        "value": 12,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "critical",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 1,
            "inputs": {
              "forks": 0,
              "stars": 0,
              "watchers": 0,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "0 stars",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "0 forks",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "0 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "critical",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 25,
            "inputs": {
              "has_readme": false,
              "has_license": false,
              "has_contributing": false,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (LGPL-3.0)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "LGPL-3.0"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.3
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "at_risk",
        "name": "Sustainability & Governance",
        "value": 38,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "moderate",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 62,
            "inputs": {
              "bus_factor": 2,
              "contributors_sampled": 99,
              "top_contributor_share": 0.406
            },
            "components": [
              {
                "key": "bus_factor",
                "name": "Bus factor",
                "detail": "2 contributor(s) cover half of all commits",
                "points": 25.2,
                "status": "partial",
                "details": [
                  {
                    "code": "bus_factor",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "max_points": 54
              },
              {
                "key": "commit_distribution",
                "name": "Commit distribution",
                "detail": "top contributor authored 41% of commits",
                "points": 13.4,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 41
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "99 contributors",
                "points": 13.5,
                "status": "met",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 99
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 10 contributing companies or organizations",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "critical",
            "name": "Issue & PR responsiveness",
            "note": "Excluded from scoring (no data or not applicable): Issue resolution, PR acceptance. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "issue_resolution",
                    "pr_acceptance"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 1,
            "inputs": {
              "merged_prs": 0,
              "open_issues": 0,
              "closed_issues": 0,
              "issue_closed_ratio": null,
              "closed_unmerged_prs": 0
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "no issues or no data",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_issues_or_data",
                    "params": {}
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "no decided pull requests or no data",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_decided_prs_or_data",
                    "params": {}
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "at_risk",
            "name": "Ownership & stewardship",
            "note": "Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "verified_domain"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 47,
            "inputs": {
              "followers": 1,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "sunnchao",
              "public_repos": 83,
              "account_age_days": 3918
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "personal (user) account",
                "points": 10,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_personal",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": "not applicable to user accounts",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_applicable_to_user_accounts",
                    "params": {}
                  }
                ],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "1 followers of sunnchao",
                "points": 2.2,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 1,
                      "login": "sunnchao"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "83 public repos, account ~10 yr old",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 83
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 10
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "moderate",
        "name": "Engineering Quality",
        "value": 62,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "good",
            "name": "Engineering practices",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: CI-Tests. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_ci_tests"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 80,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": true,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "4 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 4
                    }
                  }
                ],
                "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": ".eslintrc.cjs, .golangci.yml",
                "points": 16,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".eslintrc.cjs, .golangci.yml"
                    }
                  }
                ],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "no pull request found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "at_risk",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 35,
            "inputs": {
              "topics": [],
              "has_wiki": true,
              "homepage": null,
              "has_readme": false,
              "has_docs_dir": true,
              "has_description": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 0,
                "status": "missed",
                "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": 0,
                "status": "missed",
                "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": 34,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): CI-Tests. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "ci_tests"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 34,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 17,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 1,
              "scorecard_aggregate": 3.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": "no pull request found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 10 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": "no update tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow detected",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "no SAST tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "Project has not signed or included provenance with any releases.",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "detected GitHub workflow tokens with excessive permissions",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "66 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": 4
            },
            "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": "moderate",
        "name": "AI Readiness",
        "value": 66,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "at_risk",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.897,
              "agent_instruction_files": [],
              "agent_instruction_max_bytes": null
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "no CLAUDE.md / AGENTS.md / editor rules",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_instructions",
                    "params": {}
                  }
                ],
                "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": "87 of 97 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 87,
                      "sampled": 97
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "good",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 74,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "go.sum",
                "pnpm-lock.yaml"
              ],
              "has_dockerfile": true,
              "typed_language": true,
              "bootstrap_files": [
                "Makefile",
                "backend/Makefile",
                "deploy/Makefile"
              ],
              "has_devcontainer": false,
              "has_linter_config": true,
              "typecheck_configs": [
                "frontend/tsconfig.json"
              ],
              "agent_commit_share": 0.01,
              "toolchain_manifests": [
                "backend/go.mod"
              ],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "Makefile, backend/Makefile, deploy/Makefile",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Makefile, backend/Makefile, deploy/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": ".eslintrc.cjs, .golangci.yml",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".eslintrc.cjs, .golangci.yml"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "frontend/tsconfig.json",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "frontend/tsconfig.json"
                    }
                  }
                ],
                "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": "1 of the last 100 commits agent-authored or agent-credited",
                "points": 2,
                "status": "partial",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 1,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "no automated dependency updates observed",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_dependency_automation",
                    "params": {}
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 98,
            "inputs": {
              "primary_language": "Go",
              "largest_source_bytes": 1800692,
              "source_files_sampled": 2531,
              "oversized_source_files": 76
            },
            "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": "76/2531 source files over 60KB",
                "points": 53.3,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 2531,
                      "oversized": 76
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "Community profile unavailable",
    "go package 'github.com/Wei-Shaw/sub2api' points at a different repository (https://github.com/Wei-Shaw/sub2api); excluded from ecosystem scoring",
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-26T04:44:13.846842Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/s/sunnchao/sub2api.svg",
  "full_name": "sunnchao/sub2api",
  "license_state": "standard",
  "license_spdx": "LGPL-3.0"
}

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

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

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