aru-code 0.2.0__tar.gz → 0.4.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {aru_code-0.2.0 → aru_code-0.4.0}/PKG-INFO +14 -10
- {aru_code-0.2.0 → aru_code-0.4.0}/README.md +9 -8
- aru_code-0.4.0/aru/__init__.py +1 -0
- {aru_code-0.2.0 → aru_code-0.4.0}/aru/cli.py +11 -11
- {aru_code-0.2.0 → aru_code-0.4.0}/aru/config.py +10 -5
- {aru_code-0.2.0 → aru_code-0.4.0}/aru/providers.py +5 -4
- {aru_code-0.2.0 → aru_code-0.4.0}/aru/tools/ast_tools.py +2 -0
- {aru_code-0.2.0 → aru_code-0.4.0}/aru/tools/gitignore.py +2 -0
- {aru_code-0.2.0 → aru_code-0.4.0}/aru/tools/mcp_client.py +2 -0
- {aru_code-0.2.0 → aru_code-0.4.0}/aru/tools/tasklist.py +2 -0
- {aru_code-0.2.0 → aru_code-0.4.0}/aru_code.egg-info/PKG-INFO +14 -10
- {aru_code-0.2.0 → aru_code-0.4.0}/aru_code.egg-info/requires.txt +1 -0
- {aru_code-0.2.0 → aru_code-0.4.0}/pyproject.toml +83 -80
- aru_code-0.2.0/aru/__init__.py +0 -1
- {aru_code-0.2.0 → aru_code-0.4.0}/LICENSE +0 -0
- {aru_code-0.2.0 → aru_code-0.4.0}/aru/agents/__init__.py +0 -0
- {aru_code-0.2.0 → aru_code-0.4.0}/aru/agents/base.py +0 -0
- {aru_code-0.2.0 → aru_code-0.4.0}/aru/agents/executor.py +0 -0
- {aru_code-0.2.0 → aru_code-0.4.0}/aru/agents/planner.py +0 -0
- {aru_code-0.2.0 → aru_code-0.4.0}/aru/context.py +0 -0
- {aru_code-0.2.0 → aru_code-0.4.0}/aru/tools/__init__.py +0 -0
- {aru_code-0.2.0 → aru_code-0.4.0}/aru/tools/codebase.py +0 -0
- {aru_code-0.2.0 → aru_code-0.4.0}/aru/tools/ranker.py +0 -0
- {aru_code-0.2.0 → aru_code-0.4.0}/aru_code.egg-info/SOURCES.txt +0 -0
- {aru_code-0.2.0 → aru_code-0.4.0}/aru_code.egg-info/dependency_links.txt +0 -0
- {aru_code-0.2.0 → aru_code-0.4.0}/aru_code.egg-info/entry_points.txt +0 -0
- {aru_code-0.2.0 → aru_code-0.4.0}/aru_code.egg-info/top_level.txt +0 -0
- {aru_code-0.2.0 → aru_code-0.4.0}/setup.cfg +0 -0
- {aru_code-0.2.0 → aru_code-0.4.0}/tests/test_agents_base.py +0 -0
- {aru_code-0.2.0 → aru_code-0.4.0}/tests/test_ast_tools.py +0 -0
- {aru_code-0.2.0 → aru_code-0.4.0}/tests/test_cli.py +0 -0
- {aru_code-0.2.0 → aru_code-0.4.0}/tests/test_cli_advanced.py +0 -0
- {aru_code-0.2.0 → aru_code-0.4.0}/tests/test_cli_base.py +0 -0
- {aru_code-0.2.0 → aru_code-0.4.0}/tests/test_cli_completers.py +0 -0
- {aru_code-0.2.0 → aru_code-0.4.0}/tests/test_cli_new.py +0 -0
- {aru_code-0.2.0 → aru_code-0.4.0}/tests/test_cli_run_cli.py +0 -0
- {aru_code-0.2.0 → aru_code-0.4.0}/tests/test_cli_session.py +0 -0
- {aru_code-0.2.0 → aru_code-0.4.0}/tests/test_cli_shell.py +0 -0
- {aru_code-0.2.0 → aru_code-0.4.0}/tests/test_codebase.py +0 -0
- {aru_code-0.2.0 → aru_code-0.4.0}/tests/test_config.py +0 -0
- {aru_code-0.2.0 → aru_code-0.4.0}/tests/test_context.py +0 -0
- {aru_code-0.2.0 → aru_code-0.4.0}/tests/test_executor.py +0 -0
- {aru_code-0.2.0 → aru_code-0.4.0}/tests/test_gitignore.py +0 -0
- {aru_code-0.2.0 → aru_code-0.4.0}/tests/test_main.py +0 -0
- {aru_code-0.2.0 → aru_code-0.4.0}/tests/test_mcp_client.py +0 -0
- {aru_code-0.2.0 → aru_code-0.4.0}/tests/test_planner.py +0 -0
- {aru_code-0.2.0 → aru_code-0.4.0}/tests/test_providers.py +0 -0
- {aru_code-0.2.0 → aru_code-0.4.0}/tests/test_ranker.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: aru-code
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.4.0
|
|
4
4
|
Summary: A Claude Code clone built with Agno agents
|
|
5
5
|
Author-email: Estevao <estevaofon@gmail.com>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -11,9 +11,11 @@ Keywords: ai,coding-assistant,claude,cli,agents
|
|
|
11
11
|
Classifier: Development Status :: 3 - Alpha
|
|
12
12
|
Classifier: Environment :: Console
|
|
13
13
|
Classifier: Intended Audience :: Developers
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
14
16
|
Classifier: Programming Language :: Python :: 3.13
|
|
15
17
|
Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
|
|
16
|
-
Requires-Python: >=3.
|
|
18
|
+
Requires-Python: >=3.11
|
|
17
19
|
Description-Content-Type: text/markdown
|
|
18
20
|
License-File: LICENSE
|
|
19
21
|
Requires-Dist: agno<3,>=2.5.10
|
|
@@ -27,6 +29,7 @@ Requires-Dist: tree-sitter>=0.23
|
|
|
27
29
|
Requires-Dist: tree-sitter-python>=0.23
|
|
28
30
|
Requires-Dist: mcp>=1.0
|
|
29
31
|
Requires-Dist: openai>=2.29.0
|
|
32
|
+
Requires-Dist: pytest-asyncio>=1.3.0
|
|
30
33
|
Provides-Extra: dev
|
|
31
34
|
Requires-Dist: pytest>=8.0; extra == "dev"
|
|
32
35
|
Requires-Dist: pytest-asyncio>=0.23; extra == "dev"
|
|
@@ -45,10 +48,8 @@ Dynamic: license-file
|
|
|
45
48
|
# aru
|
|
46
49
|
|
|
47
50
|
An intelligent coding assistant for the terminal, powered by LLMs and [Agno](https://github.com/agno-agi/agno) agents.
|
|
48
|
-
</br></br>
|
|
49
|
-
<img width="600" alt="image" src="https://github.com/user-attachments/assets/36001faa-3163-4374-84fd-da8704a4ed9d" />
|
|
50
|
-
|
|
51
51
|
|
|
52
|
+

|
|
52
53
|
|
|
53
54
|
## Highlights
|
|
54
55
|
|
|
@@ -142,6 +143,7 @@ By default, aru uses **Claude Sonnet 4.6** (Anthropic). You can switch to any su
|
|
|
142
143
|
| **OpenAI** | `/model openai/gpt-4o` | `OPENAI_API_KEY` | `pip install "aru-code[openai]"` |
|
|
143
144
|
| **Groq** | `/model groq/llama-3.3-70b-versatile` | `GROQ_API_KEY` | `pip install "aru-code[groq]"` |
|
|
144
145
|
| **OpenRouter** | `/model openrouter/deepseek/deepseek-chat-v3-0324` | `OPENROUTER_API_KEY` | `pip install "aru-code[openai]"` |
|
|
146
|
+
| **MiniMax** | `/model openrouter/minimax/minimax-m2.7` | `OPENROUTER_API_KEY` | `pip install "aru-code[openai]"` |
|
|
145
147
|
|
|
146
148
|
To install all providers at once:
|
|
147
149
|
|
|
@@ -167,9 +169,10 @@ You can set the default provider/model in `aru.json` so you don't need to switch
|
|
|
167
169
|
|
|
168
170
|
```json
|
|
169
171
|
{
|
|
170
|
-
"
|
|
171
|
-
|
|
172
|
+
"default_model": "openrouter/minimax/minimax-m2.7",
|
|
173
|
+
"model_aliases": {
|
|
172
174
|
"minimax": "openrouter/minimax/minimax-m2.5",
|
|
175
|
+
"minimax-m2.7": "openrouter/minimax/minimax-m2.7",
|
|
173
176
|
"deepseek-v3": "openrouter/deepseek/deepseek-chat-v3-0324",
|
|
174
177
|
"sonnet-4-6": "anthropic/claude-sonnet-4-6",
|
|
175
178
|
"opus-4-6": "anthropic/claude-opus-4-6"
|
|
@@ -177,7 +180,7 @@ You can set the default provider/model in `aru.json` so you don't need to switch
|
|
|
177
180
|
}
|
|
178
181
|
```
|
|
179
182
|
|
|
180
|
-
The `
|
|
183
|
+
The `default_model` field sets the main model. The `model_aliases` are shortcuts that can be used with `/model <alias>`.
|
|
181
184
|
|
|
182
185
|
#### Custom providers
|
|
183
186
|
|
|
@@ -188,12 +191,13 @@ You can configure custom providers with specific token limits:
|
|
|
188
191
|
"providers": {
|
|
189
192
|
"deepseek": {
|
|
190
193
|
"models": {
|
|
191
|
-
"deepseek-chat-v3-0324": {
|
|
194
|
+
"deepseek-chat-v3-0324": { "max_tokens": 16384 }
|
|
192
195
|
}
|
|
193
196
|
},
|
|
194
197
|
"openrouter": {
|
|
195
198
|
"models": {
|
|
196
|
-
"minimax/minimax-m2.5": {
|
|
199
|
+
"minimax/minimax-m2.5": { "max_tokens": 65536 },
|
|
200
|
+
"minimax/minimax-m2.7": { "max_tokens": 131072 }
|
|
197
201
|
}
|
|
198
202
|
}
|
|
199
203
|
}
|
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
# aru
|
|
2
2
|
|
|
3
3
|
An intelligent coding assistant for the terminal, powered by LLMs and [Agno](https://github.com/agno-agi/agno) agents.
|
|
4
|
-
</br></br>
|
|
5
|
-
<img width="600" alt="image" src="https://github.com/user-attachments/assets/36001faa-3163-4374-84fd-da8704a4ed9d" />
|
|
6
|
-
|
|
7
4
|
|
|
5
|
+

|
|
8
6
|
|
|
9
7
|
## Highlights
|
|
10
8
|
|
|
@@ -98,6 +96,7 @@ By default, aru uses **Claude Sonnet 4.6** (Anthropic). You can switch to any su
|
|
|
98
96
|
| **OpenAI** | `/model openai/gpt-4o` | `OPENAI_API_KEY` | `pip install "aru-code[openai]"` |
|
|
99
97
|
| **Groq** | `/model groq/llama-3.3-70b-versatile` | `GROQ_API_KEY` | `pip install "aru-code[groq]"` |
|
|
100
98
|
| **OpenRouter** | `/model openrouter/deepseek/deepseek-chat-v3-0324` | `OPENROUTER_API_KEY` | `pip install "aru-code[openai]"` |
|
|
99
|
+
| **MiniMax** | `/model openrouter/minimax/minimax-m2.7` | `OPENROUTER_API_KEY` | `pip install "aru-code[openai]"` |
|
|
101
100
|
|
|
102
101
|
To install all providers at once:
|
|
103
102
|
|
|
@@ -123,9 +122,10 @@ You can set the default provider/model in `aru.json` so you don't need to switch
|
|
|
123
122
|
|
|
124
123
|
```json
|
|
125
124
|
{
|
|
126
|
-
"
|
|
127
|
-
|
|
125
|
+
"default_model": "openrouter/minimax/minimax-m2.7",
|
|
126
|
+
"model_aliases": {
|
|
128
127
|
"minimax": "openrouter/minimax/minimax-m2.5",
|
|
128
|
+
"minimax-m2.7": "openrouter/minimax/minimax-m2.7",
|
|
129
129
|
"deepseek-v3": "openrouter/deepseek/deepseek-chat-v3-0324",
|
|
130
130
|
"sonnet-4-6": "anthropic/claude-sonnet-4-6",
|
|
131
131
|
"opus-4-6": "anthropic/claude-opus-4-6"
|
|
@@ -133,7 +133,7 @@ You can set the default provider/model in `aru.json` so you don't need to switch
|
|
|
133
133
|
}
|
|
134
134
|
```
|
|
135
135
|
|
|
136
|
-
The `
|
|
136
|
+
The `default_model` field sets the main model. The `model_aliases` are shortcuts that can be used with `/model <alias>`.
|
|
137
137
|
|
|
138
138
|
#### Custom providers
|
|
139
139
|
|
|
@@ -144,12 +144,13 @@ You can configure custom providers with specific token limits:
|
|
|
144
144
|
"providers": {
|
|
145
145
|
"deepseek": {
|
|
146
146
|
"models": {
|
|
147
|
-
"deepseek-chat-v3-0324": {
|
|
147
|
+
"deepseek-chat-v3-0324": { "max_tokens": 16384 }
|
|
148
148
|
}
|
|
149
149
|
},
|
|
150
150
|
"openrouter": {
|
|
151
151
|
"models": {
|
|
152
|
-
"minimax/minimax-m2.5": {
|
|
152
|
+
"minimax/minimax-m2.5": { "max_tokens": 65536 },
|
|
153
|
+
"minimax/minimax-m2.7": { "max_tokens": 131072 }
|
|
153
154
|
}
|
|
154
155
|
}
|
|
155
156
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.4.0"
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
"""Interactive CLI for aru - a Claude Code clone."""
|
|
2
2
|
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
3
5
|
import asyncio
|
|
4
6
|
import hashlib
|
|
5
7
|
import json
|
|
@@ -1687,7 +1689,7 @@ async def run_cli(skip_permissions: bool = False, resume_id: str | None = None):
|
|
|
1687
1689
|
"""Sync the model IDs to the tools module from the session's model_ref."""
|
|
1688
1690
|
set_model_id(sess.model_id)
|
|
1689
1691
|
# Determine small model for sub-agents based on provider
|
|
1690
|
-
small_ref = config.
|
|
1692
|
+
small_ref = config.model_aliases.get("small") if config else None
|
|
1691
1693
|
if not small_ref:
|
|
1692
1694
|
provider_key, _ = resolve_model_ref(sess.model_ref)
|
|
1693
1695
|
# Use same provider but pick a small/fast model
|
|
@@ -1740,8 +1742,8 @@ async def run_cli(skip_permissions: bool = False, resume_id: str | None = None):
|
|
|
1740
1742
|
else:
|
|
1741
1743
|
session = Session()
|
|
1742
1744
|
# Apply default model from config if set
|
|
1743
|
-
if config.
|
|
1744
|
-
session.model_ref = config.
|
|
1745
|
+
if config.default_model:
|
|
1746
|
+
session.model_ref = config.default_model
|
|
1745
1747
|
_sync_model(session)
|
|
1746
1748
|
_render_home(session, skip_permissions)
|
|
1747
1749
|
|
|
@@ -1824,13 +1826,11 @@ async def run_cli(skip_permissions: bool = False, resume_id: str | None = None):
|
|
|
1824
1826
|
console.print(f"[bold]Current model:[/bold] {session.model_display} ({session.model_id})")
|
|
1825
1827
|
console.print()
|
|
1826
1828
|
# Show model aliases from aru.json
|
|
1827
|
-
if config.
|
|
1828
|
-
|
|
1829
|
-
|
|
1830
|
-
console.print("[
|
|
1831
|
-
|
|
1832
|
-
console.print(f" [cyan]{alias}[/cyan] → {ref}")
|
|
1833
|
-
console.print()
|
|
1829
|
+
if config.model_aliases:
|
|
1830
|
+
console.print("[bold]Model aliases (aru.json):[/bold]")
|
|
1831
|
+
for alias, ref in config.model_aliases.items():
|
|
1832
|
+
console.print(f" [cyan]{alias}[/cyan] → {ref}")
|
|
1833
|
+
console.print()
|
|
1834
1834
|
console.print("[bold]Aliases:[/bold]")
|
|
1835
1835
|
for alias, ref in MODEL_ALIASES.items():
|
|
1836
1836
|
console.print(f" [cyan]{alias}[/cyan] → {ref}")
|
|
@@ -1845,7 +1845,7 @@ async def run_cli(skip_permissions: bool = False, resume_id: str | None = None):
|
|
|
1845
1845
|
arg_lower = arg.lower()
|
|
1846
1846
|
try:
|
|
1847
1847
|
# Resolve config aliases (aru.json "models" section) first
|
|
1848
|
-
resolved_ref = config.
|
|
1848
|
+
resolved_ref = config.model_aliases.get(arg_lower, arg_lower) if config.model_aliases else arg_lower
|
|
1849
1849
|
# Validate the model reference resolves to a known provider
|
|
1850
1850
|
provider_key, model_name = resolve_model_ref(resolved_ref)
|
|
1851
1851
|
from aru.providers import get_provider
|
|
@@ -8,6 +8,8 @@ Supports:
|
|
|
8
8
|
Follows the Gemini .agents convention for cross-platform compatibility.
|
|
9
9
|
"""
|
|
10
10
|
|
|
11
|
+
from __future__ import annotations
|
|
12
|
+
|
|
11
13
|
import json
|
|
12
14
|
import os
|
|
13
15
|
from dataclasses import dataclass, field
|
|
@@ -44,7 +46,8 @@ class AgentConfig:
|
|
|
44
46
|
commands: dict[str, CustomCommand] = field(default_factory=dict)
|
|
45
47
|
skills: dict[str, Skill] = field(default_factory=dict)
|
|
46
48
|
permissions: dict[str, Any] = field(default_factory=dict)
|
|
47
|
-
|
|
49
|
+
default_model: str | None = None
|
|
50
|
+
model_aliases: dict[str, str] = field(default_factory=dict)
|
|
48
51
|
plan_reviewer: bool = True
|
|
49
52
|
|
|
50
53
|
@property
|
|
@@ -211,12 +214,14 @@ def load_config(cwd: str | None = None) -> AgentConfig:
|
|
|
211
214
|
if "permission" in data:
|
|
212
215
|
config.permissions = data["permission"]
|
|
213
216
|
# Load provider configuration
|
|
214
|
-
if "providers" in data
|
|
217
|
+
if "providers" in data:
|
|
215
218
|
from aru.providers import load_providers_from_config
|
|
216
219
|
load_providers_from_config(data)
|
|
217
|
-
# Store model
|
|
218
|
-
if "
|
|
219
|
-
config.
|
|
220
|
+
# Store default model and aliases for CLI
|
|
221
|
+
if "default_model" in data:
|
|
222
|
+
config.default_model = data["default_model"]
|
|
223
|
+
if "model_aliases" in data and isinstance(data["model_aliases"], dict):
|
|
224
|
+
config.model_aliases = data["model_aliases"]
|
|
220
225
|
if "plan_reviewer" in data:
|
|
221
226
|
config.plan_reviewer = bool(data["plan_reviewer"])
|
|
222
227
|
break
|
|
@@ -141,6 +141,11 @@ def load_providers_from_config(config_data: dict[str, Any]):
|
|
|
141
141
|
|
|
142
142
|
Expected format in aru.json:
|
|
143
143
|
{
|
|
144
|
+
"default_model": "anthropic/claude-sonnet-4-5",
|
|
145
|
+
"model_aliases": {
|
|
146
|
+
"small": "anthropic/claude-haiku-4-5",
|
|
147
|
+
"deepseek-v3": "openrouter/deepseek/deepseek-chat-v3-0324"
|
|
148
|
+
},
|
|
144
149
|
"providers": {
|
|
145
150
|
"ollama": {
|
|
146
151
|
"base_url": "http://localhost:11434",
|
|
@@ -157,10 +162,6 @@ def load_providers_from_config(config_data: dict[str, Any]):
|
|
|
157
162
|
"my-model": {"id": "my-model-v1"}
|
|
158
163
|
}
|
|
159
164
|
}
|
|
160
|
-
},
|
|
161
|
-
"models": {
|
|
162
|
-
"default": "anthropic/claude-sonnet-4-5",
|
|
163
|
-
"small": "anthropic/claude-haiku-4-5"
|
|
164
165
|
}
|
|
165
166
|
}
|
|
166
167
|
"""
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: aru-code
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.4.0
|
|
4
4
|
Summary: A Claude Code clone built with Agno agents
|
|
5
5
|
Author-email: Estevao <estevaofon@gmail.com>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -11,9 +11,11 @@ Keywords: ai,coding-assistant,claude,cli,agents
|
|
|
11
11
|
Classifier: Development Status :: 3 - Alpha
|
|
12
12
|
Classifier: Environment :: Console
|
|
13
13
|
Classifier: Intended Audience :: Developers
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
14
16
|
Classifier: Programming Language :: Python :: 3.13
|
|
15
17
|
Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
|
|
16
|
-
Requires-Python: >=3.
|
|
18
|
+
Requires-Python: >=3.11
|
|
17
19
|
Description-Content-Type: text/markdown
|
|
18
20
|
License-File: LICENSE
|
|
19
21
|
Requires-Dist: agno<3,>=2.5.10
|
|
@@ -27,6 +29,7 @@ Requires-Dist: tree-sitter>=0.23
|
|
|
27
29
|
Requires-Dist: tree-sitter-python>=0.23
|
|
28
30
|
Requires-Dist: mcp>=1.0
|
|
29
31
|
Requires-Dist: openai>=2.29.0
|
|
32
|
+
Requires-Dist: pytest-asyncio>=1.3.0
|
|
30
33
|
Provides-Extra: dev
|
|
31
34
|
Requires-Dist: pytest>=8.0; extra == "dev"
|
|
32
35
|
Requires-Dist: pytest-asyncio>=0.23; extra == "dev"
|
|
@@ -45,10 +48,8 @@ Dynamic: license-file
|
|
|
45
48
|
# aru
|
|
46
49
|
|
|
47
50
|
An intelligent coding assistant for the terminal, powered by LLMs and [Agno](https://github.com/agno-agi/agno) agents.
|
|
48
|
-
</br></br>
|
|
49
|
-
<img width="600" alt="image" src="https://github.com/user-attachments/assets/36001faa-3163-4374-84fd-da8704a4ed9d" />
|
|
50
|
-
|
|
51
51
|
|
|
52
|
+

|
|
52
53
|
|
|
53
54
|
## Highlights
|
|
54
55
|
|
|
@@ -142,6 +143,7 @@ By default, aru uses **Claude Sonnet 4.6** (Anthropic). You can switch to any su
|
|
|
142
143
|
| **OpenAI** | `/model openai/gpt-4o` | `OPENAI_API_KEY` | `pip install "aru-code[openai]"` |
|
|
143
144
|
| **Groq** | `/model groq/llama-3.3-70b-versatile` | `GROQ_API_KEY` | `pip install "aru-code[groq]"` |
|
|
144
145
|
| **OpenRouter** | `/model openrouter/deepseek/deepseek-chat-v3-0324` | `OPENROUTER_API_KEY` | `pip install "aru-code[openai]"` |
|
|
146
|
+
| **MiniMax** | `/model openrouter/minimax/minimax-m2.7` | `OPENROUTER_API_KEY` | `pip install "aru-code[openai]"` |
|
|
145
147
|
|
|
146
148
|
To install all providers at once:
|
|
147
149
|
|
|
@@ -167,9 +169,10 @@ You can set the default provider/model in `aru.json` so you don't need to switch
|
|
|
167
169
|
|
|
168
170
|
```json
|
|
169
171
|
{
|
|
170
|
-
"
|
|
171
|
-
|
|
172
|
+
"default_model": "openrouter/minimax/minimax-m2.7",
|
|
173
|
+
"model_aliases": {
|
|
172
174
|
"minimax": "openrouter/minimax/minimax-m2.5",
|
|
175
|
+
"minimax-m2.7": "openrouter/minimax/minimax-m2.7",
|
|
173
176
|
"deepseek-v3": "openrouter/deepseek/deepseek-chat-v3-0324",
|
|
174
177
|
"sonnet-4-6": "anthropic/claude-sonnet-4-6",
|
|
175
178
|
"opus-4-6": "anthropic/claude-opus-4-6"
|
|
@@ -177,7 +180,7 @@ You can set the default provider/model in `aru.json` so you don't need to switch
|
|
|
177
180
|
}
|
|
178
181
|
```
|
|
179
182
|
|
|
180
|
-
The `
|
|
183
|
+
The `default_model` field sets the main model. The `model_aliases` are shortcuts that can be used with `/model <alias>`.
|
|
181
184
|
|
|
182
185
|
#### Custom providers
|
|
183
186
|
|
|
@@ -188,12 +191,13 @@ You can configure custom providers with specific token limits:
|
|
|
188
191
|
"providers": {
|
|
189
192
|
"deepseek": {
|
|
190
193
|
"models": {
|
|
191
|
-
"deepseek-chat-v3-0324": {
|
|
194
|
+
"deepseek-chat-v3-0324": { "max_tokens": 16384 }
|
|
192
195
|
}
|
|
193
196
|
},
|
|
194
197
|
"openrouter": {
|
|
195
198
|
"models": {
|
|
196
|
-
"minimax/minimax-m2.5": {
|
|
199
|
+
"minimax/minimax-m2.5": { "max_tokens": 65536 },
|
|
200
|
+
"minimax/minimax-m2.7": { "max_tokens": 131072 }
|
|
197
201
|
}
|
|
198
202
|
}
|
|
199
203
|
}
|
|
@@ -1,80 +1,83 @@
|
|
|
1
|
-
[build-system]
|
|
2
|
-
requires = ["setuptools>=75.0", "wheel"]
|
|
3
|
-
build-backend = "setuptools.build_meta"
|
|
4
|
-
|
|
5
|
-
[project]
|
|
6
|
-
name = "aru-code"
|
|
7
|
-
version = "0.
|
|
8
|
-
description = "A Claude Code clone built with Agno agents"
|
|
9
|
-
readme = "README.md"
|
|
10
|
-
license = "MIT"
|
|
11
|
-
requires-python = ">=3.
|
|
12
|
-
authors = [
|
|
13
|
-
{ name = "Estevao", email = "estevaofon@gmail.com" },
|
|
14
|
-
]
|
|
15
|
-
keywords = ["ai", "coding-assistant", "claude", "cli", "agents"]
|
|
16
|
-
classifiers = [
|
|
17
|
-
"Development Status :: 3 - Alpha",
|
|
18
|
-
"Environment :: Console",
|
|
19
|
-
"Intended Audience :: Developers",
|
|
20
|
-
"Programming Language :: Python :: 3.
|
|
21
|
-
"
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
"
|
|
28
|
-
"
|
|
29
|
-
"
|
|
30
|
-
"
|
|
31
|
-
"
|
|
32
|
-
"
|
|
33
|
-
"
|
|
34
|
-
"
|
|
35
|
-
"
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
[
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
markers
|
|
73
|
-
"
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
]
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=75.0", "wheel"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "aru-code"
|
|
7
|
+
version = "0.4.0"
|
|
8
|
+
description = "A Claude Code clone built with Agno agents"
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
license = "MIT"
|
|
11
|
+
requires-python = ">=3.11"
|
|
12
|
+
authors = [
|
|
13
|
+
{ name = "Estevao", email = "estevaofon@gmail.com" },
|
|
14
|
+
]
|
|
15
|
+
keywords = ["ai", "coding-assistant", "claude", "cli", "agents"]
|
|
16
|
+
classifiers = [
|
|
17
|
+
"Development Status :: 3 - Alpha",
|
|
18
|
+
"Environment :: Console",
|
|
19
|
+
"Intended Audience :: Developers",
|
|
20
|
+
"Programming Language :: Python :: 3.11",
|
|
21
|
+
"Programming Language :: Python :: 3.12",
|
|
22
|
+
"Programming Language :: Python :: 3.13",
|
|
23
|
+
"Topic :: Software Development :: Libraries :: Application Frameworks",
|
|
24
|
+
]
|
|
25
|
+
|
|
26
|
+
dependencies = [
|
|
27
|
+
"agno>=2.5.10,<3",
|
|
28
|
+
"anthropic",
|
|
29
|
+
"httpx",
|
|
30
|
+
"pathspec>=0.12",
|
|
31
|
+
"python-dotenv>=1.2.2",
|
|
32
|
+
"prompt-toolkit>=3.0",
|
|
33
|
+
"rich",
|
|
34
|
+
"tree-sitter>=0.23",
|
|
35
|
+
"tree-sitter-python>=0.23",
|
|
36
|
+
"mcp>=1.0",
|
|
37
|
+
"openai>=2.29.0",
|
|
38
|
+
"pytest-asyncio>=1.3.0",
|
|
39
|
+
]
|
|
40
|
+
|
|
41
|
+
[project.urls]
|
|
42
|
+
Homepage = "https://github.com/estevaofon/aru"
|
|
43
|
+
Repository = "https://github.com/estevaofon/aru"
|
|
44
|
+
Issues = "https://github.com/estevaofon/aru/issues"
|
|
45
|
+
|
|
46
|
+
[project.optional-dependencies]
|
|
47
|
+
dev = [
|
|
48
|
+
"pytest>=8.0",
|
|
49
|
+
"pytest-asyncio>=0.23",
|
|
50
|
+
]
|
|
51
|
+
openai = ["openai>=1.0"]
|
|
52
|
+
ollama = ["ollama>=0.4"]
|
|
53
|
+
groq = ["groq>=0.4"]
|
|
54
|
+
all-providers = [
|
|
55
|
+
"openai>=1.0",
|
|
56
|
+
"ollama>=0.4",
|
|
57
|
+
"groq>=0.4",
|
|
58
|
+
]
|
|
59
|
+
|
|
60
|
+
[project.scripts]
|
|
61
|
+
aru = "aru.cli:main"
|
|
62
|
+
|
|
63
|
+
[tool.pytest.ini_options]
|
|
64
|
+
testpaths = ["tests"]
|
|
65
|
+
python_files = ["test_*.py"]
|
|
66
|
+
python_classes = ["Test*"]
|
|
67
|
+
python_functions = ["test_*"]
|
|
68
|
+
asyncio_mode = "auto"
|
|
69
|
+
asyncio_default_fixture_loop_scope = "function"
|
|
70
|
+
addopts = [
|
|
71
|
+
"-v",
|
|
72
|
+
"--strict-markers",
|
|
73
|
+
"--tb=short",
|
|
74
|
+
]
|
|
75
|
+
markers = [
|
|
76
|
+
"slow: marks tests as slow (deselect with '-m \"not slow\"')",
|
|
77
|
+
"integration: marks tests as integration tests",
|
|
78
|
+
]
|
|
79
|
+
|
|
80
|
+
[dependency-groups]
|
|
81
|
+
dev = [
|
|
82
|
+
"pytest-cov>=7.1.0",
|
|
83
|
+
]
|
aru_code-0.2.0/aru/__init__.py
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = "0.1.0"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|