tau-coding-agent 0.3.1__tar.gz → 0.3.9__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 (387) hide show
  1. {tau_coding_agent-0.3.1/tau_coding_agent.egg-info → tau_coding_agent-0.3.9}/PKG-INFO +3 -1
  2. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/docs/auth.md +1 -0
  3. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/docs/extensions.md +5 -27
  4. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/docs/inference-providers.md +42 -1
  5. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/docs/settings.md +13 -5
  6. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/docs/usage.md +2 -2
  7. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/pyproject.toml +15 -1
  8. tau_coding_agent-0.3.9/tau/agent/__init__.py +11 -0
  9. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/agent/prompt/__init__.py +4 -4
  10. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/agent/prompt/builder.py +118 -17
  11. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/agent/prompt/types.py +4 -1
  12. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/agent/service.py +211 -97
  13. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/agent/types.py +11 -9
  14. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/auth/manager.py +59 -22
  15. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/auth/storage.py +20 -8
  16. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/auth/types.py +11 -6
  17. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/builtins/commands/__init__.py +4 -4
  18. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/builtins/commands/clear.py +1 -0
  19. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/builtins/commands/compact.py +2 -0
  20. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/builtins/commands/reload.py +1 -0
  21. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/builtins/extensions/footer/__init__.py +17 -11
  22. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/builtins/extensions/footer/git.py +2 -0
  23. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/builtins/extensions/footer/model.py +2 -0
  24. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/builtins/extensions/footer/utils.py +6 -5
  25. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/builtins/extensions/header/__init__.py +8 -2
  26. tau_coding_agent-0.3.9/tau/builtins/models/audio.py +260 -0
  27. tau_coding_agent-0.3.9/tau/builtins/models/image.py +228 -0
  28. tau_coding_agent-0.3.9/tau/builtins/models/text.py +6817 -0
  29. tau_coding_agent-0.3.9/tau/builtins/models/video.py +239 -0
  30. tau_coding_agent-0.3.9/tau/builtins/providers/audio.py +10 -0
  31. tau_coding_agent-0.3.9/tau/builtins/providers/image.py +15 -0
  32. tau_coding_agent-0.3.9/tau/builtins/providers/text.py +130 -0
  33. tau_coding_agent-0.3.9/tau/builtins/providers/video.py +8 -0
  34. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/builtins/tools/edit.py +69 -28
  35. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/builtins/tools/glob.py +53 -16
  36. tau_coding_agent-0.3.9/tau/builtins/tools/grep.py +209 -0
  37. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/builtins/tools/ls.py +31 -15
  38. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/builtins/tools/read.py +42 -15
  39. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/builtins/tools/terminal.py +37 -15
  40. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/builtins/tools/write.py +31 -14
  41. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/commands/__init__.py +4 -4
  42. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/commands/registry.py +2 -1
  43. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/commands/types.py +7 -4
  44. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/console/cli.py +104 -42
  45. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/console/commands/auth.py +28 -6
  46. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/console/commands/packages.py +15 -11
  47. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/console/commands/update.py +5 -5
  48. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/core/registry.py +5 -4
  49. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/engine/__init__.py +17 -13
  50. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/engine/service.py +209 -108
  51. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/engine/types.py +62 -36
  52. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/extensions/__init__.py +7 -4
  53. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/extensions/api.py +79 -54
  54. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/extensions/context.py +33 -9
  55. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/extensions/loader.py +47 -30
  56. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/extensions/runtime.py +52 -24
  57. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/extensions/settings.py +5 -8
  58. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/hooks/__init__.py +117 -81
  59. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/hooks/engine.py +98 -44
  60. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/hooks/inference.py +4 -2
  61. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/hooks/runtime.py +36 -16
  62. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/hooks/service.py +10 -9
  63. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/hooks/session.py +45 -28
  64. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/hooks/tui.py +14 -8
  65. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/hooks/types.py +49 -17
  66. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/__init__.py +43 -33
  67. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/api/audio/builtins.py +3 -3
  68. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/api/audio/elevenlabs_audio.py +6 -9
  69. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/api/audio/gemini_audio.py +6 -4
  70. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/api/audio/openai_audio.py +3 -6
  71. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/api/audio/registry.py +3 -1
  72. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/api/audio/sarvam_audio.py +1 -2
  73. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/api/audio/service.py +56 -18
  74. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/api/audio/utils.py +16 -15
  75. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/api/image/base.py +1 -0
  76. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/api/image/builtins.py +2 -2
  77. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/api/image/gemini_image.py +5 -5
  78. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/api/image/openai_image.py +8 -4
  79. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/api/image/openrouter.py +17 -8
  80. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/api/image/registry.py +3 -1
  81. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/api/image/service.py +25 -10
  82. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/api/registry.py +7 -6
  83. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/api/text/anthropic_claude_code.py +95 -41
  84. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/api/text/anthropic_messages.py +98 -40
  85. tau_coding_agent-0.3.9/tau/inference/api/text/anthropic_vertex.py +269 -0
  86. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/api/text/base.py +5 -4
  87. tau_coding_agent-0.3.9/tau/inference/api/text/builtins.py +28 -0
  88. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/api/text/gemini_generate.py +120 -56
  89. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/api/text/github_copilot_chat.py +63 -27
  90. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/api/text/google_antigravity.py +234 -143
  91. tau_coding_agent-0.3.9/tau/inference/api/text/google_vertex.py +366 -0
  92. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/api/text/mistral_chat.py +125 -59
  93. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/api/text/ollama_chat.py +92 -32
  94. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/api/text/openai_codex_responses.py +105 -55
  95. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/api/text/openai_completions.py +79 -30
  96. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/api/text/openai_responses.py +158 -60
  97. tau_coding_agent-0.3.9/tau/inference/api/text/openai_vertex.py +309 -0
  98. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/api/text/registry.py +7 -5
  99. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/api/text/service.py +202 -69
  100. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/api/text/utils.py +103 -34
  101. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/api/video/base.py +0 -1
  102. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/api/video/fal_video.py +16 -3
  103. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/api/video/openrouter_video.py +16 -3
  104. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/api/video/registry.py +2 -0
  105. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/api/video/service.py +28 -13
  106. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/model/registry.py +8 -2
  107. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/model/types.py +30 -8
  108. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/provider/oauth/__init__.py +18 -4
  109. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/provider/oauth/anthropic_claude_code.py +85 -42
  110. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/provider/oauth/github_copilot.py +67 -36
  111. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/provider/oauth/google_antigravity.py +85 -46
  112. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/provider/oauth/openai_codex.py +80 -42
  113. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/provider/oauth/types.py +7 -7
  114. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/provider/oauth/utils.py +25 -14
  115. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/provider/registry.py +19 -10
  116. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/provider/types.py +31 -18
  117. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/types.py +128 -94
  118. tau_coding_agent-0.3.9/tau/inference/utils.py +399 -0
  119. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/message/types.py +67 -32
  120. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/message/utils.py +16 -10
  121. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/packages/__init__.py +2 -2
  122. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/packages/manager.py +20 -15
  123. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/packages/types.py +4 -5
  124. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/packages/utils.py +19 -3
  125. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/prompts/expand.py +5 -1
  126. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/prompts/loader.py +1 -1
  127. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/prompts/registry.py +4 -1
  128. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/rpc/mode.py +174 -76
  129. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/rpc/types.py +42 -1
  130. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/runtime/service.py +54 -34
  131. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/runtime/types.py +50 -37
  132. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/session/branch_summarization.py +23 -10
  133. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/session/compaction.py +134 -49
  134. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/session/manager.py +103 -44
  135. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/session/types.py +12 -17
  136. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/session/utils.py +98 -25
  137. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/settings/manager.py +186 -104
  138. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/settings/paths.py +22 -1
  139. tau_coding_agent-0.3.9/tau/settings/storage.py +68 -0
  140. tau_coding_agent-0.3.9/tau/settings/types.py +192 -0
  141. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/settings/utils.py +3 -1
  142. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/skills/loader.py +4 -2
  143. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/skills/registry.py +11 -5
  144. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/themes/loader.py +155 -86
  145. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/themes/registry.py +10 -10
  146. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/themes/types.py +2 -2
  147. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tool/registry.py +1 -0
  148. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tool/types.py +29 -20
  149. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/trust/__init__.py +2 -2
  150. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/trust/manager.py +11 -3
  151. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/trust/types.py +1 -0
  152. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/trust/utils.py +8 -6
  153. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/__init__.py +10 -10
  154. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/agent_hooks.py +41 -26
  155. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/ansi.py +106 -40
  156. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/app.py +151 -67
  157. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/autocomplete.py +7 -4
  158. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/capabilities.py +7 -2
  159. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/commands/appearance.py +58 -32
  160. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/commands/auth.py +73 -38
  161. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/commands/context.py +9 -6
  162. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/commands/misc.py +9 -3
  163. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/commands/model.py +15 -4
  164. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/commands/session.py +83 -36
  165. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/component.py +13 -23
  166. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/components/autocomplete_manager.py +19 -12
  167. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/components/autocomplete_picker.py +17 -12
  168. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/components/box.py +9 -8
  169. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/components/command_palette.py +18 -12
  170. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/components/dynamic_border.py +1 -1
  171. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/components/file_picker.py +32 -26
  172. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/components/image.py +18 -6
  173. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/components/inline_selector.py +6 -4
  174. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/components/layout.py +99 -47
  175. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/components/message_list.py +129 -91
  176. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/components/modal.py +8 -8
  177. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/components/model_palette.py +29 -12
  178. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/components/picker_overlay.py +6 -2
  179. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/components/prompt_overlay.py +8 -6
  180. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/components/resume_modal.py +30 -27
  181. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/components/select_list.py +29 -23
  182. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/components/settings_modal.py +14 -9
  183. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/components/settings_schema.py +45 -25
  184. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/components/spinner.py +18 -10
  185. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/components/text_input.py +80 -41
  186. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/components/text_prompt.py +2 -1
  187. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/components/tree_select_list.py +54 -35
  188. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/components/trust_screen.py +14 -9
  189. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/diff.py +7 -7
  190. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/input.py +230 -90
  191. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/input_handler.py +98 -44
  192. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/keybindings.py +20 -20
  193. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/markdown.py +65 -24
  194. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/message_renderers.py +4 -3
  195. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/overlay.py +27 -20
  196. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/renderer.py +46 -34
  197. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/terminal.py +36 -14
  198. tau_coding_agent-0.3.9/tau/tui/theme.py +171 -0
  199. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/tui.py +33 -10
  200. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/ui_context.py +38 -24
  201. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/utils/http_proxy.py +13 -12
  202. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/utils/image_processing.py +15 -15
  203. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/utils/secrets.py +14 -3
  204. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/utils/version_check.py +3 -3
  205. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9/tau_coding_agent.egg-info}/PKG-INFO +3 -1
  206. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau_coding_agent.egg-info/SOURCES.txt +59 -41
  207. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau_coding_agent.egg-info/requires.txt +3 -0
  208. tau_coding_agent-0.3.9/tests/test_agent_prompt.py +287 -0
  209. tau_coding_agent-0.3.9/tests/test_agent_types.py +92 -0
  210. tau_coding_agent-0.3.9/tests/test_ansi.py +381 -0
  211. tau_coding_agent-0.3.9/tests/test_auth_manager.py +173 -0
  212. tau_coding_agent-0.3.9/tests/test_auth_storage.py +106 -0
  213. tau_coding_agent-0.3.9/tests/test_branch_summarization.py +125 -0
  214. tau_coding_agent-0.3.9/tests/test_builtin_tools.py +376 -0
  215. tau_coding_agent-0.3.9/tests/test_command_registry.py +167 -0
  216. tau_coding_agent-0.3.9/tests/test_compaction.py +433 -0
  217. tau_coding_agent-0.3.9/tests/test_diff.py +134 -0
  218. tau_coding_agent-0.3.9/tests/test_engine_types.py +110 -0
  219. tau_coding_agent-0.3.9/tests/test_footer_utils.py +69 -0
  220. tau_coding_agent-0.3.9/tests/test_fuzzy.py +98 -0
  221. tau_coding_agent-0.3.9/tests/test_http_proxy.py +168 -0
  222. tau_coding_agent-0.3.9/tests/test_image_processing.py +196 -0
  223. tau_coding_agent-0.3.9/tests/test_inference_api_text_utils.py +127 -0
  224. tau_coding_agent-0.3.9/tests/test_inference_error_utils.py +197 -0
  225. tau_coding_agent-0.3.9/tests/test_inference_types.py +81 -0
  226. tau_coding_agent-0.3.9/tests/test_inference_utils.py +192 -0
  227. tau_coding_agent-0.3.9/tests/test_keybindings.py +137 -0
  228. tau_coding_agent-0.3.9/tests/test_markdown.py +241 -0
  229. tau_coding_agent-0.3.9/tests/test_message_types.py +301 -0
  230. tau_coding_agent-0.3.9/tests/test_message_utils.py +206 -0
  231. tau_coding_agent-0.3.9/tests/test_model_registry.py +137 -0
  232. tau_coding_agent-0.3.9/tests/test_model_types.py +110 -0
  233. tau_coding_agent-0.3.9/tests/test_oauth_utils.py +88 -0
  234. tau_coding_agent-0.3.9/tests/test_packages_utils.py +162 -0
  235. tau_coding_agent-0.3.9/tests/test_pkce.py +45 -0
  236. tau_coding_agent-0.3.9/tests/test_prompts_expand.py +69 -0
  237. tau_coding_agent-0.3.9/tests/test_prompts_loader.py +133 -0
  238. tau_coding_agent-0.3.9/tests/test_prompts_registry.py +84 -0
  239. tau_coding_agent-0.3.9/tests/test_provider_registry.py +135 -0
  240. tau_coding_agent-0.3.9/tests/test_rpc_mode.py +329 -0
  241. tau_coding_agent-0.3.9/tests/test_secrets.py +82 -0
  242. tau_coding_agent-0.3.9/tests/test_session_trust_persist.py +154 -0
  243. tau_coding_agent-0.3.9/tests/test_session_types.py +219 -0
  244. tau_coding_agent-0.3.9/tests/test_session_utils.py +443 -0
  245. tau_coding_agent-0.3.9/tests/test_settings_manager.py +150 -0
  246. tau_coding_agent-0.3.9/tests/test_settings_paths.py +175 -0
  247. tau_coding_agent-0.3.9/tests/test_settings_storage.py +130 -0
  248. tau_coding_agent-0.3.9/tests/test_settings_utils.py +75 -0
  249. tau_coding_agent-0.3.9/tests/test_skills_loader.py +124 -0
  250. tau_coding_agent-0.3.9/tests/test_skills_registry.py +127 -0
  251. tau_coding_agent-0.3.9/tests/test_text_llm_invoke.py +308 -0
  252. tau_coding_agent-0.3.9/tests/test_theme_loader.py +192 -0
  253. tau_coding_agent-0.3.9/tests/test_themes_registry.py +167 -0
  254. tau_coding_agent-0.3.9/tests/test_tool_registry.py +172 -0
  255. tau_coding_agent-0.3.9/tests/test_tool_render.py +91 -0
  256. tau_coding_agent-0.3.9/tests/test_trust_manager.py +121 -0
  257. tau_coding_agent-0.3.9/tests/test_trust_utils.py +124 -0
  258. tau_coding_agent-0.3.9/tests/test_tui_capabilities.py +165 -0
  259. tau_coding_agent-0.3.9/tests/test_tui_input.py +401 -0
  260. tau_coding_agent-0.3.9/tests/test_tui_theme.py +228 -0
  261. tau_coding_agent-0.3.9/tests/test_tui_utils.py +33 -0
  262. tau_coding_agent-0.3.9/tests/test_version_check.py +50 -0
  263. tau_coding_agent-0.3.1/tau/agent/__init__.py +0 -11
  264. tau_coding_agent-0.3.1/tau/builtins/__pycache__/__init__.cpython-313.pyc +0 -0
  265. tau_coding_agent-0.3.1/tau/builtins/__pycache__/__init__.cpython-314.pyc +0 -0
  266. tau_coding_agent-0.3.1/tau/builtins/commands/__pycache__/__init__.cpython-313.pyc +0 -0
  267. tau_coding_agent-0.3.1/tau/builtins/commands/__pycache__/__init__.cpython-314.pyc +0 -0
  268. tau_coding_agent-0.3.1/tau/builtins/commands/__pycache__/clear.cpython-313.pyc +0 -0
  269. tau_coding_agent-0.3.1/tau/builtins/commands/__pycache__/clear.cpython-314.pyc +0 -0
  270. tau_coding_agent-0.3.1/tau/builtins/commands/__pycache__/compact.cpython-313.pyc +0 -0
  271. tau_coding_agent-0.3.1/tau/builtins/commands/__pycache__/compact.cpython-314.pyc +0 -0
  272. tau_coding_agent-0.3.1/tau/builtins/commands/__pycache__/reload.cpython-313.pyc +0 -0
  273. tau_coding_agent-0.3.1/tau/builtins/commands/__pycache__/reload.cpython-314.pyc +0 -0
  274. tau_coding_agent-0.3.1/tau/builtins/commands/__pycache__/session.cpython-313.pyc +0 -0
  275. tau_coding_agent-0.3.1/tau/builtins/commands/__pycache__/session.cpython-314.pyc +0 -0
  276. tau_coding_agent-0.3.1/tau/builtins/extensions/footer/__pycache__/__init__.cpython-313.pyc +0 -0
  277. tau_coding_agent-0.3.1/tau/builtins/extensions/footer/__pycache__/git.cpython-313.pyc +0 -0
  278. tau_coding_agent-0.3.1/tau/builtins/extensions/footer/__pycache__/model.cpython-313.pyc +0 -0
  279. tau_coding_agent-0.3.1/tau/builtins/extensions/footer/__pycache__/utils.cpython-313.pyc +0 -0
  280. tau_coding_agent-0.3.1/tau/builtins/extensions/header/__pycache__/__init__.cpython-313.pyc +0 -0
  281. tau_coding_agent-0.3.1/tau/builtins/models/__pycache__/__init__.cpython-313.pyc +0 -0
  282. tau_coding_agent-0.3.1/tau/builtins/models/__pycache__/text.cpython-313.pyc +0 -0
  283. tau_coding_agent-0.3.1/tau/builtins/models/audio.py +0 -43
  284. tau_coding_agent-0.3.1/tau/builtins/models/image.py +0 -43
  285. tau_coding_agent-0.3.1/tau/builtins/models/text.py +0 -482
  286. tau_coding_agent-0.3.1/tau/builtins/models/video.py +0 -40
  287. tau_coding_agent-0.3.1/tau/builtins/providers/__pycache__/__init__.cpython-313.pyc +0 -0
  288. tau_coding_agent-0.3.1/tau/builtins/providers/__pycache__/text.cpython-313.pyc +0 -0
  289. tau_coding_agent-0.3.1/tau/builtins/providers/audio.py +0 -10
  290. tau_coding_agent-0.3.1/tau/builtins/providers/image.py +0 -9
  291. tau_coding_agent-0.3.1/tau/builtins/providers/text.py +0 -33
  292. tau_coding_agent-0.3.1/tau/builtins/providers/video.py +0 -6
  293. tau_coding_agent-0.3.1/tau/builtins/tools/__pycache__/__init__.cpython-313.pyc +0 -0
  294. tau_coding_agent-0.3.1/tau/builtins/tools/__pycache__/__init__.cpython-314.pyc +0 -0
  295. tau_coding_agent-0.3.1/tau/builtins/tools/__pycache__/bash.cpython-313.pyc +0 -0
  296. tau_coding_agent-0.3.1/tau/builtins/tools/__pycache__/bash.cpython-314.pyc +0 -0
  297. tau_coding_agent-0.3.1/tau/builtins/tools/__pycache__/edit.cpython-313.pyc +0 -0
  298. tau_coding_agent-0.3.1/tau/builtins/tools/__pycache__/edit.cpython-314.pyc +0 -0
  299. tau_coding_agent-0.3.1/tau/builtins/tools/__pycache__/glob.cpython-313.pyc +0 -0
  300. tau_coding_agent-0.3.1/tau/builtins/tools/__pycache__/glob.cpython-314.pyc +0 -0
  301. tau_coding_agent-0.3.1/tau/builtins/tools/__pycache__/grep.cpython-313.pyc +0 -0
  302. tau_coding_agent-0.3.1/tau/builtins/tools/__pycache__/grep.cpython-314.pyc +0 -0
  303. tau_coding_agent-0.3.1/tau/builtins/tools/__pycache__/ls.cpython-313.pyc +0 -0
  304. tau_coding_agent-0.3.1/tau/builtins/tools/__pycache__/ls.cpython-314.pyc +0 -0
  305. tau_coding_agent-0.3.1/tau/builtins/tools/__pycache__/read.cpython-313.pyc +0 -0
  306. tau_coding_agent-0.3.1/tau/builtins/tools/__pycache__/read.cpython-314.pyc +0 -0
  307. tau_coding_agent-0.3.1/tau/builtins/tools/__pycache__/terminal.cpython-313.pyc +0 -0
  308. tau_coding_agent-0.3.1/tau/builtins/tools/__pycache__/terminal.cpython-314.pyc +0 -0
  309. tau_coding_agent-0.3.1/tau/builtins/tools/__pycache__/write.cpython-313.pyc +0 -0
  310. tau_coding_agent-0.3.1/tau/builtins/tools/__pycache__/write.cpython-314.pyc +0 -0
  311. tau_coding_agent-0.3.1/tau/builtins/tools/grep.py +0 -146
  312. tau_coding_agent-0.3.1/tau/extensions/events.py +0 -70
  313. tau_coding_agent-0.3.1/tau/inference/api/text/builtins.py +0 -19
  314. tau_coding_agent-0.3.1/tau/inference/utils.py +0 -219
  315. tau_coding_agent-0.3.1/tau/settings/storage.py +0 -63
  316. tau_coding_agent-0.3.1/tau/settings/types.py +0 -173
  317. tau_coding_agent-0.3.1/tau/tui/theme.py +0 -151
  318. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/LICENSE +0 -0
  319. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/MANIFEST.in +0 -0
  320. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/README.md +0 -0
  321. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/docs/IMPLEMENTATION_SUMMARY.md +0 -0
  322. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/docs/architecture.md +0 -0
  323. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/docs/cli-reference.md +0 -0
  324. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/docs/development.md +0 -0
  325. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/docs/docs.json +0 -0
  326. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/docs/extension-settings.md +0 -0
  327. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/docs/http-proxy.md +0 -0
  328. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/docs/index.md +0 -0
  329. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/docs/installation.md +0 -0
  330. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/docs/keybindings.md +0 -0
  331. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/docs/messages.md +0 -0
  332. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/docs/project-context.md +0 -0
  333. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/docs/project-structure.md +0 -0
  334. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/docs/prompts.md +0 -0
  335. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/docs/python-api.md +0 -0
  336. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/docs/quickstart.md +0 -0
  337. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/docs/sessions.md +0 -0
  338. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/docs/skills.md +0 -0
  339. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/docs/themes.md +0 -0
  340. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/docs/tools.md +0 -0
  341. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/setup.cfg +0 -0
  342. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/__init__.py +0 -0
  343. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/builtins/__init__.py +0 -0
  344. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/builtins/commands/session.py +0 -0
  345. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/builtins/models/__init__.py +0 -0
  346. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/builtins/prompts/commit.md +0 -0
  347. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/builtins/prompts/docs.md +0 -0
  348. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/builtins/prompts/explain.md +0 -0
  349. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/builtins/prompts/fix.md +0 -0
  350. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/builtins/prompts/refactor.md +0 -0
  351. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/builtins/prompts/review.md +0 -0
  352. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/builtins/prompts/test.md +0 -0
  353. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/builtins/providers/__init__.py +0 -0
  354. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/builtins/skills/code-review/SKILL.md +0 -0
  355. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/builtins/skills/debug/SKILL.md +0 -0
  356. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/builtins/skills/git-commit/SKILL.md +0 -0
  357. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/builtins/themes/dark.yaml +0 -0
  358. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/builtins/themes/light.yaml +0 -0
  359. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/builtins/tools/__init__.py +3 -3
  360. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/console/__init__.py +0 -0
  361. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/console/commands/__init__.py +0 -0
  362. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/core/__init__.py +0 -0
  363. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/api/__init__.py +0 -0
  364. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/api/audio/__init__.py +0 -0
  365. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/api/audio/base.py +2 -2
  366. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/api/image/__init__.py +0 -0
  367. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/api/text/__init__.py +0 -0
  368. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/api/text/types.py +0 -0
  369. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/api/video/__init__.py +0 -0
  370. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/api/video/builtins.py +0 -0
  371. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/model/__init__.py +0 -0
  372. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/provider/__init__.py +0 -0
  373. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/inference/provider/oauth/pkce.py +0 -0
  374. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/message/__init__.py +0 -0
  375. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/prompts/types.py +0 -0
  376. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/rpc/__init__.py +1 -1
  377. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/skills/types.py +0 -0
  378. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tool/__init__.py +0 -0
  379. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tool/render.py +0 -0
  380. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/commands/__init__.py +0 -0
  381. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/components/__init__.py +0 -0
  382. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/fuzzy.py +0 -0
  383. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/tui/utils.py +0 -0
  384. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau/utils/__init__.py +0 -0
  385. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau_coding_agent.egg-info/dependency_links.txt +0 -0
  386. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau_coding_agent.egg-info/entry_points.txt +0 -0
  387. {tau_coding_agent-0.3.1 → tau_coding_agent-0.3.9}/tau_coding_agent.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tau-coding-agent
3
- Version: 0.3.1
3
+ Version: 0.3.9
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,8 @@ 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
+ Provides-Extra: tools
30
+ Requires-Dist: ripgrep>=14.0.0; extra == "tools"
29
31
  Dynamic: license-file
30
32
 
31
33
  # Tau (τ)
@@ -143,6 +143,7 @@ The provider ID used as the key in `auth.json` and the `{PROVIDER}_API_KEY` env
143
143
  | OpenAI | `openai` | `OPENAI_API_KEY` |
144
144
  | Google | `google` | `GOOGLE_API_KEY` |
145
145
  | Mistral | `mistral` | `MISTRAL_API_KEY` |
146
+ | Fireworks AI | `fireworks` | `FIREWORKS_API_KEY` |
146
147
  | Ollama | `ollama` | `OLLAMA_API_KEY` |
147
148
 
148
149
  ## Next Steps
@@ -30,9 +30,11 @@ A subdirectory under `extensions/` is loaded if it has either:
30
30
 
31
31
  Before the entry file is executed, these specs are installed into the project or
32
32
  global packages venv (`uv pip install`, falling back to `pip` when `uv` isn't on
33
- PATH) and the venv's site-packages directory is added to `sys.path`. The install
34
- only runs once a hash of the dependency list is cached, so unchanged manifests
35
- are a no-op on subsequent launches.
33
+ PATH) and the venv's site-packages directory is appended to `sys.path`. Tau's
34
+ runtime environment keeps precedence, so an extension cannot replace Tau's own
35
+ dependencies with incompatible versions. The install only runs once — a hash of
36
+ the dependency list is cached, so unchanged manifests are a no-op on subsequent
37
+ launches.
36
38
 
37
39
  ## Entry point
38
40
 
@@ -625,29 +627,6 @@ session working directory; pass an explicit `cwd=` to override.
625
627
 
626
628
  ---
627
629
 
628
- ## Cross-extension event bus
629
-
630
- Extensions can communicate with each other via `tau.events`:
631
-
632
- ```python
633
- # producer.py
634
- def register(tau):
635
- @tau.on("session_start")
636
- async def on_start(event, ctx):
637
- await tau.events.emit("producer:ready", {"version": "1.0"})
638
-
639
- # consumer.py
640
- def register(tau):
641
- @tau.events.on("producer:ready")
642
- async def on_ready(data):
643
- print(f"producer ready — version {data['version']}")
644
- ```
645
-
646
- This is separate from the hooks bus: `tau.events` is for extension-to-extension
647
- messages; `tau.on(...)` is for system lifecycle events.
648
-
649
- ---
650
-
651
630
  ## Editor autocomplete providers
652
631
 
653
632
  Extensions can inject custom autocomplete suggestions into the editor. When the user
@@ -740,7 +719,6 @@ def register(tau):
740
719
  | `tau.register_flag(name, type, env, default)` | Declare an env-backed flag |
741
720
  | `tau.get_flag(name)` | Read a registered flag's value |
742
721
  | `await tau.exec(cmd, args, cwd)` | Run a shell command |
743
- | `tau.events` | Cross-extension `EventBus` |
744
722
  | `tau.config` | Per-extension settings dict from `settings.json` |
745
723
  | `tau.cwd` | `Path` — working directory at session start |
746
724
  | `tau.model_id` | Active model identifier |
@@ -12,6 +12,7 @@ Tau supports the following inference providers:
12
12
  | OpenAI | API Key | No | [Link](#openai) |
13
13
  | Google Gemini | API Key | Yes | [Link](#google-gemini) |
14
14
  | Mistral AI | API Key | Limited | [Link](#mistral-ai) |
15
+ | Fireworks AI | API Key | No | [Link](#fireworks-ai) |
15
16
  | Ollama | None | Yes | [Link](#ollama-local) |
16
17
  | Azure OpenAI | API Key | No | [Link](#azure-openai) |
17
18
 
@@ -103,11 +104,51 @@ export MISTRAL_API_KEY=...
103
104
  tau --model mistral/mistral-large -p "Say hello"
104
105
  ```
105
106
 
107
+ ## Fireworks AI
108
+
109
+ Fireworks AI provides fast, cost-efficient inference for open-source models including Llama, DeepSeek, Qwen, and Mixtral — with OpenAI-compatible APIs.
110
+
111
+ **Text models**:
112
+
113
+ | Model | Context | Pricing (in/out per M tokens) |
114
+ |-------|---------|-------------------------------|
115
+ | `accounts/fireworks/models/llama-v3p3-70b-instruct` | 131K | $0.90 / $0.90 |
116
+ | `accounts/fireworks/models/llama-v3p1-405b-instruct` | 131K | $3.00 / $3.00 |
117
+ | `accounts/fireworks/models/deepseek-r1` *(thinking)* | 160K | $3.00 / $7.00 |
118
+ | `accounts/fireworks/models/deepseek-v3` | 131K | $0.90 / $0.90 |
119
+ | `accounts/fireworks/models/qwen3-235b-a22b` *(thinking)* | 131K | $0.22 / $0.88 |
120
+ | `accounts/fireworks/models/qwen3-30b-a3b` *(thinking)* | 131K | $0.15 / $0.60 |
121
+ | `accounts/fireworks/models/mixtral-8x22b-instruct` | 65K | $0.90 / $0.90 |
122
+ | `accounts/fireworks/models/gemma2-9b-it` | 8K | $0.20 / $0.20 |
123
+
124
+ **Image models**: Flux 1 Schnell FP8, Flux 1 Dev FP8
125
+
126
+ ### Setup
127
+
128
+ 1. Create an account at [Fireworks AI](https://fireworks.ai)
129
+ 2. Generate an API key in your account settings
130
+ 3. Set the environment variable:
131
+
132
+ ```bash
133
+ export FIREWORKS_API_KEY=fw_...
134
+ ```
135
+
136
+ ### Verify
137
+
138
+ ```bash
139
+ tau --model fireworks/accounts/fireworks/models/llama-v3p3-70b-instruct -p "Say hello"
140
+ ```
141
+
142
+ ### Notes
143
+
144
+ - Uses the OpenAI-compatible completions API under the hood
145
+ - Session affinity is maintained automatically via a per-request `x-session-affinity` header
146
+
106
147
  ## Ollama (Local)
107
148
 
108
149
  Run open-source models locally without API keys or internet.
109
150
 
110
- **Models**: `llama2`, `mistral`, `neural-chat`, and [others](https://ollama.ai/library)
151
+ **Models**: `llama2`, `mistral`, `neural-chat`, `qwen3.5:cloud` (262K context, thinking), and [others](https://ollama.ai/library)
111
152
 
112
153
  ### Setup
113
154
 
@@ -187,6 +187,10 @@ When your conversation grows long, tau automatically summarizes older messages t
187
187
  - **`reserve_tokens`**: How many tokens to keep available for the LLM's response (default 16,384 ≈ 4K-5K words)
188
188
  - **`keep_recent_tokens`**: How many recent message tokens to preserve word-for-word before summarization kicks in (default 20,000 ≈ 5K-6K words)
189
189
 
190
+ #### Mid-turn (threshold) compaction
191
+
192
+ In addition to compaction triggered at the start of a turn, tau can compact **mid-turn** when the context hits the configured limit while the agent is already running. When this happens the engine stops cleanly so you can review the compacted context and continue — no partial output is lost. Tool output lines are truncated before sending to the LLM to help prevent hitting the threshold in the first place.
193
+
190
194
  Example configurations:
191
195
 
192
196
  ```json
@@ -284,6 +288,10 @@ These settings are applied to the LLM client at startup:
284
288
 
285
289
  Changes take effect on the next session start or after `/reload`.
286
290
 
291
+ #### Adaptive retry delay
292
+
293
+ When a provider responds with a `Retry-After` or `Retry-After-Ms` header (common on rate-limit responses), tau uses that value as the retry delay instead of the configured `base_delay_ms`. The delay is capped at **60 seconds** so a provider that returns an extreme value (e.g. "retry in 16 days") doesn't stall the agent indefinitely. When no header is present, `base_delay_ms` is used.
294
+
287
295
  ```json
288
296
  {
289
297
  "retry": {
@@ -442,11 +450,11 @@ All retry settings are **fully implemented and wired to the LLM client at startu
442
450
  All thinking budget settings are **fully implemented and configurable**:
443
451
 
444
452
  - **`thinking_budgets.minimal`**: Token budget for "minimal" level (default: `1024`)
445
- - **`thinking_budgets.low`**: Token budget for "low" level (default: `2048`)
446
- - **`thinking_budgets.medium`**: Token budget for "medium" level (default: `4096`)
447
- - **`thinking_budgets.high`**: Token budget for "high" level (default: `8192`)
448
- - **`thinking_budgets.xhigh`**: Token budget for "xhigh" level (default: `16384`)
449
- - **`thinking_budgets.max`**: Token budget for "max" level (default: `32768`)
453
+ - **`thinking_budgets.low`**: Token budget for "low" level (default: `4096`)
454
+ - **`thinking_budgets.medium`**: Token budget for "medium" level (default: `8192`)
455
+ - **`thinking_budgets.high`**: Token budget for "high" level (default: `16384`)
456
+ - **`thinking_budgets.xhigh`**: Token budget for "xhigh" level (default: `32768`)
457
+ - **`thinking_budgets.max`**: Token budget for "max" level (default: `65536`)
450
458
 
451
459
  Override these to customize extended thinking token allocations for your workflow.
452
460
 
@@ -102,8 +102,8 @@ Prints session info inline in the chat. Shows:
102
102
 
103
103
  - **Session Info** — Name (if set), File path, ID
104
104
  - **Messages** — User, Assistant, Tool calls, Tool results, Total
105
- - **Tokens** — Input, Output, Cache read (if any), Cache write (if any), Total
106
- - **Cost** — Total USD cost (only shown if non-zero)
105
+ - **Tokens** — Input, Output, Cache read (if any), Cache write (if any), Total — counts use human-readable suffixes (e.g. `1.2K`, `3.4M`); each line shows an inline cost estimate in USD
106
+ - **Cost** — Total USD cost with inline estimate (only shown if non-zero)
107
107
 
108
108
  ### `/copy`
109
109
 
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "tau-coding-agent"
7
- version = "0.3.1"
7
+ version = "0.3.9"
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"
@@ -64,3 +64,17 @@ include = ["tau*"]
64
64
  tau = [
65
65
  "builtins/**/*",
66
66
  ]
67
+
68
+ [tool.pytest.ini_options]
69
+ testpaths = ["tests"]
70
+
71
+ [project.optional-dependencies]
72
+ tools = ["ripgrep>=14.0.0"]
73
+
74
+ [dependency-groups]
75
+ dev = [
76
+ "pytest>=9.1.1",
77
+ "ruff>=0.4.0",
78
+ "mypy>=1.10.0",
79
+ "pyright>=1.1.360",
80
+ ]
@@ -0,0 +1,11 @@
1
+ from tau.agent.service import Agent
2
+ from tau.agent.types import AgentConfig, AgentContext, AgentPhase, ContextUsage, PromptOptions
3
+
4
+ __all__ = [
5
+ "Agent",
6
+ "AgentConfig",
7
+ "AgentContext",
8
+ "AgentPhase",
9
+ "PromptOptions",
10
+ "ContextUsage",
11
+ ]
@@ -1,10 +1,10 @@
1
1
  """System prompt assembly for the coding agent."""
2
2
 
3
- from tau.agent.prompt.types import PromptOptions
4
3
  from tau.agent.prompt.builder import PromptBuilder, build_prompt
4
+ from tau.agent.prompt.types import PromptOptions
5
5
 
6
6
  __all__ = [
7
- 'PromptOptions',
8
- 'PromptBuilder',
9
- 'build_prompt',
7
+ "PromptOptions",
8
+ "PromptBuilder",
9
+ "build_prompt",
10
10
  ]
@@ -8,10 +8,11 @@ from pathlib import Path
8
8
 
9
9
  from tau.agent.prompt.types import PromptOptions
10
10
  from tau.settings.paths import (
11
- get_system_prompt_path,
12
11
  get_append_system_prompt_path,
13
12
  get_docs_dir,
13
+ get_examples_path,
14
14
  get_readme_path,
15
+ get_system_prompt_path,
15
16
  )
16
17
 
17
18
 
@@ -32,14 +33,84 @@ def load_project_context_file(cwd: Path) -> tuple[str, Path] | None:
32
33
  pass
33
34
  return None
34
35
 
36
+
37
+ def _find_git_root(cwd: Path) -> Path | None:
38
+ """Walk up from cwd and return the first directory containing .git, or None."""
39
+ current = cwd.resolve()
40
+ while True:
41
+ if (current / ".git").exists():
42
+ return current
43
+ parent = current.parent
44
+ if parent == current:
45
+ return None
46
+ current = parent
47
+
48
+
49
+ def load_project_context_files(cwd: Path) -> list[tuple[str, Path]]:
50
+ """Walk from git root (or cwd if not in a repo) down to cwd, collecting context files.
51
+
52
+ Returns (content, path) tuples ordered root-first so cwd instructions appear
53
+ last and take highest precedence when the model reads top-to-bottom.
54
+ """
55
+ candidates = ["AGENTS.md", "AGENTS.MD", "CLAUDE.md", "CLAUDE.MD"]
56
+
57
+ def _load(directory: Path) -> tuple[str, Path] | None:
58
+ for filename in candidates:
59
+ path = directory / filename
60
+ if path.is_file():
61
+ try:
62
+ content = path.read_text(encoding="utf-8").strip()
63
+ return (content, path) if content else None
64
+ except OSError:
65
+ pass
66
+ return None
67
+
68
+ resolved = cwd.resolve()
69
+ git_root = _find_git_root(resolved)
70
+ stop_at = git_root if git_root else resolved
71
+
72
+ # Collect directories from stop_at down to cwd
73
+ dirs: list[Path] = []
74
+ current = resolved
75
+ while True:
76
+ dirs.append(current)
77
+ if current == stop_at:
78
+ break
79
+ parent = current.parent
80
+ if parent == current:
81
+ break
82
+ current = parent
83
+
84
+ seen: set[Path] = set()
85
+ results: list[tuple[str, Path]] = []
86
+ for directory in reversed(dirs):
87
+ entry = _load(directory)
88
+ if entry and entry[1] not in seen:
89
+ seen.add(entry[1])
90
+ results.append(entry)
91
+
92
+ return results
93
+
94
+
35
95
  _DEFAULT_IDENTITY = """\
36
- You are a coding agent. You help users understand, write, and modify code and files.
96
+ You are a coding agent operating inside Tau, a coding agent harness. You help users by
97
+ reading files, executing commands, editing code, and writing new files.
37
98
 
38
99
  You have strong software engineering skills. You think carefully before making changes,
39
100
  and follow the existing style and conventions of the project.
40
- If a task is ambiguous, ask a clarifying question before proceeding.\
41
101
  """
42
102
 
103
+ _GENERAL_GUIDELINES = [
104
+ "If a task is ambiguous, ask a precise, clarifying question before proceeding.",
105
+ ("Do only what the task asks; don't add features, refactors, or abstractions beyond scope."),
106
+ "Write comments when the *why* is non-obvious — well-named code explains itself.",
107
+ "Keep responses short, concise, and direct; don't summarize what you just did.",
108
+ (
109
+ "Prioritize accuracy over agreement — investigate before confirming, and "
110
+ "disagree when the evidence calls for it."
111
+ ),
112
+ ]
113
+
43
114
 
44
115
  _GIT_STATUS_MAX_LINES = 30
45
116
  _GIT_LOG_COUNT = 5
@@ -136,7 +207,8 @@ class PromptBuilder:
136
207
  Assembles the system prompt from layered sources.
137
208
 
138
209
  Layers in order:
139
- Identity — SYSTEM.md if present, else built-in identity; --system bypasses entirely
210
+ Identity — SYSTEM.md if present, else built-in identity;
211
+ --system bypasses entirely
140
212
  Tools section — auto-generated from tool list (descriptions + guidelines)
141
213
  Tau docs — tau documentation and examples
142
214
  Project Instructions — AGENTS.md or CLAUDE.md from project (if present)
@@ -155,6 +227,7 @@ class PromptBuilder:
155
227
  def build(self) -> str:
156
228
  """Build the complete system prompt."""
157
229
  identity = self._identity()
230
+ guidelines = self._guidelines_section()
158
231
  tools = self._tools_section()
159
232
  docs = self._docs_section()
160
233
  project_context = self._project_context_section()
@@ -162,7 +235,9 @@ class PromptBuilder:
162
235
  append = self._append()
163
236
  git = self._git_section()
164
237
  footer = self._footer()
165
- return identity + tools + docs + project_context + skills + append + git + footer
238
+ return (
239
+ identity + guidelines + tools + docs + project_context + skills + append + git + footer
240
+ )
166
241
 
167
242
  # ------------------------------------------------------------------
168
243
  # Layers
@@ -178,6 +253,10 @@ class PromptBuilder:
178
253
 
179
254
  return _DEFAULT_IDENTITY
180
255
 
256
+ def _guidelines_section(self) -> str:
257
+ bullets = "\n".join(f"- {g}" for g in _GENERAL_GUIDELINES)
258
+ return f"\n\n# Guidelines\n\n{bullets}"
259
+
181
260
  def _tools_section(self) -> str:
182
261
  tools = self._opts.tools
183
262
  if not tools:
@@ -194,6 +273,10 @@ class PromptBuilder:
194
273
  if guideline:
195
274
  guidelines.append(f"- **{t.name}**: {guideline.strip()}")
196
275
  section = "\n\n# Available Tools\n\n" + "\n".join(lines)
276
+ section += (
277
+ "\nIn addition to the tools above, you may have access to other custom "
278
+ "tools depending on the project."
279
+ )
197
280
  if guidelines:
198
281
  section += "\n\n## Tool Guidelines\n\n" + "\n".join(guidelines)
199
282
  return section
@@ -201,6 +284,10 @@ class PromptBuilder:
201
284
  def _project_context_section(self) -> str:
202
285
  """Include project-specific context from AGENTS.md or CLAUDE.md if present.
203
286
 
287
+ Walks from git root down to cwd, loading one file per directory.
288
+ Each file is wrapped in <project_instructions path="..."> so the model
289
+ knows which directory each set of rules comes from.
290
+
204
291
  Skipped if:
205
292
  - disable_context_files is True (--no-context-files flag)
206
293
  - project is not trusted (--no-approve flag or trust store)
@@ -209,36 +296,50 @@ class PromptBuilder:
209
296
  return ""
210
297
  if self._opts.project_trusted is False:
211
298
  return ""
212
- context = load_project_context_file(self._opts.cwd)
213
- if not context:
299
+ files = load_project_context_files(self._opts.cwd)
300
+ if not files:
214
301
  return ""
215
- content, path = context
302
+ blocks = "".join(
303
+ f'<project_instructions path="{path}">\n{content}\n</project_instructions>\n\n'
304
+ for content, path in files
305
+ )
216
306
  return (
217
- f"\n\n# Project Instructions\n\n"
218
- f"Project-specific guidelines and rules (from {path.name}):\n\n"
219
- f"{content}\n\n"
220
- "Follow project-specific instructions before general Tau guidelines."
307
+ "\n\n# Project Instructions\n\n"
308
+ "Project-specific guidelines (follow before general Tau guidelines):\n\n"
309
+ "<project_context>\n\n" + blocks + "</project_context>"
221
310
  )
222
311
 
223
312
  def _docs_section(self) -> str:
224
313
  readme = get_readme_path()
225
314
  docs = get_docs_dir()
315
+ examples = get_examples_path()
226
316
  return (
227
317
  "\n\nTau documentation (read only when the user asks about Tau itself, its"
228
318
  " settings, extensions, themes, skills, tools, sessions, or keybindings):\n"
229
319
  f"- README: {readme}\n"
230
320
  f"- Docs directory: {docs}\n"
231
- "- When asked about: settings (docs/settings.md), tools (docs/tools.md),"
321
+ f"- Examples directory: {examples} (extensions, custom tools, themes, skills)\n"
322
+ "- When asked about: quickstart (docs/quickstart.md),"
323
+ " installation (docs/installation.md),"
324
+ " usage (docs/usage.md), CLI flags (docs/cli-reference.md),"
325
+ " architecture (docs/architecture.md),"
326
+ " settings (docs/settings.md), tools (docs/tools.md),"
232
327
  " extensions (docs/extensions.md), themes (docs/themes.md),"
233
- " skills (docs/skills.md), keybindings (docs/keybindings.md),"
234
- " sessions (docs/sessions.md), usage (docs/usage.md),"
235
- " Python API (docs/python-api.md), inference providers (docs/inference-providers.md)\n"
236
- "- Resolve all doc paths under the Docs directory above, not the current working directory\n"
328
+ " skills (docs/skills.md), prompts (docs/prompts.md),"
329
+ " keybindings (docs/keybindings.md),"
330
+ " sessions (docs/sessions.md), messages (docs/messages.md),"
331
+ " Python API (docs/python-api.md),"
332
+ " inference providers (docs/inference-providers.md),"
333
+ " auth (docs/auth.md)\n"
334
+ "- Resolve all doc paths under the Docs directory above,"
335
+ " not the current working directory\n"
336
+ "- Resolve all example paths under the Examples directory above\n"
237
337
  "- Read .md files completely and follow cross-references before answering"
238
338
  )
239
339
 
240
340
  def _skills_section(self) -> str:
241
341
  from tau.skills.registry import skill_registry
342
+
242
343
  block = skill_registry.format_for_system_prompt(self._opts.skills)
243
344
  return f"\n\n{block}" if block else ""
244
345
 
@@ -2,13 +2,16 @@ from __future__ import annotations
2
2
 
3
3
  from pathlib import Path
4
4
  from typing import Any
5
+
5
6
  from pydantic import BaseModel, Field
7
+
6
8
  from tau.tool.types import Tool
7
9
 
8
10
 
9
11
  class PromptOptions(BaseModel):
10
12
  """Options for constructing the system prompt."""
11
- model_config = {'arbitrary_types_allowed': True}
13
+
14
+ model_config = {"arbitrary_types_allowed": True}
12
15
 
13
16
  cwd: Path
14
17
  tools: list[Tool] = Field(default_factory=list)