tunacode-cli 0.0.62__tar.gz → 0.0.64__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.64/.claude/development/uv-hatch-setup.md +102 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/development/uv-installer-updates.md +2 -2
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/scratchpad/agents/default/scratchpad.md +2 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/settings.local.json +2 -1
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.pre-commit-config.yaml +8 -6
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/CHANGELOG.md +80 -5
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/PKG-INFO +1 -1
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/pyproject.toml +2 -2
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/scripts/install_linux.sh +85 -14
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/scripts/uninstall.sh +28 -28
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/cli/commands/implementations/system.py +50 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/configuration/defaults.py +1 -1
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/constants.py +1 -1
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/prompts/system.md +1 -0
- tunacode_cli-0.0.62/.claude/development/uv-hatch-setup.md +0 -235
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/MEMORY_ANCHOR_SPEC.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/NEXT_PR_RULES.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/README.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/agents/bug-context-analyzer.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/agents/code-synthesis-analyzer.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/agents/documentation-synthesis-qa.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/agents/expert-debugger.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/agents/phased-task-processor.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/agents/prompt-engineer.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/agents/rapid-code-synthesis-qa.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/agents/tech-docs-maintainer.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/anchors.json +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/commands/deploy.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/commands/github-issue.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/commands/smells.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/commands/work.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/commands/workflow.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/delta/2025-01-05-baseline.yml +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/delta/fix-text-alignment-layout-task3.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/delta/task4_ui_formatting_fix.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/delta/v0.0.53_to_v0.0.54.diff +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/development/always-on-display-implementation.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/development/cli-json-recovery-incident.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/development/directory-caching-optimization.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/development/esc-investigation/ESC_KEY_INVESTIGATION.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/development/esc-investigation/ESC_KEY_STREAMING_ANALYSIS.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/development/hatch-commands.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/development/phase5-prompt-injection-system.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/metadata/components.yml +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/metadata/hotspots.txt +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/patterns/json_retry_implementation.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/qa/fix-agent-errors.yml +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/qa/fix-publish-script.yml +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/qa/fix-runtime-warnings.yml +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/scratchpad/README.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/scratchpad/active/task_json_retry_implementation_summary_2025-07-24_13-05-40.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/scratchpad/active/task_standardize_ui_formatting_patterns_2025-07-23_20-43-28.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/scratchpad/agents/default/spinner-enhancement-2025-08-07.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/scratchpad/agents/esc-investigation/scratchpad.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/scratchpad/agents/phase5-recovery/scratchpad.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/scratchpad/agents/tech-docs-maintainer/scratchpad.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/scratchpad/archived/code-synthesis-analyzer_ESC_Double-Press_REPL_Abort_Analysis_2025-08-06_134859_scratchpad.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/scratchpad/archived/default_Add_Prompt_Injection_to_Remaining_Tools_-_Continuation_2025-08-13_152542_scratchpad.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/scratchpad/archived/default_Add_Prompt_Injection_to_Remaining_Tools_2025-08-13_152352_scratchpad.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/scratchpad/archived/default_CLI_Agent_JSON_Recovery_Investigation_2025-08-12_124206_scratchpad.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/scratchpad/archived/default_CLI_Agent_JSON_Recovery_Investigation_2025-08-12_124727_scratchpad.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/scratchpad/archived/default_Completely_remove_TUNACODE_TASK_COMPLETE_from_plan_mode_2025-08-09_091836_scratchpad.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/scratchpad/archived/default_Debug_ESC_key_still_not_working_in_approval_prompt_2025-08-09_033534_scratchpad.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/scratchpad/archived/default_Debug_persistent_KeyboardInterrupt_in_event_loop_2025-08-09_034136_scratchpad.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/scratchpad/archived/default_Debug_present_plan_tool_registration_and_model_capability_2025-08-09_092923_scratchpad.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/scratchpad/archived/default_Debug_stuck_double_escape_in_plan_approval_2025-08-09_033214_scratchpad.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/scratchpad/archived/default_Fix_Application.exit()_failed_error_in_ESC_keybinding_2025-08-09_075607_scratchpad.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/scratchpad/archived/default_Fix_ESC_double-tap_and_plan_display_issues_2025-08-09_090055_scratchpad.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/scratchpad/archived/default_Fix_ESC_exceptions_and_missing_present_plan_tool_2025-08-09_081700_scratchpad.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/scratchpad/archived/default_Fix_agent_not_calling_present_plan_tool_2025-08-09_090827_scratchpad.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/scratchpad/archived/default_Fix_double_escape_for_planning_mode_approval_prompt_2025-08-09_032759_scratchpad.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/scratchpad/archived/default_Fix_unhandled_KeyboardInterrupt_exception_in_event_loop_2025-08-09_033843_scratchpad.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/scratchpad/archived/default_Fixed_Thinking_dots_animation_2025-08-11_121009_scratchpad.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/scratchpad/archived/default_Force_agent_to_actually_call_present_plan_tool_2025-08-09_091334_scratchpad.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/scratchpad/archived/default_GitHub_Directory_Review_2025-08-11_122451_scratchpad.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/scratchpad/archived/default_Implementing_ESC_key_double-press_for_REPL_abort_2025-08-06_124754_scratchpad.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/scratchpad/archived/default_JSON_Recovery_Implementation_2025-08-12_130251_scratchpad.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/scratchpad/archived/default_Makefile_to_Hatch_Migration_2025-08-07_192356_scratchpad.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/scratchpad/archived/default_Performance_Optimization_-_Agent_Initialization_2025-08-13_160447_scratchpad.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/scratchpad/archived/default_Phase_3_-_Glob_Tool_Optimization_2025-08-13_142601_scratchpad.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/scratchpad/archived/default_Replace_entire_system_prompt_with_tool-only_instructions_2025-08-09_112839_scratchpad.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/scratchpad/archived/default_TunaCode_Search_Enhancement_Implementation_2025-08-13_140905_scratchpad.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/scratchpad/archived/default_Update_Documentation_for_JSON_Recovery_System_2025-08-12_131127_scratchpad.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/scratchpad/archived/default_Update_documentation_for_always-on_display_UX_improvements_2025-08-12_154818_scratchpad.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/scratchpad/archived/phase5-recovery_Phase_5_Recovery_Analysis_2025-08-13_145339_scratchpad.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/scratchpad/locks/code-synthesis-analyzer.lock +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/scratchpad/locks/default.lock +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/scratchpad/locks/esc-investigation.lock +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/scratchpad/locks/phase5-recovery.lock +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/scratchpad/locks/tech-docs-maintainer.lock +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/scratchpad/shared/done_tasks/code-synthesis-analyzer_ESC_Double-Press_REPL_Abort_Analysis_2025-08-06_134859_scratchpad.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/scratchpad/shared/done_tasks/default_Add_Prompt_Injection_to_Remaining_Tools_-_Continuation_2025-08-13_152542_scratchpad.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/scratchpad/shared/done_tasks/default_Add_Prompt_Injection_to_Remaining_Tools_2025-08-13_152352_scratchpad.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/scratchpad/shared/done_tasks/default_CLI_Agent_JSON_Recovery_Investigation_2025-08-12_124206_scratchpad.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/scratchpad/shared/done_tasks/default_CLI_Agent_JSON_Recovery_Investigation_2025-08-12_124727_scratchpad.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/scratchpad/shared/done_tasks/default_Completely_remove_TUNACODE_TASK_COMPLETE_from_plan_mode_2025-08-09_091836_scratchpad.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/scratchpad/shared/done_tasks/default_Debug_ESC_key_still_not_working_in_approval_prompt_2025-08-09_033534_scratchpad.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/scratchpad/shared/done_tasks/default_Debug_persistent_KeyboardInterrupt_in_event_loop_2025-08-09_034136_scratchpad.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/scratchpad/shared/done_tasks/default_Debug_present_plan_tool_registration_and_model_capability_2025-08-09_092923_scratchpad.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/scratchpad/shared/done_tasks/default_Debug_stuck_double_escape_in_plan_approval_2025-08-09_033214_scratchpad.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/scratchpad/shared/done_tasks/default_Fix_Application.exit()_failed_error_in_ESC_keybinding_2025-08-09_075607_scratchpad.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/scratchpad/shared/done_tasks/default_Fix_ESC_double-tap_and_plan_display_issues_2025-08-09_090055_scratchpad.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/scratchpad/shared/done_tasks/default_Fix_ESC_exceptions_and_missing_present_plan_tool_2025-08-09_081700_scratchpad.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/scratchpad/shared/done_tasks/default_Fix_agent_not_calling_present_plan_tool_2025-08-09_090827_scratchpad.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/scratchpad/shared/done_tasks/default_Fix_double_escape_for_planning_mode_approval_prompt_2025-08-09_032759_scratchpad.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/scratchpad/shared/done_tasks/default_Fix_unhandled_KeyboardInterrupt_exception_in_event_loop_2025-08-09_033843_scratchpad.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/scratchpad/shared/done_tasks/default_Fixed_Thinking_dots_animation_2025-08-11_121009_scratchpad.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/scratchpad/shared/done_tasks/default_Force_agent_to_actually_call_present_plan_tool_2025-08-09_091334_scratchpad.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/scratchpad/shared/done_tasks/default_GitHub_Directory_Review_2025-08-11_122451_scratchpad.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/scratchpad/shared/done_tasks/default_Implementing_ESC_key_double-press_for_REPL_abort_2025-08-06_124754_scratchpad.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/scratchpad/shared/done_tasks/default_JSON_Recovery_Implementation_2025-08-12_130251_scratchpad.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/scratchpad/shared/done_tasks/default_Makefile_to_Hatch_Migration_2025-08-07_192356_scratchpad.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/scratchpad/shared/done_tasks/default_Performance_Optimization_-_Agent_Initialization_2025-08-13_160447_scratchpad.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/scratchpad/shared/done_tasks/default_Phase_3_-_Glob_Tool_Optimization_2025-08-13_142601_scratchpad.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/scratchpad/shared/done_tasks/default_Replace_entire_system_prompt_with_tool-only_instructions_2025-08-09_112839_scratchpad.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/scratchpad/shared/done_tasks/default_TunaCode_Search_Enhancement_Implementation_2025-08-13_140905_scratchpad.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/scratchpad/shared/done_tasks/default_Update_Documentation_for_JSON_Recovery_System_2025-08-12_131127_scratchpad.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/scratchpad/shared/done_tasks/default_Update_documentation_for_always-on_display_UX_improvements_2025-08-12_154818_scratchpad.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/scratchpad/shared/done_tasks/phase5-recovery_Phase_5_Recovery_Analysis_2025-08-13_145339_scratchpad.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/tech-docs-maintainer.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.claude/test_suite_issues_resolved.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.env.example +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.github/pull_request_template.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.github/scripts/check_file_size.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.github/workflows/lint.yml +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.gitignore +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.taskmaster/CLAUDE.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.taskmaster/config.json +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.taskmaster/docs/prd.txt +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.taskmaster/state.json +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.taskmaster/tasks/task_001.txt +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.taskmaster/tasks/task_002.txt +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.taskmaster/tasks/task_003.txt +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.taskmaster/tasks/task_004.txt +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.taskmaster/tasks/task_005.txt +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.taskmaster/tasks/task_006.txt +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.taskmaster/tasks/tasks.json +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/.taskmaster/templates/example_prd.txt +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/CLAUDE.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/LICENSE +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/MANIFEST.in +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/README.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/SEARCH_ENHANCEMENT_PLAN.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/assets/tunacode_example.png +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/documentation/README.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/documentation/agent/TOOLS_WORKFLOW.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/documentation/agent/agent-inspo.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/documentation/agent/how-tunacode-agent-works.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/documentation/agent/main-agent-architecture.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/documentation/agent/swepmini-example.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/documentation/configuration/config-file-example.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/documentation/configuration/logging-configuration.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/documentation/development/codebase-hygiene.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/documentation/development/hatch-build-system.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/documentation/development/performance-optimizations.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/documentation/development/prompt-principles.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/documentation/ui/ui-architecture.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/example.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/memory-bank/activeContext.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/memory-bank/locks/claude.lock +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/memory-bank/locks/default.lock +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/memory-bank/locks/main.lock +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/memory-bank/locks/task-15.lock +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/memory-bank/locks/task17.lock +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/memory-bank/locks/tunacode.lock +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/memory-bank/locks/workflow.lock +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/memory-bank/memory-bank.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/memory-bank/productContext.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/memory-bank/progress.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/memory-bank/projectbrief.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/memory-bank/shared/done_tasks/claude_Task_18:_Create_comprehensive_test_suite_for_multi-turn_retry_bug_fix_2025-07-29_153844_scratchpad.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/memory-bank/shared/done_tasks/default_Task_11:_Create_template_directory_structure_for_TunaCode_2025-08-02_132101_scratchpad.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/memory-bank/shared/done_tasks/default_Task_11:_Update_setup_dev_env.sh_script_-_COMPLETED_2025-07-29_111547_scratchpad.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/memory-bank/shared/done_tasks/default_Task_12:_Create_Template_dataclass_and_TemplateLoader_class_2025-08-02_132215_scratchpad.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/memory-bank/shared/done_tasks/default_Task_12:_pyproject.toml_updates_2025-07-29_112303_scratchpad.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/memory-bank/shared/done_tasks/default_Task_13:_Add_active_template_property_to_ToolHandler_2025-08-02_132326_scratchpad.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/memory-bank/shared/done_tasks/default_Task_14:_Create_TemplateCommand_class_with_subcommands_2025-08-02_132621_scratchpad.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/memory-bank/shared/done_tasks/default_Task_15:_Create_example_JSON_templates_2025-08-02_132813_scratchpad.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/memory-bank/shared/done_tasks/default_Tasks_11-13:_Setup_robustness_and_documentation_2025-07-29_113044_scratchpad.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/memory-bank/shared/done_tasks/main_Task_16:_Error_synthesis_system_implementation_complete_2025-07-29_150745_scratchpad.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/memory-bank/shared/done_tasks/task-15_Task_15:_Implement_retry_limit_mechanism_2025-07-29_145737_scratchpad.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/memory-bank/shared/done_tasks/task17_Task_17:_Fix_message_history_cleanup_in_patch_tool_messages()_2025-07-29_152006_scratchpad.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/memory-bank/shared/done_tasks/tunacode_Task_14_Completed:_Defensive_Type_Checking_in__attempt_tool_recovery()_2025-07-29_144542_scratchpad.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/memory-bank/shared/done_tasks/workflow_Task_6:_Implement_Multi-Turn_Recursive_Loop_for_Complex_Task_Decomposition_2025-07-23_213518_scratchpad.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/memory-bank/systemPatterns.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/memory-bank/techContext.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/pytest.ini +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/scripts/check-file-length.sh +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/scripts/download_ripgrep.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/scripts/playwright_cache.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/scripts/publish_to_pip.sh +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/scripts/setup_dev_env.sh +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/scripts/startup_timer.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/scripts/utils/vulture_whitelist.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/scripts/verify_dev_env.sh +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/setup.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/README.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/__init__.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/__init__.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/cli/__init__.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/cli/commands/__init__.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/cli/commands/base.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/cli/commands/implementations/__init__.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/cli/commands/implementations/conversation.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/cli/commands/implementations/debug.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/cli/commands/implementations/development.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/cli/commands/implementations/model.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/cli/commands/implementations/plan.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/cli/commands/implementations/template.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/cli/commands/implementations/todo.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/cli/commands/registry.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/cli/commands/template_shortcut.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/cli/main.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/cli/repl.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/cli/repl_components/__init__.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/cli/repl_components/command_parser.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/cli/repl_components/error_recovery.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/cli/repl_components/output_display.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/cli/repl_components/tool_executor.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/configuration/__init__.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/configuration/models.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/configuration/settings.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/context.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/core/__init__.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/core/agents/__init__.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/core/agents/agent_components/__init__.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/core/agents/agent_components/agent_config.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/core/agents/agent_components/agent_helpers.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/core/agents/agent_components/json_tool_parser.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/core/agents/agent_components/message_handler.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/core/agents/agent_components/node_processor.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/core/agents/agent_components/response_state.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/core/agents/agent_components/result_wrapper.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/core/agents/agent_components/task_completion.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/core/agents/agent_components/tool_buffer.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/core/agents/agent_components/tool_executor.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/core/agents/agent_components/truncation_checker.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/core/agents/main.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/core/agents/utils.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/core/background/__init__.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/core/background/manager.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/core/code_index.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/core/llm/__init__.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/core/logging/__init__.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/core/logging/config.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/core/logging/formatters.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/core/logging/handlers.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/core/logging/logger.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/core/setup/__init__.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/core/setup/agent_setup.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/core/setup/base.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/core/setup/config_setup.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/core/setup/coordinator.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/core/setup/environment_setup.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/core/setup/git_safety_setup.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/core/setup/template_setup.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/core/state.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/core/token_usage/api_response_parser.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/core/token_usage/cost_calculator.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/core/token_usage/usage_tracker.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/core/tool_handler.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/exceptions.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/prompts/system.md.bak +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/py.typed +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/services/__init__.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/services/mcp.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/setup.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/templates/__init__.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/templates/loader.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/tools/__init__.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/tools/base.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/tools/bash.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/tools/exit_plan_mode.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/tools/glob.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/tools/grep.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/tools/grep_components/__init__.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/tools/grep_components/file_filter.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/tools/grep_components/pattern_matcher.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/tools/grep_components/result_formatter.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/tools/grep_components/search_result.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/tools/list_dir.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/tools/present_plan.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/tools/prompts/bash_prompt.xml +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/tools/prompts/exit_plan_mode_prompt.xml +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/tools/prompts/glob_prompt.xml +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/tools/prompts/grep_prompt.xml +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/tools/prompts/list_dir_prompt.xml +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/tools/prompts/present_plan_prompt.xml +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/tools/prompts/read_file_prompt.xml +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/tools/prompts/run_command_prompt.xml +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/tools/prompts/todo_prompt.xml +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/tools/prompts/update_file_prompt.xml +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/tools/prompts/write_file_prompt.xml +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/tools/read_file.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/tools/run_command.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/tools/schema_assembler.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/tools/todo.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/tools/update_file.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/tools/write_file.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/types.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/ui/__init__.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/ui/completers.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/ui/console.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/ui/constants.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/ui/decorators.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/ui/input.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/ui/keybindings.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/ui/lexers.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/ui/logging_compat.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/ui/output.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/ui/panels.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/ui/prompt_manager.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/ui/tool_descriptions.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/ui/tool_ui.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/ui/utils.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/ui/validators.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/utils/__init__.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/utils/bm25.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/utils/diff_utils.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/utils/file_utils.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/utils/import_cache.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/utils/json_utils.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/utils/message_utils.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/utils/retry.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/utils/ripgrep.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/utils/security.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/utils/system.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/utils/text_utils.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/utils/token_counter.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/src/tunacode/utils/user_configuration.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/tests/CHARACTERIZATION_README.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/tests/CHARACTERIZATION_TEST_PLAN.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/tests/CHARACTERIZATION_TEST_PLAN_AGENT_MAIN.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/tests/CHARACTERIZATION_TEST_PLAN_COMMANDS.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/tests/FILE_OPERATIONS_TEST_GUIDE.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/tests/characterization/__init__.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/tests/characterization/agent/__init__.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/tests/characterization/agent/conftest.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/tests/characterization/agent/test_agent_creation.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/tests/characterization/agent/test_json_tool_parsing.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/tests/characterization/agent/test_process_node.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/tests/characterization/agent/test_process_request.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/tests/characterization/agent/test_tool_message_patching.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/tests/characterization/background/test_background_edge_cases.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/tests/characterization/background/test_cleanup.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/tests/characterization/background/test_task_cancellation.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/tests/characterization/background/test_task_creation.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/tests/characterization/background/test_task_execution.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/tests/characterization/code_index/test_cache_management.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/tests/characterization/code_index/test_file_scanning.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/tests/characterization/code_index/test_index_building.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/tests/characterization/code_index/test_search_operations.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/tests/characterization/code_index/test_symbol_extraction.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/tests/characterization/commands/__init__.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/tests/characterization/commands/test_init_command.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/tests/characterization/conftest.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/tests/characterization/context/README.md +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/tests/characterization/context/__init__.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/tests/characterization/context/test_context_acceptance.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/tests/characterization/context/test_context_integration.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/tests/characterization/context/test_context_loading.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/tests/characterization/context/test_tunacode_logging.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/tests/characterization/repl/test_command_parsing.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/tests/characterization/repl/test_error_handling.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/tests/characterization/repl/test_escape_key_behavior.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/tests/characterization/repl/test_input_handling.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/tests/characterization/repl/test_keyboard_interrupts.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/tests/characterization/repl/test_multiline_input.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/tests/characterization/repl/test_output_display_logic.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/tests/characterization/repl/test_repl_initialization.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/tests/characterization/repl/test_session_flow.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/tests/characterization/services/test_error_recovery.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/tests/characterization/services/test_llm_routing.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/tests/characterization/services/test_mcp_integration.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/tests/characterization/services/test_service_lifecycle.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/tests/characterization/state/test_agent_tracking.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/tests/characterization/state/test_message_history.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/tests/characterization/state/test_permissions.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/tests/characterization/state/test_session_management.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/tests/characterization/state/test_state_initialization.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/tests/characterization/state/test_user_config.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/tests/characterization/test_characterization_commands.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/tests/characterization/test_characterization_grep.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/tests/characterization/test_characterization_main.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/tests/characterization/test_characterization_repl.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/tests/characterization/ui/test_async_ui.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/tests/characterization/ui/test_console_output.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/tests/characterization/ui/test_diff_display.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/tests/characterization/ui/test_prompt_rendering.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/tests/characterization/ui/test_spinner_messages.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/tests/characterization/ui/test_tool_confirmations.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/tests/characterization/utils/test_expand_file_refs.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/tests/characterization/utils/test_file_operations.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/tests/characterization/utils/test_git_commands.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/tests/characterization/utils/test_token_counting.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/tests/characterization/utils/test_utils_edge_cases.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/tests/conftest.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/tests/test_agent_output_formatting.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/tests/test_command_parser_retry.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/tests/test_completion_detection.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/tests/test_glob_phase3.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/tests/test_json_concatenation_recovery.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/tests/test_json_retry.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/tests/test_logging_config.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/tests/test_phase2_type_hints.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/tests/test_plan_mode.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/tests/test_prompt_changes_validation.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/tests/test_prompt_injection.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/tests/test_security.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/tests/test_spinner_updates.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/tests/test_tool_batching_retry.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/tests/unit/test_constants_enums.py +0 -0
- {tunacode_cli-0.0.62 → tunacode_cli-0.0.64}/tools/emoji_cleaner.py +0 -0
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
# UV + Hatch Setup Documentation - COMPLETED
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
This project uses **Hatch** with **UV** as the package installer for fast, reliable dependency management. Successfully implemented and published v0.0.62.
|
|
5
|
+
|
|
6
|
+
## Final Working Configuration
|
|
7
|
+
|
|
8
|
+
### pyproject.toml Setup
|
|
9
|
+
```toml
|
|
10
|
+
[build-system]
|
|
11
|
+
requires = ["hatchling"]
|
|
12
|
+
build-backend = "hatchling.build" # Fixed: was setuptools
|
|
13
|
+
|
|
14
|
+
[tool.hatch.envs.default]
|
|
15
|
+
installer = "uv" # Uses UV for 10-100x faster installs
|
|
16
|
+
features = ["dev"] # Ensures dev dependencies are installed
|
|
17
|
+
|
|
18
|
+
[tool.hatch.build.targets.wheel]
|
|
19
|
+
packages = ["src/tunacode"] # Required for hatchling
|
|
20
|
+
|
|
21
|
+
[project]
|
|
22
|
+
dependencies = [
|
|
23
|
+
"defusedxml", # Fixed: runtime dependency, not dev-only
|
|
24
|
+
# ... other runtime deps
|
|
25
|
+
]
|
|
26
|
+
|
|
27
|
+
[project.optional-dependencies]
|
|
28
|
+
dev = [
|
|
29
|
+
"build", "twine", "ruff", "pytest", "pre-commit",
|
|
30
|
+
# ... dev-only deps (defusedxml moved to runtime)
|
|
31
|
+
]
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Key Fixes Applied
|
|
35
|
+
|
|
36
|
+
### 1. Build System
|
|
37
|
+
- **Fixed**: Changed from `setuptools` to `hatchling` build-backend
|
|
38
|
+
- **Added**: `[tool.hatch.build.targets.wheel]` configuration
|
|
39
|
+
|
|
40
|
+
### 2. Dependencies
|
|
41
|
+
- **Fixed**: Moved `defusedxml` from dev to runtime dependencies (used in bash tool)
|
|
42
|
+
- **Root cause**: Dependency not installed in hatch environment despite being in pyproject.toml
|
|
43
|
+
|
|
44
|
+
### 3. Publishing Script
|
|
45
|
+
- **Fixed**: Removed problematic `uv sync --dev` command
|
|
46
|
+
- **Uses**: Pure Hatch workflow with UV as installer
|
|
47
|
+
|
|
48
|
+
### 4. Install Script Enhancement
|
|
49
|
+
- **Fixed**: Detection logic now distinguishes wrapper scripts from actual binaries
|
|
50
|
+
- **Handles**: venv+wrapper, user site-packages, and system installations correctly
|
|
51
|
+
- **Added**: Automatic creation of `~/.config/tunacode.json` with sensible defaults
|
|
52
|
+
- **Enhanced**: Comprehensive post-install guidance with next steps
|
|
53
|
+
- **Updated**: Default model changed to `openrouter:openai/gpt-4.1` for better accessibility
|
|
54
|
+
|
|
55
|
+
## Final Result
|
|
56
|
+
- ✅ Published tunacode-cli v0.0.62 to PyPI
|
|
57
|
+
- ✅ All 298 tests passing
|
|
58
|
+
- ✅ Hatch + UV working complementarily
|
|
59
|
+
- ✅ Clean install/update process for users
|
|
60
|
+
- ✅ Auto-created config file with OpenRouter defaults
|
|
61
|
+
- ✅ Enhanced user onboarding with clear next steps
|
|
62
|
+
|
|
63
|
+
## Recent Improvements (Latest Updates)
|
|
64
|
+
|
|
65
|
+
### Enhanced Installation Experience
|
|
66
|
+
- **Config File Creation**: Install script now automatically creates `~/.config/tunacode.json` with sensible defaults
|
|
67
|
+
- **OpenRouter Default**: Changed default model to `openrouter:openai/gpt-4.1` for broader model access
|
|
68
|
+
- **User Guidance**: Post-install messages provide clear next steps:
|
|
69
|
+
1. API key configuration options
|
|
70
|
+
2. Reference to `tunacode --setup` wizard
|
|
71
|
+
3. Getting started commands
|
|
72
|
+
|
|
73
|
+
### Example Fresh Installation Flow
|
|
74
|
+
```bash
|
|
75
|
+
# Install creates config automatically
|
|
76
|
+
./scripts/install_linux.sh
|
|
77
|
+
|
|
78
|
+
# Results in:
|
|
79
|
+
# ✅ ~/.config/tunacode.json created with OpenRouter defaults
|
|
80
|
+
# ✅ Clear guidance about API key setup
|
|
81
|
+
# ✅ References to setup wizard and documentation
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### Configuration Auto-Creation
|
|
85
|
+
The install script now creates initial config with:
|
|
86
|
+
- Default model: `"openrouter:openai/gpt-4.1"`
|
|
87
|
+
- Empty API key placeholders for all providers
|
|
88
|
+
- Sensible defaults for all settings
|
|
89
|
+
- Proper JSON structure ready for user customization
|
|
90
|
+
|
|
91
|
+
## Usage
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
# Development workflow
|
|
95
|
+
hatch run test # Run tests
|
|
96
|
+
hatch run lint-check # Run linting
|
|
97
|
+
hatch build # Build package
|
|
98
|
+
./scripts/publish_to_pip.sh # Publish to PyPI
|
|
99
|
+
|
|
100
|
+
# User installation (automatic UV detection + config creation)
|
|
101
|
+
./scripts/install_linux.sh # Creates venv + wrapper + config for global use
|
|
102
|
+
```
|
|
@@ -36,7 +36,7 @@ _Updated: 2025-08-14_
|
|
|
36
36
|
## Installation Types Supported
|
|
37
37
|
|
|
38
38
|
1. **Venv**: `~/.tunacode-venv/` (recommended)
|
|
39
|
-
2. **Global System**: `/usr/local/bin/`, `/usr/bin/`
|
|
39
|
+
2. **Global System**: `/usr/local/bin/`, `/usr/bin/`
|
|
40
40
|
3. **Global User**: `pip install --user`
|
|
41
41
|
4. **Pipx**: `pipx install tunacode-cli`
|
|
42
42
|
|
|
@@ -64,4 +64,4 @@ Successfully tested scenarios:
|
|
|
64
64
|
- Mixed venv + system pip installations
|
|
65
65
|
- UV available vs unavailable environments
|
|
66
66
|
- Multiple installation cleanup
|
|
67
|
-
- Failed installation rollback
|
|
67
|
+
- Failed installation rollback
|
|
@@ -12,3 +12,5 @@ _Agent: default
|
|
|
12
12
|
[8] Uninstalled existing tunacode installation: removed venv at /root/.tunacode-venv and wrapper script issues resolved
|
|
13
13
|
[9] Validation SUCCESS: hatch run lint-check passed - all code formatting and linting checks passed
|
|
14
14
|
[10] PUBLISHING SUCCESS: Script successfully validated all tests (298 passed), bumped version to 0.0.62, and proceeding with PyPI upload
|
|
15
|
+
[11] 🎉 PUBLISHING COMPLETE: tunacode-cli v0.0.62 successfully published to PyPI at https://pypi.org/project/tunacode-cli/0.0.62/
|
|
16
|
+
[12] INSTALL SCRIPT IMPROVEMENT: Enhanced detection logic to distinguish between wrapper scripts and actual user installations. Now properly detects: 1) venv+wrapper installs, 2) user site-packages installs, 3) system installs
|
|
@@ -59,9 +59,11 @@ repos:
|
|
|
59
59
|
|
|
60
60
|
|
|
61
61
|
# Local hooks for project-specific checks
|
|
62
|
+
# Strategy: Use 'hatch run' for commands defined in pyproject.toml scripts
|
|
63
|
+
# Use 'uv run' for standalone tools not managed by hatch environments
|
|
62
64
|
- repo: local
|
|
63
65
|
hooks:
|
|
64
|
-
#
|
|
66
|
+
# Hatch-managed commands (use hatch run for consistency)
|
|
65
67
|
- id: hatch-lint
|
|
66
68
|
name: Run hatch lint check
|
|
67
69
|
entry: hatch run lint
|
|
@@ -70,7 +72,7 @@ repos:
|
|
|
70
72
|
always_run: true
|
|
71
73
|
stages: [pre-commit]
|
|
72
74
|
|
|
73
|
-
#
|
|
75
|
+
# UV-managed standalone tools (not in hatch environments)
|
|
74
76
|
- id: dead-imports
|
|
75
77
|
name: Check for unused imports in changed files
|
|
76
78
|
entry: uv run unimport --check --diff --exclude "venv/*" --gitignore
|
|
@@ -78,7 +80,6 @@ repos:
|
|
|
78
80
|
files: \.py$
|
|
79
81
|
stages: [pre-commit]
|
|
80
82
|
|
|
81
|
-
# Check for dead code in changed files only
|
|
82
83
|
- id: vulture-changed
|
|
83
84
|
name: Check for dead code in changed files
|
|
84
85
|
entry: uv run vulture --min-confidence 80 src/ scripts/utils/vulture_whitelist.py
|
|
@@ -87,10 +88,10 @@ repos:
|
|
|
87
88
|
exclude: ^(tests/|test_)
|
|
88
89
|
stages: [pre-commit]
|
|
89
90
|
|
|
90
|
-
# Run test suite
|
|
91
|
+
# Run test suite using hatch for consistency
|
|
91
92
|
- id: run-tests
|
|
92
93
|
name: Run test suite
|
|
93
|
-
entry:
|
|
94
|
+
entry: hatch run test
|
|
94
95
|
language: system
|
|
95
96
|
pass_filenames: false
|
|
96
97
|
always_run: true
|
|
@@ -151,5 +152,6 @@ ci:
|
|
|
151
152
|
autoupdate_branch: ''
|
|
152
153
|
autoupdate_commit_msg: '[pre-commit.ci] pre-commit autoupdate'
|
|
153
154
|
autoupdate_schedule: weekly
|
|
154
|
-
|
|
155
|
+
# Skip hooks that require project-specific environment setup
|
|
156
|
+
skip: [run-tests, hatch-lint, dead-imports, vulture-changed]
|
|
155
157
|
submodules: false
|
|
@@ -9,7 +9,21 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
9
9
|
|
|
10
10
|
### Performance
|
|
11
11
|
|
|
12
|
-
- **
|
|
12
|
+
- **Tool Prompt Micro-Injection System**: XML-based prompt loading for tools
|
|
13
|
+
- Tool prompts now loaded from dedicated XML files in `tools/prompts/`
|
|
14
|
+
- Uses `defusedxml` for secure XML parsing with fallback mechanisms
|
|
15
|
+
- Added specialized prompts for grep and glob tools
|
|
16
|
+
- Tool parameters loaded from XML with fallbacks to hardcoded defaults
|
|
17
|
+
- Reduced overall context size through targeted prompt injection
|
|
18
|
+
|
|
19
|
+
- **Agent Initialization Caching**: Multiple caching optimizations for startup speed
|
|
20
|
+
- Added `@lru_cache` to XML parsing methods in 8 tool files (~200ms improvement)
|
|
21
|
+
- Module-level agent caching with config validation (~1s improvement)
|
|
22
|
+
- MCP server connection caching with config hash validation (~500ms improvement)
|
|
23
|
+
- Added `clear_all_caches()` function for testing
|
|
24
|
+
- Total improvement: 1.7-2s faster agent initialization
|
|
25
|
+
|
|
26
|
+
- **Directory Caching System**: Intelligent directory caching using CodeIndex infrastructure
|
|
13
27
|
- Added singleton pattern to CodeIndex with public API and cache freshness tracking
|
|
14
28
|
- Background pre-warming of directory cache during REPL startup (non-blocking)
|
|
15
29
|
- Smart `list_dir` tool integration with CodeIndex cache lookup
|
|
@@ -18,16 +32,77 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
18
32
|
- Automatic cache invalidation with 5-second TTL
|
|
19
33
|
- Memory efficient: ~1-5MB overhead for typical projects
|
|
20
34
|
|
|
21
|
-
- **System Prompt Caching**:
|
|
35
|
+
- **System Prompt Caching**: File-based caching for system prompts and TUNACODE.md
|
|
22
36
|
- **9x faster** system prompt loading with modification time checking
|
|
23
37
|
- **3-8 second reduction** in agent initialization time
|
|
24
38
|
- Zero-risk automatic cache invalidation on file changes
|
|
25
39
|
|
|
40
|
+
- **Search Infrastructure Foundation**: Base implementation for ripgrep binary management
|
|
41
|
+
- Added foundation for search tool improvements
|
|
42
|
+
- Cross-platform binary management infrastructure
|
|
43
|
+
- Preparation for future search optimizations
|
|
44
|
+
|
|
45
|
+
### Added
|
|
46
|
+
|
|
47
|
+
- **Tool Enhancement Infrastructure**: XML-based tool prompt system
|
|
48
|
+
- Created `src/tunacode/tools/prompts/` directory for prompt files
|
|
49
|
+
- Added XML prompt files for grep and glob tools
|
|
50
|
+
- Enhanced tool base classes with dynamic prompt loading
|
|
51
|
+
|
|
52
|
+
### Documentation
|
|
53
|
+
|
|
54
|
+
- Added performance optimization documentation
|
|
55
|
+
- Documented XML-based tool prompt system
|
|
56
|
+
- Updated directory caching technical documentation
|
|
57
|
+
- Added performance guides to documentation index
|
|
58
|
+
|
|
59
|
+
## [0.0.62] - 2025-08-14
|
|
60
|
+
|
|
61
|
+
### Added
|
|
62
|
+
|
|
63
|
+
- **Enhanced Installation Experience**: Complete overhaul of user onboarding
|
|
64
|
+
- **Automatic Config Creation**: Install script now creates `~/.config/tunacode.json` with sensible defaults
|
|
65
|
+
- **Comprehensive Setup Guidance**: Post-install messages with clear next steps for API key configuration
|
|
66
|
+
- **Setup Wizard Integration**: Prominent mention of `tunacode --setup` for guided configuration
|
|
67
|
+
- **Default Model Update**: Changed default from OpenAI to `openrouter:openai/gpt-4.1` for broader model access
|
|
68
|
+
|
|
69
|
+
- **UV+Hatch Integration Improvements**: Complete build system enhancements
|
|
70
|
+
- **Dependency Management**: Fixed runtime vs dev dependency issues (moved `defusedxml` to runtime)
|
|
71
|
+
- **Build System**: Migrated to `hatchling` build backend with proper wheel configuration
|
|
72
|
+
- **Publishing Pipeline**: Streamlined publish workflow with pure Hatch+UV integration
|
|
73
|
+
|
|
74
|
+
- **Robust Installation Scripts**: Professional-grade installation and maintenance
|
|
75
|
+
- **Smart Detection**: Install script distinguishes wrapper scripts from actual binaries
|
|
76
|
+
- **Update Logic**: Intelligent update detection for venv, global, and system installations
|
|
77
|
+
- **Comprehensive Uninstall**: Complete removal tool with multi-installation detection
|
|
78
|
+
- **UV Acceleration**: 10-100x faster installs when UV is available with graceful pip fallback
|
|
79
|
+
|
|
80
|
+
### Changed
|
|
81
|
+
|
|
82
|
+
- **Pre-commit Hook Optimization**: Consistent tool usage strategy
|
|
83
|
+
- Use `hatch run` for commands defined in pyproject.toml scripts
|
|
84
|
+
- Use `uv run` for standalone tools not managed by hatch environments
|
|
85
|
+
- Updated test runner from `uv run pytest` to `hatch run test` for consistency
|
|
86
|
+
- Enhanced CI configuration with appropriate hook skipping
|
|
87
|
+
|
|
88
|
+
- **Development Workflow**: Improved developer experience
|
|
89
|
+
- All 298 tests passing with new build system
|
|
90
|
+
- Optimized pre-commit hooks for faster development cycles
|
|
91
|
+
- Better documentation maintenance with automated quality checks
|
|
92
|
+
|
|
93
|
+
### Fixed
|
|
94
|
+
|
|
95
|
+
- **Build System Issues**: Resolved setuptools to hatchling migration problems
|
|
96
|
+
- **Dependency Resolution**: Fixed missing runtime dependencies in hatch environments
|
|
97
|
+
- **Install Script**: Added missing print helper functions for consistent colored output
|
|
98
|
+
- **Documentation**: Updated UV+Hatch setup documentation with recent improvements
|
|
99
|
+
|
|
26
100
|
### Documentation
|
|
27
101
|
|
|
28
|
-
-
|
|
29
|
-
-
|
|
30
|
-
- Updated
|
|
102
|
+
- **UV+Hatch Setup Guide**: Comprehensive documentation of build system migration
|
|
103
|
+
- **Installation Experience**: Documented automatic config creation and user guidance
|
|
104
|
+
- **Development Workflow**: Updated all build, test, and deployment procedures
|
|
105
|
+
- **Pre-commit Strategy**: Clear guidelines for tool selection and usage
|
|
31
106
|
|
|
32
107
|
## [0.0.56] - 2025-08-11
|
|
33
108
|
|
|
@@ -5,7 +5,7 @@ build-backend = "hatchling.build"
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "tunacode-cli"
|
|
7
7
|
|
|
8
|
-
version = "0.0.
|
|
8
|
+
version = "0.0.64"
|
|
9
9
|
description = "Your agentic CLI developer."
|
|
10
10
|
keywords = ["cli", "agent", "development", "automation"]
|
|
11
11
|
readme = "README.md"
|
|
@@ -170,7 +170,7 @@ typecheck = "mypy src/"
|
|
|
170
170
|
security = "bandit -r src/ -ll"
|
|
171
171
|
|
|
172
172
|
# Version management
|
|
173
|
-
version = "0.0.
|
|
173
|
+
version = "0.0.64"
|
|
174
174
|
|
|
175
175
|
# Release workflow
|
|
176
176
|
release = [
|
|
@@ -21,6 +21,23 @@ BIN_DIR="${HOME}/.local/bin"
|
|
|
21
21
|
PYTHON=${PYTHON:-python3}
|
|
22
22
|
USE_UV=false
|
|
23
23
|
|
|
24
|
+
# Function to print colored output
|
|
25
|
+
print_status() {
|
|
26
|
+
echo -e "${BLUE}[INFO]${NC} $1"
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
print_success() {
|
|
30
|
+
echo -e "${GREEN}[SUCCESS]${NC} $1"
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
print_warning() {
|
|
34
|
+
echo -e "${YELLOW}[WARNING]${NC} $1"
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
print_error() {
|
|
38
|
+
echo -e "${RED}[ERROR]${NC} $1"
|
|
39
|
+
}
|
|
40
|
+
|
|
24
41
|
echo -e "${BLUE}🐟 TunaCode CLI Installer${NC}"
|
|
25
42
|
echo "================================"
|
|
26
43
|
|
|
@@ -71,20 +88,27 @@ detect_installations() {
|
|
|
71
88
|
fi
|
|
72
89
|
fi
|
|
73
90
|
|
|
74
|
-
# Check global user installation
|
|
75
|
-
if [ -f "$HOME/.local/bin/tunacode" ]
|
|
76
|
-
|
|
77
|
-
if "$HOME/.local/bin/tunacode"
|
|
78
|
-
|
|
79
|
-
echo -e "${
|
|
91
|
+
# Check global user installation (distinguish from wrapper script)
|
|
92
|
+
if [ -f "$HOME/.local/bin/tunacode" ]; then
|
|
93
|
+
# Check if it's our wrapper script or actual binary
|
|
94
|
+
if grep -q "\.tunacode-venv/bin/tunacode" "$HOME/.local/bin/tunacode" 2>/dev/null; then
|
|
95
|
+
# This is our wrapper script, not a user install
|
|
96
|
+
echo -e "${BLUE}Found wrapper script pointing to venv${NC}"
|
|
80
97
|
else
|
|
81
|
-
|
|
98
|
+
# This is an actual user site-packages installation
|
|
99
|
+
found_global_user=true
|
|
100
|
+
if "$HOME/.local/bin/tunacode" --version &>/dev/null; then
|
|
101
|
+
global_user_working=true
|
|
102
|
+
echo -e "${GREEN}✓${NC} Found working global user installation"
|
|
103
|
+
else
|
|
104
|
+
echo -e "${YELLOW}⚠${NC} Found global user installation but it's not working"
|
|
105
|
+
fi
|
|
82
106
|
fi
|
|
83
107
|
fi
|
|
84
108
|
|
|
85
|
-
# Check wrapper script health
|
|
109
|
+
# Check wrapper script health (only if it's actually our wrapper)
|
|
86
110
|
local wrapper_status="missing"
|
|
87
|
-
if [ -f "$BIN_DIR/tunacode" ]; then
|
|
111
|
+
if [ -f "$BIN_DIR/tunacode" ] && grep -q "\.tunacode-venv/bin/tunacode" "$BIN_DIR/tunacode" 2>/dev/null; then
|
|
88
112
|
if [ -x "$BIN_DIR/tunacode" ]; then
|
|
89
113
|
if "$BIN_DIR/tunacode" --version &>/dev/null; then
|
|
90
114
|
wrapper_status="working"
|
|
@@ -97,8 +121,6 @@ detect_installations() {
|
|
|
97
121
|
wrapper_status="not_executable"
|
|
98
122
|
echo -e "${YELLOW}⚠${NC} Wrapper script not executable"
|
|
99
123
|
fi
|
|
100
|
-
else
|
|
101
|
-
echo -e "${YELLOW}⚠${NC} No wrapper script found"
|
|
102
124
|
fi
|
|
103
125
|
|
|
104
126
|
# Export detection results
|
|
@@ -452,10 +474,48 @@ if [[ ":$PATH:" != *":$BIN_DIR:"* ]]; then
|
|
|
452
474
|
fi
|
|
453
475
|
fi
|
|
454
476
|
|
|
455
|
-
# Create config directory
|
|
477
|
+
# Create config directory and initial config file
|
|
456
478
|
CONFIG_DIR="${HOME}/.config"
|
|
479
|
+
CONFIG_FILE="$CONFIG_DIR/tunacode.json"
|
|
457
480
|
mkdir -p "$CONFIG_DIR"
|
|
458
481
|
|
|
482
|
+
# Create initial config file if it doesn't exist
|
|
483
|
+
if [ ! -f "$CONFIG_FILE" ]; then
|
|
484
|
+
echo -e "${BLUE}Creating initial configuration file...${NC}"
|
|
485
|
+
cat <<'EOC' >"$CONFIG_FILE"
|
|
486
|
+
{
|
|
487
|
+
"default_model": "openrouter:openai/gpt-4.1",
|
|
488
|
+
"env": {
|
|
489
|
+
"ANTHROPIC_API_KEY": "",
|
|
490
|
+
"GEMINI_API_KEY": "",
|
|
491
|
+
"OPENAI_API_KEY": "",
|
|
492
|
+
"OPENROUTER_API_KEY": ""
|
|
493
|
+
},
|
|
494
|
+
"settings": {
|
|
495
|
+
"max_retries": 10,
|
|
496
|
+
"max_iterations": 40,
|
|
497
|
+
"tool_ignore": ["read_file"],
|
|
498
|
+
"guide_file": "TUNACODE.md",
|
|
499
|
+
"fallback_response": true,
|
|
500
|
+
"fallback_verbosity": "normal",
|
|
501
|
+
"context_window_size": 200000,
|
|
502
|
+
"ripgrep": {
|
|
503
|
+
"use_bundled": false,
|
|
504
|
+
"timeout": 10,
|
|
505
|
+
"max_buffer_size": 1048576,
|
|
506
|
+
"max_results": 100,
|
|
507
|
+
"enable_metrics": false,
|
|
508
|
+
"debug": false
|
|
509
|
+
}
|
|
510
|
+
},
|
|
511
|
+
"mcpServers": {}
|
|
512
|
+
}
|
|
513
|
+
EOC
|
|
514
|
+
print_success "Created config file at $CONFIG_FILE"
|
|
515
|
+
else
|
|
516
|
+
echo -e "${BLUE}Config file already exists at $CONFIG_FILE${NC}"
|
|
517
|
+
fi
|
|
518
|
+
|
|
459
519
|
# Check if bin directory is in PATH (after our auto-fallback)
|
|
460
520
|
if [[ ":$PATH:" != *":$BIN_DIR:"* ]]; then
|
|
461
521
|
if [[ $EUID -eq 0 ]]; then
|
|
@@ -469,8 +529,6 @@ if [[ ":$PATH:" != *":$BIN_DIR:"* ]]; then
|
|
|
469
529
|
fi
|
|
470
530
|
|
|
471
531
|
echo -e "\n${GREEN}✨ Installation complete!${NC}"
|
|
472
|
-
echo -e "\nRun ${BLUE}tunacode${NC} to get started"
|
|
473
|
-
echo -e "Run ${BLUE}tunacode --help${NC} for usage information"
|
|
474
532
|
|
|
475
533
|
# Test if we can run tunacode
|
|
476
534
|
if command -v tunacode &> /dev/null; then
|
|
@@ -479,3 +537,16 @@ else
|
|
|
479
537
|
echo -e "\n${YELLOW}!${NC} tunacode command not found in PATH"
|
|
480
538
|
echo -e " Try running: ${GREEN}$BIN_DIR/tunacode${NC}"
|
|
481
539
|
fi
|
|
540
|
+
|
|
541
|
+
echo ""
|
|
542
|
+
echo -e "${BLUE}🔧 Next Steps:${NC}"
|
|
543
|
+
echo -e "1. ${BLUE}Configure API keys:${NC} Edit ${GREEN}~/.config/tunacode.json${NC}"
|
|
544
|
+
echo -e " - Add your OpenAI, Anthropic, or other provider API keys"
|
|
545
|
+
echo -e " - Or run ${BLUE}tunacode --setup${NC} for guided configuration"
|
|
546
|
+
echo -e ""
|
|
547
|
+
echo -e "2. ${BLUE}Get started:${NC}"
|
|
548
|
+
echo -e " - Run ${BLUE}tunacode${NC} to start an interactive session"
|
|
549
|
+
echo -e " - Run ${BLUE}tunacode --help${NC} for all available options"
|
|
550
|
+
echo -e ""
|
|
551
|
+
echo -e "📖 ${BLUE}Documentation:${NC} Visit the repo for guides and examples"
|
|
552
|
+
echo -e "🔑 ${BLUE}API Keys:${NC} You'll need keys from OpenAI, Anthropic, or OpenRouter to use TunaCode"
|
|
@@ -64,9 +64,9 @@ detect_installations() {
|
|
|
64
64
|
local global_system_working=false
|
|
65
65
|
local global_user_working=false
|
|
66
66
|
local pipx_working=false
|
|
67
|
-
|
|
67
|
+
|
|
68
68
|
echo -e "${BLUE}Scanning for TunaCode installations...${NC}"
|
|
69
|
-
|
|
69
|
+
|
|
70
70
|
# Check venv installation
|
|
71
71
|
if [ -d "$VENV_DIR" ]; then
|
|
72
72
|
found_venv=true
|
|
@@ -81,7 +81,7 @@ detect_installations() {
|
|
|
81
81
|
echo -e "${YELLOW}⚠${NC} Found venv directory but no tunacode binary"
|
|
82
82
|
fi
|
|
83
83
|
fi
|
|
84
|
-
|
|
84
|
+
|
|
85
85
|
# Check global system installation
|
|
86
86
|
if command -v tunacode &>/dev/null; then
|
|
87
87
|
local tunacode_path=$(command -v tunacode)
|
|
@@ -95,7 +95,7 @@ detect_installations() {
|
|
|
95
95
|
fi
|
|
96
96
|
fi
|
|
97
97
|
fi
|
|
98
|
-
|
|
98
|
+
|
|
99
99
|
# Check global user installation (direct pip --user installs)
|
|
100
100
|
if [ -f "$HOME/.local/bin/tunacode" ] && [ "$HOME/.local/bin/tunacode" != "$BIN_DIR/tunacode" ]; then
|
|
101
101
|
found_global_user=true
|
|
@@ -106,7 +106,7 @@ detect_installations() {
|
|
|
106
106
|
echo -e "${YELLOW}⚠${NC} Found global user installation but not working"
|
|
107
107
|
fi
|
|
108
108
|
fi
|
|
109
|
-
|
|
109
|
+
|
|
110
110
|
# Check pipx installation
|
|
111
111
|
if command_exists pipx; then
|
|
112
112
|
if pipx list 2>/dev/null | grep -q "tunacode"; then
|
|
@@ -119,7 +119,7 @@ detect_installations() {
|
|
|
119
119
|
fi
|
|
120
120
|
fi
|
|
121
121
|
fi
|
|
122
|
-
|
|
122
|
+
|
|
123
123
|
# Check wrapper script
|
|
124
124
|
if [ -f "$BIN_DIR/tunacode" ]; then
|
|
125
125
|
echo -e "${BLUE}Found wrapper script at $BIN_DIR/tunacode${NC}"
|
|
@@ -133,7 +133,7 @@ detect_installations() {
|
|
|
133
133
|
echo -e "${YELLOW}⚠${NC} Wrapper script not executable"
|
|
134
134
|
fi
|
|
135
135
|
fi
|
|
136
|
-
|
|
136
|
+
|
|
137
137
|
# Export detection results
|
|
138
138
|
export FOUND_VENV=$found_venv
|
|
139
139
|
export FOUND_GLOBAL_SYSTEM=$found_global_system
|
|
@@ -165,7 +165,7 @@ if [ $installation_count -eq 0 ]; then
|
|
|
165
165
|
print_status "Checking for leftover files anyway..."
|
|
166
166
|
else
|
|
167
167
|
print_status "Found $installation_count TunaCode installation(s)"
|
|
168
|
-
|
|
168
|
+
|
|
169
169
|
# If multiple installations, ask user what to remove
|
|
170
170
|
if [ $installation_count -gt 1 ]; then
|
|
171
171
|
echo ""
|
|
@@ -182,21 +182,21 @@ else
|
|
|
182
182
|
echo ""
|
|
183
183
|
echo -n "Choice (1-3): "
|
|
184
184
|
read -r choice
|
|
185
|
-
|
|
185
|
+
|
|
186
186
|
case "$choice" in
|
|
187
|
-
1)
|
|
187
|
+
1)
|
|
188
188
|
REMOVE_ALL=true
|
|
189
189
|
print_status "Will remove all installations"
|
|
190
190
|
;;
|
|
191
|
-
2)
|
|
191
|
+
2)
|
|
192
192
|
REMOVE_ALL=false
|
|
193
193
|
print_status "Interactive removal mode"
|
|
194
194
|
;;
|
|
195
|
-
3)
|
|
195
|
+
3)
|
|
196
196
|
print_status "Uninstall cancelled by user"
|
|
197
197
|
exit 0
|
|
198
198
|
;;
|
|
199
|
-
*)
|
|
199
|
+
*)
|
|
200
200
|
print_error "Invalid choice. Cancelling uninstall."
|
|
201
201
|
exit 1
|
|
202
202
|
;;
|
|
@@ -205,10 +205,10 @@ else
|
|
|
205
205
|
REMOVE_ALL=true
|
|
206
206
|
print_status "Single installation detected, will remove it"
|
|
207
207
|
fi
|
|
208
|
-
|
|
208
|
+
|
|
209
209
|
echo ""
|
|
210
210
|
print_status "Proceeding with TunaCode removal..."
|
|
211
|
-
|
|
211
|
+
|
|
212
212
|
# Remove venv installation
|
|
213
213
|
if [ "$FOUND_VENV" = true ]; then
|
|
214
214
|
should_remove=true
|
|
@@ -217,7 +217,7 @@ else
|
|
|
217
217
|
read -r response
|
|
218
218
|
[ "$response" != "y" ] && [ "$response" != "Y" ] && should_remove=false
|
|
219
219
|
fi
|
|
220
|
-
|
|
220
|
+
|
|
221
221
|
if [ "$should_remove" = true ]; then
|
|
222
222
|
print_status "Removing venv installation..."
|
|
223
223
|
if safe_remove "$VENV_DIR"; then
|
|
@@ -226,7 +226,7 @@ else
|
|
|
226
226
|
fi
|
|
227
227
|
fi
|
|
228
228
|
fi
|
|
229
|
-
|
|
229
|
+
|
|
230
230
|
# Remove pipx installation
|
|
231
231
|
if [ "$FOUND_PIPX" = true ]; then
|
|
232
232
|
should_remove=true
|
|
@@ -235,7 +235,7 @@ else
|
|
|
235
235
|
read -r response
|
|
236
236
|
[ "$response" != "y" ] && [ "$response" != "Y" ] && should_remove=false
|
|
237
237
|
fi
|
|
238
|
-
|
|
238
|
+
|
|
239
239
|
if [ "$should_remove" = true ]; then
|
|
240
240
|
print_status "Removing pipx installation..."
|
|
241
241
|
if pipx uninstall tunacode; then
|
|
@@ -247,7 +247,7 @@ else
|
|
|
247
247
|
fi
|
|
248
248
|
fi
|
|
249
249
|
fi
|
|
250
|
-
|
|
250
|
+
|
|
251
251
|
# Remove global user installation
|
|
252
252
|
if [ "$FOUND_GLOBAL_USER" = true ]; then
|
|
253
253
|
should_remove=true
|
|
@@ -256,12 +256,12 @@ else
|
|
|
256
256
|
read -r response
|
|
257
257
|
[ "$response" != "y" ] && [ "$response" != "Y" ] && should_remove=false
|
|
258
258
|
fi
|
|
259
|
-
|
|
259
|
+
|
|
260
260
|
if [ "$should_remove" = true ]; then
|
|
261
261
|
print_status "Removing global user installation..."
|
|
262
262
|
# Try different methods for user installations
|
|
263
263
|
local removed_via_pip=false
|
|
264
|
-
|
|
264
|
+
|
|
265
265
|
# Try UV first if available
|
|
266
266
|
if command_exists uv; then
|
|
267
267
|
if uv pip uninstall tunacode-cli --user 2>/dev/null; then
|
|
@@ -269,7 +269,7 @@ else
|
|
|
269
269
|
print_success "Removed via UV"
|
|
270
270
|
fi
|
|
271
271
|
fi
|
|
272
|
-
|
|
272
|
+
|
|
273
273
|
# Fallback to pip
|
|
274
274
|
if [ "$removed_via_pip" = false ]; then
|
|
275
275
|
if pip uninstall tunacode-cli -y --user 2>/dev/null; then
|
|
@@ -282,7 +282,7 @@ else
|
|
|
282
282
|
fi
|
|
283
283
|
fi
|
|
284
284
|
fi
|
|
285
|
-
|
|
285
|
+
|
|
286
286
|
if [ "$removed_via_pip" = true ]; then
|
|
287
287
|
found_installation=true
|
|
288
288
|
((removed_count++))
|
|
@@ -291,7 +291,7 @@ else
|
|
|
291
291
|
fi
|
|
292
292
|
fi
|
|
293
293
|
fi
|
|
294
|
-
|
|
294
|
+
|
|
295
295
|
# Remove global system installation
|
|
296
296
|
if [ "$FOUND_GLOBAL_SYSTEM" = true ]; then
|
|
297
297
|
should_remove=true
|
|
@@ -300,11 +300,11 @@ else
|
|
|
300
300
|
read -r response
|
|
301
301
|
[ "$response" != "y" ] && [ "$response" != "Y" ] && should_remove=false
|
|
302
302
|
fi
|
|
303
|
-
|
|
303
|
+
|
|
304
304
|
if [ "$should_remove" = true ]; then
|
|
305
305
|
print_status "Removing global system installation..."
|
|
306
306
|
local removed_via_pip=false
|
|
307
|
-
|
|
307
|
+
|
|
308
308
|
# Try UV first if available
|
|
309
309
|
if command_exists uv; then
|
|
310
310
|
if uv pip uninstall tunacode-cli --system 2>/dev/null; then
|
|
@@ -312,7 +312,7 @@ else
|
|
|
312
312
|
print_success "Removed via UV --system"
|
|
313
313
|
fi
|
|
314
314
|
fi
|
|
315
|
-
|
|
315
|
+
|
|
316
316
|
# Fallback to pip
|
|
317
317
|
if [ "$removed_via_pip" = false ]; then
|
|
318
318
|
if pip uninstall tunacode-cli -y 2>/dev/null; then
|
|
@@ -331,7 +331,7 @@ else
|
|
|
331
331
|
fi
|
|
332
332
|
fi
|
|
333
333
|
fi
|
|
334
|
-
|
|
334
|
+
|
|
335
335
|
if [ "$removed_via_pip" = true ]; then
|
|
336
336
|
found_installation=true
|
|
337
337
|
((removed_count++))
|