tunacode-cli 0.0.70__py3-none-any.whl → 0.0.78.6__py3-none-any.whl

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 (90) hide show
  1. tunacode/cli/commands/__init__.py +0 -2
  2. tunacode/cli/commands/implementations/__init__.py +0 -3
  3. tunacode/cli/commands/implementations/debug.py +2 -2
  4. tunacode/cli/commands/implementations/development.py +10 -8
  5. tunacode/cli/commands/implementations/model.py +357 -29
  6. tunacode/cli/commands/implementations/system.py +3 -2
  7. tunacode/cli/commands/implementations/template.py +0 -2
  8. tunacode/cli/commands/registry.py +8 -7
  9. tunacode/cli/commands/slash/loader.py +2 -1
  10. tunacode/cli/commands/slash/validator.py +2 -1
  11. tunacode/cli/main.py +19 -1
  12. tunacode/cli/repl.py +90 -229
  13. tunacode/cli/repl_components/command_parser.py +2 -1
  14. tunacode/cli/repl_components/error_recovery.py +8 -5
  15. tunacode/cli/repl_components/output_display.py +1 -10
  16. tunacode/cli/repl_components/tool_executor.py +1 -13
  17. tunacode/configuration/defaults.py +2 -2
  18. tunacode/configuration/key_descriptions.py +284 -0
  19. tunacode/configuration/settings.py +0 -1
  20. tunacode/constants.py +6 -42
  21. tunacode/core/agents/__init__.py +43 -2
  22. tunacode/core/agents/agent_components/__init__.py +7 -0
  23. tunacode/core/agents/agent_components/agent_config.py +162 -158
  24. tunacode/core/agents/agent_components/agent_helpers.py +31 -2
  25. tunacode/core/agents/agent_components/node_processor.py +180 -146
  26. tunacode/core/agents/agent_components/response_state.py +123 -6
  27. tunacode/core/agents/agent_components/state_transition.py +116 -0
  28. tunacode/core/agents/agent_components/streaming.py +296 -0
  29. tunacode/core/agents/agent_components/task_completion.py +19 -6
  30. tunacode/core/agents/agent_components/tool_buffer.py +21 -1
  31. tunacode/core/agents/agent_components/tool_executor.py +10 -0
  32. tunacode/core/agents/main.py +522 -370
  33. tunacode/core/agents/main_legact.py +538 -0
  34. tunacode/core/agents/prompts.py +66 -0
  35. tunacode/core/agents/utils.py +29 -122
  36. tunacode/core/setup/__init__.py +0 -2
  37. tunacode/core/setup/config_setup.py +88 -227
  38. tunacode/core/setup/config_wizard.py +230 -0
  39. tunacode/core/setup/coordinator.py +2 -1
  40. tunacode/core/state.py +16 -64
  41. tunacode/core/token_usage/usage_tracker.py +3 -1
  42. tunacode/core/tool_authorization.py +352 -0
  43. tunacode/core/tool_handler.py +67 -60
  44. tunacode/prompts/system.xml +751 -0
  45. tunacode/services/mcp.py +97 -1
  46. tunacode/setup.py +0 -23
  47. tunacode/tools/base.py +54 -1
  48. tunacode/tools/bash.py +14 -0
  49. tunacode/tools/glob.py +4 -2
  50. tunacode/tools/grep.py +7 -17
  51. tunacode/tools/prompts/glob_prompt.xml +1 -1
  52. tunacode/tools/prompts/grep_prompt.xml +1 -0
  53. tunacode/tools/prompts/list_dir_prompt.xml +1 -1
  54. tunacode/tools/prompts/react_prompt.xml +23 -0
  55. tunacode/tools/prompts/read_file_prompt.xml +1 -1
  56. tunacode/tools/react.py +153 -0
  57. tunacode/tools/run_command.py +15 -0
  58. tunacode/types.py +14 -79
  59. tunacode/ui/completers.py +434 -50
  60. tunacode/ui/config_dashboard.py +585 -0
  61. tunacode/ui/console.py +63 -11
  62. tunacode/ui/input.py +8 -3
  63. tunacode/ui/keybindings.py +0 -18
  64. tunacode/ui/model_selector.py +395 -0
  65. tunacode/ui/output.py +40 -19
  66. tunacode/ui/panels.py +173 -49
  67. tunacode/ui/path_heuristics.py +91 -0
  68. tunacode/ui/prompt_manager.py +1 -20
  69. tunacode/ui/tool_ui.py +30 -8
  70. tunacode/utils/api_key_validation.py +93 -0
  71. tunacode/utils/config_comparator.py +340 -0
  72. tunacode/utils/models_registry.py +593 -0
  73. tunacode/utils/text_utils.py +18 -1
  74. {tunacode_cli-0.0.70.dist-info → tunacode_cli-0.0.78.6.dist-info}/METADATA +80 -12
  75. {tunacode_cli-0.0.70.dist-info → tunacode_cli-0.0.78.6.dist-info}/RECORD +78 -74
  76. tunacode/cli/commands/implementations/plan.py +0 -50
  77. tunacode/cli/commands/implementations/todo.py +0 -217
  78. tunacode/context.py +0 -71
  79. tunacode/core/setup/git_safety_setup.py +0 -186
  80. tunacode/prompts/system.md +0 -359
  81. tunacode/prompts/system.md.bak +0 -487
  82. tunacode/tools/exit_plan_mode.py +0 -273
  83. tunacode/tools/present_plan.py +0 -288
  84. tunacode/tools/prompts/exit_plan_mode_prompt.xml +0 -25
  85. tunacode/tools/prompts/present_plan_prompt.xml +0 -20
  86. tunacode/tools/prompts/todo_prompt.xml +0 -96
  87. tunacode/tools/todo.py +0 -456
  88. {tunacode_cli-0.0.70.dist-info → tunacode_cli-0.0.78.6.dist-info}/WHEEL +0 -0
  89. {tunacode_cli-0.0.70.dist-info → tunacode_cli-0.0.78.6.dist-info}/entry_points.txt +0 -0
  90. {tunacode_cli-0.0.70.dist-info → tunacode_cli-0.0.78.6.dist-info}/licenses/LICENSE +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tunacode-cli
3
- Version: 0.0.70
3
+ Version: 0.0.78.6
4
4
  Summary: Your agentic CLI developer.
5
5
  Project-URL: Homepage, https://tunacode.xyz/
6
6
  Project-URL: Repository, https://github.com/alchemiststudiosDOTai/tunacode
@@ -20,13 +20,15 @@ Classifier: Programming Language :: Python :: 3.13
20
20
  Classifier: Topic :: Software Development
21
21
  Classifier: Topic :: Utilities
22
22
  Requires-Python: <3.14,>=3.10
23
- Requires-Dist: click<8.2.0,>=8.0.0
23
+ Requires-Dist: click<9.0.0,>=8.3.1
24
24
  Requires-Dist: defusedxml
25
- Requires-Dist: prompt-toolkit==3.0.51
26
- Requires-Dist: pydantic-ai[logfire]==0.2.6
27
- Requires-Dist: pygments==2.19.1
28
- Requires-Dist: rich==14.0.0
29
- Requires-Dist: tiktoken>=0.5.2
25
+ Requires-Dist: prompt-toolkit<4.0.0,>=3.0.52
26
+ Requires-Dist: pydantic-ai<2.0.0,>=1.18.0
27
+ Requires-Dist: pydantic<3.0.0,>=2.12.4
28
+ Requires-Dist: pygments<3.0.0,>=2.19.2
29
+ Requires-Dist: rich<15.0.0,>=14.2.0
30
+ Requires-Dist: textual
31
+ Requires-Dist: tiktoken<1.0.0,>=0.12.0
30
32
  Requires-Dist: typer<0.10.0,>=0.9.0
31
33
  Provides-Extra: dev
32
34
  Requires-Dist: autoflake>=2.0.0; extra == 'dev'
@@ -69,12 +71,37 @@ Description-Content-Type: text/markdown
69
71
  # Option 1: One-line install (Linux/macOS)
70
72
  wget -qO- https://raw.githubusercontent.com/alchemiststudiosDOTai/tunacode/master/scripts/install_linux.sh | bash
71
73
 
72
- # Option 2: pip install
74
+ # Option 2: UV install (recommended)
75
+ uv tool install tunacode-cli
76
+
77
+ # Option 3: pip install
73
78
  pip install tunacode-cli
74
79
  ```
75
80
 
76
81
  For detailed installation and configuration instructions, see the [**Getting Started Guide**](documentation/user/getting-started.md).
77
82
 
83
+ ## Quickstart
84
+
85
+ ```bash
86
+ # 1) Install (choose one)
87
+ uv tool install tunacode-cli # recommended
88
+ # or: pip install tunacode-cli
89
+
90
+ # 2) Launch the CLI
91
+ tunacode --wizard # guided setup (enter an API key, pick a model)
92
+
93
+ # 3) Try common commands in the REPL
94
+ /help # see commands
95
+ /model # explore models and set a default
96
+ /plan # enter read-only Plan Mode
97
+ ```
98
+
99
+ Tip: You can also skip the wizard and set everything via flags:
100
+
101
+ ```bash
102
+ tunacode --model openai:gpt-4.1 --key sk-your-key
103
+ ```
104
+
78
105
  ## Development Installation
79
106
 
80
107
  For contributors and developers who want to work on TunaCode:
@@ -84,23 +111,64 @@ For contributors and developers who want to work on TunaCode:
84
111
  git clone https://github.com/alchemiststudiosDOTai/tunacode.git
85
112
  cd tunacode
86
113
 
87
- # Quick setup (recommended)
114
+ # Quick setup (recommended) - uses UV automatically if available
88
115
  ./scripts/setup_dev_env.sh
89
116
 
90
- # Or manual setup
117
+ # Or manual setup with UV (recommended)
118
+ uv venv
119
+ source .venv/bin/activate # On Windows: .venv\Scripts\activate
120
+ uv pip install -e ".[dev]"
121
+
122
+ # Alternative: traditional setup
91
123
  python3 -m venv venv
92
124
  source venv/bin/activate # On Windows: venv\Scripts\activate
93
125
  pip install -e ".[dev]"
94
126
 
95
127
  # Verify installation
96
- python -m tunacode --version
128
+ tunacode --version
97
129
  ```
98
130
 
99
131
  See the [Hatch Build System Guide](documentation/development/hatch-build-system.md) for detailed instructions on the development environment.
100
132
 
101
133
  ## Configuration
102
134
 
103
- Choose your AI provider and set your API key. For more details, see the [Configuration Section](documentation/user/getting-started.md#2-configuration) in the Getting Started Guide.
135
+ Choose your AI provider and set your API key. For more details, see the [Configuration Section](documentation/user/getting-started.md#2-configuration) in the Getting Started Guide. For local models (LM Studio, Ollama, etc.), see the [Local Models Setup Guide](documentation/configuration/local-models.md).
136
+
137
+ ### New: Enhanced Model Selection
138
+
139
+ TunaCode now automatically saves your model selection for future sessions. When you choose a model using `/model <provider:name>`, it will be remembered across restarts.
140
+
141
+ **If you encounter API key errors**, you can manually create a configuration file that matches the current schema:
142
+
143
+ ```bash
144
+ # Create the config file
145
+ cat > ~/.config/tunacode.json << 'EOF'
146
+ {
147
+ "default_model": "openai:gpt-4.1",
148
+ "env": {
149
+ "OPENAI_API_KEY": "your-openai-api-key-here",
150
+ "ANTHROPIC_API_KEY": "",
151
+ "GEMINI_API_KEY": "",
152
+ "OPENROUTER_API_KEY": ""
153
+ },
154
+ "settings": {
155
+ "enable_streaming": true,
156
+ "max_iterations": 40,
157
+ "context_window_size": 200000
158
+ },
159
+ "mcpServers": {}
160
+ }
161
+ EOF
162
+ ```
163
+
164
+ Replace the model and API key with your preferred provider and credentials. Examples:
165
+ - `openai:gpt-4.1` (requires OPENAI_API_KEY)
166
+ - `anthropic:claude-4-sonnet-20250522` (requires ANTHROPIC_API_KEY)
167
+ - `google:gemini-2.5-pro` (requires GEMINI_API_KEY)
168
+
169
+ ### ⚠️ Important Notice
170
+
171
+ I apologize for any recent issues with model selection and configuration. I'm actively working to fix these problems and improve the overall stability of TunaCode. Your patience and feedback are greatly appreciated as I work to make the tool more reliable.
104
172
 
105
173
  ### Recommended Models
106
174
 
@@ -1,61 +1,64 @@
1
1
  tunacode/__init__.py,sha256=yUul8igNYMfUrHnYfioIGAqvrH8b5BKiO_pt1wVnmd0,119
2
- tunacode/constants.py,sha256=fJ8A1kkzW2-5y4fi0kNz80jmJZflq0AGxW_Vdzn7wzE,6100
3
- tunacode/context.py,sha256=YtfRjUiqsSkk2k9Nn_pjb_m-AXyh6XcOBOJWtFI0wVw,2405
2
+ tunacode/constants.py,sha256=r08u5GRo9jK_ySVI4g_itxnvNs09kRVrrnazwavAVes,5151
4
3
  tunacode/exceptions.py,sha256=m80njR-LqBXhFAEOPqCE7N2QPU4Fkjlf_f6CWKO0_Is,8479
5
4
  tunacode/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
- tunacode/setup.py,sha256=F1E4zHVnbByu_Uo6AhCJ-W-lIGF_gV6kB84HLAGLmVY,2103
7
- tunacode/types.py,sha256=Q3PeHB01qeaKteGDQf8Byx4q1XLSXVnNDG6D-WjWsBk,10157
5
+ tunacode/setup.py,sha256=m8-198OY5Yp9NSR3OzS_rWeFQPD83ex2UCazDarjA04,1341
6
+ tunacode/types.py,sha256=XllBT4miOtpz4maY5Q6qWoWJLhZB4ksVuMEWDtPlGps,8366
8
7
  tunacode/cli/__init__.py,sha256=zgs0UbAck8hfvhYsWhWOfBe5oK09ug2De1r4RuQZREA,55
9
- tunacode/cli/main.py,sha256=H4g9ilS2KmCP37lQuIOIcSG2NGGXXgj-lUU6MdfLrmI,3127
10
- tunacode/cli/repl.py,sha256=jhKMAff4kxt5f2ONacPao2wgcZvNr2BRBZdITh5yDro,22480
11
- tunacode/cli/commands/__init__.py,sha256=J7MZofTaSgspAKP64OavPukj4l53qvkv_-sCfYEUi10,1794
8
+ tunacode/cli/main.py,sha256=cRqSto2PNYipgGxOX5Q4zabsYR0YCwbaVmGjAx0FuTA,3699
9
+ tunacode/cli/repl.py,sha256=L4dtH7j9io9SKzD7S8heFC41bgTSA5NKR2iaVQLA8U4,17315
10
+ tunacode/cli/commands/__init__.py,sha256=XmDNszfG0AnLK46P6OHP8LR6khKNYahXfqgmkSJt6wc,1758
12
11
  tunacode/cli/commands/base.py,sha256=Ge_lNQA-GDfcb1Ap1oznCH3UrifBiHH3bA9DNL-tCDw,2519
13
- tunacode/cli/commands/registry.py,sha256=oAppbaOb-2blVo7Akthu6dbR9UFvXom6wf8m52qftpU,14962
12
+ tunacode/cli/commands/registry.py,sha256=WMmZCK5rMDrtW9cjKbK51GDquvE-dfO_m36XzFVdwcA,14906
14
13
  tunacode/cli/commands/template_shortcut.py,sha256=ApYTPkDVBRaLxa7rWaPrsGcJdkR7eg09k18KyTjYg_E,3447
15
- tunacode/cli/commands/implementations/__init__.py,sha256=dFczjIqCJTPrsSycD6PZYnp5_cIEQEGgKr0Y14MRGjs,1088
14
+ tunacode/cli/commands/implementations/__init__.py,sha256=QLOS4S2mXxRH65bIXcX3r4IMek_aVaRNJMK1wW0oN2I,1019
16
15
  tunacode/cli/commands/implementations/command_reload.py,sha256=GyjeKvJbgE4VYkaasGajspdk9wffumZMNLzfCUeNazM,1555
17
16
  tunacode/cli/commands/implementations/conversation.py,sha256=ZijCNaRi1p5v1Q-IaVHtU2_BripSW3JCVKTtqFkOUjg,4676
18
- tunacode/cli/commands/implementations/debug.py,sha256=ornvceGF4GbJd2OJXnnT9i9KpHBAMJUYNs9wNhzViGM,6764
19
- tunacode/cli/commands/implementations/development.py,sha256=I8jHgYY3VgjTU8its0D0ysruuVqKbNTBur0JjPIUIZA,2844
20
- tunacode/cli/commands/implementations/model.py,sha256=uthx6IX9KwgwywNTDklkJpqCbaTX9h1_p-eVmqL73WQ,2245
21
- tunacode/cli/commands/implementations/plan.py,sha256=iZtvdGPqvGqMr8_lYil8_8NOL1iyc54Bxtb0gb9VOnw,1825
17
+ tunacode/cli/commands/implementations/debug.py,sha256=w2fUgqFB4ipBCmNotbvaOOVW4OiCwJM6MXNWlyKyoqs,6754
18
+ tunacode/cli/commands/implementations/development.py,sha256=arMtmRX8Nw7irbeV7xCbkma5iEOp5r9sS7OQ26KItYk,2839
19
+ tunacode/cli/commands/implementations/model.py,sha256=dFRmMlcN78TdGMFX-B2OPyoWqOVQL72XC8ayPyUQmpA,16166
22
20
  tunacode/cli/commands/implementations/quickstart.py,sha256=53H7ubYMGMgmCeYCs6o_F91Q4pd3Ky008lCU4GPuRP8,1363
23
- tunacode/cli/commands/implementations/system.py,sha256=2bTbJsiniac11XjGWZU4Cd6Cpug9C2-HtlmLFCgK20I,12009
24
- tunacode/cli/commands/implementations/template.py,sha256=YeFOjbKKfPswPCHPvlDUwXvg6J0MesyAyVsujiIgPbU,5482
25
- tunacode/cli/commands/implementations/todo.py,sha256=Dtz5bgcuK2VXGPWEBBZQgnWUMYkRXNzTGf_qkVPLF2U,8125
21
+ tunacode/cli/commands/implementations/system.py,sha256=EV3-_bvygRWdVRAIUqm5pGKIZ8uKWE2DcHWrKX9-I0w,12023
22
+ tunacode/cli/commands/implementations/template.py,sha256=Akm4kz0sQCx3n0KWQmACQrVyvTLhavC9I2Eg9SRjNu8,5394
26
23
  tunacode/cli/commands/slash/__init__.py,sha256=O5EiITHZJgzIciKA_nylj5PyOZNvXE9jPmOHioDk3cU,824
27
24
  tunacode/cli/commands/slash/command.py,sha256=ewtyLJNAW0cJLwpSiycyVH0LpqsR3xVqCBhSym7d_7w,6329
28
- tunacode/cli/commands/slash/loader.py,sha256=j2gQK4WTttW8GMvSWusrY7s3LYx5Gro_9t4j6vxFwDU,5616
25
+ tunacode/cli/commands/slash/loader.py,sha256=i37m_reKbcezK405-J-OmnpyBzV_QXoZB3Oa_bPw8kY,5632
29
26
  tunacode/cli/commands/slash/processor.py,sha256=JQ_sE9Vu7LAdSnUmMz-hBPfD8E60aIHPNeaFMn7PQjM,11751
30
27
  tunacode/cli/commands/slash/types.py,sha256=v52tDX7T5I3nEETakloXLQzJqWXSyxcM1K5FbFNdtzw,2375
31
- tunacode/cli/commands/slash/validator.py,sha256=NF6u4n_VFoNiBRlErzNRA1iTG11bScizil3PhzpRSb4,13949
28
+ tunacode/cli/commands/slash/validator.py,sha256=UKPE4dijq6VbhcyKcAnuij7Gw1IkvHUijheeiWWEer0,13985
32
29
  tunacode/cli/repl_components/__init__.py,sha256=5ZjPJ3yUvZ5x6Vg9EYJ03-tdxfEEdmfradCmwSlVY3E,334
33
- tunacode/cli/repl_components/command_parser.py,sha256=BU_3h4aJ4MNQ0UU6_ulvK7NRTlC417soZkGGzMFy6-s,2368
34
- tunacode/cli/repl_components/error_recovery.py,sha256=59DCv8PkWg3ZOjaNPkWmYw0u68JpPMIxUMikMiW4TjY,6176
35
- tunacode/cli/repl_components/output_display.py,sha256=uzse2bhxSyCWnJD0Ni5lwnp0BmYDAr1tZbnlj3-x6ro,1484
36
- tunacode/cli/repl_components/tool_executor.py,sha256=i6KB_qXaFlbdv90_3xj3TwL6alFd_JAbSS0Cdln9zfU,3767
30
+ tunacode/cli/repl_components/command_parser.py,sha256=iRSs4K6aKjKstNNNCYQoGWd3hN1FHDrQrOa7uB9z0Z4,2376
31
+ tunacode/cli/repl_components/error_recovery.py,sha256=1Zm9W_AE9WKfv8n5LnTA_myAu9qotRPEVt72_hnaSq4,6222
32
+ tunacode/cli/repl_components/output_display.py,sha256=7a5CIUjm99RUyK7jj1taEySI1lKlcQxa3T3DzKUa4Go,1107
33
+ tunacode/cli/repl_components/tool_executor.py,sha256=dbvrJFfL1i2kf2XpPXhvCgbTKVSyCAA110brA2ze5B4,3142
37
34
  tunacode/configuration/__init__.py,sha256=MbVXy8bGu0yKehzgdgZ_mfWlYGvIdb1dY2Ly75nfuPE,17
38
- tunacode/configuration/defaults.py,sha256=_nT5d9Mi80SiVnWBcDCI3VoB8L5CoGmvnzWlM4k2ECY,1341
35
+ tunacode/configuration/defaults.py,sha256=eFUDD73tTWa3HM320BEn0VWM-XuDKW7d6m32qTK2eRI,1313
36
+ tunacode/configuration/key_descriptions.py,sha256=tvFhdA98RgRoE-Xsb5gfuzB3HSl_GY568Q5vg0C8s2A,11249
39
37
  tunacode/configuration/models.py,sha256=buH8ZquvcYI3OQBDIZeJ08cu00rSCeNABtUwl3VQS0E,4103
40
- tunacode/configuration/settings.py,sha256=9wtIWBlLhW_ZBlLx-GA4XDfVZyGj2Gs6Zk49vk-nHq0,1047
38
+ tunacode/configuration/settings.py,sha256=zLeTmntMY94M87aD9xPNhS4yc8yApdPWltw6u4slP2Q,1020
41
39
  tunacode/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
42
40
  tunacode/core/code_index.py,sha256=2qxEn2eTIegV4F_gLeZO5lAOv8mkf4Y_t21whZ9F2Fk,17370
43
- tunacode/core/state.py,sha256=aksE0mM2xG-1CkLmpi8cu1n1SOMfqpMuqMBciEVShf0,7893
44
- tunacode/core/tool_handler.py,sha256=42yUfnq5jgk-0LK93JoJgtsXfVDTf-7hNXyKEfH2FM0,3626
45
- tunacode/core/agents/__init__.py,sha256=UUJiPYb91arwziSpjd7vIk7XNGA_4HQbsOIbskSqevA,149
46
- tunacode/core/agents/main.py,sha256=8K5f_-gXm3VyAMM8FqH2ucZBjKnVJ8kcqEpov-5qk-c,18244
47
- tunacode/core/agents/utils.py,sha256=ja6Dwq3AVX6QTddmG2uY5ENxFxr5uzc4TS9OjommXp0,14535
48
- tunacode/core/agents/agent_components/__init__.py,sha256=CL4XH47T6v_iYy7xCPYjyiEFNOFnkcKwbTuKw6IjKTs,1474
49
- tunacode/core/agents/agent_components/agent_config.py,sha256=lkq6-6p8AHVZuoebUrFXtZgmBJipK8CSD2JaBA0Am_A,11845
50
- tunacode/core/agents/agent_components/agent_helpers.py,sha256=-jeihh0oWZ4VZ81GUhpYFQ2v8EGw9j9WU81swUjTAvk,8276
41
+ tunacode/core/state.py,sha256=esGjB3zCfdwqcZzurH7oxAC5Klkd0gskkAgY3fviCDU,6367
42
+ tunacode/core/tool_authorization.py,sha256=VBPNCWxoxlq_dEuo8EfkQoSwCJqCdn0vOIu9spB82v4,11655
43
+ tunacode/core/tool_handler.py,sha256=PzLg3VYtIGj9dnyJ4kCfCwyncmuxzsMgPwQqn2jmzqI,4444
44
+ tunacode/core/agents/__init__.py,sha256=HmrifkzSUykt4hcL-SeZUgEshYVSZBxLDUSgaS81-A8,1107
45
+ tunacode/core/agents/main.py,sha256=H3PHfQCvDYazlu-hqzlmeEUE-uImjSf1aqYcBmb0vQo,23314
46
+ tunacode/core/agents/main_legact.py,sha256=5p5k7Em1_dH5ZoytWEhPHYKx3Nhb71KoE_TN-mwOfOE,20856
47
+ tunacode/core/agents/prompts.py,sha256=Eps3qQm8zdgPnyYOvRYwINMGVa71ttuqGlgtH17-3ag,2357
48
+ tunacode/core/agents/utils.py,sha256=jqR7xIeeqj45SbFjUcIBi1-f10Af8iKwM2Abezvb0II,10607
49
+ tunacode/core/agents/agent_components/__init__.py,sha256=65V5ijSKen0F0zLvUO3AkZJmCrocSW3lEbqNPrHqxoc,1706
50
+ tunacode/core/agents/agent_components/agent_config.py,sha256=9mjZlRVUTSJh7Y2fbBmyLrojBHfSGpqwQ4ES5-C6ozc,11872
51
+ tunacode/core/agents/agent_components/agent_helpers.py,sha256=pfoP_pX4N1g950UDcLkZS-FSq5at3IvNDZhJStt7IWk,9157
51
52
  tunacode/core/agents/agent_components/json_tool_parser.py,sha256=HuyNT0rs-ppx_gLAI2e0XMVGbR_F0WXZfP3sx38VoMg,3447
52
53
  tunacode/core/agents/agent_components/message_handler.py,sha256=KJGOtb9VhumgZpxxwO45HrKLhU9_MwuoWRsSQwJviNU,3704
53
- tunacode/core/agents/agent_components/node_processor.py,sha256=BAVbXy17sfW3i4LCTdJ9_MSNc7j6qz1bP3_6IhprIW4,20912
54
- tunacode/core/agents/agent_components/response_state.py,sha256=_C2loLeyZHMFHwjGny4h0dI02UoFJcJAVaabkh9H9JQ,343
54
+ tunacode/core/agents/agent_components/node_processor.py,sha256=2DqM__dU2bNlcrCS7ptD05a3xI7mR4GURCj5DzofuiY,21533
55
+ tunacode/core/agents/agent_components/response_state.py,sha256=XHaJrkn4kWecVM008kWf_nEAkoR2UPYfqaH-azdzhj8,5061
55
56
  tunacode/core/agents/agent_components/result_wrapper.py,sha256=9CFK0wpsfZx2WT4PBHfkSv22GxL1gAQuUYVMlmYtCJU,1761
56
- tunacode/core/agents/agent_components/task_completion.py,sha256=BSnjNEFbxlzgzcXdjdTVGeCr1RpCiAaEp_D7f5FXa5Q,819
57
- tunacode/core/agents/agent_components/tool_buffer.py,sha256=09FNtC6zTjiJOL_2CY0b7KDgwdNayGPV6jbENKH6Unc,766
58
- tunacode/core/agents/agent_components/tool_executor.py,sha256=LlzDwgSLLawwPZQqJ4vfLf-16nhwIiuN8zm8iCeBf1Y,1849
57
+ tunacode/core/agents/agent_components/state_transition.py,sha256=uyvLJriexosBDQIrxbVDLR_luvXAMG6tnDsX10mbZcI,4077
58
+ tunacode/core/agents/agent_components/streaming.py,sha256=hVtxxZTkJZPSqlQxi5twRoWz0FXRApQ8pG83zRNSHSU,15207
59
+ tunacode/core/agents/agent_components/task_completion.py,sha256=iLzwspVDtkXTJNQFk8YNSbb6wzMWEelmSMwSnzLIzbk,1193
60
+ tunacode/core/agents/agent_components/tool_buffer.py,sha256=h9PeP9glW_rlGKElH-JD_CPUVhS3tS4AUwZSn4oINzg,1520
61
+ tunacode/core/agents/agent_components/tool_executor.py,sha256=MMGjRmjBnuyYnKh64fMTAQJujIEgDizQFMUdNSbP0Cc,2401
59
62
  tunacode/core/agents/agent_components/truncation_checker.py,sha256=XbJ3wwtdC4NhgIMIvFR0z_cfNnYMkiYAZo9zGDBPU8Y,2685
60
63
  tunacode/core/background/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
61
64
  tunacode/core/background/manager.py,sha256=AxNcuuE7T2pqeI2lLIGJgaS_jEw60YzBfZY9EOY54fc,1160
@@ -65,35 +68,32 @@ tunacode/core/logging/config.py,sha256=bhJ6KYrEliKC5BehXKXZHHPBJUBX0g5O3uxbr8qUK
65
68
  tunacode/core/logging/formatters.py,sha256=uWx-M0jSvsAVo5JVdCK1VIVawXNONjJ2CvMwPuuUTg8,1236
66
69
  tunacode/core/logging/handlers.py,sha256=lkLczpcI6kSammSdjrCccosGMrRdcAA_3UmuTOiPnxg,3788
67
70
  tunacode/core/logging/logger.py,sha256=9RjRuX0GoUojRJ8WnJGQPFdXiluiJMCoFmvc8xEioB8,142
68
- tunacode/core/setup/__init__.py,sha256=seoWYpRonptxNyApapS-yGz4o3jTj8vLsRPCTUO4siM,439
71
+ tunacode/core/setup/__init__.py,sha256=edzZ5tdWPdokPaOuFgYGEUGY_Fcn6bcWSiDOhGGZTBc,372
69
72
  tunacode/core/setup/agent_setup.py,sha256=tpOIW85C6o1m8pwAZQBIMKxKIyBUOpHHn4JJmDBFH3Q,1403
70
73
  tunacode/core/setup/base.py,sha256=FMjBQQS_q3KOxHqfg7NJGmKq-1nxC40htiPZprzTu7I,970
71
- tunacode/core/setup/config_setup.py,sha256=varmg7pLY9jw_5cnpbuL53_S6Koakb49mpObMU7UZsc,24418
72
- tunacode/core/setup/coordinator.py,sha256=5ZhD4rHUrW0RIdGnjmoK4wCvqlNGcXal4Qwev4s039U,2393
74
+ tunacode/core/setup/config_setup.py,sha256=lzVsnXZ6jnrD1tasjd4BDPFrSrFNcreZXEf3Twp_re0,19192
75
+ tunacode/core/setup/config_wizard.py,sha256=0QnJk6UzdXhfNWlu_YgndLP5oMyxJEt-zzGdQaRFjnU,9376
76
+ tunacode/core/setup/coordinator.py,sha256=_tGi5QuV00IJ4QK8mYfpaHZn0esB6CWCuiTE55zhSuw,2407
73
77
  tunacode/core/setup/environment_setup.py,sha256=n3IrObKEynHZSwtUJ1FddMg2C4sHz7ca42awemImV8s,2225
74
- tunacode/core/setup/git_safety_setup.py,sha256=Htt8A4BAn7F4DbjhNu_SO01zjwaRQ3wMv-vZujE1-JA,7328
75
78
  tunacode/core/setup/template_setup.py,sha256=0lDGhNVCvGN7ykqHnl3pj4CONH3I2PvMzkmIZibfSoc,2640
76
79
  tunacode/core/token_usage/api_response_parser.py,sha256=plLltHg4zGVzxjv3MFj45bbd-NOJeT_v3P0Ki4zlvn4,1831
77
80
  tunacode/core/token_usage/cost_calculator.py,sha256=RjO-O0JENBuGOrWP7QgBZlZxeXC-PAIr8tj_9p_BxOU,2058
78
- tunacode/core/token_usage/usage_tracker.py,sha256=YUCnF-712nLrbtEvFrsC-VZuYjKUCz3hf-_do6GKSDA,6016
79
- tunacode/prompts/system.md,sha256=DosWJgUDkE33mSQoLNz_R5S2CZ_s06yZ5O0lpC1pZtY,10788
80
- tunacode/prompts/system.md.bak,sha256=q0gbk_-pvQlNtZBonRo4gNILkKStqNxgDN0ZEwzC3E4,17541
81
+ tunacode/core/token_usage/usage_tracker.py,sha256=lF-ehx-UQnorS4T1Xxa06GGRRjpaEnfmZl5LukGW9LY,6068
82
+ tunacode/prompts/system.xml,sha256=CdUctusc2qBoTYF3zWAzXv9djrqAZcj68-eyT3FF714,25122
81
83
  tunacode/services/__init__.py,sha256=w_E8QK6RnvKSvU866eDe8BCRV26rAm4d3R-Yg06OWCU,19
82
- tunacode/services/mcp.py,sha256=quO13skECUGt-4QE2NkWk6_8qhmZ5qjgibvw8tUOt-4,3761
84
+ tunacode/services/mcp.py,sha256=AXDbEEDiVA6VhcGUmSm4uo7cBk-2qBHp-j6r57Cjt3k,7573
83
85
  tunacode/templates/__init__.py,sha256=ssEOPrPjyCywtKI-QFcoqcWhMjlfI5TbI8Ip0_wyqGM,241
84
86
  tunacode/templates/loader.py,sha256=6_Dk4jX47_GKUAWxlHG2Mzkl9lkXFUOiAdlcJqb6rBA,6765
85
87
  tunacode/tools/__init__.py,sha256=ECBuUWWF1JjHW42CCceaPKgVTQyuljbz3RlhuA2fe2s,314
86
- tunacode/tools/base.py,sha256=jQz_rz2rNZrKo2vZtyArwiHCMdAaqRYJGYtSZ27nxcU,10711
87
- tunacode/tools/bash.py,sha256=fEjI5Vm7yqQiOzc83kFzu1n4zAPiWLQNHZYY-ORNV4Q,12437
88
- tunacode/tools/exit_plan_mode.py,sha256=DOl_8CsY7h9N-SuCg2YgMjp8eEMuO5I8Tv8XjoJcTJ0,10597
89
- tunacode/tools/glob.py,sha256=_uAMV5cloRP0AQMbm7h_bKeqfhe7KFoBx9gfYls5ZzE,22956
90
- tunacode/tools/grep.py,sha256=nKKpJjr2uupErB2KAUgTog3ZqC8oKiho5qkKeFvpY70,22178
88
+ tunacode/tools/base.py,sha256=PqXBYbXncGoUDWrLPwMxLJiM0CLFqGmieIMBnoi3TL8,12767
89
+ tunacode/tools/bash.py,sha256=3fQgeJSm0bCwNbr3DoGYGiDbagGMl0GtzABeoUWLUrU,13160
90
+ tunacode/tools/glob.py,sha256=OEs-DZmXGn1ak-hcMBLJC3vMo2hwU2O-C5eauRdm1dY,22998
91
+ tunacode/tools/grep.py,sha256=cI73BKgW-StCVsGyjWowgPrCEHqptOvH3MA82ZHwxK8,21597
91
92
  tunacode/tools/list_dir.py,sha256=aJ2FdAUU-HxOmAwBk188KYIYB94thESIrSBflzoUlYs,12402
92
- tunacode/tools/present_plan.py,sha256=PjpZ7Ll9T6Ij-oBNPK9iysvGJZpvKr1-lqBpURNXiLM,10856
93
+ tunacode/tools/react.py,sha256=qEXhtxFM3skoz__L9R0Rabt1bmKdNkRyFMyAgNB_TFo,5602
93
94
  tunacode/tools/read_file.py,sha256=Xy8vkckjq8kBNNYJMpMhq0pabVi4Kp8b57C3C3picI4,6729
94
- tunacode/tools/run_command.py,sha256=VBFEy52y70gSkodGd0wNLrlfImgD_57Hl2h2BRn3GnE,8177
95
+ tunacode/tools/run_command.py,sha256=C267wJG6uw2goSTzLhCPTeDphoI0wXTC9zX043iagks,8846
95
96
  tunacode/tools/schema_assembler.py,sha256=sUePWvprfTHz9hau1q7hmWd12ew3rHdbASAGkpjBhuM,5507
96
- tunacode/tools/todo.py,sha256=wO8Ui19Jd4r_LQ9Iirlo0WQamcxu1H6NuVWf87soKwk,18027
97
97
  tunacode/tools/update_file.py,sha256=0KTbEe1awS53CZPh1G3F3-TWuemWWBuDVQhcRYwXKOg,7619
98
98
  tunacode/tools/write_file.py,sha256=WHEXdUKqUHZZ8Jh1muyupJgjud-x6h99x7qAMaloLao,6021
99
99
  tunacode/tools/xml_helper.py,sha256=iDEUeLDNWwdGFyb8T9Vqfo_V7oX7oXm4l3IFPTdJtCM,2996
@@ -103,14 +103,12 @@ tunacode/tools/grep_components/pattern_matcher.py,sha256=ZvEUqBZ6UWf9wZzb1DIRGST
103
103
  tunacode/tools/grep_components/result_formatter.py,sha256=S2TKdkJ81akFWyhwico0xR4jSx4yubfqchErEW-mEDQ,5223
104
104
  tunacode/tools/grep_components/search_result.py,sha256=xzb_htSANuPIPVWViPAqIMsCCWVA8loxWdaZOA8RqMs,869
105
105
  tunacode/tools/prompts/bash_prompt.xml,sha256=TzbZDFPhpRdYit0w3AVX66uCtJGDQhrdCEqY_FbHSC8,4051
106
- tunacode/tools/prompts/exit_plan_mode_prompt.xml,sha256=lBvJdUcXDrEcE-mQ9BbiYb0cezJMFb32yPTOiBZKJ4k,1578
107
- tunacode/tools/prompts/glob_prompt.xml,sha256=Jqkv-LSAYAcYkuMBDAvCKAnjYVhJY-r5mD7tf_nqllY,1914
108
- tunacode/tools/prompts/grep_prompt.xml,sha256=G21-poHTRlkFBwZxEwQJj0llp9LCjTSf_BbYnvmn9G8,4790
109
- tunacode/tools/prompts/list_dir_prompt.xml,sha256=omZxbJJwjher0DP2nU_c4AWqoQuZZPzgORVRbLl68pQ,1246
110
- tunacode/tools/prompts/present_plan_prompt.xml,sha256=NVJznP7ppKwY7jd7-Ghnhvh5LWoBqrDvQKV7QFZi-Ps,980
111
- tunacode/tools/prompts/read_file_prompt.xml,sha256=oM3NmTv7wTv39LwAEsdXnWATJNI8qFr6WSK_esR09Is,3087
106
+ tunacode/tools/prompts/glob_prompt.xml,sha256=G_ZTrHrhgzL3IvO9GIZPMBT6uEKy6AUU_xYTl7ZVPsU,1940
107
+ tunacode/tools/prompts/grep_prompt.xml,sha256=yxZcebUH_TtmllepXUdPnifr1TFlG0jsk3o1wOjl3mM,4944
108
+ tunacode/tools/prompts/list_dir_prompt.xml,sha256=oijSGEMOVh7FglSFQUawQMmmutfC_msZYBJt_KC6mjs,1401
109
+ tunacode/tools/prompts/react_prompt.xml,sha256=etF23T96I5XFs8MczeScjF7NH6jeEHaPOOmwGBwnnv0,829
110
+ tunacode/tools/prompts/read_file_prompt.xml,sha256=K_5FxytYACoj45oAvAnzrrOgU5CJMs421jdzuckUZaE,3123
112
111
  tunacode/tools/prompts/run_command_prompt.xml,sha256=JVz0CXdXrI6nthI9QaWN-b1OTTlbIy-TQ7_3MwBs7hI,2332
113
- tunacode/tools/prompts/todo_prompt.xml,sha256=_fuPhhJYWwIx4No1G2yAyEt054aoybWGfUuzVY8OHWc,4602
114
112
  tunacode/tools/prompts/update_file_prompt.xml,sha256=TmIc8K6myqgT_eauYMZmHPfhj-y1S3Gcp680e40pfyA,2831
115
113
  tunacode/tools/prompts/write_file_prompt.xml,sha256=n7Q2evuCT0NLEDcoiiBkFcjBeQayF66TF5u-bYplk7U,1610
116
114
  tunacode/tutorial/__init__.py,sha256=JyTt2S2cy8u1PnoChBmcOPk1Ru7ElhierltCLqZ-2BY,163
@@ -118,37 +116,43 @@ tunacode/tutorial/content.py,sha256=qaQewFwXtKKEmzLH-4oMECGAa4Z4nd1qh2HfRWLpwyk,
118
116
  tunacode/tutorial/manager.py,sha256=ZgkzSC6ZtYSDq5Ce_TfYk9O9cvgFSL-pXrLZb7_HStM,6309
119
117
  tunacode/tutorial/steps.py,sha256=l2bbRVJuYlC186A-U1TIoMPBtLl4j053h4Wlzo1VO8c,4393
120
118
  tunacode/ui/__init__.py,sha256=aRNE2pS50nFAX6y--rSGMNYwhz905g14gRd6g4BolYU,13
121
- tunacode/ui/completers.py,sha256=18f1Im5210-b-qNKyCoOMnSjW99FXNoF0DtgRvEWTm0,4901
122
- tunacode/ui/console.py,sha256=HfE30vUy8ebXCobP7psFNJc17-dvH6APChg2tbi7aTw,2632
119
+ tunacode/ui/completers.py,sha256=QAXnJeq5-p5BFkohCJ-VEe30U7ugetUXo7ZNO7kGMYM,19554
120
+ tunacode/ui/config_dashboard.py,sha256=iwY-52zTeC2EOVn7Cg6LKa2Soxcy9VAGZW-91qOGElI,22213
121
+ tunacode/ui/console.py,sha256=H9BoQpmo-rFpGFcfXW41XAFxbNZn4N7dmcg_PTPvORk,3801
123
122
  tunacode/ui/constants.py,sha256=A76B_KpM8jCuBYRg4cPmhi8_j6LLyWttO7_jjv47r3w,421
124
123
  tunacode/ui/decorators.py,sha256=jJDNztO8MyX_IG1nqXAL8-sQUFjaAzBnc5BsM3ioX24,1955
125
- tunacode/ui/input.py,sha256=WcbQ93Ct-Eu5CZkzFrmIz4eIN6wDbG4iegr9N6Vjzrk,3306
126
- tunacode/ui/keybindings.py,sha256=8j58NN432XyawffssFNe86leXaPur12qBX3O7hOOGsc,2374
124
+ tunacode/ui/input.py,sha256=Mg-w2FvZqf4aw0bS840KfxDq9NY1fMMrzOSlDqo0pD8,3430
125
+ tunacode/ui/keybindings.py,sha256=BGEP3-Gv4p_PbDmCJYy5eJsWhnGbDJpaK-o6xuXJ_Hw,1692
127
126
  tunacode/ui/lexers.py,sha256=tmg4ic1enyTRLzanN5QPP7D_0n12YjX_8ZhsffzhXA4,1340
128
127
  tunacode/ui/logging_compat.py,sha256=5v6lcjVaG1CxdY1Zm9FAGr9H7Sy-tP6ihGfhP-5YvAY,1406
129
- tunacode/ui/output.py,sha256=ybVVutiilOQcULtA1zjjs_tTu5okwxHFp2MHtNz3s2E,6767
130
- tunacode/ui/panels.py,sha256=jsStKE618qrZjZQGYBBVL__pNIamnRgu0UvE0RG0luA,13461
131
- tunacode/ui/prompt_manager.py,sha256=HUL6443pFPb41uDAnAKD-sZsrWd_VhWYRGwvrFH_9SI,5618
128
+ tunacode/ui/model_selector.py,sha256=PZH7P6C3sJMU8TAne-VAOCcdUSnwmBChUQ_gqaDiqHc,13449
129
+ tunacode/ui/output.py,sha256=oMozluhzospH8zGSj6Vu2egzWSCJgYSa-T1P7wS8iGM,6381
130
+ tunacode/ui/panels.py,sha256=EeXFMbITcuY44L_1rBpFyKc4tcfhILon10hB4g2BggM,18396
131
+ tunacode/ui/path_heuristics.py,sha256=YfAP7AteI5FCUH2jZX9erSLADfDuH4OCny96OWb0M-Q,2185
132
+ tunacode/ui/prompt_manager.py,sha256=YRtSKPe7uVaJOizNEoTghB82a01K9dnhN-PKka8ZbFU,4767
132
133
  tunacode/ui/tool_descriptions.py,sha256=vk61JPIXy7gHNfJ--77maXgK6WwNwxqY47QYsw_a2uw,4126
133
- tunacode/ui/tool_ui.py,sha256=MVmBLXx6OTJVFLl58SpoW0KoStOrbAY9sc6XXMKgWtQ,7216
134
+ tunacode/ui/tool_ui.py,sha256=tB1w01ffPVtWJn1veutcUrOZE6yb7t7kMqzxVNPfZZs,8132
134
135
  tunacode/ui/utils.py,sha256=yvoCTz8AOdRfV0XIqUX3sgg88g_wntV9yhnQP6WzAVs,114
135
136
  tunacode/ui/validators.py,sha256=MMIMT1I2v0l2jIy-gxX_4GSApvUTi8XWIOACr_dmoBA,758
136
137
  tunacode/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
138
+ tunacode/utils/api_key_validation.py,sha256=djfayP2g01d7YDVQXZUdW5ZhFtWAWw5oPhHCo_p74t0,2677
137
139
  tunacode/utils/bm25.py,sha256=fd59YQXovC8rXwZrdoqIAfFrLn_WCVjzCh0pkU22APE,1966
140
+ tunacode/utils/config_comparator.py,sha256=iMShhYCKlo0dXycbfpRu5rj3ckT460FoDvkbr5_-yTY,12879
138
141
  tunacode/utils/diff_utils.py,sha256=V9QqQ0q4MfabVTnWptF3IXDp3estnfOKcJtDe_Sj14I,2372
139
142
  tunacode/utils/file_utils.py,sha256=84g-MQRzmBI2aG_CuXsDl2OhvvWoSL7YdL5Kz_UKSwk,979
140
143
  tunacode/utils/import_cache.py,sha256=q_xjJbtju05YbFopLDSkIo1hOtCx3DOTl3GQE5FFDgs,295
141
144
  tunacode/utils/json_utils.py,sha256=cMVctSwwV9Z1c-rZdj6UuOlZwsUPSTF5oUruP6uPix0,6470
142
145
  tunacode/utils/message_utils.py,sha256=V4MrZZPmwO22_MVGupMqtE5ltQEBwaSIqGD5LEb_bLw,1050
146
+ tunacode/utils/models_registry.py,sha256=Tn2ByGFV1yJsWumFYy6JuT0eVpuPeZ1Zxj6JYsRRy1g,21277
143
147
  tunacode/utils/retry.py,sha256=AHdUzY6m-mwlT4OPXdtWWMAafL_NeS7JAMORGyM8c5k,4931
144
148
  tunacode/utils/ripgrep.py,sha256=VdGWYPQ1zCwUidw2QicuVmG5OiAgqI93jAsjS3y3ksE,11001
145
149
  tunacode/utils/security.py,sha256=i3eGKg4o-qY2S_ObTlEaHO93q14iBfiPXR5O7srHn58,6579
146
150
  tunacode/utils/system.py,sha256=J8KqJ4ZqQrNSnM5rrJxPeMk9z2xQQp6dWtI1SKBY1-0,11121
147
- tunacode/utils/text_utils.py,sha256=HAwlT4QMy41hr53cDbbNeNo05MI461TpI9b_xdIv8EY,7288
151
+ tunacode/utils/text_utils.py,sha256=KBI_xARsttD03rnCipNHG2RsC-0HV_TPbraT36M9tEI,8218
148
152
  tunacode/utils/token_counter.py,sha256=dmFuqVz4ywGFdLfAi5Mg9bAGf8v87Ek-mHU-R3fsYjI,2711
149
153
  tunacode/utils/user_configuration.py,sha256=OA-L0BgWNbf9sWpc8lyivgLscwJdpdI8TAYbe0wRs1s,4836
150
- tunacode_cli-0.0.70.dist-info/METADATA,sha256=oziDuVsyfx7OZ10yE9YaOw_lah-p7GVfant7HByB2mc,6773
151
- tunacode_cli-0.0.70.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
152
- tunacode_cli-0.0.70.dist-info/entry_points.txt,sha256=hbkytikj4dGu6rizPuAd_DGUPBGF191RTnhr9wdhORY,51
153
- tunacode_cli-0.0.70.dist-info/licenses/LICENSE,sha256=Btzdu2kIoMbdSp6OyCLupB1aRgpTCJ_szMimgEnpkkE,1056
154
- tunacode_cli-0.0.70.dist-info/RECORD,,
154
+ tunacode_cli-0.0.78.6.dist-info/METADATA,sha256=UcS7USp5Eibu_5fxYd0n6feaOsXqV5kz3VgT3dbNRdc,9004
155
+ tunacode_cli-0.0.78.6.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
156
+ tunacode_cli-0.0.78.6.dist-info/entry_points.txt,sha256=hbkytikj4dGu6rizPuAd_DGUPBGF191RTnhr9wdhORY,51
157
+ tunacode_cli-0.0.78.6.dist-info/licenses/LICENSE,sha256=Btzdu2kIoMbdSp6OyCLupB1aRgpTCJ_szMimgEnpkkE,1056
158
+ tunacode_cli-0.0.78.6.dist-info/RECORD,,
@@ -1,50 +0,0 @@
1
- """Plan mode commands for TunaCode."""
2
-
3
- from typing import List
4
-
5
- from ....types import CommandContext
6
- from ....ui import console as ui
7
- from ..base import CommandCategory, CommandSpec, SimpleCommand
8
-
9
-
10
- class PlanCommand(SimpleCommand):
11
- """Enter plan mode for read-only research and planning."""
12
-
13
- spec = CommandSpec(
14
- name="plan",
15
- aliases=["/plan"],
16
- description="Enter Plan Mode - read-only research phase",
17
- category=CommandCategory.DEVELOPMENT,
18
- )
19
-
20
- async def execute(self, args: List[str], context: CommandContext) -> None:
21
- """Enter plan mode."""
22
- context.state_manager.enter_plan_mode()
23
-
24
- await ui.info("🔍 Entering Plan Mode")
25
- await ui.info("• Only read-only operations available")
26
- await ui.info("• Use tools to research and analyze the codebase")
27
- await ui.info("• Use 'exit_plan_mode' tool to present your plan")
28
- await ui.info("• Read-only tools: read_file, grep, list_dir, glob")
29
- await ui.success("✅ Plan Mode active - indicator will appear above next input")
30
-
31
-
32
- class ExitPlanCommand(SimpleCommand):
33
- """Exit plan mode manually."""
34
-
35
- spec = CommandSpec(
36
- name="exit-plan",
37
- aliases=["/exit-plan"],
38
- description="Exit Plan Mode and return to normal mode",
39
- category=CommandCategory.DEVELOPMENT,
40
- )
41
-
42
- async def execute(self, args: List[str], context: CommandContext) -> None:
43
- """Exit plan mode manually."""
44
- if not context.state_manager.is_plan_mode():
45
- await ui.warning("Not currently in Plan Mode")
46
- return
47
-
48
- context.state_manager.exit_plan_mode()
49
- await ui.success("🚪 Exiting Plan Mode - returning to normal mode")
50
- await ui.info("✅ All tools are now available - '⏸ PLAN MODE ON' status removed")
@@ -1,217 +0,0 @@
1
- """Todo command implementation."""
2
-
3
- from datetime import datetime
4
-
5
- from rich.box import ROUNDED
6
- from rich.table import Table
7
-
8
- from tunacode.types import CommandArgs, CommandContext, CommandResult, TodoItem
9
- from tunacode.ui import console as ui
10
-
11
- from ..base import CommandCategory, CommandSpec, SimpleCommand
12
-
13
-
14
- class TodoCommand(SimpleCommand):
15
- """Manage todo items."""
16
-
17
- spec = CommandSpec(
18
- name="todo",
19
- aliases=["/todo", "todos"],
20
- description="Manage todo items.",
21
- category=CommandCategory.DEVELOPMENT,
22
- )
23
-
24
- async def execute(self, args: CommandArgs, context: CommandContext) -> CommandResult:
25
- if not args:
26
- await self.list_todos(context)
27
- return
28
-
29
- subcommand = args[0].lower()
30
- subcommand_args = args[1:]
31
-
32
- if subcommand == "list":
33
- await self.list_todos(context)
34
- elif subcommand == "add":
35
- await self.add_todo(subcommand_args, context)
36
- elif subcommand == "done":
37
- await self.mark_done(subcommand_args, context)
38
- elif subcommand == "update":
39
- await self.update_todo(subcommand_args, context)
40
- elif subcommand == "priority":
41
- await self.set_priority(subcommand_args, context)
42
- elif subcommand == "remove":
43
- await self.remove_todo(subcommand_args, context)
44
- elif subcommand == "clear":
45
- await self.clear_todos(context)
46
- else:
47
- await ui.error(
48
- "Invalid todo subcommand. Available subcommands: list, add, done, update, priority, remove, clear"
49
- )
50
-
51
- async def list_todos(self, context: CommandContext) -> None:
52
- """Display the todo list with Rich formatting."""
53
- todos = context.state_manager.session.todos
54
- if not todos:
55
- await ui.info("No todos found.")
56
- return
57
-
58
- # Create Rich table
59
- table = Table(show_header=True, box=ROUNDED, padding=(0, 1))
60
- table.add_column("ID", style="bold cyan", width=4, justify="center")
61
- table.add_column("Status", width=12, justify="center")
62
- table.add_column("Task", style="white", min_width=20)
63
- table.add_column("Priority", width=10, justify="center")
64
- table.add_column("Created", style="dim", width=12)
65
-
66
- # Sort todos by status and priority
67
- pending = [t for t in todos if t.status == "pending"]
68
- in_progress = [t for t in todos if t.status == "in_progress"]
69
- completed = [t for t in todos if t.status == "completed"]
70
-
71
- # Sort each group by priority (high->medium->low)
72
- priority_order = {"high": 0, "medium": 1, "low": 2}
73
-
74
- for group in [in_progress, pending, completed]:
75
- group.sort(key=lambda x: priority_order.get(x.priority, 3))
76
-
77
- # Add rows to table
78
- for todo in in_progress + pending + completed:
79
- # Status with emoji
80
- if todo.status == "pending":
81
- status_display = "○ pending"
82
- elif todo.status == "in_progress":
83
- status_display = "○ in progress"
84
- else:
85
- status_display = "✓ completed"
86
-
87
- # Priority with color coding
88
- if todo.priority == "high":
89
- priority_display = "[red] high[/red]"
90
- elif todo.priority == "medium":
91
- priority_display = "[yellow] medium[/yellow]"
92
- else:
93
- priority_display = "[green] low[/green]"
94
-
95
- # Format created date
96
- created_display = todo.created_at.strftime("%m/%d %H:%M")
97
-
98
- table.add_row(todo.id, status_display, todo.content, priority_display, created_display)
99
-
100
- await ui.print(table)
101
-
102
- async def add_todo(self, args: CommandArgs, context: CommandContext) -> None:
103
- """Add a new todo and show updated list."""
104
- if not args:
105
- await ui.error("Please provide a task to add.")
106
- return
107
-
108
- content = " ".join(args)
109
- new_id = f"{int(datetime.now().timestamp() * 1000000)}"
110
- new_todo = TodoItem(
111
- id=new_id,
112
- content=content,
113
- status="pending",
114
- priority="medium",
115
- created_at=datetime.now(),
116
- )
117
- context.state_manager.add_todo(new_todo)
118
-
119
- await ui.success(f"Todo created: {content}")
120
- await self.list_todos(context)
121
-
122
- async def mark_done(self, args: CommandArgs, context: CommandContext) -> None:
123
- """Mark a todo as done and show updated list."""
124
- if not args:
125
- await ui.error("Please provide a todo ID to mark as done.")
126
- return
127
-
128
- todo_id = args[0]
129
- # Find the todo to get its content for feedback
130
- todo_content = None
131
- for todo in context.state_manager.session.todos:
132
- if todo.id == todo_id:
133
- todo_content = todo.content
134
- break
135
-
136
- if not todo_content:
137
- await ui.error(f"Todo with id {todo_id} not found.")
138
- return
139
-
140
- context.state_manager.update_todo(todo_id, "completed")
141
- await ui.success(f"Marked todo {todo_id} as done: {todo_content}")
142
- await self.list_todos(context)
143
-
144
- async def update_todo(self, args: CommandArgs, context: CommandContext) -> None:
145
- """Update a todo status and show updated list."""
146
- if len(args) < 2:
147
- await ui.error("Please provide a todo ID and a new status.")
148
- return
149
-
150
- todo_id = args[0]
151
- new_status = args[1].lower()
152
- if new_status not in ["pending", "in_progress", "completed"]:
153
- await ui.error("Invalid status. Must be one of: pending, in_progress, completed")
154
- return
155
-
156
- for todo in context.state_manager.session.todos:
157
- if todo.id == todo_id:
158
- todo.status = new_status
159
- await ui.success(f"Updated todo {todo_id} to status {new_status}: {todo.content}")
160
- await self.list_todos(context)
161
- return
162
-
163
- await ui.error(f"Todo with id {todo_id} not found.")
164
-
165
- async def set_priority(self, args: CommandArgs, context: CommandContext) -> None:
166
- """Set todo priority and show updated list."""
167
- if len(args) < 2:
168
- await ui.error("Please provide a todo ID and a new priority.")
169
- return
170
-
171
- todo_id = args[0]
172
- new_priority = args[1].lower()
173
- if new_priority not in ["high", "medium", "low"]:
174
- await ui.error("Invalid priority. Must be one of: high, medium, low")
175
- return
176
-
177
- for todo in context.state_manager.session.todos:
178
- if todo.id == todo_id:
179
- todo.priority = new_priority
180
- await ui.success(f"Set todo {todo_id} to priority {new_priority}: {todo.content}")
181
- await self.list_todos(context)
182
- return
183
-
184
- await ui.error(f"Todo with id {todo_id} not found.")
185
-
186
- async def remove_todo(self, args: CommandArgs, context: CommandContext) -> None:
187
- """Remove a todo and show updated list."""
188
- if not args:
189
- await ui.error("Please provide a todo ID to remove.")
190
- return
191
-
192
- todo_id = args[0]
193
- # Find the todo to get its content for feedback
194
- todo_content = None
195
- for todo in context.state_manager.session.todos:
196
- if todo.id == todo_id:
197
- todo_content = todo.content
198
- break
199
-
200
- if not todo_content:
201
- await ui.error(f"Todo with id {todo_id} not found.")
202
- return
203
-
204
- context.state_manager.remove_todo(todo_id)
205
- await ui.success(f"Removed todo {todo_id}: {todo_content}")
206
- await self.list_todos(context)
207
-
208
- async def clear_todos(self, context: CommandContext) -> None:
209
- """Clear all todos and show confirmation."""
210
- todo_count = len(context.state_manager.session.todos)
211
- if todo_count == 0:
212
- await ui.info("No todos to clear.")
213
- return
214
-
215
- context.state_manager.clear_todos()
216
- await ui.success(f"Cleared all {todo_count} todos.")
217
- await self.list_todos(context)