tunacode-cli 0.0.78.14__tar.gz → 0.1.24__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 (595) hide show
  1. {tunacode_cli-0.0.78.14 → tunacode_cli-0.1.24}/.github/pull_request_template.md +1 -1
  2. tunacode_cli-0.1.24/.github/workflows/lint.yml +20 -0
  3. {tunacode_cli-0.0.78.14 → tunacode_cli-0.1.24}/.github/workflows/publish-release.yml +2 -2
  4. {tunacode_cli-0.0.78.14 → tunacode_cli-0.1.24}/.gitignore +3 -1
  5. {tunacode_cli-0.0.78.14 → tunacode_cli-0.1.24}/.pre-commit-config.yaml +5 -25
  6. tunacode_cli-0.1.24/AGENTS.md +302 -0
  7. tunacode_cli-0.1.24/CHANGELOG.md +155 -0
  8. tunacode_cli-0.1.24/CLAUDE.md +302 -0
  9. tunacode_cli-0.1.24/CONTRIBUTING.md +156 -0
  10. tunacode_cli-0.1.24/PKG-INFO +170 -0
  11. tunacode_cli-0.1.24/README.md +117 -0
  12. tunacode_cli-0.1.24/docs/codebase-map/MAP.md +467 -0
  13. tunacode_cli-0.1.24/docs/codebase-map/architecture/architecture.md +718 -0
  14. tunacode_cli-0.1.24/docs/codebase-map/modules/00-overview.md +57 -0
  15. tunacode_cli-0.1.24/docs/codebase-map/modules/INDEX.md +116 -0
  16. tunacode_cli-0.1.24/docs/codebase-map/modules/configuration.md +99 -0
  17. tunacode_cli-0.1.24/docs/codebase-map/modules/constants.md +163 -0
  18. tunacode_cli-0.1.24/docs/codebase-map/modules/core-agents.md +110 -0
  19. tunacode_cli-0.1.24/docs/codebase-map/modules/core-compaction.md +68 -0
  20. tunacode_cli-0.1.24/docs/codebase-map/modules/core-prompting.md +100 -0
  21. tunacode_cli-0.1.24/docs/codebase-map/modules/core-state.md +57 -0
  22. tunacode_cli-0.1.24/docs/codebase-map/modules/exceptions.md +187 -0
  23. tunacode_cli-0.1.24/docs/codebase-map/modules/indexing.md +95 -0
  24. tunacode_cli-0.1.24/docs/codebase-map/modules/lsp.md +112 -0
  25. tunacode_cli-0.1.24/docs/codebase-map/modules/prompts.md +151 -0
  26. tunacode_cli-0.1.24/docs/codebase-map/modules/templates.md +113 -0
  27. tunacode_cli-0.1.24/docs/codebase-map/modules/tools-overview.md +214 -0
  28. tunacode_cli-0.1.24/docs/codebase-map/modules/types.md +95 -0
  29. tunacode_cli-0.1.24/docs/codebase-map/modules/ui-overview.md +166 -0
  30. tunacode_cli-0.1.24/docs/codebase-map/modules/utils.md +149 -0
  31. tunacode_cli-0.1.24/docs/codebase-map/state/state.md +324 -0
  32. tunacode_cli-0.1.24/docs/codebase-map/structure/00-root-overview.md +82 -0
  33. tunacode_cli-0.1.24/docs/codebase-map/structure/01-ui-directory.md +129 -0
  34. tunacode_cli-0.1.24/docs/codebase-map/structure/02-core-directory.md +136 -0
  35. tunacode_cli-0.1.24/docs/codebase-map/structure/03-tools-directory.md +169 -0
  36. tunacode_cli-0.1.24/docs/codebase-map/structure/04-configuration-directory.md +171 -0
  37. tunacode_cli-0.1.24/docs/codebase-map/structure/05-cli-directory.md +123 -0
  38. tunacode_cli-0.1.24/docs/codebase-map/structure/06-supporting-modules.md +216 -0
  39. tunacode_cli-0.1.24/docs/codebase-map/structure/ANALYSIS_SUMMARY.md +266 -0
  40. tunacode_cli-0.1.24/docs/codebase-map/structure/README.md +233 -0
  41. tunacode_cli-0.1.24/docs/codebase-map/structure/tree-structure.txt +264 -0
  42. tunacode_cli-0.1.24/docs/configuration/README.md +20 -0
  43. {tunacode_cli-0.0.78.14/documentation → tunacode_cli-0.1.24/docs}/configuration/tunacode.json.example +8 -16
  44. tunacode_cli-0.1.24/docs/images/theme.png +0 -0
  45. tunacode_cli-0.1.24/docs/images/tui-model-setup.png +0 -0
  46. tunacode_cli-0.1.24/docs/images/tui.png +0 -0
  47. tunacode_cli-0.1.24/docs/tools/architecture.md +221 -0
  48. tunacode_cli-0.1.24/docs/ui/design_philosophy.md +26 -0
  49. tunacode_cli-0.1.24/docs/ui/nextstep_panels.md +108 -0
  50. tunacode_cli-0.1.24/pyproject.toml +185 -0
  51. {tunacode_cli-0.0.78.14 → tunacode_cli-0.1.24}/pytest.ini +13 -1
  52. {tunacode_cli-0.0.78.14 → tunacode_cli-0.1.24}/scripts/check-file-length.sh +28 -2
  53. {tunacode_cli-0.0.78.14 → tunacode_cli-0.1.24}/scripts/download_ripgrep.py +13 -13
  54. {tunacode_cli-0.0.78.14 → tunacode_cli-0.1.24}/scripts/playwright_cache.py +1 -2
  55. {tunacode_cli-0.0.78.14 → tunacode_cli-0.1.24}/scripts/run-dead-imports.sh +1 -0
  56. {tunacode_cli-0.0.78.14 → tunacode_cli-0.1.24}/scripts/startup_timer.py +7 -7
  57. {tunacode_cli-0.0.78.14 → tunacode_cli-0.1.24}/scripts/ui_import_timer.py +2 -7
  58. tunacode_cli-0.1.24/scripts/update_models_registry.sh +4 -0
  59. tunacode_cli-0.1.24/src/tunacode/cli/textual_repl.tcss +283 -0
  60. {tunacode_cli-0.0.78.14 → tunacode_cli-0.1.24}/src/tunacode/configuration/defaults.py +9 -3
  61. tunacode_cli-0.1.24/src/tunacode/configuration/models.py +147 -0
  62. tunacode_cli-0.1.24/src/tunacode/configuration/models_registry.json +1 -0
  63. tunacode_cli-0.1.24/src/tunacode/configuration/pricing.py +74 -0
  64. {tunacode_cli-0.0.78.14 → tunacode_cli-0.1.24}/src/tunacode/configuration/settings.py +0 -1
  65. tunacode_cli-0.1.24/src/tunacode/constants.py +227 -0
  66. tunacode_cli-0.1.24/src/tunacode/core/__init__.py +6 -0
  67. {tunacode_cli-0.0.78.14 → tunacode_cli-0.1.24}/src/tunacode/core/agents/__init__.py +0 -10
  68. {tunacode_cli-0.0.78.14 → tunacode_cli-0.1.24}/src/tunacode/core/agents/agent_components/__init__.py +0 -6
  69. {tunacode_cli-0.0.78.14 → tunacode_cli-0.1.24}/src/tunacode/core/agents/agent_components/agent_config.py +124 -92
  70. {tunacode_cli-0.0.78.14 → tunacode_cli-0.1.24}/src/tunacode/core/agents/agent_components/agent_helpers.py +16 -19
  71. {tunacode_cli-0.0.78.14 → tunacode_cli-0.1.24}/src/tunacode/core/agents/agent_components/message_handler.py +8 -9
  72. tunacode_cli-0.1.24/src/tunacode/core/agents/agent_components/node_processor.py +477 -0
  73. {tunacode_cli-0.0.78.14 → tunacode_cli-0.1.24}/src/tunacode/core/agents/agent_components/response_state.py +1 -2
  74. {tunacode_cli-0.0.78.14 → tunacode_cli-0.1.24}/src/tunacode/core/agents/agent_components/result_wrapper.py +2 -1
  75. {tunacode_cli-0.0.78.14 → tunacode_cli-0.1.24}/src/tunacode/core/agents/agent_components/state_transition.py +3 -7
  76. {tunacode_cli-0.0.78.14 → tunacode_cli-0.1.24}/src/tunacode/core/agents/agent_components/streaming.py +49 -74
  77. {tunacode_cli-0.0.78.14 → tunacode_cli-0.1.24}/src/tunacode/core/agents/agent_components/task_completion.py +1 -2
  78. {tunacode_cli-0.0.78.14 → tunacode_cli-0.1.24}/src/tunacode/core/agents/agent_components/tool_buffer.py +6 -6
  79. tunacode_cli-0.1.24/src/tunacode/core/agents/agent_components/tool_executor.py +101 -0
  80. tunacode_cli-0.1.24/src/tunacode/core/agents/agent_components/truncation_checker.py +37 -0
  81. {tunacode_cli-0.0.78.14 → tunacode_cli-0.1.24}/src/tunacode/core/agents/delegation_tools.py +10 -10
  82. {tunacode_cli-0.0.78.14 → tunacode_cli-0.1.24}/src/tunacode/core/agents/main.py +46 -116
  83. tunacode_cli-0.1.24/src/tunacode/core/agents/research_agent.py +231 -0
  84. tunacode_cli-0.1.24/src/tunacode/core/compaction.py +218 -0
  85. tunacode_cli-0.1.24/src/tunacode/core/prompting/__init__.py +27 -0
  86. tunacode_cli-0.1.24/src/tunacode/core/prompting/loader.py +66 -0
  87. tunacode_cli-0.1.24/src/tunacode/core/prompting/prompting_engine.py +98 -0
  88. tunacode_cli-0.1.24/src/tunacode/core/prompting/sections.py +50 -0
  89. tunacode_cli-0.1.24/src/tunacode/core/prompting/templates.py +69 -0
  90. tunacode_cli-0.1.24/src/tunacode/core/state.py +409 -0
  91. {tunacode_cli-0.0.78.14 → tunacode_cli-0.1.24}/src/tunacode/exceptions.py +127 -80
  92. tunacode_cli-0.1.24/src/tunacode/indexing/__init__.py +5 -0
  93. {tunacode_cli-0.0.78.14/src/tunacode/core → tunacode_cli-0.1.24/src/tunacode/indexing}/code_index.py +117 -218
  94. tunacode_cli-0.1.24/src/tunacode/indexing/constants.py +86 -0
  95. tunacode_cli-0.1.24/src/tunacode/lsp/__init__.py +112 -0
  96. tunacode_cli-0.1.24/src/tunacode/lsp/client.py +351 -0
  97. tunacode_cli-0.1.24/src/tunacode/lsp/diagnostics.py +19 -0
  98. tunacode_cli-0.1.24/src/tunacode/lsp/servers.py +101 -0
  99. tunacode_cli-0.0.78.14/src/tunacode/prompts/system.xml → tunacode_cli-0.1.24/src/tunacode/prompts/default_prompt.md +568 -518
  100. tunacode_cli-0.1.24/src/tunacode/prompts/research/sections/agent_role.xml +5 -0
  101. tunacode_cli-0.1.24/src/tunacode/prompts/research/sections/constraints.xml +14 -0
  102. tunacode_cli-0.0.78.14/src/tunacode/prompts/research/system.xml → tunacode_cli-0.1.24/src/tunacode/prompts/research/sections/output_format.xml +0 -42
  103. tunacode_cli-0.1.24/src/tunacode/prompts/research/sections/tool_use.xml +23 -0
  104. tunacode_cli-0.1.24/src/tunacode/prompts/sections/advanced_patterns.xml +255 -0
  105. tunacode_cli-0.1.24/src/tunacode/prompts/sections/agent_role.xml +8 -0
  106. tunacode_cli-0.1.24/src/tunacode/prompts/sections/completion.xml +10 -0
  107. tunacode_cli-0.1.24/src/tunacode/prompts/sections/critical_rules.xml +37 -0
  108. tunacode_cli-0.1.24/src/tunacode/prompts/sections/examples.xml +220 -0
  109. tunacode_cli-0.1.24/src/tunacode/prompts/sections/output_style.xml +94 -0
  110. tunacode_cli-0.1.24/src/tunacode/prompts/sections/parallel_exec.xml +105 -0
  111. tunacode_cli-0.1.24/src/tunacode/prompts/sections/search_pattern.xml +100 -0
  112. tunacode_cli-0.1.24/src/tunacode/prompts/sections/system_info.xml +6 -0
  113. tunacode_cli-0.1.24/src/tunacode/prompts/sections/tool_use.xml +84 -0
  114. tunacode_cli-0.1.24/src/tunacode/prompts/sections/user_instructions.xml +3 -0
  115. tunacode_cli-0.1.24/src/tunacode/templates/__init__.py +5 -0
  116. tunacode_cli-0.1.24/src/tunacode/templates/loader.py +15 -0
  117. tunacode_cli-0.1.24/src/tunacode/tools/authorization/__init__.py +29 -0
  118. tunacode_cli-0.1.24/src/tunacode/tools/authorization/context.py +32 -0
  119. tunacode_cli-0.1.24/src/tunacode/tools/authorization/factory.py +20 -0
  120. tunacode_cli-0.1.24/src/tunacode/tools/authorization/handler.py +58 -0
  121. tunacode_cli-0.1.24/src/tunacode/tools/authorization/notifier.py +35 -0
  122. tunacode_cli-0.1.24/src/tunacode/tools/authorization/policy.py +19 -0
  123. tunacode_cli-0.1.24/src/tunacode/tools/authorization/requests.py +119 -0
  124. tunacode_cli-0.1.24/src/tunacode/tools/authorization/rules.py +72 -0
  125. tunacode_cli-0.1.24/src/tunacode/tools/bash.py +222 -0
  126. tunacode_cli-0.1.24/src/tunacode/tools/decorators.py +213 -0
  127. tunacode_cli-0.1.24/src/tunacode/tools/glob.py +353 -0
  128. {tunacode_cli-0.0.78.14 → tunacode_cli-0.1.24}/src/tunacode/tools/grep.py +70 -153
  129. {tunacode_cli-0.0.78.14 → tunacode_cli-0.1.24}/src/tunacode/tools/grep_components/file_filter.py +7 -7
  130. {tunacode_cli-0.0.78.14 → tunacode_cli-0.1.24}/src/tunacode/tools/grep_components/pattern_matcher.py +15 -9
  131. tunacode_cli-0.1.24/src/tunacode/tools/grep_components/result_formatter.py +87 -0
  132. {tunacode_cli-0.0.78.14 → tunacode_cli-0.1.24}/src/tunacode/tools/grep_components/search_result.py +4 -5
  133. tunacode_cli-0.1.24/src/tunacode/tools/list_dir.py +205 -0
  134. tunacode_cli-0.1.24/src/tunacode/tools/prompts/bash_prompt.xml +10 -0
  135. tunacode_cli-0.1.24/src/tunacode/tools/prompts/glob_prompt.xml +7 -0
  136. tunacode_cli-0.1.24/src/tunacode/tools/prompts/grep_prompt.xml +10 -0
  137. tunacode_cli-0.1.24/src/tunacode/tools/prompts/list_dir_prompt.xml +7 -0
  138. tunacode_cli-0.1.24/src/tunacode/tools/prompts/read_file_prompt.xml +9 -0
  139. tunacode_cli-0.1.24/src/tunacode/tools/prompts/todoclear_prompt.xml +12 -0
  140. tunacode_cli-0.1.24/src/tunacode/tools/prompts/todoread_prompt.xml +16 -0
  141. tunacode_cli-0.1.24/src/tunacode/tools/prompts/todowrite_prompt.xml +28 -0
  142. tunacode_cli-0.1.24/src/tunacode/tools/prompts/update_file_prompt.xml +9 -0
  143. tunacode_cli-0.1.24/src/tunacode/tools/prompts/web_fetch_prompt.xml +11 -0
  144. tunacode_cli-0.1.24/src/tunacode/tools/prompts/write_file_prompt.xml +7 -0
  145. tunacode_cli-0.1.24/src/tunacode/tools/react.py +111 -0
  146. tunacode_cli-0.1.24/src/tunacode/tools/read_file.py +68 -0
  147. tunacode_cli-0.1.24/src/tunacode/tools/todo.py +222 -0
  148. tunacode_cli-0.1.24/src/tunacode/tools/update_file.py +62 -0
  149. tunacode_cli-0.1.24/src/tunacode/tools/utils/__init__.py +1 -0
  150. {tunacode_cli-0.0.78.14/src/tunacode/tools_utils → tunacode_cli-0.1.24/src/tunacode/tools/utils}/ripgrep.py +17 -46
  151. {tunacode_cli-0.0.78.14/src/tunacode/tools_utils → tunacode_cli-0.1.24/src/tunacode/tools/utils}/text_match.py +32 -18
  152. tunacode_cli-0.1.24/src/tunacode/tools/web_fetch.py +245 -0
  153. tunacode_cli-0.1.24/src/tunacode/tools/write_file.py +34 -0
  154. tunacode_cli-0.1.24/src/tunacode/tools/xml_helper.py +34 -0
  155. tunacode_cli-0.1.24/src/tunacode/types/__init__.py +166 -0
  156. tunacode_cli-0.1.24/src/tunacode/types/base.py +94 -0
  157. tunacode_cli-0.1.24/src/tunacode/types/callbacks.py +53 -0
  158. tunacode_cli-0.1.24/src/tunacode/types/dataclasses.py +121 -0
  159. tunacode_cli-0.1.24/src/tunacode/types/pydantic_ai.py +31 -0
  160. tunacode_cli-0.1.24/src/tunacode/types/state.py +122 -0
  161. tunacode_cli-0.1.24/src/tunacode/ui/__init__.py +6 -0
  162. tunacode_cli-0.1.24/src/tunacode/ui/app.py +542 -0
  163. tunacode_cli-0.1.24/src/tunacode/ui/commands/__init__.py +430 -0
  164. tunacode_cli-0.1.24/src/tunacode/ui/components/__init__.py +1 -0
  165. tunacode_cli-0.1.24/src/tunacode/ui/headless/__init__.py +5 -0
  166. tunacode_cli-0.1.24/src/tunacode/ui/headless/output.py +72 -0
  167. tunacode_cli-0.1.24/src/tunacode/ui/main.py +252 -0
  168. tunacode_cli-0.1.24/src/tunacode/ui/renderers/__init__.py +41 -0
  169. tunacode_cli-0.1.24/src/tunacode/ui/renderers/errors.py +197 -0
  170. tunacode_cli-0.1.24/src/tunacode/ui/renderers/panels.py +550 -0
  171. tunacode_cli-0.1.24/src/tunacode/ui/renderers/search.py +314 -0
  172. tunacode_cli-0.1.24/src/tunacode/ui/renderers/tools/__init__.py +21 -0
  173. tunacode_cli-0.1.24/src/tunacode/ui/renderers/tools/bash.py +247 -0
  174. tunacode_cli-0.1.24/src/tunacode/ui/renderers/tools/diagnostics.py +186 -0
  175. tunacode_cli-0.1.24/src/tunacode/ui/renderers/tools/glob.py +226 -0
  176. tunacode_cli-0.1.24/src/tunacode/ui/renderers/tools/grep.py +228 -0
  177. tunacode_cli-0.1.24/src/tunacode/ui/renderers/tools/list_dir.py +198 -0
  178. tunacode_cli-0.1.24/src/tunacode/ui/renderers/tools/read_file.py +226 -0
  179. tunacode_cli-0.1.24/src/tunacode/ui/renderers/tools/research.py +294 -0
  180. tunacode_cli-0.1.24/src/tunacode/ui/renderers/tools/update_file.py +237 -0
  181. tunacode_cli-0.1.24/src/tunacode/ui/renderers/tools/web_fetch.py +182 -0
  182. tunacode_cli-0.1.24/src/tunacode/ui/repl_support.py +226 -0
  183. tunacode_cli-0.1.24/src/tunacode/ui/screens/__init__.py +16 -0
  184. tunacode_cli-0.1.24/src/tunacode/ui/screens/model_picker.py +303 -0
  185. tunacode_cli-0.1.24/src/tunacode/ui/screens/session_picker.py +181 -0
  186. tunacode_cli-0.1.24/src/tunacode/ui/screens/setup.py +218 -0
  187. tunacode_cli-0.1.24/src/tunacode/ui/screens/theme_picker.py +90 -0
  188. tunacode_cli-0.1.24/src/tunacode/ui/screens/update_confirm.py +69 -0
  189. tunacode_cli-0.1.24/src/tunacode/ui/shell_runner.py +129 -0
  190. tunacode_cli-0.1.24/src/tunacode/ui/styles/layout.tcss +98 -0
  191. tunacode_cli-0.1.24/src/tunacode/ui/styles/modals.tcss +38 -0
  192. tunacode_cli-0.1.24/src/tunacode/ui/styles/panels.tcss +81 -0
  193. tunacode_cli-0.1.24/src/tunacode/ui/styles/theme-nextstep.tcss +303 -0
  194. tunacode_cli-0.1.24/src/tunacode/ui/styles/widgets.tcss +33 -0
  195. tunacode_cli-0.1.24/src/tunacode/ui/styles.py +18 -0
  196. tunacode_cli-0.1.24/src/tunacode/ui/widgets/__init__.py +23 -0
  197. tunacode_cli-0.1.24/src/tunacode/ui/widgets/command_autocomplete.py +62 -0
  198. tunacode_cli-0.1.24/src/tunacode/ui/widgets/editor.py +402 -0
  199. tunacode_cli-0.1.24/src/tunacode/ui/widgets/file_autocomplete.py +47 -0
  200. tunacode_cli-0.1.24/src/tunacode/ui/widgets/messages.py +46 -0
  201. tunacode_cli-0.1.24/src/tunacode/ui/widgets/resource_bar.py +182 -0
  202. tunacode_cli-0.1.24/src/tunacode/ui/widgets/status_bar.py +98 -0
  203. tunacode_cli-0.1.24/src/tunacode/utils/config/__init__.py +13 -0
  204. {tunacode_cli-0.0.78.14/src/tunacode/utils → tunacode_cli-0.1.24/src/tunacode/utils/config}/user_configuration.py +14 -61
  205. tunacode_cli-0.1.24/src/tunacode/utils/messaging/__init__.py +10 -0
  206. {tunacode_cli-0.0.78.14/src/tunacode/utils → tunacode_cli-0.1.24/src/tunacode/utils/messaging}/message_utils.py +5 -0
  207. {tunacode_cli-0.0.78.14/src/tunacode/utils → tunacode_cli-0.1.24/src/tunacode/utils/messaging}/token_counter.py +5 -20
  208. tunacode_cli-0.1.24/src/tunacode/utils/parsing/__init__.py +13 -0
  209. {tunacode_cli-0.0.78.14/src/tunacode/cli/repl_components → tunacode_cli-0.1.24/src/tunacode/utils/parsing}/command_parser.py +5 -18
  210. {tunacode_cli-0.0.78.14/src/tunacode/utils → tunacode_cli-0.1.24/src/tunacode/utils/parsing}/json_utils.py +41 -59
  211. {tunacode_cli-0.0.78.14/src/tunacode/utils → tunacode_cli-0.1.24/src/tunacode/utils/parsing}/retry.py +2 -19
  212. tunacode_cli-0.1.24/src/tunacode/utils/parsing/tool_parser.py +267 -0
  213. tunacode_cli-0.1.24/src/tunacode/utils/security/__init__.py +15 -0
  214. tunacode_cli-0.0.78.14/src/tunacode/utils/security.py → tunacode_cli-0.1.24/src/tunacode/utils/security/command.py +2 -105
  215. tunacode_cli-0.1.24/src/tunacode/utils/system/__init__.py +25 -0
  216. tunacode_cli-0.1.24/src/tunacode/utils/system/gitignore.py +155 -0
  217. tunacode_cli-0.1.24/src/tunacode/utils/system/paths.py +190 -0
  218. tunacode_cli-0.1.24/src/tunacode/utils/ui/__init__.py +9 -0
  219. tunacode_cli-0.1.24/src/tunacode/utils/ui/file_filter.py +135 -0
  220. tunacode_cli-0.1.24/src/tunacode/utils/ui/helpers.py +24 -0
  221. tunacode_cli-0.1.24/tests/__init__.py +1 -0
  222. tunacode_cli-0.1.24/tests/conftest.py +19 -0
  223. tunacode_cli-0.1.24/tests/test_cli_default_command.py +29 -0
  224. tunacode_cli-0.1.24/tests/test_compaction.py +343 -0
  225. tunacode_cli-0.1.24/tests/test_confirmation_preview.py +46 -0
  226. tunacode_cli-0.1.24/tests/test_diagnostics_renderer.py +175 -0
  227. tunacode_cli-0.1.24/tests/test_exceptions.py +94 -0
  228. tunacode_cli-0.1.24/tests/test_headless_cli.py +37 -0
  229. tunacode_cli-0.1.24/tests/test_prompting_engine.py +90 -0
  230. tunacode_cli-0.1.24/tests/test_repl_support.py +26 -0
  231. tunacode_cli-0.1.24/tests/test_shell_command_escape.py +97 -0
  232. tunacode_cli-0.1.24/tests/test_text_match.py +132 -0
  233. tunacode_cli-0.1.24/tests/test_todo_tools.py +48 -0
  234. tunacode_cli-0.1.24/tests/test_tool_conformance.py +143 -0
  235. tunacode_cli-0.1.24/tests/test_tool_decorators.py +219 -0
  236. tunacode_cli-0.1.24/tests/test_tool_parser.py +306 -0
  237. tunacode_cli-0.1.24/tests/test_tool_retry.py +253 -0
  238. tunacode_cli-0.1.24/tests/test_update_file_renderer.py +23 -0
  239. tunacode_cli-0.1.24/tests/test_web_fetch.py +141 -0
  240. tunacode_cli-0.1.24/uv.lock +3643 -0
  241. tunacode_cli-0.0.78.14/.claude/README.md +0 -28
  242. tunacode_cli-0.0.78.14/.claude/cheatsheets/agents.core.json +0 -12
  243. tunacode_cli-0.0.78.14/.claude/debug_history/2025-09-21-rag-search-hyphen-gotcha.md +0 -8
  244. tunacode_cli-0.0.78.14/.claude/debug_history/2025-11-05_tool_handler_refactoring.md +0 -236
  245. tunacode_cli-0.0.78.14/.claude/debug_history/agent.state.json +0 -13
  246. tunacode_cli-0.0.78.14/.claude/debug_history/agent.tool_execution.json +0 -13
  247. tunacode_cli-0.0.78.14/.claude/debug_history/agent_components.streaming.json +0 -13
  248. tunacode_cli-0.0.78.14/.claude/debug_history/agents.delegation.json +0 -13
  249. tunacode_cli-0.0.78.14/.claude/debug_history/cli.tool_confirmation.json +0 -13
  250. tunacode_cli-0.0.78.14/.claude/debug_history/core.agents.main.json +0 -13
  251. tunacode_cli-0.0.78.14/.claude/debug_history/core.agents.prompts.json +0 -13
  252. tunacode_cli-0.0.78.14/.claude/debug_history/debug_sessions.json +0 -142
  253. tunacode_cli-0.0.78.14/.claude/debug_history/error-handling.json +0 -13
  254. tunacode_cli-0.0.78.14/.claude/debug_history/streaming.json +0 -13
  255. tunacode_cli-0.0.78.14/.claude/debug_history/ui.panels.json +0 -13
  256. tunacode_cli-0.0.78.14/.claude/debug_history/ui.research_agent.json +0 -13
  257. tunacode_cli-0.0.78.14/.claude/debug_history/ui.research_feedback.json +0 -13
  258. tunacode_cli-0.0.78.14/.claude/delta_summaries/2025-01-05-baseline.yml +0 -27
  259. tunacode_cli-0.0.78.14/.claude/delta_summaries/2025-09-21-models_registry-pydantic-conversion.md +0 -26
  260. tunacode_cli-0.0.78.14/.claude/delta_summaries/2025-09-21-models_registry-validation-tests.md +0 -18
  261. tunacode_cli-0.0.78.14/.claude/delta_summaries/2025-09-21-test-update-model-command-characterization.md +0 -17
  262. tunacode_cli-0.0.78.14/.claude/delta_summaries/2025-10-01-startup-banner-panel.md +0 -14
  263. tunacode_cli-0.0.78.14/.claude/delta_summaries/2025-10-03-tool_handler-behavior-optimization.md +0 -70
  264. tunacode_cli-0.0.78.14/.claude/delta_summaries/2025-11-05_tool_handler_api_changes.md +0 -372
  265. tunacode_cli-0.0.78.14/.claude/delta_summaries/api_change_logs.json +0 -133
  266. tunacode_cli-0.0.78.14/.claude/delta_summaries/behavior_changes.json +0 -394
  267. tunacode_cli-0.0.78.14/.claude/delta_summaries/fix-text-alignment-layout-task3.md +0 -48
  268. tunacode_cli-0.0.78.14/.claude/delta_summaries/prompt_system_xml_migration.json +0 -23
  269. tunacode_cli-0.0.78.14/.claude/delta_summaries/reasoning_logs.json +0 -352
  270. tunacode_cli-0.0.78.14/.claude/delta_summaries/task4_ui_formatting_fix.md +0 -75
  271. tunacode_cli-0.0.78.14/.claude/delta_summaries/v0.0.53_to_v0.0.54.diff +0 -13
  272. tunacode_cli-0.0.78.14/.claude/development/always-on-display-implementation.md +0 -11
  273. tunacode_cli-0.0.78.14/.claude/development/cli-json-recovery-incident.md +0 -181
  274. tunacode_cli-0.0.78.14/.claude/development/directory-caching-optimization.md +0 -195
  275. tunacode_cli-0.0.78.14/.claude/development/esc-investigation/ESC_KEY_INVESTIGATION.md +0 -84
  276. tunacode_cli-0.0.78.14/.claude/development/esc-investigation/ESC_KEY_STREAMING_ANALYSIS.md +0 -308
  277. tunacode_cli-0.0.78.14/.claude/development/hatch-commands.md +0 -120
  278. tunacode_cli-0.0.78.14/.claude/development/model-updates-2025.md +0 -18
  279. tunacode_cli-0.0.78.14/.claude/development/onboarding-improvements.md +0 -20
  280. tunacode_cli-0.0.78.14/.claude/development/openai_tool_calling_evaluation.md +0 -85
  281. tunacode_cli-0.0.78.14/.claude/development/phase5-prompt-injection-system.md +0 -119
  282. tunacode_cli-0.0.78.14/.claude/development/slash-commands.md +0 -34
  283. tunacode_cli-0.0.78.14/.claude/development/uv-hatch-setup.md +0 -102
  284. tunacode_cli-0.0.78.14/.claude/development/uv-installer-updates.md +0 -67
  285. tunacode_cli-0.0.78.14/.claude/development/version-management.md +0 -73
  286. tunacode_cli-0.0.78.14/.claude/docs_model_friendly/component_purpose.md +0 -273
  287. tunacode_cli-0.0.78.14/.claude/docs_model_friendly/component_relationships.md +0 -341
  288. tunacode_cli-0.0.78.14/.claude/docs_model_friendly/option3_feedback_flow.md +0 -207
  289. tunacode_cli-0.0.78.14/.claude/docs_model_friendly/rag_modules_overview.md +0 -21
  290. tunacode_cli-0.0.78.14/.claude/kv/github-actions-release-fix.json +0 -1
  291. tunacode_cli-0.0.78.14/.claude/manifest.json +0 -326
  292. tunacode_cli-0.0.78.14/.claude/memory_anchors/anchors.json +0 -60
  293. tunacode_cli-0.0.78.14/.claude/metadata/components.yml +0 -84
  294. tunacode_cli-0.0.78.14/.claude/metadata/file_classifications.json +0 -195
  295. tunacode_cli-0.0.78.14/.claude/metadata/hotspots.txt +0 -20
  296. tunacode_cli-0.0.78.14/.claude/patterns/agent.state.json +0 -11
  297. tunacode_cli-0.0.78.14/.claude/patterns/agents.delegation.json +0 -11
  298. tunacode_cli-0.0.78.14/.claude/patterns/agents.main_beta.json +0 -11
  299. tunacode_cli-0.0.78.14/.claude/patterns/agents.parallel_execution.json +0 -15
  300. tunacode_cli-0.0.78.14/.claude/patterns/canonical_patterns/backward_compatibility_refactor.md +0 -18
  301. tunacode_cli-0.0.78.14/.claude/patterns/core.agents.agent_config.json +0 -11
  302. tunacode_cli-0.0.78.14/.claude/patterns/core.agents.main.json +0 -11
  303. tunacode_cli-0.0.78.14/.claude/patterns/error-handling.json +0 -15
  304. tunacode_cli-0.0.78.14/.claude/patterns/json_retry_implementation.md +0 -111
  305. tunacode_cli-0.0.78.14/.claude/patterns/tool_handler_refactoring_pattern.md +0 -245
  306. tunacode_cli-0.0.78.14/.claude/patterns/ui.concurrent_updates.json +0 -11
  307. tunacode_cli-0.0.78.14/.claude/patterns/ui.research_agent.json +0 -11
  308. tunacode_cli-0.0.78.14/.claude/patterns/ui.research_agent_panel.json +0 -11
  309. tunacode_cli-0.0.78.14/.claude/qa/agents.core.json +0 -11
  310. tunacode_cli-0.0.78.14/.claude/qa/context_logs/latest_session.txt +0 -1
  311. tunacode_cli-0.0.78.14/.claude/qa/context_logs/main-agent-integration-20250917-123100/commits.txt +0 -6
  312. tunacode_cli-0.0.78.14/.claude/qa/context_logs/main-agent-integration-20250917-123100/diffstat.txt +0 -1
  313. tunacode_cli-0.0.78.14/.claude/qa/context_logs/main-agent-integration-20250917-123100/files.json +0 -7
  314. tunacode_cli-0.0.78.14/.claude/qa/context_logs/main-agent-integration-20250917-123100/hunks.txt +0 -4
  315. tunacode_cli-0.0.78.14/.claude/qa/context_logs/main-agent-integration-20250917-141518/commits.txt +0 -1
  316. tunacode_cli-0.0.78.14/.claude/qa/context_logs/main-agent-integration-20250917-141518/diffstat.txt +0 -1
  317. tunacode_cli-0.0.78.14/.claude/qa/context_logs/main-agent-integration-20250917-141518/files.json +0 -22
  318. tunacode_cli-0.0.78.14/.claude/qa/context_logs/main-agent-integration-20250917-141518/hunks.txt +0 -29
  319. tunacode_cli-0.0.78.14/.claude/qa/context_logs/react-tool-session-20250120-000002/summary.md +0 -6
  320. tunacode_cli-0.0.78.14/.claude/qa/context_logs/smart-git-20250917-122934/commits.txt +0 -5
  321. tunacode_cli-0.0.78.14/.claude/qa/context_logs/smart-git-20250917-122934/diffstat.txt +0 -9
  322. tunacode_cli-0.0.78.14/.claude/qa/context_logs/smart-git-20250917-122934/files.json +0 -10
  323. tunacode_cli-0.0.78.14/.claude/qa/context_logs/tool-rejection-feedback-20251010-000001/summary.md +0 -7
  324. tunacode_cli-0.0.78.14/.claude/qa/core.agents.main.json +0 -11
  325. tunacode_cli-0.0.78.14/.claude/qa/fix-agent-errors.yml +0 -6
  326. tunacode_cli-0.0.78.14/.claude/qa/fix-publish-script.yml +0 -6
  327. tunacode_cli-0.0.78.14/.claude/qa/fix-runtime-warnings.yml +0 -6
  328. tunacode_cli-0.0.78.14/.claude/qa/reasoning_docs/main-agent-integration-20250917-123100.md +0 -27
  329. tunacode_cli-0.0.78.14/.claude/qa/reasoning_docs/main-agent-integration-20250917-141518.md +0 -31
  330. tunacode_cli-0.0.78.14/.claude/qa/reasoning_docs/simplified-agent-handoff-20250929.md +0 -21
  331. tunacode_cli-0.0.78.14/.claude/qa/reasoning_docs/smart-git-20250917-122934.md +0 -37
  332. tunacode_cli-0.0.78.14/.claude/qa/reasoning_docs/tool-rejection-feedback-20251010-000001.md +0 -16
  333. tunacode_cli-0.0.78.14/.claude/rag_knowledge.db +0 -0
  334. tunacode_cli-0.0.78.14/.claude/semantic_index/function_call_graphs.json +0 -326
  335. tunacode_cli-0.0.78.14/.claude/semantic_index/intent_mappings.json +0 -266
  336. tunacode_cli-0.0.78.14/.claude/semantic_index/prompt_system_changes.json +0 -21
  337. tunacode_cli-0.0.78.14/.claude/semantic_index/type_relationships.json +0 -582
  338. tunacode_cli-0.0.78.14/.github/scripts/check_file_size.py +0 -56
  339. tunacode_cli-0.0.78.14/.github/workflows/lint.yml +0 -25
  340. tunacode_cli-0.0.78.14/AGENTS.md +0 -160
  341. tunacode_cli-0.0.78.14/CLAUDE.md +0 -169
  342. tunacode_cli-0.0.78.14/PKG-INFO +0 -260
  343. tunacode_cli-0.0.78.14/README.md +0 -210
  344. tunacode_cli-0.0.78.14/documentation/README.md +0 -47
  345. tunacode_cli-0.0.78.14/documentation/agent/TOOLS_WORKFLOW.md +0 -207
  346. tunacode_cli-0.0.78.14/documentation/agent/agent-flow.md +0 -85
  347. tunacode_cli-0.0.78.14/documentation/agent/agent-inspo.md +0 -133
  348. tunacode_cli-0.0.78.14/documentation/agent/how-tunacode-agent-works.md +0 -482
  349. tunacode_cli-0.0.78.14/documentation/agent/main-agent-architecture.md +0 -238
  350. tunacode_cli-0.0.78.14/documentation/agent/main-agent-key-sections.md +0 -20
  351. tunacode_cli-0.0.78.14/documentation/agent/main-agent.md +0 -86
  352. tunacode_cli-0.0.78.14/documentation/agent/swepmini-example.md +0 -123
  353. tunacode_cli-0.0.78.14/documentation/agent/tunacode-tool-system.md +0 -515
  354. tunacode_cli-0.0.78.14/documentation/agent-tools/ReAct-vs-ReWoo.md +0 -89
  355. tunacode_cli-0.0.78.14/documentation/agent-tools/tools-architecture.md +0 -222
  356. tunacode_cli-0.0.78.14/documentation/changelog/CHANGELOG.md +0 -344
  357. tunacode_cli-0.0.78.14/documentation/configuration/.env.example +0 -12
  358. tunacode_cli-0.0.78.14/documentation/configuration/chutes-ai-setup.md +0 -263
  359. tunacode_cli-0.0.78.14/documentation/configuration/config-file-example.md +0 -59
  360. tunacode_cli-0.0.78.14/documentation/configuration/config-flow-diagram.md +0 -65
  361. tunacode_cli-0.0.78.14/documentation/configuration/config-touch-points.md +0 -21
  362. tunacode_cli-0.0.78.14/documentation/configuration/environment-variables.md +0 -195
  363. tunacode_cli-0.0.78.14/documentation/configuration/local-models.md +0 -107
  364. tunacode_cli-0.0.78.14/documentation/configuration/logging-configuration.md +0 -187
  365. tunacode_cli-0.0.78.14/documentation/configuration/tunacode-json-example.md +0 -123
  366. tunacode_cli-0.0.78.14/documentation/development/codebase-hygiene.md +0 -3
  367. tunacode_cli-0.0.78.14/documentation/development/command-system-architecture.md +0 -259
  368. tunacode_cli-0.0.78.14/documentation/development/creating-custom-commands.md +0 -399
  369. tunacode_cli-0.0.78.14/documentation/development/performance-optimizations.md +0 -106
  370. tunacode_cli-0.0.78.14/documentation/development/prompt-principles.md +0 -84
  371. tunacode_cli-0.0.78.14/documentation/development/publishing-workflow.md +0 -119
  372. tunacode_cli-0.0.78.14/documentation/development/streaming-text-prefix-fix.md +0 -199
  373. tunacode_cli-0.0.78.14/documentation/tests/README.md +0 -55
  374. tunacode_cli-0.0.78.14/documentation/tests/characterization-testing.md +0 -142
  375. tunacode_cli-0.0.78.14/documentation/tests/mocking-strategies.md +0 -340
  376. tunacode_cli-0.0.78.14/documentation/tests/troubleshooting.md +0 -219
  377. tunacode_cli-0.0.78.14/documentation/ui/ui-architecture.md +0 -454
  378. tunacode_cli-0.0.78.14/documentation/user/commands.md +0 -113
  379. tunacode_cli-0.0.78.14/documentation/user/getting-started.md +0 -251
  380. tunacode_cli-0.0.78.14/documentation/user/tools.md +0 -28
  381. tunacode_cli-0.0.78.14/memory-bank/execute/2025-09-12_15-20-00_model_selection_config_persistence_fix.md +0 -146
  382. tunacode_cli-0.0.78.14/memory-bank/execute/2025-09-15_12-30-00_configuration_dashboard_implementation.md +0 -121
  383. tunacode_cli-0.0.78.14/memory-bank/execute/2025-09-15_configuration_dashboard_ux_improvements.md +0 -177
  384. tunacode_cli-0.0.78.14/memory-bank/execute/2025-09-29_12-15-00_git_safety_branch_removal_log.md +0 -112
  385. tunacode_cli-0.0.78.14/memory-bank/execute/2025-10-02_14-45-00_release_process_automation.md +0 -25
  386. tunacode_cli-0.0.78.14/memory-bank/execute/2025-11-18_17-15-00_multi-agent-delegation-implementation.md +0 -424
  387. tunacode_cli-0.0.78.14/memory-bank/execute/2025-11-19_error_handling_hardening.md +0 -194
  388. tunacode_cli-0.0.78.14/memory-bank/execute/2025-11-19_error_handling_hardening_REPORT.md +0 -236
  389. tunacode_cli-0.0.78.14/memory-bank/execute/2025-11-20_23-50-00_global-request-timeout.md +0 -185
  390. tunacode_cli-0.0.78.14/memory-bank/plan/2025-09-11_13-30-00_agent_loop_architecture_enhancement.md +0 -504
  391. tunacode_cli-0.0.78.14/memory-bank/plan/2025-09-11_14-00-00_enum_state_machine_implementation.md +0 -451
  392. tunacode_cli-0.0.78.14/memory-bank/plan/2025-09-11_14-15-00_automated_cli_tool_testing_framework.md +0 -461
  393. tunacode_cli-0.0.78.14/memory-bank/plan/2025-09-12_12-20-00_global_graceful_error_handling_implementation.md +0 -399
  394. tunacode_cli-0.0.78.14/memory-bank/plan/2025-09-12_15-08-14_model_selection_config_persistence_fix.md +0 -208
  395. tunacode_cli-0.0.78.14/memory-bank/plan/2025-09-15_12-29-04_configuration_dashboard_implementation.md +0 -485
  396. tunacode_cli-0.0.78.14/memory-bank/plan/2025-09-17_15-30-00_main-agent-refactor_plan.md +0 -325
  397. tunacode_cli-0.0.78.14/memory-bank/plan/2025-09-19_11-30-00_tunacode_md_to_agents_md_migration.md +0 -440
  398. tunacode_cli-0.0.78.14/memory-bank/plan/2025-09-24_cli_prompt_toolkit_fuzzy_plan.md +0 -88
  399. tunacode_cli-0.0.78.14/memory-bank/plan/2025-09-29_11-15-30_simplified_agent_implementation.md +0 -81
  400. tunacode_cli-0.0.78.14/memory-bank/plan/2025-09-29_11-45-00_git_safety_branch_removal_plan.md +0 -334
  401. tunacode_cli-0.0.78.14/memory-bank/plan/2025-10-02_14-30-45_release_process_automation.md +0 -114
  402. tunacode_cli-0.0.78.14/memory-bank/plan/2025-11-12_15-50-42_critical_thread_safety_resource_fixes.md +0 -433
  403. tunacode_cli-0.0.78.14/memory-bank/plan/2025-11-18_17-09-12_multi-agent-delegation-implementation.md +0 -474
  404. tunacode_cli-0.0.78.14/memory-bank/plan/2025-11-19_10-00-00_main_agent_error_handling_hardening.md +0 -321
  405. tunacode_cli-0.0.78.14/memory-bank/plan/2025-11-20_global-request-timeout-plan.md +0 -243
  406. tunacode_cli-0.0.78.14/memory-bank/plan/2025-11-20_rate-limit-signaling-plan.md +0 -172
  407. tunacode_cli-0.0.78.14/memory-bank/plan/2025-11-20_recovery-notification-plan.md +0 -201
  408. tunacode_cli-0.0.78.14/memory-bank/plan/plan-1.md +0 -389
  409. tunacode_cli-0.0.78.14/memory-bank/research/2025-01-19_react-shim-analysis.md +0 -101
  410. tunacode_cli-0.0.78.14/memory-bank/research/2025-09-07_21-13-37_agent_loop_architecture.md +0 -176
  411. tunacode_cli-0.0.78.14/memory-bank/research/2025-09-11_13-14-06_agent_loop_enhancement_analysis.md +0 -222
  412. tunacode_cli-0.0.78.14/memory-bank/research/2025-09-12_12-15-48_global_graceful_error_handling_analysis.md +0 -126
  413. tunacode_cli-0.0.78.14/memory-bank/research/2025-09-12_14-54-43_model_configuration_crash_analysis.md +0 -130
  414. tunacode_cli-0.0.78.14/memory-bank/research/2025-09-12_15-06-58_model_selection_config_update_issue.md +0 -63
  415. tunacode_cli-0.0.78.14/memory-bank/research/2025-09-12_ai-agent-tools-architecture.md +0 -222
  416. tunacode_cli-0.0.78.14/memory-bank/research/2025-09-15_12-19-00_configuration_system_and_dashboard.md +0 -184
  417. tunacode_cli-0.0.78.14/memory-bank/research/2025-09-15_13-54-11_first-chunk_character_loss_investigation.md +0 -109
  418. tunacode_cli-0.0.78.14/memory-bank/research/2025-09-16_11-12-45_setup_py_usage_and_location_analysis.md +0 -145
  419. tunacode_cli-0.0.78.14/memory-bank/research/2025-09-19_11-25-00_tunacode_md_to_agents_md_migration.md +0 -207
  420. tunacode_cli-0.0.78.14/memory-bank/research/2025-09-21_models-registry-pydantic-conversion.md +0 -217
  421. tunacode_cli-0.0.78.14/memory-bank/research/2025-09-24_fuzzy_logic_implementation_analysis.md +0 -96
  422. tunacode_cli-0.0.78.14/memory-bank/research/2025-09-26_10-56-29_main_agent_architecture.md +0 -727
  423. tunacode_cli-0.0.78.14/memory-bank/research/2025-09-29_11-08-14_state_and_task_logic.md +0 -140
  424. tunacode_cli-0.0.78.14/memory-bank/research/2025-09-29_11-41-39_git_safety_branch_removal_analysis.md +0 -127
  425. tunacode_cli-0.0.78.14/memory-bank/research/2025-10-01_11-15-38_model_validation_error.md +0 -42
  426. tunacode_cli-0.0.78.14/memory-bank/research/2025-10-02_12-19-05_startup_performance_analysis.md +0 -183
  427. tunacode_cli-0.0.78.14/memory-bank/research/2025-10-02_14-26-18_release_process_analysis.md +0 -151
  428. tunacode_cli-0.0.78.14/memory-bank/research/2025-10-03_11-17-55_repl-test-analysis.md +0 -101
  429. tunacode_cli-0.0.78.14/memory-bank/research/2025-10-10_11-44-51_userabort_error_analysis.md +0 -76
  430. tunacode_cli-0.0.78.14/memory-bank/research/2025-11-05_17-35-17_tool_handler_mapping.md +0 -200
  431. tunacode_cli-0.0.78.14/memory-bank/research/2025-11-05_refactored_tool_handler_design.md +0 -580
  432. tunacode_cli-0.0.78.14/memory-bank/research/2025-11-11_12-12-42_option3_feedback_flow.md +0 -526
  433. tunacode_cli-0.0.78.14/memory-bank/research/2025-11-11_12-23-58_plan_mode_architecture.md +0 -956
  434. tunacode_cli-0.0.78.14/memory-bank/research/2025-11-12_15-48-04_ai_agent_system_mapping.md +0 -222
  435. tunacode_cli-0.0.78.14/memory-bank/research/2025-11-12_permission_system_map.md +0 -838
  436. tunacode_cli-0.0.78.14/memory-bank/research/2025-11-16_main-agent-architecture-map.md +0 -863
  437. tunacode_cli-0.0.78.14/memory-bank/research/2025-11-16_venv_setup_complexity_analysis.md +0 -325
  438. tunacode_cli-0.0.78.14/memory-bank/research/2025-11-17_15-00-59_todo-tool-architecture-map.md +0 -806
  439. tunacode_cli-0.0.78.14/memory-bank/research/2025-11-17_15-06-17_retry-rate-limit-configuration.md +0 -348
  440. tunacode_cli-0.0.78.14/memory-bank/research/2025-11-17_16-49-12_parallel-tool-calling-single-batch-issue.md +0 -251
  441. tunacode_cli-0.0.78.14/memory-bank/research/2025-11-17_18-24-31_input-display-truncation.md +0 -243
  442. tunacode_cli-0.0.78.14/memory-bank/research/2025-11-17_23-35-02_tool-output-formatting-inconsistency.md +0 -367
  443. tunacode_cli-0.0.78.14/memory-bank/research/2025-11-18_13-08-42_streaming-retry-state-corruption.md +0 -532
  444. tunacode_cli-0.0.78.14/memory-bank/research/2025-11-18_14-00-45_http-retry-vs-streaming-state-corruption.md +0 -468
  445. tunacode_cli-0.0.78.14/memory-bank/research/2025-11-18_17-01-30_multi-agent-delegation-pydantic-ai.md +0 -809
  446. tunacode_cli-0.0.78.14/memory-bank/research/2025-11-18_agent-feedback-visibility-issue.md +0 -420
  447. tunacode_cli-0.0.78.14/memory-bank/research/2025-11-18_main-py-refactoring-logic-map.md +0 -204
  448. tunacode_cli-0.0.78.14/memory-bank/research/2025-11-19_09-45-17_main_agent_error_handling_analysis.md +0 -174
  449. tunacode_cli-0.0.78.14/memory-bank/research/2025-11-19_11-30-00_node_processor_refactoring_analysis.md +0 -185
  450. tunacode_cli-0.0.78.14/memory-bank/research/2025-11-20_17-33-18_output_visibility_issues.md +0 -121
  451. tunacode_cli-0.0.78.14/memory-bank/research/2025-11-20_23-45-24_global-request-timeout-architecture.md +0 -553
  452. tunacode_cli-0.0.78.14/memory-bank/research/2025-11-20_error_signaling_gaps_analysis.md +0 -112
  453. tunacode_cli-0.0.78.14/pyproject.toml +0 -276
  454. tunacode_cli-0.0.78.14/scripts/setup_dev_env.sh +0 -115
  455. tunacode_cli-0.0.78.14/src/__init__.py +0 -12
  456. tunacode_cli-0.0.78.14/src/tunacode/__init__.py +0 -4
  457. tunacode_cli-0.0.78.14/src/tunacode/cli/__init__.py +0 -4
  458. tunacode_cli-0.0.78.14/src/tunacode/cli/commands/__init__.py +0 -66
  459. tunacode_cli-0.0.78.14/src/tunacode/cli/commands/base.py +0 -99
  460. tunacode_cli-0.0.78.14/src/tunacode/cli/commands/implementations/__init__.py +0 -46
  461. tunacode_cli-0.0.78.14/src/tunacode/cli/commands/implementations/command_reload.py +0 -48
  462. tunacode_cli-0.0.78.14/src/tunacode/cli/commands/implementations/conversation.py +0 -115
  463. tunacode_cli-0.0.78.14/src/tunacode/cli/commands/implementations/debug.py +0 -189
  464. tunacode_cli-0.0.78.14/src/tunacode/cli/commands/implementations/development.py +0 -82
  465. tunacode_cli-0.0.78.14/src/tunacode/cli/commands/implementations/model.py +0 -389
  466. tunacode_cli-0.0.78.14/src/tunacode/cli/commands/implementations/quickstart.py +0 -43
  467. tunacode_cli-0.0.78.14/src/tunacode/cli/commands/implementations/system.py +0 -309
  468. tunacode_cli-0.0.78.14/src/tunacode/cli/commands/implementations/template.py +0 -130
  469. tunacode_cli-0.0.78.14/src/tunacode/cli/commands/registry.py +0 -402
  470. tunacode_cli-0.0.78.14/src/tunacode/cli/commands/slash/__init__.py +0 -32
  471. tunacode_cli-0.0.78.14/src/tunacode/cli/commands/slash/command.py +0 -157
  472. tunacode_cli-0.0.78.14/src/tunacode/cli/commands/slash/loader.py +0 -135
  473. tunacode_cli-0.0.78.14/src/tunacode/cli/commands/slash/processor.py +0 -294
  474. tunacode_cli-0.0.78.14/src/tunacode/cli/commands/slash/types.py +0 -93
  475. tunacode_cli-0.0.78.14/src/tunacode/cli/commands/slash/validator.py +0 -400
  476. tunacode_cli-0.0.78.14/src/tunacode/cli/commands/template_shortcut.py +0 -93
  477. tunacode_cli-0.0.78.14/src/tunacode/cli/main.py +0 -147
  478. tunacode_cli-0.0.78.14/src/tunacode/cli/repl.py +0 -460
  479. tunacode_cli-0.0.78.14/src/tunacode/cli/repl_components/__init__.py +0 -10
  480. tunacode_cli-0.0.78.14/src/tunacode/cli/repl_components/error_recovery.py +0 -169
  481. tunacode_cli-0.0.78.14/src/tunacode/cli/repl_components/output_display.py +0 -44
  482. tunacode_cli-0.0.78.14/src/tunacode/cli/repl_components/tool_executor.py +0 -86
  483. tunacode_cli-0.0.78.14/src/tunacode/configuration/key_descriptions.py +0 -303
  484. tunacode_cli-0.0.78.14/src/tunacode/configuration/models.py +0 -93
  485. tunacode_cli-0.0.78.14/src/tunacode/constants.py +0 -183
  486. tunacode_cli-0.0.78.14/src/tunacode/core/agents/agent_components/json_tool_parser.py +0 -109
  487. tunacode_cli-0.0.78.14/src/tunacode/core/agents/agent_components/node_processor.py +0 -561
  488. tunacode_cli-0.0.78.14/src/tunacode/core/agents/agent_components/tool_executor.py +0 -59
  489. tunacode_cli-0.0.78.14/src/tunacode/core/agents/agent_components/truncation_checker.py +0 -81
  490. tunacode_cli-0.0.78.14/src/tunacode/core/agents/main_legact.py +0 -538
  491. tunacode_cli-0.0.78.14/src/tunacode/core/agents/research_agent.py +0 -117
  492. tunacode_cli-0.0.78.14/src/tunacode/core/agents/utils.py +0 -300
  493. tunacode_cli-0.0.78.14/src/tunacode/core/background/manager.py +0 -36
  494. tunacode_cli-0.0.78.14/src/tunacode/core/llm/__init__.py +0 -0
  495. tunacode_cli-0.0.78.14/src/tunacode/core/logging/__init__.py +0 -30
  496. tunacode_cli-0.0.78.14/src/tunacode/core/logging/config.py +0 -70
  497. tunacode_cli-0.0.78.14/src/tunacode/core/logging/formatters.py +0 -48
  498. tunacode_cli-0.0.78.14/src/tunacode/core/logging/handlers.py +0 -117
  499. tunacode_cli-0.0.78.14/src/tunacode/core/logging/logger.py +0 -8
  500. tunacode_cli-0.0.78.14/src/tunacode/core/setup/__init__.py +0 -15
  501. tunacode_cli-0.0.78.14/src/tunacode/core/setup/agent_setup.py +0 -41
  502. tunacode_cli-0.0.78.14/src/tunacode/core/setup/base.py +0 -37
  503. tunacode_cli-0.0.78.14/src/tunacode/core/setup/config_setup.py +0 -431
  504. tunacode_cli-0.0.78.14/src/tunacode/core/setup/config_wizard.py +0 -230
  505. tunacode_cli-0.0.78.14/src/tunacode/core/setup/coordinator.py +0 -63
  506. tunacode_cli-0.0.78.14/src/tunacode/core/setup/environment_setup.py +0 -62
  507. tunacode_cli-0.0.78.14/src/tunacode/core/setup/template_setup.py +0 -75
  508. tunacode_cli-0.0.78.14/src/tunacode/core/state.py +0 -166
  509. tunacode_cli-0.0.78.14/src/tunacode/core/token_usage/api_response_parser.py +0 -48
  510. tunacode_cli-0.0.78.14/src/tunacode/core/token_usage/cost_calculator.py +0 -66
  511. tunacode_cli-0.0.78.14/src/tunacode/core/token_usage/usage_tracker.py +0 -146
  512. tunacode_cli-0.0.78.14/src/tunacode/core/tool_authorization.py +0 -352
  513. tunacode_cli-0.0.78.14/src/tunacode/core/tool_handler.py +0 -125
  514. tunacode_cli-0.0.78.14/src/tunacode/services/__init__.py +0 -1
  515. tunacode_cli-0.0.78.14/src/tunacode/services/mcp.py +0 -204
  516. tunacode_cli-0.0.78.14/src/tunacode/setup.py +0 -40
  517. tunacode_cli-0.0.78.14/src/tunacode/templates/__init__.py +0 -9
  518. tunacode_cli-0.0.78.14/src/tunacode/templates/loader.py +0 -210
  519. tunacode_cli-0.0.78.14/src/tunacode/tools/base.py +0 -374
  520. tunacode_cli-0.0.78.14/src/tunacode/tools/bash.py +0 -361
  521. tunacode_cli-0.0.78.14/src/tunacode/tools/glob.py +0 -586
  522. tunacode_cli-0.0.78.14/src/tunacode/tools/grep_components/result_formatter.py +0 -139
  523. tunacode_cli-0.0.78.14/src/tunacode/tools/list_dir.py +0 -320
  524. tunacode_cli-0.0.78.14/src/tunacode/tools/prompts/bash_prompt.xml +0 -72
  525. tunacode_cli-0.0.78.14/src/tunacode/tools/prompts/glob_prompt.xml +0 -45
  526. tunacode_cli-0.0.78.14/src/tunacode/tools/prompts/grep_prompt.xml +0 -98
  527. tunacode_cli-0.0.78.14/src/tunacode/tools/prompts/list_dir_prompt.xml +0 -31
  528. tunacode_cli-0.0.78.14/src/tunacode/tools/prompts/react_prompt.xml +0 -23
  529. tunacode_cli-0.0.78.14/src/tunacode/tools/prompts/read_file_prompt.xml +0 -54
  530. tunacode_cli-0.0.78.14/src/tunacode/tools/prompts/run_command_prompt.xml +0 -64
  531. tunacode_cli-0.0.78.14/src/tunacode/tools/prompts/update_file_prompt.xml +0 -53
  532. tunacode_cli-0.0.78.14/src/tunacode/tools/prompts/write_file_prompt.xml +0 -37
  533. tunacode_cli-0.0.78.14/src/tunacode/tools/react.py +0 -153
  534. tunacode_cli-0.0.78.14/src/tunacode/tools/read_file.py +0 -191
  535. tunacode_cli-0.0.78.14/src/tunacode/tools/run_command.py +0 -237
  536. tunacode_cli-0.0.78.14/src/tunacode/tools/schema_assembler.py +0 -167
  537. tunacode_cli-0.0.78.14/src/tunacode/tools/update_file.py +0 -206
  538. tunacode_cli-0.0.78.14/src/tunacode/tools/write_file.py +0 -167
  539. tunacode_cli-0.0.78.14/src/tunacode/tools/xml_helper.py +0 -83
  540. tunacode_cli-0.0.78.14/src/tunacode/tools_utils/__init__.py +0 -0
  541. tunacode_cli-0.0.78.14/src/tunacode/tutorial/__init__.py +0 -9
  542. tunacode_cli-0.0.78.14/src/tunacode/tutorial/content.py +0 -98
  543. tunacode_cli-0.0.78.14/src/tunacode/tutorial/manager.py +0 -182
  544. tunacode_cli-0.0.78.14/src/tunacode/tutorial/steps.py +0 -124
  545. tunacode_cli-0.0.78.14/src/tunacode/types.py +0 -320
  546. tunacode_cli-0.0.78.14/src/tunacode/ui/__init__.py +0 -1
  547. tunacode_cli-0.0.78.14/src/tunacode/ui/completers.py +0 -520
  548. tunacode_cli-0.0.78.14/src/tunacode/ui/config_dashboard.py +0 -592
  549. tunacode_cli-0.0.78.14/src/tunacode/ui/console.py +0 -178
  550. tunacode_cli-0.0.78.14/src/tunacode/ui/constants.py +0 -16
  551. tunacode_cli-0.0.78.14/src/tunacode/ui/decorators.py +0 -59
  552. tunacode_cli-0.0.78.14/src/tunacode/ui/input.py +0 -115
  553. tunacode_cli-0.0.78.14/src/tunacode/ui/keybindings.py +0 -53
  554. tunacode_cli-0.0.78.14/src/tunacode/ui/lexers.py +0 -45
  555. tunacode_cli-0.0.78.14/src/tunacode/ui/logging_compat.py +0 -44
  556. tunacode_cli-0.0.78.14/src/tunacode/ui/model_selector.py +0 -395
  557. tunacode_cli-0.0.78.14/src/tunacode/ui/output.py +0 -227
  558. tunacode_cli-0.0.78.14/src/tunacode/ui/panels.py +0 -538
  559. tunacode_cli-0.0.78.14/src/tunacode/ui/path_heuristics.py +0 -91
  560. tunacode_cli-0.0.78.14/src/tunacode/ui/prompt_manager.py +0 -139
  561. tunacode_cli-0.0.78.14/src/tunacode/ui/tool_descriptions.py +0 -115
  562. tunacode_cli-0.0.78.14/src/tunacode/ui/tool_ui.py +0 -234
  563. tunacode_cli-0.0.78.14/src/tunacode/ui/utils.py +0 -3
  564. tunacode_cli-0.0.78.14/src/tunacode/ui/validators.py +0 -23
  565. tunacode_cli-0.0.78.14/src/tunacode/utils/__init__.py +0 -0
  566. tunacode_cli-0.0.78.14/src/tunacode/utils/api_key_validation.py +0 -93
  567. tunacode_cli-0.0.78.14/src/tunacode/utils/bm25.py +0 -55
  568. tunacode_cli-0.0.78.14/src/tunacode/utils/config_comparator.py +0 -340
  569. tunacode_cli-0.0.78.14/src/tunacode/utils/diff_utils.py +0 -69
  570. tunacode_cli-0.0.78.14/src/tunacode/utils/file_utils.py +0 -41
  571. tunacode_cli-0.0.78.14/src/tunacode/utils/import_cache.py +0 -11
  572. tunacode_cli-0.0.78.14/src/tunacode/utils/models_registry.py +0 -593
  573. tunacode_cli-0.0.78.14/src/tunacode/utils/system.py +0 -332
  574. tunacode_cli-0.0.78.14/src/tunacode/utils/text_utils.py +0 -223
  575. tunacode_cli-0.0.78.14/tests/conftest.py +0 -50
  576. tunacode_cli-0.0.78.14/tests/test_agent_config_request_delay.py +0 -232
  577. tunacode_cli-0.0.78.14/tests/test_agent_helpers.py +0 -89
  578. tunacode_cli-0.0.78.14/tests/test_agents_main.py +0 -592
  579. tunacode_cli-0.0.78.14/tests/test_edit_replacers.py +0 -298
  580. tunacode_cli-0.0.78.14/tests/test_error_boundaries.py +0 -281
  581. tunacode_cli-0.0.78.14/tests/test_research_agent_delegation.py +0 -256
  582. tunacode_cli-0.0.78.14/tests/test_tool_buffer.py +0 -30
  583. {tunacode_cli-0.0.78.14 → tunacode_cli-0.1.24}/LICENSE +0 -0
  584. {tunacode_cli-0.0.78.14 → tunacode_cli-0.1.24}/MANIFEST.in +0 -0
  585. {tunacode_cli-0.0.78.14 → tunacode_cli-0.1.24}/assets/tunacode_example.png +0 -0
  586. {tunacode_cli-0.0.78.14 → tunacode_cli-0.1.24}/scripts/install_linux.sh +0 -0
  587. {tunacode_cli-0.0.78.14 → tunacode_cli-0.1.24}/scripts/uninstall.sh +0 -0
  588. {tunacode_cli-0.0.78.14 → tunacode_cli-0.1.24}/scripts/utils/vulture_whitelist.py +0 -0
  589. {tunacode_cli-0.0.78.14/src/tunacode/core → tunacode_cli-0.1.24/src/tunacode}/__init__.py +0 -0
  590. {tunacode_cli-0.0.78.14 → tunacode_cli-0.1.24}/src/tunacode/configuration/__init__.py +0 -0
  591. {tunacode_cli-0.0.78.14 → tunacode_cli-0.1.24}/src/tunacode/core/agents/prompts.py +0 -0
  592. {tunacode_cli-0.0.78.14 → tunacode_cli-0.1.24}/src/tunacode/py.typed +0 -0
  593. {tunacode_cli-0.0.78.14 → tunacode_cli-0.1.24}/src/tunacode/tools/__init__.py +0 -0
  594. {tunacode_cli-0.0.78.14 → tunacode_cli-0.1.24}/src/tunacode/tools/grep_components/__init__.py +0 -0
  595. {tunacode_cli-0.0.78.14/src/tunacode/core/background → tunacode_cli-0.1.24/src/tunacode/utils}/__init__.py +0 -0
@@ -13,7 +13,7 @@
13
13
 
14
14
  ## Testing
15
15
  <!-- Describe the tests you ran to verify your changes -->
16
- - [ ] All existing tests pass (`hatch run test`)
16
+ - [ ] All existing tests pass (`uv run pytest`)
17
17
  - [ ] New tests have been added to cover the changes
18
18
  - [ ] Tests have been run locally
19
19
  - [ ] Golden/character tests established for new features
@@ -0,0 +1,20 @@
1
+ name: Lint
2
+
3
+ on:
4
+ pull_request:
5
+ push:
6
+ branches: [main, master]
7
+
8
+ jobs:
9
+ pre-commit:
10
+ runs-on: ubuntu-latest
11
+ steps:
12
+ - uses: actions/checkout@v4
13
+ - uses: actions/setup-python@v5
14
+ with:
15
+ python-version: "3.11"
16
+ - uses: astral-sh/setup-uv@v4
17
+ - name: Install dependencies
18
+ run: uv sync --extra dev --frozen
19
+ - name: Run pre-commit
20
+ run: uv run pre-commit run --all-files
@@ -22,7 +22,7 @@ jobs:
22
22
  - name: Install build tooling
23
23
  run: |
24
24
  python -m pip install --upgrade pip
25
- pip install hatch twine uv ruff pytest pytest-cov pytest-asyncio
25
+ pip install build twine ruff pytest pytest-cov pytest-asyncio
26
26
 
27
27
  - name: Install project dependencies
28
28
  run: pip install -e '.[dev]'
@@ -63,7 +63,7 @@ jobs:
63
63
  fi
64
64
 
65
65
  - name: Build
66
- run: hatch build
66
+ run: python -m build
67
67
 
68
68
  # Preferred: API token secret
69
69
  - name: Publish to PyPI (API token)
@@ -32,7 +32,6 @@ venv/
32
32
  ENV/
33
33
  .env
34
34
  .deploy_venv/
35
- uv.lock
36
35
 
37
36
  # IDE files
38
37
  .idea/
@@ -79,3 +78,6 @@ node_modules/
79
78
 
80
79
  # Task files
81
80
  vendor/
81
+ .beads/
82
+ .osgrep
83
+ .osgrep*
@@ -4,7 +4,7 @@ default_language_version:
4
4
  python: python3
5
5
 
6
6
  # Global exclusions to prevent hooks from scanning unnecessary directories
7
- exclude: ^(venv/|build/|dist/|\.git/|__pycache__/|.*\.egg-info/|\.pytest_cache/|\.mypy_cache/|\.ruff_cache/|htmlcov/|\.coverage|reports/|llm-agent-tools/)
7
+ exclude: ^(venv/|build/|dist/|\.git/|__pycache__/|.*\.egg-info/|\.pytest_cache/|\.mypy_cache/|\.ruff_cache/|\.uv-cache/|\.uv_cache/|htmlcov/|\.coverage|reports/|llm-agent-tools/)
8
8
 
9
9
  repos:
10
10
  # Pre-commit framework hooks
@@ -39,11 +39,11 @@ repos:
39
39
 
40
40
  # Ruff - Fast Python linter and formatter
41
41
  - repo: https://github.com/astral-sh/ruff-pre-commit
42
- rev: v0.8.6
42
+ rev: v0.14.9
43
43
  hooks:
44
44
  - id: ruff
45
45
  args: ['--fix', '--show-fixes']
46
- # - id: ruff-format # Disabled - hatch-lint already handles formatting
46
+ - id: ruff-format # Re-enabled - ruff handles linting, ruff-format handles formatting
47
47
 
48
48
  # Type checking with mypy
49
49
  - repo: https://github.com/pre-commit/mirrors-mypy
@@ -59,20 +59,9 @@ repos:
59
59
 
60
60
 
61
61
  # Local hooks for project-specific checks
62
- # Strategy: Use 'hatch run' for commands defined in pyproject.toml scripts
63
- # Use 'uv run' for standalone tools not managed by hatch environments
64
62
  - repo: local
65
63
  hooks:
66
- # Hatch-managed commands (use hatch run for consistency)
67
- - id: hatch-lint
68
- name: Run hatch lint check
69
- entry: hatch run lint
70
- language: system
71
- pass_filenames: false
72
- always_run: true
73
- stages: [pre-commit]
74
-
75
- # UV-managed standalone tools (not in hatch environments)
64
+ # UV-managed tools
76
65
  - id: dead-imports
77
66
  name: Check for unused imports in changed files
78
67
  entry: scripts/run-dead-imports.sh
@@ -88,15 +77,6 @@ repos:
88
77
  exclude: ^(tests/|test_)
89
78
  stages: [pre-commit]
90
79
 
91
- # Run test suite using hatch for consistency
92
- - id: run-tests
93
- name: Run test suite
94
- entry: .venv/bin/pytest
95
- language: system
96
- pass_filenames: false
97
- always_run: true
98
- stages: [pre-commit]
99
-
100
80
  # Check for common security issues
101
81
  - id: security-check
102
82
  name: Security audit
@@ -153,5 +133,5 @@ ci:
153
133
  autoupdate_commit_msg: '[pre-commit.ci] pre-commit autoupdate'
154
134
  autoupdate_schedule: weekly
155
135
  # Skip hooks that require project-specific environment setup
156
- skip: [run-tests, hatch-lint, dead-imports, vulture-changed]
136
+ skip: [vulture-changed]
157
137
  submodules: false
@@ -0,0 +1,302 @@
1
+ ## Tunacode
2
+
3
+ This project is tunacode, much like you! It's a TUI code agent that can be used to code and debug code or general agentic tasks.
4
+
5
+ src/tunacode/ui is the TUI interface that is used to interact with the user.
6
+ src/tunacode/core is the core agent that is used to code and debug code or general agentic tasks.
7
+ src/tunacode/tools is the tools that are used to code and debug code or general agentic tasks.
8
+
9
+ Tests are located in the `tests/` directory covering tool decorators, tool conformance, compaction, and tool retry logic.
10
+
11
+ ## Design Philosophy
12
+
13
+ The TUI design is heavily inspired by the classic **NeXTSTEP** user interface. This choice reflects a commitment to **"the next step of uniformity"**.
14
+
15
+ - **Uniformity:** The interface should provide a consistent and predictable experience across all interactions.
16
+ - **User Informed:** A core tenet is to keep the user constantly informed of the agent's state, actions, and reasoning. No "magic" should happen in the background without visual feedback.
17
+ - **Aesthetic:** The look should be professional, clean, and retro-modern, echoing the clarity and object-oriented nature of the NeXTSTEP environment.
18
+
19
+ **UI Design Rule:** Always call the neXTSTEP-ui skill for any UI changes.
20
+
21
+ **Skill Location:** `.claude/skills/neXTSTEP-ui/`
22
+
23
+ - `SKILL.md` - Design philosophy and guidelines
24
+ - `NeXTSTEP_User_Interface_Guidelines_Release_3_Nov93.pdf` - Original 198-page reference
25
+ - `read_pdf.py` - Chunked PDF reader (`uv run python read_pdf.py --help`)
26
+
27
+ ## Workflow Rules
28
+
29
+ - Never begin coding until the objective is **explicitly defined**. If unclear, ask questions or use best practices.
30
+ - Always use `.venv` and `uv` for package management.
31
+ - Small, focused diffs only. Commit frequently.
32
+
33
+ ## Code Style & Typing
34
+
35
+ - Enforce `ruff check --fix .` before PRs.
36
+ - Use explicit typing. `cast(...)` and `assert ...` are OK.
37
+ - `# type: ignore` only with strong justification.
38
+ - You must flatten nested conditionals by returning early, so pre-conditions are explicit.
39
+ - If it is never executed, remove it. You MUST make sure what we remove has been committed before in case we need to rollback.
40
+ - Normalize symmetries: you must make identical things look identical and different things look different for faster pattern-spotting.
41
+ - You must reorder elements so a developer meets ideas in the order they need them.
42
+ - You must cluster coupled functions/files so related edits sit together.
43
+ - You must keep a variable's birth and first value adjacent for comprehension & dependency safety.
44
+ - Always extract a sub-expression into a well-named variable to record intent.
45
+ - Always replace magic numbers with symbolic constants that broadcast meaning.
46
+ - Never use magic literals; symbolic constants are preferred.
47
+ - ALWAYS split a routine so all inputs are passed openly, banishing hidden state or maps.
48
+
49
+ ## Error Handling
50
+
51
+ - Fail fast, fail loud. No silent fallbacks. This is one of the most important rules to follow.
52
+ - Minimize branching: every `if`/`try` must be justified.
53
+
54
+ ## Dependencies
55
+
56
+ - Avoid new core dependencies. Tiny deps OK if widely reused.
57
+ - Run tests with: `uv run pytest`.
58
+
59
+ ## Scope & Maintenance
60
+
61
+ - Backward compatibility only if low maintenance cost.
62
+ - Delete dead code (never guard it).
63
+ - Always run `ruff .`.
64
+ - Use `git commit -n` if pre-commit hooks block rollback.
65
+
66
+ ---
67
+
68
+ ## Card Format
69
+
70
+ Bugs, docs, and module cards all use this unified structure.
71
+
72
+ ### Frontmatter
73
+
74
+ ```yaml
75
+ ---
76
+ title: <Short human-readable title>
77
+ link: <stable-slug-for-links>
78
+ type: <delta | doc | module>
79
+ path: <relative path, for modules/docs>
80
+ depth: <nesting level, 0 = root>
81
+ seams: <[A] architecture | [E] entry | [M] module | [S] state | [D] data>
82
+ ontological_relations:
83
+ - relates_to: [[<primary-system-or-area>]]
84
+ - affects: [[<component-or-module>]]
85
+ - fixes: [[<bug-or-failure-mode>]] # for deltas
86
+ tags:
87
+ - <area>
88
+ - <symptom>
89
+ - <tool-or-feature>
90
+ created_at: <ISO-8601 timestamp>
91
+ updated_at: <ISO-8601 timestamp>
92
+ uuid: <generated-uuid>
93
+ ---
94
+ ```
95
+
96
+ ### Body Sections
97
+
98
+ - **Summary** - One paragraph, what and why, readable in a year
99
+ - **Context** - Optional, where it lives, how it surfaced
100
+ - **Root Cause** - For bugs: mechanism, not blame
101
+ - **Changes** - Bullet list of concrete changes
102
+ - **Behavioral Impact** - What users notice, what didn't change
103
+ - **Related Cards** - `[[links]]` to other cards
104
+
105
+ ### Bug Rules
106
+
107
+ - Fix it, we don't care who caused it
108
+ - Document: what? where? when? why?
109
+ - No shims, fix at root
110
+ - Document how we missed it and how to prevent it
111
+
112
+ ---
113
+
114
+ ## Quality Gates
115
+
116
+ These are another layer to prevent slop, not pre-commit hooks.
117
+
118
+ ### Gate 0: No Shims
119
+
120
+ Never use shims. It is a mortal sin to allow shims.
121
+
122
+ Instead, fix the interface. In some cases, it may be better to create a new interface for examples:
123
+
124
+ - If 19 files use an interface and our new work has a problem with it, the interface is not the problem
125
+ - If only two files use the interface and it's giving us issues, write it correctly
126
+ - The interface must be written in proper idiomatic way
127
+ - 99% of the time we don't need a unique interface; if a unique situation calls for one, it must be strongly justified with anchor comments
128
+
129
+ ### Gate 1: Coupling and Cohesion (Constantine)
130
+
131
+ **High cohesion** = everything in a module serves one purpose
132
+ **Low coupling** = modules don't need to know each other's internals
133
+
134
+ Before writing or modifying code, answer:
135
+
136
+ - **What single responsibility does this module have?** If you can't state it in one sentence, the module is doing too much. Split until each piece has one job.
137
+ - **Can I change this module without changing others?** If no, you have a coupling problem.
138
+ - **Dependencies should flow one direction:** ui → core → tools → utils/types. Never reach backward (core importing from ui).
139
+ - **How many dots?** `state_manager.session.tool_handler._policy.rules[0].name = "allow"` coupling points. Each `.` is a place where changes can break you. More than 2 dots = smell; refactor to hide the chain.
140
+ - **What does this module hide?** "Every module hides a design decision that could change." If a module exposes its internals, it will churn when those internals change. UI hides Textual, core hides agent orchestration, tools hide system access.
141
+
142
+ **Example:** If a file gets touched more than 5 times in a month, it has a cohesion problem. Stop adding to it. Split it.
143
+
144
+ **Wrong:**
145
+
146
+ ```
147
+ src/tunacode/ui/main.py → Textual UI + agent orchestration + tool execution + persistence
148
+ ```
149
+
150
+ **Right:**
151
+
152
+ ```
153
+ src/tunacode/ui/main.py → Textual UI concerns only
154
+ src/tunacode/core/agents/main.py → agent orchestration only
155
+ src/tunacode/tools/*.py → tool execution only
156
+ src/tunacode/core/state.py → persistence and session state only
157
+ ```
158
+
159
+ ### Gate 2: Dependency Direction (Martin)
160
+
161
+ Dependencies flow inward, never backward.
162
+
163
+ ```
164
+ ui → core → tools → utils/types
165
+
166
+ infrastructure (filesystem, shell, network)
167
+ ```
168
+
169
+ **Rules:**
170
+
171
+ - Inner layers know nothing about outer layers
172
+ - core/ never imports from ui/
173
+ - tools/ never imports from ui/
174
+ - utils/ and types/ import from nothing
175
+ - Infrastructure is a plugin
176
+ - Filesystem, shell, network = details
177
+ - Core logic doesn't know or care which system provider
178
+ - Depend on abstractions, not concretions
179
+ - Pass interfaces, not implementations
180
+ - Makes testing trivial, swapping backends trivial
181
+
182
+ **Example:** If core needs UI state, you're violating the boundary. Extract what you need and pass it as a plain argument.
183
+
184
+ **Wrong:**
185
+
186
+ ```python
187
+ from tunacode.ui.app import TunaCodeApp
188
+
189
+ def run_agent(app: TunaCodeApp):
190
+ app.notify_status("Running") # core knows about UI layer
191
+ ```
192
+
193
+ **Right:**
194
+
195
+ ```python
196
+ from collections.abc import Callable
197
+
198
+ def run_agent(notify_status: Callable[[str], None]):
199
+ notify_status("Running") # core only knows about a callable
200
+ ```
201
+
202
+ ### Gate 3: Design by Contract (Meyer)
203
+
204
+ Every function is a contract with three parts:
205
+
206
+ - **Preconditions** - what must be true before calling
207
+ - **Postconditions** - what will be true after
208
+ - **Invariants** - what's always true
209
+
210
+ **Rules:**
211
+
212
+ - Caller guarantees preconditions - don't check inside what should be guaranteed outside
213
+ - Function guarantees postconditions - if it returns, the promise is kept
214
+ - Fail immediately if contract violated - no limping along with bad state
215
+
216
+ **Example:** If a tool expects a valid directory, don't silently return an empty result. That's a contract violation - raise.
217
+
218
+ **Wrong:**
219
+
220
+ ```python
221
+ def list_dir(directory: str) -> str | None:
222
+ if not Path(directory).exists():
223
+ return None # silent failure, caller doesn't know why
224
+ return _render_dir(Path(directory))
225
+ ```
226
+
227
+ **Right:**
228
+
229
+ ```python
230
+ def list_dir(directory: str) -> str:
231
+ """Precondition: directory exists and is a directory."""
232
+ path = Path(directory)
233
+ if not path.exists():
234
+ raise FileNotFoundError(f"Directory not found: {path}")
235
+ if not path.is_dir():
236
+ raise NotADirectoryError(f"Not a directory: {path}")
237
+ return _render_dir(path)
238
+ ```
239
+
240
+ ### Gate 4: Documentation is Code (Knuth)
241
+
242
+ Docs and code are one system. If they diverge, the docs are lying.
243
+
244
+ **Rules:**
245
+
246
+ - **Code changes = doc changes**
247
+ - If you change a module's behavior, update its codebase-map doc in the same PR
248
+ - If you add a tool, update docs/codebase-map/modules/tools-overview.md
249
+ - If you add a UI component, update docs/codebase-map/modules/ui-overview.md
250
+ - **Docs describe the system that exists, not the system you wish existed**
251
+ - No aspirational docs ("we plan to...")
252
+ - No stale docs ("this used to...")
253
+ - Only current truth
254
+ - **The /docs/codebase-map folder mirrors src/tunacode**
255
+ - Structure matches structure
256
+ - When code moves, docs move
257
+ - When code dies, docs die
258
+
259
+ **Example:** If you delete src/tunacode/tools/grep.py, you must also remove its entry from docs/codebase-map/modules/tools-overview.md in the same commit.
260
+
261
+ **Wrong:**
262
+
263
+ ```
264
+ PR #263: "chore: remove unused grep tool"
265
+ - deletes src/tunacode/tools/grep.py
266
+ - leaves docs/codebase-map/modules/tools-overview.md still referencing it
267
+ ```
268
+
269
+ **Right:**
270
+
271
+ ```
272
+ PR #263: "chore: remove unused grep tool"
273
+ - deletes src/tunacode/tools/grep.py
274
+ - updates docs/codebase-map/modules/tools-overview.md to remove grep section
275
+ - single atomic commit, code and docs together
276
+ ```
277
+
278
+ ---
279
+
280
+ ## Memory Bank Directory
281
+
282
+ Maintain a `.claude/markdown` directory with:
283
+
284
+ - **metadata/** — dependency graphs, file classifications, error pattern database
285
+ - **code_index/** — function call graphs, type relationships, interface mappings
286
+ - **debug_history/** — error-solution pairs indexed by component/error type
287
+ - **patterns/** — canonical implementation examples for this codebase
288
+ - **cheatsheets/** — quick-reference guides per component with gotchas
289
+ - **qa/** — solved problems database with reasoning
290
+ - **delta/** — semantic changelogs explaining changes
291
+
292
+ ### Continuous Learning
293
+
294
+ Dump bugs, smells, issues here as you encounter them. Raw is fine. A skill will organize this into proper kb entries later.
295
+
296
+ Format: `[date] [type] description`
297
+
298
+ Types: bug, smell, pattern, lesson, antipattern
299
+
300
+ ---
301
+
302
+ We are currently in the middle of a large rewrite few test exist and documentation and that is okay. We will build the test and documentation as we go
@@ -0,0 +1,155 @@
1
+ ## [Unreleased]
2
+
3
+ ## [0.1.20] - 2026-01-02
4
+
5
+ ### Added
6
+ - Lazy-load models registry and guardrail picker for faster startup
7
+ - UI refinements and research documentation (#204)
8
+ - neXTSTEP UI guidelines PDF and reader skill
9
+ - Discord server link to README (#194)
10
+ - Consolidated default prompt document
11
+
12
+ ### Fixed
13
+ - Headless run output extraction (#208)
14
+ - Base URL overrides and CLI baseurl flag (#200)
15
+ - File size handling refactoring (#155, #154)
16
+ - TOOL_VIEWPORT_LINES and DEFAULT_IGNORE_PATTERNS_COUNT (#197)
17
+
18
+ ### Changed
19
+ - Refactor headless output extraction to dedicated module
20
+ - Remove dead code: callbacks.py, 3 unused UI components (#205), 35 unused constants (#206)
21
+ - Refactor types.py to package structure
22
+ - Replace magic numbers with symbolic constants
23
+ - Reduce MIN_VIEWPORT_LINES to 5 for more compact tool panels
24
+ - Uniform tool panel width with fixed TOOL_PANEL_WIDTH
25
+
26
+ ### Contributors
27
+ Thanks to our community contributors:
28
+ - @ryumacodes - issue fixes and standardization
29
+
30
+ ## [0.1.16] - 2025-12-19
31
+
32
+ ### Added
33
+ - Minimum viewport padding to tool panels for better readability (#192) - thanks @larock22
34
+ - Standardized tool panel viewport sizing across all renderers (#190)
35
+
36
+ ### Fixed
37
+ - Eliminate UI freezes during update_file operations
38
+ - LSP diagnostics truncation and hardened diff rendering (#191)
39
+ - Tool return arg hydration issue (#189)
40
+
41
+ ### Changed
42
+ - Remove inline comments from LSP module for cleaner code
43
+
44
+ ### Contributors
45
+ Thanks to our community contributors for this release:
46
+ - @larock22 - viewport padding improvements and subagent loading states
47
+ - @ryumacodes - update command implementation
48
+
49
+ ## [0.1.12] - 2025-12-18
50
+
51
+ ### Fixed
52
+ - Prevent TUI hangs when rendering large tool confirmation diffs (e.g., `write_file` with minified content)
53
+
54
+ ## [0.1.11] - 2025-12-18
55
+
56
+ ### Added
57
+ - `/update` command to check for and install updates from TUI (#182) - thanks @ryumacodes
58
+ - TodoWrite and TodoRead tools for task tracking (#181)
59
+ - LSP status indicator in resource bar showing server name
60
+ - Switched Python LSP from pyright to ruff for better integration
61
+
62
+ ### Fixed
63
+ - Paste buffer flow with improved user input wrapping (#188)
64
+ - LSP diagnostics display with NeXTSTEP 4-zone layout (#186)
65
+ - Escape key now cancels shell command input (#187)
66
+ - Paste indicator shows inline with "..." for continued content
67
+
68
+ ### Changed
69
+ - Simplify concatenated JSON parsing with fail-loud error handling (#175)
70
+ - Reduced streaming throttle for smoother output
71
+ - Refactored app.py under 600 lines
72
+
73
+ ## [0.1.10] - 2025-12-16
74
+
75
+ ### Added
76
+ - Subagent UI loading states with progress feedback (#180)
77
+ - Tool start callback for UI feedback (#177)
78
+ - Headless CLI mode for benchmark execution (#174)
79
+
80
+ ### Fixed
81
+ - Default tunacode to TUI when no subcommand (#178)
82
+ - Pass parent state_manager to research agent for API key access (#170)
83
+
84
+ ### Changed
85
+ - Pin ruff to 0.14.9 (#179)
86
+ - Remove unused GUIDE_FILE_PATTERN constant (#173)
87
+ - Remove unused typing scaffolding from state transition (#171)
88
+
89
+ ## [0.1.9] - 2025-12-12
90
+
91
+ ### Added
92
+ - Multi-line paste support with collapsed display (#168)
93
+
94
+ ### Changed
95
+ - Refactored watch_value editor for better single responsibility (#169)
96
+ - Export screen classes from ui/screens package for external access
97
+
98
+ ## [0.1.7] - 2025-12-11
99
+
100
+ ### Added
101
+ - NeXTSTEP-style tool panel renderers for consistent UI (#165)
102
+ - web_fetch tool for HTTP GET with HTML-to-text conversion
103
+ - list_dir tree connectors for better directory visualization
104
+ - Section-based prompting engine with template composition
105
+ - Slash command autocompletion in TUI (#160) - thanks @coltonsteinbeck
106
+ - Model-specific context window from registry (#158) - thanks @vincitamore
107
+
108
+ ### Changed
109
+ - Tightened XML prompt loading (#164)
110
+ - Removed Python loggers in favor of structured output (#159) - thanks @xan
111
+
112
+ ### Contributors
113
+ Thanks to our community contributors for this release:
114
+ - @coltonsteinbeck - slash command autocompletion
115
+ - @xan - logger cleanup
116
+ - @vincitamore - model context windows
117
+ - @ryu - real pricing and Textual repl improvements
118
+
119
+ ## [0.1.6] - 2025-12-08
120
+
121
+ ### Added
122
+ - Session resume feature (`/resume`) to restore previous conversation sessions
123
+ - Write file preview in confirmation dialog showing file contents before creation
124
+ - CONTRIBUTING.md for open source contributors
125
+
126
+ ### Changed
127
+ - Consolidated ruff config and removed redundant .ruffignore
128
+ - Removed stale documentation and knowledge base files
129
+ - Removed unused command security constants and XML schema loader
130
+
131
+ ## [0.1.5] - 2025-12-07
132
+
133
+ ### Added
134
+ - CHANGELOG.md for tracking version history
135
+ - Enhanced update_file tool with diff preview and result display
136
+
137
+ ### Fixed
138
+ - Additional lint error fixes
139
+
140
+ ## [0.1.4] - 2025-12-06
141
+
142
+ ### Added
143
+ - Tool execution retry mechanism with exponential backoff (max 3 attempts) for improved reliability
144
+ - Clear diff display for edit tool operations showing before/after changes
145
+ - Uniform truncation with NeXTSTEP information hierarchy for better UX
146
+ - Dynamic startup index with progressive loading for faster application launch
147
+
148
+ ### Changed
149
+ - Improved error handling to surface retries to user with visual feedback
150
+ - Removed dead code and consolidated ToolCallback type alias
151
+ - Fixed 40+ ruff lint errors for cleaner codebase
152
+
153
+ ### Fixed
154
+ - Edit tool now provides proper visual feedback showing what changed in files
155
+ - Tool execution failures no longer halt system immediately, allowing retry attempts