tunacode-cli 0.0.27__tar.gz → 0.0.28__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.

Potentially problematic release.


This version of tunacode-cli might be problematic. Click here for more details.

Files changed (101) hide show
  1. tunacode_cli-0.0.28/PKG-INFO +121 -0
  2. tunacode_cli-0.0.28/README.md +85 -0
  3. {tunacode_cli-0.0.27 → tunacode_cli-0.0.28}/pyproject.toml +1 -1
  4. {tunacode_cli-0.0.27 → tunacode_cli-0.0.28}/src/tunacode/cli/commands.py +83 -4
  5. {tunacode_cli-0.0.27 → tunacode_cli-0.0.28}/src/tunacode/constants.py +1 -1
  6. {tunacode_cli-0.0.27 → tunacode_cli-0.0.28}/src/tunacode/ui/output.py +1 -1
  7. tunacode_cli-0.0.28/src/tunacode_cli.egg-info/PKG-INFO +121 -0
  8. tunacode_cli-0.0.27/PKG-INFO +0 -567
  9. tunacode_cli-0.0.27/README.md +0 -531
  10. tunacode_cli-0.0.27/src/tunacode_cli.egg-info/PKG-INFO +0 -567
  11. {tunacode_cli-0.0.27 → tunacode_cli-0.0.28}/CLAUDE.md +0 -0
  12. {tunacode_cli-0.0.27 → tunacode_cli-0.0.28}/LICENSE +0 -0
  13. {tunacode_cli-0.0.27 → tunacode_cli-0.0.28}/MANIFEST.in +0 -0
  14. {tunacode_cli-0.0.27 → tunacode_cli-0.0.28}/TUNACODE.md +0 -0
  15. {tunacode_cli-0.0.27 → tunacode_cli-0.0.28}/setup.cfg +0 -0
  16. {tunacode_cli-0.0.27 → tunacode_cli-0.0.28}/setup.py +0 -0
  17. {tunacode_cli-0.0.27 → tunacode_cli-0.0.28}/src/tunacode/__init__.py +0 -0
  18. {tunacode_cli-0.0.27 → tunacode_cli-0.0.28}/src/tunacode/cli/__init__.py +0 -0
  19. {tunacode_cli-0.0.27 → tunacode_cli-0.0.28}/src/tunacode/cli/main.py +0 -0
  20. {tunacode_cli-0.0.27 → tunacode_cli-0.0.28}/src/tunacode/cli/repl.py +0 -0
  21. {tunacode_cli-0.0.27 → tunacode_cli-0.0.28}/src/tunacode/cli/textual_app.py +0 -0
  22. {tunacode_cli-0.0.27 → tunacode_cli-0.0.28}/src/tunacode/cli/textual_bridge.py +0 -0
  23. {tunacode_cli-0.0.27 → tunacode_cli-0.0.28}/src/tunacode/configuration/__init__.py +0 -0
  24. {tunacode_cli-0.0.27 → tunacode_cli-0.0.28}/src/tunacode/configuration/defaults.py +0 -0
  25. {tunacode_cli-0.0.27 → tunacode_cli-0.0.28}/src/tunacode/configuration/models.py +0 -0
  26. {tunacode_cli-0.0.27 → tunacode_cli-0.0.28}/src/tunacode/configuration/settings.py +0 -0
  27. {tunacode_cli-0.0.27 → tunacode_cli-0.0.28}/src/tunacode/context.py +0 -0
  28. {tunacode_cli-0.0.27 → tunacode_cli-0.0.28}/src/tunacode/core/__init__.py +0 -0
  29. {tunacode_cli-0.0.27 → tunacode_cli-0.0.28}/src/tunacode/core/agents/__init__.py +0 -0
  30. {tunacode_cli-0.0.27 → tunacode_cli-0.0.28}/src/tunacode/core/agents/main.py +0 -0
  31. {tunacode_cli-0.0.27 → tunacode_cli-0.0.28}/src/tunacode/core/agents/orchestrator.py +0 -0
  32. {tunacode_cli-0.0.27 → tunacode_cli-0.0.28}/src/tunacode/core/agents/planner_schema.py +0 -0
  33. {tunacode_cli-0.0.27 → tunacode_cli-0.0.28}/src/tunacode/core/agents/readonly.py +0 -0
  34. {tunacode_cli-0.0.27 → tunacode_cli-0.0.28}/src/tunacode/core/background/__init__.py +0 -0
  35. {tunacode_cli-0.0.27 → tunacode_cli-0.0.28}/src/tunacode/core/background/manager.py +0 -0
  36. {tunacode_cli-0.0.27 → tunacode_cli-0.0.28}/src/tunacode/core/llm/__init__.py +0 -0
  37. {tunacode_cli-0.0.27 → tunacode_cli-0.0.28}/src/tunacode/core/llm/planner.py +0 -0
  38. {tunacode_cli-0.0.27 → tunacode_cli-0.0.28}/src/tunacode/core/setup/__init__.py +0 -0
  39. {tunacode_cli-0.0.27 → tunacode_cli-0.0.28}/src/tunacode/core/setup/agent_setup.py +0 -0
  40. {tunacode_cli-0.0.27 → tunacode_cli-0.0.28}/src/tunacode/core/setup/base.py +0 -0
  41. {tunacode_cli-0.0.27 → tunacode_cli-0.0.28}/src/tunacode/core/setup/config_setup.py +0 -0
  42. {tunacode_cli-0.0.27 → tunacode_cli-0.0.28}/src/tunacode/core/setup/coordinator.py +0 -0
  43. {tunacode_cli-0.0.27 → tunacode_cli-0.0.28}/src/tunacode/core/setup/environment_setup.py +0 -0
  44. {tunacode_cli-0.0.27 → tunacode_cli-0.0.28}/src/tunacode/core/setup/git_safety_setup.py +0 -0
  45. {tunacode_cli-0.0.27 → tunacode_cli-0.0.28}/src/tunacode/core/state.py +0 -0
  46. {tunacode_cli-0.0.27 → tunacode_cli-0.0.28}/src/tunacode/core/tool_handler.py +0 -0
  47. {tunacode_cli-0.0.27 → tunacode_cli-0.0.28}/src/tunacode/exceptions.py +0 -0
  48. {tunacode_cli-0.0.27 → tunacode_cli-0.0.28}/src/tunacode/prompts/system.md +0 -0
  49. {tunacode_cli-0.0.27 → tunacode_cli-0.0.28}/src/tunacode/py.typed +0 -0
  50. {tunacode_cli-0.0.27 → tunacode_cli-0.0.28}/src/tunacode/services/__init__.py +0 -0
  51. {tunacode_cli-0.0.27 → tunacode_cli-0.0.28}/src/tunacode/services/mcp.py +0 -0
  52. {tunacode_cli-0.0.27 → tunacode_cli-0.0.28}/src/tunacode/setup.py +0 -0
  53. {tunacode_cli-0.0.27 → tunacode_cli-0.0.28}/src/tunacode/tools/__init__.py +0 -0
  54. {tunacode_cli-0.0.27 → tunacode_cli-0.0.28}/src/tunacode/tools/base.py +0 -0
  55. {tunacode_cli-0.0.27 → tunacode_cli-0.0.28}/src/tunacode/tools/bash.py +0 -0
  56. {tunacode_cli-0.0.27 → tunacode_cli-0.0.28}/src/tunacode/tools/grep.py +0 -0
  57. {tunacode_cli-0.0.27 → tunacode_cli-0.0.28}/src/tunacode/tools/read_file.py +0 -0
  58. {tunacode_cli-0.0.27 → tunacode_cli-0.0.28}/src/tunacode/tools/run_command.py +0 -0
  59. {tunacode_cli-0.0.27 → tunacode_cli-0.0.28}/src/tunacode/tools/update_file.py +0 -0
  60. {tunacode_cli-0.0.27 → tunacode_cli-0.0.28}/src/tunacode/tools/write_file.py +0 -0
  61. {tunacode_cli-0.0.27 → tunacode_cli-0.0.28}/src/tunacode/types.py +0 -0
  62. {tunacode_cli-0.0.27 → tunacode_cli-0.0.28}/src/tunacode/ui/__init__.py +0 -0
  63. {tunacode_cli-0.0.27 → tunacode_cli-0.0.28}/src/tunacode/ui/completers.py +0 -0
  64. {tunacode_cli-0.0.27 → tunacode_cli-0.0.28}/src/tunacode/ui/console.py +0 -0
  65. {tunacode_cli-0.0.27 → tunacode_cli-0.0.28}/src/tunacode/ui/constants.py +0 -0
  66. {tunacode_cli-0.0.27 → tunacode_cli-0.0.28}/src/tunacode/ui/decorators.py +0 -0
  67. {tunacode_cli-0.0.27 → tunacode_cli-0.0.28}/src/tunacode/ui/input.py +0 -0
  68. {tunacode_cli-0.0.27 → tunacode_cli-0.0.28}/src/tunacode/ui/keybindings.py +0 -0
  69. {tunacode_cli-0.0.27 → tunacode_cli-0.0.28}/src/tunacode/ui/lexers.py +0 -0
  70. {tunacode_cli-0.0.27 → tunacode_cli-0.0.28}/src/tunacode/ui/panels.py +0 -0
  71. {tunacode_cli-0.0.27 → tunacode_cli-0.0.28}/src/tunacode/ui/prompt_manager.py +0 -0
  72. {tunacode_cli-0.0.27 → tunacode_cli-0.0.28}/src/tunacode/ui/tool_ui.py +0 -0
  73. {tunacode_cli-0.0.27 → tunacode_cli-0.0.28}/src/tunacode/ui/validators.py +0 -0
  74. {tunacode_cli-0.0.27 → tunacode_cli-0.0.28}/src/tunacode/utils/__init__.py +0 -0
  75. {tunacode_cli-0.0.27 → tunacode_cli-0.0.28}/src/tunacode/utils/bm25.py +0 -0
  76. {tunacode_cli-0.0.27 → tunacode_cli-0.0.28}/src/tunacode/utils/diff_utils.py +0 -0
  77. {tunacode_cli-0.0.27 → tunacode_cli-0.0.28}/src/tunacode/utils/file_utils.py +0 -0
  78. {tunacode_cli-0.0.27 → tunacode_cli-0.0.28}/src/tunacode/utils/import_cache.py +0 -0
  79. {tunacode_cli-0.0.27 → tunacode_cli-0.0.28}/src/tunacode/utils/ripgrep.py +0 -0
  80. {tunacode_cli-0.0.27 → tunacode_cli-0.0.28}/src/tunacode/utils/system.py +0 -0
  81. {tunacode_cli-0.0.27 → tunacode_cli-0.0.28}/src/tunacode/utils/text_utils.py +0 -0
  82. {tunacode_cli-0.0.27 → tunacode_cli-0.0.28}/src/tunacode/utils/user_configuration.py +0 -0
  83. {tunacode_cli-0.0.27 → tunacode_cli-0.0.28}/src/tunacode_cli.egg-info/SOURCES.txt +0 -0
  84. {tunacode_cli-0.0.27 → tunacode_cli-0.0.28}/src/tunacode_cli.egg-info/dependency_links.txt +0 -0
  85. {tunacode_cli-0.0.27 → tunacode_cli-0.0.28}/src/tunacode_cli.egg-info/entry_points.txt +0 -0
  86. {tunacode_cli-0.0.27 → tunacode_cli-0.0.28}/src/tunacode_cli.egg-info/requires.txt +0 -0
  87. {tunacode_cli-0.0.27 → tunacode_cli-0.0.28}/src/tunacode_cli.egg-info/top_level.txt +0 -0
  88. {tunacode_cli-0.0.27 → tunacode_cli-0.0.28}/tests/test_agent_initialization.py +0 -0
  89. {tunacode_cli-0.0.27 → tunacode_cli-0.0.28}/tests/test_architect_integration.py +0 -0
  90. {tunacode_cli-0.0.27 → tunacode_cli-0.0.28}/tests/test_architect_simple.py +0 -0
  91. {tunacode_cli-0.0.27 → tunacode_cli-0.0.28}/tests/test_background_manager.py +0 -0
  92. {tunacode_cli-0.0.27 → tunacode_cli-0.0.28}/tests/test_config_setup_async.py +0 -0
  93. {tunacode_cli-0.0.27 → tunacode_cli-0.0.28}/tests/test_fallback_responses.py +0 -0
  94. {tunacode_cli-0.0.27 → tunacode_cli-0.0.28}/tests/test_fast_glob_search.py +0 -0
  95. {tunacode_cli-0.0.27 → tunacode_cli-0.0.28}/tests/test_file_reference_expansion.py +0 -0
  96. {tunacode_cli-0.0.27 → tunacode_cli-0.0.28}/tests/test_json_tool_parsing.py +0 -0
  97. {tunacode_cli-0.0.27 → tunacode_cli-0.0.28}/tests/test_orchestrator_file_references.py +0 -0
  98. {tunacode_cli-0.0.27 → tunacode_cli-0.0.28}/tests/test_orchestrator_import.py +0 -0
  99. {tunacode_cli-0.0.27 → tunacode_cli-0.0.28}/tests/test_orchestrator_planning_visibility.py +0 -0
  100. {tunacode_cli-0.0.27 → tunacode_cli-0.0.28}/tests/test_react_thoughts.py +0 -0
  101. {tunacode_cli-0.0.27 → tunacode_cli-0.0.28}/tests/test_update_command.py +0 -0
@@ -0,0 +1,121 @@
1
+ Metadata-Version: 2.4
2
+ Name: tunacode-cli
3
+ Version: 0.0.28
4
+ Summary: Your agentic CLI developer.
5
+ Author-email: larock22 <noreply@github.com>
6
+ License-Expression: MIT
7
+ Project-URL: Homepage, https://github.com/larock22/tunacode
8
+ Project-URL: Repository, https://github.com/larock22/tunacode
9
+ Keywords: cli,agent,development,automation
10
+ Classifier: Development Status :: 4 - Beta
11
+ Classifier: Intended Audience :: Developers
12
+ Classifier: Programming Language :: Python :: 3
13
+ Classifier: Programming Language :: Python :: 3.10
14
+ Classifier: Programming Language :: Python :: 3.11
15
+ Classifier: Programming Language :: Python :: 3.12
16
+ Classifier: Programming Language :: Python :: 3.13
17
+ Classifier: Topic :: Software Development
18
+ Classifier: Topic :: Utilities
19
+ Requires-Python: >=3.10
20
+ Description-Content-Type: text/markdown
21
+ License-File: LICENSE
22
+ Requires-Dist: typer==0.15.3
23
+ Requires-Dist: prompt_toolkit==3.0.51
24
+ Requires-Dist: pydantic-ai[logfire]==0.2.6
25
+ Requires-Dist: pygments==2.19.1
26
+ Requires-Dist: rich==14.0.0
27
+ Provides-Extra: dev
28
+ Requires-Dist: build; extra == "dev"
29
+ Requires-Dist: black; extra == "dev"
30
+ Requires-Dist: flake8; extra == "dev"
31
+ Requires-Dist: isort; extra == "dev"
32
+ Requires-Dist: pytest; extra == "dev"
33
+ Requires-Dist: pytest-cov; extra == "dev"
34
+ Requires-Dist: textual-dev; extra == "dev"
35
+ Dynamic: license-file
36
+
37
+ # TunaCode
38
+
39
+ <div align="center">
40
+
41
+ [![PyPI version](https://badge.fury.io/py/tunacode-cli.svg)](https://badge.fury.io/py/tunacode-cli)
42
+ [![Python 3.10+](https://img.shields.io/badge/python-3.10+-blue.svg)](https://www.python.org/downloads/)
43
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
44
+
45
+ **AI-powered CLI coding assistant**
46
+
47
+ ![Demo](demo.gif)
48
+
49
+ </div>
50
+
51
+ ---
52
+
53
+ ## Quick Install
54
+
55
+ ```bash
56
+ # Option 1: One-line install (Linux/macOS)
57
+ wget -qO- https://raw.githubusercontent.com/alchemiststudiosDOTai/tunacode/master/scripts/install_linux.sh | bash
58
+
59
+ # Option 2: pip install
60
+ pip install tunacode-cli
61
+ ```
62
+
63
+ ## Configuration
64
+
65
+ Choose your AI provider and set your API key:
66
+
67
+ ```bash
68
+ # OpenAI
69
+ tunacode --model "openai:gpt-4o" --key "sk-your-openai-key"
70
+
71
+ # Anthropic Claude
72
+ tunacode --model "anthropic:claude-3.5-sonnet" --key "sk-ant-your-anthropic-key"
73
+
74
+ # OpenRouter (100+ models)
75
+ tunacode --model "openrouter:openai/gpt-4o" --key "sk-or-your-openrouter-key"
76
+ ```
77
+
78
+ Your config is saved to `~/.config/tunacode.json`
79
+
80
+ ## Start Coding
81
+
82
+ ```bash
83
+ tunacode
84
+ ```
85
+
86
+ ## Basic Commands
87
+
88
+ | Command | Description |
89
+ | ------- | ----------- |
90
+ | `/help` | Show all commands |
91
+ | `/model <provider:name>` | Switch model |
92
+ | `/clear` | Clear message history |
93
+ | `/compact` | Summarize conversation |
94
+ | `/branch <name>` | Create Git branch |
95
+ | `/yolo` | Skip confirmations |
96
+ | `!<command>` | Run shell command |
97
+ | `exit` | Exit TunaCode |
98
+
99
+ ## Safety First
100
+
101
+ ⚠️ **Important**: TunaCode can modify your codebase. Always:
102
+ - Use Git branches before making changes
103
+ - Review file modifications before confirming
104
+ - Keep backups of important work
105
+
106
+ ## Documentation
107
+
108
+ - [**Features**](documentation/FEATURES.md) - All features, tools, and commands
109
+ - [**Advanced Configuration**](documentation/ADVANCED-CONFIG.md) - Provider setup, MCP, customization
110
+ - [**Architecture**](documentation/ARCHITECTURE.md) - Source code organization and design
111
+ - [**Development**](documentation/DEVELOPMENT.md) - Contributing and development setup
112
+
113
+ ## Links
114
+
115
+ - [PyPI Package](https://pypi.org/project/tunacode-cli/)
116
+ - [GitHub Repository](https://github.com/alchemiststudiosDOTai/tunacode)
117
+ - [Report Issues](https://github.com/alchemiststudiosDOTai/tunacode/issues)
118
+
119
+ ---
120
+
121
+ MIT License - see [LICENSE](LICENSE) file
@@ -0,0 +1,85 @@
1
+ # TunaCode
2
+
3
+ <div align="center">
4
+
5
+ [![PyPI version](https://badge.fury.io/py/tunacode-cli.svg)](https://badge.fury.io/py/tunacode-cli)
6
+ [![Python 3.10+](https://img.shields.io/badge/python-3.10+-blue.svg)](https://www.python.org/downloads/)
7
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
8
+
9
+ **AI-powered CLI coding assistant**
10
+
11
+ ![Demo](demo.gif)
12
+
13
+ </div>
14
+
15
+ ---
16
+
17
+ ## Quick Install
18
+
19
+ ```bash
20
+ # Option 1: One-line install (Linux/macOS)
21
+ wget -qO- https://raw.githubusercontent.com/alchemiststudiosDOTai/tunacode/master/scripts/install_linux.sh | bash
22
+
23
+ # Option 2: pip install
24
+ pip install tunacode-cli
25
+ ```
26
+
27
+ ## Configuration
28
+
29
+ Choose your AI provider and set your API key:
30
+
31
+ ```bash
32
+ # OpenAI
33
+ tunacode --model "openai:gpt-4o" --key "sk-your-openai-key"
34
+
35
+ # Anthropic Claude
36
+ tunacode --model "anthropic:claude-3.5-sonnet" --key "sk-ant-your-anthropic-key"
37
+
38
+ # OpenRouter (100+ models)
39
+ tunacode --model "openrouter:openai/gpt-4o" --key "sk-or-your-openrouter-key"
40
+ ```
41
+
42
+ Your config is saved to `~/.config/tunacode.json`
43
+
44
+ ## Start Coding
45
+
46
+ ```bash
47
+ tunacode
48
+ ```
49
+
50
+ ## Basic Commands
51
+
52
+ | Command | Description |
53
+ | ------- | ----------- |
54
+ | `/help` | Show all commands |
55
+ | `/model <provider:name>` | Switch model |
56
+ | `/clear` | Clear message history |
57
+ | `/compact` | Summarize conversation |
58
+ | `/branch <name>` | Create Git branch |
59
+ | `/yolo` | Skip confirmations |
60
+ | `!<command>` | Run shell command |
61
+ | `exit` | Exit TunaCode |
62
+
63
+ ## Safety First
64
+
65
+ ⚠️ **Important**: TunaCode can modify your codebase. Always:
66
+ - Use Git branches before making changes
67
+ - Review file modifications before confirming
68
+ - Keep backups of important work
69
+
70
+ ## Documentation
71
+
72
+ - [**Features**](documentation/FEATURES.md) - All features, tools, and commands
73
+ - [**Advanced Configuration**](documentation/ADVANCED-CONFIG.md) - Provider setup, MCP, customization
74
+ - [**Architecture**](documentation/ARCHITECTURE.md) - Source code organization and design
75
+ - [**Development**](documentation/DEVELOPMENT.md) - Contributing and development setup
76
+
77
+ ## Links
78
+
79
+ - [PyPI Package](https://pypi.org/project/tunacode-cli/)
80
+ - [GitHub Repository](https://github.com/alchemiststudiosDOTai/tunacode)
81
+ - [Report Issues](https://github.com/alchemiststudiosDOTai/tunacode/issues)
82
+
83
+ ---
84
+
85
+ MIT License - see [LICENSE](LICENSE) file
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "tunacode-cli"
7
- version = "0.0.27"
7
+ version = "0.0.28"
8
8
  description = "Your agentic CLI developer."
9
9
  keywords = ["cli", "agent", "development", "automation"]
10
10
  readme = "README.md"
@@ -521,13 +521,92 @@ class CompactCommand(SimpleCommand):
521
521
  await ui.error("Compact command not available - process_request not configured")
522
522
  return
523
523
 
524
- # Get the current agent, create a summary of context, and trim message history
525
- await process_request(
526
- "Summarize the conversation so far", context.state_manager, output=False
524
+ # Count current messages
525
+ original_count = len(context.state_manager.session.messages)
526
+
527
+ # Generate summary with output captured
528
+ summary_prompt = (
529
+ "Summarize the conversation so far in a concise paragraph, "
530
+ "focusing on the main topics discussed and any important context "
531
+ "that should be preserved."
527
532
  )
528
- await ui.success("Context history has been summarized and truncated.")
533
+ result = await process_request(
534
+ summary_prompt,
535
+ context.state_manager,
536
+ output=False, # We'll handle the output ourselves
537
+ )
538
+
539
+ # Extract summary text from result
540
+ summary_text = ""
541
+
542
+ # First try: standard result structure
543
+ if (
544
+ result
545
+ and hasattr(result, "result")
546
+ and result.result
547
+ and hasattr(result.result, "output")
548
+ ):
549
+ summary_text = result.result.output
550
+
551
+ # Second try: check messages for assistant response
552
+ if not summary_text:
553
+ messages = context.state_manager.session.messages
554
+ # Look through new messages in reverse order
555
+ for i in range(len(messages) - 1, original_count - 1, -1):
556
+ msg = messages[i]
557
+ # Handle ModelResponse objects
558
+ if hasattr(msg, "parts") and msg.parts:
559
+ for part in msg.parts:
560
+ if hasattr(part, "content") and part.content:
561
+ content = part.content
562
+ # Skip JSON thought objects
563
+ if content.strip().startswith('{"thought"'):
564
+ lines = content.split("\n")
565
+ # Find the actual summary after the JSON
566
+ for i, line in enumerate(lines):
567
+ if (
568
+ line.strip()
569
+ and not line.strip().startswith("{")
570
+ and not line.strip().endswith("}")
571
+ ):
572
+ summary_text = "\n".join(lines[i:]).strip()
573
+ break
574
+ else:
575
+ summary_text = content
576
+ if summary_text:
577
+ break
578
+ # Handle dict-style messages
579
+ elif isinstance(msg, dict):
580
+ if msg.get("role") == "assistant" and msg.get("content"):
581
+ summary_text = msg["content"]
582
+ break
583
+ # Handle other message types
584
+ elif hasattr(msg, "content") and hasattr(msg, "role"):
585
+ if getattr(msg, "role", None) == "assistant":
586
+ summary_text = msg.content
587
+ break
588
+
589
+ if summary_text:
590
+ break
591
+
592
+ if not summary_text:
593
+ await ui.error("Failed to generate summary - no assistant response found")
594
+ return
595
+
596
+ # Display summary in a formatted panel
597
+ from tunacode.ui import panels
598
+
599
+ await panels.panel("Conversation Summary", summary_text, border_style="cyan")
600
+
601
+ # Show statistics
602
+ await ui.info(f"Current message count: {original_count}")
603
+ await ui.info("After compaction: 3 (summary + last 2 messages)")
604
+
605
+ # Truncate the conversation history
529
606
  context.state_manager.session.messages = context.state_manager.session.messages[-2:]
530
607
 
608
+ await ui.success("Context history has been summarized and truncated.")
609
+
531
610
 
532
611
  class UpdateCommand(SimpleCommand):
533
612
  """Update TunaCode to the latest version."""
@@ -7,7 +7,7 @@ Centralizes all magic strings, UI text, error messages, and application constant
7
7
 
8
8
  # Application info
9
9
  APP_NAME = "TunaCode"
10
- APP_VERSION = "0.0.27"
10
+ APP_VERSION = "0.0.28"
11
11
 
12
12
  # File patterns
13
13
  GUIDE_FILE_PATTERN = "{name}.md"
@@ -24,7 +24,7 @@ BANNER = """[bold cyan]
24
24
  ██║ ╚██████╔╝██║ ╚████║██║ ██║
25
25
  ╚═╝ ╚═════╝ ╚═╝ ╚═══╝╚═╝ ╚═╝
26
26
 
27
- ██████╗ ██████╗ ██████╗ ███████╗
27
+ ██████╗ ██████╗ ██████╗ ███████╗ dev
28
28
  ██╔════╝██╔═══██╗██╔══██╗██╔════╝
29
29
  ██║ ██║ ██║██║ ██║█████╗
30
30
  ██║ ██║ ██║██║ ██║██╔══╝
@@ -0,0 +1,121 @@
1
+ Metadata-Version: 2.4
2
+ Name: tunacode-cli
3
+ Version: 0.0.28
4
+ Summary: Your agentic CLI developer.
5
+ Author-email: larock22 <noreply@github.com>
6
+ License-Expression: MIT
7
+ Project-URL: Homepage, https://github.com/larock22/tunacode
8
+ Project-URL: Repository, https://github.com/larock22/tunacode
9
+ Keywords: cli,agent,development,automation
10
+ Classifier: Development Status :: 4 - Beta
11
+ Classifier: Intended Audience :: Developers
12
+ Classifier: Programming Language :: Python :: 3
13
+ Classifier: Programming Language :: Python :: 3.10
14
+ Classifier: Programming Language :: Python :: 3.11
15
+ Classifier: Programming Language :: Python :: 3.12
16
+ Classifier: Programming Language :: Python :: 3.13
17
+ Classifier: Topic :: Software Development
18
+ Classifier: Topic :: Utilities
19
+ Requires-Python: >=3.10
20
+ Description-Content-Type: text/markdown
21
+ License-File: LICENSE
22
+ Requires-Dist: typer==0.15.3
23
+ Requires-Dist: prompt_toolkit==3.0.51
24
+ Requires-Dist: pydantic-ai[logfire]==0.2.6
25
+ Requires-Dist: pygments==2.19.1
26
+ Requires-Dist: rich==14.0.0
27
+ Provides-Extra: dev
28
+ Requires-Dist: build; extra == "dev"
29
+ Requires-Dist: black; extra == "dev"
30
+ Requires-Dist: flake8; extra == "dev"
31
+ Requires-Dist: isort; extra == "dev"
32
+ Requires-Dist: pytest; extra == "dev"
33
+ Requires-Dist: pytest-cov; extra == "dev"
34
+ Requires-Dist: textual-dev; extra == "dev"
35
+ Dynamic: license-file
36
+
37
+ # TunaCode
38
+
39
+ <div align="center">
40
+
41
+ [![PyPI version](https://badge.fury.io/py/tunacode-cli.svg)](https://badge.fury.io/py/tunacode-cli)
42
+ [![Python 3.10+](https://img.shields.io/badge/python-3.10+-blue.svg)](https://www.python.org/downloads/)
43
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
44
+
45
+ **AI-powered CLI coding assistant**
46
+
47
+ ![Demo](demo.gif)
48
+
49
+ </div>
50
+
51
+ ---
52
+
53
+ ## Quick Install
54
+
55
+ ```bash
56
+ # Option 1: One-line install (Linux/macOS)
57
+ wget -qO- https://raw.githubusercontent.com/alchemiststudiosDOTai/tunacode/master/scripts/install_linux.sh | bash
58
+
59
+ # Option 2: pip install
60
+ pip install tunacode-cli
61
+ ```
62
+
63
+ ## Configuration
64
+
65
+ Choose your AI provider and set your API key:
66
+
67
+ ```bash
68
+ # OpenAI
69
+ tunacode --model "openai:gpt-4o" --key "sk-your-openai-key"
70
+
71
+ # Anthropic Claude
72
+ tunacode --model "anthropic:claude-3.5-sonnet" --key "sk-ant-your-anthropic-key"
73
+
74
+ # OpenRouter (100+ models)
75
+ tunacode --model "openrouter:openai/gpt-4o" --key "sk-or-your-openrouter-key"
76
+ ```
77
+
78
+ Your config is saved to `~/.config/tunacode.json`
79
+
80
+ ## Start Coding
81
+
82
+ ```bash
83
+ tunacode
84
+ ```
85
+
86
+ ## Basic Commands
87
+
88
+ | Command | Description |
89
+ | ------- | ----------- |
90
+ | `/help` | Show all commands |
91
+ | `/model <provider:name>` | Switch model |
92
+ | `/clear` | Clear message history |
93
+ | `/compact` | Summarize conversation |
94
+ | `/branch <name>` | Create Git branch |
95
+ | `/yolo` | Skip confirmations |
96
+ | `!<command>` | Run shell command |
97
+ | `exit` | Exit TunaCode |
98
+
99
+ ## Safety First
100
+
101
+ ⚠️ **Important**: TunaCode can modify your codebase. Always:
102
+ - Use Git branches before making changes
103
+ - Review file modifications before confirming
104
+ - Keep backups of important work
105
+
106
+ ## Documentation
107
+
108
+ - [**Features**](documentation/FEATURES.md) - All features, tools, and commands
109
+ - [**Advanced Configuration**](documentation/ADVANCED-CONFIG.md) - Provider setup, MCP, customization
110
+ - [**Architecture**](documentation/ARCHITECTURE.md) - Source code organization and design
111
+ - [**Development**](documentation/DEVELOPMENT.md) - Contributing and development setup
112
+
113
+ ## Links
114
+
115
+ - [PyPI Package](https://pypi.org/project/tunacode-cli/)
116
+ - [GitHub Repository](https://github.com/alchemiststudiosDOTai/tunacode)
117
+ - [Report Issues](https://github.com/alchemiststudiosDOTai/tunacode/issues)
118
+
119
+ ---
120
+
121
+ MIT License - see [LICENSE](LICENSE) file