tau-coding-agent 0.5.7__tar.gz → 0.6.0__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.
Files changed (460) hide show
  1. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/MANIFEST.in +2 -0
  2. {tau_coding_agent-0.5.7/tau_coding_agent.egg-info → tau_coding_agent-0.6.0}/PKG-INFO +4 -2
  3. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/README.md +1 -1
  4. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/docs/inference-providers.md +22 -2
  5. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/docs/python-api.md +3 -0
  6. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/docs/sessions.md +3 -0
  7. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/docs/themes.md +2 -0
  8. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/docs/tools.md +5 -3
  9. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/docs/tui.md +23 -9
  10. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/pyproject.toml +3 -1
  11. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/builtins/extensions/ask_user/__init__.py +1 -1
  12. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/builtins/extensions/ask_user/component.py +23 -7
  13. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/builtins/extensions/ask_user/tool.py +2 -2
  14. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/builtins/extensions/btw/__init__.py +15 -4
  15. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/builtins/extensions/footer/git.py +15 -5
  16. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/builtins/extensions/footer/model.py +23 -9
  17. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/builtins/extensions/web/__init__.py +3 -3
  18. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/builtins/extensions/web/engines/ddgs_engine.py +3 -3
  19. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/builtins/extensions/web/engines/exa_engine.py +1 -1
  20. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/builtins/extensions/web/engines/tavily_engine.py +4 -2
  21. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/builtins/extensions/web/tools/fetch.py +6 -2
  22. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/builtins/extensions/web/tools/search.py +24 -10
  23. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/builtins/models/text.py +74 -24
  24. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/builtins/tools/edit.py +54 -11
  25. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/builtins/tools/grep.py +2 -6
  26. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/builtins/tools/read.py +11 -8
  27. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/builtins/tools/terminal.py +1 -2
  28. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/builtins/tools/utils.py +54 -0
  29. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/extensions/loader.py +65 -4
  30. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/extensions/runtime.py +4 -0
  31. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/inference/api/audio/openai_audio.py +8 -2
  32. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/inference/api/audio/sarvam_audio.py +8 -2
  33. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/inference/api/text/gemini_generate.py +66 -9
  34. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/inference/api/text/google_antigravity.py +3 -60
  35. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/inference/api/text/google_vertex.py +5 -2
  36. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/inference/api/text/mistral_chat.py +2 -1
  37. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/inference/api/text/ollama_chat.py +2 -2
  38. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/inference/api/text/openai_codex_responses.py +2 -2
  39. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/inference/api/text/openai_responses.py +2 -2
  40. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/inference/api/text/utils.py +71 -2
  41. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/inference/provider/oauth/utils.py +1 -0
  42. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/modes/interactive/agent_hooks.py +72 -2
  43. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/modes/interactive/app.py +4 -2
  44. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/modes/interactive/commands/appearance.py +20 -1
  45. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/modes/interactive/components/command_palette.py +48 -24
  46. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/modes/interactive/components/config_selector.py +72 -40
  47. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/modes/interactive/components/extension_selector.py +24 -38
  48. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/modes/interactive/components/file_picker.py +20 -13
  49. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/modes/interactive/components/layout.py +66 -47
  50. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/modes/interactive/components/message_list.py +245 -58
  51. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/modes/interactive/components/model_selector.py +86 -42
  52. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/modes/interactive/components/oauth_selector.py +39 -42
  53. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/modes/interactive/components/overlays.py +107 -65
  54. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/modes/interactive/components/selector_controller.py +19 -3
  55. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/modes/interactive/components/session_selector.py +91 -36
  56. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/modes/interactive/components/settings_selector.py +121 -48
  57. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/modes/interactive/components/theme_selector.py +29 -30
  58. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/modes/interactive/components/thinking_selector.py +29 -22
  59. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/modes/interactive/components/tree_selector.py +63 -62
  60. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/modes/interactive/components/trust_screen.py +36 -22
  61. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/modes/interactive/components/voice_selector.py +30 -32
  62. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/modes/interactive/ui_context.py +11 -5
  63. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/runtime/service.py +5 -2
  64. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/telemetry/service.py +5 -5
  65. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/telemetry/types.py +5 -1
  66. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/themes/loader.py +41 -66
  67. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/tool/render.py +8 -1
  68. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/tui/__init__.py +87 -1
  69. tau_coding_agent-0.6.0/tau/tui/ansi_bridge.py +327 -0
  70. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/tui/autocomplete.py +42 -20
  71. tau_coding_agent-0.6.0/tau/tui/backend.py +124 -0
  72. tau_coding_agent-0.6.0/tau/tui/buffer.py +245 -0
  73. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/tui/component.py +141 -137
  74. tau_coding_agent-0.6.0/tau/tui/components/box.py +118 -0
  75. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/tui/components/editor.py +6 -2
  76. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/tui/components/image.py +44 -16
  77. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/tui/components/select_list.py +106 -58
  78. tau_coding_agent-0.6.0/tau/tui/components/simple_picker.py +150 -0
  79. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/tui/components/spinner.py +10 -5
  80. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/tui/components/text_input.py +31 -19
  81. tau_coding_agent-0.6.0/tau/tui/components/widget_bridge.py +49 -0
  82. tau_coding_agent-0.6.0/tau/tui/frame.py +526 -0
  83. tau_coding_agent-0.6.0/tau/tui/geometry.py +113 -0
  84. tau_coding_agent-0.6.0/tau/tui/layout.py +244 -0
  85. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/tui/markdown.py +107 -25
  86. tau_coding_agent-0.6.0/tau/tui/palette.py +91 -0
  87. tau_coding_agent-0.6.0/tau/tui/style.py +335 -0
  88. tau_coding_agent-0.6.0/tau/tui/testing.py +45 -0
  89. tau_coding_agent-0.6.0/tau/tui/text.py +150 -0
  90. tau_coding_agent-0.6.0/tau/tui/theme.py +214 -0
  91. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/tui/tui.py +112 -355
  92. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/tui/utils.py +17 -0
  93. tau_coding_agent-0.6.0/tau/tui/widget.py +49 -0
  94. tau_coding_agent-0.6.0/tau/tui/widgets/__init__.py +136 -0
  95. tau_coding_agent-0.6.0/tau/tui/widgets/barchart.py +114 -0
  96. tau_coding_agent-0.6.0/tau/tui/widgets/block.py +157 -0
  97. tau_coding_agent-0.6.0/tau/tui/widgets/calendar.py +71 -0
  98. tau_coding_agent-0.6.0/tau/tui/widgets/canvas.py +291 -0
  99. tau_coding_agent-0.6.0/tau/tui/widgets/chart.py +166 -0
  100. tau_coding_agent-0.6.0/tau/tui/widgets/clear.py +23 -0
  101. tau_coding_agent-0.6.0/tau/tui/widgets/gauge.py +67 -0
  102. tau_coding_agent-0.6.0/tau/tui/widgets/list.py +114 -0
  103. tau_coding_agent-0.6.0/tau/tui/widgets/paragraph.py +158 -0
  104. tau_coding_agent-0.6.0/tau/tui/widgets/scrollbar.py +74 -0
  105. tau_coding_agent-0.6.0/tau/tui/widgets/sparkline.py +55 -0
  106. tau_coding_agent-0.6.0/tau/tui/widgets/symbols.py +80 -0
  107. tau_coding_agent-0.6.0/tau/tui/widgets/table.py +128 -0
  108. tau_coding_agent-0.6.0/tau/tui/widgets/tabs.py +67 -0
  109. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/utils/http_proxy.py +5 -1
  110. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0/tau_coding_agent.egg-info}/PKG-INFO +4 -2
  111. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau_coding_agent.egg-info/SOURCES.txt +41 -0
  112. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau_coding_agent.egg-info/requires.txt +2 -0
  113. tau_coding_agent-0.6.0/tests/test_agent_hooks.py +99 -0
  114. tau_coding_agent-0.6.0/tests/test_ansi_bridge_legacy_image.py +108 -0
  115. tau_coding_agent-0.6.0/tests/test_ask_user_extension.py +50 -0
  116. tau_coding_agent-0.6.0/tests/test_audio_transcription_apis.py +119 -0
  117. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tests/test_builtin_tools.py +96 -5
  118. tau_coding_agent-0.6.0/tests/test_component_buffer_bridge.py +112 -0
  119. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tests/test_editor_protocol.py +4 -4
  120. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tests/test_extension_api.py +15 -0
  121. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tests/test_footer_model.py +6 -4
  122. tau_coding_agent-0.6.0/tests/test_gemini_generate.py +109 -0
  123. tau_coding_agent-0.6.0/tests/test_layout_render_cells.py +112 -0
  124. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tests/test_markdown.py +33 -0
  125. tau_coding_agent-0.6.0/tests/test_message_list_frozen.py +387 -0
  126. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tests/test_model_selector_modal.py +14 -9
  127. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tests/test_runtime_sdk.py +41 -0
  128. tau_coding_agent-0.6.0/tests/test_scrollback_raw_writes.py +119 -0
  129. tau_coding_agent-0.6.0/tests/test_scrollback_terminal.py +270 -0
  130. tau_coding_agent-0.6.0/tests/test_select_list_render_cells.py +68 -0
  131. tau_coding_agent-0.6.0/tests/test_selector_controller.py +152 -0
  132. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tests/test_settings_storage.py +1 -1
  133. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tests/test_subagents_extension.py +7 -3
  134. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tests/test_text_input.py +20 -14
  135. tau_coding_agent-0.6.0/tests/test_text_input_render_cells.py +63 -0
  136. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tests/test_text_llm_invoke.py +3 -3
  137. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tests/test_theme_loader.py +24 -18
  138. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tests/test_thinking_render.py +16 -2
  139. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tests/test_tool_render.py +24 -0
  140. tau_coding_agent-0.6.0/tests/test_tui_child_rows.py +65 -0
  141. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tests/test_tui_layout_sizing.py +27 -19
  142. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tests/test_tui_public_api.py +7 -2
  143. tau_coding_agent-0.6.0/tests/test_tui_renderer.py +137 -0
  144. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tests/test_tui_theme.py +43 -32
  145. tau_coding_agent-0.6.0/tests/test_utils_hashline.py +63 -0
  146. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tests/test_voice_selector.py +2 -1
  147. tau_coding_agent-0.5.7/tau/tui/components/box.py +0 -107
  148. tau_coding_agent-0.5.7/tau/tui/theme.py +0 -218
  149. tau_coding_agent-0.5.7/tests/test_ask_user_extension.py +0 -46
  150. tau_coding_agent-0.5.7/tests/test_selector_controller.py +0 -62
  151. tau_coding_agent-0.5.7/tests/test_tui_renderer.py +0 -206
  152. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/LICENSE +0 -0
  153. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/docs/architecture.md +0 -0
  154. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/docs/auth.md +0 -0
  155. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/docs/cli-reference.md +0 -0
  156. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/docs/creating-tools.md +0 -0
  157. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/docs/development.md +0 -0
  158. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/docs/docs.json +0 -0
  159. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/docs/engine.md +0 -0
  160. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/docs/extension-settings.md +0 -0
  161. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/docs/extensions.md +0 -0
  162. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/docs/http-proxy.md +0 -0
  163. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/docs/index.md +0 -0
  164. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/docs/inference.md +0 -0
  165. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/docs/installation.md +0 -0
  166. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/docs/keybindings.md +0 -0
  167. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/docs/messages.md +0 -0
  168. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/docs/project-context.md +0 -0
  169. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/docs/project-structure.md +0 -0
  170. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/docs/prompts.md +0 -0
  171. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/docs/quickstart.md +0 -0
  172. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/docs/settings.md +0 -0
  173. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/docs/skills.md +0 -0
  174. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/docs/usage.md +0 -0
  175. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/setup.cfg +0 -0
  176. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/__init__.py +0 -0
  177. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/agent/__init__.py +0 -0
  178. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/agent/prompt/__init__.py +0 -0
  179. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/agent/prompt/builder.py +0 -0
  180. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/agent/prompt/types.py +0 -0
  181. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/agent/service.py +0 -0
  182. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/agent/types.py +0 -0
  183. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/auth/manager.py +0 -0
  184. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/auth/storage.py +0 -0
  185. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/auth/types.py +0 -0
  186. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/builtins/__init__.py +0 -0
  187. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/builtins/commands/__init__.py +0 -0
  188. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/builtins/commands/clear.py +0 -0
  189. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/builtins/commands/compact.py +0 -0
  190. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/builtins/commands/reload.py +0 -0
  191. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/builtins/commands/session.py +0 -0
  192. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/builtins/extensions/ask_user/manifest.json +0 -0
  193. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/builtins/extensions/ask_user/schema.py +0 -0
  194. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/builtins/extensions/footer/__init__.py +0 -0
  195. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/builtins/extensions/footer/utils.py +0 -0
  196. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/builtins/extensions/header/__init__.py +0 -0
  197. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/builtins/extensions/watch/__init__.py +0 -0
  198. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/builtins/extensions/web/engines/__init__.py +0 -0
  199. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/builtins/extensions/web/engines/base.py +0 -0
  200. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/builtins/extensions/web/engines/jina_engine.py +0 -0
  201. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/builtins/extensions/web/manifest.json +0 -0
  202. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/builtins/extensions/web/tools/__init__.py +0 -0
  203. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/builtins/models/__init__.py +0 -0
  204. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/builtins/models/audio.py +0 -0
  205. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/builtins/models/image.py +0 -0
  206. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/builtins/models/video.py +0 -0
  207. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/builtins/prompts/commit.md +0 -0
  208. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/builtins/prompts/docs.md +0 -0
  209. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/builtins/prompts/explain.md +0 -0
  210. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/builtins/prompts/fix.md +0 -0
  211. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/builtins/prompts/refactor.md +0 -0
  212. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/builtins/prompts/review.md +0 -0
  213. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/builtins/prompts/test.md +0 -0
  214. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/builtins/providers/__init__.py +0 -0
  215. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/builtins/providers/audio.py +0 -0
  216. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/builtins/providers/image.py +0 -0
  217. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/builtins/providers/text.py +0 -0
  218. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/builtins/providers/video.py +0 -0
  219. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/builtins/skills/code-review/SKILL.md +0 -0
  220. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/builtins/skills/debug/SKILL.md +0 -0
  221. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/builtins/skills/git-commit/SKILL.md +0 -0
  222. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/builtins/skills/skill-creator/LICENSE.txt +0 -0
  223. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/builtins/skills/skill-creator/SKILL.md +0 -0
  224. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/builtins/themes/ayu-dark.yaml +0 -0
  225. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/builtins/themes/catppuccin.yaml +0 -0
  226. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/builtins/themes/dark.yaml +0 -0
  227. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/builtins/themes/dracula.yaml +0 -0
  228. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/builtins/themes/everforest.yaml +0 -0
  229. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/builtins/themes/gruvbox.yaml +0 -0
  230. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/builtins/themes/horizon.yaml +0 -0
  231. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/builtins/themes/kanagawa.yaml +0 -0
  232. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/builtins/themes/light.yaml +0 -0
  233. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/builtins/themes/material-ocean.yaml +0 -0
  234. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/builtins/themes/monokai.yaml +0 -0
  235. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/builtins/themes/night-owl.yaml +0 -0
  236. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/builtins/themes/nord.yaml +0 -0
  237. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/builtins/themes/one-dark.yaml +0 -0
  238. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/builtins/themes/rose-pine.yaml +0 -0
  239. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/builtins/themes/solarized-dark.yaml +0 -0
  240. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/builtins/themes/tokyo-night.yaml +0 -0
  241. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/builtins/tools/__init__.py +0 -0
  242. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/builtins/tools/glob.py +0 -0
  243. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/builtins/tools/ls.py +0 -0
  244. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/builtins/tools/write.py +0 -0
  245. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/commands/__init__.py +0 -0
  246. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/commands/registry.py +0 -0
  247. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/commands/types.py +0 -0
  248. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/console/__init__.py +0 -0
  249. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/console/cli.py +0 -0
  250. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/console/commands/__init__.py +0 -0
  251. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/console/commands/auth.py +0 -0
  252. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/console/commands/packages.py +0 -0
  253. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/console/commands/update.py +0 -0
  254. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/core/__init__.py +0 -0
  255. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/core/registry.py +0 -0
  256. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/engine/__init__.py +0 -0
  257. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/engine/service.py +0 -0
  258. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/engine/types.py +0 -0
  259. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/extensions/__init__.py +0 -0
  260. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/extensions/api.py +0 -0
  261. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/extensions/context.py +0 -0
  262. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/extensions/settings.py +0 -0
  263. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/hooks/__init__.py +0 -0
  264. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/hooks/engine.py +0 -0
  265. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/hooks/inference.py +0 -0
  266. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/hooks/runtime.py +0 -0
  267. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/hooks/service.py +0 -0
  268. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/hooks/session.py +0 -0
  269. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/hooks/tui.py +0 -0
  270. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/hooks/types.py +0 -0
  271. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/inference/__init__.py +0 -0
  272. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/inference/api/__init__.py +0 -0
  273. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/inference/api/audio/__init__.py +0 -0
  274. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/inference/api/audio/base.py +0 -0
  275. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/inference/api/audio/builtins.py +0 -0
  276. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/inference/api/audio/elevenlabs_audio.py +0 -0
  277. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/inference/api/audio/gemini_audio.py +0 -0
  278. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/inference/api/audio/registry.py +0 -0
  279. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/inference/api/audio/service.py +0 -0
  280. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/inference/api/audio/utils.py +0 -0
  281. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/inference/api/availability.py +0 -0
  282. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/inference/api/image/__init__.py +0 -0
  283. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/inference/api/image/base.py +0 -0
  284. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/inference/api/image/builtins.py +0 -0
  285. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/inference/api/image/gemini_image.py +0 -0
  286. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/inference/api/image/openai_image.py +0 -0
  287. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/inference/api/image/openrouter.py +0 -0
  288. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/inference/api/image/registry.py +0 -0
  289. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/inference/api/image/service.py +0 -0
  290. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/inference/api/registry.py +0 -0
  291. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/inference/api/text/__init__.py +0 -0
  292. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/inference/api/text/anthropic_claude_code.py +0 -0
  293. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/inference/api/text/anthropic_messages.py +0 -0
  294. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/inference/api/text/anthropic_vertex.py +0 -0
  295. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/inference/api/text/base.py +0 -0
  296. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/inference/api/text/builtins.py +0 -0
  297. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/inference/api/text/dialect.py +0 -0
  298. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/inference/api/text/github_copilot_chat.py +0 -0
  299. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/inference/api/text/openai_completions.py +0 -0
  300. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/inference/api/text/openai_vertex.py +0 -0
  301. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/inference/api/text/registry.py +0 -0
  302. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/inference/api/text/service.py +0 -0
  303. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/inference/api/text/types.py +0 -0
  304. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/inference/api/video/__init__.py +0 -0
  305. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/inference/api/video/base.py +0 -0
  306. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/inference/api/video/builtins.py +0 -0
  307. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/inference/api/video/fal_video.py +0 -0
  308. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/inference/api/video/openrouter_video.py +0 -0
  309. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/inference/api/video/registry.py +0 -0
  310. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/inference/api/video/service.py +0 -0
  311. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/inference/api/video/zai_video.py +0 -0
  312. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/inference/model/__init__.py +0 -0
  313. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/inference/model/registry.py +0 -0
  314. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/inference/model/types.py +0 -0
  315. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/inference/provider/__init__.py +0 -0
  316. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/inference/provider/oauth/__init__.py +0 -0
  317. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/inference/provider/oauth/anthropic_claude_code.py +0 -0
  318. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/inference/provider/oauth/github_copilot.py +0 -0
  319. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/inference/provider/oauth/google_antigravity.py +0 -0
  320. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/inference/provider/oauth/openai_codex.py +0 -0
  321. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/inference/provider/oauth/pkce.py +0 -0
  322. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/inference/provider/oauth/types.py +0 -0
  323. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/inference/provider/registry.py +0 -0
  324. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/inference/provider/types.py +0 -0
  325. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/inference/types.py +0 -0
  326. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/inference/utils.py +0 -0
  327. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/message/__init__.py +0 -0
  328. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/message/types.py +0 -0
  329. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/message/utils.py +0 -0
  330. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/modes/__init__.py +0 -0
  331. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/modes/interactive/__init__.py +0 -0
  332. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/modes/interactive/commands/__init__.py +0 -0
  333. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/modes/interactive/commands/auth.py +0 -0
  334. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/modes/interactive/commands/context.py +0 -0
  335. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/modes/interactive/commands/extensions.py +0 -0
  336. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/modes/interactive/commands/misc.py +0 -0
  337. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/modes/interactive/commands/model.py +0 -0
  338. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/modes/interactive/commands/session.py +0 -0
  339. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/modes/interactive/components/__init__.py +0 -0
  340. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/modes/interactive/input_handler.py +0 -0
  341. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/modes/print/__init__.py +0 -0
  342. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/modes/rpc/__init__.py +0 -0
  343. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/modes/rpc/mode.py +0 -0
  344. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/modes/rpc/types.py +0 -0
  345. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/packages/__init__.py +0 -0
  346. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/packages/manager.py +0 -0
  347. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/packages/types.py +0 -0
  348. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/packages/utils.py +0 -0
  349. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/prompts/expand.py +0 -0
  350. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/prompts/loader.py +0 -0
  351. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/prompts/registry.py +0 -0
  352. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/prompts/types.py +0 -0
  353. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/resources/__init__.py +0 -0
  354. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/resources/loader.py +0 -0
  355. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/resources/types.py +0 -0
  356. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/runtime/dependencies.py +0 -0
  357. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/runtime/types.py +0 -0
  358. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/session/branch_summarization.py +0 -0
  359. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/session/compaction.py +0 -0
  360. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/session/manager.py +0 -0
  361. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/session/types.py +0 -0
  362. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/session/utils.py +0 -0
  363. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/settings/manager.py +0 -0
  364. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/settings/paths.py +0 -0
  365. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/settings/storage.py +0 -0
  366. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/settings/types.py +0 -0
  367. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/settings/utils.py +0 -0
  368. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/skills/loader.py +0 -0
  369. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/skills/registry.py +0 -0
  370. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/skills/types.py +0 -0
  371. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/telemetry/__init__.py +0 -0
  372. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/themes/registry.py +0 -0
  373. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/themes/types.py +0 -0
  374. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/tool/__init__.py +0 -0
  375. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/tool/registry.py +0 -0
  376. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/tool/types.py +0 -0
  377. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/trust/__init__.py +0 -0
  378. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/trust/manager.py +0 -0
  379. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/trust/types.py +0 -0
  380. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/trust/utils.py +0 -0
  381. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/tui/components/__init__.py +0 -0
  382. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/tui/input.py +0 -0
  383. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/tui/keybinding_hints.py +0 -0
  384. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/tui/terminal.py +0 -0
  385. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/utils/__init__.py +0 -0
  386. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/utils/image_processing.py +0 -0
  387. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/utils/secrets.py +0 -0
  388. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau/utils/version_check.py +0 -0
  389. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau_coding_agent.egg-info/dependency_links.txt +0 -0
  390. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau_coding_agent.egg-info/entry_points.txt +0 -0
  391. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tau_coding_agent.egg-info/top_level.txt +0 -0
  392. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tests/test_agent_compaction.py +0 -0
  393. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tests/test_agent_prompt.py +0 -0
  394. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tests/test_agent_types.py +0 -0
  395. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tests/test_ansi.py +0 -0
  396. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tests/test_auth_command.py +0 -0
  397. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tests/test_auth_manager.py +0 -0
  398. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tests/test_auth_storage.py +0 -0
  399. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tests/test_autocomplete_modifiers.py +0 -0
  400. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tests/test_branch_navigation.py +0 -0
  401. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tests/test_branch_summarization.py +0 -0
  402. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tests/test_builtin_watch.py +0 -0
  403. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tests/test_cli_inputs.py +0 -0
  404. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tests/test_command_execution_policy.py +0 -0
  405. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tests/test_command_registry.py +0 -0
  406. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tests/test_compaction.py +0 -0
  407. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tests/test_diff.py +0 -0
  408. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tests/test_engine_execution.py +0 -0
  409. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tests/test_engine_steering.py +0 -0
  410. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tests/test_engine_types.py +0 -0
  411. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tests/test_escape_behavior.py +0 -0
  412. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tests/test_extension_lifecycle.py +0 -0
  413. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tests/test_footer_utils.py +0 -0
  414. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tests/test_fuzzy.py +0 -0
  415. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tests/test_http_proxy.py +0 -0
  416. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tests/test_image_processing.py +0 -0
  417. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tests/test_inference_api_text_utils.py +0 -0
  418. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tests/test_inference_dialect.py +0 -0
  419. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tests/test_inference_error_utils.py +0 -0
  420. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tests/test_inference_types.py +0 -0
  421. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tests/test_inference_utils.py +0 -0
  422. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tests/test_keybindings.py +0 -0
  423. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tests/test_message_types.py +0 -0
  424. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tests/test_message_utils.py +0 -0
  425. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tests/test_model_availability.py +0 -0
  426. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tests/test_model_command.py +0 -0
  427. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tests/test_model_registry.py +0 -0
  428. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tests/test_model_types.py +0 -0
  429. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tests/test_oauth_utils.py +0 -0
  430. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tests/test_package_resources.py +0 -0
  431. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tests/test_packages_utils.py +0 -0
  432. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tests/test_peer_extension.py +0 -0
  433. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tests/test_pkce.py +0 -0
  434. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tests/test_prompts_expand.py +0 -0
  435. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tests/test_prompts_loader.py +0 -0
  436. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tests/test_prompts_registry.py +0 -0
  437. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tests/test_provider_registry.py +0 -0
  438. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tests/test_resource_loader.py +0 -0
  439. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tests/test_rpc_mode.py +0 -0
  440. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tests/test_secrets.py +0 -0
  441. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tests/test_session_manager.py +0 -0
  442. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tests/test_session_trust_persist.py +0 -0
  443. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tests/test_session_types.py +0 -0
  444. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tests/test_session_utils.py +0 -0
  445. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tests/test_settings_manager.py +0 -0
  446. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tests/test_settings_paths.py +0 -0
  447. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tests/test_settings_utils.py +0 -0
  448. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tests/test_skills_loader.py +0 -0
  449. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tests/test_skills_registry.py +0 -0
  450. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tests/test_telemetry.py +0 -0
  451. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tests/test_themes_registry.py +0 -0
  452. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tests/test_tool_registry.py +0 -0
  453. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tests/test_trust_manager.py +0 -0
  454. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tests/test_trust_utils.py +0 -0
  455. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tests/test_tui_capabilities.py +0 -0
  456. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tests/test_tui_input.py +0 -0
  457. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tests/test_tui_select_list.py +0 -0
  458. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tests/test_tui_utils.py +0 -0
  459. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tests/test_ui_context.py +0 -0
  460. {tau_coding_agent-0.5.7 → tau_coding_agent-0.6.0}/tests/test_version_check.py +0 -0
@@ -2,3 +2,5 @@ recursive-include tau/builtins *
2
2
  recursive-include docs *
3
3
  include README.md
4
4
  include LICENSE
5
+ global-exclude *.py[cod]
6
+ global-exclude __pycache__
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tau-coding-agent
3
- Version: 0.5.7
3
+ Version: 0.6.0
4
4
  Summary: A self-extensible agent CLI with terminal UI, multi-provider LLM support, session management with branching, and a plugin system for tools and commands
5
5
  Requires-Python: >=3.12
6
6
  Description-Content-Type: text/markdown
@@ -25,9 +25,11 @@ Requires-Dist: pyyaml==6.0.2
25
25
  Requires-Dist: pygments==2.20.0
26
26
  Requires-Dist: pathspec==1.1.1
27
27
  Requires-Dist: posthog==7.21.3
28
+ Requires-Dist: pylatexenc==2.10
28
29
  Requires-Dist: gitpython==3.1.50
29
30
  Requires-Dist: grapheme==0.6.0
30
31
  Requires-Dist: arrow==1.4.0
32
+ Requires-Dist: kiwisolver==1.5.0
31
33
  Provides-Extra: tools
32
34
  Requires-Dist: ripgrep>=14.0.0; extra == "tools"
33
35
  Requires-Dist: ast-grep-cli>=0.44.0; extra == "tools"
@@ -50,7 +52,7 @@ Start a conversation with the agent in the terminal.
50
52
  ### Installation
51
53
 
52
54
  ```bash
53
- uv pip install tau-coding-agent
55
+ pip install tau-coding-agent
54
56
  ```
55
57
 
56
58
  Or install from source:
@@ -15,7 +15,7 @@ Start a conversation with the agent in the terminal.
15
15
  ### Installation
16
16
 
17
17
  ```bash
18
- uv pip install tau-coding-agent
18
+ pip install tau-coding-agent
19
19
  ```
20
20
 
21
21
  Or install from source:
@@ -60,7 +60,9 @@ tau --model openai/gpt-4o -p "Say hello"
60
60
 
61
61
  ## Google Gemini
62
62
 
63
- Google provides Gemini models with multimodal capabilities.
63
+ Google AI Studio provides API-key access to Gemini models through the Google
64
+ Gen AI SDK. Tau's `google` provider uses the Gemini Developer API; it is
65
+ separate from the `google-vertex` provider, which uses Google Cloud.
64
66
 
65
67
  ### Setup
66
68
 
@@ -75,9 +77,16 @@ export GOOGLE_API_KEY=...
75
77
  ### Verify
76
78
 
77
79
  ```bash
78
- tau --model google/gemini-2.0-flash -p "Say hello"
80
+ tau --model google/gemini-2.5-flash -p "Say hello"
79
81
  ```
80
82
 
83
+ Current Google AI Studio model IDs include:
84
+
85
+ - `gemini-3.5-flash` (stable)
86
+ - `gemini-3.1-flash-lite` (stable)
87
+ - `gemini-3.1-pro-preview` (preview)
88
+ - `gemini-2.5-pro`, `gemini-2.5-flash`, and `gemini-2.5-flash-lite`
89
+
81
90
  ## Mistral AI
82
91
 
83
92
  Mistral offers efficient open-source-based models.
@@ -152,6 +161,17 @@ tau --model ollama/mistral -p "Say hello"
152
161
 
153
162
  ## Switching Providers
154
163
 
164
+ ## Speech-to-Text Timestamps
165
+
166
+ Pass `TimestampGranularity.Word` or `TimestampGranularity.Segment` in
167
+ `STTContext.timestamp_granularities` when using the Python API.
168
+
169
+ - OpenAI `whisper-1` and Groq Whisper models support word and segment timestamps.
170
+ - OpenAI GPT-4o transcription models return plain JSON and do not expose detailed
171
+ timestamps through this API.
172
+ - ElevenLabs Scribe and Sarvam Saaras support word timestamps. Sarvam receives
173
+ `with_timestamps=true` when word timestamps are requested.
174
+
155
175
  ### Command Line
156
176
 
157
177
  Use a specific provider for a single session:
@@ -325,6 +325,9 @@ await runtime.execute_terminal("git status")
325
325
  | `runtime.settings_manager` | `SettingsManager` | Settings access |
326
326
  | `runtime.extension_runtime` | `ExtensionRuntime \| None` | Loaded extensions |
327
327
 
328
+ `ExtensionRuntime.get_extensions()` returns the loaded extensions in
329
+ registration order as a read-only tuple.
330
+
328
331
  ## Listening to Events
329
332
 
330
333
  Subscribe to the hook bus directly to observe what the agent does:
@@ -63,6 +63,9 @@ Or the short form:
63
63
  tau -r
64
64
  ```
65
65
 
66
+ After resuming, `/new` always starts an empty session; the startup resume
67
+ selection is not reused for later session changes.
68
+
66
69
  ### Browse Sessions
67
70
 
68
71
  Choose from a list of previous sessions interactively:
@@ -39,6 +39,8 @@ Set your default theme in `~/.tau/settings.json` or `.tau/settings.json`:
39
39
  ```
40
40
 
41
41
  Opens an interactive picker. Use ↑↓ to preview, Enter to apply.
42
+ The theme submenu in `/settings` uses the same ↑/↓ live preview. Press Enter to
43
+ apply or Escape to restore the previous theme.
42
44
 
43
45
  ---
44
46
 
@@ -64,9 +64,11 @@ Commands run in the agent's current working directory.
64
64
 
65
65
  Output is streamed through tool-update events while the command runs. Updates
66
66
  are throttled to at most once every 100 milliseconds, with guaranteed initial
67
- and final updates. Timeout and cancellation terminate the command's complete
68
- process tree. Programs may still buffer their own output; use an unbuffered mode
69
- such as `python -u` when immediate output is required.
67
+ and final updates. The interactive TUI refreshes the existing result block for
68
+ each update; when a long result is collapsed, its newest lines remain visible
69
+ while the command is running. Timeout and cancellation terminate the command's
70
+ complete process tree. Programs may still buffer their own output; use an
71
+ unbuffered mode such as `python -u` when immediate output is required.
70
72
 
71
73
  ### glob
72
74
 
@@ -32,6 +32,14 @@ from tau.tui import (
32
32
  | Overlays | `OverlayOptions`, `OverlayHandle` |
33
33
  | Styling | Theme dataclasses, color helpers, `render_markdown` |
34
34
 
35
+ ### Markdown math
36
+
37
+ `render_markdown` converts inline (`$...$`) and display (`$$...$$`) LaTeX math
38
+ to terminal-readable Unicode text through `pylatexenc`. Display math is placed
39
+ on separate lines. Code spans and fenced code blocks retain their original
40
+ LaTeX source. This is a readable plain-text representation, not fully typeset
41
+ mathematical layout.
42
+
35
43
  ## Minimal Application
36
44
 
37
45
  ```python
@@ -78,15 +86,17 @@ automatically during shutdown.
78
86
  Subclass `Component` to create a reusable view:
79
87
 
80
88
  ```python
81
- from tau.tui import Component, KeyEvent
89
+ from tau.tui import Buffer, Component, KeyEvent, Line, Rect, Span
82
90
 
83
91
 
84
92
  class Counter(Component):
85
93
  def __init__(self) -> None:
86
94
  self.value = 0
87
95
 
88
- def render(self, width: int) -> list[str]:
89
- return [f"Count: {self.value}"[:width]]
96
+ def render_cells(self, area: Rect, buf: Buffer) -> int:
97
+ buf.grow_to(area.y + 1)
98
+ buf.set_line(area.x, area.y, Line([Span(f"Count: {self.value}")]), area.width)
99
+ return 1
90
100
 
91
101
  def handle_input(self, event: object) -> bool:
92
102
  if isinstance(event, KeyEvent) and event.matches("up"):
@@ -95,8 +105,9 @@ class Counter(Component):
95
105
  return False
96
106
  ```
97
107
 
98
- `render()` returns one string per terminal row. Components must respect the
99
- provided width and must not include newline characters inside a returned line.
108
+ `render_cells()` writes styled cells into the provided `Buffer` and returns the
109
+ number of rows written. Components must grow dynamic buffers before writing and
110
+ must respect the provided `Rect`.
100
111
 
101
112
  ## Layout
102
113
 
@@ -106,6 +117,8 @@ provided width and must not include newline characters inside a returned line.
106
117
  - `Columns` creates multi-line fixed and flexible columns.
107
118
  - `Rows` distributes a fixed terminal height across children.
108
119
  - `Constrained` places a child at an absolute or percentage width.
120
+ - `Box` wraps a child `Component` with horizontal/vertical padding and an
121
+ optional background `Style`.
109
122
 
110
123
  ## Focus and Input
111
124
 
@@ -166,7 +179,8 @@ Runtime-aware behavior belongs in `tau.modes.interactive`.
166
179
 
167
180
  This boundary is enforced by `tests/test_tui_public_api.py`.
168
181
 
169
- The renderer retains only the current transcript frame and its current
170
- line-wrapping cache. Unchanged lines reuse width calculations across frames so
171
- streaming updates do not repeatedly parse ANSI styling across the complete
172
- session.
182
+ The renderer retains only the current transcript frame. Styled content that
183
+ exceeds its available width wraps directly into Buffer rows without losing
184
+ content, and reflows when the terminal is resized. Finalized message rows are
185
+ cached as cells so streaming updates do not repeatedly parse ANSI styling
186
+ across the complete session.
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "tau-coding-agent"
7
- version = "0.5.7"
7
+ version = "0.6.0"
8
8
  description = "A self-extensible agent CLI with terminal UI, multi-provider LLM support, session management with branching, and a plugin system for tools and commands"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.12"
@@ -29,9 +29,11 @@ dependencies = [
29
29
  "pygments==2.20.0",
30
30
  "pathspec==1.1.1",
31
31
  "posthog==7.21.3",
32
+ "pylatexenc==2.10",
32
33
  "gitpython==3.1.50",
33
34
  "grapheme==0.6.0",
34
35
  "arrow==1.4.0",
36
+ "kiwisolver==1.5.0",
35
37
  ]
36
38
 
37
39
  [project.scripts]
@@ -6,7 +6,7 @@ from pathlib import Path
6
6
  # Add this directory to sys.path to allow easy resolution of schema, component, and tool.
7
7
  sys.path.insert(0, str(Path(__file__).parent))
8
8
 
9
- from tool import AskUserTool
9
+ from tool import AskUserTool # type: ignore[import-not-found]
10
10
 
11
11
 
12
12
  def register(tau) -> None:
@@ -1,12 +1,16 @@
1
1
  from __future__ import annotations
2
2
 
3
- from typing import Any
3
+ from typing import TYPE_CHECKING, Any
4
4
 
5
- from schema import AskUserOption
5
+ from schema import AskUserOption # type: ignore[import-not-found]
6
6
 
7
7
  from tau.tui.component import Component
8
8
  from tau.tui.input import InputEvent, KeyEvent
9
9
 
10
+ if TYPE_CHECKING:
11
+ from tau.tui.buffer import Buffer
12
+ from tau.tui.geometry import Rect
13
+
10
14
  FREEFORM_LABEL = "Type something…"
11
15
 
12
16
 
@@ -81,8 +85,20 @@ class _AskUserComponent(Component):
81
85
 
82
86
  # ── Render ────────────────────────────────────────────────────────────
83
87
 
84
- def render(self, width: int) -> list[str]:
85
- from tau.modes.interactive.components.overlays import _box
88
+ def render_cells(self, area: Rect, buf: Buffer) -> int:
89
+ from tau.modes.interactive.components.overlays import _box_cells
90
+ from tau.tui.ansi_bridge import parse_ansi_wrapped_into
91
+ from tau.tui.buffer import Buffer as _Buffer
92
+ from tau.tui.geometry import Rect as _Rect
93
+
94
+ inner_w = max(1, area.width - 4)
95
+
96
+ def _boxed(lines: list[str]) -> int:
97
+ inner_buf = _Buffer.empty(_Rect(0, 0, inner_w, 0))
98
+ row = 0
99
+ for line in lines:
100
+ row += parse_ansi_wrapped_into(inner_buf, 0, row, line, inner_w)
101
+ return _box_cells(buf, area, inner_buf, row, "", None)
86
102
 
87
103
  inner: list[str] = []
88
104
  if self._context:
@@ -120,14 +136,14 @@ class _AskUserComponent(Component):
120
136
  " \x1b[2mEnter to submit · \\+Enter or Shift+Enter for newline · "
121
137
  f"{back}\x1b[0m"
122
138
  )
123
- return _box(inner, "", width, bg="")
139
+ return _boxed(inner)
124
140
 
125
141
  if self._mode == "freeform":
126
142
  inner.append(f" {self._freeform_value}█")
127
143
  inner.append("")
128
144
  back = "Esc to cancel" if not self._options else "Esc to go back"
129
145
  inner.append(f" \x1b[2mEnter to submit · {back}\x1b[0m")
130
- return _box(inner, "", width, bg="")
146
+ return _boxed(inner)
131
147
 
132
148
  for i in range(self._row_count):
133
149
  is_freeform_row = i == self._freeform_index
@@ -164,7 +180,7 @@ class _AskUserComponent(Component):
164
180
  if self._allow_multiple:
165
181
  hints.insert(1, "Space toggle")
166
182
  inner.append(" \x1b[2m" + " · ".join(hints) + "\x1b[0m")
167
- return _box(inner, "", width)
183
+ return _boxed(inner)
168
184
 
169
185
  # ── Input ─────────────────────────────────────────────────────────────
170
186
 
@@ -3,8 +3,8 @@ from __future__ import annotations
3
3
  import asyncio
4
4
  from typing import Any
5
5
 
6
- from component import _AskUserComponent
7
- from schema import AskUserParams, normalize_options
6
+ from component import _AskUserComponent # type: ignore[import-not-found]
7
+ from schema import AskUserParams, normalize_options # type: ignore[import-not-found]
8
8
 
9
9
  from tau.tool.render import call_line
10
10
  from tau.tool.types import (
@@ -21,6 +21,8 @@ if TYPE_CHECKING:
21
21
  from tau.extensions.api import ExtensionAPI
22
22
  from tau.extensions.context import ExtensionContext
23
23
  from tau.inference.api.text.service import TextLLM
24
+ from tau.tui.buffer import Buffer
25
+ from tau.tui.geometry import Rect
24
26
 
25
27
 
26
28
  # ── Widget component ───────────────────────────────────────────────────────────
@@ -35,11 +37,20 @@ class BtwWidget(Component):
35
37
  def set_lines(self, lines: list[str]) -> None:
36
38
  self._lines = list(lines)
37
39
 
38
- def render(self, width: int) -> list[str]:
39
- from tau.modes.interactive.components.overlays import _box
40
+ def render_cells(self, area: Rect, buf: Buffer) -> int:
41
+ from tau.modes.interactive.components.overlays import _box_cells
42
+ from tau.tui.ansi_bridge import parse_ansi_wrapped_into
43
+ from tau.tui.buffer import Buffer as _Buffer
44
+ from tau.tui.geometry import Rect as _Rect
40
45
 
41
- inner = list(self._lines) or [" (empty)"]
42
- return _box(inner, "btw", width)
46
+ inner_w = max(1, area.width - 4)
47
+ inner = _Buffer.empty(_Rect(0, 0, inner_w, 0))
48
+ lines = list(self._lines) or [" (empty)"]
49
+ row = 0
50
+ for line in lines:
51
+ row += parse_ansi_wrapped_into(inner, 0, row, line, inner_w)
52
+
53
+ return _box_cells(buf, area, inner, row, "btw", None)
43
54
 
44
55
  def handle_input(self, event: Any) -> bool:
45
56
  return False # never captures input — editor stays focused
@@ -2,10 +2,20 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
+ from typing import TYPE_CHECKING
6
+
7
+ from tau.tui.component import Component
8
+ from tau.tui.style import Style
9
+ from tau.tui.text import Line, Span
10
+
5
11
  from .utils import read_branch, shorten_home
6
12
 
13
+ if TYPE_CHECKING:
14
+ from tau.tui.buffer import Buffer
15
+ from tau.tui.geometry import Rect
7
16
 
8
- class GitBadge:
17
+
18
+ class GitBadge(Component):
9
19
  """Renders ``~/path (branch)`` for the footer Row left slot."""
10
20
 
11
21
  def __init__(self) -> None:
@@ -16,10 +26,10 @@ class GitBadge:
16
26
  display = shorten_home(cwd)
17
27
  self._text = f"{display} ({branch})" if branch else display
18
28
 
19
- def render(self, width: int) -> list[str]: # noqa: ARG002
20
- from tau.tui.utils import DIM, RESET
21
-
22
- return [DIM + self._text + RESET]
29
+ def render_cells(self, area: Rect, buf: Buffer) -> int:
30
+ buf.grow_to(area.y + 1)
31
+ buf.set_line(area.x, area.y, Line([Span(self._text, Style().dim())]), area.width)
32
+ return 1
23
33
 
24
34
  def handle_input(self, event: object) -> bool: # noqa: ARG002
25
35
  return False
@@ -2,8 +2,18 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
+ from typing import TYPE_CHECKING
5
6
 
6
- class ModelBadge:
7
+ from tau.tui.component import Component
8
+ from tau.tui.style import Style
9
+ from tau.tui.text import Line, Span
10
+
11
+ if TYPE_CHECKING:
12
+ from tau.tui.buffer import Buffer
13
+ from tau.tui.geometry import Rect
14
+
15
+
16
+ class ModelBadge(Component):
7
17
  """Renders ``(provider) model ∙ Level|context%`` for the footer Row right slot.
8
18
 
9
19
  The ``∙ Level`` segment only appears when the active model supports
@@ -73,21 +83,25 @@ class ModelBadge:
73
83
  else:
74
84
  self.update_context_from_ctx(ctx)
75
85
 
76
- def render(self, width: int) -> list[str]: # noqa: ARG002
77
- from tau.tui.utils import DIM, RESET
78
-
86
+ def _text(self) -> str:
79
87
  if not self._provider and not self._model:
80
- return []
81
-
88
+ return ""
82
89
  left = f"({self._provider}) {self._model}" if self._provider else self._model
83
90
  if self._thinking and self._thinking_level and self._thinking_level != "off":
84
91
  left += f" ∙ {self._thinking_level.title()}"
85
-
86
92
  if self._context_window > 0 and self._tokens > 0:
87
93
  pct = self._tokens / self._context_window * 100
88
94
  label = f"{pct:.1f}%" if pct < 1 else f"{int(round(pct))}%"
89
- return [DIM + f"{left}|{label}" + RESET]
90
- return [DIM + left + RESET]
95
+ return f"{left}|{label}"
96
+ return left
97
+
98
+ def render_cells(self, area: Rect, buf: Buffer) -> int:
99
+ text = self._text()
100
+ if not text:
101
+ return 0
102
+ buf.grow_to(area.y + 1)
103
+ buf.set_line(area.x, area.y, Line([Span(text, Style().dim())]), area.width)
104
+ return 1
91
105
 
92
106
  def handle_input(self, event: object) -> bool: # noqa: ARG002
93
107
  return False
@@ -40,9 +40,9 @@ from pathlib import Path
40
40
 
41
41
  sys.path.insert(0, str(Path(__file__).parent))
42
42
 
43
- from engines import build_engine
44
- from tools.fetch import WebFetchTool
45
- from tools.search import WebSearchTool
43
+ from engines import build_engine # type: ignore[import-not-found]
44
+ from tools.fetch import WebFetchTool # type: ignore[import-not-found]
45
+ from tools.search import WebSearchTool # type: ignore[import-not-found]
46
46
 
47
47
 
48
48
  def register(tau) -> None:
@@ -27,7 +27,7 @@ class DDGSearchEngine(BaseSearchEngine):
27
27
  region, safe = self._region, self._safesearch
28
28
 
29
29
  if mode is SearchMode.books:
30
- from ddgs import DDGS
30
+ from ddgs import DDGS # type: ignore[import-not-found]
31
31
 
32
32
  raw = await asyncio.to_thread(
33
33
  lambda: DDGS().books(query, max_results=max_results) or []
@@ -43,7 +43,7 @@ class DDGSearchEngine(BaseSearchEngine):
43
43
  for r in raw
44
44
  ]
45
45
 
46
- from asyncddgs import aDDGS
46
+ from asyncddgs import aDDGS # type: ignore[import-not-found]
47
47
 
48
48
  async with aDDGS() as d:
49
49
  match mode:
@@ -106,7 +106,7 @@ class DDGSearchEngine(BaseSearchEngine):
106
106
  ]
107
107
 
108
108
  async def fetch(self, url: str, timeout: int) -> str:
109
- from ddgs import DDGS
109
+ from ddgs import DDGS # type: ignore[import-not-found]
110
110
 
111
111
  def _fetch() -> str:
112
112
  ddgs = DDGS(timeout=timeout)
@@ -20,7 +20,7 @@ class ExaSearchEngine(BaseSearchEngine):
20
20
 
21
21
  def _get_client(self):
22
22
  if self._client is None:
23
- from exa_py import Exa
23
+ from exa_py import Exa # type: ignore[import-not-found]
24
24
 
25
25
  self._client = Exa(self._api_key)
26
26
  return self._client
@@ -1,4 +1,6 @@
1
- """Tavily engine (LLM-oriented search, https://tavily.com). Requires an API key + ``tavily-python``."""
1
+ """Tavily engine (LLM-oriented search, https://tavily.com).
2
+ Requires an API key + ``tavily-python``.
3
+ """
2
4
 
3
5
  from __future__ import annotations
4
6
 
@@ -20,7 +22,7 @@ class TavilySearchEngine(BaseSearchEngine):
20
22
 
21
23
  def _get_client(self):
22
24
  if self._client is None:
23
- from tavily import TavilyClient
25
+ from tavily import TavilyClient # type: ignore[import-not-found]
24
26
 
25
27
  self._client = TavilyClient(api_key=self._api_key)
26
28
  return self._client
@@ -71,8 +71,12 @@ def _human_size(n: int) -> str:
71
71
  def _render_web_fetch(content: str, opts: Any) -> list[str]:
72
72
  # Style via the theme passed on the render options — the stable surface for
73
73
  # extensions — rather than importing ANSI codes from Tau internals.
74
- _id = lambda s: s # noqa: E731 — fallback when no theme (e.g. outside the TUI)
75
- error = getattr(opts.theme, "error", _id)
74
+ from tau.tui.style import Style, apply_style
75
+
76
+ error_style = getattr(opts.theme, "error", Style())
77
+
78
+ def error(text: str) -> str:
79
+ return apply_style(error_style, text)
76
80
 
77
81
  if opts.is_error:
78
82
  return [error(content.strip())]
@@ -2,8 +2,8 @@ from __future__ import annotations
2
2
 
3
3
  from typing import Any
4
4
 
5
- from engines import BaseSearchEngine
6
- from engines import SearchMode as _SearchMode
5
+ from engines import BaseSearchEngine # type: ignore[import-not-found]
6
+ from engines import SearchMode as _SearchMode # type: ignore[import-not-found]
7
7
  from pydantic import BaseModel, Field
8
8
 
9
9
  from tau.tool.render import call_line
@@ -42,7 +42,7 @@ class _WebSearchSchema(BaseModel):
42
42
  )
43
43
  max_results: int = Field(
44
44
  default=10,
45
- description="Number of results to return (default 10). Increase to 20+ for broader coverage.",
45
+ description=("Results to return (default 10). Increase to 20+ for broader coverage."),
46
46
  examples=[10, 20],
47
47
  )
48
48
 
@@ -70,14 +70,18 @@ def _result_lines(r: dict, mode: _SearchMode) -> tuple[str, str]:
70
70
  def _render_web_search(content: str, opts: Any) -> list[str]:
71
71
  # Style via the theme on the render options (stable extension surface)
72
72
  # instead of importing ANSI codes from Tau internals.
73
- _id = lambda s: s # noqa: E731 — fallback when no theme (e.g. outside the TUI)
74
- muted = getattr(opts.theme, "muted", _id)
73
+ from tau.tui.style import Style, apply_style
74
+
75
+ muted_style = getattr(opts.theme, "muted", Style())
76
+
77
+ def muted(text: str) -> str:
78
+ return apply_style(muted_style, text)
75
79
 
76
80
  metadata = opts.metadata or {}
77
- query = metadata.get("query", "")
78
81
  mode = metadata.get("mode", "text")
79
82
  result_count = metadata.get("result_count", 0)
80
83
  results = metadata.get("results", [])
84
+ results = metadata.get("results", [])
81
85
 
82
86
  mode_tag = f" {muted(mode)}" if mode != "text" else ""
83
87
  result_word = "result" if result_count == 1 else "results"
@@ -132,7 +136,10 @@ class WebSearchTool(Tool):
132
136
  render_result=_render_web_search,
133
137
  render_call=_render_web_search_call,
134
138
  render_shell="default",
135
- prompt_guidelines="Use for current information not in the codebase. Follow up with web_fetch to read a full page from the results.",
139
+ prompt_guidelines=(
140
+ "Use for current information not in the codebase. "
141
+ "Follow up with web_fetch to read a full page from the results."
142
+ ),
136
143
  )
137
144
 
138
145
  async def execute(
@@ -150,10 +157,11 @@ class WebSearchTool(Tool):
150
157
  max_results = invocation.params.get("max_results", 10)
151
158
 
152
159
  if not self._engine.supports(mode):
160
+ modes_list = ", ".join(sorted(m.value for m in self._engine.supported_modes))
153
161
  return ToolResult.error(
154
162
  invocation.id,
155
163
  f"The '{self._engine.name}' engine does not support '{mode}' mode. "
156
- f"Supported modes: {', '.join(sorted(m.value for m in self._engine.supported_modes))}.",
164
+ f"Supported modes: {modes_list}.",
157
165
  )
158
166
 
159
167
  try:
@@ -171,8 +179,14 @@ class WebSearchTool(Tool):
171
179
  }
172
180
 
173
181
  if not results:
174
- return ToolResult.ok(invocation.id, f"No results found for: {query}", metadata=metadata)
182
+ return ToolResult.ok(
183
+ invocation.id,
184
+ f"No results found for: {query}",
185
+ metadata=metadata,
186
+ )
175
187
 
176
188
  return ToolResult.ok(
177
- invocation.id, _format_results(mode, query, results), metadata=metadata
189
+ invocation.id,
190
+ _format_results(mode, query, results),
191
+ metadata=metadata,
178
192
  )