Öffentliches Register
Software-GesundheitsberichtSchema 0.27.0 · Metriken 1.13.0 · 2026-07-28 21:33 UTC

Fast-Editor / Lynkr

Streamline your workflow with Lynkr, a CLI tool that acts as an HTTP proxy for efficient code interactions using Claude Code CLI.

JavaScript · Rust · MakefileApache-2.0★ 538 Sterne⑂ 57 Forksseit Dez. 2025Auf GitHub ansehen ↗

Fast-Editor/Lynkr erreicht einen Gesundheitsindex von 65 von 100 und liegt damit im Bereich Mittel. Am stärksten schneidet es bei Engineering Quality (90/100) ab, am schwächsten bei Security (35/100). Zuletzt vor 4 Tagen aktualisiert. Ein einzelner Mitwirkender trägt den Großteil der jüngsten Arbeit.

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

65
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

Fast-EditorOrganisation
2 Follower4 öffentliche Reposseit Dez. 2025

Dieses Repository wird von einer Organisation getragen — geteilte, rechenschaftspflichtige Trägerschaft, die jeden einzelnen Maintainer überdauern kann.

Paket-Ökosysteme

Metriken nach Kategorie

Vitalität

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

80Gut · 22 % des Gesamtindex
Wie die Bewertung erfolgt
36/36Push-Aktualität — letzter Push vor 4 Tagen
18.7/36Commit-Rhythmus — 27/52 Wochen mit Commits
18/18Commit-Volumen — 209 Commits im letzten Jahr
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 10
Verwendete Eingangsdaten
commits_last_year209
human_commit_share1
days_since_last_push4
active_weeks_last_year27
Wie die Bewertung erfolgt
27/27Liefert Releases aus — 2 Releases veröffentlicht
36/36Release-Aktualität — letztes Release vor 35 Tagen
12.6/27Release-Rhythmus — ein Release etwa alle 201,2 Tage
0/10OpenSSF Scorecard: Signed-Releases — Project has not signed or included provenance with any releases.
Verwendete Eingangsdaten
releases_count2
latest_release_tagv9.6.0
releases_from_tagsnein
days_since_latest_release35
mean_days_between_releases201,2

Community & Verbreitung

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

56Mittel · 18 % des Gesamtindex
Wie die Bewertung erfolgt
44.3/60Stars — 538 Stars
14.6/25Forks — 57 Forks
2.7/15Watcher — 4 Watcher
Verwendete Eingangsdaten
forks57
stars538
watchers4
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Wie die Bewertung erfolgt
22.5/22.5README
22.5/22.5Lizenz — anerkannte Lizenz (Apache-2.0)
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
45.2/80Downloads pro Monat — 2.446 Downloads/Monat über npm
0/20Abhängige in der Registry — von diesem Ökosystem nicht ausgewiesen
Verwendete Eingangsdaten
packageslynkr
dependents
ecosystemsnpm
total_downloads
monthly_downloads2.446
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?

59Mittel · 24 % des Gesamtindex
Wie die Bewertung erfolgt
9/54Bus-Faktor — 1 Beitragende decken die Hälfte aller Commits ab
10.9/22.5Commit-Verteilung — wichtigste beitragende Person verfasste 52 % der Commits
12.2/13.5Breite der Beitragenden — 9 Beitragende
0/10OpenSSF Scorecard: Contributors — project has 0 contributing companies or organizations -- score normalized to 0
Verwendete Eingangsdaten
bus_factor1
contributors_sampled9
top_contributor_share0,517
Wie die Bewertung erfolgt
42.7/46.8Issue-Lösungsquote — 91 % der Issues geschlossen
30.2/38.3PR-Annahme — 45/57 entschiedene PRs gemergt
3/15OpenSSF Scorecard: Code-Review — Found 5/22 approved changesets -- score normalized to 2
Verwendete Eingangsdaten
merged_prs45
open_issues2
closed_issues21
issue_closed_ratio0,913
closed_unmerged_prs12
Wie die Bewertung erfolgt
30/30Organisatorische Trägerschaft — im Besitz einer Organisation
0/20Verifizierte Domain
3.4/25Reichweite des Inhabers — 2 Follower von Fast-Editor
6.3/25Kontohistorie — 4 öffentliche Repos, Kontoalter ca. 0 Jahre
Verwendete Eingangsdaten
followers2
owner_typeOrganization
is_verified
owner_loginFast-Editor
public_repos4
account_age_days225

Paketpflege

100Exzellent
Wie die Bewertung erfolgt
25/25Veröffentlicht & auflösbar — 1 Paket(e) auf npm
35/35Veröffentlichungsaktualität — letzte Veröffentlichung vor 6 Tagen
20/20Versionshistorie — 64 veröffentlichte Versionen
20/20Nicht veraltet — aktiv, nicht veraltet oder zurückgezogen
Verwendete Eingangsdaten
packageslynkr
ecosystemsnpm
any_deprecatednein
min_days_since_publish6

Engineering-Qualität

Sind grundlegende Engineering- und Dokumentationspraktiken vorhanden?

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

Dokumentation

100Exzellent
Wie die Bewertung erfolgt
30/30README
25/25Dokumentationsverzeichnis
15/15Dokumentations-/Homepage-Site — https://fast-editor.github.io/Lynkr/
10/10Repository-Beschreibung
10/10Topics — 20 Topics
10/10Wiki
Verwendete Eingangsdaten
topicsclaude, claudecode, databricks, agents, ai, code-assistant, code-generation, developer-tools, llm, mcp, llmops, ai-gateway, cursor, llamacpp, llm-gateway, llm-proxy, llm-router, ollama, prompt-caching, self-hosted
has_wikija
homepagehttps://fast-editor.github.io/Lynkr/
has_readmeja
has_docs_dirja
has_descriptionja

Sicherheit

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

35Gefährdet · 16 % des Gesamtindex

Sicherheitslage

24Kritisch
Wie die Bewertung erfolgt
0/7.5Binary-Artifacts — binaries present in source code
0/7.5Branch-Protection — branch protection not enabled on development/release branches
2.5/2.5CI-Tests — 8 out of 8 merged PRs checked by a CI test -- score normalized to 10
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
1.5/7.5Code-Review — Found 5/22 approved changesets -- score normalized to 2
0/2.5Contributors — project has 0 contributing companies or organizations -- score normalized to 0
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
7.5/7.5Maintained — 30 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 10
0/5Packaging — keine Daten
0.5/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 1
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 — Project has not signed or included provenance with any releases.
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
0/7.5Vulnerabilities — 45 existing vulnerabilities detected
Verwendete Eingangsdaten
sourceopenssf_scorecard
checks_evaluated17
scorecard_versionv5.5.0
checks_inconclusive1
scorecard_aggregate2,5
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): packaging. 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
10/25Indirekte Abhängigkeiten ohne bekannte Advisories — 1 betroffen: uuid 10.0.0 (high 7.5)
33.7/40Keine offenen Advisories — 1 Paket(e) mit Advisory seit über 90 Tagen unbehandelt; ältestes vor 97 Tagen veröffentlicht
Verwendete Eingangsdaten
sourceosv
advisories1
affected_packages1
assessed_packages247
unassessed_packages0
affected_by_severityhigh 1
direct_affected_packages0
Abgeglichen wurde die Laufzeit-Abhängigkeitshülle von npm:lynkr@9.10.0 — das, was die Installation des veröffentlichten Pakets nach sich zieht — mit 247 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.

61Mittel · 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 — 82 von 100 menschlichen Commits benennen ihre Absicht (strukturierter Betreff oder erläuternder Text)
Verwendete Eingangsdaten
has_llms_txtnein
legible_history_share0,82
agent_instruction_files
agent_instruction_max_bytes
Wie die Bewertung erfolgt
12.6/18Bootstrap mit einem Befehl — native/Cargo.toml (Toolchain-Konvention, kein Task-Runner)
22/22Automatisierte Tests
11/11Lint-/Format-Konfiguration — .eslintrc.cjs
11/11Statische Typprüfung — packages/ai-sdk-provider/tsconfig.json
10/10Reproduzierbare Umgebung — Dockerfile, lockfile
10/10Belegte Agentenpraxis — 47 der letzten 100 Commits von Agenten verfasst oder ihnen zugeschrieben
0/8Automatisierte Wartung — keine automatisierten Abhängigkeits-Updates beobachtet
1/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 1
Verwendete Eingangsdaten
has_nixnein
has_testsja
lockfilesCargo.lock, package-lock.json
has_dockerfileja
typed_languagenein
bootstrap_files
has_devcontainernein
has_linter_configja
typecheck_configspackages/ai-sdk-provider/tsconfig.json
agent_commit_share0,47
toolchain_manifestsnative/Cargo.toml
dependency_bot_commit_share0
Wie die Bewertung erfolgt
27/45Typprüfbarer Code — JavaScript mit Typprüfungs-Konfiguration (packages/ai-sdk-provider/tsconfig.json)
53.1/55Handhabbare Dateigrößen — 11/323 Quelldateien über 60 KB
Verwendete Eingangsdaten
primary_languageJavaScript
largest_source_bytes403.191
source_files_sampled323
oversized_source_files11
Wie die Bewertung erfolgt
0/40API-Schema (OpenAPI/GraphQL/proto)
0/20MCP-Server
40/40Lauffähige Beispiele — examples
Verwendete Eingangsdaten
example_dirsexamples
has_mcp_signalnein
api_schema_files

Eckdaten

538GitHub-Sterne
9Mitwirkende
209Commits, letzte 12 Monate
4Tage seit letztem Push
2Releases
1Bus-Faktor
2offene Issues
crates.io, npm, PyPIPaket-Ökosysteme

Warnungen zur Datenerhebung

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token
  • Could not fetch crates package 'lynkr-native' from its registry
  • GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Weitere Details

Stern- und Fork-Verlauf 0 ★ / 57 ⇿
0Sterne
57Forks
1Releases

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

01020304050605762025-122026-042026-07
Major 0Minor 1Patch 0
OpenSSF Scorecard 2.5 / 10
2.5Gesamtwert

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-28 21:32 UTC

0Binary-Artifactsbinaries present in source code
0Branch-Protectionbranch protection not enabled on development/release branches
10CI-Tests8 out of 8 merged PRs checked by a CI test -- score normalized to 10
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
2Code-ReviewFound 5/22 approved changesets -- score normalized to 2
0Contributorsproject has 0 contributing companies or organizations -- score normalized to 0
10Dangerous-Workflowno dangerous workflow patterns detected
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
10Maintained30 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 10
k. A.Packagingpackaging workflow not detected
1Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 1
0SASTSAST tool is not run on all commits -- score normalized to 0
0Security-Policysecurity policy file not detected
0Signed-ReleasesProject has not signed or included provenance with any releases.
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
0Vulnerabilities45 existing vulnerabilities detected
Direkte Abhängigkeiten 29
RegistryPaketVersionsvorgabeManifest
crates.ionapi3native/Cargo.toml
crates.ionapi-derive3native/Cargo.toml
crates.ioserde1native/Cargo.toml
crates.ioserde_json1native/Cargo.toml
crates.ioregex1native/Cargo.toml
crates.iosha20.10native/Cargo.toml
crates.iohex0.4native/Cargo.toml
crates.iomimalloc0.1native/Cargo.toml
npm@azure/openai^2.0.0package.json
npm@babel/parser^7.29.0package.json
npm@babel/traverse^7.29.0package.json
npm@blackwell-systems/gcf2.4.0package.json
npm@toon-format/toon^2.1.0package.json
npmcockatiel^3.2.1package.json
npmcompression^1.7.4package.json
npmdiff^5.2.0package.json
npmdotenv^16.4.5package.json
npmexpress^5.1.0package.json
npmexpress-rate-limit^8.2.1package.json
npmfast-glob^3.3.2package.json
npmgraphify^1.0.0package.json
npmhnswlib-node^3.0.0package.json
npmjs-tiktoken^1.0.20package.json
npmjs-yaml^4.1.1package.json
npmopenai^6.14.0package.json
npmpino^8.17.2package.json
npmpino-http^8.6.0package.json
npmpino-roll^4.0.0package.json
npmundici^6.22.0package.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 1

Die Installation von npm:lynkr@9.10.0 zieht 247 Pakete nach sich, direkt und transitiv: 1 tragen bekannte Advisories, davon 0 direkte Abhängigkeiten.

PaketVersionBeziehungSchweregradAdvisoriesBehoben in
uuid10.0.0indirekthoch113.0.1

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": [
        "claude",
        "claudecode",
        "databricks",
        "agents",
        "ai",
        "code-assistant",
        "code-generation",
        "developer-tools",
        "llm",
        "mcp",
        "llmops",
        "ai-gateway",
        "cursor",
        "llamacpp",
        "llm-gateway",
        "llm-proxy",
        "llm-router",
        "ollama",
        "prompt-caching",
        "self-hosted"
      ],
      "is_fork": false,
      "size_kb": 57193,
      "has_wiki": true,
      "homepage": "https://fast-editor.github.io/Lynkr/",
      "languages": {
        "C": 28,
        "HTML": 33138,
        "Rust": 634816,
        "Shell": 10671,
        "DTrace": 5415,
        "Python": 18597,
        "Makefile": 382882,
        "Dockerfile": 5704,
        "JavaScript": 2615620,
        "TypeScript": 1395
      },
      "pushed_at": "2026-07-24T01:42:00Z",
      "created_at": "2025-12-03T22:50:02Z",
      "owner_type": "Organization",
      "updated_at": "2026-07-28T05:50:33Z",
      "description": "Streamline your workflow with Lynkr, a CLI tool that acts as an HTTP proxy for efficient code interactions using Claude Code CLI.",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "Apache-2.0",
      "default_branch": "main",
      "license_spdx_raw": "Apache-2.0",
      "primary_language": "JavaScript",
      "significant_languages": [
        "JavaScript",
        "Rust",
        "Makefile"
      ]
    },
    "owner": {
      "blog": null,
      "name": null,
      "type": "Organization",
      "login": "Fast-Editor",
      "company": null,
      "location": null,
      "followers": 2,
      "avatar_url": "https://avatars.githubusercontent.com/u/249706325?v=4",
      "created_at": "2025-12-15T08:30:52Z",
      "is_verified": null,
      "public_repos": 4,
      "account_age_days": 225
    },
    "license": {
      "state": "standard",
      "spdx_id": "Apache-2.0",
      "raw_spdx": "Apache-2.0",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v9.6.0",
          "kind": "minor",
          "published_at": "2026-06-23T08:52:38Z"
        },
        {
          "tag": "0.1.0",
          "kind": "minor",
          "published_at": "2025-12-04T02:55:02Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "57f06be35d8449fb344669a3d6160e1a7ee58215",
          "body": "… stale instance",
          "is_bot": false,
          "headline": "fix(server): reject start() on bind failure so wrap can't attach to a…",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-07-24T01:41:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fa5f5186f18b58d854fea979432c77a5a4d67ca5",
          "body": "…elected ids, retire dead model names",
          "is_bot": false,
          "headline": "fix(moonshot): pin temperature=1 for all kimi-k* models, honor tier-s…",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-07-24T01:28:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "71e8f5348240d5019131edc29c5a78684a9f0fcc",
          "body": null,
          "is_bot": false,
          "headline": "feat: add @lynkr/ai-sdk-provider package for the Vercel AI SDK",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-07-23T18:51:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "57c7b4e5f5ccf1139f44ea339335ea2a6e532352",
          "body": null,
          "is_bot": false,
          "headline": "fixed test failure",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-07-23T05:06:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b32e988c8d6e0f615e01ba5fcedebf7686228e0a",
          "body": "…streaming, classifier v2 (#85)\n\n- Remove server-mode tool execution: Lynkr always forwards tool calls to the\n  client (deletes src/tools registry, src/agents, orphaned backends, Code Mode,\n  TOOL_EXECUTION_MODE and dead env knobs)\n- Upstream SSE streaming, default on: native Anthropic passthrough\n \n[…]\n, tool-history absence,\n  first-message fingerprint drift\n- Docs, README, Dockerfile, docker-compose aligned with all of the above\n\nCo-authored-by: vishal veerareddy <vishalveera.reddy@servicenow.com>",
          "is_bot": false,
          "headline": "chore(release): v9.10.0 — client-only tool execution, end-to-end SSE …",
          "author_name": "Vishal Veera Reddy",
          "author_login": "veerareddyvishal144",
          "committed_at": "2026-07-22T08:20:23Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3831e9377b84adc40e91765f4251a609bbbd6a37",
          "body": null,
          "is_bot": false,
          "headline": "chore(release): v9.9.1",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-07-19T23:18:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4a83c194630c069307081061fb59355d949d4428",
          "body": "…r, FORCE_REASONING\n\nNew in this release:\n\nPhase-6 LLM difficulty classifier (src/routing/difficulty-classifier.js)\n- Adjudicates borderline anchor-embedding calls; catches topic-vs-difficulty\n  confounding (\"list the exports from this file\" no longer scores REASONING\n  just because it embeds near t\n[…]\n): pytest, cargo test, go test, gh pr/issue list — full\ndispatch table with tool_use_id -> command extraction, tests in\ntoken-reduction.test.js\n\nCo-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(routing): Phase-6 LLM difficulty classifier, config B tier ladde…",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-07-19T23:18:15Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "37b9a2c44ef5b9ee5b07254f0e266fcb7386e3bd",
          "body": null,
          "is_bot": false,
          "headline": "chore: ignore all local handoff notes, not just one",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-07-17T06:42:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5bcd747d7e23b4800dea0958c75c51ab75b9dff2",
          "body": "…facts can never ship\n\nnpm packs were including marketing/ (business internals) because the\ncurated .npmignore predated the folder — ignore-lists fail open on new\npaths. The files allowlist fails closed: anything not listed never ships.\nGranular entries for native/ and models/ because files entries override\n.npmignore pruning inside listed directories on current npm.",
          "is_bot": false,
          "headline": "chore(publish): files allowlist — marketing/, benchmark configs, arti…",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-07-17T05:04:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3085a31a5de9b78bb76d145b2027127a0668e5bb",
          "body": "… benchmark",
          "is_bot": false,
          "headline": "release: v9.9.0 — routing hardening, agent controls, GCF, RouterArena…",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-07-17T04:56:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c2e08b39411c9e17fb14637eca1db4e1661e9f35",
          "body": "…(#84)\n\n* feat(routing): goose + lynkr-injected client profiles; WS3 detection on OpenAI-compat paths\n\nGoose (Block's agent CLI) sends no user-agent and a distinctive 18-tool\nloadout — without a profile the agentic detector counted its baseline as\nintent and floored every request (even 'Hi') at ITER\n[…]\nned with the\n  reminder-immunity property it actually tests.\n- registers usage-stats and loop-guard tests in test:unit.\n\n---------\n\nCo-authored-by: vishal veerareddy <vishalveera.reddy@servicenow.com>",
          "is_bot": false,
          "headline": "Routing hardening, agent controls, and third-party benchmark results …",
          "author_name": "Vishal Veera Reddy",
          "author_login": "vishalveerareddy123",
          "committed_at": "2026-07-17T04:54:49Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "24e69a7ed95faa52a7515af6ce27a932447b77bf",
          "body": "… TOON (#83)\n\n* feat(context): add opt-in GCF compression as a drop-in alternative to TOON\n\nAdds a GCF (Graph Compact Format) encoder for the large-JSON context\ncompression Lynkr already does with TOON. Same adapter contract as\nsrc/context/toon.js: encode-only, fail-open, read-only context, never\nto\n[…]\nl-open,\nnever-grow, verify-mismatch, protocol-field preservation, text-block\ncompression).\n\n* chore: pin @blackwell-systems/gcf to exact 2.4.0\n\n* chore: add @blackwell-systems/gcf to package-lock.json",
          "is_bot": false,
          "headline": "feat(context): add opt-in GCF compression as a drop-in alternative to…",
          "author_name": "Dayna Blackwell",
          "author_login": "blackwell-systems",
          "committed_at": "2026-07-17T04:35:07Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c3352c7fecc12aca574a1e2a97bf2f8ed39c535f",
          "body": null,
          "is_bot": false,
          "headline": "Added codex wrap support",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-07-11T23:52:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7e81a20965afc83ec7dfeb241c050fb6aed7c57c",
          "body": null,
          "is_bot": false,
          "headline": "Removed comments",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-07-11T17:57:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9f54a7e66ab23456db62ad5bbd209604d5042f5c",
          "body": null,
          "is_bot": false,
          "headline": "Added tiers",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-07-11T08:16:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "805b9f71b71d83084cfd4a504d863921d6e3b813",
          "body": null,
          "is_bot": false,
          "headline": "chore: ignore local handoff notes",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-07-09T07:08:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4af5261161276fe59a051e6c9af8adc0f3adad2f",
          "body": "…escalate on failure\n\nEx-ante difficulty prediction is unreliable for agentic coding traffic\n(SWE-Bench evidence: fails trivial baselines; verified cascades gain +14%).\nInstead of committing to a predicted tier, cheap-tier (SIMPLE/MEDIUM)\nresponses are verified post-hoc: structural checks targeting \n[…]\nhan no cascade). Expensive-tier answers are never re-verified; fails\nopen on verifier errors. Flag: LYNKR_CASCADE_VERIFY (default off).\nLive-verified: empty minimax response → escalated → kimi served.",
          "is_bot": false,
          "headline": "feat(routing): WS6 cascade verification — verify cheap-tier answers, …",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-07-09T05:59:17Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "58135b33d42b96d280943614a9ec05fa9b19b707",
          "body": "…c refs",
          "is_bot": false,
          "headline": "chore: untrack local-only files (plan ledger, litellm config); fix do…",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-07-09T04:55:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7c088c609edd6bf45b90b6742c9285ae8c7f8792",
          "body": null,
          "is_bot": false,
          "headline": "chore: untrack marketing folder (local-only drafts)",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-07-09T04:53:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4b1717cc8b2da6d3235ff7e906c95d458a4526a6",
          "body": null,
          "is_bot": false,
          "headline": "docs: restore 53% tool-token-reduction claim",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-07-09T03:45:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f86523602c028917ab5b2920fd5e80ae8b679434",
          "body": "… reproducible benchmark\n\nReplaces stale headline claims (87.6%/53%/171ms) with numbers the bundled\nbenchmark reproduces (84% TOON, 18-22% tool stripping, <300ms cache hits),\ndocuments the full routing pipeline (fingerprint sessions, escape ladder,\nlearning loop, incident-derived rules) and the 17-scenario regression\nharness. Test badge 699→1041.",
          "is_bot": false,
          "headline": "docs: routing-intelligence + benchmarking guides; README numbers from…",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-07-09T03:40:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f8dcd109e5c626c1e73a961e27e747fbce89d0c4",
          "body": "Pins (6h TTL) and semantic-cache entries persist server-side between runs:\nrun #2 inherited run #1's P2-written COMPLEX pin and served most scenarios\nfrom cache, corrupting measurements. Per-run nonce in stateful scenarios,\nx-lynkr-no-cache on everything outside the cache family, and SC3 now fails\nonly on LOW-similarity hits (an answer to a different question) — prior\nruns' identical question matching at ~0.99 is correct cache behavior.",
          "is_bot": false,
          "headline": "bench: hermetic across runs + similarity-aware cache assertion",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-07-09T03:35:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "621aa49175e1c8a467089a20d49f17fb22505af9",
          "body": "Encodes this week's live incidents as permanent checks: reminder-injection\nimmunity, suggestion-mode side requests, force-cloud/path-risk triggers,\nautonomous→REASONING, fingerprint pin + mid-session escape, cache\nfalse-positive guard. Route expectations judge Lynkr only (other proxies\nsynthesize tier labels). Adds a pass/fail scoreboard section.",
          "is_bot": false,
          "headline": "bench: 8 routing-regression scenarios + correctness scoreboard",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-07-09T03:11:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c34e835821520648e76a7ab0de76599b65b0140e",
          "body": "…s, hardening\n\nWS4: bandit propensity + candidates on every decision for off-policy evaluation.\nWS5: closed the learning loop — feedback module (bandit.update + kNN online\ngrowth), reward-pipeline persistence, in-process auto-calibration.\nWS1.5: content-fingerprint session ids (clients send none) + \n[…]\ninstead of the credential list (self-proxy fix);\nbadge echo fixed; wrap session stats read real fields; benchmark measurement\nlayer made honest; test suite no longer clobbers the production kNN index.",
          "is_bot": false,
          "headline": "feat(routing): propensity logging, learning loop, fingerprint session…",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-07-09T02:55:28Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3211456efead315098b5b7a19feace05d53cbfeb",
          "body": "…(#81)\n\nAdds Eden AI as a native provider, mirroring the existing OpenRouter\n(OpenAI-compatible) path. Eden AI exposes both OpenAI- and Anthropic-\ncompatible endpoints at https://api.edenai.run/v3 with provider/model\nnaming, giving one EU/GDPR-compliant key across 600+ models.\n\n- config: SUPPORTED_M\n[…]\nLive-tested against api.edenai.run/v3: chat, tool-calling across OpenAI &\nAnthropic models (finish_reason: tool_calls), and streaming.\n\nCo-authored-by: MVS-source <mvs-source@users.noreply.github.com>",
          "is_bot": false,
          "headline": "feat: add Eden AI provider (OpenAI-compatible, 600+ models, EU/GDPR) …",
          "author_name": "Victor M. SMITH",
          "author_login": "MVS-source",
          "committed_at": "2026-07-05T08:00:05Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "30899e664129d31c160481808e54efb26f42bd6f",
          "body": null,
          "is_bot": false,
          "headline": "Added telemetry",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-07-02T01:43:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "337447c4a879efd4a6783b195effbcfbfea96bdc",
          "body": "* fix(agents): make the sub-agent learning subsystem actually work\n\nThe Reflector → Skillbook → prompt-injection loop was fully built but\ndead: the Reflector read `context.transcript` and `context.taskPrompt`,\nneither of which the context manager ever set. Reflection threw on every\nnon-trivial run a\n[…]\nst.js.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: vishal veerareddy <vishalveera.reddy@servicenow.com>\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(agents): make the sub-agent learning subsystem actually work (#80)",
          "author_name": "Vishal Veera Reddy",
          "author_login": "vishalveerareddy123",
          "committed_at": "2026-07-02T01:30:55Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "522b736ca1daaba80d44de89831fa088b838bb59",
          "body": "Bedrock prompts were producing a non-booting .env because the wizard\nasked for BEDROCK_API_KEY but the config loader at\nsrc/config/index.js:127 reads AWS_BEDROCK_API_KEY. The misleading \"or\nuse IAM\" hint also implied a SigV4 fallback that doesn't exist —\nsrc/clients/databricks.js:1450 throws if the \n[…]\nfix, model-ID format, and tier syntax with concrete\nexamples for the Anthropic Claude family and Llama.\n\nDocker image / labels bumped to 9.7.2.\n\nCo-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(init): correct Bedrock + LM Studio wizard schema",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-06-30T19:53:59Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "c5d215d776104bb72e703bf985134b1ae95487ec",
          "body": "…tion (#79)\n\n* feat(wrap): add `lynkr wrap claude` for Pro/Max subscription support\n\nLaunches Claude Code through Lynkr proxy, enabling hybrid provider routing\nfor Pro/Max subscribers without separate API billing.\n\nKey features:\n- Wraps official Claude Code binary (ToS-compliant OAuth forwarding)\n- \n[…]\nred-By: Claude Opus 4.7 <noreply@anthropic.com>\n\n* Added init\n\n---------\n\nCo-authored-by: vishal veerareddy <vishalveera.reddy@servicenow.com>\nCo-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: Multi-Tool Wrap + OAuth Subscription Routing + Headroom Integra…",
          "author_name": "Vishal Veera Reddy",
          "author_login": "vishalveerareddy123",
          "committed_at": "2026-06-30T19:48:01Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "07444adeb4032842896f46b27c908e236568ecb4",
          "body": "…sition (#77)\n\n* feat(routing): tier-aware fallback, output format guard, task decomposition\n\nThree opt-in/always-on improvements to routing resilience and output quality,\ndriven by real T3 Code + Lynkr integration testing.\n\n1. Tier-aware fallback (escalate-then-demote) — src/routing/tier-fallback.j\n[…]\naude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: vishal veerareddy <vishalveera.reddy@servicenow.com>\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(routing): tier-aware fallback, output format guard, task decompo…",
          "author_name": "Vishal Veera Reddy",
          "author_login": "vishalveerareddy123",
          "committed_at": "2026-06-23T08:48:22Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "09977a58e2182f0fa498315ad7208e6d79264843",
          "body": "… by model capability (#76)\n\n* fix(bedrock): flatten cache_control shapes before Converse request\n\ninvokeModel runs injectPromptCaching() before dispatch, which rewrites a\nstring `system` field and message `content` into Anthropic cache_control\nblocks (arrays of `{ type, text, cache_control }`). The\n[…]\nr-only needsCacheInjection signature stays\nbackward-compatible. Only families known not to support cache_control are\nskipped.\n\nExtend test/prompt-cache-injection.test.js with capability-gate coverage.",
          "is_bot": false,
          "headline": "fix(prompt-cache): repair Bedrock Converse mapping and gate injection…",
          "author_name": "Yi Liu",
          "author_login": "sumleo",
          "committed_at": "2026-06-18T03:59:24Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f21ffd49fc2c9ffcfaecdbaeaf2b0a97159c3857",
          "body": "…atch (#74)\n\n* fix(responses): repair blank/orphan tool_call_id before provider dispatch\n\nCodex Desktop's bundled-plugin (Browser/Computer-use) function_call_output\nitems arrive without a usable call_id, which flattened to an empty\ntool_call_id and 400'd at Moonshot (\"Invalid request: tool_call_id  \n[…]\naude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: vishal veerareddy <vishalveera.reddy@servicenow.com>\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(responses): repair blank/orphan tool_call_id before provider disp…",
          "author_name": "Vishal Veera Reddy",
          "author_login": "vishalveerareddy123",
          "committed_at": "2026-06-15T04:55:10Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "6112902a9c4a76be3bbc24d3449cd04998539c1f",
          "body": "- Dockerfile: install prod deps before copying source (better layer cache),\n  drop redundant second npm ci, correct license label MIT → Apache-2.0.\n- docker-compose: fix port mapping 8081:8080 → 8081:8081 and healthcheck port\n  to match PORT=8081; bump image tag and version label to 9.5.0.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(docker): fix build caching, ports, license, version → 9.5.0",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-06-11T18:11:42Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d6784e36e00938099dce6f216d0fa94b93810647",
          "body": null,
          "is_bot": false,
          "headline": "9.5.0",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-06-11T18:08:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "66832791a72ce23c4f9bd441bfbb8d95d486b98d",
          "body": "Working-dir .venv (a Python virtualenv) was being packed — 59.7MB / 16,295\nfiles. Excluding it brings the package back to ~1.2MB / 203 files.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(npm): exclude .venv/.impeccable/path from published package",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-06-11T18:08:30Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "4779c17a665a201bd05193b576df5d87875bac0a",
          "body": "…I guard (#73)\n\n* feat(token-reduction): RTK filters, request bypass, MCP tool dedup, caveman\n\nPort category-A token-reduction features inspired by 9router:\n\n- tool-result-compressor: add grep (per-file match cap), dedup_log (collapse\n  repeated lines), and smart_truncate (head/tail fallback) compre\n[…]\naude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: vishal veerareddy <vishalveera.reddy@servicenow.com>\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Token reduction + routing reliability, provider/cost fixes, native AB…",
          "author_name": "Vishal Veera Reddy",
          "author_login": "vishalveerareddy123",
          "committed_at": "2026-06-11T17:57:26Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "82684d866475a8d1268982dfe4563478a942a9d9",
          "body": null,
          "is_bot": false,
          "headline": "9.4.6",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-06-08T07:32:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d2943d5725a711502078c885bdd48b04fece8bbc",
          "body": "Unhandled throws from getUsage/telemetry left requests hanging indefinitely,\nappearing as 504 Gateway Timeout on the client. Now returns 500 with error\ndetail so the issue is visible rather than a silent timeout.\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: wrap dashboard API handlers in try/catch to prevent 504 hangs",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-06-08T07:32:52Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "a0a37b85954d73b7d9f56bcb2504121296a46a31",
          "body": null,
          "is_bot": false,
          "headline": "9.4.5",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-06-08T07:25:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7870996f6afa1cf3b3fbdf202bcae70cd4393d70",
          "body": "res.sendFile in Express 5 calls next(err) on missing file, producing an\nopaque 404. readFileSync gives a clear error path if file is missing,\nand works reliably regardless of Express version quirks.\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: use fs.readFileSync for dashboard HTML instead of res.sendFile",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-06-08T07:24:59Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "edb22148464f68be418cfb8e1c19cff07e0d4cbe",
          "body": null,
          "is_bot": false,
          "headline": "9.4.4",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-06-08T07:18:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5081fa863b0b7823974a8a3ff36e6c7c3548dce4",
          "body": null,
          "is_bot": false,
          "headline": "chore: stage version bump",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-06-08T07:18:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0ccb56c5e41327d677e974000f32e3b490d39902",
          "body": "app.use(router) was consuming /dashboard before the dashboard sub-router\ncould handle it. Moving to explicit app.get() calls at the top of createApp()\nguarantees the route is always matched.\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: register dashboard routes before main router to prevent shadowing",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-06-08T07:18:40Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "f4b5f9ad855041255de1f3dbd26cfa1f43f5c9cc",
          "body": null,
          "is_bot": false,
          "headline": "9.4.2",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-06-08T07:08:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f5866096325db2eb81cb27bf99770403566cb50e",
          "body": null,
          "is_bot": false,
          "headline": "fix: dashboard sendFile fallback — log actual path on miss",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-06-08T07:08:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "813117f5b3a785689da7edeec1c4383d044c0875",
          "body": null,
          "is_bot": false,
          "headline": "9.4.1",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-06-08T07:05:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7156746c64af173b34a2098afb513a322ba74401",
          "body": "Express strips the mount prefix, leaving an empty string that router.get('/')\ndoes not match. Adding '' to the route array fixes both /dashboard and /dashboard/.\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: dashboard 404 on /dashboard without trailing slash",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-06-08T07:04:44Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "e3a07e04759443ed828fa8b14fba586b4ad7be09",
          "body": "…rt-selection\n\nOld approach: predict which tools ARE needed → brittle, misclassifies\n\"find\"/\"locate\"/\"where is\" as conversational → no Grep/Glob → search breaks.\n\nNew approach: only strip groups we are CERTAIN aren't needed:\n  - Greeting (short, non-technical) → strip everything\n  - No write intent \n[…]\nful\n\nVerified on 9 test cases: file search, web search, write, execute,\ngreeting — all route correctly with zero false negatives on file ops.\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "refactor: replace regex classifier with conservative stripping in sma…",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-06-08T06:56:34Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "817a283031065b5dd3c697fa67a836ec871efc5e",
          "body": "- READ_PATTERN now includes find/locate/where is/which file/list files/open\n  so \"find config.js\" routes to file_reading (Grep+Glob) not conversational (no tools)\n- WEB_PATTERN tightened to \"search online/web/google\" only, so \"search for a file\"\n  no longer gets classified as web research\n- router.js: inject lynkr routing block into content[] array so it renders\n  visibly in Claude Code (not just as top-level lynkr_interaction field)\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: smart tool selection misclassifying file search requests",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-06-08T06:48:01Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "28888cc7d6dc58ec86501a559df23d21faf1b508",
          "body": null,
          "is_bot": false,
          "headline": "9.4.0",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-06-07T20:42:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9415554124ef2c692a5919d5665039577c0743e5",
          "body": null,
          "is_bot": false,
          "headline": "chore: clean up untracked files before release",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-06-07T20:42:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c0c1d7dd8a3dad757bd70c6e137c8ed123e60d06",
          "body": null,
          "is_bot": false,
          "headline": "chore: remove PRODUCT.md",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-06-06T01:40:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "015fa7df6046635e267c1e540b8f7c9521874e85",
          "body": "Heavy rounded grotesque matching the intended heading weight and letterform.\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "design: swap display font Syne → Bricolage Grotesque",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-06-06T01:38:10Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "37dcb213b313efca15031fddeff1503640c85fe9",
          "body": "…sthetic\n\n- New design system: Syne display + IBM Plex Sans/Mono, electric amber accent\n  oklch(0.78 0.17 78), near-black cool bg oklch(0.08 0.008 250)\n- Replaced purple gradient SaaS aesthetic with data-forward, terminal-native look\n- Hero: asymmetric split layout, benchmark numbers as instrument r\n[…]\ntyle.css: full rebrand to match new tokens (amber accent, IBM Plex)\n- Added PRODUCT.md (register: brand, Vercel-reference, anti-refs defined)\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "design: full landing page and docs redesign — Precision Instrument ae…",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-06-06T01:33:04Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "a562005dbbaabe39f5aa2df352d0885c088d7e9a",
          "body": "- Step 1: npm only, removed brew tap command\n- Step 2: updated to show Ollama, Azure OpenAI, and tier routing examples\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: remove Homebrew install, update provider config in quick start",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-06-06T00:55:03Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "6e9344f8ae0ff51d8f9705e08cc5ee82519cef51",
          "body": "Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: replace remaining 'proxy' with 'gateway' on website hero",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-06-06T00:50:09Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "2e81052ec331aac1f10485387b80564503d474ee",
          "body": "- Tagline and hero updated: \"Compress tokens. Cut AI costs.\"\n- Hero stats: 87.6% JSON compression, 53% tool reduction, 171ms cache hits\n- Added benchmark results section to README and GitHub Pages site\n- Feature cards rewritten around measured numbers (TOON, tool selection, semantic cache, tier rout\n[…]\nded benchmarks table and updated architecture diagram\n- All \"LLM proxy\" references replaced with \"LLM gateway\" across all docs and site files\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: update README, website, and docs with benchmark numbers",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-06-06T00:47:55Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "6b4f869b57a55180849b6d0a5e272fb79ebb2bd7",
          "body": null,
          "is_bot": false,
          "headline": "fixed some minor issues",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-06-06T00:07:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7c05091906d470973834fa9f69fa29082b1eeea6",
          "body": "Every social share of Lynkr was rendering empty because the\ncanonical URL, OG image, sitemap, and robots.txt all pointed at\nvishalveerareddy123.github.io/Lynkr (HTTP 404). The real site\nlives at fast-editor.github.io/Lynkr. This also splits Google's\nindex across a dead canonical and the working host\n[…]\nt out into a separate PR because this\ntoken doesn't have the workflow scope. Apply it via the GitHub web\neditor — change line 25:\n  HOST=\"vishalveerareddy123.github.io\" -> HOST=\"fast-editor.github.io\"",
          "is_bot": false,
          "headline": "seo: fix dead canonical URLs, broken social cards, stale metadata (#71)",
          "author_name": "Vishal Veera Reddy",
          "author_login": "vishalveerareddy123",
          "committed_at": "2026-05-30T15:49:40Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f68eb37f12cbc864336e653d986081dc1b097451",
          "body": "- Updated Dockerfile VERSION from 8.0.1 to 9.3.2\n- Updated docker-compose.yml image tag from 2.0.0 to 9.3.2\n- Updated version label from 1.0.1 to 9.3.2\n- Changed default OLLAMA_MODEL from llama3.2 to qwen2.5-coder:latest (better for coding)\n- Updated model recommendations to list qwen2.5-coder first\n- Both files already have NODE_ENV=production (no changes needed)\n\nCo-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: update Docker configs to version 9.3.2 and qwen2.5-coder defaults",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-05-30T02:09:35Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "b962ab8e68b6237f422f2a625e36dec7f403aca8",
          "body": "The default NODE_ENV is now \"production\" as of version 9.3.0 (src/config/index.js:550).\nUsers no longer need to set NODE_ENV manually - the pino-pretty error is automatically\nprevented on all platforms.\n\nUpdated troubleshooting to suggest upgrading instead of setting NODE_ENV.\n\nCo-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: remove NODE_ENV=production requirement (fixed in 9.3.0+)",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-05-30T02:04:56Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "dafd6023f87a8dd9c7fc21b7e360114a3e893371",
          "body": "…oting\n\nImprovements based on user feedback from external Windows users:\n- Added Windows (Command Prompt) and PowerShell syntax for all commands\n- Added NODE_ENV=production to startup commands (prevents pino-pretty error)\n- Added inline \"Common Startup Errors\" section with solutions for:\n  - pino-pr\n[…]\ncommand examples by platform (Windows CMD/PowerShell vs Linux/macOS)\n\nFixes issues reported by users trying to follow Quick Start on Windows.\n\nCo-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: add Windows-specific Quick Start commands and inline troublesho…",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-05-30T02:04:05Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "79a1d43cb4f1a24910cde3999a7571a385120175",
          "body": "* feat: full routing overhaul (phases 1-4 + cross-cutting)\n\nImplements docs/routing-improvement-plan.md across one branch.\n\nPhase 1 — Plug the open loops (default-on):\n  1.1 src/routing/tokenizer.js — js-tiktoken w/ chars/4 fallback;\n      replaces estimator in complexity-analyzer.js and api/router.\n[…]\naphify installation - must be built from source, no npm package\n\n---------\n\nCo-authored-by: vishal veerareddy <vishalveera.reddy@servicenow.com>\nCo-authored-by: Claude Opus 4.7 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: routing overhaul  (#70)",
          "author_name": "Vishal Veera Reddy",
          "author_login": "vishalveerareddy123",
          "committed_at": "2026-05-30T01:54:24Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "d1a93f0168c026053500097cf9196a87dcb170ff",
          "body": "…ections, FAQ (#68)",
          "is_bot": false,
          "headline": "docs: SEO-tune README — keyword-loaded H2s, MCP/Headroom/Trajectory s…",
          "author_name": "Vishal Veera Reddy",
          "author_login": "veerareddyvishal144",
          "committed_at": "2026-05-27T06:35:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9c6d9d38f3f431c53a327080c7b1e18700e1fa65",
          "body": "Removes 121 files that were committed to main but match .gitignore rules:\n- .claude/settings.local.json — local Claude Code permissions\n- .claw/sessions/* — Claw session JSONL logs\n- .deepsec/* — DeepSec security scan output\n- .lynkr/telemetry.db-* — SQLite WAL/SHM files\n\nThese directories are alrea\n[…]\nlves the recurring merge conflicts every feature branch hits.\n\nCo-authored-by: vishal veerareddy <vishalveera.reddy@servicenow.com>\nCo-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: untrack local artifact directories (#67)",
          "author_name": "Vishal Veera Reddy",
          "author_login": "vishalveerareddy123",
          "committed_at": "2026-05-20T22:51:20Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "4a91418369fa90f64b71b4bf1e3516d09c665391",
          "body": "* feat: parallel tool execution + RTK-inspired tool result compressor\n\n- Universal tool→shell converter handles arbitrary tool counts (model decides)\n- Unique tool_use ID generation with sequential counter to prevent collisions when models batch many calls\n- New src/context/tool-result-compressor.js\n[…]\naude Opus 4.7 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: vishal veerareddy <vishalveera.reddy@servicenow.com>\nCo-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Feat/codexsaver inspired routing (#66)",
          "author_name": "Vishal Veera Reddy",
          "author_login": "veerareddyvishal144",
          "committed_at": "2026-05-20T22:51:12Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "4ae5a7717adc648d05709d077bbd3dda0ed81447",
          "body": "* feat: parallel tool execution + RTK-inspired tool result compressor\n\n- Universal tool→shell converter handles arbitrary tool counts (model decides)\n- Unique tool_use ID generation with sequential counter to prevent collisions when models batch many calls\n- New src/context/tool-result-compressor.js\n[…]\nSonnet 4.6 <noreply@anthropic.com>\n\n* added united\n\n---------\n\nCo-authored-by: vishal veerareddy <vishalveera.reddy@servicenow.com>\nCo-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Feat/parallel tool execution (#65)",
          "author_name": "Vishal Veera Reddy",
          "author_login": "veerareddyvishal144",
          "committed_at": "2026-05-20T01:00:51Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "6ea2e7027580d784a1151683427e20ac0ccc34eb",
          "body": "Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: update webpageUrl to GitHub Pages site",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-05-07T02:05:21Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "dda2580bf0003139058de64e1b04ac1751974fa2",
          "body": "Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: trim tags to 10 (floss.fund validation limit)",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-05-07T01:55:53Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "9ed1d3a8f4b32fddcb19a0262c5cb114fb287af4",
          "body": "Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "add funding.json manifest for FOSS United grant application",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-05-07T01:51:01Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "2dde543328e507dc59b6a5c7dcdb6fd7d0fa4227",
          "body": "…#64)\n\n* feat: parallel tool execution + RTK-inspired tool result compressor\n\n- Universal tool→shell converter handles arbitrary tool counts (model decides)\n- Unique tool_use ID generation with sequential counter to prevent collisions when models batch many calls\n- New src/context/tool-result-compre\n[…]\naude Opus 4.6 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: vishal veerareddy <vishalveera.reddy@servicenow.com>\nCo-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: parallel tool execution + RTK-inspired tool result compressor (…",
          "author_name": "Vishal Veera Reddy",
          "author_login": "veerareddyvishal144",
          "committed_at": "2026-04-30T01:17:57Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "567ca08a1fa57e6da6aa411add9f78cd34d8acb1",
          "body": "* Fixed streaming for ollama and moved busy parts to rust\n\n* Removed foreign key error and also added support for streaming ollama\n\n* 1. Stream disconnect — atomic SSE writes via res.end(payload), spec-compliant : keepalive comments, error handler sends proper response.completed\n  2. Tool name misma\n[…]\naude Opus 4.6 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: vishal veerareddy <vishalveera.reddy@servicenow.com>\nCo-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Feat/native rust (#63)",
          "author_name": "Vishal Veera Reddy",
          "author_login": "veerareddyvishal144",
          "committed_at": "2026-04-20T21:54:32Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "e43ce6f95048488a26a465430b2db433af22b9f7",
          "body": "Was hardcoded to 0.6.0, causing \"Version already exists\" errors.\nNow extracts version from skills/lynkr/SKILL.md frontmatter.\n\nCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: read ClawHub publish version from SKILL.md instead of hardcoding",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-04-16T00:32:53Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "118b303a434bc49cb29315805ae9cb7b4507752e",
          "body": "- README: test count 699, 12+ providers, added Graphify/Distill/Code\n  Mode/admin reload/perf timer sections, added Vertex/Moonshot/Z.AI/\n  DeepSeek to provider table, updated comparison table\n- Dockerfile: slimmed to ~70 lines, default provider changed to ollama,\n  fixed OCI labels, added config/bi\n[…]\nex, deepseek), rebuilt tarball\n- All 18 documentation files: repo URLs updated to Fast-Editor/Lynkr\n- docs site: repo URLs updated\n\nCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: update README, Dockerfile, SKILL.md, and all docs for v8.0.1",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-04-16T00:25:41Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "4898cb3d14f9521a1555a2dbc896931fc5042a7b",
          "body": "Feat/codex provider",
          "is_bot": false,
          "headline": "Merge pull request #62 from Fast-Editor/feat/codex-provider",
          "author_name": "Vishal Veera Reddy",
          "author_login": "vishalveerareddy123",
          "committed_at": "2026-04-16T00:11:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ad13fe12814ad75edeb92871af452cfc6a4fb49d",
          "body": "- Code Mode: 4 MCP meta-tools (mcp_list_tools, mcp_tool_info,\n  mcp_tool_docs, mcp_execute) replace 100+ individual MCP tool\n  definitions, cutting tool-catalog tokens from ~17,500 to ~700.\n  Activated via CODE_MODE_ENABLED=true.\n\n- Large Payload Passthrough: smart payload cloning skips deep-copying\n[…]\n16384 across all providers\n  to match sanitizePayload default and prevent output clipping.\n\n- 699 tests passing across 184 suites.\n\nCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: add Code Mode, large payload passthrough, perf timer, admin reload",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-04-16T00:11:14Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "f8c759b2a916f65a4b41e375a9b10ba666024c24",
          "body": "cockatiel package was resolved against npm.devsnc.com (private registry)\ncausing CI ETIMEDOUT failures. Replaced with public registry.npmjs.org.\n\nCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: replace private npm registry URL in lockfile",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-04-09T00:51:20Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "9c8fe01fb54b7bae0df12498be23e263ee4cc271",
          "body": "- Swap code-review-graph for Graphify (19-language AST knowledge graph)\n  with god node detection, community cohesion, and blast radius analysis\n- Port Distill core algorithms (structural similarity, delta rendering,\n  burst detection, bad distillation detection) into compression pipeline\n- Add rout\n[…]\nHeadroom sidecar on npm start (--build flag)\n- Update all documentation and website for v8.0\n- 655 tests passing across 171 suites\n\nCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: add Graphify integration, Distill compression, routing telemetry",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-04-09T00:26:00Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "6f017a2926642b500b4e6474411ffe298d81f9f3",
          "body": "Problem-first framing, hero stats, competitive comparison table\n(vs LiteLLM, OpenRouter, PortKey), cost comparison, tighter quick\nstart, and cleaner feature presentation — modeled after Headroom's\ndeveloper marketing approach.\n\nCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: rewrite README with marketing-focused structure",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-04-08T21:01:20Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "1ecf7fdeabc8762640f5d81450e9056c89f84d28",
          "body": "Adds OpenAI Codex as a Lynkr provider by spawning `codex app-server`\nas a persistent child process communicating via JSON-RPC over stdio.\nThis inherits the user's local ChatGPT subscription auth, so no\nseparate API key is needed.\n\nNew files:\n- src/clients/codex-process.js — singleton process manager\n[…]\nDIUM=codex:gpt-5.3-codex\n  TIER_COMPLEX=codex:gpt-5.3-codex-spark\n  TIER_REASONING=bedrock:anthropic.claude-sonnet-4-20250514-v1:0\n\nCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: add Codex provider — use ChatGPT subscription through Lynkr",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-03-24T23:09:56Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "3df28c9bc39b5029079014fd24045aab49cce717",
          "body": "Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: add retry logic for ClawHub rate limit on publish",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-03-22T05:09:58Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d36147e55015d0f1df33f451b02242685e28a326",
          "body": "Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: remove unsupported --force flag from clawhub publish",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-03-22T05:09:10Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "a959f098b83343574ad1bbd036bcea452557fd6a",
          "body": "Adds SKILL.md for ClawHub marketplace, OPENCLAW_MODE config for model\nname rewriting in responses, and GitHub Actions workflow for automated\npublishing. When enabled, responses show actual provider/model used\ninstead of generic \"auto\".\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: add Lynkr OpenClaw plugin with ClawHub publish workflow",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-03-22T05:08:29Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d0863a21b43bbe42c069fe6cbc43b82c7747d784",
          "body": null,
          "is_bot": false,
          "headline": "Corrected headrs",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-03-21T06:35:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7dda394f417ef213232fafa4d34b43ab49a9a18b",
          "body": "…n (#59)\n\nWhen clients send tool_choice: \"none\" or an explicit tools array (even\nempty), Lynkr now respects that intent and skips injecting IDE_SAFE_TOOLS.\nPreviously, an empty tools array was converted to null during OpenAI→Anthropic\nformat conversion, causing the injection check to trigger regardless.\n\nFixes #59\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: respect client tool_choice and tools array to skip tool injectio…",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-03-17T01:24:31Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "cba14ec52a6448fdd4703bc1a46f25ce25218e80",
          "body": "Adds browser automation capabilities to all LLM models routed through\nLynkr via the TinyFish.ai API. The WebAgent tool navigates real websites,\ninteracts with dynamic JS content, fills forms, and returns structured JSON.\n\n- New src/tools/tinyfish.js with SSE stream consumer, retry logic, timeout\n- C\n[…]\naliases, truncation limits\n- Dockerfile and docker-compose.yml updated with TinyFish env vars\n- .env.example synced with current .env structure\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: integrate TinyFish.ai as WebAgent server-side tool",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-02-23T15:14:31Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "a543283b812f6deb04cf4e773897d0a6ec497eab",
          "body": null,
          "is_bot": false,
          "headline": "update documentation for AWS Bedrock usage (#57)",
          "author_name": "Ajay Chinthalapalli Jayakumar",
          "author_login": "ajaycj",
          "committed_at": "2026-02-23T05:32:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "60d4122da1d4b1790bc4ae4af8a249bb17907825",
          "body": "Fix typograchial error in readme",
          "is_bot": false,
          "headline": "Update README.md (#58)",
          "author_name": "Ajay Chinthalapalli Jayakumar",
          "author_login": "ajaycj",
          "committed_at": "2026-02-23T05:30:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f9d88341c71dfe1e7e4addb77a463004806b69de",
          "body": null,
          "is_bot": false,
          "headline": "updated package.json",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-02-22T16:05:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2f6319bb26498e64d988aaac316f74dcc12c616e",
          "body": "* chore: move dockerode to optionalDependencies, wrap require\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>\n\n* Added tiered System\n\n* Added docs\n\n* Fix IDE client tool filtering and Codex CLI tool mappings\n\n- Fix Codex Bash mapping: shell_command → shell (array format for command)\n- Add m\n[…]\n-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>\n\n* Result\n\n---------\n\nCo-authored-by: vishal veerareddy <vishalveera.reddy@servicenow.com>\nCo-authored-by: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: Adds intelligent tiered model routing (#47)",
          "author_name": "Vishal Veera Reddy",
          "author_login": "vishalveerareddy123",
          "committed_at": "2026-02-22T14:44:39Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "4562795f03eea272ee706e948d83d99ffc659f1c",
          "body": "…alidate on Ollama Cloud GLM-5 (#54)\n\n* feat(toon): add flag-gated prompt compression with safe fallback tests\n\n* fix(toon): support anthropic text blocks while preserving protocol payloads\n\n* fix(toon): run compression before message coalescing\n\n* docs: add TOON integration spec\n\n* fix(budget): prevent startup crash from dbPath scope error\n\n* docs(toon): add stock ollama glm-5 cloud validation results\n\n---------\n\nCo-authored-by: Plaidmustache <plaidmustache@users.noreply.github.com>",
          "is_bot": false,
          "headline": "feat: add flag-gated TOON compression (~10-39% payload reduction) + v…",
          "author_name": "Plaidmustache",
          "author_login": "Plaidmustache",
          "committed_at": "2026-02-19T17:20:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "97cda6e545121c0a55515443c5aed83862bb457b",
          "body": null,
          "is_bot": false,
          "headline": "Fixed Tests",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-02-18T07:58:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "96a462b8d26483d824f52a688a792fb4cf43ebfa",
          "body": null,
          "is_bot": false,
          "headline": "dbpath issue is resolved",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-02-18T07:50:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "221d7c5a9cffb09599adf2c0cd83133b5851efeb",
          "body": "Bug fix: remove hardcoded azure-openai fallback in SubagentExecutor._callModel. Subagents now use config.modelProvider.type (with legacy provider fallback) for Claude/GPT family models. This prevents Task/subagent failures on non-Azure setups (e.g., moonshot/openai/openrouter).\n\nCo-authored-by: Plaidmustache <plaidmustache@users.noreply.github.com>",
          "is_bot": false,
          "headline": "fix(agents): honor MODEL_PROVIDER for subagent routing (#52)",
          "author_name": "Plaidmustache",
          "author_login": "Plaidmustache",
          "committed_at": "2026-02-18T07:48:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d056bb655d4f17a30c3c3deef9349128606c9295",
          "body": "Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: move dockerode to optionalDependencies, wrap require",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-02-11T10:17:56Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "53f1f14770aa8b1166c33966207473449bec2451",
          "body": "Problem: The fs_read tool could only read files inside the workspace directory.\nUsers working with external configuration files, documentation, or system files\nhad no way to read them through the tool interface, forcing manual workarounds.\n\nChanges implemented:\n\n1. External path detection and tilde \n[…]\npproval flow\n- Paths inside workspace still use the fast path (no approval needed)\n- Write and edit operations remain workspace-only (no external writes)\n- npm run test:unit passes with no regressions",
          "is_bot": false,
          "headline": "Add external file read with tilde expansion and user approval flow (#40)",
          "author_name": "Björn Christoph",
          "author_login": "MichaelAnders",
          "committed_at": "2026-02-11T10:00:11Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "18864041c9cd5da499b0fe8868851e3452f15ece",
          "body": "…s (#42)\n\nProblem: Each user message triggers three concurrent runAgentLoop calls\n(main, suggestion, and others). When using large local models via Ollama,\neach call takes 30-90 seconds of GPU time. Suggestion mode calls are low-value\nand waste significant compute resources that could be serving the\n[…]\n_MODE_MODEL=default (or unset): unchanged behavior\n- Main agent loop unaffected in all cases\n- Hallucination guard tested with Llama 3.1 no-tool requests\n- npm run test:unit passes with no regressions",
          "is_bot": false,
          "headline": "Add SUGGESTION_MODE_MODEL env var to control suggestion mode LLM call…",
          "author_name": "Björn Christoph",
          "author_login": "MichaelAnders",
          "committed_at": "2026-02-11T09:59:17Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "57764158dd6a94f15c2b96eb80ee52654eba17e8",
          "body": "Apply the same HEADROOM_ENABLED check to the stop script to avoid\naccidentally shutting down someone else's headroom container.\n\nSuggested by @iiiCpu in #46\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: also check env vars in stop script",
          "author_name": "vishal veerareddy",
          "author_login": null,
          "committed_at": "2026-02-11T09:55:59Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "0a4e68f26264e6159f3aec29104b5994421101f6",
          "body": "…on (#43)\n\nProblem: The CLI injects <system-reminder> blocks into user messages containing\nkeywords like \"search\", \"explain\", and \"documentation\". The smart selection\nclassifier was scanning the full message content including these injected blocks,\ncausing it to misclassify requests based on keyword\n[…]\nser content\n- Simple greetings no longer misclassified as research/coding requests\n- Messages without system-reminder blocks behave identically to before\n- npm run test:unit passes with no regressions",
          "is_bot": false,
          "headline": "Strip system-reminder blocks before smart tool selection classificati…",
          "author_name": "Björn Christoph",
          "author_login": "MichaelAnders",
          "committed_at": "2026-02-11T09:52:50Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "bb9fa39d1f9ed20670cd7d4a8e30477711508d02",
          "body": "Problem: When the Ollama provider was offline or unreachable, the raw TypeError\nfrom the failed fetch bubbled up to the Express error middleware, producing an\nunhelpful 500 error. The retry client also did not recognize ECONNREFUSED as a\nretryable error, so connection-refused failures failed immedia\n[…]\nrash in Express middleware\n- Started Ollama back up: requests resume normally\n- Retry behavior verified: ECONNREFUSED triggers backoff retries before 503\n- npm run test:unit passes with no regressions",
          "is_bot": false,
          "headline": "Handle Ollama offline gracefully with retry and 503 response (#41)",
          "author_name": "Björn Christoph",
          "author_login": "MichaelAnders",
          "committed_at": "2026-02-11T09:50:45Z",
          "body_truncated": true,
          "is_coding_agent": false
        }
      ],
      "releases_count": 2,
      "commits_last_year": 209,
      "latest_release_at": "2026-06-23T08:52:38Z",
      "latest_release_tag": "v9.6.0",
      "releases_from_tags": false,
      "days_since_last_push": 4,
      "active_weeks_last_year": 27,
      "days_since_latest_release": 35,
      "mean_days_between_releases": 201.2
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": false,
      "health_percentage": 37,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "lynkr",
          "exists": true,
          "license": "Apache-2.0",
          "keywords": [
            "llm",
            "llm-gateway",
            "llm-proxy",
            "llm-router",
            "ai-gateway",
            "tier-routing",
            "claude",
            "claude-code",
            "anthropic",
            "cursor",
            "codex",
            "openai",
            "openrouter",
            "ollama",
            "llamacpp",
            "lm-studio",
            "bedrock",
            "aws-bedrock",
            "azure-openai",
            "databricks",
            "gemini",
            "mcp",
            "model-context-protocol",
            "prompt-cache",
            "self-hosted",
            "litellm-alternative",
            "portkey-alternative",
            "copilot-alternative"
          ],
          "ecosystem": "npm",
          "matches_repo": true,
          "registry_url": "https://www.npmjs.com/package/lynkr",
          "is_deprecated": false,
          "latest_version": "9.10.0",
          "repository_url": "https://github.com/Fast-Editor/Lynkr",
          "versions_count": 64,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 1,
          "monthly_downloads": 2446,
          "first_published_at": "2025-12-04T01:56:38.447000Z",
          "latest_published_at": "2026-07-22T08:19:04.162000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 6
        }
      ]
    },
    "popularity": {
      "forks": 57,
      "stars": 538,
      "watchers": 4,
      "fork_history": {
        "days": [
          {
            "date": "2025-12-18",
            "count": 1
          },
          {
            "date": "2026-01-03",
            "count": 4
          },
          {
            "date": "2026-01-04",
            "count": 6
          },
          {
            "date": "2026-01-06",
            "count": 1
          },
          {
            "date": "2026-01-07",
            "count": 1
          },
          {
            "date": "2026-01-12",
            "count": 1
          },
          {
            "date": "2026-01-14",
            "count": 1
          },
          {
            "date": "2026-01-16",
            "count": 1
          },
          {
            "date": "2026-01-20",
            "count": 1
          },
          {
            "date": "2026-01-22",
            "count": 1
          },
          {
            "date": "2026-02-01",
            "count": 2
          },
          {
            "date": "2026-02-03",
            "count": 1
          },
          {
            "date": "2026-02-04",
            "count": 2
          },
          {
            "date": "2026-02-05",
            "count": 1
          },
          {
            "date": "2026-02-06",
            "count": 1
          },
          {
            "date": "2026-02-07",
            "count": 1
          },
          {
            "date": "2026-02-16",
            "count": 1
          },
          {
            "date": "2026-02-18",
            "count": 3
          },
          {
            "date": "2026-02-19",
            "count": 5
          },
          {
            "date": "2026-02-20",
            "count": 1
          },
          {
            "date": "2026-02-23",
            "count": 2
          },
          {
            "date": "2026-02-28",
            "count": 1
          },
          {
            "date": "2026-03-02",
            "count": 1
          },
          {
            "date": "2026-03-06",
            "count": 1
          },
          {
            "date": "2026-03-12",
            "count": 1
          },
          {
            "date": "2026-03-25",
            "count": 1
          },
          {
            "date": "2026-05-27",
            "count": 1
          },
          {
            "date": "2026-06-02",
            "count": 1
          },
          {
            "date": "2026-06-08",
            "count": 1
          },
          {
            "date": "2026-06-13",
            "count": 1
          },
          {
            "date": "2026-06-17",
            "count": 1
          },
          {
            "date": "2026-06-21",
            "count": 1
          },
          {
            "date": "2026-07-01",
            "count": 1
          },
          {
            "date": "2026-07-02",
            "count": 1
          },
          {
            "date": "2026-07-03",
            "count": 4
          },
          {
            "date": "2026-07-14",
            "count": 1
          },
          {
            "date": "2026-07-15",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 57,
        "total_forks": 57
      },
      "star_history": null,
      "open_issues_and_prs": 2
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [
        "examples"
      ],
      "has_llms_txt": false,
      "has_dockerfile": true,
      "has_mcp_signal": false,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [
        "packages/ai-sdk-provider/tsconfig.json"
      ],
      "toolchain_manifests": [
        "native/Cargo.toml"
      ],
      "largest_source_bytes": 403191,
      "source_files_sampled": 323,
      "oversized_source_files": 11,
      "agent_instruction_files": [],
      "agent_instruction_max_bytes": null
    },
    "dependencies": {
      "manifests": [
        "headroom-sidecar/requirements.txt",
        "native/Cargo.toml",
        "package.json"
      ],
      "advisories": {
        "error": null,
        "scope": "published_package",
        "source": "osv",
        "findings": [
          {
            "name": "uuid",
            "direct": false,
            "version": "10.0.0",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-w5hq-g745-h8pq"
            ],
            "fixed_version": "13.0.1",
            "advisory_count": 1,
            "oldest_advisory_days": 97
          }
        ],
        "collected": true,
        "malicious": [],
        "truncated": false,
        "by_severity": {
          "high": 1
        },
        "advisory_count": 1,
        "affected_count": 1,
        "assessed_count": 247,
        "malicious_count": 0,
        "assessed_package": "npm:lynkr@9.10.0",
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "crates",
        "npm",
        "pypi"
      ],
      "dependencies": [
        {
          "name": "napi",
          "manifest": "native/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "3"
        },
        {
          "name": "napi-derive",
          "manifest": "native/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "3"
        },
        {
          "name": "serde",
          "manifest": "native/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        },
        {
          "name": "serde_json",
          "manifest": "native/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        },
        {
          "name": "regex",
          "manifest": "native/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        },
        {
          "name": "sha2",
          "manifest": "native/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.10"
        },
        {
          "name": "hex",
          "manifest": "native/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.4"
        },
        {
          "name": "mimalloc",
          "manifest": "native/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.1"
        },
        {
          "name": "@azure/openai",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.0.0"
        },
        {
          "name": "@babel/parser",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^7.29.0"
        },
        {
          "name": "@babel/traverse",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^7.29.0"
        },
        {
          "name": "@blackwell-systems/gcf",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "2.4.0"
        },
        {
          "name": "@toon-format/toon",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.1.0"
        },
        {
          "name": "cockatiel",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^3.2.1"
        },
        {
          "name": "compression",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.7.4"
        },
        {
          "name": "diff",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^5.2.0"
        },
        {
          "name": "dotenv",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^16.4.5"
        },
        {
          "name": "express",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^5.1.0"
        },
        {
          "name": "express-rate-limit",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^8.2.1"
        },
        {
          "name": "fast-glob",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^3.3.2"
        },
        {
          "name": "graphify",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.0.0"
        },
        {
          "name": "hnswlib-node",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^3.0.0"
        },
        {
          "name": "js-tiktoken",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.0.20"
        },
        {
          "name": "js-yaml",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^4.1.1"
        },
        {
          "name": "openai",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^6.14.0"
        },
        {
          "name": "pino",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^8.17.2"
        },
        {
          "name": "pino-http",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^8.6.0"
        },
        {
          "name": "pino-roll",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^4.0.0"
        },
        {
          "name": "undici",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^6.22.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": 45,
        "open_issues": 2,
        "closed_ratio": 0.913,
        "closed_issues": 21,
        "closed_unmerged_prs": 12
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "vishalveerareddy123",
          "commits": 30,
          "avatar_url": "https://avatars.githubusercontent.com/u/164256536?v=4"
        },
        {
          "type": "User",
          "login": "MichaelAnders",
          "commits": 12,
          "avatar_url": "https://avatars.githubusercontent.com/u/1708499?v=4"
        },
        {
          "type": "User",
          "login": "veerareddyvishal144",
          "commits": 6,
          "avatar_url": "https://avatars.githubusercontent.com/u/22112006?v=4"
        },
        {
          "type": "User",
          "login": "hillct",
          "commits": 3,
          "avatar_url": "https://avatars.githubusercontent.com/u/161479?v=4"
        },
        {
          "type": "User",
          "login": "ajaycj",
          "commits": 2,
          "avatar_url": "https://avatars.githubusercontent.com/u/7185561?v=4"
        },
        {
          "type": "User",
          "login": "Plaidmustache",
          "commits": 2,
          "avatar_url": "https://avatars.githubusercontent.com/u/161773990?v=4"
        },
        {
          "type": "User",
          "login": "blackwell-systems",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/236632453?v=4"
        },
        {
          "type": "User",
          "login": "MVS-source",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/72023257?v=4"
        },
        {
          "type": "User",
          "login": "sumleo",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/29517764?v=4"
        }
      ],
      "contributors_sampled": 9,
      "top_contributor_share": 0.517
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "ci.yml",
        "clawhub-publish.yml",
        "edenai-integration.yml",
        "index.yml",
        "web-tools-tests.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [
        ".eslintrc.cjs"
      ],
      "has_editorconfig": false,
      "has_linter_config": true,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "Cargo.lock",
        "package-lock.json"
      ],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 0,
            "reason": "binaries present in source code",
            "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": 10,
            "reason": "8 out of 8 merged PRs checked by a CI test -- score normalized to 10",
            "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": 2,
            "reason": "Found 5/22 approved changesets -- score normalized to 2",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 0,
            "reason": "project has 0 contributing companies or organizations -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 10,
            "reason": "no dangerous workflow patterns detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 0,
            "reason": "no update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 10,
            "reason": "30 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": null,
            "reason": "packaging workflow not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 1,
            "reason": "dependency not pinned by hash detected -- score normalized to 1",
            "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": 0,
            "reason": "Project has not signed or included provenance with any releases.",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 0,
            "reason": "detected GitHub workflow tokens with excessive permissions",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 0,
            "reason": "45 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "57f06be35d8449fb344669a3d6160e1a7ee58215",
        "ran_at": "2026-07-28T21:32:17Z",
        "aggregate_score": 2.5,
        "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-24T01:42:31Z",
      "oldest_open_prs": [],
      "last_merged_pr_at": "2026-07-22T08:20:23Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": [
        {
          "number": 32,
          "created_at": "2026-02-03T18:52:10Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 33,
          "created_at": "2026-02-03T18:53:25Z",
          "last_comment_at": null,
          "last_comment_author": null
        }
      ]
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/Fast-Editor/Lynkr",
    "host": "github.com",
    "name": "Lynkr",
    "owner": "Fast-Editor"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 65,
      "inputs": {
        "security": 35,
        "vitality": 80,
        "community": 56,
        "governance": 59,
        "engineering": 90
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "good",
        "name": "Vitality",
        "value": 80,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "good",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 83,
            "inputs": {
              "commits_last_year": 209,
              "human_commit_share": 1,
              "days_since_last_push": 4,
              "active_weeks_last_year": 27
            },
            "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": "27/52 weeks with commits",
                "points": 18.7,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 27
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "209 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 209
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "30 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "good",
            "name": "Release discipline",
            "note": null,
            "notes": [],
            "value": 76,
            "inputs": {
              "releases_count": 2,
              "latest_release_tag": "v9.6.0",
              "releases_from_tags": false,
              "days_since_latest_release": 35,
              "mean_days_between_releases": 201.2
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "2 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 35 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 35
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~201.2 days",
                "points": 12.6,
                "status": "partial",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 201.2
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "Project has not signed or included provenance with any releases.",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "maintained",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": null,
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": 4,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "last human commit 4 days ago",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_maintained",
                    "params": {
                      "days": 4
                    }
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "moderate",
        "name": "Community & Adoption",
        "value": 56,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "moderate",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 62,
            "inputs": {
              "forks": 57,
              "stars": 538,
              "watchers": 4,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "538 stars",
                "points": 44.3,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 538
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "57 forks",
                "points": 14.6,
                "status": "partial",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 57
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "4 watchers",
                "points": 2.7,
                "status": "partial",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 4
                    }
                  }
                ],
                "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 (Apache-2.0)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "Apache-2.0"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 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": 56,
            "inputs": {
              "packages": [
                "lynkr"
              ],
              "dependents": null,
              "ecosystems": "npm",
              "total_downloads": null,
              "monthly_downloads": 2446
            },
            "components": [
              {
                "key": "monthly_downloads",
                "name": "Monthly downloads",
                "detail": "2,446 downloads/month across npm",
                "points": 45.2,
                "status": "partial",
                "details": [
                  {
                    "code": "downloads_monthly",
                    "params": {
                      "count": 2446,
                      "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": 59,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "at_risk",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 32,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 9,
              "top_contributor_share": 0.517
            },
            "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 52% of commits",
                "points": 10.9,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 52
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "9 contributors",
                "points": 12.2,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 9
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 0 contributing companies or organizations -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "good",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 76,
            "inputs": {
              "merged_prs": 45,
              "open_issues": 2,
              "closed_issues": 21,
              "issue_closed_ratio": 0.913,
              "closed_unmerged_prs": 12
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "91% of issues closed",
                "points": 42.7,
                "status": "partial",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 91
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "45/57 decided PRs merged",
                "points": 30.2,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 45,
                      "decided": 57
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 5/22 approved changesets -- score normalized to 2",
                "points": 3,
                "status": "partial",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "at_risk",
            "name": "Ownership & stewardship",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "followers": 2,
              "owner_type": "Organization",
              "is_verified": null,
              "owner_login": "Fast-Editor",
              "public_repos": 4,
              "account_age_days": 225
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "organization-owned",
                "points": 30,
                "status": "met",
                "details": [
                  {
                    "code": "owner_organization",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "2 followers of Fast-Editor",
                "points": 3.4,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 2,
                      "login": "Fast-Editor"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "4 public repos, account ~0 yr old",
                "points": 6.3,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 4
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 0
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "lynkr"
              ],
              "ecosystems": "npm",
              "any_deprecated": false,
              "min_days_since_publish": 6
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "1 package(s) on npm",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 1,
                      "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": "64 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 64
                    }
                  }
                ],
                "max_points": 20
              },
              {
                "key": "not_deprecated",
                "name": "Not deprecated",
                "detail": "active, not deprecated or yanked",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "package_not_deprecated",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "excellent",
        "name": "Engineering Quality",
        "value": 90,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "good",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 84,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": true,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "5 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 5
                    }
                  }
                ],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 24,
                "status": "met",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": ".eslintrc.cjs",
                "points": 16,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".eslintrc.cjs"
                    }
                  }
                ],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "8 out of 8 merged PRs checked by a CI test -- score normalized to 10",
                "points": 20,
                "status": "met",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "excellent",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "topics": [
                "claude",
                "claudecode",
                "databricks",
                "agents",
                "ai",
                "code-assistant",
                "code-generation",
                "developer-tools",
                "llm",
                "mcp",
                "llmops",
                "ai-gateway",
                "cursor",
                "llamacpp",
                "llm-gateway",
                "llm-proxy",
                "llm-router",
                "ollama",
                "prompt-caching",
                "self-hosted"
              ],
              "has_wiki": true,
              "homepage": "https://fast-editor.github.io/Lynkr/",
              "has_readme": true,
              "has_docs_dir": true,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 25,
                "status": "met",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": "https://fast-editor.github.io/Lynkr/",
                "points": 15,
                "status": "met",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": "20 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 20
                    }
                  }
                ],
                "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": 35,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "critical",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Packaging. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "packaging"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 24,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 17,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 1,
              "scorecard_aggregate": 2.5
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "binaries present in source code",
                "points": 0,
                "status": "missed",
                "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": "8 out of 8 merged PRs checked by a CI test -- score normalized to 10",
                "points": 2.5,
                "status": "met",
                "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 5/22 approved changesets -- score normalized to 2",
                "points": 1.5,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 0 contributing companies or organizations -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "no update tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "30 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 10",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow not detected",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 1",
                "points": 0.5,
                "status": "partial",
                "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": "Project has not signed or included provenance with any releases.",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "detected GitHub workflow tokens with excessive permissions",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "45 existing vulnerabilities detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "dependency_advisories",
            "band": "good",
            "name": "Dependency advisories",
            "note": "Matched the npm:lynkr@9.10.0 runtime dependency closure — what installing the published package pulls in — 247 packages. Reachability is not analyzed.",
            "notes": [
              {
                "code": "advisories_scope_published",
                "params": {
                  "package": "npm:lynkr@9.10.0",
                  "assessed": 247
                }
              },
              {
                "code": "advisories_reachability",
                "params": {}
              }
            ],
            "value": 79,
            "inputs": {
              "source": "osv",
              "advisories": 1,
              "affected_packages": 1,
              "assessed_packages": 247,
              "unassessed_packages": 0,
              "affected_by_severity": "high 1",
              "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": "1 affected: uuid 10.0.0 (high 7.5)",
                "points": 10,
                "status": "partial",
                "details": [
                  {
                    "code": "advisories_affected",
                    "params": {
                      "count": 1,
                      "packages": "uuid 10.0.0 (high 7.5)"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "no_advisories_left_outstanding",
                "name": "No advisories left outstanding",
                "detail": "1 advisory-carrying package(s) unaddressed past 90 days; oldest published 97 days ago",
                "points": 33.7,
                "status": "partial",
                "details": [
                  {
                    "code": "advisories_stale",
                    "params": {
                      "days": 90,
                      "count": 1,
                      "oldest": 97
                    }
                  }
                ],
                "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": 247,
              "malicious_packages": 0,
              "direct_malicious_packages": 0,
              "withdrawn_malicious_packages": 0,
              "installable_malicious_packages": 0
            },
            "components": [
              {
                "key": "no_dependency_reported_as_a_malicious_package",
                "name": "No dependency reported as a malicious package",
                "detail": "no dependency is reported as a malicious package",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "no_malicious_dependencies",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          },
          {
            "key": "high_risk_jurisdiction_exposure",
            "band": "excellent",
            "name": "High-Risk Jurisdiction Exposure",
            "note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
            "notes": [
              {
                "code": "jurisdiction_evidence_limits",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "meaning": "self-published location evidence; not nationality or citizenship",
              "red_flag": false,
              "exposures": [],
              "policy_countries": [
                "Russia",
                "Iran",
                "North Korea"
              ],
              "review_only_matches": 0,
              "assessed_self_published_locations": 4
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "no confirmed policy-scope location match",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "jurisdiction_no_match",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "moderate",
        "name": "AI Readiness",
        "value": 61,
        "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.82,
              "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": "82 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 82,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "good",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 78,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "Cargo.lock",
                "package-lock.json"
              ],
              "has_dockerfile": true,
              "typed_language": false,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": true,
              "typecheck_configs": [
                "packages/ai-sdk-provider/tsconfig.json"
              ],
              "agent_commit_share": 0.47,
              "toolchain_manifests": [
                "native/Cargo.toml"
              ],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "native/Cargo.toml (toolchain convention, no task runner)",
                "points": 12.6,
                "status": "partial",
                "details": [
                  {
                    "code": "toolchain_convention",
                    "params": {
                      "files": "native/Cargo.toml"
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": ".eslintrc.cjs",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".eslintrc.cjs"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "packages/ai-sdk-provider/tsconfig.json",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "packages/ai-sdk-provider/tsconfig.json"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "Dockerfile, lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Dockerfile, lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "47 of the last 100 commits agent-authored or agent-credited",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 47,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "no automated dependency updates observed",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_dependency_automation",
                    "params": {}
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 1",
                "points": 1,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "good",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 80,
            "inputs": {
              "primary_language": "JavaScript",
              "largest_source_bytes": 403191,
              "source_files_sampled": 323,
              "oversized_source_files": 11
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "JavaScript with type-check config (packages/ai-sdk-provider/tsconfig.json)",
                "points": 27,
                "status": "partial",
                "details": [
                  {
                    "code": "typecheck_config_language",
                    "params": {
                      "files": "packages/ai-sdk-provider/tsconfig.json",
                      "language": "JavaScript"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "11/323 source files over 60KB",
                "points": 53.1,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 323,
                      "oversized": 11
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "at_risk",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "example_dirs": [
                "examples"
              ],
              "has_mcp_signal": false,
              "api_schema_files": []
            },
            "components": [
              {
                "key": "api_schema_openapi_graphql_proto",
                "name": "API schema (OpenAPI/GraphQL/proto)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 40
              },
              {
                "key": "mcp_server",
                "name": "MCP server",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "runnable_examples",
                "name": "Runnable examples",
                "detail": "examples",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "examples"
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token",
    "Could not fetch crates package 'lynkr-native' from its registry",
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-28T21:33:06.522990Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/f/Fast-Editor/Lynkr.svg",
  "full_name": "Fast-Editor/Lynkr",
  "license_state": "standard",
  "license_spdx": "Apache-2.0"
}

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

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

Wie ein einzelnes Ergebnis im Gesamtregister steht: aggregierte Statistikennpm.