Skip to content

feat: add Kimi OpenAI-compatible provider - #713

Merged
rafaelscosta merged 3 commits into
mainfrom
feat/epic-184-kimi-provider-20260508
May 8, 2026
Merged

feat: add Kimi OpenAI-compatible provider#713
rafaelscosta merged 3 commits into
mainfrom
feat/epic-184-kimi-provider-20260508

Conversation

@rafaelscosta

@rafaelscosta rafaelscosta commented May 8, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • adds a generic OpenAI-compatible HTTP provider with Kimi/Moonshot presets and aliases
  • updates provider factory discovery/status, exports, docs, config template and dispatcher fallback behavior
  • adds mocked HTTP tests for provider execution and factory registration

Validation

  • npm run test:ci
  • npm test -- --runTestsByPath tests/infrastructure/ai-providers/openai-compatible-provider.test.js tests/infrastructure/ai-providers/ai-provider-factory.test.js tests/core/subagent-dispatcher.test.js --runInBand
  • npm run validate:manifest
  • npm run lint
  • npm run typecheck
  • git diff --check
  • node .aiox-core/utils/aiox-validator.js stories
  • node scripts/semantic-lint.js docs/stories/epic-184-kimi-provider/EPIC-184-KIMI-K2-5-PROVIDER.md docs/stories/epic-184-kimi-provider/STORY-184.1-OPENAI-COMPATIBLE-KIMI-PROVIDER.md

Closes #184

Summary by CodeRabbit

  • New Features

    • Added OpenAI‑compatible provider support (including Moonshot "kimi").
    • Improved provider fallback resolution to honor configured primary/fallback settings.
  • Documentation

    • Updated provider README and configuration templates with OpenAI‑compatible examples and usage.
  • Tests

    • Added and expanded tests for the OpenAI‑compatible provider, provider factory, and fallback behavior.

@vercel

vercel Bot commented May 8, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
aiox-core Ready Ready Preview, Comment May 8, 2026 9:17pm

Request Review

@github-actions github-actions Bot added area: agents Agent system related area: workflows Workflow system related squad mcp type: test Test coverage and quality area: core Core framework (.aios-core/core/) area: installer Installer and setup (packages/installer/) area: synapse SYNAPSE context engine area: cli CLI tools (bin/, packages/aios-pro-cli/) area: pro Pro features (pro/) area: health-check Health check system area: docs Documentation (docs/) area: devops CI/CD, GitHub Actions (.github/) labels May 8, 2026
@coderabbitai

coderabbitai Bot commented May 8, 2026

Copy link
Copy Markdown

Review Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 451cc342-f827-4b84-8cad-d36bd0f4c1f3

📥 Commits

Reviewing files that changed from the base of the PR and between a226a3e and 2e4447b.

📒 Files selected for processing (8)
  • .aiox-core/infrastructure/integrations/ai-providers/ai-provider-factory.js
  • .aiox-core/infrastructure/integrations/ai-providers/openai-compatible-provider.js
  • .aiox-core/install-manifest.yaml
  • .aiox-core/product/templates/aiox-ai-config.yaml
  • docs/stories/epic-184-kimi-provider/STORY-184.1-OPENAI-COMPATIBLE-KIMI-PROVIDER.md
  • tests/core/subagent-dispatcher.test.js
  • tests/infrastructure/ai-providers/ai-provider-factory.test.js
  • tests/infrastructure/ai-providers/openai-compatible-provider.test.js

Walkthrough

This PR adds an OpenAI-compatible provider (OpenAICompatibleProvider), integrates it into ai-provider-factory with aliasing/config defaults and discovery, updates SubagentDispatcher fallback resolution to consult factory config, and adds tests, README/docs, config templates, and a regenerated install manifest.

Changes

OpenAI-Compatible Kimi Provider

Layer / File(s) Summary
Provider Implementation
.aiox-core/infrastructure/integrations/ai-providers/openai-compatible-provider.js
New OpenAICompatibleProvider class extends AIProvider with constructor, checkAvailability(), execute() (abortable fetch POST, response parsing, redaction), and getInfo(); includes request/response helpers and utilities.
Provider Helpers
.aiox-core/infrastructure/integrations/ai-providers/openai-compatible-provider.js
URL/header/payload builders, response parsers, output extraction, API key resolution, error sanitization, abort-controller creation, and buildProviderOptions.
Base Provider Updates
.aiox-core/infrastructure/integrations/ai-providers/ai-provider.js
Minor JSDoc change for transport/command wording and reformat of final retry-exhaustion error throw.
Factory Defaults & Aliases
.aiox-core/infrastructure/integrations/ai-providers/ai-provider-factory.js
Adds openai-compatible and kimi defaults and alias normalization constants.
Factory Load/Merge
.aiox-core/infrastructure/integrations/ai-providers/ai-provider-factory.js
loadConfig() merges defaults with user YAML, recomputes routing defaults, and records explicitly configured provider keys on cached config.
Factory Instantiation
.aiox-core/infrastructure/integrations/ai-providers/ai-provider-factory.js
getProvider() normalizes provider names/aliases, builds sanitized cache keys, and instantiates OpenAICompatibleProvider for kimi and openai-compatible; exports provider class.
Factory Discovery & Status
.aiox-core/infrastructure/integrations/ai-providers/ai-provider-factory.js
getAvailableProviders() and getProvidersStatus() derive candidates from configured provider names via getConfiguredProviderNames() instead of a fixed list.
Index Exports
.aiox-core/infrastructure/integrations/ai-providers/index.js
OpenAICompatibleProvider is imported and re-exported.
Dispatcher Fallback Logic
.aiox-core/core/execution/subagent-dispatcher.js
Adds getFallbackProviderName(providerName) which consults factory config (ai_providers.fallback/primary) with a legacy claudegemini swap default; executeWithProvider() uses this resolution; minor parameter rename and stdin-check formatting.
Configuration Templates
.aiox-core/product/templates/aiox-ai-config.yaml
Adds kimi and openai_compatible provider blocks (baseURL, endpoint, apiKeyEnv, model, timeout, maxRetries) and updates provider routing/primary/fallback docs.
Documentation
.aiox-core/infrastructure/integrations/ai-providers/README.md
README updated to include OpenAI-compatible provider in overview, add kimi example, include YAML snippet, and update task routing/direct-access examples.
OpenAICompatibleProvider Tests
tests/infrastructure/ai-providers/openai-compatible-provider.test.js
New test suite validating inheritance, getInfo(), checkAvailability() behavior, execute() request construction and mapping, options serialization, secret redaction, and timeout handling.
Factory & Dispatcher Tests
tests/infrastructure/ai-providers/ai-provider-factory.test.js, tests/core/subagent-dispatcher.test.js
Factory tests updated to clear provider cache and assert new exports/aliases/custom providers; dispatcher tests add provider fallback suite and reformat existing tests.
Install Manifest & Tracking
.aiox-core/install-manifest.yaml, docs/stories/*
Regenerated manifest entries and file hashes for modified files; Epic/Story docs updated to reflect review state and validation evidence.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

  • SynkraAI/aiox-core#711: Validation/documentation changes related to the OpenAICompatibleProvider integration and provider registration.

Suggested reviewers

  • oalanicolas
  • Pedrovaleriolopez
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 75.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately describes the primary change: adding support for Kimi as an OpenAI-compatible provider, which aligns with the main objectives of the changeset.
Linked Issues check ✅ Passed The PR successfully implements the core coding requirements from issue #184: an OpenAI-compatible provider [#184], Kimi/Moonshot presets and configuration [#184], factory support for discovery and status [#184], documentation and templates [#184], and comprehensive test coverage [#184].
Out of Scope Changes check ✅ Passed All changes directly support the Kimi provider implementation: dispatcher fallback logic, provider factory extensions, new OpenAICompatibleProvider class, configuration templates, documentation updates, and corresponding tests. No unrelated changes detected.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/epic-184-kimi-provider-20260508

Warning

Review ran into problems

🔥 Problems

Timed out fetching pipeline failures after 30000ms


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actions

github-actions Bot commented May 8, 2026

Copy link
Copy Markdown
Contributor

📊 Coverage Report

Coverage report not available

📈 Full coverage report available in Codecov


Generated by PR Automation (Story 6.1)

coderabbitai[bot]
coderabbitai Bot previously requested changes May 8, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

🧹 Nitpick comments (2)
.aiox-core/infrastructure/integrations/ai-providers/openai-compatible-provider.js (1)

256-269: ⚡ Quick win

Missing await on response.json() — async best practice violation.

return response.json() (line 260) returns the raw Promise. Since the function is async, this works correctly for the caller, but if response.json() rejects (e.g., a server sends Content-Type: application/json with a malformed body), the rejection bypasses any future local try/catch in _readResponseBody and loses the intermediate stack frame. The text path on line 263 correctly uses await.

♻️ Proposed fix
   if (contentType.includes('application/json')) {
-    return response.json();
+    return await response.json();
   }

As per coding guidelines: "Check for async/await best practices."

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
@.aiox-core/infrastructure/integrations/ai-providers/openai-compatible-provider.js
around lines 256 - 269, In _readResponseBody, change the JSON branch so you
await response.json() instead of returning the raw Promise; specifically update
the branch in the _readResponseBody method that currently does return
response.json() to use await (and optionally wrap that await in the same
try/catch pattern used for the text path) so parsing failures are caught inside
_readResponseBody and preserve the local stack frame and error handling.
.aiox-core/infrastructure/integrations/ai-providers/README.md (1)

108-113: 💤 Low value

Consider adding a Kimi column to the provider comparison table.

Now that Kimi is a first-class provider, the table only covers Claude vs Gemini. Adding a Kimi column would help users make an informed routing choice between all three options.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.aiox-core/infrastructure/integrations/ai-providers/README.md around lines
108 - 113, Add a third "Kimi" column to the provider comparison table by
updating the header row that currently lists "Claude" and "Gemini" and adding
corresponding cells for each feature row ("Best for", "JSON output", "Cost",
"SWE-bench"); ensure the table pipe counts and alignment (the separator row with
dashes) are adjusted to include the new column and populate Kimi-specific values
(e.g., "Best for", "JSON output", "Cost", "SWE-bench") consistent with the
existing Claude and Gemini entries.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.aiox-core/infrastructure/integrations/ai-providers/ai-provider-factory.js:
- Line 148: The current cache key construction in getProvider uses
JSON.stringify(config) and may embed sensitive fields (e.g., apiKey), so update
the cache key logic where cacheKey is built: create a sanitizedConfig by cloning
config and removing sensitive keys (at minimum "apiKey", "password", "token",
"secret") or alternatively whitelist allowed non-sensitive fields, then use
JSON.stringify(sanitizedConfig) together with normalizedName to form cacheKey
before accessing providerCache; ensure the change is applied in the same scope
where cacheKey is defined so providerCache keys never contain raw secrets.

In
@.aiox-core/infrastructure/integrations/ai-providers/openai-compatible-provider.js:
- Around line 41-51: The current spread of ...config into the options property
causes sensitive fields like config.apiKey and config.fetch to be persisted on
this.options (via AIProvider's this.options), risking secret leakage; remove the
catch-all spread and instead explicitly pass only safe, whitelisted fields
(e.g., model, headers, requestOptions, extraBody, messages, temperature,
maxTokens, topP, presencePenalty, frequencyPenalty, etc.) when constructing
options in openai-compatible-provider.js, ensuring you do not include apiKey,
fetch, or any other secret-bearing keys; update the constructor that sets
this.options and verify getInfo still omits sensitive data.

In @.aiox-core/product/templates/aiox-ai-config.yaml:
- Around line 82-91: The openai_compatible template currently points to real
OpenAI production values; replace those with unambiguous placeholders so users
must override them: change keys in the openai_compatible block (baseURL,
endpoint, apiKeyEnv, model, timeout/maxRetries if desired) to clearly
placeholder values (e.g. BASE_URL_PLACEHOLDER, ENDPOINT_PLACEHOLDER,
API_KEY_ENV_PLACEHOLDER, MODEL_PLACEHOLDER) and ensure the placeholder syntax
matches other .aiox-core/product/templates files so it’s obvious this config
must be customized before use.

In `@tests/core/subagent-dispatcher.test.js`:
- Around line 256-263: The test name claims configured fallbacks take precedence
but it instantiates SubagentDispatcher without any config; update the test to
either rename it to reflect legacy-only behavior or (preferred) add a case that
constructs SubagentDispatcher with an explicit ai_providers.fallback in the
config and assert SubagentDispatcher.getFallbackProviderName('kimi') returns
that configured value (verifying configured fallback wins over the legacy
claude↔gemini chain); also add or adjust a second assertion or a separate test
to surface the potential infinite retry cycle by checking
getFallbackProviderName('gemini') and getFallbackProviderName('claude') behavior
or confirming the dispatcher exposes a circuit-breaker mechanism to avoid
looping.

---

Nitpick comments:
In
@.aiox-core/infrastructure/integrations/ai-providers/openai-compatible-provider.js:
- Around line 256-269: In _readResponseBody, change the JSON branch so you await
response.json() instead of returning the raw Promise; specifically update the
branch in the _readResponseBody method that currently does return
response.json() to use await (and optionally wrap that await in the same
try/catch pattern used for the text path) so parsing failures are caught inside
_readResponseBody and preserve the local stack frame and error handling.

In @.aiox-core/infrastructure/integrations/ai-providers/README.md:
- Around line 108-113: Add a third "Kimi" column to the provider comparison
table by updating the header row that currently lists "Claude" and "Gemini" and
adding corresponding cells for each feature row ("Best for", "JSON output",
"Cost", "SWE-bench"); ensure the table pipe counts and alignment (the separator
row with dashes) are adjusted to include the new column and populate
Kimi-specific values (e.g., "Best for", "JSON output", "Cost", "SWE-bench")
consistent with the existing Claude and Gemini entries.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: d4c9989f-1039-4e0f-b69a-7e45a84b8dd4

📥 Commits

Reviewing files that changed from the base of the PR and between 6863749 and 2aa5f51.

📒 Files selected for processing (13)
  • .aiox-core/core/execution/subagent-dispatcher.js
  • .aiox-core/infrastructure/integrations/ai-providers/README.md
  • .aiox-core/infrastructure/integrations/ai-providers/ai-provider-factory.js
  • .aiox-core/infrastructure/integrations/ai-providers/ai-provider.js
  • .aiox-core/infrastructure/integrations/ai-providers/index.js
  • .aiox-core/infrastructure/integrations/ai-providers/openai-compatible-provider.js
  • .aiox-core/install-manifest.yaml
  • .aiox-core/product/templates/aiox-ai-config.yaml
  • docs/stories/epic-184-kimi-provider/EPIC-184-KIMI-K2-5-PROVIDER.md
  • docs/stories/epic-184-kimi-provider/STORY-184.1-OPENAI-COMPATIBLE-KIMI-PROVIDER.md
  • tests/core/subagent-dispatcher.test.js
  • tests/infrastructure/ai-providers/ai-provider-factory.test.js
  • tests/infrastructure/ai-providers/openai-compatible-provider.test.js

Comment thread .aiox-core/infrastructure/integrations/ai-providers/ai-provider-factory.js Outdated
Comment thread .aiox-core/infrastructure/integrations/ai-providers/openai-compatible-provider.js Outdated
Comment thread .aiox-core/product/templates/aiox-ai-config.yaml
Comment thread tests/core/subagent-dispatcher.test.js
@github-actions github-actions Bot removed area: agents Agent system related area: workflows Workflow system related squad mcp area: installer Installer and setup (packages/installer/) area: synapse SYNAPSE context engine area: cli CLI tools (bin/, packages/aios-pro-cli/) area: pro Pro features (pro/) labels May 8, 2026
@github-actions github-actions Bot removed area: health-check Health check system area: devops CI/CD, GitHub Actions (.github/) labels May 8, 2026
@coderabbitai

coderabbitai Bot commented May 8, 2026

Copy link
Copy Markdown

Caution

Failed to replace (edit) comment. This is likely due to insufficient permissions or the comment being deleted.

Error details
{"name":"HttpError","status":500,"request":{"method":"PATCH","url":"https://api.github.com/repos/SynkraAI/aiox-core/issues/comments/4409813633","headers":{"accept":"application/vnd.github.v3+json","user-agent":"octokit.js/0.0.0-development octokit-core.js/7.0.6 Node.js/24","authorization":"token [REDACTED]","content-type":"application/json; charset=utf-8"},"body":{"body":"<!-- This is an auto-generated comment: summarize by coderabbit.ai -->\n[![Review Change Stack](https://storage.googleapis.com/coderabbit_public_assets/review-stack-in-coderabbit-ui.svg)](https://app.coderabbit.ai/change-stack/SynkraAI/aiox-core/pull/713)\n<!-- This is an auto-generated comment: review in progress by coderabbit.ai -->\n\n> [!NOTE]\n> Currently processing new changes in this PR. This may take a few minutes, please wait...\n> \n> <details>\n> <summary>⚙️ Run configuration</summary>\n> \n> **Configuration used**: Path: .coderabbit.yaml\n> \n> **Review profile**: CHILL\n> \n> **Plan**: Pro\n> \n> **Run ID**: `74f9b31d-b67e-4243-9261-f3be0f2026ab`\n> \n> </details>\n> \n> <details>\n> <summary>📥 Commits</summary>\n> \n> Reviewing files that changed from the base of the PR and between 2aa5f51180c407b9dd41a10e0017837b7f9bf223 and a226a3ed865378faf2331b2bcf237fda79d6c2b7.\n> \n> </details>\n> \n> <details>\n> <summary>📒 Files selected for processing (1)</summary>\n> \n> * `.aiox-core/install-manifest.yaml`\n> \n> </details>\n> \n> ```ascii\n>  ___________________________________________________________\n> < Did you mean to handle errors, or just *experience* them? >\n>  -----------------------------------------------------------\n>   \\\n>    \\   (\\__/)\n>        (•ㅅ•)\n>        /   づ\n> ```\n\n<!-- end of auto-generated comment: review in progress by coderabbit.ai -->\n\n<!-- walkthrough_start -->\n\n## Walkthrough\n\nThis PR implements native support for Kimi K2.5 (Moonshot AI) via OpenAI-compatible HTTP API. It introduces `OpenAICompatibleProvider` class, integrates it into the provider factory with alias/config support, updates subagent-dispatcher with configurable fallback logic reading from `ai_providers.fallback`/`ai_providers.primary`, and provides comprehensive tests and documentation.\n\n## Changes\n\n**OpenAI-Compatible Kimi Provider**\n\n|Layer / File(s)|Summary|\n|---|---|\n|**Provider Implementation** <br> `openai-compatible-provider.js`|New `OpenAICompatibleProvider` class extends `AIProvider`, implements `checkAvailability()` without network calls, `execute()` with fetch/timeout/response parsing, and `getInfo()` metadata exposure; includes request/response helpers for URL/header/payload building and secret redaction.|\n|**Factory Configuration** <br> `ai-provider-factory.js`|Factory extends `DEFAULT_CONFIG` with `kimi` and `openai-compatible` provider blocks; `loadConfig()` merges user YAML with defaults and tracks explicitly configured provider keys via `__configuredProviderKeys`.|\n|**Factory Instantiation** <br> `ai-provider-factory.js`|`getProvider()` normalizes provider names/aliases, uses normalized names for cache keys, and instantiates `OpenAICompatibleProvider` for both `kimi` and `openai-compatible` types.|\n|**Factory Discovery** <br> `ai-provider-factory.js`|`getAvailableProviders()` and `getProvidersStatus()` iterate over explicitly configured providers from `getConfiguredProviderNames()` instead of hardcoded claude/gemini.|\n|**Factory Helpers** <br> `ai-provider-factory.js`|Adds helpers for provider name normalization, config key variant generation, configured provider detection, and provider-key classification.|\n|**Base Provider Updates** <br> `ai-provider.js`|JSDoc updated to label `config.command` as \"CLI command or transport identifier\"; `executeWithRetry` error formatting changed to multi-line.|\n|**Module Exports** <br> `index.js`, `ai-provider-factory.js`|`OpenAICompatibleProvider` added to module exports for public access.|\n|**Dispatcher Fallback Logic** <br> `subagent-dispatcher.js`|New `getFallbackProviderName(providerName)` reads configured fallback/primary from factory config (legacy claude↔gemini swap if unconfigured); `executeWithProvider()` uses this method; minor refactoring of parameter naming and stdin check.|\n|**Configuration Templates** <br> `aiox-ai-config.yaml`|Added `kimi` and `openai_compatible` provider blocks with OpenAI-compatible wiring (baseURL, endpoint, apiKeyEnv, model, timeout, maxRetries); updated routing/primary/fallback documentation.|\n|**Documentation** <br> `README.md`|Updated provider overview to include OpenAI-compatible APIs; added kimi/Moonshot example with provider instantiation; included kimi YAML configuration section; updated task routing and direct access examples.|\n|**OpenAICompatibleProvider Tests** <br> `openai-compatible-provider.test.js`|Comprehensive test suite validating provider inheritance, availability checks, fetch request construction, response mapping, secret redaction, and timeout handling.|\n|**Factory & Dispatcher Tests** <br> `ai-provider-factory.test.js`, `subagent-dispatcher.test.js`|Added kimi/openai_compatible/custom-gateway provider instantiation tests with cache clearing; added provider fallback chain validation; reformatted existing tests to multi-line style.|\n|**Manifest & Tracking** <br> `.install-manifest.yaml`, `EPIC-184-*`, `STORY-184.1-*`|Regenerated manifest with updated hashes; Epic/Story marked \"In Review\" with AC complete, focused tests passing, and implementation evidence documented.|\n\n## Estimated code review effort\n\n🎯 3 (Moderate) | ⏱️ ~25 minutes\n\nThe PR introduces a new provider type with straightforward HTTP client logic and integrates it through existing factory/dispatcher patterns. Review complexity stems from configuration normalization logic and test coverage breadth, balanced by the self-contained nature of the new provider implementation and clear separation of concerns.\n\n## Possibly related PRs\n\n- [SynkraAI/aiox-core#710](https://github.com/SynkraAI/aiox-core/pull/710): Main implementation PR for OpenAICompatibleProvider integration sharing identical file-level changes.\n- [SynkraAI/aiox-core#711](https://github.com/SynkraAI/aiox-core/pull/711): Validation/documentation PR for Epic 184 validating the same code changes and provider registration logic.\n\n## Suggested labels\n\n`area: core`, `type: feature`, `area: providers`, `area: docs`\n\n## Suggested reviewers\n\n- oalanicolas\n- Pedrovaleriolopez\n\n<!-- walkthrough_end -->\n\n<!-- pre_merge_checks_walkthrough_start -->\n\n<details>\n<summary>🚥 Pre-merge checks | ✅ 4 | ❌ 1</summary>\n\n### ❌ Failed checks (1 warning)\n\n|     Check name     | Status     | Explanation                                                                           | Resolution                                                                         |\n| :----------------: | :--------- | :------------------------------------------------------------------------------------ | :--------------------------------------------------------------------------------- |\n| Docstring Coverage | ⚠️ Warning | Docstring coverage is 75.00% which is insufficient. The required threshold is 80.00%. | Write docstrings for the functions missing them to satisfy the coverage threshold. |\n\n<details>\n<summary>✅ Passed checks (4 passed)</summary>\n\n|         Check name         | Status   | Explanation                                                                                                                                                                                                             |\n| :------------------------: | :------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n|      Description Check     | ✅ Passed | Check skipped - CodeRabbit’s high-level summary is enabled.                                                                                                                                                             |\n|         Title check        | ✅ Passed | The title clearly summarizes the main change: adding support for Kimi as an OpenAI-compatible provider, directly reflecting the PR's primary objective.                                                                 |\n|     Linked Issues check    | ✅ Passed | The PR successfully implements core requirements from issue `#184`: OpenAI-compatible provider support, Kimi/Moonshot presets, configuration via YAML, baseURL overrides, and factory integration for provider discovery. |\n| Out of Scope Changes check | ✅ Passed | All changes are directly related to adding the OpenAI-compatible provider: new provider implementation, factory/dispatcher updates, configuration templates, documentation, and corresponding tests.                    |\n\n</details>\n\n<sub>✏️ Tip: You can configure your own custom pre-merge checks in the settings.</sub>\n\n</details>\n\n<!-- pre_merge_checks_walkthrough_end -->\n\n<!-- finishing_touch_checkbox_start -->\n\n<details>\n<summary>✨ Finishing Touches</summary>\n\n<details>\n<summary>🧪 Generate unit tests (beta)</summary>\n\n- [ ] <!-- {\"checkboxId\": \"f47ac10b-58cc-4372-a567-0e02b2c3d479\", \"radioGroupId\": \"utg-output-choice-group-unknown_comment_id\"} -->   Create PR with unit tests\n- [ ] <!-- {\"checkboxId\": \"6ba7b810-9dad-11d1-80b4-00c04fd430c8\", \"radioGroupId\": \"utg-output-choice-group-unknown_comment_id\"} -->   Commit unit tests in branch `feat/epic-184-kimi-provider-20260508`\n\n</details>\n\n</details>\n\n<!-- finishing_touch_checkbox_end -->\n\n<!-- tips_start -->\n\n---\n\nThanks for using [CodeRabbit](https://coderabbit.ai?utm_source=oss&utm_medium=github&utm_campaign=SynkraAI/aiox-core&utm_content=713)! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.\n\n<details>\n<summary>❤️ Share</summary>\n\n- [X](https://twitter.com/intent/tweet?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A&url=https%3A//coderabbit.ai)\n- [Mastodon](https://mastodon.social/share?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A%20https%3A%2F%2Fcoderabbit.ai)\n- [Reddit](https://www.reddit.com/submit?title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&text=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code.%20Check%20it%20out%3A%20https%3A//coderabbit.ai)\n- [LinkedIn](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fcoderabbit.ai&mini=true&title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&summary=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code)\n\n</details>\n\n\n<sub>Comment `@coderabbitai help` to get the list of available commands and usage tips.</sub>\n\n<!-- tips_end -->\n\n<!-- internal state start -->\n\n\n<!-- DwQgtGAEAqAWCWBnSTIEMB26CuAXA9mAOYCmGJATmriQCaQDG+Ats2bgFyQAOFk+AIwBWJBrngA3EsgEBPRvlqU0AgfFwA6NPEgQAfACgjoCEYDEZyAAUASpETZWaCrKPR1AGxJcAZiWpcaLT0ANLwzDoA8txkAIIAkmBMzNzU8AJePBT4EvBKfAAUtpBmAOwAjADMAJSQkAYAqjYAMlywuLjciBwA9D1E6rDYAhrJPQDKshgA1lQJPdr4AB5J+BQkPdzYHh49FZV1BrF4sGtcVD5oJB6ITIi4aIfj+NgUDCSQAlQYDLC+/rgeiRuPAGGBygAOAAsYGm4XgYF4OTylDAACYAAxogBsGIArBiIZBAEmEMGcpFwn2+vy4zG0WHq4weuGw3X4MSwgBQCSA2Ei5EgAd0obPwaA8mFB+HFiAANNY6NkJGLKPApfgYgAvSDcgDC62odC4mJxYHxpoh0ExHDxAE4OJUMQAtIwAEWkDAo8G44nwWAKlzEyB82WY1hs1Q4BigsWCyEepHInoYkGicUSyVS4gyHwAEtBoFYssj8pABYNIGEIj0ALL4X2IU6U3jSEi4OMYehi+BoRDSDRRyANbi0A3IJG5EsBgguSC0JBMKQuHr3aisuUkJbcNZtuW0fAMWUKDA+eBESA0FLimhyzD0OeITO/SiQS47ARoBjTT4kWBoXJrfto1jSBmH3aY6EgPMC3PaQ2xfNYiwnZ8N1EPBVSwW8Xw/ad5HWAZ7ioH0MH7AwADUuxHIj7BoLpIA8JAaFoSMoAwbhQwobAsBoe4OAYeAB1Y0NuMpHwEIfUR4BPZNhJfeAvGQAp1TIbRVhSNJs0RRUUQoG8EXHbSwCnNZZDlBx3wTXAwHvR9YEoWoy1wWBdDADiMHiDAACFbwEtjIFcyAlXoyjvDpDBJNgnz2M4uj4AwXBIr86LcFkGIn0/AcBkpOcfB8Zy0umATFA+LRVRWJh1h6NCbgWUqwECvJqAAoRkHuNZ4GkQqlHsD0vTbZcSFC8QwXouKNGa+C+FwAV8FnfdEGXHDZPkowdQ8fBe2QJAHG8EpIShcxLEiYRRHEKQgxDGKZggrbsA6gx4kQbbduhPySAAR1u+5kAwNIpHsbBuC3CgRIQysdBCNENDxSAClretG0gBJah7dAQKKjxEO0lAMNVRBVnWc8ZrFNaBUgVlYrPMH0HbdAPBoCgftOj4CBTDkEn4PhYji2BshBZNVrQbAlA0CsSHkQQRDESRpGY6wtK6x5aF5sBYte7hxXeNg4sgZpmmrT55AcQHtwp1m01UzN0kyMhaC3WK4IKEgNCIDQ5ThjAG3wSkENTDAbBeenalEvgqYhqHAMRnZ8FJphj1PV40l9fhcoYVkCFDXX9f0/JkFyR5QKUDG8IYmdMLIXJsgwLXAVjk8zwKbPnx+tg5XfXsAH1Xg8G8QRCMW5QL65IGbkhqgj8YAaByk25IJpmn4RdPSUdt6F9hILfUzJYiseIycQNBSHsGaqYYTBvz3iCHKcjcGNNg/2FLNZph8EmFLYB4wHvuK5QeRAv1C++OkQIDWMuuXADANBjwHAAUQ9q8D4GZ1JyXUPIK+6ALKIA0EoS42w2waEHh4DQvBwjOHkJhAgUokjE1NgKWyBMtyPStk7Acbp6KLlmqnauicMBylZPfSAG40CXmkHKeqlF0I9GEqbAoX9KTrAfPWERhMpR73vqZXA+oIgYCINUG8HZ7CoQJkbKeE1GBpxYAIjsds4qYIHOMJgMRCbYCfMgZguCvSZFSJ+e+ClyokDlNNCg0wHwfn8cA0CLhTKGJQXKGIFBg6hXeD/a4A1WwuGRvouk8hYoMA8ELD4jxyCkx1OY0MtZC5y2LM+GMaBvSUBIvoYw4AoA22TjgAgxAyDKEYgoVg7AuC8H4MdKWZ0DYKHyCoNQmhtDOUMCYKAcBUCoDPoLDpCZukQWSNXc4aBSYOCcDOOQ4zlCqHUCVWZRgDDzKMCVZY+MNh+KBEsVCRFlzDFkVZJANl6nNUjAAIgBQYCwiNEjrMIhBfZdIZz4BTr+bRd0YxKHoAAAwpAAMWJu+T8Vh5aUAAHJCJIA3XFFACVsGqMiwms5WyUC0czWyWE3wfi/OzRufBybaMgMihIOKqkUAxWIYyztWw6l9HXAoFKYb6jnJy5F2h25sswa+DwWLpjIp6HK+ACqSWYOIVC2QyLdGlnLI8LwRAPzyGwYLOm55fyUkQAKWpyBkW5MFkoZFgAUwlRQNWK8BKW0LIMPGatd47rHoMq1VmxPT6vQIDeifZBzDgNCilCqcaAAHVBi8qQhQCVlKWasnpagIpjKVXMteogKUaEk6xXuP4egMLaaOtkEGeigNTYCFbEKQNLrxT5MpZhb1Wi/Ui15CPegjkPicULSi3+aqeDOEJfTbGXLexeDEFYRdOxri8gcHTfNM1kXtznci0dJAjJhttR8ZFqa8AkAFvkvN1EZXoCVHJFQyDkqMFsp+bGLN87uLACNBBvo5xUTQZO+whK6L4AGBAowhwDqR3ptw5ALNINKFdYRdCyBG0binhBBCWwMigkseIcQd0oDVlbKcTswRDRcvRZi5l2btJkqJWy9jkqk7IonuZdgLovnUCfBQSlqtT2LDKmsB50mnkvIkWZD51lhN0LGogZFA5qOOUUPYU8jN4FkyTT0goWi1gRlXSkjdW6vAeF3bggorr8l2bpnKUgw7nO4B/j2aYkrSTIrXSdTdVBt22ekPZxzSgPOuZ9WFKLkBj3ecleJ25UmKqPNva8xTFlPkhPAap5qGmDDNFitIb9mBSBMUgAAaihBiHoYBShGGgfcEhPSmBdXWPyUm57g6cEgNRucjgDAAr+UYCAYAbmSfuT0WKwYewaOcSyCq9sSBEGw/WGqmk+XzRsNA2ILpqzQPwUxYbgLgXrzBcm/6BzxawvK3dOAHxdv7cO6YyD7NWM5z/at9bWAMDRw4Y4dgNMghgfQmKM2GB16IKzJ4klKBhFcKosHfrdYPaNkAJgEyA17phYJbbMiMd4w0ADgEOPRVqVhyQT7lBAC4BEanJeSZVnkVnQUEV32sfEEcI9A+iACasRqzzxDUQBOVFexSyTij4ncIIg05hmy88KUwkzznuuKx+B7Y93gH3WQsCJB6PoAQseMAGUK5yJQLr6BKSQYINwFAyB8O3ggizei9xIfQ7x5vXM+ZCzbwerTX0RBEAokgA+rqoqFb6IAOIxZ0DqZo8QDdXvQG8BANAxAGbnAfKgoYGf5LQwyktCuC7bCdib5m3mwAz3oNkNCnLxdUVQADYKE6Zqe1JsT8XrwUFy9r+ITlLMw9hPIQyuc6wxCYxLB+d4j0BFLCEerD4TejPO5mnnrqZPPeU+p3wfD25MHl8qTm0PnvPSVq4ioTIyzaBCDTqv16L8TrJ4SdQfvZ5fj3bHPIh+qtIPPYO9AjDLQnJB8C1jsL0qkJ6JykPgFMgDHsOsbvUAYIhkCpYLEHTN0jhlShhqIOKL9rhrlHvsDIRnwMRvRMmOwOoO1IgGNpAHir6B8AUHuJwuwNwmAL6B4PIB/vCmhjNP/q9rHDQDYgANxBrHJPIEb0DB5ED6byJozZTtS0BQJIbVgSh+Bu5oogGIw/ScEaiUBGDFbkDIDcEVZcBVY4j1Y2hNYtZ0htZFSvSW49bbhcADbwBDYjZjamAGApbTazZUAESLbwIzZxQ/aoabaKrhEkqGTYRCq/KnajbnagpdLgpSGOAxqNomEPYMqsrw4XryD/Z7KTz7487oDBBUG+gQ4K7JQxBcAABUtROOG8lO9RQBJq9EKMcKtAI0OiPOnYkA9R7snslI0u8INOLRdI7aA+dqnwXsTkfe9KteRATkyKm+FOTCO+p6J+ccIuv2MGQQpsBRwCFApAyAhafAwuxqjkc+qQHYEEVquCQYCEk6vYk+wosS3+FAoyqcrUoYCuGQYEh4mE4+awtAyAwBvwrx5xYqp4kA4ELapYlAnOm45Bng8gzYvY2syWU2KkwuGgsgQiHglKecqM/2GAYAZAQOVABOR67cwu8CtAO+Ou6mJEO+2MK4cU3YVEBQ3quAGxtQhx/2FAdI9EehX+fKw8hK80XYPYSil23EqMp8T4sJYse8pskGgpwp8Aeh9AI8PAeSuG3o4OGM5uFAS8IG2xSeG4QhoJyeCuHoAI6Eq6DkvwB6R4ARE+KxbM8Q5O+OXgGxpiAgsxXKMufqvRXKSkP0CIMOTCmxrJ94C4lAsgC0q4QYnEEuHsMMPJsQb64o2YO+6mcoPJ+ZTIKZhqKeU6K+reKAKGNAC8yEyJoIqJR4dc9JkJEpbAyAhEdCtqZ8v4FAtAHOKKEWJA6qQ6vqp6bgDKJeXgWOPAww5B1xxRzgSJNxSKVK6+16qxvpVOJKyKSevYi4EOJaK2DMEOtkHgcSYJiJpRa5LMGpXYehtM3YG0rc2AckhulAFWbZwuh4+Q0sjAt4DUtZFxcJAUzg3YNiMMTsLshZEZOJW+MZkAHq4ZHI8q0Z2Yo5cF8APpXuhqu4NKQpJWzZoaEECuI850Fifed8+i+GKJlIIFYsgJ+iwJMhWpHwbKLkKSSo2sDFLaJEly52GB+B2Bo+uBi6REBBi5xBDapB85pGlBFGNBmmigpeUllIzeV2WJtUjyfh82HEGey2IRa2YRKkERplUReRamyKXAnpaYOF2+u5jA0oYJKMoO9+yK05TsRBbYlKMia02iweXUN8LWnK3l10F4iAyhhhpWmRlWVW5QuI9WEI1h4gthmy9hnW7U3WOUzh/WrO7hgKUYXhPhOlx4/hC2BlGwK2xlElkR22dVOaam/yZ2aBSRiYV2kKpCbSmRSlQ4Leye3K8Q/psc7p04s5AAUuMC6PuAujngRdSrcJ6IaZLghC6tCS7FsreK6bmUPOoNTAIoMM+I8PHrvJtfoghI8BopgAosDCgEoBySePUpAO5FyhliQJmo5LyBogaj/AyieDobatkAKFgJQNkHwB2fvIfC/h0DQijLFS+BdI8MHtol4EBkRReOrAaDFChhjP+iBIBsBlyo5EDcPIKJANAqaWsAUBoDTZKqfOAcAZkOBMCGqQyvvGwMAo9PwoIQ/KNQZtyegRjAAN50hLBfWejSAAC+VuGNcElwIBtAIszQ82AilNFAXAQt0ouAFNYN+C0gkNJAkthq/FqByGmB9YIlHwmGeBqGbSYVMlc5JGFBHJiltB9B5AMM/2aldAmwclyY0hshMVcKFWyhptqhYU6hlImhW8OhsgehFABhJWxhwdDGVWeI9WlQKVrW6VHWfIWVAiOVwMXAzQ0c8RnhE23hU2pVc2fNhlNANVOGDV2k80sUSgSwTVZdiRnS7VPSnV0Kd2PBk5qAnlQapM4QU8K8r05Jm4xRtlUO3pCFeZjlYogegV9KSJt8nKCu49XgSOWBAtQ1u5hZQ+GxhZ8BvqfJgNLwSxXKnlGg3lBZlil+ps9NXgFAvB6ADAM+BeHwjR6FcO4pwYFijkSytxSwZGM41imglySG6BNZWB6GolWGtteGM90lHMjtC5Cl1BtB0CaDlIbllWc9CQ9l6xjl4md9D9YmWAEm2lsmultdVVRl+BTdOcwRbdVlAllg4d4UGhWhXMYocd+hRWSdZW8KcVaI9WGIWdaV9AHODh+dThRdeVg2zAZdRVFdJV9DZVelgRddoRtV5l9VWFTRTCW2jVcRHhXdcpEKaRXVGRKdSliyQYWh9s2QtAzipWhSZNxDC9axS9fKlKrqs+jk1ACOi+1cNMOOoe0xPpXgElYA9wsgmQUEhYuS7U2sUuf9i9XgcufuB+8Q9F618CnZ70n0lINsUDPQM8g4LQcofuyphsLwbw0iY+T+CEQDoY5cRq9xNqBCcotkQQbxYZ6w31ki4QJAAc34v4/4fAxJkGNTg1GxJEj2bZoO3QA4LqP60w2Z2guZn6sgT6LMi4kkuEnEqVHw0qSdMgXB0JhFsqfgeWlK6JZA7wYZDToF8iVa4GgwUzr9rNSJ9MANfuEcN6zyaaHGIY3oco6oElkqLMVgkQ4w0AZWlkGY8TWB6wH0sEYJ5YFzAcCwgZt1nR3RsSzgLxk1kQeKkiVpFaW4HsSiYiWNyK8i9LvYGg+Aaq64SwV1E+EN3NvoQhIkF01RbOGMWzGuM+lKDYtSSiQJrYrwGE1Et4zgc42pFauCR4DwvqsqDgX9+te54ZeAWwuAhrmE78QQ1AjwTBouEiBClUBtM2ShoLFI7kokRzM0e+LxxerYlrDwlxpweAdE/gcIUxHwHzYsEc7kQLZ51wl5VKAgb5Hg9Ac880gzbDqQyToooJco0qYZkBLxrLiiMxc4SiVpVAE+AcJrFF7E0gbLoBFVS2pWBQ6+d8ppaAsg7BPgiIzgcEPNcURqXzHgf0EbLapkEo4gj5oNawNzr0I4UsnKo7k9nay5k0nLZATFOpawmpj5NTc8QI6u9sYZ2CJW9Amba0QQsk1woJKzU5Kl1s+DP9bZxJHl97Xlj7kAAAvJAELe7n49uayUbSRCgYJfAxbYg1bWJcJag5IRg2QfJS7TgwOIihBN5TZVuV7sNc5VBTyzbM6jyrubUFpXctXeVfpU28EfXSw0YzmvNCY//SQOY9pJw0BGuSPWh7fW+/fR+9+7+xhw5eKUbSurQyR9ozXY20EdVdR3pDqj0PRzk4x2yix4jPRme37cAtpkQz2FMMmPlLs++moPRMlIpMtRmbx5LRSsh6p5g6Ru/LRjZdpz8HPi8pC3jp5uyBJV+z+xZxpqx6Rep3Z4oDZa68ePgHmonUYWI6YdVpUFCFCFIzI+zhlXnWTUo31q4QVaNho5NnQ4ZSuDsGAKFLw5oPicwB4M1Qka1d3RsqkTdt1Y40PaUzYyilo3lw8AV0V5HXiQSZShpfKZ17BBp369a96j3XQO3NQIa8iieF4LSS8HFGWZhD1eeBW+BPQOMDmLEGiHiNiJAL+A2NIMuGxY8XwEjcKRjL2N7LlHNmwIEl+DNwmuMKlJJGK5wb9ZznFDOCjmtRVBlgpgNJgENIV5+Yx2QAMOQFZfboZv1Wgt46TPt05JhMHnoSLC9ZBgwxJwTDkdtgYumQMz2LZPNMj6Vt9xj+R5J8wyZTJ/VTRwZJZQVmGcimT3o0w1R1T0x2w7T/kJD8udD8mknpBkzzo4w5RwY43Vz8KOwxuJD+wDOAj0d4+T1SLKswN27mKJWjefNMCf2c6sz5VaLw3RthL+/XJ6hVGQpxzz8upmGeoMgPwYAWgiWgj4d8TwfpoToW91ykiB42IDS5eKOAsNlhjVeE7KV4SXtyjLbxHw2ArxWS3ibabXA+bRmRB9Ssg55zB9uCQTZ87eRkh1AO7YwaryJFoctxwbIFFaI7FWYZCPVuUPtAYM1qlUl7nY4YXel/lWox4dl5XblxsN74tn75jdxDVHcvBdsd12VxV4n21TV9dukQPScUYH1VdiJ6lv3+44P8HwH9iebxP2H88/DnSbsSzI7vosYln2e/DrCwg2vj8IzteiGQOvotk/41vDvAfqs5qtqttpSlRfXidEdKjN6QzqYPMIgSx/xreg6dFhuAgHBIB0jCGQpE0+BBs+upWWKITRv5JxmCQOOKNwk/rlQmcnBEiLyGDDSBbIE6BlL2jdQjlGebmccsRR2L4D/in4BSOzQ+D2t8WQbQKJ9Hsjlhoab+HoFsgfhdgkBD8JXkYBQ46kyadpYprsRYHBJZYyKJ/qqU5RnxX+25GJmEziatgsCl3AGJmRVwtApulTDXAt0LK1JtcYsPXFNwIRTcuBprQsqLXFrUFjamzLCnNzf60CwUpGDQV7kYG2sk43JIwc0BMGHtzBXKSwTrhsFOD0Y9giZgHFsFoAxaaSVwcoV5CY13glA69AQnbgOp1AvwCmM/xRSQFiY1wduH919DStABFtNBGU0kDKhtYjDMMpdzfwKRoKrsQGuQKlA5tzw3meQkojuBFNPuUoI1EEFvwhUzwAg6ivQAwFEVhBkFRmh8GZoggw2UGDmj1kAF/Rj++AngX2AQxIFE+QlW2qn2triUsCmfdBkRnU7YNKMMAAaMPzj7JobKrXDfipV97b8R+u/VYPvx67IFdAKnW8uqCAx8gh4sg7Yp8DWisCbKKgwdB4IY4aY6gUAFfj0m/6KpqGmA0zr0mQEswNyN5cogDTtKnBQQMsYMvCGKEoVlI5vLwb5VVig4CRVKagf2g1T0CwohqLhv1jUKDdo64bWOvHQi5B17scVKEOnXRCZ1G+NhFvpcxS7ZVesLhTvuo3GxGBmCRPacNQSBB8xwQ0IWEPCEt4UAeg0CHeDqC1EwgQg8QasIkAhhgA8QYAWwJEFIjxAXQ0CGwMdmn7WNkiHVOxv3Si4IoWQD5R4IrH3C4CHgAAc4ADHM0EcOTT5iQA9os1R4OsEfziA+AxOEsiyDZAvVeQXWOXANFmioB6WBAEUMq3TGQBSAwWWcI8BZoUF+AxY1kBWOojGRYx0IDQOUBJyNFSGBOKmKyVFSfdsIdOG8MwEDJoZsgp8PcMgC6jE5eQQQWQHLlKGQBicmYmUTThNqgdk+H9HAunwuGEF8G2feDrnyoJ3C8UZAIYHSBhjOAPokgSMVbSDFcJwxM0VQkEj3DA1RCGACMXtwACHZGBqMvDUqWt5oe4wlCETT420RwkVEiNFWTpCizCkjdEIlzsKt9FG7fYuqXW75KiDAKohaG1EO5ViTROoiIHqImDQBIgNgXnCaJbFgBIgVgaBHinXg6hIg1YKwLEGgDxAPIzQaBGADNEWjbRNge0Y6OdGujO6VXZrvP3saL8siDbRsTgOrh895SUfGAa8kxoYAwo9eZkB8E6azgLglkJJpkDTLbNwqA0D+o8EnH1p5AKOLMVlVnHrQm2YyfKAC3nFTjaApkhCOZMFBy4VwJY1WIGSuIWtKIAY/RDbmBFeApAF3ZkHWPyiu5NAh+WIPq29CYA3meodQCqFNQMQoeUKNbhAXiaMFYgOocoIAGQCbKeUDRBjD9E9IoiBDgACK2ALsF+ijwGgeg0AbzC1GGBzo4wBMNAVWXbxZBGOWyPapUIwglSMIqeRKZVQUZk0wCGMDkEzmV4MosWb5S9KJG+IQQmWVEGSGdVmGlMQSiJWgEIJYBqByAswuKETF0wo0OBgGTMMsUEgwR7g1DCQPuG4QC8GUxON0P9QZGNppq5AOXOFJSmoB8heWCCOpN0miB0pLMfKP9IurgF5Jjpc1NxGmkfA3QEgRGBZB5CiAQSuPRvKcUrIBsjw9pWsjvVSR4CqIede6u8C4B4y96Scf7PKRRyC9+OZDQJnKDyJPkewUaFsHIlWwlxUM0WdqiKQhShTxx84E0mQn0T+Z3k2WZTH9NEzTM/wqoIBHhA9E9Ji+SeZaUALCx0wa2iUJSWqXJA0p6AnEPasJEnrrAtwYFIKPgLWmf8GUPInWClIbyOlUAZ/JFJVExm4j7++SZPEUk4KMB9QPSBXJhCj4Gy9SdYyDAXBe7/SYiS4NlD0HFkiYh+IfHaRCIe6btk8OoFOjrFgyvRtWKfU3J6AQhKw0APgQEMrKTiy9qCpYBAJkHpFrD5J10RHKwUJmfdZAK4tAscM86nCoOKDbcbB2uFO0vxrtAcIXxhhSS656EdghgE9mZFQ6wKHhpHUgBWyBGuhYRhBJ9FxVsQlQDOg3yb7Z05GyXNvnKLTkChFRXhA2TtIqhZZ2AOWb5BQA0DCQO6VjISfLNsZ1cHGn+ZfpjORTHzHkZ8uKBfJUz1Ib5DPFmAUHKDIwb8acAaiIHuD4IwIlKb7kQC9gf48YbACJAaipQAY6YCIQmgkjLlaEXmnxOycTWjhklp2fATtDMxllygCgRUh/NuzCa8ZRZAmITBLI0CJt3yvKFIKayun0ViYH9QtPjXQVo0Pa5IYMQukYTaIk8BQGoDeRJI+MFcEaZlPmkG4OBEpPZCps8haYbRV0itJjEymxQkp2MT6D8NkFnzKD4QugPQKWNjxmKnKNAqxayJHQHCORSfYSm3M3EW1LhPSbuVg0Q6HiGCMMYSKPPHmOMXxnrHcdtL3G9zLU7czziHMerOsBRkE8RmYUqBrzwQ5QOCTnWlG7zcqGXLvoVTQnHy9eFHY3lKWp45poigqFwNfNgi3yWqIKarikREneieqjXThf9GUWHFx6s9XJP4AoA74dQH4WyBSN8Ydi/SjldSe9l3iyLw5Qs3WRot7Q9K+lAyolEliwBeTlinaYOCQGgQDKhl+c+mNspdLYK4cLYPBdoh6DyI1Raw5FNWEiBUsNukQaAO3D9ztwQg0CXnJSnLjwBK40kpUJ6Evxl5CmmvBQIeShpPEqBtMgJjmg+X4MwyDs51BSH9I9hewwMW/tjFyT5IYR5ImGLWgeA/APgVWa4idAgivtC4o5EIXhQGrwiFOA6doknO+LpxIS44qDktO7AlFkU8nGkVqwraUgCgJzHwLIFNjIoR4Qy8lQ9LCbo8PYuKt5qgGGUKc+SqPAhjcGDSONGMrYfTrmVGW/86BrYYsnzIUVfQqUvCuVIgB04LBHU6gM1o9EoBv4U8VATtkYRO6vo9m/yxlWGVslb1v8eKtpEyPdQsjY8lKOEptC4gzSFWDMXmSmSGSSxoGMDVcc4pmgbibaGfTuZfzg43DvFSlAvr4oKAgMXGmQcvlqxAGtKOcwS72mErTXkZDYemVcHIV54nt9pGDGJYoUr6Rdq+1WbEPFzAAbzJR8EzJYhL3k5LD5FdApcL0x4bBilpvKkaYw0hKd/5GzO+XUuEl91bsPopxggFzUFJgIcPSAONUG4yQlFtZb7hCs1VQrYZnC3OCqH5UqLbSJKWWHg2tL4dD6gTfNh8S+LSZIIPuSRN8BuqUgfJVrDOYqwghHIeSbrMLpKhbauymcnwGUrU2aBq5bYZg9zv00Z77dYgvcMWJSlIXSyzMUbWuZBS2ZAz1VH6Izoc0lRXwpmdIUNmeCtKUAAajzCEq/TBK2Rg14bInKBSbwMt3O8rJbFnJXJEr6AgZKUP4AwgFznwrQuyXCQjh4MXOkEopsIioizScWAUVldN1bAuk5QI1RtnZPKjj5KQqud9dBEC60Ak8qyU4J6A1DcJ45QrPbvWmGaYRphawhTW7kDKOSYYBCarJzQNpgTnqiqjXhMSfYNMi2DLP9ETBoYJBd09baVr+EcRoIRZ+rR6FNyrZ4AzWmSX1r5OxXbT7WfCUgFAigATxjYwMYwqUlvr60fEFIxotpI+BylHSWAjMo7GdidD35Dw7pPAiSFLBoA67D2MlukF1oU0PLKgB5EUAoKJiMQA6anwDhwLTY57bNjltnl7MWo+c64KgiY3J5R2qUraB2nkAEKywsqVbcWi9gBCw0FIymQBR2CCq6NsACclAF5Dzs4I4uUZurIabEKPNPiWFXAjkKQYqAeyUQKM1milZjttSGIM4BXQ24eYhC1WmDRgg8sI4GQ4og4PB0zsEaFiFQCmsc1wQjkW2wVajvPATMG0QbPZc+HKAYhmA1vANFgHO2vQo1uLK4mfG5REttaatCckcHsB9liVzUX0OFsURPpzycSKHhuQ6m4qRw/ZNimjE/AQRUmdLRRJPUpZ4oF0WbIILYhjXNywOKfeNUg0TVbjS1qanubcIzV0EQlkhX2trpdqRLXFGZIUATEbV0BRCOan0fwDHnZIRhPvLxqTVJgyQHu/FKeVyL4Yx1BG/IkRi2pToSMqgCXCUc3x7WjTZR2ShUahLACGArkzSSxA2lyirJCAwkhYX1k+2NL5ARyDnFSSmTnJGk8yE3EshBx4BU9D87eX0jihcAlA2rLwNvK6gKCs9fkT/DZKKh56zkMyRpAYAADaQtP5N8FIDxBaAfyDgAPvuwVC8QJAbEHQCn1QgfAGIEfTKD+TnTR9fyV4SfI2B9S3k/Gb+dHPyyIA/ky+lcMDGiqj7KgaIKEMvpthn77QeISoMfq9GyA190bTfjPlVW4AMUOi6YDvn0WcZCU3GGhnxlkSCZcsImQ1gFgXbM5S0qqNsupKWYkoBUOEIJnIPwGk6nVBnLwDC0nQUAywLxXpjarxo+qRyfq4dNK0dTcANAfySWjKH72D6SAw+tffQfbilBVAUIEgBUFKAYgBAUIAQEfpX3UBYAa+jfelnBbVoMAO+pTIwpExqZ+DJ+3ALfqhAQg0Q1+jsIoYhDYhH9N2NfSnNb1gsXOH1WADvifRyLf0mG2ZoapeI8kv9ZaXRXyj/16KADrpPmF+EgymGvwvs5iqkNBHVkxSx+HFXFI+AbK317q5nDmSI0xI1YGsOyc2H/B1i+ytAVYGuWIOeoxybImA+WkgNEQqDNBug/dkYNj7mDlQCEBCAYCVA8QaAcoOelKCVB+Dq+sfSIdkzb6v5lkffVbzkMPBT9JWUfbaDxCqHaAt+20BCC0P6o19MYCYXBEF5ZGgsZQ0LHug4WGbdMMhatczBmjrBdSkGadL2EoFfLOwxxYRfAZPSMi4Bp6ag7QfH3woCjFx0gBNy/q0BkltAAQDaEJ1Qg6jgh4Q1XVkyiH5MvoSQ2LOkMH6OjvbW/TUYxD9GQTsXEY6QjX2kDw5T7fQxCyHxPp7gMqaegxFeYbABQnoB4IZxQSliqp/ZYLajDcT8LCascMHBUQxhkag2JhOyZxHyCcFTYRcrAGtDgw5Hzj9Bq48wZHCXBKg9fNEGiAhCVASAbxxyB8b77BFxO5PfRobw9isNJe9vY7ECa6PkBz94J7o/aChMuA197W7gCCOCkLUeoWI+2ZuCdxVk8R6gr0lOpSY+5Ccky+HCvQCoh4YCEeApNHksUnV1wKQfblqVNgknxAeojI7+nIT9D/+LsM43kcuMj7CjE+0QD4FoAii0QH4KEDaDQCimhDDRz44ZSlMs8De0nPUTtj2wAElTx+zowoY1OFT1TqpjgJWb+RLqxjQ09PNZJHoRSgVNOjlduT1Ey8G5b2BlH4Mpz6bCwZM4eb6HZORmh90Z64yQHbjtqHQGIEgHFwYDYgIQS+gQ2KczMSnClFPNnoY1KXN0egip5gKufkO37KgNoKsyKY4C1YtTz+sfQ1L/hV4ZSNeAOKbC5yL4oe7U9chBo4EA7TY1MqgQAHIu82J2QABfzT9DB8faYWBGanNcmJ9AgbEGiCqB+A8QaIG0KUGxDpnxTonbM2R1zNSd2eERQ88ebLOKG+jfyG/RqZFE3m19gmHTWszi0O5583OTpbdVbOoB4aLs9FV1FlVeDEV/lM8GghPoOn3Tw6HfGOdguTnmDEIRfT4BTNPGL9hILCxuZwtMMcz+vAi7uYLMHmizh2Es3WdIsam8QV+ii2oY1OIWaLY+xFHGBd3ziwYNYNHEMRzHMX3zHKM8LxYA5H00VjOSbUf1QPI52oybBSCPFbgyk9NUQ6wRgH1wDCPAGSPoq/UZFvVTjuRyS0wdjNnm0QpQFM2iDksqBlL6+rM2pbwsaXKeWloi7paOxHnlT5Z6s+hYvOj6Xjllv5D2JbK7E3zmQc1LWlRgmKIg1Q9MtShelrD+zTCNsmWCgL1wqiSuUK72D02mDNcsaKwbriitJ4jcElzk1JYn0Yg/ApQFc/PqhCVBEL+VjfVuZlP5nyrL2SqyReBMVnCQ9Vms1UCauslEEZ+JOLbJrQYyW85ywUFQEBiXw8WLq+ze/hVVLDlSLNNYTAQkBwFLFz1pAEnH7aaAYL61tK/CnbgCBygO1m0DaHbVcHcQR1wq5KeKsUdNL4vPc5z1Juoh6eh+0s9derMmXKL1ZnEE1estcoj1O5J9axfc5uN3hpWZFHiipbtw7RDop0TYHbh0S8UaKeIFHheVvLxgQywW3xJFuxAE8sQcYNAlltUoL+t1EeAsFpVBohS/oqiOQkjGb0RcSAJyOCLriQiASiO0MJxHWAh9t5EIwNWtfyMbWUbUIBgAKdqxLmbQX9Pg8vvqMFXNzI66U6zzF5G9ybJvY3uUpwiyHqbKpy87iDus7Wmrd6vDlyidFopYgDQZoI8rFsS2o8/qcsCWgINW3WBpidlWb2tO0CCge7OponqgZa5GmliBGb8oHjowf4CQvAHFbJG9XXNAO9yqzf9JiaAqY8RG67eRs3GSA23CEAhY9ulAfAGFvG8HfUtE3SrJN7S9HcpvVXb9hOh/aZYGMVm+TTVlETzYva0AWrp4D1kcUPhnEDtaB8sAQcdX+mPE7FeHAoIUittZUHZ3CkzNzjgVAekVXNijJSB3o/DWMMMwNetQ7hj256URi6iWUX31qGgduHN22L0lGSjFDDU+bt2NMv8LYTEsxovh8B+cguEZijNYrqsUYHFe28mhdtRnJ705qoyKOnvYguDCFzCwHfeMqX1+BN3RiVZ3Mb2zKkdmO7ESpsGWabl5/k3dfRuaG6zT+nQyqqLIkon05hmWVSnvI8y2y5FHW8+SUS8LCkNCnmbQCqzC5Hz2xgCkqThLGbgI4I0ao6XOmOqeroZOEVXYRFKbHgHlzDo5QKAj2zwEq9km811LjLC8Rjtilf3FIjwx7KVpGzGZRs5XKgtAevlCDQA7cHQy91S3w5F7E2I7m9kR9vfjs1XLzmVum2ZYZtZWT7K+eFWqvCOQrm619v8n9EgynwOwQFN++KVbPwGKQl9nYnQF/2Skn0XZZ8KEywAJH2spsfNSke1VkH6HE5xhxN1tDYh21hU98LQB8AZPeHJ1sO7KZKV5O9Rojypc1B3sam0L+9+m8U6xuVPgo1T3kjqjTGshr7iU8FHWT4A8kenGDxwx2SfQ4r60bSR4CeGeQRPj8upCKbM4YNu2bjKZqoCQAxBQhygaANEOUY2e+EQ7+F9e7k+Ef7OCnEjhO+fsv13W4Xcj+s1ZeAjc7nwrJ0jCjmlLfQwn5mrkkKtpds2c07GClRbZhJsBji0iZR3yh6dF2riLTucMFGbu/KIKbYI1DsKIiwgVSIrwHtcWuqOkUcP9gc83C5cIqSUPTpkhSozB4B8BMHOiuPLkGkUdUmZbp4a4ZKfPpAFKzCBxVAq16ahfoJnogD6XrUdcxtceww7ic3H0bMLjEAwB8DJLUn/ttcxmaDuZOtneZwi7Jy3vTK47OLop6Pv2tyPznCbg66ndw4dgn2nlWciStLzccJ6rpPEV44E4nr3Xczz19OYxA1H9reIVgx7fr7IvSO/Dte4I4xdRvI7sbk81RYJdNXJq01ZMP+bUkgFZyKgAiNhCg3et4cy8I0+BlcqgKetVKRMYiS9XE5setHXvIIeGdwp7Az3KSMTHkArvd4J1RlRoBpylvwX8zj277fKMYXEXy5ht2J0Jvbnw7cp8dcbw7eGWGb5QO60haasIGn1Gm8jghF7czVvuuJNaf6jhqB6bb84o92tKpRvU5cLMYnLB5YChQHaV1D2CYhRAPV2oV809zE4nvlvaS7akcBUZ4NQhSgDAe97habdPudn8pqO+26OeFPb9NoUp4fdqtEuFHd5v6rFAhyjMZwG4X8GnEdJPbxMb1Qw+LRQWOpSmAg/6YjWOlEBUahNd+aDtJglodaVNGmpAldJoKAzKnrbbZc0+5ptPpGvFmzWgxPb+WpAMF3BZRsCAa3/gPk2gDQAYWIQ1Hoq7R9OuRv6qrdaXsx7je72wTB93e/veJd/JmbZ8DmxXaHtjKRWDKKERDkruTqGOeoylHfTPd2ebjaARC2iCXMKWp97nrh+udDebPUXAj597s4iJ+f26AXzt9WYdB3Xklab+9QNUoaPtD+4pYcwTMdKtmuLD/Fm16RGVMvtIyVjk4R6nPtwIQxlgQA6ExvxnULHnrJ6OojdlXZOSrsxkpzq8fupHd1vEMMfkfaGx9r+7m64jfb6mh4GmwB72cg44IbUH+NFnjgxYW05r2seVtizdwOD8K/1UrDTKG9yrHKwTJOd18mMMoAPi2J4jNDGtBHoN+7V74CDhI9B7W5O+2IegI5PqQbrUca3rZ3YQRXIFzK9kFds8QvpzqZ9tXiDKOVAajbHpb+G5ycvvI7dHNxxby2/iP6vidpN2U8vNCmmbwEfDZ+EI24njO8LNvK2AwP7NiNxYmHxY54znbD+BDt5phFW1DtxDohbXjaWRRa1jPEB1sOevfp2sO75D7jTZYE1eAz4VzB1RqzpjE/5nrB4IKoHxBQgcrNoWn+V+beVeGPTPlLyz5JTvvJHo+m0CoZC8Vmk7h30Y8d9w1wQETd6a+8tMubnMJmXU2aUgESkKRzt9TVjf3BivivvZbp9AHTpdVY7YeB253F3fc6ItkWCpesI2wgj7t02kvKbUEDJbv116EuoLc5pMhYQ5IuD0khRJCC1iNFaCfeGFEnaoc1aWrK0ty15YEMsAiW+1Boj/MXQtkcNp77oKTiBaXiMrGIEnNGaKtUYjDFFL+z1bf0YWxrPALuCtYDxUtf6oTvIlwQ2+iPJAG0J2gQv+BCQpR136vbo9nX1vzPrwV2e29/fGszYcZHDC158NfELndYRff9QZg2yX9X9Yv7M8E0dwncdw+A4fcIUBA3NTCEeBTfITWxg5wU+BtUA0HAxKJdtOMFqcvAB/0m98QFc0QscbbEATNP/R92881vYxj/9OzVn2OdqzdGwO9k3DgG24TLcL2ZtUdKvCTZINMl3fobKVGzEC54J9FrtYfFoHc1kA9Vnh8jUI9BYVk2HMBs136OQPhswAaojHUTgNqDpcHHfUhvsIIev3fpipFFGkDWFDtnPtdA6v3I4ZNC2Ge8MyRv3oAh/IoluoUcazy8ZzqUzghwqtJOFKF34YZgcQBVTlHzU61JaTFBPoFoW8CbVF+3fMVXTlFjgpADknrBoncbw9dJvAQATNaANEA4MEXPwE4dg3bCzK8v/FgKEdf/b33/9OAljxOcdub9xtByLIQOAgN/D4BJZTYCQLZAj0aVA50GWAbUclr7Atg+BpdDBmVQoNX9HQwrSHoGl0iEclg+AYtX9hoAeWSACNok8I9HLZsISIDP9cAa+wE92obYUFYH4eA1+BJWaQB70MQAAF0B0D0HWg0MFKDFZCfG0m5I/A0YFOCIhRrR5ZFufyWDRfQQgOUhayZwDtV5xSAjbBPpL4IRsCPXIOYNWg8oCxtjLM8wYAlAJgK89tnH/zYC6gjgN99AA3F34C6rYPwa8nfcANOJxASX16DTEZX2kBvmdCHXBx/MNGwhHSbkgisUFTCBXZ1gNdnAgPYI1H3g/AbdXGAqWBaHGsXuQgPpDUAmDQPZ4NI9mUD7pAa1PZDIQK23luASIKIBjNOnR+ENEKUDfovZB0hWo+AfHwmYC8MJk1tKQM5Ey8SfduAqM8QHwAECuDHwHKBVzQO2OtJVYmEK4vdErgJIuAqR2C8+Ah6zD9oTMfVPtXET0NehggrAHgCcArgmDpBVZrgm4OFQdAe45uc5n9Ry5ZYRIAwbfxynIwwxcGDxfjOUjEhmmN5l0khRKgOYNV5e40uA0QVQGUNnQ7h1K8UXfLg8APQiOmqUw+H0ITdsQL92JDLzKECWcrnUcGTwAjDrjDDZeJyVedvjNNH+5BoUEGB5jiUHm0QSsSHmL8S0Dbi24duaPkR5z+NinLCJ9YU39cIQDC0Kka3NM2K8Q3V0ObDWw4rkn4PATsMJCf3XsNH1TnYL3C8Qwtkna4Ww4vggZS5ek2fAheKoMxCfPWjg1QK7aNwqVG5BnkHQ33Bnkd4yadcO25duZ3knpieE2U+gbHCY3hMYI63nl5UI4DDjAv6EEgphiBS0PmccQVM0qMGAdG1c9ajc8IqCmwz8OvCuuDsMaCGbG0DPMWggkEHD5SQXjp90XBn20savbs2+otw2PjDJ1mL60IFvoVLk+5S5b7g29p1PEKgFhZBSNRo2UZFFnJ7eLGSRV9wTkgggEIzcOQiWhY7j3CUbbsJy80ADECxt5zXGzoieHBiPdDi+W8PvDijbbia8hTV8O48/kd8MF4B+D4QeEQ+KUiD4Aog0FvCPlHs1XD4IzbkQitw4yJR5SIojwp8ODJC0D9sQTGyK9yg+yMeQ/IwEE+FDub4VxIWIwLw1MznLn2fCwvLyNPtshSIS1R0RNGUdJLAnaSr04IMuFNNbiO8BvF2AI13FIatAxDlpVqPVFIQpudwy60uUMM3As/4amADocRO/m4tH+LFVcccQ3ClMjsvEgFm8sQI8NoBK3coCW8co2OR35aocfjrhnI1iL7DSojjz7CuPI7wi853HpEF5hyDDShFpgbNzsFGeBwUpR8Iw1Uxl09HoEBsjlN+xOVcgNYXYF77KiD2FMEBKMm8GACj0ysigpC3KMqPOyMbDsot/VyiQor4UOi9+Y6KKj2fHo1KA7rUP3aCJjZ3CoE7FR6LAgXouITeiy/D6NEYC0b6NQ92AX6JoUYaTlBBtcFIGOzDQCaDAldHScGJWjpzHwEQsF9JczQB9rFz12jUY/aIxix+LGNPATo4qOrMKgO60D8mrE7yd1pBUmGcchlKlU5U2XJgSogP7UyB3c1Qv9mrs7TY1Gx9ghMK2MFCyeHym42QmwT5DLMVETsEk8I0I5o/HBSHfkaYpwWSEXBS12yDxzc9yI8KgRF0D9YXCEHKBygINxdD8bPaLyiSlWWJ+FsY70NOiA/c6N3tEXJqwyENYYlVyFfpQoW0QhlUoRCwKhMQyIg+rTzjqELxQKF5pWwNoVMQYBJYDxNiaboSCs5QD6GqlTJZjE/AvMB80Hg/IF8zEU3VKyS5UpQAJHLB81QGyajpJZblyBg8AnF/xR8SSB8ABY9uB5MuDIIBFE8QWgBd8kYjCSx91RHCT2g8JSOwNEjRXCU4lLRNEGtFuJXiWFt9LXGI4BeAsqJfimrSIAAoUgGaFTE+ZOXCjFoEGMTjFRIHQDFAUMPcGpR7JEyVnFF0ecUXFsxdeIxA2HYU2XNb3aOPytD4tUWwlNRU+JDICJQ0W9Ir480Rvi74+W0fiqrdOKvNX4i6ITcDvIQMuhfwesSZBGxPaBbEYIP6B/j7nRADlwwE5QAgSJxByRnF4xKBOnFTEFyQFBlxSGO5MzzZQwYBSgG0BXNtuDBLmhMJCWnmgT47UTwTI5ZFmIlSJVhPKAKJKiRolEgOiQYkmJFiTYkOJYhPvihbfiQoTFYxOxkcg/cLy0xhuAfxXVoPYyWnFEPH+MESxEpcX+jQbVYS5iK0K7mTwsfeQCjCcOF5DWBXMUcB/g6wG4FiQENf8RzkQLJPBugPgEaGCQiOPATEB14rg0VJ4zTKwYAbQEUwPiVEo+OwS5w3BN1FtEoiRIkyJAxMolqJWiXolGJZiVYl2Ja+JsSFbJ+J29yo79zoSvI3Uwu8QpCNS+k3cNAQ/o0pERJc0zJAJLhpV/HpB+dL2RtHWA6QHVjPBAZUXUVopEifTQs1nQqUKCykqn2USDwVROPicEzRLqSSUQiV0SmkwxNaSTE9pPMSukqxK4kyEuxKusCQrgzuso4pmxikpVD4ASl6YVlUmTzQiKkRgcpfKRyk0QcsnsBnSCgWg8dk4GWVUgZOgDlBW6NnEIMwfQVm5UGZaZXDCOZIiHeJxSNRwQgCgL2lApWTcHnVCQUQYM38otUeGSQvoXcDmgMk/iOBVlAQ+F55DiEam0h0qOTSdh9klGxtB4zBfWFMByJ/33jMov5EwSsJdROuSYQLRLuSdExpP0Snk4xLABTEjpIsTuk6xK+SXRexOfjGrJ8JrNK3Jq0qlu4yAFqlaye82CQZJAGNUgIgSkGZMqUUGSM1g2aWQ9VGOYoGwDGzE6AMxMqMmhakyYH4D0k9k2ELLdJvJM09s3/bEDxB4XWOIbCFUtRI1Eakm5Pwl6kh5M1SWk7VN1S3kyxJ6SjU/pKADo4v0Lfjo44ZOuiHU+aD4ww01s2mSqUWZOSCr8SPzNltmdiyhSCgaADyloAG0GRhk6DFK9TExddBtVCGSEl+iiUu7nwp6YYdBaxpIHFnZSWCHr1+MLiaZO5YJ6LYJaMf5CWRgVe4r8ApddORxkQSdrHLwhBp9Co3zlzk1UUVSM0sEFqTs0tVIaS9E5sWaSjEtpLMTOk4tMNSeJWxONSfk+NxrMqfGRzhcmrNFCDELHd1Lg8OLesClA2nUbSOlkaJT2vRLpGSAgBnIVyGgAcWDyFkBN0K4m08sMziHcgvIDsCCZiYblOx91SGQXhxhIQlIgiz1HdPoU99AE0oB9VPBFFSbjNKKUBcQP2yFiygwOzTSrkzNJVTbkvlHuSNU99K1Sv0vVPeSS0/9L6STUgZJrMIQc83NTEQiqOuinpOBxH9qtXKHekSAT6S7SUpZbgBkI0kdI9TI06kJ1AMpNfx4R4IRaQnRl0y6FyilcfKAHhcwiiHwEHMUDAJEIcEIOZR+EB7nxE4WJPCUAEZWRFehCBX6K0Im0qp3XiTwyoCojCQCoFhdb0y5OqTH0rNPPj1Ut9KhByJfNNkyi0g1M+TFM8hKAzb9TEE58aE/gMJ0mreGURkH4XkEIFqURNjPBWTD80xk0EEHzYJIZbAV9Y5INkG3oO00lKwhGM6l0O4XmGB0uxjHNsnclWQadO/0pZWZndjVsCvQ/DKMpyK4zpze4zRA94/EEFNfXHaIqSLkqpKVTRMs+IIk8sx5KKyXk79P1SPkxIFLTlMoAKQt8Y81MRdnEryJ0EqISmX8D6Ad1KJkMTBFM/N1JPOQLkAlTbVmiBvD2KXxRslWX2JLfeVlg5EvXYB1Bd4d1Lv81ZPxW1kekPWWtxBuVIEehgHLcDAAywLqBkhicw8G/DmTOUBGg3M1KG2YokWcOTAGc3BwiSOEJOVRQ9qbKFygIAfKDddo0kOMm9WgjC3YjZ7Bey2sMs87IfTcJVVIkybsvNM/T7suTN/Sysh+O+T7wxF3Is+A7bk8jroq2WKw3cN6ywBl8fqhZgx0p/Gadc/DLUUBQ5KQjF9G0WRRAJDwA2V3A2M/UTyj45S203SwyTY0xlOc5gnXi+TfXIJAcQDEHhd8rD+Vkxd0toyvlZ1e8PRsZHdTPC9SBFmLuiqBCBU0BQIT8BgVVqGmh6BC8xowqgkFYyH6B4FfbmB5kFGBQU8GCARWfBUfYkwJoiKXrJWlpicaSvoBQGmGIUQ8pcyysqfPL2UMMQaPJxZN9P43Pl48qpUgV8Q4DMxBdct+KQtBAryPTz9bDoBJjr0DQPNc3ODjOxgTWKlGpzk8OdFHiQidYIlgToXOFZUX7BvJTwRcZAVWSk9ff2IjGOMk2Jh14322hAkE4UwSpSgesJK8Y80+RYzWjT3OnzNAWfKqz8XT7OPtAw7UzH1V82wkzzQCFGWFkt8thW9Bd8lmEPzj8nmnWDuSOBTywewUckzAgWdTFqBiSa/MJohFe/MlVfnRtCRpn8m/Nfp1489BXM2PCEDksbQR41HyvocfLjyQCxPMoSBA793bVwAiCC3UZIJvRRwplZbIpSgEJFWtU7JOf29VtFWwx/0LXEw1Won+QsjJitgh6PXiBAHa0QtSkgQExBK3bgr6hw3V93ycY3AQocSGrHsP9Ca08P28iqnI/NghZyDm3VkJlOAyJT+vN2XmVnARZSfAhlWL3pkA8J00pyGUYKhtUplRjKqgDxeaCB8+wHbPbgcrEgB24kLJMy2i0Qcwpbo3fIIisKsXGwuqVwCk5wcK348oyatdDHglaV9BbgBpZVWMHRBkzfSaGzlxSRUgZRgjAmGwCRNXfAGVOFAXhmgOYjYAuU31ZFCRBv6e+iisNAG5TuUcwB5SeUd4aW3eVP6IxU7JOICGOFysvac1EBA/R4ydDygf10EyGw4dUAjPfBjwOdG5WwufiuI81JrcyQ1GFWloNeQpRUpiWhVCKoVKHntp/c6YgCM8VYwltysZC4i9ZW/fDD40uUYVTQiRUrYqtDMQCoETS0opNNoBSgXIuW9Q7c4vAjY7a4pUyajf5INznCyLw/1jDACxDIALeFl3VpiPlVLkPtUNXrVt6GmCLc6ZT4r+LFffRHyhnUYVViFSVLYPJV9CjQwxBCQAQB8AELSoHWckY04uYCx1RnwuLLKbEqADlDf5I+z2gm0k8c1XPlAKAALXWO3IySmlWfJWlPlVNiaS7jW6j/DBko+LRvLGSFVCUaoWtxD0VSJHJ14kcCCBSjJMyWdKgM8LlSJSjEIxLrCiCNAK/fAkLUyZHSPIeLVSnVUB9SkQMxkgA0boq5R6VFgGIADQZtDEwmVLDAgg3LNlXtKUDXsTEBRCF4tB9pRY0oOlAnZmCVxGeYVQ1ReSlIp8Aa3d0sv18QHgxHzxSsfMsLpSzEqFQ5SgkKqB1M/0Li4c44EDzin2E1QjTK4F4BudBfY9WboEBZFR+ZqdGhkc4GAM1W0AOFejJNkgKVmnFUQ1IsqhKoeGIM7B9EZZEGk7VdeKTN3wNG3FSk0yo1RLWyvZw4pZSkorZ8VM+vg+z/QpNP7LMhX7zZodOUHX+w6xbl1o4uE6coUKk4WHnnLhyxct2RlyjjNERvM3FM3LCygDUBy4gpfBphz8ifEEJ6QQVQejpnBgSRA4kRSnXiduEUuSz2DfwAyjA7L0pF5x1e0q7NOy4DPKLaszItDLbLHdU+9FFN8gPVVqc0vyBDWRAO6s2dP2DrZFESlAkCwyNtOZhBuU+A0VQmN1Ngr2nfwwwA6EdQECMkfa/weAbwWpwOZv0IGRoRfmINnIApoJ+BO0kkhQFNIn8cnSx1wffq3lYFEILWG0KYK/y5pSAU3k85kVbsBFJ5QiIFEUzwVbXlo8kAmFkKokHGTnZmQmtBBo1aJOQcFCWbcHh0+AboO0QcjG4KaRMM1pDoKy9epSS5momvUGz69Y5DLsvwJdRb0ainPXb1JkTvR0BC9BPR6lcAduDyBEAduBDShQWgDyEyzC5Hj1MMpM1Scay6tN9dasVg04KEzeF0J0fXHgKp8DCnwGf87QxFzaqi9aqtqrQSBqplFxuVpEqrMM5sHbgOXG43ZKWq3tjaqhaf4T+QkAWwA8gnougHJxq4KwCsk6AUfUZRewGUAOqkASIEXg8ge6hurXwO6oOqVRBf20RRUEFQYMQiU8g8A0xS8x/Z/hOoGRiH3b0vp8qvNtyKK/So5w1owauoEgA/kAgHa40UNMgkobq6OPurka5Gr+QfATGpwxDDPtwIgKYQ/S4ArCPGpoMka1GpbL8iiqGor2Ar3FoqHym6v2q8a8GrRqxQDGp+AsargC/cka8GsJq+a4msGBSa76qDwbq6Rmpr/hGmvBqOcGwDKrcAdNGyAaAHFHcBcALwDer1efxAOrPYbYFoATqsCFsAdam4D1rwawVxsBOIPtyZBxrRABTkgZG6oWwLalGqtrOITWq8BHaz8GdqOIV2vlS8ga2owA3QRal6h0Ib2umAzaj6vBrskugAehtoRADtqbqv5AAAdDADTqU63AEzrs6rOtzrgAWOuarMkvQAzrc6nOpzqLASwDMA9oLgERQJSJmH+h8tEGBDhTFMOGhhYYRywRgkYfanzh0YNsjpFcYe5BvAo4bbTPB9ZGaE7QL4TsBBwhKRmH/IWYaJgQguYAhRjEh8DQAzr060us3rM64FE9qSAdetrrZ6v6DNDTEUOEhg26wYk7r4gIdOJNe67ehxh1oQetpgSYU2DHrz4GdG7qMIGet+hVjP9gwYl60HRXqoLJ2HXrgUEOund0IdesABeDcAAAvdnkAQAzF5APvLOvTqMASBsABpncgAJ4G7H3rggOuv/Jj6lHFPqoYGGAvr9tLutcoYrPuvvq8YPxCHrn6zlFfqJ69+tcpP6mNnrr56r0j/ruYXmFIxV69esABuOnXrAAHg3AAev3KkbMFDBga6uHXqSkMyrihPeBICRYwADGp2ASyYM1+tyWA/OjRwKT2WPromJX24b1QXhqAb9qUuzc1FUNepQbnGPUKHD6IV1NtoUcCLOuAlId+jLl8ADgBLrAAIgJM69NFldLcugE8YLYoYUQAvGzOpxRz0Z8AjJyckgFPB2gDBl4TTyeuvMadUUJpVq/GmaF4UiG6GGJJfYf2DvQ+ABCFIbcAWcmGsCceH3XrrGvwBWNH4Q2qfpswDxo3rvG3AGjZn3NpCybu6jSWBFVYI2TzjpJTOFSaGgA2jaQimkFGxhAI0xCiy7uF+GjgQmxpszrRUe4HJIcoRsgfglAdWHwBZAZAUbRFG8YHQRgcVzV9ZP4CyH7j/4TAEAQr/ZBTAQIEaoAEaoGwAEKdypAYR9IukN9B169WMCbD60AkSCT6lurPqOm+MtDBkm8UhyarTBjgtj4fTBAqa11BQFqa7uA2AabM6ppsFpo4F+n8t9MsxB+IdYPWFdVl48NniAkWShuLgCIWQFSa8tKeA7QbY+eBNIzSINUobhcVJuil3gQ0iiCOQeYn1EQyHoGmA/mwpo7r9tCFvXq8GVKBWSAagMG8AGWoX2hyFQj2iBbj8YkimKJAUlu+aUcAFtQDO4CgA8BUm4b20iMELBHPRoHTBAIQiEbRpnB6WlBsEaUGyBsAAznesAgsw+HsQlIVJoAABYctmA0AUfhobZMO7hCQ3mRSEPJwCG7kFAn4G5rmbcAZ1qmBXW91umw/EA5o/hZEE5pAgzmtzHYBg2xFszqw2mYCoBI2x5DLyZwXlROgxIacDUQDEVnIMRnAX4BTbcAJpvTaI2xYA9bT5aJC/RfHCdi1J5QiQG2B2qCVu6hMAZSR0QnWl1szba26bDiQX8L1RMxfQdQDagR4pEBm4HKjznhATA30Araq2/trdbB2x5BoBd6NJHkAZEWOiGhDwJ7SNkTYEePfgkwSKlSajxUmC8Rpge+C4ASkTFvKQh4VkhqQ6kCgFuaLWjBtdNyaFyy8A06jTR/YQUAlulpv2ZP3WANS6toHaB6x5C9avEEgDJLhCder/ba2rzhLQdmgoCFo06uoAIQNaDDuRq2ULgBTq/ke0oI6ZQHDrqAQhfDr+R2gToG6A+gCMjZaSoBYBBAegCQHKBiO0joWsdcAZBHF9aeVo0B80niQaBoAZ0UWL4gZYpI6GQOoBHgKOujoDhKATlvhBOWs+oI6cOyWjTqLOeDpQa0681rTrIGwABBds2kSbpYZAB7E16MNAGaUM0PBMbiSf+p4bkwP3HM7TYKPCsAUWEFrTA7TVJryabVVHVDCMAKqR2BNtUHWwAb6XJtk7SCbICWB5AcUFkBKAGRteB1jSkDu5nAebiYhUm6BDBw1BHVqfsoFQuCNaSEFwFJaG402H47IgQTuE7nlV5V5wE23zr3cGW9fPYU/TXuupaQ8YkguJSHZoHXqcwaOFBEgEG3Q1hHUz5ogIkESXxFxF0EIi8YHg2fFkRIWs1uEbAACv3nqBHKThh9fwFmbU23AFrrfZAQFHd+rKLsbyPYEPDc1z7GLpDbYEF1VKaAGBSqjUIGkNvIhTZWsnmZEkqhFO168JVougsm9esuqhWdyrKxt0HggRbK2zOva1KEf5jSDF6A5lJaNEfwC0QzwToImhbCWcFXil3GfFSb2tHkNURD4Q9teKiAN9p07AAKZ2FurxEpBYgK1UehpGkNo8h9QSjVt0oAEDtKw6QIQAQg8wx0kTYUgc9rJoRa9MhtSoAVVEdRCTBjlS7FKwI2klT+FuMmEXweBvWBUmqwEoAR26VRSBFQfGWQa1u+GWcaedMEolovVcegV6yerTqgbAAcl37hX4DCh6aZGQvENk4HCl6ZemhTxUuAcYEDZk2BNvth6QPZu1g1gFxCuoqIEPh+ASWkNvGAG22QBrrh6jFoZVHtDAJahDERbVSa3QSaVeZqCLgAHkCgQtGxxQWhTjtMl2wHtggKYf7qRakZWHojCUexJPR696kNuoxkFb7FlMIezRAmd9gnHtQbAANZ3IAPt2DFuEBlqJwh5NdM06Ae3AEGb+Edq2kAUesvT+VdgU2yUBUm6sFPBdiEfsYJJIKkBDYX6FOhTaMAbTowAhGwAHx9uWBlkUEVJpzBYmgEXTQXgB3oDoxQwHk9kte83BAhUEJ+GmaBQWvsgbAAUx2T8VgAJz5AFpouVUm06l7I42LGSkRtEd/pqaHeiepPJYIa6CwBGquyTbzru3XotbAAdF3kZB22epHoT6HXqyWmKsIbfm4hvbr4YMhqvr9qGVqxgH8tpAXq+AIfAAB+XaCp9a+wAFByGJiBkIpP/pmYkCstuRToil+sQGAc8XuqbvO+gb/B5KlEHisWii+AAoXif81QAqmptm4GTg/bvyAN88JjHdi5UXptUOesqWI0JB3gbXIyAa+icha9PZlMQ+QOIJb7O+sus3rgAHoALraqtgb0Aj9A6q1oI6jzAprIAHvSRqOazmr+R8odjGTqwGpaiogI6qwc5qUahbPsGXa3GpcHaKM5qIhk6iOvsA4QX63oAoAV0yVrTkYpuQAEAJYjGTm9e2R+hswPZOCG8av5EHhk63np7bfBlwbahweMUAjr3BrgHlT3QLwfQhRsampyHQavwdcHtmSoZRrd67Sp9rGh8GoCHfa26G6GUa0IdnrfQZOtWZyMTIG6VnAXRq9FjuZPE2SsATIkCAyiF7sbqfmiIA/qzYsFrZQPcnTU9krcqA2TxbAICyyA8u8WGGQmYKgwGGB9WkLyRwhrgF86dgK4fyGqhwoYphih3IeBJ0HdYCjrXa3IdKG+PDwAqHCUZOvGGRTJGvlrka5wdyG3B4EaqHDCdKXjr4g/KHeH8a3oa4AghoWsGHkSMIbqGqh1ZmKBj/fWkJr/O8Jk3bIKaNtp7kBdSUyTnoKEC4BzutQdE1EguUHssRm6bMPBeYpOGJI2u6a1nhFApruXgk8RmXp9TEBXHjJBZS4cxHrhytFuHcR4eG2Bu4KUeeGUa14e0QUR8Gs+HWrEGverfh/Gv+GdCIEbYBk6gusRHpAYno2hEAauHqHkaiEbqAoR/GphGjRqob2Cwk+1scRqik4k6HI6q4bRGVufoalGhh7hGTrBaDxNrUvlE6D2HrgK7H/RlhkJIZHISe4doyuvRbocy8iKOU9ynUjkbRak4ROJXTm+sbKW41gQLUg0DZSUeaGVfO4flHHhpUaKgCh5wCKGrhzUZIofhq4f1Hyh1odhGUagOEiAfAN0fvRHGc0f1orR8EcaH7RhWo7GnRlGolrsfX6p5TykqUd9GdRq4cDHKxv5GnHUWv6qh5SgPEA0ABSgAFJsFCElAYHAZZr4h2AU9Vp7KBeRFOAHe1ABktdxjED3GyxlwYrG5Rv5FVrlFL6vtqbvF8CJqLaLyos7J0ISDbw0gRAEvVmnE0n4Q24z2GTZnx3IeVG/kVUaIB1Rrsc9AyhwEYnGQa+VLmhJaw/XBH/hG4OCG/kLWlsBPBsOpGGqhoUuUMVzeMzKSkE7bgmr5zEgAdBksveOxBHQm0FhdmJ/bNhd4zGoyFjPbCoCn08vV0ti4KjPeJyhp9YoeIn5sWwF3rk6y9KKCrI7ccJ0GANg37CfAT219dSgfwE9tasVQHbV+wwoNKAEXS/XkSsrU+Axs6w+F04mIQNAGSy0LEfIMBJaZKqgB1qzaunNtqlatj12qqABT0FUQWA7h3Jac3kM9qmSfuBN0GdFiBcAcRLOrUPdQFFRzmUfQxAXJ3yfaR8AAKcLQdqmgAqF9EfQCAA -->\n\n<!-- internal state end -->"},"request":{"retryCount":3,"signal":{},"retries":3,"retryAfter":16}}}

@rafaelscosta
rafaelscosta dismissed coderabbitai[bot]’s stale review May 8, 2026 21:20

Addressed CodeRabbit findings in commit 2e4447b and revalidated CI successfully.

@rafaelscosta
rafaelscosta merged commit a2a34ee into main May 8, 2026
39 of 40 checks passed
@rafaelscosta
rafaelscosta deleted the feat/epic-184-kimi-provider-20260508 branch May 8, 2026 21:20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area: core Core framework (.aios-core/core/) area: docs Documentation (docs/) type: test Test coverage and quality

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add native support for Kimi K2.5 (Moonshot AI) as a model provider in aios-core, allowing it to be used as an alternative to OpenAI or Anthropic Claude.

1 participant