Skip to content

Commit 0ca911a

Browse files
committed
Ad Kimi K2 Support 2.5
1 parent ec674b2 commit 0ca911a

9 files changed

Lines changed: 31 additions & 14 deletions

File tree

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,11 @@ All notable changes to SuperQode will be documented in this file.
55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
66
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

8+
## [0.1.7] - 2026-01-30
9+
- Add Kimi K2.5 Free model to OpenCode ACP/BYOK lists and mappings.
10+
- Set OpenCode ACP session model when selected (avoid default fallback).
11+
- Remove hardcoded model query interception so the agent answers directly.
12+
813
## [0.1.5] - 2026-01-28
914
- Expand QE role job descriptions for power roles (unit, integration, api, ui, accessibility, security, usability).
1015
- Highlight power roles in TUI role listing and selection with customization tips.

install/superqode.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
class Superqode < Formula
22
desc "Super Quality Engineering for Agentic Coding Teams"
33
homepage "https://super-agentic.ai"
4-
version "0.1.5"
4+
version "0.1.7"
55

66
if OS.mac?
77
url "https://github.com/SuperagenticAI/superqode/releases/download/v0.1.5/superqode-0.1.5-macos-arm64.tar.gz"

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[project]
22
name = "superqode"
3-
version = "0.1.6"
3+
version = "0.1.7"
44
description = "SuperQode: Super Quality Engineering for Agentic Coding Teams"
55
readme = "README.md"
66
requires-python = ">=3.12"

src/superqode/acp_discovery.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -675,6 +675,7 @@ async def _get_models(self, agent: DiscoveredAgent) -> List[AgentModel]:
675675
AgentModel(id="claude-3-5-sonnet", name="Claude 3.5 Sonnet", is_free=True),
676676
AgentModel(id="gpt-4o", name="GPT-4o", is_free=True),
677677
AgentModel(id="gemini-2.5-pro", name="Gemini 2.5 Pro", is_free=True),
678+
AgentModel(id="kimi-k2.5-free", name="Kimi K2.5 (Free)", is_free=True),
678679
],
679680
# Stakpak
680681
"stakpak": [

src/superqode/agents/messaging.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,14 @@ def map_model_to_opencode(model_name: str) -> str:
1515
model_mapping = {
1616
"glm-4.7": "glm-4.7-free",
1717
"grok-code": "grok-code",
18+
"kimi-k2.5": "kimi-k2.5-free",
1819
"gpt-5-nano": "gpt-5-nano",
1920
"big-pickle": "big-pickle",
2021
"minimax-m2.1": "minimax-m2.1-free",
2122
# Strip provider prefix if present
2223
"opencode/glm-4.7-free": "glm-4.7-free",
2324
"opencode/grok-code": "grok-code",
25+
"opencode/kimi-k2.5-free": "kimi-k2.5-free",
2426
"opencode/gpt-5-nano": "gpt-5-nano",
2527
"opencode/big-pickle": "big-pickle",
2628
"opencode/minimax-m2.1-free": "minimax-m2.1-free",

src/superqode/app_main.py

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -648,6 +648,7 @@ def _get_opencode_models(self) -> List[Dict]:
648648
return [
649649
{"id": "glm-4.7-free", "name": "GLM-4.7 (Free)", "context": 8192},
650650
{"id": "grok-code", "name": "Grok Code", "context": 4096},
651+
{"id": "kimi-k2.5-free", "name": "Kimi K2.5 (Free)", "context": 8192},
651652
{"id": "gpt-5-nano", "name": "GPT-5 Nano", "context": 4096},
652653
{"id": "minimax-m2.1-free", "name": "MiniMax M2.1 (Free)", "context": 4096},
653654
{"id": "big-pickle", "name": "Big Pickle", "context": 2048},
@@ -823,6 +824,13 @@ def _get_openhands_models(self) -> List[Dict]:
823824
"recommended": True,
824825
"desc": "xAI - Fast coding model",
825826
},
827+
{
828+
"id": "opencode/kimi-k2.5-free",
829+
"name": "Kimi K2.5",
830+
"free": True,
831+
"recommended": True,
832+
"desc": "Moonshot AI - K2.5 free tier",
833+
},
826834
{
827835
"id": "opencode/minimax-m2.1-free",
828836
"name": "MiniMax M2.1",
@@ -3999,12 +4007,6 @@ def _handle_message(self, text: str, log: ConversationLog):
39994007
if self._handle_byok_model_selection(text, log):
40004008
return
40014009

4002-
# Check if user is asking about the model - intercept and answer directly
4003-
if self._is_model_query(text):
4004-
log.add_user(text)
4005-
self._answer_model_query(log)
4006-
return
4007-
40084010
# Parse @file references and include file content
40094011
file_context = ""
40104012
if "@" in text:
@@ -5208,9 +5210,12 @@ async def run_prompt() -> tuple[str | None, dict]:
52085210
if getattr(client, "_process", None) is not None:
52095211
self._agent_process = client._process # type: ignore[attr-defined]
52105212

5211-
# Set model for agents that support it
5212-
if model and agent_type in ("codex", "openhands"):
5213-
await client.set_model(model)
5213+
# Set model for agents that support ACP model selection
5214+
if model and agent_type in ("codex", "openhands", "opencode"):
5215+
model_id = model
5216+
if agent_type == "opencode" and not model_id.startswith("opencode/"):
5217+
model_id = f"opencode/{model_id}"
5218+
await client.set_model(model_id)
52145219

52155220
prompt_task = asyncio.create_task(client.send_prompt(message))
52165221

@@ -10075,6 +10080,8 @@ def _send_to_role(self, text: str, mode: str, role: str, log: ConversationLog):
1007510080
"glm-4.7": "glm-4.7-free",
1007610081
"glm-4.7-free": "glm-4.7-free",
1007710082
"grok-code": "grok-code",
10083+
"kimi-k2.5": "kimi-k2.5-free",
10084+
"kimi-k2.5-free": "kimi-k2.5-free",
1007810085
"minimax-m2.1": "minimax-m2.1-free",
1007910086
"minimax-m2.1-free": "minimax-m2.1-free",
1008010087
"gpt-5-nano": "gpt-5-nano",

src/superqode/main.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -863,8 +863,8 @@ def init_command(force):
863863
Ensure security, monitoring, and deployment best practices.
864864
865865
# =============================================================================
866-
# Available free models: glm-4.7-free, grok-code, gpt-5-nano,
867-
# minimax-m2.1-free, big-pickle
866+
# Available free models: glm-4.7-free, grok-code, kimi-k2.5-free,
867+
# gpt-5-nano, minimax-m2.1-free, big-pickle
868868
# =============================================================================
869869
"""
870870

src/superqode/providers/registry.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -433,13 +433,15 @@ class ProviderDef:
433433
example_models=[
434434
"glm-4.7-free",
435435
"grok-code",
436+
"kimi-k2.5-free",
436437
"gpt-5-nano",
437438
"minimax-m2.1-free",
438439
"big-pickle",
439440
],
440441
free_models=[
441442
"glm-4.7-free",
442443
"grok-code",
444+
"kimi-k2.5-free",
443445
"gpt-5-nano",
444446
"minimax-m2.1-free",
445447
"big-pickle",

uv.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)