Öffentliches Register
Software-GesundheitsberichtSchema 0.27.0 · Metriken 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 Sterne⑂ 3.866 Forksseit Mai 2023Auf GitHub ansehen ↗

assafelovic/gpt-researcher erreicht einen Gesundheitsindex von 81 von 100 und liegt damit im Bereich Gut. Am stärksten schneidet es bei Vitality (93/100) ab, am schwächsten bei Sustainability & Governance (67/100). Zuletzt vor 8 Tagen aktualisiert. Ein einzelner Mitwirkender trägt den Großteil der jüngsten Arbeit.

81
gesamt / 100
Gut

Software-Gesundheitsindex

Metriken werden auf einer Skala von 1–100 in gewichtete Kategorien gruppiert. Der Gesamtwert beginnt als ihr Mittel; sobald öffentliche Evidenz die Richtlinie für Hochrisikojurisdiktionen auslöst, wird die Bewertung angepasst und erhält die Obergrenze 49 (Gefährdet). AI Readiness liegt außerhalb.

81
Exzellent85-100Vorbildlich; erfüllt im Wesentlichen alle geprüften Kriterien
Gut70-84Gesund; geringfügige Lücken
Mittel50-69Akzeptabel mit deutlichen Lücken; Überprüfung empfohlen
Gefährdet30-49Erhebliche Schwächen; eine Übernahme erfordert Vorsicht
Kritisch1-29Schwerwiegende Probleme (aufgegeben, nur ein Maintainer, keine Hygiene)
VitalitätCommunity &VerbreitungNachhaltigkeit &GovernanceEngineering-QualitätSicherheitAI Readiness

Bewertungsprofil

Jede Achse ist eine Kategorie. Die Form zählt mehr als der Durchschnitt — ein gesundes Projekt füllt die gesamte Fläche, während ein Profil aus Spitzen und Kratern bedeutet, dass Stärke in einer Dimension Risiken in einer anderen verdeckt.

Eigentümerschaft

Assaf ElovicPersönliches Konto
1.219 Follower23 öffentliche Reposseit Juli 2015Tavily.com

Dieses Repository gehört einem persönlichen Konto. Ein Projekt mit nur einem Eigentümer trägt ein höheres Kontinuitätsrisiko als ein organisationsgetragenes.

Paket-Ökosysteme

RegistryPaketVersionDownloads / MonatVersionenZuletzt veröffentlicht
PyPIgpt-researcher0.16.086.471110vor 8 Tagen

Metriken nach Kategorie

Vitalität

Lebt das Projekt — wird Code geschrieben und werden Releases ausgeliefert?

93Exzellent · 22 % des Gesamtindex
Wie die Bewertung erfolgt
28.8/36Push-Aktualität — letzter Push vor 8 Tagen
31.8/36Commit-Rhythmus — 46/52 Wochen mit Commits
18/18Commit-Volumen — 372 Commits im letzten Jahr
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 18 issue activity found in the last 90 days -- score normalized to 10
Verwendete Eingangsdaten
commits_last_year372
human_commit_share1
days_since_last_push8
active_weeks_last_year46

Release-Disziplin

100Exzellent
Wie die Bewertung erfolgt
27/27Liefert Releases aus — 72 Releases veröffentlicht
36/36Release-Aktualität — letztes Release vor 8 Tagen
27/27Release-Rhythmus — ein Release etwa alle 24 Tage
0/10OpenSSF Scorecard: Signed-Releases — keine Daten
Verwendete Eingangsdaten
releases_count72
latest_release_tagv3.6.0
releases_from_tagsnein
days_since_latest_release8
mean_days_between_releases24
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): OpenSSF Scorecard: Signed-Releases. Die verbleibenden Gewichte wurden renormalisiert.

Community & Verbreitung

Hat das Projekt Nutzer, Downloads, Aufmerksamkeit und ein einladendes Umfeld für Beitragende?

89Exzellent · 18 % des Gesamtindex
Wie die Bewertung erfolgt
60/60Stars — 28.654 Stars
25/25Forks — 3.866 Forks
12.4/15Watcher — 168 Watcher
Verwendete Eingangsdaten
forks3.866
stars28.654
watchers168
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Wie die Bewertung erfolgt
22.5/22.5README
22.5/22.5Lizenz — anerkannte Lizenz (Apache-2.0)
18/18CONTRIBUTING-Leitfaden
13.5/13.5Verhaltenskodex
0/7.2Issue-Vorlage
0/6.3PR-Vorlage
Verwendete Eingangsdaten
has_readmeja
has_licenseja
has_contributingja
has_issue_templatenein
has_code_of_conductja
has_pull_request_templatenein
Wie die Bewertung erfolgt
65.8/80Downloads pro Monat — 86.471 Downloads/Monat über pypi
0/20Abhängige in der Registry — von diesem Ökosystem nicht ausgewiesen
Verwendete Eingangsdaten
packagesgpt-researcher
dependents
ecosystemspypi
total_downloads
monthly_downloads86.471
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Abhängige in der Registry. Die verbleibenden Gewichte wurden renormalisiert.

Nachhaltigkeit & Governance

Überdauert das Projekt die Menschen, die es tragen — Bus-Faktor, Reaktionsfähigkeit, Trägerschaft und Paketpflege?

67Mittel · 24 % des Gesamtindex
Wie die Bewertung erfolgt
9/54Bus-Faktor — 1 Beitragende decken die Hälfte aller Commits ab
10.5/22.5Commit-Verteilung — wichtigste beitragende Person verfasste 53 % der Commits
13.5/13.5Breite der Beitragenden — 98 Beitragende
10/10OpenSSF Scorecard: Contributors — project has 13 contributing companies or organizations
Verwendete Eingangsdaten
bus_factor1
contributors_sampled98
top_contributor_share0,534
Wie die Bewertung erfolgt
43.9/46.8Issue-Lösungsquote — 94 % der Issues geschlossen
22.7/38.3PR-Annahme — 571/961 entschiedene PRs gemergt
1.5/15OpenSSF Scorecard: Code-Review — Found 1/9 approved changesets -- score normalized to 1
Verwendete Eingangsdaten
merged_prs571
open_issues44
closed_issues677
issue_closed_ratio0,939
closed_unmerged_prs390
Wie die Bewertung erfolgt
10/30Organisatorische Trägerschaft — persönliches (Nutzer-)Konto
0/20Verifizierte Domain — für Nutzerkonten nicht anwendbar
22.2/25Reichweite des Inhabers — 1.219 Follower von assafelovic
22.1/25Kontohistorie — 23 öffentliche Repos, Kontoalter ca. 11 Jahre
Verwendete Eingangsdaten
followers1.219
owner_typeUser
is_verified
owner_loginassafelovic
public_repos23
account_age_days4.015
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Verifizierte Domain. Die verbleibenden Gewichte wurden renormalisiert.

Paketpflege

100Exzellent
Wie die Bewertung erfolgt
25/25Veröffentlicht & auflösbar — 1 Paket(e) auf pypi
35/35Veröffentlichungsaktualität — letzte Veröffentlichung vor 8 Tagen
20/20Versionshistorie — 110 veröffentlichte Versionen
20/20Nicht veraltet — aktiv, nicht veraltet oder zurückgezogen
Verwendete Eingangsdaten
packagesgpt-researcher
ecosystemspypi
any_deprecatednein
min_days_since_publish8

Engineering-Qualität

Sind grundlegende Engineering- und Dokumentationspraktiken vorhanden?

84Gut · 20 % des Gesamtindex
Wie die Bewertung erfolgt
24/24CI-Workflows — 5 Workflow(s)
24/24Tests vorhanden
16/16Linter-Konfiguration — .eslintrc.json
0/9.6Pre-Commit-Hooks
0/6.4.editorconfig
16/20OpenSSF Scorecard: CI-Tests — 8 out of 9 merged PRs checked by a CI test -- score normalized to 8
Verwendete Eingangsdaten
has_cija
has_testsja
has_editorconfignein
has_linter_configja
has_precommit_confignein

Dokumentation

90Exzellent
Wie die Bewertung erfolgt
30/30README
25/25Dokumentationsverzeichnis
15/15Dokumentations-/Homepage-Site — https://gptr.dev
10/10Repository-Beschreibung
10/10Topics — 11 Topics
0/10Wiki
Verwendete Eingangsdaten
topicsai, python, agent, automation, research, search, webscraping, llms, deepresearch, mcp, mcp-server
has_wikinein
homepagehttps://gptr.dev
has_readmeja
has_docs_dirja
has_descriptionja

Sicherheit

Sind die sichtbaren Sicherheits- und Lieferkettenpraktiken belastbar, ohne ungeklärte Exposition gegenüber Hochrisikojurisdiktionen?

70Gut · 16 % des Gesamtindex
Wie die Bewertung erfolgt
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — keine Daten
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.5Lizenz — 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 — keine Daten
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 — keine Daten
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
7.5/7.5Vulnerabilities — 0 existing vulnerabilities detected
Verwendete Eingangsdaten
sourceopenssf_scorecard
checks_evaluated15
scorecard_versionv5.5.0
checks_inconclusive3
scorecard_aggregate6,2
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): branch_protection, packaging, signed_releases. Die verbleibenden Gewichte wurden renormalisiert.
Wie die Bewertung erfolgt
35/35Direkte Abhängigkeiten ohne bekannte Advisories — keine direkte Abhängigkeit trägt ein bekanntes Advisory
25/25Indirekte Abhängigkeiten ohne bekannte Advisories — keine indirekte Abhängigkeit trägt ein bekanntes Advisory
0/40Keine offenen Advisories — kein Advisory trägt ein Veröffentlichungsdatum
Verwendete Eingangsdaten
sourceosv
advisories0
affected_packages0
assessed_packages159
unassessed_packages0
affected_by_severitynone
direct_affected_packages0
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Keine offenen Advisories. Die verbleibenden Gewichte wurden renormalisiert. Abgeglichen wurde die Laufzeit-Abhängigkeitshülle von pypi:gpt-researcher@0.16.0 — das, was die Installation des veröffentlichten Pakets nach sich zieht — mit 159 Paketen. Erreichbarkeit wird nicht analysiert.

AI Readiness

Wie gut ist das Repository dafür ausgestattet, mit KI-Coding-Agenten entwickelt und gepflegt zu werden? Ein unabhängiges, experimentelles Badge — Gewicht 0,0, es wird eigenständig ausgewiesen und verändert den Gesamt-Gesundheitswert nicht.

80Gut · 0 % des Gesamtindex
Wie die Bewertung erfolgt
45/45Agentenanweisungen — .cursorrules
0/15Maschinenlesbare Doku (llms.txt)
40/40Lesbare Commit-Historie — 95 von 100 menschlichen Commits benennen ihre Absicht (strukturierter Betreff oder erläuternder Text)
Verwendete Eingangsdaten
has_llms_txtnein
legible_history_share0,95
agent_instruction_files.cursorrules
agent_instruction_max_bytes5.937
Wie die Bewertung erfolgt
0/18Bootstrap mit einem Befehl
22/22Automatisierte Tests
11/11Lint-/Format-Konfiguration — .eslintrc.json
11/11Statische Typprüfung — frontend/nextjs/tsconfig.json
10/10Reproduzierbare Umgebung — Dockerfile
10/10Belegte Agentenpraxis — 13 der letzten 100 Commits von Agenten verfasst oder ihnen zugeschrieben
5/8Automatisierte Wartung — Abhängigkeits-Automatisierung konfiguriert, in den erfassten Commits nicht beobachtet
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Verwendete Eingangsdaten
has_nixnein
has_testsja
lockfiles
has_dockerfileja
typed_languagenein
bootstrap_files
has_devcontainernein
has_linter_configja
typecheck_configsfrontend/nextjs/tsconfig.json
agent_commit_share0,13
toolchain_manifests
dependency_bot_commit_share0
Wie die Bewertung erfolgt
27/45Typprüfbarer Code — Python mit Typprüfungs-Konfiguration (frontend/nextjs/tsconfig.json)
54.9/55Handhabbare Dateigrößen — 1/367 Quelldateien über 60 KB
Verwendete Eingangsdaten
primary_languagePython
largest_source_bytes84.260
source_files_sampled367
oversized_source_files1
Wie die Bewertung erfolgt
40/40API-Schema (OpenAPI/GraphQL/proto) — .triage/engagement.graphql
20/20MCP-Server
40/40Lauffähige Beispiele — examples, notebooks
Verwendete Eingangsdaten
example_dirsexamples, notebooks
has_mcp_signalja
api_schema_files.triage/engagement.graphql

Eckdaten

28.654GitHub-Sterne
98Mitwirkende
372Commits, letzte 12 Monate
8Tage seit letztem Push
72Releases
1Bus-Faktor
44offene Issues
npm, PyPIPaket-Ökosysteme

Warnungen zur Datenerhebung

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

Weitere Details

Stern- und Fork-Verlauf 0 ★ / 3.866 ⇿
0Sterne
3.866Forks
14Releases

Wann jeder Stern und Fork hinzugefügt wurde, von GitHub erfasst und nach Tagen gruppiert. Das kumulierte Wachstum steht direkt über den täglichen Zugängen, aus denen es besteht, sodass beide gegeneinander lesbar sind: stetiger organischer Zuwachs sieht ganz anders aus als ein abrupter, kurzlebiger Ausschlag. Wo dieser Unterschied messbar ist, wird er als Wachstumsauthentizität ausgewiesen.

Es wird nur die jüngste Historie angezeigt — dieses Repository überschreitet das Erfassungsfenster, sodass die früheste Historie nicht erfasst wird.

2.5003.0003.5004.0003.866112025-082026-022026-07
Major 0Minor 3Patch 6
OpenSSF Scorecard 6.2 / 10
6.2Gesamtwert

Unabhängige, werkzeugneutrale Sicherheitsbewertung durch das quelloffene OpenSSF Scorecard. Jede Prüfung honoriert eine Sicherheits-Praxis, nicht das Werkzeug eines bestimmten Anbieters. Prüfungen, die Scorecard nicht ermitteln konnte, sind mit k. A. markiert und vom Sicherheitswert ausgeschlossen (nie als null gezählt).Scorecard v5.5.0 · 2026-07-27 00:32 UTC

10Binary-Artifactsno binaries found in the repo
k. A.Branch-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
k. A.Packagingpackaging 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
k. A.Signed-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
10Vulnerabilities0 existing vulnerabilities detected
Direkte Abhängigkeiten 141
RegistryPaketVersionsvorgabeManifest
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
Alle Abhängigkeiten 236

Vollständig aufgelöster Abhängigkeitssatz aus dem GitHub-Abhängigkeitsgraphen: 142 direkte und 94 indirekte (transitive) Pakete. Die transitive Hülle ist vollständig, wenn das Repository eine Lockfile eincheckt.

RegistryPaketVersionBeziehung
npm@langchain/langgraph-sdk^0.0.1-rc.12direkt
npm@langchain/langgraph-sdk^0.0.1-rc.13direkt
PyPIaiofilesdirekt
PyPIaiohappyeyeballsdirekt
PyPIaiohttpdirekt
PyPIaiosignaldirekt
PyPIannotated-typesdirekt
PyPIanyiodirekt
PyPIarxivdirekt
PyPIattrsdirekt
PyPIbackoffdirekt
PyPIbeautifulsoup4direkt
PyPIbrotlidirekt
PyPIcertifidirekt
PyPIcffidirekt
PyPIchardetdirekt
PyPIcharset-normalizerdirekt
PyPIclickdirekt
PyPIcoloramadirekt
PyPIcryptographydirekt
PyPIcssselect2direkt
PyPIdataclasses-jsondirekt
PyPIdistrodirekt
PyPIdocoptdirekt
PyPIduckduckgo-searchdirekt
PyPIemojidirekt
PyPIfastapidirekt
PyPIfeedparserdirekt
PyPIfilelockdirekt
PyPIfiletypedirekt
PyPIfonttoolsdirekt
PyPIfrozenlistdirekt
PyPIfsspecdirekt
PyPIgreenletdirekt
PyPIh11direkt
PyPIhtml5libdirekt
PyPIhtmldocxdirekt
PyPIhttpcoredirekt
PyPIhttpxdirekt
PyPIhttpx-aiohttpdirekt
PyPIhttpx-ssedirekt
PyPIhuggingface-hubdirekt
PyPIidnadirekt
PyPIimportlib-metadatadirekt
PyPIjinja2direkt
PyPIjiterdirekt
PyPIjoblibdirekt
PyPIjson-repairdirekt
PyPIjson5direkt
PyPIjsonpatchdirekt
PyPIjsonpointerdirekt
PyPIjsonschemadirekt
PyPIjsonschema-specificationsdirekt
PyPIkiwisolverdirekt
PyPIlangchaindirekt
PyPIlangchain-classicdirekt
PyPIlangchain-communitydirekt
PyPIlangchain-coredirekt
PyPIlangchain-ollamadirekt
PyPIlangchain-openaidirekt
PyPIlangchain-text-splittersdirekt
PyPIlangdetectdirekt
PyPIlanggraphdirekt
PyPIlanggraph-checkpointdirekt
PyPIlanggraph-clidirekt
PyPIlanggraph-sdkdirekt
PyPIlangsmithdirekt
PyPIlitellmdirekt
PyPIlogurudirekt
PyPIlxmldirekt
PyPImarkdowndirekt
PyPImarkdown2direkt
PyPImarkupsafedirekt
PyPImarshmallowdirekt
PyPImcpdirekt
PyPImd2pdfdirekt
PyPImistunedirekt
PyPImultidictdirekt
PyPImypy-extensionsdirekt
PyPInest-asynciodirekt
PyPInltkdirekt
PyPInumpydirekt
PyPIolefiledirekt
PyPIollamadirekt
PyPIopenaidirekt
PyPIorjsondirekt
PyPIormsgpackdirekt
PyPIpackagingdirekt
PyPIpillowdirekt
PyPIprimpdirekt
PyPIpropcachedirekt
PyPIpsutildirekt
PyPIpycparserdirekt
PyPIpydanticdirekt
PyPIpydantic-coredirekt
PyPIpydantic-settingsdirekt
PyPIpydyfdirekt
PyPIpymupdfdirekt
PyPIpypdfdirekt
PyPIpyphendirekt
PyPIpython-docxdirekt
PyPIpython-dotenvdirekt
PyPIpython-iso639direkt
PyPIpython-magicdirekt
PyPIpython-multipartdirekt
PyPIpython-oxmsgdirekt
PyPIpyyamldirekt
PyPIrapidfuzzdirekt
PyPIreferencingdirekt
PyPIregexdirekt
PyPIrequestsdirekt
PyPIrequests-toolbeltdirekt
PyPIrpds-pydirekt
PyPIsgmllib3kdirekt
PyPIsixdirekt
PyPIsniffiodirekt
PyPIsoupsievedirekt
PyPIsqlalchemydirekt
PyPIsse-starlettedirekt
PyPIstarlettedirekt
PyPItenacitydirekt
PyPItiktokendirekt
PyPItinycss2direkt
PyPItinyhtml5direkt
PyPItokenizersdirekt
PyPItqdmdirekt
PyPItyping-extensionsdirekt
PyPItyping-inspectdirekt
PyPItyping-inspectiondirekt
PyPIunstructureddirekt
PyPIunstructured-clientdirekt
PyPIurllib3direkt
PyPIuvicorndirekt
PyPIweasyprintdirekt
PyPIwebencodingsdirekt
PyPIwebsocketsdirekt
PyPIwin32-setctimedirekt
PyPIwraptdirekt
PyPIyarldirekt
PyPIzippdirekt
PyPIzopflidirekt
PyPIzstandarddirekt
npm@babel/core^7.26.9indirekt
npm@babel/plugin-syntax-flow^7.26.0indirekt
npm@babel/plugin-transform-typescript^7.26.8indirekt
npm@babel/preset-env^7.26.9indirekt
npm@babel/preset-react^7.26.3indirekt
npm@babel/preset-typescript^7.26.0indirekt
npm@docusaurus/core3.7.0indirekt
npm@docusaurus/preset-classic3.7.0indirekt
npm@docusaurus/theme-mermaid3.7.0indirekt
npm@ducanh2912/next-pwa^10.0.1indirekt
npm@easyops-cn/docusaurus-search-local^0.49.2indirekt
npm@emotion/react^11.10.5indirekt
npm@emotion/styled^11.10.5indirekt
npm@mdx-js/react^3.1.0indirekt
npm@mozilla/readability^0.5.0indirekt
npm@next/third-parties^15.1.6indirekt
npm@rollup/plugin-alias^5.1.1indirekt
npm@rollup/plugin-babel^6.0.4indirekt
npm@rollup/plugin-commonjs^28.0.2indirekt
npm@rollup/plugin-json^6.1.0indirekt
npm@rollup/plugin-node-resolve^16.0.0indirekt
npm@rollup/plugin-replace^6.0.2indirekt
npm@rollup/plugin-typescript^12.1.2indirekt
npm@svgr/webpack^8.1.0indirekt
npm@tailwindcss/typography^0.5.16indirekt
npm@types/jsdom^21.1.6indirekt
npm@types/node^20indirekt
npm@types/react^18indirekt
npm@types/react-dom^18indirekt
npm@types/uuid^10.0.0indirekt
npmautoprefixer^10.4.20indirekt
npmaxios^1.3.2indirekt
npmclsx^1.1.1indirekt
npmdate-fns^4.1.0indirekt
npmdiscord.js^14.16.1indirekt
npmdotenv^16.4.5indirekt
npmeslint^8indirekt
npmeslint-config-next14.2.3indirekt
npmeventsource-parser^1.1.2indirekt
npmexpress^4.17.1indirekt
npmfile-loader^6.2.0indirekt
npmframer-motion^9.0.2indirekt
npmgeist^1.3.1indirekt
npmhast-util-is-element1.1.0indirekt
npmisomorphic-dompurify^3.0.0indirekt
npmjsonrepair^3.8.0indirekt
npmminimatch3.0.5indirekt
npmnext^14.2.28indirekt
npmnext-plausible^3.12.0indirekt
npmnodemon^3.1.4indirekt
npmpostcss^8indirekt
npmprettier^3.2.5indirekt
npmprettier-plugin-tailwindcss^0.6.0indirekt
npmreact^18.0.0indirekt
npmreact^18.0.1indirekt
npmreact-dom^18.0.0indirekt
npmreact-dom^18.0.1indirekt
npmreact-dropzone^14.2.3indirekt
npmreact-ga4^2.1.0indirekt
npmreact-hot-toast^2.4.1indirekt
npmrehype-katex7indirekt
npmrehype-prism-plus^2.0.0indirekt
npmremark^15.0.1indirekt
npmremark-gfm^4.0.1indirekt
npmremark-html^16.0.1indirekt
npmremark-math6indirekt
npmremark-parse^11.0.0indirekt
npmrollup^2.79.2indirekt
npmrollup-plugin-peer-deps-external^2.2.4indirekt
npmrollup-plugin-postcss^4.0.2indirekt
npmrollup-plugin-terser^7.0.2indirekt
npmrollup-plugin-typescript2^0.31.2indirekt
npmtailwindcss^3.4.1indirekt
npmtrim^0.0.3indirekt
npmtypescript^5indirekt
npmurl-loader^4.1.1indirekt
npmws^8.18.0indirekt
npmzod^3.0.0indirekt
npmzod-to-json-schema^3.23.0indirekt
PyPIag2indirekt
PyPIddgsindirekt
PyPIdeepagentsindirekt
PyPIgoogle-genaiindirekt
PyPIjudgesindirekt
PyPIlangchain-mcp-adaptersindirekt
PyPIpandasindirekt
PyPIpython-3-11indirekt
PyPIpython-pptxindirekt
PyPItavily-pythonindirekt
PyPItypes-aiofilesindirekt
PyPItypes-beautifulsoup4indirekt
PyPItypes-coloramaindirekt
PyPItypes-markdownindirekt
PyPItypes-requestsindirekt
Abhängigkeits-Advisories 0

Die Installation von pypi:gpt-researcher@0.16.0 zieht 159 Pakete nach sich, direkt und transitiv: 0 tragen bekannte Advisories, davon 0 direkte Abhängigkeiten.

Keine bekannten Advisories betreffen die bewerteten Abhängigkeiten.

Ein Advisory bedeutet, dass die im Abhängigkeitsgraphen erfasste Version in den betroffenen Bereich eines Advisories fällt. Erreichbarkeit wird nicht analysiert, und der Graph enthält Entwicklungs- und Test-Pins — ein Fund kann das Werkzeug betreffen und nicht die ausgelieferte Software.

JSON-Rohbericht maschinenlesbar
{
  "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"
}

Bewertungen sind Signale, keine Garantien. Sie spiegeln öffentlich sichtbare Praxis auf GitHub wider — kein Code-Audit und keine Sicherheitsgarantie.

Fehlende Daten werden ausgeschlossen und die Gewichte neu normiert, nie als null bewertet. Die Methodik ist versioniert und offen: Metriken v1.13.0, Schema v0.27.0 — vollständige Methodik · Metriken-Wiki.

Wie ein einzelnes Ergebnis im Gesamtregister steht: aggregierte StatistikenPyPI.