tunacode-cli 0.0.69__tar.gz → 0.0.71__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.71/.claude/commands/phaser.md +143 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/settings.local.json +3 -1
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/CHANGELOG.md +26 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/PKG-INFO +2 -2
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/README.md +1 -1
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/documentation/README.md +2 -0
- tunacode_cli-0.0.71/documentation/configuration/local-models.md +107 -0
- tunacode_cli-0.0.71/planner.md +29 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/pyproject.toml +2 -2
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/cli/main.py +2 -1
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/constants.py +1 -1
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/core/setup/config_setup.py +24 -4
- tunacode_cli-0.0.71/src/tunacode/utils/api_key_validation.py +93 -0
- tunacode_cli-0.0.69/SEARCH_ENHANCEMENT_PLAN.md +0 -287
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/MEMORY_ANCHOR_SPEC.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/NEXT_PR_RULES.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/README.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/agents/bug-context-analyzer.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/agents/code-synthesis-analyzer.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/agents/documentation-synthesis-qa.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/agents/expert-debugger.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/agents/phased-task-processor.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/agents/prompt-engineer.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/agents/rapid-code-synthesis-qa.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/agents/tech-docs-maintainer.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/anchors.json +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/commands/deploy.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/commands/github-issue.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/commands/smells.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/commands/work.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/commands/workflow.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/delta/2025-01-05-baseline.yml +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/delta/fix-text-alignment-layout-task3.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/delta/task4_ui_formatting_fix.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/delta/v0.0.53_to_v0.0.54.diff +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/development/always-on-display-implementation.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/development/cli-json-recovery-incident.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/development/directory-caching-optimization.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/development/esc-investigation/ESC_KEY_INVESTIGATION.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/development/esc-investigation/ESC_KEY_STREAMING_ANALYSIS.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/development/hatch-commands.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/development/model-updates-2025.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/development/onboarding-improvements.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/development/phase5-prompt-injection-system.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/development/slash-commands.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/development/uv-hatch-setup.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/development/uv-installer-updates.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/metadata/components.yml +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/metadata/hotspots.txt +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/patterns/json_retry_implementation.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/qa/fix-agent-errors.yml +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/qa/fix-publish-script.yml +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/qa/fix-runtime-warnings.yml +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/scratchpad/README.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/scratchpad/active/task_json_retry_implementation_summary_2025-07-24_13-05-40.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/scratchpad/active/task_standardize_ui_formatting_patterns_2025-07-23_20-43-28.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/scratchpad/agents/default/spinner-enhancement-2025-08-07.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/scratchpad/agents/esc-investigation/scratchpad.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/scratchpad/agents/phase5-recovery/scratchpad.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/scratchpad/agents/tech-docs-maintainer/scratchpad.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/scratchpad/archived/code-synthesis-analyzer_ESC_Double-Press_REPL_Abort_Analysis_2025-08-06_134859_scratchpad.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/scratchpad/archived/default_Add_Prompt_Injection_to_Remaining_Tools_-_Continuation_2025-08-13_152542_scratchpad.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/scratchpad/archived/default_Add_Prompt_Injection_to_Remaining_Tools_2025-08-13_152352_scratchpad.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/scratchpad/archived/default_CLI_Agent_JSON_Recovery_Investigation_2025-08-12_124206_scratchpad.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/scratchpad/archived/default_CLI_Agent_JSON_Recovery_Investigation_2025-08-12_124727_scratchpad.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/scratchpad/archived/default_Completely_remove_TUNACODE_TASK_COMPLETE_from_plan_mode_2025-08-09_091836_scratchpad.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.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.69 → tunacode_cli-0.0.71}/.claude/scratchpad/archived/default_Debug_persistent_KeyboardInterrupt_in_event_loop_2025-08-09_034136_scratchpad.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/scratchpad/archived/default_Debug_present_plan_tool_registration_and_model_capability_2025-08-09_092923_scratchpad.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/scratchpad/archived/default_Debug_stuck_double_escape_in_plan_approval_2025-08-09_033214_scratchpad.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/scratchpad/archived/default_Fix_Application.exit()_failed_error_in_ESC_keybinding_2025-08-09_075607_scratchpad.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/scratchpad/archived/default_Fix_ESC_double-tap_and_plan_display_issues_2025-08-09_090055_scratchpad.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/scratchpad/archived/default_Fix_ESC_exceptions_and_missing_present_plan_tool_2025-08-09_081700_scratchpad.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/scratchpad/archived/default_Fix_agent_not_calling_present_plan_tool_2025-08-09_090827_scratchpad.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/scratchpad/archived/default_Fix_double_escape_for_planning_mode_approval_prompt_2025-08-09_032759_scratchpad.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/scratchpad/archived/default_Fix_unhandled_KeyboardInterrupt_exception_in_event_loop_2025-08-09_033843_scratchpad.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/scratchpad/archived/default_Fix_wizard_UI_-_branch_safety_interference_2025-08-20_222738_scratchpad.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/scratchpad/archived/default_Fixed_Thinking_dots_animation_2025-08-11_121009_scratchpad.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/scratchpad/archived/default_Force_agent_to_actually_call_present_plan_tool_2025-08-09_091334_scratchpad.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/scratchpad/archived/default_GitHub_Directory_Review_2025-08-11_122451_scratchpad.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/scratchpad/archived/default_Implementing_ESC_key_double-press_for_REPL_abort_2025-08-06_124754_scratchpad.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/scratchpad/archived/default_JSON_Recovery_Implementation_2025-08-12_130251_scratchpad.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/scratchpad/archived/default_Makefile_to_Hatch_Migration_2025-08-07_192356_scratchpad.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/scratchpad/archived/default_Performance_Optimization_-_Agent_Initialization_2025-08-13_160447_scratchpad.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/scratchpad/archived/default_Phase_3_-_Glob_Tool_Optimization_2025-08-13_142601_scratchpad.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/scratchpad/archived/default_Replace_entire_system_prompt_with_tool-only_instructions_2025-08-09_112839_scratchpad.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/scratchpad/archived/default_TunaCode_Search_Enhancement_Implementation_2025-08-13_140905_scratchpad.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/scratchpad/archived/default_Update_Documentation_for_JSON_Recovery_System_2025-08-12_131127_scratchpad.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/scratchpad/archived/default_Update_documentation_for_always-on_display_UX_improvements_2025-08-12_154818_scratchpad.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/scratchpad/archived/default_slash_command_system_implementation_2025-08-14_034024_scratchpad.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/scratchpad/archived/phase5-recovery_Phase_5_Recovery_Analysis_2025-08-13_145339_scratchpad.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/scratchpad/locks/code-synthesis-analyzer.lock +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/scratchpad/locks/default.lock +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/scratchpad/locks/esc-investigation.lock +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/scratchpad/locks/phase5-recovery.lock +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/scratchpad/locks/tech-docs-maintainer.lock +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.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.69 → tunacode_cli-0.0.71}/.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.69 → tunacode_cli-0.0.71}/.claude/scratchpad/shared/done_tasks/default_Add_Prompt_Injection_to_Remaining_Tools_2025-08-13_152352_scratchpad.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/scratchpad/shared/done_tasks/default_CLI_Agent_JSON_Recovery_Investigation_2025-08-12_124206_scratchpad.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/scratchpad/shared/done_tasks/default_CLI_Agent_JSON_Recovery_Investigation_2025-08-12_124727_scratchpad.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.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.69 → tunacode_cli-0.0.71}/.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.69 → tunacode_cli-0.0.71}/.claude/scratchpad/shared/done_tasks/default_Debug_persistent_KeyboardInterrupt_in_event_loop_2025-08-09_034136_scratchpad.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.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.69 → tunacode_cli-0.0.71}/.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.69 → tunacode_cli-0.0.71}/.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.69 → tunacode_cli-0.0.71}/.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.69 → tunacode_cli-0.0.71}/.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.69 → tunacode_cli-0.0.71}/.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.69 → tunacode_cli-0.0.71}/.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.69 → tunacode_cli-0.0.71}/.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.69 → tunacode_cli-0.0.71}/.claude/scratchpad/shared/done_tasks/default_Fix_wizard_UI_-_branch_safety_interference_2025-08-20_222738_scratchpad.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/scratchpad/shared/done_tasks/default_Fixed_Thinking_dots_animation_2025-08-11_121009_scratchpad.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.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.69 → tunacode_cli-0.0.71}/.claude/scratchpad/shared/done_tasks/default_GitHub_Directory_Review_2025-08-11_122451_scratchpad.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.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.69 → tunacode_cli-0.0.71}/.claude/scratchpad/shared/done_tasks/default_JSON_Recovery_Implementation_2025-08-12_130251_scratchpad.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/scratchpad/shared/done_tasks/default_Makefile_to_Hatch_Migration_2025-08-07_192356_scratchpad.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/scratchpad/shared/done_tasks/default_Performance_Optimization_-_Agent_Initialization_2025-08-13_160447_scratchpad.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/scratchpad/shared/done_tasks/default_Phase_3_-_Glob_Tool_Optimization_2025-08-13_142601_scratchpad.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.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.69 → tunacode_cli-0.0.71}/.claude/scratchpad/shared/done_tasks/default_TunaCode_Search_Enhancement_Implementation_2025-08-13_140905_scratchpad.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/scratchpad/shared/done_tasks/default_Update_Documentation_for_JSON_Recovery_System_2025-08-12_131127_scratchpad.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.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.69 → tunacode_cli-0.0.71}/.claude/scratchpad/shared/done_tasks/phase5-recovery_Phase_5_Recovery_Analysis_2025-08-13_145339_scratchpad.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/tech-docs-maintainer.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/test_suite_issues_resolved.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.env.example +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.github/pull_request_template.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.github/scripts/check_file_size.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.github/workflows/lint.yml +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.gitignore +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.pre-commit-config.yaml +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.taskmaster/CLAUDE.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.taskmaster/config.json +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.taskmaster/docs/prd.txt +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.taskmaster/state.json +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.taskmaster/tasks/task_001.txt +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.taskmaster/tasks/task_002.txt +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.taskmaster/tasks/task_003.txt +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.taskmaster/tasks/task_004.txt +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.taskmaster/tasks/task_005.txt +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.taskmaster/tasks/task_006.txt +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.taskmaster/tasks/tasks.json +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.taskmaster/templates/example_prd.txt +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/CLAUDE.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/LICENSE +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/MANIFEST.in +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/TUNACODE.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/assets/tunacode_example.png +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/documentation/agent/TOOLS_WORKFLOW.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/documentation/agent/agent-inspo.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/documentation/agent/how-tunacode-agent-works.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/documentation/agent/main-agent-architecture.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/documentation/agent/swepmini-example.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/documentation/configuration/config-file-example.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/documentation/configuration/logging-configuration.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/documentation/development/codebase-hygiene.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/documentation/development/command-system-architecture.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/documentation/development/creating-custom-commands.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/documentation/development/hatch-build-system.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/documentation/development/performance-optimizations.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/documentation/development/prompt-principles.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/documentation/ui/ui-architecture.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/documentation/user/commands.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/documentation/user/getting-started.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/documentation/user/tools.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/example.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/memory-bank/activeContext.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/memory-bank/locks/claude.lock +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/memory-bank/locks/default.lock +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/memory-bank/locks/main.lock +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/memory-bank/locks/task-15.lock +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/memory-bank/locks/task17.lock +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/memory-bank/locks/tunacode.lock +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/memory-bank/locks/workflow.lock +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/memory-bank/memory-bank.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/memory-bank/productContext.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/memory-bank/progress.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/memory-bank/projectbrief.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/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.69 → tunacode_cli-0.0.71}/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.69 → tunacode_cli-0.0.71}/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.69 → tunacode_cli-0.0.71}/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.69 → tunacode_cli-0.0.71}/memory-bank/shared/done_tasks/default_Task_12:_pyproject.toml_updates_2025-07-29_112303_scratchpad.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/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.69 → tunacode_cli-0.0.71}/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.69 → tunacode_cli-0.0.71}/memory-bank/shared/done_tasks/default_Task_15:_Create_example_JSON_templates_2025-08-02_132813_scratchpad.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/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.69 → tunacode_cli-0.0.71}/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.69 → tunacode_cli-0.0.71}/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.69 → tunacode_cli-0.0.71}/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.69 → tunacode_cli-0.0.71}/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.69 → tunacode_cli-0.0.71}/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.69 → tunacode_cli-0.0.71}/memory-bank/systemPatterns.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/memory-bank/techContext.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/pytest.ini +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/scripts/check-file-length.sh +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/scripts/download_ripgrep.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/scripts/install_linux.sh +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/scripts/playwright_cache.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/scripts/publish_to_pip.sh +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/scripts/setup_dev_env.sh +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/scripts/startup_timer.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/scripts/uninstall.sh +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/scripts/utils/vulture_whitelist.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/scripts/verify_dev_env.sh +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/setup.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/README.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/__init__.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/__init__.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/cli/__init__.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/cli/commands/__init__.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/cli/commands/base.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/cli/commands/implementations/__init__.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/cli/commands/implementations/command_reload.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/cli/commands/implementations/conversation.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/cli/commands/implementations/debug.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/cli/commands/implementations/development.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/cli/commands/implementations/model.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/cli/commands/implementations/plan.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/cli/commands/implementations/quickstart.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/cli/commands/implementations/system.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/cli/commands/implementations/template.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/cli/commands/implementations/todo.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/cli/commands/registry.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/cli/commands/slash/__init__.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/cli/commands/slash/command.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/cli/commands/slash/loader.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/cli/commands/slash/processor.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/cli/commands/slash/types.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/cli/commands/slash/validator.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/cli/commands/template_shortcut.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/cli/repl.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/cli/repl_components/__init__.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/cli/repl_components/command_parser.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/cli/repl_components/error_recovery.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/cli/repl_components/output_display.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/cli/repl_components/tool_executor.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/configuration/__init__.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/configuration/defaults.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/configuration/models.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/configuration/settings.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/context.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/core/__init__.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/core/agents/__init__.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/core/agents/agent_components/__init__.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/core/agents/agent_components/agent_config.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/core/agents/agent_components/agent_helpers.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/core/agents/agent_components/json_tool_parser.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/core/agents/agent_components/message_handler.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/core/agents/agent_components/node_processor.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/core/agents/agent_components/response_state.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/core/agents/agent_components/result_wrapper.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/core/agents/agent_components/task_completion.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/core/agents/agent_components/tool_buffer.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/core/agents/agent_components/tool_executor.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/core/agents/agent_components/truncation_checker.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/core/agents/main.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/core/agents/utils.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/core/background/__init__.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/core/background/manager.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/core/code_index.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/core/llm/__init__.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/core/logging/__init__.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/core/logging/config.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/core/logging/formatters.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/core/logging/handlers.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/core/logging/logger.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/core/setup/__init__.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/core/setup/agent_setup.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/core/setup/base.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/core/setup/coordinator.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/core/setup/environment_setup.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/core/setup/git_safety_setup.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/core/setup/template_setup.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/core/state.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/core/token_usage/api_response_parser.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/core/token_usage/cost_calculator.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/core/token_usage/usage_tracker.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/core/tool_handler.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/exceptions.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/prompts/system.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/prompts/system.md.bak +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/py.typed +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/services/__init__.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/services/mcp.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/setup.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/templates/__init__.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/templates/loader.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/tools/__init__.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/tools/base.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/tools/bash.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/tools/exit_plan_mode.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/tools/glob.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/tools/grep.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/tools/grep_components/__init__.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/tools/grep_components/file_filter.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/tools/grep_components/pattern_matcher.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/tools/grep_components/result_formatter.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/tools/grep_components/search_result.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/tools/list_dir.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/tools/present_plan.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/tools/prompts/bash_prompt.xml +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/tools/prompts/exit_plan_mode_prompt.xml +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/tools/prompts/glob_prompt.xml +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/tools/prompts/grep_prompt.xml +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/tools/prompts/list_dir_prompt.xml +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/tools/prompts/present_plan_prompt.xml +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/tools/prompts/read_file_prompt.xml +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/tools/prompts/run_command_prompt.xml +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/tools/prompts/todo_prompt.xml +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/tools/prompts/update_file_prompt.xml +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/tools/prompts/write_file_prompt.xml +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/tools/read_file.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/tools/run_command.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/tools/schema_assembler.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/tools/todo.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/tools/update_file.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/tools/write_file.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/tools/xml_helper.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/tutorial/__init__.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/tutorial/content.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/tutorial/manager.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/tutorial/steps.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/types.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/ui/__init__.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/ui/completers.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/ui/console.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/ui/constants.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/ui/decorators.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/ui/input.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/ui/keybindings.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/ui/lexers.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/ui/logging_compat.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/ui/output.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/ui/panels.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/ui/prompt_manager.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/ui/tool_descriptions.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/ui/tool_ui.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/ui/utils.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/ui/validators.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/utils/__init__.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/utils/bm25.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/utils/diff_utils.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/utils/file_utils.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/utils/import_cache.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/utils/json_utils.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/utils/message_utils.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/utils/retry.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/utils/ripgrep.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/utils/security.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/utils/system.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/utils/text_utils.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/utils/token_counter.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/utils/user_configuration.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/CHARACTERIZATION_README.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/CHARACTERIZATION_TEST_PLAN.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/CHARACTERIZATION_TEST_PLAN_AGENT_MAIN.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/CHARACTERIZATION_TEST_PLAN_COMMANDS.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/FILE_OPERATIONS_TEST_GUIDE.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/__init__.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/agent/__init__.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/agent/conftest.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/agent/test_agent_creation.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/agent/test_json_tool_parsing.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/agent/test_process_node.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/agent/test_process_request.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/agent/test_tool_message_patching.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/background/test_background_edge_cases.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/background/test_cleanup.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/background/test_task_cancellation.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/background/test_task_creation.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/background/test_task_execution.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/code_index/test_cache_management.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/code_index/test_file_scanning.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/code_index/test_index_building.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/code_index/test_search_operations.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/code_index/test_symbol_extraction.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/commands/__init__.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/commands/test_init_command.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/conftest.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/context/README.md +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/context/__init__.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/context/test_context_acceptance.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/context/test_context_integration.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/context/test_context_loading.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/context/test_tunacode_logging.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/repl/test_command_parsing.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/repl/test_error_handling.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/repl/test_escape_key_behavior.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/repl/test_input_handling.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/repl/test_keyboard_interrupts.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/repl/test_multiline_input.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/repl/test_output_display_logic.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/repl/test_repl_initialization.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/repl/test_session_flow.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/services/test_error_recovery.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/services/test_llm_routing.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/services/test_mcp_integration.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/services/test_service_lifecycle.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/state/test_agent_tracking.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/state/test_message_history.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/state/test_permissions.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/state/test_session_management.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/state/test_state_initialization.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/state/test_user_config.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/test_characterization_commands.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/test_characterization_grep.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/test_characterization_main.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/test_characterization_repl.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/ui/test_async_ui.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/ui/test_console_output.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/ui/test_diff_display.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/ui/test_prompt_rendering.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/ui/test_spinner_messages.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/ui/test_tool_confirmations.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/utils/test_expand_file_refs.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/utils/test_file_operations.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/utils/test_git_commands.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/utils/test_token_counting.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/utils/test_utils_edge_cases.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/conftest.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/test_agent_output_formatting.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/test_command_parser_retry.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/test_completion_detection.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/test_glob_phase3.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/test_json_concatenation_recovery.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/test_json_retry.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/test_logging_config.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/test_onboarding_features.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/test_phase2_type_hints.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/test_plan_mode.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/test_prompt_changes_validation.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/test_prompt_injection.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/test_security.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/test_slash_commands_comprehensive.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/test_slash_commands_functional.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/test_slash_commands_integration.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/test_slash_commands_isolated.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/test_spinner_updates.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/test_tool_batching_retry.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/unit/test_constants_enums.py +0 -0
- {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tools/emoji_cleaner.py +0 -0
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
# Phase Planner Shortcut
|
|
2
|
+
|
|
3
|
+
A systematic workflow command for implementing features in phases with automatic commits after each subphase using a git worktree.
|
|
4
|
+
|
|
5
|
+
## Command: `/phase-planner`
|
|
6
|
+
|
|
7
|
+
### Purpose
|
|
8
|
+
Implements features through structured phases, with automatic linting, typechecking, building, and committing after each subphase completion using a git worktree.
|
|
9
|
+
|
|
10
|
+
**CRITICAL REQUIREMENTS:**
|
|
11
|
+
- **MUST use git worktree** for implementation
|
|
12
|
+
- Worktree name = issue name (e.g., `issue-1`)
|
|
13
|
+
- Create worktree in same directory as issue file
|
|
14
|
+
- Commit after EACH subphase completion
|
|
15
|
+
- **NEVER merge to main branch**
|
|
16
|
+
- **NEVER push outside the worktree**
|
|
17
|
+
- Violation of these rules will result in PUNISHMENT
|
|
18
|
+
|
|
19
|
+
### Workflow Pattern
|
|
20
|
+
```
|
|
21
|
+
Phase 1
|
|
22
|
+
├── 1.1: [First subphase]
|
|
23
|
+
│ ├── Implement
|
|
24
|
+
│ ├── Lint & Typecheck (new code only)
|
|
25
|
+
│ ├── Build
|
|
26
|
+
│ └── Commit if successful
|
|
27
|
+
├── 1.2: [Second subphase]
|
|
28
|
+
│ ├── Implement
|
|
29
|
+
│ ├── Lint & Typecheck (new code only)
|
|
30
|
+
│ ├── Build
|
|
31
|
+
│ └── Commit if successful
|
|
32
|
+
└── 1.3: [Third subphase]
|
|
33
|
+
├── Implement
|
|
34
|
+
├── Lint & Typecheck (new code only)
|
|
35
|
+
├── Build
|
|
36
|
+
└── Commit if successful
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### Command Implementation
|
|
40
|
+
|
|
41
|
+
```yaml
|
|
42
|
+
/phase-planner [feature-description] [issue-name]
|
|
43
|
+
|
|
44
|
+
# Worktree Setup (MANDATORY)
|
|
45
|
+
1. Identify issue name (e.g., "issue-1")
|
|
46
|
+
2. Create git worktree:
|
|
47
|
+
- !git worktree add ./[issue-name] -b [issue-name]
|
|
48
|
+
- cd into worktree directory
|
|
49
|
+
3. All work MUST happen in this worktree
|
|
50
|
+
|
|
51
|
+
# Phase Planning
|
|
52
|
+
1. Analyze the feature request
|
|
53
|
+
2. Break down into phases (usually 3-5 phases)
|
|
54
|
+
3. Each phase has 3-5 subphases
|
|
55
|
+
4. Create todo list for Phase 1 only
|
|
56
|
+
|
|
57
|
+
# Phase 1 Execution Loop
|
|
58
|
+
For each subphase (1.1, 1.2, 1.3...):
|
|
59
|
+
1. Mark subphase as in_progress
|
|
60
|
+
2. Implement the subphase functionality
|
|
61
|
+
3. Run lint on new/modified files only:
|
|
62
|
+
- @package.json check for lint command
|
|
63
|
+
- !npm run lint -- [specific-files]
|
|
64
|
+
4. Run typecheck on new/modified files only:
|
|
65
|
+
- @package.json check for typecheck command
|
|
66
|
+
- !npm run typecheck -- [specific-files]
|
|
67
|
+
5. If lint/typecheck pass:
|
|
68
|
+
- !npm run build (if exists)
|
|
69
|
+
- If build passes:
|
|
70
|
+
- !git add [modified-files]
|
|
71
|
+
- !git commit -m "feat(phase-1.x): [description]"
|
|
72
|
+
6. Mark subphase as completed
|
|
73
|
+
7. Continue to next subphase
|
|
74
|
+
|
|
75
|
+
# Documentation Update
|
|
76
|
+
After all Phase 1 subphases complete:
|
|
77
|
+
- Update relevant documentation
|
|
78
|
+
- Commit documentation changes
|
|
79
|
+
|
|
80
|
+
# Important Rules
|
|
81
|
+
- **MUST use git worktree** (named after issue)
|
|
82
|
+
- Stay in worktree directory only
|
|
83
|
+
- **NO merge to main branch**
|
|
84
|
+
- **NO git push operations**
|
|
85
|
+
- Only work on Phase 1
|
|
86
|
+
- Stop after each subphase completion
|
|
87
|
+
- Only lint/typecheck NEW code
|
|
88
|
+
- Commit after each successful subphase
|
|
89
|
+
- **PUNISHMENT for violating worktree rules**
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### Example Usage
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
/phase-planner "Add user authentication with JWT tokens" "issue-auth-jwt"
|
|
96
|
+
|
|
97
|
+
# Claude Code will:
|
|
98
|
+
# 1. Create worktree:
|
|
99
|
+
!git worktree add ./issue-auth-jwt -b issue-auth-jwt
|
|
100
|
+
!cd issue-auth-jwt
|
|
101
|
+
|
|
102
|
+
# 2. Implement Phase 1:
|
|
103
|
+
Phase 1: Core Authentication Setup
|
|
104
|
+
├── 1.1: Create auth middleware
|
|
105
|
+
│ ├── Implement middleware
|
|
106
|
+
│ ├── !npm run lint src/middleware/auth.js
|
|
107
|
+
│ ├── !npm run typecheck src/middleware/auth.js
|
|
108
|
+
│ ├── !npm run build
|
|
109
|
+
│ └── !git commit -m "feat(phase-1.1): add auth middleware"
|
|
110
|
+
├── 1.2: Add JWT token generation
|
|
111
|
+
│ ├── Implement token service
|
|
112
|
+
│ ├── !npm run lint src/services/token.js
|
|
113
|
+
│ ├── !npm run typecheck src/services/token.js
|
|
114
|
+
│ ├── !npm run build
|
|
115
|
+
│ └── !git commit -m "feat(phase-1.2): add JWT token generation"
|
|
116
|
+
└── 1.3: Create login endpoint
|
|
117
|
+
├── Implement endpoint
|
|
118
|
+
├── !npm run lint src/routes/auth.js
|
|
119
|
+
├── !npm run typecheck src/routes/auth.js
|
|
120
|
+
├── !npm run build
|
|
121
|
+
└── !git commit -m "feat(phase-1.3): create login endpoint"
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
### Validation Checklist
|
|
125
|
+
- [ ] **Git worktree created with issue name**
|
|
126
|
+
- [ ] **All work done in worktree directory**
|
|
127
|
+
- [ ] Each subphase has clear deliverable
|
|
128
|
+
- [ ] Lint/typecheck only new code
|
|
129
|
+
- [ ] Build passes before commit
|
|
130
|
+
- [ ] Commit message follows convention
|
|
131
|
+
- [ ] Documentation updated at phase end
|
|
132
|
+
- [ ] **NO merge to main branch**
|
|
133
|
+
- [ ] **NO push operations**
|
|
134
|
+
- [ ] No operations outside worktree
|
|
135
|
+
|
|
136
|
+
### Key Benefits
|
|
137
|
+
1. **Isolated Development**: Git worktree keeps work separate from main
|
|
138
|
+
2. **Incremental Progress**: Each subphase is independently committed
|
|
139
|
+
3. **Quality Assurance**: Automated checks before each commit
|
|
140
|
+
4. **Clean History**: Structured commit messages
|
|
141
|
+
5. **Focused Scope**: Only Phase 1 implementation
|
|
142
|
+
6. **Safe Operation**: No merge/push, stays in worktree
|
|
143
|
+
7. **Issue Tracking**: Worktree name matches issue for clarity
|
|
@@ -121,7 +121,9 @@
|
|
|
121
121
|
"Bash(hatch env:*)",
|
|
122
122
|
"Bash(hatch run pip:*)",
|
|
123
123
|
"Bash(./scripts/install_linux.sh:*)",
|
|
124
|
-
"Bash(hatch run pre-commit run:*)"
|
|
124
|
+
"Bash(hatch run pre-commit run:*)",
|
|
125
|
+
"Bash(./scripts/setup_dev_env.sh:*)",
|
|
126
|
+
"Bash(hatch run tunacode:*)"
|
|
125
127
|
]
|
|
126
128
|
},
|
|
127
129
|
"enableAllProjectMcpServers": true,
|
|
@@ -5,6 +5,32 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [0.0.69] - 2025-08-21
|
|
9
|
+
|
|
10
|
+
### Summary
|
|
11
|
+
This release includes comprehensive command system documentation, updated model configurations, and builds upon recent community contributions including the slash command system by @Lftobs (#85) and onboarding improvements by @ryumacodes (#88).
|
|
12
|
+
|
|
13
|
+
### Changed
|
|
14
|
+
- Updated OpenRouter GPT model reference from `gpt-4o` to `gpt-4.1` in setup configuration
|
|
15
|
+
|
|
16
|
+
### Added
|
|
17
|
+
- Additional development documentation in `.claude/` directory
|
|
18
|
+
- Model updates documentation
|
|
19
|
+
- Slash commands documentation
|
|
20
|
+
- Onboarding improvements documentation
|
|
21
|
+
|
|
22
|
+
## [0.0.68] - 2025-08-21
|
|
23
|
+
|
|
24
|
+
### Added
|
|
25
|
+
- **Comprehensive Command System Documentation**
|
|
26
|
+
- Created `command-system-architecture.md` with technical overview of command infrastructure
|
|
27
|
+
- Created `creating-custom-commands.md` with step-by-step guide for developers
|
|
28
|
+
- Updated user documentation with slash command information
|
|
29
|
+
- Added `/command-reload` command documentation
|
|
30
|
+
|
|
31
|
+
### Fixed
|
|
32
|
+
- Removed broken link to non-existent `templates.md` file in documentation
|
|
33
|
+
|
|
8
34
|
## [Unreleased] - 2025-08-20
|
|
9
35
|
|
|
10
36
|
### Added
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: tunacode-cli
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.71
|
|
4
4
|
Summary: Your agentic CLI developer.
|
|
5
5
|
Project-URL: Homepage, https://tunacode.xyz/
|
|
6
6
|
Project-URL: Repository, https://github.com/alchemiststudiosDOTai/tunacode
|
|
@@ -100,7 +100,7 @@ See the [Hatch Build System Guide](documentation/development/hatch-build-system.
|
|
|
100
100
|
|
|
101
101
|
## Configuration
|
|
102
102
|
|
|
103
|
-
Choose your AI provider and set your API key. For more details, see the [Configuration Section](documentation/user/getting-started.md#2-configuration) in the Getting Started Guide.
|
|
103
|
+
Choose your AI provider and set your API key. For more details, see the [Configuration Section](documentation/user/getting-started.md#2-configuration) in the Getting Started Guide. For local models (LM Studio, Ollama, etc.), see the [Local Models Setup Guide](documentation/configuration/local-models.md).
|
|
104
104
|
|
|
105
105
|
### Recommended Models
|
|
106
106
|
|
|
@@ -52,7 +52,7 @@ See the [Hatch Build System Guide](documentation/development/hatch-build-system.
|
|
|
52
52
|
|
|
53
53
|
## Configuration
|
|
54
54
|
|
|
55
|
-
Choose your AI provider and set your API key. For more details, see the [Configuration Section](documentation/user/getting-started.md#2-configuration) in the Getting Started Guide.
|
|
55
|
+
Choose your AI provider and set your API key. For more details, see the [Configuration Section](documentation/user/getting-started.md#2-configuration) in the Getting Started Guide. For local models (LM Studio, Ollama, etc.), see the [Local Models Setup Guide](documentation/configuration/local-models.md).
|
|
56
56
|
|
|
57
57
|
### Recommended Models
|
|
58
58
|
|
|
@@ -12,6 +12,7 @@ documentation/
|
|
|
12
12
|
│ └── main-agent-architecture.md
|
|
13
13
|
├── configuration/ # System configuration docs
|
|
14
14
|
│ ├── config-file-example.md
|
|
15
|
+
│ ├── local-models.md
|
|
15
16
|
│ └── logging-configuration.md
|
|
16
17
|
├── development/ # Development practices
|
|
17
18
|
│ ├── codebase-hygiene.md
|
|
@@ -36,4 +37,5 @@ General project documentation for features, architecture, and best practices.
|
|
|
36
37
|
- [Creating Custom Commands](development/creating-custom-commands.md) - Step-by-step guide for creating built-in and slash commands.
|
|
37
38
|
- [Hatch Build System](development/hatch-build-system.md) - Complete guide to using Hatch for development and building.
|
|
38
39
|
- [Configuration File Example](configuration/config-file-example.md) - Complete example of `~/.config/tunacode.json` with all available settings.
|
|
40
|
+
- [Local Models Setup](configuration/local-models.md) - Guide for using local models with LM Studio or any OpenAI-compatible API.
|
|
39
41
|
- [Performance Optimizations](development/performance-optimizations.md) - Major performance improvements and optimization strategies.
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
# Using Local Models with TunaCode
|
|
2
|
+
|
|
3
|
+
TunaCode supports any OpenAI-compatible API, including locally hosted models via LM Studio, Ollama, or other local LLM servers.
|
|
4
|
+
|
|
5
|
+
## Quick Setup for LM Studio
|
|
6
|
+
|
|
7
|
+
LM Studio provides an OpenAI-compatible API server for running models locally. Configure TunaCode to use it with this configuration:
|
|
8
|
+
|
|
9
|
+
```json
|
|
10
|
+
{
|
|
11
|
+
"default_model": "openai:model-name-here",
|
|
12
|
+
"env": {
|
|
13
|
+
"OPENAI_API_KEY": "sk-dummy",
|
|
14
|
+
"OPENAI_BASE_URL": "http://localhost:1234/v1"
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Complete Working Example
|
|
20
|
+
|
|
21
|
+
Here's a full configuration file (`~/.config/tunacode.json`) for local models:
|
|
22
|
+
|
|
23
|
+
```json
|
|
24
|
+
{
|
|
25
|
+
"default_model": "openai:qwen/qwen3-4b-2507",
|
|
26
|
+
"env": {
|
|
27
|
+
"ANTHROPIC_API_KEY": "",
|
|
28
|
+
"GEMINI_API_KEY": "",
|
|
29
|
+
"OPENAI_API_KEY": "sk-dummy",
|
|
30
|
+
"OPENROUTER_API_KEY": "",
|
|
31
|
+
"OPENAI_BASE_URL": "http://localhost:1234/v1"
|
|
32
|
+
},
|
|
33
|
+
"settings": {
|
|
34
|
+
"max_retries": 10,
|
|
35
|
+
"max_iterations": 40,
|
|
36
|
+
"context_window_size": 200000
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Key Configuration Points
|
|
42
|
+
|
|
43
|
+
### Base URL Format
|
|
44
|
+
- **Correct**: `http://localhost:1234/v1`
|
|
45
|
+
- **Wrong**: `http://localhost:1234/v1/chat/completions`
|
|
46
|
+
|
|
47
|
+
The base URL must end at `/v1`. TunaCode automatically appends the appropriate endpoint paths.
|
|
48
|
+
|
|
49
|
+
### Model Name
|
|
50
|
+
Use the `openai:` prefix followed by your model name:
|
|
51
|
+
- LM Studio: `openai:model-name` (check LM Studio for exact name)
|
|
52
|
+
- Ollama: `openai:llama2`, `openai:mistral`, etc.
|
|
53
|
+
- Custom: `openai:your-model-id`
|
|
54
|
+
|
|
55
|
+
### API Key Requirement
|
|
56
|
+
Even though local models don't require authentication, the OpenAI client library requires a non-empty API key. Use `"sk-dummy"` or any placeholder value.
|
|
57
|
+
|
|
58
|
+
## Setup Methods
|
|
59
|
+
|
|
60
|
+
### Method 1: Direct Configuration
|
|
61
|
+
Edit `~/.config/tunacode.json` with the configuration above.
|
|
62
|
+
|
|
63
|
+
### Method 2: CLI Flags
|
|
64
|
+
```bash
|
|
65
|
+
tunacode --model "openai:your-model" \
|
|
66
|
+
--baseurl "http://localhost:1234/v1" \
|
|
67
|
+
--key "sk-dummy"
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### Method 3: Environment Variables
|
|
71
|
+
```bash
|
|
72
|
+
export OPENAI_BASE_URL="http://localhost:1234/v1"
|
|
73
|
+
export OPENAI_API_KEY="sk-dummy"
|
|
74
|
+
tunacode --model "openai:your-model"
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
## Compatibility
|
|
78
|
+
|
|
79
|
+
This configuration works with any OpenAI-compatible API server:
|
|
80
|
+
- **LM Studio**: Default port 1234
|
|
81
|
+
- **Ollama**: Usually port 11434 (`http://localhost:11434/v1`)
|
|
82
|
+
- **LocalAI**: Default port 8080
|
|
83
|
+
- **Text Generation WebUI**: With OpenAI extension
|
|
84
|
+
- **vLLM**: OpenAI-compatible server mode
|
|
85
|
+
- **Any custom OpenAI-compatible implementation**
|
|
86
|
+
|
|
87
|
+
## Troubleshooting
|
|
88
|
+
|
|
89
|
+
### Connection Refused
|
|
90
|
+
- Ensure your local server is running
|
|
91
|
+
- Check the port number matches your server configuration
|
|
92
|
+
- Try `curl http://localhost:1234/v1/models` to test connectivity
|
|
93
|
+
|
|
94
|
+
### Bad Request Errors
|
|
95
|
+
- Verify the model name matches what your server expects
|
|
96
|
+
- Check the base URL format (must end with `/v1`)
|
|
97
|
+
- Ensure the server implements OpenAI's chat completions endpoint
|
|
98
|
+
|
|
99
|
+
### Model Not Found
|
|
100
|
+
- List available models: `curl http://localhost:1234/v1/models`
|
|
101
|
+
- Update `default_model` to match an available model
|
|
102
|
+
|
|
103
|
+
## Performance Tips
|
|
104
|
+
|
|
105
|
+
- Set `context_window_size` to match your model's capabilities
|
|
106
|
+
- Adjust `max_iterations` based on your local compute resources
|
|
107
|
+
- Consider reducing `max_retries` for faster failure detection with local models
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
Tutorial skipped. Use /quickstart anytime to start it!
|
|
2
|
+
ERROR:ui:Set the `OPENROUTER_API_KEY` environment variable or pass it via `OpenRouterProvider(api_key=...)`to use the OpenRouter provider.
|
|
3
|
+
|
|
4
|
+
Traceback:
|
|
5
|
+
Traceback (most recent call last):
|
|
6
|
+
File "/root/.tunacode-venv/lib/python3.12/site-packages/tunacode/cli/main.py", line 72, in async_main
|
|
7
|
+
await repl(state_manager)
|
|
8
|
+
File "/root/.tunacode-venv/lib/python3.12/site-packages/tunacode/cli/repl.py", line 452, in repl
|
|
9
|
+
instance = agent.get_or_create_agent(state_manager.session.current_model, state_manager)
|
|
10
|
+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
11
|
+
File "/root/.tunacode-venv/lib/python3.12/site-packages/tunacode/core/agents/agent_components/agent_config.py", line 281, in get_or_create_agent
|
|
12
|
+
agent = Agent(
|
|
13
|
+
^^^^^^
|
|
14
|
+
File "/root/.tunacode-venv/lib/python3.12/site-packages/pydantic_ai/agent.py", line 282, in __init__
|
|
15
|
+
self.model = models.infer_model(model)
|
|
16
|
+
^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
17
|
+
File "/root/.tunacode-venv/lib/python3.12/site-packages/pydantic_ai/models/__init__.py", line 497, in infer_model
|
|
18
|
+
return OpenAIModel(model_name, provider=provider)
|
|
19
|
+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
20
|
+
File "/root/.tunacode-venv/lib/python3.12/site-packages/pydantic_ai/models/openai.py", line 188, in __init__
|
|
21
|
+
provider = infer_provider(provider)
|
|
22
|
+
^^^^^^^^^^^^^^^^^^^^^^^^
|
|
23
|
+
File "/root/.tunacode-venv/lib/python3.12/site-packages/pydantic_ai/providers/__init__.py", line 58, in infer_provider
|
|
24
|
+
return OpenRouterProvider()
|
|
25
|
+
^^^^^^^^^^^^^^^^^^^^
|
|
26
|
+
File "/root/.tunacode-venv/lib/python3.12/site-packages/pydantic_ai/providers/openrouter.py", line 58, in __init__
|
|
27
|
+
raise UserError(
|
|
28
|
+
pydantic_ai.exceptions.UserError: Set the `OPENROUTER_API_KEY` environment variable or pass it
|
|
29
|
+
via `OpenRouterProvider(api_key=...)`to use the OpenRouter provider.
|
|
@@ -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.71"
|
|
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.71"
|
|
174
174
|
|
|
175
175
|
# Release workflow
|
|
176
176
|
release = [
|
|
@@ -77,7 +77,8 @@ def main(
|
|
|
77
77
|
from tunacode.exceptions import ConfigurationError
|
|
78
78
|
|
|
79
79
|
if isinstance(e, ConfigurationError):
|
|
80
|
-
#
|
|
80
|
+
# Display the configuration error message
|
|
81
|
+
await ui.error(str(e))
|
|
81
82
|
update_task.cancel() # Cancel the update check
|
|
82
83
|
return
|
|
83
84
|
import traceback
|
|
@@ -16,6 +16,7 @@ from tunacode.exceptions import ConfigurationError
|
|
|
16
16
|
from tunacode.types import ConfigFile, ConfigPath, UserConfig
|
|
17
17
|
from tunacode.ui import console as ui
|
|
18
18
|
from tunacode.utils import system, user_configuration
|
|
19
|
+
from tunacode.utils.api_key_validation import validate_api_key_for_model
|
|
19
20
|
from tunacode.utils.text_utils import key_to_title
|
|
20
21
|
|
|
21
22
|
|
|
@@ -44,6 +45,10 @@ class ConfigSetup(BaseSetup):
|
|
|
44
45
|
self.state_manager.session.device_id = system.get_device_id()
|
|
45
46
|
loaded_config = user_configuration.load_config()
|
|
46
47
|
|
|
48
|
+
# Set the loaded config to session BEFORE initializing first-time user
|
|
49
|
+
if loaded_config:
|
|
50
|
+
self.state_manager.session.user_config = loaded_config
|
|
51
|
+
|
|
47
52
|
# Initialize first-time user settings if needed
|
|
48
53
|
user_configuration.initialize_first_time_user(self.state_manager)
|
|
49
54
|
|
|
@@ -134,11 +139,15 @@ class ConfigSetup(BaseSetup):
|
|
|
134
139
|
)
|
|
135
140
|
)
|
|
136
141
|
|
|
137
|
-
#
|
|
142
|
+
# Validate API key exists for the selected model
|
|
143
|
+
model = self.state_manager.session.user_config["default_model"]
|
|
144
|
+
is_valid, error_msg = validate_api_key_for_model(
|
|
145
|
+
model, self.state_manager.session.user_config
|
|
146
|
+
)
|
|
147
|
+
if not is_valid:
|
|
148
|
+
raise ConfigurationError(error_msg)
|
|
138
149
|
|
|
139
|
-
self.state_manager.session.current_model =
|
|
140
|
-
"default_model"
|
|
141
|
-
]
|
|
150
|
+
self.state_manager.session.current_model = model
|
|
142
151
|
|
|
143
152
|
async def validate(self) -> bool:
|
|
144
153
|
"""Validate that configuration is properly set up."""
|
|
@@ -148,6 +157,17 @@ class ConfigSetup(BaseSetup):
|
|
|
148
157
|
valid = False
|
|
149
158
|
elif not self.state_manager.session.user_config.get("default_model"):
|
|
150
159
|
valid = False
|
|
160
|
+
else:
|
|
161
|
+
# Validate API key exists for the selected model
|
|
162
|
+
model = self.state_manager.session.user_config.get("default_model")
|
|
163
|
+
is_valid, error_msg = validate_api_key_for_model(
|
|
164
|
+
model, self.state_manager.session.user_config
|
|
165
|
+
)
|
|
166
|
+
if not is_valid:
|
|
167
|
+
valid = False
|
|
168
|
+
# Store error message for later use
|
|
169
|
+
setattr(self.state_manager, "_config_error", error_msg)
|
|
170
|
+
|
|
151
171
|
# Cache result for fastpath
|
|
152
172
|
if valid:
|
|
153
173
|
setattr(self.state_manager, "_config_valid", True)
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Module: tunacode.utils.api_key_validation
|
|
3
|
+
|
|
4
|
+
Utilities for validating API keys are configured for the selected model.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from typing import Optional, Tuple
|
|
8
|
+
|
|
9
|
+
from tunacode.types import UserConfig
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def get_required_api_key_for_model(model: str) -> Tuple[Optional[str], str]:
|
|
13
|
+
"""
|
|
14
|
+
Determine which API key is required for a given model.
|
|
15
|
+
|
|
16
|
+
Args:
|
|
17
|
+
model: Model identifier in format "provider:model-name"
|
|
18
|
+
|
|
19
|
+
Returns:
|
|
20
|
+
Tuple of (api_key_name, provider_name) or (None, "unknown") if no specific key required
|
|
21
|
+
"""
|
|
22
|
+
if not model or ":" not in model:
|
|
23
|
+
return None, "unknown"
|
|
24
|
+
|
|
25
|
+
provider = model.split(":")[0].lower()
|
|
26
|
+
|
|
27
|
+
# Map providers to their required API keys
|
|
28
|
+
provider_key_map = {
|
|
29
|
+
"openrouter": ("OPENROUTER_API_KEY", "OpenRouter"),
|
|
30
|
+
"openai": ("OPENAI_API_KEY", "OpenAI"),
|
|
31
|
+
"anthropic": ("ANTHROPIC_API_KEY", "Anthropic"),
|
|
32
|
+
"google": ("GEMINI_API_KEY", "Google"),
|
|
33
|
+
"google-gla": ("GEMINI_API_KEY", "Google"),
|
|
34
|
+
"gemini": ("GEMINI_API_KEY", "Google"),
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
return provider_key_map.get(provider, (None, provider))
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
def validate_api_key_for_model(model: str, user_config: UserConfig) -> Tuple[bool, Optional[str]]:
|
|
41
|
+
"""
|
|
42
|
+
Check if the required API key exists for the given model.
|
|
43
|
+
|
|
44
|
+
Args:
|
|
45
|
+
model: Model identifier in format "provider:model-name"
|
|
46
|
+
user_config: User configuration containing env variables
|
|
47
|
+
|
|
48
|
+
Returns:
|
|
49
|
+
Tuple of (is_valid, error_message)
|
|
50
|
+
"""
|
|
51
|
+
api_key_name, provider_name = get_required_api_key_for_model(model)
|
|
52
|
+
|
|
53
|
+
if not api_key_name:
|
|
54
|
+
# No specific API key required (might be custom endpoint)
|
|
55
|
+
return True, None
|
|
56
|
+
|
|
57
|
+
env_config = user_config.get("env", {})
|
|
58
|
+
api_key = env_config.get(api_key_name, "").strip()
|
|
59
|
+
|
|
60
|
+
if not api_key:
|
|
61
|
+
return False, (
|
|
62
|
+
f"No API key found for {provider_name}.\n"
|
|
63
|
+
f"Please run 'tunacode --setup' to configure your API key."
|
|
64
|
+
)
|
|
65
|
+
|
|
66
|
+
return True, None
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
def get_configured_providers(user_config: UserConfig) -> list[str]:
|
|
70
|
+
"""
|
|
71
|
+
Get list of providers that have API keys configured.
|
|
72
|
+
|
|
73
|
+
Args:
|
|
74
|
+
user_config: User configuration containing env variables
|
|
75
|
+
|
|
76
|
+
Returns:
|
|
77
|
+
List of provider names that have API keys set
|
|
78
|
+
"""
|
|
79
|
+
env_config = user_config.get("env", {})
|
|
80
|
+
configured = []
|
|
81
|
+
|
|
82
|
+
provider_map = {
|
|
83
|
+
"OPENROUTER_API_KEY": "openrouter",
|
|
84
|
+
"OPENAI_API_KEY": "openai",
|
|
85
|
+
"ANTHROPIC_API_KEY": "anthropic",
|
|
86
|
+
"GEMINI_API_KEY": "google",
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
for key_name, provider in provider_map.items():
|
|
90
|
+
if env_config.get(key_name, "").strip():
|
|
91
|
+
configured.append(provider)
|
|
92
|
+
|
|
93
|
+
return configured
|