tunacode-cli 0.0.54__tar.gz → 0.0.56__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.56/CLAUDE.md +78 -0
- {tunacode_cli-0.0.54/src/tunacode_cli.egg-info → tunacode_cli-0.0.56}/PKG-INFO +4 -3
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/README.md +2 -2
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/pyproject.toml +75 -1
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/cli/commands/__init__.py +2 -0
- tunacode_cli-0.0.56/src/tunacode/cli/commands/implementations/plan.py +50 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/cli/commands/registry.py +7 -1
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/cli/repl.py +358 -8
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/cli/repl_components/output_display.py +18 -1
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/cli/repl_components/tool_executor.py +15 -4
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/constants.py +4 -2
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/core/agents/agent_components/__init__.py +20 -0
- tunacode_cli-0.0.56/src/tunacode/core/agents/agent_components/agent_config.py +236 -0
- tunacode_cli-0.0.56/src/tunacode/core/agents/agent_components/agent_helpers.py +219 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/core/agents/agent_components/node_processor.py +82 -115
- tunacode_cli-0.0.56/src/tunacode/core/agents/agent_components/truncation_checker.py +81 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/core/agents/main.py +86 -312
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/core/state.py +51 -3
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/core/tool_handler.py +20 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/prompts/system.md +5 -4
- tunacode_cli-0.0.56/src/tunacode/tools/exit_plan_mode.py +191 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/tools/grep.py +12 -1
- tunacode_cli-0.0.56/src/tunacode/tools/present_plan.py +208 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/types.py +57 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/ui/console.py +2 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/ui/input.py +13 -2
- tunacode_cli-0.0.56/src/tunacode/ui/keybindings.py +70 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/ui/output.py +39 -4
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/ui/panels.py +79 -2
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/ui/prompt_manager.py +19 -2
- tunacode_cli-0.0.56/src/tunacode/ui/tool_descriptions.py +115 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/ui/tool_ui.py +3 -2
- tunacode_cli-0.0.56/src/tunacode/utils/message_utils.py +29 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56/src/tunacode_cli.egg-info}/PKG-INFO +4 -3
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode_cli.egg-info/SOURCES.txt +10 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode_cli.egg-info/requires.txt +1 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/tests/characterization/agent/test_agent_creation.py +5 -3
- tunacode_cli-0.0.56/tests/characterization/repl/test_escape_key_behavior.py +98 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/tests/characterization/repl/test_keyboard_interrupts.py +1 -1
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/tests/characterization/repl/test_output_display_logic.py +1 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/tests/characterization/test_characterization_main.py +3 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/tests/characterization/test_characterization_repl.py +7 -3
- tunacode_cli-0.0.56/tests/characterization/ui/test_spinner_messages.py +101 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/tests/test_agent_output_formatting.py +1 -0
- tunacode_cli-0.0.56/tests/test_plan_mode.py +180 -0
- tunacode_cli-0.0.56/tests/test_spinner_updates.py +110 -0
- tunacode_cli-0.0.54/CLAUDE.md +0 -176
- tunacode_cli-0.0.54/src/tunacode/core/agents/agent_components/agent_config.py +0 -109
- tunacode_cli-0.0.54/src/tunacode/ui/keybindings.py +0 -82
- tunacode_cli-0.0.54/src/tunacode/utils/message_utils.py +0 -19
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/LICENSE +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/MANIFEST.in +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/setup.cfg +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/setup.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/__init__.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/cli/__init__.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/cli/commands/base.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/cli/commands/implementations/__init__.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/cli/commands/implementations/conversation.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/cli/commands/implementations/debug.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/cli/commands/implementations/development.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/cli/commands/implementations/model.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/cli/commands/implementations/system.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/cli/commands/implementations/template.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/cli/commands/implementations/todo.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/cli/commands/template_shortcut.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/cli/main.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/cli/repl_components/__init__.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/cli/repl_components/command_parser.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/cli/repl_components/error_recovery.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/configuration/__init__.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/configuration/defaults.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/configuration/models.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/configuration/settings.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/context.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/core/__init__.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/core/agents/__init__.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/core/agents/agent_components/json_tool_parser.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/core/agents/agent_components/message_handler.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/core/agents/agent_components/response_state.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/core/agents/agent_components/result_wrapper.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/core/agents/agent_components/task_completion.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/core/agents/agent_components/tool_buffer.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/core/agents/agent_components/tool_executor.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/core/agents/utils.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/core/background/__init__.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/core/background/manager.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/core/code_index.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/core/llm/__init__.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/core/logging/__init__.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/core/logging/config.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/core/logging/formatters.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/core/logging/handlers.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/core/logging/logger.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/core/setup/__init__.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/core/setup/agent_setup.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/core/setup/base.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/core/setup/config_setup.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/core/setup/coordinator.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/core/setup/environment_setup.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/core/setup/git_safety_setup.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/core/setup/template_setup.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/core/token_usage/api_response_parser.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/core/token_usage/cost_calculator.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/core/token_usage/usage_tracker.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/exceptions.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/py.typed +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/services/__init__.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/services/mcp.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/setup.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/templates/__init__.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/templates/loader.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/tools/__init__.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/tools/base.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/tools/bash.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/tools/glob.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/tools/grep_components/__init__.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/tools/grep_components/file_filter.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/tools/grep_components/pattern_matcher.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/tools/grep_components/result_formatter.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/tools/grep_components/search_result.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/tools/list_dir.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/tools/read_file.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/tools/read_file_async_poc.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/tools/run_command.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/tools/todo.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/tools/update_file.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/tools/write_file.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/ui/__init__.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/ui/completers.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/ui/constants.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/ui/decorators.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/ui/lexers.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/ui/logging_compat.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/ui/utils.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/ui/validators.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/utils/__init__.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/utils/bm25.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/utils/diff_utils.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/utils/file_utils.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/utils/import_cache.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/utils/retry.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/utils/ripgrep.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/utils/security.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/utils/system.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/utils/text_utils.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/utils/token_counter.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode/utils/user_configuration.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode_cli.egg-info/dependency_links.txt +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode_cli.egg-info/entry_points.txt +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/src/tunacode_cli.egg-info/top_level.txt +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/tests/characterization/__init__.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/tests/characterization/agent/__init__.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/tests/characterization/agent/conftest.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/tests/characterization/agent/test_json_tool_parsing.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/tests/characterization/agent/test_process_node.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/tests/characterization/agent/test_process_request.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/tests/characterization/agent/test_tool_message_patching.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/tests/characterization/background/test_background_edge_cases.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/tests/characterization/background/test_cleanup.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/tests/characterization/background/test_task_cancellation.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/tests/characterization/background/test_task_creation.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/tests/characterization/background/test_task_execution.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/tests/characterization/code_index/test_cache_management.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/tests/characterization/code_index/test_file_scanning.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/tests/characterization/code_index/test_index_building.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/tests/characterization/code_index/test_search_operations.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/tests/characterization/code_index/test_symbol_extraction.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/tests/characterization/commands/__init__.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/tests/characterization/commands/test_init_command.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/tests/characterization/conftest.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/tests/characterization/context/__init__.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/tests/characterization/context/test_context_acceptance.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/tests/characterization/context/test_context_integration.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/tests/characterization/context/test_context_loading.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/tests/characterization/context/test_tunacode_logging.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/tests/characterization/repl/test_command_parsing.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/tests/characterization/repl/test_error_handling.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/tests/characterization/repl/test_input_handling.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/tests/characterization/repl/test_multiline_input.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/tests/characterization/repl/test_repl_initialization.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/tests/characterization/repl/test_session_flow.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/tests/characterization/services/test_error_recovery.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/tests/characterization/services/test_llm_routing.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/tests/characterization/services/test_mcp_integration.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/tests/characterization/services/test_service_lifecycle.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/tests/characterization/state/test_agent_tracking.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/tests/characterization/state/test_message_history.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/tests/characterization/state/test_permissions.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/tests/characterization/state/test_session_management.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/tests/characterization/state/test_state_initialization.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/tests/characterization/state/test_user_config.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/tests/characterization/test_characterization_commands.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/tests/characterization/test_characterization_grep.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/tests/characterization/ui/test_async_ui.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/tests/characterization/ui/test_console_output.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/tests/characterization/ui/test_diff_display.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/tests/characterization/ui/test_prompt_rendering.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/tests/characterization/ui/test_tool_confirmations.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/tests/characterization/utils/test_expand_file_refs.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/tests/characterization/utils/test_file_operations.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/tests/characterization/utils/test_git_commands.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/tests/characterization/utils/test_token_counting.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/tests/characterization/utils/test_utils_edge_cases.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/tests/conftest.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/tests/test_completion_detection.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/tests/test_json_retry.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/tests/test_logging_config.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/tests/test_phase2_type_hints.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/tests/test_prompt_changes_validation.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/tests/test_security.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/tests/test_tool_batching_retry.py +0 -0
- {tunacode_cli-0.0.54 → tunacode_cli-0.0.56}/tests/unit/test_constants_enums.py +0 -0
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
### Documentation
|
|
2
|
+
|
|
3
|
+
- update the documents @documentation and in .claude after any update.
|
|
4
|
+
|
|
5
|
+
- use the subagent tech-docs-maintainer to update the documentation you MUST instruct the subagent to keep doc updates short you will be PUNISHED for not telling the documentation agent to keep it to only the most distilled information
|
|
6
|
+
|
|
7
|
+
- always follow best practices with git commits naming and gh cli workflows
|
|
8
|
+
|
|
9
|
+
- commit frequently
|
|
10
|
+
|
|
11
|
+
- always be on the side of safety, if you have any question consult the user
|
|
12
|
+
|
|
13
|
+
### Python Coding Standards
|
|
14
|
+
|
|
15
|
+
- always use the venv
|
|
16
|
+
- Use type hints (PEP 484) for all function signatures
|
|
17
|
+
- Prefer f-strings (PEP 498) over %-formatting or .format()
|
|
18
|
+
- Use pathlib.Path instead of os.path for filesystem operations
|
|
19
|
+
- Structure imports: stdlib → third-party → local (PEP 8)
|
|
20
|
+
- Use dataclasses (PEP 557) for simple data containers
|
|
21
|
+
- Prefer context managers (with) for resource handling
|
|
22
|
+
- Use structural pattern matching (PEP 634) for complex
|
|
23
|
+
- run ruff frequently
|
|
24
|
+
|
|
25
|
+
### Testing
|
|
26
|
+
|
|
27
|
+
- "make test" command the entire testing suite
|
|
28
|
+
|
|
29
|
+
- anytime a new feature or refactor is done, we MUST find or make the golden/character test FIRST as a baseline standaard BEFORE starting, under no circumstance are you to not follow this pattern
|
|
30
|
+
|
|
31
|
+
### Workflow
|
|
32
|
+
|
|
33
|
+
- before any updates make a git commit rollback point, clearly labeled for future agents
|
|
34
|
+
|
|
35
|
+
- the clear outline of the objective MUST be established before we begin ANY coding, do not under any circumstance begin any updates untill this is clearly understood, if you have any ambiuguity or quesiton, the user can be brought in or use best practises
|
|
36
|
+
|
|
37
|
+
- use scratchpad-multi.sh as you work, after the MD file is done being used sort it to the approate directory
|
|
38
|
+
|
|
39
|
+
- the MD file created by the bash file MUST be used for the duiration of the task you will be PUNISHED if you do not update this file as you work.
|
|
40
|
+
|
|
41
|
+
- any key logic or file's must be inlcuded here in the following format if this format is not followed you will STOP reasses, and begin again
|
|
42
|
+
|
|
43
|
+
### Scratchpad Template Example
|
|
44
|
+
|
|
45
|
+
```
|
|
46
|
+
# Implementing Authentication Module
|
|
47
|
+
_Started: 2025-08-06 10:00:00_
|
|
48
|
+
_Agent: default_
|
|
49
|
+
|
|
50
|
+
[1] Found auth logic in src/auth/handler.py:45
|
|
51
|
+
[2] Key dependencies: jwt, bcrypt, session_manager
|
|
52
|
+
[3] Modified login function to add rate limiting
|
|
53
|
+
[3~1] Fixed edge case for empty passwords
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
- General documentation → archive to @documentation/
|
|
57
|
+
- Developer/tunacode-specific → archive to @ .claude
|
|
58
|
+
- Organize archives by category (agent/development/ etc)
|
|
59
|
+
- In general the scratchpad should never go in any other dirs ececpt the two above
|
|
60
|
+
|
|
61
|
+
- if a task at hand is to big to handle as a one off use the taskmaster MCP but in general this should only be used as needed, usually it will not be needed
|
|
62
|
+
|
|
63
|
+
- grep documentation and .claude as needed BOTH of these have a README.md that ahs a direcoty map, you MUST read these before any bigger grep or context searches
|
|
64
|
+
|
|
65
|
+
- in general gather as much context as needed, unless specified by the user
|
|
66
|
+
|
|
67
|
+
- this is the most important part of this prompt: Synthesis context aggressively and heuristically AS NEEDED ONLY You can deploy the appropriate subagent for complex tasks agents list below
|
|
68
|
+
|
|
69
|
+
## Available Agents:
|
|
70
|
+
|
|
71
|
+
1. **bug-context-analyzer** - Investigates precise context around bugs without suggesting fixes
|
|
72
|
+
2. **code-synthesis-analyzer** - Analyzes recent code changes to identify issues needing fixes
|
|
73
|
+
3. **documentation-synthesis-qa** - Creates comprehensive docs via multi-agent orchestration
|
|
74
|
+
4. **expert-debugger** - Debugs issues using strategic logging and root cause analysis
|
|
75
|
+
5. **phased-task-processor** - Breaks down markdown tasks into max 5 actionable phases
|
|
76
|
+
6. **prompt-engineer** - Optimizes prompts using 26 documented engineering principles
|
|
77
|
+
7. **rapid-code-synthesis-qa** - Quick quality assessment with confidence scores (1-5 scale)
|
|
78
|
+
8. **tech-docs-maintainer** - Updates docs in @documentation and .claude directories
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: tunacode-cli
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.56
|
|
4
4
|
Summary: Your agentic CLI developer.
|
|
5
5
|
Author-email: larock22 <noreply@github.com>
|
|
6
6
|
License: MIT
|
|
@@ -39,6 +39,7 @@ Requires-Dist: vulture>=2.7; extra == "dev"
|
|
|
39
39
|
Requires-Dist: unimport>=1.0.0; extra == "dev"
|
|
40
40
|
Requires-Dist: autoflake>=2.0.0; extra == "dev"
|
|
41
41
|
Requires-Dist: dead>=1.5.0; extra == "dev"
|
|
42
|
+
Requires-Dist: hatch>=1.6.0; extra == "dev"
|
|
42
43
|
Dynamic: license-file
|
|
43
44
|
|
|
44
45
|
# TunaCode CLI
|
|
@@ -106,7 +107,7 @@ tunacode --model "anthropic:claude-3.5-sonnet" --key "sk-ant-your-anthropic-key"
|
|
|
106
107
|
tunacode --model "openrouter:openai/gpt-4o" --key "sk-or-your-openrouter-key"
|
|
107
108
|
```
|
|
108
109
|
|
|
109
|
-
Your config is saved to `~/.config/tunacode.json` (edit directly with `nvim ~/.config/tunacode.json`)
|
|
110
|
+
Your config is saved to `~/.config/tunacode.json`. This file stores your API keys, model preferences, and runtime settings like `max_iterations` (default: 40) and `context_window_size`. You can edit it directly with `nvim ~/.config/tunacode.json` or see [the complete configuration example](documentation/configuration/config-file-example.md) for all available options.
|
|
110
111
|
|
|
111
112
|
### Recommended Models
|
|
112
113
|
|
|
@@ -243,7 +244,7 @@ tunacode --model "anthropic:claude-3.5-sonnet" --key "sk-ant-your-anthropic-key"
|
|
|
243
244
|
tunacode --model "openrouter:openai/gpt-4o" --key "sk-or-your-openrouter-key"
|
|
244
245
|
```
|
|
245
246
|
|
|
246
|
-
Your config is saved to `~/.config/tunacode.json` (edit directly with `nvim ~/.config/tunacode.json`)
|
|
247
|
+
Your config is saved to `~/.config/tunacode.json`. This file stores your API keys, model preferences, and runtime settings like `max_iterations` (default: 40) and `context_window_size`. You can edit it directly with `nvim ~/.config/tunacode.json` or see [the complete configuration example](documentation/configuration/config-file-example.md) for all available options.
|
|
247
248
|
|
|
248
249
|
### Recommended Models
|
|
249
250
|
|
|
@@ -63,7 +63,7 @@ tunacode --model "anthropic:claude-3.5-sonnet" --key "sk-ant-your-anthropic-key"
|
|
|
63
63
|
tunacode --model "openrouter:openai/gpt-4o" --key "sk-or-your-openrouter-key"
|
|
64
64
|
```
|
|
65
65
|
|
|
66
|
-
Your config is saved to `~/.config/tunacode.json` (edit directly with `nvim ~/.config/tunacode.json`)
|
|
66
|
+
Your config is saved to `~/.config/tunacode.json`. This file stores your API keys, model preferences, and runtime settings like `max_iterations` (default: 40) and `context_window_size`. You can edit it directly with `nvim ~/.config/tunacode.json` or see [the complete configuration example](documentation/configuration/config-file-example.md) for all available options.
|
|
67
67
|
|
|
68
68
|
### Recommended Models
|
|
69
69
|
|
|
@@ -200,7 +200,7 @@ tunacode --model "anthropic:claude-3.5-sonnet" --key "sk-ant-your-anthropic-key"
|
|
|
200
200
|
tunacode --model "openrouter:openai/gpt-4o" --key "sk-or-your-openrouter-key"
|
|
201
201
|
```
|
|
202
202
|
|
|
203
|
-
Your config is saved to `~/.config/tunacode.json` (edit directly with `nvim ~/.config/tunacode.json`)
|
|
203
|
+
Your config is saved to `~/.config/tunacode.json`. This file stores your API keys, model preferences, and runtime settings like `max_iterations` (default: 40) and `context_window_size`. You can edit it directly with `nvim ~/.config/tunacode.json` or see [the complete configuration example](documentation/configuration/config-file-example.md) for all available options.
|
|
204
204
|
|
|
205
205
|
### Recommended Models
|
|
206
206
|
|
|
@@ -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.56"
|
|
9
9
|
description = "Your agentic CLI developer."
|
|
10
10
|
keywords = ["cli", "agent", "development", "automation"]
|
|
11
11
|
readme = "README.md"
|
|
@@ -50,6 +50,7 @@ dev = [
|
|
|
50
50
|
"unimport>=1.0.0",
|
|
51
51
|
"autoflake>=2.0.0",
|
|
52
52
|
"dead>=1.5.0",
|
|
53
|
+
"hatch>=1.6.0",
|
|
53
54
|
]
|
|
54
55
|
|
|
55
56
|
[project.urls]
|
|
@@ -129,3 +130,76 @@ skips = ["B404", "B603", "B101", "B607", "B110", "B324", "B103", "B604", "B602",
|
|
|
129
130
|
# B604: shell=True (validated usage in REPL)
|
|
130
131
|
# B602: subprocess with shell=True (security utils)
|
|
131
132
|
# B108: hardcoded tmp paths (test fixtures)
|
|
133
|
+
|
|
134
|
+
[tool.mypy]
|
|
135
|
+
python_version = "3.10"
|
|
136
|
+
ignore_missing_imports = true
|
|
137
|
+
warn_return_any = false
|
|
138
|
+
warn_unused_configs = true
|
|
139
|
+
disallow_untyped_defs = false
|
|
140
|
+
disallow_incomplete_defs = false
|
|
141
|
+
check_untyped_defs = false
|
|
142
|
+
disallow_untyped_decorators = false
|
|
143
|
+
no_implicit_optional = true
|
|
144
|
+
warn_redundant_casts = true
|
|
145
|
+
warn_unused_ignores = false
|
|
146
|
+
warn_no_return = true
|
|
147
|
+
follow_imports = "silent"
|
|
148
|
+
# Allow CLAUDE_ANCHOR comments in docstrings
|
|
149
|
+
disable_error_code = ["annotation-unchecked"]
|
|
150
|
+
|
|
151
|
+
[tool.hatch.envs.default.scripts]
|
|
152
|
+
# Development
|
|
153
|
+
install = "pip install -e '.[dev]'"
|
|
154
|
+
run = "python -m tunacode"
|
|
155
|
+
test-script = "echo 'Test script works'"
|
|
156
|
+
|
|
157
|
+
# Cleaning
|
|
158
|
+
clean = "python -c \"import shutil, pathlib; dirs=['build', 'dist']; [shutil.rmtree(d, ignore_errors=True) for d in dirs]; [shutil.rmtree(p, ignore_errors=True) for p in pathlib.Path('.').rglob('*.egg-info') if p.is_dir()]; [shutil.rmtree(p, ignore_errors=True) for p in pathlib.Path('.').rglob('__pycache__') if p.is_dir()]; [p.unlink(missing_ok=True) for p in pathlib.Path('.').rglob('*.pyc')]; print('Cleaned build artifacts, egg-info, __pycache__, and *.pyc files')\""
|
|
159
|
+
|
|
160
|
+
# Linting & Formatting
|
|
161
|
+
lint = "ruff check . && ruff format ."
|
|
162
|
+
lint-check = [
|
|
163
|
+
"ruff check .",
|
|
164
|
+
"ruff format --check .",
|
|
165
|
+
]
|
|
166
|
+
|
|
167
|
+
# Dead code analysis
|
|
168
|
+
vulture = "python -m vulture --config pyproject.toml"
|
|
169
|
+
vulture-check = "python -m vulture --config pyproject.toml --min-confidence 100"
|
|
170
|
+
|
|
171
|
+
dead-code-check = [
|
|
172
|
+
"python -c \"print('Running comprehensive dead code analysis...')\"",
|
|
173
|
+
"python -c \"print('\\n=== Vulture (unused code) ===')\"",
|
|
174
|
+
"python -m vulture . --min-confidence 80 --exclude '*/test/*,*/tests/*,venv/*,build/*,dist/*' || true",
|
|
175
|
+
"python -c \"print('\\n=== Unimport (unused imports) ===')\"",
|
|
176
|
+
"python -m unimport --check . || true",
|
|
177
|
+
"python -c \"print('\\n=== Dead (dead code detector) ===')\"",
|
|
178
|
+
"python -m dead . || true",
|
|
179
|
+
"python -c \"print('\\n=== Checking test coverage for dead code ===')\"",
|
|
180
|
+
]
|
|
181
|
+
|
|
182
|
+
dead-code-clean = [
|
|
183
|
+
"python -c \"print('Removing dead code...')\"",
|
|
184
|
+
"python -m unimport --remove-all .",
|
|
185
|
+
"python -m autoflake --remove-all-unused-imports --remove-unused-variables -i -r src/",
|
|
186
|
+
"python -c \"print('Dead code cleanup complete!')\"",
|
|
187
|
+
]
|
|
188
|
+
|
|
189
|
+
dead-code-report = [
|
|
190
|
+
"python -c \"print('Generating dead code reports...'); import pathlib; pathlib.Path('reports').mkdir(exist_ok=True)\"",
|
|
191
|
+
"python -m vulture . --min-confidence 60 > reports/dead_code_vulture.txt || true",
|
|
192
|
+
"python -m unimport --check . --diff > reports/unused_imports.txt || true",
|
|
193
|
+
"python -c \"print('Reports generated in reports/ directory')\"",
|
|
194
|
+
]
|
|
195
|
+
|
|
196
|
+
# Testing
|
|
197
|
+
test = "python -m pytest -q tests/characterization tests/test_security.py tests/test_agent_output_formatting.py tests/test_prompt_changes_validation.py"
|
|
198
|
+
coverage = "pytest --cov=src/tunacode --cov-report=term"
|
|
199
|
+
|
|
200
|
+
# Building
|
|
201
|
+
build = "python -m build"
|
|
202
|
+
|
|
203
|
+
# Playwright utilities
|
|
204
|
+
remove-playwright = "python scripts/playwright_cache.py remove"
|
|
205
|
+
restore-playwright = "python scripts/playwright_cache.py restore"
|
|
@@ -7,6 +7,8 @@ This package provides a modular command system with:
|
|
|
7
7
|
|
|
8
8
|
The main public API provides backward compatibility with the original
|
|
9
9
|
commands.py module while enabling better organization and maintainability.
|
|
10
|
+
|
|
11
|
+
CLAUDE_ANCHOR[commands-module]: Command registry and dispatch system
|
|
10
12
|
"""
|
|
11
13
|
|
|
12
14
|
# Import base classes and infrastructure
|
|
@@ -0,0 +1,50 @@
|
|
|
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 Command, 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,4 +1,7 @@
|
|
|
1
|
-
"""Command registry and factory for TunaCode CLI commands.
|
|
1
|
+
"""Command registry and factory for TunaCode CLI commands.
|
|
2
|
+
|
|
3
|
+
CLAUDE_ANCHOR[command-registry]: Central command registration and execution
|
|
4
|
+
"""
|
|
2
5
|
|
|
3
6
|
from dataclasses import dataclass
|
|
4
7
|
from typing import Any, Dict, List, Optional, Type
|
|
@@ -20,6 +23,7 @@ from .implementations.debug import (
|
|
|
20
23
|
)
|
|
21
24
|
from .implementations.development import BranchCommand, InitCommand
|
|
22
25
|
from .implementations.model import ModelCommand
|
|
26
|
+
from .implementations.plan import ExitPlanCommand, PlanCommand
|
|
23
27
|
from .implementations.system import (
|
|
24
28
|
ClearCommand,
|
|
25
29
|
HelpCommand,
|
|
@@ -126,6 +130,8 @@ class CommandRegistry:
|
|
|
126
130
|
InitCommand,
|
|
127
131
|
TemplateCommand,
|
|
128
132
|
TodoCommand,
|
|
133
|
+
PlanCommand, # Add plan command
|
|
134
|
+
ExitPlanCommand, # Add exit plan command
|
|
129
135
|
]
|
|
130
136
|
|
|
131
137
|
# Register all discovered commands
|