Registro público
Informe de salud del softwareesquema 0.25.0 · métricas 1.13.0 · 2026-07-21 23:06 UTC

Aider-AI / aider

aider is AI pair programming in your terminal

PythonApache-2.0★ 47.589 estrellas⑂ 4746 forksdesde may 2023Ver en GitHub ↗

Aider-AI/aider tiene un índice de salud de 63 sobre 100, lo que lo sitúa en la banda Moderado. Su puntuación más alta es Community & Adoption (88/100) y la más baja, Security (10/100). Se actualizó por última vez hace 60 días. Una sola persona concentra la mayor parte del trabajo reciente.

63
global / 100
Moderado

Índice de salud del software

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

63
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

Aider AIOrganización
794 seguidores7 repositorios públicosdesde jun 2024

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

Ecosistemas de paquetes

RegistroPaqueteVersiónDescargas / mesVersionesÚltima publicación
PyPIaider-chat0.86.2848.398174hace 159 días

Métricas por categoría

Vitalidad

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

68Moderado · 22% del índice global
Cómo se puntúa
18/36Recencia de push — último push hace 60 días
18.7/36Cadencia de commits — 27/52 semanas con commits
18/18Volumen de commits — 182 commits en el último año
0/10OpenSSF Scorecard: Maintained — sin datos
Datos de entrada utilizados
commits_last_year182
human_commit_share1
days_since_last_push60
active_weeks_last_year27
Cómo se puntúa
27/27Publica versiones — 93 versiones publicadas
16.2/36Recencia de las versiones — última versión hace 346 días
27/27Cadencia de publicación — una versión cada ~16,5 días
0/10OpenSSF Scorecard: Signed-Releases — sin datos
Datos de entrada utilizados
releases_count93
latest_release_tagv0.86.0
releases_from_tagsno
days_since_latest_release346
mean_days_between_releases16,5

Comunidad y Adopción

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

88Excelente · 18% del índice global
Cómo se puntúa
60/60Estrellas — 47.589 estrellas
25/25Forks — 4746 forks
13.4/15Observadores — 254 observadores
Datos de entrada utilizados
forks4746
stars47.589
watchers254
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonwindow_too_short
Cómo se puntúa
22.5/22.5README
22.5/22.5Licencia — licencia reconocida (Apache-2.0)
18/18Guía CONTRIBUTING
0/13.5Código de conducta
0/7.2Plantilla de issues
0/6.3Plantilla de PR
Datos de entrada utilizados
has_readme
has_license
has_contributing
has_issue_templateno
has_code_of_conductno
has_pull_request_templateno
Cómo se puntúa
79/80Descargas mensuales — 848.398 descargas/mes en pypi
0/20Dependientes en el registro — no lo informa este ecosistema
Datos de entrada utilizados
packagesaider-chat
dependents
ecosystemspypi
total_downloads
monthly_downloads848.398
Excluidos de la puntuación (sin datos o no aplicable): Dependientes en el registro. Los pesos restantes se han renormalizado.

Sostenibilidad y Gobernanza

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

58Moderado · 24% del índice global
Cómo se puntúa
9/54Factor bus — la mitad de los commits recae en 1 contribuyente(s)
0.7/22.5Distribución de commits — el principal contribuyente firma el 97% de los commits
13.5/13.5Amplitud de contribuyentes — 100 contribuyentes
0/10OpenSSF Scorecard: Contributors — sin datos
Datos de entrada utilizados
bus_factor1
contributors_sampled100
top_contributor_share0,97
Cómo se puntúa
32.4/46.8Resolución de issues — 69% de issues cerradas
16.1/38.3Aceptación de PR — 288/683 PR decididos fusionados
0/15OpenSSF Scorecard: Code-Review — sin datos
Datos de entrada utilizados
merged_prs288
open_issues1320
closed_issues2981
issue_closed_ratio0,693
closed_unmerged_prs395
Cómo se puntúa
30/30Respaldo de la propiedad — propiedad de una organización
0/20Dominio verificado
20.9/25Alcance del propietario — 794 seguidores de Aider-AI
10.8/25Trayectoria — 7 repos públicos, cuenta de ~2 años
Datos de entrada utilizados
followers794
owner_typeOrganization
is_verified
owner_loginAider-AI
public_repos7
account_age_days773
Cómo se puntúa
25/25Publicado y resoluble — 1 paquete(s) en pypi
35/35Recencia de publicación — última publicación hace 159 días
20/20Historial de versiones — 174 versiones en el registro
20/20No obsoleto — activo, ni obsoleto ni retirado
Datos de entrada utilizados
packagesaider-chat
ecosystemspypi
any_deprecatedno
min_days_since_publish159

Calidad de Ingeniería

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

85Excelente · 20% del índice global
Cómo se puntúa
24/24Flujos de trabajo de CI — 10 flujo(s) de trabajo
24/24Pruebas presentes
16/16Configuración de linter — .flake8
9.6/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_config
Cómo se puntúa
30/30README
0/25Directorio de documentación
15/15Sitio de documentación / página del proyecto — https://aider.chat/
10/10Descripción del repositorio
10/10Topics — 13 topics
10/10Wiki
Datos de entrada utilizados
topicschatgpt, cli, command-line, gpt-4, openai, gpt-3, gpt-35-turbo, claude-3, gpt-4o, anthropic, gemini, llama, sonnet
has_wiki
homepagehttps://aider.chat/
has_readme
has_docs_dirno
has_description

Seguridad

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

10Crítico · 16% del índice global
Cómo se puntúa
0/30Política de seguridad (SECURITY.md)
0/25Configuración de Dependabot
0/25Lockfiles de dependencias — biblioteca publicada — los lockfiles son cosa de las aplicaciones, no se esperan aquí
0/20Flujo de trabajo de CodeQL
Datos de entrada utilizados
sourcefile_signals
lockfiles
manifestspyproject.toml, requirements.txt, requirements/requirements-browser.txt, requirements/requirements-dev.txt, requirements/requirements-help.txt, requirements/requirements-playwright.txt
has_codeql_workflowno
has_security_policyno
has_dependabot_configno
Excluidos de la puntuación (sin datos o no aplicable): Lockfiles de dependencias. Los pesos restantes se han renormalizado.
Cómo se puntúa
2.6/35Dependencias directas libres de avisos conocidos — 13 afectados: aiohttp 3.13.3 (critical 9.1), gitpython 3.1.46 (critical 9.8), litellm 1.81.10 (critical 9.8), +10 más
25/25Dependencias indirectas libres de avisos conocidos — ninguna dependencia indirecta tiene un aviso conocido
18.5/40Sin avisos pendientes — 7 paquete(s) con avisos sin atender más allá de 90 días; el más antiguo publicado hace 160 días
Datos de entrada utilizados
sourceosv
advisories131
affected_packages13
assessed_packages107
unassessed_packages0
affected_by_severitycritical 4, high 3, moderate 4, low 1, unknown 1
direct_affected_packages13
Se cotejó el cierre de dependencias en tiempo de ejecución de pypi:aider-chat@0.86.2 —lo que arrastra la instalación del paquete publicado—: 107 paquetes. No se analiza la alcanzabilidad.

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.

61Moderado · 0% del índice global
Cómo se puntúa
45/45Instrucciones para agentes — aider/website/docs/llms/gemini.md
0/15Documentación legible por máquinas (llms.txt)
34.1/40Historial de commits legible — 64 de 100 commits humanos declaran su intención (asunto estructurado o cuerpo explicativo)
Datos de entrada utilizados
has_llms_txtno
legible_history_share0,64
agent_instruction_filesaider/website/docs/llms/gemini.md
agent_instruction_max_bytes700
Cómo se puntúa
0/18Arranque con un solo comando
22/22Pruebas automatizadas
11/11Configuración de lint / formato — .flake8
0/11Verificación estática de tipos
10/10Entorno reproducible — Dockerfile
10/10Práctica demostrada con agentes — 34 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 — sin datos
Datos de entrada utilizados
has_nixno
has_tests
lockfiles
has_dockerfile
typed_languageno
bootstrap_files
has_devcontainerno
has_linter_config
typecheck_configs
agent_commit_share0,34
toolchain_manifests
dependency_bot_commit_share0
Cómo se puntúa
0/45Código verificable por tipos — Python sin configuración de verificación de tipos
53.4/55Tamaños de archivo manejables — 5/175 archivos fuente de más de 60 KB
Datos de entrada utilizados
primary_languagePython
largest_source_bytes193.531
source_files_sampled175
oversized_source_files5
Cómo se puntúa
0/40Esquema de API (OpenAPI/GraphQL/proto)
0/20Servidor MCP
40/40Ejemplos ejecutables — examples
Datos de entrada utilizados
example_dirsexamples
has_mcp_signalno
api_schema_files

Datos clave

47.589estrellas de GitHub
100contribuidores
182commits en los últimos 12 meses
60días desde el último push
93versiones publicadas
1factor bus
1320issues abiertas
PyPIecosistemas de paquetes

Advertencias de recopilación de datos

  • Advisory severity resolved for 120 of 131 advisories (lookup cap); the remainder are reported as unknown severity
  • OpenSSF Scorecard did not return a usable result (2026/07/21 23:05:57 Warning: PATs stored in env variables GITHUB_AUTH_TOKEN and GITHUB_TOKEN differ. Scorecard will use the former.); skipping Scorecard checks

Más detalle

Historial de estrellas y forks 47.589 ★ / 4746 ⇿
47.589Estrellas
4746Forks

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

Solo se muestra el historial más reciente: este repositorio supera la ventana de recopilación, por lo que no se captura el historial más antiguo.

010.00020.00030.00040.00050.00047.5894746512026-022026-042026-07
Todas las dependencias 210

Conjunto completo de dependencias resueltas según el grafo de dependencias de GitHub: 0 paquetes directos y 210 indirectos (transitivos). El cierre transitivo es completo cuando el repositorio incluye un lockfile.

RegistroPaqueteVersiónRelación
PyPIaiohappyeyeballs2.6.1indirecta
PyPIaiohttp3.13.3indirecta
PyPIaiosignal1.4.0indirecta
PyPIaiosqlite0.22.1indirecta
PyPIaltair6.0.0indirecta
PyPIannotated-doc0.0.4indirecta
PyPIannotated-types0.7.0indirecta
PyPIanyio4.12.1indirecta
PyPIasgiref3.11.1indirecta
PyPIattrs25.4.0indirecta
PyPIaudioop-ltsindirecta
PyPIbackoff2.2.1indirecta
PyPIbanks2.4.1indirecta
PyPIbeautifulsoup44.14.3indirecta
PyPIblinker1.9.0indirecta
PyPIbuild1.4.0indirecta
PyPIcachetools7.0.5indirecta
PyPIcertifi2026.2.25indirecta
PyPIcffi2.0.0indirecta
PyPIcfgv3.5.0indirecta
PyPIcharset-normalizer3.4.6indirecta
PyPIclick8.3.1indirecta
PyPIcodespell2.4.2indirecta
PyPIcogapp3.6.0indirecta
PyPIcolorama0.4.6indirecta
PyPIconfigargparse1.7.5indirecta
PyPIcontourpy1.3.3indirecta
PyPIcoverage7.13.4indirecta
PyPIcryptography46.0.5indirecta
PyPIcycler0.12.1indirecta
PyPIdataclasses-json0.6.7indirecta
PyPIdeprecated1.3.1indirecta
PyPIdiff-match-patch20241021indirecta
PyPIdirtyjson1.0.8indirecta
PyPIdiskcache5.6.3indirecta
PyPIdistlib0.4.0indirecta
PyPIdistro1.9.0indirecta
PyPIfastapi0.135.1indirecta
PyPIfastuuid0.14.0indirecta
PyPIfilelock3.25.2indirecta
PyPIfiletype1.2.0indirecta
PyPIflake87.3.0indirecta
PyPIfonttools4.62.1indirecta
PyPIfrozenlist1.8.0indirecta
PyPIfsspec2026.2.0indirecta
PyPIgitdb4.0.12indirecta
PyPIgitpython3.1.46indirecta
PyPIgoogle-api-core2.30.0indirecta
PyPIgoogle-auth2.49.1indirecta
PyPIgoogle-cloud-bigquery3.40.1indirecta
PyPIgoogle-cloud-core2.5.0indirecta
PyPIgoogle-crc32c1.8.0indirecta
PyPIgoogle-resumable-media2.8.0indirecta
PyPIgoogleapis-common-protos1.73.0indirecta
PyPIgreenlet3.3.2indirecta
PyPIgrep-ast0.9.0indirecta
PyPIgriffe2.0.0indirecta
PyPIgriffecli2.0.0indirecta
PyPIgriffelib2.0.0indirecta
PyPIgrpcio1.78.0indirecta
PyPIgrpcio-status1.78.0indirecta
PyPIh110.16.0indirecta
PyPIhf-xet1.4.2indirecta
PyPIhttpcore1.0.9indirecta
PyPIhttpx0.28.1indirecta
PyPIhuggingface-hub1.7.1indirecta
PyPIidentify2.6.18indirecta
PyPIidna3.11indirecta
PyPIimgcat0.6.0indirecta
PyPIimportlib-metadata7.2.1indirecta
PyPIimportlib-resources6.5.2indirecta
PyPIiniconfig2.3.0indirecta
PyPIjinja23.1.6indirecta
PyPIjiter0.13.0indirecta
PyPIjoblib1.5.3indirecta
PyPIjson50.13.0indirecta
PyPIjsonschema4.26.0indirecta
PyPIjsonschema-specifications2025.9.1indirecta
PyPIkiwisolver1.5.0indirecta
PyPIlitellm1.82.3indirecta
PyPIllama-index-core0.14.18indirecta
PyPIllama-index-embeddings-huggingface0.7.0indirecta
PyPIllama-index-instrumentation0.5.0indirecta
PyPIllama-index-workflows2.16.1indirecta
PyPIlox1.0.0indirecta
PyPImarkdown-it-py4.0.0indirecta
PyPImarkupsafe3.0.3indirecta
PyPImarshmallow3.26.2indirecta
PyPImatplotlib3.10.8indirecta
PyPImccabe0.7.0indirecta
PyPImdurl0.1.2indirecta
PyPImixpanel5.0.0indirecta
PyPImpmath1.3.0indirecta
PyPImslex1.3.0indirecta
PyPImultidict6.7.1indirecta
PyPImypy-extensions1.1.0indirecta
PyPInarwhals2.18.0indirecta
PyPInest-asyncio1.6.0indirecta
PyPInetworkx3.4.2indirecta
PyPInltk3.9.3indirecta
PyPInodeenv1.10.0indirecta
PyPInumpyindirecta
PyPInumpy2.4.3indirecta
PyPIopenai2.28.0indirecta
PyPIorjson3.11.7indirecta
PyPIoslex0.1.3indirecta
PyPIpackaging26.0indirecta
PyPIpandas2.3.3indirecta
PyPIpathspec1.0.4indirecta
PyPIpexpect4.9.0indirecta
PyPIpillow12.1.1indirecta
PyPIpip26.0.1indirecta
PyPIpip-tools7.5.3indirecta
PyPIplatformdirs4.9.4indirecta
PyPIplaywright1.58.0indirecta
PyPIpluggy1.6.0indirecta
PyPIposthog7.9.12indirecta
PyPIpre-commit4.5.1indirecta
PyPIprompt-toolkit3.0.52indirecta
PyPIpropcache0.4.1indirecta
PyPIproto-plus1.27.1indirecta
PyPIprotobuf6.33.5indirecta
PyPIpsutil7.2.2indirecta
PyPIptyprocess0.7.0indirecta
PyPIpyarrow23.0.1indirecta
PyPIpyasn10.6.2indirecta
PyPIpyasn1-modules0.4.2indirecta
PyPIpycodestyle2.14.0indirecta
PyPIpycparser3.0indirecta
PyPIpydantic2.12.5indirecta
PyPIpydantic-core2.41.5indirecta
PyPIpydeck0.9.1indirecta
PyPIpydub0.25.1indirecta
PyPIpyee13.0.1indirecta
PyPIpyflakes3.4.0indirecta
PyPIpygments2.19.2indirecta
PyPIpypandoc1.17indirecta
PyPIpyparsing3.3.2indirecta
PyPIpyperclip1.11.0indirecta
PyPIpyproject-hooks1.2.0indirecta
PyPIpytest9.0.2indirecta
PyPIpytest-cov7.0.0indirecta
PyPIpytest-env1.6.0indirecta
PyPIpython-dateutil2.9.0.post0indirecta
PyPIpython-discovery1.1.3indirecta
PyPIpython-dotenv1.2.2indirecta
PyPIpytz2026.1.post1indirecta
PyPIpyyaml6.0.3indirecta
PyPIreferencing0.37.0indirecta
PyPIregex2026.2.28indirecta
PyPIrequests2.32.5indirecta
PyPIrich14.3.3indirecta
PyPIrpds-py0.30.0indirecta
PyPIsafetensors0.7.0indirecta
PyPIscikit-learn1.8.0indirecta
PyPIscipyindirecta
PyPIscipy1.17.1indirecta
PyPIsemver3.0.4indirecta
PyPIsentence-transformers5.3.0indirecta
PyPIsetuptools82.0.1indirecta
PyPIshellingham1.5.4indirecta
PyPIshtab1.8.0indirecta
PyPIsix1.17.0indirecta
PyPIsmmap5.0.3indirecta
PyPIsniffio1.3.1indirecta
PyPIsocksio1.0.0indirecta
PyPIsounddevice0.5.5indirecta
PyPIsoundfile0.13.1indirecta
PyPIsoupsieve2.8.3indirecta
PyPIsqlalchemy2.0.48indirecta
PyPIstarlette0.52.1indirecta
PyPIstreamlit1.55.0indirecta
PyPIsympy1.14.0indirecta
PyPItenacity9.1.4indirecta
PyPIthreadpoolctl3.6.0indirecta
PyPItiktoken0.12.0indirecta
PyPItinytag2.2.1indirecta
PyPItokenizers0.22.2indirecta
PyPItoml0.10.2indirecta
PyPItorch2.10.0indirecta
PyPItornado6.5.5indirecta
PyPItqdm4.67.3indirecta
PyPItransformers5.3.0indirecta
PyPItree-sitter0.23.2indirecta
PyPItree-sitter0.25.2indirecta
PyPItree-sitter-c-sharp0.23.1indirecta
PyPItree-sitter-embedded-template0.25.0indirecta
PyPItree-sitter-language-pack0.13.0indirecta
PyPItree-sitter-yaml0.7.2indirecta
PyPItyper0.24.1indirecta
PyPItyping-extensions4.15.0indirecta
PyPItyping-inspect0.9.0indirecta
PyPItyping-inspection0.4.2indirecta
PyPItzdata2025.3indirecta
PyPIurllib32.6.3indirecta
PyPIuv0.10.11indirecta
PyPIvirtualenv21.2.0indirecta
PyPIwatchfiles1.1.1indirecta
PyPIwcwidth0.6.0indirecta
PyPIwheel0.46.3indirecta
PyPIwrapt2.1.2indirecta
PyPIyarl1.23.0indirecta
PyPIzipp3.23.0indirecta
RubyGemsgithub-pagesindirecta
RubyGemshtml-prooferindirecta
RubyGemsjekyllindirecta
RubyGemsjekyll-redirect-fromindirecta
RubyGemsjekyll-sitemapindirecta
RubyGemsjust-the-docs0.8.2indirecta
RubyGemswebrickindirecta
Avisos de dependencias 13

Instalar pypi:aider-chat@0.86.2 arrastra 107 paquetes, directos y transitivos: 13 tienen avisos conocidos, de los cuales 13 son dependencias directas.

PaqueteVersiónRelaciónGravedadAvisosCorregido en
aiohttp3.13.3directacrítica423.14.1
gitpython3.1.46directacrítica123.1.52
litellm1.81.10directacrítica171.84.0
pillow12.1.1directacrítica3112.3.0
click8.3.1directaalta18.3.3
soupsieve2.8.3directaalta42.8.4
starlette0.52.1directaalta101.3.1
diskcache5.6.3directamoderada2
idna3.11.0directamoderada23.15
python-dotenv1.2.1directamoderada21.2.2
requests2.32.5directamoderada22.33.0
pygments2.19.2directabaja22.20.0
urllib32.6.3directadesconocida4

Un aviso significa que la versión registrada en el grafo de dependencias cae dentro del rango afectado de un aviso. No se analiza la alcanzabilidad, y el grafo incluye fijaciones de desarrollo y prueba: un hallazgo puede referirse al utillaje y no al software distribuido.

Informe JSON sin procesar legible por máquina
{
  "data": {
    "repo": {
      "topics": [
        "chatgpt",
        "cli",
        "command-line",
        "gpt-4",
        "openai",
        "gpt-3",
        "gpt-35-turbo",
        "claude-3",
        "gpt-4o",
        "anthropic",
        "gemini",
        "llama",
        "sonnet"
      ],
      "is_fork": false,
      "size_kb": 140356,
      "has_wiki": true,
      "homepage": "https://aider.chat/",
      "languages": {
        "CSS": 67532,
        "HTML": 44976,
        "Ruby": 196,
        "SCSS": 1957,
        "Shell": 66537,
        "Python": 1333453,
        "Dockerfile": 4405,
        "JavaScript": 60909,
        "PowerShell": 19648,
        "Tree-sitter Query": 64845
      },
      "pushed_at": "2026-05-22T14:02:20Z",
      "created_at": "2023-05-09T18:57:49Z",
      "owner_type": "Organization",
      "updated_at": "2026-07-21T22:00:50Z",
      "description": "aider is AI pair programming in your terminal",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "Apache-2.0",
      "default_branch": "main",
      "license_spdx_raw": "Apache-2.0",
      "primary_language": "Python",
      "significant_languages": [
        "Python"
      ]
    },
    "owner": {
      "blog": "https://aider.chat/",
      "name": "Aider AI",
      "type": "Organization",
      "login": "Aider-AI",
      "company": null,
      "location": "United States of America",
      "followers": 794,
      "avatar_url": "https://avatars.githubusercontent.com/u/172139148?v=4",
      "created_at": "2024-06-08T17:48:56Z",
      "is_verified": null,
      "public_repos": 7,
      "account_age_days": 773
    },
    "license": {
      "state": "standard",
      "spdx_id": "Apache-2.0",
      "raw_spdx": "Apache-2.0",
      "file_present": true,
      "scorecard_found": null,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v0.86.0",
          "kind": "minor",
          "published_at": "2025-08-09T17:42:19Z"
        },
        {
          "tag": "v0.85.0",
          "kind": "minor",
          "published_at": "2025-06-27T23:47:09Z"
        },
        {
          "tag": "v0.84.0",
          "kind": "minor",
          "published_at": "2025-05-30T23:28:11Z"
        },
        {
          "tag": "v0.83.0",
          "kind": "minor",
          "published_at": "2025-05-09T22:46:05Z"
        },
        {
          "tag": "v0.82.0",
          "kind": "minor",
          "published_at": "2025-04-14T23:29:05Z"
        },
        {
          "tag": "v0.81.0",
          "kind": "minor",
          "published_at": "2025-04-04T09:06:20Z"
        },
        {
          "tag": "v0.80.0",
          "kind": "minor",
          "published_at": "2025-03-31T01:21:50Z"
        },
        {
          "tag": "v0.79.0",
          "kind": "minor",
          "published_at": "2025-03-25T21:16:38Z"
        },
        {
          "tag": "v0.78.0",
          "kind": "minor",
          "published_at": "2025-03-21T18:59:35Z"
        },
        {
          "tag": "v0.77.0",
          "kind": "minor",
          "published_at": "2025-03-13T21:46:58Z"
        },
        {
          "tag": "v0.76.0",
          "kind": "minor",
          "published_at": "2025-03-10T16:00:08Z"
        },
        {
          "tag": "v0.75.0",
          "kind": "minor",
          "published_at": "2025-03-04T20:41:19Z"
        },
        {
          "tag": "v0.74.0",
          "kind": "minor",
          "published_at": "2025-02-06T22:43:06Z"
        },
        {
          "tag": "v0.73.0",
          "kind": "minor",
          "published_at": "2025-01-31T22:02:06Z"
        },
        {
          "tag": "v0.72.0",
          "kind": "minor",
          "published_at": "2025-01-20T22:26:59Z"
        },
        {
          "tag": "v0.71.0",
          "kind": "minor",
          "published_at": "2025-01-10T23:02:26Z"
        },
        {
          "tag": "v0.70.0",
          "kind": "minor",
          "published_at": "2024-12-26T23:22:53Z"
        },
        {
          "tag": "v0.69.0",
          "kind": "minor",
          "published_at": "2024-12-13T19:45:41Z"
        },
        {
          "tag": "v0.68.0",
          "kind": "minor",
          "published_at": "2024-12-10T16:28:05Z"
        },
        {
          "tag": "v0.67.0",
          "kind": "minor",
          "published_at": "2024-12-06T14:44:33Z"
        },
        {
          "tag": "v0.66.0",
          "kind": "minor",
          "published_at": "2024-12-01T17:20:31Z"
        },
        {
          "tag": "v0.65.0",
          "kind": "minor",
          "published_at": "2024-11-26T22:07:50Z"
        },
        {
          "tag": "v0.64.0",
          "kind": "minor",
          "published_at": "2024-11-21T20:47:03Z"
        },
        {
          "tag": "v0.63.0",
          "kind": "minor",
          "published_at": "2024-11-13T21:38:30Z"
        },
        {
          "tag": "v0.62.0",
          "kind": "minor",
          "published_at": "2024-11-04T23:41:04Z"
        },
        {
          "tag": "v0.61.0",
          "kind": "minor",
          "published_at": "2024-11-01T16:41:01Z"
        },
        {
          "tag": "v0.60.0",
          "kind": "minor",
          "published_at": "2024-10-22T21:21:03Z"
        },
        {
          "tag": "v0.59.0",
          "kind": "minor",
          "published_at": "2024-10-04T22:42:03Z"
        },
        {
          "tag": "v0.58.0",
          "kind": "minor",
          "published_at": "2024-09-29T15:21:17Z"
        },
        {
          "tag": "v0.57.0",
          "kind": "minor",
          "published_at": "2024-09-21T20:35:49Z"
        },
        {
          "tag": "v0.56.0",
          "kind": "minor",
          "published_at": "2024-09-09T21:52:33Z"
        },
        {
          "tag": "v0.55.0",
          "kind": "minor",
          "published_at": "2024-09-04T16:14:58Z"
        },
        {
          "tag": "v0.54.0",
          "kind": "minor",
          "published_at": "2024-08-28T14:14:20Z"
        },
        {
          "tag": "v0.53.0",
          "kind": "minor",
          "published_at": "2024-08-27T14:00:04Z"
        },
        {
          "tag": "v0.52.0",
          "kind": "minor",
          "published_at": "2024-08-23T15:54:30Z"
        },
        {
          "tag": "v0.51.0",
          "kind": "minor",
          "published_at": "2024-08-20T16:10:35Z"
        },
        {
          "tag": "v0.50.0",
          "kind": "minor",
          "published_at": "2024-08-13T19:23:50Z"
        },
        {
          "tag": "v0.49.0",
          "kind": "minor",
          "published_at": "2024-08-10T20:34:36Z"
        },
        {
          "tag": "v0.48.0",
          "kind": "minor",
          "published_at": "2024-08-06T13:46:38Z"
        },
        {
          "tag": "v0.47.0",
          "kind": "minor",
          "published_at": "2024-07-31T14:22:09Z"
        },
        {
          "tag": "v0.46.0",
          "kind": "minor",
          "published_at": "2024-07-29T13:45:09Z"
        },
        {
          "tag": "v0.45.0",
          "kind": "minor",
          "published_at": "2024-07-18T19:13:33Z"
        },
        {
          "tag": "v0.44.0",
          "kind": "minor",
          "published_at": "2024-07-16T14:55:08Z"
        },
        {
          "tag": "v0.43.0",
          "kind": "minor",
          "published_at": "2024-07-07T13:28:24Z"
        },
        {
          "tag": "v0.42.0",
          "kind": "minor",
          "published_at": "2024-07-04T14:24:13Z"
        },
        {
          "tag": "v0.41.0",
          "kind": "minor",
          "published_at": "2024-07-01T19:20:27Z"
        },
        {
          "tag": "v0.40.0",
          "kind": "minor",
          "published_at": "2024-06-24T20:40:12Z"
        },
        {
          "tag": "v0.39.0",
          "kind": "minor",
          "published_at": "2024-06-20T21:49:49Z"
        },
        {
          "tag": "v0.38.0",
          "kind": "minor",
          "published_at": "2024-06-17T03:58:42Z"
        },
        {
          "tag": "v0.37.0",
          "kind": "minor",
          "published_at": "2024-06-04T17:32:29Z"
        },
        {
          "tag": "v0.36.0",
          "kind": "minor",
          "published_at": "2024-05-22T19:19:18Z"
        },
        {
          "tag": "v0.35.0",
          "kind": "minor",
          "published_at": "2024-05-13T18:20:38Z"
        },
        {
          "tag": "v0.34.0",
          "kind": "minor",
          "published_at": "2024-05-10T16:16:18Z"
        },
        {
          "tag": "v0.33.0",
          "kind": "minor",
          "published_at": "2024-05-08T16:39:35Z"
        },
        {
          "tag": "v0.32.0",
          "kind": "minor",
          "published_at": "2024-05-07T23:37:44Z"
        },
        {
          "tag": "v0.31.0",
          "kind": "minor",
          "published_at": "2024-05-02T17:56:40Z"
        },
        {
          "tag": "v0.30.0",
          "kind": "minor",
          "published_at": "2024-04-24T00:42:18Z"
        },
        {
          "tag": "v0.29.0",
          "kind": "minor",
          "published_at": "2024-04-21T20:05:52Z"
        },
        {
          "tag": "v0.28.0",
          "kind": "minor",
          "published_at": "2024-04-09T23:07:23Z"
        },
        {
          "tag": "v0.27.0",
          "kind": "minor",
          "published_at": "2024-03-22T18:06:03Z"
        },
        {
          "tag": "v0.26.0",
          "kind": "minor",
          "published_at": "2024-03-08T21:17:07Z"
        },
        {
          "tag": "v0.25.0",
          "kind": "minor",
          "published_at": "2024-03-04T20:39:43Z"
        },
        {
          "tag": "v0.24.0",
          "kind": "minor",
          "published_at": "2024-02-10T15:36:11Z"
        },
        {
          "tag": "v0.23.0",
          "kind": "minor",
          "published_at": "2024-02-03T16:41:32Z"
        },
        {
          "tag": "v0.22.0",
          "kind": "minor",
          "published_at": "2024-01-23T01:52:36Z"
        },
        {
          "tag": "v0.21.0",
          "kind": "minor",
          "published_at": "2024-01-08T18:45:34Z"
        },
        {
          "tag": "v0.20.0",
          "kind": "minor",
          "published_at": "2024-01-04T15:44:25Z"
        },
        {
          "tag": "v0.19.0",
          "kind": "minor",
          "published_at": "2023-12-20T02:14:35Z"
        },
        {
          "tag": "v0.18.1",
          "kind": "patch",
          "published_at": "2023-12-14T20:23:37Z"
        },
        {
          "tag": "v0.18.0",
          "kind": "minor",
          "published_at": "2023-11-17T23:52:18Z"
        },
        {
          "tag": "v0.17.0",
          "kind": "minor",
          "published_at": "2023-11-07T04:29:53Z"
        },
        {
          "tag": "v0.16.1",
          "kind": "patch",
          "published_at": "2023-10-31T21:15:42Z"
        },
        {
          "tag": "v0.16.0",
          "kind": "minor",
          "published_at": "2023-10-29T20:25:27Z"
        },
        {
          "tag": "v0.15.0",
          "kind": "minor",
          "published_at": "2023-10-20T16:56:34Z"
        },
        {
          "tag": "v0.14.2",
          "kind": "patch",
          "published_at": "2023-10-18T16:40:16Z"
        },
        {
          "tag": "v0.14.1",
          "kind": "patch",
          "published_at": "2023-09-30T00:22:33Z"
        },
        {
          "tag": "v0.14.0",
          "kind": "minor",
          "published_at": "2023-09-08T17:02:50Z"
        },
        {
          "tag": "v0.13.0",
          "kind": "minor",
          "published_at": "2023-08-22T15:05:14Z"
        },
        {
          "tag": "v0.12.0",
          "kind": "minor",
          "published_at": "2023-08-11T11:59:30Z"
        },
        {
          "tag": "v0.11.1",
          "kind": "patch",
          "published_at": "2023-08-08T15:37:42Z"
        },
        {
          "tag": "v0.11.0",
          "kind": "minor",
          "published_at": "2023-08-02T19:25:03Z"
        },
        {
          "tag": "v0.10.1",
          "kind": "patch",
          "published_at": "2023-07-24T18:17:55Z"
        },
        {
          "tag": "v0.10.0",
          "kind": "minor",
          "published_at": "2023-07-22T12:08:42Z"
        },
        {
          "tag": "v0.9.0",
          "kind": "minor",
          "published_at": "2023-07-16T12:48:19Z"
        },
        {
          "tag": "v0.8.3",
          "kind": "patch",
          "published_at": "2023-07-12T01:51:59Z"
        },
        {
          "tag": "v0.8.2",
          "kind": "patch",
          "published_at": "2023-07-08T13:14:06Z"
        },
        {
          "tag": "v0.8.1",
          "kind": "patch",
          "published_at": "2023-07-08T04:24:27Z"
        },
        {
          "tag": "v0.8.0",
          "kind": "minor",
          "published_at": "2023-07-06T21:09:57Z"
        },
        {
          "tag": "v0.7.2",
          "kind": "patch",
          "published_at": "2023-06-26T17:25:04Z"
        },
        {
          "tag": "v0.7.1",
          "kind": "patch",
          "published_at": "2023-06-26T00:56:03Z"
        },
        {
          "tag": "v0.7.0",
          "kind": "minor",
          "published_at": "2023-06-25T15:37:56Z"
        },
        {
          "tag": "v0.6.2",
          "kind": "patch",
          "published_at": "2023-06-17T13:50:48Z"
        },
        {
          "tag": "v0.5.0",
          "kind": "minor",
          "published_at": "2023-06-07T23:29:47Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "5dc9490bb35f9729ef2c95d00a19ccd30c26339c",
          "body": "…d-opus-4-5\n\nExpand ANTHROPIC_MODELS list with recent Claude model names",
          "is_bot": false,
          "headline": "Merge pull request #5173 from Cyberfilo/feat/anthropic_models-list-ad…",
          "author_name": "paul-gauthier",
          "author_login": "paul-gauthier",
          "committed_at": "2026-05-22T14:02:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a7a54a9367fefb46fa576840e97f4479c46c7771",
          "body": null,
          "is_bot": false,
          "headline": "Apply ANTHROPIC_MODELS expansion",
          "author_name": "Filippo Mattia Menghi",
          "author_login": "Cyberfilo",
          "committed_at": "2026-05-22T10:16:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2ec3550e71c174efe84fe87d7fa669b66903fa41",
          "body": "`ANTHROPIC_MODELS` in `aider/models.py` is used by\n`sanity_check_models` to map a bare Claude model name (no provider\nprefix) to the `ANTHROPIC_API_KEY` environment variable. Models not\nin this list fall through to the keymap provider lookup.\n\nThe list was stale — it had `claude-2`, the 3.x family, \n[…]\n260205` (dated variant)\n- `claude-opus-4-7-20260416` (dated variant)\n\nCompanion to the OPENAI_MODELS list expansion. All added names have\ncorresponding entries in `aider/resources/model-settings.yml`.",
          "is_bot": false,
          "headline": "Expand ANTHROPIC_MODELS list with recent Claude model names",
          "author_name": "Filippo Mattia Menghi",
          "author_login": "Cyberfilo",
          "committed_at": "2026-05-22T10:16:21Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6435cb8b1e885d7275327d4b61206b1b1618dfe1",
          "body": "feat: add bash tree-sitter tags for repomap support",
          "is_bot": false,
          "headline": "Merge pull request #5132 from Mramaran/add-bash-tree-sitter-tags",
          "author_name": "paul-gauthier",
          "author_login": "paul-gauthier",
          "committed_at": "2026-05-16T00:55:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ff191affc6e1413f33dad914d9930a5993aad853",
          "body": null,
          "is_bot": false,
          "headline": "feat: add bash tree-sitter tags for repomap support",
          "author_name": "mrmaran",
          "author_login": "Mramaran",
          "committed_at": "2026-05-15T09:49:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3ec8ec5a7d695b08a6c24fe6c0c235c8f87df9af",
          "body": null,
          "is_bot": false,
          "headline": "fix: update FAQ token percentages and switch history model to gpt-5.5",
          "author_name": "Paul Gauthier",
          "author_login": "paul-gauthier",
          "committed_at": "2026-04-25T16:43:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c723364ada98922cfc781d8d3968d53be6870882",
          "body": null,
          "is_bot": false,
          "headline": "copy",
          "author_name": "Paul Gauthier",
          "author_login": "paul-gauthier",
          "committed_at": "2026-04-25T04:19:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "308b1546a035ef012ac91ffb83a2139d01325526",
          "body": "Co-authored-by: aider (gpt-5.4) <aider@aider.chat>",
          "is_bot": false,
          "headline": "feat: add gpt-5.5 model settings across providers",
          "author_name": "Paul Gauthier",
          "author_login": "paul-gauthier",
          "committed_at": "2026-04-24T22:59:03Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "cd24a3a3c842c4566c198b2aa13b87c1ec78e3b2",
          "body": "Co-authored-by: aider (gpt-5.4) <aider@aider.chat>",
          "is_bot": false,
          "headline": "test: update model alias expectations for sonnet and opus",
          "author_name": "Paul Gauthier",
          "author_login": "paul-gauthier",
          "committed_at": "2026-04-24T18:36:37Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "0189cf4f0009aa58fd24a3b8c834819c8230fa77",
          "body": null,
          "is_bot": false,
          "headline": "copy",
          "author_name": "Paul Gauthier",
          "author_login": "paul-gauthier",
          "committed_at": "2026-04-23T20:15:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "65cb4d3568e28439b2eb1c069d1cb27aeb469237",
          "body": "Co-authored-by: aider (gpt-5.4) <aider@aider.chat>",
          "is_bot": false,
          "headline": "style: Format thinking_tokens model check with multiline condition",
          "author_name": "Paul Gauthier",
          "author_login": "paul-gauthier",
          "committed_at": "2026-04-23T14:12:19Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "93dfacc85e3a35254295e9b58b9803d5be639c34",
          "body": "Co-authored-by: aider (gpt-5.4) <aider@aider.chat>",
          "is_bot": false,
          "headline": "feat: add Claude Opus 4.7 model settings for Bedrock/Vertex/OpenRouter",
          "author_name": "Paul Gauthier",
          "author_login": "paul-gauthier",
          "committed_at": "2026-04-23T14:12:17Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "39023f9bc021690e9505bcb8fcb022efcc5bfe0a",
          "body": null,
          "is_bot": false,
          "headline": "fix: Disable temperature for opus-4 models and gate thinking_tokens",
          "author_name": "Paul Gauthier",
          "author_login": "paul-gauthier",
          "committed_at": "2026-04-23T14:12:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "79c45c3cd6d84ecb0d163a853136cf7e6b3f4584",
          "body": "Co-authored-by: aider (gpt-5.4) <aider@aider.chat>",
          "is_bot": false,
          "headline": "fix: disable deprecated temperature for Claude 4 models",
          "author_name": "Paul Gauthier",
          "author_login": "paul-gauthier",
          "committed_at": "2026-04-23T14:07:32Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "b9d877488c9d8c6e60631473e218989a9f401162",
          "body": "Co-authored-by: aider (gpt-5.4) <aider@aider.chat>",
          "is_bot": false,
          "headline": "feat: Map opus and sonnet aliases to latest Claude models",
          "author_name": "Paul Gauthier",
          "author_login": "paul-gauthier",
          "committed_at": "2026-04-23T14:01:49Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "9ce34d179cf2015abef4bfb186c1cbdf53b98f7c",
          "body": "Co-authored-by: aider (gpt-5.4) <aider@aider.chat>",
          "is_bot": false,
          "headline": "style: simplify model name conditional in models.py",
          "author_name": "Paul Gauthier",
          "author_login": "paul-gauthier",
          "committed_at": "2026-04-23T13:59:07Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "f939d0ac94df54c02e598cbf134d91d63335cdc8",
          "body": "Co-authored-by: aider (gpt-5.4) <aider@aider.chat>",
          "is_bot": false,
          "headline": "feat: add Claude Sonnet 4.6 and Opus 4.7 model support",
          "author_name": "Paul Gauthier",
          "author_login": "paul-gauthier",
          "committed_at": "2026-04-23T13:59:03Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "928bb49c4b5f656932b0c3b511930559fdb4aec4",
          "body": null,
          "is_bot": false,
          "headline": "copy",
          "author_name": "Paul Gauthier",
          "author_login": "paul-gauthier",
          "committed_at": "2026-04-16T17:04:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f09d70659ae90a0d068c80c288cbb55f2d3c3755",
          "body": null,
          "is_bot": false,
          "headline": "feat: Enable overeager mode for Claude Sonnet 4.5 models",
          "author_name": "Paul Gauthier",
          "author_login": "paul-gauthier",
          "committed_at": "2026-04-09T05:07:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bdb4d9ff8ef88c3015a9845119bff37f49c93d7b",
          "body": null,
          "is_bot": false,
          "headline": "copy",
          "author_name": "Paul Gauthier",
          "author_login": "paul-gauthier",
          "committed_at": "2026-03-17T01:21:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3c2a8bdafc54e644fb1ee3166a59ef825b322686",
          "body": null,
          "is_bot": false,
          "headline": "copy",
          "author_name": "Paul Gauthier",
          "author_login": "paul-gauthier",
          "committed_at": "2026-03-17T01:15:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c41ef3b85b071290448cc4c2c4ea6b59d46d6efb",
          "body": "Co-authored-by: aider (gpt-5.3-codex) <aider@aider.chat>",
          "is_bot": false,
          "headline": "feat: Add gpt-5.3 and gpt-5.4 model variants",
          "author_name": "Paul Gauthier",
          "author_login": "paul-gauthier",
          "committed_at": "2026-03-17T01:15:11Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "fabdce1a035a3fc6851247de94bec7f5f2f84006",
          "body": "Co-authored-by: aider (gpt-5.2-codex) <aider@aider.chat>",
          "is_bot": false,
          "headline": "feat: add gpt-5.3-codex model variants",
          "author_name": "Paul Gauthier",
          "author_login": "paul-gauthier",
          "committed_at": "2026-03-17T01:04:01Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "5b038fd76a8a9d50e4b55302553f7c563ac2dc54",
          "body": null,
          "is_bot": false,
          "headline": "copy",
          "author_name": "Paul Gauthier",
          "author_login": "paul-gauthier",
          "committed_at": "2026-03-17T00:06:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "413149e9c848f0e22ef21ff02996e6b0b99432f0",
          "body": "Co-authored-by: aider (gpt-5.2-codex) <aider@aider.chat>",
          "is_bot": false,
          "headline": "fix: Remove unused import in test_exceptions.py",
          "author_name": "Paul Gauthier",
          "author_login": "paul-gauthier",
          "committed_at": "2026-03-17T00:05:51Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "c3356825ddee3ded3f5e7561319f7feebb24bcdd",
          "body": "Co-authored-by: aider (gpt-5.2-codex) <aider@aider.chat>",
          "is_bot": false,
          "headline": "test: Fix PermissionDeniedError test with httpx objects",
          "author_name": "Paul Gauthier",
          "author_login": "paul-gauthier",
          "committed_at": "2026-03-17T00:05:49Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "8955c4e9eabbf244ac4aad8f26ea2dab82f3ec6f",
          "body": "Co-authored-by: aider (gpt-5.2-codex) <aider@aider.chat>",
          "is_bot": false,
          "headline": "fix: Add missing import for PermissionDeniedError",
          "author_name": "Paul Gauthier",
          "author_login": "paul-gauthier",
          "committed_at": "2026-03-17T00:05:01Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "07c526f4ece5fad049a3cce6432bccfec5aaeef8",
          "body": "Co-authored-by: aider (gpt-5.2-codex) <aider@aider.chat>",
          "is_bot": false,
          "headline": "test: Add response arg to PermissionDeniedError in test",
          "author_name": "Paul Gauthier",
          "author_login": "paul-gauthier",
          "committed_at": "2026-03-17T00:05:00Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "0ec5f355d76c67574a9f530f7a86f68830f4ad93",
          "body": "Co-authored-by: aider (gpt-5.2-codex) <aider@aider.chat>",
          "is_bot": false,
          "headline": "test: Add test for PermissionDeniedError EXInfo",
          "author_name": "Paul Gauthier",
          "author_login": "paul-gauthier",
          "committed_at": "2026-03-17T00:01:33Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "38716cc5a2621499c50454aa77ee379aa2b0c590",
          "body": "Co-authored-by: aider (gpt-5.2-codex) <aider@aider.chat>",
          "is_bot": false,
          "headline": "feat: Add ExInfo for PermissionDeniedError",
          "author_name": "Paul Gauthier",
          "author_login": "paul-gauthier",
          "committed_at": "2026-03-17T00:00:37Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "f8e3379864c3398ae6e00e30023da1c8791fa27e",
          "body": null,
          "is_bot": false,
          "headline": "Merge pull request #4935 from claui/fix-deprecated-models",
          "author_name": "paul-gauthier",
          "author_login": "paul-gauthier",
          "committed_at": "2026-03-16T23:07:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "55164933dc152308b8aeb8f78afc461248470e5c",
          "body": "The model that this test uses is no longer available online. [1] [2]\n\nPer the upstream commit, gpt-4o would be the next best candidate for\nvision models, so use that instead.\n\n[1]: https://github.com/BerriAI/litellm/pull/23400\n\n[2]: https://github.com/BerriAI/litellm/commit/c9f7075690173165a3a4085bd52e2dee8449063d",
          "is_bot": false,
          "headline": "fix: remove deprecated vision model from test",
          "author_name": "Claudia Pellegrino",
          "author_login": "claui",
          "committed_at": "2026-03-16T21:39:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c0839cf36f6b9150e3280b6d2588a55a3443cb2d",
          "body": "The model that this test uses is no longer available online. [1] [2]\n\nPer the upstream commit, claude-sonnet-4-6 is a suitable replacement\nso use that instead.\n\n[1]: https://github.com/BerriAI/litellm/pull/23400\n\n[2]: https://github.com/BerriAI/litellm/commit/c9f7075690173165a3a4085bd52e2dee8449063d",
          "is_bot": false,
          "headline": "fix: remove deprecated timestamped model from test",
          "author_name": "Claudia Pellegrino",
          "author_login": "claui",
          "committed_at": "2026-03-16T21:38:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c0ab75371b683debb58636711a2768b9ca4ee45a",
          "body": "The model that this test uses is no longer available online. [1] [2]\n\nPer the upstream commit, the only known suitable replacement is\ngpt-4-0613, which the test already uses.\n\nHence, remove gpt-4-32k from the test without any replacement.\n\n[1]: https://github.com/BerriAI/litellm/pull/20795\n\n[2]: https://github.com/BerriAI/litellm/commit/15075ef9ec881cd51831f9e40423fb2058f701f8",
          "is_bot": false,
          "headline": "fix: remove deprecated gpt-4-32k model from test",
          "author_name": "Claudia Pellegrino",
          "author_login": "claui",
          "committed_at": "2026-03-16T21:31:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "861a1e4d154f268547a06497cc380e5a5dc8483a",
          "body": "Add Python 3.13 and 3.14 support",
          "is_bot": false,
          "headline": "Merge pull request #4899 from turian/codex/python-3-14-support",
          "author_name": "paul-gauthier",
          "author_login": "paul-gauthier",
          "committed_at": "2026-03-09T22:00:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "975e5a899168444cba6f85d57070cb0012deb75d",
          "body": null,
          "is_bot": false,
          "headline": "Add experimental Python 3.14 support",
          "author_name": "Joseph Turian",
          "author_login": "turian",
          "committed_at": "2026-03-09T19:06:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "265d8a473b5d5bf001db321b251674a120ad75da",
          "body": null,
          "is_bot": false,
          "headline": "copy",
          "author_name": "Paul Gauthier",
          "author_login": "paul-gauthier",
          "committed_at": "2026-03-03T15:47:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "37d6ebdf7673cdda8e9dec7ddb118c2e4b23e5f9",
          "body": null,
          "is_bot": false,
          "headline": "feat: Add overeager prompt to aider/coders/ask_prompts.py",
          "author_name": "Paul Gauthier",
          "author_login": "paul-gauthier",
          "committed_at": "2026-03-03T15:47:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ec3470cc690cd4a92b94dd71286f9cb7f6cb3568",
          "body": "Co-authored-by: aider (gpt-5.2-codex) <aider@aider.chat>",
          "is_bot": false,
          "headline": "feat: Add overeager: true to gpt-5.2-codex variants",
          "author_name": "Paul Gauthier",
          "author_login": "paul-gauthier",
          "committed_at": "2026-03-03T15:47:05Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "f761d7276de0f2c6eb53ce81a220e50d3e19ce8e",
          "body": null,
          "is_bot": false,
          "headline": "chore: Add overeager setting to gpt-4-turbo",
          "author_name": "Paul Gauthier",
          "author_login": "paul-gauthier",
          "committed_at": "2026-03-03T15:47:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "edfe0c801b494b69455b7de4a26843b2033cebb4",
          "body": "Co-authored-by: aider (gpt-5.2) <aider@aider.chat>",
          "is_bot": false,
          "headline": "feat: Allow /ok command to accept optional arguments",
          "author_name": "Paul Gauthier",
          "author_login": "paul-gauthier",
          "committed_at": "2026-02-26T14:49:40Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "b23516061e569857a527c0e03fb0c58c4523fb99",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'main' of github.com:Aider-AI/aider",
          "author_name": "Paul Gauthier",
          "author_login": "paul-gauthier",
          "committed_at": "2026-02-25T14:18:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d19a9b0c5605e18c98e6f3b25d463a952e293a1e",
          "body": null,
          "is_bot": false,
          "headline": "copy",
          "author_name": "Paul Gauthier",
          "author_login": "paul-gauthier",
          "committed_at": "2026-02-25T14:15:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4b48d82750d383187352e9e38333d50f5ff11be9",
          "body": "Co-authored-by: aider (gpt-5.2) <aider@aider.chat>",
          "is_bot": false,
          "headline": "feat: Add /ok command as an alias for /code Ok",
          "author_name": "Paul Gauthier",
          "author_login": "paul-gauthier",
          "committed_at": "2026-02-25T14:05:11Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "7afaa26f8b8b7b56146f0674d2a67e795b616b7c",
          "body": null,
          "is_bot": false,
          "headline": "Merge pull request #4674 from chr15m/add-readonly-no-git",
          "author_name": "paul-gauthier",
          "author_login": "paul-gauthier",
          "committed_at": "2026-02-19T02:33:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cf72acfbf782300ba1c2f512f36a90079bffd4dd",
          "body": null,
          "is_bot": false,
          "headline": "Merge pull request #4682 from chr15m/no-auto-commits-staging",
          "author_name": "paul-gauthier",
          "author_login": "paul-gauthier",
          "committed_at": "2026-02-19T02:31:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b9050e1d5faf8096eae7a46a9ecc05a86231384b",
          "body": "fix: handle symlink loops in safe_abs_path()",
          "is_bot": false,
          "headline": "Merge pull request #4838 from clayarnoldg2m/fix/4711-symlink-loop",
          "author_name": "paul-gauthier",
          "author_login": "paul-gauthier",
          "committed_at": "2026-02-16T16:26:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b2bec25c2c785989d6456cb03321a61f539bcc86",
          "body": "Path.resolve() raises RuntimeError on circular symlinks. Catch\nRuntimeError and OSError, fall back to Path.absolute().\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: handle symlink loops in safe_abs_path() (#4711)",
          "author_name": "coder_3",
          "author_login": "314clay",
          "committed_at": "2026-02-16T09:39:35Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "4625ebb4b517ce51db0aa7eb92c3fea61243610f",
          "body": null,
          "is_bot": false,
          "headline": "fix: Add verify_ssl=False to Scraper for testing",
          "author_name": "Paul Gauthier",
          "author_login": "paul-gauthier",
          "committed_at": "2026-02-16T00:25:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e6f8edda93c5c048206accd8fa72395b0cf92601",
          "body": "Allow adding files outside repo when git commits off.",
          "is_bot": false,
          "headline": "Merge pull request #4830 from chr15m/add-readonly-no-git-feature",
          "author_name": "paul-gauthier",
          "author_login": "paul-gauthier",
          "committed_at": "2026-02-14T14:17:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "172df73b85c450aeb99811cc777acfeb059d450a",
          "body": null,
          "is_bot": false,
          "headline": "Allow adding files outside repo when git commits off.",
          "author_name": "Chris McCormick",
          "author_login": "chr15m",
          "committed_at": "2026-02-14T12:42:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7a1bd15f0c78160129c3b7ffc5ffc94bd992bbbe",
          "body": null,
          "is_bot": false,
          "headline": "set version to 0.86.3.dev",
          "author_name": "Paul Gauthier",
          "author_login": "paul-gauthier",
          "committed_at": "2026-02-12T00:42:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "253f0368b873ba30d8ee26e463718f0c03614ddf",
          "body": null,
          "is_bot": false,
          "headline": "version bump to 0.86.2",
          "author_name": "Paul Gauthier",
          "author_login": "paul-gauthier",
          "committed_at": "2026-02-12T00:42:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "275c9cb926ab6788afd6e5999e4fc7f9c4176fd4",
          "body": null,
          "is_bot": false,
          "headline": "copy",
          "author_name": "Paul Gauthier",
          "author_login": "paul-gauthier",
          "committed_at": "2026-02-11T23:44:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "11120e5c6fcaf2965302da308a74bbb1f4b421f0",
          "body": null,
          "is_bot": false,
          "headline": "copy",
          "author_name": "Paul Gauthier",
          "author_login": "paul-gauthier",
          "committed_at": "2026-02-11T23:44:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "27254aa616328056e1e6d4e25a870c937f40ae5b",
          "body": null,
          "is_bot": false,
          "headline": "copy",
          "author_name": "Paul Gauthier",
          "author_login": "paul-gauthier",
          "committed_at": "2026-02-11T16:30:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1e001bd73c9a6f5a145fa0ffe3d220fbe0ba385e",
          "body": null,
          "is_bot": false,
          "headline": "fix: Update model names in test_models.py",
          "author_name": "Paul Gauthier",
          "author_login": "paul-gauthier",
          "committed_at": "2026-02-11T16:29:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b77180711ccb6da1f225f22d189058ee18c5e56b",
          "body": null,
          "is_bot": false,
          "headline": "copy",
          "author_name": "Paul Gauthier",
          "author_login": "paul-gauthier",
          "committed_at": "2026-02-11T15:34:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "750c61c6a0749c726aff1230a2c0cf10fbc46afe",
          "body": null,
          "is_bot": false,
          "headline": "bump deps",
          "author_name": "Paul Gauthier",
          "author_login": "paul-gauthier",
          "committed_at": "2026-02-11T15:33:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0811a180cf59840e104e372a5136ec69e4db80a2",
          "body": null,
          "is_bot": false,
          "headline": "copy",
          "author_name": "Paul Gauthier",
          "author_login": "paul-gauthier",
          "committed_at": "2026-02-11T15:21:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "463bf8023c24cf0774b5bd46430b68843caa948f",
          "body": null,
          "is_bot": false,
          "headline": "copy",
          "author_name": "Paul Gauthier",
          "author_login": "paul-gauthier",
          "committed_at": "2026-02-11T15:17:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fa3d7b14c0d23d475edb2713736ab8c62416c3bb",
          "body": "Co-authored-by: aider (openai/gpt-5.2) <aider@aider.chat>",
          "is_bot": false,
          "headline": "refactor: Update flash alias to point to gemini/gemini-flash-latest",
          "author_name": "Paul Gauthier",
          "author_login": "paul-gauthier",
          "committed_at": "2026-02-11T15:13:25Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "87c552bbee004c0f11cca7d3146c4404eb930698",
          "body": "Co-authored-by: aider (openai/gpt-5.2) <aider@aider.chat>",
          "is_bot": false,
          "headline": "feat: Add openrouter entries for new models",
          "author_name": "Paul Gauthier",
          "author_login": "paul-gauthier",
          "committed_at": "2026-02-11T15:01:53Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "c7912bf76aac17db233cdaa04101221f8eff18d8",
          "body": "Co-authored-by: aider (openai/gpt-5.2) <aider@aider.chat>",
          "is_bot": false,
          "headline": "feat: Add Gemini 2.5 Flash and Flash-Lite models to settings",
          "author_name": "Paul Gauthier",
          "author_login": "paul-gauthier",
          "committed_at": "2026-02-11T14:56:50Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "c1e0c601da5e7d2bfe9d8b6ad6608da7c9189619",
          "body": "Co-authored-by: aider (openai/gpt-5.2) <aider@aider.chat>",
          "is_bot": false,
          "headline": "feat: Add settings for new OpenAI models",
          "author_name": "Paul Gauthier",
          "author_login": "paul-gauthier",
          "committed_at": "2026-02-11T14:54:08Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "6a3bbfd95d9bf9fd58c5136c25126a9e444c8aeb",
          "body": "Co-authored-by: aider (openai/gpt-5.2) <aider@aider.chat>",
          "is_bot": false,
          "headline": "fix: Remove non-existent openrouter anthropic model versions",
          "author_name": "Paul Gauthier",
          "author_login": "paul-gauthier",
          "committed_at": "2026-02-11T14:48:58Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "c50eb7512f10c2d6139813392319f15ded3daa20",
          "body": "Co-authored-by: aider (openai/gpt-5.2) <aider@aider.chat>",
          "is_bot": false,
          "headline": "fix: Update openrouter model version numbers to use dots",
          "author_name": "Paul Gauthier",
          "author_login": "paul-gauthier",
          "committed_at": "2026-02-11T14:46:45Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "3aa642fec9fdb0ac153a022ab6e8f29dbbce10cb",
          "body": "Co-authored-by: aider (openai/gpt-5.2) <aider@aider.chat>",
          "is_bot": false,
          "headline": "feat: add missing openrouter anthropic model entries",
          "author_name": "Paul Gauthier",
          "author_login": "paul-gauthier",
          "committed_at": "2026-02-11T14:45:56Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "114057283d4ebd51eb4c3d2774ca886b5cf49e46",
          "body": "Co-authored-by: aider (openai/gpt-5.2) <aider@aider.chat>",
          "is_bot": false,
          "headline": "feat: update models.py for Claude 4.5/4.6",
          "author_name": "Paul Gauthier",
          "author_login": "paul-gauthier",
          "committed_at": "2026-02-11T14:43:41Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "98cc418ea394315e96cc2b074ebf57fb480b5b28",
          "body": "Co-authored-by: aider (openai/gpt-5.2) <aider@aider.chat>",
          "is_bot": false,
          "headline": "feat: Add Claude 4.5/4.6 models to model-settings.yml",
          "author_name": "Paul Gauthier",
          "author_login": "paul-gauthier",
          "committed_at": "2026-02-11T14:41:17Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "a6a31c7b82668616d4f417fe7119a17c0fc46bb5",
          "body": null,
          "is_bot": false,
          "headline": "fix: Update python version in Dockerfile site-packages permissions",
          "author_name": "Paul Gauthier",
          "author_login": "paul-gauthier",
          "committed_at": "2026-02-11T14:32:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5cb6b610472b5153e5f30e4de7af978a0f63f854",
          "body": null,
          "is_bot": false,
          "headline": "dockerfile to 3.12",
          "author_name": "Paul Gauthier",
          "author_login": "paul-gauthier",
          "committed_at": "2026-02-11T03:26:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "22b9aec8ac098476aab411d1e6c294bab95aca70",
          "body": null,
          "is_bot": false,
          "headline": "reqs",
          "author_name": "Paul Gauthier",
          "author_login": "paul-gauthier",
          "committed_at": "2026-02-11T03:25:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f8f2726b1414ae78b04eb4570dd988479bf65289",
          "body": null,
          "is_bot": false,
          "headline": "copy",
          "author_name": "Paul Gauthier",
          "author_login": "paul-gauthier",
          "committed_at": "2026-02-11T02:59:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d9d5c1e233ad77db54aff5223aedc77779de1c96",
          "body": null,
          "is_bot": false,
          "headline": "pip-compile",
          "author_name": "Paul Gauthier",
          "author_login": "paul-gauthier",
          "committed_at": "2026-02-11T02:55:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "94bd7abd17cdbcdab91b445b3ab165ecd2220938",
          "body": null,
          "is_bot": false,
          "headline": "from #4814",
          "author_name": "Paul Gauthier",
          "author_login": "paul-gauthier",
          "committed_at": "2026-02-11T02:55:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c1924f2c45470a3efee6e40eb8692f0ba470a24a",
          "body": null,
          "is_bot": false,
          "headline": "from #4814",
          "author_name": "Paul Gauthier",
          "author_login": "paul-gauthier",
          "committed_at": "2026-02-11T02:53:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a8c3e7c29c5ffe23b813c3f01d68aaef608c897c",
          "body": null,
          "is_bot": false,
          "headline": "copy",
          "author_name": "Paul Gauthier",
          "author_login": "paul-gauthier",
          "committed_at": "2026-02-11T02:46:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4bf56b77145b0be593ed48c3c90cdecead217496",
          "body": "Remove `google-generativeai` as a dependency.",
          "is_bot": false,
          "headline": "Merge pull request #4772 from markmcd/sdk-depro",
          "author_name": "paul-gauthier",
          "author_login": "paul-gauthier",
          "committed_at": "2026-01-19T15:39:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d91c02c205b3d23d3da9e58594751255cd12bd52",
          "body": "The `google-generativeai` package is deprecated, and emits warnings when\nit's imported. I'm doing some cleanup work to remove it from popular\nsurfacess, so here's a PR :)\n\nI'll note that `litellm` uses direct HTTP requests for the API, so it\ndoes not use `google-genai` (except for type checking) or\n`google-generativeai` (except for a deprecated PaLM codepath).",
          "is_bot": false,
          "headline": "Remove `google-generativeai` as a dependency.",
          "author_name": "Mark McDonald",
          "author_login": "markmcd",
          "committed_at": "2026-01-16T09:54:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fb05748ace65bea780e0766b14b0904fbaac5f7f",
          "body": "…sion\n\nFix regression in the LiteLLM exception list",
          "is_bot": false,
          "headline": "Merge pull request #4748 from claui/fix-litellm-exception-list-regres…",
          "author_name": "paul-gauthier",
          "author_login": "paul-gauthier",
          "committed_at": "2026-01-04T15:40:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "08165c57a21636d0f995abf55de33fd9bbbcee94",
          "body": "In an attempt to fix issue #4615 [1], commit 656301c [2] introduces a\nregression where running the `coder` feature raises the following error:\n\n> TypeError: catching classes that do not inherit from BaseException is not allowed\n\nThe primary misunderstanding that caused the regression is the fact tha\n[…]\n01c [2].\n\n[1]: https://github.com/Aider-AI/aider/issues/4615\n\n[2]: https://github.com/Aider-AI/aider/commit/656301cc8744bd32d1bb25ddcc839774bc73e4ca\n\n[3]: https://github.com/Aider-AI/aider/issues/4724",
          "is_bot": false,
          "headline": "fix: exclude regular classes that end with `Error`",
          "author_name": "Claudia Pellegrino",
          "author_login": "claui",
          "committed_at": "2026-01-04T14:26:28Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1354e0bfa4847c1a71b9eea7374847a786d81c1b",
          "body": null,
          "is_bot": false,
          "headline": "copy",
          "author_name": "Paul Gauthier",
          "author_login": "paul-gauthier",
          "committed_at": "2025-12-18T18:37:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2d54feaa0961b87d1c10dd38649d703a1fd433ea",
          "body": null,
          "is_bot": false,
          "headline": "chore: Update dependencies in requirements files",
          "author_name": "Paul Gauthier",
          "author_login": "paul-gauthier",
          "committed_at": "2025-12-18T18:37:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7ef1dcd64ac05ba9c7f2d562b78fa35b4e578e4a",
          "body": "Co-authored-by: aider (gemini/gemini-3-flash-preview) <aider@aider.chat>",
          "is_bot": false,
          "headline": "fix: Add ImageFetchError to aider's exceptions list",
          "author_name": "Paul Gauthier",
          "author_login": "paul-gauthier",
          "committed_at": "2025-12-18T18:34:52Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "656301cc8744bd32d1bb25ddcc839774bc73e4ca",
          "body": "Co-authored-by: aider (gemini/gemini-3-flash-preview) <aider@aider.chat>",
          "is_bot": false,
          "headline": "fix: Add ErrorEventError to aider's exceptions list",
          "author_name": "Paul Gauthier",
          "author_login": "paul-gauthier",
          "committed_at": "2025-12-18T18:34:30Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "2c39cb68c7711cab28ce7638cdca787906d339de",
          "body": "Co-authored-by: aider (gemini/gemini-3-flash-preview) <aider@aider.chat>",
          "is_bot": false,
          "headline": "fix: Add BadGatewayError to exceptions list",
          "author_name": "Paul Gauthier",
          "author_login": "paul-gauthier",
          "committed_at": "2025-12-18T18:33:52Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "7e292a2efc7a27d06de4ab3373beacc654926b14",
          "body": "Co-authored-by: aider (gemini/gemini-3-flash-preview) <aider@aider.chat>",
          "is_bot": false,
          "headline": "feat: Add gemini-3-flash-preview model entries",
          "author_name": "Paul Gauthier",
          "author_login": "paul-gauthier",
          "committed_at": "2025-12-18T18:29:33Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "7301d4522dd41738a4a3488f51e051766391653b",
          "body": null,
          "is_bot": false,
          "headline": "Merge pull request #4698 from codeofdusk/gpt-5.2",
          "author_name": "paul-gauthier",
          "author_login": "paul-gauthier",
          "committed_at": "2025-12-11T19:28:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4ff959f55b32dff9e486437e8ff774e808367b11",
          "body": null,
          "is_bot": false,
          "headline": "Add gpt-5.2 models",
          "author_name": "Bill Dengler",
          "author_login": "codeofdusk",
          "committed_at": "2025-12-11T19:14:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4e77720c6f96d4960b61ef19f32a2ee12218bf96",
          "body": null,
          "is_bot": false,
          "headline": "Don't stage files with no-auto-commits.",
          "author_name": "Chris McCormick",
          "author_login": "chr15m",
          "committed_at": "2025-11-30T07:21:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f73085357cf633d04cfa36a5a8f1de3bb826d71c",
          "body": null,
          "is_bot": false,
          "headline": "Allow adding read-only files to editable with git: false.",
          "author_name": "Chris McCormick",
          "author_login": "chr15m",
          "committed_at": "2025-11-30T01:54:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5683f1c089ac42debcd951bad972b348aede21d8",
          "body": null,
          "is_bot": false,
          "headline": "bump ts",
          "author_name": "Paul Gauthier",
          "author_login": "paul-gauthier",
          "committed_at": "2025-11-22T19:06:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3bdd49c8ab32fbdab1047ca0e8a9e438c5a86e38",
          "body": null,
          "is_bot": false,
          "headline": "bump deps",
          "author_name": "Paul Gauthier",
          "author_login": "paul-gauthier",
          "committed_at": "2025-11-21T23:22:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dbc7ee0d0be9a5ef7055a50e4fef9f236b159f16",
          "body": null,
          "is_bot": false,
          "headline": "copy",
          "author_name": "Paul Gauthier",
          "author_login": "paul-gauthier",
          "committed_at": "2025-11-21T23:22:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a65e0892b93d8e3898c783a5628db323ba031d5f",
          "body": "Co-authored-by: aider (gemini/gemini-3-pro-preview) <aider@aider.chat>",
          "is_bot": false,
          "headline": "feat: Add use_temperature: false to openrouter/openai/gpt-5-pro",
          "author_name": "Paul Gauthier",
          "author_login": "paul-gauthier",
          "committed_at": "2025-11-21T23:22:14Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "7360bb5064ee57d4fd9e169a27088c0132ddc336",
          "body": null,
          "is_bot": false,
          "headline": "feat: Add use_temperature: false to gpt-5 models",
          "author_name": "Paul Gauthier",
          "author_login": "paul-gauthier",
          "committed_at": "2025-11-21T23:22:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f626e44a0d274b9da65cc5d78f0f2409668254f0",
          "body": null,
          "is_bot": false,
          "headline": "copy",
          "author_name": "Paul Gauthier",
          "author_login": "paul-gauthier",
          "committed_at": "2025-11-21T04:34:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "90ac33cb8894e47b1d0d05f26cb32a1d602fce88",
          "body": null,
          "is_bot": false,
          "headline": "copy",
          "author_name": "Paul Gauthier",
          "author_login": "paul-gauthier",
          "committed_at": "2025-11-21T04:33:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5b0f6ce9e97862f14c390ec82b55fe5d71a0edec",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'main' of github.com:Aider-AI/aider",
          "author_name": "Paul Gauthier",
          "author_login": "paul-gauthier",
          "committed_at": "2025-11-20T19:13:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 93,
      "commits_last_year": 182,
      "latest_release_at": "2025-08-09T17:42:19Z",
      "latest_release_tag": "v0.86.0",
      "releases_from_tags": false,
      "days_since_last_push": 60,
      "active_weeks_last_year": 27,
      "days_since_latest_release": 346,
      "mean_days_between_releases": 16.5
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": true,
      "health_percentage": 50,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "aider-chat",
          "exists": true,
          "license": null,
          "keywords": [
            "Development Status :: 4 - Beta",
            "Environment :: Console",
            "Intended Audience :: Developers",
            "License :: OSI Approved :: Apache Software License",
            "Programming Language :: Python",
            "Programming Language :: Python :: 3",
            "Programming Language :: Python :: 3.10",
            "Programming Language :: Python :: 3.11",
            "Programming Language :: Python :: 3.12",
            "Topic :: Software Development"
          ],
          "ecosystem": "pypi",
          "matches_repo": true,
          "registry_url": "https://pypi.org/project/aider-chat/",
          "is_deprecated": false,
          "latest_version": "0.86.2",
          "repository_url": "https://github.com/Aider-AI/aider",
          "versions_count": 174,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": 848398,
          "first_published_at": "2023-06-08T23:30:29.172370Z",
          "latest_published_at": "2026-02-12T00:42:54.835777Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 159
        }
      ]
    },
    "popularity": {
      "forks": 4746,
      "stars": 47589,
      "watchers": 254,
      "fork_history": {
        "days": [
          {
            "date": "2026-02-08",
            "count": 3
          },
          {
            "date": "2026-02-09",
            "count": 5
          },
          {
            "date": "2026-02-10",
            "count": 5
          },
          {
            "date": "2026-02-11",
            "count": 5
          },
          {
            "date": "2026-02-12",
            "count": 5
          },
          {
            "date": "2026-02-13",
            "count": 4
          },
          {
            "date": "2026-02-14",
            "count": 3
          },
          {
            "date": "2026-02-15",
            "count": 9
          },
          {
            "date": "2026-02-16",
            "count": 2
          },
          {
            "date": "2026-02-17",
            "count": 3
          },
          {
            "date": "2026-02-18",
            "count": 2
          },
          {
            "date": "2026-02-19",
            "count": 2
          },
          {
            "date": "2026-02-20",
            "count": 4
          },
          {
            "date": "2026-02-21",
            "count": 1
          },
          {
            "date": "2026-02-22",
            "count": 5
          },
          {
            "date": "2026-02-23",
            "count": 2
          },
          {
            "date": "2026-02-24",
            "count": 7
          },
          {
            "date": "2026-02-25",
            "count": 2
          },
          {
            "date": "2026-02-26",
            "count": 4
          },
          {
            "date": "2026-02-27",
            "count": 5
          },
          {
            "date": "2026-02-28",
            "count": 3
          },
          {
            "date": "2026-03-01",
            "count": 3
          },
          {
            "date": "2026-03-02",
            "count": 4
          },
          {
            "date": "2026-03-03",
            "count": 9
          },
          {
            "date": "2026-03-04",
            "count": 21
          },
          {
            "date": "2026-03-05",
            "count": 8
          },
          {
            "date": "2026-03-06",
            "count": 9
          },
          {
            "date": "2026-03-07",
            "count": 5
          },
          {
            "date": "2026-03-08",
            "count": 7
          },
          {
            "date": "2026-03-09",
            "count": 5
          },
          {
            "date": "2026-03-10",
            "count": 9
          },
          {
            "date": "2026-03-11",
            "count": 4
          },
          {
            "date": "2026-03-12",
            "count": 7
          },
          {
            "date": "2026-03-13",
            "count": 10
          },
          {
            "date": "2026-03-14",
            "count": 5
          },
          {
            "date": "2026-03-15",
            "count": 5
          },
          {
            "date": "2026-03-16",
            "count": 11
          },
          {
            "date": "2026-03-17",
            "count": 5
          },
          {
            "date": "2026-03-18",
            "count": 7
          },
          {
            "date": "2026-03-19",
            "count": 10
          },
          {
            "date": "2026-03-20",
            "count": 6
          },
          {
            "date": "2026-03-21",
            "count": 4
          },
          {
            "date": "2026-03-22",
            "count": 5
          },
          {
            "date": "2026-03-23",
            "count": 2
          },
          {
            "date": "2026-03-24",
            "count": 1
          },
          {
            "date": "2026-03-25",
            "count": 12
          },
          {
            "date": "2026-03-26",
            "count": 4
          },
          {
            "date": "2026-03-27",
            "count": 7
          },
          {
            "date": "2026-03-28",
            "count": 7
          },
          {
            "date": "2026-03-29",
            "count": 3
          },
          {
            "date": "2026-03-30",
            "count": 8
          },
          {
            "date": "2026-03-31",
            "count": 7
          },
          {
            "date": "2026-04-01",
            "count": 6
          },
          {
            "date": "2026-04-02",
            "count": 10
          },
          {
            "date": "2026-04-03",
            "count": 5
          },
          {
            "date": "2026-04-04",
            "count": 4
          },
          {
            "date": "2026-04-05",
            "count": 9
          },
          {
            "date": "2026-04-06",
            "count": 8
          },
          {
            "date": "2026-04-07",
            "count": 8
          },
          {
            "date": "2026-04-08",
            "count": 4
          },
          {
            "date": "2026-04-09",
            "count": 6
          },
          {
            "date": "2026-04-10",
            "count": 6
          },
          {
            "date": "2026-04-11",
            "count": 7
          },
          {
            "date": "2026-04-12",
            "count": 9
          },
          {
            "date": "2026-04-13",
            "count": 10
          },
          {
            "date": "2026-04-14",
            "count": 4
          },
          {
            "date": "2026-04-15",
            "count": 10
          },
          {
            "date": "2026-04-16",
            "count": 5
          },
          {
            "date": "2026-04-17",
            "count": 7
          },
          {
            "date": "2026-04-18",
            "count": 6
          },
          {
            "date": "2026-04-19",
            "count": 2
          },
          {
            "date": "2026-04-20",
            "count": 2
          },
          {
            "date": "2026-04-21",
            "count": 8
          },
          {
            "date": "2026-04-22",
            "count": 8
          },
          {
            "date": "2026-04-23",
            "count": 10
          },
          {
            "date": "2026-04-24",
            "count": 10
          },
          {
            "date": "2026-04-25",
            "count": 5
          },
          {
            "date": "2026-04-26",
            "count": 6
          },
          {
            "date": "2026-04-27",
            "count": 7
          },
          {
            "date": "2026-04-28",
            "count": 11
          },
          {
            "date": "2026-04-29",
            "count": 6
          },
          {
            "date": "2026-04-30",
            "count": 4
          },
          {
            "date": "2026-05-01",
            "count": 5
          },
          {
            "date": "2026-05-02",
            "count": 3
          },
          {
            "date": "2026-05-03",
            "count": 4
          },
          {
            "date": "2026-05-04",
            "count": 5
          },
          {
            "date": "2026-05-05",
            "count": 6
          },
          {
            "date": "2026-05-06",
            "count": 4
          },
          {
            "date": "2026-05-07",
            "count": 9
          },
          {
            "date": "2026-05-08",
            "count": 4
          },
          {
            "date": "2026-05-09",
            "count": 5
          },
          {
            "date": "2026-05-10",
            "count": 11
          },
          {
            "date": "2026-05-11",
            "count": 6
          },
          {
            "date": "2026-05-12",
            "count": 3
          },
          {
            "date": "2026-05-13",
            "count": 10
          },
          {
            "date": "2026-05-14",
            "count": 5
          },
          {
            "date": "2026-05-15",
            "count": 8
          },
          {
            "date": "2026-05-16",
            "count": 6
          },
          {
            "date": "2026-05-17",
            "count": 4
          },
          {
            "date": "2026-05-18",
            "count": 15
          },
          {
            "date": "2026-05-19",
            "count": 8
          },
          {
            "date": "2026-05-20",
            "count": 5
          },
          {
            "date": "2026-05-21",
            "count": 5
          },
          {
            "date": "2026-05-22",
            "count": 10
          },
          {
            "date": "2026-05-23",
            "count": 8
          },
          {
            "date": "2026-05-24",
            "count": 7
          },
          {
            "date": "2026-05-25",
            "count": 8
          },
          {
            "date": "2026-05-26",
            "count": 6
          },
          {
            "date": "2026-05-27",
            "count": 8
          },
          {
            "date": "2026-05-28",
            "count": 7
          },
          {
            "date": "2026-05-29",
            "count": 7
          },
          {
            "date": "2026-05-30",
            "count": 7
          },
          {
            "date": "2026-05-31",
            "count": 5
          },
          {
            "date": "2026-06-01",
            "count": 12
          },
          {
            "date": "2026-06-02",
            "count": 9
          },
          {
            "date": "2026-06-03",
            "count": 5
          },
          {
            "date": "2026-06-04",
            "count": 8
          },
          {
            "date": "2026-06-05",
            "count": 8
          },
          {
            "date": "2026-06-06",
            "count": 3
          },
          {
            "date": "2026-06-07",
            "count": 10
          },
          {
            "date": "2026-06-08",
            "count": 10
          },
          {
            "date": "2026-06-09",
            "count": 2
          },
          {
            "date": "2026-06-10",
            "count": 9
          },
          {
            "date": "2026-06-11",
            "count": 4
          },
          {
            "date": "2026-06-12",
            "count": 9
          },
          {
            "date": "2026-06-13",
            "count": 6
          },
          {
            "date": "2026-06-14",
            "count": 6
          },
          {
            "date": "2026-06-15",
            "count": 10
          },
          {
            "date": "2026-06-16",
            "count": 10
          },
          {
            "date": "2026-06-17",
            "count": 15
          },
          {
            "date": "2026-06-18",
            "count": 6
          },
          {
            "date": "2026-06-19",
            "count": 8
          },
          {
            "date": "2026-06-20",
            "count": 5
          },
          {
            "date": "2026-06-21",
            "count": 7
          },
          {
            "date": "2026-06-22",
            "count": 5
          },
          {
            "date": "2026-06-23",
            "count": 5
          },
          {
            "date": "2026-06-24",
            "count": 3
          },
          {
            "date": "2026-06-25",
            "count": 5
          },
          {
            "date": "2026-06-26",
            "count": 8
          },
          {
            "date": "2026-06-27",
            "count": 3
          },
          {
            "date": "2026-06-28",
            "count": 7
          },
          {
            "date": "2026-06-29",
            "count": 6
          },
          {
            "date": "2026-06-30",
            "count": 8
          },
          {
            "date": "2026-07-01",
            "count": 5
          },
          {
            "date": "2026-07-02",
            "count": 2
          },
          {
            "date": "2026-07-03",
            "count": 10
          },
          {
            "date": "2026-07-04",
            "count": 7
          },
          {
            "date": "2026-07-05",
            "count": 8
          },
          {
            "date": "2026-07-06",
            "count": 3
          },
          {
            "date": "2026-07-07",
            "count": 6
          },
          {
            "date": "2026-07-08",
            "count": 1
          },
          {
            "date": "2026-07-09",
            "count": 2
          },
          {
            "date": "2026-07-10",
            "count": 7
          },
          {
            "date": "2026-07-11",
            "count": 6
          },
          {
            "date": "2026-07-12",
            "count": 5
          },
          {
            "date": "2026-07-13",
            "count": 4
          },
          {
            "date": "2026-07-14",
            "count": 7
          },
          {
            "date": "2026-07-15",
            "count": 4
          },
          {
            "date": "2026-07-16",
            "count": 2
          },
          {
            "date": "2026-07-17",
            "count": 2
          },
          {
            "date": "2026-07-18",
            "count": 3
          },
          {
            "date": "2026-07-19",
            "count": 2
          },
          {
            "date": "2026-07-20",
            "count": 2
          },
          {
            "date": "2026-07-21",
            "count": 2
          }
        ],
        "complete": false,
        "collected": 1000,
        "total_forks": 4746
      },
      "star_history": {
        "days": [
          {
            "date": "2026-06-26",
            "count": 20
          },
          {
            "date": "2026-06-27",
            "count": 41
          },
          {
            "date": "2026-06-28",
            "count": 29
          },
          {
            "date": "2026-06-29",
            "count": 47
          },
          {
            "date": "2026-06-30",
            "count": 49
          },
          {
            "date": "2026-07-01",
            "count": 47
          },
          {
            "date": "2026-07-02",
            "count": 44
          },
          {
            "date": "2026-07-03",
            "count": 47
          },
          {
            "date": "2026-07-04",
            "count": 47
          },
          {
            "date": "2026-07-05",
            "count": 42
          },
          {
            "date": "2026-07-06",
            "count": 45
          },
          {
            "date": "2026-07-07",
            "count": 34
          },
          {
            "date": "2026-07-08",
            "count": 41
          },
          {
            "date": "2026-07-09",
            "count": 41
          },
          {
            "date": "2026-07-10",
            "count": 38
          },
          {
            "date": "2026-07-11",
            "count": 47
          },
          {
            "date": "2026-07-12",
            "count": 27
          },
          {
            "date": "2026-07-13",
            "count": 25
          },
          {
            "date": "2026-07-14",
            "count": 51
          },
          {
            "date": "2026-07-15",
            "count": 28
          },
          {
            "date": "2026-07-16",
            "count": 34
          },
          {
            "date": "2026-07-17",
            "count": 37
          },
          {
            "date": "2026-07-18",
            "count": 30
          },
          {
            "date": "2026-07-19",
            "count": 24
          },
          {
            "date": "2026-07-20",
            "count": 35
          },
          {
            "date": "2026-07-21",
            "count": 50
          }
        ],
        "complete": false,
        "collected": 1000,
        "total_stars": 47589
      },
      "open_issues_and_prs": 1756
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [
        "examples"
      ],
      "has_llms_txt": false,
      "has_dockerfile": true,
      "has_mcp_signal": false,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [],
      "largest_source_bytes": 193531,
      "source_files_sampled": 175,
      "oversized_source_files": 5,
      "agent_instruction_files": [
        "aider/website/docs/llms/gemini.md"
      ],
      "agent_instruction_max_bytes": 700
    },
    "dependencies": {
      "manifests": [
        "pyproject.toml",
        "requirements.txt",
        "requirements/requirements-browser.txt",
        "requirements/requirements-dev.txt",
        "requirements/requirements-help.txt",
        "requirements/requirements-playwright.txt"
      ],
      "advisories": {
        "error": null,
        "scope": "published_package",
        "source": "osv",
        "findings": [
          {
            "name": "aiohttp",
            "direct": true,
            "version": "3.13.3",
            "severity": "critical",
            "ecosystem": "pypi",
            "cvss_score": 9.1,
            "advisory_ids": [
              "GHSA-2fqr-mr3j-6wp8",
              "GHSA-2vrm-gr82-f7m5",
              "GHSA-3wq7-rqq7-wx6j",
              "GHSA-4fvr-rgm6-gqmc",
              "GHSA-4m7w-qmgq-4wj5",
              "GHSA-63hf-3vf5-4wqf",
              "GHSA-63hw-fmq6-xxg2",
              "GHSA-966j-vmvw-g2g9",
              "GHSA-9x8q-7h8h-wcw9",
              "GHSA-c427-h43c-vf67"
            ],
            "fixed_version": "3.14.1",
            "advisory_count": 42,
            "oldest_advisory_days": 111
          },
          {
            "name": "gitpython",
            "direct": true,
            "version": "3.1.46",
            "severity": "critical",
            "ecosystem": "pypi",
            "cvss_score": 9.8,
            "advisory_ids": [
              "GHSA-2f96-g7mh-g2hx",
              "GHSA-7545-fcxq-7j24",
              "GHSA-956x-8gvw-wg5v",
              "GHSA-mv93-w799-cj2w",
              "GHSA-rpm5-65cw-6hj4",
              "GHSA-rwj8-pgh3-r573",
              "GHSA-v87r-6q3f-2j67",
              "GHSA-x2qx-6953-8485",
              "PYSEC-2026-2160",
              "PYSEC-2026-2161"
            ],
            "fixed_version": "3.1.52",
            "advisory_count": 12,
            "oldest_advisory_days": 86
          },
          {
            "name": "litellm",
            "direct": true,
            "version": "1.81.10",
            "severity": "critical",
            "ecosystem": "pypi",
            "cvss_score": 9.8,
            "advisory_ids": [
              "GHSA-4xpc-pv4p-pm3w",
              "GHSA-53mr-6c8q-9789",
              "GHSA-69x8-hrgq-fjj8",
              "GHSA-jjhc-v7c2-5hh6",
              "GHSA-qrc4-49gv-mv9m",
              "GHSA-v4p8-mg3p-g94g",
              "GHSA-wpfp-gwwc-vwq6",
              "GHSA-wxxx-gvqv-xp7p",
              "GHSA-xqmj-j6mv-4862",
              "PYSEC-2026-2597"
            ],
            "fixed_version": "1.84.0",
            "advisory_count": 17,
            "oldest_advisory_days": 109
          },
          {
            "name": "pillow",
            "direct": true,
            "version": "12.1.1",
            "severity": "critical",
            "ecosystem": "pypi",
            "cvss_score": 9.1,
            "advisory_ids": [
              "GHSA-45hq-cxwh-f6vc",
              "GHSA-4x4j-2g7c-83w6",
              "GHSA-5x94-69rx-g8h2",
              "GHSA-5xmw-vc9v-4wf2",
              "GHSA-62p4-gmf7-7g93",
              "GHSA-6r8x-57c9-28j4",
              "GHSA-8v84-f9pq-wr9x",
              "GHSA-9hw9-ch79-4vh6",
              "GHSA-fj7v-r99m-22gq",
              "GHSA-jjj6-mw9f-p565"
            ],
            "fixed_version": "12.3.0",
            "advisory_count": 31,
            "oldest_advisory_days": 99
          },
          {
            "name": "click",
            "direct": true,
            "version": "8.3.1",
            "severity": "high",
            "ecosystem": "pypi",
            "cvss_score": 7.2,
            "advisory_ids": [
              "PYSEC-2026-2132"
            ],
            "fixed_version": "8.3.3",
            "advisory_count": 1,
            "oldest_advisory_days": 82
          },
          {
            "name": "soupsieve",
            "direct": true,
            "version": "2.8.3",
            "severity": "high",
            "ecosystem": "pypi",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-2wc2-fm75-p42x",
              "GHSA-836r-79rf-4m37",
              "PYSEC-2026-3071",
              "PYSEC-2026-3072"
            ],
            "fixed_version": "2.8.4",
            "advisory_count": 4,
            "oldest_advisory_days": 12
          },
          {
            "name": "starlette",
            "direct": true,
            "version": "0.52.1",
            "severity": "high",
            "ecosystem": "pypi",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-82w8-qh3p-5jfq",
              "GHSA-86qp-5c8j-p5mr",
              "GHSA-jp82-jpqv-5vv3",
              "GHSA-wqp7-x3pw-xc5r",
              "GHSA-x746-7m8f-x49c",
              "PYSEC-2026-161",
              "PYSEC-2026-2280",
              "PYSEC-2026-2281",
              "PYSEC-2026-248",
              "PYSEC-2026-249"
            ],
            "fixed_version": "1.3.1",
            "advisory_count": 10,
            "oldest_advisory_days": 47
          },
          {
            "name": "diskcache",
            "direct": true,
            "version": "5.6.3",
            "severity": "moderate",
            "ecosystem": "pypi",
            "cvss_score": null,
            "advisory_ids": [
              "GHSA-w8v5-vhqr-4h9v",
              "PYSEC-2026-2447"
            ],
            "fixed_version": null,
            "advisory_count": 2,
            "oldest_advisory_days": 160
          },
          {
            "name": "idna",
            "direct": true,
            "version": "3.11.0",
            "severity": "moderate",
            "ecosystem": "pypi",
            "cvss_score": 5.3,
            "advisory_ids": [
              "GHSA-65pc-fj4g-8rjx",
              "PYSEC-2026-215"
            ],
            "fixed_version": "3.15",
            "advisory_count": 2,
            "oldest_advisory_days": 63
          },
          {
            "name": "python-dotenv",
            "direct": true,
            "version": "1.2.1",
            "severity": "moderate",
            "ecosystem": "pypi",
            "cvss_score": 6.6,
            "advisory_ids": [
              "GHSA-mf9w-mj56-hr94",
              "PYSEC-2026-2270"
            ],
            "fixed_version": "1.2.2",
            "advisory_count": 2,
            "oldest_advisory_days": 92
          },
          {
            "name": "requests",
            "direct": true,
            "version": "2.32.5",
            "severity": "moderate",
            "ecosystem": "pypi",
            "cvss_score": 5.5,
            "advisory_ids": [
              "GHSA-gc5v-m9x4-r6x2",
              "PYSEC-2026-2275"
            ],
            "fixed_version": "2.33.0",
            "advisory_count": 2,
            "oldest_advisory_days": 118
          },
          {
            "name": "pygments",
            "direct": true,
            "version": "2.19.2",
            "severity": "low",
            "ecosystem": "pypi",
            "cvss_score": 3.3,
            "advisory_ids": [
              "GHSA-5239-wwwm-4pmq",
              "PYSEC-2026-2987"
            ],
            "fixed_version": "2.20.0",
            "advisory_count": 2,
            "oldest_advisory_days": 121
          },
          {
            "name": "urllib3",
            "direct": true,
            "version": "2.6.3",
            "severity": "unknown",
            "ecosystem": "pypi",
            "cvss_score": null,
            "advisory_ids": [
              "GHSA-mf9v-mfxr-j63j",
              "GHSA-qccp-gfcp-xxvc",
              "PYSEC-2026-141",
              "PYSEC-2026-142"
            ],
            "fixed_version": null,
            "advisory_count": 4,
            "oldest_advisory_days": null
          }
        ],
        "collected": true,
        "malicious": [],
        "truncated": false,
        "by_severity": {
          "low": 1,
          "high": 3,
          "unknown": 1,
          "critical": 4,
          "moderate": 4
        },
        "advisory_count": 131,
        "affected_count": 13,
        "assessed_count": 107,
        "malicious_count": 0,
        "assessed_package": "pypi:aider-chat@0.86.2",
        "unassessed_count": 0,
        "direct_affected_count": 13
      },
      "ecosystems": [
        "pypi"
      ],
      "dependencies": [],
      "all_dependencies": {
        "error": null,
        "source": "github-sbom",
        "packages": [
          {
            "name": "aiohappyeyeballs",
            "direct": false,
            "version": "2.6.1",
            "ecosystem": "pypi"
          },
          {
            "name": "aiohttp",
            "direct": false,
            "version": "3.13.3",
            "ecosystem": "pypi"
          },
          {
            "name": "aiosignal",
            "direct": false,
            "version": "1.4.0",
            "ecosystem": "pypi"
          },
          {
            "name": "aiosqlite",
            "direct": false,
            "version": "0.22.1",
            "ecosystem": "pypi"
          },
          {
            "name": "altair",
            "direct": false,
            "version": "6.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "annotated-doc",
            "direct": false,
            "version": "0.0.4",
            "ecosystem": "pypi"
          },
          {
            "name": "annotated-types",
            "direct": false,
            "version": "0.7.0",
            "ecosystem": "pypi"
          },
          {
            "name": "anyio",
            "direct": false,
            "version": "4.12.1",
            "ecosystem": "pypi"
          },
          {
            "name": "asgiref",
            "direct": false,
            "version": "3.11.1",
            "ecosystem": "pypi"
          },
          {
            "name": "attrs",
            "direct": false,
            "version": "25.4.0",
            "ecosystem": "pypi"
          },
          {
            "name": "audioop-lts",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "backoff",
            "direct": false,
            "version": "2.2.1",
            "ecosystem": "pypi"
          },
          {
            "name": "banks",
            "direct": false,
            "version": "2.4.1",
            "ecosystem": "pypi"
          },
          {
            "name": "beautifulsoup4",
            "direct": false,
            "version": "4.14.3",
            "ecosystem": "pypi"
          },
          {
            "name": "blinker",
            "direct": false,
            "version": "1.9.0",
            "ecosystem": "pypi"
          },
          {
            "name": "build",
            "direct": false,
            "version": "1.4.0",
            "ecosystem": "pypi"
          },
          {
            "name": "cachetools",
            "direct": false,
            "version": "7.0.5",
            "ecosystem": "pypi"
          },
          {
            "name": "certifi",
            "direct": false,
            "version": "2026.2.25",
            "ecosystem": "pypi"
          },
          {
            "name": "cffi",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "cfgv",
            "direct": false,
            "version": "3.5.0",
            "ecosystem": "pypi"
          },
          {
            "name": "charset-normalizer",
            "direct": false,
            "version": "3.4.6",
            "ecosystem": "pypi"
          },
          {
            "name": "click",
            "direct": false,
            "version": "8.3.1",
            "ecosystem": "pypi"
          },
          {
            "name": "codespell",
            "direct": false,
            "version": "2.4.2",
            "ecosystem": "pypi"
          },
          {
            "name": "cogapp",
            "direct": false,
            "version": "3.6.0",
            "ecosystem": "pypi"
          },
          {
            "name": "colorama",
            "direct": false,
            "version": "0.4.6",
            "ecosystem": "pypi"
          },
          {
            "name": "configargparse",
            "direct": false,
            "version": "1.7.5",
            "ecosystem": "pypi"
          },
          {
            "name": "contourpy",
            "direct": false,
            "version": "1.3.3",
            "ecosystem": "pypi"
          },
          {
            "name": "coverage",
            "direct": false,
            "version": "7.13.4",
            "ecosystem": "pypi"
          },
          {
            "name": "cryptography",
            "direct": false,
            "version": "46.0.5",
            "ecosystem": "pypi"
          },
          {
            "name": "cycler",
            "direct": false,
            "version": "0.12.1",
            "ecosystem": "pypi"
          },
          {
            "name": "dataclasses-json",
            "direct": false,
            "version": "0.6.7",
            "ecosystem": "pypi"
          },
          {
            "name": "deprecated",
            "direct": false,
            "version": "1.3.1",
            "ecosystem": "pypi"
          },
          {
            "name": "diff-match-patch",
            "direct": false,
            "version": "20241021",
            "ecosystem": "pypi"
          },
          {
            "name": "dirtyjson",
            "direct": false,
            "version": "1.0.8",
            "ecosystem": "pypi"
          },
          {
            "name": "diskcache",
            "direct": false,
            "version": "5.6.3",
            "ecosystem": "pypi"
          },
          {
            "name": "distlib",
            "direct": false,
            "version": "0.4.0",
            "ecosystem": "pypi"
          },
          {
            "name": "distro",
            "direct": false,
            "version": "1.9.0",
            "ecosystem": "pypi"
          },
          {
            "name": "fastapi",
            "direct": false,
            "version": "0.135.1",
            "ecosystem": "pypi"
          },
          {
            "name": "fastuuid",
            "direct": false,
            "version": "0.14.0",
            "ecosystem": "pypi"
          },
          {
            "name": "filelock",
            "direct": false,
            "version": "3.25.2",
            "ecosystem": "pypi"
          },
          {
            "name": "filetype",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "pypi"
          },
          {
            "name": "flake8",
            "direct": false,
            "version": "7.3.0",
            "ecosystem": "pypi"
          },
          {
            "name": "fonttools",
            "direct": false,
            "version": "4.62.1",
            "ecosystem": "pypi"
          },
          {
            "name": "frozenlist",
            "direct": false,
            "version": "1.8.0",
            "ecosystem": "pypi"
          },
          {
            "name": "fsspec",
            "direct": false,
            "version": "2026.2.0",
            "ecosystem": "pypi"
          },
          {
            "name": "gitdb",
            "direct": false,
            "version": "4.0.12",
            "ecosystem": "pypi"
          },
          {
            "name": "gitpython",
            "direct": false,
            "version": "3.1.46",
            "ecosystem": "pypi"
          },
          {
            "name": "google-api-core",
            "direct": false,
            "version": "2.30.0",
            "ecosystem": "pypi"
          },
          {
            "name": "google-auth",
            "direct": false,
            "version": "2.49.1",
            "ecosystem": "pypi"
          },
          {
            "name": "google-cloud-bigquery",
            "direct": false,
            "version": "3.40.1",
            "ecosystem": "pypi"
          },
          {
            "name": "google-cloud-core",
            "direct": false,
            "version": "2.5.0",
            "ecosystem": "pypi"
          },
          {
            "name": "google-crc32c",
            "direct": false,
            "version": "1.8.0",
            "ecosystem": "pypi"
          },
          {
            "name": "google-resumable-media",
            "direct": false,
            "version": "2.8.0",
            "ecosystem": "pypi"
          },
          {
            "name": "googleapis-common-protos",
            "direct": false,
            "version": "1.73.0",
            "ecosystem": "pypi"
          },
          {
            "name": "greenlet",
            "direct": false,
            "version": "3.3.2",
            "ecosystem": "pypi"
          },
          {
            "name": "grep-ast",
            "direct": false,
            "version": "0.9.0",
            "ecosystem": "pypi"
          },
          {
            "name": "griffe",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "griffecli",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "griffelib",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "grpcio",
            "direct": false,
            "version": "1.78.0",
            "ecosystem": "pypi"
          },
          {
            "name": "grpcio-status",
            "direct": false,
            "version": "1.78.0",
            "ecosystem": "pypi"
          },
          {
            "name": "h11",
            "direct": false,
            "version": "0.16.0",
            "ecosystem": "pypi"
          },
          {
            "name": "hf-xet",
            "direct": false,
            "version": "1.4.2",
            "ecosystem": "pypi"
          },
          {
            "name": "httpcore",
            "direct": false,
            "version": "1.0.9",
            "ecosystem": "pypi"
          },
          {
            "name": "httpx",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "pypi"
          },
          {
            "name": "huggingface-hub",
            "direct": false,
            "version": "1.7.1",
            "ecosystem": "pypi"
          },
          {
            "name": "identify",
            "direct": false,
            "version": "2.6.18",
            "ecosystem": "pypi"
          },
          {
            "name": "idna",
            "direct": false,
            "version": "3.11",
            "ecosystem": "pypi"
          },
          {
            "name": "imgcat",
            "direct": false,
            "version": "0.6.0",
            "ecosystem": "pypi"
          },
          {
            "name": "importlib-metadata",
            "direct": false,
            "version": "7.2.1",
            "ecosystem": "pypi"
          },
          {
            "name": "importlib-resources",
            "direct": false,
            "version": "6.5.2",
            "ecosystem": "pypi"
          },
          {
            "name": "iniconfig",
            "direct": false,
            "version": "2.3.0",
            "ecosystem": "pypi"
          },
          {
            "name": "jinja2",
            "direct": false,
            "version": "3.1.6",
            "ecosystem": "pypi"
          },
          {
            "name": "jiter",
            "direct": false,
            "version": "0.13.0",
            "ecosystem": "pypi"
          },
          {
            "name": "joblib",
            "direct": false,
            "version": "1.5.3",
            "ecosystem": "pypi"
          },
          {
            "name": "json5",
            "direct": false,
            "version": "0.13.0",
            "ecosystem": "pypi"
          },
          {
            "name": "jsonschema",
            "direct": false,
            "version": "4.26.0",
            "ecosystem": "pypi"
          },
          {
            "name": "jsonschema-specifications",
            "direct": false,
            "version": "2025.9.1",
            "ecosystem": "pypi"
          },
          {
            "name": "kiwisolver",
            "direct": false,
            "version": "1.5.0",
            "ecosystem": "pypi"
          },
          {
            "name": "litellm",
            "direct": false,
            "version": "1.82.3",
            "ecosystem": "pypi"
          },
          {
            "name": "llama-index-core",
            "direct": false,
            "version": "0.14.18",
            "ecosystem": "pypi"
          },
          {
            "name": "llama-index-embeddings-huggingface",
            "direct": false,
            "version": "0.7.0",
            "ecosystem": "pypi"
          },
          {
            "name": "llama-index-instrumentation",
            "direct": false,
            "version": "0.5.0",
            "ecosystem": "pypi"
          },
          {
            "name": "llama-index-workflows",
            "direct": false,
            "version": "2.16.1",
            "ecosystem": "pypi"
          },
          {
            "name": "lox",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "markdown-it-py",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "markupsafe",
            "direct": false,
            "version": "3.0.3",
            "ecosystem": "pypi"
          },
          {
            "name": "marshmallow",
            "direct": false,
            "version": "3.26.2",
            "ecosystem": "pypi"
          },
          {
            "name": "matplotlib",
            "direct": false,
            "version": "3.10.8",
            "ecosystem": "pypi"
          },
          {
            "name": "mccabe",
            "direct": false,
            "version": "0.7.0",
            "ecosystem": "pypi"
          },
          {
            "name": "mdurl",
            "direct": false,
            "version": "0.1.2",
            "ecosystem": "pypi"
          },
          {
            "name": "mixpanel",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "mpmath",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "pypi"
          },
          {
            "name": "mslex",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "pypi"
          },
          {
            "name": "multidict",
            "direct": false,
            "version": "6.7.1",
            "ecosystem": "pypi"
          },
          {
            "name": "mypy-extensions",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "pypi"
          },
          {
            "name": "narwhals",
            "direct": false,
            "version": "2.18.0",
            "ecosystem": "pypi"
          },
          {
            "name": "nest-asyncio",
            "direct": false,
            "version": "1.6.0",
            "ecosystem": "pypi"
          },
          {
            "name": "networkx",
            "direct": false,
            "version": "3.4.2",
            "ecosystem": "pypi"
          },
          {
            "name": "nltk",
            "direct": false,
            "version": "3.9.3",
            "ecosystem": "pypi"
          },
          {
            "name": "nodeenv",
            "direct": false,
            "version": "1.10.0",
            "ecosystem": "pypi"
          },
          {
            "name": "numpy",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "numpy",
            "direct": false,
            "version": "2.4.3",
            "ecosystem": "pypi"
          },
          {
            "name": "openai",
            "direct": false,
            "version": "2.28.0",
            "ecosystem": "pypi"
          },
          {
            "name": "orjson",
            "direct": false,
            "version": "3.11.7",
            "ecosystem": "pypi"
          },
          {
            "name": "oslex",
            "direct": false,
            "version": "0.1.3",
            "ecosystem": "pypi"
          },
          {
            "name": "packaging",
            "direct": false,
            "version": "26.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pandas",
            "direct": false,
            "version": "2.3.3",
            "ecosystem": "pypi"
          },
          {
            "name": "pathspec",
            "direct": false,
            "version": "1.0.4",
            "ecosystem": "pypi"
          },
          {
            "name": "pexpect",
            "direct": false,
            "version": "4.9.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pillow",
            "direct": false,
            "version": "12.1.1",
            "ecosystem": "pypi"
          },
          {
            "name": "pip",
            "direct": false,
            "version": "26.0.1",
            "ecosystem": "pypi"
          },
          {
            "name": "pip-tools",
            "direct": false,
            "version": "7.5.3",
            "ecosystem": "pypi"
          },
          {
            "name": "platformdirs",
            "direct": false,
            "version": "4.9.4",
            "ecosystem": "pypi"
          },
          {
            "name": "playwright",
            "direct": false,
            "version": "1.58.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pluggy",
            "direct": false,
            "version": "1.6.0",
            "ecosystem": "pypi"
          },
          {
            "name": "posthog",
            "direct": false,
            "version": "7.9.12",
            "ecosystem": "pypi"
          },
          {
            "name": "pre-commit",
            "direct": false,
            "version": "4.5.1",
            "ecosystem": "pypi"
          },
          {
            "name": "prompt-toolkit",
            "direct": false,
            "version": "3.0.52",
            "ecosystem": "pypi"
          },
          {
            "name": "propcache",
            "direct": false,
            "version": "0.4.1",
            "ecosystem": "pypi"
          },
          {
            "name": "proto-plus",
            "direct": false,
            "version": "1.27.1",
            "ecosystem": "pypi"
          },
          {
            "name": "protobuf",
            "direct": false,
            "version": "6.33.5",
            "ecosystem": "pypi"
          },
          {
            "name": "psutil",
            "direct": false,
            "version": "7.2.2",
            "ecosystem": "pypi"
          },
          {
            "name": "ptyprocess",
            "direct": false,
            "version": "0.7.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pyarrow",
            "direct": false,
            "version": "23.0.1",
            "ecosystem": "pypi"
          },
          {
            "name": "pyasn1",
            "direct": false,
            "version": "0.6.2",
            "ecosystem": "pypi"
          },
          {
            "name": "pyasn1-modules",
            "direct": false,
            "version": "0.4.2",
            "ecosystem": "pypi"
          },
          {
            "name": "pycodestyle",
            "direct": false,
            "version": "2.14.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pycparser",
            "direct": false,
            "version": "3.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pydantic",
            "direct": false,
            "version": "2.12.5",
            "ecosystem": "pypi"
          },
          {
            "name": "pydantic-core",
            "direct": false,
            "version": "2.41.5",
            "ecosystem": "pypi"
          },
          {
            "name": "pydeck",
            "direct": false,
            "version": "0.9.1",
            "ecosystem": "pypi"
          },
          {
            "name": "pydub",
            "direct": false,
            "version": "0.25.1",
            "ecosystem": "pypi"
          },
          {
            "name": "pyee",
            "direct": false,
            "version": "13.0.1",
            "ecosystem": "pypi"
          },
          {
            "name": "pyflakes",
            "direct": false,
            "version": "3.4.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pygments",
            "direct": false,
            "version": "2.19.2",
            "ecosystem": "pypi"
          },
          {
            "name": "pypandoc",
            "direct": false,
            "version": "1.17",
            "ecosystem": "pypi"
          },
          {
            "name": "pyparsing",
            "direct": false,
            "version": "3.3.2",
            "ecosystem": "pypi"
          },
          {
            "name": "pyperclip",
            "direct": false,
            "version": "1.11.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pyproject-hooks",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pytest",
            "direct": false,
            "version": "9.0.2",
            "ecosystem": "pypi"
          },
          {
            "name": "pytest-cov",
            "direct": false,
            "version": "7.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pytest-env",
            "direct": false,
            "version": "1.6.0",
            "ecosystem": "pypi"
          },
          {
            "name": "python-dateutil",
            "direct": false,
            "version": "2.9.0.post0",
            "ecosystem": "pypi"
          },
          {
            "name": "python-discovery",
            "direct": false,
            "version": "1.1.3",
            "ecosystem": "pypi"
          },
          {
            "name": "python-dotenv",
            "direct": false,
            "version": "1.2.2",
            "ecosystem": "pypi"
          },
          {
            "name": "pytz",
            "direct": false,
            "version": "2026.1.post1",
            "ecosystem": "pypi"
          },
          {
            "name": "pyyaml",
            "direct": false,
            "version": "6.0.3",
            "ecosystem": "pypi"
          },
          {
            "name": "referencing",
            "direct": false,
            "version": "0.37.0",
            "ecosystem": "pypi"
          },
          {
            "name": "regex",
            "direct": false,
            "version": "2026.2.28",
            "ecosystem": "pypi"
          },
          {
            "name": "requests",
            "direct": false,
            "version": "2.32.5",
            "ecosystem": "pypi"
          },
          {
            "name": "rich",
            "direct": false,
            "version": "14.3.3",
            "ecosystem": "pypi"
          },
          {
            "name": "rpds-py",
            "direct": false,
            "version": "0.30.0",
            "ecosystem": "pypi"
          },
          {
            "name": "safetensors",
            "direct": false,
            "version": "0.7.0",
            "ecosystem": "pypi"
          },
          {
            "name": "scikit-learn",
            "direct": false,
            "version": "1.8.0",
            "ecosystem": "pypi"
          },
          {
            "name": "scipy",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "scipy",
            "direct": false,
            "version": "1.17.1",
            "ecosystem": "pypi"
          },
          {
            "name": "semver",
            "direct": false,
            "version": "3.0.4",
            "ecosystem": "pypi"
          },
          {
            "name": "sentence-transformers",
            "direct": false,
            "version": "5.3.0",
            "ecosystem": "pypi"
          },
          {
            "name": "setuptools",
            "direct": false,
            "version": "82.0.1",
            "ecosystem": "pypi"
          },
          {
            "name": "shellingham",
            "direct": false,
            "version": "1.5.4",
            "ecosystem": "pypi"
          },
          {
            "name": "shtab",
            "direct": false,
            "version": "1.8.0",
            "ecosystem": "pypi"
          },
          {
            "name": "six",
            "direct": false,
            "version": "1.17.0",
            "ecosystem": "pypi"
          },
          {
            "name": "smmap",
            "direct": false,
            "version": "5.0.3",
            "ecosystem": "pypi"
          },
          {
            "name": "sniffio",
            "direct": false,
            "version": "1.3.1",
            "ecosystem": "pypi"
          },
          {
            "name": "socksio",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "sounddevice",
            "direct": false,
            "version": "0.5.5",
            "ecosystem": "pypi"
          },
          {
            "name": "soundfile",
            "direct": false,
            "version": "0.13.1",
            "ecosystem": "pypi"
          },
          {
            "name": "soupsieve",
            "direct": false,
            "version": "2.8.3",
            "ecosystem": "pypi"
          },
          {
            "name": "sqlalchemy",
            "direct": false,
            "version": "2.0.48",
            "ecosystem": "pypi"
          },
          {
            "name": "starlette",
            "direct": false,
            "version": "0.52.1",
            "ecosystem": "pypi"
          },
          {
            "name": "streamlit",
            "direct": false,
            "version": "1.55.0",
            "ecosystem": "pypi"
          },
          {
            "name": "sympy",
            "direct": false,
            "version": "1.14.0",
            "ecosystem": "pypi"
          },
          {
            "name": "tenacity",
            "direct": false,
            "version": "9.1.4",
            "ecosystem": "pypi"
          },
          {
            "name": "threadpoolctl",
            "direct": false,
            "version": "3.6.0",
            "ecosystem": "pypi"
          },
          {
            "name": "tiktoken",
            "direct": false,
            "version": "0.12.0",
            "ecosystem": "pypi"
          },
          {
            "name": "tinytag",
            "direct": false,
            "version": "2.2.1",
            "ecosystem": "pypi"
          },
          {
            "name": "tokenizers",
            "direct": false,
            "version": "0.22.2",
            "ecosystem": "pypi"
          },
          {
            "name": "toml",
            "direct": false,
            "version": "0.10.2",
            "ecosystem": "pypi"
          },
          {
            "name": "torch",
            "direct": false,
            "version": "2.10.0",
            "ecosystem": "pypi"
          },
          {
            "name": "tornado",
            "direct": false,
            "version": "6.5.5",
            "ecosystem": "pypi"
          },
          {
            "name": "tqdm",
            "direct": false,
            "version": "4.67.3",
            "ecosystem": "pypi"
          },
          {
            "name": "transformers",
            "direct": false,
            "version": "5.3.0",
            "ecosystem": "pypi"
          },
          {
            "name": "tree-sitter",
            "direct": false,
            "version": "0.23.2",
            "ecosystem": "pypi"
          },
          {
            "name": "tree-sitter",
            "direct": false,
            "version": "0.25.2",
            "ecosystem": "pypi"
          },
          {
            "name": "tree-sitter-c-sharp",
            "direct": false,
            "version": "0.23.1",
            "ecosystem": "pypi"
          },
          {
            "name": "tree-sitter-embedded-template",
            "direct": false,
            "version": "0.25.0",
            "ecosystem": "pypi"
          },
          {
            "name": "tree-sitter-language-pack",
            "direct": false,
            "version": "0.13.0",
            "ecosystem": "pypi"
          },
          {
            "name": "tree-sitter-yaml",
            "direct": false,
            "version": "0.7.2",
            "ecosystem": "pypi"
          },
          {
            "name": "typer",
            "direct": false,
            "version": "0.24.1",
            "ecosystem": "pypi"
          },
          {
            "name": "typing-extensions",
            "direct": false,
            "version": "4.15.0",
            "ecosystem": "pypi"
          },
          {
            "name": "typing-inspect",
            "direct": false,
            "version": "0.9.0",
            "ecosystem": "pypi"
          },
          {
            "name": "typing-inspection",
            "direct": false,
            "version": "0.4.2",
            "ecosystem": "pypi"
          },
          {
            "name": "tzdata",
            "direct": false,
            "version": "2025.3",
            "ecosystem": "pypi"
          },
          {
            "name": "urllib3",
            "direct": false,
            "version": "2.6.3",
            "ecosystem": "pypi"
          },
          {
            "name": "uv",
            "direct": false,
            "version": "0.10.11",
            "ecosystem": "pypi"
          },
          {
            "name": "virtualenv",
            "direct": false,
            "version": "21.2.0",
            "ecosystem": "pypi"
          },
          {
            "name": "watchfiles",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "pypi"
          },
          {
            "name": "wcwidth",
            "direct": false,
            "version": "0.6.0",
            "ecosystem": "pypi"
          },
          {
            "name": "wheel",
            "direct": false,
            "version": "0.46.3",
            "ecosystem": "pypi"
          },
          {
            "name": "wrapt",
            "direct": false,
            "version": "2.1.2",
            "ecosystem": "pypi"
          },
          {
            "name": "yarl",
            "direct": false,
            "version": "1.23.0",
            "ecosystem": "pypi"
          },
          {
            "name": "zipp",
            "direct": false,
            "version": "3.23.0",
            "ecosystem": "pypi"
          },
          {
            "name": "github-pages",
            "direct": false,
            "version": null,
            "ecosystem": "rubygems"
          },
          {
            "name": "html-proofer",
            "direct": false,
            "version": null,
            "ecosystem": "rubygems"
          },
          {
            "name": "jekyll",
            "direct": false,
            "version": null,
            "ecosystem": "rubygems"
          },
          {
            "name": "jekyll-redirect-from",
            "direct": false,
            "version": null,
            "ecosystem": "rubygems"
          },
          {
            "name": "jekyll-sitemap",
            "direct": false,
            "version": null,
            "ecosystem": "rubygems"
          },
          {
            "name": "just-the-docs",
            "direct": false,
            "version": "0.8.2",
            "ecosystem": "rubygems"
          },
          {
            "name": "webrick",
            "direct": false,
            "version": null,
            "ecosystem": "rubygems"
          }
        ],
        "collected": true,
        "truncated": false,
        "total_count": 210,
        "direct_count": 0,
        "indirect_count": 210
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 436,
        "merged_prs": 288,
        "open_issues": 1320,
        "closed_ratio": 0.693,
        "closed_issues": 2981,
        "closed_unmerged_prs": 395
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "paul-gauthier",
          "commits": 12649,
          "avatar_url": "https://avatars.githubusercontent.com/u/69695708?v=4"
        },
        {
          "type": "User",
          "login": "ei-grad",
          "commits": 47,
          "avatar_url": "https://avatars.githubusercontent.com/u/78607?v=4"
        },
        {
          "type": "User",
          "login": "joshuavial",
          "commits": 32,
          "avatar_url": "https://avatars.githubusercontent.com/u/72309?v=4"
        },
        {
          "type": "User",
          "login": "fry69",
          "commits": 27,
          "avatar_url": "https://avatars.githubusercontent.com/u/142489379?v=4"
        },
        {
          "type": "User",
          "login": "caseymcc",
          "commits": 19,
          "avatar_url": "https://avatars.githubusercontent.com/u/2903823?v=4"
        },
        {
          "type": "User",
          "login": "shladnik",
          "commits": 15,
          "avatar_url": "https://avatars.githubusercontent.com/u/1980595?v=4"
        },
        {
          "type": "User",
          "login": "itlackey",
          "commits": 13,
          "avatar_url": "https://avatars.githubusercontent.com/u/6414031?v=4"
        },
        {
          "type": "User",
          "login": "titusz",
          "commits": 9,
          "avatar_url": "https://avatars.githubusercontent.com/u/278556?v=4"
        },
        {
          "type": "User",
          "login": "claui",
          "commits": 8,
          "avatar_url": "https://avatars.githubusercontent.com/u/1239874?v=4"
        },
        {
          "type": "User",
          "login": "daniel-vainsencher",
          "commits": 8,
          "avatar_url": "https://avatars.githubusercontent.com/u/1518422?v=4"
        }
      ],
      "contributors_sampled": 100,
      "top_contributor_share": 0.97
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "check_pypi_version.yml",
        "docker-build-test.yml",
        "docker-release.yml",
        "issues.yml",
        "pages.yml",
        "pre-commit.yml",
        "release.yml",
        "ubuntu-tests.yml",
        "windows-tests.yml",
        "windows_check_pypi_version.yml"
      ],
      "has_docs_dir": false,
      "linter_configs": [
        ".flake8"
      ],
      "has_editorconfig": false,
      "has_linter_config": true,
      "has_precommit_config": true
    },
    "security_signals": {
      "lockfiles": [],
      "scorecard": null,
      "has_codeql_workflow": false,
      "has_security_policy": false,
      "has_dependabot_config": false
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-21T12:35:41Z",
      "oldest_open_prs": [
        {
          "number": 777,
          "created_at": "2024-07-02T18:59:22Z",
          "last_comment_at": "2024-10-16T07:47:40Z",
          "last_comment_author": "CLAassistant"
        },
        {
          "number": 839,
          "created_at": "2024-07-11T09:40:19Z",
          "last_comment_at": "2025-04-21T11:50:57Z",
          "last_comment_author": "leprechaun"
        },
        {
          "number": 910,
          "created_at": "2024-07-21T11:02:47Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1093,
          "created_at": "2024-08-15T11:12:05Z",
          "last_comment_at": "2024-10-16T07:47:25Z",
          "last_comment_author": "CLAassistant"
        },
        {
          "number": 1217,
          "created_at": "2024-08-29T18:16:13Z",
          "last_comment_at": "2025-02-11T21:03:39Z",
          "last_comment_author": "Faolain"
        },
        {
          "number": 1464,
          "created_at": "2024-09-10T07:27:57Z",
          "last_comment_at": "2024-10-16T07:47:15Z",
          "last_comment_author": "CLAassistant"
        },
        {
          "number": 1544,
          "created_at": "2024-09-15T15:29:13Z",
          "last_comment_at": "2024-10-16T07:47:12Z",
          "last_comment_author": "CLAassistant"
        },
        {
          "number": 1780,
          "created_at": "2024-09-27T10:49:32Z",
          "last_comment_at": "2024-09-27T19:45:36Z",
          "last_comment_author": "jbellis"
        },
        {
          "number": 1812,
          "created_at": "2024-09-29T05:11:54Z",
          "last_comment_at": "2025-03-13T06:18:43Z",
          "last_comment_author": "kaorukobo"
        },
        {
          "number": 1817,
          "created_at": "2024-09-29T12:30:38Z",
          "last_comment_at": "2024-10-16T07:46:57Z",
          "last_comment_author": "CLAassistant"
        },
        {
          "number": 1860,
          "created_at": "2024-10-01T09:39:15Z",
          "last_comment_at": "2025-05-25T00:32:22Z",
          "last_comment_author": "maliayas"
        },
        {
          "number": 1961,
          "created_at": "2024-10-07T20:19:13Z",
          "last_comment_at": "2024-11-13T05:14:49Z",
          "last_comment_author": "elifarley"
        },
        {
          "number": 1998,
          "created_at": "2024-10-09T20:43:56Z",
          "last_comment_at": "2024-10-21T15:51:19Z",
          "last_comment_author": "mark-bradshaw"
        },
        {
          "number": 2082,
          "created_at": "2024-10-18T15:02:17Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 2099,
          "created_at": "2024-10-21T16:29:13Z",
          "last_comment_at": "2024-10-21T16:46:59Z",
          "last_comment_author": "elifarley"
        },
        {
          "number": 2115,
          "created_at": "2024-10-22T16:19:30Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 2164,
          "created_at": "2024-10-26T20:53:55Z",
          "last_comment_at": "2024-10-26T20:54:01Z",
          "last_comment_author": "CLAassistant"
        },
        {
          "number": 2174,
          "created_at": "2024-10-28T09:54:32Z",
          "last_comment_at": "2026-03-02T16:28:36Z",
          "last_comment_author": "zotona"
        },
        {
          "number": 2351,
          "created_at": "2024-11-13T00:10:03Z",
          "last_comment_at": "2025-11-10T00:03:32Z",
          "last_comment_author": "elifarley"
        },
        {
          "number": 2419,
          "created_at": "2024-11-21T19:20:57Z",
          "last_comment_at": "2024-12-09T23:36:21Z",
          "last_comment_author": "paul-gauthier"
        }
      ],
      "last_merged_pr_at": "2026-05-22T14:02:21Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": [
        {
          "number": 68,
          "created_at": "2023-07-07T11:52:02Z",
          "last_comment_at": "2025-05-08T19:28:27Z",
          "last_comment_author": "lknik"
        },
        {
          "number": 99,
          "created_at": "2023-07-14T01:14:25Z",
          "last_comment_at": "2025-03-18T05:12:15Z",
          "last_comment_author": "harleypig"
        },
        {
          "number": 186,
          "created_at": "2023-08-08T04:00:34Z",
          "last_comment_at": "2025-03-07T23:22:08Z",
          "last_comment_author": "madox2"
        },
        {
          "number": 205,
          "created_at": "2023-08-16T19:40:50Z",
          "last_comment_at": "2023-09-18T15:28:05Z",
          "last_comment_author": "paul-gauthier"
        },
        {
          "number": 211,
          "created_at": "2023-08-19T10:29:20Z",
          "last_comment_at": "2025-11-02T05:58:35Z",
          "last_comment_author": "blahgeek"
        },
        {
          "number": 216,
          "created_at": "2023-08-23T07:26:03Z",
          "last_comment_at": "2026-01-14T18:13:25Z",
          "last_comment_author": "tummetott"
        },
        {
          "number": 292,
          "created_at": "2023-10-22T22:15:27Z",
          "last_comment_at": "2025-06-19T18:57:47Z",
          "last_comment_author": "wyuenho"
        },
        {
          "number": 296,
          "created_at": "2023-10-27T02:07:47Z",
          "last_comment_at": "2023-10-31T22:05:05Z",
          "last_comment_author": "paul-gauthier"
        },
        {
          "number": 302,
          "created_at": "2023-10-31T13:46:54Z",
          "last_comment_at": "2026-01-04T20:28:25Z",
          "last_comment_author": "schoettler"
        },
        {
          "number": 339,
          "created_at": "2023-11-10T14:24:11Z",
          "last_comment_at": "2025-07-02T07:03:06Z",
          "last_comment_author": "pfirsich"
        },
        {
          "number": 349,
          "created_at": "2023-11-14T21:36:35Z",
          "last_comment_at": "2025-09-28T10:27:45Z",
          "last_comment_author": "dragonlge"
        },
        {
          "number": 388,
          "created_at": "2023-12-01T23:48:00Z",
          "last_comment_at": "2023-12-05T23:52:38Z",
          "last_comment_author": "sidhujag"
        },
        {
          "number": 444,
          "created_at": "2024-01-12T11:41:22Z",
          "last_comment_at": "2025-05-01T22:50:52Z",
          "last_comment_author": "diamond-lizard"
        },
        {
          "number": 446,
          "created_at": "2024-01-13T07:11:42Z",
          "last_comment_at": "2024-01-22T21:00:26Z",
          "last_comment_author": "paul-gauthier"
        },
        {
          "number": 473,
          "created_at": "2024-02-09T11:42:50Z",
          "last_comment_at": "2024-10-28T12:06:28Z",
          "last_comment_author": "Morriz"
        },
        {
          "number": 483,
          "created_at": "2024-02-20T02:29:28Z",
          "last_comment_at": "2025-01-22T10:54:50Z",
          "last_comment_author": "vadika"
        },
        {
          "number": 517,
          "created_at": "2024-03-27T19:52:25Z",
          "last_comment_at": "2025-10-06T00:31:50Z",
          "last_comment_author": "StevenShen3641"
        },
        {
          "number": 530,
          "created_at": "2024-04-03T12:23:54Z",
          "last_comment_at": "2024-07-19T12:05:17Z",
          "last_comment_author": "nevercast"
        },
        {
          "number": 531,
          "created_at": "2024-04-03T20:10:49Z",
          "last_comment_at": "2024-05-22T20:59:50Z",
          "last_comment_author": "dch"
        },
        {
          "number": 534,
          "created_at": "2024-04-05T02:47:16Z",
          "last_comment_at": "2024-10-11T18:01:03Z",
          "last_comment_author": "maks-ivanov"
        }
      ]
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/Aider-AI/aider",
    "host": "github.com",
    "name": "aider",
    "owner": "Aider-AI"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 63,
      "inputs": {
        "security": 10,
        "vitality": 68,
        "community": 88,
        "governance": 58,
        "engineering": 85
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "moderate",
        "name": "Vitality",
        "value": 68,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "moderate",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 61,
            "inputs": {
              "commits_last_year": 182,
              "human_commit_share": 1,
              "days_since_last_push": 60,
              "active_weeks_last_year": 27
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 60 days ago",
                "points": 18,
                "status": "partial",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 60
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "27/52 weeks with commits",
                "points": 18.7,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 27
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "182 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 182
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "OpenSSF Scorecard unavailable",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "good",
            "name": "Release discipline",
            "note": null,
            "notes": [],
            "value": 78,
            "inputs": {
              "releases_count": 93,
              "latest_release_tag": "v0.86.0",
              "releases_from_tags": false,
              "days_since_latest_release": 346,
              "mean_days_between_releases": 16.5
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "93 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 93
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 346 days ago",
                "points": 16.2,
                "status": "partial",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 346
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~16.5 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 16.5
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "OpenSSF Scorecard unavailable",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "maintained",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": null,
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": 60,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "last human commit 60 days ago",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_maintained",
                    "params": {
                      "days": 60
                    }
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "excellent",
        "name": "Community & Adoption",
        "value": 88,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "excellent",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 98,
            "inputs": {
              "forks": 4746,
              "stars": 47589,
              "watchers": 254,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "window_too_short"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "47,589 stars",
                "points": 60,
                "status": "met",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 47589
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "4,746 forks",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 4746
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "254 watchers",
                "points": 13.4,
                "status": "partial",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 254
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "good",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 70,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": true,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (Apache-2.0)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "Apache-2.0"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 18,
                "status": "met",
                "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
              }
            ]
          },
          {
            "key": "ecosystem_adoption",
            "band": "excellent",
            "name": "Ecosystem adoption (downloads)",
            "note": "Excluded from scoring (no data or not applicable): Registry dependents. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "registry_dependents"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 99,
            "inputs": {
              "packages": [
                "aider-chat"
              ],
              "dependents": null,
              "ecosystems": "pypi",
              "total_downloads": null,
              "monthly_downloads": 848398
            },
            "components": [
              {
                "key": "monthly_downloads",
                "name": "Monthly downloads",
                "detail": "848,398 downloads/month across pypi",
                "points": 79,
                "status": "partial",
                "details": [
                  {
                    "code": "downloads_monthly",
                    "params": {
                      "count": 848398,
                      "ecosystems": "pypi"
                    }
                  }
                ],
                "max_points": 80
              },
              {
                "key": "registry_dependents",
                "name": "Registry dependents",
                "detail": "not reported by this ecosystem",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_reported_by_this_ecosystem",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "moderate",
        "name": "Sustainability & Governance",
        "value": 58,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 26,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 100,
              "top_contributor_share": 0.97
            },
            "components": [
              {
                "key": "bus_factor",
                "name": "Bus factor",
                "detail": "1 contributor(s) cover half of all commits",
                "points": 9,
                "status": "partial",
                "details": [
                  {
                    "code": "bus_factor",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 54
              },
              {
                "key": "commit_distribution",
                "name": "Commit distribution",
                "detail": "top contributor authored 97% of commits",
                "points": 0.7,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 97
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "100 contributors",
                "points": 13.5,
                "status": "met",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 100
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "OpenSSF Scorecard unavailable",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "moderate",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 57,
            "inputs": {
              "merged_prs": 288,
              "open_issues": 1320,
              "closed_issues": 2981,
              "issue_closed_ratio": 0.693,
              "closed_unmerged_prs": 395
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "69% of issues closed",
                "points": 32.4,
                "status": "partial",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 69
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "288/683 decided PRs merged",
                "points": 16.1,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 288,
                      "decided": 683
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "OpenSSF Scorecard unavailable",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "moderate",
            "name": "Ownership & stewardship",
            "note": null,
            "notes": [],
            "value": 62,
            "inputs": {
              "followers": 794,
              "owner_type": "Organization",
              "is_verified": null,
              "owner_login": "Aider-AI",
              "public_repos": 7,
              "account_age_days": 773
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "organization-owned",
                "points": 30,
                "status": "met",
                "details": [
                  {
                    "code": "owner_organization",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "794 followers of Aider-AI",
                "points": 20.9,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 794,
                      "login": "Aider-AI"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "7 public repos, account ~2 yr old",
                "points": 10.8,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 7
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 2
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "aider-chat"
              ],
              "ecosystems": "pypi",
              "any_deprecated": false,
              "min_days_since_publish": 159
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "1 package(s) on pypi",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 1,
                      "ecosystems": "pypi"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 159 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 159
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "174 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 174
                    }
                  }
                ],
                "max_points": 20
              },
              {
                "key": "not_deprecated",
                "name": "Not deprecated",
                "detail": "active, not deprecated or yanked",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "package_not_deprecated",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "excellent",
        "name": "Engineering Quality",
        "value": 85,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "excellent",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 92,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": true,
              "has_precommit_config": true
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "10 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 10
                    }
                  }
                ],
                "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": ".flake8",
                "points": 16,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".flake8"
                    }
                  }
                ],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 9.6,
                "status": "met",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "OpenSSF Scorecard unavailable",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "good",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 75,
            "inputs": {
              "topics": [
                "chatgpt",
                "cli",
                "command-line",
                "gpt-4",
                "openai",
                "gpt-3",
                "gpt-35-turbo",
                "claude-3",
                "gpt-4o",
                "anthropic",
                "gemini",
                "llama",
                "sonnet"
              ],
              "has_wiki": true,
              "homepage": "https://aider.chat/",
              "has_readme": true,
              "has_docs_dir": false,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": "https://aider.chat/",
                "points": 15,
                "status": "met",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": "13 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 13
                    }
                  }
                ],
                "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": "critical",
        "name": "Security",
        "value": 10,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "critical",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Dependency lockfiles. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "dependency_lockfiles"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 1,
            "inputs": {
              "source": "file_signals",
              "lockfiles": [],
              "manifests": [
                "pyproject.toml",
                "requirements.txt",
                "requirements/requirements-browser.txt",
                "requirements/requirements-dev.txt",
                "requirements/requirements-help.txt",
                "requirements/requirements-playwright.txt"
              ],
              "has_codeql_workflow": false,
              "has_security_policy": false,
              "has_dependabot_config": false
            },
            "components": [
              {
                "key": "security_policy_security_md",
                "name": "Security policy (SECURITY.md)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 30
              },
              {
                "key": "dependabot_config",
                "name": "Dependabot config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 25
              },
              {
                "key": "dependency_lockfiles",
                "name": "Dependency lockfiles",
                "detail": "published library — lockfiles are an application concern, not expected",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "lockfiles_not_expected",
                    "params": {}
                  }
                ],
                "max_points": 25
              },
              {
                "key": "codeql_workflow",
                "name": "CodeQL workflow",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "dependency_advisories",
            "band": "at_risk",
            "name": "Dependency advisories",
            "note": "Matched the pypi:aider-chat@0.86.2 runtime dependency closure — what installing the published package pulls in — 107 packages. Reachability is not analyzed.",
            "notes": [
              {
                "code": "advisories_scope_published",
                "params": {
                  "package": "pypi:aider-chat@0.86.2",
                  "assessed": 107
                }
              },
              {
                "code": "advisories_reachability",
                "params": {}
              }
            ],
            "value": 46,
            "inputs": {
              "source": "osv",
              "advisories": 131,
              "affected_packages": 13,
              "assessed_packages": 107,
              "unassessed_packages": 0,
              "affected_by_severity": "critical 4, high 3, moderate 4, low 1, unknown 1",
              "direct_affected_packages": 13
            },
            "components": [
              {
                "key": "direct_dependencies_free_of_known_advisories",
                "name": "Direct dependencies free of known advisories",
                "detail": "13 affected: aiohttp 3.13.3 (critical 9.1), gitpython 3.1.46 (critical 9.8), litellm 1.81.10 (critical 9.8), +10 more",
                "points": 2.6,
                "status": "partial",
                "details": [
                  {
                    "code": "advisories_affected",
                    "params": {
                      "count": 13,
                      "packages": "aiohttp 3.13.3 (critical 9.1), gitpython 3.1.46 (critical 9.8), litellm 1.81.10 (critical 9.8)"
                    }
                  },
                  {
                    "code": "advisories_affected_more",
                    "params": {
                      "count": 10
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "indirect_dependencies_free_of_known_advisories",
                "name": "Indirect dependencies free of known advisories",
                "detail": "no indirect dependency carries a known advisory",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "no_indirect_advisories",
                    "params": {}
                  }
                ],
                "max_points": 25
              },
              {
                "key": "no_advisories_left_outstanding",
                "name": "No advisories left outstanding",
                "detail": "7 advisory-carrying package(s) unaddressed past 90 days; oldest published 160 days ago",
                "points": 18.5,
                "status": "partial",
                "details": [
                  {
                    "code": "advisories_stale",
                    "params": {
                      "days": 90,
                      "count": 7,
                      "oldest": 160
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "malicious_dependencies",
            "band": "excellent",
            "name": "Malicious dependencies",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "source": "osv",
              "meaning": "reported as a malicious package by the OpenSSF corpus; the remedy is removal or moving off the compromised name, never an upgrade of the same artifact. Versions the registry has since pulled are listed but not scored",
              "packages": [],
              "red_flag": false,
              "assessed_packages": 107,
              "malicious_packages": 0,
              "direct_malicious_packages": 0,
              "withdrawn_malicious_packages": 0,
              "installable_malicious_packages": 0
            },
            "components": [
              {
                "key": "no_dependency_reported_as_a_malicious_package",
                "name": "No dependency reported as a malicious package",
                "detail": "no dependency is reported as a malicious package",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "no_malicious_dependencies",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          },
          {
            "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": 13
            },
            "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": 61,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "good",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 79,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.64,
              "agent_instruction_files": [
                "aider/website/docs/llms/gemini.md"
              ],
              "agent_instruction_max_bytes": 700
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "aider/website/docs/llms/gemini.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "aider/website/docs/llms/gemini.md"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "64 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 34.1,
                "status": "partial",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 64,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "moderate",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 59,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [],
              "has_dockerfile": true,
              "typed_language": false,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": true,
              "typecheck_configs": [],
              "agent_commit_share": 0.34,
              "toolchain_manifests": [],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "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": ".flake8",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".flake8"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "Dockerfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Dockerfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "34 of the last 100 commits agent-authored or agent-credited",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 34,
                      "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": "OpenSSF Scorecard unavailable",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "moderate",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 53,
            "inputs": {
              "primary_language": "Python",
              "largest_source_bytes": 193531,
              "source_files_sampled": 175,
              "oversized_source_files": 5
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "Python without a type-check config",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_typecheck_config_language",
                    "params": {
                      "language": "Python"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "5/175 source files over 60KB",
                "points": 53.4,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 175,
                      "oversized": 5
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "at_risk",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "example_dirs": [
                "examples"
              ],
              "has_mcp_signal": false,
              "api_schema_files": []
            },
            "components": [
              {
                "key": "api_schema_openapi_graphql_proto",
                "name": "API schema (OpenAPI/GraphQL/proto)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 40
              },
              {
                "key": "mcp_server",
                "name": "MCP server",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "runnable_examples",
                "name": "Runnable examples",
                "detail": "examples",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "examples"
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "Advisory severity resolved for 120 of 131 advisories (lookup cap); the remainder are reported as unknown severity",
    "OpenSSF Scorecard did not return a usable result (2026/07/21 23:05:57 Warning: PATs stored in env variables GITHUB_AUTH_TOKEN and GITHUB_TOKEN differ. Scorecard will use the former.); skipping Scorecard checks"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-21T23:06:32.802197Z",
  "schema_version": "0.25.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/a/Aider-AI/aider.svg",
  "full_name": "Aider-AI/aider",
  "license_state": "standard",
  "license_spdx": "Apache-2.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.25.0 — metodología completa · wiki de métricas.

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