Skip to content

feat(providers): add xKiro - #12648

Merged
diegosouzapw merged 32 commits into
release/v3.8.51from
feat/provider-xkiro
Sep 17, 2026
Merged

diegosouzapw merged 32 commits into
release/v3.8.51from
feat/provider-xkiro

Conversation

@diegosouzapw

@diegosouzapw diegosouzapw commented Sep 3, 2026 •

Copy link
Copy Markdown
Owner

Summary

Rebased on release/v3.8.51 tip 225da11 (2026-09-15) after the Agnes 3.0 Flash catalog (9b4210a) and the Together $25 signup-credit removal (d6e62ae, #12526) landed — merge commits 6e628b8 (57 conflicted files, all count drift, resolved as described under "Operator note") and fd53ba5 (clean, brought #13582 / #13612 / #13736). The diff shown here is xKiro only, measured against the current release tip; #12649 and #12669 remain ancestors.

Adds xKiro (xkiro, https://xkiro.com) as an OpenAI-compatible API-key gateway with a documented free plan: 5M tokens/day per account, no card, across the 40 upstream models tagged access_tier: "free" on the public GET https://api.xkiro.com/v1/models. 39 of them are pinned here (Qwen, MiniMax, DeepSeek, Mistral, SenseNova — 24 with vision, all with tool calling, context 128K–1M); openai/gpt-5.3-codex-spark is deliberately left out (see below). The free-tier catalog gains one new recurring pool, xkiro-free = 5M × 30 = 150M tokens/month, counted once for the whole account, and every visible number that depends on it (headline, entries, pools, hard-stop rows, provider count) is re-synced through the docs gates.

Third PR of the "free-tier honest growth" series (PR1 re-audit of the existing quotas #12649, PR2 gated bucket #12669, PR3 this provider, PR4 radar-server feed). PR1 and PR2 have both landed on release/v3.8.51; this branch is merged up to that tip, so the numbers below are measured against the post-#12669 baseline and every delta is xKiro's own contribution.

What changed

Provider (routable + canonical)

  • open-sse/config/providers/registry/xkiro/index.ts (new) — xkiroProvider via buildOpenAiCompatibleRegistryEntry, baseUrl https://api.xkiro.com/v1/chat/completions, 39 pinned models with contextLength / toolCalling / supportsVision taken from the public models endpoint (2026-09-02). Wired in open-sse/config/providers/index.ts (import + REGISTRY.xkiro).
  • src/shared/constants/providers/apikey/gateways.ts — canonical xkiro block (serviceKinds: ["llm"], passthroughModels: true, hasFree: true, freeNote, authHint, apiHint). Bearer auth (x-api-key also accepted upstream).
  • src/shared/constants/providers.ts — "xkiro" added to AGGREGATOR_PROVIDER_IDS (it fronts other vendors' models).

Free-tier catalog

  • open-sse/config/freeModelCatalog.data.ts — 39 rows, all in pool xkiro-free, monthlyTokens: 150_000_000, freeType: "recurring-daily", tos: "caution", hardStopGuaranteed: true; FREE_CATALOG_CURATED_AT → 2026-09-03. Evidence block (verbatim quotes, dated) sits above the rows:
    • https://xkiro.com/ — Free plan card: "$0 / month · Free forever · Free tokens 5M / day · Access to 40+ free models · No credit card"
    • https://docs.xkiro.com/models/tiers/ — "free — any account — Callable on every plan, including the free one, within a daily token allowance" (one allowance per account ⇒ one pool)
    • https://docs.xkiro.com/api/rate-limits/ — "Past it, free-model requests are blocked with a 429 until the daily reset" (⇒ hardStopGuaranteed)
    • GET https://api.xkiro.com/v1/models — the 40 access_tier: "free" rows (public, no key needed)
    • ToS (2026-07-30) forbids reselling/redistributing the service and violating the upstream providers' terms; personal proxy use is not addressed ⇒ tos: "caution".
  • openai/gpt-5.3-codex-spark is excluded although it is tagged free upstream: xKiro does not declare where that route is served from (no provenance for an OpenAI-branded model on a third-party gateway), so pinning it would advertise a free model we cannot vouch for. The unit test locks the exclusion in.

Tests

  • tests/unit/free-provider-xkiro.test.ts (new, TDD — red 4/4 before the implementation, green after): routable + canonical + aggregator; one 150M pool counted exactly once by computeFreeModelTotals() (with − without = 150,000,000); no codex-spark in registry or catalog; registry ⟷ catalog are the same 39 ids.

Docs and counts (all gate-driven, npm run check:docs-counts + check:docs-sync green)

  • docs/reference/PROVIDER_REFERENCE.md regenerated (npm run gen:provider-reference, exact generator output).
  • README.md, llm.txt + 65 docs/i18n/*/llm.txt mirrors (66 locales after feat(i18n): 7 new locales — Hausa, Yoruba, Igbo, Amharic, Uzbek, Georgian, Armenian (66 locales) #13727; the duplicate in locale was retired upstream), docs/reference/FREE_TIERS.md (headline, dated note, ToS row, per-provider row, hard-stop sentence, frontmatter date), docs/architecture/{ARCHITECTURE,CODEBASE_DOCUMENTATION,REPOSITORY_MAP}.md, docs/frameworks/OPEN_SSE_ARCHITECTURE.md, docs/diagrams/{readme-hero,promise-pillars,comparison-table,cli-terminal,free-tier-budget}.svg (+ docs/diagrams/README.md), public/images/tier-flow-{dark,light}.svg — provider count, free-tier headline, entries/pools/hard-stop tallies, executor count, visible chips aligned with their own aria-labels (90+ → 150+, 352 → 357, 348 more → 353 more).
  • AGENTS.md:49 and package.json description: number only (see operator note).

Numbers before / after

Measured on this branch with the same code the gate uses (computeFreeModelTotals(), the canonical provider collections, REGISTRY); "before" = the release/v3.8.51 tip 225da11 (post-Agnes 3.0, post-Together-credit-removal), which is this PR's base.

Metric Before (release/v3.8.51 @ 225da11) After
Canonical providers 358 359 (+1)
Steady recurring free tokens / month ~1.47B ~1.62B (+150M)
First month (steady + one-off credits) ~2.07B ~2.22B (+150M)
Free-tier catalog entries 443 (436 active + 7 discontinued) 482 (+39; 475 active + 7 discontinued)
Recurring pool keys 34 35 (+xkiro-free)
Pools with a published positive monthly budget 16 17 (+xkiro-free), plus Groq's 5 per-model caps
Entries with an independently documented hard stop 5 44 (+39, all sharing one daily allowance)
Recurring / keyless free-forever providers 52 53 (+1)
Providers carrying hasFree: true 152 152
Provider executors (soft count) 111 111 (unchanged — xKiro rides the OpenAI-compatible registry entry, no executor file)

Every delta is exactly xKiro's own contribution — nothing else moved across the merge. Exact live values: steady 1,623,225,000 (= the tip's 1,473,225,000 + xKiro's 150,000,000), first month 2,224,725,000 (the tip's 2,074,725,000 + 150M; #12526 took the Together $25 one-off credit out of the first-month figure, which is why it reads ~2.22B and no longer ~2.25B). #12669's eligibility-gated bucket (gatedRecurringTokens = 6,000,000, ModelScope) is carried through unchanged and stays out of the steady headline.

Why the headline reads ~1.62B and no longer ~1.63B: this PR's contribution is unchanged (+150M). The baseline moved underneath it — PR1's re-audit reclassified gemini and ollama-cloud as uncapped (−80M), re-scoped groq to five per-model caps (+15M), raised nara to a 7M/day bucket (+60M) and reclassified cerebras as a one-time signup credit (−30M). The post-#12669 baseline's ~1.47B + xKiro's 150M = ~1.62B.

All "after" values are the ones npm run check:docs-counts reports as actual on this branch — none were hand-guessed.

⚠️ Operator note

This PR bumps the provider count in AGENTS.md:49 ("358 LLM providers" → 359) and in package.json description — number only, demanded by check:docs-counts (STRICT), same precedent as #12440. AGENTS.md is an agent-instruction surface, so explicit operator approval is needed at merge for that one-line change.

Base sync done (2026-09-15): merge commit 6e628b8 brings origin/release/v3.8.51 @ 58f88a8 (Agnes 3.0 Flash catalog 9b4210a, Together credit removal d6e62ae, 7 new i18n locales #13727, the base-red fixes #13635/#13678), followed by the clean merge fd53ba5 up to the tip 225da11 (#13582, #13612, #13736). 57 files conflicted in the first merge, every one of them count drift (release 358 vs branch 357 vs base 356, and the same shape for the free-tier figures); each number was resolved as release value + xKiro's own delta and then confirmed by the gates:

  • open-sse/config/freeModelCatalog.data.ts, open-sse/config/providers/index.ts, src/shared/constants/providers.ts, src/shared/constants/providers/apikey/gateways.ts — auto-merged: the release's Agnes 3.0 rows and the removed Together signup-credit row are kept and all 39 xKiro rows / the xkiro registry + gateway entries stay. Verified as a set: 443 → 482 entries, xkiro-free still one 150M pool.
  • README.md, docs/reference/FREE_TIERS.md, docs/getting-started/FREE-TIERS-GUIDE.md — took the release's wording (Together $25 gone from the first-month note, the new STRICT mode sentence on the hard-stop paragraph), kept the xKiro prose (xKiro 150M in the budget-bar list, the "44 hard-stop entries, 39 of them xKiro" sentence), then set every count to what the gate reports live.
  • AGENTS.md, package.json, llm.txt + 41 conflicted docs/i18n/*/llm.txt mirrors, docs/reference/PROVIDER_REFERENCE.md (total, API-key section count, generated date) — number only, 358 → 359. The 24 locale mirrors added by feat(i18n): 7 new locales — Hausa, Yoruba, Igbo, Amharic, Uzbek, Georgian, Armenian (66 locales) #13727 after this branch's last sync did not conflict and were given the same two-line bump so check:docs-sync stays exact.
  • docs/diagrams/{readme-hero,promise-pillars,comparison-table,cli-terminal,free-tier-budget}.svg, public/images/tier-flow-{dark,light}.svg — number text nodes / aria-labels only (the release's own "20 routing strategies" change in comparison-table.svg is preserved). docs/screenshots/free-tier-budget-card.svg regenerated with scripts/research/gen-budget-card-svg.mjs.
  • config/quality/file-size-baseline.json — kept every justification key from both sides (_rebaseline_2026_09_03_12648_xkiro_provider plus the release's 09-11/09-14 entries) and set the gateways.ts cap to the gate's measure of the merged file, 1520 (1519 lines + 1; the release had moved it 1462 → 1502 for Agnes 3.0, xKiro adds its +18).

One extra fix the merge surfaced: tests/unit/check-docs-counts-sync.test.ts asserted the live FREE_TIERS page against a hard-coded 5 hard-stop entries. That number went stale the moment the 39 xKiro rows landed (the doc says 44 and the gate agrees). The test now derives both expected counts from the catalog itself, so it cannot drift again.

Live validation — PENDING (awaiting the owner's free xKiro key; will be completed before marking the PR ready)

Done without a key (2026-09-02), as evidence of the validation endpoint and of the upstream model list the catalog was built from:

$ curl -s -o /dev/null -w "%{http_code}\n" https://api.xkiro.com/v1/usage
401
$ curl -s https://api.xkiro.com/v1/chat/completions -H "Content-Type: application/json" \
    -d '{"model":"qwen/qwen3.6-27b:free","messages":[{"role":"user","content":"Reply with the single word: pong"}],"max_tokens":8}'
{"error":{"message":"Missing ClientApiKey. Send \"Authorization: Bearer <key>\" or the \"x-api-key\" header.","type":"authentication_error","code":"authentication_error"}}   # HTTP 401
$ curl -s https://api.xkiro.com/v1/models | node -e '…'   # public, no key
total 109 · access_tier=free 40 · qwen/qwen3.6-27b:free present · openai/gpt-5.3-codex-spark tagged free (not pinned)

Still to record here once the key is available (Hard Rule #18): the direct upstream smoke with the key, then the through-OmniRoute call POST /v1/chat/completions with {"model":"xkiro/qwen/qwen3.6-27b:free", …} — HTTP status, echoed model, usage, first line of the content. The key itself is never printed or committed.

Validation

Re-run after merging origin/release/v3.8.51 up to 225da11, in the PR worktree at fd53ba5, 2026-09-15:

Check Result
npm run check:docs-counts ✅ exit 0 — every STRICT claim passes (359 providers, ~1.62B steady / 35 pools / 6M gated, 482 entries, 44 hard-stop, 13 training-disclosure, 53 free-forever, 66 locales, 175 migrations). The only output is 2 soft warnings inherited from the tip (docs/architecture/{ARCHITECTURE,CODEBASE_DOCUMENTATION}.md do not mention the live executor count 111 — identical on origin/release/v3.8.51, not touched here).
npm run check:docs-sync ✅ exit 0 — PASS, 65 llm.txt mirrors match the root
npm run check:fabricated-docs ✅ exit 0
npm run check:file-size ❌ exit 1 — 1 violation, inherited: open-sse/utils/stream.ts 3115 > 3098. The file is byte-identical to the release tip (git diff origin/release/v3.8.51 -- open-sse/utils/stream.ts is empty) and the baseline itself records it as pre-existing tip drift (base-red #12732, owned by /sweep-reds). This PR's own entry, gateways.ts cap 1520, passes.
npm run check:provider-consistency ✅ exit 0 — 359 canonical providers, 277 registry entries, 0 registry-only exceptions
npx prettier --check on the resolved files ✅ exit 0 (the SVGs have no Prettier parser)
focused tests, run in three small batches (free-tier-reaudit-2026-09 + check-docs-counts-sync + free-model-catalog; free-tier-catalog + free-model-catalog-gated-bucket + gen-budget-card-svg + free-catalog-no-confidence-field; free-provider-xkiro) ✅ 88 pass / 0 fail (68 + 16 + 4) at fd53ba5

docs/screenshots/free-tier-budget-card.svg was regenerated with node --import tsx/esm scripts/research/gen-budget-card-svg.mjs --out docs/screenshots/free-tier-budget-card.svg (#12669's generator, which understands hardStopGuaranteed and gated rows); it reports steady=1.62B firstMonth=2.22B gated=6M oneTime=601M (22 pools, 9 first-month chips) and tests/unit/gen-budget-card-svg.test.ts passes its byte-for-byte comparison.

Full unit/vitest/coverage suites and the production build are left to CI on this PR (the devbox times out on them).

No open 🔴 Release branch not green: release/v3.8.51 issue at the time of this sync (2026-09-15); the one inherited red above (stream.ts file-size) is tracked by #12732 and is not touched by this PR.

CI triage (first run on 6155247)

Check Verdict
API Route Typecheck / open-sse-typecheck — open-sse/executors/glm.ts TS2554 (baseline 0, live 1) inherited: glm.ts was last changed on the base by #12179; this PR does not touch it (same red on #12649)
Fast Quality Gates — file-size gateways.ts ours, rebaselined to 1480 after the merge with PR1 (xkiro entry + PR1's nara authHint rewrite + the Prettier reflow of two pre-existing over-long lines; same rationale as the seekai/logfare/freebuff entries); now 1520 after the 2026-09-15 sync absorbed the release's own Agnes 3.0 growth (1462 → 1502) on top of xKiro's +18

diegosouzapw and others added 25 commits September 2, 2026 10:24
…ier-quota-reaudit

# Conflicts:
#	README.md
#	docs/diagrams/readme-hero.svg
#	src/i18n/messages/in.json
…ier-quota-reaudit

# Conflicts:
#	README.md
#	docs/diagrams/free-tier-budget.svg
#	docs/diagrams/readme-hero.svg
#	open-sse/config/freeModelCatalog.data.ts
…der-xkiro

# Conflicts:
#	AGENTS.md
#	README.md
#	docs/architecture/ARCHITECTURE.md
#	docs/architecture/CODEBASE_DOCUMENTATION.md
#	docs/diagrams/cli-terminal.svg
#	docs/diagrams/comparison-table.svg
#	docs/diagrams/free-tier-budget.svg
#	docs/diagrams/promise-pillars.svg
#	docs/diagrams/readme-hero.svg
#	docs/i18n/ar/llm.txt
#	docs/i18n/az/llm.txt
#	docs/i18n/bg/llm.txt
#	docs/i18n/bn/llm.txt
#	docs/i18n/cs/llm.txt
#	docs/i18n/da/llm.txt
#	docs/i18n/de/llm.txt
#	docs/i18n/es/llm.txt
#	docs/i18n/fa/llm.txt
#	docs/i18n/fi/llm.txt
#	docs/i18n/fr/llm.txt
#	docs/i18n/gu/llm.txt
#	docs/i18n/he/llm.txt
#	docs/i18n/hi/llm.txt
#	docs/i18n/hu/llm.txt
#	docs/i18n/id/llm.txt
#	docs/i18n/in/llm.txt
#	docs/i18n/it/llm.txt
#	docs/i18n/ja/llm.txt
#	docs/i18n/ko/llm.txt
#	docs/i18n/mr/llm.txt
#	docs/i18n/ms/llm.txt
#	docs/i18n/nl/llm.txt
#	docs/i18n/no/llm.txt
#	docs/i18n/phi/llm.txt
#	docs/i18n/pl/llm.txt
#	docs/i18n/pt-BR/llm.txt
#	docs/i18n/pt/llm.txt
#	docs/i18n/ro/llm.txt
#	docs/i18n/ru/llm.txt
#	docs/i18n/sk/llm.txt
#	docs/i18n/sv/llm.txt
#	docs/i18n/sw/llm.txt
#	docs/i18n/ta/llm.txt
#	docs/i18n/te/llm.txt
#	docs/i18n/th/llm.txt
#	docs/i18n/tr/llm.txt
#	docs/i18n/uk-UA/llm.txt
#	docs/i18n/ur/llm.txt
#	docs/i18n/vi/llm.txt
#	docs/i18n/zh-CN/llm.txt
#	docs/i18n/zh-TW/llm.txt
#	docs/reference/PROVIDER_REFERENCE.md
#	llm.txt
#	package.json
#	public/images/tier-flow-dark.svg
#	public/images/tier-flow-light.svg
…ier-quota-reaudit

# Conflicts:
#	README.md
#	docs/diagrams/README.md
#	docs/diagrams/free-tier-budget.svg
#	docs/diagrams/readme-hero.svg
#	docs/getting-started/FREE-TIERS-GUIDE.md
#	docs/reference/FREE_TIERS.md
#	open-sse/config/freeTierCatalog.ts
#	tests/unit/free-tier-catalog.test.ts
…der-xkiro

# Conflicts:
#	README.md
#	docs/diagrams/README.md
#	docs/diagrams/free-tier-budget.svg
#	docs/diagrams/promise-pillars.svg
#	docs/diagrams/readme-hero.svg
#	docs/reference/FREE_TIERS.md
…o feat/provider-xkiro

# Conflicts:
#	README.md
#	config/quality/file-size-baseline.json
#	docs/diagrams/README.md
#	docs/diagrams/free-tier-budget.svg
#	docs/diagrams/readme-hero.svg
#	docs/getting-started/FREE-TIERS-GUIDE.md
#	docs/reference/FREE_TIERS.md
#	open-sse/config/freeModelCatalog.data.ts
@diegosouzapw
diegosouzapw changed the base branch from release/v3.8.51 to fix/free-tier-quota-reaudit September 4, 2026 02:08
@diegosouzapw
diegosouzapw changed the base branch from fix/free-tier-quota-reaudit to release/v3.8.51 September 4, 2026 02:27
…der-xkiro

# Conflicts:
#	README.md
#	config/quality/file-size-baseline.json
#	docs/diagrams/README.md
#	docs/diagrams/free-tier-budget.svg
#	docs/diagrams/readme-hero.svg
#	docs/getting-started/FREE-TIERS-GUIDE.md
#	docs/reference/FREE_TIERS.md
#	open-sse/config/freeModelCatalog.data.ts
@diegosouzapw

Copy link
Copy Markdown
Owner Author

Held, not reviewed — Hard Rule #22b, plus a pending prerequisite.

.claude/worktrees/provider-xkiro is live on feat/provider-xkiro at 99333f34, exactly this PR's head SHA — another session owns it. Separately, this is still a draft and the free-tier plan has it blocked on a live xKiro API key for validation before the ~1.63B claim can be signed off.

Nothing touched. It comes back to the queue when the worktree is gone and the key validation is recorded.

…der-xkiro

# Conflicts:
#	README.md
#	config/quality/file-size-baseline.json
#	docs/diagrams/free-tier-budget.svg
#	docs/getting-started/FREE-TIERS-GUIDE.md
#	docs/screenshots/free-tier-budget-card.svg
…der-xkiro

# Conflicts:
#	AGENTS.md
#	README.md
#	config/quality/file-size-baseline.json
#	docs/diagrams/cli-terminal.svg
#	docs/diagrams/comparison-table.svg
#	docs/diagrams/free-tier-budget.svg
#	docs/diagrams/promise-pillars.svg
#	docs/diagrams/readme-hero.svg
#	docs/getting-started/FREE-TIERS-GUIDE.md
#	docs/i18n/ar/llm.txt
#	docs/i18n/az/llm.txt
#	docs/i18n/bg/llm.txt
#	docs/i18n/bn/llm.txt
#	docs/i18n/cs/llm.txt
#	docs/i18n/da/llm.txt
#	docs/i18n/de/llm.txt
#	docs/i18n/es/llm.txt
#	docs/i18n/fa/llm.txt
#	docs/i18n/fi/llm.txt
#	docs/i18n/fr/llm.txt
#	docs/i18n/gu/llm.txt
#	docs/i18n/he/llm.txt
#	docs/i18n/hi/llm.txt
#	docs/i18n/hu/llm.txt
#	docs/i18n/id/llm.txt
#	docs/i18n/it/llm.txt
#	docs/i18n/ja/llm.txt
#	docs/i18n/ko/llm.txt
#	docs/i18n/mr/llm.txt
#	docs/i18n/ms/llm.txt
#	docs/i18n/nl/llm.txt
#	docs/i18n/no/llm.txt
#	docs/i18n/phi/llm.txt
#	docs/i18n/pl/llm.txt
#	docs/i18n/pt-BR/llm.txt
#	docs/i18n/pt/llm.txt
#	docs/i18n/ro/llm.txt
#	docs/i18n/ru/llm.txt
#	docs/i18n/sk/llm.txt
#	docs/i18n/sv/llm.txt
#	docs/i18n/sw/llm.txt
#	docs/i18n/ta/llm.txt
#	docs/i18n/te/llm.txt
#	docs/i18n/th/llm.txt
#	docs/i18n/tr/llm.txt
#	docs/i18n/uk-UA/llm.txt
#	docs/i18n/ur/llm.txt
#	docs/i18n/vi/llm.txt
#	docs/i18n/zh-CN/llm.txt
#	docs/i18n/zh-TW/llm.txt
#	docs/reference/FREE_TIERS.md
#	docs/reference/PROVIDER_REFERENCE.md
#	docs/screenshots/free-tier-budget-card.svg
#	llm.txt
#	package.json
#	public/images/tier-flow-dark.svg
#	public/images/tier-flow-light.svg
# Conflicts:
#	README.md
#	config/quality/file-size-baseline.json
#	docs/diagrams/comparison-table.svg
#	docs/diagrams/free-tier-budget.svg
#	docs/diagrams/readme-hero.svg
#	docs/i18n/am/llm.txt
#	docs/i18n/ar/llm.txt
#	docs/i18n/az/llm.txt
#	docs/i18n/bg/llm.txt
#	docs/i18n/bn/llm.txt
#	docs/i18n/cs/llm.txt
#	docs/i18n/da/llm.txt
#	docs/i18n/de/llm.txt
#	docs/i18n/el/llm.txt
#	docs/i18n/es/llm.txt
#	docs/i18n/et/llm.txt
#	docs/i18n/fa/llm.txt
#	docs/i18n/fi/llm.txt
#	docs/i18n/fr/llm.txt
#	docs/i18n/ga/llm.txt
#	docs/i18n/gu/llm.txt
#	docs/i18n/ha/llm.txt
#	docs/i18n/he/llm.txt
#	docs/i18n/hi/llm.txt
#	docs/i18n/hr/llm.txt
#	docs/i18n/hu/llm.txt
#	docs/i18n/hy/llm.txt
#	docs/i18n/id/llm.txt
#	docs/i18n/ig/llm.txt
#	docs/i18n/it/llm.txt
#	docs/i18n/ja/llm.txt
#	docs/i18n/ka/llm.txt
#	docs/i18n/km/llm.txt
#	docs/i18n/kn/llm.txt
#	docs/i18n/ko/llm.txt
#	docs/i18n/lt/llm.txt
#	docs/i18n/lv/llm.txt
#	docs/i18n/ml/llm.txt
#	docs/i18n/mr/llm.txt
#	docs/i18n/ms/llm.txt
#	docs/i18n/mt/llm.txt
#	docs/i18n/my/llm.txt
#	docs/i18n/ne/llm.txt
#	docs/i18n/nl/llm.txt
#	docs/i18n/no/llm.txt
#	docs/i18n/or/llm.txt
#	docs/i18n/pa/llm.txt
#	docs/i18n/phi/llm.txt
#	docs/i18n/pl/llm.txt
#	docs/i18n/pt-BR/llm.txt
#	docs/i18n/pt/llm.txt
#	docs/i18n/ro/llm.txt
#	docs/i18n/ru/llm.txt
#	docs/i18n/si/llm.txt
#	docs/i18n/sk/llm.txt
#	docs/i18n/sl/llm.txt
#	docs/i18n/sr/llm.txt
#	docs/i18n/sv/llm.txt
#	docs/i18n/sw/llm.txt
#	docs/i18n/ta/llm.txt
#	docs/i18n/te/llm.txt
#	docs/i18n/th/llm.txt
#	docs/i18n/tr/llm.txt
#	docs/i18n/uk-UA/llm.txt
#	docs/i18n/ur/llm.txt
#	docs/i18n/uz/llm.txt
#	docs/i18n/vi/llm.txt
#	docs/i18n/yo/llm.txt
#	docs/i18n/zh-CN/llm.txt
#	docs/i18n/zh-TW/llm.txt
#	docs/reference/PROVIDER_REFERENCE.md
#	docs/screenshots/free-tier-budget-card.svg
The branch merged the release tip twice: the first pass carried a stale
origin/release/v3.8.51 that predated #13913, so every derived count was
computed against a provider that had already been retired.

Reconciled against the current tip:

- Provider count is 359 (tip 358 after the chipotle/pepper removal, plus
  xKiro). README, AGENTS.md, llm.txt and its 65 locale mirrors, package.json
  and the six count-bearing SVGs now carry that number; check:docs-counts
  passes with no strict drift.
- docs/reference/PROVIDER_REFERENCE.md regenerated from the live modules.
- RESERVED_PREFIX_COUNT 412 -> 413: xKiro registers id "xkiro" with no
  separate alias, so it adds exactly one REGISTRY member.
@diegosouzapw
diegosouzapw marked this pull request as ready for review September 17, 2026 16:34
@diegosouzapw
diegosouzapw merged commit 83fa432 into release/v3.8.51 Sep 17, 2026
9 of 12 checks passed
diegosouzapw added a commit that referenced this pull request Sep 18, 2026
…rge wave (#14082)

Every PR against release/v3.8.51 is born red on all four Unit Tests fast-path
shards. Reproduced on the pure tip (1603c86): ~35 tests. This commit repairs
the two large clusters plus the stale assertions sharing their root cause
(17 tests); the rest is tracked separately.

RTK (12 tests, real regression): #13521 gated dedup on
  skipFilters || isDocumentLikeRead
but isDocumentLikeRead is true for ANY text whose type detection is unknown —
not only non-shell tool results — so plain repeated tool output (the classic
RTK case) stopped being deduplicated, processRtkText returned no stats, and
rtkEngine.apply().stats.engine came back undefined. The intent of #13388 was
the non-shell-tool skip, which resolveToolMeta already expresses as
skipFilters; dedup now honours only that. The #13521 regression guard
(rtk-file-content-preservation, tool named 'read' → skipFilters) still passes
4/4; rtk-engine is back to 9/9.

Golden + stale assertions (5 tests, product changes never propagated):
- tests/snapshots/provider/translate-path.json: xKiro (#12648) was added to the
  registry without regenerating the snapshot — purely additive entry.
- providers-constants-split: APIKEY_PROVIDER_COUNT 241 → 242 (xKiro).
- tests/snapshots/g13/combo-chatcore-public-seams.json and the three
  Content-Type assertions in chatcore-translation-paths / chat-route-coverage:
  #13419 deliberately made streaming responses declare
  'text/event-stream; charset=utf-8' (Arabic/Persian mojibake) and updated the
  integration test but not these unit assertions.

Before/after on the 26 base-red files: 266 tests, 23 → 18 failing here
(the RTK suites were counted per-file in CI; per-test this is 17 fixed). The
file-size ✗ on chatcore-translation-paths.test.ts is the pre-existing drift
#14016 rebaselines — this commit keeps that file's line count unchanged.
@diegosouzapw diegosouzapw mentioned this pull request Sep 21, 2026
muhamadgalihsaputra pushed a commit to niyatna/NiyatnaRoute that referenced this pull request Sep 27, 2026
* test(catalog): pin the 2026-09-02 free-tier re-audit facts for gemini, ollama-cloud, groq, nara and mistral

* feat(providers): add xKiro (5M tokens/day free plan, 39 pinned free models)

* fix(catalog): re-audit gemini, ollama-cloud, groq, nara and mistral against official pages

* docs(providers): xKiro in the provider reference, counts and free-tier headline (~1.66B)

* fix(catalog): restore the console-verified Mistral 1B pool and harden its regression test

* docs(free-tiers): move headline to the re-audited ~1.50B and refresh pool counts

* chore(free-tiers): retire stale Groq free-tier text and preset model; fix catalog header

* docs(providers): align the remaining visible provider/executor counts with the catalog

* docs(providers): align remaining free-tier count chips and metadata

* docs(free-tiers): state the evidence-comment rule honestly and retire the last "14.4K RPD" Groq texts

* docs(free-tiers): retire the stale Gemini onboarding quota text

* docs(free-tier): refresh catalog-entry counts to 442 after base sync

* docs(providers): re-sync provider and free-tier counts after merging release/v3.8.51

* docs(providers): re-sync residual counts after the base merge

* docs(free-tiers): restore README spacing lost in the merge and re-sync the guide counts

* docs(free-tiers): re-sync numbers after merging release/v3.8.51 (Cerebras reclassified upstream)

* fix(docs): keep the NaraRouter plans endpoint out of the API-path checker; rebaseline gateways.ts (+3)

* chore(quality): rebaseline gateways.ts file-size cap for the xKiro entry (+20)

---------

Co-authored-by: diegosouzapw <diegosouzapw@users.noreply.github.com>
muhamadgalihsaputra pushed a commit to niyatna/NiyatnaRoute that referenced this pull request Sep 27, 2026
…rge wave (diegosouzapw#14082)

Every PR against release/v3.8.51 is born red on all four Unit Tests fast-path
shards. Reproduced on the pure tip (3ce81a1): ~35 tests. This commit repairs
the two large clusters plus the stale assertions sharing their root cause
(17 tests); the rest is tracked separately.

RTK (12 tests, real regression): diegosouzapw#13521 gated dedup on
  skipFilters || isDocumentLikeRead
but isDocumentLikeRead is true for ANY text whose type detection is unknown —
not only non-shell tool results — so plain repeated tool output (the classic
RTK case) stopped being deduplicated, processRtkText returned no stats, and
rtkEngine.apply().stats.engine came back undefined. The intent of diegosouzapw#13388 was
the non-shell-tool skip, which resolveToolMeta already expresses as
skipFilters; dedup now honours only that. The diegosouzapw#13521 regression guard
(rtk-file-content-preservation, tool named 'read' → skipFilters) still passes
4/4; rtk-engine is back to 9/9.

Golden + stale assertions (5 tests, product changes never propagated):
- tests/snapshots/provider/translate-path.json: xKiro (diegosouzapw#12648) was added to the
  registry without regenerating the snapshot — purely additive entry.
- providers-constants-split: APIKEY_PROVIDER_COUNT 241 → 242 (xKiro).
- tests/snapshots/g13/combo-chatcore-public-seams.json and the three
  Content-Type assertions in chatcore-translation-paths / chat-route-coverage:
  diegosouzapw#13419 deliberately made streaming responses declare
  'text/event-stream; charset=utf-8' (Arabic/Persian mojibake) and updated the
  integration test but not these unit assertions.

Before/after on the 26 base-red files: 266 tests, 23 → 18 failing here
(the RTK suites were counted per-file in CI; per-test this is 17 fixed). The
file-size ✗ on chatcore-translation-paths.test.ts is the pre-existing drift
diegosouzapw#14016 rebaselines — this commit keeps that file's line count unchanged.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant