tau-coding-agent 0.4.5__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 (365) hide show
  1. {tau_coding_agent-0.4.5/tau_coding_agent.egg-info → tau_coding_agent-0.4.7}/PKG-INFO +2 -1
  2. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/docs/architecture.md +33 -2
  3. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/docs/cli-reference.md +7 -0
  4. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/docs/docs.json +4 -0
  5. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/docs/extensions.md +76 -2
  6. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/docs/index.md +1 -0
  7. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/docs/messages.md +16 -9
  8. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/docs/project-context.md +20 -13
  9. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/docs/project-structure.md +19 -6
  10. tau_coding_agent-0.4.7/docs/python-api.md +526 -0
  11. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/docs/settings.md +16 -4
  12. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/docs/tools.md +34 -18
  13. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/docs/usage.md +19 -3
  14. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/pyproject.toml +2 -1
  15. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/agent/prompt/builder.py +105 -35
  16. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/agent/prompt/types.py +8 -3
  17. tau_coding_agent-0.4.7/tau/builtins/extensions/btw/__init__.py +303 -0
  18. tau_coding_agent-0.4.7/tau/builtins/extensions/watch/__init__.py +219 -0
  19. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/builtins/models/text.py +42 -0
  20. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/builtins/tools/edit.py +12 -4
  21. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/builtins/tools/glob.py +7 -3
  22. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/builtins/tools/grep.py +6 -2
  23. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/builtins/tools/ls.py +7 -2
  24. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/builtins/tools/read.py +7 -5
  25. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/builtins/tools/terminal.py +4 -4
  26. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/builtins/tools/write.py +1 -1
  27. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/commands/types.py +6 -0
  28. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/console/cli.py +2 -2
  29. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/engine/service.py +16 -0
  30. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/engine/types.py +9 -1
  31. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/extensions/__init__.py +6 -2
  32. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/extensions/api.py +19 -4
  33. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/extensions/context.py +46 -2
  34. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/extensions/loader.py +43 -0
  35. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/extensions/runtime.py +14 -0
  36. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/hooks/engine.py +2 -1
  37. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/text/anthropic_claude_code.py +9 -2
  38. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/text/anthropic_messages.py +9 -2
  39. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/text/anthropic_vertex.py +9 -2
  40. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/text/service.py +16 -0
  41. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/types.py +1 -0
  42. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/modes/interactive/app.py +7 -8
  43. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/modes/interactive/commands/appearance.py +85 -69
  44. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/modes/interactive/commands/model.py +44 -4
  45. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/modes/interactive/components/config_selector.py +15 -21
  46. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/modes/interactive/components/extension_selector.py +5 -5
  47. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/modes/interactive/components/layout.py +35 -1
  48. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/modes/interactive/components/message_list.py +43 -6
  49. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/modes/interactive/components/model_selector.py +99 -46
  50. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/modes/interactive/components/oauth_selector.py +5 -5
  51. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/modes/interactive/components/overlays.py +201 -30
  52. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/modes/interactive/components/selector_controller.py +12 -5
  53. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/modes/interactive/components/session_selector.py +95 -83
  54. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/modes/interactive/components/settings_selector.py +85 -38
  55. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/modes/interactive/components/theme_selector.py +5 -5
  56. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/modes/interactive/components/thinking_selector.py +3 -4
  57. tau_coding_agent-0.4.7/tau/modes/interactive/components/voice_selector.py +96 -0
  58. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/modes/interactive/input_handler.py +16 -10
  59. tau_coding_agent-0.4.7/tau/resources/__init__.py +18 -0
  60. tau_coding_agent-0.4.7/tau/resources/loader.py +480 -0
  61. tau_coding_agent-0.4.7/tau/resources/types.py +57 -0
  62. tau_coding_agent-0.4.7/tau/runtime/dependencies.py +58 -0
  63. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/runtime/service.py +253 -72
  64. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/runtime/types.py +189 -140
  65. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/session/manager.py +2 -1
  66. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/session/utils.py +33 -25
  67. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/settings/manager.py +14 -3
  68. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/settings/types.py +2 -1
  69. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/themes/registry.py +15 -0
  70. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/tui/markdown.py +17 -4
  71. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/tui/terminal.py +27 -0
  72. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/tui/theme.py +5 -0
  73. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/tui/tui.py +19 -2
  74. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7/tau_coding_agent.egg-info}/PKG-INFO +2 -1
  75. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau_coding_agent.egg-info/SOURCES.txt +16 -1
  76. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau_coding_agent.egg-info/requires.txt +1 -0
  77. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_agent_prompt.py +51 -10
  78. tau_coding_agent-0.4.7/tests/test_builtin_watch.py +64 -0
  79. tau_coding_agent-0.4.7/tests/test_command_execution_policy.py +55 -0
  80. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_command_registry.py +1 -0
  81. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_engine_execution.py +2 -2
  82. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_engine_steering.py +26 -0
  83. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_extension_api.py +89 -0
  84. tau_coding_agent-0.4.7/tests/test_extension_lifecycle.py +234 -0
  85. tau_coding_agent-0.4.7/tests/test_model_command.py +72 -0
  86. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_model_selector_modal.py +119 -6
  87. tau_coding_agent-0.4.7/tests/test_resource_loader.py +334 -0
  88. tau_coding_agent-0.4.7/tests/test_runtime_sdk.py +286 -0
  89. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_selector_controller.py +26 -0
  90. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_session_manager.py +32 -2
  91. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_settings_manager.py +15 -1
  92. tau_coding_agent-0.4.7/tests/test_subagents_extension.py +267 -0
  93. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_thinking_render.py +22 -1
  94. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_tool_render.py +55 -1
  95. tau_coding_agent-0.4.7/tests/test_voice_selector.py +46 -0
  96. tau_coding_agent-0.4.5/docs/python-api.md +0 -274
  97. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/LICENSE +0 -0
  98. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/MANIFEST.in +0 -0
  99. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/README.md +0 -0
  100. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/docs/IMPLEMENTATION_SUMMARY.md +0 -0
  101. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/docs/auth.md +0 -0
  102. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/docs/development.md +0 -0
  103. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/docs/extension-settings.md +0 -0
  104. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/docs/http-proxy.md +0 -0
  105. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/docs/inference-providers.md +0 -0
  106. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/docs/installation.md +0 -0
  107. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/docs/keybindings.md +0 -0
  108. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/docs/prompts.md +0 -0
  109. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/docs/quickstart.md +0 -0
  110. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/docs/sessions.md +0 -0
  111. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/docs/skills.md +0 -0
  112. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/docs/themes.md +0 -0
  113. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/setup.cfg +0 -0
  114. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/__init__.py +0 -0
  115. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/agent/__init__.py +0 -0
  116. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/agent/prompt/__init__.py +0 -0
  117. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/agent/service.py +0 -0
  118. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/agent/types.py +0 -0
  119. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/auth/manager.py +0 -0
  120. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/auth/storage.py +0 -0
  121. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/auth/types.py +0 -0
  122. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/builtins/__init__.py +0 -0
  123. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/builtins/commands/__init__.py +0 -0
  124. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/builtins/commands/clear.py +0 -0
  125. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/builtins/commands/compact.py +0 -0
  126. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/builtins/commands/reload.py +0 -0
  127. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/builtins/commands/session.py +0 -0
  128. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/builtins/extensions/footer/__init__.py +0 -0
  129. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/builtins/extensions/footer/git.py +0 -0
  130. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/builtins/extensions/footer/model.py +0 -0
  131. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/builtins/extensions/footer/utils.py +0 -0
  132. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/builtins/extensions/header/__init__.py +0 -0
  133. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/builtins/models/__init__.py +0 -0
  134. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/builtins/models/audio.py +0 -0
  135. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/builtins/models/image.py +0 -0
  136. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/builtins/models/video.py +0 -0
  137. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/builtins/prompts/commit.md +0 -0
  138. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/builtins/prompts/docs.md +0 -0
  139. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/builtins/prompts/explain.md +0 -0
  140. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/builtins/prompts/fix.md +0 -0
  141. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/builtins/prompts/refactor.md +0 -0
  142. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/builtins/prompts/review.md +0 -0
  143. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/builtins/prompts/test.md +0 -0
  144. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/builtins/providers/__init__.py +0 -0
  145. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/builtins/providers/audio.py +0 -0
  146. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/builtins/providers/image.py +0 -0
  147. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/builtins/providers/text.py +0 -0
  148. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/builtins/providers/video.py +0 -0
  149. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/builtins/skills/code-review/SKILL.md +0 -0
  150. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/builtins/skills/debug/SKILL.md +0 -0
  151. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/builtins/skills/git-commit/SKILL.md +0 -0
  152. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/builtins/themes/dark.yaml +0 -0
  153. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/builtins/themes/light.yaml +0 -0
  154. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/builtins/tools/__init__.py +0 -0
  155. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/builtins/tools/utils.py +0 -0
  156. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/commands/__init__.py +0 -0
  157. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/commands/registry.py +0 -0
  158. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/console/__init__.py +0 -0
  159. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/console/commands/__init__.py +0 -0
  160. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/console/commands/auth.py +0 -0
  161. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/console/commands/packages.py +0 -0
  162. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/console/commands/update.py +0 -0
  163. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/core/__init__.py +0 -0
  164. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/core/registry.py +0 -0
  165. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/engine/__init__.py +0 -0
  166. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/extensions/settings.py +0 -0
  167. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/hooks/__init__.py +0 -0
  168. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/hooks/inference.py +0 -0
  169. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/hooks/runtime.py +0 -0
  170. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/hooks/service.py +0 -0
  171. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/hooks/session.py +0 -0
  172. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/hooks/tui.py +0 -0
  173. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/hooks/types.py +0 -0
  174. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/__init__.py +0 -0
  175. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/__init__.py +0 -0
  176. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/audio/__init__.py +0 -0
  177. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/audio/base.py +0 -0
  178. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/audio/builtins.py +0 -0
  179. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/audio/elevenlabs_audio.py +0 -0
  180. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/audio/gemini_audio.py +0 -0
  181. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/audio/openai_audio.py +0 -0
  182. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/audio/registry.py +0 -0
  183. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/audio/sarvam_audio.py +0 -0
  184. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/audio/service.py +0 -0
  185. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/audio/utils.py +0 -0
  186. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/availability.py +0 -0
  187. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/image/__init__.py +0 -0
  188. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/image/base.py +0 -0
  189. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/image/builtins.py +0 -0
  190. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/image/gemini_image.py +0 -0
  191. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/image/openai_image.py +0 -0
  192. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/image/openrouter.py +0 -0
  193. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/image/registry.py +0 -0
  194. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/image/service.py +0 -0
  195. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/registry.py +0 -0
  196. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/text/__init__.py +0 -0
  197. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/text/base.py +0 -0
  198. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/text/builtins.py +0 -0
  199. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/text/gemini_generate.py +0 -0
  200. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/text/github_copilot_chat.py +0 -0
  201. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/text/google_antigravity.py +0 -0
  202. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/text/google_vertex.py +0 -0
  203. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/text/mistral_chat.py +0 -0
  204. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/text/ollama_chat.py +0 -0
  205. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/text/openai_codex_responses.py +0 -0
  206. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/text/openai_completions.py +0 -0
  207. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/text/openai_responses.py +0 -0
  208. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/text/openai_vertex.py +0 -0
  209. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/text/registry.py +0 -0
  210. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/text/types.py +0 -0
  211. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/text/utils.py +0 -0
  212. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/video/__init__.py +0 -0
  213. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/video/base.py +0 -0
  214. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/video/builtins.py +0 -0
  215. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/video/fal_video.py +0 -0
  216. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/video/openrouter_video.py +0 -0
  217. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/video/registry.py +0 -0
  218. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/api/video/service.py +0 -0
  219. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/model/__init__.py +0 -0
  220. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/model/registry.py +0 -0
  221. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/model/types.py +0 -0
  222. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/provider/__init__.py +0 -0
  223. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/provider/oauth/__init__.py +0 -0
  224. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/provider/oauth/anthropic_claude_code.py +0 -0
  225. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/provider/oauth/github_copilot.py +0 -0
  226. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/provider/oauth/google_antigravity.py +0 -0
  227. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/provider/oauth/openai_codex.py +0 -0
  228. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/provider/oauth/pkce.py +0 -0
  229. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/provider/oauth/types.py +0 -0
  230. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/provider/oauth/utils.py +0 -0
  231. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/provider/registry.py +0 -0
  232. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/provider/types.py +0 -0
  233. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/inference/utils.py +0 -0
  234. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/message/__init__.py +0 -0
  235. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/message/types.py +0 -0
  236. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/message/utils.py +0 -0
  237. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/modes/__init__.py +0 -0
  238. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/modes/interactive/__init__.py +0 -0
  239. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/modes/interactive/agent_hooks.py +0 -0
  240. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/modes/interactive/commands/__init__.py +0 -0
  241. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/modes/interactive/commands/auth.py +0 -0
  242. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/modes/interactive/commands/context.py +0 -0
  243. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/modes/interactive/commands/extensions.py +0 -0
  244. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/modes/interactive/commands/misc.py +0 -0
  245. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/modes/interactive/commands/session.py +0 -0
  246. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/modes/interactive/components/__init__.py +0 -0
  247. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/modes/interactive/components/command_palette.py +0 -0
  248. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/modes/interactive/components/file_picker.py +0 -0
  249. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/modes/interactive/components/tree_selector.py +0 -0
  250. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/modes/interactive/components/trust_screen.py +0 -0
  251. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/modes/print/__init__.py +0 -0
  252. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/modes/rpc/__init__.py +0 -0
  253. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/modes/rpc/mode.py +0 -0
  254. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/modes/rpc/types.py +0 -0
  255. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/packages/__init__.py +0 -0
  256. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/packages/manager.py +0 -0
  257. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/packages/types.py +0 -0
  258. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/packages/utils.py +0 -0
  259. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/prompts/expand.py +0 -0
  260. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/prompts/loader.py +0 -0
  261. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/prompts/registry.py +0 -0
  262. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/prompts/types.py +0 -0
  263. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/session/branch_summarization.py +0 -0
  264. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/session/compaction.py +0 -0
  265. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/session/types.py +0 -0
  266. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/settings/paths.py +0 -0
  267. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/settings/storage.py +0 -0
  268. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/settings/utils.py +0 -0
  269. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/skills/loader.py +0 -0
  270. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/skills/registry.py +0 -0
  271. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/skills/types.py +0 -0
  272. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/themes/loader.py +0 -0
  273. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/themes/types.py +0 -0
  274. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/tool/__init__.py +0 -0
  275. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/tool/registry.py +0 -0
  276. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/tool/render.py +0 -0
  277. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/tool/types.py +0 -0
  278. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/trust/__init__.py +0 -0
  279. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/trust/manager.py +0 -0
  280. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/trust/types.py +0 -0
  281. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/trust/utils.py +0 -0
  282. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/tui/__init__.py +0 -0
  283. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/tui/autocomplete.py +0 -0
  284. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/tui/component.py +0 -0
  285. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/tui/components/__init__.py +0 -0
  286. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/tui/components/box.py +0 -0
  287. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/tui/components/editor.py +0 -0
  288. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/tui/components/image.py +0 -0
  289. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/tui/components/select_list.py +0 -0
  290. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/tui/components/spinner.py +0 -0
  291. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/tui/components/text_input.py +0 -0
  292. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/tui/input.py +0 -0
  293. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/tui/keybinding_hints.py +0 -0
  294. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/tui/ui_context.py +0 -0
  295. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/tui/utils.py +0 -0
  296. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/utils/__init__.py +0 -0
  297. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/utils/http_proxy.py +0 -0
  298. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/utils/image_processing.py +0 -0
  299. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/utils/secrets.py +0 -0
  300. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau/utils/version_check.py +0 -0
  301. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau_coding_agent.egg-info/dependency_links.txt +0 -0
  302. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau_coding_agent.egg-info/entry_points.txt +0 -0
  303. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tau_coding_agent.egg-info/top_level.txt +0 -0
  304. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_agent_compaction.py +0 -0
  305. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_agent_types.py +0 -0
  306. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_ansi.py +0 -0
  307. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_auth_command.py +0 -0
  308. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_auth_manager.py +0 -0
  309. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_auth_storage.py +0 -0
  310. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_branch_navigation.py +0 -0
  311. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_branch_summarization.py +0 -0
  312. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_builtin_tools.py +0 -0
  313. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_cli_inputs.py +0 -0
  314. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_compaction.py +0 -0
  315. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_diff.py +0 -0
  316. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_editor_protocol.py +0 -0
  317. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_engine_types.py +0 -0
  318. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_footer_model.py +0 -0
  319. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_footer_utils.py +0 -0
  320. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_fuzzy.py +0 -0
  321. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_http_proxy.py +0 -0
  322. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_image_processing.py +0 -0
  323. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_inference_api_text_utils.py +0 -0
  324. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_inference_error_utils.py +0 -0
  325. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_inference_types.py +0 -0
  326. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_inference_utils.py +0 -0
  327. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_keybindings.py +0 -0
  328. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_markdown.py +0 -0
  329. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_message_types.py +0 -0
  330. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_message_utils.py +0 -0
  331. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_model_availability.py +0 -0
  332. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_model_registry.py +0 -0
  333. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_model_types.py +0 -0
  334. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_oauth_utils.py +0 -0
  335. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_package_resources.py +0 -0
  336. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_packages_utils.py +0 -0
  337. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_pkce.py +0 -0
  338. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_prompts_expand.py +0 -0
  339. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_prompts_loader.py +0 -0
  340. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_prompts_registry.py +0 -0
  341. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_provider_registry.py +0 -0
  342. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_rpc_mode.py +0 -0
  343. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_secrets.py +0 -0
  344. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_session_trust_persist.py +0 -0
  345. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_session_types.py +0 -0
  346. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_session_utils.py +0 -0
  347. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_settings_paths.py +0 -0
  348. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_settings_storage.py +0 -0
  349. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_settings_utils.py +0 -0
  350. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_skills_loader.py +0 -0
  351. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_skills_registry.py +0 -0
  352. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_text_input.py +0 -0
  353. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_text_llm_invoke.py +0 -0
  354. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_theme_loader.py +0 -0
  355. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_themes_registry.py +0 -0
  356. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_tool_registry.py +0 -0
  357. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_trust_manager.py +0 -0
  358. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_trust_utils.py +0 -0
  359. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_tui_capabilities.py +0 -0
  360. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_tui_input.py +0 -0
  361. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_tui_layout_sizing.py +0 -0
  362. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_tui_theme.py +0 -0
  363. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_tui_utils.py +0 -0
  364. {tau_coding_agent-0.4.5 → tau_coding_agent-0.4.7}/tests/test_ui_context.py +0 -0
  365. {tau_coding_agent-0.4.5 → 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.5
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
@@ -70,6 +70,7 @@ User input flows through these stages:
70
70
  |--------|---------|
71
71
  | `session/` | Session JSONL persistence, compaction, branching |
72
72
  | `settings/` | Configuration from JSON files |
73
+ | `resources/` | Unified discovery of extensions, skills, prompts, and themes |
73
74
  | `auth/` | Credential storage and resolution |
74
75
  | `message/` | Message type definitions |
75
76
  | `trust/` | Trust and permission checks |
@@ -97,7 +98,7 @@ User input flows through these stages:
97
98
 
98
99
  | Module | Purpose |
99
100
  |--------|---------|
100
- | `packages/` | Package/dependency management (reserved) |
101
+ | `packages/` | Installed package and dependency management |
101
102
  | `rpc/` | JSON-RPC protocol for IDE integration |
102
103
 
103
104
  ## Agent Execution State Machine
@@ -141,6 +142,11 @@ TUI overlays participate in focus lifecycle. Hiding or closing a capturing
141
142
  overlay restores the next visible overlay or its previous focus target.
142
143
  Components exposing `dispose()` are disposed when their overlay closes.
143
144
 
145
+ Slash commands declare whether they require an idle agent. Idle-only commands
146
+ are deferred until the current turn settles; UI-only and read-only commands may
147
+ opt into immediate dispatch during a turn. Normal Enter input remains steering,
148
+ and Alt+Enter remains a post-turn follow-up message.
149
+
144
150
  ## Message Types and Context
145
151
 
146
152
  Messages in sessions are typed:
@@ -211,12 +217,37 @@ Tools are executed in a sandboxed environment:
211
217
  6. Result is serialized and added to context
212
218
  ```
213
219
 
214
- Built-in tools (bash, read, write, edit, glob, grep, ls) are always available. Custom tools are registered via extensions.
220
+ Built-in tools (bash, read, write, edit, glob, grep, ls) are enabled by default.
221
+ `RuntimeConfig` can allow or exclude tools by name. Custom tools are registered
222
+ via extensions or passed directly to the runtime.
223
+
224
+ Programmatic runtimes can replace constructed services through
225
+ `RuntimeDependencies`. Typed factories cover settings, LLM/model/auth wiring,
226
+ session storage, hooks, and the tool registry. Session-bound factories run
227
+ again when the active session is replaced.
228
+
229
+ `Runtime.create_with_result()` returns the initialized runtime together with
230
+ resource diagnostics, extension errors, and requested-versus-selected
231
+ model/provider resolution. `Runtime.create()` remains the convenience API when
232
+ the caller does not need startup details.
233
+
234
+ Extension reloads pass through a serialized coordinator. Callback-triggered or
235
+ mid-turn requests wait until extension dispatch and the agent lifecycle settle.
236
+ Runtime generations invalidate contexts captured before reload, session
237
+ replacement, or shutdown, and shutdown detaches the extension runtime from its
238
+ hook bus.
215
239
 
216
240
  ## Extension Points
217
241
 
218
242
  Tau is designed to be extended without modifying core code. Key extension points via the `tau` parameter in `register()`:
219
243
 
244
+ Resource discovery is centralized behind the replaceable `ResourceLoader`
245
+ protocol. `DefaultResourceLoader` supports per-resource overrides. Startup and
246
+ `/reload` consume one `ResourceSnapshot`, keeping extensions, skills, prompts,
247
+ themes, context files, and structured diagnostics consistent. Diagnostics
248
+ identify invalid configured paths, package manifests/resources, hook paths, and
249
+ context read failures without preventing valid resources from loading.
250
+
220
251
  ### Tools
221
252
 
222
253
  Register custom tools that the agent can call:
@@ -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
  },
@@ -89,6 +89,34 @@ def register(tau):
89
89
  pass
90
90
  ```
91
91
 
92
+ ### Inline extension factories
93
+
94
+ Python API users can supply the same registration function directly through
95
+ `RuntimeConfig`, without creating or installing an extension file:
96
+
97
+ ```python
98
+ from tau.extensions import ExtensionAPI
99
+ from tau.runtime.types import RuntimeConfig
100
+
101
+ def configure(tau: ExtensionAPI) -> None:
102
+ tau.register_tool(MyTool())
103
+ tau.append_prompt("Use the embedding application's workflow.")
104
+
105
+ config = RuntimeConfig(
106
+ cwd=Path.cwd(),
107
+ extension_factories=[configure],
108
+ )
109
+ ```
110
+
111
+ Inline factories receive the normal `ExtensionAPI`, can be synchronous or
112
+ asynchronous, and load after file-based extensions. They participate in the
113
+ same tool, command, hook, provider, service, prompt, theme, and UI registration
114
+ systems. Factory failures are isolated and reported as `ExtensionError`.
115
+
116
+ `/reload` unloads the old inline extensions and executes the factories again,
117
+ preventing duplicate hook subscriptions. Session replacement reuses the active
118
+ extension runtime and does not rerun factories.
119
+
92
120
  `register` may be `async` if setup requires awaiting:
93
121
 
94
122
  ```python
@@ -459,6 +487,34 @@ def register(tau):
459
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 |
460
488
  | `context` | `messages` | `ContextEventResult` | Full message history about to be sent to LLM. Return `messages=` to rewrite it |
461
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
+
462
518
  **Streaming & messages**
463
519
 
464
520
  | Event | Payload fields | Result type | Description |
@@ -786,7 +842,7 @@ def register(tau):
786
842
  | Method | Description |
787
843
  |--------|-------------|
788
844
  | `tau.register_tool(tool)` | Add a tool the agent can call |
789
- | `tau.register_command(name, desc, handler, aliases=[], get_argument_completions=None)` | Add a `/name` slash command with optional argument tab-completion |
845
+ | `tau.register_command(name, desc, handler, aliases=[], get_argument_completions=None, argument_hint=None, requires_idle=True)` | Add a `/name` slash command; set `requires_idle=False` only for UI-only or read-only handlers safe during an active turn |
790
846
  | `tau.on(event, handler)` / `@tau.on(event)` | Subscribe to a lifecycle event |
791
847
  | `tau.register_shortcut(key, desc, handler)` | Bind a keyboard shortcut |
792
848
  | `tau.append_prompt(text)` | Append text to the system prompt |
@@ -1423,6 +1479,18 @@ async def on_start(event, ctx):
1423
1479
  `/reload` re-discovers and hot-reloads all extensions, skills, prompts, and
1424
1480
  settings without restarting the session.
1425
1481
 
1482
+ Reload requests are serialized. A request made from an extension callback or
1483
+ while the agent is processing is queued until the callback pipeline and complete
1484
+ agent lifecycle settle. Multiple queued requests are coalesced. Consequently,
1485
+ `await ctx.reload()` acknowledges a request but does not guarantee that a
1486
+ deferred reload has already completed.
1487
+
1488
+ Contexts are generation-bound. An `ExtensionContext` captured before `/reload`,
1489
+ `/new`, `/resume`, `/clone`, or runtime shutdown raises
1490
+ `StaleExtensionContextError` when reused. Do not retain contexts in long-lived
1491
+ background tasks; capture immutable values or acquire a fresh context from a
1492
+ new callback.
1493
+
1426
1494
  **What gets picked up:**
1427
1495
  - New or modified extension files
1428
1496
  - New or modified skill and prompt template files
@@ -1432,10 +1500,16 @@ settings without restarting the session.
1432
1500
  **What persists across reload:**
1433
1501
  - The current session (messages, branching state)
1434
1502
  - Auth credentials
1435
- - Any runtime state your extension stored outside its module (e.g. in a global variable — module globals are re-created on reload)
1503
+ - Normally imported third-party Python modules, which remain cached in `sys.modules`
1504
+ - External state not explicitly released by the extension
1436
1505
 
1437
1506
  **What resets:**
1438
1507
  - All registered tools, commands, shortcuts, and event handlers — re-registered from scratch
1439
1508
  - The system prompt — rebuilt from SYSTEM.md and all `append_prompt` calls
1509
+ - Extension entry-module globals and inline factory state
1510
+
1511
+ Tau emits `extension_unload` before replacing an extension runtime and
1512
+ `runtime_stop` before shutdown. Use those events to release subprocesses,
1513
+ background tasks, sockets, and registrations outside Tau.
1440
1514
 
1441
1515
  After reload, new tools are available to the model immediately in the next turn.
@@ -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
 
@@ -1,11 +1,11 @@
1
1
  # Project Structure
2
2
 
3
- Tau consists of 205 Python modules organized into 22 main packages. This page documents the codebase organization and provides module-by-module reference for contributors and agents.
3
+ Tau consists of 230 Python modules organized into 25 main packages. This page documents the codebase organization and provides module-by-module reference for contributors and agents.
4
4
 
5
5
  ## Directory Structure
6
6
 
7
7
  ```
8
- tau/ # Main package (205 modules)
8
+ tau/ # Main package (230 modules)
9
9
  ├── __init__.py
10
10
  ├── content_registry.py # Content registry abstractions
11
11
  ├── agent/ # Agent execution service
@@ -31,6 +31,7 @@ tau/ # Main package (205 modules)
31
31
  ├── message/ # Message types and utilities
32
32
  ├── packages/ # Package/dependency management
33
33
  ├── prompts/ # Prompt template system
34
+ ├── resources/ # Unified runtime resource discovery
34
35
  ├── rpc/ # JSON-RPC protocol for IDE integration
35
36
  ├── runtime/ # Agent runtime service
36
37
  ├── session/ # Session management and persistence
@@ -154,12 +155,22 @@ Message data structures and utilities.
154
155
 
155
156
  ### `packages/` - Package Management
156
157
 
157
- Package/dependency resolution (reserved for future use).
158
+ Installed package and dependency management.
158
159
 
159
160
  - `manager.py` - Package management
160
161
  - `types.py` - Package types
161
162
  - `utils.py` - Package utilities
162
163
 
164
+ ### `resources/` - Resource Discovery
165
+
166
+ The replaceable loader builds one immutable snapshot from built-in, global,
167
+ project, installed-package, hook-provided, and context-file resources. It
168
+ supports focused overrides and structured diagnostics. Runtime startup and
169
+ `/reload` both consume it.
170
+
171
+ - `loader.py` - Resource loader protocol, default discovery, and registry application
172
+ - `types.py` - `ResourceContext`, immutable `ResourceSnapshot`, context files, and diagnostics
173
+
163
174
  ### `prompts/` - Prompt Template System
164
175
 
165
176
  Prompt loading and variable substitution.
@@ -178,10 +189,12 @@ JSON-RPC server for IDE integration.
178
189
 
179
190
  ### `runtime/` - Agent Runtime
180
191
 
181
- Wires together agent, session, engine, and extensions.
192
+ Wires together agent, session, engine, and extensions with replaceable service
193
+ factories for programmatic embedding.
182
194
 
195
+ - `dependencies.py` - Typed dependency factories and creation contexts
183
196
  - `service.py` - Main runtime orchestration
184
- - `types.py` - Runtime state types
197
+ - `types.py` - Runtime state, configuration, and structured startup result types
185
198
 
186
199
  ### `session/` - Session Management
187
200
 
@@ -400,7 +413,7 @@ See [Extensions Guide](extensions.md) for detailed examples.
400
413
  ## Code Statistics
401
414
 
402
415
  - **Total modules**: 205 Python files
403
- - **Main package**: tau/ (22 subpackages)
416
+ - **Main package**: tau/ (25 subpackages)
404
417
  - **Test coverage**: tests/ directory
405
418
  - **Lines of code**: ~8,000 LOC (excluding tests and docs)
406
419
  - **Type hints**: Full type coverage with mypy/pyright