Öffentliches Register
Software-GesundheitsberichtSchema 0.27.0 · Metriken 1.13.0 · 2026-07-25 22:26 UTC

DavideCarvalho / adonis-agent

Governed, durable-ready AI agent (chat + tool-calling + governance + HITL) for AdonisJS — part of the Agora ecosystem

TypeScript · MDXMIT★ 1 Stern⑂ 0 Forksseit Juli 2026Auf GitHub ansehen ↗

DavideCarvalho/adonis-agent erreicht einen Gesundheitsindex von 58 von 100 und liegt damit im Bereich Mittel. Am stärksten schneidet es bei Vitality (74/100) ab, am schwächsten bei Community & Adoption (33/100). Zuletzt vor 4 Tagen aktualisiert. Ein einzelner Mitwirkender trägt den Großteil der jüngsten Arbeit.

58
gesamt / 100
Mittel

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.

58
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

Davi de CarvalhoPersönliches Konto
66 Follower112 öffentliche Reposseit Nov. 2015Mobly

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öffentlichtTags
npm@adonis-agora/agent0.17.03.92224vor 6 Tagenadonisjsadonisaiagentllmtool-callinggovernanceai-sdkdurableagora
npm@adonis-agora/agent-dashboard0.3.21.0647vor 9 Tagenadonisjsadonisaiagentgovernancedashboardspareactspendusageagora

Metriken nach Kategorie

Vitalität

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

74Gut · 22 % des Gesamtindex
Wie die Bewertung erfolgt
36/36Push-Aktualität — letzter Push vor 4 Tagen
2.1/36Commit-Rhythmus — 3/52 Wochen mit Commits
17.6/18Commit-Volumen — 91 Commits im letzten Jahr
0/10OpenSSF Scorecard: Maintained — project was created within the last 90 days. Please review its contents carefully
Verwendete Eingangsdaten
commits_last_year91
human_commit_share0,791
days_since_last_push4
active_weeks_last_year3

Release-Disziplin

100Exzellent
Wie die Bewertung erfolgt
27/27Liefert Releases aus — 29 Releases veröffentlicht
36/36Release-Aktualität — letztes Release vor 6 Tagen
27/27Release-Rhythmus — ein Release etwa alle 0,2 Tage
0/10OpenSSF Scorecard: Signed-Releases — keine Daten
Verwendete Eingangsdaten
releases_count29
latest_release_tag@adonis-agora/agent@0.17.0
releases_from_tagsnein
days_since_latest_release6
mean_days_between_releases0,2
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?

33Gefährdet · 18 % des Gesamtindex
Wie die Bewertung erfolgt
0/60Stars — 1 Stars
0/25Forks — 0 Forks
0/15Watcher — 0 Watcher
Verwendete Eingangsdaten
forks0
stars1
watchers0
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Wie die Bewertung erfolgt
22.5/22.5README
22.5/22.5Lizenz — anerkannte Lizenz (MIT)
0/18CONTRIBUTING-Leitfaden
0/13.5Verhaltenskodex
0/7.2Issue-Vorlage
0/6.3PR-Vorlage
Verwendete Eingangsdaten
has_readmeja
has_licenseja
has_contributingnein
has_issue_templatenein
has_code_of_conductnein
has_pull_request_templatenein
Wie die Bewertung erfolgt
49.3/80Downloads pro Monat — 4.986 Downloads/Monat über npm
0/20Abhängige in der Registry — von diesem Ökosystem nicht ausgewiesen
Verwendete Eingangsdaten
packages@adonis-agora/agent, @adonis-agora/agent-dashboard
dependents
ecosystemsnpm
total_downloads
monthly_downloads4.986
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?

57Mittel · 24 % des Gesamtindex
Wie die Bewertung erfolgt
9/54Bus-Faktor — 1 Beitragende decken die Hälfte aller Commits ab
0/22.5Commit-Verteilung — wichtigste beitragende Person verfasste 100 % der Commits
1.4/13.5Breite der Beitragenden — 1 Beitragende
3/10OpenSSF Scorecard: Contributors — project has 1 contributing companies or organizations -- score normalized to 3
Verwendete Eingangsdaten
bus_factor1
contributors_sampled1
top_contributor_share1
Wie die Bewertung erfolgt
0/46.8Issue-Lösungsquote — keine Issues oder keine Daten
38.2/38.3PR-Annahme — 39/39 entschiedene PRs gemergt
0/15OpenSSF Scorecard: Code-Review — Found 0/27 approved changesets -- score normalized to 0
Verwendete Eingangsdaten
merged_prs39
open_issues0
closed_issues0
issue_closed_ratio
closed_unmerged_prs0
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Issue-Lösungsquote. Die verbleibenden Gewichte wurden renormalisiert.
Wie die Bewertung erfolgt
10/30Organisatorische Trägerschaft — persönliches (Nutzer-)Konto
0/20Verifizierte Domain — für Nutzerkonten nicht anwendbar
13.1/25Reichweite des Inhabers — 66 Follower von DavideCarvalho
25/25Kontohistorie — 112 öffentliche Repos, Kontoalter ca. 10 Jahre
Verwendete Eingangsdaten
followers66
owner_typeUser
is_verified
owner_loginDavideCarvalho
public_repos112
account_age_days3.917
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 — 2 Paket(e) auf npm
35/35Veröffentlichungsaktualität — letzte Veröffentlichung vor 6 Tagen
20/20Versionshistorie — 24 veröffentlichte Versionen
20/20Nicht veraltet — aktiv, nicht veraltet oder zurückgezogen
Verwendete Eingangsdaten
packages@adonis-agora/agent, @adonis-agora/agent-dashboard
ecosystemsnpm
any_deprecatednein
min_days_since_publish6

Engineering-Qualität

Sind grundlegende Engineering- und Dokumentationspraktiken vorhanden?

74Gut · 20 % des Gesamtindex
Wie die Bewertung erfolgt
24/24CI-Workflows — 2 Workflow(s)
24/24Tests vorhanden
16/16Linter-Konfiguration — biome.json
0/9.6Pre-Commit-Hooks
0/6.4.editorconfig
10/20OpenSSF Scorecard: CI-Tests — 4 out of 7 merged PRs checked by a CI test -- score normalized to 5
Verwendete Eingangsdaten
has_cija
has_testsja
has_editorconfignein
has_linter_configja
has_precommit_confignein
Wie die Bewertung erfolgt
30/30README
25/25Dokumentationsverzeichnis
0/15Dokumentations-/Homepage-Site
10/10Repository-Beschreibung
0/10Topics
10/10Wiki
Verwendete Eingangsdaten
topics
has_wikija
homepage
has_readmeja
has_docs_dirja
has_descriptionja

Sicherheit

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

44Gefährdet · 16 % des Gesamtindex

Sicherheitslage

30Gefährdet
Wie die Bewertung erfolgt
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — branch protection not enabled on development/release branches
1.2/2.5CI-Tests — 4 out of 7 merged PRs checked by a CI test -- score normalized to 5
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 0/27 approved changesets -- score normalized to 0
0.8/2.5Contributors — project has 1 contributing companies or organizations -- score normalized to 3
10/10Dangerous-Workflow — no dangerous workflow patterns detected
0/7.5Dependency-Update-Tool — no update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5Lizenz — license file detected
0/7.5Maintained — project was created within the last 90 days. Please review its contents carefully
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
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — keine Daten
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
6/7.5Vulnerabilities — 2 existing vulnerabilities detected
Verwendete Eingangsdaten
sourceopenssf_scorecard
checks_evaluated16
scorecard_versionv5.5.0
checks_inconclusive2
scorecard_aggregate3
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): 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_packages1
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 npm:@adonis-agora/agent@0.17.0 — das, was die Installation des veröffentlichten Pakets nach sich zieht — mit 1 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.

62Mittel · 0 % des Gesamtindex
Wie die Bewertung erfolgt
0/45Agentenanweisungen — keine CLAUDE.md / AGENTS.md / Editor-Regeln
0/15Maschinenlesbare Doku (llms.txt)
40/40Lesbare Commit-Historie — 71 von 72 menschlichen Commits benennen ihre Absicht (strukturierter Betreff oder erläuternder Text)
Verwendete Eingangsdaten
has_llms_txtnein
legible_history_share0,986
agent_instruction_files
agent_instruction_max_bytes
Wie die Bewertung erfolgt
0/18Bootstrap mit einem Befehl
22/22Automatisierte Tests
11/11Lint-/Format-Konfiguration — biome.json
11/11Statische Typprüfung — packages/adonis/tsconfig.json, packages/dashboard/tsconfig.json
10/10Reproduzierbare Umgebung — lockfile
10/10Belegte Agentenpraxis — 61 der letzten 91 Commits von Agenten verfasst oder ihnen zugeschrieben
0/8Automatisierte Wartung — keine automatisierten Abhängigkeits-Updates beobachtet
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Verwendete Eingangsdaten
has_nixnein
has_testsja
lockfilespnpm-lock.yaml
has_dockerfilenein
typed_languageja
bootstrap_files
has_devcontainernein
has_linter_configja
typecheck_configspackages/adonis/tsconfig.json, packages/dashboard/tsconfig.json
agent_commit_share0,67
toolchain_manifests
dependency_bot_commit_share0
Wie die Bewertung erfolgt
45/45Typprüfbarer Code — TypeScript (statisch typisiert)
55/55Handhabbare Dateigrößen — 0/198 Quelldateien über 60 KB
Verwendete Eingangsdaten
primary_languageTypeScript
largest_source_bytes39.439
source_files_sampled198
oversized_source_files0

Eckdaten

1GitHub-Sterne
1Mitwirkende
91Commits, letzte 12 Monate
4Tage seit letztem Push
29Releases
1Bus-Faktor
0offene Issues
npmPaket-Ökosysteme

Warnungen zur Datenerhebung

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

Weitere Details

OpenSSF Scorecard 3.0 / 10
3.0Gesamtwert

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-25 22:25 UTC

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
5CI-Tests4 out of 7 merged PRs checked by a CI test -- score normalized to 5
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/27 approved changesets -- score normalized to 0
3Contributorsproject has 1 contributing companies or organizations -- score normalized to 3
10Dangerous-Workflowno dangerous workflow patterns detected
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
0Maintainedproject was created within the last 90 days. Please review its contents carefully
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
0Security-Policysecurity policy file not detected
k. A.Signed-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
8Vulnerabilities2 existing vulnerabilities detected
Direkte Abhängigkeiten 1
RegistryPaketVersionsvorgabeManifest
npm@standard-schema/spec^1.0.0packages/adonis/package.json
Alle Abhängigkeiten nicht erhoben

Der aufgelöste Abhängigkeitssatz konnte für diesen Bericht nicht erhoben werden: GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Abhängigkeits-Advisories 0

Die Installation von npm:@adonis-agora/agent@0.17.0 zieht 1 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": [],
      "is_fork": false,
      "size_kb": 955,
      "has_wiki": true,
      "homepage": null,
      "languages": {
        "CSS": 9569,
        "MDX": 166495,
        "HTML": 316,
        "JavaScript": 2166,
        "TypeScript": 916381
      },
      "pushed_at": "2026-07-21T17:21:33Z",
      "created_at": "2026-07-07T07:24:46Z",
      "owner_type": "User",
      "updated_at": "2026-07-21T17:21:51Z",
      "description": "Governed, durable-ready AI agent (chat + tool-calling + governance + HITL) for AdonisJS — part of the Agora ecosystem",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "master",
      "license_spdx_raw": "MIT",
      "primary_language": "TypeScript",
      "significant_languages": [
        "TypeScript",
        "MDX"
      ]
    },
    "owner": {
      "blog": null,
      "name": "Davi de Carvalho",
      "type": "User",
      "login": "DavideCarvalho",
      "company": "Mobly",
      "location": "Santos, São Paulo",
      "followers": 66,
      "avatar_url": "https://avatars.githubusercontent.com/u/15630886?v=4",
      "created_at": "2015-11-03T12:54:23Z",
      "is_verified": null,
      "public_repos": 112,
      "account_age_days": 3917
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "@adonis-agora/agent@0.17.0",
          "kind": "other",
          "published_at": "2026-07-19T22:19:26Z"
        },
        {
          "tag": "@adonis-agora/agent@0.16.0",
          "kind": "other",
          "published_at": "2026-07-19T20:39:13Z"
        },
        {
          "tag": "@adonis-agora/agent@0.15.0",
          "kind": "other",
          "published_at": "2026-07-19T15:17:16Z"
        },
        {
          "tag": "@adonis-agora/agent@0.14.0",
          "kind": "other",
          "published_at": "2026-07-19T13:57:05Z"
        },
        {
          "tag": "@adonis-agora/agent@0.13.3",
          "kind": "other",
          "published_at": "2026-07-19T00:23:43Z"
        },
        {
          "tag": "@adonis-agora/agent@0.13.2",
          "kind": "other",
          "published_at": "2026-07-18T22:57:07Z"
        },
        {
          "tag": "@adonis-agora/agent@0.13.1",
          "kind": "other",
          "published_at": "2026-07-18T21:40:01Z"
        },
        {
          "tag": "@adonis-agora/agent@0.13.0",
          "kind": "other",
          "published_at": "2026-07-18T20:58:02Z"
        },
        {
          "tag": "@adonis-agora/agent@0.12.0",
          "kind": "other",
          "published_at": "2026-07-18T14:07:12Z"
        },
        {
          "tag": "@adonis-agora/agent@0.11.0",
          "kind": "other",
          "published_at": "2026-07-18T11:48:22Z"
        },
        {
          "tag": "@adonis-agora/agent@0.10.1",
          "kind": "other",
          "published_at": "2026-07-17T23:44:57Z"
        },
        {
          "tag": "@adonis-agora/agent@0.10.0",
          "kind": "other",
          "published_at": "2026-07-17T21:21:21Z"
        },
        {
          "tag": "@adonis-agora/agent@0.9.0",
          "kind": "other",
          "published_at": "2026-07-17T20:51:21Z"
        },
        {
          "tag": "@adonis-agora/agent@0.8.0",
          "kind": "other",
          "published_at": "2026-07-17T18:47:21Z"
        },
        {
          "tag": "@adonis-agora/agent@0.7.1",
          "kind": "other",
          "published_at": "2026-07-17T01:32:09Z"
        },
        {
          "tag": "@adonis-agora/agent@0.7.0",
          "kind": "other",
          "published_at": "2026-07-16T23:49:55Z"
        },
        {
          "tag": "@adonis-agora/agent@0.6.0",
          "kind": "other",
          "published_at": "2026-07-16T21:56:09Z"
        },
        {
          "tag": "@adonis-agora/agent@0.5.0",
          "kind": "other",
          "published_at": "2026-07-16T21:21:29Z"
        },
        {
          "tag": "@adonis-agora/agent-dashboard@0.3.2",
          "kind": "other",
          "published_at": "2026-07-16T21:21:26Z"
        },
        {
          "tag": "@adonis-agora/agent-dashboard@0.3.1",
          "kind": "other",
          "published_at": "2026-07-16T20:27:33Z"
        },
        {
          "tag": "@adonis-agora/agent-dashboard@0.3.0",
          "kind": "other",
          "published_at": "2026-07-16T19:21:01Z"
        },
        {
          "tag": "@adonis-agora/agent@0.4.1",
          "kind": "other",
          "published_at": "2026-07-16T18:37:27Z"
        },
        {
          "tag": "@adonis-agora/agent-dashboard@0.2.2",
          "kind": "other",
          "published_at": "2026-07-16T17:42:35Z"
        },
        {
          "tag": "@adonis-agora/agent@0.4.0",
          "kind": "other",
          "published_at": "2026-07-16T17:42:32Z"
        },
        {
          "tag": "@adonis-agora/agent@0.3.1",
          "kind": "other",
          "published_at": "2026-07-16T16:54:41Z"
        },
        {
          "tag": "@adonis-agora/agent@0.3.0",
          "kind": "other",
          "published_at": "2026-07-16T12:24:08Z"
        },
        {
          "tag": "@adonis-agora/agent-dashboard@0.2.1",
          "kind": "other",
          "published_at": "2026-07-16T12:24:05Z"
        },
        {
          "tag": "@adonis-agora/agent@0.2.0",
          "kind": "other",
          "published_at": "2026-07-15T23:46:47Z"
        },
        {
          "tag": "@adonis-agora/agent-dashboard@0.2.0",
          "kind": "other",
          "published_at": "2026-07-15T23:46:44Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "f984b3622275bb7bb4c24818f69a0367530988cf",
          "body": "Co-authored-by: Davi de Carvalho <davi.carvalho96@gmail.com>",
          "is_bot": false,
          "headline": "docs: README do pacote @adonis-agora/agent (#39)",
          "author_name": "Davi de Carvalho",
          "author_login": "DavideCarvalho",
          "committed_at": "2026-07-21T17:21:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ce45ee28f5108971d424996415bd498e1b8d3978",
          "body": "Adiciona \"prepack\" espelhando o build de release em cada pacote\n(@adonis-agora/agent e @adonis-agora/agent-dashboard). Sem isso, um\nchangeset publish manual pode publicar artefato stale.\n\nFormato (biome check) já estava limpo neste repo, nenhuma correção\nnecessária.\n\nCo-authored-by: Davi de Carvalho <davi.carvalho96@gmail.com>",
          "is_bot": false,
          "headline": "chore: guarda de prepack nos pacotes publicáveis (#38)",
          "author_name": "Davi de Carvalho",
          "author_login": "DavideCarvalho",
          "committed_at": "2026-07-21T17:13:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "19a6309ca9af69c3c21f8ea12433f4c712002fd1",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore: version packages (#37)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-19T22:18:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0c3c1c01e52d588c9aaaae8d2467999937233687",
          "body": "… do client (#36)\n\nFontes grandes (ex.: PDF de 236 pgs -> 676 chunks) viravam um único upsert de\nvários MB que estolava e abortava no timeout default de 300s do\n@qdrant/js-client-rest. Fatiar em lotes (upsertBatchSize, default 100) resolve.\n\nCo-authored-by: Davi de Carvalho <davi.carvalho96@gmail.com>\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(rag): batcha QdrantStore.upsert p/ não estourar o timeout de 300s…",
          "author_name": "Davi de Carvalho",
          "author_login": "DavideCarvalho",
          "committed_at": "2026-07-19T22:17:37Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "ee76688598bb7bcd7be7ad3b32b63725007f9f4b",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore: version packages (#35)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-19T20:38:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5afc7e5cab6de57abc8662e70fc4c72476015c96",
          "body": "* feat(rag): QdrantStore — ensureCollection, upsert, id UUIDv5\n\n* feat(rag): QdrantStore.search + tradução de filtro (ACL por token)\n\n* feat(rag): QdrantStore.remove + listDocuments (scroll+dedupe)\n\n* feat(rag): retrievers.qdrant factory + exports + @qdrant/js-client-rest peer opcional\n\n* fix(rag): \n[…]\npáginas) em vez do fake estático que ignorava args.offset.\n\n---------\n\nCo-authored-by: Davi de Carvalho <davi.carvalho96@gmail.com>\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(rag): backend Qdrant (QdrantStore) ao lado do pgvector (#34)",
          "author_name": "Davi de Carvalho",
          "author_login": "DavideCarvalho",
          "committed_at": "2026-07-19T20:20:33Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "440fb011d22184cf049710df873afa416aa32d19",
          "body": "Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(release): version @adonis-agora/agent 0.15.0",
          "author_name": "Davi de Carvalho",
          "author_login": null,
          "committed_at": "2026-07-19T15:16:43Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "fbca2a9da0e85efeaa6c40c5bdd7fb40194c6c8f",
          "body": "…evel imports\n\nA tool file that imports an Adonis service singleton at module top (e.g.\n@adonisjs/lucid/services/db) evaluated it during the provider's boot(), where the\nsingleton's app can still be uninitialized (pruned prod build → 'Cannot read\nproperties of undefined (reading booted)'), throwing \n[…]\nry is a container singleton read per-request by the deps factory, and booted\ncallbacks run before the HTTP server accepts traffic.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(agent): defer tool discovery to app.booted so tools may use top-l…",
          "author_name": "Davi de Carvalho",
          "author_login": null,
          "committed_at": "2026-07-19T15:16:30Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "ae770e1f027c3ea8800d57975f10322ab25fc6f1",
          "body": "Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(release): version @adonis-agora/agent 0.14.0",
          "author_name": "Davi de Carvalho",
          "author_login": null,
          "committed_at": "2026-07-19T13:54:07Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "72c2ae8a80e6b18b08f93a28e07d7063c324532e",
          "body": "Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(authz): corrige exemplo de import do authz no authorizer",
          "author_name": "Davi de Carvalho",
          "author_login": null,
          "committed_at": "2026-07-19T13:53:12Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "50d68ddd4cd1056d0ceff98447385e43a2e4c885",
          "body": "Add an optional actorResolver to AgentDefinition (same ActorResolver\ntype as the global config.actorResolver). When an agent declares its own\nresolver, the request's actor is resolved with it instead of the\nmodule-global one — letting different agents read the caller from\ndifferent places (e.g. from\n[…]\nrefers the\nagent's resolver over the global, falling back to the global when the\nagent declares none, preserving today's behavior.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(agent): per-agent actorResolver",
          "author_name": "Davi de Carvalho",
          "author_login": null,
          "committed_at": "2026-07-19T13:46:02Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "2ae2efb7aed69b9186595578c6028f885ffd7a2c",
          "body": "Add an optional relevance floor to retrieval. Passages whose score is\nbelow minScore are dropped before the top-K cut, so strict-grounding RAG\nnever cites weakly-related sources. score is higher-is-more-relevant\nacross the lib (cosine similarity, or a negated L2/inner distance), so\nthe floor is a si\n[…]\nearch (memory in\nJS, pgvector in SQL before LIMIT) and the EmbeddingRetriever. Undefined\nminScore is behavior-identical to before.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(rag): RetrieveOptions.minScore",
          "author_name": "Davi de Carvalho",
          "author_login": null,
          "committed_at": "2026-07-19T13:45:55Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "06015a041274438a9a8cbcf92878f8a021ccb141",
          "body": "Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(release): version @adonis-agora/agent",
          "author_name": "Davi de Carvalho",
          "author_login": null,
          "committed_at": "2026-07-19T00:23:12Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "22b207ed263192e8a34922b08d04821f3fa61d8d",
          "body": "… import\n\nThe readdir scan had no per-file try/catch, so one tool throwing at import (e.g. a top-level service\nsingleton with undefined app during boot) aborted the whole scan -> ZERO tools registered -> the model\nnarrates tool calls it was never given, with no visible error. Each import is now guarded: log loudly\nand skip, so the rest register and the failure is diagnosable.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(agent): tool discovery skips (and logs) a tool file that fails to…",
          "author_name": "Davi de Carvalho",
          "author_login": null,
          "committed_at": "2026-07-19T00:22:56Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "f49d1b5eb972d1f60c17abb492e0451179f69149",
          "body": "Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(release): version @adonis-agora/agent 0.13.2",
          "author_name": "Davi de Carvalho",
          "author_login": null,
          "committed_at": "2026-07-18T22:56:37Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "88f70d851070767a70b1b1c7278a1a1e01f578f2",
          "body": "…singleton\n\ntokenSinks.redis() built its client via import('@adonisjs/redis/services/main'), whose module-level\napp is undefined when the sink is resolved during AgentProvider.boot → \"Cannot read properties of\nundefined (reading 'booted')\". The sink threw at boot and, under durable:true, the first f\n[…]\nresolves redis via app.container.make\n('redis') with the live app. No-arg factories stay assignable, so custom sinks keep working.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(agent): resolve Redis sink from app container, not services/main …",
          "author_name": "Davi de Carvalho",
          "author_login": null,
          "committed_at": "2026-07-18T22:56:16Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "8afe0238913de859dee4fc5c18f4007a9b8d1757",
          "body": "Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(release): version @adonis-agora/agent 0.13.1",
          "author_name": "Davi de Carvalho",
          "author_login": null,
          "committed_at": "2026-07-18T21:39:31Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "293843c7fc6082453b80ab4b5272ca3cd31da887",
          "body": "The framework never calls the sink's close(), so the Redis sink's per-run chunks/state keys\naccumulated in Redis forever. Add a sliding TTL (default 1h, refreshed on every write) so a long run\nstays alive and a crashed run still expires. Configurable via tokenSinks.redis({ ttlSeconds }); 0\ndisables.\n[…]\n optional expire() to RedisStreamClient (adonis adapter implements it; BYO clients\nwithout it keep working, just without the TTL).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(agent): expire Redis token-stream keys instead of leaking them",
          "author_name": "Davi de Carvalho",
          "author_login": null,
          "committed_at": "2026-07-18T21:39:12Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "3f9923ee65647182377005800b9c001cde54a4a2",
          "body": "Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(release): version @adonis-agora/agent 0.13.0",
          "author_name": "Davi de Carvalho",
          "author_login": null,
          "committed_at": "2026-07-18T20:57:17Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "b68498606a02e82dc92d01a7aa139eb6ba752bee",
          "body": "New entry points that move the SSE-consumption + reconnection logic out of every consuming app\nand next to the server that emits the envelope:\n\n- @adonis-agora/agent/client: zero-dep, isomorphic. createAgentChatClient({basePath,fetch,getHeaders,\n  resume}) with send()/resume() — posts a turn, parses\n[…]\nadded as an optional peer dependency.\n\n13 new tests (envelope parsing + reconnect/replay/give-up/headers); full suite green (336).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(agent): browser client + React hook for the chat SSE endpoints",
          "author_name": "Davi de Carvalho",
          "author_login": null,
          "committed_at": "2026-07-18T20:42:11Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "d3545d1238cc4424176764f636cf657a979f0608",
          "body": "…ke YAML frontmatter\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(agent): quote generative-ui description — 'event: component' bro…",
          "author_name": "Davi de Carvalho",
          "author_login": null,
          "committed_at": "2026-07-18T19:14:50Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "6c2b48503a01999e5a65ebe70be2030527227fd9",
          "body": "Rewrite the owner-scoped route authorization narration to describe the\nobservable behavior instead of the private `#assertOwner` helper and\ninternal service lookups. Attribute `frameToSse` as the exported helper\nrather than living on the provider.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: remove implementation detail from user docs",
          "author_name": "Davi de Carvalho",
          "author_login": null,
          "committed_at": "2026-07-18T16:39:40Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "5a99d467ccdf382468fafd51dd41f532f923ec10",
          "body": "…ent behavior\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(agent): drop 'since 0.x' version-history framing — describe curr…",
          "author_name": "Davi de Carvalho",
          "author_login": null,
          "committed_at": "2026-07-18T16:16:30Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "a771cb62850cf7c0743a5d9c2d2b14672c2b05f8",
          "body": "New guide page covering ctx.emitComponent, the typed text|component\nstream frame, and the event: component SSE envelope, with server-side\ntool examples (weather card, chart), client-side registry + SSE reader,\ninterleaving, and testing. Wired into meta.json and cross-linked from\nthe tools authoring page and the streaming/HTTP page.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(agent): document Generative UI (0.12.0)",
          "author_name": "Davi de Carvalho",
          "author_login": null,
          "committed_at": "2026-07-18T15:42:26Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "41a1b54dc0fa7dad98dbc551e0fd5260da80e423",
          "body": "Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(agent): bump alpha callout to 0.12.0",
          "author_name": "Davi de Carvalho",
          "author_login": null,
          "committed_at": "2026-07-18T15:19:34Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "4f3e2a7e9e1fef6c40738f46a3d0399e79f42c17",
          "body": "Fill the undocumented shipped surface of @adonis-agora/agent 0.11.0 and\ngive every docs page + subfolder a lucide icon.\n\n- Object-level ownership / IDOR protection: evaluateOwnership + the\n  provider #assertOwner enforcement, added to authorization.mdx (new\n  \"Object-level ownership\" section) and cr\n[…]\nrnance.\n- Every page gains icon: frontmatter and every subfolder meta.json an\n  icon (lucide names verified against lucide-react).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(agent): document security/authoring/RAG surface + icon sweep",
          "author_name": "Davi de Carvalho",
          "author_login": null,
          "committed_at": "2026-07-18T15:18:55Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "050a4fdfa038828dce3cedfabacb02bfc39f88c3",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore: version packages (#33)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-18T14:06:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "03092d46363200b541b0e7a2f418eac2b12bdef9",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'fix/toolresults-user-role'",
          "author_name": "Davi de Carvalho",
          "author_login": null,
          "committed_at": "2026-07-18T12:31:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0998975ca76b88c84b5e428139af0f363f28abbb",
          "body": null,
          "is_bot": false,
          "headline": "chore(agent): release 0.11.0 (generative UI frames)",
          "author_name": "Davi de Carvalho",
          "author_login": null,
          "committed_at": "2026-07-18T12:26:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cc0f809030b7f648129eda1eff433b5b961be121",
          "body": null,
          "is_bot": false,
          "headline": "feat(agent): provider emits event: component for component frames",
          "author_name": "Davi de Carvalho",
          "author_login": null,
          "committed_at": "2026-07-18T12:21:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8baf37c4f64d4e4a879f2a24b0b26da818df386d",
          "body": "…sink",
          "is_bot": false,
          "headline": "feat(agent): AiToolCtx.emitComponent routes a component frame to the …",
          "author_name": "Davi de Carvalho",
          "author_login": null,
          "committed_at": "2026-07-18T12:17:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "aa2b197b998bcef838362e161cc97794a2d85823",
          "body": "Swaps the token stream sink from raw Uint8Array chunks to a typed\nStreamFrame union (`{t:'text',v}` | `{t:'component',name,data}`) across\nevery producer/consumer: the SPI, both in-process sinks, the Redis sink\n(now JSON-encoded instead of base64), the two model providers, the\ninline/durable runners' error-surfacing writes, agent-service's\nsubscribe(), and the SSE pipe in the Adonis provider (text frames only\nfor now, unchanged wire format).",
          "is_bot": false,
          "headline": "feat(agent): typed stream frames (text|component) in token sink",
          "author_name": "Davi de Carvalho",
          "author_login": null,
          "committed_at": "2026-07-18T12:10:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4281c7445a2d3e02df98f25bddb246bc775501b8",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore: version packages (#32)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-18T11:47:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "315eb41839bff2903e96481e7ca98881accdd8cd",
          "body": "…upport) (#31)\n\nTools de classe passam a ser instanciados via container do Adonis, então injeção\nde construtor (@inject) funciona — o app não precisa mais de service-locator\n(app.container.make) dentro do execute(). Resolução lazy no 1º execute e cacheada\n(a descoberta roda no boot() antes do app es\n[…]\ner (lazy +\ncacheado, prove-by-mutation); 12 tests no discovery, 61 nos não-sqlite.\n\nCo-authored-by: Davi de Carvalho <davi.carvalho96@gmail.com>\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(agent): resolve class tools through the IoC container (@inject s…",
          "author_name": "Davi de Carvalho",
          "author_login": "DavideCarvalho",
          "committed_at": "2026-07-18T11:46:28Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "131bb8686e5a87ec699dfc8d06a602256fefdc94",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore: version packages (#30)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-17T23:44:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6f0465d0fcedd3f826687154f60317d180e56651",
          "body": "…p MissingToolResultsError) (#29)\n\n* fix(adonis): stop dropping toolResults on the user-role message branch\n\nmapMessages() in ai-sdk-model.ts handled `role === 'user'` with an early\ncontinue that ran before the toolResults -> tool message mapping, so the\nagent loop's `{ role: 'user', content: '', to\n[…]\ne(agent): biome format for the toolResults regression test\n\n---------\n\nCo-authored-by: Davi de Carvalho <davi.carvalho96@gmail.com>\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(agent): stop dropping toolResults on user-role messages (tool-loo…",
          "author_name": "Davi de Carvalho",
          "author_login": "DavideCarvalho",
          "committed_at": "2026-07-17T23:43:10Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "ba7c8e151fb3fb479b3534186c451e25090745ff",
          "body": null,
          "is_bot": false,
          "headline": "style(agent): biome format for the toolResults regression test",
          "author_name": "Davi de Carvalho",
          "author_login": null,
          "committed_at": "2026-07-17T23:42:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fd77544040bdf8d95c532f3f70c6bd7673cec4ca",
          "body": null,
          "is_bot": false,
          "headline": "chore(changeset): patch for agent tool-loop toolResults fix",
          "author_name": "Davi de Carvalho",
          "author_login": null,
          "committed_at": "2026-07-17T23:40:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ae695fdb359e495ba7e8a4eb8a5fb83207b2c32f",
          "body": "mapMessages() in ai-sdk-model.ts handled `role === 'user'` with an early\ncontinue that ran before the toolResults -> tool message mapping, so the\nagent loop's `{ role: 'user', content: '', toolResults }` feedback carrier\n(agent-loop.ts:582) silently lost its tool results. The AI SDK then saw an\nassi\n[…]\nen there is no\ntool-result payload, since the SDK requires the tool message to immediately\nfollow the assistant tool-call message.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(adonis): stop dropping toolResults on the user-role message branch",
          "author_name": "Davi de Carvalho",
          "author_login": null,
          "committed_at": "2026-07-17T23:40:06Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "4b19c1e92abb7d159f3c12a19198ca803769f6b3",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore: version packages (#28)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-17T21:19:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "426b5040203fae41bb6a6fcc79ac5dbc0e9bc0ad",
          "body": "…fies) (#27)\n\n* feat(agent): run-tracing spans (traceId = runId) over the ctx.step/localStep points\n\nPort of nestjs-agent 6263338 (core-half), re-mapped onto Adonis's single-surface\ndurable model. Point events told you WHAT happened; spans give a turn its SHAPE —\na start/end pair per genuinely-execu\n[…]\n.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Davi de Carvalho <davi.carvalho96@gmail.com>\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(agent): ReadTool/ActionTool — static tool truly bare (mata satis…",
          "author_name": "Davi de Carvalho",
          "author_login": "DavideCarvalho",
          "committed_at": "2026-07-17T21:18:28Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "11117a77f94bbb2aa341a3518a22ecc71fd5fa2a",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore: version packages (#26)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-17T20:49:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e726f1fdcc13e479ffc10c150dc4148bc18efdfb",
          "body": "* feat(ai-sdk): attachment download override + attachmentFetchDownloader\n\nPort of nestjs-agent 6263338 (ai-sdk half) + 3d256d4. The Vercel AI SDK's\nDEFAULT file downloader refuses localhost/private hostnames (SSRF guard),\nwhich kills multimodal attachment parts whose staging presigns against a\nlocal\n[…]\n.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Davi de Carvalho <davi.carvalho96@gmail.com>\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(agent): BaseTool (mata o satisfies) + ToolHandler<I, O> (#25)",
          "author_name": "Davi de Carvalho",
          "author_login": "DavideCarvalho",
          "committed_at": "2026-07-17T20:48:24Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "6ca43990d0069734a0162a87511a35f10f595152",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore: version packages (#24)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-17T18:45:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "19c9ffd9c285c7cab4e487c8bda73f7ce668be9e",
          "body": "…#23)\n\n* docs: spec do authzActorResolver (actor via @agora/context + authz)\n\nDesign de um ActorResolver structural em @adonis-agora/agent/authz que resolve o\nActor a partir do contexto que o authkit já popula (userRef/tenantId) + os papéis\ndo authz (effectiveRoles: união global∪app∪store). Fecha o \n[…]\nzActorResolver\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Davi de Carvalho <davi.carvalho96@gmail.com>\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(agent): authzActorResolver — actor from @agora/context + authz (…",
          "author_name": "Davi de Carvalho",
          "author_login": "DavideCarvalho",
          "committed_at": "2026-07-17T18:44:23Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "747cb8dd4d64b23e5e242918f840077f59f6b5bf",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore: version packages (#22)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-17T01:31:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d02b26bea2acd8d6f7daac166116a6813d321a02",
          "body": "…tor) (#21)\n\nReplace the flat four-way fallback (decorator-on-target, decorator-on-ctor,\nstatic-on-target, static-on-ctor) with two small helpers: `decoratorMeta`\n(reads the @AiTool symbol) and `metaOn` (either mechanism on one value). The\nresolver becomes `metaOn(target) ?? metaOn(ctor)`, making th\n[…]\nven (dropping staticToolMeta from metaOn fails exactly the two\nstatic-tool tests).\n\nCo-authored-by: Davi de Carvalho <davi.carvalho96@gmail.com>\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "refactor(agent): compose readAiToolMeta as metaOn(target) ?? metaOn(c…",
          "author_name": "Davi de Carvalho",
          "author_login": "DavideCarvalho",
          "committed_at": "2026-07-17T01:22:59Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "f1a43e8fc983014a3a1ddd009f1e26c83a169778",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore: version packages (#20)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-16T23:49:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c3d7b140cdf32ef4324e18d84a13860ff0eb1a7c",
          "body": "…ols (#19)\n\nA tool class can declare its metadata via `static tool = { name, kind, description,\ninput, … }` instead of the `@AiTool` decorator — same shape, mirroring durable's\n`static workflow`. `readAiToolMeta` reads the static config when no decorator is\npresent; discovery/registration/execution \n[…]\nrk.\n\nUnit tests (mutation-proven) for reading + registering a `static tool` class.\n\nCo-authored-by: Davi de Carvalho <davi.carvalho96@gmail.com>\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(agent): decorator-free `static tool` authoring form for class to…",
          "author_name": "Davi de Carvalho",
          "author_login": "DavideCarvalho",
          "committed_at": "2026-07-16T22:53:56Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "a26d0953b26b50cb6bd23c864f787c151bf14d59",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore: version packages (#18)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-16T21:55:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ea6122f468f5308d3506461fb2bd2d7fc3159ef5",
          "body": "… authz) (#17)\n\nFollows up 0.5.0 (which authenticated these routes). Authentication alone still\nlet any authenticated caller act on ANOTHER actor's run/thread by id. Now a caller\nmay act only on runs/threads it OWNS, unless it is governance-privileged.\n\n- Run routes (stream/cancel/tool-call approve+\n[…]\nroven (deny/404 paths). Independently reviewed (found +\nfixed the POST /chat gap).\n\nCo-authored-by: Davi de Carvalho <davi.carvalho96@gmail.com>\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(agent): owner-scope the per-actor run/thread routes (object-level…",
          "author_name": "Davi de Carvalho",
          "author_login": "DavideCarvalho",
          "committed_at": "2026-07-16T21:54:13Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "01e508757fec1a7274a52a1c777a542031fb599e",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore: version packages (#15)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-16T21:20:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "07a46bd3d7efcc6861dee6c977ab0b19b6d4575b",
          "body": "… <1.0.0 (#16)\n\nPinning the peer to ^0.4.0 was too tight — every agent minor pushed the\ninstalled agent out of range, forcing a spurious dashboard major and a peer\nwarning in consumers. The dashboard only uses the agent's stable routes/types,\ncompatible across pre-1.0 minors.\n\nCo-authored-by: Davi de Carvalho <davi.carvalho96@gmail.com>\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(agent-dashboard): widen @adonis-agora/agent peer range to >=0.4.0…",
          "author_name": "Davi de Carvalho",
          "author_login": "DavideCarvalho",
          "committed_at": "2026-07-16T21:18:55Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "5de6247c95a1f92fc92ba89bd1eaa2e89d0ba4ba",
          "body": "… governance (#14)\n\nSeveral /agent/* routes were reachable with no actor resolution (anonymous), and\n/agent/governance/* was readable by any authenticated actor regardless of role —\nsurfaced the first time the routes were mounted behind a real app's auth.\n\n- Every /agent/* route now resolves the act\n[…]\nship on\napprove/reject/cancel/stream/threads (authenticated but not owner-scoped).\n\nCo-authored-by: Davi de Carvalho <davi.carvalho96@gmail.com>\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(agent): authenticate mutation/lifecycle routes + gate cross-actor…",
          "author_name": "Davi de Carvalho",
          "author_login": "DavideCarvalho",
          "committed_at": "2026-07-16T21:13:23Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "b50f8ee708189d8fac86d3799bb0b511154fda77",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore: version packages (#13)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-16T20:26:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4021b6b5355ec7679f44f035a2c1dfafeb3c5e61",
          "body": "…er) + duplicate route (#12)\n\nRegistering the dashboard provider in a real app (entre-textos, the first consumer)\ncrashed boot two ways:\n\n- It imported `router` from `@adonisjs/core/services/router` and called it in\n  `boot()`, but that service's default is only assigned inside an `app.booted()`\n  h\n[…]\nT /agent/dashboard and\nGET /agent/dashboard/* with no duplicate and no boot crash.\n\nCo-authored-by: Davi de Carvalho <davi.carvalho96@gmail.com>\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(agent-dashboard): provider crashed every app boot (undefined rout…",
          "author_name": "Davi de Carvalho",
          "author_login": "DavideCarvalho",
          "committed_at": "2026-07-16T20:25:45Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "0b8e17572ff825251712155ccf5422935e5eb543",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore: version packages (#11)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-16T19:20:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c2ddde3d4fdb5f87f3c49984c5cbbe145fbd1038",
          "body": "…e beyond authentication (#10)\n\nThe dashboard serves the governance read-model, which spans every actor's spend\nand usage, so authenticating the caller (the default gate) is often not enough.\nAdds `config('agent').dashboard.authorize: (actor, ctx) => boolean | Promise<boolean>`,\nrun after the actor \n[…]\nested, mutation-verified); the provider only\ntranslates the verdict to a response.\n\nCo-authored-by: Davi de Carvalho <davi.carvalho96@gmail.com>\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(agent-dashboard): optional authorize gate to restrict the consol…",
          "author_name": "Davi de Carvalho",
          "author_login": "DavideCarvalho",
          "committed_at": "2026-07-16T19:18:28Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "5df9b913834a1ba6a114f8d926c8629fb7c7e372",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore: version packages (#9)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-16T18:36:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8763c29c43c4f766bc3f80e25d6e19f4e0c8aa6e",
          "body": "… not the lib's own file (#8)\n\nThe scanner chose `.ts` vs `.js` from `extname(import.meta.url)` — its OWN file,\nwhich ships compiled (`.js`). So a dev/TypeScript app (app/agent_tools/*.ts, no\nbuild barrel) had its directory scanned for `.js`, matched nothing, and ran with\nan empty ToolRegistry. The \n[…]\novered\n(mutation-verified against the compiled-lib behavior) and .d.ts is skipped.\n\nCo-authored-by: Davi de Carvalho <davi.carvalho96@gmail.com>\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(agent): derive app/agent_tools scan extension from the directory,…",
          "author_name": "Davi de Carvalho",
          "author_login": "DavideCarvalho",
          "committed_at": "2026-07-16T18:35:27Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "a359cecb1adc0f7e04cd36a757f7045e9650cb65",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore: version packages (#7)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-16T17:41:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "363382b5bd182f8de6184cd1c509209113710111",
          "body": "…n store (#6)\n\nWhen store is a stores.lucid() store, pricing and governance now default to a\nLucid store on the SAME connection (tables auto-created) with no config needed,\nso cost tracking and the /agent/governance/* routes work out of the box. Set\npricingStore/governanceQueries to false to disable\n[…]\nnnection to mirror it. Widens the dashboard's agent peer to ^0.4.0 (anti-cascade).\n\nCo-authored-by: Davi de Carvalho <davi.carvalho96@gmail.com>\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(agent): default pricingStore/governanceQueries to mirror the mai…",
          "author_name": "Davi de Carvalho",
          "author_login": "DavideCarvalho",
          "committed_at": "2026-07-16T17:40:17Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "a75fecd0b80e3468ef12fd3f773c041674da6c01",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore: version packages (#5)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-16T16:53:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "487ad7265d512ab27b67a5b25802591f8719923c",
          "body": "…b default (#4)\n\nThe lucid store/pricing/governance factory thunks (and the pgvector retriever)\nderefed @adonisjs/lucid/services/db's default export, which AdonisJS assigns only\ninside app.booted() -- after every provider's boot(). The agent provider builds\nthese stores eagerly in its own boot(), so\n[…]\n.lucid to the services/db default deref makes the\nnew boot-safe factory test fail.\n\nCo-authored-by: Davi de Carvalho <davi.carvalho96@gmail.com>\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(agent): resolve Lucid Database from the container, not services/d…",
          "author_name": "Davi de Carvalho",
          "author_login": "DavideCarvalho",
          "committed_at": "2026-07-16T16:53:01Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "f208b3d1d683a4dbc421cea2db0930dc537fe4e1",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore: version packages (#3)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-16T12:23:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3ed796f5106416726526651088fb98c1d2495172",
          "body": "…ovision too (#2)\n\nA lib passa a gerenciar as proprias tabelas por padrao (autoCreateTables: true),\nfechando a convencao do ecossistema (durable/authz ja fazem). E nao e mais so o\nstore principal: o pricing store e o governance read-model tambem auto-provisionam\nno primeiro uso, compartilhando UMA p\n[…]\n typecheck e biome limpos. Peer do\ndashboard pre-setado pra ^0.3.0 (anti-cascata).\n\nCo-authored-by: Davi de Carvalho <davi.carvalho96@gmail.com>\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(agent): autoCreateTables defaults to true; pricing/governance pr…",
          "author_name": "Davi de Carvalho",
          "author_login": "DavideCarvalho",
          "committed_at": "2026-07-16T12:22:14Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "6e9d11dbd935c3f2a30a0f434655d21170df74af",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore: version packages (#1)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-15T23:44:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f1fea00e165ef6d106fa67ed9ceda6e03ddbca3b",
          "body": "…eWorkflow\n\nO durable 0.8.0 removeu o decorator `@Workflow` em favor de `BaseWorkflow` +\n`static workflow = { name, version }`. O AgentRunWorkflow ainda usava o decorator,\nentao agent 0.1.0 + durable 0.8.0 derrubava o modo durable inteiro com\n`TypeError: (0 , Workflow) is not a function`, e o provid\n[…]\nria fora de range e o changesets bumparia o dashboard pra\nMAJOR (1.0.0) -- confirmado rodando `changeset status`, e um changeset minor\nexplicito NAO vence a cascata, porque ela toma o maximo dos dois.",
          "is_bot": false,
          "headline": "fix(durable): suporta durable 0.8.x migrando AgentRunWorkflow pra Bas…",
          "author_name": "Davi de Carvalho",
          "author_login": null,
          "committed_at": "2026-07-15T23:42:21Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "0d253448eab8533c407860ac621132415122c848",
          "body": "O `workspace:^` so vira range de verdade se quem publica for o pnpm, que o\nreescreve no pack. Publicar com `npm publish` sobe o literal `workspace:^` no\npeerDependencies -- semver invalido, pacote ininstalavel -- e o\n`npm publish --dry-run` passa verde nesse caso porque nao chega no servidor.\nO rang\n[…]\na dependencia de qual comando publica.\n\nEscolhido `^0.1.0` (piso de minor) pelo mesmo criterio do @adonis-agora/media-dashboard,\nque ja usava peer literal. O tarball sai identico ao que o pnpm gerava.",
          "is_bot": false,
          "headline": "fix(dashboard): fixa o peer do agent em ^0.1.0 em vez de workspace:^",
          "author_name": "Davi de Carvalho",
          "author_login": null,
          "committed_at": "2026-07-15T22:32:43Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "76b9087429b872e1091cf61fc8e7be49f0bdbf35",
          "body": "O trabalho anterior estava so local, entao o lint quebrado so apareceu ao subir.\nMaioria e biome format. Os dois achados reais:\n\n- noUselessConstructor no PgVectorRetriever: NAO e inutil -- estreita `store` de\n  VectorStore (da base) pra PgVectorStore, que e o proposito da subclasse.\n  Aplicar o \"fi\n[…]\neTemplate no agent_provider: a concatenacao era so pra quebrar linha;\n  unificado num template, mensagem preservada.\n\ntypecheck e build verdes.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(lint): corrige o lint que ja estava vermelho antes do push",
          "author_name": "Davi de Carvalho",
          "author_login": null,
          "committed_at": "2026-07-15T17:05:44Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "a5d4defef29b735b39b3264b2e6530873185dbba",
          "body": "O Trusted Publisher ja esta registrado por pacote no npmjs.com, entao da pra\nparar de usar o token.\n\nNao bastava ter id-token: write. O setup-node escreve o .npmrc com\n_authToken=${NODE_AUTH_TOKEN}, e um token de verdade ali GANHA do OIDC: o npm\nautentica com ele e nunca troca o id-token por credenc\n[…]\ndo em publish\nreal (0.3.0 e 0.3.1). Reversivel numa linha: o secret NPM_TOKEN continua\nexistindo, basta devolver ${{ secrets.NPM_TOKEN }} aqui.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "ci: passa o publish pro OIDC (NODE_AUTH_TOKEN vazio)",
          "author_name": "Davi de Carvalho",
          "author_login": null,
          "committed_at": "2026-07-15T16:59:20Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "d7b6f7571f3e33ce8f51f4557f78e5f5d31fefff",
          "body": "O pnpm >= 10 nao roda build script de dependencia sem permissao explicita, e em\nCI ele ERRA (ERR_PNPM_IGNORED_BUILDS) em vez de so avisar, entao o release\nmorreria no pnpm install --frozen-lockfile antes de chegar no changesets. Todos\nos liberados aqui ja rodavam sob o pnpm 9 -- liberar preserva o c\n[…]\no em todos os repos. Testar com a arvore\nquente esconde o erro: foi exatamente assim que ele passou local e so apareceu\nna CI do adonis-filter.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "ci: libera os build scripts (allowBuilds) pro pnpm 11",
          "author_name": "Davi de Carvalho",
          "author_login": null,
          "committed_at": "2026-07-15T16:21:37Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "e1f8f2f933182674f802212cd2521d578435d536",
          "body": "Alinha o release com o adonis-filter, unico repo onde o OIDC estava provado.\n\n- permissions: id-token: write -- sem isso o changesets/action nem tenta OIDC,\n  so loga \"No NPM_TOKEN or OIDC available\"\n- npm@^11.5.1 fixado: o trusted publishing exige npm >= 11.5.1 e o node 22 traz\n  o 10.x, mas @lates\n[…]\nsecret NPM_TOKEN existir o token continua\nganhando do OIDC. A troca so acontece depois do Trusted Publisher registrado\npor pacote no npmjs.com.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "ci: liga OIDC trusted publishing e sobe pnpm 11 + action-setup v6",
          "author_name": "Davi de Carvalho",
          "author_login": null,
          "committed_at": "2026-07-15T16:15:34Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "9a87f754d59686cb0c53e20945613c6bb4ce3245",
          "body": "…ta/authz/etc.)\n\nDocument the capabilities added on feat/nestjs-parity-sync, matching the\nexisting MDX/frontmatter/meta.json conventions and grounded in the shipped\nexports, routes, and config:\n\n- Durability: the durable runner (durable: true, DurableAgentRunner, HITL\n  waitForSignal, delegation chi\n[…]\nap (deferred -> shipped), and correct the now-stale\n\"deferred\" claims across index/agent-loop/quota/authorization/streaming/lucid.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(agent): document parity-sync features (durable/RAG/governance/da…",
          "author_name": "Davi de Carvalho",
          "author_login": null,
          "committed_at": "2026-07-13T22:38:53Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "707698afdc1ba20dbd6cb4286156b0dec91a59c8",
          "body": "Bridge media uploads into the agent's RAG stack. `mediaRagIngestion(config)`\n(idiomatic factory) resolves a media reference's bytes via a structural,\noptional `@adonis-agora/media` handle, extracts text with a pluggable\ncontent-type extractor (default text/plain, text/csv, application/json,\ntext/mar\n[…]\nfExtractor, and inMemoryMediaRagIngestion. Exported\nfrom src/index.ts and the ./rag-media subpath. 15 new tests, zero regressions.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(agent): RAG media auto-ingestion",
          "author_name": "Davi de Carvalho",
          "author_login": null,
          "committed_at": "2026-07-13T22:22:29Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "5b7e62bbdff6d8f55b9f32e49386526ba1f847ac",
          "body": "…y views\n\nExtend the @adonis-agora/agent-dashboard SPA to consume the new rich\ngovernance read-model. Adds five client endpoints (listRuns, runDetail,\npendingApprovals, perToolStats, runReliability) plus approve/reject wired\nto the existing POST /agent/tool-call/{approve,reject} routes, hooks\nmirror\n[…]\nolled SVG outcome donut + rate\nbars). Additive: existing views/tests untouched. New wire types mirror\nthe core SPI shapes exactly.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(agent): dashboard runs, approvals inbox, tool-stats & reliabilit…",
          "author_name": "Davi de Carvalho",
          "author_login": null,
          "committed_at": "2026-07-13T22:13:51Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "112ef76c077666d25decf53ec27d1a58ca729539",
          "body": "Add first-class run (turn) tracking to @adonis-agora/agent: an `agent_run`\ntable (status running/completed/failed/cancelled, started/finished, step +\ntoken + cost rollups, durable flag) plus a nullable `run_id` correlation\ncolumn on agent_message / agent_tool_call / agent_token_usage.\n\n- Schema: ext\n[…]\nvals awaiting-only, perToolStats + runReliability aggregates.\n\n230 agent tests + 47 dashboard tests pass; build + typecheck clean.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(agent): agent_run lifecycle tracking + rich governance read-model",
          "author_name": "Davi de Carvalho",
          "author_login": null,
          "committed_at": "2026-07-13T22:00:58Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "a14909a5a1182b5a123ff784649cdd30f682c753",
          "body": "Add an optional `@adonis-agora/telescope` \"Agent\" tab to `@adonis-agora/agent`,\nmirroring the pattern `@adonis-agora/media` ships: a `./telescope` subpath\n(the load boundary) with a local structural SDK mirror, entry-backed data\nproviders reading `ctx.store.list({ type: 'diagnostic', tag: 'lib:agent\n[…]\npe` stays an OPTIONAL, never-imported lazy peer. A host\nwith both libs registers it via `extensions: [agentTelescopeExtension()]`.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(agent): Telescope integration (agent tab extension)",
          "author_name": "Davi de Carvalho",
          "author_login": null,
          "committed_at": "2026-07-13T20:35:34Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "d27d7b45a806d10d3fa6073a5877c6d00436736e",
          "body": "Add a pgvector-backed VectorStore/Retriever completing the production RAG\nstack for @adonis-agora/agent, alongside the in-memory cosine store.\n\n- PgVectorStore implements the existing VectorStore SPI over the structural\n  LucidDatabaseLike (optional @adonisjs/lucid peer; no Lucid types imported),\n  \n[…]\ner rejection, and ingestion inserts against a recording DB\n  (no real Postgres required). Real-pgvector integration test deferred.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(agent): pgvector retriever store",
          "author_name": "Davi de Carvalho",
          "author_login": null,
          "committed_at": "2026-07-13T20:26:53Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "cbebdc9ad7f1c6b9f6ca1e3b2aaa8d2b76141adc",
          "body": "Port the Redis multi-replica token-stream sink and the actor-directory read\nseam from @dudousxd/nestjs-agent into @adonis-agora/agent, idiomatic to Adonis.\n\n- RedisTokenStreamSink implements the existing token-stream-sink SPI over a\n  replayable Redis LIST (`agent:stream:<runId>:chunks`) + per-run p\n[…]\n with the in-process sink, end-terminates-stream, close cleanup,\n  keyPrefix; plus actor-directory resolve + missing-ref handling.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(agent): Redis multi-replica token transport + actor-directory SPI",
          "author_name": "Davi de Carvalho",
          "author_login": null,
          "committed_at": "2026-07-13T20:17:40Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "00d4ceca2018d13d947f35ff477da2f4e916f5f5",
          "body": "Add `AuthzToolAuthorizer` (`@adonis-agora/agent/authz` subpath), a\n`ToolAuthorizer`/`RolesPolicy` backed by `@adonis-agora/authz` (AdonisJS\nBouncer). For each tool it checks the actor against the tool's declared\n`ability` via `AuthzService.can`, replacing the ADMIN-only default.\n\n- Fail-closed: a to\n[…]\n existing `authorizer`/`rolesPolicy` config seam; the\n  offer-filter and invoke-time re-check both run through `can(actor, tool)`.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(agent): authz (Bouncer) tool authorizer",
          "author_name": "Davi de Carvalho",
          "author_login": null,
          "committed_at": "2026-07-13T20:02:24Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "197fa0b3f6d7c738205afd3c531ea79fd8400586",
          "body": "Port the NestJS @dudousxd/nestjs-agent-data satellite into @adonis-agora/agent\nas an idiomatic AdonisJS agent tool. Adds a governed read-only SQL tool with\nfaithfully-replicated guardrails:\n\n- Single-statement SELECT-only enforcement (node-sql-parser AST validation)\n- Fail-closed table allow-list (r\n[…]\nd vitest tests (validator, allow-list, tenant undefined-vs-null,\nrow limit, real SQLite Lucid roundtrip). Full suite: 157 passing.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(agent): governed read-only SQL tool (data satellite)",
          "author_name": "Davi de Carvalho",
          "author_login": null,
          "committed_at": "2026-07-13T19:38:18Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "c36ddd8ab0bdf16d42398dfdc0105de5b9ae78c3",
          "body": "Add a new monorepo package that renders the agent's read-only governance\nread-model as a dependency-light React SPA, served by a thin AdonisJS\nstatic-serving provider behind the same actor gating as the governance routes.\n\nThe SPA is a pure consumer of the target's real endpoints:\n- Overview: spend \n[…]\n-base, fetch client),\nthe server path/asset/inject helpers, the data hooks, and the key views\nrendering from mocked API responses.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(agent): governance dashboard SPA (@adonis-agora/agent-dashboard)",
          "author_name": "Davi de Carvalho",
          "author_login": null,
          "committed_at": "2026-07-13T19:20:40Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "e235ab0775f62aa84153bcd62f9875b3328fd153",
          "body": "Port a Lucid-backed governance read-model implementing the existing\n`AgentGovernanceQueries` SPI over the five agent tables, so the governance\ndashboard (next wave) can serve real data.\n\n- `LucidGovernanceQueries` (stores/lucid-governance-queries.ts): read-only\n  aggregations over token-usage/tool-c\n[…]\n  usage trend, recent tool-calls/threads, cache pricing, provider-cost override,\n  out-of-range). In-memory contract kept passing.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(agent): Lucid governance read-model",
          "author_name": "Davi de Carvalho",
          "author_login": null,
          "committed_at": "2026-07-13T18:55:28Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "78e5fe57b9e8ba9af079754189376d46b6ff6e49",
          "body": "Port the two loop-level pieces from the NestJS reference.\n\ntool-retry: new `src/tool-retry.ts` classifies tool-execution errors as\ntransient (MySQL/Postgres/SQLite lock-contention shapes, by code/errno/\nsqlState/message, walking one level of `cause`) vs permanent, and retries\ntransient failures in p\n[…]\nety (a\nmemoized step re-run never re-invokes the tool); tool-filters visibility\nvia a capturing FakeModel. Full suite green (119).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(agent): tool-retry (transient) + tool-filters",
          "author_name": "Davi de Carvalho",
          "author_login": null,
          "committed_at": "2026-07-13T18:42:15Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "3f0a4e08ec4a3ea2c021c5ab348368f0c2c64827",
          "body": "Port the NestJS attachments/multimodal parity: an attachment-staging SPI,\nmultimodal content-part handling in the shared loop + AI-SDK adapter, an\noptional provider upload route, an idiomatic factory namespace with a lazy\nin-memory driver, and Lucid/in-memory persistence for message attachments.\n\n- \n[…]\ning kit\n- tests: stage->resolve, multimodal run, text-only unchanged, durable replay,\n  adapter image/file parts, Lucid round-trip\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(agent): attachments + multimodal message support",
          "author_name": "Davi de Carvalho",
          "author_login": null,
          "committed_at": "2026-07-13T18:29:02Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "662e9308503864f604d0196b245aa4f09c0957d1",
          "body": "NestJS-parity sync porting three interdependent features into\n@adonis-agora/agent. They interleave across agent-loop.ts, index.ts,\ndefine_config.ts, stores/factory.ts and providers/agent_provider.ts, so\nthey land as one buildable commit rather than broken partial states.\n\n- Durable runner: run each \n[…]\nrieve` tool call for citations.\n  Adds the `retrievers` factory namespace, a `retrieved` diagnostic, and\n  in-memory test doubles.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(agent): durable runner + cost/pricing + RAG stack",
          "author_name": "Davi de Carvalho",
          "author_login": null,
          "committed_at": "2026-07-13T18:07:00Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "05cb4f5a91ff83ba4dcf62baaf4451fdb7b37877",
          "body": "Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "style: biome format wave-2/3 files (fixes CI lint gate)",
          "author_name": "Davi de Carvalho",
          "author_login": null,
          "committed_at": "2026-07-07T07:26:57Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "4db317df9a0875d87350235fff1991c3e25bdbc9",
          "body": "Add the full MDX docs set under packages/adonis/docs — index, getting\nstarted, the agent-loop concept, tool + persona/agent authoring,\nauthorization and quota/cost governance, the Lucid store, streaming &\nHTTP (the eleven routes + SSE envelope + HITL + React consumption),\ntesting, a complete config \n[…]\n and\nAgora-scoped React package. Mirrors the adonis-durable/adonis-media docs\nstyle; every snippet is grounded in the shipped API.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(agent): author @adonis-agora/agent documentation",
          "author_name": "Davi de Carvalho",
          "author_login": null,
          "committed_at": "2026-07-07T07:18:12Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "ab53e9742024d624020f34ebda41d340c53b33f1",
          "body": "…is-agora/agent)\n\nMake the lib installable + runnable on top of the wave-1 framework-agnostic core:\n\n- config: src/define_config.ts (defineConfig + AgentConfig; lazy model thunk;\n  store map with stores.lucid + stores.memory; fail-closed authorizer/actor defaults)\n- provider: providers/agent_provide\n[…]\n, chat streaming+persist over Lucid/sqlite, approve/reject\n  status flip, quota, throwing actor resolver (66 tests green, node 22)\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(agent): wave 2 — Adonis shell, Lucid store, /agent routes (@adon…",
          "author_name": "Davi de Carvalho",
          "author_login": null,
          "committed_at": "2026-07-07T07:06:23Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "b9053de4c597195f8031cf5ab9440ca3ecd10d5f",
          "body": "…nis-agora/agent)\n\nWave 1: turborepo skeleton (copied from adonis-media) + the framework-agnostic\nagent core ported from nestjs-agent (packages/core + ai-sdk + testing) into\n@adonis-agora/agent. No Adonis provider/routes/Lucid yet (wave 2).\n\n- Core ported verbatim (import specifiers only): agent-loo\n[…]\ny, quota, governance queries, diagnostics,\n  ai-sdk (mocked + real-SDK). Node 22: typecheck + test (45 passing) + build all green.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: scaffold adonis-agent repo + port framework-agnostic core (@ado…",
          "author_name": "Davi de Carvalho",
          "author_login": null,
          "committed_at": "2026-07-07T06:41:33Z",
          "body_truncated": true,
          "is_coding_agent": true
        }
      ],
      "releases_count": 29,
      "commits_last_year": 91,
      "latest_release_at": "2026-07-19T22:19:26Z",
      "latest_release_tag": "@adonis-agora/agent@0.17.0",
      "releases_from_tags": false,
      "days_since_last_push": 4,
      "active_weeks_last_year": 3,
      "days_since_latest_release": 6,
      "mean_days_between_releases": 0.2
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": false,
      "health_percentage": 42,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "@adonis-agora/agent",
          "exists": true,
          "license": "MIT",
          "keywords": [
            "adonisjs",
            "adonis",
            "ai",
            "agent",
            "llm",
            "tool-calling",
            "governance",
            "ai-sdk",
            "durable",
            "agora"
          ],
          "ecosystem": "npm",
          "matches_repo": true,
          "registry_url": "https://www.npmjs.com/package/@adonis-agora/agent",
          "is_deprecated": false,
          "latest_version": "0.17.0",
          "repository_url": "https://github.com/DavideCarvalho/adonis-agent",
          "versions_count": 24,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 1,
          "monthly_downloads": 3922,
          "first_published_at": "2026-07-15T22:18:14.499000Z",
          "latest_published_at": "2026-07-19T22:19:24.260000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 6
        },
        {
          "name": "@adonis-agora/agent-dashboard",
          "exists": true,
          "license": "MIT",
          "keywords": [
            "adonisjs",
            "adonis",
            "ai",
            "agent",
            "governance",
            "dashboard",
            "spa",
            "react",
            "spend",
            "usage",
            "agora"
          ],
          "ecosystem": "npm",
          "matches_repo": true,
          "registry_url": "https://www.npmjs.com/package/@adonis-agora/agent-dashboard",
          "is_deprecated": false,
          "latest_version": "0.3.2",
          "repository_url": "https://github.com/DavideCarvalho/adonis-agent",
          "versions_count": 7,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 1,
          "monthly_downloads": 1064,
          "first_published_at": "2026-07-15T22:22:06.826000Z",
          "latest_published_at": "2026-07-16T21:21:23.934000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 9
        }
      ]
    },
    "popularity": {
      "forks": 0,
      "stars": 1,
      "watchers": 0,
      "fork_history": {
        "days": [],
        "complete": true,
        "collected": 0,
        "total_forks": 0
      },
      "star_history": null,
      "open_issues_and_prs": 0
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": false,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [
        "packages/adonis/tsconfig.json",
        "packages/dashboard/tsconfig.json"
      ],
      "toolchain_manifests": [],
      "largest_source_bytes": 39439,
      "source_files_sampled": 198,
      "oversized_source_files": 0,
      "agent_instruction_files": [],
      "agent_instruction_max_bytes": null
    },
    "dependencies": {
      "manifests": [
        "package.json"
      ],
      "advisories": {
        "error": null,
        "scope": "published_package",
        "source": "osv",
        "findings": [],
        "collected": true,
        "malicious": [],
        "truncated": false,
        "by_severity": {},
        "advisory_count": 0,
        "affected_count": 0,
        "assessed_count": 1,
        "malicious_count": 0,
        "assessed_package": "npm:@adonis-agora/agent@0.17.0",
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "npm"
      ],
      "dependencies": [
        {
          "name": "@standard-schema/spec",
          "manifest": "packages/adonis/package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.0.0"
        }
      ],
      "all_dependencies": {
        "error": "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
        "source": null,
        "packages": [],
        "collected": false,
        "truncated": false,
        "total_count": null,
        "direct_count": null,
        "indirect_count": null
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 0,
        "merged_prs": 39,
        "open_issues": 0,
        "closed_ratio": null,
        "closed_issues": 0,
        "closed_unmerged_prs": 0
      },
      "bus_factor": 1,
      "bot_contributors": 1,
      "top_contributors": [
        {
          "type": "User",
          "login": "DavideCarvalho",
          "commits": 20,
          "avatar_url": "https://avatars.githubusercontent.com/u/15630886?v=4"
        }
      ],
      "contributors_sampled": 1,
      "top_contributor_share": 1
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "ci.yml",
        "release.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [
        "biome.json"
      ],
      "has_editorconfig": false,
      "has_linter_config": true,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "pnpm-lock.yaml"
      ],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 10,
            "reason": "no binaries found in the repo",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": 0,
            "reason": "branch protection not enabled on development/release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": 5,
            "reason": "4 out of 7 merged PRs checked by a CI test -- score normalized to 5",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 0,
            "reason": "Found 0/27 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 3,
            "reason": "project has 1 contributing companies or organizations -- score normalized to 3",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 10,
            "reason": "no dangerous workflow patterns detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 0,
            "reason": "no update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 0,
            "reason": "project was created within the last 90 days. Please review its contents carefully",
            "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": 0,
            "reason": "security policy file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": 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": 8,
            "reason": "2 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "f984b3622275bb7bb4c24818f69a0367530988cf",
        "ran_at": "2026-07-25T22:25:57Z",
        "aggregate_score": 3,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": false,
      "has_dependabot_config": false
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-21T17:22:27Z",
      "oldest_open_prs": [],
      "last_merged_pr_at": "2026-07-21T17:21:32Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": []
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/DavideCarvalho/adonis-agent",
    "host": "github.com",
    "name": "adonis-agent",
    "owner": "DavideCarvalho"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 58,
      "inputs": {
        "security": 44,
        "vitality": 74,
        "community": 33,
        "governance": 57,
        "engineering": 74
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "good",
        "name": "Vitality",
        "value": 74,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "moderate",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 56,
            "inputs": {
              "commits_last_year": 91,
              "human_commit_share": 0.791,
              "days_since_last_push": 4,
              "active_weeks_last_year": 3
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 4 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 4
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "3/52 weeks with commits",
                "points": 2.1,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 3
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "91 commits in the last year",
                "points": 17.6,
                "status": "partial",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 91
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "project was created within the last 90 days. Please review its contents carefully",
                "points": 0,
                "status": "missed",
                "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": 29,
              "latest_release_tag": "@adonis-agora/agent@0.17.0",
              "releases_from_tags": false,
              "days_since_latest_release": 6,
              "mean_days_between_releases": 0.2
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "29 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 29
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 6 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 6
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~0.2 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 0.2
                    }
                  }
                ],
                "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": "unverified",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": "repository_too_young",
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": null,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "maintenance record not established from the collected data",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_unverified",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "at_risk",
        "name": "Community & Adoption",
        "value": 33,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "critical",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 1,
            "inputs": {
              "forks": 0,
              "stars": 1,
              "watchers": 0,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "1 stars",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "0 forks",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "0 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "moderate",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 50,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": false,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (MIT)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "MIT"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.3
              }
            ]
          },
          {
            "key": "ecosystem_adoption",
            "band": "moderate",
            "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": 62,
            "inputs": {
              "packages": [
                "@adonis-agora/agent",
                "@adonis-agora/agent-dashboard"
              ],
              "dependents": null,
              "ecosystems": "npm",
              "total_downloads": null,
              "monthly_downloads": 4986
            },
            "components": [
              {
                "key": "monthly_downloads",
                "name": "Monthly downloads",
                "detail": "4,986 downloads/month across npm",
                "points": 49.3,
                "status": "partial",
                "details": [
                  {
                    "code": "downloads_monthly",
                    "params": {
                      "count": 4986,
                      "ecosystems": "npm"
                    }
                  }
                ],
                "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": 57,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 13,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 1,
              "top_contributor_share": 1
            },
            "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 100% of commits",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 100
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "1 contributors",
                "points": 1.4,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 1 contributing companies or organizations -- score normalized to 3",
                "points": 3,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "good",
            "name": "Issue & PR responsiveness",
            "note": "Excluded from scoring (no data or not applicable): Issue resolution. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "issue_resolution"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 72,
            "inputs": {
              "merged_prs": 39,
              "open_issues": 0,
              "closed_issues": 0,
              "issue_closed_ratio": null,
              "closed_unmerged_prs": 0
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "no issues or no data",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_issues_or_data",
                    "params": {}
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "39/39 decided PRs merged",
                "points": 38.2,
                "status": "met",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 39,
                      "decided": 39
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/27 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "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": 60,
            "inputs": {
              "followers": 66,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "DavideCarvalho",
              "public_repos": 112,
              "account_age_days": 3917
            },
            "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": "66 followers of DavideCarvalho",
                "points": 13.1,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 66,
                      "login": "DavideCarvalho"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "112 public repos, account ~10 yr old",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 112
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 10
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "@adonis-agora/agent",
                "@adonis-agora/agent-dashboard"
              ],
              "ecosystems": "npm",
              "any_deprecated": false,
              "min_days_since_publish": 6
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "2 package(s) on npm",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 2,
                      "ecosystems": "npm"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 6 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 6
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "24 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 24
                    }
                  }
                ],
                "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": 74,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "good",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 74,
            "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": "2 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 24,
                "status": "met",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": "biome.json",
                "points": 16,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "biome.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": "4 out of 7 merged PRs checked by a CI test -- score normalized to 5",
                "points": 10,
                "status": "partial",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "good",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 75,
            "inputs": {
              "topics": [],
              "has_wiki": true,
              "homepage": null,
              "has_readme": true,
              "has_docs_dir": true,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 25,
                "status": "met",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "at_risk",
        "name": "Security",
        "value": 44,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Packaging, Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "packaging",
                    "signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 30,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 16,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 2,
              "scorecard_aggregate": 3
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "branch protection not enabled on development/release branches",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "4 out of 7 merged PRs checked by a CI test -- score normalized to 5",
                "points": 1.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 0/27 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 1 contributing companies or organizations -- score normalized to 3",
                "points": 0.8,
                "status": "partial",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "no update tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "project was created within the last 90 days. Please review its contents carefully",
                "points": 0,
                "status": "missed",
                "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 not detected",
                "points": 0,
                "status": "missed",
                "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": "2 existing vulnerabilities detected",
                "points": 6,
                "status": "partial",
                "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 npm:@adonis-agora/agent@0.17.0 runtime dependency closure — what installing the published package pulls in — 1 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": "npm:@adonis-agora/agent@0.17.0",
                  "assessed": 1
                }
              },
              {
                "code": "advisories_reachability",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "source": "osv",
              "advisories": 0,
              "affected_packages": 0,
              "assessed_packages": 1,
              "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": 1,
              "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": 2
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "no confirmed policy-scope location match",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "jurisdiction_no_match",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "moderate",
        "name": "AI Readiness",
        "value": 62,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "at_risk",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.986,
              "agent_instruction_files": [],
              "agent_instruction_max_bytes": null
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "no CLAUDE.md / AGENTS.md / editor rules",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_instructions",
                    "params": {}
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "71 of 72 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 71,
                      "sampled": 72
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "moderate",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 64,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "pnpm-lock.yaml"
              ],
              "has_dockerfile": false,
              "typed_language": true,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": true,
              "typecheck_configs": [
                "packages/adonis/tsconfig.json",
                "packages/dashboard/tsconfig.json"
              ],
              "agent_commit_share": 0.67,
              "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": "biome.json",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "biome.json"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "packages/adonis/tsconfig.json, packages/dashboard/tsconfig.json",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "packages/adonis/tsconfig.json, packages/dashboard/tsconfig.json"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "61 of the last 91 commits agent-authored or agent-credited",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 61,
                      "sampled": 91
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "no automated dependency updates observed",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_dependency_automation",
                    "params": {}
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "primary_language": "TypeScript",
              "largest_source_bytes": 39439,
              "source_files_sampled": 198,
              "oversized_source_files": 0
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "TypeScript (statically typed)",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "TypeScript"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "0/198 source files over 60KB",
                "points": 55,
                "status": "met",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 198,
                      "oversized": 0
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token",
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-25T22:26:05.609192Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/d/DavideCarvalho/adonis-agent.svg",
  "full_name": "DavideCarvalho/adonis-agent",
  "license_state": "standard",
  "license_spdx": "MIT"
}

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