tunacode-cli 0.0.76.1__py3-none-any.whl → 0.0.76.3__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.
- tunacode/cli/commands/implementations/debug.py +2 -2
- tunacode/cli/commands/implementations/system.py +1 -1
- tunacode/cli/commands/registry.py +13 -2
- tunacode/cli/main.py +1 -1
- tunacode/cli/repl.py +11 -7
- tunacode/cli/repl_components/error_recovery.py +2 -2
- tunacode/cli/repl_components/tool_executor.py +1 -1
- tunacode/constants.py +4 -1
- tunacode/core/agents/__init__.py +39 -2
- tunacode/core/agents/agent_components/__init__.py +5 -0
- tunacode/core/agents/agent_components/task_completion.py +15 -6
- tunacode/core/agents/main.py +529 -347
- tunacode/core/agents/utils.py +1 -129
- tunacode/core/state.py +15 -0
- tunacode/tools/prompts/react_prompt.xml +23 -0
- tunacode/tools/react.py +153 -0
- tunacode/ui/completers.py +75 -27
- tunacode/utils/fuzzy_utils.py +33 -0
- tunacode/utils/models_registry.py +59 -29
- {tunacode_cli-0.0.76.1.dist-info → tunacode_cli-0.0.76.3.dist-info}/METADATA +14 -5
- {tunacode_cli-0.0.76.1.dist-info → tunacode_cli-0.0.76.3.dist-info}/RECORD +24 -21
- {tunacode_cli-0.0.76.1.dist-info → tunacode_cli-0.0.76.3.dist-info}/WHEEL +0 -0
- {tunacode_cli-0.0.76.1.dist-info → tunacode_cli-0.0.76.3.dist-info}/entry_points.txt +0 -0
- {tunacode_cli-0.0.76.1.dist-info → tunacode_cli-0.0.76.3.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"""Models.dev integration for model discovery and validation."""
|
|
2
2
|
|
|
3
3
|
import json
|
|
4
|
-
from dataclasses import dataclass, field
|
|
5
4
|
from datetime import datetime, timedelta
|
|
6
5
|
from difflib import SequenceMatcher
|
|
7
6
|
from pathlib import Path
|
|
@@ -9,11 +8,14 @@ from typing import Any, Dict, List, Optional
|
|
|
9
8
|
from urllib.error import URLError
|
|
10
9
|
from urllib.request import urlopen
|
|
11
10
|
|
|
11
|
+
from pydantic import BaseModel, ConfigDict, Field, field_validator
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
class ModelCapabilities:
|
|
13
|
+
|
|
14
|
+
class ModelCapabilities(BaseModel):
|
|
15
15
|
"""Model capabilities and features."""
|
|
16
16
|
|
|
17
|
+
model_config = ConfigDict(extra="ignore")
|
|
18
|
+
|
|
17
19
|
attachment: bool = False
|
|
18
20
|
reasoning: bool = False
|
|
19
21
|
tool_call: bool = False
|
|
@@ -21,14 +23,24 @@ class ModelCapabilities:
|
|
|
21
23
|
knowledge: Optional[str] = None
|
|
22
24
|
|
|
23
25
|
|
|
24
|
-
|
|
25
|
-
class ModelCost:
|
|
26
|
+
class ModelCost(BaseModel):
|
|
26
27
|
"""Model pricing information."""
|
|
27
28
|
|
|
29
|
+
model_config = ConfigDict(extra="ignore")
|
|
30
|
+
|
|
28
31
|
input: Optional[float] = None
|
|
29
32
|
output: Optional[float] = None
|
|
30
33
|
cache: Optional[float] = None
|
|
31
34
|
|
|
35
|
+
@field_validator("input", "output", "cache")
|
|
36
|
+
@classmethod
|
|
37
|
+
def _non_negative(cls, v: Optional[float]) -> Optional[float]:
|
|
38
|
+
if v is None:
|
|
39
|
+
return v
|
|
40
|
+
if v < 0:
|
|
41
|
+
raise ValueError("cost values must be non-negative")
|
|
42
|
+
return float(v)
|
|
43
|
+
|
|
32
44
|
def format_cost(self) -> str:
|
|
33
45
|
"""Format cost as a readable string."""
|
|
34
46
|
if self.input is None or self.output is None:
|
|
@@ -36,16 +48,27 @@ class ModelCost:
|
|
|
36
48
|
return f"${self.input}/{self.output} per 1M tokens"
|
|
37
49
|
|
|
38
50
|
|
|
39
|
-
|
|
40
|
-
class ModelLimits:
|
|
51
|
+
class ModelLimits(BaseModel):
|
|
41
52
|
"""Model context and output limits."""
|
|
42
53
|
|
|
54
|
+
model_config = ConfigDict(extra="ignore")
|
|
55
|
+
|
|
43
56
|
context: Optional[int] = None
|
|
44
57
|
output: Optional[int] = None
|
|
45
58
|
|
|
59
|
+
@field_validator("context", "output")
|
|
60
|
+
@classmethod
|
|
61
|
+
def _positive_int(cls, v: Optional[int]) -> Optional[int]:
|
|
62
|
+
if v is None:
|
|
63
|
+
return v
|
|
64
|
+
iv = int(v)
|
|
65
|
+
if iv <= 0:
|
|
66
|
+
raise ValueError("limits must be positive integers")
|
|
67
|
+
return iv
|
|
68
|
+
|
|
46
69
|
def format_limits(self) -> str:
|
|
47
70
|
"""Format limits as a readable string."""
|
|
48
|
-
parts = []
|
|
71
|
+
parts: List[str] = []
|
|
49
72
|
if self.context:
|
|
50
73
|
parts.append(f"{self.context:,} context")
|
|
51
74
|
if self.output:
|
|
@@ -53,20 +76,21 @@ class ModelLimits:
|
|
|
53
76
|
return ", ".join(parts) if parts else "Limits not specified"
|
|
54
77
|
|
|
55
78
|
|
|
56
|
-
|
|
57
|
-
class ModelInfo:
|
|
79
|
+
class ModelInfo(BaseModel):
|
|
58
80
|
"""Complete model information."""
|
|
59
81
|
|
|
82
|
+
model_config = ConfigDict(extra="ignore")
|
|
83
|
+
|
|
60
84
|
id: str
|
|
61
85
|
name: str
|
|
62
86
|
provider: str
|
|
63
|
-
capabilities: ModelCapabilities =
|
|
64
|
-
cost: ModelCost =
|
|
65
|
-
limits: ModelLimits =
|
|
87
|
+
capabilities: ModelCapabilities = Field(default_factory=ModelCapabilities)
|
|
88
|
+
cost: ModelCost = Field(default_factory=ModelCost)
|
|
89
|
+
limits: ModelLimits = Field(default_factory=ModelLimits)
|
|
66
90
|
release_date: Optional[str] = None
|
|
67
91
|
last_updated: Optional[str] = None
|
|
68
92
|
open_weights: bool = False
|
|
69
|
-
modalities: Dict[str, List[str]] =
|
|
93
|
+
modalities: Dict[str, List[str]] = Field(default_factory=dict)
|
|
70
94
|
|
|
71
95
|
@property
|
|
72
96
|
def full_id(self) -> str:
|
|
@@ -77,7 +101,7 @@ class ModelInfo:
|
|
|
77
101
|
"""Format model for display."""
|
|
78
102
|
display = f"{self.full_id} - {self.name}"
|
|
79
103
|
if include_details:
|
|
80
|
-
details = []
|
|
104
|
+
details: List[str] = []
|
|
81
105
|
if self.cost.input is not None:
|
|
82
106
|
details.append(self.cost.format_cost())
|
|
83
107
|
if self.limits.context:
|
|
@@ -86,6 +110,7 @@ class ModelInfo:
|
|
|
86
110
|
display += f" ({', '.join(details)})"
|
|
87
111
|
return display
|
|
88
112
|
|
|
113
|
+
# we need to make this lighter for future dev, low priority
|
|
89
114
|
def matches_search(self, query: str) -> float:
|
|
90
115
|
"""Calculate match score for search query (0-1)."""
|
|
91
116
|
query_lower = query.lower()
|
|
@@ -107,13 +132,14 @@ class ModelInfo:
|
|
|
107
132
|
return best_ratio
|
|
108
133
|
|
|
109
134
|
|
|
110
|
-
|
|
111
|
-
class ProviderInfo:
|
|
135
|
+
class ProviderInfo(BaseModel):
|
|
112
136
|
"""Provider information."""
|
|
113
137
|
|
|
138
|
+
model_config = ConfigDict(extra="ignore")
|
|
139
|
+
|
|
114
140
|
id: str
|
|
115
141
|
name: str
|
|
116
|
-
env: List[str] =
|
|
142
|
+
env: List[str] = Field(default_factory=list)
|
|
117
143
|
npm: Optional[str] = None
|
|
118
144
|
doc: Optional[str] = None
|
|
119
145
|
|
|
@@ -315,26 +341,26 @@ class ModelsRegistry:
|
|
|
315
341
|
|
|
316
342
|
# Parse capabilities
|
|
317
343
|
capabilities = ModelCapabilities(
|
|
318
|
-
attachment=model_data.get("attachment", False),
|
|
319
|
-
reasoning=model_data.get("reasoning", False),
|
|
320
|
-
tool_call=model_data.get("tool_call", False),
|
|
321
|
-
temperature=model_data.get("temperature", True),
|
|
344
|
+
attachment=bool(model_data.get("attachment", False)),
|
|
345
|
+
reasoning=bool(model_data.get("reasoning", False)),
|
|
346
|
+
tool_call=bool(model_data.get("tool_call", False)),
|
|
347
|
+
temperature=bool(model_data.get("temperature", True)),
|
|
322
348
|
knowledge=model_data.get("knowledge"),
|
|
323
349
|
)
|
|
324
350
|
|
|
325
351
|
# Parse cost
|
|
326
352
|
cost_data = model_data.get("cost", {})
|
|
327
353
|
cost = ModelCost(
|
|
328
|
-
input=cost_data.get("input") if isinstance(cost_data, dict) else None,
|
|
329
|
-
output=cost_data.get("output") if isinstance(cost_data, dict) else None,
|
|
330
|
-
cache=cost_data.get("cache") if isinstance(cost_data, dict) else None,
|
|
354
|
+
input=(cost_data.get("input") if isinstance(cost_data, dict) else None),
|
|
355
|
+
output=(cost_data.get("output") if isinstance(cost_data, dict) else None),
|
|
356
|
+
cache=(cost_data.get("cache") if isinstance(cost_data, dict) else None),
|
|
331
357
|
)
|
|
332
358
|
|
|
333
359
|
# Parse limits
|
|
334
360
|
limit_data = model_data.get("limit", {})
|
|
335
361
|
limits = ModelLimits(
|
|
336
|
-
context=limit_data.get("context") if isinstance(limit_data, dict) else None,
|
|
337
|
-
output=limit_data.get("output") if isinstance(limit_data, dict) else None,
|
|
362
|
+
context=(limit_data.get("context") if isinstance(limit_data, dict) else None),
|
|
363
|
+
output=(limit_data.get("output") if isinstance(limit_data, dict) else None),
|
|
338
364
|
)
|
|
339
365
|
|
|
340
366
|
# Create model info
|
|
@@ -347,8 +373,12 @@ class ModelsRegistry:
|
|
|
347
373
|
limits=limits,
|
|
348
374
|
release_date=model_data.get("release_date"),
|
|
349
375
|
last_updated=model_data.get("last_updated"),
|
|
350
|
-
open_weights=model_data.get("open_weights", False),
|
|
351
|
-
modalities=
|
|
376
|
+
open_weights=bool(model_data.get("open_weights", False)),
|
|
377
|
+
modalities=(
|
|
378
|
+
model_data.get("modalities", {})
|
|
379
|
+
if isinstance(model_data.get("modalities", {}), dict)
|
|
380
|
+
else {}
|
|
381
|
+
),
|
|
352
382
|
)
|
|
353
383
|
|
|
354
384
|
# Store with full ID as key
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: tunacode-cli
|
|
3
|
-
Version: 0.0.76.
|
|
3
|
+
Version: 0.0.76.3
|
|
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
|
|
@@ -69,7 +69,10 @@ Description-Content-Type: text/markdown
|
|
|
69
69
|
# Option 1: One-line install (Linux/macOS)
|
|
70
70
|
wget -qO- https://raw.githubusercontent.com/alchemiststudiosDOTai/tunacode/master/scripts/install_linux.sh | bash
|
|
71
71
|
|
|
72
|
-
# Option 2:
|
|
72
|
+
# Option 2: UV install (recommended)
|
|
73
|
+
uv tool install tunacode-cli
|
|
74
|
+
|
|
75
|
+
# Option 3: pip install
|
|
73
76
|
pip install tunacode-cli
|
|
74
77
|
```
|
|
75
78
|
|
|
@@ -78,8 +81,9 @@ For detailed installation and configuration instructions, see the [**Getting Sta
|
|
|
78
81
|
## Quickstart
|
|
79
82
|
|
|
80
83
|
```bash
|
|
81
|
-
# 1) Install
|
|
82
|
-
|
|
84
|
+
# 1) Install (choose one)
|
|
85
|
+
uv tool install tunacode-cli # recommended
|
|
86
|
+
# or: pip install tunacode-cli
|
|
83
87
|
|
|
84
88
|
# 2) Launch the CLI
|
|
85
89
|
tunacode --wizard # guided setup (enter an API key, pick a model)
|
|
@@ -105,7 +109,7 @@ For contributors and developers who want to work on TunaCode:
|
|
|
105
109
|
git clone https://github.com/alchemiststudiosDOTai/tunacode.git
|
|
106
110
|
cd tunacode
|
|
107
111
|
|
|
108
|
-
# Quick setup (recommended)
|
|
112
|
+
# Quick setup (recommended) - uses UV automatically if available
|
|
109
113
|
./scripts/setup_dev_env.sh
|
|
110
114
|
|
|
111
115
|
# Or manual setup with UV (recommended)
|
|
@@ -113,6 +117,11 @@ uv venv
|
|
|
113
117
|
source .venv/bin/activate # On Windows: .venv\Scripts\activate
|
|
114
118
|
uv pip install -e ".[dev]"
|
|
115
119
|
|
|
120
|
+
# Alternative: traditional setup
|
|
121
|
+
python3 -m venv venv
|
|
122
|
+
source venv/bin/activate # On Windows: venv\Scripts\activate
|
|
123
|
+
pip install -e ".[dev]"
|
|
124
|
+
|
|
116
125
|
# Verify installation
|
|
117
126
|
tunacode --version
|
|
118
127
|
```
|
|
@@ -1,26 +1,26 @@
|
|
|
1
1
|
tunacode/__init__.py,sha256=yUul8igNYMfUrHnYfioIGAqvrH8b5BKiO_pt1wVnmd0,119
|
|
2
|
-
tunacode/constants.py,sha256=
|
|
2
|
+
tunacode/constants.py,sha256=bRNiKjbYi_2hRO7BlYIJ8z8jGPXe-ze4fSoKj5aomh4,6170
|
|
3
3
|
tunacode/context.py,sha256=YtfRjUiqsSkk2k9Nn_pjb_m-AXyh6XcOBOJWtFI0wVw,2405
|
|
4
4
|
tunacode/exceptions.py,sha256=m80njR-LqBXhFAEOPqCE7N2QPU4Fkjlf_f6CWKO0_Is,8479
|
|
5
5
|
tunacode/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
6
6
|
tunacode/setup.py,sha256=F1E4zHVnbByu_Uo6AhCJ-W-lIGF_gV6kB84HLAGLmVY,2103
|
|
7
7
|
tunacode/types.py,sha256=xNpDRjIRYg4qGNbl3EG8B13CWAWBoob9ekVm8_6dvnc,10496
|
|
8
8
|
tunacode/cli/__init__.py,sha256=zgs0UbAck8hfvhYsWhWOfBe5oK09ug2De1r4RuQZREA,55
|
|
9
|
-
tunacode/cli/main.py,sha256=
|
|
10
|
-
tunacode/cli/repl.py,sha256=
|
|
9
|
+
tunacode/cli/main.py,sha256=ZzFjLnn6YTYRrcgt7DfyqrxIPM220kBF2xV9rwF1BmA,3439
|
|
10
|
+
tunacode/cli/repl.py,sha256=QBw05NNypxuTYoV51FVoTfujJfiOTCIYzAr_1uoi0YA,23515
|
|
11
11
|
tunacode/cli/commands/__init__.py,sha256=J7MZofTaSgspAKP64OavPukj4l53qvkv_-sCfYEUi10,1794
|
|
12
12
|
tunacode/cli/commands/base.py,sha256=Ge_lNQA-GDfcb1Ap1oznCH3UrifBiHH3bA9DNL-tCDw,2519
|
|
13
|
-
tunacode/cli/commands/registry.py,sha256=
|
|
13
|
+
tunacode/cli/commands/registry.py,sha256=qey9iqLL-gJF2zWATtY-AjNgE9zfA7197MuJpHVf_C0,15433
|
|
14
14
|
tunacode/cli/commands/template_shortcut.py,sha256=ApYTPkDVBRaLxa7rWaPrsGcJdkR7eg09k18KyTjYg_E,3447
|
|
15
15
|
tunacode/cli/commands/implementations/__init__.py,sha256=dFczjIqCJTPrsSycD6PZYnp5_cIEQEGgKr0Y14MRGjs,1088
|
|
16
16
|
tunacode/cli/commands/implementations/command_reload.py,sha256=GyjeKvJbgE4VYkaasGajspdk9wffumZMNLzfCUeNazM,1555
|
|
17
17
|
tunacode/cli/commands/implementations/conversation.py,sha256=ZijCNaRi1p5v1Q-IaVHtU2_BripSW3JCVKTtqFkOUjg,4676
|
|
18
|
-
tunacode/cli/commands/implementations/debug.py,sha256=
|
|
18
|
+
tunacode/cli/commands/implementations/debug.py,sha256=w2fUgqFB4ipBCmNotbvaOOVW4OiCwJM6MXNWlyKyoqs,6754
|
|
19
19
|
tunacode/cli/commands/implementations/development.py,sha256=I8jHgYY3VgjTU8its0D0ysruuVqKbNTBur0JjPIUIZA,2844
|
|
20
20
|
tunacode/cli/commands/implementations/model.py,sha256=dFRmMlcN78TdGMFX-B2OPyoWqOVQL72XC8ayPyUQmpA,16166
|
|
21
21
|
tunacode/cli/commands/implementations/plan.py,sha256=iZtvdGPqvGqMr8_lYil8_8NOL1iyc54Bxtb0gb9VOnw,1825
|
|
22
22
|
tunacode/cli/commands/implementations/quickstart.py,sha256=53H7ubYMGMgmCeYCs6o_F91Q4pd3Ky008lCU4GPuRP8,1363
|
|
23
|
-
tunacode/cli/commands/implementations/system.py,sha256=
|
|
23
|
+
tunacode/cli/commands/implementations/system.py,sha256=gWkBK0hw-whMI5bX1sIvH08WAE1bW5jHiSo7jWWT9-g,12004
|
|
24
24
|
tunacode/cli/commands/implementations/template.py,sha256=YeFOjbKKfPswPCHPvlDUwXvg6J0MesyAyVsujiIgPbU,5482
|
|
25
25
|
tunacode/cli/commands/implementations/todo.py,sha256=Dtz5bgcuK2VXGPWEBBZQgnWUMYkRXNzTGf_qkVPLF2U,8125
|
|
26
26
|
tunacode/cli/commands/slash/__init__.py,sha256=O5EiITHZJgzIciKA_nylj5PyOZNvXE9jPmOHioDk3cU,824
|
|
@@ -31,9 +31,9 @@ tunacode/cli/commands/slash/types.py,sha256=v52tDX7T5I3nEETakloXLQzJqWXSyxcM1K5F
|
|
|
31
31
|
tunacode/cli/commands/slash/validator.py,sha256=NF6u4n_VFoNiBRlErzNRA1iTG11bScizil3PhzpRSb4,13949
|
|
32
32
|
tunacode/cli/repl_components/__init__.py,sha256=5ZjPJ3yUvZ5x6Vg9EYJ03-tdxfEEdmfradCmwSlVY3E,334
|
|
33
33
|
tunacode/cli/repl_components/command_parser.py,sha256=BU_3h4aJ4MNQ0UU6_ulvK7NRTlC417soZkGGzMFy6-s,2368
|
|
34
|
-
tunacode/cli/repl_components/error_recovery.py,sha256=
|
|
34
|
+
tunacode/cli/repl_components/error_recovery.py,sha256=y_hvtSulp1jgIgAZ3mGMhTCllKDxhkYDmwWaESAXY18,6146
|
|
35
35
|
tunacode/cli/repl_components/output_display.py,sha256=uzse2bhxSyCWnJD0Ni5lwnp0BmYDAr1tZbnlj3-x6ro,1484
|
|
36
|
-
tunacode/cli/repl_components/tool_executor.py,sha256=
|
|
36
|
+
tunacode/cli/repl_components/tool_executor.py,sha256=IBzlyyJrVJwlmmIetBRli9aIPIJqB4xKfAtGZlvdOgY,3762
|
|
37
37
|
tunacode/configuration/__init__.py,sha256=MbVXy8bGu0yKehzgdgZ_mfWlYGvIdb1dY2Ly75nfuPE,17
|
|
38
38
|
tunacode/configuration/defaults.py,sha256=eFUDD73tTWa3HM320BEn0VWM-XuDKW7d6m32qTK2eRI,1313
|
|
39
39
|
tunacode/configuration/key_descriptions.py,sha256=tzJOeoIVQryS9HQFoGMyjUk9Wf-YgSMLNc7-mmle_Zk,11412
|
|
@@ -41,12 +41,12 @@ tunacode/configuration/models.py,sha256=buH8ZquvcYI3OQBDIZeJ08cu00rSCeNABtUwl3VQ
|
|
|
41
41
|
tunacode/configuration/settings.py,sha256=9wtIWBlLhW_ZBlLx-GA4XDfVZyGj2Gs6Zk49vk-nHq0,1047
|
|
42
42
|
tunacode/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
43
43
|
tunacode/core/code_index.py,sha256=2qxEn2eTIegV4F_gLeZO5lAOv8mkf4Y_t21whZ9F2Fk,17370
|
|
44
|
-
tunacode/core/state.py,sha256=
|
|
44
|
+
tunacode/core/state.py,sha256=4SzI_OPiL2VIDywtUavtE6jZnIJS7K2IVgj8AYcawW0,8706
|
|
45
45
|
tunacode/core/tool_handler.py,sha256=42yUfnq5jgk-0LK93JoJgtsXfVDTf-7hNXyKEfH2FM0,3626
|
|
46
|
-
tunacode/core/agents/__init__.py,sha256=
|
|
47
|
-
tunacode/core/agents/main.py,sha256=
|
|
48
|
-
tunacode/core/agents/utils.py,sha256=
|
|
49
|
-
tunacode/core/agents/agent_components/__init__.py,sha256=
|
|
46
|
+
tunacode/core/agents/__init__.py,sha256=ZOSvWhqBWX3ADzTUZ7ILY92xZ7VMXanjPQ_Sf37WYmU,1005
|
|
47
|
+
tunacode/core/agents/main.py,sha256=wJx07AQrZJGYNtlLSAZKIdwzDug5TRcJchxA-7o1Vyc,25233
|
|
48
|
+
tunacode/core/agents/utils.py,sha256=cQJbpXzMcixJ1TKdLsEcpJHMMMXiH6_qcT3wbnSQ9gc,9411
|
|
49
|
+
tunacode/core/agents/agent_components/__init__.py,sha256=ES2drzZ2dNlTcriM9LgqpSq3pbw97uJY4nqMuvkD5Rs,1650
|
|
50
50
|
tunacode/core/agents/agent_components/agent_config.py,sha256=rVoFxmtu8Ly6-UAqTzvyv1NgPYTG5ZuYzJf5Qgo4384,13096
|
|
51
51
|
tunacode/core/agents/agent_components/agent_helpers.py,sha256=FFX-zXDhNoXpzMVe2iznBpNzNtk7OJ2lHf44cfZhTk8,8268
|
|
52
52
|
tunacode/core/agents/agent_components/json_tool_parser.py,sha256=HuyNT0rs-ppx_gLAI2e0XMVGbR_F0WXZfP3sx38VoMg,3447
|
|
@@ -56,7 +56,7 @@ tunacode/core/agents/agent_components/response_state.py,sha256=qnjRSQCYZzac04CcV
|
|
|
56
56
|
tunacode/core/agents/agent_components/result_wrapper.py,sha256=9CFK0wpsfZx2WT4PBHfkSv22GxL1gAQuUYVMlmYtCJU,1761
|
|
57
57
|
tunacode/core/agents/agent_components/state_transition.py,sha256=uyvLJriexosBDQIrxbVDLR_luvXAMG6tnDsX10mbZcI,4077
|
|
58
58
|
tunacode/core/agents/agent_components/streaming.py,sha256=1HRk83SvnQGPlSXQjOX9Bjv-HfqCyLNVjLaKQZUnmp4,14811
|
|
59
|
-
tunacode/core/agents/agent_components/task_completion.py,sha256=
|
|
59
|
+
tunacode/core/agents/agent_components/task_completion.py,sha256=iLzwspVDtkXTJNQFk8YNSbb6wzMWEelmSMwSnzLIzbk,1193
|
|
60
60
|
tunacode/core/agents/agent_components/tool_buffer.py,sha256=09FNtC6zTjiJOL_2CY0b7KDgwdNayGPV6jbENKH6Unc,766
|
|
61
61
|
tunacode/core/agents/agent_components/tool_executor.py,sha256=LlzDwgSLLawwPZQqJ4vfLf-16nhwIiuN8zm8iCeBf1Y,1849
|
|
62
62
|
tunacode/core/agents/agent_components/truncation_checker.py,sha256=XbJ3wwtdC4NhgIMIvFR0z_cfNnYMkiYAZo9zGDBPU8Y,2685
|
|
@@ -94,6 +94,7 @@ tunacode/tools/glob.py,sha256=_uAMV5cloRP0AQMbm7h_bKeqfhe7KFoBx9gfYls5ZzE,22956
|
|
|
94
94
|
tunacode/tools/grep.py,sha256=nKKpJjr2uupErB2KAUgTog3ZqC8oKiho5qkKeFvpY70,22178
|
|
95
95
|
tunacode/tools/list_dir.py,sha256=aJ2FdAUU-HxOmAwBk188KYIYB94thESIrSBflzoUlYs,12402
|
|
96
96
|
tunacode/tools/present_plan.py,sha256=PjpZ7Ll9T6Ij-oBNPK9iysvGJZpvKr1-lqBpURNXiLM,10856
|
|
97
|
+
tunacode/tools/react.py,sha256=qEXhtxFM3skoz__L9R0Rabt1bmKdNkRyFMyAgNB_TFo,5602
|
|
97
98
|
tunacode/tools/read_file.py,sha256=Xy8vkckjq8kBNNYJMpMhq0pabVi4Kp8b57C3C3picI4,6729
|
|
98
99
|
tunacode/tools/run_command.py,sha256=VBFEy52y70gSkodGd0wNLrlfImgD_57Hl2h2BRn3GnE,8177
|
|
99
100
|
tunacode/tools/schema_assembler.py,sha256=sUePWvprfTHz9hau1q7hmWd12ew3rHdbASAGkpjBhuM,5507
|
|
@@ -112,6 +113,7 @@ tunacode/tools/prompts/glob_prompt.xml,sha256=Jqkv-LSAYAcYkuMBDAvCKAnjYVhJY-r5mD
|
|
|
112
113
|
tunacode/tools/prompts/grep_prompt.xml,sha256=G21-poHTRlkFBwZxEwQJj0llp9LCjTSf_BbYnvmn9G8,4790
|
|
113
114
|
tunacode/tools/prompts/list_dir_prompt.xml,sha256=omZxbJJwjher0DP2nU_c4AWqoQuZZPzgORVRbLl68pQ,1246
|
|
114
115
|
tunacode/tools/prompts/present_plan_prompt.xml,sha256=NVJznP7ppKwY7jd7-Ghnhvh5LWoBqrDvQKV7QFZi-Ps,980
|
|
116
|
+
tunacode/tools/prompts/react_prompt.xml,sha256=etF23T96I5XFs8MczeScjF7NH6jeEHaPOOmwGBwnnv0,829
|
|
115
117
|
tunacode/tools/prompts/read_file_prompt.xml,sha256=oM3NmTv7wTv39LwAEsdXnWATJNI8qFr6WSK_esR09Is,3087
|
|
116
118
|
tunacode/tools/prompts/run_command_prompt.xml,sha256=JVz0CXdXrI6nthI9QaWN-b1OTTlbIy-TQ7_3MwBs7hI,2332
|
|
117
119
|
tunacode/tools/prompts/todo_prompt.xml,sha256=_fuPhhJYWwIx4No1G2yAyEt054aoybWGfUuzVY8OHWc,4602
|
|
@@ -122,7 +124,7 @@ tunacode/tutorial/content.py,sha256=qaQewFwXtKKEmzLH-4oMECGAa4Z4nd1qh2HfRWLpwyk,
|
|
|
122
124
|
tunacode/tutorial/manager.py,sha256=ZgkzSC6ZtYSDq5Ce_TfYk9O9cvgFSL-pXrLZb7_HStM,6309
|
|
123
125
|
tunacode/tutorial/steps.py,sha256=l2bbRVJuYlC186A-U1TIoMPBtLl4j053h4Wlzo1VO8c,4393
|
|
124
126
|
tunacode/ui/__init__.py,sha256=aRNE2pS50nFAX6y--rSGMNYwhz905g14gRd6g4BolYU,13
|
|
125
|
-
tunacode/ui/completers.py,sha256=
|
|
127
|
+
tunacode/ui/completers.py,sha256=O5wAlo9cufV2VWbFKMWzZeXRqptdS4CwK6wok1DdDak,14786
|
|
126
128
|
tunacode/ui/config_dashboard.py,sha256=FhfWwEzPTNjvornTb0njxv_o2SavoEW4EXqyOCrbqk0,21657
|
|
127
129
|
tunacode/ui/console.py,sha256=HfE30vUy8ebXCobP7psFNJc17-dvH6APChg2tbi7aTw,2632
|
|
128
130
|
tunacode/ui/constants.py,sha256=A76B_KpM8jCuBYRg4cPmhi8_j6LLyWttO7_jjv47r3w,421
|
|
@@ -145,10 +147,11 @@ tunacode/utils/bm25.py,sha256=fd59YQXovC8rXwZrdoqIAfFrLn_WCVjzCh0pkU22APE,1966
|
|
|
145
147
|
tunacode/utils/config_comparator.py,sha256=iMShhYCKlo0dXycbfpRu5rj3ckT460FoDvkbr5_-yTY,12879
|
|
146
148
|
tunacode/utils/diff_utils.py,sha256=V9QqQ0q4MfabVTnWptF3IXDp3estnfOKcJtDe_Sj14I,2372
|
|
147
149
|
tunacode/utils/file_utils.py,sha256=84g-MQRzmBI2aG_CuXsDl2OhvvWoSL7YdL5Kz_UKSwk,979
|
|
150
|
+
tunacode/utils/fuzzy_utils.py,sha256=Dl2C4ksNVfqdhjn-bVur4_JFiPkQXYerCjR-EOmtmRI,1140
|
|
148
151
|
tunacode/utils/import_cache.py,sha256=q_xjJbtju05YbFopLDSkIo1hOtCx3DOTl3GQE5FFDgs,295
|
|
149
152
|
tunacode/utils/json_utils.py,sha256=cMVctSwwV9Z1c-rZdj6UuOlZwsUPSTF5oUruP6uPix0,6470
|
|
150
153
|
tunacode/utils/message_utils.py,sha256=V4MrZZPmwO22_MVGupMqtE5ltQEBwaSIqGD5LEb_bLw,1050
|
|
151
|
-
tunacode/utils/models_registry.py,sha256=
|
|
154
|
+
tunacode/utils/models_registry.py,sha256=zNbujehYZ5FQLU8ywY9cSOcQDRh1ToLoGLGekEfOtbg,21254
|
|
152
155
|
tunacode/utils/retry.py,sha256=AHdUzY6m-mwlT4OPXdtWWMAafL_NeS7JAMORGyM8c5k,4931
|
|
153
156
|
tunacode/utils/ripgrep.py,sha256=VdGWYPQ1zCwUidw2QicuVmG5OiAgqI93jAsjS3y3ksE,11001
|
|
154
157
|
tunacode/utils/security.py,sha256=i3eGKg4o-qY2S_ObTlEaHO93q14iBfiPXR5O7srHn58,6579
|
|
@@ -156,8 +159,8 @@ tunacode/utils/system.py,sha256=J8KqJ4ZqQrNSnM5rrJxPeMk9z2xQQp6dWtI1SKBY1-0,1112
|
|
|
156
159
|
tunacode/utils/text_utils.py,sha256=HAwlT4QMy41hr53cDbbNeNo05MI461TpI9b_xdIv8EY,7288
|
|
157
160
|
tunacode/utils/token_counter.py,sha256=dmFuqVz4ywGFdLfAi5Mg9bAGf8v87Ek-mHU-R3fsYjI,2711
|
|
158
161
|
tunacode/utils/user_configuration.py,sha256=OA-L0BgWNbf9sWpc8lyivgLscwJdpdI8TAYbe0wRs1s,4836
|
|
159
|
-
tunacode_cli-0.0.76.
|
|
160
|
-
tunacode_cli-0.0.76.
|
|
161
|
-
tunacode_cli-0.0.76.
|
|
162
|
-
tunacode_cli-0.0.76.
|
|
163
|
-
tunacode_cli-0.0.76.
|
|
162
|
+
tunacode_cli-0.0.76.3.dist-info/METADATA,sha256=jomzgPHW7B0qAiE2rjTVw4mZZmnOjerJ8QjgfQ0Bqxg,8913
|
|
163
|
+
tunacode_cli-0.0.76.3.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
164
|
+
tunacode_cli-0.0.76.3.dist-info/entry_points.txt,sha256=hbkytikj4dGu6rizPuAd_DGUPBGF191RTnhr9wdhORY,51
|
|
165
|
+
tunacode_cli-0.0.76.3.dist-info/licenses/LICENSE,sha256=Btzdu2kIoMbdSp6OyCLupB1aRgpTCJ_szMimgEnpkkE,1056
|
|
166
|
+
tunacode_cli-0.0.76.3.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|