tau-coding-agent 0.4.6__tar.gz → 0.4.7__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 (364) hide show
  1. {tau_coding_agent-0.4.6/tau_coding_agent.egg-info → tau_coding_agent-0.4.7}/PKG-INFO +2 -1
  2. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/docs/cli-reference.md +7 -0
  3. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/docs/docs.json +4 -0
  4. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/docs/extensions.md +28 -0
  5. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/docs/index.md +1 -0
  6. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/docs/messages.md +16 -9
  7. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/docs/project-context.md +20 -13
  8. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/docs/python-api.md +26 -1
  9. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/docs/settings.md +16 -4
  10. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/docs/tools.md +34 -18
  11. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/docs/usage.md +13 -3
  12. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/pyproject.toml +2 -1
  13. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/agent/prompt/builder.py +93 -44
  14. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/agent/prompt/types.py +4 -3
  15. tau_coding_agent-0.4.7/tau/builtins/extensions/btw/__init__.py +303 -0
  16. tau_coding_agent-0.4.7/tau/builtins/extensions/watch/__init__.py +219 -0
  17. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/builtins/models/text.py +42 -0
  18. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/builtins/tools/edit.py +12 -4
  19. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/builtins/tools/glob.py +7 -3
  20. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/builtins/tools/grep.py +6 -2
  21. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/builtins/tools/ls.py +7 -2
  22. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/builtins/tools/read.py +7 -5
  23. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/builtins/tools/terminal.py +4 -4
  24. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/builtins/tools/write.py +1 -1
  25. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/console/cli.py +1 -1
  26. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/engine/service.py +16 -0
  27. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/engine/types.py +9 -1
  28. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/hooks/engine.py +2 -1
  29. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/inference/api/text/anthropic_claude_code.py +9 -2
  30. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/inference/api/text/anthropic_messages.py +9 -2
  31. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/inference/api/text/anthropic_vertex.py +9 -2
  32. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/inference/api/text/service.py +2 -0
  33. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/inference/types.py +1 -0
  34. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/modes/interactive/app.py +2 -0
  35. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/modes/interactive/commands/appearance.py +85 -69
  36. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/modes/interactive/commands/model.py +44 -4
  37. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/modes/interactive/components/config_selector.py +15 -21
  38. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/modes/interactive/components/extension_selector.py +5 -5
  39. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/modes/interactive/components/layout.py +35 -1
  40. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/modes/interactive/components/message_list.py +43 -6
  41. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/modes/interactive/components/model_selector.py +99 -46
  42. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/modes/interactive/components/oauth_selector.py +5 -5
  43. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/modes/interactive/components/overlays.py +201 -30
  44. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/modes/interactive/components/selector_controller.py +12 -5
  45. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/modes/interactive/components/session_selector.py +95 -83
  46. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/modes/interactive/components/settings_selector.py +85 -38
  47. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/modes/interactive/components/theme_selector.py +5 -5
  48. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/modes/interactive/components/thinking_selector.py +3 -4
  49. tau_coding_agent-0.4.7/tau/modes/interactive/components/voice_selector.py +96 -0
  50. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/session/manager.py +2 -1
  51. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/session/utils.py +33 -25
  52. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/settings/manager.py +14 -3
  53. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/settings/types.py +2 -1
  54. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/tui/markdown.py +17 -4
  55. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/tui/terminal.py +27 -0
  56. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/tui/theme.py +5 -0
  57. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/tui/tui.py +19 -2
  58. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7/tau_coding_agent.egg-info}/PKG-INFO +2 -1
  59. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau_coding_agent.egg-info/SOURCES.txt +8 -1
  60. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau_coding_agent.egg-info/requires.txt +1 -0
  61. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tests/test_agent_prompt.py +51 -10
  62. tau_coding_agent-0.4.7/tests/test_builtin_watch.py +64 -0
  63. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tests/test_engine_execution.py +2 -2
  64. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tests/test_engine_steering.py +26 -0
  65. tau_coding_agent-0.4.7/tests/test_model_command.py +72 -0
  66. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tests/test_model_selector_modal.py +119 -6
  67. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tests/test_selector_controller.py +26 -0
  68. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tests/test_session_manager.py +32 -2
  69. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tests/test_settings_manager.py +15 -1
  70. tau_coding_agent-0.4.7/tests/test_subagents_extension.py +267 -0
  71. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tests/test_thinking_render.py +22 -1
  72. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tests/test_tool_render.py +55 -1
  73. tau_coding_agent-0.4.7/tests/test_voice_selector.py +46 -0
  74. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/LICENSE +0 -0
  75. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/MANIFEST.in +0 -0
  76. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/README.md +0 -0
  77. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/docs/IMPLEMENTATION_SUMMARY.md +0 -0
  78. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/docs/architecture.md +0 -0
  79. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/docs/auth.md +0 -0
  80. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/docs/development.md +0 -0
  81. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/docs/extension-settings.md +0 -0
  82. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/docs/http-proxy.md +0 -0
  83. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/docs/inference-providers.md +0 -0
  84. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/docs/installation.md +0 -0
  85. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/docs/keybindings.md +0 -0
  86. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/docs/project-structure.md +0 -0
  87. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/docs/prompts.md +0 -0
  88. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/docs/quickstart.md +0 -0
  89. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/docs/sessions.md +0 -0
  90. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/docs/skills.md +0 -0
  91. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/docs/themes.md +0 -0
  92. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/setup.cfg +0 -0
  93. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/__init__.py +0 -0
  94. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/agent/__init__.py +0 -0
  95. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/agent/prompt/__init__.py +0 -0
  96. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/agent/service.py +0 -0
  97. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/agent/types.py +0 -0
  98. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/auth/manager.py +0 -0
  99. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/auth/storage.py +0 -0
  100. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/auth/types.py +0 -0
  101. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/builtins/__init__.py +0 -0
  102. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/builtins/commands/__init__.py +0 -0
  103. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/builtins/commands/clear.py +0 -0
  104. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/builtins/commands/compact.py +0 -0
  105. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/builtins/commands/reload.py +0 -0
  106. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/builtins/commands/session.py +0 -0
  107. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/builtins/extensions/footer/__init__.py +0 -0
  108. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/builtins/extensions/footer/git.py +0 -0
  109. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/builtins/extensions/footer/model.py +0 -0
  110. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/builtins/extensions/footer/utils.py +0 -0
  111. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/builtins/extensions/header/__init__.py +0 -0
  112. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/builtins/models/__init__.py +0 -0
  113. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/builtins/models/audio.py +0 -0
  114. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/builtins/models/image.py +0 -0
  115. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/builtins/models/video.py +0 -0
  116. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/builtins/prompts/commit.md +0 -0
  117. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/builtins/prompts/docs.md +0 -0
  118. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/builtins/prompts/explain.md +0 -0
  119. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/builtins/prompts/fix.md +0 -0
  120. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/builtins/prompts/refactor.md +0 -0
  121. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/builtins/prompts/review.md +0 -0
  122. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/builtins/prompts/test.md +0 -0
  123. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/builtins/providers/__init__.py +0 -0
  124. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/builtins/providers/audio.py +0 -0
  125. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/builtins/providers/image.py +0 -0
  126. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/builtins/providers/text.py +0 -0
  127. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/builtins/providers/video.py +0 -0
  128. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/builtins/skills/code-review/SKILL.md +0 -0
  129. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/builtins/skills/debug/SKILL.md +0 -0
  130. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/builtins/skills/git-commit/SKILL.md +0 -0
  131. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/builtins/themes/dark.yaml +0 -0
  132. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/builtins/themes/light.yaml +0 -0
  133. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/builtins/tools/__init__.py +0 -0
  134. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/builtins/tools/utils.py +0 -0
  135. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/commands/__init__.py +0 -0
  136. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/commands/registry.py +0 -0
  137. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/commands/types.py +0 -0
  138. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/console/__init__.py +0 -0
  139. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/console/commands/__init__.py +0 -0
  140. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/console/commands/auth.py +0 -0
  141. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/console/commands/packages.py +0 -0
  142. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/console/commands/update.py +0 -0
  143. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/core/__init__.py +0 -0
  144. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/core/registry.py +0 -0
  145. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/engine/__init__.py +0 -0
  146. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/extensions/__init__.py +0 -0
  147. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/extensions/api.py +0 -0
  148. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/extensions/context.py +0 -0
  149. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/extensions/loader.py +0 -0
  150. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/extensions/runtime.py +0 -0
  151. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/extensions/settings.py +0 -0
  152. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/hooks/__init__.py +0 -0
  153. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/hooks/inference.py +0 -0
  154. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/hooks/runtime.py +0 -0
  155. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/hooks/service.py +0 -0
  156. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/hooks/session.py +0 -0
  157. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/hooks/tui.py +0 -0
  158. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/hooks/types.py +0 -0
  159. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/inference/__init__.py +0 -0
  160. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/inference/api/__init__.py +0 -0
  161. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/inference/api/audio/__init__.py +0 -0
  162. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/inference/api/audio/base.py +0 -0
  163. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/inference/api/audio/builtins.py +0 -0
  164. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/inference/api/audio/elevenlabs_audio.py +0 -0
  165. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/inference/api/audio/gemini_audio.py +0 -0
  166. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/inference/api/audio/openai_audio.py +0 -0
  167. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/inference/api/audio/registry.py +0 -0
  168. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/inference/api/audio/sarvam_audio.py +0 -0
  169. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/inference/api/audio/service.py +0 -0
  170. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/inference/api/audio/utils.py +0 -0
  171. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/inference/api/availability.py +0 -0
  172. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/inference/api/image/__init__.py +0 -0
  173. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/inference/api/image/base.py +0 -0
  174. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/inference/api/image/builtins.py +0 -0
  175. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/inference/api/image/gemini_image.py +0 -0
  176. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/inference/api/image/openai_image.py +0 -0
  177. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/inference/api/image/openrouter.py +0 -0
  178. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/inference/api/image/registry.py +0 -0
  179. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/inference/api/image/service.py +0 -0
  180. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/inference/api/registry.py +0 -0
  181. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/inference/api/text/__init__.py +0 -0
  182. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/inference/api/text/base.py +0 -0
  183. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/inference/api/text/builtins.py +0 -0
  184. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/inference/api/text/gemini_generate.py +0 -0
  185. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/inference/api/text/github_copilot_chat.py +0 -0
  186. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/inference/api/text/google_antigravity.py +0 -0
  187. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/inference/api/text/google_vertex.py +0 -0
  188. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/inference/api/text/mistral_chat.py +0 -0
  189. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/inference/api/text/ollama_chat.py +0 -0
  190. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/inference/api/text/openai_codex_responses.py +0 -0
  191. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/inference/api/text/openai_completions.py +0 -0
  192. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/inference/api/text/openai_responses.py +0 -0
  193. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/inference/api/text/openai_vertex.py +0 -0
  194. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/inference/api/text/registry.py +0 -0
  195. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/inference/api/text/types.py +0 -0
  196. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/inference/api/text/utils.py +0 -0
  197. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/inference/api/video/__init__.py +0 -0
  198. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/inference/api/video/base.py +0 -0
  199. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/inference/api/video/builtins.py +0 -0
  200. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/inference/api/video/fal_video.py +0 -0
  201. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/inference/api/video/openrouter_video.py +0 -0
  202. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/inference/api/video/registry.py +0 -0
  203. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/inference/api/video/service.py +0 -0
  204. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/inference/model/__init__.py +0 -0
  205. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/inference/model/registry.py +0 -0
  206. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/inference/model/types.py +0 -0
  207. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/inference/provider/__init__.py +0 -0
  208. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/inference/provider/oauth/__init__.py +0 -0
  209. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/inference/provider/oauth/anthropic_claude_code.py +0 -0
  210. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/inference/provider/oauth/github_copilot.py +0 -0
  211. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/inference/provider/oauth/google_antigravity.py +0 -0
  212. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/inference/provider/oauth/openai_codex.py +0 -0
  213. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/inference/provider/oauth/pkce.py +0 -0
  214. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/inference/provider/oauth/types.py +0 -0
  215. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/inference/provider/oauth/utils.py +0 -0
  216. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/inference/provider/registry.py +0 -0
  217. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/inference/provider/types.py +0 -0
  218. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/inference/utils.py +0 -0
  219. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/message/__init__.py +0 -0
  220. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/message/types.py +0 -0
  221. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/message/utils.py +0 -0
  222. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/modes/__init__.py +0 -0
  223. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/modes/interactive/__init__.py +0 -0
  224. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/modes/interactive/agent_hooks.py +0 -0
  225. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/modes/interactive/commands/__init__.py +0 -0
  226. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/modes/interactive/commands/auth.py +0 -0
  227. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/modes/interactive/commands/context.py +0 -0
  228. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/modes/interactive/commands/extensions.py +0 -0
  229. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/modes/interactive/commands/misc.py +0 -0
  230. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/modes/interactive/commands/session.py +0 -0
  231. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/modes/interactive/components/__init__.py +0 -0
  232. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/modes/interactive/components/command_palette.py +0 -0
  233. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/modes/interactive/components/file_picker.py +0 -0
  234. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/modes/interactive/components/tree_selector.py +0 -0
  235. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/modes/interactive/components/trust_screen.py +0 -0
  236. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/modes/interactive/input_handler.py +0 -0
  237. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/modes/print/__init__.py +0 -0
  238. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/modes/rpc/__init__.py +0 -0
  239. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/modes/rpc/mode.py +0 -0
  240. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/modes/rpc/types.py +0 -0
  241. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/packages/__init__.py +0 -0
  242. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/packages/manager.py +0 -0
  243. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/packages/types.py +0 -0
  244. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/packages/utils.py +0 -0
  245. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/prompts/expand.py +0 -0
  246. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/prompts/loader.py +0 -0
  247. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/prompts/registry.py +0 -0
  248. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/prompts/types.py +0 -0
  249. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/resources/__init__.py +0 -0
  250. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/resources/loader.py +0 -0
  251. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/resources/types.py +0 -0
  252. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/runtime/dependencies.py +0 -0
  253. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/runtime/service.py +0 -0
  254. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/runtime/types.py +0 -0
  255. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/session/branch_summarization.py +0 -0
  256. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/session/compaction.py +0 -0
  257. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/session/types.py +0 -0
  258. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/settings/paths.py +0 -0
  259. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/settings/storage.py +0 -0
  260. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/settings/utils.py +0 -0
  261. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/skills/loader.py +0 -0
  262. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/skills/registry.py +0 -0
  263. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/skills/types.py +0 -0
  264. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/themes/loader.py +0 -0
  265. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/themes/registry.py +0 -0
  266. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/themes/types.py +0 -0
  267. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/tool/__init__.py +0 -0
  268. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/tool/registry.py +0 -0
  269. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/tool/render.py +0 -0
  270. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/tool/types.py +0 -0
  271. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/trust/__init__.py +0 -0
  272. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/trust/manager.py +0 -0
  273. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/trust/types.py +0 -0
  274. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/trust/utils.py +0 -0
  275. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/tui/__init__.py +0 -0
  276. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/tui/autocomplete.py +0 -0
  277. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/tui/component.py +0 -0
  278. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/tui/components/__init__.py +0 -0
  279. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/tui/components/box.py +0 -0
  280. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/tui/components/editor.py +0 -0
  281. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/tui/components/image.py +0 -0
  282. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/tui/components/select_list.py +0 -0
  283. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/tui/components/spinner.py +0 -0
  284. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/tui/components/text_input.py +0 -0
  285. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/tui/input.py +0 -0
  286. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/tui/keybinding_hints.py +0 -0
  287. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/tui/ui_context.py +0 -0
  288. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/tui/utils.py +0 -0
  289. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/utils/__init__.py +0 -0
  290. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/utils/http_proxy.py +0 -0
  291. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/utils/image_processing.py +0 -0
  292. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/utils/secrets.py +0 -0
  293. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau/utils/version_check.py +0 -0
  294. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau_coding_agent.egg-info/dependency_links.txt +0 -0
  295. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau_coding_agent.egg-info/entry_points.txt +0 -0
  296. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tau_coding_agent.egg-info/top_level.txt +0 -0
  297. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tests/test_agent_compaction.py +0 -0
  298. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tests/test_agent_types.py +0 -0
  299. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tests/test_ansi.py +0 -0
  300. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tests/test_auth_command.py +0 -0
  301. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tests/test_auth_manager.py +0 -0
  302. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tests/test_auth_storage.py +0 -0
  303. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tests/test_branch_navigation.py +0 -0
  304. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tests/test_branch_summarization.py +0 -0
  305. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tests/test_builtin_tools.py +0 -0
  306. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tests/test_cli_inputs.py +0 -0
  307. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tests/test_command_execution_policy.py +0 -0
  308. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tests/test_command_registry.py +0 -0
  309. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tests/test_compaction.py +0 -0
  310. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tests/test_diff.py +0 -0
  311. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tests/test_editor_protocol.py +0 -0
  312. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tests/test_engine_types.py +0 -0
  313. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tests/test_extension_api.py +0 -0
  314. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tests/test_extension_lifecycle.py +0 -0
  315. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tests/test_footer_model.py +0 -0
  316. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tests/test_footer_utils.py +0 -0
  317. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tests/test_fuzzy.py +0 -0
  318. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tests/test_http_proxy.py +0 -0
  319. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tests/test_image_processing.py +0 -0
  320. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tests/test_inference_api_text_utils.py +0 -0
  321. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tests/test_inference_error_utils.py +0 -0
  322. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tests/test_inference_types.py +0 -0
  323. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tests/test_inference_utils.py +0 -0
  324. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tests/test_keybindings.py +0 -0
  325. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tests/test_markdown.py +0 -0
  326. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tests/test_message_types.py +0 -0
  327. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tests/test_message_utils.py +0 -0
  328. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tests/test_model_availability.py +0 -0
  329. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tests/test_model_registry.py +0 -0
  330. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tests/test_model_types.py +0 -0
  331. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tests/test_oauth_utils.py +0 -0
  332. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tests/test_package_resources.py +0 -0
  333. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tests/test_packages_utils.py +0 -0
  334. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tests/test_pkce.py +0 -0
  335. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tests/test_prompts_expand.py +0 -0
  336. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tests/test_prompts_loader.py +0 -0
  337. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tests/test_prompts_registry.py +0 -0
  338. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tests/test_provider_registry.py +0 -0
  339. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tests/test_resource_loader.py +0 -0
  340. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tests/test_rpc_mode.py +0 -0
  341. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tests/test_runtime_sdk.py +0 -0
  342. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tests/test_secrets.py +0 -0
  343. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tests/test_session_trust_persist.py +0 -0
  344. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tests/test_session_types.py +0 -0
  345. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tests/test_session_utils.py +0 -0
  346. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tests/test_settings_paths.py +0 -0
  347. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tests/test_settings_storage.py +0 -0
  348. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tests/test_settings_utils.py +0 -0
  349. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tests/test_skills_loader.py +0 -0
  350. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tests/test_skills_registry.py +0 -0
  351. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tests/test_text_input.py +0 -0
  352. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tests/test_text_llm_invoke.py +0 -0
  353. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tests/test_theme_loader.py +0 -0
  354. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tests/test_themes_registry.py +0 -0
  355. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tests/test_tool_registry.py +0 -0
  356. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tests/test_trust_manager.py +0 -0
  357. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tests/test_trust_utils.py +0 -0
  358. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tests/test_tui_capabilities.py +0 -0
  359. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tests/test_tui_input.py +0 -0
  360. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tests/test_tui_layout_sizing.py +0 -0
  361. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tests/test_tui_theme.py +0 -0
  362. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tests/test_tui_utils.py +0 -0
  363. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tests/test_ui_context.py +0 -0
  364. {tau_coding_agent-0.4.6 → tau_coding_agent-0.4.7}/tests/test_version_check.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tau-coding-agent
3
- Version: 0.4.6
3
+ Version: 0.4.7
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
@@ -26,6 +26,7 @@ Requires-Dist: pygments==2.20.0
26
26
  Requires-Dist: pathspec==1.1.1
27
27
  Requires-Dist: gitpython==3.1.50
28
28
  Requires-Dist: grapheme==0.6.0
29
+ Requires-Dist: arrow==1.4.0
29
30
  Provides-Extra: tools
30
31
  Requires-Dist: ripgrep>=14.0.0; extra == "tools"
31
32
  Dynamic: license-file
@@ -31,6 +31,13 @@ augment it.
31
31
 
32
32
  ## Run Modes
33
33
 
34
+ ## Interactive Commands
35
+
36
+ `/watch <url> [question]` loads metadata and available English captions for a
37
+ public video through `yt-dlp`, then sends them to the active model. Install
38
+ `yt-dlp` separately and ensure it is available on `PATH`. Video frames and
39
+ audio transcription are not performed.
40
+
34
41
  ### Interactive (default)
35
42
 
36
43
  Start the full terminal UI:
@@ -43,6 +43,10 @@
43
43
  {
44
44
  "title": "Tools",
45
45
  "path": "tools.md"
46
+ },
47
+ {
48
+ "title": "Project Context",
49
+ "path": "project-context.md"
46
50
  }
47
51
  ]
48
52
  },
@@ -487,6 +487,34 @@ def register(tau):
487
487
  | `input` | `text`, `source` | `InputEventResult` | New user message received. `source`: `interactive \| rpc \| extension \| queue`. Return `action="transform"` with `text=` to replace, or `action="handled"` to suppress |
488
488
  | `context` | `messages` | `ContextEventResult` | Full message history about to be sent to LLM. Return `messages=` to rewrite it |
489
489
 
490
+ For dynamic browser or computer-use state that must be refreshed before every
491
+ LLM request without being persisted, return `ephemeral_messages` from a
492
+ `context` handler:
493
+
494
+ ```python
495
+ from tau.hooks import ContextEventResult
496
+ from tau.message.types import UserMessage
497
+
498
+ def register(tau):
499
+ @tau.on("context")
500
+ async def inject_state(event, ctx):
501
+ screenshot = await capture_screen()
502
+ return ContextEventResult(
503
+ ephemeral_messages=[
504
+ UserMessage.with_images(
505
+ "Current browser state",
506
+ images=[screenshot],
507
+ )
508
+ ]
509
+ )
510
+ ```
511
+
512
+ The hook runs before every inference, including after tool execution.
513
+ `ephemeral_messages` must contain only `UserMessage` objects. They are appended
514
+ only to the provider request, are not persisted, and are excluded from
515
+ Anthropic prompt-cache breakpoints. Use `messages=` in the same result to
516
+ replace the stable request context.
517
+
490
518
  **Streaming & messages**
491
519
 
492
520
  | Event | Payload fields | Result type | Description |
@@ -27,6 +27,7 @@ Tau allows you to:
27
27
  - [Sessions](sessions.md) - Session persistence, branching, compaction, JSONL format
28
28
  - [Inference Providers](inference-providers.md) - Supported LLMs and provider setup
29
29
  - [Tools](tools.md) - Tool registry, built-in tools, execution model
30
+ - [Project Context Files](project-context.md) - Repository-specific agent instructions
30
31
  - [CLI Reference](cli-reference.md) - All command-line options and run modes
31
32
 
32
33
  ## Configuration & Customization
@@ -62,9 +62,14 @@ Output from executing a tool.
62
62
  }
63
63
  ```
64
64
 
65
+ Assistant text and thinking content are rendered as Markdown in the interactive
66
+ TUI, including while content is streaming. Tool results remain plain text unless
67
+ the tool explicitly marks a successful result for Markdown rendering.
68
+
65
69
  ### System Message
66
70
 
67
- Context and instructions for the agent. Loaded from `.agents.md` file in project or home directory.
71
+ Context and instructions for the agent. Tau constructs this separately from
72
+ persisted session messages and may include trusted project context files.
68
73
 
69
74
  ```python
70
75
  {
@@ -145,17 +150,18 @@ Use `@` in the editor to fuzzy-search files.
145
150
 
146
151
  ## System Instructions
147
152
 
148
- Tau loads system instructions from `.agents.md` files in your project or home directory:
153
+ Tau loads project instructions from context files:
154
+
155
+ **Within a Git repository:**
149
156
 
150
- **Project-level** (priority):
151
- - `.agents.md` or `agents.md` in project root or parent directories
152
- - Injected into context for the current project
157
+ - `AGENTS.md` or `CLAUDE.md`, matched case-insensitively
158
+ - One file per directory from the repository root through the current directory
159
+ - Files closer to the current directory take precedence
153
160
 
154
- **Global**:
155
- - `~/.tau/agents.md` in home directory
156
- - Used as fallback for all projects
161
+ Outside a Git repository, only the current directory is checked. Context files
162
+ are loaded only for trusted projects.
157
163
 
158
- Example `.agents.md`:
164
+ Example `AGENTS.md`:
159
165
 
160
166
  ```markdown
161
167
  # Project Instructions
@@ -167,6 +173,7 @@ Example `.agents.md`:
167
173
  ```
168
174
 
169
175
  Instructions are automatically injected into every turn sent to the LLM.
176
+ See [Project Context Files](project-context.md) for complete behavior.
170
177
 
171
178
  ## Message Delivery
172
179
 
@@ -5,9 +5,13 @@ Tau automatically discovers and includes project-specific instructions from `AGE
5
5
  ## Overview
6
6
 
7
7
  When you run Tau in a project directory, it:
8
+
8
9
  1. Looks for `AGENTS.md` or `CLAUDE.md` (case-insensitive)
9
- 2. If found and the project is trusted, includes the content in the system prompt
10
- 3. Prioritizes project instructions above general Tau guidelines
10
+ 2. Walks from the Git repository root through the current directory
11
+ 3. If the project is trusted, includes one context file from each directory
12
+ 4. Prioritizes the closest file above parent files, general Tau rules, and tool guidelines
13
+
14
+ Outside a Git repository, Tau checks only the current directory.
11
15
 
12
16
  This is useful for:
13
17
  - **Coding standards** — Define how the agent should write code
@@ -53,13 +57,14 @@ Or use `CLAUDE.md` for the same purpose (they're equivalent).
53
57
 
54
58
  ### File priority
55
59
 
56
- Tau checks for these files in order (case-insensitive):
60
+ Tau checks for these names case-insensitively, in this order:
61
+
57
62
  1. `AGENTS.md`
58
- 2. `AGENTS.MD`
59
- 3. `CLAUDE.md`
60
- 4. `CLAUDE.MD`
63
+ 2. `CLAUDE.md`
61
64
 
62
- The first one found is used.
65
+ The first one found in each directory is used. When multiple directories provide
66
+ instructions, Tau orders them from the repository root to the current directory.
67
+ The closest file takes precedence if instructions conflict.
63
68
 
64
69
  ## Trust & Security
65
70
 
@@ -140,7 +145,8 @@ Project-specific guidelines and rules (from AGENTS.md):
140
145
 
141
146
  [Content of AGENTS.md here]
142
147
 
143
- Follow project-specific instructions before general Tau guidelines.
148
+ Files are ordered from the repository root toward the current directory; later
149
+ files take precedence.
144
150
  ```
145
151
 
146
152
  The agent sees this and prioritizes project instructions when making decisions.
@@ -220,14 +226,15 @@ The agent sees this and prioritizes project instructions when making decisions.
220
226
  ## Common Issues
221
227
 
222
228
  **Project context not appearing**
223
- - Check the file exists in the project root
224
- - Verify filename is exactly `AGENTS.md` or `CLAUDE.md`
229
+
230
+ - Check the file exists between the repository root and current directory
231
+ - Verify the filename is `AGENTS.md` or `CLAUDE.md`, in any letter case
225
232
  - Check project trust: `tau --approve` or `/trust` command
226
233
  - Use `--no-context-files` to confirm it's being loaded
227
234
 
228
235
  **Want to see if it's loaded**
229
- - Run with `--verbose` flag for logging (when available)
230
- - Check system prompt in `/session` command
236
+
237
+ - Inspect the effective system prompt through the Python API or an extension context
231
238
 
232
239
  **Trust decisions not persisting**
233
240
  - By default, trust decisions are stored in `~/.tau/trust.json`
@@ -239,7 +246,7 @@ The agent sees this and prioritizes project instructions when making decisions.
239
246
  | Approach | When to use | Pros | Cons |
240
247
  |----------|-----------|------|------|
241
248
  | **AGENTS.md/CLAUDE.md** | Team project guidelines | Lightweight, auto-discovered, version-controlled | Limited to per-project |
242
- | **Custom prompt (`--system-prompt`)** | One-off instructions | Flexible | Lost after session |
249
+ | **Custom prompt (`--system`)** | Complete one-off prompt replacement | Flexible | Bypasses generated tools, project context, skills, Git, environment, and append sections |
243
250
  | **settings.json** | User/global preferences | Persistent | Not project-specific |
244
251
  | **Environment variables** | Sensitive data, deployment-specific | Secure, flexible | Not human-readable |
245
252
 
@@ -46,7 +46,7 @@ asyncio.run(main())
46
46
  | `tools` | `list[Tool]` | Extra tools registered as `"runtime"` source |
47
47
  | `tool_allowlist` | `set[str] \| None` | Enable only these built-in, runtime, or extension tool names |
48
48
  | `exclude_tools` | `set[str]` | Tool names disabled after applying the allowlist |
49
- | `system_prompt` | `str` | Custom system prompt (overrides the default) |
49
+ | `system_prompt` | `str` | Complete system-prompt replacement; bypasses generated tools, project context, skills, Git, environment, and append sections |
50
50
  | `disable_context_files` | `bool` | Skip AGENTS.md / CLAUDE.md discovery and loading |
51
51
  | `project_trusted` | `bool \| None` | Override project trust detection (`None` uses trust-store and policy defaults) |
52
52
  | `resource_loader` | `ResourceLoader \| None` | Replace resource discovery and registry loading |
@@ -451,6 +451,31 @@ await runtime.invoke("What is 2 + 2?")
451
451
  print(last_response)
452
452
  ```
453
453
 
454
+ ## Ephemeral Context Injection
455
+
456
+ Browser and computer-use agents can inject current state before every model
457
+ request without persisting it in the session by configuring the engine:
458
+
459
+ ```python
460
+ from tau.engine import Agent as Engine, Options as EngineOptions
461
+ from tau.message.types import UserMessage
462
+
463
+ async def current_browser_state() -> list[UserMessage]:
464
+ return [UserMessage.with_images("Current browser state", images=[screenshot])]
465
+
466
+ engine = Engine(
467
+ cwd=Path.cwd(),
468
+ llm=llm,
469
+ tools=tools,
470
+ options=EngineOptions(ephemeral_injection=current_browser_state),
471
+ )
472
+ ```
473
+
474
+ The callback runs after context transformation and before each inference,
475
+ including inference after tool execution. Failures are logged and ignored.
476
+ Injected messages are appended only to the request copy. Anthropic prompt-cache
477
+ breakpoints exclude this transient tail.
478
+
454
479
  ## Example: Batch Processing
455
480
 
456
481
  ```python
@@ -79,8 +79,7 @@ All field names use `snake_case`.
79
79
 
80
80
  | Field | Type | Description |
81
81
  |-------|------|-------------|
82
- | `provider` | string | Default provider, e.g. `"anthropic"`, `"openai"` |
83
- | `model` | string | Default model ID, e.g. `"claude-sonnet-4-6"` |
82
+ | `model` | object | Per-modality model selections: `text`, `voice`, `speak`, `image`, and `video` |
84
83
  | `thinking_level` | string | Extended thinking budget level (see below) |
85
84
  | `transport` | string | Transport layer override (`"streaming"` or `"polling"`) |
86
85
  | `enabled_models` | list[string] | Restrict the model picker to these model IDs |
@@ -88,12 +87,25 @@ All field names use `snake_case`.
88
87
 
89
88
  ```json
90
89
  {
91
- "provider": "anthropic",
92
- "model": "claude-sonnet-4-6",
90
+ "model": {
91
+ "text": {
92
+ "id": "claude-sonnet-4-6",
93
+ "provider": "anthropic"
94
+ },
95
+ "speak": {
96
+ "id": "tts-1",
97
+ "provider": "openai",
98
+ "voice": "coral"
99
+ }
100
+ },
93
101
  "thinking_level": "low"
94
102
  }
95
103
  ```
96
104
 
105
+ Each model reference contains `id` and `provider`. The `speak` reference may
106
+ also contain `voice`; `/model` prompts for it after selecting a text-to-speech
107
+ model that declares supported voices.
108
+
97
109
  #### Extended thinking
98
110
 
99
111
  Extended thinking gives the model a private scratchpad — a reasoning trace it works through before producing its response. It trades token budget (and cost) for accuracy on complex tasks like multi-step reasoning, planning, and math.
@@ -8,13 +8,15 @@ Tau ships with seven built-in tools covering file I/O, search, and shell executi
8
8
 
9
9
  ### read
10
10
 
11
- Read the contents of a file. Every returned line is prefixed with a hashline
12
- anchor in the form `<line>:<hash>|<content>`. The `edit` tool uses these anchors.
11
+ Read a UTF-8 text file. Invalid byte sequences are replaced during decoding.
12
+ Every returned line is prefixed with a content-based hashline anchor in the form
13
+ `<line>:<hash>|<content>`. Duplicate content, including blank lines, can share a
14
+ hash; the line number acts as a proximity hint when `edit` resolves an anchor.
13
15
 
14
16
  | Parameter | Type | Required | Default | Description |
15
17
  |-----------|------|----------|---------|-------------|
16
18
  | `path` | string | Yes | — | Absolute path to the file to read |
17
- | `offset` | integer | No | `0` | Line number to start reading from (0-based) |
19
+ | `offset` | integer | No | `0` | Number of lines to skip; `0` starts at the first line |
18
20
  | `limit` | integer | No | `2000` | Maximum number of lines to return |
19
21
 
20
22
  ### write
@@ -24,14 +26,16 @@ Create a new file or overwrite an existing file entirely.
24
26
  | Parameter | Type | Required | Description |
25
27
  |-----------|------|----------|-------------|
26
28
  | `path` | string | Yes | Absolute path to write |
27
- | `content` | string | Yes | Full file content |
29
+ | `content` | string | Yes | Exact complete UTF-8 text content |
28
30
 
29
31
  ### edit
30
32
 
31
33
  Replace an inclusive line range using hashline anchors returned by `read`.
32
- The content hash lets an anchor survive line insertions or deletions elsewhere
34
+ The content hash can let an anchor survive line insertions or deletions elsewhere
33
35
  in the file; when content occurs more than once, its original line number is
34
- used as a proximity hint. Edit-result diffs also display hashline anchors:
36
+ used as a proximity hint and the closest occurrence is selected. An empty
37
+ `new_content` deletes the selected range. Because the complete file is rewritten,
38
+ an edit may normalize line endings. Edit-result diffs also display hashline anchors:
35
39
  removed lines use their old hashes, while added and context lines use current hashes.
36
40
 
37
41
  | Parameter | Type | Required | Default | Description |
@@ -39,50 +43,55 @@ removed lines use their old hashes, while added and context lines use current ha
39
43
  | `path` | string | Yes | — | Absolute path to the file |
40
44
  | `start_anchor` | string | Yes | — | First line to replace, formatted `<line>:<hash>` |
41
45
  | `end_anchor` | string | Yes | — | Last line to replace; use the start anchor for a single-line edit |
42
- | `new_content` | string | Yes | — | Content that replaces the anchored range |
46
+ | `new_content` | string | Yes | — | UTF-8 text replacing the range; empty text deletes it |
43
47
 
44
48
  ### terminal
45
49
 
46
- Execute a shell command and return combined stdout + stderr.
50
+ Execute a non-interactive shell command and return the combined stdout + stderr
51
+ tail. At most 50 KiB or 2,000 lines are retained.
47
52
 
48
53
  | Parameter | Type | Required | Default | Description |
49
54
  |-----------|------|----------|---------|-------------|
50
- `command` | string | Yes | — | Shell command to execute.
51
- `timeout` | integer | No | `30` | Timeout in seconds (max 600)
55
+ | `cmd` | string | Yes | — | Non-interactive shell command to execute |
56
+ | `timeout` | integer | No | `30` | Timeout in seconds (max 600) |
52
57
 
53
58
  Commands run in the agent's current working directory.
54
59
 
55
60
  ### glob
56
61
 
57
- Find files matching a glob pattern.
62
+ Find files matching a glob pattern. Patterns are evaluated relative to `path`.
63
+ Ripgrep's default filtering excludes hidden files and files matched by ignore
64
+ rules.
58
65
 
59
66
  Requires `rg` (ripgrep); the tool returns an error when `rg` is unavailable.
60
67
 
61
68
  | Parameter | Type | Required | Default | Description |
62
69
  |-----------|------|----------|---------|-------------|
63
70
  | `pattern` | string | Yes | — | Glob pattern, e.g. `src/**/*.py` |
64
- | `path` | string | No | cwd | Base directory to search from |
71
+ | `path` | string | No | cwd | Base directory; relative values use Tau's process working directory |
65
72
 
66
73
  ### grep
67
74
 
68
- Search for a regular expression across files.
75
+ Search for a regular expression across files. Directory searches are recursive.
76
+ Ripgrep's default filtering excludes hidden files and files matched by ignore
77
+ rules.
69
78
 
70
79
  Requires `rg` (ripgrep); the tool returns an error when `rg` is unavailable.
71
80
 
72
81
  | Parameter | Type | Required | Default | Description |
73
82
  |-----------|------|----------|---------|-------------|
74
83
  | `pattern` | string | Yes | — | Regular expression to search for |
75
- | `path` | string | No | cwd | File or directory to search |
84
+ | `path` | string | No | cwd | File or directory; relative values use Tau's process working directory |
76
85
  | `include` | string | No | `""` | Glob filter for files, e.g. `*.py` (only applies when `path` is a directory) |
77
86
  | `case_sensitive` | boolean | No | `true` | Whether the pattern is case-sensitive |
78
87
 
79
88
  ### ls
80
89
 
81
- List the contents of a directory.
90
+ List a directory's immediate contents without recursing.
82
91
 
83
92
  | Parameter | Type | Required | Default | Description |
84
93
  |-----------|------|----------|---------|-------------|
85
- | `path` | string | No | cwd | Directory path to list |
94
+ | `path` | string | No | cwd | Directory; relative values use Tau's process working directory |
86
95
 
87
96
  ---
88
97
 
@@ -120,6 +129,11 @@ threshold or `result_expandable=False` to always show their complete rendered
120
129
  output. Custom renderers should return their complete semantic output and must
121
130
  not add expand/collapse hints.
122
131
 
132
+ Tool results render as plain text by default. A tool can opt an individual
133
+ successful result into Markdown rendering with
134
+ `metadata={"_render_format": "markdown"}`. Tau renders the Markdown before
135
+ applying the standard preview/collapse shell. Error results remain plain text.
136
+
123
137
  ---
124
138
 
125
139
  ## Adding Custom Tools
@@ -137,7 +151,7 @@ path and committed with an atomic replacement.
137
151
 
138
152
  ## Tool Constraints
139
153
 
140
- Add a `.agents.md` file to your project root to give the agent standing instructions about tool usage:
154
+ Add an `AGENTS.md` file to your project to give the agent standing instructions about tool usage:
141
155
 
142
156
  ```markdown
143
157
  # Project Instructions
@@ -148,7 +162,9 @@ Add a `.agents.md` file to your project root to give the agent standing instruct
148
162
  - Use `edit` for small changes, `write` for new files
149
163
  ```
150
164
 
151
- Tau searches for `.agents.md`, `agents.md`, or `~/.tau/agents.md`. The file is automatically loaded at session start and injected into the agent's context.
165
+ Tau searches case-insensitively for `AGENTS.md` or `CLAUDE.md` from the Git
166
+ repository root through the current directory. See
167
+ [Project Context Files](project-context.md) for precedence and trust behavior.
152
168
 
153
169
  ---
154
170
 
@@ -46,7 +46,7 @@ Type `/` to open the command palette. Commands are fuzzy-searchable — type a f
46
46
 
47
47
  | Command | Description |
48
48
  |---------|-------------|
49
- | `/model` | Open the model picker |
49
+ | `/model` | Pick a model by modality; Speak models with declared voices open a second voice picker |
50
50
  | `/theme` | Open the theme picker |
51
51
  | `/effort` | Set the thinking effort level |
52
52
 
@@ -65,11 +65,16 @@ Type `/` to open the command palette. Commands are fuzzy-searchable — type a f
65
65
  | `/copy` | Copy the last assistant message to the clipboard |
66
66
  | `/reload` | Reload extensions, skills, prompts, and settings |
67
67
  | `/settings` | Show current settings |
68
+ | `/watch <url> [question]` | Load public video metadata and captions using `yt-dlp` |
68
69
  | `/help` or `/?` | List all commands and keyboard shortcuts |
69
70
  | `/quit` or `/q` or `/exit` | Exit tau |
70
71
 
71
72
  Extensions and prompts also appear in the command palette. Type `/` and browse to see everything available.
72
73
 
74
+ `/watch` requires `yt-dlp` on `PATH`. It reads metadata and English captions
75
+ from public URLs supported by `yt-dlp`; it does not download or inspect video
76
+ frames. When captions are unavailable, the agent receives metadata only.
77
+
73
78
  ---
74
79
 
75
80
  ## Command Details
@@ -166,8 +171,13 @@ tau --ephemeral # temporary session, nothing saved
166
171
 
167
172
  Tau loads context files at startup to give the agent standing instructions. It searches for:
168
173
 
169
- 1. `.agents.md` or `agents.md` in current directory and parent directories (up to home)
170
- 2. `~/.tau/agents.md` in the user's home
174
+ 1. `AGENTS.md` or `CLAUDE.md`, matched case-insensitively
175
+ 2. Every directory from the Git repository root through the current directory
176
+
177
+ Outside a Git repository, Tau checks only the current directory. It loads at most
178
+ one context file per directory, preferring `AGENTS.md` over `CLAUDE.md`. Files
179
+ closer to the current directory take precedence over files closer to the repository
180
+ root.
171
181
 
172
182
  Use context files to provide system-level instructions:
173
183
 
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "tau-coding-agent"
7
- version = "0.4.6"
7
+ version = "0.4.7"
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"
@@ -30,6 +30,7 @@ dependencies = [
30
30
  "pathspec==1.1.1",
31
31
  "gitpython==3.1.50",
32
32
  "grapheme==0.6.0",
33
+ "arrow==1.4.0",
33
34
  ]
34
35
 
35
36
  [project.scripts]