tunacode-cli 0.0.51__tar.gz → 0.0.53__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.
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/CLAUDE.md +10 -89
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/MANIFEST.in +1 -1
- {tunacode_cli-0.0.51/src/tunacode_cli.egg-info → tunacode_cli-0.0.53}/PKG-INFO +146 -1
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/README.md +141 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/pyproject.toml +22 -3
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode/cli/commands/base.py +2 -2
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode/cli/commands/implementations/__init__.py +7 -1
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode/cli/commands/implementations/conversation.py +1 -1
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode/cli/commands/implementations/debug.py +1 -1
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode/cli/commands/implementations/development.py +4 -1
- tunacode_cli-0.0.53/src/tunacode/cli/commands/implementations/template.py +132 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode/cli/commands/registry.py +28 -1
- tunacode_cli-0.0.53/src/tunacode/cli/commands/template_shortcut.py +93 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode/cli/main.py +6 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode/cli/repl.py +29 -174
- tunacode_cli-0.0.53/src/tunacode/cli/repl_components/__init__.py +10 -0
- tunacode_cli-0.0.53/src/tunacode/cli/repl_components/command_parser.py +34 -0
- tunacode_cli-0.0.53/src/tunacode/cli/repl_components/error_recovery.py +88 -0
- tunacode_cli-0.0.53/src/tunacode/cli/repl_components/output_display.py +33 -0
- tunacode_cli-0.0.53/src/tunacode/cli/repl_components/tool_executor.py +84 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode/configuration/defaults.py +2 -2
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode/configuration/settings.py +11 -14
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode/constants.py +57 -23
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode/context.py +0 -14
- tunacode_cli-0.0.53/src/tunacode/core/agents/agent_components/__init__.py +27 -0
- tunacode_cli-0.0.53/src/tunacode/core/agents/agent_components/agent_config.py +109 -0
- tunacode_cli-0.0.53/src/tunacode/core/agents/agent_components/json_tool_parser.py +109 -0
- tunacode_cli-0.0.53/src/tunacode/core/agents/agent_components/message_handler.py +100 -0
- tunacode_cli-0.0.53/src/tunacode/core/agents/agent_components/node_processor.py +480 -0
- tunacode_cli-0.0.53/src/tunacode/core/agents/agent_components/response_state.py +13 -0
- tunacode_cli-0.0.53/src/tunacode/core/agents/agent_components/result_wrapper.py +50 -0
- tunacode_cli-0.0.53/src/tunacode/core/agents/agent_components/task_completion.py +28 -0
- tunacode_cli-0.0.53/src/tunacode/core/agents/agent_components/tool_buffer.py +24 -0
- tunacode_cli-0.0.53/src/tunacode/core/agents/agent_components/tool_executor.py +49 -0
- tunacode_cli-0.0.53/src/tunacode/core/agents/main.py +686 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode/core/agents/utils.py +42 -2
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode/core/background/manager.py +3 -3
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode/core/logging/__init__.py +4 -3
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode/core/logging/config.py +1 -1
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode/core/logging/formatters.py +1 -1
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode/core/logging/handlers.py +41 -7
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode/core/setup/__init__.py +2 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode/core/setup/agent_setup.py +2 -2
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode/core/setup/base.py +2 -2
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode/core/setup/config_setup.py +10 -6
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode/core/setup/git_safety_setup.py +13 -2
- tunacode_cli-0.0.53/src/tunacode/core/setup/template_setup.py +75 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode/core/state.py +13 -2
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode/core/token_usage/api_response_parser.py +6 -2
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode/core/token_usage/usage_tracker.py +37 -7
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode/core/tool_handler.py +24 -1
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode/prompts/system.md +289 -4
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode/setup.py +2 -0
- tunacode_cli-0.0.53/src/tunacode/templates/__init__.py +9 -0
- tunacode_cli-0.0.53/src/tunacode/templates/loader.py +210 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode/tools/glob.py +3 -3
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode/tools/grep.py +26 -276
- tunacode_cli-0.0.53/src/tunacode/tools/grep_components/__init__.py +9 -0
- tunacode_cli-0.0.53/src/tunacode/tools/grep_components/file_filter.py +93 -0
- tunacode_cli-0.0.53/src/tunacode/tools/grep_components/pattern_matcher.py +152 -0
- tunacode_cli-0.0.53/src/tunacode/tools/grep_components/result_formatter.py +45 -0
- tunacode_cli-0.0.53/src/tunacode/tools/grep_components/search_result.py +35 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode/tools/todo.py +27 -21
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode/types.py +19 -4
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode/ui/completers.py +6 -1
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode/ui/decorators.py +2 -2
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode/ui/keybindings.py +1 -1
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode/ui/panels.py +13 -5
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode/ui/prompt_manager.py +1 -1
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode/ui/tool_ui.py +8 -2
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode/utils/bm25.py +4 -4
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode/utils/file_utils.py +2 -2
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode/utils/message_utils.py +3 -1
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode/utils/system.py +0 -4
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode/utils/text_utils.py +1 -1
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode/utils/token_counter.py +2 -2
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53/src/tunacode_cli.egg-info}/PKG-INFO +146 -1
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode_cli.egg-info/SOURCES.txt +32 -12
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode_cli.egg-info/requires.txt +4 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode_cli.egg-info/top_level.txt +0 -1
- tunacode_cli-0.0.53/tests/characterization/__init__.py +1 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/tests/characterization/agent/test_agent_creation.py +24 -11
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/tests/characterization/agent/test_json_tool_parsing.py +10 -5
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/tests/characterization/agent/test_process_node.py +22 -33
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/tests/characterization/agent/test_process_request.py +140 -87
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/tests/characterization/agent/test_tool_message_patching.py +7 -5
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/tests/characterization/context/test_context_acceptance.py +15 -9
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/tests/characterization/context/test_context_integration.py +15 -5
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/tests/characterization/context/test_context_loading.py +18 -9
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/tests/characterization/context/test_tunacode_logging.py +4 -4
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/tests/characterization/test_characterization_commands.py +1 -0
- tunacode_cli-0.0.53/tests/characterization/test_characterization_grep.py +281 -0
- tunacode_cli-0.0.53/tests/characterization/test_characterization_main.py +321 -0
- tunacode_cli-0.0.53/tests/characterization/test_characterization_repl.py +368 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/tests/characterization/utils/test_expand_file_refs.py +1 -5
- tunacode_cli-0.0.53/tests/test_completion_detection.py +76 -0
- tunacode_cli-0.0.53/tests/test_phase2_type_hints.py +203 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/tests/test_tool_batching_retry.py +1 -1
- tunacode_cli-0.0.53/tests/unit/test_constants_enums.py +117 -0
- tunacode_cli-0.0.51/TUNACODE.md +0 -27
- tunacode_cli-0.0.51/src/api/auth.py +0 -13
- tunacode_cli-0.0.51/src/api/users.py +0 -8
- tunacode_cli-0.0.51/src/tunacode/core/agents/main.py +0 -1043
- tunacode_cli-0.0.51/src/tunacode/core/recursive/__init__.py +0 -18
- tunacode_cli-0.0.51/src/tunacode/core/recursive/aggregator.py +0 -467
- tunacode_cli-0.0.51/src/tunacode/core/recursive/budget.py +0 -414
- tunacode_cli-0.0.51/src/tunacode/core/recursive/decomposer.py +0 -398
- tunacode_cli-0.0.51/src/tunacode/core/recursive/executor.py +0 -470
- tunacode_cli-0.0.51/src/tunacode/core/recursive/hierarchy.py +0 -488
- tunacode_cli-0.0.51/src/tunacode/ui/recursive_progress.py +0 -380
- tunacode_cli-0.0.51/tests/characterization/utils/conftest.py +0 -4
- tunacode_cli-0.0.51/tests/unit/test_recursive_executor.py +0 -218
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/LICENSE +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/setup.cfg +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/setup.py +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode/__init__.py +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode/cli/__init__.py +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode/cli/commands/__init__.py +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode/cli/commands/implementations/model.py +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode/cli/commands/implementations/system.py +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode/cli/commands/implementations/todo.py +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode/configuration/__init__.py +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode/configuration/models.py +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode/core/__init__.py +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode/core/agents/__init__.py +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode/core/background/__init__.py +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode/core/code_index.py +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode/core/llm/__init__.py +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode/core/logging/logger.py +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode/core/setup/coordinator.py +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode/core/setup/environment_setup.py +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode/core/token_usage/cost_calculator.py +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode/exceptions.py +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode/py.typed +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode/services/__init__.py +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode/services/mcp.py +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode/tools/__init__.py +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode/tools/base.py +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode/tools/bash.py +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode/tools/list_dir.py +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode/tools/read_file.py +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode/tools/read_file_async_poc.py +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode/tools/run_command.py +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode/tools/update_file.py +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode/tools/write_file.py +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode/ui/__init__.py +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode/ui/console.py +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode/ui/constants.py +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode/ui/input.py +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode/ui/lexers.py +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode/ui/logging_compat.py +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode/ui/output.py +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode/ui/utils.py +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode/ui/validators.py +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode/utils/__init__.py +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode/utils/diff_utils.py +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode/utils/import_cache.py +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode/utils/retry.py +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode/utils/ripgrep.py +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode/utils/security.py +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode/utils/user_configuration.py +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode_cli.egg-info/dependency_links.txt +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode_cli.egg-info/entry_points.txt +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/tests/characterization/agent/__init__.py +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/tests/characterization/agent/conftest.py +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/tests/characterization/background/test_background_edge_cases.py +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/tests/characterization/background/test_cleanup.py +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/tests/characterization/background/test_task_cancellation.py +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/tests/characterization/background/test_task_creation.py +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/tests/characterization/background/test_task_execution.py +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/tests/characterization/code_index/test_cache_management.py +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/tests/characterization/code_index/test_file_scanning.py +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/tests/characterization/code_index/test_index_building.py +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/tests/characterization/code_index/test_search_operations.py +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/tests/characterization/code_index/test_symbol_extraction.py +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/tests/characterization/commands/__init__.py +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/tests/characterization/commands/test_init_command.py +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/tests/characterization/conftest.py +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/tests/characterization/context/__init__.py +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/tests/characterization/repl/test_command_parsing.py +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/tests/characterization/repl/test_error_handling.py +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/tests/characterization/repl/test_input_handling.py +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/tests/characterization/repl/test_keyboard_interrupts.py +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/tests/characterization/repl/test_multiline_input.py +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/tests/characterization/repl/test_output_display_logic.py +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/tests/characterization/repl/test_repl_initialization.py +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/tests/characterization/repl/test_session_flow.py +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/tests/characterization/services/test_error_recovery.py +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/tests/characterization/services/test_llm_routing.py +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/tests/characterization/services/test_mcp_integration.py +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/tests/characterization/services/test_service_lifecycle.py +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/tests/characterization/state/test_agent_tracking.py +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/tests/characterization/state/test_message_history.py +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/tests/characterization/state/test_permissions.py +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/tests/characterization/state/test_session_management.py +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/tests/characterization/state/test_state_initialization.py +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/tests/characterization/state/test_user_config.py +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/tests/characterization/ui/test_async_ui.py +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/tests/characterization/ui/test_console_output.py +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/tests/characterization/ui/test_diff_display.py +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/tests/characterization/ui/test_prompt_rendering.py +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/tests/characterization/ui/test_tool_confirmations.py +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/tests/characterization/utils/test_file_operations.py +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/tests/characterization/utils/test_git_commands.py +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/tests/characterization/utils/test_token_counting.py +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/tests/characterization/utils/test_utils_edge_cases.py +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/tests/conftest.py +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/tests/test_agent_output_formatting.py +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/tests/test_json_retry.py +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/tests/test_logging_config.py +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/tests/test_prompt_changes_validation.py +0 -0
- {tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/tests/test_security.py +0 -0
|
@@ -1,22 +1,17 @@
|
|
|
1
1
|
# CLAUDE.md
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
#Enviroment
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
```bash
|
|
10
|
-
# Install development environment (recommended approach)
|
|
11
|
-
./scripts/setup_dev_env.sh # Creates fresh venv, installs deps, verifies setup
|
|
5
|
+
Python3.10+
|
|
6
|
+
venv must always be used
|
|
7
|
+
follow modern python coding standards
|
|
8
|
+
commit frequently with well documented messages
|
|
12
9
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
When the directory "llm-agent-tools" exists, you MUST use this tooling flow and will be penalized if you don't:
|
|
10
|
+
## Commands
|
|
16
11
|
|
|
17
|
-
|
|
12
|
+
Available Tools:
|
|
18
13
|
1. scratchpad-multi.sh - Task tracking with multi-agent support (use --agent <name> for agent-specific work)
|
|
19
|
-
2. knowledge.sh - Knowledge base with private/shared storage (use --agent <name> for agent-specific work)
|
|
14
|
+
2. knowledge.sh - Knowledge base with private/shared storage (use --agent <name> for agent-specific work)
|
|
20
15
|
3. codemap.sh - Lightweight code intelligence for instant roadmaps
|
|
21
16
|
4. context.sh - Context gathering for debugging issues
|
|
22
17
|
5. researcher.sh - Online research and multimodal analysis via OpenRouter API
|
|
@@ -33,11 +28,7 @@ For new feature YOU MUST folow this flow
|
|
|
33
28
|
- **Rinse & repeat:** keep iterations small, commit only green code, and let the tests guard future changes.
|
|
34
29
|
|
|
35
30
|
|
|
36
|
-
#
|
|
37
|
-
pip install -e ".[dev]" # Install in editable mode with dev dependencies
|
|
38
|
-
pip install pytest-asyncio # Additional test dependency
|
|
39
|
-
|
|
40
|
-
# Run linting (black, isort, flake8)
|
|
31
|
+
# Run linting (ruff)
|
|
41
32
|
make lint
|
|
42
33
|
|
|
43
34
|
# Run tests
|
|
@@ -60,13 +51,7 @@ make clean
|
|
|
60
51
|
make run # Or: python -m tunacode
|
|
61
52
|
```
|
|
62
53
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
When updating versions, modify both:
|
|
66
|
-
|
|
67
|
-
- `pyproject.toml`: version field
|
|
68
|
-
- `src/tunacode/constants.py`: VERSION constant
|
|
69
|
-
|
|
54
|
+
#
|
|
70
55
|
## Architecture
|
|
71
56
|
|
|
72
57
|
TunaCode is a CLI tool that provides an AI-powered coding assistant using pydantic-ai. Key architectural decisions:
|
|
@@ -137,7 +122,6 @@ Modular setup with validation steps:
|
|
|
137
122
|
- Output formatting via `rich` library
|
|
138
123
|
- Tool confirmations show diffs for file operations
|
|
139
124
|
- Spinner during agent processing
|
|
140
|
-
- Optional Textual UI bridge (`cli/textual_app.py`, `cli/textual_bridge.py`)
|
|
141
125
|
|
|
142
126
|
## Testing
|
|
143
127
|
|
|
@@ -148,29 +132,7 @@ Modular setup with validation steps:
|
|
|
148
132
|
- Characterization tests for capturing existing behavior
|
|
149
133
|
- Async tests using `@pytest.mark.asyncio`
|
|
150
134
|
|
|
151
|
-
### Test Markers
|
|
152
|
-
|
|
153
|
-
- `@pytest.mark.slow` - Long-running tests
|
|
154
|
-
- `@pytest.mark.integration` - Integration tests
|
|
155
|
-
- `@pytest.mark.asyncio` - Async test functions
|
|
156
|
-
|
|
157
|
-
### Running Tests
|
|
158
135
|
|
|
159
|
-
```bash
|
|
160
|
-
# Skip slow tests during development
|
|
161
|
-
pytest -m "not slow"
|
|
162
|
-
|
|
163
|
-
# Run only characterization tests
|
|
164
|
-
pytest tests/test_characterization_*.py
|
|
165
|
-
|
|
166
|
-
# Run with verbose output
|
|
167
|
-
pytest -v
|
|
168
|
-
|
|
169
|
-
# Run with coverage report
|
|
170
|
-
pytest --cov=tunacode --cov-report=html
|
|
171
|
-
```
|
|
172
|
-
|
|
173
|
-
## Configuration
|
|
174
136
|
|
|
175
137
|
### User Configuration
|
|
176
138
|
|
|
@@ -186,21 +148,6 @@ Location: `~/.config/tunacode.json`
|
|
|
186
148
|
}
|
|
187
149
|
```
|
|
188
150
|
|
|
189
|
-
### Project Guide
|
|
190
|
-
|
|
191
|
-
Location: `TUNACODE.md` in project root
|
|
192
|
-
|
|
193
|
-
- Project-specific context for the AI assistant
|
|
194
|
-
- Loaded automatically when present
|
|
195
|
-
- Can include codebase conventions, architecture notes
|
|
196
|
-
|
|
197
|
-
### Linting Configuration
|
|
198
|
-
|
|
199
|
-
`.flake8` settings:
|
|
200
|
-
|
|
201
|
-
- Max line length: 120
|
|
202
|
-
- Ignores: E203, W503, E704 (Black compatibility)
|
|
203
|
-
- Excludes: venv, build, dist directories
|
|
204
151
|
|
|
205
152
|
## Key Design Patterns
|
|
206
153
|
|
|
@@ -227,29 +174,3 @@ Location: `TUNACODE.md` in project root
|
|
|
227
174
|
- Grep tool uses fast-glob prefiltering with MAX_GLOB limit
|
|
228
175
|
- 3-second deadline for first match in searches
|
|
229
176
|
- Background task management for non-blocking operations
|
|
230
|
-
|
|
231
|
-
### Safety Features
|
|
232
|
-
|
|
233
|
-
- No automatic git commits
|
|
234
|
-
- File operations require explicit confirmation (unless in yolo mode)
|
|
235
|
-
- Encourages git branches for experiments: `/branch <name>`
|
|
236
|
-
- Git safety checks during setup
|
|
237
|
-
|
|
238
|
-
Follow this code styling
|
|
239
|
-
|
|
240
|
-
| # | Rule | One-line purpose |
|
|
241
|
-
| --- | ---------------------------------------------- | ---------------------------------------------------------------------------------------------------- |
|
|
242
|
-
| 1 | **Guard Clause** | Flatten nested conditionals by returning early, so pre-conditions are explicit |
|
|
243
|
-
| 2 | **Delete Dead Code** | If it’s never executed, delete it – that’s what VCS is for |
|
|
244
|
-
| 3 | **Normalize Symmetries** | Make identical things look identical and different things look different for faster pattern-spotting |
|
|
245
|
-
| 4 | **New Interface, Old Implementation** | Write the interface you wish existed; delegate to the old one for now |
|
|
246
|
-
| 5 | **Reading Order** | Re-order elements so a reader meets ideas in the order they need them |
|
|
247
|
-
| 6 | **Cohesion Order** | Cluster coupled functions/files so related edits sit together |
|
|
248
|
-
| 7 | **Move Declaration & Initialization Together** | Keep a variable’s birth and first value adjacent for comprehension & dependency safety |
|
|
249
|
-
| 8 | **Explaining Variable** | Extract a sub-expression into a well-named variable to record intent |
|
|
250
|
-
| 9 | **Explaining Constant** | Replace magic literals with symbolic constants that broadcast meaning |
|
|
251
|
-
| 10 | **Explicit Parameters** | Split a routine so all inputs are passed openly, banishing hidden state or maps |
|
|
252
|
-
|
|
253
|
-
## Task Master AI Instructions
|
|
254
|
-
**Import Task Master's development workflow commands and guidelines, treat as if import is in the main CLAUDE.md file.**
|
|
255
|
-
@./.taskmaster/CLAUDE.md
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: tunacode-cli
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.53
|
|
4
4
|
Summary: Your agentic CLI developer.
|
|
5
5
|
Author-email: larock22 <noreply@github.com>
|
|
6
6
|
License: MIT
|
|
@@ -35,6 +35,10 @@ Requires-Dist: pytest-cov; extra == "dev"
|
|
|
35
35
|
Requires-Dist: pytest-asyncio; extra == "dev"
|
|
36
36
|
Requires-Dist: textual-dev; extra == "dev"
|
|
37
37
|
Requires-Dist: pre-commit; extra == "dev"
|
|
38
|
+
Requires-Dist: vulture>=2.7; extra == "dev"
|
|
39
|
+
Requires-Dist: unimport>=1.0.0; extra == "dev"
|
|
40
|
+
Requires-Dist: autoflake>=2.0.0; extra == "dev"
|
|
41
|
+
Requires-Dist: dead>=1.5.0; extra == "dev"
|
|
38
42
|
Dynamic: license-file
|
|
39
43
|
|
|
40
44
|
# TunaCode CLI
|
|
@@ -175,3 +179,144 @@ _Note: While the tool is fully functional, we're focusing on stability and core
|
|
|
175
179
|
---
|
|
176
180
|
|
|
177
181
|
MIT License - see [LICENSE](LICENSE) file
|
|
182
|
+
|
|
183
|
+
hello from tuna world
|
|
184
|
+
|
|
185
|
+
hello world
|
|
186
|
+
|
|
187
|
+
## Getting Started
|
|
188
|
+
|
|
189
|
+
### Prerequisites
|
|
190
|
+
|
|
191
|
+
Before you begin, ensure you have the following installed:
|
|
192
|
+
|
|
193
|
+
- Python 3.10 or higher
|
|
194
|
+
- Git
|
|
195
|
+
|
|
196
|
+
### Installation
|
|
197
|
+
|
|
198
|
+
To install TunaCode, you can use one of the following methods:
|
|
199
|
+
|
|
200
|
+
```bash
|
|
201
|
+
# Option 1: One-line install (Linux/macOS)
|
|
202
|
+
wget -qO- https://raw.githubusercontent.com/alchemiststudiosDOTai/tunacode/master/scripts/install_linux.sh | bash
|
|
203
|
+
|
|
204
|
+
# Option 2: pip install
|
|
205
|
+
pip install tunacode-cli
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
### Development Installation
|
|
209
|
+
|
|
210
|
+
For developers who want to contribute to TunaCode:
|
|
211
|
+
|
|
212
|
+
```bash
|
|
213
|
+
# Clone the repository
|
|
214
|
+
git clone https://github.com/alchemiststudiosDOTai/tunacode.git
|
|
215
|
+
cd tunacode
|
|
216
|
+
|
|
217
|
+
# Quick setup (recommended)
|
|
218
|
+
./scripts/setup_dev_env.sh
|
|
219
|
+
|
|
220
|
+
# Or manual setup
|
|
221
|
+
python3 -m venv venv
|
|
222
|
+
source venv/bin/activate # On Windows: venv\Scripts\activate
|
|
223
|
+
pip install -e ".[dev]"
|
|
224
|
+
|
|
225
|
+
# Verify installation
|
|
226
|
+
python -m tunacode --version
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
See [Development Guide](docs/DEVELOPMENT.md) for detailed instructions.
|
|
230
|
+
|
|
231
|
+
### Configuration
|
|
232
|
+
|
|
233
|
+
Choose your AI provider and set your API key:
|
|
234
|
+
|
|
235
|
+
```bash
|
|
236
|
+
# OpenAI
|
|
237
|
+
tunacode --model "openai:gpt-4o" --key "sk-your-openai-key"
|
|
238
|
+
|
|
239
|
+
# Anthropic Claude
|
|
240
|
+
tunacode --model "anthropic:claude-3.5-sonnet" --key "sk-ant-your-anthropic-key"
|
|
241
|
+
|
|
242
|
+
# OpenRouter (100+ models)
|
|
243
|
+
tunacode --model "openrouter:openai/gpt-4o" --key "sk-or-your-openrouter-key"
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
Your config is saved to `~/.config/tunacode.json` (edit directly with `nvim ~/.config/tunacode.json`)
|
|
247
|
+
|
|
248
|
+
### Recommended Models
|
|
249
|
+
|
|
250
|
+
Based on extensive testing, these models provide the best performance:
|
|
251
|
+
|
|
252
|
+
- `google/gemini-2.5-pro` - Excellent for complex reasoning
|
|
253
|
+
- `openai/gpt-4.1` - Strong general-purpose model
|
|
254
|
+
- `deepseek/deepseek-r1-0528` - Great for code generation
|
|
255
|
+
- `openai/gpt-4.1-mini` - Fast and cost-effective
|
|
256
|
+
- `anthropic/claude-4-sonnet-20250522` - Superior context handling
|
|
257
|
+
|
|
258
|
+
_Note: Formal evaluations coming soon. Any model can work, but these have shown the best results in practice._
|
|
259
|
+
|
|
260
|
+
## Usage
|
|
261
|
+
|
|
262
|
+
### Starting TunaCode
|
|
263
|
+
|
|
264
|
+
```bash
|
|
265
|
+
tunacode
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
### Basic Commands
|
|
269
|
+
|
|
270
|
+
| Command | Description |
|
|
271
|
+
| ------------------------ | ---------------------- |
|
|
272
|
+
| `/help` | Show all commands |
|
|
273
|
+
| `/model <provider:name>` | Switch model |
|
|
274
|
+
| `/clear` | Clear message history |
|
|
275
|
+
| `/compact` | Summarize conversation |
|
|
276
|
+
| `/branch <name>` | Create Git branch |
|
|
277
|
+
| `/yolo` | Skip confirmations |
|
|
278
|
+
| `!<command>` | Run shell command |
|
|
279
|
+
| `exit` | Exit TunaCode |
|
|
280
|
+
|
|
281
|
+
## Performance
|
|
282
|
+
|
|
283
|
+
TunaCode leverages parallel execution for read-only operations, achieving **3x faster** file operations:
|
|
284
|
+
|
|
285
|
+

|
|
286
|
+
|
|
287
|
+
Multiple file reads, directory listings, and searches execute concurrently using async I/O, making code exploration significantly faster.
|
|
288
|
+
|
|
289
|
+
## Features in Development
|
|
290
|
+
|
|
291
|
+
- **Streaming UI**: Currently working on implementing streaming responses for better user experience
|
|
292
|
+
- **Bug Fixes**: Actively addressing issues - please report any bugs you encounter!
|
|
293
|
+
|
|
294
|
+
_Note: While the tool is fully functional, we're focusing on stability and core features before optimizing for speed._
|
|
295
|
+
|
|
296
|
+
## Safety First
|
|
297
|
+
|
|
298
|
+
⚠️ **Important**: TunaCode can modify your codebase. Always:
|
|
299
|
+
|
|
300
|
+
- Use Git branches before making changes
|
|
301
|
+
- Review file modifications before confirming
|
|
302
|
+
- Keep backups of important work
|
|
303
|
+
|
|
304
|
+
## Documentation
|
|
305
|
+
|
|
306
|
+
- [**Features**](docs/FEATURES.md) - All features, tools, and commands
|
|
307
|
+
- [**Advanced Configuration**](docs/ADVANCED-CONFIG.md) - Provider setup, MCP, customization
|
|
308
|
+
- [**Architecture**](docs/ARCHITECTURE.md) - Source code organization and design
|
|
309
|
+
- [**Development**](docs/DEVELOPMENT.md) - Contributing and development setup
|
|
310
|
+
- [**Troubleshooting**](docs/TROUBLESHOOTING.md) - Common issues and solutions
|
|
311
|
+
|
|
312
|
+
## Links
|
|
313
|
+
|
|
314
|
+
- [PyPI Package](https://pypi.org/project/tunacode-cli/)
|
|
315
|
+
- [GitHub Repository](https://github.com/alchemiststudiosDOTai/tunacode)
|
|
316
|
+
- [Report Issues](https://github.com/alchemiststudiosDOTai/tunacode/issues)
|
|
317
|
+
|
|
318
|
+
---
|
|
319
|
+
|
|
320
|
+
MIT License - see [LICENSE](LICENSE) file
|
|
321
|
+
# Test
|
|
322
|
+
# Test
|
|
@@ -136,3 +136,144 @@ _Note: While the tool is fully functional, we're focusing on stability and core
|
|
|
136
136
|
---
|
|
137
137
|
|
|
138
138
|
MIT License - see [LICENSE](LICENSE) file
|
|
139
|
+
|
|
140
|
+
hello from tuna world
|
|
141
|
+
|
|
142
|
+
hello world
|
|
143
|
+
|
|
144
|
+
## Getting Started
|
|
145
|
+
|
|
146
|
+
### Prerequisites
|
|
147
|
+
|
|
148
|
+
Before you begin, ensure you have the following installed:
|
|
149
|
+
|
|
150
|
+
- Python 3.10 or higher
|
|
151
|
+
- Git
|
|
152
|
+
|
|
153
|
+
### Installation
|
|
154
|
+
|
|
155
|
+
To install TunaCode, you can use one of the following methods:
|
|
156
|
+
|
|
157
|
+
```bash
|
|
158
|
+
# Option 1: One-line install (Linux/macOS)
|
|
159
|
+
wget -qO- https://raw.githubusercontent.com/alchemiststudiosDOTai/tunacode/master/scripts/install_linux.sh | bash
|
|
160
|
+
|
|
161
|
+
# Option 2: pip install
|
|
162
|
+
pip install tunacode-cli
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
### Development Installation
|
|
166
|
+
|
|
167
|
+
For developers who want to contribute to TunaCode:
|
|
168
|
+
|
|
169
|
+
```bash
|
|
170
|
+
# Clone the repository
|
|
171
|
+
git clone https://github.com/alchemiststudiosDOTai/tunacode.git
|
|
172
|
+
cd tunacode
|
|
173
|
+
|
|
174
|
+
# Quick setup (recommended)
|
|
175
|
+
./scripts/setup_dev_env.sh
|
|
176
|
+
|
|
177
|
+
# Or manual setup
|
|
178
|
+
python3 -m venv venv
|
|
179
|
+
source venv/bin/activate # On Windows: venv\Scripts\activate
|
|
180
|
+
pip install -e ".[dev]"
|
|
181
|
+
|
|
182
|
+
# Verify installation
|
|
183
|
+
python -m tunacode --version
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
See [Development Guide](docs/DEVELOPMENT.md) for detailed instructions.
|
|
187
|
+
|
|
188
|
+
### Configuration
|
|
189
|
+
|
|
190
|
+
Choose your AI provider and set your API key:
|
|
191
|
+
|
|
192
|
+
```bash
|
|
193
|
+
# OpenAI
|
|
194
|
+
tunacode --model "openai:gpt-4o" --key "sk-your-openai-key"
|
|
195
|
+
|
|
196
|
+
# Anthropic Claude
|
|
197
|
+
tunacode --model "anthropic:claude-3.5-sonnet" --key "sk-ant-your-anthropic-key"
|
|
198
|
+
|
|
199
|
+
# OpenRouter (100+ models)
|
|
200
|
+
tunacode --model "openrouter:openai/gpt-4o" --key "sk-or-your-openrouter-key"
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
Your config is saved to `~/.config/tunacode.json` (edit directly with `nvim ~/.config/tunacode.json`)
|
|
204
|
+
|
|
205
|
+
### Recommended Models
|
|
206
|
+
|
|
207
|
+
Based on extensive testing, these models provide the best performance:
|
|
208
|
+
|
|
209
|
+
- `google/gemini-2.5-pro` - Excellent for complex reasoning
|
|
210
|
+
- `openai/gpt-4.1` - Strong general-purpose model
|
|
211
|
+
- `deepseek/deepseek-r1-0528` - Great for code generation
|
|
212
|
+
- `openai/gpt-4.1-mini` - Fast and cost-effective
|
|
213
|
+
- `anthropic/claude-4-sonnet-20250522` - Superior context handling
|
|
214
|
+
|
|
215
|
+
_Note: Formal evaluations coming soon. Any model can work, but these have shown the best results in practice._
|
|
216
|
+
|
|
217
|
+
## Usage
|
|
218
|
+
|
|
219
|
+
### Starting TunaCode
|
|
220
|
+
|
|
221
|
+
```bash
|
|
222
|
+
tunacode
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
### Basic Commands
|
|
226
|
+
|
|
227
|
+
| Command | Description |
|
|
228
|
+
| ------------------------ | ---------------------- |
|
|
229
|
+
| `/help` | Show all commands |
|
|
230
|
+
| `/model <provider:name>` | Switch model |
|
|
231
|
+
| `/clear` | Clear message history |
|
|
232
|
+
| `/compact` | Summarize conversation |
|
|
233
|
+
| `/branch <name>` | Create Git branch |
|
|
234
|
+
| `/yolo` | Skip confirmations |
|
|
235
|
+
| `!<command>` | Run shell command |
|
|
236
|
+
| `exit` | Exit TunaCode |
|
|
237
|
+
|
|
238
|
+
## Performance
|
|
239
|
+
|
|
240
|
+
TunaCode leverages parallel execution for read-only operations, achieving **3x faster** file operations:
|
|
241
|
+
|
|
242
|
+

|
|
243
|
+
|
|
244
|
+
Multiple file reads, directory listings, and searches execute concurrently using async I/O, making code exploration significantly faster.
|
|
245
|
+
|
|
246
|
+
## Features in Development
|
|
247
|
+
|
|
248
|
+
- **Streaming UI**: Currently working on implementing streaming responses for better user experience
|
|
249
|
+
- **Bug Fixes**: Actively addressing issues - please report any bugs you encounter!
|
|
250
|
+
|
|
251
|
+
_Note: While the tool is fully functional, we're focusing on stability and core features before optimizing for speed._
|
|
252
|
+
|
|
253
|
+
## Safety First
|
|
254
|
+
|
|
255
|
+
⚠️ **Important**: TunaCode can modify your codebase. Always:
|
|
256
|
+
|
|
257
|
+
- Use Git branches before making changes
|
|
258
|
+
- Review file modifications before confirming
|
|
259
|
+
- Keep backups of important work
|
|
260
|
+
|
|
261
|
+
## Documentation
|
|
262
|
+
|
|
263
|
+
- [**Features**](docs/FEATURES.md) - All features, tools, and commands
|
|
264
|
+
- [**Advanced Configuration**](docs/ADVANCED-CONFIG.md) - Provider setup, MCP, customization
|
|
265
|
+
- [**Architecture**](docs/ARCHITECTURE.md) - Source code organization and design
|
|
266
|
+
- [**Development**](docs/DEVELOPMENT.md) - Contributing and development setup
|
|
267
|
+
- [**Troubleshooting**](docs/TROUBLESHOOTING.md) - Common issues and solutions
|
|
268
|
+
|
|
269
|
+
## Links
|
|
270
|
+
|
|
271
|
+
- [PyPI Package](https://pypi.org/project/tunacode-cli/)
|
|
272
|
+
- [GitHub Repository](https://github.com/alchemiststudiosDOTai/tunacode)
|
|
273
|
+
- [Report Issues](https://github.com/alchemiststudiosDOTai/tunacode/issues)
|
|
274
|
+
|
|
275
|
+
---
|
|
276
|
+
|
|
277
|
+
MIT License - see [LICENSE](LICENSE) file
|
|
278
|
+
# Test
|
|
279
|
+
# Test
|
|
@@ -5,7 +5,7 @@ build-backend = "setuptools.build_meta"
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "tunacode-cli"
|
|
7
7
|
|
|
8
|
-
version = "0.0.
|
|
8
|
+
version = "0.0.53"
|
|
9
9
|
description = "Your agentic CLI developer."
|
|
10
10
|
keywords = ["cli", "agent", "development", "automation"]
|
|
11
11
|
readme = "README.md"
|
|
@@ -46,6 +46,10 @@ dev = [
|
|
|
46
46
|
"pytest-asyncio",
|
|
47
47
|
"textual-dev",
|
|
48
48
|
"pre-commit",
|
|
49
|
+
"vulture>=2.7",
|
|
50
|
+
"unimport>=1.0.0",
|
|
51
|
+
"autoflake>=2.0.0",
|
|
52
|
+
"dead>=1.5.0",
|
|
49
53
|
]
|
|
50
54
|
|
|
51
55
|
[project.urls]
|
|
@@ -77,6 +81,7 @@ exclude = [
|
|
|
77
81
|
"build",
|
|
78
82
|
"dist",
|
|
79
83
|
"venv",
|
|
84
|
+
"vulture_whitelist.py",
|
|
80
85
|
]
|
|
81
86
|
|
|
82
87
|
[tool.vulture]
|
|
@@ -87,13 +92,13 @@ exclude = ["venv/", "build/", "dist/", ".git/", "__pycache__/", "*.egg-info/"]
|
|
|
87
92
|
ignore_names = [
|
|
88
93
|
# TYPE_CHECKING imports
|
|
89
94
|
"ReadStream",
|
|
90
|
-
"WriteStream",
|
|
95
|
+
"WriteStream",
|
|
91
96
|
"StateManager",
|
|
92
97
|
"ModelRequest",
|
|
93
98
|
"CommandRegistry",
|
|
94
99
|
# Pytest fixtures
|
|
95
100
|
"caplog",
|
|
96
|
-
"temp_workspace",
|
|
101
|
+
"temp_workspace",
|
|
97
102
|
"setup_test_environment",
|
|
98
103
|
"excinfo",
|
|
99
104
|
# Common patterns
|
|
@@ -110,3 +115,17 @@ ignore_names = [
|
|
|
110
115
|
"style_dict", # Style.from_dict parameter
|
|
111
116
|
"style_str", # get_attrs_for_style_str parameter
|
|
112
117
|
]
|
|
118
|
+
|
|
119
|
+
[tool.bandit]
|
|
120
|
+
# Skip low-severity warnings for subprocess and assert statements
|
|
121
|
+
skips = ["B404", "B603", "B101", "B607", "B110", "B324", "B103", "B604", "B602", "B108"]
|
|
122
|
+
# B404: import subprocess
|
|
123
|
+
# B603: subprocess without shell=True
|
|
124
|
+
# B101: assert statements
|
|
125
|
+
# B607: start process with partial path
|
|
126
|
+
# B110: try/except/pass
|
|
127
|
+
# B324: hashlib (SHA1 for non-security fingerprinting)
|
|
128
|
+
# B103: chmod permissions (needed for template dirs)
|
|
129
|
+
# B604: shell=True (validated usage in REPL)
|
|
130
|
+
# B602: subprocess with shell=True (security utils)
|
|
131
|
+
# B108: hardcoded tmp paths (test fixtures)
|
|
@@ -44,12 +44,12 @@ class Command(ABC):
|
|
|
44
44
|
return CommandCategory.SYSTEM
|
|
45
45
|
|
|
46
46
|
@abstractmethod
|
|
47
|
-
async def execute(self,
|
|
47
|
+
async def execute(self, _args: CommandArgs, context: CommandContext) -> CommandResult:
|
|
48
48
|
"""
|
|
49
49
|
Execute the command.
|
|
50
50
|
|
|
51
51
|
Args:
|
|
52
|
-
|
|
52
|
+
_args: Command arguments (excluding the command name)
|
|
53
53
|
context: Execution context with state and config
|
|
54
54
|
|
|
55
55
|
Returns:
|
{tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode/cli/commands/implementations/__init__.py
RENAMED
|
@@ -12,7 +12,13 @@ from .debug import (
|
|
|
12
12
|
)
|
|
13
13
|
from .development import BranchCommand, InitCommand
|
|
14
14
|
from .model import ModelCommand
|
|
15
|
-
from .system import
|
|
15
|
+
from .system import (
|
|
16
|
+
ClearCommand,
|
|
17
|
+
HelpCommand,
|
|
18
|
+
RefreshConfigCommand,
|
|
19
|
+
StreamingCommand,
|
|
20
|
+
UpdateCommand,
|
|
21
|
+
)
|
|
16
22
|
from .todo import TodoCommand
|
|
17
23
|
|
|
18
24
|
__all__ = [
|
|
@@ -40,7 +40,7 @@ class CompactCommand(SimpleCommand):
|
|
|
40
40
|
result = await process_request(
|
|
41
41
|
summary_prompt,
|
|
42
42
|
context.state_manager,
|
|
43
|
-
|
|
43
|
+
False, # We'll handle the output ourselves
|
|
44
44
|
)
|
|
45
45
|
|
|
46
46
|
# Extract summary text from result
|
{tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode/cli/commands/implementations/debug.py
RENAMED
|
@@ -169,7 +169,7 @@ class ParseToolsCommand(SimpleCommand):
|
|
|
169
169
|
# Create tool callback
|
|
170
170
|
from tunacode.cli.repl import _tool_handler
|
|
171
171
|
|
|
172
|
-
def tool_callback_with_state(part,
|
|
172
|
+
def tool_callback_with_state(part, _node):
|
|
173
173
|
return _tool_handler(part, context.state_manager)
|
|
174
174
|
|
|
175
175
|
try:
|
{tunacode_cli-0.0.51 → tunacode_cli-0.0.53}/src/tunacode/cli/commands/implementations/development.py
RENAMED
|
@@ -72,6 +72,9 @@ If there are Cursor rules (in .cursor/rules/ or .cursorrules) or Copilot rules (
|
|
|
72
72
|
make sure to include them."""
|
|
73
73
|
|
|
74
74
|
# Call the agent to analyze and create/update the file
|
|
75
|
-
|
|
75
|
+
if context.process_request:
|
|
76
|
+
await context.process_request(
|
|
77
|
+
prompt, context.state_manager.session.current_model, context.state_manager
|
|
78
|
+
)
|
|
76
79
|
|
|
77
80
|
return None
|