tau-coding-agent 0.3.5__tar.gz → 0.4.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (368) hide show
  1. {tau_coding_agent-0.3.5/tau_coding_agent.egg-info → tau_coding_agent-0.4.0}/PKG-INFO +5 -3
  2. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/README.md +2 -2
  3. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/docs/auth.md +1 -0
  4. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/docs/extension-settings.md +211 -6
  5. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/docs/extensions.md +0 -24
  6. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/docs/inference-providers.md +42 -1
  7. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/docs/settings.md +13 -5
  8. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/docs/usage.md +2 -2
  9. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/pyproject.toml +4 -1
  10. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/agent/prompt/builder.py +15 -8
  11. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/agent/service.py +200 -75
  12. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/auth/manager.py +6 -2
  13. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/builtins/extensions/footer/__init__.py +14 -9
  14. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/builtins/extensions/footer/git.py +1 -1
  15. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/builtins/extensions/footer/model.py +1 -1
  16. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/builtins/extensions/header/__init__.py +8 -3
  17. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/builtins/models/text.py +369 -3
  18. tau_coding_agent-0.4.0/tau/builtins/providers/audio.py +22 -0
  19. tau_coding_agent-0.4.0/tau/builtins/providers/image.py +31 -0
  20. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/builtins/providers/text.py +39 -0
  21. tau_coding_agent-0.4.0/tau/builtins/providers/video.py +11 -0
  22. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/builtins/tools/edit.py +1 -1
  23. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/builtins/tools/glob.py +23 -4
  24. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/builtins/tools/grep.py +58 -19
  25. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/builtins/tools/ls.py +1 -1
  26. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/builtins/tools/read.py +5 -3
  27. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/builtins/tools/terminal.py +48 -19
  28. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/builtins/tools/write.py +1 -1
  29. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/console/cli.py +61 -11
  30. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/console/commands/auth.py +14 -3
  31. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/core/registry.py +1 -1
  32. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/engine/service.py +249 -149
  33. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/engine/types.py +2 -1
  34. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/extensions/__init__.py +0 -2
  35. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/extensions/api.py +151 -24
  36. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/extensions/context.py +78 -2
  37. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/extensions/loader.py +63 -17
  38. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/extensions/runtime.py +15 -0
  39. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/hooks/engine.py +14 -0
  40. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/hooks/service.py +3 -3
  41. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/__init__.py +3 -3
  42. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/api/audio/gemini_audio.py +2 -2
  43. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/api/audio/service.py +38 -3
  44. tau_coding_agent-0.4.0/tau/inference/api/availability.py +64 -0
  45. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/api/image/gemini_image.py +2 -2
  46. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/api/image/service.py +22 -2
  47. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/api/text/anthropic_claude_code.py +30 -12
  48. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/api/text/anthropic_messages.py +36 -13
  49. tau_coding_agent-0.4.0/tau/inference/api/text/anthropic_vertex.py +273 -0
  50. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/api/text/builtins.py +3 -0
  51. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/api/text/gemini_generate.py +26 -22
  52. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/api/text/github_copilot_chat.py +5 -0
  53. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/api/text/google_antigravity.py +29 -8
  54. tau_coding_agent-0.4.0/tau/inference/api/text/google_vertex.py +368 -0
  55. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/api/text/mistral_chat.py +4 -1
  56. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/api/text/ollama_chat.py +4 -1
  57. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/api/text/openai_codex_responses.py +11 -11
  58. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/api/text/openai_completions.py +5 -0
  59. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/api/text/openai_responses.py +16 -12
  60. tau_coding_agent-0.4.0/tau/inference/api/text/openai_vertex.py +309 -0
  61. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/api/text/service.py +108 -55
  62. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/api/video/service.py +22 -2
  63. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/model/types.py +16 -1
  64. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/provider/oauth/__init__.py +11 -0
  65. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/provider/oauth/utils.py +4 -1
  66. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/provider/registry.py +8 -12
  67. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/provider/types.py +6 -3
  68. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/types.py +1 -0
  69. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/utils.py +49 -0
  70. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/message/types.py +9 -21
  71. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/message/utils.py +3 -2
  72. {tau_coding_agent-0.3.5/tau/tui → tau_coding_agent-0.4.0/tau/modes/interactive}/agent_hooks.py +6 -3
  73. {tau_coding_agent-0.3.5/tau/tui → tau_coding_agent-0.4.0/tau/modes/interactive}/app.py +119 -64
  74. tau_coding_agent-0.4.0/tau/modes/interactive/commands/__init__.py +3 -0
  75. {tau_coding_agent-0.3.5/tau/tui → tau_coding_agent-0.4.0/tau/modes/interactive}/commands/appearance.py +47 -12
  76. {tau_coding_agent-0.3.5/tau/tui → tau_coding_agent-0.4.0/tau/modes/interactive}/commands/auth.py +99 -57
  77. {tau_coding_agent-0.3.5/tau/tui → tau_coding_agent-0.4.0/tau/modes/interactive}/commands/context.py +4 -4
  78. tau_coding_agent-0.4.0/tau/modes/interactive/commands/extensions.py +107 -0
  79. {tau_coding_agent-0.3.5/tau/tui → tau_coding_agent-0.4.0/tau/modes/interactive}/commands/misc.py +1 -1
  80. tau_coding_agent-0.4.0/tau/modes/interactive/commands/model.py +198 -0
  81. {tau_coding_agent-0.3.5/tau/tui → tau_coding_agent-0.4.0/tau/modes/interactive}/commands/session.py +41 -12
  82. tau_coding_agent-0.4.0/tau/modes/interactive/components/__init__.py +0 -0
  83. {tau_coding_agent-0.3.5/tau/tui → tau_coding_agent-0.4.0/tau/modes/interactive}/components/command_palette.py +18 -9
  84. tau_coding_agent-0.4.0/tau/modes/interactive/components/config_selector.py +225 -0
  85. tau_coding_agent-0.4.0/tau/modes/interactive/components/extension_selector.py +116 -0
  86. {tau_coding_agent-0.3.5/tau/tui → tau_coding_agent-0.4.0/tau/modes/interactive}/components/file_picker.py +21 -10
  87. {tau_coding_agent-0.3.5/tau/tui → tau_coding_agent-0.4.0/tau/modes/interactive}/components/layout.py +369 -120
  88. {tau_coding_agent-0.3.5/tau/tui → tau_coding_agent-0.4.0/tau/modes/interactive}/components/message_list.py +18 -9
  89. tau_coding_agent-0.4.0/tau/modes/interactive/components/model_selector.py +283 -0
  90. tau_coding_agent-0.4.0/tau/modes/interactive/components/oauth_selector.py +128 -0
  91. tau_coding_agent-0.3.5/tau/tui/components/prompt_overlay.py → tau_coding_agent-0.4.0/tau/modes/interactive/components/overlays.py +163 -3
  92. tau_coding_agent-0.3.5/tau/tui/components/resume_modal.py → tau_coding_agent-0.4.0/tau/modes/interactive/components/session_selector.py +44 -46
  93. tau_coding_agent-0.4.0/tau/modes/interactive/components/settings_selector.py +619 -0
  94. tau_coding_agent-0.4.0/tau/modes/interactive/components/theme_selector.py +103 -0
  95. tau_coding_agent-0.4.0/tau/modes/interactive/components/thinking_selector.py +94 -0
  96. tau_coding_agent-0.3.5/tau/tui/components/tree_select_list.py → tau_coding_agent-0.4.0/tau/modes/interactive/components/tree_selector.py +2 -2
  97. {tau_coding_agent-0.3.5/tau/tui → tau_coding_agent-0.4.0/tau/modes/interactive}/components/trust_screen.py +16 -15
  98. tau_coding_agent-0.4.0/tau/modes/print/__init__.py +0 -0
  99. tau_coding_agent-0.4.0/tau/modes/rpc/__init__.py +8 -0
  100. {tau_coding_agent-0.3.5/tau → tau_coding_agent-0.4.0/tau/modes}/rpc/mode.py +8 -4
  101. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/packages/manager.py +5 -2
  102. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/runtime/service.py +52 -31
  103. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/runtime/types.py +20 -15
  104. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/session/compaction.py +47 -0
  105. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/session/manager.py +36 -8
  106. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/session/utils.py +55 -3
  107. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/settings/manager.py +85 -33
  108. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/settings/types.py +27 -3
  109. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/themes/loader.py +77 -3
  110. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/themes/registry.py +15 -0
  111. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/tool/render.py +1 -1
  112. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/tool/types.py +9 -0
  113. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/trust/manager.py +7 -1
  114. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/tui/__init__.py +16 -1
  115. tau_coding_agent-0.3.5/tau/tui/components/autocomplete_manager.py → tau_coding_agent-0.4.0/tau/tui/autocomplete.py +214 -11
  116. tau_coding_agent-0.4.0/tau/tui/component.py +512 -0
  117. tau_coding_agent-0.4.0/tau/tui/components/__init__.py +0 -0
  118. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/tui/components/box.py +17 -1
  119. tau_coding_agent-0.4.0/tau/tui/components/editor.py +72 -0
  120. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/tui/components/image.py +10 -3
  121. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/tui/components/select_list.py +41 -4
  122. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/tui/components/text_input.py +158 -42
  123. tau_coding_agent-0.3.5/tau/tui/input_handler.py → tau_coding_agent-0.4.0/tau/tui/input.py +982 -23
  124. tau_coding_agent-0.4.0/tau/tui/keybinding_hints.py +40 -0
  125. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/tui/markdown.py +87 -14
  126. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/tui/terminal.py +145 -16
  127. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/tui/theme.py +20 -2
  128. tau_coding_agent-0.4.0/tau/tui/tui.py +1266 -0
  129. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/tui/ui_context.py +90 -6
  130. tau_coding_agent-0.3.5/tau/tui/ansi.py → tau_coding_agent-0.4.0/tau/tui/utils.py +258 -0
  131. tau_coding_agent-0.4.0/tau/utils/__init__.py +0 -0
  132. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/utils/image_processing.py +2 -2
  133. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/utils/secrets.py +16 -3
  134. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0/tau_coding_agent.egg-info}/PKG-INFO +5 -3
  135. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau_coding_agent.egg-info/SOURCES.txt +48 -40
  136. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau_coding_agent.egg-info/requires.txt +3 -0
  137. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tests/test_ansi.py +146 -1
  138. tau_coding_agent-0.4.0/tests/test_auth_command.py +41 -0
  139. tau_coding_agent-0.4.0/tests/test_auth_storage.py +106 -0
  140. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tests/test_builtin_tools.py +43 -0
  141. tau_coding_agent-0.4.0/tests/test_compaction.py +433 -0
  142. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tests/test_diff.py +1 -1
  143. tau_coding_agent-0.4.0/tests/test_editor_protocol.py +67 -0
  144. tau_coding_agent-0.4.0/tests/test_engine_steering.py +274 -0
  145. tau_coding_agent-0.4.0/tests/test_extension_api.py +182 -0
  146. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tests/test_fuzzy.py +1 -1
  147. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tests/test_image_processing.py +69 -0
  148. tau_coding_agent-0.4.0/tests/test_inference_api_text_utils.py +127 -0
  149. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tests/test_keybindings.py +4 -4
  150. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tests/test_markdown.py +42 -0
  151. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tests/test_message_types.py +83 -0
  152. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tests/test_message_utils.py +27 -0
  153. tau_coding_agent-0.4.0/tests/test_model_availability.py +118 -0
  154. tau_coding_agent-0.4.0/tests/test_model_selector_modal.py +153 -0
  155. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tests/test_packages_utils.py +48 -0
  156. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tests/test_provider_registry.py +6 -6
  157. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tests/test_rpc_mode.py +126 -5
  158. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tests/test_secrets.py +6 -1
  159. tau_coding_agent-0.4.0/tests/test_session_trust_persist.py +154 -0
  160. tau_coding_agent-0.4.0/tests/test_session_utils.py +443 -0
  161. tau_coding_agent-0.4.0/tests/test_settings_manager.py +253 -0
  162. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tests/test_settings_paths.py +29 -0
  163. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tests/test_settings_storage.py +42 -0
  164. tau_coding_agent-0.4.0/tests/test_text_llm_invoke.py +308 -0
  165. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tests/test_tool_registry.py +27 -0
  166. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tests/test_tool_render.py +1 -1
  167. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tests/test_trust_utils.py +29 -0
  168. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tests/test_tui_capabilities.py +1 -1
  169. tau_coding_agent-0.4.0/tests/test_tui_input.py +470 -0
  170. tau_coding_agent-0.4.0/tests/test_tui_layout_sizing.py +182 -0
  171. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tests/test_tui_utils.py +9 -2
  172. tau_coding_agent-0.3.5/tau/builtins/providers/audio.py +0 -10
  173. tau_coding_agent-0.3.5/tau/builtins/providers/image.py +0 -15
  174. tau_coding_agent-0.3.5/tau/builtins/providers/video.py +0 -8
  175. tau_coding_agent-0.3.5/tau/extensions/events.py +0 -71
  176. tau_coding_agent-0.3.5/tau/rpc/__init__.py +0 -8
  177. tau_coding_agent-0.3.5/tau/tui/autocomplete.py +0 -36
  178. tau_coding_agent-0.3.5/tau/tui/capabilities.py +0 -124
  179. tau_coding_agent-0.3.5/tau/tui/commands/__init__.py +0 -3
  180. tau_coding_agent-0.3.5/tau/tui/commands/model.py +0 -129
  181. tau_coding_agent-0.3.5/tau/tui/component.py +0 -258
  182. tau_coding_agent-0.3.5/tau/tui/components/autocomplete_picker.py +0 -147
  183. tau_coding_agent-0.3.5/tau/tui/components/dynamic_border.py +0 -19
  184. tau_coding_agent-0.3.5/tau/tui/components/inline_selector.py +0 -73
  185. tau_coding_agent-0.3.5/tau/tui/components/modal.py +0 -97
  186. tau_coding_agent-0.3.5/tau/tui/components/model_palette.py +0 -221
  187. tau_coding_agent-0.3.5/tau/tui/components/picker_overlay.py +0 -178
  188. tau_coding_agent-0.3.5/tau/tui/components/settings_modal.py +0 -277
  189. tau_coding_agent-0.3.5/tau/tui/components/settings_schema.py +0 -223
  190. tau_coding_agent-0.3.5/tau/tui/components/text_prompt.py +0 -83
  191. tau_coding_agent-0.3.5/tau/tui/diff.py +0 -114
  192. tau_coding_agent-0.3.5/tau/tui/fuzzy.py +0 -99
  193. tau_coding_agent-0.3.5/tau/tui/input.py +0 -770
  194. tau_coding_agent-0.3.5/tau/tui/keybindings.py +0 -90
  195. tau_coding_agent-0.3.5/tau/tui/message_renderers.py +0 -32
  196. tau_coding_agent-0.3.5/tau/tui/overlay.py +0 -334
  197. tau_coding_agent-0.3.5/tau/tui/renderer.py +0 -385
  198. tau_coding_agent-0.3.5/tau/tui/tui.py +0 -552
  199. tau_coding_agent-0.3.5/tau/tui/utils.py +0 -20
  200. tau_coding_agent-0.3.5/tests/test_auth_storage.py +0 -43
  201. tau_coding_agent-0.3.5/tests/test_compaction.py +0 -214
  202. tau_coding_agent-0.3.5/tests/test_session_utils.py +0 -169
  203. tau_coding_agent-0.3.5/tests/test_settings_manager.py +0 -150
  204. tau_coding_agent-0.3.5/tests/test_tui_input.py +0 -211
  205. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/LICENSE +0 -0
  206. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/MANIFEST.in +0 -0
  207. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/docs/IMPLEMENTATION_SUMMARY.md +0 -0
  208. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/docs/architecture.md +0 -0
  209. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/docs/cli-reference.md +0 -0
  210. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/docs/development.md +0 -0
  211. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/docs/docs.json +0 -0
  212. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/docs/http-proxy.md +0 -0
  213. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/docs/index.md +0 -0
  214. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/docs/installation.md +0 -0
  215. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/docs/keybindings.md +0 -0
  216. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/docs/messages.md +0 -0
  217. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/docs/project-context.md +0 -0
  218. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/docs/project-structure.md +0 -0
  219. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/docs/prompts.md +0 -0
  220. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/docs/python-api.md +0 -0
  221. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/docs/quickstart.md +0 -0
  222. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/docs/sessions.md +0 -0
  223. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/docs/skills.md +0 -0
  224. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/docs/themes.md +0 -0
  225. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/docs/tools.md +0 -0
  226. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/setup.cfg +0 -0
  227. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/__init__.py +0 -0
  228. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/agent/__init__.py +0 -0
  229. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/agent/prompt/__init__.py +0 -0
  230. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/agent/prompt/types.py +0 -0
  231. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/agent/types.py +0 -0
  232. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/auth/storage.py +0 -0
  233. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/auth/types.py +0 -0
  234. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/builtins/__init__.py +0 -0
  235. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/builtins/commands/__init__.py +0 -0
  236. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/builtins/commands/clear.py +0 -0
  237. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/builtins/commands/compact.py +0 -0
  238. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/builtins/commands/reload.py +0 -0
  239. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/builtins/commands/session.py +0 -0
  240. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/builtins/extensions/footer/utils.py +0 -0
  241. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/builtins/models/__init__.py +0 -0
  242. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/builtins/models/audio.py +0 -0
  243. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/builtins/models/image.py +0 -0
  244. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/builtins/models/video.py +0 -0
  245. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/builtins/prompts/commit.md +0 -0
  246. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/builtins/prompts/docs.md +0 -0
  247. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/builtins/prompts/explain.md +0 -0
  248. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/builtins/prompts/fix.md +0 -0
  249. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/builtins/prompts/refactor.md +0 -0
  250. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/builtins/prompts/review.md +0 -0
  251. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/builtins/prompts/test.md +0 -0
  252. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/builtins/providers/__init__.py +0 -0
  253. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/builtins/skills/code-review/SKILL.md +0 -0
  254. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/builtins/skills/debug/SKILL.md +0 -0
  255. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/builtins/skills/git-commit/SKILL.md +0 -0
  256. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/builtins/themes/dark.yaml +0 -0
  257. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/builtins/themes/light.yaml +0 -0
  258. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/builtins/tools/__init__.py +0 -0
  259. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/commands/__init__.py +0 -0
  260. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/commands/registry.py +0 -0
  261. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/commands/types.py +0 -0
  262. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/console/__init__.py +0 -0
  263. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/console/commands/__init__.py +0 -0
  264. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/console/commands/packages.py +0 -0
  265. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/console/commands/update.py +0 -0
  266. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/core/__init__.py +0 -0
  267. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/engine/__init__.py +0 -0
  268. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/extensions/settings.py +0 -0
  269. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/hooks/__init__.py +0 -0
  270. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/hooks/inference.py +0 -0
  271. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/hooks/runtime.py +0 -0
  272. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/hooks/session.py +0 -0
  273. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/hooks/tui.py +0 -0
  274. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/hooks/types.py +0 -0
  275. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/api/__init__.py +0 -0
  276. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/api/audio/__init__.py +0 -0
  277. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/api/audio/base.py +0 -0
  278. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/api/audio/builtins.py +0 -0
  279. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/api/audio/elevenlabs_audio.py +0 -0
  280. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/api/audio/openai_audio.py +0 -0
  281. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/api/audio/registry.py +0 -0
  282. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/api/audio/sarvam_audio.py +0 -0
  283. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/api/audio/utils.py +0 -0
  284. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/api/image/__init__.py +0 -0
  285. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/api/image/base.py +0 -0
  286. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/api/image/builtins.py +0 -0
  287. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/api/image/openai_image.py +0 -0
  288. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/api/image/openrouter.py +0 -0
  289. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/api/image/registry.py +0 -0
  290. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/api/registry.py +0 -0
  291. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/api/text/__init__.py +0 -0
  292. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/api/text/base.py +0 -0
  293. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/api/text/registry.py +0 -0
  294. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/api/text/types.py +0 -0
  295. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/api/text/utils.py +0 -0
  296. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/api/video/__init__.py +0 -0
  297. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/api/video/base.py +0 -0
  298. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/api/video/builtins.py +0 -0
  299. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/api/video/fal_video.py +0 -0
  300. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/api/video/openrouter_video.py +0 -0
  301. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/api/video/registry.py +0 -0
  302. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/model/__init__.py +0 -0
  303. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/model/registry.py +0 -0
  304. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/provider/__init__.py +0 -0
  305. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/provider/oauth/anthropic_claude_code.py +0 -0
  306. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/provider/oauth/github_copilot.py +0 -0
  307. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/provider/oauth/google_antigravity.py +0 -0
  308. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/provider/oauth/openai_codex.py +0 -0
  309. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/provider/oauth/pkce.py +0 -0
  310. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/inference/provider/oauth/types.py +0 -0
  311. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/message/__init__.py +0 -0
  312. {tau_coding_agent-0.3.5/tau/tui/components → tau_coding_agent-0.4.0/tau/modes}/__init__.py +0 -0
  313. {tau_coding_agent-0.3.5/tau/utils → tau_coding_agent-0.4.0/tau/modes/interactive}/__init__.py +0 -0
  314. {tau_coding_agent-0.3.5/tau → tau_coding_agent-0.4.0/tau/modes}/rpc/types.py +0 -0
  315. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/packages/__init__.py +0 -0
  316. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/packages/types.py +0 -0
  317. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/packages/utils.py +0 -0
  318. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/prompts/expand.py +0 -0
  319. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/prompts/loader.py +0 -0
  320. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/prompts/registry.py +0 -0
  321. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/prompts/types.py +0 -0
  322. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/session/branch_summarization.py +0 -0
  323. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/session/types.py +0 -0
  324. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/settings/paths.py +0 -0
  325. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/settings/storage.py +0 -0
  326. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/settings/utils.py +0 -0
  327. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/skills/loader.py +0 -0
  328. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/skills/registry.py +0 -0
  329. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/skills/types.py +0 -0
  330. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/themes/types.py +0 -0
  331. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/tool/__init__.py +0 -0
  332. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/tool/registry.py +0 -0
  333. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/trust/__init__.py +0 -0
  334. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/trust/types.py +0 -0
  335. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/trust/utils.py +0 -0
  336. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/tui/components/spinner.py +0 -0
  337. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/utils/http_proxy.py +0 -0
  338. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau/utils/version_check.py +0 -0
  339. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau_coding_agent.egg-info/dependency_links.txt +0 -0
  340. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau_coding_agent.egg-info/entry_points.txt +0 -0
  341. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tau_coding_agent.egg-info/top_level.txt +0 -0
  342. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tests/test_agent_prompt.py +0 -0
  343. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tests/test_agent_types.py +0 -0
  344. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tests/test_auth_manager.py +0 -0
  345. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tests/test_branch_summarization.py +0 -0
  346. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tests/test_command_registry.py +0 -0
  347. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tests/test_engine_types.py +0 -0
  348. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tests/test_footer_utils.py +0 -0
  349. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tests/test_http_proxy.py +0 -0
  350. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tests/test_inference_error_utils.py +0 -0
  351. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tests/test_inference_types.py +0 -0
  352. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tests/test_inference_utils.py +0 -0
  353. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tests/test_model_registry.py +0 -0
  354. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tests/test_model_types.py +0 -0
  355. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tests/test_oauth_utils.py +0 -0
  356. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tests/test_pkce.py +0 -0
  357. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tests/test_prompts_expand.py +0 -0
  358. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tests/test_prompts_loader.py +0 -0
  359. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tests/test_prompts_registry.py +0 -0
  360. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tests/test_session_types.py +0 -0
  361. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tests/test_settings_utils.py +0 -0
  362. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tests/test_skills_loader.py +0 -0
  363. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tests/test_skills_registry.py +0 -0
  364. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tests/test_theme_loader.py +0 -0
  365. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tests/test_themes_registry.py +0 -0
  366. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tests/test_trust_manager.py +0 -0
  367. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/tests/test_tui_theme.py +0 -0
  368. {tau_coding_agent-0.3.5 → tau_coding_agent-0.4.0}/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.3.5
3
+ Version: 0.4.0
4
4
  Summary: A self-extensible agent CLI with terminal UI, multi-provider LLM support, session management with branching, and a plugin system for tools and commands
5
5
  Requires-Python: >=3.12
6
6
  Description-Content-Type: text/markdown
@@ -26,11 +26,13 @@ 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 (τ)
32
34
 
33
- Inspired by [Pi](https://pi.dev), **Tau** brings the same agent framework capabilities to Python developers. A self-extensible agent CLI with a terminal UI, multi-provider LLM support, session management with branching, and a plugin system for tools, commands, and customization.
35
+ A Python reimplementation of [Pi](https://pi.dev), **Tau** brings the same agent framework capabilities to Python developers. A self-extensible agent CLI with a terminal UI, multi-provider LLM support, session management with branching, and a plugin system for tools, commands, and customization.
34
36
 
35
37
  <p align="center">
36
38
  <img src="assets/tui.png" alt="Tau TUI" width="700">
@@ -45,7 +47,7 @@ Start a conversation with the agent in the terminal.
45
47
  ### Installation
46
48
 
47
49
  ```bash
48
- pip install tau-coding-agent
50
+ uv pip install tau-coding-agent
49
51
  ```
50
52
 
51
53
  Or install from source:
@@ -1,6 +1,6 @@
1
1
  # Tau (τ)
2
2
 
3
- Inspired by [Pi](https://pi.dev), **Tau** brings the same agent framework capabilities to Python developers. A self-extensible agent CLI with a terminal UI, multi-provider LLM support, session management with branching, and a plugin system for tools, commands, and customization.
3
+ A Python reimplementation of [Pi](https://pi.dev), **Tau** brings the same agent framework capabilities to Python developers. A self-extensible agent CLI with a terminal UI, multi-provider LLM support, session management with branching, and a plugin system for tools, commands, and customization.
4
4
 
5
5
  <p align="center">
6
6
  <img src="assets/tui.png" alt="Tau TUI" width="700">
@@ -15,7 +15,7 @@ Start a conversation with the agent in the terminal.
15
15
  ### Installation
16
16
 
17
17
  ```bash
18
- pip install tau-coding-agent
18
+ uv pip install tau-coding-agent
19
19
  ```
20
20
 
21
21
  Or install from source:
@@ -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
@@ -21,7 +21,7 @@ def register(tau):
21
21
  timeout = config.get("timeout_ms", 5000)
22
22
  ```
23
23
 
24
- In `~/.tau/settings.json` or `.tau/settings.json`:
24
+ The values are stored in `~/.tau/settings.json` (global) or `.tau/settings.json` (project-local):
25
25
 
26
26
  ```json
27
27
  {
@@ -39,6 +39,71 @@ In `~/.tau/settings.json` or `.tau/settings.json`:
39
39
  }
40
40
  ```
41
41
 
42
+ ### Where settings live
43
+
44
+ Settings for an extension are stored in the `settings` object of its entry inside `extensions.list`. Tau matches entries by path — the path in the list must match the path or directory the extension was loaded from.
45
+
46
+ **Project-local** — `.tau/settings.json` (only applies in this directory):
47
+
48
+ ```json
49
+ {
50
+ "extensions": {
51
+ "list": [
52
+ {
53
+ "path": ".tau/extensions/lsp",
54
+ "settings": {
55
+ "lsp": true,
56
+ "eager": [],
57
+ "servers": {
58
+ "pyright": { "enabled": true },
59
+ "ruff": { "enabled": true },
60
+ "typescript-language-server": { "enabled": false }
61
+ }
62
+ }
63
+ },
64
+ {
65
+ "path": ".tau/extensions/voice",
66
+ "settings": {
67
+ "enabled": true,
68
+ "stt_model": "whisper-1",
69
+ "stt_provider": "openai",
70
+ "hold_seconds": 2,
71
+ "sample_rate": 16000
72
+ }
73
+ }
74
+ ]
75
+ }
76
+ }
77
+ ```
78
+
79
+ **Global** — `~/.tau/settings.json` (applies to every project):
80
+
81
+ ```json
82
+ {
83
+ "extensions": {
84
+ "list": [
85
+ {
86
+ "path": "~/.tau/extensions/web-search",
87
+ "settings": {
88
+ "enabled": true,
89
+ "engine": "ddgs",
90
+ "results": 10
91
+ }
92
+ },
93
+ {
94
+ "path": "~/.tau/extensions/my_ext.py",
95
+ "settings": {
96
+ "api_key": "sk-...",
97
+ "timeout_ms": 5000
98
+ }
99
+ }
100
+ ]
101
+ }
102
+ }
103
+ ```
104
+
105
+ Both files can coexist — project settings are merged on top of global settings at startup. Extensions loaded from `.tau/extensions/` read from the project file; extensions loaded from `~/.tau/extensions/` read from the global file.
106
+
42
107
  ## Nested Structures
43
108
 
44
109
  `ExtensionSettings` handles nested configuration just as naturally:
@@ -237,7 +302,147 @@ def register(tau):
237
302
 
238
303
  Extensions can register settings items that appear as a named sub-panel at the bottom of the interactive `/settings` panel. Users can then edit extension settings from the TUI without touching JSON.
239
304
 
240
- ### Basic example
305
+ There are two ways to do this: declare the schema in `manifest.json` (recommended for directory extensions) or register it imperatively with `tau.register_settings()` (useful for single-file extensions).
306
+
307
+ ---
308
+
309
+ ### Option A — manifest.json schema (recommended)
310
+
311
+ Add a `"settings"` block under the `"tau"` key in `manifest.json`. Tau reads it at load time, builds the `/settings` sub-panel automatically, reads current values from the extension's config, and persists changes back to `settings.json` (reloading just that extension so the change applies live — no restart needed).
312
+
313
+ ```json
314
+ {
315
+ "tau": {
316
+ "extensions": ["__init__.py"],
317
+ "dependencies": ["requests"],
318
+ "settings": {
319
+ "title": "Web search",
320
+ "fields": [
321
+ {
322
+ "key": "enabled",
323
+ "label": "Enabled",
324
+ "type": "bool",
325
+ "default": true,
326
+ "description": "Enable or disable the web search extension."
327
+ },
328
+ {
329
+ "key": "engine",
330
+ "label": "Search engine",
331
+ "type": "enum",
332
+ "values": ["ddgs", "exa", "tavily"],
333
+ "default": "ddgs",
334
+ "description": "Which search backend to use."
335
+ },
336
+ {
337
+ "key": "results",
338
+ "label": "Max results",
339
+ "type": "int",
340
+ "default": 10,
341
+ "min": 1,
342
+ "max": 50,
343
+ "description": "Number of results returned per query."
344
+ },
345
+ {
346
+ "key": "api_key",
347
+ "label": "API key",
348
+ "type": "secret",
349
+ "default": "",
350
+ "description": "Provider API key (stored in settings.json)."
351
+ },
352
+ {
353
+ "key": "exa",
354
+ "label": "Exa settings",
355
+ "type": "group",
356
+ "fields": [
357
+ {
358
+ "key": "base_url",
359
+ "label": "Base URL",
360
+ "type": "string",
361
+ "default": "https://api.exa.ai"
362
+ },
363
+ {
364
+ "key": "highlights",
365
+ "label": "Highlights",
366
+ "type": "bool",
367
+ "default": true
368
+ }
369
+ ]
370
+ }
371
+ ]
372
+ }
373
+ }
374
+ }
375
+ ```
376
+
377
+ The corresponding `.tau/settings.json` entry that stores the current values:
378
+
379
+ ```json
380
+ {
381
+ "extensions": {
382
+ "list": [
383
+ {
384
+ "path": ".tau/extensions/web-search",
385
+ "settings": {
386
+ "enabled": true,
387
+ "engine": "exa",
388
+ "results": 20,
389
+ "api_key": "sk-exa-...",
390
+ "exa": {
391
+ "base_url": "https://api.exa.ai",
392
+ "highlights": false
393
+ }
394
+ }
395
+ }
396
+ ]
397
+ }
398
+ }
399
+ ```
400
+
401
+ #### Field types
402
+
403
+ | Type | UI control | Notes |
404
+ |------|-----------|-------|
405
+ | `bool` | Toggle `off` / `on` | Stored as a JSON boolean in settings |
406
+ | `int` | Text input (numeric) | Optional `min` and `max` clamps |
407
+ | `string` | Text input | Optional `pattern` (regex the value must match) |
408
+ | `secret` | Text input | Same as `string`; signals sensitive content |
409
+ | `text` | Text input | Same as `string`; intended for longer values |
410
+ | `enum` or `select` | Cycle through values on Enter | Requires a non-empty `"values"` list |
411
+ | `group` | Opens a nested sub-panel | Contains a `"fields"` list; keys are prefixed |
412
+
413
+ #### Field properties
414
+
415
+ | Property | Required | Description |
416
+ |----------|----------|-------------|
417
+ | `key` | Yes | Setting key. Supports dot-notation: `"exa.api_key"` is equivalent to nesting under a `"exa"` group |
418
+ | `label` | Yes | Display text shown in the `/settings` panel |
419
+ | `type` | No (defaults to `string`) | One of the types listed above |
420
+ | `default` | No | Fallback value when the key is absent from settings |
421
+ | `description` | No | Dimmed help text shown below the label |
422
+ | `values` | `enum`/`select` only | List of allowed values to cycle through |
423
+ | `min` / `max` | `int` only | Clamp the entered value to this range |
424
+ | `pattern` | `string`/`secret`/`text` | Regex the value must fully match; invalid input is silently ignored |
425
+ | `fields` | `group` only | Nested list of field definitions |
426
+
427
+ #### Summary badge
428
+
429
+ The first top-level `bool` field is automatically used as an on/off summary badge on the extension's parent row in the main `/settings` list. This lets users see at a glance whether an extension is enabled without opening its sub-panel.
430
+
431
+ #### Dot-notation keys
432
+
433
+ `"key": "exa.api_key"` at the top level is exactly equivalent to a field with `"key": "api_key"` nested inside a group with `"key": "exa"`. Both read and write the same path in settings:
434
+
435
+ ```json
436
+ { "exa": { "api_key": "sk-..." } }
437
+ ```
438
+
439
+ Use the explicit `group` type when you want the sub-panel to have a header label. Use dot-notation directly when you just want nested storage without the extra level of UI.
440
+
441
+ ---
442
+
443
+ ### Option B — `tau.register_settings()` (imperative)
444
+
445
+ #### Basic example
241
446
 
242
447
  ```python
243
448
  from tau.tui.components.settings_modal import SettingItem
@@ -254,7 +459,7 @@ def register(tau):
254
459
  ], title="My Extension", on_change=on_change)
255
460
  ```
256
461
 
257
- ### `tau.register_settings(items, title, on_change)`
462
+ #### `tau.register_settings(items, title, on_change)`
258
463
 
259
464
  Registers a sub-panel in `/settings` containing the provided items.
260
465
 
@@ -264,7 +469,7 @@ Registers a sub-panel in `/settings` containing the provided items.
264
469
  | `title` | `str` | The sub-panel title shown in the list |
265
470
  | `on_change` | `callable(key, value)` | Called when the user changes a value |
266
471
 
267
- ### `SettingItem` fields
472
+ #### `SettingItem` fields
268
473
 
269
474
  | Field | Type | Description |
270
475
  |-------|------|-------------|
@@ -278,7 +483,7 @@ Registers a sub-panel in `/settings` containing the provided items.
278
483
  | `submenu_settings` | `list[SettingItem] \| None` | Open a full nested sub-panel with these items (arbitrary depth) |
279
484
  | `submenu_on_change` | `callable \| None` | Overrides the parent `on_change` for a nested sub-panel |
280
485
 
281
- ### Nested sub-panels
486
+ #### Nested sub-panels
282
487
 
283
488
  A `SettingItem` with `submenu_settings` opens another level of the settings panel. Nesting can be arbitrarily deep. Use `submenu_on_change` to override the change callback for that level:
284
489
 
@@ -298,7 +503,7 @@ tau.register_settings([
298
503
  ], title="My Extension", on_change=on_change)
299
504
  ```
300
505
 
301
- ### `tau.settings.set_extension_config_key(ext_path, key, value)`
506
+ #### `tau.settings.set_extension_config_key(ext_path, key, value)`
302
507
 
303
508
  Persists a value back to `extensions.list[].settings` in `settings.json`.
304
509
 
@@ -627,29 +627,6 @@ session working directory; pass an explicit `cwd=` to override.
627
627
 
628
628
  ---
629
629
 
630
- ## Cross-extension event bus
631
-
632
- Extensions can communicate with each other via `tau.events`:
633
-
634
- ```python
635
- # producer.py
636
- def register(tau):
637
- @tau.on("session_start")
638
- async def on_start(event, ctx):
639
- await tau.events.emit("producer:ready", {"version": "1.0"})
640
-
641
- # consumer.py
642
- def register(tau):
643
- @tau.events.on("producer:ready")
644
- async def on_ready(data):
645
- print(f"producer ready — version {data['version']}")
646
- ```
647
-
648
- This is separate from the hooks bus: `tau.events` is for extension-to-extension
649
- messages; `tau.on(...)` is for system lifecycle events.
650
-
651
- ---
652
-
653
630
  ## Editor autocomplete providers
654
631
 
655
632
  Extensions can inject custom autocomplete suggestions into the editor. When the user
@@ -742,7 +719,6 @@ def register(tau):
742
719
  | `tau.register_flag(name, type, env, default)` | Declare an env-backed flag |
743
720
  | `tau.get_flag(name)` | Read a registered flag's value |
744
721
  | `await tau.exec(cmd, args, cwd)` | Run a shell command |
745
- | `tau.events` | Cross-extension `EventBus` |
746
722
  | `tau.config` | Per-extension settings dict from `settings.json` |
747
723
  | `tau.cwd` | `Path` — working directory at session start |
748
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.5"
7
+ version = "0.4.0"
8
8
  description = "A self-extensible agent CLI with terminal UI, multi-provider LLM support, session management with branching, and a plugin system for tools and commands"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.12"
@@ -68,6 +68,9 @@ tau = [
68
68
  [tool.pytest.ini_options]
69
69
  testpaths = ["tests"]
70
70
 
71
+ [project.optional-dependencies]
72
+ tools = ["ripgrep>=14.0.0"]
73
+
71
74
  [dependency-groups]
72
75
  dev = [
73
76
  "pytest>=9.1.1",
@@ -93,7 +93,8 @@ def load_project_context_files(cwd: Path) -> list[tuple[str, Path]]:
93
93
 
94
94
 
95
95
  _DEFAULT_IDENTITY = """\
96
- You are a coding agent operating inside Tau, a coding agent harness. You help users by reading files, executing commands, editing code, and writing new 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.
97
98
 
98
99
  You have strong software engineering skills. You think carefully before making changes,
99
100
  and follow the existing style and conventions of the project.
@@ -101,10 +102,13 @@ and follow the existing style and conventions of the project.
101
102
 
102
103
  _GENERAL_GUIDELINES = [
103
104
  "If a task is ambiguous, ask a precise, clarifying question before proceeding.",
104
- "Do only what the task asks; don't add features, refactors, or abstractions beyond scope.",
105
+ ("Do only what the task asks; don't add features, refactors, or abstractions beyond scope."),
105
106
  "Write comments when the *why* is non-obvious — well-named code explains itself.",
106
107
  "Keep responses short, concise, and direct; don't summarize what you just did.",
107
- "Prioritize accuracy over agreement — investigate before confirming, and disagree when the evidence calls for it.",
108
+ (
109
+ "Prioritize accuracy over agreement — investigate before confirming, and "
110
+ "disagree when the evidence calls for it."
111
+ ),
108
112
  ]
109
113
 
110
114
 
@@ -231,7 +235,9 @@ class PromptBuilder:
231
235
  append = self._append()
232
236
  git = self._git_section()
233
237
  footer = self._footer()
234
- return identity + guidelines + tools + docs + project_context + skills + append + git + footer
238
+ return (
239
+ identity + guidelines + tools + docs + project_context + skills + append + git + footer
240
+ )
235
241
 
236
242
  # ------------------------------------------------------------------
237
243
  # Layers
@@ -267,7 +273,10 @@ class PromptBuilder:
267
273
  if guideline:
268
274
  guidelines.append(f"- **{t.name}**: {guideline.strip()}")
269
275
  section = "\n\n# Available Tools\n\n" + "\n".join(lines)
270
- section+="\nIn addition to the tools above, you may have access to other custom tools depending on the project."
276
+ section += (
277
+ "\nIn addition to the tools above, you may have access to other custom "
278
+ "tools depending on the project."
279
+ )
271
280
  if guidelines:
272
281
  section += "\n\n## Tool Guidelines\n\n" + "\n".join(guidelines)
273
282
  return section
@@ -297,9 +306,7 @@ class PromptBuilder:
297
306
  return (
298
307
  "\n\n# Project Instructions\n\n"
299
308
  "Project-specific guidelines (follow before general Tau guidelines):\n\n"
300
- "<project_context>\n\n"
301
- + blocks
302
- + "</project_context>"
309
+ "<project_context>\n\n" + blocks + "</project_context>"
303
310
  )
304
311
 
305
312
  def _docs_section(self) -> str: