aru-code 0.5.0__tar.gz → 0.7.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.
Files changed (57) hide show
  1. {aru_code-0.5.0 → aru_code-0.7.0}/PKG-INFO +9 -2
  2. {aru_code-0.5.0 → aru_code-0.7.0}/README.md +8 -1
  3. aru_code-0.7.0/aru/__init__.py +1 -0
  4. aru_code-0.7.0/aru/agent_factory.py +66 -0
  5. {aru_code-0.5.0 → aru_code-0.7.0}/aru/agents/planner.py +1 -1
  6. aru_code-0.7.0/aru/cli.py +568 -0
  7. aru_code-0.7.0/aru/commands.py +102 -0
  8. aru_code-0.7.0/aru/completers.py +300 -0
  9. {aru_code-0.5.0 → aru_code-0.7.0}/aru/config.py +8 -0
  10. aru_code-0.7.0/aru/display.py +334 -0
  11. aru_code-0.7.0/aru/runner.py +448 -0
  12. aru_code-0.7.0/aru/session.py +475 -0
  13. {aru_code-0.5.0 → aru_code-0.7.0}/aru_code.egg-info/PKG-INFO +9 -2
  14. {aru_code-0.5.0 → aru_code-0.7.0}/aru_code.egg-info/SOURCES.txt +6 -0
  15. {aru_code-0.5.0 → aru_code-0.7.0}/pyproject.toml +1 -1
  16. {aru_code-0.5.0 → aru_code-0.7.0}/tests/test_cli_advanced.py +3 -3
  17. {aru_code-0.5.0 → aru_code-0.7.0}/tests/test_cli_shell.py +17 -17
  18. {aru_code-0.5.0 → aru_code-0.7.0}/tests/test_config.py +24 -7
  19. aru_code-0.5.0/aru/__init__.py +0 -1
  20. aru_code-0.5.0/aru/cli.py +0 -2270
  21. {aru_code-0.5.0 → aru_code-0.7.0}/LICENSE +0 -0
  22. {aru_code-0.5.0 → aru_code-0.7.0}/aru/agents/__init__.py +0 -0
  23. {aru_code-0.5.0 → aru_code-0.7.0}/aru/agents/base.py +0 -0
  24. {aru_code-0.5.0 → aru_code-0.7.0}/aru/agents/executor.py +0 -0
  25. {aru_code-0.5.0 → aru_code-0.7.0}/aru/context.py +0 -0
  26. {aru_code-0.5.0 → aru_code-0.7.0}/aru/permissions.py +0 -0
  27. {aru_code-0.5.0 → aru_code-0.7.0}/aru/providers.py +0 -0
  28. {aru_code-0.5.0 → aru_code-0.7.0}/aru/tools/__init__.py +0 -0
  29. {aru_code-0.5.0 → aru_code-0.7.0}/aru/tools/ast_tools.py +0 -0
  30. {aru_code-0.5.0 → aru_code-0.7.0}/aru/tools/codebase.py +0 -0
  31. {aru_code-0.5.0 → aru_code-0.7.0}/aru/tools/gitignore.py +0 -0
  32. {aru_code-0.5.0 → aru_code-0.7.0}/aru/tools/mcp_client.py +0 -0
  33. {aru_code-0.5.0 → aru_code-0.7.0}/aru/tools/ranker.py +0 -0
  34. {aru_code-0.5.0 → aru_code-0.7.0}/aru/tools/tasklist.py +0 -0
  35. {aru_code-0.5.0 → aru_code-0.7.0}/aru_code.egg-info/dependency_links.txt +0 -0
  36. {aru_code-0.5.0 → aru_code-0.7.0}/aru_code.egg-info/entry_points.txt +0 -0
  37. {aru_code-0.5.0 → aru_code-0.7.0}/aru_code.egg-info/requires.txt +0 -0
  38. {aru_code-0.5.0 → aru_code-0.7.0}/aru_code.egg-info/top_level.txt +0 -0
  39. {aru_code-0.5.0 → aru_code-0.7.0}/setup.cfg +0 -0
  40. {aru_code-0.5.0 → aru_code-0.7.0}/tests/test_agents_base.py +0 -0
  41. {aru_code-0.5.0 → aru_code-0.7.0}/tests/test_ast_tools.py +0 -0
  42. {aru_code-0.5.0 → aru_code-0.7.0}/tests/test_cli.py +0 -0
  43. {aru_code-0.5.0 → aru_code-0.7.0}/tests/test_cli_base.py +0 -0
  44. {aru_code-0.5.0 → aru_code-0.7.0}/tests/test_cli_completers.py +0 -0
  45. {aru_code-0.5.0 → aru_code-0.7.0}/tests/test_cli_new.py +0 -0
  46. {aru_code-0.5.0 → aru_code-0.7.0}/tests/test_cli_run_cli.py +0 -0
  47. {aru_code-0.5.0 → aru_code-0.7.0}/tests/test_cli_session.py +0 -0
  48. {aru_code-0.5.0 → aru_code-0.7.0}/tests/test_codebase.py +0 -0
  49. {aru_code-0.5.0 → aru_code-0.7.0}/tests/test_context.py +0 -0
  50. {aru_code-0.5.0 → aru_code-0.7.0}/tests/test_executor.py +0 -0
  51. {aru_code-0.5.0 → aru_code-0.7.0}/tests/test_gitignore.py +0 -0
  52. {aru_code-0.5.0 → aru_code-0.7.0}/tests/test_main.py +0 -0
  53. {aru_code-0.5.0 → aru_code-0.7.0}/tests/test_mcp_client.py +0 -0
  54. {aru_code-0.5.0 → aru_code-0.7.0}/tests/test_permissions.py +0 -0
  55. {aru_code-0.5.0 → aru_code-0.7.0}/tests/test_planner.py +0 -0
  56. {aru_code-0.5.0 → aru_code-0.7.0}/tests/test_providers.py +0 -0
  57. {aru_code-0.5.0 → aru_code-0.7.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.5.0
3
+ Version: 0.7.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
@@ -452,7 +452,14 @@ Aru can load tools from MCP servers. Configure in `.aru/mcp_config.json`:
452
452
  ```
453
453
  aru-code/
454
454
  ├── aru/
455
- │ ├── cli.py # Interactive CLI with streaming display
455
+ │ ├── cli.py # Main REPL loop, argument parsing, and entry point
456
+ │ ├── agent_factory.py # Agent instantiation (general and custom agents)
457
+ │ ├── commands.py # Slash commands, help display, shell execution
458
+ │ ├── completers.py # Input completions, paste detection, @file mentions
459
+ │ ├── context.py # Token optimization (pruning, truncation, compaction)
460
+ │ ├── display.py # Terminal display (logo, status bar, streaming output)
461
+ │ ├── runner.py # Agent execution orchestration with streaming
462
+ │ ├── session.py # Session state, persistence, plan tracking
456
463
  │ ├── config.py # Configuration loader (AGENTS.md, .agents/)
457
464
  │ ├── providers.py # Multi-provider LLM abstraction
458
465
  │ ├── permissions.py # Granular permission system (allow/ask/deny)
@@ -405,7 +405,14 @@ Aru can load tools from MCP servers. Configure in `.aru/mcp_config.json`:
405
405
  ```
406
406
  aru-code/
407
407
  ├── aru/
408
- │ ├── cli.py # Interactive CLI with streaming display
408
+ │ ├── cli.py # Main REPL loop, argument parsing, and entry point
409
+ │ ├── agent_factory.py # Agent instantiation (general and custom agents)
410
+ │ ├── commands.py # Slash commands, help display, shell execution
411
+ │ ├── completers.py # Input completions, paste detection, @file mentions
412
+ │ ├── context.py # Token optimization (pruning, truncation, compaction)
413
+ │ ├── display.py # Terminal display (logo, status bar, streaming output)
414
+ │ ├── runner.py # Agent execution orchestration with streaming
415
+ │ ├── session.py # Session state, persistence, plan tracking
409
416
  │ ├── config.py # Configuration loader (AGENTS.md, .agents/)
410
417
  │ ├── providers.py # Multi-provider LLM abstraction
411
418
  │ ├── permissions.py # Granular permission system (allow/ask/deny)
@@ -0,0 +1 @@
1
+ __version__ = "0.7.0"
@@ -0,0 +1,66 @@
1
+ """Agent creation: general-purpose and custom agent instantiation."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from aru.agents.base import build_instructions as _build_instructions
6
+ from aru.config import AgentConfig, CustomAgent
7
+ from aru.providers import create_model
8
+ from aru.session import Session
9
+
10
+
11
+ def create_general_agent(session: Session, config: AgentConfig | None = None):
12
+ """Create the general-purpose agent."""
13
+ from agno.agent import Agent
14
+ from agno.compression.manager import CompressionManager
15
+
16
+ from aru.tools.codebase import GENERAL_TOOLS, _get_small_model_ref
17
+
18
+ extra = config.get_extra_instructions() if config else ""
19
+
20
+ return Agent(
21
+ name="Aru",
22
+ model=create_model(session.model_ref, max_tokens=8192),
23
+ tools=GENERAL_TOOLS,
24
+ instructions=_build_instructions("general", extra),
25
+ markdown=True,
26
+ compress_tool_results=True,
27
+ compression_manager=CompressionManager(
28
+ model=create_model(_get_small_model_ref(), max_tokens=1024),
29
+ compress_tool_results=True,
30
+ compress_tool_results_limit=15,
31
+ ),
32
+ tool_call_limit=20,
33
+ )
34
+
35
+
36
+ def create_custom_agent_instance(agent_def: CustomAgent, session: Session,
37
+ config: AgentConfig | None = None):
38
+ """Create an Agno Agent from a CustomAgent definition."""
39
+ from agno.agent import Agent
40
+ from agno.compression.manager import CompressionManager
41
+ from aru.agents.base import BASE_INSTRUCTIONS
42
+ from aru.tools.codebase import resolve_tools, _get_small_model_ref
43
+
44
+ model_ref = agent_def.model or session.model_ref
45
+ tools = resolve_tools(agent_def.tools)
46
+
47
+ extra = config.get_extra_instructions() if config else ""
48
+ parts = [agent_def.system_prompt, BASE_INSTRUCTIONS]
49
+ if extra:
50
+ parts.append(extra)
51
+ instructions = "\n\n".join(parts)
52
+
53
+ return Agent(
54
+ name=agent_def.name,
55
+ model=create_model(model_ref, max_tokens=8192),
56
+ tools=tools,
57
+ instructions=instructions,
58
+ markdown=True,
59
+ compress_tool_results=True,
60
+ compression_manager=CompressionManager(
61
+ model=create_model(_get_small_model_ref(), max_tokens=1024),
62
+ compress_tool_results=True,
63
+ compress_tool_results_limit=15,
64
+ ),
65
+ tool_call_limit=agent_def.max_turns or 20,
66
+ )
@@ -79,7 +79,7 @@ def create_planner(model_ref: str = "anthropic/claude-sonnet-4-5", extra_instruc
79
79
  compression_manager=CompressionManager(
80
80
  model=create_model(_get_small_model_ref(), max_tokens=1024),
81
81
  compress_tool_results=True,
82
- compress_tool_results_limit=7,
82
+ compress_tool_results_limit=15,
83
83
  ),
84
84
  tool_call_limit=20,
85
85
  )