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

assafelovic / gpt-researcher

An autonomous agent that conducts deep research on any data using any LLM providers

Python · TypeScriptApache-2.0★ 28.654 estrellas⑂ 3866 forksdesde may 2023Ver en GitHub ↗

assafelovic/gpt-researcher tiene un índice de salud de 81 sobre 100, lo que lo sitúa en la banda Bueno. Su puntuación más alta es Vitality (93/100) y la más baja, Sustainability & Governance (67/100). Se actualizó por última vez hace 8 días. Una sola persona concentra la mayor parte del trabajo reciente.

81
global / 100
Bueno

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

81
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

Assaf ElovicCuenta personal
1219 seguidores23 repositorios públicosdesde jul 2015Tavily.com

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

Ecosistemas de paquetes

RegistroPaqueteVersiónDescargas / mesVersionesÚltima publicación
PyPIgpt-researcher0.16.086.471110hace 8 días

Métricas por categoría

Vitalidad

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

93Excelente · 22% del índice global
Cómo se puntúa
28.8/36Recencia de push — último push hace 8 días
31.8/36Cadencia de commits — 46/52 semanas con commits
18/18Volumen de commits — 372 commits en el último año
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 18 issue activity found in the last 90 days -- score normalized to 10
Datos de entrada utilizados
commits_last_year372
human_commit_share1
days_since_last_push8
active_weeks_last_year46
Cómo se puntúa
27/27Publica versiones — 72 versiones publicadas
36/36Recencia de las versiones — última versión hace 8 días
27/27Cadencia de publicación — una versión cada ~24 días
0/10OpenSSF Scorecard: Signed-Releases — sin datos
Datos de entrada utilizados
releases_count72
latest_release_tagv3.6.0
releases_from_tagsno
days_since_latest_release8
mean_days_between_releases24
Excluidos de la puntuación (sin datos o no aplicable): OpenSSF Scorecard: Signed-Releases. Los pesos restantes se han renormalizado.

Comunidad y Adopción

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

89Excelente · 18% del índice global
Cómo se puntúa
60/60Estrellas — 28.654 estrellas
25/25Forks — 3866 forks
12.4/15Observadores — 168 observadores
Datos de entrada utilizados
forks3866
stars28.654
watchers168
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Cómo se puntúa
22.5/22.5README
22.5/22.5Licencia — licencia reconocida (Apache-2.0)
18/18Guía CONTRIBUTING
13.5/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_conduct
has_pull_request_templateno
Cómo se puntúa
65.8/80Descargas mensuales — 86.471 descargas/mes en pypi
0/20Dependientes en el registro — no lo informa este ecosistema
Datos de entrada utilizados
packagesgpt-researcher
dependents
ecosystemspypi
total_downloads
monthly_downloads86.471
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?

67Moderado · 24% del índice global
Cómo se puntúa
9/54Factor bus — la mitad de los commits recae en 1 contribuyente(s)
10.5/22.5Distribución de commits — el principal contribuyente firma el 53% de los commits
13.5/13.5Amplitud de contribuyentes — 98 contribuyentes
10/10OpenSSF Scorecard: Contributors — project has 13 contributing companies or organizations
Datos de entrada utilizados
bus_factor1
contributors_sampled98
top_contributor_share0,534
Cómo se puntúa
43.9/46.8Resolución de issues — 94% de issues cerradas
22.7/38.3Aceptación de PR — 571/961 PR decididos fusionados
1.5/15OpenSSF Scorecard: Code-Review — Found 1/9 approved changesets -- score normalized to 1
Datos de entrada utilizados
merged_prs571
open_issues44
closed_issues677
issue_closed_ratio0,939
closed_unmerged_prs390
Cómo se puntúa
10/30Respaldo de la propiedad — cuenta personal (usuario)
0/20Dominio verificado — no aplicable a cuentas de usuario
22.2/25Alcance del propietario — 1219 seguidores de assafelovic
22.1/25Trayectoria — 23 repos públicos, cuenta de ~11 años
Datos de entrada utilizados
followers1219
owner_typeUser
is_verified
owner_loginassafelovic
public_repos23
account_age_days4015
Excluidos de la puntuación (sin datos o no aplicable): Dominio verificado. Los pesos restantes se han renormalizado.
Cómo se puntúa
25/25Publicado y resoluble — 1 paquete(s) en pypi
35/35Recencia de publicación — última publicación hace 8 días
20/20Historial de versiones — 110 versiones en el registro
20/20No obsoleto — activo, ni obsoleto ni retirado
Datos de entrada utilizados
packagesgpt-researcher
ecosystemspypi
any_deprecatedno
min_days_since_publish8

Calidad de Ingeniería

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

84Bueno · 20% del índice global
Cómo se puntúa
24/24Flujos de trabajo de CI — 5 flujo(s) de trabajo
24/24Pruebas presentes
16/16Configuración de linter — .eslintrc.json
0/9.6Hooks de pre-commit
0/6.4.editorconfig
16/20OpenSSF Scorecard: CI-Tests — 8 out of 9 merged PRs checked by a CI test -- score normalized to 8
Datos de entrada utilizados
has_ci
has_tests
has_editorconfigno
has_linter_config
has_precommit_configno

Documentación

90Excelente
Cómo se puntúa
30/30README
25/25Directorio de documentación
15/15Sitio de documentación / página del proyecto — https://gptr.dev
10/10Descripción del repositorio
10/10Topics — 11 topics
0/10Wiki
Datos de entrada utilizados
topicsai, python, agent, automation, research, search, webscraping, llms, deepresearch, mcp, mcp-server
has_wikino
homepagehttps://gptr.dev
has_readme
has_docs_dir
has_description

Seguridad

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

70Bueno · 16% del índice global
Cómo se puntúa
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — sin datos
2/2.5CI-Tests — 8 out of 9 merged PRs checked by a CI test -- score normalized to 8
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0.8/7.5Code-Review — Found 1/9 approved changesets -- score normalized to 1
2.5/2.5Contributors — project has 13 contributing companies or organizations
10/10Dangerous-Workflow — no dangerous workflow patterns detected
7.5/7.5Dependency-Update-Tool — update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5Licencia — license file detected
7.5/7.5Maintained — 30 commit(s) and 18 issue activity found in the last 90 days -- score normalized to 10
0/5Packaging — sin datos
0/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
0/5SAST — SAST tool is not run on all commits -- score normalized to 0
5/5Security-Policy — security policy file detected
0/7.5Signed-Releases — sin datos
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
7.5/7.5Vulnerabilities — 0 existing vulnerabilities detected
Datos de entrada utilizados
sourceopenssf_scorecard
checks_evaluated15
scorecard_versionv5.5.0
checks_inconclusive3
scorecard_aggregate6,2
Excluidos de la puntuación (sin datos o no aplicable): branch_protection, packaging, signed_releases. Los pesos restantes se han renormalizado.
Cómo se puntúa
35/35Dependencias directas libres de avisos conocidos — ninguna dependencia directa tiene un aviso conocido
25/25Dependencias indirectas libres de avisos conocidos — ninguna dependencia indirecta tiene un aviso conocido
0/40Sin avisos pendientes — ningún aviso tiene fecha de publicación
Datos de entrada utilizados
sourceosv
advisories0
affected_packages0
assessed_packages159
unassessed_packages0
affected_by_severitynone
direct_affected_packages0
Excluidos de la puntuación (sin datos o no aplicable): Sin avisos pendientes. Los pesos restantes se han renormalizado. Se cotejó el cierre de dependencias en tiempo de ejecución de pypi:gpt-researcher@0.16.0 —lo que arrastra la instalación del paquete publicado—: 159 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.

80Bueno · 0% del índice global
Cómo se puntúa
45/45Instrucciones para agentes — .cursorrules
0/15Documentación legible por máquinas (llms.txt)
40/40Historial de commits legible — 95 de 100 commits humanos declaran su intención (asunto estructurado o cuerpo explicativo)
Datos de entrada utilizados
has_llms_txtno
legible_history_share0,95
agent_instruction_files.cursorrules
agent_instruction_max_bytes5937
Cómo se puntúa
0/18Arranque con un solo comando
22/22Pruebas automatizadas
11/11Configuración de lint / formato — .eslintrc.json
11/11Verificación estática de tipos — frontend/nextjs/tsconfig.json
10/10Entorno reproducible — Dockerfile
10/10Práctica demostrada con agentes — 13 de los últimos 100 commits con autoría o crédito de agente
5/8Mantenimiento automatizado — automatización de dependencias configurada, no observada en los commits muestreados
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Datos de entrada utilizados
has_nixno
has_tests
lockfiles
has_dockerfile
typed_languageno
bootstrap_files
has_devcontainerno
has_linter_config
typecheck_configsfrontend/nextjs/tsconfig.json
agent_commit_share0,13
toolchain_manifests
dependency_bot_commit_share0
Cómo se puntúa
27/45Código verificable por tipos — Python con configuración de verificación de tipos (frontend/nextjs/tsconfig.json)
54.9/55Tamaños de archivo manejables — 1/367 archivos fuente de más de 60 KB
Datos de entrada utilizados
primary_languagePython
largest_source_bytes84.260
source_files_sampled367
oversized_source_files1
Cómo se puntúa
40/40Esquema de API (OpenAPI/GraphQL/proto) — .triage/engagement.graphql
20/20Servidor MCP
40/40Ejemplos ejecutables — examples, notebooks
Datos de entrada utilizados
example_dirsexamples, notebooks
has_mcp_signal
api_schema_files.triage/engagement.graphql

Datos clave

28.654estrellas de GitHub
98contribuidores
372commits en los últimos 12 meses
8días desde el último push
72versiones publicadas
1factor bus
44issues abiertas
npm, PyPIecosistemas de paquetes

Advertencias de recopilación de datos

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token
  • Could not fetch npm package 'simple_js_test' from its registry

Más detalle

Historial de estrellas y forks 0 ★ / 3866 ⇿
0Estrellas
3866Forks
14Versiones

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.

25003000350040003866112025-082026-022026-07
Mayor 0Menor 3Parche 6
OpenSSF Scorecard 6.2 / 10
6.2agregado

Evaluación de seguridad independiente y agnóstica en cuanto a herramientas, procedente del proyecto de código abierto OpenSSF Scorecard. Cada comprobación premia una práctica de seguridad, no la herramienta de un proveedor concreto. Las comprobaciones que Scorecard no pudo determinar se marcan como n/d y se excluyen de la puntuación de seguridad (nunca se cuentan como cero).Scorecard v5.5.0 · 2026-07-27 00:32 UTC

10Binary-Artifactsno binaries found in the repo
n/dBranch-Protectioninternal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md
8CI-Tests8 out of 9 merged PRs checked by a CI test -- score normalized to 8
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
1Code-ReviewFound 1/9 approved changesets -- score normalized to 1
10Contributorsproject has 13 contributing companies or organizations
10Dangerous-Workflowno dangerous workflow patterns detected
10Dependency-Update-Toolupdate tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
10Maintained30 commit(s) and 18 issue activity found in the last 90 days -- score normalized to 10
n/dPackagingpackaging workflow not detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
0SASTSAST tool is not run on all commits -- score normalized to 0
10Security-Policysecurity policy file detected
n/dSigned-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
10Vulnerabilities0 existing vulnerabilities detected
Dependencias directas 141
RegistroPaqueteRestricción de versiónManifiesto
npm@langchain/langgraph-sdk^0.0.1-rc.13multi_agents/package.json
PyPIaiofiles>=23.2.1pyproject.toml
PyPIaiohappyeyeballs>=2.6.1pyproject.toml
PyPIaiohttp>=3.12.0pyproject.toml
PyPIaiosignal>=1.3.2pyproject.toml
PyPIannotated-types>=0.7.0pyproject.toml
PyPIanyio>=4.9.0pyproject.toml
PyPIarxiv>=2.0.0pyproject.toml
PyPIattrs>=25.3.0pyproject.toml
PyPIbackoff>=2.2.1pyproject.toml
PyPIbeautifulsoup4>=4.12.2pyproject.toml
PyPIbrotli>=1.2.0pyproject.toml
PyPIcertifi>=2025.4.26pyproject.toml
PyPIcffi>=1.17.1pyproject.toml
PyPIchardet>=5.2.0pyproject.toml
PyPIcharset-normalizer>=3.4.2pyproject.toml
PyPIclick>=8.1.0pyproject.toml
PyPIcolorama>=0.4.6pyproject.toml
PyPIcryptography>=45.0.2pyproject.toml
PyPIcssselect2>=0.8.0pyproject.toml
PyPIdataclasses-json>=0.6.7pyproject.toml
PyPIdistro>=1.9.0pyproject.toml
PyPIdocopt>=0.6.2pyproject.toml
PyPIduckduckgo-search>=4.1.1pyproject.toml
PyPIemoji>=2.14.1pyproject.toml
PyPIfastapi>=0.104.1pyproject.toml
PyPIfeedparser>=6.0.11pyproject.toml
PyPIfilelock>=3.18.0pyproject.toml
PyPIfiletype>=1.2.0pyproject.toml
PyPIfonttools>=4.58.0pyproject.toml
PyPIfrozenlist>=1.6.0pyproject.toml
PyPIfsspec>=2025.5.1pyproject.toml
PyPIgreenlet>=3.2.2pyproject.toml
PyPIh11>=0.16.0pyproject.toml
PyPIhtml5lib>=1.1pyproject.toml
PyPIhtmldocx>=0.0.6pyproject.toml
PyPIhttpcore>=1.0.9pyproject.toml
PyPIhttpx>=0.28.1pyproject.toml
PyPIhttpx-aiohttp>=0.1.4pyproject.toml
PyPIhttpx-sse>=0.4.0pyproject.toml
PyPIhuggingface-hub>=0.32.0pyproject.toml
PyPIidna>=3.10pyproject.toml
PyPIimportlib-metadata>=8.7.0pyproject.toml
PyPIjinja2>=3.1.6pyproject.toml
PyPIjiter>=0.10.0pyproject.toml
PyPIjoblib>=1.5.1pyproject.toml
PyPIjson-repair>=0.44.0pyproject.toml
PyPIjson5>=0.12.0pyproject.toml
PyPIjsonpatch>=1.33pyproject.toml
PyPIjsonpointer>=3.0.0pyproject.toml
PyPIjsonschema>=4.23.0pyproject.toml
PyPIjsonschema-specifications>=2025.4.1pyproject.toml
PyPIkiwisolver>=1.4.5pyproject.toml
PyPIlangchain>=1.0.0pyproject.toml
PyPIlangchain-classic>=1.0.0pyproject.toml
PyPIlangchain-community>=0.4.0pyproject.toml
PyPIlangchain-core>=1.0.0pyproject.toml
PyPIlangchain-ollama>=1.0.0pyproject.toml
PyPIlangchain-openai>=1.0.0pyproject.toml
PyPIlangchain-text-splitters>=1.0.0pyproject.toml
PyPIlangdetect>=1.0.9pyproject.toml
PyPIlanggraph>=0.2.76pyproject.toml
PyPIlanggraph-checkpoint>=2.0.26pyproject.toml
PyPIlanggraph-cli>=0.2.10pyproject.toml
PyPIlanggraph-sdk>=0.1.70pyproject.toml
PyPIlangsmith>=0.3.42pyproject.toml
PyPIlitellm>=1.71.0pyproject.toml
PyPIloguru>=0.7.3pyproject.toml
PyPIlxml>=5.4.0pyproject.toml
PyPImarkdown>=3.8pyproject.toml
PyPImarkdown2>=2.5.3pyproject.toml
PyPImarkupsafe>=3.0.2pyproject.toml
PyPImarshmallow>=3.26.1pyproject.toml
PyPImcp>=1.9.1pyproject.toml
PyPImd2pdf>=1.0.1pyproject.toml
PyPImistune>=3.1.3pyproject.toml
PyPImultidict>=6.4.4pyproject.toml
PyPImypy-extensions>=1.1.0pyproject.toml
PyPInest-asyncio>=1.6.0pyproject.toml
PyPInltk>=3.9.1pyproject.toml
PyPInumpy>=2.0.0,<2.3.0pyproject.toml
PyPIolefile>=0.47pyproject.toml
PyPIollama>=0.4.8pyproject.toml
PyPIopenai>=1.82.0pyproject.toml
PyPIorjson>=3.10.18pyproject.toml
PyPIormsgpack>=1.10.0pyproject.toml
PyPIpackaging>=24.2pyproject.toml
PyPIpillow>=11.2.1pyproject.toml
PyPIprimp>=0.15.0pyproject.toml
PyPIpropcache>=0.3.1pyproject.toml
PyPIpsutil>=6.0.0pyproject.toml
PyPIpycparser>=2.22pyproject.toml
PyPIpydantic>=2.11.5pyproject.toml
PyPIpydantic-core>=2.33.2pyproject.toml
PyPIpydantic-settings>=2.9.1pyproject.toml
PyPIpydyf>=0.11.0pyproject.toml
PyPIpymupdf>=1.26.0pyproject.toml
PyPIpypdf>=5.5.0pyproject.toml
PyPIpyphen>=0.17.2pyproject.toml
PyPIpython-docx>=1.1.2pyproject.toml
PyPIpython-dotenv>=1.1.0pyproject.toml
PyPIpython-iso639>=2025.2.18pyproject.toml
PyPIpython-magic>=0.4.27pyproject.toml
PyPIpython-multipart>=0.0.20pyproject.toml
PyPIpython-oxmsg>=0.0.2pyproject.toml
PyPIpyyaml>=6.0.2pyproject.toml
PyPIrapidfuzz>=3.13.0pyproject.toml
PyPIreferencing>=0.36.2pyproject.toml
PyPIregex>=2024.11.6pyproject.toml
PyPIrequests>=2.32.3pyproject.toml
PyPIrequests-toolbelt>=1.0.0pyproject.toml
PyPIrpds-py>=0.25.1pyproject.toml
PyPIsgmllib3k>=1.0.0pyproject.toml
PyPIsix>=1.17.0pyproject.toml
PyPIsniffio>=1.3.1pyproject.toml
PyPIsoupsieve>=2.7pyproject.toml
PyPIsqlalchemy>=2.0.41pyproject.toml
PyPIsse-starlette>=2.3.5pyproject.toml
PyPIstarlette>=0.46.2pyproject.toml
PyPItenacity>=9.1.2pyproject.toml
PyPItiktoken>=0.9.0pyproject.toml
PyPItinycss2>=1.4.0pyproject.toml
PyPItinyhtml5>=2.0.0pyproject.toml
PyPItokenizers>=0.21.1pyproject.toml
PyPItqdm>=4.67.1pyproject.toml
PyPItyping-extensions>=4.13.2pyproject.toml
PyPItyping-inspect>=0.9.0pyproject.toml
PyPItyping-inspection>=0.4.1pyproject.toml
PyPIunstructured>=0.17.2pyproject.toml
PyPIunstructured-client>=0.35.0pyproject.toml
PyPIurllib3>=2.4.0pyproject.toml
PyPIuvicorn>=0.34.2pyproject.toml
PyPIweasyprint>=65.1pyproject.toml
PyPIwebencodings>=0.5.1pyproject.toml
PyPIwebsockets>=15.0.1pyproject.toml
PyPIwin32-setctime>=1.2.0pyproject.toml
PyPIwrapt>=1.17.2pyproject.toml
PyPIyarl>=1.20.0pyproject.toml
PyPIzipp>=3.21.0pyproject.toml
PyPIzopfli>=0.2.3.post1pyproject.toml
PyPIzstandard>=0.23.0pyproject.toml
Todas las dependencias 236

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

RegistroPaqueteVersiónRelación
npm@langchain/langgraph-sdk^0.0.1-rc.12directa
npm@langchain/langgraph-sdk^0.0.1-rc.13directa
PyPIaiofilesdirecta
PyPIaiohappyeyeballsdirecta
PyPIaiohttpdirecta
PyPIaiosignaldirecta
PyPIannotated-typesdirecta
PyPIanyiodirecta
PyPIarxivdirecta
PyPIattrsdirecta
PyPIbackoffdirecta
PyPIbeautifulsoup4directa
PyPIbrotlidirecta
PyPIcertifidirecta
PyPIcffidirecta
PyPIchardetdirecta
PyPIcharset-normalizerdirecta
PyPIclickdirecta
PyPIcoloramadirecta
PyPIcryptographydirecta
PyPIcssselect2directa
PyPIdataclasses-jsondirecta
PyPIdistrodirecta
PyPIdocoptdirecta
PyPIduckduckgo-searchdirecta
PyPIemojidirecta
PyPIfastapidirecta
PyPIfeedparserdirecta
PyPIfilelockdirecta
PyPIfiletypedirecta
PyPIfonttoolsdirecta
PyPIfrozenlistdirecta
PyPIfsspecdirecta
PyPIgreenletdirecta
PyPIh11directa
PyPIhtml5libdirecta
PyPIhtmldocxdirecta
PyPIhttpcoredirecta
PyPIhttpxdirecta
PyPIhttpx-aiohttpdirecta
PyPIhttpx-ssedirecta
PyPIhuggingface-hubdirecta
PyPIidnadirecta
PyPIimportlib-metadatadirecta
PyPIjinja2directa
PyPIjiterdirecta
PyPIjoblibdirecta
PyPIjson-repairdirecta
PyPIjson5directa
PyPIjsonpatchdirecta
PyPIjsonpointerdirecta
PyPIjsonschemadirecta
PyPIjsonschema-specificationsdirecta
PyPIkiwisolverdirecta
PyPIlangchaindirecta
PyPIlangchain-classicdirecta
PyPIlangchain-communitydirecta
PyPIlangchain-coredirecta
PyPIlangchain-ollamadirecta
PyPIlangchain-openaidirecta
PyPIlangchain-text-splittersdirecta
PyPIlangdetectdirecta
PyPIlanggraphdirecta
PyPIlanggraph-checkpointdirecta
PyPIlanggraph-clidirecta
PyPIlanggraph-sdkdirecta
PyPIlangsmithdirecta
PyPIlitellmdirecta
PyPIlogurudirecta
PyPIlxmldirecta
PyPImarkdowndirecta
PyPImarkdown2directa
PyPImarkupsafedirecta
PyPImarshmallowdirecta
PyPImcpdirecta
PyPImd2pdfdirecta
PyPImistunedirecta
PyPImultidictdirecta
PyPImypy-extensionsdirecta
PyPInest-asynciodirecta
PyPInltkdirecta
PyPInumpydirecta
PyPIolefiledirecta
PyPIollamadirecta
PyPIopenaidirecta
PyPIorjsondirecta
PyPIormsgpackdirecta
PyPIpackagingdirecta
PyPIpillowdirecta
PyPIprimpdirecta
PyPIpropcachedirecta
PyPIpsutildirecta
PyPIpycparserdirecta
PyPIpydanticdirecta
PyPIpydantic-coredirecta
PyPIpydantic-settingsdirecta
PyPIpydyfdirecta
PyPIpymupdfdirecta
PyPIpypdfdirecta
PyPIpyphendirecta
PyPIpython-docxdirecta
PyPIpython-dotenvdirecta
PyPIpython-iso639directa
PyPIpython-magicdirecta
PyPIpython-multipartdirecta
PyPIpython-oxmsgdirecta
PyPIpyyamldirecta
PyPIrapidfuzzdirecta
PyPIreferencingdirecta
PyPIregexdirecta
PyPIrequestsdirecta
PyPIrequests-toolbeltdirecta
PyPIrpds-pydirecta
PyPIsgmllib3kdirecta
PyPIsixdirecta
PyPIsniffiodirecta
PyPIsoupsievedirecta
PyPIsqlalchemydirecta
PyPIsse-starlettedirecta
PyPIstarlettedirecta
PyPItenacitydirecta
PyPItiktokendirecta
PyPItinycss2directa
PyPItinyhtml5directa
PyPItokenizersdirecta
PyPItqdmdirecta
PyPItyping-extensionsdirecta
PyPItyping-inspectdirecta
PyPItyping-inspectiondirecta
PyPIunstructureddirecta
PyPIunstructured-clientdirecta
PyPIurllib3directa
PyPIuvicorndirecta
PyPIweasyprintdirecta
PyPIwebencodingsdirecta
PyPIwebsocketsdirecta
PyPIwin32-setctimedirecta
PyPIwraptdirecta
PyPIyarldirecta
PyPIzippdirecta
PyPIzopflidirecta
PyPIzstandarddirecta
npm@babel/core^7.26.9indirecta
npm@babel/plugin-syntax-flow^7.26.0indirecta
npm@babel/plugin-transform-typescript^7.26.8indirecta
npm@babel/preset-env^7.26.9indirecta
npm@babel/preset-react^7.26.3indirecta
npm@babel/preset-typescript^7.26.0indirecta
npm@docusaurus/core3.7.0indirecta
npm@docusaurus/preset-classic3.7.0indirecta
npm@docusaurus/theme-mermaid3.7.0indirecta
npm@ducanh2912/next-pwa^10.0.1indirecta
npm@easyops-cn/docusaurus-search-local^0.49.2indirecta
npm@emotion/react^11.10.5indirecta
npm@emotion/styled^11.10.5indirecta
npm@mdx-js/react^3.1.0indirecta
npm@mozilla/readability^0.5.0indirecta
npm@next/third-parties^15.1.6indirecta
npm@rollup/plugin-alias^5.1.1indirecta
npm@rollup/plugin-babel^6.0.4indirecta
npm@rollup/plugin-commonjs^28.0.2indirecta
npm@rollup/plugin-json^6.1.0indirecta
npm@rollup/plugin-node-resolve^16.0.0indirecta
npm@rollup/plugin-replace^6.0.2indirecta
npm@rollup/plugin-typescript^12.1.2indirecta
npm@svgr/webpack^8.1.0indirecta
npm@tailwindcss/typography^0.5.16indirecta
npm@types/jsdom^21.1.6indirecta
npm@types/node^20indirecta
npm@types/react^18indirecta
npm@types/react-dom^18indirecta
npm@types/uuid^10.0.0indirecta
npmautoprefixer^10.4.20indirecta
npmaxios^1.3.2indirecta
npmclsx^1.1.1indirecta
npmdate-fns^4.1.0indirecta
npmdiscord.js^14.16.1indirecta
npmdotenv^16.4.5indirecta
npmeslint^8indirecta
npmeslint-config-next14.2.3indirecta
npmeventsource-parser^1.1.2indirecta
npmexpress^4.17.1indirecta
npmfile-loader^6.2.0indirecta
npmframer-motion^9.0.2indirecta
npmgeist^1.3.1indirecta
npmhast-util-is-element1.1.0indirecta
npmisomorphic-dompurify^3.0.0indirecta
npmjsonrepair^3.8.0indirecta
npmminimatch3.0.5indirecta
npmnext^14.2.28indirecta
npmnext-plausible^3.12.0indirecta
npmnodemon^3.1.4indirecta
npmpostcss^8indirecta
npmprettier^3.2.5indirecta
npmprettier-plugin-tailwindcss^0.6.0indirecta
npmreact^18.0.0indirecta
npmreact^18.0.1indirecta
npmreact-dom^18.0.0indirecta
npmreact-dom^18.0.1indirecta
npmreact-dropzone^14.2.3indirecta
npmreact-ga4^2.1.0indirecta
npmreact-hot-toast^2.4.1indirecta
npmrehype-katex7indirecta
npmrehype-prism-plus^2.0.0indirecta
npmremark^15.0.1indirecta
npmremark-gfm^4.0.1indirecta
npmremark-html^16.0.1indirecta
npmremark-math6indirecta
npmremark-parse^11.0.0indirecta
npmrollup^2.79.2indirecta
npmrollup-plugin-peer-deps-external^2.2.4indirecta
npmrollup-plugin-postcss^4.0.2indirecta
npmrollup-plugin-terser^7.0.2indirecta
npmrollup-plugin-typescript2^0.31.2indirecta
npmtailwindcss^3.4.1indirecta
npmtrim^0.0.3indirecta
npmtypescript^5indirecta
npmurl-loader^4.1.1indirecta
npmws^8.18.0indirecta
npmzod^3.0.0indirecta
npmzod-to-json-schema^3.23.0indirecta
PyPIag2indirecta
PyPIddgsindirecta
PyPIdeepagentsindirecta
PyPIgoogle-genaiindirecta
PyPIjudgesindirecta
PyPIlangchain-mcp-adaptersindirecta
PyPIpandasindirecta
PyPIpython-3-11indirecta
PyPIpython-pptxindirecta
PyPItavily-pythonindirecta
PyPItypes-aiofilesindirecta
PyPItypes-beautifulsoup4indirecta
PyPItypes-coloramaindirecta
PyPItypes-markdownindirecta
PyPItypes-requestsindirecta
Avisos de dependencias 0

Instalar pypi:gpt-researcher@0.16.0 arrastra 159 paquetes, directos y transitivos: 0 tienen avisos conocidos, de los cuales 0 son dependencias directas.

Ningún aviso conocido afecta a las dependencias evaluadas.

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": [
        "ai",
        "python",
        "agent",
        "automation",
        "research",
        "search",
        "webscraping",
        "llms",
        "deepresearch",
        "mcp",
        "mcp-server"
      ],
      "is_fork": false,
      "size_kb": 44783,
      "has_wiki": false,
      "homepage": "https://gptr.dev",
      "languages": {
        "jq": 629,
        "CSS": 81503,
        "HCL": 24833,
        "HTML": 23653,
        "Python": 1018824,
        "Procfile": 146,
        "Dockerfile": 4500,
        "JavaScript": 92671,
        "TypeScript": 361893
      },
      "pushed_at": "2026-07-18T07:56:55Z",
      "created_at": "2023-05-12T10:33:54Z",
      "owner_type": "User",
      "updated_at": "2026-07-26T23:41:35Z",
      "description": "An autonomous agent that conducts deep research on any data using any LLM providers",
      "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",
        "TypeScript"
      ]
    },
    "owner": {
      "blog": "www.assafelovic.com",
      "name": "Assaf Elovic",
      "type": "User",
      "login": "assafelovic",
      "company": "Tavily.com",
      "location": null,
      "followers": 1219,
      "avatar_url": "https://avatars.githubusercontent.com/u/13554167?v=4",
      "created_at": "2015-07-29T10:48:58Z",
      "is_verified": null,
      "public_repos": 23,
      "account_age_days": 4015
    },
    "license": {
      "state": "standard",
      "spdx_id": "Apache-2.0",
      "raw_spdx": "Apache-2.0",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v3.6.0",
          "kind": "minor",
          "published_at": "2026-07-18T07:56:56Z"
        },
        {
          "tag": "v3.5.1",
          "kind": "patch",
          "published_at": "2026-06-23T18:08:17Z"
        },
        {
          "tag": "v3.5.0",
          "kind": "minor",
          "published_at": "2026-05-28T07:24:31Z"
        },
        {
          "tag": "v3.4.4",
          "kind": "patch",
          "published_at": "2026-04-16T17:40:28Z"
        },
        {
          "tag": "v3.4.3",
          "kind": "patch",
          "published_at": "2026-03-13T14:06:38Z"
        },
        {
          "tag": "v3.4.2",
          "kind": "patch",
          "published_at": "2026-03-01T14:20:43Z"
        },
        {
          "tag": "v3.4.1",
          "kind": "patch",
          "published_at": "2026-02-21T07:19:02Z"
        },
        {
          "tag": "v3.4.0",
          "kind": "minor",
          "published_at": "2026-01-29T11:56:28Z"
        },
        {
          "tag": "v3.3.9",
          "kind": "patch",
          "published_at": "2026-01-25T06:41:51Z"
        },
        {
          "tag": "v.3.3.8",
          "kind": "other",
          "published_at": "2025-12-14T08:08:22Z"
        },
        {
          "tag": "v.3.3.7",
          "kind": "other",
          "published_at": "2025-11-07T14:10:38Z"
        },
        {
          "tag": "v.3.3.6",
          "kind": "other",
          "published_at": "2025-10-07T14:44:05Z"
        },
        {
          "tag": "v.3.3.5",
          "kind": "other",
          "published_at": "2025-09-23T07:52:30Z"
        },
        {
          "tag": "v.3.3.4",
          "kind": "other",
          "published_at": "2025-09-17T11:12:43Z"
        },
        {
          "tag": "v.3.3.3",
          "kind": "other",
          "published_at": "2025-08-08T05:03:19Z"
        },
        {
          "tag": "v.3.3.2",
          "kind": "other",
          "published_at": "2025-07-19T07:20:52Z"
        },
        {
          "tag": "v.3.3.1",
          "kind": "other",
          "published_at": "2025-07-04T08:51:49Z"
        },
        {
          "tag": "v3.3.0",
          "kind": "minor",
          "published_at": "2025-06-08T17:45:48Z"
        },
        {
          "tag": "v3.2.9",
          "kind": "patch",
          "published_at": "2025-06-01T15:33:49Z"
        },
        {
          "tag": "v3.2.8",
          "kind": "patch",
          "published_at": "2025-05-04T05:27:32Z"
        },
        {
          "tag": "v3.2.7",
          "kind": "patch",
          "published_at": "2025-04-07T09:49:44Z"
        },
        {
          "tag": "v3.2.6",
          "kind": "patch",
          "published_at": "2025-03-31T07:52:26Z"
        },
        {
          "tag": "v3.2.5",
          "kind": "patch",
          "published_at": "2025-03-27T12:47:58Z"
        },
        {
          "tag": "v3.2.4",
          "kind": "patch",
          "published_at": "2025-03-10T06:48:32Z"
        },
        {
          "tag": "v3.2.3",
          "kind": "patch",
          "published_at": "2025-02-28T09:22:19Z"
        },
        {
          "tag": "v3.2.2",
          "kind": "patch",
          "published_at": "2025-02-24T06:55:44Z"
        },
        {
          "tag": "v3.2.1",
          "kind": "patch",
          "published_at": "2025-02-15T14:03:59Z"
        },
        {
          "tag": "v3.2.0",
          "kind": "minor",
          "published_at": "2025-02-12T06:38:08Z"
        },
        {
          "tag": "v3.1.9",
          "kind": "patch",
          "published_at": "2025-01-28T08:06:50Z"
        },
        {
          "tag": "v3.1.8",
          "kind": "patch",
          "published_at": "2025-01-05T10:05:14Z"
        },
        {
          "tag": "v.3.1.7",
          "kind": "other",
          "published_at": "2024-12-29T06:40:17Z"
        },
        {
          "tag": "v3.1.6",
          "kind": "patch",
          "published_at": "2024-12-22T06:35:07Z"
        },
        {
          "tag": "v3.1.5",
          "kind": "patch",
          "published_at": "2024-12-14T07:17:10Z"
        },
        {
          "tag": "v3.1.4",
          "kind": "patch",
          "published_at": "2024-11-17T12:35:41Z"
        },
        {
          "tag": "v3.1.3",
          "kind": "patch",
          "published_at": "2024-11-03T06:17:55Z"
        },
        {
          "tag": "v3.1.2",
          "kind": "patch",
          "published_at": "2024-10-25T06:18:00Z"
        },
        {
          "tag": "v3.1.1",
          "kind": "patch",
          "published_at": "2024-10-20T11:00:28Z"
        },
        {
          "tag": "v.3.1.0",
          "kind": "other",
          "published_at": "2024-10-11T07:44:46Z"
        },
        {
          "tag": "v3.0.8",
          "kind": "patch",
          "published_at": "2024-09-15T05:22:02Z"
        },
        {
          "tag": "v3.0.7",
          "kind": "patch",
          "published_at": "2024-09-07T18:04:47Z"
        },
        {
          "tag": "v3.0.6",
          "kind": "patch",
          "published_at": "2024-08-26T08:05:27Z"
        },
        {
          "tag": "v.3.0.5",
          "kind": "other",
          "published_at": "2024-08-18T06:11:13Z"
        },
        {
          "tag": "v3.0.4",
          "kind": "patch",
          "published_at": "2024-08-12T12:38:17Z"
        },
        {
          "tag": "v3.0.3",
          "kind": "patch",
          "published_at": "2024-08-04T07:47:28Z"
        },
        {
          "tag": "v3.0.2",
          "kind": "patch",
          "published_at": "2024-07-29T05:42:41Z"
        },
        {
          "tag": "v.0.3.1",
          "kind": "other",
          "published_at": "2024-07-21T07:50:51Z"
        },
        {
          "tag": "v0.3.0",
          "kind": "minor",
          "published_at": "2024-07-15T10:22:43Z"
        },
        {
          "tag": "v0.2.8",
          "kind": "patch",
          "published_at": "2024-07-06T13:54:54Z"
        },
        {
          "tag": "v0.2.7",
          "kind": "patch",
          "published_at": "2024-06-23T09:53:26Z"
        },
        {
          "tag": "v.0.2.6",
          "kind": "other",
          "published_at": "2024-06-16T08:33:04Z"
        },
        {
          "tag": "v.0.2.5",
          "kind": "other",
          "published_at": "2024-06-09T06:25:06Z"
        },
        {
          "tag": "v0.2.4",
          "kind": "patch",
          "published_at": "2024-05-27T10:41:15Z"
        },
        {
          "tag": "v0.2.3",
          "kind": "patch",
          "published_at": "2024-05-20T06:44:41Z"
        },
        {
          "tag": "v.0.2.2",
          "kind": "other",
          "published_at": "2024-05-09T12:45:51Z"
        },
        {
          "tag": "v0.2.1",
          "kind": "patch",
          "published_at": "2024-05-05T07:31:40Z"
        },
        {
          "tag": "v0.2.0",
          "kind": "minor",
          "published_at": "2024-04-02T07:10:35Z"
        },
        {
          "tag": "v.0.1.6",
          "kind": "other",
          "published_at": "2024-03-24T07:40:51Z"
        },
        {
          "tag": "v0.1.5",
          "kind": "patch",
          "published_at": "2024-03-18T12:12:21Z"
        },
        {
          "tag": "v0.1.4",
          "kind": "patch",
          "published_at": "2024-02-25T09:14:12Z"
        },
        {
          "tag": "0.1.3",
          "kind": "patch",
          "published_at": "2024-01-07T14:08:56Z"
        },
        {
          "tag": "v0.1.2",
          "kind": "patch",
          "published_at": "2024-01-04T12:05:11Z"
        },
        {
          "tag": "v0.1.1",
          "kind": "patch",
          "published_at": "2023-11-25T15:11:58Z"
        },
        {
          "tag": "v0.1.0",
          "kind": "minor",
          "published_at": "2023-11-13T18:35:18Z"
        },
        {
          "tag": "v0.0.8",
          "kind": "patch",
          "published_at": "2023-11-07T15:19:37Z"
        },
        {
          "tag": "v0.0.7",
          "kind": "patch",
          "published_at": "2023-10-21T11:26:16Z"
        },
        {
          "tag": "v.0.0.6",
          "kind": "other",
          "published_at": "2023-10-03T14:21:15Z"
        },
        {
          "tag": "v0.0.5",
          "kind": "patch",
          "published_at": "2023-09-10T15:13:41Z"
        },
        {
          "tag": "v0.0.4",
          "kind": "patch",
          "published_at": "2023-08-14T06:34:22Z"
        },
        {
          "tag": "v0.0.3",
          "kind": "patch",
          "published_at": "2023-07-26T05:24:53Z"
        },
        {
          "tag": "v1.0.2",
          "kind": "patch",
          "published_at": "2023-07-15T07:09:28Z"
        },
        {
          "tag": "v1.0.1",
          "kind": "patch",
          "published_at": "2023-07-10T16:00:15Z"
        },
        {
          "tag": "v1.0.0",
          "kind": "major",
          "published_at": "2023-07-09T17:19:46Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "5d84d2f5553e70a2765a8ff3a0d2672d60437ce8",
          "body": "docs(skill): fix drift in .claude reference docs (retrievers, multi-agents, api)",
          "is_bot": false,
          "headline": "Merge pull request #1913 from assafelovic/docs/skill-reference-refresh",
          "author_name": "Assaf Elovic",
          "author_login": "assafelovic",
          "committed_at": "2026-07-14T13:13:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ec3cdb0e3e0dbc997ee160c5fa095db3ad788034",
          "body": "Audited the Claude skill references against current code and fixed verified\ndrift (skill itself + other references were accurate):\n\n- retrievers.md: list all 21 retrievers (was 13) incl. Brave/SearX/GroundRoute/\n  fastCRW/BoCha/Xquik/OpenAlex/GetXAPI; fix get_retrievers() signature to the\n  real (he\n[…]\nsts\n  (no top-level 'costs'); DELETE /files/{filename} (not /delete/); add GET /files/;\n  remove non-existent /getConfig & /setConfig endpoints\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(skill): fix drift in .claude reference docs",
          "author_name": "Assaf Elovic",
          "author_login": "assafelovic",
          "committed_at": "2026-07-14T13:13:13Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "48e5f7b160a934aa18e6dd2876461f388a6a26a2",
          "body": "…agents\n\nchore(multi_agents): nest AG2 variant under multi_agents/ag2",
          "is_bot": false,
          "headline": "Merge pull request #1912 from assafelovic/chore/nest-ag2-under-multi-…",
          "author_name": "Assaf Elovic",
          "author_login": "assafelovic",
          "committed_at": "2026-07-14T13:02:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8d57e6908a0cb3490796a91ee8e6b9f0be39aed0",
          "body": "Move the standalone multi_agents_ag2/ directory to multi_agents/ag2/ so the\nAG2 (AutoGen) variant lives under the multi_agents package instead of a\nseparate top-level directory. The AG2 code already depended on multi_agents\n(reusing its agents + utils), so this reflects the real relationship.\n\nUpdat\n[…]\nplus doc/README paths.\nHistory preserved via git mv; primary multi_agents package and the runner\nfallback both verified importable, tests pass.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(multi_agents): nest AG2 variant under multi_agents/ag2",
          "author_name": "Assaf Elovic",
          "author_login": "assafelovic",
          "committed_at": "2026-07-14T13:00:53Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "ab79fcd6ad5004cd808f3833843e1b1cc2c10651",
          "body": "…ider\n\nfeat: add Nebius Token Factory as LLM and embedding provider",
          "is_bot": false,
          "headline": "Merge pull request #1891 from teionarr/feat/nebius-token-factory-prov…",
          "author_name": "Assaf Elovic",
          "author_login": "assafelovic",
          "committed_at": "2026-07-14T12:44:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c68c773326c0883a8a7c5e49f2a997b4e9a00b9c",
          "body": "Reconcile master→main: GetXAPI retriever, Claude 4.x temp fix, MiniMax M3, curate_sources fixes",
          "is_bot": false,
          "headline": "Merge pull request #1911 from assafelovic/reconcile-master",
          "author_name": "Assaf Elovic",
          "author_login": "assafelovic",
          "committed_at": "2026-07-14T12:42:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b1142323feaf880042eec3caf1b945315f583d80",
          "body": "Core/misc hardening: 11 fixes (costs/query/llm/agent/mcp/config) (supersedes #1822…#1902)",
          "is_bot": false,
          "headline": "Merge pull request #1910 from assafelovic/batch-core-misc",
          "author_name": "Assaf Elovic",
          "author_login": "assafelovic",
          "committed_at": "2026-07-14T12:42:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "130d255a6733aeb0ece1a0c7aa87492a04940d82",
          "body": "Multi-agent robustness: bound revision loops + exact sentinels (supersedes #1883/#1885/#1886)",
          "is_bot": false,
          "headline": "Merge pull request #1909 from assafelovic/batch-multiagents-bounds",
          "author_name": "Assaf Elovic",
          "author_login": "assafelovic",
          "committed_at": "2026-07-14T12:41:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bb4c4972e8b4d2ee98a14c0866fcd827adf9add2",
          "body": "Scraper robustness: 6 fixes (title/PDF-detection/temp-file/dimensions) (supersedes #1824…#1842)",
          "is_bot": false,
          "headline": "Merge pull request #1908 from assafelovic/batch-scraper-robustness",
          "author_name": "Assaf Elovic",
          "author_login": "assafelovic",
          "committed_at": "2026-07-14T12:41:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4370ed948baaf5edbfeb0b739371f55e79f84663",
          "body": "Retriever hardening: 20 guard fixes against malformed results (supersedes #1837…#1890)",
          "is_bot": false,
          "headline": "Merge pull request #1907 from assafelovic/batch-retriever-guards",
          "author_name": "Assaf Elovic",
          "author_login": "assafelovic",
          "committed_at": "2026-07-14T12:41:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "747d898e1cf1453470698b5f22511734ae400898",
          "body": "Resolve post-merge conflicts: 4 retriever/context fixes (supersedes #1895-1898)",
          "is_bot": false,
          "headline": "Merge pull request #1906 from assafelovic/pr-conflict-fixes",
          "author_name": "Assaf Elovic",
          "author_login": "assafelovic",
          "committed_at": "2026-07-14T12:41:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bb3ec9ebfdf45af6841c5bcee549f248800eb1e0",
          "body": "(cherry picked from commit a8131af12dc83462ddca3418712b887b47363070)",
          "is_bot": false,
          "headline": "Add GetXAPI retriever for X/Twitter search",
          "author_name": "Bozad",
          "author_login": "bozad-getxapi",
          "committed_at": "2026-07-14T12:06:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a99431cae6ee4305f17c8cd0075856038cd5cdd2",
          "body": "Anthropic deprecates the temperature parameter on Claude Sonnet 4.5+,\nOpus 4.5+, and Haiku 4.5+. Passing temperature to these models now\nreturns a 400 error: \"'temperature' is deprecated for this model\".\n\nThis breaks the report-writer step in gpt-researcher when configured\nwith anthropic:claude-sonn\n[…]\nthat already handles GPT-5 and\nthe o1/o3/o4 reasoning models.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>\n(cherry picked from commit e199a5b03ec7998960df727f3882ccc6353f6ace)",
          "is_bot": false,
          "headline": "Add Claude 4.x family to NO_SUPPORT_TEMPERATURE_MODELS",
          "author_name": "gk_jarvis",
          "author_login": "aob-bot",
          "committed_at": "2026-07-14T12:05:37Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "17fe3f4e02e08f7bc679be78f8bbdba9d0d797c8",
          "body": "- Add MiniMax-M3 to model list and set as default\n- Keep MiniMax-M2.7 and MiniMax-M2.7-highspeed\n- Remove older models (M2.5/M2.5-highspeed)\n- Update related documentation\n\n(cherry picked from commit 18893c0181f200de3e08c7ba8b770658c129ac2a)",
          "is_bot": false,
          "headline": "feat: upgrade MiniMax default model to M3",
          "author_name": "octo-patch",
          "author_login": null,
          "committed_at": "2026-07-14T12:04:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "365bc359dbbf4100f9bb1bc6528eb6b6be16bce0",
          "body": "…rcher.context\n\ncurate_sources() returns List[dict] (each dict contains Title, Content, Source\nkeys), but researcher.context is expected to be a str throughout the codebase.\nAssigning the List[dict] directly causes any downstream str operation to crash:\n\n  - len(researcher.context) returns the list \n[…]\nntent / Source' block joined by double newlines.\nNon-dict items fall back to str(). Non-list returns are passed through unchanged.\n\n(cherry picked from commit f71b95ba8aebca9343ac50985a2e9c0548d38cfb)",
          "is_bot": false,
          "headline": "fix: normalize curate_sources() return type before assigning to resea…",
          "author_name": "Jason Broderick",
          "author_login": "JasonBroderick",
          "committed_at": "2026-07-14T12:04:47Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b6a70d98b10474a1c89838163ef5a5f864abc4f3",
          "body": "When CURATE_SOURCES=True, ResearchConductor.conduct_research() returns\nresult['context'] as a List[dict] (each dict has Title/Content/Source keys)\nrather than a plain str. Two separate crash paths:\n\n1. all_context.append(result['context']) nests the list as a single item,\n   so context_with_citation\n[…]\nmade type-safe so any residual\n   dict items are extracted via their 'Content' key rather than crashing.\n\nFixes #1279, fixes #1332\n\n(cherry picked from commit 216899eebf0cdc78390fd1886d1bb0b1113ce81f)",
          "is_bot": false,
          "headline": "fix: handle List[dict] context from CURATE_SOURCES=True in deep research",
          "author_name": "Jason Broderick",
          "author_login": "JasonBroderick",
          "committed_at": "2026-07-14T12:04:47Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a0dacc2326d61db2c257547764e9cd61df835640",
          "body": "…yntax\n\nThe generate_search_queries_prompt() function said 'Write N google search\nqueries'. Instruction-following LLMs (e.g. GPT-5.4) interpret this literally\nand inject Google-specific operator syntax such as site:arxiv.org,\nfiletype:pdf, inurl:, intitle:, OR, AND into the generated queries.\n\nMost \n[…]\n operator syntax and explain why\n- Keep the fix backend-neutral so it is correct regardless of which\n  retriever(s) are configured\n\n(cherry picked from commit c15a8636e142e8a0b93f6896aa10e524d643d1bc)",
          "is_bot": false,
          "headline": "fix: make search query prompt retriever-agnostic, prohibit operator s…",
          "author_name": "Jason Broderick",
          "author_login": "JasonBroderick",
          "committed_at": "2026-07-14T12:04:47Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "03964d3ae20859bd0f9c5f56ab14ad0529a0befc",
          "body": "The loader_dict in _load_document keys formats in lower-case (pdf, docx,\nxlsx, ...), but _get_extension returned the raw suffix. A URL ending in\nan upper-case extension (e.g. report.PDF, doc.DOCX — common on direct\nlinks and signed CDN URLs) produced an upper-case format string that\nmissed every loader_dict key, so the document was silently skipped.\n\nLower-case the extracted extension so the loader lookup matches.\n\n(cherry picked from commit c67a179c8bbb1b0e8a910b2816b5f82cfd38d013)",
          "is_bot": false,
          "headline": "fix(document): normalise URL extension case in OnlineDocumentLoader",
          "author_name": "Bartok9",
          "author_login": "Bartok9",
          "committed_at": "2026-07-14T09:27:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9094ddf5addb0717b365e57181915ac25542ee0c",
          "body": "PyMuPDFScraper downloads a remote PDF to NamedTemporaryFile(delete=False)\nand only called os.remove() on the success path. When PyMuPDFLoader.load()\nraises on a malformed/partial PDF, the broad except swallowed the error and\nleft the temp .pdf on disk every time. Wrap the load in try/finally so the\ntemp file is always cleaned up.\n\n(cherry picked from commit 124ec5c30ca5a2de14f5af2555e66550ad040de5)",
          "is_bot": false,
          "headline": "fix(scraper): remove PyMuPDF temp file even when PDF loading fails",
          "author_name": "Bartok9",
          "author_login": "Bartok9",
          "committed_at": "2026-07-14T09:27:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9a5c8a4d0ec1fd7886adc6c6a6803c725577e09f",
          "body": "…rScraper\n\nThe Selenium BrowserScraper routed pages to the PDF path with\nself.url.endswith('.pdf'), which missed signed CDN/S3 links that carry a\nquery string (doc.pdf?sig=...) and was case-sensitive (.PDF). Such URLs\nfell through to HTML scraping and returned garbage. Extracted an\n_is_pdf_url helper that inspects only the URL path, lowercased.\n\n(cherry picked from commit 7e6dded91e37b4dfb9acd8d66c9b83fc5d51d997)",
          "is_bot": false,
          "headline": "fix(scraper): detect PDF links with query strings/uppercase in Browse…",
          "author_name": "Bartok9",
          "author_login": "Bartok9",
          "committed_at": "2026-07-14T09:27:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "094ca882f5075ce8948cbf6039cfb1a470df5413",
          "body": "…sion\n\nInspect only the URL path component (via urlparse) and match\ncase-insensitively so signed CDN/S3 links like '.../doc.pdf?sig=...'\nand '.PDF' route to PyMuPDFScraper instead of the HTML scraper.\n\nAdds tests/test_scraper_get_scraper.py.\n\n(cherry picked from commit b2cfa28967ce18d0d0630922c38a469ccd1ac3c3)",
          "is_bot": false,
          "headline": "fix(scraper): detect PDF links with query strings and uppercase exten…",
          "author_name": "Bartok9",
          "author_login": "Bartok9",
          "committed_at": "2026-07-14T09:27:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9db9902c776eadd8689af3e494f39fcf991bd1a3",
          "body": "…nsions\n\nparse_dimension printed an error line to stdout for every non-numeric width/height attribute. Values like '100%', 'auto', and '50em' are valid, common HTML, so normal scraping spammed application stdout. Log at debug level instead.\n\n(cherry picked from commit d5c0118773b8eade703428a11e63638007e005d4)",
          "is_bot": false,
          "headline": "fix(scraper): debug-log instead of printing on non-numeric image dime…",
          "author_name": "Bartok9",
          "author_login": "Bartok9",
          "committed_at": "2026-07-14T09:27:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b5f445ca52e3904462542f23b147ef691b6bec42",
          "body": "…tags\n\nAn empty <title></title> made soup.title.string return None, violating the -> str contract and propagating None into image alt-text and document metadata across every scraper backend. Use get_text(strip=True) so the result is always a (stripped) string.\n\n(cherry picked from commit a8972cc87e73fd962e8c380adebf790bdc759024)",
          "is_bot": false,
          "headline": "fix(scraper): return empty string from extract_title for empty title …",
          "author_name": "Bartok9",
          "author_login": "Bartok9",
          "committed_at": "2026-07-14T09:27:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "032683fbd071a992034624b0cf3e7da85e5f647c",
          "body": "…dels\n\ntiktoken.encoding_for_model only knows OpenAI model names and raises KeyError for Ollama/Cohere/Nomic/HuggingFace embedding models, aborting cost tracking mid-research. Fall back to the default o200k_base encoding for a best-effort estimate.\n\n(cherry picked from commit 1f327f3167f7c330156c887d3aa027c5f7f12a29)",
          "is_bot": false,
          "headline": "fix(costs): fall back to default encoding for non-OpenAI embedding mo…",
          "author_name": "Bartok9",
          "author_login": "Bartok9",
          "committed_at": "2026-07-14T09:25:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bcc1eac0ca56eb2509f2b6384b6d7117eb1fce87",
          "body": "json_repair.loads can yield a dict, bare string, or None when the LLM does not emit a clean JSON array; callers in researcher.plan_research treat the result as list[str] and crash on .append/iteration. Normalize defensively and fall back to the original query.\n\n(cherry picked from commit b3c1313fb958d60dc4550b375c894f63d36c5910)",
          "is_bot": false,
          "headline": "fix(query): always return list[str] from generate_sub_queries",
          "author_name": "Bartok9",
          "author_login": "Bartok9",
          "committed_at": "2026-07-14T09:25:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "06d2d27595922c345dd8bd1d8b4ad9dc0c07d8ca",
          "body": "The error log used a plain string ('...\\n {e}') with no f-prefix, so it recorded the literal text '{e}' instead of the exception, hiding the real cause of subtopic-parsing failures. Use lazy %-formatting with exc_info and drop the redundant print.\n\n(cherry picked from commit 878243e08e2fe676a64803107b1d4fe419734667)",
          "is_bot": false,
          "headline": "fix(llm): log the real exception in construct_subtopics error handler",
          "author_name": "Bartok9",
          "author_login": "Bartok9",
          "committed_at": "2026-07-14T09:25:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5cd8bec3fad5389e867995ef4387fb5d15fc78cb",
          "body": "quick_search previously only queried self.retrievers[0], ignoring any\nadditional retrievers configured via RETRIEVER (e.g. \"tavily,duckduckgo\").\nThis adds an opt-in all_retrievers flag that queries every configured\nretriever concurrently and merges the results, de-duplicated by URL\n(handling both 'u\n[…]\nl' and 'href' keys). Failing retrievers are skipped so\none bad provider does not abort the search. Default behaviour is unchanged.\n\n(cherry picked from commit 443d7c0835d7828e018500483541d3ad2a550f50)",
          "is_bot": false,
          "headline": "feat(agent): add all_retrievers option to quick_search",
          "author_name": "Bartok9",
          "author_login": "Bartok9",
          "committed_at": "2026-07-14T09:25:31Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "0a1235a3d88fbe1b5e70ee24572193b2e230cfd9",
          "body": "Search retrievers return records keyed by 'href'/'body', but the\naggregated quick_search summary read 'url'/'content', so the\nsummarization prompt received empty source data ('[1] :  ()'). Read\n'href'/'body' with fallback to 'url'/'content' for pre-normalized records.\n\nAdds tests/test_quick_search_summary_context.py.\n\n(cherry picked from commit 3ad9e6d8766082f4af2930797dc290b8700e13fa)",
          "is_bot": false,
          "headline": "fix(agent): use real retriever keys in quick_search summary context",
          "author_name": "Bartok9",
          "author_login": "Bartok9",
          "committed_at": "2026-07-14T09:25:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "20a0066ec2cfabc16c963038a4f10f865ee8b331",
          "body": "extract_json_with_regex used a non-greedy '{.*?}' pattern, which stopped\nat the first closing brace. Any agent JSON with more than one key, or a\n'}' inside a string value (e.g. an agent_role_prompt mentioning\n'{markets}'), was truncated into an invalid fragment that json.loads\ncould not parse, defeating this fallback recovery path. Use a greedy\n'{.*}' so the match spans to the last '}' and captures the full object.\n\n(cherry picked from commit 82aa0c88ee74c9407b6f0697e72749e8f899bd13)",
          "is_bot": false,
          "headline": "fix(agent): capture whole JSON object in extract_json_with_regex",
          "author_name": "Bartok9",
          "author_login": "Bartok9",
          "committed_at": "2026-07-14T09:25:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4f18febecdd61bfb4c2819521eb215d77e848ff5",
          "body": "Closes #1718.\n\n(cherry picked from commit 73964b1cd58c824b0bcb06540f9c3e4b2d17e39e)",
          "is_bot": false,
          "headline": "fix(export): avoid outputs/.pdf when export filename is empty",
          "author_name": "Bartok9",
          "author_login": "Bartok9",
          "committed_at": "2026-07-14T09:25:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "da6ecbb7ca0c052a6dc1c463d59a6123887888fe",
          "body": "Closes #1899.\n\nNone-sentinel coercion for Optional[str] was unreachable because the\nstr converter never raises and ran before the NoneType branch.\n\n(cherry picked from commit 02b8aebe33f850c5e4771142b69fc007e81646f8)",
          "is_bot": false,
          "headline": "fix(config): coerce none/null empty for Optional env fields",
          "author_name": "Bartok9",
          "author_login": "Bartok9",
          "committed_at": "2026-07-14T09:25:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9038ffa3fbd3902dc3a1c91340f4b6a3eedf1417",
          "body": "The guard in convert_configs_to_langchain_format checked\nserver_config['connection_type'], which is never set (only 'transport'\nis), so connection_headers were silently dropped and auth-protected\nHTTP MCP servers rejected the connection. Check 'transport' instead.\n\nCloses #1854.\n\n(cherry picked from commit 99bf7c49ae75961e3a68957869f4e4623d4e4180)",
          "is_bot": false,
          "headline": "fix(mcp): forward connection_headers for HTTP/websocket transports",
          "author_name": "Bartok9",
          "author_login": "Bartok9",
          "committed_at": "2026-07-14T09:25:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2f31a26739b44931e75b6cb477c1b0c16b28edef",
          "body": "add_references iterated visited_urls directly, but that is a set whose\niteration order varies run-to-run and across processes (PYTHONHASHSEED).\nThe final report's References section was therefore non-reproducible for\nidentical inputs. Sort the URLs before rendering so the same research\nyields the same reference list.\n\n(cherry picked from commit 521d98b086b822e4fa215c6323541be08c49bd84)",
          "is_bot": false,
          "headline": "fix(report): emit references in deterministic (sorted) order",
          "author_name": "Bartok9",
          "author_login": "Bartok9",
          "committed_at": "2026-07-14T09:25:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e331e066ed2b941d928cc7e68ea6854c27b0cf10",
          "body": "Closes #1579.\n\n(cherry picked from commit f96b6ada23d05c984e6abebc22182bd33fa4348d)",
          "is_bot": false,
          "headline": "fix(deep-research): stop descent when a level yields zero results",
          "author_name": "Bartok9",
          "author_login": "Bartok9",
          "committed_at": "2026-07-14T09:25:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3dcb8392cefce7d613d4c3cdd0ae3712abe48d34",
          "body": "Add fact_check_revision_count and max_fact_check_revisions (default 3)\nso fact_checker→writer cannot stack overflow via recursion_limit.\n\n(cherry picked from commit 69381ff233acfd6989bde9a7a2adc91526e28502)",
          "is_bot": false,
          "headline": "fix(multi_agents): bound fact-checker writer revision loop",
          "author_name": "Bartok9",
          "author_login": "Bartok9",
          "committed_at": "2026-07-14T09:24:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5b59b615ac099fe1ad3f9cdcaedaa2b2a9d45737",
          "body": "Add draft_revision_count + max_draft_revisions (default 3) so the\neditor loop force-accepts gracefully instead of GraphRecursionError.\nPairs with the exact None-accept fix for #1881.\n\n(cherry picked from commit b2f801a198036ac7385ba9f13d9b1db134c515bc)",
          "is_bot": false,
          "headline": "fix(multi_agents): bound reviewer/reviser draft revision loop",
          "author_name": "Bartok9",
          "author_login": "Bartok9",
          "committed_at": "2026-07-14T09:24:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "72fe041b53436d5f110348c07f4093a5f73a9db2",
          "body": "Substring \"None\" accepted critical reviews as approval and published\nunrevised drafts. Match only the exact accept token (optional quotes).\nAlso fix reviser prompt string concatenation typo.\n\nCloses #1881\n\n(cherry picked from commit 5c033b44c393b6dfd0d6371709901b9189e17e5e)",
          "is_bot": false,
          "headline": "fix(multi_agents): exact None sentinel for reviewer and fact-checker",
          "author_name": "Bartok9",
          "author_login": "Bartok9",
          "committed_at": "2026-07-14T09:24:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e4ecf0477114e30007bcbd8280632006b00fbe22",
          "body": "Interpolating the raw query broke searches with reserved characters\n('&' injected spurious params, '#' truncated the query). Build the\nquery string with urllib.parse.urlencode.\n\nAdds tests/test_google_search_url_encoding.py.\n\n(cherry picked from commit b59352c3c75e29e2be534c09b9647cf2b3795c6b)",
          "is_bot": false,
          "headline": "fix(google): URL-encode Custom Search query parameters",
          "author_name": "Bartok9",
          "author_login": "Bartok9",
          "committed_at": "2026-07-14T09:21:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "35af8cddb6c47f4faf150755e2d0ee4afa51f3fc",
          "body": "Closes #1875.\n\n(cherry picked from commit 7f16851b1dabfb5453986a42f73856ed9198220a)",
          "is_bot": false,
          "headline": "fix(retriever): skip redundant Tavily MCP when direct Tavily is active",
          "author_name": "Bartok9",
          "author_login": "Bartok9",
          "committed_at": "2026-07-14T09:21:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2544c77120785187fd576df544daea4e342c5297",
          "body": "Comma-separated retriever lists from request headers (e.g. 'tavily, exa')\nkept surrounding whitespace, so every name after the first failed the\nexact match in get_retriever and silently fell back to the default\nretriever. Move the strip (and blank-drop) so it applies to the header\npath too, not just the config path.\n\nAdds tests/test_get_retrievers_whitespace.py.\n\n(cherry picked from commit 95530a2699086f2f2cd0bfae5759a33a181f4ba2)",
          "is_bot": false,
          "headline": "fix(retriever): strip whitespace from header-supplied retriever lists",
          "author_name": "Bartok9",
          "author_login": "Bartok9",
          "committed_at": "2026-07-14T09:21:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "078815f2a1b4a318ba9c6896e77172070c2770b3",
          "body": "VALID_SORT_CRITERIA holds the API's exact values (citationCount,\npublicationDate) and __init__ asserts membership against them, but then\nstored sort.lower(), turning citationCount into citationcount before it\nwas passed as the 'sort' query param. The Semantic Scholar API expects\nthe camelCase form, so non-default sorts were silently broken. Keep the\nalready-validated value verbatim.\n\n(cherry picked from commit 9a2cdc51aa2a3a0ee2de1c478f6d661bf3b8c575)",
          "is_bot": false,
          "headline": "fix(retriever): preserve camelCase sort criterion for Semantic Scholar",
          "author_name": "Bartok9",
          "author_login": "Bartok9",
          "committed_at": "2026-07-14T09:21:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b9f1192e31e42413f1dacbb9c7bbd9203155067c",
          "body": "SearchAPIRetriever sliced page.get('raw_content', '')[:MAX], but the\ndefault only applies when the key is absent. The scraper explicitly sets\nraw_content=None for pages that failed to scrape, and slicing None raises\nTypeError, crashing context retrieval. Coerce a missing/None raw_content\nto '' before truncating (matching the defensive str() coercion already\nused in compression.py).\n\n(cherry picked from commit 2ffe6df27b4a76d51c0eae7b64ca4bdf584dc374)",
          "is_bot": false,
          "headline": "fix(context): guard SearchAPIRetriever against None raw_content",
          "author_name": "Bartok9",
          "author_login": "Bartok9",
          "committed_at": "2026-07-14T09:21:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "68a9687e6b9e4daac517a1d5e1bb09b173bdc4ab",
          "body": "Validate JSON envelope/list items and harden inverted-index abstract\nreconstruction against non-dict / bad index positions.\n\n(cherry picked from commit a1984fc7ab4038d760b53da7b37b35b6d1d7138b)",
          "is_bot": false,
          "headline": "fix(retriever): guard OpenAlex against malformed result payloads",
          "author_name": "Bartok9",
          "author_login": "Bartok9",
          "committed_at": "2026-07-14T09:21:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8ced8e7789a868e9618ba1eabfce54c050d0213d",
          "body": "Skip non-dict/missing-url rows; accept href/link/snippet aliases and\ntolerate list-shaped JSON envelopes.\n\n(cherry picked from commit ce1d251565a4cb842ad5c3838cee96a1626860a4)",
          "is_bot": false,
          "headline": "fix(retriever): guard GroundRoute against malformed result fields",
          "author_name": "Bartok9",
          "author_login": "Bartok9",
          "committed_at": "2026-07-14T09:21:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8927ccf4c0f6d01eaf2ef2b1223ab8576b337191",
          "body": "Skip non-dict entries and results without a URL; tolerate href/snippet\naliases and non-dict JSON envelopes.\n\n(cherry picked from commit 859d798ef5991f4d37688186e30e830b61a2206c)",
          "is_bot": false,
          "headline": "fix(retriever): guard Searx against malformed/missing result fields",
          "author_name": "Bartok9",
          "author_login": "Bartok9",
          "committed_at": "2026-07-14T09:21:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bece998ec58e74fd3341a0723ea18a1a9fb99fea",
          "body": "ddgs may emit link/url and snippet/description; map them to the shared\nretriever schema and skip entries without a URL.\n\n(cherry picked from commit f9cabc9017a05f44a9f51e630c72c7e679779c3b)",
          "is_bot": false,
          "headline": "fix(retriever): normalize DuckDuckGo results to href/body contract",
          "author_name": "Bartok9",
          "author_login": "Bartok9",
          "committed_at": "2026-07-14T09:21:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b55be535e433e6ee67210a502bd04f4bf5d4d259",
          "body": "…jects\n\nsearch / find_similar / get_contents assumed every Exa result always has\n.url / .text / .id. A single incomplete object aborted the list\ncomprehension. Skip rows without a usable href/id and fall back to\nsummary or empty text body for partial hits.\n\n(cherry picked from commit a6419dc7667929bb530a64827815d8f2588353a4)",
          "is_bot": false,
          "headline": "fix(retriever): guard ExaSearch against null url/id/text on result ob…",
          "author_name": "Bartok9",
          "author_login": "Bartok9",
          "committed_at": "2026-07-14T09:21:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1f4d302d4d342c52d1367763e7a625a2850ea277",
          "body": "Prefer .get for title/snippet/link so a partial CSE item cannot raise and\nis not silently discarded beyond missing-link cases. Non-dict JSON and\nnon-dict row items return/ skip cleanly to an empty or partial list.\n\n(cherry picked from commit 48cbf35a7dd1c3964b3a576f3ec30c1c381f4543)",
          "is_bot": false,
          "headline": "fix(retriever): guard GoogleSearch against malformed CSE content items",
          "author_name": "Bartok9",
          "author_login": "Bartok9",
          "committed_at": "2026-07-14T09:21:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "70f1c1fa432c7013ff6a5cca360913833e6afaa5",
          "body": "CustomRetriever previously returned None on HTTP failure and passed\nthrough null/non-list JSON payloads. Downstream iteration then raised\nTypeError (or treated the failure as \"no retriever\"), losing the research\nrun. Always return a list, reject non-list JSON as empty, and set a\ntimeout so a hung endpoint cannot block the agent.\n\n(cherry picked from commit 83909e4c63ba39c41dc4d0a386e66edbdc6e5631)",
          "is_bot": false,
          "headline": "fix(retriever): always return a list from CustomRetriever.search",
          "author_name": "Bartok9",
          "author_login": "Bartok9",
          "committed_at": "2026-07-14T09:21:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c84c633830218ccb4983dd5d650b4e5f82eda256",
          "body": "…ields\n\nA single Tavily hit missing \"url\" or \"content\" previously raised KeyError\ninside the list comprehension and dropped all results for the page. Skip\nnon-dict / empty-url hits and fall back to snippet or empty body instead.\n\n(cherry picked from commit 5e27a4530986e1008726b38f02261f5dee895815)",
          "is_bot": false,
          "headline": "fix(retriever): guard TavilySearch against malformed/missing result f…",
          "author_name": "Bartok9",
          "author_login": "Bartok9",
          "committed_at": "2026-07-14T09:21:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5b24d3fa9cc8425124bd827d40b2f1c8703b8324",
          "body": "…all results\n\nCRWRetriever.search() indexed obj[\"url\"] for every source in the fastCRW\nresponse. A single source without a \"url\" key raised a KeyError that the broad\nexcept in search() swallowed, discarding every other (valid) source and\nreturning an empty list. Skip url-less sources in the comprehe\n[…]\nresults.\n\nMirrors the defensive normalization already applied to the Serper, Bing,\nSearchApi, BoCha, XQuik and SerpApi retrievers.\n\n(cherry picked from commit a5150968b47d0666a4a8065f9017705939bced34)",
          "is_bot": false,
          "headline": "fix(retriever): skip fastCRW sources missing url instead of dropping …",
          "author_name": "Bartok9",
          "author_login": "Bartok9",
          "committed_at": "2026-07-14T09:21:51Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d82b1ed4e358ac789efb828c7dd1ba80d0adf874",
          "body": "…fields\n\nSerpApiSearch.search() indexed organic_results and each result's link/title/\nsnippet directly. A SerpApi response with no organic_results (error payload or\na query that matched nothing) raised KeyError, and a single result missing any\nof those keys aborted the whole search() call. Use .get(\n[…]\nh href=None.\n\nThis mirrors the defensive normalization already applied to the Serper, Bing,\nSearchApi, BoCha and XQuik retrievers.\n\n(cherry picked from commit 49d025e33a32c8025dbf841ec3634e7d4c9fc96e)",
          "is_bot": false,
          "headline": "fix(retriever): guard SerpApiSearch against malformed/missing result …",
          "author_name": "Bartok9",
          "author_login": "Bartok9",
          "committed_at": "2026-07-14T09:21:51Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "17923cf1572740c70dba2df49a38eee0fefd13eb",
          "body": "Bing normalization looped over results outside the try/except and indexed\nresult[\"url\"]/[\"name\"]/[\"snippet\"] directly, so a single result missing any\nkey raised an unhandled KeyError that aborted the entire search(). A response\nwithout a webPages block also raised KeyError instead of returning []. Use\n.get() with defaults and remove the dead 'search_results is None' branch.\n\n(cherry picked from commit bf8defff4b049f7def0581b9e87d32cddd989bd3)",
          "is_bot": false,
          "headline": "fix(retriever): guard BingSearch against malformed/missing result fields",
          "author_name": "Bartok9",
          "author_login": "Bartok9",
          "committed_at": "2026-07-14T09:21:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ebc17919bf7d591695f5862076925108940ffc6f",
          "body": "An explicit JSON null in the Xquik API response (\"tweets\": null, or a\ntweet with \"author\": null / \"text\": null) slipped past dict.get()'s\ndefault, since get() only substitutes when the key is absent. The\nresulting None crashed author.get()/text[:120]; the broad except in\nsearch() then swallowed the error and silently dropped every result.\nUse 'or' fallbacks, matching the sibling GetXAPI retriever.\n\n(cherry picked from commit b74b07db0d331491161e30ae28c11022311c610e)",
          "is_bot": false,
          "headline": "fix(retriever): guard XquikSearch against null author/tweets/text fields",
          "author_name": "Bartok9",
          "author_login": "Bartok9",
          "committed_at": "2026-07-14T09:21:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "69e46f45d67266678490058fa804cef5b39fa36c",
          "body": "BoChaSearch indexed json_response['data']['webPages']['value'] directly with\nno error handling, so a non-200 response, a non-JSON body, or a payload\nmissing those keys crashed the whole research run with an unhandled\nKeyError/JSONDecodeError. Every sibling retriever degrades to [] on failure.\nAdd raise_for_status + timeout, catch request/JSON errors, walk the response\ndefensively, and use .get() per result.\n\n(cherry picked from commit 448fccedf9501de6254103cb8f53432b8259ed68)",
          "is_bot": false,
          "headline": "fix(retriever): handle errors and missing keys in BoChaSearch",
          "author_name": "Bartok9",
          "author_login": "Bartok9",
          "committed_at": "2026-07-14T09:21:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cbcb9901c54a2cda0971e3adc4eb7a463407982b",
          "body": "…earch.search\n\nPubMedCentralSearch.search returned None when no article IDs were found\n(search miss or a transient esearch failure). The result is consumed as\na list — actions.query_processing.get_search_results is typed\n-> List[Dict], and skills.researcher does len(search_results) — so a\nzero-hit P\n[…]\n has\nno len() instead of degrading to an empty result set like the other\nretrievers. Return [] and tighten the annotation to List.\n\n(cherry picked from commit 11473f23f2e5f583f5c5b0dbfc3f8730286fc183)",
          "is_bot": false,
          "headline": "fix(retriever): return empty list instead of None from PubMedCentralS…",
          "author_name": "Bartok9",
          "author_login": "Bartok9",
          "committed_at": "2026-07-14T09:21:51Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8a9a4e4cd567b594ebd351c418a6a576a1d5f17a",
          "body": "…earch\n\nSerperSearch.search documents a list return type, and every sibling\nretriever (serpapi/brave/bing/searx) returns [] on error. But three\nerror paths (resp is None, JSON parse failure, JSON null) returned a\nbare None. Callers treat the result as a list — get_search_results is\nannotated -> List\n[…]\nof type 'NoneType' has no len() instead of degrading\nto an empty result set.\n\nReturn [] on all three paths to honour the contract.\n\n(cherry picked from commit ffa6d5f3e1f8cc0ef3d517468ff7168ac7f57545)",
          "is_bot": false,
          "headline": "fix(retriever): return empty list instead of None from SerperSearch.s…",
          "author_name": "Bartok9",
          "author_login": "Bartok9",
          "committed_at": "2026-07-14T09:21:51Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8c4595f5db67b9baa0e0575a7e26a58807b643ca",
          "body": "Closes #1893.\n\nFast-path Document metadata was the raw scraper dict (url=…), but\npretty_print_docs reads metadata.source, so small document sets rendered\nSource: None and reports hallucinated placeholder citations.\n\n(cherry picked from commit c0b3b04e17c220f0e485075f5b19e6bfef1468cc)",
          "is_bot": false,
          "headline": "fix(context): map url to source on compressor fast path",
          "author_name": "Bartok9",
          "author_login": "Bartok9",
          "committed_at": "2026-07-14T08:56:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "17663ab6476b9daa27b2a92f5f2ce8729047aa78",
          "body": "Closes #1894.\n\nlangchain_community ArxivRetriever still calls removed Search.results()\non arxiv>=2.2, causing 100% scrape failure while abstracts still appear\nfrom the retriever. Call arxiv.Client().results() directly.\n\n(cherry picked from commit 269d1e940a82497ac2e0bd530ed174a561b3de1a)",
          "is_bot": false,
          "headline": "fix(scraper): fetch arXiv via Client API not Search.results",
          "author_name": "Bartok9",
          "author_login": "Bartok9",
          "committed_at": "2026-07-14T08:56:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "eb23f296fa6899ef11b8d784977e8b803fd38896",
          "body": "Treat non-dict/null openAccessPdf and non-list data as empty\nresults instead of AttributeError during result normalization.\n\n(cherry picked from commit ec06cf02e2897ca0ddd7f892cd5f120d5365aa7d)",
          "is_bot": false,
          "headline": "fix(retriever): guard Semantic Scholar openAccessPdf shapes",
          "author_name": "Bartok9",
          "author_login": "Bartok9",
          "committed_at": "2026-07-14T08:56:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a03261506fb5962bddc944287ee97b91d4d93e07",
          "body": "Skip non-dict / link-less organic hits instead of KeyError on\ntitle/link/snippet during result normalization.\n\n(cherry picked from commit 7736cd0e74f3f02442ee8a88456310a3ef1ce470)",
          "is_bot": false,
          "headline": "fix(retriever): guard Serper organic items against missing keys",
          "author_name": "Bartok9",
          "author_login": "Bartok9",
          "committed_at": "2026-07-14T08:56:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c8604e1f158cf1c0a0b32ff9bd79b9f59667342b",
          "body": "Removed 'STORM-style' from the description of the research pipeline.",
          "is_bot": false,
          "headline": "Update README to remove 'STORM-style' reference",
          "author_name": "Assaf Elovic",
          "author_login": "assafelovic",
          "committed_at": "2026-07-14T08:46:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1a0a372829048090d153af99ccca2aca326be2ee",
          "body": "…angChain deep agent (#1857)\n\nDeep Agents example with benchmark suite. Builds on core fixes from #1861.",
          "is_bot": false,
          "headline": "Add Deep Agents example: GPT Researcher as the research engine in a L…",
          "author_name": "Assaf Elovic",
          "author_login": "assafelovic",
          "committed_at": "2026-07-13T07:56:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "47bd8ab5fcbb295b07f16c1f5c1088c932430f3e",
          "body": "…d research pipeline robustness (#1861)\n\nCore pipeline fixes found during DeepResearch Bench benchmarking. Merges before #1857.",
          "is_bot": false,
          "headline": "Fix silently dropped token limits, real usage-based cost tracking, an…",
          "author_name": "Assaf Elovic",
          "author_login": "assafelovic",
          "committed_at": "2026-07-13T07:56:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bd54bf9fd18f233ed1abebc3fc678f1d02acbf20",
          "body": "Nebius Token Factory exposes an OpenAI-compatible API for 60+ open models\n(DeepSeek, Qwen, Llama, Kimi, ...) and also hosts text-embedding models, so\nGPTR can run both its LLM and its embedding stack on a single provider.\n\n- llm_provider/generic/base.py: register \"nebius\" and add a ChatOpenAI\n  bran\n[…]\n and add a config section\n- tests: unit tests for registration, base-URL wiring, the override, and the\n  missing-key error path\n\nNo new dependencies (reuses langchain-openai). Auth via NEBIUS_API_KEY.",
          "is_bot": false,
          "headline": "feat: add Nebius Token Factory as LLM and embedding provider",
          "author_name": "Oren Levitin",
          "author_login": "teionarr",
          "committed_at": "2026-07-12T09:27:30Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6d0cf55af0eebf447649cf633c34ecd09c7965ae",
          "body": "…head\n\nBENCHMARK.md supporting results now cover SimpleQA parity, the blind\npairwise report comparison (GPTR preferred 5/8, more distinct sources) and\nthe hybrid private-docs study; FRAMES (n=20, within noise) is dropped. Raw\nartifacts behind every published table - official DRB RACE/FACT outputs,\np\n[…]\n, with the\nreport_benchmark.py harness committed for reproduction. README gains a\n\"Running the benchmarks\" section listing exactly what each run needs.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Track benchmark run artifacts and swap FRAMES for the report head-to-…",
          "author_name": "Assaf Elovic",
          "author_login": "assafelovic",
          "committed_at": "2026-07-05T14:51:28Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "20bd9569e31ecabe598845a348eec547a786a4a2",
          "body": "Co-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Headline the hybrid benchmark's 94% peak coverage instead of the range",
          "author_name": "Assaf Elovic",
          "author_login": "assafelovic",
          "committed_at": "2026-07-05T12:15:15Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "456764645b4090394c30f03eba84e50acb63db0f",
          "body": "…ne arm\n\nAnswers the fair objection that stock deepagents could read local docs via\nits own filesystem tools. Adds that arm, and replaces the 4-markdown-file\ntoy corpus with a generated realistic document share (27 files: fact docs\nas PDF/DOCX/markdown, department distractors, stale archived vintage\n[…]\nage,\nfile-tools DIY 62.5% avg (44-88%, cannot parse DOCX, sometimes trusts stale\nvintages), GPT Researcher hybrid 87.5% (81-94%) at equal web coverage.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Harden hybrid benchmark: realistic corpus and a DIY file-tools baseli…",
          "author_name": "Assaf Elovic",
          "author_login": "assafelovic",
          "committed_at": "2026-07-05T11:45:22Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "766861ac1e773c03ed91e141fa8ad267832d8a7a",
          "body": "…s coverage\n\nSimpleQA/FRAMES parity shows the heavier pipeline has no accuracy tax on\nsingle-fact lookups, and the hybrid benchmark (fictional internal corpus +\nreal market facts, LLM-judged per checkpoint) shows 95.9% vs 6.2% coverage\nof private-document facts at equal web coverage - a capability raw\nweb-search tooling cannot reach. Ships the reproducible hybrid harness and\ncorpus.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Add supporting benchmarks: Q&A accuracy parity and hybrid private-doc…",
          "author_name": "Assaf Elovic",
          "author_login": "assafelovic",
          "committed_at": "2026-07-05T11:04:35Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "c58f50da3faf4b76b332528655548c91698b40a6",
          "body": "…ch deep agent\n\nBenchmarks the example against the deepagents quickstart setup (same harness,\nmodel, prompt and step budget; only the research tooling differs) on the\nofficial DeepResearch Bench RACE + FACT pipelines. GPT Researcher tools ground\nreports in 35.2 verified citations on average vs 18.6 \n[…]\nnAI judge backend and keyless-Jina fallback to the benchmark harness, and\nBENCHMARK.md with methodology and results, summarized in the README and docs.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Add DeepResearch Bench results: +89% verified citations over raw-sear…",
          "author_name": "Assaf Elovic",
          "author_login": "assafelovic",
          "committed_at": "2026-07-05T10:24:01Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "5c1ce388d2c40843ab401060190eac4d7b0a2189",
          "body": "…ch pipeline robustness\n\n- Stop nulling max_tokens for no-temperature models (gpt-5.x/o-series):\n  langchain-openai maps it to max_completion_tokens, so output budgets now\n  actually apply. Raised default token limits to give reasoning models\n  headroom for reasoning tokens.\n- Cost tracking now pref\n[…]\nnt loop.\n- Prompt fixes: JSON typo in auto_agent_instructions example, contradictory\n  reference-list instruction, stale \"important to my career\" line.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Fix silently dropped token limits, real usage-based costs, and resear…",
          "author_name": "Assaf Elovic",
          "author_login": "assafelovic",
          "committed_at": "2026-07-05T09:20:32Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "ee008fee27b9e1cf97bb63f342c051f234fcf5a2",
          "body": "…angChain deep agent\n\nAdds deep_agents/, a new multi-agent example where a chief-editor deep agent\nplans with todos, delegates sections to researcher subagents, and uses GPT\nResearcher via quick_search/deep_research tools (web, local or hybrid\nsources), with docs, a Docusaurus page and Mermaid suppo\n[…]\nnAI models to the gpt-5.4 family and fixes the Tavily retriever to\ntranslate site: operators into include_domains and respect the 400-char query\nlimit.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "Add Deep Agents example: GPT Researcher as the research engine in a L…",
          "author_name": "Assaf Elovic",
          "author_login": "assafelovic",
          "committed_at": "2026-07-04T20:09:21Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "18d405166948e11b4a0304c0c4ec440bead9e4a5",
          "body": "security: sanitize untrusted content, add SECURITY.md, pin brotli",
          "is_bot": false,
          "headline": "Merge pull request #1820 from assafelovic/security/content-hardening",
          "author_name": "Assaf Elovic",
          "author_login": "assafelovic",
          "committed_at": "2026-06-28T18:39:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3080b0c4abb71d9a1f85b3dc26c75eb730634280",
          "body": "Hardens against content-level issues that affect users running GPT-Researcher\nas intended (independent of who can reach the server):\n\n- Add SECURITY.md documenting the threat model (the backend is operator-run and\n  ships without built-in auth by design) and a private vulnerability-reporting\n  chann\n[…]\narlier versions\n  have no decompression size limit (CVE-2025-6176 decompression-bomb DoS).\n\nCloses #1719\nCloses #1659\nCloses #1819\nCloses #1103\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "security: sanitize untrusted content, add SECURITY.md, pin brotli",
          "author_name": "Assaf Elovic",
          "author_login": "assafelovic",
          "committed_at": "2026-06-28T18:36:33Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "409b8b60b477d50f2f844bc9598d1bcb7b056eee",
          "body": "Fix Azure blob loader path handling",
          "is_bot": false,
          "headline": "Merge pull request #1817 from konnisan/fix-azure-blob-loader-paths",
          "author_name": "Assaf Elovic",
          "author_login": "assafelovic",
          "committed_at": "2026-06-23T18:06:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "06136d677e3dac5f726a35c9d7672d8bb7bc6daf",
          "body": "Update web_scraping.py",
          "is_bot": false,
          "headline": "Merge pull request #1816 from Joly0/main",
          "author_name": "Assaf Elovic",
          "author_login": "assafelovic",
          "committed_at": "2026-06-23T18:05:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1c13aeb66ec5c5ff12ceb33e0d9c93641e604532",
          "body": "feat: add Atlas Cloud as an OpenAI-compatible LLM provider",
          "is_bot": false,
          "headline": "Merge pull request #1813 from lucaszhu-hue/feat/add-atlascloud-provider",
          "author_name": "Assaf Elovic",
          "author_login": "assafelovic",
          "committed_at": "2026-06-23T18:04:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2e0b384482a9ed34d46def52af711916aca1bb35",
          "body": "Add GroundRoute retriever (multi-engine search, cached)",
          "is_bot": false,
          "headline": "Merge pull request #1812 from jp0xz/add-groundroute-retriever",
          "author_name": "Assaf Elovic",
          "author_login": "assafelovic",
          "committed_at": "2026-06-23T18:02:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8bbfa86b013d7cc41a5dcd5d98c044c472554802",
          "body": "…actchecker-visualizer\n\nfeat: Add FactChecker and Visualizer Agents to Multi-Agent Workflow",
          "is_bot": false,
          "headline": "Merge pull request #1809 from KasraBashirioskooei/feat/multi-agents-f…",
          "author_name": "Assaf Elovic",
          "author_login": "assafelovic",
          "committed_at": "2026-06-23T18:01:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "57152236ddfc3374f8ec193247a429125d96ca26",
          "body": "feat(retrievers): add fastCRW search retriever",
          "is_bot": false,
          "headline": "Merge pull request #1806 from us/feat/crw-retriever",
          "author_name": "Assaf Elovic",
          "author_login": "assafelovic",
          "committed_at": "2026-06-23T17:58:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "347213cb916ab0c2bea17418f5574f9721a38118",
          "body": "fix(deep-research): keep oversized context from collapsing to empty",
          "is_bot": false,
          "headline": "Merge pull request #1802 from XiaojuCH/fix-deep-research-empty-context",
          "author_name": "Assaf Elovic",
          "author_login": "assafelovic",
          "committed_at": "2026-06-23T17:57:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6968fb9555452964f04747c3b01d7a58e038102f",
          "body": "Abstain instead of fabricating a report when no content was gathered",
          "is_bot": false,
          "headline": "Merge pull request #1799 from aaravanmay/abstain-on-empty-context",
          "author_name": "Assaf Elovic",
          "author_login": "assafelovic",
          "committed_at": "2026-06-23T17:57:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a2b8e90ff94939e36a7071fac729242d39fd5f7d",
          "body": "feat(retrievers): add Brave Search support",
          "is_bot": false,
          "headline": "Merge pull request #1793 from agbocsardi/feature/brave-search-retriever",
          "author_name": "Assaf Elovic",
          "author_login": "assafelovic",
          "committed_at": "2026-06-23T17:55:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fc46fe6e9e9db4441cc0fadfdf9e073ec4307842",
          "body": "Improve SimpleQA eval observability with structured logging and latency metadata",
          "is_bot": false,
          "headline": "Merge pull request #1790 from SeanHe727/add-simpleqa-eval-logging",
          "author_name": "Assaf Elovic",
          "author_login": "assafelovic",
          "committed_at": "2026-06-23T17:53:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1aa5a309bcd7e1851cc983f18456e15135303827",
          "body": "fix: add MAX_REVISIONS guard to prevent infinite revision loop",
          "is_bot": false,
          "headline": "Merge pull request #1783 from varshiniml7/main",
          "author_name": "Assaf Elovic",
          "author_login": "assafelovic",
          "committed_at": "2026-06-23T17:51:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b8c890d55c8a00ccd7085fb2a5d39f98d9fcee8c",
          "body": null,
          "is_bot": false,
          "headline": "Fix Azure blob loader path handling",
          "author_name": "konni",
          "author_login": "konnisan",
          "committed_at": "2026-06-23T06:57:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0ed9dae528ee8eb474f0b8e9904a6273fd4ba282",
          "body": "Added code to close open requests.Session so its underlying connection pool (and the sockets it keeps alive) is released. A new Scraper/Session is created on every scrape batch; without this, the file descriptors accumulate over the lifetime of a long-running process (e.g. the gptr-mcp server) and eventually exhaust the open-file limit ([Errno 24] Too many open files), which breaks the server's ability to accept new connections.",
          "is_bot": false,
          "headline": "Update web_scraping.py",
          "author_name": "Joly0",
          "author_login": "Joly0",
          "committed_at": "2026-06-22T12:11:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b2feeab15fdea6f75ba974698a97649512999b08",
          "body": null,
          "is_bot": false,
          "headline": "feat: add Atlas Cloud as an OpenAI-compatible LLM provider",
          "author_name": "lucaszhu-hue",
          "author_login": null,
          "committed_at": "2026-06-18T14:20:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ffac13d72e6bdf2e6de218d900eda92c0b44237f",
          "body": "Opt-in retriever (RETRIEVER=groundroute) that POSTs to GroundRoute's search API and maps results to the standard {href, body} shape. No new dependency. Reads GROUNDROUTE_API_KEY.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add GroundRoute retriever (multi-engine search, cached)",
          "author_name": "AzioBeauty",
          "author_login": "jp0xz",
          "committed_at": "2026-06-16T17:41:24Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d5e453eeaf05df2e754b0641ca72be272e114c5c",
          "body": null,
          "is_bot": false,
          "headline": "feat: add FactChecker and Visualizer agents to multi-agent workflow",
          "author_name": "Kasra Bashirioskooei",
          "author_login": "KasraBashirioskooei",
          "committed_at": "2026-06-15T01:39:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "553b5e147272da02ad5debbfbd87439d5aab08b4",
          "body": "Adds fastCRW as a new web-search retriever (RETRIEVER=crw) alongside the\nexisting providers. fastCRW is a Firecrawl-compatible web data engine in a\nsingle binary; self-host (free) or managed cloud. Reads CRW_API_KEY and an\noptional CRW_API_URL for self-hosting. Additive only — no existing retriever\nis changed. Includes unit tests with mocked HTTP.",
          "is_bot": false,
          "headline": "feat(retrievers): add fastCRW search retriever",
          "author_name": "us",
          "author_login": "us",
          "committed_at": "2026-06-13T16:22:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "69f57abfda816bd9acc8c41af82c442c8fb6b373",
          "body": null,
          "is_bot": false,
          "headline": "fix(deep-research): keep oversized context from collapsing to empty",
          "author_name": "Xiaoju",
          "author_login": "XiaojuCH",
          "committed_at": "2026-06-09T16:58:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5d98728818c75717cb7ca801d9d83f675e69726e",
          "body": "ReportGenerator.write_report passed the gathered context straight to the report\nLLM with no check, so when every retriever returned empty (rate-limited, blocked,\nor no hits) it wrote a confident, sourced-looking report from the model's priors\n(including invented citations). Abstain with a clear message when no research\ncontent was gathered. Includes a regression test (mocks the report LLM).\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Abstain instead of fabricating a report when no content was gathered",
          "author_name": "aaravanmay",
          "author_login": "aaravanmay",
          "committed_at": "2026-06-07T21:36:41Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "aa51eb782448d5642789ff66fd9542f7ec1d602d",
          "body": null,
          "is_bot": false,
          "headline": "feat(retrievers): add Brave Search support",
          "author_name": "A.G. Bocsardi",
          "author_login": "agbocsardi",
          "committed_at": "2026-06-01T17:59:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d45c2c7e610cba97f28b0162a2a5db9021ed58bd",
          "body": "…taset",
          "is_bot": false,
          "headline": "eval: add latency tracking, structured JSON logs, and multi-domain da…",
          "author_name": "CianHe727",
          "author_login": "SeanHe727",
          "committed_at": "2026-05-30T02:15:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "693d3b722c74b3f486643871f5044fced7802f58",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'main' into main",
          "author_name": "Assaf Elovic",
          "author_login": "assafelovic",
          "committed_at": "2026-05-28T07:07:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b364917f55ea579c47e5ef3f038f7e56f51213df",
          "body": "…-cost-tracking\n\nfeat(cost): track Anthropic usage from native metadata",
          "is_bot": false,
          "headline": "Merge pull request #1781 from RomainROCH/pr/feat-anthropic-real-usage…",
          "author_name": "Assaf Elovic",
          "author_login": "assafelovic",
          "committed_at": "2026-05-28T07:06:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5521508f364ed9d8f1251554ddcd4b061276ce00",
          "body": "…s-scraper\n\nfix(retrieval): send Brave snippets to scraper",
          "is_bot": false,
          "headline": "Merge pull request #1780 from RomainROCH/pr/fix-brave-snippet-bypasse…",
          "author_name": "Assaf Elovic",
          "author_login": "assafelovic",
          "committed_at": "2026-05-28T07:06:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7cf6c43050f4e47cbf0902227188def269b65db1",
          "body": "Fix incorrect config file path in Chinese README",
          "is_bot": false,
          "headline": "Merge pull request #1779 from wesssI/fix/readme-config-path",
          "author_name": "Assaf Elovic",
          "author_login": "assafelovic",
          "committed_at": "2026-05-28T07:05:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "da31614a53b1b15db8ff0a14a3fc0ebb2b04d780",
          "body": "fix(llm): raise max_tokens cap from 32k to 200k for modern long-output models",
          "is_bot": false,
          "headline": "Merge pull request #1775 from RomainROCH/fix/max-tokens-32k-cap",
          "author_name": "Assaf Elovic",
          "author_login": "assafelovic",
          "committed_at": "2026-05-28T07:03:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 72,
      "commits_last_year": 372,
      "latest_release_at": "2026-07-18T07:56:56Z",
      "latest_release_tag": "v3.6.0",
      "releases_from_tags": false,
      "days_since_last_push": 8,
      "active_weeks_last_year": 46,
      "days_since_latest_release": 8,
      "mean_days_between_releases": 24
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": true,
      "health_percentage": 100,
      "has_issue_template": false,
      "has_code_of_conduct": true,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "gpt-researcher",
          "exists": true,
          "license": "MIT",
          "keywords": [],
          "ecosystem": "pypi",
          "matches_repo": true,
          "registry_url": "https://pypi.org/project/gpt-researcher/",
          "is_deprecated": false,
          "latest_version": "0.16.0",
          "repository_url": "https://github.com/assafelovic/gpt-researcher",
          "versions_count": 110,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": 86471,
          "first_published_at": "2024-04-12T13:21:00.267680Z",
          "latest_published_at": "2026-07-18T08:04:08.440880Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 8
        }
      ]
    },
    "popularity": {
      "forks": 3866,
      "stars": 28654,
      "watchers": 168,
      "fork_history": {
        "days": [
          {
            "date": "2025-08-15",
            "count": 1
          },
          {
            "date": "2025-08-16",
            "count": 1
          },
          {
            "date": "2025-08-17",
            "count": 1
          },
          {
            "date": "2025-08-19",
            "count": 8
          },
          {
            "date": "2025-08-20",
            "count": 5
          },
          {
            "date": "2025-08-21",
            "count": 2
          },
          {
            "date": "2025-08-22",
            "count": 1
          },
          {
            "date": "2025-08-23",
            "count": 2
          },
          {
            "date": "2025-08-24",
            "count": 3
          },
          {
            "date": "2025-08-26",
            "count": 6
          },
          {
            "date": "2025-08-27",
            "count": 4
          },
          {
            "date": "2025-08-28",
            "count": 4
          },
          {
            "date": "2025-08-29",
            "count": 1
          },
          {
            "date": "2025-08-30",
            "count": 4
          },
          {
            "date": "2025-08-31",
            "count": 2
          },
          {
            "date": "2025-09-01",
            "count": 2
          },
          {
            "date": "2025-09-02",
            "count": 2
          },
          {
            "date": "2025-09-03",
            "count": 5
          },
          {
            "date": "2025-09-04",
            "count": 2
          },
          {
            "date": "2025-09-06",
            "count": 3
          },
          {
            "date": "2025-09-07",
            "count": 2
          },
          {
            "date": "2025-09-08",
            "count": 3
          },
          {
            "date": "2025-09-09",
            "count": 4
          },
          {
            "date": "2025-09-10",
            "count": 2
          },
          {
            "date": "2025-09-11",
            "count": 3
          },
          {
            "date": "2025-09-12",
            "count": 4
          },
          {
            "date": "2025-09-13",
            "count": 1
          },
          {
            "date": "2025-09-15",
            "count": 5
          },
          {
            "date": "2025-09-16",
            "count": 5
          },
          {
            "date": "2025-09-18",
            "count": 1
          },
          {
            "date": "2025-09-19",
            "count": 1
          },
          {
            "date": "2025-09-20",
            "count": 1
          },
          {
            "date": "2025-09-21",
            "count": 1
          },
          {
            "date": "2025-09-22",
            "count": 1
          },
          {
            "date": "2025-09-23",
            "count": 1
          },
          {
            "date": "2025-09-25",
            "count": 2
          },
          {
            "date": "2025-09-26",
            "count": 3
          },
          {
            "date": "2025-09-27",
            "count": 1
          },
          {
            "date": "2025-09-28",
            "count": 1
          },
          {
            "date": "2025-09-29",
            "count": 5
          },
          {
            "date": "2025-09-30",
            "count": 2
          },
          {
            "date": "2025-10-01",
            "count": 3
          },
          {
            "date": "2025-10-03",
            "count": 1
          },
          {
            "date": "2025-10-04",
            "count": 3
          },
          {
            "date": "2025-10-05",
            "count": 1
          },
          {
            "date": "2025-10-06",
            "count": 1
          },
          {
            "date": "2025-10-07",
            "count": 1
          },
          {
            "date": "2025-10-09",
            "count": 3
          },
          {
            "date": "2025-10-10",
            "count": 3
          },
          {
            "date": "2025-10-13",
            "count": 3
          },
          {
            "date": "2025-10-14",
            "count": 2
          },
          {
            "date": "2025-10-15",
            "count": 2
          },
          {
            "date": "2025-10-16",
            "count": 3
          },
          {
            "date": "2025-10-17",
            "count": 2
          },
          {
            "date": "2025-10-18",
            "count": 2
          },
          {
            "date": "2025-10-19",
            "count": 2
          },
          {
            "date": "2025-10-20",
            "count": 2
          },
          {
            "date": "2025-10-21",
            "count": 1
          },
          {
            "date": "2025-10-22",
            "count": 2
          },
          {
            "date": "2025-10-23",
            "count": 1
          },
          {
            "date": "2025-10-25",
            "count": 1
          },
          {
            "date": "2025-10-26",
            "count": 3
          },
          {
            "date": "2025-10-27",
            "count": 2
          },
          {
            "date": "2025-10-28",
            "count": 4
          },
          {
            "date": "2025-10-31",
            "count": 1
          },
          {
            "date": "2025-11-01",
            "count": 2
          },
          {
            "date": "2025-11-02",
            "count": 3
          },
          {
            "date": "2025-11-03",
            "count": 2
          },
          {
            "date": "2025-11-04",
            "count": 1
          },
          {
            "date": "2025-11-05",
            "count": 2
          },
          {
            "date": "2025-11-06",
            "count": 4
          },
          {
            "date": "2025-11-07",
            "count": 2
          },
          {
            "date": "2025-11-08",
            "count": 3
          },
          {
            "date": "2025-11-10",
            "count": 4
          },
          {
            "date": "2025-11-11",
            "count": 2
          },
          {
            "date": "2025-11-13",
            "count": 3
          },
          {
            "date": "2025-11-14",
            "count": 3
          },
          {
            "date": "2025-11-16",
            "count": 1
          },
          {
            "date": "2025-11-17",
            "count": 1
          },
          {
            "date": "2025-11-18",
            "count": 1
          },
          {
            "date": "2025-11-19",
            "count": 3
          },
          {
            "date": "2025-11-20",
            "count": 2
          },
          {
            "date": "2025-11-21",
            "count": 1
          },
          {
            "date": "2025-11-23",
            "count": 1
          },
          {
            "date": "2025-11-24",
            "count": 2
          },
          {
            "date": "2025-11-26",
            "count": 4
          },
          {
            "date": "2025-11-27",
            "count": 6
          },
          {
            "date": "2025-11-28",
            "count": 1
          },
          {
            "date": "2025-11-29",
            "count": 1
          },
          {
            "date": "2025-11-30",
            "count": 1
          },
          {
            "date": "2025-12-01",
            "count": 4
          },
          {
            "date": "2025-12-02",
            "count": 3
          },
          {
            "date": "2025-12-03",
            "count": 2
          },
          {
            "date": "2025-12-04",
            "count": 1
          },
          {
            "date": "2025-12-06",
            "count": 3
          },
          {
            "date": "2025-12-07",
            "count": 4
          },
          {
            "date": "2025-12-09",
            "count": 1
          },
          {
            "date": "2025-12-11",
            "count": 3
          },
          {
            "date": "2025-12-13",
            "count": 1
          },
          {
            "date": "2025-12-15",
            "count": 3
          },
          {
            "date": "2025-12-16",
            "count": 3
          },
          {
            "date": "2025-12-17",
            "count": 1
          },
          {
            "date": "2025-12-18",
            "count": 3
          },
          {
            "date": "2025-12-19",
            "count": 2
          },
          {
            "date": "2025-12-20",
            "count": 1
          },
          {
            "date": "2025-12-21",
            "count": 4
          },
          {
            "date": "2025-12-22",
            "count": 3
          },
          {
            "date": "2025-12-23",
            "count": 2
          },
          {
            "date": "2025-12-24",
            "count": 2
          },
          {
            "date": "2025-12-25",
            "count": 2
          },
          {
            "date": "2025-12-27",
            "count": 1
          },
          {
            "date": "2025-12-28",
            "count": 2
          },
          {
            "date": "2025-12-29",
            "count": 2
          },
          {
            "date": "2025-12-31",
            "count": 2
          },
          {
            "date": "2026-01-01",
            "count": 2
          },
          {
            "date": "2026-01-02",
            "count": 3
          },
          {
            "date": "2026-01-03",
            "count": 1
          },
          {
            "date": "2026-01-04",
            "count": 2
          },
          {
            "date": "2026-01-05",
            "count": 1
          },
          {
            "date": "2026-01-06",
            "count": 2
          },
          {
            "date": "2026-01-07",
            "count": 5
          },
          {
            "date": "2026-01-08",
            "count": 3
          },
          {
            "date": "2026-01-09",
            "count": 1
          },
          {
            "date": "2026-01-10",
            "count": 2
          },
          {
            "date": "2026-01-13",
            "count": 1
          },
          {
            "date": "2026-01-14",
            "count": 4
          },
          {
            "date": "2026-01-15",
            "count": 3
          },
          {
            "date": "2026-01-16",
            "count": 2
          },
          {
            "date": "2026-01-17",
            "count": 1
          },
          {
            "date": "2026-01-18",
            "count": 4
          },
          {
            "date": "2026-01-19",
            "count": 1
          },
          {
            "date": "2026-01-20",
            "count": 2
          },
          {
            "date": "2026-01-21",
            "count": 4
          },
          {
            "date": "2026-01-22",
            "count": 3
          },
          {
            "date": "2026-01-23",
            "count": 3
          },
          {
            "date": "2026-01-25",
            "count": 4
          },
          {
            "date": "2026-01-26",
            "count": 3
          },
          {
            "date": "2026-01-27",
            "count": 3
          },
          {
            "date": "2026-01-28",
            "count": 3
          },
          {
            "date": "2026-01-29",
            "count": 2
          },
          {
            "date": "2026-01-30",
            "count": 2
          },
          {
            "date": "2026-02-01",
            "count": 2
          },
          {
            "date": "2026-02-02",
            "count": 4
          },
          {
            "date": "2026-02-03",
            "count": 5
          },
          {
            "date": "2026-02-04",
            "count": 2
          },
          {
            "date": "2026-02-05",
            "count": 1
          },
          {
            "date": "2026-02-06",
            "count": 4
          },
          {
            "date": "2026-02-07",
            "count": 3
          },
          {
            "date": "2026-02-08",
            "count": 1
          },
          {
            "date": "2026-02-09",
            "count": 2
          },
          {
            "date": "2026-02-10",
            "count": 2
          },
          {
            "date": "2026-02-11",
            "count": 5
          },
          {
            "date": "2026-02-12",
            "count": 3
          },
          {
            "date": "2026-02-13",
            "count": 4
          },
          {
            "date": "2026-02-14",
            "count": 2
          },
          {
            "date": "2026-02-15",
            "count": 3
          },
          {
            "date": "2026-02-16",
            "count": 1
          },
          {
            "date": "2026-02-17",
            "count": 3
          },
          {
            "date": "2026-02-18",
            "count": 3
          },
          {
            "date": "2026-02-19",
            "count": 1
          },
          {
            "date": "2026-02-20",
            "count": 2
          },
          {
            "date": "2026-02-21",
            "count": 1
          },
          {
            "date": "2026-02-22",
            "count": 2
          },
          {
            "date": "2026-02-23",
            "count": 4
          },
          {
            "date": "2026-02-24",
            "count": 3
          },
          {
            "date": "2026-02-25",
            "count": 4
          },
          {
            "date": "2026-02-26",
            "count": 1
          },
          {
            "date": "2026-02-27",
            "count": 3
          },
          {
            "date": "2026-02-28",
            "count": 4
          },
          {
            "date": "2026-03-01",
            "count": 2
          },
          {
            "date": "2026-03-02",
            "count": 2
          },
          {
            "date": "2026-03-03",
            "count": 5
          },
          {
            "date": "2026-03-04",
            "count": 3
          },
          {
            "date": "2026-03-05",
            "count": 4
          },
          {
            "date": "2026-03-06",
            "count": 2
          },
          {
            "date": "2026-03-07",
            "count": 2
          },
          {
            "date": "2026-03-08",
            "count": 1
          },
          {
            "date": "2026-03-09",
            "count": 3
          },
          {
            "date": "2026-03-11",
            "count": 2
          },
          {
            "date": "2026-03-12",
            "count": 7
          },
          {
            "date": "2026-03-13",
            "count": 5
          },
          {
            "date": "2026-03-14",
            "count": 2
          },
          {
            "date": "2026-03-15",
            "count": 2
          },
          {
            "date": "2026-03-16",
            "count": 3
          },
          {
            "date": "2026-03-17",
            "count": 4
          },
          {
            "date": "2026-03-18",
            "count": 6
          },
          {
            "date": "2026-03-19",
            "count": 2
          },
          {
            "date": "2026-03-20",
            "count": 8
          },
          {
            "date": "2026-03-21",
            "count": 9
          },
          {
            "date": "2026-03-22",
            "count": 3
          },
          {
            "date": "2026-03-23",
            "count": 11
          },
          {
            "date": "2026-03-24",
            "count": 1
          },
          {
            "date": "2026-03-25",
            "count": 3
          },
          {
            "date": "2026-03-26",
            "count": 4
          },
          {
            "date": "2026-03-27",
            "count": 3
          },
          {
            "date": "2026-03-28",
            "count": 3
          },
          {
            "date": "2026-03-29",
            "count": 5
          },
          {
            "date": "2026-03-30",
            "count": 5
          },
          {
            "date": "2026-03-31",
            "count": 6
          },
          {
            "date": "2026-04-01",
            "count": 8
          },
          {
            "date": "2026-04-02",
            "count": 3
          },
          {
            "date": "2026-04-03",
            "count": 4
          },
          {
            "date": "2026-04-04",
            "count": 1
          },
          {
            "date": "2026-04-05",
            "count": 3
          },
          {
            "date": "2026-04-06",
            "count": 4
          },
          {
            "date": "2026-04-07",
            "count": 3
          },
          {
            "date": "2026-04-08",
            "count": 2
          },
          {
            "date": "2026-04-09",
            "count": 1
          },
          {
            "date": "2026-04-10",
            "count": 5
          },
          {
            "date": "2026-04-11",
            "count": 3
          },
          {
            "date": "2026-04-12",
            "count": 5
          },
          {
            "date": "2026-04-13",
            "count": 4
          },
          {
            "date": "2026-04-14",
            "count": 2
          },
          {
            "date": "2026-04-15",
            "count": 1
          },
          {
            "date": "2026-04-16",
            "count": 5
          },
          {
            "date": "2026-04-17",
            "count": 4
          },
          {
            "date": "2026-04-18",
            "count": 7
          },
          {
            "date": "2026-04-19",
            "count": 3
          },
          {
            "date": "2026-04-20",
            "count": 2
          },
          {
            "date": "2026-04-21",
            "count": 10
          },
          {
            "date": "2026-04-22",
            "count": 4
          },
          {
            "date": "2026-04-23",
            "count": 3
          },
          {
            "date": "2026-04-24",
            "count": 4
          },
          {
            "date": "2026-04-25",
            "count": 4
          },
          {
            "date": "2026-04-26",
            "count": 3
          },
          {
            "date": "2026-04-27",
            "count": 2
          },
          {
            "date": "2026-04-28",
            "count": 6
          },
          {
            "date": "2026-04-29",
            "count": 10
          },
          {
            "date": "2026-04-30",
            "count": 5
          },
          {
            "date": "2026-05-01",
            "count": 2
          },
          {
            "date": "2026-05-02",
            "count": 3
          },
          {
            "date": "2026-05-03",
            "count": 4
          },
          {
            "date": "2026-05-04",
            "count": 4
          },
          {
            "date": "2026-05-05",
            "count": 3
          },
          {
            "date": "2026-05-06",
            "count": 6
          },
          {
            "date": "2026-05-07",
            "count": 5
          },
          {
            "date": "2026-05-08",
            "count": 3
          },
          {
            "date": "2026-05-09",
            "count": 5
          },
          {
            "date": "2026-05-10",
            "count": 2
          },
          {
            "date": "2026-05-11",
            "count": 4
          },
          {
            "date": "2026-05-12",
            "count": 5
          },
          {
            "date": "2026-05-13",
            "count": 4
          },
          {
            "date": "2026-05-14",
            "count": 5
          },
          {
            "date": "2026-05-15",
            "count": 5
          },
          {
            "date": "2026-05-16",
            "count": 4
          },
          {
            "date": "2026-05-17",
            "count": 3
          },
          {
            "date": "2026-05-18",
            "count": 4
          },
          {
            "date": "2026-05-19",
            "count": 6
          },
          {
            "date": "2026-05-20",
            "count": 3
          },
          {
            "date": "2026-05-21",
            "count": 4
          },
          {
            "date": "2026-05-22",
            "count": 6
          },
          {
            "date": "2026-05-23",
            "count": 3
          },
          {
            "date": "2026-05-24",
            "count": 2
          },
          {
            "date": "2026-05-25",
            "count": 6
          },
          {
            "date": "2026-05-26",
            "count": 6
          },
          {
            "date": "2026-05-27",
            "count": 5
          },
          {
            "date": "2026-05-28",
            "count": 6
          },
          {
            "date": "2026-05-29",
            "count": 2
          },
          {
            "date": "2026-05-30",
            "count": 2
          },
          {
            "date": "2026-05-31",
            "count": 2
          },
          {
            "date": "2026-06-01",
            "count": 6
          },
          {
            "date": "2026-06-02",
            "count": 9
          },
          {
            "date": "2026-06-03",
            "count": 5
          },
          {
            "date": "2026-06-04",
            "count": 1
          },
          {
            "date": "2026-06-05",
            "count": 2
          },
          {
            "date": "2026-06-06",
            "count": 3
          },
          {
            "date": "2026-06-07",
            "count": 3
          },
          {
            "date": "2026-06-08",
            "count": 6
          },
          {
            "date": "2026-06-09",
            "count": 3
          },
          {
            "date": "2026-06-10",
            "count": 3
          },
          {
            "date": "2026-06-11",
            "count": 2
          },
          {
            "date": "2026-06-12",
            "count": 3
          },
          {
            "date": "2026-06-13",
            "count": 3
          },
          {
            "date": "2026-06-14",
            "count": 10
          },
          {
            "date": "2026-06-15",
            "count": 8
          },
          {
            "date": "2026-06-16",
            "count": 3
          },
          {
            "date": "2026-06-17",
            "count": 4
          },
          {
            "date": "2026-06-18",
            "count": 2
          },
          {
            "date": "2026-06-19",
            "count": 8
          },
          {
            "date": "2026-06-20",
            "count": 2
          },
          {
            "date": "2026-06-21",
            "count": 2
          },
          {
            "date": "2026-06-22",
            "count": 3
          },
          {
            "date": "2026-06-23",
            "count": 3
          },
          {
            "date": "2026-06-24",
            "count": 3
          },
          {
            "date": "2026-06-25",
            "count": 5
          },
          {
            "date": "2026-06-26",
            "count": 1
          },
          {
            "date": "2026-06-27",
            "count": 5
          },
          {
            "date": "2026-06-28",
            "count": 3
          },
          {
            "date": "2026-06-29",
            "count": 2
          },
          {
            "date": "2026-06-30",
            "count": 5
          },
          {
            "date": "2026-07-01",
            "count": 3
          },
          {
            "date": "2026-07-02",
            "count": 3
          },
          {
            "date": "2026-07-03",
            "count": 6
          },
          {
            "date": "2026-07-05",
            "count": 3
          },
          {
            "date": "2026-07-06",
            "count": 5
          },
          {
            "date": "2026-07-07",
            "count": 11
          },
          {
            "date": "2026-07-08",
            "count": 5
          },
          {
            "date": "2026-07-09",
            "count": 7
          },
          {
            "date": "2026-07-10",
            "count": 3
          },
          {
            "date": "2026-07-11",
            "count": 4
          },
          {
            "date": "2026-07-12",
            "count": 1
          },
          {
            "date": "2026-07-13",
            "count": 3
          },
          {
            "date": "2026-07-14",
            "count": 1
          },
          {
            "date": "2026-07-15",
            "count": 5
          },
          {
            "date": "2026-07-16",
            "count": 4
          },
          {
            "date": "2026-07-17",
            "count": 4
          },
          {
            "date": "2026-07-18",
            "count": 8
          },
          {
            "date": "2026-07-19",
            "count": 4
          },
          {
            "date": "2026-07-20",
            "count": 4
          },
          {
            "date": "2026-07-21",
            "count": 7
          },
          {
            "date": "2026-07-22",
            "count": 2
          },
          {
            "date": "2026-07-23",
            "count": 3
          },
          {
            "date": "2026-07-24",
            "count": 4
          },
          {
            "date": "2026-07-25",
            "count": 7
          },
          {
            "date": "2026-07-26",
            "count": 2
          }
        ],
        "complete": false,
        "collected": 1000,
        "total_forks": 3866
      },
      "star_history": null,
      "open_issues_and_prs": 142
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [
        "examples",
        "notebooks"
      ],
      "has_llms_txt": false,
      "has_dockerfile": true,
      "has_mcp_signal": true,
      "bootstrap_files": [],
      "api_schema_files": [
        ".triage/engagement.graphql"
      ],
      "has_devcontainer": false,
      "typecheck_configs": [
        "frontend/nextjs/tsconfig.json"
      ],
      "toolchain_manifests": [],
      "largest_source_bytes": 84260,
      "source_files_sampled": 367,
      "oversized_source_files": 1,
      "agent_instruction_files": [
        ".cursorrules"
      ],
      "agent_instruction_max_bytes": 5937
    },
    "dependencies": {
      "manifests": [
        "backend/requirements.txt",
        "deep_agents/requirements.txt",
        "docs/package.json",
        "multi_agents/package.json",
        "multi_agents/requirements.txt",
        "pyproject.toml",
        "requirements.txt",
        "setup.py"
      ],
      "advisories": {
        "error": null,
        "scope": "published_package",
        "source": "osv",
        "findings": [],
        "collected": true,
        "malicious": [],
        "truncated": false,
        "by_severity": {},
        "advisory_count": 0,
        "affected_count": 0,
        "assessed_count": 159,
        "malicious_count": 0,
        "assessed_package": "pypi:gpt-researcher@0.16.0",
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "npm",
        "pypi"
      ],
      "dependencies": [
        {
          "name": "@langchain/langgraph-sdk",
          "manifest": "multi_agents/package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.0.1-rc.13"
        },
        {
          "name": "aiofiles",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=23.2.1"
        },
        {
          "name": "aiohappyeyeballs",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=2.6.1"
        },
        {
          "name": "aiohttp",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=3.12.0"
        },
        {
          "name": "aiosignal",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=1.3.2"
        },
        {
          "name": "annotated-types",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=0.7.0"
        },
        {
          "name": "anyio",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=4.9.0"
        },
        {
          "name": "arxiv",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=2.0.0"
        },
        {
          "name": "attrs",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=25.3.0"
        },
        {
          "name": "backoff",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=2.2.1"
        },
        {
          "name": "beautifulsoup4",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=4.12.2"
        },
        {
          "name": "brotli",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=1.2.0"
        },
        {
          "name": "certifi",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=2025.4.26"
        },
        {
          "name": "cffi",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=1.17.1"
        },
        {
          "name": "chardet",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=5.2.0"
        },
        {
          "name": "charset-normalizer",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=3.4.2"
        },
        {
          "name": "click",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=8.1.0"
        },
        {
          "name": "colorama",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=0.4.6"
        },
        {
          "name": "cryptography",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=45.0.2"
        },
        {
          "name": "cssselect2",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=0.8.0"
        },
        {
          "name": "dataclasses-json",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=0.6.7"
        },
        {
          "name": "distro",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=1.9.0"
        },
        {
          "name": "docopt",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=0.6.2"
        },
        {
          "name": "duckduckgo-search",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=4.1.1"
        },
        {
          "name": "emoji",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=2.14.1"
        },
        {
          "name": "fastapi",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=0.104.1"
        },
        {
          "name": "feedparser",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=6.0.11"
        },
        {
          "name": "filelock",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=3.18.0"
        },
        {
          "name": "filetype",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=1.2.0"
        },
        {
          "name": "fonttools",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=4.58.0"
        },
        {
          "name": "frozenlist",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=1.6.0"
        },
        {
          "name": "fsspec",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=2025.5.1"
        },
        {
          "name": "greenlet",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=3.2.2"
        },
        {
          "name": "h11",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=0.16.0"
        },
        {
          "name": "html5lib",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=1.1"
        },
        {
          "name": "htmldocx",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=0.0.6"
        },
        {
          "name": "httpcore",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=1.0.9"
        },
        {
          "name": "httpx",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=0.28.1"
        },
        {
          "name": "httpx-aiohttp",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=0.1.4"
        },
        {
          "name": "httpx-sse",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=0.4.0"
        },
        {
          "name": "huggingface-hub",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=0.32.0"
        },
        {
          "name": "idna",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=3.10"
        },
        {
          "name": "importlib-metadata",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=8.7.0"
        },
        {
          "name": "jinja2",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=3.1.6"
        },
        {
          "name": "jiter",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=0.10.0"
        },
        {
          "name": "joblib",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=1.5.1"
        },
        {
          "name": "json-repair",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=0.44.0"
        },
        {
          "name": "json5",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=0.12.0"
        },
        {
          "name": "jsonpatch",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=1.33"
        },
        {
          "name": "jsonpointer",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=3.0.0"
        },
        {
          "name": "jsonschema",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=4.23.0"
        },
        {
          "name": "jsonschema-specifications",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=2025.4.1"
        },
        {
          "name": "kiwisolver",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=1.4.5"
        },
        {
          "name": "langchain",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=1.0.0"
        },
        {
          "name": "langchain-classic",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=1.0.0"
        },
        {
          "name": "langchain-community",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=0.4.0"
        },
        {
          "name": "langchain-core",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=1.0.0"
        },
        {
          "name": "langchain-ollama",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=1.0.0"
        },
        {
          "name": "langchain-openai",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=1.0.0"
        },
        {
          "name": "langchain-text-splitters",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=1.0.0"
        },
        {
          "name": "langdetect",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=1.0.9"
        },
        {
          "name": "langgraph",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=0.2.76"
        },
        {
          "name": "langgraph-checkpoint",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=2.0.26"
        },
        {
          "name": "langgraph-cli",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=0.2.10"
        },
        {
          "name": "langgraph-sdk",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=0.1.70"
        },
        {
          "name": "langsmith",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=0.3.42"
        },
        {
          "name": "litellm",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=1.71.0"
        },
        {
          "name": "loguru",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=0.7.3"
        },
        {
          "name": "lxml",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=5.4.0"
        },
        {
          "name": "markdown",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=3.8"
        },
        {
          "name": "markdown2",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=2.5.3"
        },
        {
          "name": "markupsafe",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=3.0.2"
        },
        {
          "name": "marshmallow",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=3.26.1"
        },
        {
          "name": "mcp",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=1.9.1"
        },
        {
          "name": "md2pdf",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=1.0.1"
        },
        {
          "name": "mistune",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=3.1.3"
        },
        {
          "name": "multidict",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=6.4.4"
        },
        {
          "name": "mypy-extensions",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=1.1.0"
        },
        {
          "name": "nest-asyncio",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=1.6.0"
        },
        {
          "name": "nltk",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=3.9.1"
        },
        {
          "name": "numpy",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=2.0.0,<2.3.0"
        },
        {
          "name": "olefile",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=0.47"
        },
        {
          "name": "ollama",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=0.4.8"
        },
        {
          "name": "openai",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=1.82.0"
        },
        {
          "name": "orjson",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=3.10.18"
        },
        {
          "name": "ormsgpack",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=1.10.0"
        },
        {
          "name": "packaging",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=24.2"
        },
        {
          "name": "pillow",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=11.2.1"
        },
        {
          "name": "primp",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=0.15.0"
        },
        {
          "name": "propcache",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=0.3.1"
        },
        {
          "name": "psutil",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=6.0.0"
        },
        {
          "name": "pycparser",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=2.22"
        },
        {
          "name": "pydantic",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=2.11.5"
        },
        {
          "name": "pydantic-core",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=2.33.2"
        },
        {
          "name": "pydantic-settings",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=2.9.1"
        },
        {
          "name": "pydyf",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=0.11.0"
        },
        {
          "name": "pymupdf",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=1.26.0"
        },
        {
          "name": "pypdf",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=5.5.0"
        },
        {
          "name": "pyphen",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=0.17.2"
        },
        {
          "name": "python-docx",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=1.1.2"
        },
        {
          "name": "python-dotenv",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=1.1.0"
        },
        {
          "name": "python-iso639",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=2025.2.18"
        },
        {
          "name": "python-magic",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=0.4.27"
        },
        {
          "name": "python-multipart",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=0.0.20"
        },
        {
          "name": "python-oxmsg",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=0.0.2"
        },
        {
          "name": "pyyaml",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=6.0.2"
        },
        {
          "name": "rapidfuzz",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=3.13.0"
        },
        {
          "name": "referencing",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=0.36.2"
        },
        {
          "name": "regex",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=2024.11.6"
        },
        {
          "name": "requests",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=2.32.3"
        },
        {
          "name": "requests-toolbelt",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=1.0.0"
        },
        {
          "name": "rpds-py",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=0.25.1"
        },
        {
          "name": "sgmllib3k",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=1.0.0"
        },
        {
          "name": "six",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=1.17.0"
        },
        {
          "name": "sniffio",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=1.3.1"
        },
        {
          "name": "soupsieve",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=2.7"
        },
        {
          "name": "sqlalchemy",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=2.0.41"
        },
        {
          "name": "sse-starlette",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=2.3.5"
        },
        {
          "name": "starlette",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=0.46.2"
        },
        {
          "name": "tenacity",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=9.1.2"
        },
        {
          "name": "tiktoken",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=0.9.0"
        },
        {
          "name": "tinycss2",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=1.4.0"
        },
        {
          "name": "tinyhtml5",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=2.0.0"
        },
        {
          "name": "tokenizers",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=0.21.1"
        },
        {
          "name": "tqdm",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=4.67.1"
        },
        {
          "name": "typing-extensions",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=4.13.2"
        },
        {
          "name": "typing-inspect",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=0.9.0"
        },
        {
          "name": "typing-inspection",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=0.4.1"
        },
        {
          "name": "unstructured",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=0.17.2"
        },
        {
          "name": "unstructured-client",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=0.35.0"
        },
        {
          "name": "urllib3",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=2.4.0"
        },
        {
          "name": "uvicorn",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=0.34.2"
        },
        {
          "name": "weasyprint",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=65.1"
        },
        {
          "name": "webencodings",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=0.5.1"
        },
        {
          "name": "websockets",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=15.0.1"
        },
        {
          "name": "win32-setctime",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=1.2.0"
        },
        {
          "name": "wrapt",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=1.17.2"
        },
        {
          "name": "yarl",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=1.20.0"
        },
        {
          "name": "zipp",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=3.21.0"
        },
        {
          "name": "zopfli",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=0.2.3.post1"
        },
        {
          "name": "zstandard",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=0.23.0"
        }
      ],
      "all_dependencies": {
        "error": null,
        "source": "github-sbom",
        "packages": [
          {
            "name": "@langchain/langgraph-sdk",
            "direct": true,
            "version": "^0.0.1-rc.12",
            "ecosystem": "npm"
          },
          {
            "name": "@langchain/langgraph-sdk",
            "direct": true,
            "version": "^0.0.1-rc.13",
            "ecosystem": "npm"
          },
          {
            "name": "aiofiles",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "aiohappyeyeballs",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "aiohttp",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "aiosignal",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "annotated-types",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "anyio",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "arxiv",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "attrs",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "backoff",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "beautifulsoup4",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "brotli",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "certifi",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "cffi",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "chardet",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "charset-normalizer",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "click",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "colorama",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "cryptography",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "cssselect2",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "dataclasses-json",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "distro",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "docopt",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "duckduckgo-search",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "emoji",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "fastapi",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "feedparser",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "filelock",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "filetype",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "fonttools",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "frozenlist",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "fsspec",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "greenlet",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "h11",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "html5lib",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "htmldocx",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "httpcore",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "httpx",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "httpx-aiohttp",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "httpx-sse",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "huggingface-hub",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "idna",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "importlib-metadata",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "jinja2",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "jiter",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "joblib",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "json-repair",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "json5",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "jsonpatch",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "jsonpointer",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "jsonschema",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "jsonschema-specifications",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "kiwisolver",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "langchain",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "langchain-classic",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "langchain-community",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "langchain-core",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "langchain-ollama",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "langchain-openai",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "langchain-text-splitters",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "langdetect",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "langgraph",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "langgraph-checkpoint",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "langgraph-cli",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "langgraph-sdk",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "langsmith",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "litellm",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "loguru",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "lxml",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "markdown",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "markdown2",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "markupsafe",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "marshmallow",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "mcp",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "md2pdf",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "mistune",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "multidict",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "mypy-extensions",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "nest-asyncio",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "nltk",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "numpy",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "olefile",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "ollama",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "openai",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "orjson",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "ormsgpack",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "packaging",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "pillow",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "primp",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "propcache",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "psutil",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "pycparser",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "pydantic",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "pydantic-core",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "pydantic-settings",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "pydyf",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "pymupdf",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "pypdf",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "pyphen",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "python-docx",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "python-dotenv",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "python-iso639",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "python-magic",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "python-multipart",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "python-oxmsg",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "pyyaml",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "rapidfuzz",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "referencing",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "regex",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "requests",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "requests-toolbelt",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "rpds-py",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "sgmllib3k",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "six",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "sniffio",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "soupsieve",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "sqlalchemy",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "sse-starlette",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "starlette",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "tenacity",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "tiktoken",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "tinycss2",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "tinyhtml5",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "tokenizers",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "tqdm",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "typing-extensions",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "typing-inspect",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "typing-inspection",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "unstructured",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "unstructured-client",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "urllib3",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "uvicorn",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "weasyprint",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "webencodings",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "websockets",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "win32-setctime",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "wrapt",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "yarl",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "zipp",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "zopfli",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "zstandard",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "@babel/core",
            "direct": false,
            "version": "^7.26.9",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-syntax-flow",
            "direct": false,
            "version": "^7.26.0",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-transform-typescript",
            "direct": false,
            "version": "^7.26.8",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/preset-env",
            "direct": false,
            "version": "^7.26.9",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/preset-react",
            "direct": false,
            "version": "^7.26.3",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/preset-typescript",
            "direct": false,
            "version": "^7.26.0",
            "ecosystem": "npm"
          },
          {
            "name": "@docusaurus/core",
            "direct": false,
            "version": "3.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "@docusaurus/preset-classic",
            "direct": false,
            "version": "3.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "@docusaurus/theme-mermaid",
            "direct": false,
            "version": "3.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "@ducanh2912/next-pwa",
            "direct": false,
            "version": "^10.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "@easyops-cn/docusaurus-search-local",
            "direct": false,
            "version": "^0.49.2",
            "ecosystem": "npm"
          },
          {
            "name": "@emotion/react",
            "direct": false,
            "version": "^11.10.5",
            "ecosystem": "npm"
          },
          {
            "name": "@emotion/styled",
            "direct": false,
            "version": "^11.10.5",
            "ecosystem": "npm"
          },
          {
            "name": "@mdx-js/react",
            "direct": false,
            "version": "^3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "@mozilla/readability",
            "direct": false,
            "version": "^0.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "@next/third-parties",
            "direct": false,
            "version": "^15.1.6",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/plugin-alias",
            "direct": false,
            "version": "^5.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/plugin-babel",
            "direct": false,
            "version": "^6.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/plugin-commonjs",
            "direct": false,
            "version": "^28.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/plugin-json",
            "direct": false,
            "version": "^6.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/plugin-node-resolve",
            "direct": false,
            "version": "^16.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/plugin-replace",
            "direct": false,
            "version": "^6.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/plugin-typescript",
            "direct": false,
            "version": "^12.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "@svgr/webpack",
            "direct": false,
            "version": "^8.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "@tailwindcss/typography",
            "direct": false,
            "version": "^0.5.16",
            "ecosystem": "npm"
          },
          {
            "name": "@types/jsdom",
            "direct": false,
            "version": "^21.1.6",
            "ecosystem": "npm"
          },
          {
            "name": "@types/node",
            "direct": false,
            "version": "^20",
            "ecosystem": "npm"
          },
          {
            "name": "@types/react",
            "direct": false,
            "version": "^18",
            "ecosystem": "npm"
          },
          {
            "name": "@types/react-dom",
            "direct": false,
            "version": "^18",
            "ecosystem": "npm"
          },
          {
            "name": "@types/uuid",
            "direct": false,
            "version": "^10.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "autoprefixer",
            "direct": false,
            "version": "^10.4.20",
            "ecosystem": "npm"
          },
          {
            "name": "axios",
            "direct": false,
            "version": "^1.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "clsx",
            "direct": false,
            "version": "^1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "date-fns",
            "direct": false,
            "version": "^4.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "discord.js",
            "direct": false,
            "version": "^14.16.1",
            "ecosystem": "npm"
          },
          {
            "name": "dotenv",
            "direct": false,
            "version": "^16.4.5",
            "ecosystem": "npm"
          },
          {
            "name": "eslint",
            "direct": false,
            "version": "^8",
            "ecosystem": "npm"
          },
          {
            "name": "eslint-config-next",
            "direct": false,
            "version": "14.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "eventsource-parser",
            "direct": false,
            "version": "^1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "express",
            "direct": false,
            "version": "^4.17.1",
            "ecosystem": "npm"
          },
          {
            "name": "file-loader",
            "direct": false,
            "version": "^6.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "framer-motion",
            "direct": false,
            "version": "^9.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "geist",
            "direct": false,
            "version": "^1.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "hast-util-is-element",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "isomorphic-dompurify",
            "direct": false,
            "version": "^3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "jsonrepair",
            "direct": false,
            "version": "^3.8.0",
            "ecosystem": "npm"
          },
          {
            "name": "minimatch",
            "direct": false,
            "version": "3.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "next",
            "direct": false,
            "version": "^14.2.28",
            "ecosystem": "npm"
          },
          {
            "name": "next-plausible",
            "direct": false,
            "version": "^3.12.0",
            "ecosystem": "npm"
          },
          {
            "name": "nodemon",
            "direct": false,
            "version": "^3.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "postcss",
            "direct": false,
            "version": "^8",
            "ecosystem": "npm"
          },
          {
            "name": "prettier",
            "direct": false,
            "version": "^3.2.5",
            "ecosystem": "npm"
          },
          {
            "name": "prettier-plugin-tailwindcss",
            "direct": false,
            "version": "^0.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "react",
            "direct": false,
            "version": "^18.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "react",
            "direct": false,
            "version": "^18.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "react-dom",
            "direct": false,
            "version": "^18.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "react-dom",
            "direct": false,
            "version": "^18.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "react-dropzone",
            "direct": false,
            "version": "^14.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "react-ga4",
            "direct": false,
            "version": "^2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "react-hot-toast",
            "direct": false,
            "version": "^2.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "rehype-katex",
            "direct": false,
            "version": "7",
            "ecosystem": "npm"
          },
          {
            "name": "rehype-prism-plus",
            "direct": false,
            "version": "^2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "remark",
            "direct": false,
            "version": "^15.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "remark-gfm",
            "direct": false,
            "version": "^4.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "remark-html",
            "direct": false,
            "version": "^16.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "remark-math",
            "direct": false,
            "version": "6",
            "ecosystem": "npm"
          },
          {
            "name": "remark-parse",
            "direct": false,
            "version": "^11.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "rollup",
            "direct": false,
            "version": "^2.79.2",
            "ecosystem": "npm"
          },
          {
            "name": "rollup-plugin-peer-deps-external",
            "direct": false,
            "version": "^2.2.4",
            "ecosystem": "npm"
          },
          {
            "name": "rollup-plugin-postcss",
            "direct": false,
            "version": "^4.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "rollup-plugin-terser",
            "direct": false,
            "version": "^7.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "rollup-plugin-typescript2",
            "direct": false,
            "version": "^0.31.2",
            "ecosystem": "npm"
          },
          {
            "name": "tailwindcss",
            "direct": false,
            "version": "^3.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "trim",
            "direct": false,
            "version": "^0.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "typescript",
            "direct": false,
            "version": "^5",
            "ecosystem": "npm"
          },
          {
            "name": "url-loader",
            "direct": false,
            "version": "^4.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "ws",
            "direct": false,
            "version": "^8.18.0",
            "ecosystem": "npm"
          },
          {
            "name": "zod",
            "direct": false,
            "version": "^3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "zod-to-json-schema",
            "direct": false,
            "version": "^3.23.0",
            "ecosystem": "npm"
          },
          {
            "name": "ag2",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "ddgs",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "deepagents",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "google-genai",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "judges",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "langchain-mcp-adapters",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "pandas",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "python-3-11",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "python-pptx",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "tavily-python",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "types-aiofiles",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "types-beautifulsoup4",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "types-colorama",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "types-markdown",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "types-requests",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          }
        ],
        "collected": true,
        "truncated": false,
        "total_count": 236,
        "direct_count": 142,
        "indirect_count": 94
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 98,
        "merged_prs": 571,
        "open_issues": 44,
        "closed_ratio": 0.939,
        "closed_issues": 677,
        "closed_unmerged_prs": 390
      },
      "bus_factor": 1,
      "bot_contributors": 2,
      "top_contributors": [
        {
          "type": "User",
          "login": "assafelovic",
          "commits": 1513,
          "avatar_url": "https://avatars.githubusercontent.com/u/13554167?v=4"
        },
        {
          "type": "User",
          "login": "ElishaKay",
          "commits": 566,
          "avatar_url": "https://avatars.githubusercontent.com/u/16700452?v=4"
        },
        {
          "type": "User",
          "login": "rotemweiss57",
          "commits": 72,
          "avatar_url": "https://avatars.githubusercontent.com/u/91344214?v=4"
        },
        {
          "type": "User",
          "login": "ewgdg",
          "commits": 67,
          "avatar_url": "https://avatars.githubusercontent.com/u/15310401?v=4"
        },
        {
          "type": "User",
          "login": "Bartok9",
          "commits": 44,
          "avatar_url": "https://avatars.githubusercontent.com/u/259807879?v=4"
        },
        {
          "type": "User",
          "login": "kga245",
          "commits": 39,
          "avatar_url": "https://avatars.githubusercontent.com/u/74297?v=4"
        },
        {
          "type": "User",
          "login": "proy9714",
          "commits": 35,
          "avatar_url": "https://avatars.githubusercontent.com/u/37247296?v=4"
        },
        {
          "type": "User",
          "login": "gregdrizz",
          "commits": 28,
          "avatar_url": "https://avatars.githubusercontent.com/u/52860985?v=4"
        },
        {
          "type": "User",
          "login": "kesamet",
          "commits": 23,
          "avatar_url": "https://avatars.githubusercontent.com/u/8352701?v=4"
        },
        {
          "type": "User",
          "login": "oldrepublicwizard",
          "commits": 20,
          "avatar_url": "https://avatars.githubusercontent.com/u/2219836?v=4"
        }
      ],
      "contributors_sampled": 98,
      "top_contributor_share": 0.534
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "build.yml",
        "deploy.yml",
        "docker-build.yml",
        "llm-costs.yml",
        "plugin-quality-gate.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [
        ".eslintrc.json"
      ],
      "has_editorconfig": false,
      "has_linter_config": true,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 10,
            "reason": "no binaries found in the repo",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": null,
            "reason": "internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": 8,
            "reason": "8 out of 9 merged PRs checked by a CI test -- score normalized to 8",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 1,
            "reason": "Found 1/9 approved changesets -- score normalized to 1",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 10,
            "reason": "project has 13 contributing companies or organizations",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 10,
            "reason": "no dangerous workflow patterns detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 10,
            "reason": "update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 10,
            "reason": "30 commit(s) and 18 issue activity found in the last 90 days -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": null,
            "reason": "packaging workflow not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 0,
            "reason": "dependency not pinned by hash detected -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "SAST tool is not run on all commits -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 10,
            "reason": "security policy file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": null,
            "reason": "no releases found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 0,
            "reason": "detected GitHub workflow tokens with excessive permissions",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 10,
            "reason": "0 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "5d84d2f5553e70a2765a8ff3a0d2672d60437ce8",
        "ran_at": "2026-07-27T00:32:44Z",
        "aggregate_score": 6.2,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": true,
      "has_dependabot_config": true
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-23T19:32:44Z",
      "oldest_open_prs": [
        {
          "number": 1007,
          "created_at": "2024-12-06T06:45:54Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1242,
          "created_at": "2025-03-08T07:09:38Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1588,
          "created_at": "2026-01-08T15:55:28Z",
          "last_comment_at": "2026-01-21T13:00:19Z",
          "last_comment_author": "assafelovic"
        },
        {
          "number": 1610,
          "created_at": "2026-01-30T03:28:43Z",
          "last_comment_at": "2026-05-28T06:53:32Z",
          "last_comment_author": "assafelovic"
        },
        {
          "number": 1612,
          "created_at": "2026-01-31T17:09:47Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1616,
          "created_at": "2026-01-31T17:12:14Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1671,
          "created_at": "2026-03-12T17:36:26Z",
          "last_comment_at": "2026-04-16T17:30:19Z",
          "last_comment_author": "assafelovic"
        },
        {
          "number": 1755,
          "created_at": "2026-04-28T03:09:44Z",
          "last_comment_at": "2026-06-24T06:10:24Z",
          "last_comment_author": "octo-patch"
        },
        {
          "number": 1756,
          "created_at": "2026-04-28T03:20:49Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1782,
          "created_at": "2026-05-21T13:06:32Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1786,
          "created_at": "2026-05-27T04:11:24Z",
          "last_comment_at": "2026-07-16T07:28:45Z",
          "last_comment_author": "feder-cr"
        },
        {
          "number": 1814,
          "created_at": "2026-06-21T18:17:39Z",
          "last_comment_at": "2026-06-29T19:22:22Z",
          "last_comment_author": "ilya-bogin-keenable"
        },
        {
          "number": 1818,
          "created_at": "2026-06-23T20:02:09Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1821,
          "created_at": "2026-06-26T17:39:19Z",
          "last_comment_at": "2026-07-02T18:28:39Z",
          "last_comment_author": "SeanHe727"
        },
        {
          "number": 1839,
          "created_at": "2026-06-29T06:10:36Z",
          "last_comment_at": "2026-07-14T12:16:55Z",
          "last_comment_author": "Bartok9"
        },
        {
          "number": 1849,
          "created_at": "2026-07-02T15:32:48Z",
          "last_comment_at": "2026-07-02T15:39:16Z",
          "last_comment_author": "axiom-of-choice"
        },
        {
          "number": 1850,
          "created_at": "2026-07-02T23:17:05Z",
          "last_comment_at": "2026-07-09T21:13:48Z",
          "last_comment_author": "TF-Caesar"
        },
        {
          "number": 1852,
          "created_at": "2026-07-03T06:08:56Z",
          "last_comment_at": "2026-07-14T12:16:34Z",
          "last_comment_author": "Bartok9"
        },
        {
          "number": 1853,
          "created_at": "2026-07-03T22:32:40Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1858,
          "created_at": "2026-07-05T00:56:31Z",
          "last_comment_at": null,
          "last_comment_author": null
        }
      ],
      "last_merged_pr_at": "2026-07-14T13:13:34Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": [
        {
          "number": 1468,
          "created_at": "2025-07-21T09:06:53Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1483,
          "created_at": "2025-08-14T23:58:30Z",
          "last_comment_at": "2025-08-16T11:07:31Z",
          "last_comment_author": "assafelovic"
        },
        {
          "number": 1495,
          "created_at": "2025-09-04T04:09:44Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1502,
          "created_at": "2025-09-19T11:19:27Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1517,
          "created_at": "2025-09-29T09:51:03Z",
          "last_comment_at": "2025-09-30T17:42:54Z",
          "last_comment_author": "ElishaKay"
        },
        {
          "number": 1520,
          "created_at": "2025-09-29T16:50:51Z",
          "last_comment_at": "2026-07-17T21:21:33Z",
          "last_comment_author": "FlorianFranzen"
        },
        {
          "number": 1523,
          "created_at": "2025-09-30T16:18:11Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1526,
          "created_at": "2025-10-02T16:32:54Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1534,
          "created_at": "2025-10-16T19:14:59Z",
          "last_comment_at": "2025-12-01T15:31:11Z",
          "last_comment_author": "aclifton314"
        },
        {
          "number": 1572,
          "created_at": "2025-12-08T13:37:31Z",
          "last_comment_at": "2026-06-14T05:26:48Z",
          "last_comment_author": "Socialpranker"
        },
        {
          "number": 1575,
          "created_at": "2025-12-12T18:42:51Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1580,
          "created_at": "2025-12-16T11:38:33Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1581,
          "created_at": "2026-01-01T01:47:45Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1582,
          "created_at": "2026-01-05T10:37:43Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1586,
          "created_at": "2026-01-08T07:26:33Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1591,
          "created_at": "2026-01-12T04:47:50Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1602,
          "created_at": "2026-01-27T06:30:32Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1603,
          "created_at": "2026-01-28T02:05:01Z",
          "last_comment_at": "2026-01-28T19:14:58Z",
          "last_comment_author": "TheSpaceGod"
        },
        {
          "number": 1605,
          "created_at": "2026-01-28T19:07:19Z",
          "last_comment_at": "2026-01-28T19:51:53Z",
          "last_comment_author": "TheSpaceGod"
        },
        {
          "number": 1617,
          "created_at": "2026-01-31T20:35:09Z",
          "last_comment_at": null,
          "last_comment_author": null
        }
      ]
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/assafelovic/gpt-researcher",
    "host": "github.com",
    "name": "gpt-researcher",
    "owner": "assafelovic"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "good",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 81,
      "inputs": {
        "security": 70,
        "vitality": 93,
        "community": 89,
        "governance": 67,
        "engineering": 84
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "excellent",
        "name": "Vitality",
        "value": 93,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "excellent",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 89,
            "inputs": {
              "commits_last_year": 372,
              "human_commit_share": 1,
              "days_since_last_push": 8,
              "active_weeks_last_year": 46
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 8 days ago",
                "points": 28.8,
                "status": "partial",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 8
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "46/52 weeks with commits",
                "points": 31.8,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 46
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "372 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 372
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "30 commit(s) and 18 issue activity found in the last 90 days -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "releases_count": 72,
              "latest_release_tag": "v3.6.0",
              "releases_from_tags": false,
              "days_since_latest_release": 8,
              "mean_days_between_releases": 24
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "72 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 72
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 8 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 8
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~24 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 24
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "maintained",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": null,
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": 12,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "last human commit 12 days ago",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_maintained",
                    "params": {
                      "days": 12
                    }
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "excellent",
        "name": "Community & Adoption",
        "value": 89,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "excellent",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 97,
            "inputs": {
              "forks": 3866,
              "stars": 28654,
              "watchers": 168,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "28,654 stars",
                "points": 60,
                "status": "met",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 28654
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "3,866 forks",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 3866
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "168 watchers",
                "points": 12.4,
                "status": "partial",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 168
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "excellent",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 85,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": true,
              "has_issue_template": false,
              "has_code_of_conduct": true,
              "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": 13.5,
                "status": "met",
                "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": "good",
            "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": 82,
            "inputs": {
              "packages": [
                "gpt-researcher"
              ],
              "dependents": null,
              "ecosystems": "pypi",
              "total_downloads": null,
              "monthly_downloads": 86471
            },
            "components": [
              {
                "key": "monthly_downloads",
                "name": "Monthly downloads",
                "detail": "86,471 downloads/month across pypi",
                "points": 65.8,
                "status": "partial",
                "details": [
                  {
                    "code": "downloads_monthly",
                    "params": {
                      "count": 86471,
                      "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": 67,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "at_risk",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 43,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 98,
              "top_contributor_share": 0.534
            },
            "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 53% of commits",
                "points": 10.5,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 53
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "98 contributors",
                "points": 13.5,
                "status": "met",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 98
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 13 contributing companies or organizations",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "moderate",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 68,
            "inputs": {
              "merged_prs": 571,
              "open_issues": 44,
              "closed_issues": 677,
              "issue_closed_ratio": 0.939,
              "closed_unmerged_prs": 390
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "94% of issues closed",
                "points": 43.9,
                "status": "partial",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 94
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "571/961 decided PRs merged",
                "points": 22.7,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 571,
                      "decided": 961
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 1/9 approved changesets -- score normalized to 1",
                "points": 1.5,
                "status": "partial",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "moderate",
            "name": "Ownership & stewardship",
            "note": "Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "verified_domain"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 68,
            "inputs": {
              "followers": 1219,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "assafelovic",
              "public_repos": 23,
              "account_age_days": 4015
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "personal (user) account",
                "points": 10,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_personal",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": "not applicable to user accounts",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_applicable_to_user_accounts",
                    "params": {}
                  }
                ],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "1,219 followers of assafelovic",
                "points": 22.2,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 1219,
                      "login": "assafelovic"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "23 public repos, account ~11 yr old",
                "points": 22.1,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 23
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 11
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "gpt-researcher"
              ],
              "ecosystems": "pypi",
              "any_deprecated": false,
              "min_days_since_publish": 8
            },
            "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 8 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 8
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "110 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 110
                    }
                  }
                ],
                "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": "good",
        "name": "Engineering Quality",
        "value": 84,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "good",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 80,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": true,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "5 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 5
                    }
                  }
                ],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 24,
                "status": "met",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": ".eslintrc.json",
                "points": 16,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".eslintrc.json"
                    }
                  }
                ],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "8 out of 9 merged PRs checked by a CI test -- score normalized to 8",
                "points": 16,
                "status": "partial",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "excellent",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 90,
            "inputs": {
              "topics": [
                "ai",
                "python",
                "agent",
                "automation",
                "research",
                "search",
                "webscraping",
                "llms",
                "deepresearch",
                "mcp",
                "mcp-server"
              ],
              "has_wiki": false,
              "homepage": "https://gptr.dev",
              "has_readme": true,
              "has_docs_dir": true,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 25,
                "status": "met",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": "https://gptr.dev",
                "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": "11 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 11
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "good",
        "name": "Security",
        "value": 70,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "moderate",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Branch-Protection, Packaging, Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "branch_protection",
                    "packaging",
                    "signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 62,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 15,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 3,
              "scorecard_aggregate": 6.2
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "8 out of 9 merged PRs checked by a CI test -- score normalized to 8",
                "points": 2,
                "status": "partial",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 1/9 approved changesets -- score normalized to 1",
                "points": 0.8,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 13 contributing companies or organizations",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "update tool detected",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "30 commit(s) and 18 issue activity found in the last 90 days -- score normalized to 10",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow not detected",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool is not run on all commits -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file detected",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "detected GitHub workflow tokens with excessive permissions",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "0 existing vulnerabilities detected",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "dependency_advisories",
            "band": "excellent",
            "name": "Dependency advisories",
            "note": "Excluded from scoring (no data or not applicable): No advisories left outstanding. Remaining weights renormalized. Matched the pypi:gpt-researcher@0.16.0 runtime dependency closure — what installing the published package pulls in — 159 packages. Reachability is not analyzed.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "no_advisories_left_outstanding"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              },
              {
                "code": "advisories_scope_published",
                "params": {
                  "package": "pypi:gpt-researcher@0.16.0",
                  "assessed": 159
                }
              },
              {
                "code": "advisories_reachability",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "source": "osv",
              "advisories": 0,
              "affected_packages": 0,
              "assessed_packages": 159,
              "unassessed_packages": 0,
              "affected_by_severity": "none",
              "direct_affected_packages": 0
            },
            "components": [
              {
                "key": "direct_dependencies_free_of_known_advisories",
                "name": "Direct dependencies free of known advisories",
                "detail": "no direct dependency carries a known advisory",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "no_direct_advisories",
                    "params": {}
                  }
                ],
                "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": "no advisory carries a publication date",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "advisories_no_publication_date",
                    "params": {}
                  }
                ],
                "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": 159,
              "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": 4
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "no confirmed policy-scope location match",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "jurisdiction_no_match",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "good",
        "name": "AI Readiness",
        "value": 80,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "excellent",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 85,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.95,
              "agent_instruction_files": [
                ".cursorrules"
              ],
              "agent_instruction_max_bytes": 5937
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": ".cursorrules",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".cursorrules"
                    }
                  }
                ],
                "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": "95 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 95,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "moderate",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 69,
            "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": [
                "frontend/nextjs/tsconfig.json"
              ],
              "agent_commit_share": 0.13,
              "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": ".eslintrc.json",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".eslintrc.json"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "frontend/nextjs/tsconfig.json",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "frontend/nextjs/tsconfig.json"
                    }
                  }
                ],
                "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": "13 of the last 100 commits agent-authored or agent-credited",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 13,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "dependency automation configured, none observed in the sampled commits",
                "points": 5,
                "status": "partial",
                "details": [
                  {
                    "code": "dependency_bot_config_only",
                    "params": {}
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "good",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 82,
            "inputs": {
              "primary_language": "Python",
              "largest_source_bytes": 84260,
              "source_files_sampled": 367,
              "oversized_source_files": 1
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "Python with type-check config (frontend/nextjs/tsconfig.json)",
                "points": 27,
                "status": "partial",
                "details": [
                  {
                    "code": "typecheck_config_language",
                    "params": {
                      "files": "frontend/nextjs/tsconfig.json",
                      "language": "Python"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "1/367 source files over 60KB",
                "points": 54.9,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 367,
                      "oversized": 1
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "excellent",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "example_dirs": [
                "examples",
                "notebooks"
              ],
              "has_mcp_signal": true,
              "api_schema_files": [
                ".triage/engagement.graphql"
              ]
            },
            "components": [
              {
                "key": "api_schema_openapi_graphql_proto",
                "name": "API schema (OpenAPI/GraphQL/proto)",
                "detail": ".triage/engagement.graphql",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".triage/engagement.graphql"
                    }
                  }
                ],
                "max_points": 40
              },
              {
                "key": "mcp_server",
                "name": "MCP server",
                "detail": null,
                "points": 20,
                "status": "met",
                "details": [],
                "max_points": 20
              },
              {
                "key": "runnable_examples",
                "name": "Runnable examples",
                "detail": "examples, notebooks",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "examples, notebooks"
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token",
    "Could not fetch npm package 'simple_js_test' from its registry"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-27T00:33:25.772155Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/a/assafelovic/gpt-researcher.svg",
  "full_name": "assafelovic/gpt-researcher",
  "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.27.0 — metodología completa · wiki de métricas.

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