tunacode-cli 0.0.19__tar.gz → 0.0.22__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 (92) hide show
  1. {tunacode_cli-0.0.19 → tunacode_cli-0.0.22}/PKG-INFO +1 -1
  2. {tunacode_cli-0.0.19 → tunacode_cli-0.0.22}/pyproject.toml +1 -1
  3. {tunacode_cli-0.0.19 → tunacode_cli-0.0.22}/src/tunacode/cli/main.py +9 -2
  4. {tunacode_cli-0.0.19 → tunacode_cli-0.0.22}/src/tunacode/constants.py +1 -1
  5. {tunacode_cli-0.0.19 → tunacode_cli-0.0.22}/src/tunacode/core/setup/config_setup.py +24 -3
  6. {tunacode_cli-0.0.19 → tunacode_cli-0.0.22}/src/tunacode_cli.egg-info/PKG-INFO +1 -1
  7. {tunacode_cli-0.0.19 → tunacode_cli-0.0.22}/LICENSE +0 -0
  8. {tunacode_cli-0.0.19 → tunacode_cli-0.0.22}/README.md +0 -0
  9. {tunacode_cli-0.0.19 → tunacode_cli-0.0.22}/setup.cfg +0 -0
  10. {tunacode_cli-0.0.19 → tunacode_cli-0.0.22}/setup.py +0 -0
  11. {tunacode_cli-0.0.19 → tunacode_cli-0.0.22}/src/tunacode/__init__.py +0 -0
  12. {tunacode_cli-0.0.19 → tunacode_cli-0.0.22}/src/tunacode/cli/__init__.py +0 -0
  13. {tunacode_cli-0.0.19 → tunacode_cli-0.0.22}/src/tunacode/cli/commands.py +0 -0
  14. {tunacode_cli-0.0.19 → tunacode_cli-0.0.22}/src/tunacode/cli/repl.py +0 -0
  15. {tunacode_cli-0.0.19 → tunacode_cli-0.0.22}/src/tunacode/cli/textual_app.py +0 -0
  16. {tunacode_cli-0.0.19 → tunacode_cli-0.0.22}/src/tunacode/cli/textual_bridge.py +0 -0
  17. {tunacode_cli-0.0.19 → tunacode_cli-0.0.22}/src/tunacode/configuration/__init__.py +0 -0
  18. {tunacode_cli-0.0.19 → tunacode_cli-0.0.22}/src/tunacode/configuration/defaults.py +0 -0
  19. {tunacode_cli-0.0.19 → tunacode_cli-0.0.22}/src/tunacode/configuration/models.py +0 -0
  20. {tunacode_cli-0.0.19 → tunacode_cli-0.0.22}/src/tunacode/configuration/settings.py +0 -0
  21. {tunacode_cli-0.0.19 → tunacode_cli-0.0.22}/src/tunacode/context.py +0 -0
  22. {tunacode_cli-0.0.19 → tunacode_cli-0.0.22}/src/tunacode/core/__init__.py +0 -0
  23. {tunacode_cli-0.0.19 → tunacode_cli-0.0.22}/src/tunacode/core/agents/__init__.py +0 -0
  24. {tunacode_cli-0.0.19 → tunacode_cli-0.0.22}/src/tunacode/core/agents/main.py +0 -0
  25. {tunacode_cli-0.0.19 → tunacode_cli-0.0.22}/src/tunacode/core/agents/orchestrator.py +0 -0
  26. {tunacode_cli-0.0.19 → tunacode_cli-0.0.22}/src/tunacode/core/agents/planner_schema.py +0 -0
  27. {tunacode_cli-0.0.19 → tunacode_cli-0.0.22}/src/tunacode/core/agents/readonly.py +0 -0
  28. {tunacode_cli-0.0.19 → tunacode_cli-0.0.22}/src/tunacode/core/background/__init__.py +0 -0
  29. {tunacode_cli-0.0.19 → tunacode_cli-0.0.22}/src/tunacode/core/background/manager.py +0 -0
  30. {tunacode_cli-0.0.19 → tunacode_cli-0.0.22}/src/tunacode/core/llm/__init__.py +0 -0
  31. {tunacode_cli-0.0.19 → tunacode_cli-0.0.22}/src/tunacode/core/llm/planner.py +0 -0
  32. {tunacode_cli-0.0.19 → tunacode_cli-0.0.22}/src/tunacode/core/setup/__init__.py +0 -0
  33. {tunacode_cli-0.0.19 → tunacode_cli-0.0.22}/src/tunacode/core/setup/agent_setup.py +0 -0
  34. {tunacode_cli-0.0.19 → tunacode_cli-0.0.22}/src/tunacode/core/setup/base.py +0 -0
  35. {tunacode_cli-0.0.19 → tunacode_cli-0.0.22}/src/tunacode/core/setup/coordinator.py +0 -0
  36. {tunacode_cli-0.0.19 → tunacode_cli-0.0.22}/src/tunacode/core/setup/environment_setup.py +0 -0
  37. {tunacode_cli-0.0.19 → tunacode_cli-0.0.22}/src/tunacode/core/setup/git_safety_setup.py +0 -0
  38. {tunacode_cli-0.0.19 → tunacode_cli-0.0.22}/src/tunacode/core/state.py +0 -0
  39. {tunacode_cli-0.0.19 → tunacode_cli-0.0.22}/src/tunacode/core/tool_handler.py +0 -0
  40. {tunacode_cli-0.0.19 → tunacode_cli-0.0.22}/src/tunacode/exceptions.py +0 -0
  41. {tunacode_cli-0.0.19 → tunacode_cli-0.0.22}/src/tunacode/prompts/system.txt +0 -0
  42. {tunacode_cli-0.0.19 → tunacode_cli-0.0.22}/src/tunacode/py.typed +0 -0
  43. {tunacode_cli-0.0.19 → tunacode_cli-0.0.22}/src/tunacode/services/__init__.py +0 -0
  44. {tunacode_cli-0.0.19 → tunacode_cli-0.0.22}/src/tunacode/services/mcp.py +0 -0
  45. {tunacode_cli-0.0.19 → tunacode_cli-0.0.22}/src/tunacode/setup.py +0 -0
  46. {tunacode_cli-0.0.19 → tunacode_cli-0.0.22}/src/tunacode/tools/__init__.py +0 -0
  47. {tunacode_cli-0.0.19 → tunacode_cli-0.0.22}/src/tunacode/tools/base.py +0 -0
  48. {tunacode_cli-0.0.19 → tunacode_cli-0.0.22}/src/tunacode/tools/bash.py +0 -0
  49. {tunacode_cli-0.0.19 → tunacode_cli-0.0.22}/src/tunacode/tools/grep.py +0 -0
  50. {tunacode_cli-0.0.19 → tunacode_cli-0.0.22}/src/tunacode/tools/read_file.py +0 -0
  51. {tunacode_cli-0.0.19 → tunacode_cli-0.0.22}/src/tunacode/tools/run_command.py +0 -0
  52. {tunacode_cli-0.0.19 → tunacode_cli-0.0.22}/src/tunacode/tools/update_file.py +0 -0
  53. {tunacode_cli-0.0.19 → tunacode_cli-0.0.22}/src/tunacode/tools/write_file.py +0 -0
  54. {tunacode_cli-0.0.19 → tunacode_cli-0.0.22}/src/tunacode/types.py +0 -0
  55. {tunacode_cli-0.0.19 → tunacode_cli-0.0.22}/src/tunacode/ui/__init__.py +0 -0
  56. {tunacode_cli-0.0.19 → tunacode_cli-0.0.22}/src/tunacode/ui/completers.py +0 -0
  57. {tunacode_cli-0.0.19 → tunacode_cli-0.0.22}/src/tunacode/ui/console.py +0 -0
  58. {tunacode_cli-0.0.19 → tunacode_cli-0.0.22}/src/tunacode/ui/constants.py +0 -0
  59. {tunacode_cli-0.0.19 → tunacode_cli-0.0.22}/src/tunacode/ui/decorators.py +0 -0
  60. {tunacode_cli-0.0.19 → tunacode_cli-0.0.22}/src/tunacode/ui/input.py +0 -0
  61. {tunacode_cli-0.0.19 → tunacode_cli-0.0.22}/src/tunacode/ui/keybindings.py +0 -0
  62. {tunacode_cli-0.0.19 → tunacode_cli-0.0.22}/src/tunacode/ui/lexers.py +0 -0
  63. {tunacode_cli-0.0.19 → tunacode_cli-0.0.22}/src/tunacode/ui/output.py +0 -0
  64. {tunacode_cli-0.0.19 → tunacode_cli-0.0.22}/src/tunacode/ui/panels.py +0 -0
  65. {tunacode_cli-0.0.19 → tunacode_cli-0.0.22}/src/tunacode/ui/prompt_manager.py +0 -0
  66. {tunacode_cli-0.0.19 → tunacode_cli-0.0.22}/src/tunacode/ui/tool_ui.py +0 -0
  67. {tunacode_cli-0.0.19 → tunacode_cli-0.0.22}/src/tunacode/ui/validators.py +0 -0
  68. {tunacode_cli-0.0.19 → tunacode_cli-0.0.22}/src/tunacode/utils/__init__.py +0 -0
  69. {tunacode_cli-0.0.19 → tunacode_cli-0.0.22}/src/tunacode/utils/bm25.py +0 -0
  70. {tunacode_cli-0.0.19 → tunacode_cli-0.0.22}/src/tunacode/utils/diff_utils.py +0 -0
  71. {tunacode_cli-0.0.19 → tunacode_cli-0.0.22}/src/tunacode/utils/file_utils.py +0 -0
  72. {tunacode_cli-0.0.19 → tunacode_cli-0.0.22}/src/tunacode/utils/import_cache.py +0 -0
  73. {tunacode_cli-0.0.19 → tunacode_cli-0.0.22}/src/tunacode/utils/ripgrep.py +0 -0
  74. {tunacode_cli-0.0.19 → tunacode_cli-0.0.22}/src/tunacode/utils/system.py +0 -0
  75. {tunacode_cli-0.0.19 → tunacode_cli-0.0.22}/src/tunacode/utils/text_utils.py +0 -0
  76. {tunacode_cli-0.0.19 → tunacode_cli-0.0.22}/src/tunacode/utils/user_configuration.py +0 -0
  77. {tunacode_cli-0.0.19 → tunacode_cli-0.0.22}/src/tunacode_cli.egg-info/SOURCES.txt +0 -0
  78. {tunacode_cli-0.0.19 → tunacode_cli-0.0.22}/src/tunacode_cli.egg-info/dependency_links.txt +0 -0
  79. {tunacode_cli-0.0.19 → tunacode_cli-0.0.22}/src/tunacode_cli.egg-info/entry_points.txt +0 -0
  80. {tunacode_cli-0.0.19 → tunacode_cli-0.0.22}/src/tunacode_cli.egg-info/requires.txt +0 -0
  81. {tunacode_cli-0.0.19 → tunacode_cli-0.0.22}/src/tunacode_cli.egg-info/top_level.txt +0 -0
  82. {tunacode_cli-0.0.19 → tunacode_cli-0.0.22}/tests/test_architect_integration.py +0 -0
  83. {tunacode_cli-0.0.19 → tunacode_cli-0.0.22}/tests/test_architect_simple.py +0 -0
  84. {tunacode_cli-0.0.19 → tunacode_cli-0.0.22}/tests/test_background_manager.py +0 -0
  85. {tunacode_cli-0.0.19 → tunacode_cli-0.0.22}/tests/test_fast_glob_search.py +0 -0
  86. {tunacode_cli-0.0.19 → tunacode_cli-0.0.22}/tests/test_file_reference_expansion.py +0 -0
  87. {tunacode_cli-0.0.19 → tunacode_cli-0.0.22}/tests/test_json_tool_parsing.py +0 -0
  88. {tunacode_cli-0.0.19 → tunacode_cli-0.0.22}/tests/test_orchestrator_file_references.py +0 -0
  89. {tunacode_cli-0.0.19 → tunacode_cli-0.0.22}/tests/test_orchestrator_import.py +0 -0
  90. {tunacode_cli-0.0.19 → tunacode_cli-0.0.22}/tests/test_orchestrator_planning_visibility.py +0 -0
  91. {tunacode_cli-0.0.19 → tunacode_cli-0.0.22}/tests/test_react_thoughts.py +0 -0
  92. {tunacode_cli-0.0.19 → tunacode_cli-0.0.22}/tests/test_update_command.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tunacode-cli
3
- Version: 0.0.19
3
+ Version: 0.0.22
4
4
  Summary: Your agentic CLI developer.
5
5
  Author-email: larock22 <noreply@github.com>
6
6
  License-Expression: MIT
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "tunacode-cli"
7
- version = "0.0.19"
7
+ version = "0.0.22"
8
8
  description = "Your agentic CLI developer."
9
9
  keywords = ["cli", "agent", "development", "automation"]
10
10
  readme = "README.md"
@@ -40,7 +40,7 @@ def main(
40
40
  await ui.banner()
41
41
 
42
42
  # Start update check in background
43
- update_task = asyncio.to_thread(check_for_updates)
43
+ update_task = asyncio.create_task(asyncio.to_thread(check_for_updates))
44
44
 
45
45
  cli_config = {}
46
46
  if baseurl or model or key:
@@ -50,7 +50,14 @@ def main(
50
50
  await setup(run_setup, state_manager, cli_config)
51
51
  await repl(state_manager)
52
52
  except Exception as e:
53
- await ui.error(str(e))
53
+ from tunacode.exceptions import ConfigurationError
54
+ if isinstance(e, ConfigurationError):
55
+ # ConfigurationError already printed helpful message, just exit cleanly
56
+ update_task.cancel() # Cancel the update check
57
+ return
58
+ import traceback
59
+
60
+ await ui.error(f"{str(e)}\n\nTraceback:\n{traceback.format_exc()}")
54
61
 
55
62
  has_update, latest_version = await update_task
56
63
  if has_update:
@@ -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.19"
10
+ APP_VERSION = "0.0.22"
11
11
 
12
12
  # File patterns
13
13
  GUIDE_FILE_PATTERN = "{name}.md"
@@ -75,6 +75,12 @@ class ConfigSetup(BaseSetup):
75
75
  else:
76
76
  if force_setup:
77
77
  await ui.muted("Running setup process, resetting config")
78
+ # Ensure user_config is properly initialized
79
+ if (
80
+ not hasattr(self.state_manager.session, "user_config")
81
+ or self.state_manager.session.user_config is None
82
+ ):
83
+ self.state_manager.session.user_config = {}
78
84
  self.state_manager.session.user_config = DEFAULT_USER_CONFIG.copy()
79
85
  user_configuration.save_config(
80
86
  self.state_manager
@@ -96,7 +102,8 @@ class ConfigSetup(BaseSetup):
96
102
  " [green]tunacode --model 'openrouter:anthropic/claude-3.5-sonnet' --key 'your-key' --baseurl 'https://openrouter.ai/api/v1'[/green]"
97
103
  )
98
104
  console.print("\n[yellow]Run 'tunacode --help' for more options[/yellow]\n")
99
- raise SystemExit(0)
105
+ from tunacode.exceptions import ConfigurationError
106
+ raise ConfigurationError("No configuration found. Please use CLI flags to configure.")
100
107
 
101
108
  if not self.state_manager.session.user_config.get("default_model"):
102
109
  raise ConfigurationError(
@@ -150,7 +157,9 @@ class ConfigSetup(BaseSetup):
150
157
 
151
158
  # Only continue if at least one API key was provided
152
159
  env = self.state_manager.session.user_config.get("env", {})
153
- has_api_key = any(key.endswith("_API_KEY") and env.get(key) for key in env)
160
+ has_api_key = (
161
+ any(key.endswith("_API_KEY") and env.get(key) for key in env) if env else False
162
+ )
154
163
 
155
164
  if has_api_key:
156
165
  if not self.state_manager.session.user_config.get("default_model"):
@@ -179,7 +188,15 @@ class ConfigSetup(BaseSetup):
179
188
  "Skip the ones you don't need."
180
189
  )
181
190
  await ui.panel("Setup", message, border_style=UI_COLORS["primary"])
182
- env_keys = self.state_manager.session.user_config["env"].copy()
191
+ env_config = self.state_manager.session.user_config.get("env")
192
+ if not env_config:
193
+ self.state_manager.session.user_config["env"] = DEFAULT_USER_CONFIG["env"].copy()
194
+ env_config = self.state_manager.session.user_config["env"]
195
+
196
+ # Ensure env_config is not None before copying
197
+ if env_config is None:
198
+ env_config = {}
199
+ env_keys = env_config.copy()
183
200
  for key in env_keys:
184
201
  provider = key_to_title(key)
185
202
  val = await ui.input(
@@ -248,6 +265,10 @@ class ConfigSetup(BaseSetup):
248
265
 
249
266
  # Apply CLI overrides
250
267
  if self.cli_config.get("key"):
268
+ # Ensure env dict exists
269
+ if "env" not in self.state_manager.session.user_config:
270
+ self.state_manager.session.user_config["env"] = {}
271
+
251
272
  # Determine which API key to set based on the model or baseurl
252
273
  if self.cli_config.get("baseurl") and "openrouter" in self.cli_config["baseurl"]:
253
274
  self.state_manager.session.user_config["env"]["OPENROUTER_API_KEY"] = (
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tunacode-cli
3
- Version: 0.0.19
3
+ Version: 0.0.22
4
4
  Summary: Your agentic CLI developer.
5
5
  Author-email: larock22 <noreply@github.com>
6
6
  License-Expression: MIT
File without changes
File without changes
File without changes
File without changes