tunacode-cli 0.0.54__tar.gz → 0.0.56__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of tunacode-cli might be problematic. Click here for more details.

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