tau-coding-agent 0.4.8__tar.gz → 0.5.1__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 (383) hide show
  1. {tau_coding_agent-0.4.8/tau_coding_agent.egg-info → tau_coding_agent-0.5.1}/PKG-INFO +6 -6
  2. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/README.md +5 -5
  3. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/docs/architecture.md +12 -4
  4. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/docs/cli-reference.md +2 -2
  5. tau_coding_agent-0.5.1/docs/creating-tools.md +242 -0
  6. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/docs/development.md +13 -26
  7. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/docs/docs.json +16 -0
  8. tau_coding_agent-0.5.1/docs/engine.md +114 -0
  9. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/docs/extension-settings.md +1 -1
  10. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/docs/extensions.md +4 -2
  11. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/docs/http-proxy.md +9 -6
  12. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/docs/index.md +4 -0
  13. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/docs/inference-providers.md +11 -22
  14. tau_coding_agent-0.5.1/docs/inference.md +229 -0
  15. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/docs/messages.md +1 -1
  16. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/docs/project-structure.md +22 -19
  17. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/docs/python-api.md +4 -2
  18. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/docs/quickstart.md +3 -0
  19. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/docs/sessions.md +9 -7
  20. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/docs/settings.md +23 -0
  21. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/docs/skills.md +11 -0
  22. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/docs/tools.md +14 -3
  23. tau_coding_agent-0.5.1/docs/tui.md +167 -0
  24. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/docs/usage.md +6 -0
  25. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/pyproject.toml +1 -1
  26. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/agent/service.py +5 -4
  27. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/agent/types.py +5 -13
  28. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/builtins/models/audio.py +10 -0
  29. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/builtins/models/image.py +19 -0
  30. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/builtins/models/text.py +229 -0
  31. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/builtins/models/video.py +65 -0
  32. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/builtins/providers/audio.py +6 -0
  33. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/builtins/providers/image.py +6 -0
  34. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/builtins/providers/text.py +6 -0
  35. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/builtins/providers/video.py +6 -0
  36. tau_coding_agent-0.5.1/tau/builtins/skills/skill-creator/LICENSE.txt +13 -0
  37. tau_coding_agent-0.5.1/tau/builtins/skills/skill-creator/SKILL.md +153 -0
  38. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/builtins/tools/edit.py +1 -1
  39. tau_coding_agent-0.5.1/tau/builtins/tools/terminal.py +342 -0
  40. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/builtins/tools/utils.py +108 -1
  41. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/engine/__init__.py +16 -8
  42. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/engine/service.py +17 -17
  43. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/engine/types.py +10 -0
  44. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/extensions/context.py +2 -2
  45. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/inference/api/video/builtins.py +1 -0
  46. tau_coding_agent-0.5.1/tau/inference/api/video/zai_video.py +139 -0
  47. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/modes/interactive/agent_hooks.py +6 -0
  48. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/modes/interactive/app.py +6 -1
  49. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/modes/interactive/commands/appearance.py +8 -0
  50. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/modes/interactive/components/layout.py +11 -0
  51. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/modes/interactive/components/message_list.py +4 -0
  52. {tau_coding_agent-0.4.8/tau/tui → tau_coding_agent-0.5.1/tau/modes/interactive}/ui_context.py +5 -2
  53. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/runtime/service.py +18 -0
  54. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/settings/manager.py +15 -0
  55. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/settings/types.py +1 -0
  56. tau_coding_agent-0.5.1/tau/tui/__init__.py +134 -0
  57. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/tui/autocomplete.py +34 -7
  58. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/tui/component.py +45 -0
  59. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/tui/components/image.py +13 -3
  60. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/tui/components/spinner.py +8 -0
  61. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/tui/components/text_input.py +8 -1
  62. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/tui/input.py +15 -0
  63. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/tui/markdown.py +36 -17
  64. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/tui/theme.py +24 -0
  65. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/tui/tui.py +74 -15
  66. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/tui/utils.py +40 -4
  67. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/utils/http_proxy.py +4 -2
  68. tau_coding_agent-0.5.1/tau/utils/telemetry.py +42 -0
  69. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1/tau_coding_agent.egg-info}/PKG-INFO +6 -6
  70. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau_coding_agent.egg-info/SOURCES.txt +13 -1
  71. tau_coding_agent-0.5.1/tests/test_ask_user_extension.py +46 -0
  72. tau_coding_agent-0.5.1/tests/test_autocomplete_modifiers.py +52 -0
  73. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tests/test_builtin_tools.py +123 -1
  74. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tests/test_engine_execution.py +17 -0
  75. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tests/test_engine_steering.py +21 -17
  76. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tests/test_inference_dialect.py +16 -1
  77. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tests/test_markdown.py +30 -14
  78. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tests/test_settings_manager.py +7 -0
  79. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tests/test_skills_registry.py +14 -0
  80. tau_coding_agent-0.5.1/tests/test_telemetry.py +75 -0
  81. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tests/test_text_input.py +17 -0
  82. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tests/test_thinking_render.py +21 -0
  83. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tests/test_tui_input.py +10 -0
  84. tau_coding_agent-0.5.1/tests/test_tui_public_api.py +55 -0
  85. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tests/test_tui_renderer.py +93 -4
  86. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tests/test_tui_theme.py +27 -0
  87. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tests/test_ui_context.py +1 -1
  88. tau_coding_agent-0.4.8/tau/builtins/tools/terminal.py +0 -213
  89. tau_coding_agent-0.4.8/tau/tui/__init__.py +0 -69
  90. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/LICENSE +0 -0
  91. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/MANIFEST.in +0 -0
  92. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/docs/auth.md +0 -0
  93. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/docs/installation.md +0 -0
  94. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/docs/keybindings.md +0 -0
  95. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/docs/project-context.md +0 -0
  96. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/docs/prompts.md +0 -0
  97. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/docs/themes.md +0 -0
  98. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/setup.cfg +0 -0
  99. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/__init__.py +0 -0
  100. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/agent/__init__.py +0 -0
  101. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/agent/prompt/__init__.py +0 -0
  102. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/agent/prompt/builder.py +0 -0
  103. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/agent/prompt/types.py +0 -0
  104. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/auth/manager.py +0 -0
  105. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/auth/storage.py +0 -0
  106. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/auth/types.py +0 -0
  107. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/builtins/__init__.py +0 -0
  108. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/builtins/commands/__init__.py +0 -0
  109. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/builtins/commands/clear.py +0 -0
  110. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/builtins/commands/compact.py +0 -0
  111. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/builtins/commands/reload.py +0 -0
  112. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/builtins/commands/session.py +0 -0
  113. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/builtins/extensions/btw/__init__.py +0 -0
  114. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/builtins/extensions/footer/__init__.py +0 -0
  115. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/builtins/extensions/footer/git.py +0 -0
  116. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/builtins/extensions/footer/model.py +0 -0
  117. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/builtins/extensions/footer/utils.py +0 -0
  118. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/builtins/extensions/header/__init__.py +0 -0
  119. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/builtins/extensions/watch/__init__.py +0 -0
  120. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/builtins/models/__init__.py +0 -0
  121. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/builtins/prompts/commit.md +0 -0
  122. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/builtins/prompts/docs.md +0 -0
  123. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/builtins/prompts/explain.md +0 -0
  124. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/builtins/prompts/fix.md +0 -0
  125. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/builtins/prompts/refactor.md +0 -0
  126. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/builtins/prompts/review.md +0 -0
  127. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/builtins/prompts/test.md +0 -0
  128. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/builtins/providers/__init__.py +0 -0
  129. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/builtins/skills/code-review/SKILL.md +0 -0
  130. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/builtins/skills/debug/SKILL.md +0 -0
  131. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/builtins/skills/git-commit/SKILL.md +0 -0
  132. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/builtins/themes/dark.yaml +0 -0
  133. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/builtins/themes/light.yaml +0 -0
  134. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/builtins/tools/__init__.py +0 -0
  135. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/builtins/tools/glob.py +0 -0
  136. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/builtins/tools/grep.py +0 -0
  137. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/builtins/tools/ls.py +0 -0
  138. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/builtins/tools/read.py +0 -0
  139. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/builtins/tools/write.py +0 -0
  140. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/commands/__init__.py +0 -0
  141. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/commands/registry.py +0 -0
  142. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/commands/types.py +0 -0
  143. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/console/__init__.py +0 -0
  144. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/console/cli.py +0 -0
  145. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/console/commands/__init__.py +0 -0
  146. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/console/commands/auth.py +0 -0
  147. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/console/commands/packages.py +0 -0
  148. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/console/commands/update.py +0 -0
  149. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/core/__init__.py +0 -0
  150. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/core/registry.py +0 -0
  151. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/extensions/__init__.py +0 -0
  152. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/extensions/api.py +0 -0
  153. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/extensions/loader.py +0 -0
  154. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/extensions/runtime.py +0 -0
  155. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/extensions/settings.py +0 -0
  156. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/hooks/__init__.py +0 -0
  157. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/hooks/engine.py +0 -0
  158. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/hooks/inference.py +0 -0
  159. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/hooks/runtime.py +0 -0
  160. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/hooks/service.py +0 -0
  161. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/hooks/session.py +0 -0
  162. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/hooks/tui.py +0 -0
  163. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/hooks/types.py +0 -0
  164. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/inference/__init__.py +0 -0
  165. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/inference/api/__init__.py +0 -0
  166. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/inference/api/audio/__init__.py +0 -0
  167. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/inference/api/audio/base.py +0 -0
  168. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/inference/api/audio/builtins.py +0 -0
  169. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/inference/api/audio/elevenlabs_audio.py +0 -0
  170. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/inference/api/audio/gemini_audio.py +0 -0
  171. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/inference/api/audio/openai_audio.py +0 -0
  172. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/inference/api/audio/registry.py +0 -0
  173. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/inference/api/audio/sarvam_audio.py +0 -0
  174. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/inference/api/audio/service.py +0 -0
  175. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/inference/api/audio/utils.py +0 -0
  176. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/inference/api/availability.py +0 -0
  177. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/inference/api/image/__init__.py +0 -0
  178. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/inference/api/image/base.py +0 -0
  179. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/inference/api/image/builtins.py +0 -0
  180. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/inference/api/image/gemini_image.py +0 -0
  181. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/inference/api/image/openai_image.py +0 -0
  182. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/inference/api/image/openrouter.py +0 -0
  183. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/inference/api/image/registry.py +0 -0
  184. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/inference/api/image/service.py +0 -0
  185. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/inference/api/registry.py +0 -0
  186. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/inference/api/text/__init__.py +0 -0
  187. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/inference/api/text/anthropic_claude_code.py +0 -0
  188. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/inference/api/text/anthropic_messages.py +0 -0
  189. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/inference/api/text/anthropic_vertex.py +0 -0
  190. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/inference/api/text/base.py +0 -0
  191. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/inference/api/text/builtins.py +0 -0
  192. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/inference/api/text/dialect.py +0 -0
  193. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/inference/api/text/gemini_generate.py +0 -0
  194. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/inference/api/text/github_copilot_chat.py +0 -0
  195. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/inference/api/text/google_antigravity.py +0 -0
  196. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/inference/api/text/google_vertex.py +0 -0
  197. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/inference/api/text/mistral_chat.py +0 -0
  198. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/inference/api/text/ollama_chat.py +0 -0
  199. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/inference/api/text/openai_codex_responses.py +0 -0
  200. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/inference/api/text/openai_completions.py +0 -0
  201. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/inference/api/text/openai_responses.py +0 -0
  202. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/inference/api/text/openai_vertex.py +0 -0
  203. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/inference/api/text/registry.py +0 -0
  204. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/inference/api/text/service.py +0 -0
  205. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/inference/api/text/types.py +0 -0
  206. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/inference/api/text/utils.py +0 -0
  207. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/inference/api/video/__init__.py +0 -0
  208. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/inference/api/video/base.py +0 -0
  209. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/inference/api/video/fal_video.py +0 -0
  210. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/inference/api/video/openrouter_video.py +0 -0
  211. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/inference/api/video/registry.py +0 -0
  212. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/inference/api/video/service.py +0 -0
  213. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/inference/model/__init__.py +0 -0
  214. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/inference/model/registry.py +0 -0
  215. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/inference/model/types.py +0 -0
  216. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/inference/provider/__init__.py +0 -0
  217. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/inference/provider/oauth/__init__.py +0 -0
  218. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/inference/provider/oauth/anthropic_claude_code.py +0 -0
  219. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/inference/provider/oauth/github_copilot.py +0 -0
  220. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/inference/provider/oauth/google_antigravity.py +0 -0
  221. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/inference/provider/oauth/openai_codex.py +0 -0
  222. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/inference/provider/oauth/pkce.py +0 -0
  223. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/inference/provider/oauth/types.py +0 -0
  224. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/inference/provider/oauth/utils.py +0 -0
  225. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/inference/provider/registry.py +0 -0
  226. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/inference/provider/types.py +0 -0
  227. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/inference/types.py +0 -0
  228. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/inference/utils.py +0 -0
  229. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/message/__init__.py +0 -0
  230. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/message/types.py +0 -0
  231. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/message/utils.py +0 -0
  232. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/modes/__init__.py +0 -0
  233. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/modes/interactive/__init__.py +0 -0
  234. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/modes/interactive/commands/__init__.py +0 -0
  235. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/modes/interactive/commands/auth.py +0 -0
  236. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/modes/interactive/commands/context.py +0 -0
  237. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/modes/interactive/commands/extensions.py +0 -0
  238. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/modes/interactive/commands/misc.py +0 -0
  239. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/modes/interactive/commands/model.py +0 -0
  240. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/modes/interactive/commands/session.py +0 -0
  241. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/modes/interactive/components/__init__.py +0 -0
  242. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/modes/interactive/components/command_palette.py +0 -0
  243. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/modes/interactive/components/config_selector.py +0 -0
  244. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/modes/interactive/components/extension_selector.py +0 -0
  245. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/modes/interactive/components/file_picker.py +0 -0
  246. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/modes/interactive/components/model_selector.py +0 -0
  247. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/modes/interactive/components/oauth_selector.py +0 -0
  248. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/modes/interactive/components/overlays.py +0 -0
  249. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/modes/interactive/components/selector_controller.py +0 -0
  250. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/modes/interactive/components/session_selector.py +0 -0
  251. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/modes/interactive/components/settings_selector.py +0 -0
  252. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/modes/interactive/components/theme_selector.py +0 -0
  253. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/modes/interactive/components/thinking_selector.py +0 -0
  254. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/modes/interactive/components/tree_selector.py +0 -0
  255. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/modes/interactive/components/trust_screen.py +0 -0
  256. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/modes/interactive/components/voice_selector.py +0 -0
  257. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/modes/interactive/input_handler.py +0 -0
  258. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/modes/print/__init__.py +0 -0
  259. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/modes/rpc/__init__.py +0 -0
  260. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/modes/rpc/mode.py +0 -0
  261. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/modes/rpc/types.py +0 -0
  262. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/packages/__init__.py +0 -0
  263. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/packages/manager.py +0 -0
  264. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/packages/types.py +0 -0
  265. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/packages/utils.py +0 -0
  266. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/prompts/expand.py +0 -0
  267. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/prompts/loader.py +0 -0
  268. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/prompts/registry.py +0 -0
  269. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/prompts/types.py +0 -0
  270. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/resources/__init__.py +0 -0
  271. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/resources/loader.py +0 -0
  272. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/resources/types.py +0 -0
  273. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/runtime/dependencies.py +0 -0
  274. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/runtime/types.py +0 -0
  275. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/session/branch_summarization.py +0 -0
  276. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/session/compaction.py +0 -0
  277. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/session/manager.py +0 -0
  278. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/session/types.py +0 -0
  279. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/session/utils.py +0 -0
  280. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/settings/paths.py +0 -0
  281. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/settings/storage.py +0 -0
  282. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/settings/utils.py +0 -0
  283. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/skills/loader.py +0 -0
  284. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/skills/registry.py +0 -0
  285. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/skills/types.py +0 -0
  286. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/themes/loader.py +0 -0
  287. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/themes/registry.py +0 -0
  288. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/themes/types.py +0 -0
  289. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/tool/__init__.py +0 -0
  290. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/tool/registry.py +0 -0
  291. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/tool/render.py +0 -0
  292. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/tool/types.py +0 -0
  293. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/trust/__init__.py +0 -0
  294. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/trust/manager.py +0 -0
  295. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/trust/types.py +0 -0
  296. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/trust/utils.py +0 -0
  297. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/tui/components/__init__.py +0 -0
  298. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/tui/components/box.py +0 -0
  299. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/tui/components/editor.py +0 -0
  300. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/tui/components/select_list.py +0 -0
  301. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/tui/keybinding_hints.py +0 -0
  302. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/tui/terminal.py +0 -0
  303. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/utils/__init__.py +0 -0
  304. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/utils/image_processing.py +0 -0
  305. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/utils/secrets.py +0 -0
  306. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau/utils/version_check.py +0 -0
  307. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau_coding_agent.egg-info/dependency_links.txt +0 -0
  308. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau_coding_agent.egg-info/entry_points.txt +0 -0
  309. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau_coding_agent.egg-info/requires.txt +0 -0
  310. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tau_coding_agent.egg-info/top_level.txt +0 -0
  311. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tests/test_agent_compaction.py +0 -0
  312. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tests/test_agent_prompt.py +0 -0
  313. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tests/test_agent_types.py +0 -0
  314. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tests/test_ansi.py +0 -0
  315. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tests/test_auth_command.py +0 -0
  316. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tests/test_auth_manager.py +0 -0
  317. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tests/test_auth_storage.py +0 -0
  318. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tests/test_branch_navigation.py +0 -0
  319. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tests/test_branch_summarization.py +0 -0
  320. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tests/test_builtin_watch.py +0 -0
  321. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tests/test_cli_inputs.py +0 -0
  322. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tests/test_command_execution_policy.py +0 -0
  323. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tests/test_command_registry.py +0 -0
  324. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tests/test_compaction.py +0 -0
  325. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tests/test_diff.py +0 -0
  326. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tests/test_editor_protocol.py +0 -0
  327. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tests/test_engine_types.py +0 -0
  328. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tests/test_escape_behavior.py +0 -0
  329. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tests/test_extension_api.py +0 -0
  330. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tests/test_extension_lifecycle.py +0 -0
  331. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tests/test_footer_model.py +0 -0
  332. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tests/test_footer_utils.py +0 -0
  333. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tests/test_fuzzy.py +0 -0
  334. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tests/test_http_proxy.py +0 -0
  335. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tests/test_image_processing.py +0 -0
  336. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tests/test_inference_api_text_utils.py +0 -0
  337. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tests/test_inference_error_utils.py +0 -0
  338. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tests/test_inference_types.py +0 -0
  339. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tests/test_inference_utils.py +0 -0
  340. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tests/test_keybindings.py +0 -0
  341. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tests/test_message_types.py +0 -0
  342. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tests/test_message_utils.py +0 -0
  343. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tests/test_model_availability.py +0 -0
  344. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tests/test_model_command.py +0 -0
  345. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tests/test_model_registry.py +0 -0
  346. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tests/test_model_selector_modal.py +0 -0
  347. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tests/test_model_types.py +0 -0
  348. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tests/test_oauth_utils.py +0 -0
  349. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tests/test_package_resources.py +0 -0
  350. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tests/test_packages_utils.py +0 -0
  351. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tests/test_peer_extension.py +0 -0
  352. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tests/test_pkce.py +0 -0
  353. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tests/test_prompts_expand.py +0 -0
  354. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tests/test_prompts_loader.py +0 -0
  355. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tests/test_prompts_registry.py +0 -0
  356. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tests/test_provider_registry.py +0 -0
  357. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tests/test_resource_loader.py +0 -0
  358. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tests/test_rpc_mode.py +0 -0
  359. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tests/test_runtime_sdk.py +0 -0
  360. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tests/test_secrets.py +0 -0
  361. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tests/test_selector_controller.py +0 -0
  362. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tests/test_session_manager.py +0 -0
  363. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tests/test_session_trust_persist.py +0 -0
  364. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tests/test_session_types.py +0 -0
  365. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tests/test_session_utils.py +0 -0
  366. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tests/test_settings_paths.py +0 -0
  367. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tests/test_settings_storage.py +0 -0
  368. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tests/test_settings_utils.py +0 -0
  369. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tests/test_skills_loader.py +0 -0
  370. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tests/test_subagents_extension.py +0 -0
  371. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tests/test_text_llm_invoke.py +0 -0
  372. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tests/test_theme_loader.py +0 -0
  373. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tests/test_themes_registry.py +0 -0
  374. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tests/test_tool_registry.py +0 -0
  375. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tests/test_tool_render.py +0 -0
  376. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tests/test_trust_manager.py +0 -0
  377. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tests/test_trust_utils.py +0 -0
  378. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tests/test_tui_capabilities.py +0 -0
  379. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tests/test_tui_layout_sizing.py +0 -0
  380. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tests/test_tui_select_list.py +0 -0
  381. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tests/test_tui_utils.py +0 -0
  382. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tests/test_version_check.py +0 -0
  383. {tau_coding_agent-0.4.8 → tau_coding_agent-0.5.1}/tests/test_voice_selector.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tau-coding-agent
3
- Version: 0.4.8
3
+ Version: 0.5.1
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
@@ -75,7 +75,7 @@ tau # Interactive mode
75
75
  tau --resume # Resume most recent session
76
76
  tau --model claude-sonnet-4-6 # Use specific model
77
77
  tau --print "Summarize this repo" # One-shot mode
78
- tau -p anthropic --print "Explain this code" # Print mode with provider
78
+ tau --provider anthropic --print "Explain this code" # Print mode with provider
79
79
  tau --mode rpc # RPC mode for IDE extensions
80
80
  ```
81
81
 
@@ -83,13 +83,13 @@ tau --mode rpc # RPC mode for IDE extensions
83
83
 
84
84
  ## Features
85
85
 
86
- - **Multi-provider LLM support** — Anthropic Claude, OpenAI GPT, Google Gemini, Mistral AI, Ollama, Azure OpenAI
86
+ - **Multi-provider LLM support** — Anthropic, OpenAI, Google Gemini, Mistral AI, Ollama, Groq, xAI, AWS Bedrock, OpenRouter, Z.ai, and more
87
87
  - **Terminal UI** — Built-in chat interface with syntax highlighting, markdown rendering, and keyboard navigation
88
88
  - **Rich media support** — Work with text files, images, audio files, and video files via file references or clipboard input
89
89
  - **Session management** — Persistent sessions with branching, forking, and resuming capabilities
90
- - **Tool execution** — Built-in tools (terminal, file I/O, web fetch) with sandboxed execution and extensibility
90
+ - **Tool execution** — Built-in tools (terminal, file I/O, search) with full user permissions and extensibility
91
91
  - **Plugin system** — Add custom tools, slash commands, hooks, themes, and skills without modifying core code
92
- - **16 built-in themes** — Dark and light themes including dracula, nord, gruvbox, catppuccin, ayu-dark, tokyo-night, rose-pine, and more
92
+ - **Themes** — Dark and light base themes, customizable and extensible via YAML
93
93
  - **Context management** — Automatic context compaction and branch summarization for long conversations
94
94
  - **Python API** — Embed Tau in your own applications programmatically
95
95
  - **Multiple run modes** — Interactive TUI, print mode (one-shot), JSON event stream, and JSON-RPC for IDE integration
@@ -174,7 +174,7 @@ See [SECURITY.md](SECURITY.md) for detailed practices and vulnerability reportin
174
174
  ```bash
175
175
  python -m pytest # Run tests
176
176
  pyright tau/ # Type checking
177
- python -m tau --mode tui # Launch from source
177
+ python -m tau # Launch from source
178
178
  ```
179
179
 
180
180
  See [Development Setup](docs/development.md) for detailed instructions.
@@ -41,7 +41,7 @@ tau # Interactive mode
41
41
  tau --resume # Resume most recent session
42
42
  tau --model claude-sonnet-4-6 # Use specific model
43
43
  tau --print "Summarize this repo" # One-shot mode
44
- tau -p anthropic --print "Explain this code" # Print mode with provider
44
+ tau --provider anthropic --print "Explain this code" # Print mode with provider
45
45
  tau --mode rpc # RPC mode for IDE extensions
46
46
  ```
47
47
 
@@ -49,13 +49,13 @@ tau --mode rpc # RPC mode for IDE extensions
49
49
 
50
50
  ## Features
51
51
 
52
- - **Multi-provider LLM support** — Anthropic Claude, OpenAI GPT, Google Gemini, Mistral AI, Ollama, Azure OpenAI
52
+ - **Multi-provider LLM support** — Anthropic, OpenAI, Google Gemini, Mistral AI, Ollama, Groq, xAI, AWS Bedrock, OpenRouter, Z.ai, and more
53
53
  - **Terminal UI** — Built-in chat interface with syntax highlighting, markdown rendering, and keyboard navigation
54
54
  - **Rich media support** — Work with text files, images, audio files, and video files via file references or clipboard input
55
55
  - **Session management** — Persistent sessions with branching, forking, and resuming capabilities
56
- - **Tool execution** — Built-in tools (terminal, file I/O, web fetch) with sandboxed execution and extensibility
56
+ - **Tool execution** — Built-in tools (terminal, file I/O, search) with full user permissions and extensibility
57
57
  - **Plugin system** — Add custom tools, slash commands, hooks, themes, and skills without modifying core code
58
- - **16 built-in themes** — Dark and light themes including dracula, nord, gruvbox, catppuccin, ayu-dark, tokyo-night, rose-pine, and more
58
+ - **Themes** — Dark and light base themes, customizable and extensible via YAML
59
59
  - **Context management** — Automatic context compaction and branch summarization for long conversations
60
60
  - **Python API** — Embed Tau in your own applications programmatically
61
61
  - **Multiple run modes** — Interactive TUI, print mode (one-shot), JSON event stream, and JSON-RPC for IDE integration
@@ -140,7 +140,7 @@ See [SECURITY.md](SECURITY.md) for detailed practices and vulnerability reportin
140
140
  ```bash
141
141
  python -m pytest # Run tests
142
142
  pyright tau/ # Type checking
143
- python -m tau --mode tui # Launch from source
143
+ python -m tau # Launch from source
144
144
  ```
145
145
 
146
146
  See [Development Setup](docs/development.md) for detailed instructions.
@@ -61,7 +61,7 @@ User input flows through these stages:
61
61
  | `console/` | CLI entry point, argument parsing |
62
62
  | `runtime/` | Orchestrates agent, session, engine, extensions |
63
63
  | `agent/` | Processes message turns, calls inference |
64
- | `engine/` | Executes tool calls and collects results |
64
+ | `engine/` | Standalone inference and tool-execution loop |
65
65
  | `inference/` | Unified interface to LLM providers |
66
66
 
67
67
  ### Data & State
@@ -79,7 +79,7 @@ User input flows through these stages:
79
79
 
80
80
  | Module | Purpose |
81
81
  |--------|---------|
82
- | `tui/` | Terminal UI (22 modules) |
82
+ | `tui/` | Standalone terminal rendering and component framework |
83
83
  | `extensions/` | Plugin system API |
84
84
  | `hooks/` | Event system for extensions |
85
85
  | `commands/` | Slash command registry |
@@ -141,6 +141,9 @@ Each agent turn follows this sequence:
141
141
  TUI overlays participate in focus lifecycle. Hiding or closing a capturing
142
142
  overlay restores the next visible overlay or its previous focus target.
143
143
  Components exposing `dispose()` are disposed when their overlay closes.
144
+ The reusable renderer, terminal, input, and component APIs are documented in
145
+ [Terminal UI](tui.md); runtime-aware composition lives in
146
+ `modes/interactive/`.
144
147
 
145
148
  Slash commands declare whether they require an idle agent. Idle-only commands
146
149
  are deferred until the current turn settles; UI-only and read-only commands may
@@ -204,7 +207,9 @@ class BaseAPI:
204
207
  ...
205
208
  ```
206
209
 
207
- The inference module handles provider-specific details (API keys, endpoints, format conversions).
210
+ The inference module handles provider-specific details (API keys, endpoints,
211
+ format conversions) and can also be used independently of the agent runtime.
212
+ See [Inference](inference.md) for its package boundaries and public clients.
208
213
 
209
214
  ## Tool Execution Model
210
215
 
@@ -219,10 +224,13 @@ Tools are executed in a sandboxed environment:
219
224
  6. Result is serialized and added to context
220
225
  ```
221
226
 
222
- Built-in tools (bash, read, write, edit, glob, grep, ls) are enabled by default.
227
+ Built-in tools (terminal, read, write, edit, glob, grep, ls) are enabled by default.
223
228
  `RuntimeConfig` can allow or exclude tools by name. Custom tools are registered
224
229
  via extensions or passed directly to the runtime.
225
230
 
231
+ The engine can also be embedded without the session-aware agent or runtime.
232
+ See [Engine](engine.md) for its public API and dependency boundary.
233
+
226
234
  Programmatic runtimes can replace constructed services through
227
235
  `RuntimeDependencies`. Typed factories cover settings, LLM/model/auth wiring,
228
236
  session storage, hooks, and the tool registry. Session-bound factories run
@@ -206,8 +206,8 @@ Events do **not** have an `id` field. Only responses do.
206
206
 
207
207
  | Command | Key fields | Description |
208
208
  |---------|-----------|-------------|
209
- | `bash` | `command` (required), `excludeFromContext?` | Run a shell command; output is added to the next LLM context |
210
- | `abort_bash` | — | Abort a running bash subprocess |
209
+ | `terminal` | `command` (required), `excludeFromContext?` | Run a shell command; output is added to the next LLM context |
210
+ | `abort_terminal` | — | Abort a running terminal subprocess |
211
211
 
212
212
  ##### Session
213
213
 
@@ -0,0 +1,242 @@
1
+ # Creating Tools
2
+
3
+ Tools are typed asynchronous operations that a model can request. A tool
4
+ defines its name, description, Pydantic input schema, execution policy, and
5
+ result handling.
6
+
7
+ Use this guide to implement and test a tool. See [Tools](tools.md) for the
8
+ built-in tool reference and execution model.
9
+
10
+ ## Implement a Tool
11
+
12
+ This example creates a read-only word-count tool:
13
+
14
+ ```python
15
+ from __future__ import annotations
16
+
17
+ from pathlib import Path
18
+
19
+ from pydantic import BaseModel, Field
20
+
21
+ from tau.tool.types import (
22
+ AbortSignal,
23
+ Tool,
24
+ ToolContext,
25
+ ToolExecutionMode,
26
+ ToolExecutionUpdateCallback,
27
+ ToolInvocation,
28
+ ToolKind,
29
+ ToolResult,
30
+ )
31
+
32
+
33
+ class WordCountParams(BaseModel):
34
+ """Validated parameters for the word-count tool."""
35
+
36
+ path: str = Field(description="Text file path, relative to the working directory.")
37
+
38
+
39
+ class WordCountTool(Tool):
40
+ """Count words in a UTF-8 text file."""
41
+
42
+ def __init__(self) -> None:
43
+ super().__init__(
44
+ name="word_count",
45
+ description="Count the words in a UTF-8 text file.",
46
+ schema=WordCountParams,
47
+ kind=ToolKind.Read,
48
+ execution_mode=ToolExecutionMode.Parallel,
49
+ )
50
+
51
+ async def execute(
52
+ self,
53
+ invocation: ToolInvocation,
54
+ tool_execution_update_callback: ToolExecutionUpdateCallback | None = None,
55
+ signal: AbortSignal | None = None,
56
+ context: ToolContext | None = None,
57
+ ) -> ToolResult:
58
+ params = WordCountParams.model_validate(invocation.params)
59
+
60
+ if signal is not None and signal.is_set():
61
+ return ToolResult.error(invocation.id, "Word count cancelled.")
62
+
63
+ base = context.cwd if context is not None and context.cwd is not None else Path.cwd()
64
+ path = Path(params.path)
65
+ if not path.is_absolute():
66
+ path = base / path
67
+
68
+ try:
69
+ content = path.read_text(encoding="utf-8")
70
+ except OSError as error:
71
+ return ToolResult.error(invocation.id, f"Cannot read {path}: {error}")
72
+
73
+ count = len(content.split())
74
+ return ToolResult.ok(
75
+ invocation.id,
76
+ f"{path}: {count} words",
77
+ metadata={"path": str(path), "word_count": count},
78
+ )
79
+ ```
80
+
81
+ The engine validates `invocation.params` against `schema` before execution.
82
+ Validating again inside `execute()` produces a typed parameter object and keeps
83
+ the tool safe when called directly in tests.
84
+
85
+ ## Define Clear Metadata
86
+
87
+ Constructor fields affect both model behavior and execution:
88
+
89
+ | Field | Guidance |
90
+ |-------|----------|
91
+ | `name` | Use a stable lowercase identifier with underscores |
92
+ | `description` | State what the tool does and when it should be used |
93
+ | `schema` | Use Pydantic fields with precise descriptions and constraints |
94
+ | `kind` | Classify the side effect as read, edit, write, execute, or web |
95
+ | `execution_mode` | Use parallel only when concurrent calls are safe |
96
+
97
+ Tools that mutate files, launch processes, or modify external state should
98
+ normally use `ToolExecutionMode.Sequential`. Read-only operations may use
99
+ `Parallel` when they do not share mutable state.
100
+
101
+ ## Return Results
102
+
103
+ Return model-facing text with one of the result constructors:
104
+
105
+ ```python
106
+ return ToolResult.ok(invocation.id, "Completed", metadata={"items": 3})
107
+ return ToolResult.error(invocation.id, "The requested file does not exist")
108
+ ```
109
+
110
+ Keep `content` concise and actionable. Use `metadata` for structured facts
111
+ needed by hooks or renderers, not for duplicating the complete text result.
112
+
113
+ For Markdown rendering of a successful result:
114
+
115
+ ```python
116
+ return ToolResult.ok(
117
+ invocation.id,
118
+ "## Results\n\n- First\n- Second",
119
+ metadata={"_render_format": "markdown"},
120
+ )
121
+ ```
122
+
123
+ ## Use Runtime Context
124
+
125
+ `ToolContext` provides optional runtime services:
126
+
127
+ | Attribute | Value |
128
+ |-----------|-------|
129
+ | `cwd` | Current engine working directory |
130
+ | `llm` | Active text inference client |
131
+ | `settings` | Active settings manager, when available |
132
+
133
+ Treat every attribute as optional because tools can be unit-tested or called
134
+ outside the complete runtime.
135
+
136
+ Long-running tools should check `signal.is_set()` at safe cancellation points.
137
+ Tools that produce incremental output can call
138
+ `tool_execution_update_callback` with partial `ToolResult` values.
139
+ High-frequency producers should throttle updates so they do not flood engine
140
+ events or terminal renders. Emit an initial update when work begins and a final
141
+ update matching the returned result.
142
+
143
+ ## Register the Tool
144
+
145
+ ### Project or Global Extension
146
+
147
+ Create `.tau/extensions/word_count.py` for one project, or
148
+ `~/.tau/extensions/word_count.py` for all projects:
149
+
150
+ ```python
151
+ from tau.extensions import ExtensionAPI
152
+
153
+
154
+ def register(tau: ExtensionAPI) -> None:
155
+ tau.register_tool(WordCountTool())
156
+ ```
157
+
158
+ Run `/reload` after changing an extension.
159
+
160
+ ### Python Runtime
161
+
162
+ Pass tool instances through `RuntimeConfig`:
163
+
164
+ ```python
165
+ from pathlib import Path
166
+
167
+ from tau.runtime.types import RuntimeConfig
168
+
169
+ config = RuntimeConfig(
170
+ cwd=Path.cwd(),
171
+ tools=[WordCountTool()],
172
+ )
173
+ ```
174
+
175
+ ### Standalone Engine
176
+
177
+ Supply tools to both `Engine` and `EngineContext`:
178
+
179
+ ```python
180
+ from pathlib import Path
181
+
182
+ from tau.engine import Engine, EngineContext
183
+ from tau.message.types import UserMessage
184
+
185
+ tools = [WordCountTool()]
186
+ engine = Engine(cwd=Path.cwd(), llm=llm, tools=tools)
187
+
188
+ await engine.run(
189
+ EngineContext(
190
+ system_prompt="Use tools when they answer the request.",
191
+ messages=[UserMessage.from_text("Count the words in README.md")],
192
+ tools=tools,
193
+ )
194
+ )
195
+ ```
196
+
197
+ See [Engine](engine.md) for standalone lifecycle and event handling.
198
+
199
+ ## Test the Tool
200
+
201
+ Test execution without making an inference request:
202
+
203
+ ```python
204
+ from pathlib import Path
205
+
206
+ import pytest
207
+
208
+ from tau.tool.types import ToolContext, ToolInvocation
209
+
210
+
211
+ @pytest.mark.asyncio
212
+ async def test_word_count(tmp_path: Path) -> None:
213
+ source = tmp_path / "sample.txt"
214
+ source.write_text("one two three", encoding="utf-8")
215
+ tool = WordCountTool()
216
+
217
+ result = await tool.execute(
218
+ ToolInvocation(
219
+ id="call-1",
220
+ name=tool.name,
221
+ cwd=tmp_path,
222
+ params={"path": "sample.txt"},
223
+ ),
224
+ context=ToolContext(cwd=tmp_path),
225
+ )
226
+
227
+ assert not result.is_error
228
+ assert result.metadata["word_count"] == 3
229
+ ```
230
+
231
+ Also test invalid parameters, missing resources, cancellation, and concurrent
232
+ execution when the tool declares parallel safety.
233
+
234
+ ## Checklist
235
+
236
+ - Parameter types and constraints are expressed in the Pydantic schema.
237
+ - The description explains when the model should call the tool.
238
+ - Side effects match `ToolKind` and `ToolExecutionMode`.
239
+ - Errors are returned as `ToolResult.error`, not leaked as raw tracebacks.
240
+ - Paths are resolved against `ToolContext.cwd`.
241
+ - Cancellation is checked during long operations.
242
+ - Unit tests cover success and failure paths.
@@ -128,40 +128,30 @@ ruff format tau/
128
128
  4. Test manually:
129
129
  ```bash
130
130
  tau -p "test prompt"
131
- tau --list-models
132
131
  ```
133
132
 
134
133
  ## Testing
135
134
 
136
135
  ### Test Structure
137
136
 
138
- Tests are organized by module:
137
+ Tests are organized by module, with granular filenames per submodule:
139
138
 
140
139
  ```text
141
140
  tests/
142
- ├── test_agent.py
143
- ├── test_inference.py
144
- ├── test_engine.py
145
- └── test_tui.py
141
+ ├── test_agent_compaction.py
142
+ ├── test_agent_prompt.py
143
+ ├── test_agent_types.py
144
+ ├── test_inference_dialect.py
145
+ ├── test_inference_types.py
146
+ ├── test_engine_execution.py
147
+ ├── test_engine_steering.py
148
+ ├── test_tui_renderer.py
149
+ └── ...
146
150
  ```
147
151
 
148
152
  ### Writing Tests
149
153
 
150
- Use pytest:
151
-
152
- ```python
153
- import pytest
154
- from tau.agent import Agent
155
-
156
- def test_agent_creation():
157
- agent = Agent(client=MockClient())
158
- assert agent is not None
159
-
160
- def test_agent_run():
161
- agent = Agent(client=MockClient())
162
- result = agent.run("test prompt")
163
- assert "result" in result.lower()
164
- ```
154
+ Use pytest, following the existing patterns in `tests/`.
165
155
 
166
156
  ### Running Tests
167
157
 
@@ -172,11 +162,8 @@ python -m pytest
172
162
  # Run with verbose output
173
163
  python -m pytest -v
174
164
 
175
- # Run with coverage
176
- python -m pytest --cov=tau
177
-
178
- # Run specific test file
179
- python -m pytest tests/test_agent.py
165
+ # Run a specific module's tests
166
+ python -m pytest tests/test_agent_compaction.py
180
167
  ```
181
168
 
182
169
  ## Debugging
@@ -28,6 +28,18 @@
28
28
  {
29
29
  "title": "Core Concepts",
30
30
  "items": [
31
+ {
32
+ "title": "Inference",
33
+ "path": "inference.md"
34
+ },
35
+ {
36
+ "title": "Engine",
37
+ "path": "engine.md"
38
+ },
39
+ {
40
+ "title": "Terminal UI",
41
+ "path": "tui.md"
42
+ },
31
43
  {
32
44
  "title": "Inference Providers",
33
45
  "path": "inference-providers.md"
@@ -44,6 +56,10 @@
44
56
  "title": "Tools",
45
57
  "path": "tools.md"
46
58
  },
59
+ {
60
+ "title": "Creating Tools",
61
+ "path": "creating-tools.md"
62
+ },
47
63
  {
48
64
  "title": "Project Context",
49
65
  "path": "project-context.md"
@@ -0,0 +1,114 @@
1
+ # Engine
2
+
3
+ `tau.engine` is Tau's standalone text-inference and tool-execution loop. It can
4
+ be embedded directly when an application needs agentic model/tool iteration
5
+ without Tau's sessions, compaction, extensions, runtime lifecycle, or terminal
6
+ UI.
7
+
8
+ Use [Inference](inference.md) instead when the application only needs a single
9
+ model request and will manage tool calls itself. Use the
10
+ [Python API](python-api.md) when the application needs the complete Tau runtime.
11
+
12
+ ## Responsibilities
13
+
14
+ The engine:
15
+
16
+ - streams normalized text inference events
17
+ - accumulates assistant messages
18
+ - validates and executes requested tools
19
+ - runs safe tool batches sequentially or concurrently
20
+ - emits message, turn, tool, and engine lifecycle events
21
+ - supports steering, follow-up messages, continuation, and cancellation
22
+
23
+ The engine does not persist messages, compact context, discover extensions,
24
+ construct the application system prompt, or manage the user interface.
25
+ `tau.agent` owns session-aware orchestration around the engine, while
26
+ `tau.runtime` constructs and connects the full application.
27
+
28
+ ## Public API
29
+
30
+ | Type | Purpose |
31
+ |------|---------|
32
+ | `Engine` | Streaming inference and tool-execution service |
33
+ | `EngineContext` | System prompt, message history, and tools for one run |
34
+ | `EngineOptions` | Execution strategy and lifecycle callbacks |
35
+ | `EngineState` | Observable mutable execution state |
36
+
37
+ The former `Agent` and `AgentState` names remain compatibility aliases, and
38
+ `AgentOptions` is the descriptive compatibility name for `EngineOptions`.
39
+ New code should use the explicit `Engine` names.
40
+
41
+ ## Basic Example
42
+
43
+ ```python
44
+ import asyncio
45
+ from pathlib import Path
46
+
47
+ from tau.engine import Engine, EngineContext, MessageEndEvent
48
+ from tau.inference.api.text.service import TextLLM
49
+ from tau.message.types import UserMessage
50
+
51
+
52
+ async def main() -> None:
53
+ llm = TextLLM("gpt-4o")
54
+ engine = Engine(cwd=Path.cwd(), llm=llm, tools=[])
55
+
56
+ def print_completed_message(event: object) -> None:
57
+ if isinstance(event, MessageEndEvent):
58
+ print(event.message)
59
+
60
+ await engine.subscribe(print_completed_message)
61
+ await engine.run(
62
+ EngineContext(
63
+ system_prompt="Answer concisely.",
64
+ messages=[UserMessage.from_text("What does an execution engine do?")],
65
+ )
66
+ )
67
+
68
+
69
+ asyncio.run(main())
70
+ ```
71
+
72
+ Configure the model provider before running the example. See
73
+ [Inference Providers](inference-providers.md).
74
+
75
+ ## Supplying Tools
76
+
77
+ Pass the same tool objects to both the engine and the run context:
78
+
79
+ ```python
80
+ tools = [read_tool, terminal_tool]
81
+ engine = Engine(cwd=Path.cwd(), llm=llm, tools=tools)
82
+
83
+ await engine.run(
84
+ EngineContext(
85
+ system_prompt="Use tools when needed.",
86
+ messages=[UserMessage.from_text("Inspect this project.")],
87
+ tools=tools,
88
+ )
89
+ )
90
+ ```
91
+
92
+ Tools declare their own execution safety. A batch runs concurrently only when
93
+ every tool in that batch permits parallel execution; otherwise source order is
94
+ preserved.
95
+
96
+ ## Lifecycle Control
97
+
98
+ - `subscribe(handler)` observes engine events and returns an unsubscribe
99
+ callback.
100
+ - `steer(message)` injects guidance during an active tool loop.
101
+ - `follow_up(message)` queues another user message after a natural stop.
102
+ - `abort()` cancels the active stream at the next safe boundary.
103
+ - `run_continue()` resumes from the engine's current in-memory history.
104
+ - `wait_for_idle()` waits until the active loop exits.
105
+
106
+ Engine history is in memory only. Applications using the engine directly are
107
+ responsible for durable storage and for constructing the next
108
+ `EngineContext`.
109
+
110
+ ## Dependency Boundary
111
+
112
+ `tau.engine` depends on inference, messages, tools, hooks, and optional
113
+ settings. It must not import session, extension, TUI, runtime, or agent
114
+ services. This keeps the engine independently testable and embeddable.
@@ -445,7 +445,7 @@ Use the explicit `group` type when you want the sub-panel to have a header label
445
445
  #### Basic example
446
446
 
447
447
  ```python
448
- from tau.tui.components.settings_modal import SettingItem
448
+ from tau.modes.interactive.components.settings_selector import SettingItem
449
449
 
450
450
  def register(tau):
451
451
  def on_change(key, value):
@@ -130,6 +130,8 @@ async def register(tau):
130
130
  ## Tools
131
131
 
132
132
  Import from `tau.tool.types`. Use a Pydantic `BaseModel` for the parameter schema.
133
+ For a focused walkthrough covering implementation, registration, and testing,
134
+ see [Creating Tools](creating-tools.md).
133
135
 
134
136
  ```python
135
137
  from pydantic import BaseModel, Field
@@ -1188,7 +1190,7 @@ def my_footer(tui, theme):
1188
1190
  return StaticComponent([f" {theme.primary}Custom footer{RESET} "])
1189
1191
 
1190
1192
  # With TUI + theme + live data (recommended)
1191
- from tau.tui.ui_context import FooterData
1193
+ from tau.modes.interactive.ui_context import FooterData
1192
1194
 
1193
1195
  def my_footer(tui, theme, data: FooterData):
1194
1196
  branch = data.git_branch or "detached"
@@ -1328,7 +1330,7 @@ ctx.ui.paste_to_editor("@file.py ") # insert at cursor position
1328
1330
 
1329
1331
  ```python
1330
1332
  names = ctx.ui.get_all_themes() # list[str] of theme names
1331
- ok = ctx.ui.set_theme("dracula") # True on success, False if unknown
1333
+ ok = ctx.ui.set_theme("dark") # True on success, False if unknown
1332
1334
  theme = ctx.ui.theme # LayoutTheme — current active theme
1333
1335
  ```
1334
1336
 
@@ -124,7 +124,8 @@ api_base = "https://api.example.com"
124
124
  proxies = get_proxies_for_client(api_base, settings_manager)
125
125
  headers = get_proxy_headers(settings_manager)
126
126
 
127
- async with httpx.AsyncClient(proxies=proxies, headers=headers) as client:
127
+ mounts = {s: httpx.AsyncHTTPTransport(proxy=u) for s, u in proxies.items()} if proxies else None
128
+ async with httpx.AsyncClient(mounts=mounts, headers=headers) as client:
128
129
  response = await client.get(f"{api_base}/v1/models")
129
130
  ```
130
131
 
@@ -144,7 +145,8 @@ headers = {
144
145
  **proxy_headers, # Include custom proxy headers
145
146
  }
146
147
 
147
- async with httpx.AsyncClient(proxies=proxies, headers=headers) as client:
148
+ mounts = {s: httpx.AsyncHTTPTransport(proxy=u) for s, u in proxies.items()} if proxies else None
149
+ async with httpx.AsyncClient(mounts=mounts, headers=headers) as client:
148
150
  response = await client.get(f"{api_base}/v1/models")
149
151
  ```
150
152
 
@@ -159,9 +161,9 @@ proxy_url = get_proxy_url_for_target(api_base)
159
161
 
160
162
  client_kwargs = {}
161
163
  if proxy_url:
162
- client_kwargs["proxies"] = {
163
- "http://": proxy_url,
164
- "https://": proxy_url,
164
+ client_kwargs["mounts"] = {
165
+ "http://": httpx.AsyncHTTPTransport(proxy=proxy_url),
166
+ "https://": httpx.AsyncHTTPTransport(proxy=proxy_url),
165
167
  }
166
168
 
167
169
  async with httpx.AsyncClient(**client_kwargs) as client:
@@ -334,7 +336,8 @@ from tau.utils.http_proxy import get_proxies_for_client
334
336
  import httpx
335
337
 
336
338
  proxies = get_proxies_for_client("https://api.example.com")
337
- async with httpx.AsyncClient(proxies=proxies) as client:
339
+ mounts = {s: httpx.AsyncHTTPTransport(proxy=u) for s, u in proxies.items()} if proxies else None
340
+ async with httpx.AsyncClient(mounts=mounts) as client:
338
341
  response = await client.get("...")
339
342
  ```
340
343