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.

Files changed (445) hide show
  1. tunacode_cli-0.0.71/.claude/commands/phaser.md +143 -0
  2. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/settings.local.json +3 -1
  3. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/CHANGELOG.md +26 -0
  4. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/PKG-INFO +2 -2
  5. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/README.md +1 -1
  6. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/documentation/README.md +2 -0
  7. tunacode_cli-0.0.71/documentation/configuration/local-models.md +107 -0
  8. tunacode_cli-0.0.71/planner.md +29 -0
  9. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/pyproject.toml +2 -2
  10. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/cli/main.py +2 -1
  11. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/constants.py +1 -1
  12. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/core/setup/config_setup.py +24 -4
  13. tunacode_cli-0.0.71/src/tunacode/utils/api_key_validation.py +93 -0
  14. tunacode_cli-0.0.69/SEARCH_ENHANCEMENT_PLAN.md +0 -287
  15. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/MEMORY_ANCHOR_SPEC.md +0 -0
  16. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/NEXT_PR_RULES.md +0 -0
  17. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/README.md +0 -0
  18. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/agents/bug-context-analyzer.md +0 -0
  19. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/agents/code-synthesis-analyzer.md +0 -0
  20. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/agents/documentation-synthesis-qa.md +0 -0
  21. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/agents/expert-debugger.md +0 -0
  22. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/agents/phased-task-processor.md +0 -0
  23. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/agents/prompt-engineer.md +0 -0
  24. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/agents/rapid-code-synthesis-qa.md +0 -0
  25. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/agents/tech-docs-maintainer.md +0 -0
  26. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/anchors.json +0 -0
  27. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/commands/deploy.md +0 -0
  28. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/commands/github-issue.md +0 -0
  29. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/commands/smells.md +0 -0
  30. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/commands/work.md +0 -0
  31. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/commands/workflow.md +0 -0
  32. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/delta/2025-01-05-baseline.yml +0 -0
  33. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/delta/fix-text-alignment-layout-task3.md +0 -0
  34. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/delta/task4_ui_formatting_fix.md +0 -0
  35. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/delta/v0.0.53_to_v0.0.54.diff +0 -0
  36. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/development/always-on-display-implementation.md +0 -0
  37. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/development/cli-json-recovery-incident.md +0 -0
  38. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/development/directory-caching-optimization.md +0 -0
  39. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/development/esc-investigation/ESC_KEY_INVESTIGATION.md +0 -0
  40. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/development/esc-investigation/ESC_KEY_STREAMING_ANALYSIS.md +0 -0
  41. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/development/hatch-commands.md +0 -0
  42. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/development/model-updates-2025.md +0 -0
  43. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/development/onboarding-improvements.md +0 -0
  44. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/development/phase5-prompt-injection-system.md +0 -0
  45. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/development/slash-commands.md +0 -0
  46. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/development/uv-hatch-setup.md +0 -0
  47. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/development/uv-installer-updates.md +0 -0
  48. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/metadata/components.yml +0 -0
  49. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/metadata/hotspots.txt +0 -0
  50. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/patterns/json_retry_implementation.md +0 -0
  51. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/qa/fix-agent-errors.yml +0 -0
  52. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/qa/fix-publish-script.yml +0 -0
  53. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/qa/fix-runtime-warnings.yml +0 -0
  54. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/scratchpad/README.md +0 -0
  55. {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
  56. {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
  57. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/scratchpad/agents/default/spinner-enhancement-2025-08-07.md +0 -0
  58. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/scratchpad/agents/esc-investigation/scratchpad.md +0 -0
  59. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/scratchpad/agents/phase5-recovery/scratchpad.md +0 -0
  60. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/scratchpad/agents/tech-docs-maintainer/scratchpad.md +0 -0
  61. {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
  62. {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
  63. {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
  64. {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
  65. {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
  66. {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
  67. {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
  68. {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
  69. {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
  70. {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
  71. {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
  72. {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
  73. {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
  74. {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
  75. {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
  76. {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
  77. {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
  78. {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
  79. {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
  80. {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
  81. {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
  82. {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
  83. {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
  84. {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
  85. {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
  86. {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
  87. {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
  88. {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
  89. {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
  90. {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
  91. {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
  92. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/scratchpad/locks/code-synthesis-analyzer.lock +0 -0
  93. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/scratchpad/locks/default.lock +0 -0
  94. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/scratchpad/locks/esc-investigation.lock +0 -0
  95. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/scratchpad/locks/phase5-recovery.lock +0 -0
  96. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/scratchpad/locks/tech-docs-maintainer.lock +0 -0
  97. {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
  98. {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
  99. {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
  100. {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
  101. {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
  102. {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
  103. {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
  104. {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
  105. {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
  106. {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
  107. {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
  108. {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
  109. {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
  110. {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
  111. {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
  112. {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
  113. {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
  114. {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
  115. {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
  116. {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
  117. {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
  118. {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
  119. {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
  120. {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
  121. {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
  122. {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
  123. {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
  124. {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
  125. {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
  126. {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
  127. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/tech-docs-maintainer.md +0 -0
  128. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.claude/test_suite_issues_resolved.md +0 -0
  129. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.env.example +0 -0
  130. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.github/pull_request_template.md +0 -0
  131. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.github/scripts/check_file_size.py +0 -0
  132. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.github/workflows/lint.yml +0 -0
  133. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.gitignore +0 -0
  134. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.pre-commit-config.yaml +0 -0
  135. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.taskmaster/CLAUDE.md +0 -0
  136. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.taskmaster/config.json +0 -0
  137. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.taskmaster/docs/prd.txt +0 -0
  138. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.taskmaster/state.json +0 -0
  139. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.taskmaster/tasks/task_001.txt +0 -0
  140. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.taskmaster/tasks/task_002.txt +0 -0
  141. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.taskmaster/tasks/task_003.txt +0 -0
  142. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.taskmaster/tasks/task_004.txt +0 -0
  143. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.taskmaster/tasks/task_005.txt +0 -0
  144. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.taskmaster/tasks/task_006.txt +0 -0
  145. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.taskmaster/tasks/tasks.json +0 -0
  146. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/.taskmaster/templates/example_prd.txt +0 -0
  147. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/CLAUDE.md +0 -0
  148. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/LICENSE +0 -0
  149. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/MANIFEST.in +0 -0
  150. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/TUNACODE.md +0 -0
  151. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/assets/tunacode_example.png +0 -0
  152. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/documentation/agent/TOOLS_WORKFLOW.md +0 -0
  153. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/documentation/agent/agent-inspo.md +0 -0
  154. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/documentation/agent/how-tunacode-agent-works.md +0 -0
  155. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/documentation/agent/main-agent-architecture.md +0 -0
  156. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/documentation/agent/swepmini-example.md +0 -0
  157. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/documentation/configuration/config-file-example.md +0 -0
  158. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/documentation/configuration/logging-configuration.md +0 -0
  159. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/documentation/development/codebase-hygiene.md +0 -0
  160. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/documentation/development/command-system-architecture.md +0 -0
  161. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/documentation/development/creating-custom-commands.md +0 -0
  162. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/documentation/development/hatch-build-system.md +0 -0
  163. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/documentation/development/performance-optimizations.md +0 -0
  164. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/documentation/development/prompt-principles.md +0 -0
  165. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/documentation/ui/ui-architecture.md +0 -0
  166. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/documentation/user/commands.md +0 -0
  167. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/documentation/user/getting-started.md +0 -0
  168. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/documentation/user/tools.md +0 -0
  169. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/example.md +0 -0
  170. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/memory-bank/activeContext.md +0 -0
  171. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/memory-bank/locks/claude.lock +0 -0
  172. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/memory-bank/locks/default.lock +0 -0
  173. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/memory-bank/locks/main.lock +0 -0
  174. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/memory-bank/locks/task-15.lock +0 -0
  175. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/memory-bank/locks/task17.lock +0 -0
  176. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/memory-bank/locks/tunacode.lock +0 -0
  177. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/memory-bank/locks/workflow.lock +0 -0
  178. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/memory-bank/memory-bank.md +0 -0
  179. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/memory-bank/productContext.md +0 -0
  180. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/memory-bank/progress.md +0 -0
  181. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/memory-bank/projectbrief.md +0 -0
  182. {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
  183. {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
  184. {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
  185. {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
  186. {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
  187. {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
  188. {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
  189. {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
  190. {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
  191. {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
  192. {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
  193. {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
  194. {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
  195. {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
  196. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/memory-bank/systemPatterns.md +0 -0
  197. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/memory-bank/techContext.md +0 -0
  198. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/pytest.ini +0 -0
  199. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/scripts/check-file-length.sh +0 -0
  200. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/scripts/download_ripgrep.py +0 -0
  201. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/scripts/install_linux.sh +0 -0
  202. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/scripts/playwright_cache.py +0 -0
  203. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/scripts/publish_to_pip.sh +0 -0
  204. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/scripts/setup_dev_env.sh +0 -0
  205. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/scripts/startup_timer.py +0 -0
  206. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/scripts/uninstall.sh +0 -0
  207. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/scripts/utils/vulture_whitelist.py +0 -0
  208. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/scripts/verify_dev_env.sh +0 -0
  209. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/setup.py +0 -0
  210. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/README.md +0 -0
  211. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/__init__.py +0 -0
  212. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/__init__.py +0 -0
  213. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/cli/__init__.py +0 -0
  214. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/cli/commands/__init__.py +0 -0
  215. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/cli/commands/base.py +0 -0
  216. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/cli/commands/implementations/__init__.py +0 -0
  217. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/cli/commands/implementations/command_reload.py +0 -0
  218. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/cli/commands/implementations/conversation.py +0 -0
  219. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/cli/commands/implementations/debug.py +0 -0
  220. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/cli/commands/implementations/development.py +0 -0
  221. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/cli/commands/implementations/model.py +0 -0
  222. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/cli/commands/implementations/plan.py +0 -0
  223. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/cli/commands/implementations/quickstart.py +0 -0
  224. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/cli/commands/implementations/system.py +0 -0
  225. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/cli/commands/implementations/template.py +0 -0
  226. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/cli/commands/implementations/todo.py +0 -0
  227. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/cli/commands/registry.py +0 -0
  228. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/cli/commands/slash/__init__.py +0 -0
  229. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/cli/commands/slash/command.py +0 -0
  230. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/cli/commands/slash/loader.py +0 -0
  231. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/cli/commands/slash/processor.py +0 -0
  232. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/cli/commands/slash/types.py +0 -0
  233. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/cli/commands/slash/validator.py +0 -0
  234. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/cli/commands/template_shortcut.py +0 -0
  235. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/cli/repl.py +0 -0
  236. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/cli/repl_components/__init__.py +0 -0
  237. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/cli/repl_components/command_parser.py +0 -0
  238. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/cli/repl_components/error_recovery.py +0 -0
  239. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/cli/repl_components/output_display.py +0 -0
  240. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/cli/repl_components/tool_executor.py +0 -0
  241. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/configuration/__init__.py +0 -0
  242. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/configuration/defaults.py +0 -0
  243. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/configuration/models.py +0 -0
  244. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/configuration/settings.py +0 -0
  245. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/context.py +0 -0
  246. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/core/__init__.py +0 -0
  247. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/core/agents/__init__.py +0 -0
  248. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/core/agents/agent_components/__init__.py +0 -0
  249. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/core/agents/agent_components/agent_config.py +0 -0
  250. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/core/agents/agent_components/agent_helpers.py +0 -0
  251. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/core/agents/agent_components/json_tool_parser.py +0 -0
  252. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/core/agents/agent_components/message_handler.py +0 -0
  253. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/core/agents/agent_components/node_processor.py +0 -0
  254. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/core/agents/agent_components/response_state.py +0 -0
  255. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/core/agents/agent_components/result_wrapper.py +0 -0
  256. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/core/agents/agent_components/task_completion.py +0 -0
  257. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/core/agents/agent_components/tool_buffer.py +0 -0
  258. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/core/agents/agent_components/tool_executor.py +0 -0
  259. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/core/agents/agent_components/truncation_checker.py +0 -0
  260. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/core/agents/main.py +0 -0
  261. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/core/agents/utils.py +0 -0
  262. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/core/background/__init__.py +0 -0
  263. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/core/background/manager.py +0 -0
  264. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/core/code_index.py +0 -0
  265. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/core/llm/__init__.py +0 -0
  266. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/core/logging/__init__.py +0 -0
  267. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/core/logging/config.py +0 -0
  268. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/core/logging/formatters.py +0 -0
  269. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/core/logging/handlers.py +0 -0
  270. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/core/logging/logger.py +0 -0
  271. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/core/setup/__init__.py +0 -0
  272. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/core/setup/agent_setup.py +0 -0
  273. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/core/setup/base.py +0 -0
  274. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/core/setup/coordinator.py +0 -0
  275. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/core/setup/environment_setup.py +0 -0
  276. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/core/setup/git_safety_setup.py +0 -0
  277. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/core/setup/template_setup.py +0 -0
  278. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/core/state.py +0 -0
  279. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/core/token_usage/api_response_parser.py +0 -0
  280. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/core/token_usage/cost_calculator.py +0 -0
  281. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/core/token_usage/usage_tracker.py +0 -0
  282. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/core/tool_handler.py +0 -0
  283. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/exceptions.py +0 -0
  284. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/prompts/system.md +0 -0
  285. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/prompts/system.md.bak +0 -0
  286. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/py.typed +0 -0
  287. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/services/__init__.py +0 -0
  288. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/services/mcp.py +0 -0
  289. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/setup.py +0 -0
  290. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/templates/__init__.py +0 -0
  291. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/templates/loader.py +0 -0
  292. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/tools/__init__.py +0 -0
  293. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/tools/base.py +0 -0
  294. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/tools/bash.py +0 -0
  295. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/tools/exit_plan_mode.py +0 -0
  296. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/tools/glob.py +0 -0
  297. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/tools/grep.py +0 -0
  298. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/tools/grep_components/__init__.py +0 -0
  299. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/tools/grep_components/file_filter.py +0 -0
  300. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/tools/grep_components/pattern_matcher.py +0 -0
  301. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/tools/grep_components/result_formatter.py +0 -0
  302. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/tools/grep_components/search_result.py +0 -0
  303. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/tools/list_dir.py +0 -0
  304. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/tools/present_plan.py +0 -0
  305. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/tools/prompts/bash_prompt.xml +0 -0
  306. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/tools/prompts/exit_plan_mode_prompt.xml +0 -0
  307. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/tools/prompts/glob_prompt.xml +0 -0
  308. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/tools/prompts/grep_prompt.xml +0 -0
  309. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/tools/prompts/list_dir_prompt.xml +0 -0
  310. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/tools/prompts/present_plan_prompt.xml +0 -0
  311. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/tools/prompts/read_file_prompt.xml +0 -0
  312. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/tools/prompts/run_command_prompt.xml +0 -0
  313. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/tools/prompts/todo_prompt.xml +0 -0
  314. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/tools/prompts/update_file_prompt.xml +0 -0
  315. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/tools/prompts/write_file_prompt.xml +0 -0
  316. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/tools/read_file.py +0 -0
  317. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/tools/run_command.py +0 -0
  318. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/tools/schema_assembler.py +0 -0
  319. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/tools/todo.py +0 -0
  320. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/tools/update_file.py +0 -0
  321. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/tools/write_file.py +0 -0
  322. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/tools/xml_helper.py +0 -0
  323. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/tutorial/__init__.py +0 -0
  324. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/tutorial/content.py +0 -0
  325. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/tutorial/manager.py +0 -0
  326. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/tutorial/steps.py +0 -0
  327. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/types.py +0 -0
  328. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/ui/__init__.py +0 -0
  329. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/ui/completers.py +0 -0
  330. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/ui/console.py +0 -0
  331. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/ui/constants.py +0 -0
  332. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/ui/decorators.py +0 -0
  333. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/ui/input.py +0 -0
  334. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/ui/keybindings.py +0 -0
  335. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/ui/lexers.py +0 -0
  336. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/ui/logging_compat.py +0 -0
  337. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/ui/output.py +0 -0
  338. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/ui/panels.py +0 -0
  339. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/ui/prompt_manager.py +0 -0
  340. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/ui/tool_descriptions.py +0 -0
  341. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/ui/tool_ui.py +0 -0
  342. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/ui/utils.py +0 -0
  343. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/ui/validators.py +0 -0
  344. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/utils/__init__.py +0 -0
  345. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/utils/bm25.py +0 -0
  346. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/utils/diff_utils.py +0 -0
  347. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/utils/file_utils.py +0 -0
  348. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/utils/import_cache.py +0 -0
  349. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/utils/json_utils.py +0 -0
  350. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/utils/message_utils.py +0 -0
  351. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/utils/retry.py +0 -0
  352. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/utils/ripgrep.py +0 -0
  353. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/utils/security.py +0 -0
  354. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/utils/system.py +0 -0
  355. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/utils/text_utils.py +0 -0
  356. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/utils/token_counter.py +0 -0
  357. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/src/tunacode/utils/user_configuration.py +0 -0
  358. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/CHARACTERIZATION_README.md +0 -0
  359. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/CHARACTERIZATION_TEST_PLAN.md +0 -0
  360. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/CHARACTERIZATION_TEST_PLAN_AGENT_MAIN.md +0 -0
  361. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/CHARACTERIZATION_TEST_PLAN_COMMANDS.md +0 -0
  362. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/FILE_OPERATIONS_TEST_GUIDE.md +0 -0
  363. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/__init__.py +0 -0
  364. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/agent/__init__.py +0 -0
  365. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/agent/conftest.py +0 -0
  366. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/agent/test_agent_creation.py +0 -0
  367. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/agent/test_json_tool_parsing.py +0 -0
  368. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/agent/test_process_node.py +0 -0
  369. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/agent/test_process_request.py +0 -0
  370. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/agent/test_tool_message_patching.py +0 -0
  371. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/background/test_background_edge_cases.py +0 -0
  372. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/background/test_cleanup.py +0 -0
  373. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/background/test_task_cancellation.py +0 -0
  374. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/background/test_task_creation.py +0 -0
  375. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/background/test_task_execution.py +0 -0
  376. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/code_index/test_cache_management.py +0 -0
  377. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/code_index/test_file_scanning.py +0 -0
  378. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/code_index/test_index_building.py +0 -0
  379. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/code_index/test_search_operations.py +0 -0
  380. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/code_index/test_symbol_extraction.py +0 -0
  381. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/commands/__init__.py +0 -0
  382. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/commands/test_init_command.py +0 -0
  383. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/conftest.py +0 -0
  384. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/context/README.md +0 -0
  385. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/context/__init__.py +0 -0
  386. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/context/test_context_acceptance.py +0 -0
  387. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/context/test_context_integration.py +0 -0
  388. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/context/test_context_loading.py +0 -0
  389. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/context/test_tunacode_logging.py +0 -0
  390. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/repl/test_command_parsing.py +0 -0
  391. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/repl/test_error_handling.py +0 -0
  392. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/repl/test_escape_key_behavior.py +0 -0
  393. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/repl/test_input_handling.py +0 -0
  394. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/repl/test_keyboard_interrupts.py +0 -0
  395. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/repl/test_multiline_input.py +0 -0
  396. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/repl/test_output_display_logic.py +0 -0
  397. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/repl/test_repl_initialization.py +0 -0
  398. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/repl/test_session_flow.py +0 -0
  399. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/services/test_error_recovery.py +0 -0
  400. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/services/test_llm_routing.py +0 -0
  401. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/services/test_mcp_integration.py +0 -0
  402. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/services/test_service_lifecycle.py +0 -0
  403. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/state/test_agent_tracking.py +0 -0
  404. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/state/test_message_history.py +0 -0
  405. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/state/test_permissions.py +0 -0
  406. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/state/test_session_management.py +0 -0
  407. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/state/test_state_initialization.py +0 -0
  408. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/state/test_user_config.py +0 -0
  409. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/test_characterization_commands.py +0 -0
  410. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/test_characterization_grep.py +0 -0
  411. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/test_characterization_main.py +0 -0
  412. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/test_characterization_repl.py +0 -0
  413. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/ui/test_async_ui.py +0 -0
  414. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/ui/test_console_output.py +0 -0
  415. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/ui/test_diff_display.py +0 -0
  416. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/ui/test_prompt_rendering.py +0 -0
  417. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/ui/test_spinner_messages.py +0 -0
  418. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/ui/test_tool_confirmations.py +0 -0
  419. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/utils/test_expand_file_refs.py +0 -0
  420. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/utils/test_file_operations.py +0 -0
  421. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/utils/test_git_commands.py +0 -0
  422. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/utils/test_token_counting.py +0 -0
  423. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/characterization/utils/test_utils_edge_cases.py +0 -0
  424. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/conftest.py +0 -0
  425. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/test_agent_output_formatting.py +0 -0
  426. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/test_command_parser_retry.py +0 -0
  427. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/test_completion_detection.py +0 -0
  428. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/test_glob_phase3.py +0 -0
  429. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/test_json_concatenation_recovery.py +0 -0
  430. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/test_json_retry.py +0 -0
  431. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/test_logging_config.py +0 -0
  432. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/test_onboarding_features.py +0 -0
  433. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/test_phase2_type_hints.py +0 -0
  434. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/test_plan_mode.py +0 -0
  435. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/test_prompt_changes_validation.py +0 -0
  436. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/test_prompt_injection.py +0 -0
  437. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/test_security.py +0 -0
  438. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/test_slash_commands_comprehensive.py +0 -0
  439. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/test_slash_commands_functional.py +0 -0
  440. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/test_slash_commands_integration.py +0 -0
  441. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/test_slash_commands_isolated.py +0 -0
  442. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/test_spinner_updates.py +0 -0
  443. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/test_tool_batching_retry.py +0 -0
  444. {tunacode_cli-0.0.69 → tunacode_cli-0.0.71}/tests/unit/test_constants_enums.py +0 -0
  445. {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.69
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.69"
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.69"
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
- # ConfigurationError already printed helpful message, just exit cleanly
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
@@ -9,7 +9,7 @@ from enum import Enum
9
9
 
10
10
  # Application info
11
11
  APP_NAME = "TunaCode"
12
- APP_VERSION = "0.0.69"
12
+ APP_VERSION = "0.0.71"
13
13
 
14
14
 
15
15
  # File patterns
@@ -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
- # No model validation - trust user's model choice
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 = self.state_manager.session.user_config[
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