Registro público
Informe de salud del softwareesquema 0.27.0 · métricas 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 estrellas⑂ 57 forksdesde dic 2025Ver en GitHub ↗

Fast-Editor/Lynkr tiene un índice de salud de 65 sobre 100, lo que lo sitúa en la banda Moderado. Su puntuación más alta es Engineering Quality (90/100) y la más baja, Security (35/100). Se actualizó por última vez hace 4 días. Una sola persona concentra la mayor parte del trabajo reciente.

65
global / 100
Moderado

Índice de salud del software

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

65
Excelente85-100Ejemplar; cumple prácticamente todos los criterios evaluados
Bueno70-84Saludable; carencias menores
Moderado50-69Aceptable con carencias notables; se recomienda revisión
En riesgo30-49Debilidades significativas; su adopción exige cautela
Crítico1-29Problemas graves (proyecto abandonado, un solo mantenedor, sin higiene)
VitalidadComunidad yAdopciónSostenibilidady GobernanzaCalidad deIngenieríaSeguridadPreparaciónpara IA

Perfil de puntuación

Cada eje es una categoría. La forma importa más que la media: un proyecto sano llena toda la figura, mientras que un perfil de picos y cráteres indica que la fortaleza en una dimensión enmascara el riesgo en otra.

Titularidad

Fast-EditorOrganización
2 seguidores4 repositorios públicosdesde dic 2025

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

Ecosistemas de paquetes

Métricas por categoría

Vitalidad

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

80Bueno · 22% del índice global
Cómo se puntúa
36/36Recencia de push — último push hace 4 días
18.7/36Cadencia de commits — 27/52 semanas con commits
18/18Volumen de commits — 209 commits en el último año
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 10
Datos de entrada utilizados
commits_last_year209
human_commit_share1
days_since_last_push4
active_weeks_last_year27
Cómo se puntúa
27/27Publica versiones — 2 versiones publicadas
36/36Recencia de las versiones — última versión hace 35 días
12.6/27Cadencia de publicación — una versión cada ~201,2 días
0/10OpenSSF Scorecard: Signed-Releases — Project has not signed or included provenance with any releases.
Datos de entrada utilizados
releases_count2
latest_release_tagv9.6.0
releases_from_tagsno
days_since_latest_release35
mean_days_between_releases201,2

Comunidad y Adopción

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

56Moderado · 18% del índice global
Cómo se puntúa
44.3/60Estrellas — 538 estrellas
14.6/25Forks — 57 forks
2.7/15Observadores — 4 observadores
Datos de entrada utilizados
forks57
stars538
watchers4
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Cómo se puntúa
22.5/22.5README
22.5/22.5Licencia — licencia reconocida (Apache-2.0)
0/18Guía CONTRIBUTING
0/13.5Código de conducta
0/7.2Plantilla de issues
0/6.3Plantilla de PR
Datos de entrada utilizados
has_readme
has_license
has_contributingno
has_issue_templateno
has_code_of_conductno
has_pull_request_templateno
Cómo se puntúa
45.2/80Descargas mensuales — 2446 descargas/mes en npm
0/20Dependientes en el registro — no lo informa este ecosistema
Datos de entrada utilizados
packageslynkr
dependents
ecosystemsnpm
total_downloads
monthly_downloads2446
Excluidos de la puntuación (sin datos o no aplicable): Dependientes en el registro. Los pesos restantes se han renormalizado.

Sostenibilidad y Gobernanza

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

59Moderado · 24% del índice global
Cómo se puntúa
9/54Factor bus — la mitad de los commits recae en 1 contribuyente(s)
10.9/22.5Distribución de commits — el principal contribuyente firma el 52% de los commits
12.2/13.5Amplitud de contribuyentes — 9 contribuyentes
0/10OpenSSF Scorecard: Contributors — project has 0 contributing companies or organizations -- score normalized to 0
Datos de entrada utilizados
bus_factor1
contributors_sampled9
top_contributor_share0,517
Cómo se puntúa
42.7/46.8Resolución de issues — 91% de issues cerradas
30.2/38.3Aceptación de PR — 45/57 PR decididos fusionados
3/15OpenSSF Scorecard: Code-Review — Found 5/22 approved changesets -- score normalized to 2
Datos de entrada utilizados
merged_prs45
open_issues2
closed_issues21
issue_closed_ratio0,913
closed_unmerged_prs12
Cómo se puntúa
30/30Respaldo de la propiedad — propiedad de una organización
0/20Dominio verificado
3.4/25Alcance del propietario — 2 seguidores de Fast-Editor
6.3/25Trayectoria — 4 repos públicos, cuenta de ~0 años
Datos de entrada utilizados
followers2
owner_typeOrganization
is_verified
owner_loginFast-Editor
public_repos4
account_age_days225
Cómo se puntúa
25/25Publicado y resoluble — 1 paquete(s) en npm
35/35Recencia de publicación — última publicación hace 6 días
20/20Historial de versiones — 64 versiones en el registro
20/20No obsoleto — activo, ni obsoleto ni retirado
Datos de entrada utilizados
packageslynkr
ecosystemsnpm
any_deprecatedno
min_days_since_publish6

Calidad de Ingeniería

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

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

Documentación

100Excelente
Cómo se puntúa
30/30README
25/25Directorio de documentación
15/15Sitio de documentación / página del proyecto — https://fast-editor.github.io/Lynkr/
10/10Descripción del repositorio
10/10Topics — 20 topics
10/10Wiki
Datos de entrada utilizados
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_wiki
homepagehttps://fast-editor.github.io/Lynkr/
has_readme
has_docs_dir
has_description

Seguridad

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

35En riesgo · 16% del índice global
Cómo se puntúa
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.5Licencia — 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 — sin datos
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
Datos de entrada utilizados
sourceopenssf_scorecard
checks_evaluated17
scorecard_versionv5.5.0
checks_inconclusive1
scorecard_aggregate2,5
Excluidos de la puntuación (sin datos o no aplicable): packaging. Los pesos restantes se han renormalizado.
Cómo se puntúa
35/35Dependencias directas libres de avisos conocidos — ninguna dependencia directa tiene un aviso conocido
10/25Dependencias indirectas libres de avisos conocidos — 1 afectados: uuid 10.0.0 (high 7.5)
33.7/40Sin avisos pendientes — 1 paquete(s) con avisos sin atender más allá de 90 días; el más antiguo publicado hace 97 días
Datos de entrada utilizados
sourceosv
advisories1
affected_packages1
assessed_packages247
unassessed_packages0
affected_by_severityhigh 1
direct_affected_packages0
Se cotejó el cierre de dependencias en tiempo de ejecución de npm:lynkr@9.10.0 —lo que arrastra la instalación del paquete publicado—: 247 paquetes. No se analiza la alcanzabilidad.

Preparación para IA

¿Hasta qué punto está el repositorio preparado para desarrollarse y mantenerse con agentes de codificación de IA? Es una insignia independiente y experimental — peso 0,0, de modo que se presenta por separado y no afecta a la puntuación de salud global.

61Moderado · 0% del índice global
Cómo se puntúa
0/45Instrucciones para agentes — sin CLAUDE.md / AGENTS.md / reglas de editor
0/15Documentación legible por máquinas (llms.txt)
40/40Historial de commits legible — 82 de 100 commits humanos declaran su intención (asunto estructurado o cuerpo explicativo)
Datos de entrada utilizados
has_llms_txtno
legible_history_share0,82
agent_instruction_files
agent_instruction_max_bytes
Cómo se puntúa
12.6/18Arranque con un solo comando — native/Cargo.toml (convención del toolchain, sin ejecutor de tareas)
22/22Pruebas automatizadas
11/11Configuración de lint / formato — .eslintrc.cjs
11/11Verificación estática de tipos — packages/ai-sdk-provider/tsconfig.json
10/10Entorno reproducible — Dockerfile, lockfile
10/10Práctica demostrada con agentes — 47 de los últimos 100 commits con autoría o crédito de agente
0/8Mantenimiento automatizado — no se observan actualizaciones automáticas de dependencias
1/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 1
Datos de entrada utilizados
has_nixno
has_tests
lockfilesCargo.lock, package-lock.json
has_dockerfile
typed_languageno
bootstrap_files
has_devcontainerno
has_linter_config
typecheck_configspackages/ai-sdk-provider/tsconfig.json
agent_commit_share0,47
toolchain_manifestsnative/Cargo.toml
dependency_bot_commit_share0
Cómo se puntúa
27/45Código verificable por tipos — JavaScript con configuración de verificación de tipos (packages/ai-sdk-provider/tsconfig.json)
53.1/55Tamaños de archivo manejables — 11/323 archivos fuente de más de 60 KB
Datos de entrada utilizados
primary_languageJavaScript
largest_source_bytes403.191
source_files_sampled323
oversized_source_files11
Cómo se puntúa
0/40Esquema de API (OpenAPI/GraphQL/proto)
0/20Servidor MCP
40/40Ejemplos ejecutables — examples
Datos de entrada utilizados
example_dirsexamples
has_mcp_signalno
api_schema_files

Datos clave

538estrellas de GitHub
9contribuidores
209commits en los últimos 12 meses
4días desde el último push
2versiones publicadas
1factor bus
2issues abiertas
crates.io, npm, PyPIecosistemas de paquetes

Advertencias de recopilación de datos

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

Más detalle

Historial de estrellas y forks 0 ★ / 57 ⇿
0Estrellas
57Forks
1Versiones

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

01020304050605762025-122026-042026-07
Mayor 0Menor 1Parche 0
OpenSSF Scorecard 2.5 / 10
2.5agregado

Evaluación de seguridad independiente y agnóstica en cuanto a herramientas, procedente del proyecto de código abierto OpenSSF Scorecard. Cada comprobación premia una práctica de seguridad, no la herramienta de un proveedor concreto. Las comprobaciones que Scorecard no pudo determinar se marcan como n/d y se excluyen de la puntuación de seguridad (nunca se cuentan como cero).Scorecard v5.5.0 · 2026-07-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
n/dPackagingpackaging 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
Dependencias directas 29
RegistroPaqueteRestricción de versiónManifiesto
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
Todas las dependencias no recopilado

No fue posible recopilar el conjunto de dependencias resuelto para este informe: GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Avisos de dependencias 1

Instalar npm:lynkr@9.10.0 arrastra 247 paquetes, directos y transitivos: 1 tienen avisos conocidos, de los cuales 0 son dependencias directas.

PaqueteVersiónRelaciónGravedadAvisosCorregido en
uuid10.0.0indirectaalta113.0.1

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

Informe JSON sin procesar legible por máquina
{
  "data": {
    "repo": {
      "topics": [
        "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"
}

Las puntuaciones son señales, no garantías. Reflejan prácticas públicamente visibles en GitHub; no son una auditoría de código ni una garantía de seguridad.

Los datos ausentes se excluyen y los pesos se renormalizan; nunca se puntúan como cero. La metodología es versionada y abierta: métricas v1.13.0, esquema v0.27.0 — metodología completa · wiki de métricas.

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