tau-coding-agent 0.6.7__tar.gz → 0.6.8__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 (500) hide show
  1. {tau_coding_agent-0.6.7/tau_coding_agent.egg-info → tau_coding_agent-0.6.8}/PKG-INFO +1 -1
  2. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/pyproject.toml +1 -1
  3. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/models/text.py +100 -14
  4. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/providers/text.py +2 -0
  5. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/inference/api/text/builtins.py +1 -0
  6. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/inference/api/text/openai_responses.py +31 -33
  7. tau_coding_agent-0.6.8/tau/inference/api/text/xai_responses.py +31 -0
  8. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/inference/provider/oauth/__init__.py +6 -0
  9. tau_coding_agent-0.6.8/tau/inference/provider/oauth/xai_grok.py +286 -0
  10. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8/tau_coding_agent.egg-info}/PKG-INFO +1 -1
  11. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau_coding_agent.egg-info/SOURCES.txt +2 -0
  12. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/LICENSE +0 -0
  13. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/MANIFEST.in +0 -0
  14. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/README.md +0 -0
  15. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/docs/architecture.md +0 -0
  16. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/docs/auth.md +0 -0
  17. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/docs/cli-reference.md +0 -0
  18. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/docs/creating-tools.md +0 -0
  19. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/docs/development.md +0 -0
  20. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/docs/docs.json +0 -0
  21. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/docs/engine.md +0 -0
  22. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/docs/extension-settings.md +0 -0
  23. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/docs/extensions.md +0 -0
  24. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/docs/http-proxy.md +0 -0
  25. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/docs/index.md +0 -0
  26. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/docs/inference-providers.md +0 -0
  27. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/docs/inference.md +0 -0
  28. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/docs/installation.md +0 -0
  29. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/docs/keybindings.md +0 -0
  30. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/docs/messages.md +0 -0
  31. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/docs/project-context.md +0 -0
  32. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/docs/project-structure.md +0 -0
  33. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/docs/prompts.md +0 -0
  34. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/docs/python-api.md +0 -0
  35. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/docs/quickstart.md +0 -0
  36. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/docs/sessions.md +0 -0
  37. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/docs/settings.md +0 -0
  38. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/docs/skills.md +0 -0
  39. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/docs/themes.md +0 -0
  40. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/docs/tools.md +0 -0
  41. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/docs/tui.md +0 -0
  42. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/docs/usage.md +0 -0
  43. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/setup.cfg +0 -0
  44. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/__init__.py +0 -0
  45. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/agent/__init__.py +0 -0
  46. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/agent/embedded.py +0 -0
  47. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/agent/prompt/__init__.py +0 -0
  48. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/agent/prompt/builder.py +0 -0
  49. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/agent/prompt/types.py +0 -0
  50. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/agent/service.py +0 -0
  51. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/agent/types.py +0 -0
  52. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/auth/manager.py +0 -0
  53. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/auth/storage.py +0 -0
  54. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/auth/types.py +0 -0
  55. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/__init__.py +0 -0
  56. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/commands/__init__.py +0 -0
  57. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/commands/clear.py +0 -0
  58. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/commands/compact.py +0 -0
  59. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/commands/reload.py +0 -0
  60. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/commands/session.py +0 -0
  61. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/extensions/ask_user/__init__.py +0 -0
  62. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/extensions/ask_user/component.py +0 -0
  63. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/extensions/ask_user/manifest.json +0 -0
  64. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/extensions/ask_user/schema.py +0 -0
  65. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/extensions/ask_user/tool.py +0 -0
  66. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/extensions/btw/__init__.py +0 -0
  67. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/extensions/footer/__init__.py +0 -0
  68. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/extensions/footer/git.py +0 -0
  69. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/extensions/footer/model.py +0 -0
  70. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/extensions/footer/utils.py +0 -0
  71. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/extensions/header/__init__.py +0 -0
  72. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/extensions/loop/README.md +0 -0
  73. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/extensions/loop/__init__.py +0 -0
  74. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/extensions/loop/dispatch.py +0 -0
  75. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/extensions/loop/duration.py +0 -0
  76. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/extensions/loop/state.py +0 -0
  77. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/extensions/sandbox/__init__.py +0 -0
  78. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/extensions/sandbox/manager.py +0 -0
  79. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/extensions/sandbox/manifest.json +0 -0
  80. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/extensions/sandbox/sandbox_tool.py +0 -0
  81. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/extensions/subagent/__init__.py +0 -0
  82. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/extensions/subagent/agents/context-builder.md +0 -0
  83. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/extensions/subagent/agents/delegate.md +0 -0
  84. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/extensions/subagent/agents/oracle.md +0 -0
  85. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/extensions/subagent/agents/planner.md +0 -0
  86. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/extensions/subagent/agents/researcher.md +0 -0
  87. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/extensions/subagent/agents/reviewer.md +0 -0
  88. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/extensions/subagent/agents/scout.md +0 -0
  89. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/extensions/subagent/agents/worker.md +0 -0
  90. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/extensions/subagent/agents.py +0 -0
  91. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/extensions/subagent/manifest.json +0 -0
  92. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/extensions/subagent/subagent_schema.py +0 -0
  93. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/extensions/subagent/subagent_tool.py +0 -0
  94. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/extensions/todo/__init__.py +0 -0
  95. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/extensions/todo/manifest.json +0 -0
  96. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/extensions/todo/todo_schema.py +0 -0
  97. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/extensions/todo/todo_tool.py +0 -0
  98. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/extensions/watch/__init__.py +0 -0
  99. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/extensions/web/__init__.py +0 -0
  100. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/extensions/web/engines/__init__.py +0 -0
  101. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/extensions/web/engines/base.py +0 -0
  102. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/extensions/web/engines/ddgs_engine.py +0 -0
  103. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/extensions/web/engines/exa_engine.py +0 -0
  104. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/extensions/web/engines/jina_engine.py +0 -0
  105. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/extensions/web/engines/tavily_engine.py +0 -0
  106. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/extensions/web/manifest.json +0 -0
  107. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/extensions/web/tools/__init__.py +0 -0
  108. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/extensions/web/tools/fetch.py +0 -0
  109. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/extensions/web/tools/search.py +0 -0
  110. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/extensions/workflow/__init__.py +0 -0
  111. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/extensions/workflow/agent_discovery.py +0 -0
  112. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/extensions/workflow/manifest.json +0 -0
  113. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/extensions/workflow/model.py +0 -0
  114. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/extensions/workflow/runner.py +0 -0
  115. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/extensions/workflow/skills/create-workflows/SKILL.md +0 -0
  116. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/extensions/workflow/store.py +0 -0
  117. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/models/__init__.py +0 -0
  118. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/models/audio.py +0 -0
  119. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/models/image.py +0 -0
  120. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/models/video.py +0 -0
  121. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/prompts/commit.md +0 -0
  122. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/prompts/docs.md +0 -0
  123. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/prompts/explain.md +0 -0
  124. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/prompts/fix.md +0 -0
  125. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/prompts/refactor.md +0 -0
  126. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/prompts/review.md +0 -0
  127. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/prompts/test.md +0 -0
  128. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/providers/__init__.py +0 -0
  129. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/providers/audio.py +0 -0
  130. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/providers/image.py +0 -0
  131. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/providers/video.py +0 -0
  132. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/skills/code-review/SKILL.md +0 -0
  133. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/skills/debug/SKILL.md +0 -0
  134. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/skills/git-commit/SKILL.md +0 -0
  135. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/skills/skill-creator/LICENSE.txt +0 -0
  136. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/skills/skill-creator/SKILL.md +0 -0
  137. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/themes/ayu-dark.yaml +0 -0
  138. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/themes/catppuccin.yaml +0 -0
  139. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/themes/dark.yaml +0 -0
  140. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/themes/dracula.yaml +0 -0
  141. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/themes/everforest.yaml +0 -0
  142. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/themes/gruvbox.yaml +0 -0
  143. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/themes/horizon.yaml +0 -0
  144. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/themes/kanagawa.yaml +0 -0
  145. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/themes/light.yaml +0 -0
  146. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/themes/material-ocean.yaml +0 -0
  147. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/themes/monokai.yaml +0 -0
  148. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/themes/night-owl.yaml +0 -0
  149. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/themes/nord.yaml +0 -0
  150. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/themes/one-dark.yaml +0 -0
  151. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/themes/rose-pine.yaml +0 -0
  152. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/themes/solarized-dark.yaml +0 -0
  153. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/themes/tokyo-night.yaml +0 -0
  154. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/tools/__init__.py +0 -0
  155. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/tools/edit.py +0 -0
  156. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/tools/glob.py +0 -0
  157. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/tools/grep.py +0 -0
  158. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/tools/ls.py +0 -0
  159. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/tools/read.py +0 -0
  160. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/tools/terminal.py +0 -0
  161. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/tools/utils.py +0 -0
  162. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/builtins/tools/write.py +0 -0
  163. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/commands/__init__.py +0 -0
  164. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/commands/registry.py +0 -0
  165. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/commands/types.py +0 -0
  166. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/console/__init__.py +0 -0
  167. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/console/cli.py +0 -0
  168. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/console/commands/__init__.py +0 -0
  169. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/console/commands/auth.py +0 -0
  170. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/console/commands/packages.py +0 -0
  171. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/console/commands/update.py +0 -0
  172. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/core/__init__.py +0 -0
  173. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/core/registry.py +0 -0
  174. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/engine/__init__.py +0 -0
  175. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/engine/service.py +0 -0
  176. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/engine/types.py +0 -0
  177. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/extensions/__init__.py +0 -0
  178. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/extensions/api.py +0 -0
  179. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/extensions/context.py +0 -0
  180. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/extensions/loader.py +0 -0
  181. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/extensions/runtime.py +0 -0
  182. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/extensions/settings.py +0 -0
  183. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/hooks/__init__.py +0 -0
  184. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/hooks/engine.py +0 -0
  185. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/hooks/inference.py +0 -0
  186. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/hooks/runtime.py +0 -0
  187. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/hooks/service.py +0 -0
  188. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/hooks/session.py +0 -0
  189. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/hooks/tui.py +0 -0
  190. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/hooks/types.py +0 -0
  191. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/inference/__init__.py +0 -0
  192. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/inference/api/__init__.py +0 -0
  193. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/inference/api/audio/__init__.py +0 -0
  194. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/inference/api/audio/base.py +0 -0
  195. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/inference/api/audio/builtins.py +0 -0
  196. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/inference/api/audio/elevenlabs_audio.py +0 -0
  197. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/inference/api/audio/gemini_audio.py +0 -0
  198. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/inference/api/audio/openai_audio.py +0 -0
  199. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/inference/api/audio/registry.py +0 -0
  200. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/inference/api/audio/sarvam_audio.py +0 -0
  201. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/inference/api/audio/service.py +0 -0
  202. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/inference/api/audio/utils.py +0 -0
  203. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/inference/api/availability.py +0 -0
  204. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/inference/api/image/__init__.py +0 -0
  205. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/inference/api/image/base.py +0 -0
  206. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/inference/api/image/builtins.py +0 -0
  207. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/inference/api/image/gemini_image.py +0 -0
  208. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/inference/api/image/openai_image.py +0 -0
  209. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/inference/api/image/openrouter.py +0 -0
  210. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/inference/api/image/registry.py +0 -0
  211. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/inference/api/image/service.py +0 -0
  212. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/inference/api/registry.py +0 -0
  213. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/inference/api/text/__init__.py +0 -0
  214. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/inference/api/text/anthropic_claude_code.py +0 -0
  215. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/inference/api/text/anthropic_messages.py +0 -0
  216. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/inference/api/text/anthropic_vertex.py +0 -0
  217. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/inference/api/text/base.py +0 -0
  218. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/inference/api/text/dialect.py +0 -0
  219. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/inference/api/text/gemini_generate.py +0 -0
  220. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/inference/api/text/github_copilot_chat.py +0 -0
  221. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/inference/api/text/google_antigravity.py +0 -0
  222. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/inference/api/text/google_vertex.py +0 -0
  223. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/inference/api/text/mistral_chat.py +0 -0
  224. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/inference/api/text/ollama_chat.py +0 -0
  225. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/inference/api/text/openai_codex_responses.py +0 -0
  226. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/inference/api/text/openai_completions.py +0 -0
  227. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/inference/api/text/openai_vertex.py +0 -0
  228. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/inference/api/text/registry.py +0 -0
  229. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/inference/api/text/service.py +0 -0
  230. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/inference/api/text/types.py +0 -0
  231. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/inference/api/text/utils.py +0 -0
  232. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/inference/api/video/__init__.py +0 -0
  233. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/inference/api/video/base.py +0 -0
  234. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/inference/api/video/builtins.py +0 -0
  235. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/inference/api/video/fal_video.py +0 -0
  236. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/inference/api/video/openrouter_video.py +0 -0
  237. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/inference/api/video/registry.py +0 -0
  238. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/inference/api/video/service.py +0 -0
  239. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/inference/api/video/zai_video.py +0 -0
  240. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/inference/model/__init__.py +0 -0
  241. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/inference/model/registry.py +0 -0
  242. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/inference/model/types.py +0 -0
  243. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/inference/provider/__init__.py +0 -0
  244. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/inference/provider/oauth/anthropic_claude_code.py +0 -0
  245. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/inference/provider/oauth/github_copilot.py +0 -0
  246. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/inference/provider/oauth/google_antigravity.py +0 -0
  247. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/inference/provider/oauth/openai_codex.py +0 -0
  248. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/inference/provider/oauth/pkce.py +0 -0
  249. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/inference/provider/oauth/types.py +0 -0
  250. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/inference/provider/oauth/utils.py +0 -0
  251. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/inference/provider/registry.py +0 -0
  252. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/inference/provider/types.py +0 -0
  253. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/inference/types.py +0 -0
  254. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/inference/utils.py +0 -0
  255. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/message/__init__.py +0 -0
  256. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/message/types.py +0 -0
  257. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/message/utils.py +0 -0
  258. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/modes/__init__.py +0 -0
  259. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/modes/interactive/__init__.py +0 -0
  260. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/modes/interactive/agent_hooks.py +0 -0
  261. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/modes/interactive/app.py +0 -0
  262. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/modes/interactive/commands/__init__.py +0 -0
  263. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/modes/interactive/commands/appearance.py +0 -0
  264. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/modes/interactive/commands/auth.py +0 -0
  265. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/modes/interactive/commands/context.py +0 -0
  266. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/modes/interactive/commands/extensions.py +0 -0
  267. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/modes/interactive/commands/misc.py +0 -0
  268. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/modes/interactive/commands/model.py +0 -0
  269. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/modes/interactive/commands/session.py +0 -0
  270. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/modes/interactive/components/__init__.py +0 -0
  271. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/modes/interactive/components/command_palette.py +0 -0
  272. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/modes/interactive/components/config_selector.py +0 -0
  273. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/modes/interactive/components/extension_selector.py +0 -0
  274. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/modes/interactive/components/file_picker.py +0 -0
  275. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/modes/interactive/components/layout.py +0 -0
  276. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/modes/interactive/components/message_list.py +0 -0
  277. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/modes/interactive/components/model_selector.py +0 -0
  278. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/modes/interactive/components/oauth_selector.py +0 -0
  279. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/modes/interactive/components/overlays.py +0 -0
  280. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/modes/interactive/components/selector_controller.py +0 -0
  281. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/modes/interactive/components/session_selector.py +0 -0
  282. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/modes/interactive/components/settings_selector.py +0 -0
  283. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/modes/interactive/components/theme_selector.py +0 -0
  284. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/modes/interactive/components/thinking_selector.py +0 -0
  285. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/modes/interactive/components/tree_selector.py +0 -0
  286. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/modes/interactive/components/trust_screen.py +0 -0
  287. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/modes/interactive/components/voice_selector.py +0 -0
  288. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/modes/interactive/input_handler.py +0 -0
  289. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/modes/interactive/ui_context.py +0 -0
  290. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/modes/print/__init__.py +0 -0
  291. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/modes/rpc/__init__.py +0 -0
  292. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/modes/rpc/mode.py +0 -0
  293. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/modes/rpc/types.py +0 -0
  294. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/packages/__init__.py +0 -0
  295. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/packages/manager.py +0 -0
  296. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/packages/types.py +0 -0
  297. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/packages/utils.py +0 -0
  298. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/prompts/expand.py +0 -0
  299. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/prompts/loader.py +0 -0
  300. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/prompts/registry.py +0 -0
  301. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/prompts/types.py +0 -0
  302. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/resources/__init__.py +0 -0
  303. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/resources/loader.py +0 -0
  304. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/resources/types.py +0 -0
  305. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/runtime/dependencies.py +0 -0
  306. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/runtime/service.py +0 -0
  307. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/runtime/types.py +0 -0
  308. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/session/branch_summarization.py +0 -0
  309. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/session/compaction.py +0 -0
  310. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/session/manager.py +0 -0
  311. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/session/types.py +0 -0
  312. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/session/utils.py +0 -0
  313. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/settings/manager.py +0 -0
  314. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/settings/paths.py +0 -0
  315. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/settings/storage.py +0 -0
  316. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/settings/types.py +0 -0
  317. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/settings/utils.py +0 -0
  318. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/skills/loader.py +0 -0
  319. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/skills/registry.py +0 -0
  320. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/skills/types.py +0 -0
  321. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/telemetry/__init__.py +0 -0
  322. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/telemetry/service.py +0 -0
  323. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/telemetry/types.py +0 -0
  324. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/themes/loader.py +0 -0
  325. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/themes/registry.py +0 -0
  326. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/themes/types.py +0 -0
  327. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/tool/__init__.py +0 -0
  328. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/tool/registry.py +0 -0
  329. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/tool/render.py +0 -0
  330. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/tool/types.py +0 -0
  331. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/trust/__init__.py +0 -0
  332. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/trust/manager.py +0 -0
  333. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/trust/types.py +0 -0
  334. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/trust/utils.py +0 -0
  335. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/tui/__init__.py +0 -0
  336. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/tui/ansi_bridge.py +0 -0
  337. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/tui/autocomplete.py +0 -0
  338. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/tui/backend.py +0 -0
  339. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/tui/buffer.py +0 -0
  340. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/tui/component.py +0 -0
  341. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/tui/components/__init__.py +0 -0
  342. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/tui/components/box.py +0 -0
  343. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/tui/components/editor.py +0 -0
  344. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/tui/components/image.py +0 -0
  345. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/tui/components/select_list.py +0 -0
  346. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/tui/components/simple_picker.py +0 -0
  347. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/tui/components/spinner.py +0 -0
  348. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/tui/components/text_input.py +0 -0
  349. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/tui/components/widget_bridge.py +0 -0
  350. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/tui/frame.py +0 -0
  351. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/tui/geometry.py +0 -0
  352. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/tui/input.py +0 -0
  353. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/tui/keybinding_hints.py +0 -0
  354. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/tui/layout.py +0 -0
  355. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/tui/markdown.py +0 -0
  356. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/tui/palette.py +0 -0
  357. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/tui/service.py +0 -0
  358. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/tui/style.py +0 -0
  359. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/tui/terminal.py +0 -0
  360. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/tui/testing.py +0 -0
  361. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/tui/text.py +0 -0
  362. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/tui/theme.py +0 -0
  363. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/tui/utils.py +0 -0
  364. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/tui/widget.py +0 -0
  365. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/tui/widgets/__init__.py +0 -0
  366. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/tui/widgets/barchart.py +0 -0
  367. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/tui/widgets/block.py +0 -0
  368. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/tui/widgets/calendar.py +0 -0
  369. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/tui/widgets/canvas.py +0 -0
  370. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/tui/widgets/chart.py +0 -0
  371. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/tui/widgets/clear.py +0 -0
  372. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/tui/widgets/gauge.py +0 -0
  373. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/tui/widgets/list.py +0 -0
  374. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/tui/widgets/paragraph.py +0 -0
  375. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/tui/widgets/scrollbar.py +0 -0
  376. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/tui/widgets/sparkline.py +0 -0
  377. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/tui/widgets/symbols.py +0 -0
  378. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/tui/widgets/table.py +0 -0
  379. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/tui/widgets/tabs.py +0 -0
  380. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/utils/__init__.py +0 -0
  381. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/utils/format.py +0 -0
  382. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/utils/http_proxy.py +0 -0
  383. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/utils/image_processing.py +0 -0
  384. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/utils/secrets.py +0 -0
  385. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau/utils/version_check.py +0 -0
  386. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau_coding_agent.egg-info/dependency_links.txt +0 -0
  387. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau_coding_agent.egg-info/entry_points.txt +0 -0
  388. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau_coding_agent.egg-info/requires.txt +0 -0
  389. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tau_coding_agent.egg-info/top_level.txt +0 -0
  390. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_agent_compaction.py +0 -0
  391. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_agent_hooks.py +0 -0
  392. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_agent_prompt.py +0 -0
  393. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_agent_types.py +0 -0
  394. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_ansi.py +0 -0
  395. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_ansi_bridge_legacy_image.py +0 -0
  396. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_anthropic_tool_history.py +0 -0
  397. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_ask_user_extension.py +0 -0
  398. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_audio_transcription_apis.py +0 -0
  399. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_auth_command.py +0 -0
  400. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_auth_manager.py +0 -0
  401. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_auth_storage.py +0 -0
  402. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_autocomplete_modifiers.py +0 -0
  403. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_branch_navigation.py +0 -0
  404. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_branch_summarization.py +0 -0
  405. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_builtin_tools.py +0 -0
  406. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_builtin_watch.py +0 -0
  407. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_cli_inputs.py +0 -0
  408. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_cmd_copy.py +0 -0
  409. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_command_execution_policy.py +0 -0
  410. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_command_registry.py +0 -0
  411. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_compaction.py +0 -0
  412. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_component_buffer_bridge.py +0 -0
  413. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_diff.py +0 -0
  414. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_editor_protocol.py +0 -0
  415. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_engine_execution.py +0 -0
  416. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_engine_length_and_live_tools.py +0 -0
  417. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_engine_steering.py +0 -0
  418. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_engine_types.py +0 -0
  419. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_escape_behavior.py +0 -0
  420. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_extension_api.py +0 -0
  421. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_extension_lifecycle.py +0 -0
  422. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_footer_model.py +0 -0
  423. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_footer_utils.py +0 -0
  424. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_fuzzy.py +0 -0
  425. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_gemini_generate.py +0 -0
  426. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_google_antigravity.py +0 -0
  427. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_google_vertex.py +0 -0
  428. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_http_proxy.py +0 -0
  429. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_image_processing.py +0 -0
  430. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_inference_api_text_utils.py +0 -0
  431. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_inference_dialect.py +0 -0
  432. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_inference_error_utils.py +0 -0
  433. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_inference_types.py +0 -0
  434. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_inference_utils.py +0 -0
  435. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_keybindings.py +0 -0
  436. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_layout_render_cells.py +0 -0
  437. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_markdown.py +0 -0
  438. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_message_list_frozen.py +0 -0
  439. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_message_types.py +0 -0
  440. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_message_utils.py +0 -0
  441. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_model_availability.py +0 -0
  442. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_model_command.py +0 -0
  443. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_model_registry.py +0 -0
  444. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_model_selector_modal.py +0 -0
  445. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_model_types.py +0 -0
  446. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_oauth_utils.py +0 -0
  447. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_package_resources.py +0 -0
  448. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_packages_utils.py +0 -0
  449. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_peer_extension.py +0 -0
  450. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_pkce.py +0 -0
  451. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_prompts_expand.py +0 -0
  452. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_prompts_loader.py +0 -0
  453. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_prompts_registry.py +0 -0
  454. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_provider_registry.py +0 -0
  455. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_resource_loader.py +0 -0
  456. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_rpc_mode.py +0 -0
  457. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_runtime_sdk.py +0 -0
  458. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_scrollback_raw_writes.py +0 -0
  459. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_scrollback_terminal.py +0 -0
  460. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_secrets.py +0 -0
  461. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_select_list_render_cells.py +0 -0
  462. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_selector_controller.py +0 -0
  463. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_session_manager.py +0 -0
  464. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_session_trust_persist.py +0 -0
  465. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_session_types.py +0 -0
  466. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_session_utils.py +0 -0
  467. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_settings_manager.py +0 -0
  468. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_settings_paths.py +0 -0
  469. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_settings_storage.py +0 -0
  470. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_settings_utils.py +0 -0
  471. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_skills_loader.py +0 -0
  472. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_skills_registry.py +0 -0
  473. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_strip_control_chars.py +0 -0
  474. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_subagent_context.py +0 -0
  475. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_telemetry.py +0 -0
  476. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_text_input.py +0 -0
  477. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_text_input_render_cells.py +0 -0
  478. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_text_llm_invoke.py +0 -0
  479. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_text_llm_model_resolution.py +0 -0
  480. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_theme_loader.py +0 -0
  481. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_themes_registry.py +0 -0
  482. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_thinking_render.py +0 -0
  483. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_tool_registry.py +0 -0
  484. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_tool_render.py +0 -0
  485. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_tree_branch_restore.py +0 -0
  486. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_trust_manager.py +0 -0
  487. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_trust_utils.py +0 -0
  488. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_tui_capabilities.py +0 -0
  489. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_tui_child_rows.py +0 -0
  490. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_tui_input.py +0 -0
  491. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_tui_layout_sizing.py +0 -0
  492. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_tui_public_api.py +0 -0
  493. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_tui_renderer.py +0 -0
  494. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_tui_select_list.py +0 -0
  495. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_tui_theme.py +0 -0
  496. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_tui_utils.py +0 -0
  497. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_ui_context.py +0 -0
  498. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_utils_hashline.py +0 -0
  499. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_version_check.py +0 -0
  500. {tau_coding_agent-0.6.7 → tau_coding_agent-0.6.8}/tests/test_voice_selector.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tau-coding-agent
3
- Version: 0.6.7
3
+ Version: 0.6.8
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
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "tau-coding-agent"
7
- version = "0.6.7"
7
+ version = "0.6.8"
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"
@@ -1008,6 +1008,16 @@ models = [
1008
1008
  output=_TEXT,
1009
1009
  ),
1010
1010
  # xAI
1011
+ Model(
1012
+ id="grok-4.5",
1013
+ name="Grok 4.5",
1014
+ provider="xai",
1015
+ cost=Cost(input=2.00, output=6.00),
1016
+ thinking=True,
1017
+ context_window=500_000,
1018
+ input=_TEXT_IMAGE,
1019
+ output=_TEXT,
1020
+ ),
1011
1021
  Model(
1012
1022
  id="grok-4.3",
1013
1023
  name="Grok 4.3",
@@ -1028,6 +1038,42 @@ models = [
1028
1038
  input=_TEXT_IMAGE,
1029
1039
  output=_TEXT,
1030
1040
  ),
1041
+ # xAI Grok CLI (OAuth — SuperGrok/X Premium+ subscription quota via
1042
+ # cli-chat-proxy.grok.com, the same backend the official Grok CLI uses).
1043
+ # grok-4.3 and grok-build are recognized by the proxy alongside grok-4.5
1044
+ # (confirmed live: HTTP 402 "need subscription" rather than 404/401 when
1045
+ # the account isn't entitled to them) — same models as the "xai" API-key
1046
+ # provider, just billed against subscription quota instead of per-token.
1047
+ Model(
1048
+ id="grok-4.5",
1049
+ name="Grok 4.5",
1050
+ provider="xai-grok",
1051
+ cost=Cost(),
1052
+ thinking=True,
1053
+ context_window=500_000,
1054
+ input=_TEXT_IMAGE,
1055
+ output=_TEXT,
1056
+ ),
1057
+ Model(
1058
+ id="grok-4.3",
1059
+ name="Grok 4.3",
1060
+ provider="xai-grok",
1061
+ cost=Cost(),
1062
+ thinking=True,
1063
+ context_window=1_000_000,
1064
+ input=_TEXT_IMAGE,
1065
+ output=_TEXT,
1066
+ ),
1067
+ Model(
1068
+ id="grok-build",
1069
+ name="Grok Build",
1070
+ provider="xai-grok",
1071
+ cost=Cost(),
1072
+ thinking=True,
1073
+ context_window=256_000,
1074
+ input=_TEXT_IMAGE,
1075
+ output=_TEXT,
1076
+ ),
1031
1077
  # AWS Bedrock
1032
1078
  Model(
1033
1079
  id="openai.gpt-oss-120b",
@@ -1552,7 +1598,8 @@ models = [
1552
1598
  input=_TEXT,
1553
1599
  output=_TEXT,
1554
1600
  ),
1555
- # Mistral
1601
+ # Mistral. Magistral (reasoning-only line) is deprecated — Medium 3.5 and
1602
+ # Small 4 absorbed its reasoning mode behind the reasoning_effort param.
1556
1603
  Model(
1557
1604
  id="mistral-large-latest",
1558
1605
  name="Mistral Large 3",
@@ -1566,8 +1613,9 @@ models = [
1566
1613
  id="mistral-medium-latest",
1567
1614
  name="Mistral Medium 3.5",
1568
1615
  provider="mistral",
1569
- cost=Cost(input=0.40, output=2.0),
1570
- context_window=131_072,
1616
+ cost=Cost(input=1.50, output=7.50),
1617
+ thinking=True,
1618
+ context_window=262_144,
1571
1619
  input=_TEXT_IMAGE,
1572
1620
  output=_TEXT,
1573
1621
  ),
@@ -1575,27 +1623,26 @@ models = [
1575
1623
  id="mistral-small-latest",
1576
1624
  name="Mistral Small 4",
1577
1625
  provider="mistral",
1578
- cost=Cost(input=0.10, output=0.30),
1626
+ cost=Cost(input=0.15, output=0.60),
1579
1627
  thinking=True,
1580
- context_window=131_072,
1628
+ context_window=262_144,
1581
1629
  input=_TEXT_IMAGE,
1582
1630
  output=_TEXT,
1583
1631
  ),
1584
1632
  Model(
1585
- id="magistral-medium-latest",
1586
- name="Magistral Medium 1.2",
1633
+ id="devstral-medium-latest",
1634
+ name="Devstral 2",
1587
1635
  provider="mistral",
1588
- cost=Cost(input=2.0, output=5.0),
1589
- thinking=True,
1590
- context_window=128_000,
1591
- input=_TEXT_IMAGE,
1636
+ cost=Cost(input=0.40, output=2.0),
1637
+ context_window=262_144,
1638
+ input=_TEXT,
1592
1639
  output=_TEXT,
1593
1640
  ),
1594
1641
  Model(
1595
- id="devstral-latest",
1596
- name="Devstral 2",
1642
+ id="devstral-small-latest",
1643
+ name="Devstral Small 2",
1597
1644
  provider="mistral",
1598
- cost=Cost(input=0.40, output=2.0),
1645
+ cost=Cost(input=0.10, output=0.30),
1599
1646
  context_window=262_144,
1600
1647
  input=_TEXT,
1601
1648
  output=_TEXT,
@@ -1609,6 +1656,45 @@ models = [
1609
1656
  input=_TEXT,
1610
1657
  output=_TEXT,
1611
1658
  ),
1659
+ # Labs (free/experimental) — code agent for Lean 4 formal proof engineering
1660
+ # and automated theorem proving, not a general chat model.
1661
+ Model(
1662
+ id="labs-leanstral-1-5",
1663
+ name="Leanstral 1.5",
1664
+ provider="mistral",
1665
+ cost=Cost(),
1666
+ thinking=True,
1667
+ context_window=256_000,
1668
+ input=_TEXT,
1669
+ output=_TEXT,
1670
+ ),
1671
+ Model(
1672
+ id="ministral-3-14b-2512",
1673
+ name="Ministral 3 14B",
1674
+ provider="mistral",
1675
+ cost=Cost(input=0.20, output=0.20),
1676
+ context_window=128_000,
1677
+ input=_TEXT_IMAGE,
1678
+ output=_TEXT,
1679
+ ),
1680
+ Model(
1681
+ id="ministral-3-8b-2512",
1682
+ name="Ministral 3 8B",
1683
+ provider="mistral",
1684
+ cost=Cost(input=0.15, output=0.15),
1685
+ context_window=128_000,
1686
+ input=_TEXT_IMAGE,
1687
+ output=_TEXT,
1688
+ ),
1689
+ Model(
1690
+ id="ministral-3-3b-2512",
1691
+ name="Ministral 3 3B",
1692
+ provider="mistral",
1693
+ cost=Cost(input=0.10, output=0.10),
1694
+ context_window=128_000,
1695
+ input=_TEXT_IMAGE,
1696
+ output=_TEXT,
1697
+ ),
1612
1698
  # Ollama Cloud (catalog from models.dev / ollama-cloud — https://ollama.com/v1)
1613
1699
  Model(
1614
1700
  id="cogito-2.1:671b-cloud",
@@ -4,6 +4,7 @@ from tau.inference.provider.oauth.anthropic_claude_code import AnthropicClaudeCo
4
4
  from tau.inference.provider.oauth.github_copilot import GitHubCopilotOAuthProvider
5
5
  from tau.inference.provider.oauth.google_antigravity import GoogleAntigravityOAuthProvider
6
6
  from tau.inference.provider.oauth.openai_codex import OpenAICodexOAuthProvider
7
+ from tau.inference.provider.oauth.xai_grok import XAIGrokOAuthProvider
7
8
  from tau.inference.provider.types import APIProvider
8
9
  from tau.inference.types import AuthType, LLMOptions
9
10
 
@@ -129,6 +130,7 @@ oauth_providers = [
129
130
  AnthropicClaudeCodeOAuthProvider(),
130
131
  GitHubCopilotOAuthProvider(),
131
132
  GoogleAntigravityOAuthProvider(),
133
+ XAIGrokOAuthProvider(),
132
134
  ]
133
135
 
134
136
  providers = api_providers + oauth_providers
@@ -22,6 +22,7 @@ LLM_APIS: list[tuple[str, str]] = [
22
22
  ("google_vertex", "tau.inference.api.text.google_vertex:GoogleVertexAPI"),
23
23
  ("anthropic_vertex", "tau.inference.api.text.anthropic_vertex:AnthropicVertexAPI"),
24
24
  ("openai_vertex", "tau.inference.api.text.openai_vertex:OpenAIVertexAPI"),
25
+ ("xai", "tau.inference.api.text.xai_responses:XAIAPIResponses"),
25
26
  ]
26
27
 
27
28
  # Backward-compat alias
@@ -88,15 +88,9 @@ def _content_to_openai(content_items: list, supports_thinking: bool = True) -> l
88
88
  else f"data:{mime or 'image/png'};base64,{b64}"
89
89
  )
90
90
  other_parts.append({"type": "input_image", "image_url": url})
91
- case ToolCallContent():
92
- other_parts.append(
93
- {
94
- "type": "function_call",
95
- "call_id": item.id,
96
- "name": item.name,
97
- "arguments": json.dumps(item.args),
98
- }
99
- )
91
+ # ToolCallContent is handled by _messages_to_input, which hoists
92
+ # it out to a top-level function_call item — see the comment
93
+ # on the supports_thinking=True branch below.
100
94
  parts: list[dict[str, Any]] = []
101
95
  if thinking_parts or text_parts:
102
96
  merged = "\n".join(thinking_parts + text_parts)
@@ -104,6 +98,11 @@ def _content_to_openai(content_items: list, supports_thinking: bool = True) -> l
104
98
  parts.extend(other_parts)
105
99
  return parts
106
100
 
101
+ # ThinkingContent and ToolCallContent are intentionally not handled here:
102
+ # the Responses API has no "thinking" content-part type (reasoning is
103
+ # ephemeral and isn't replayed on later turns — see openai_codex_responses.py),
104
+ # and function_call is a top-level input item, not nested inside a
105
+ # message's content array. _messages_to_input hoists it out separately.
107
106
  parts = []
108
107
  for item in content_items:
109
108
  match item:
@@ -117,23 +116,6 @@ def _content_to_openai(content_items: list, supports_thinking: bool = True) -> l
117
116
  else f"data:{mime or 'image/png'};base64,{b64}"
118
117
  )
119
118
  parts.append({"type": "input_image", "image_url": url})
120
- case ThinkingContent():
121
- parts.append(
122
- {
123
- "type": "thinking",
124
- "thinking": item.content,
125
- "signature": item.signature,
126
- }
127
- )
128
- case ToolCallContent():
129
- parts.append(
130
- {
131
- "type": "function_call",
132
- "call_id": item.id,
133
- "name": item.name,
134
- "arguments": json.dumps(item.args),
135
- }
136
- )
137
119
  return parts
138
120
 
139
121
 
@@ -167,6 +149,19 @@ def _messages_to_input(
167
149
  parts = _content_to_openai(msg.contents, supports_thinking=supports_thinking)
168
150
  if parts:
169
151
  input_items.append({"role": role, "content": parts})
152
+ # function_call is a top-level input item in the Responses API,
153
+ # not nested inside a message's content array. It must precede
154
+ # its matching function_call_output (emitted by the ToolMessage).
155
+ for content in msg.contents:
156
+ if isinstance(content, ToolCallContent):
157
+ input_items.append(
158
+ {
159
+ "type": "function_call",
160
+ "call_id": content.id,
161
+ "name": content.name,
162
+ "arguments": json.dumps(content.args),
163
+ }
164
+ )
170
165
 
171
166
  return instructions, input_items
172
167
 
@@ -258,7 +253,12 @@ class OpenAIResponsesAPI(BaseAPI):
258
253
  if modified is not None:
259
254
  params = modified
260
255
 
261
- tool_names: dict[str, str] = {}
256
+ # Keyed by the response item's own id (event.item_id in the arguments
257
+ # delta/done events), mapping to (call_id, name). item_id and call_id
258
+ # are two distinct identifiers — OpenAI's backend happens to make them
259
+ # equal, but other Responses-API-compatible backends (e.g. xAI's Grok
260
+ # CLI proxy) don't, so they must be tracked separately.
261
+ tool_calls: dict[str, tuple[str, str]] = {}
262
262
  _input_tokens = 0
263
263
  _output_tokens = 0
264
264
  _cache_read_tokens = 0
@@ -279,7 +279,7 @@ class OpenAIResponsesAPI(BaseAPI):
279
279
  elif item.type == "reasoning":
280
280
  yield ThinkingStartEvent(thinking=None)
281
281
  elif item.type == "function_call":
282
- tool_names[item.call_id] = item.name # type: ignore[union-attr,index]
282
+ tool_calls[item.id] = (item.call_id, item.name) # type: ignore[union-attr,index]
283
283
  yield ToolCallStartEvent(
284
284
  tool_call=ToolCallContent(id=item.call_id, name=item.name) # type: ignore[union-attr,arg-type]
285
285
  )
@@ -297,18 +297,16 @@ class OpenAIResponsesAPI(BaseAPI):
297
297
  yield ThinkingEndEvent(thinking=ThinkingContent(content=event.text)) # type: ignore[union-attr]
298
298
 
299
299
  elif etype == "response.function_call_arguments.delta":
300
- call_id = event.item_id # type: ignore[union-attr]
300
+ call_id, _ = tool_calls.get(event.item_id, (event.item_id, "")) # type: ignore[union-attr]
301
301
  yield ToolCallDeltaEvent(tool_call=ToolCallContent(id=call_id))
302
302
 
303
303
  elif etype == "response.function_call_arguments.done":
304
- call_id = event.item_id # type: ignore[union-attr]
304
+ call_id, name = tool_calls.get(event.item_id, (event.item_id, "")) # type: ignore[union-attr]
305
305
  args_str = event.arguments.strip() # type: ignore[union-attr]
306
306
  args = parse_tool_args(args_str)
307
307
 
308
308
  yield ToolCallEndEvent(
309
- tool_call=ToolCallContent(
310
- id=call_id, name=tool_names.get(call_id, ""), args=args
311
- )
309
+ tool_call=ToolCallContent(id=call_id, name=name, args=args)
312
310
  )
313
311
 
314
312
  elif etype == "response.done":
@@ -0,0 +1,31 @@
1
+ """
2
+ xAI Grok CLI API — thin wrapper around the OpenAI Responses API adapter,
3
+ pointed at the Grok CLI's cli-chat-proxy.grok.com backend.
4
+
5
+ That proxy gatekeeps on client-identity headers (confirmed live: a request
6
+ without ``x-grok-client-version`` is rejected with HTTP 426 "outdated
7
+ version"), which the plain OpenAI Responses client doesn't send.
8
+ """
9
+
10
+ from __future__ import annotations
11
+
12
+ from tau.inference.api.text.openai_responses import OpenAIResponsesAPI
13
+ from tau.inference.types import LLMOptions
14
+
15
+ __all__ = ["XAIAPIResponses"]
16
+
17
+ _DEFAULT_BASE_URL = "https://cli-chat-proxy.grok.com/v1"
18
+ _CLIENT_VERSION = "0.2.93"
19
+
20
+ _GROK_CLI_HEADERS = {
21
+ "x-grok-client-identifier": "grok-cli",
22
+ "x-grok-client-version": _CLIENT_VERSION,
23
+ "x-xai-token-auth": "xai-grok-cli",
24
+ }
25
+
26
+
27
+ class XAIAPIResponses(OpenAIResponsesAPI):
28
+ def __init__(self, options: LLMOptions) -> None:
29
+ options.base_url = options.base_url or _DEFAULT_BASE_URL
30
+ options.headers = {**_GROK_CLI_HEADERS, **(options.headers or {})}
31
+ super().__init__(options)
@@ -17,6 +17,7 @@ if TYPE_CHECKING:
17
17
  )
18
18
  from tau.inference.provider.oauth.google_antigravity import GoogleAntigravityOAuthProvider
19
19
  from tau.inference.provider.oauth.openai_codex import OpenAICodexOAuthProvider
20
+ from tau.inference.provider.oauth.xai_grok import XAIGrokOAuthProvider
20
21
 
21
22
  __all__ = [
22
23
  "OAuthProvider",
@@ -30,6 +31,7 @@ __all__ = [
30
31
  "GitHubCopilotOAuthProvider",
31
32
  "get_copilot_base_url",
32
33
  "GoogleAntigravityOAuthProvider",
34
+ "XAIGrokOAuthProvider",
33
35
  ]
34
36
 
35
37
 
@@ -57,4 +59,8 @@ def __getattr__(name: str):
57
59
  from tau.inference.provider.oauth.google_antigravity import GoogleAntigravityOAuthProvider
58
60
 
59
61
  return GoogleAntigravityOAuthProvider
62
+ if name == "XAIGrokOAuthProvider":
63
+ from tau.inference.provider.oauth.xai_grok import XAIGrokOAuthProvider
64
+
65
+ return XAIGrokOAuthProvider
60
66
  raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
@@ -0,0 +1,286 @@
1
+ """
2
+ xAI Grok CLI OAuth flow — PKCE + local callback server.
3
+
4
+ The access token is used as a Bearer token for calls to
5
+ cli-chat-proxy.grok.com, the same proxy the official Grok CLI/Grok Build
6
+ uses to give SuperGrok/X Premium+ subscribers quota-based access to Grok
7
+ models without a separate pay-per-token API key.
8
+ """
9
+
10
+ from __future__ import annotations
11
+
12
+ import asyncio
13
+ import datetime as dt
14
+ import json
15
+ import secrets
16
+ import time
17
+ import urllib.error
18
+ import urllib.parse
19
+ import urllib.request
20
+ from dataclasses import dataclass
21
+ from pathlib import Path
22
+
23
+ from tau.inference.provider.oauth.pkce import generate_pkce
24
+ from tau.inference.provider.oauth.types import (
25
+ AbortSignal,
26
+ OAuthAuthInfo,
27
+ OAuthCredential,
28
+ OAuthLoginCallbacks,
29
+ OAuthPrompt,
30
+ )
31
+ from tau.inference.provider.oauth.utils import (
32
+ await_oauth_code,
33
+ get_oauth_ssl_context,
34
+ parse_authorization_input,
35
+ start_oauth_callback_server,
36
+ )
37
+ from tau.inference.provider.types import OAuthProvider
38
+
39
+ __all__ = ["XAIGrokOAuthProvider"]
40
+
41
+ CLIENT_ID = "b1a00492-073a-47ea-816f-4c329264a828"
42
+ ISSUER = "https://auth.x.ai"
43
+ AUTHORIZE_URL = f"{ISSUER}/oauth2/authorize"
44
+ TOKEN_URL = f"{ISSUER}/oauth2/token"
45
+ REVOKE_URL = f"{ISSUER}/oauth2/revoke"
46
+ USERINFO_URL = f"{ISSUER}/oauth2/userinfo"
47
+ CALLBACK_HOST = "127.0.0.1"
48
+ CALLBACK_PORT = 56121
49
+ CALLBACK_PATH = "/callback"
50
+ REDIRECT_URI = f"http://{CALLBACK_HOST}:{CALLBACK_PORT}{CALLBACK_PATH}"
51
+ SCOPES = "openid profile email offline_access grok-cli:access api:access"
52
+
53
+
54
+ def _build_authorization_url(challenge: str, state: str, nonce: str) -> str:
55
+ """Build the xAI authorization URL with PKCE and state parameters."""
56
+ params = {
57
+ "response_type": "code",
58
+ "client_id": CLIENT_ID,
59
+ "redirect_uri": REDIRECT_URI,
60
+ "scope": SCOPES,
61
+ "code_challenge": challenge,
62
+ "code_challenge_method": "S256",
63
+ "state": state,
64
+ "nonce": nonce,
65
+ "plan": "generic",
66
+ "referrer": "tau",
67
+ }
68
+ return f"{AUTHORIZE_URL}?{urllib.parse.urlencode(params)}"
69
+
70
+
71
+ def _post_form(url: str, body: dict) -> dict:
72
+ """POST a form-encoded request and return the parsed JSON response;
73
+ raise RuntimeError on HTTP errors.
74
+ """
75
+ data = urllib.parse.urlencode(body).encode()
76
+ req = urllib.request.Request(
77
+ url,
78
+ data=data,
79
+ headers={"Content-Type": "application/x-www-form-urlencoded", "Accept": "application/json"},
80
+ method="POST",
81
+ )
82
+ try:
83
+ with urllib.request.urlopen(req, context=get_oauth_ssl_context(), timeout=30) as resp:
84
+ return json.loads(resp.read())
85
+ except urllib.error.HTTPError as e:
86
+ body_text = e.read().decode(errors="replace")
87
+ raise RuntimeError(f"Request failed ({e.code}): {body_text}") from e
88
+
89
+
90
+ def _exchange_code(code: str, verifier: str) -> dict:
91
+ """Exchange an authorization code for tokens using PKCE verification."""
92
+ return _post_form(
93
+ TOKEN_URL,
94
+ {
95
+ "grant_type": "authorization_code",
96
+ "client_id": CLIENT_ID,
97
+ "code": code,
98
+ "redirect_uri": REDIRECT_URI,
99
+ "code_verifier": verifier,
100
+ },
101
+ )
102
+
103
+
104
+ def _refresh_token_sync(refresh_token: str) -> dict:
105
+ """Exchange a refresh token for a new access token via xAI's token endpoint."""
106
+ return _post_form(
107
+ TOKEN_URL,
108
+ {
109
+ "grant_type": "refresh_token",
110
+ "client_id": CLIENT_ID,
111
+ "refresh_token": refresh_token,
112
+ },
113
+ )
114
+
115
+
116
+ def _validate_token_sync(access_token: str) -> bool:
117
+ """Check if the access token is valid by probing the userinfo endpoint."""
118
+ req = urllib.request.Request(
119
+ USERINFO_URL,
120
+ headers={"Authorization": f"Bearer {access_token}"},
121
+ method="GET",
122
+ )
123
+ try:
124
+ with urllib.request.urlopen(req, context=get_oauth_ssl_context(), timeout=10) as resp:
125
+ return resp.status == 200
126
+ except urllib.error.HTTPError as e:
127
+ return e.code not in (401, 403)
128
+ except Exception:
129
+ return False
130
+
131
+
132
+ def _revoke_token_sync(token: str) -> None:
133
+ """Revoke a token at xAI's revocation endpoint (best-effort, silently ignores errors)."""
134
+ try:
135
+ _post_form(REVOKE_URL, {"token": token, "client_id": CLIENT_ID})
136
+ except Exception:
137
+ pass
138
+
139
+
140
+ def _parse_token_response(data: dict) -> tuple[str, str, int]:
141
+ """Extract (access_token, refresh_token, expires_ms) from an xAI token response."""
142
+ access = data.get("access_token")
143
+ refresh = data.get("refresh_token")
144
+ expires_in = data.get("expires_in")
145
+ if not access or not isinstance(expires_in, (int, float)):
146
+ raise ValueError(f"Token response missing fields: {data}")
147
+ if not refresh:
148
+ refresh = ""
149
+ expires_ms = int(time.time() * 1000) + int(expires_in) * 1000 - 5 * 60 * 1000
150
+ return access, refresh, expires_ms
151
+
152
+
153
+ _GROK_AUTH_FILE = Path.home() / ".grok" / "auth.json"
154
+ _GROK_AUTH_KEY = f"{ISSUER}::{CLIENT_ID}"
155
+
156
+
157
+ def read_grok_file_credential() -> OAuthCredential | None:
158
+ """Read the Grok CLI credential from ~/.grok/auth.json, if available.
159
+
160
+ The official Grok CLI stores tokens keyed by "<issuer>::<client_id>",
161
+ with the access token under "key" (a JWT) and expiry as an ISO 8601
162
+ timestamp under "expires_at" — distinct field names from every other
163
+ OAuth credential file this codebase reads.
164
+ """
165
+ try:
166
+ data = json.loads(_GROK_AUTH_FILE.read_text(encoding="utf-8"))
167
+ entry = data.get(_GROK_AUTH_KEY)
168
+ if not isinstance(entry, dict):
169
+ return None
170
+ access = entry.get("key", "")
171
+ refresh = entry.get("refresh_token", "")
172
+ expires_at = entry.get("expires_at", "")
173
+ if not refresh:
174
+ return None
175
+ expires_ms = int(dt.datetime.fromisoformat(expires_at.replace("Z", "+00:00")).timestamp() * 1000)
176
+ return OAuthCredential(access=access, refresh=refresh, expires=expires_ms)
177
+ except Exception:
178
+ return None
179
+
180
+
181
+ async def login_xai_grok(callbacks: OAuthLoginCallbacks) -> OAuthCredential:
182
+ """Run the full xAI Grok OAuth login flow and return a fresh OAuthCredential.
183
+
184
+ If a credential exists at ~/.grok/auth.json (written by the official
185
+ Grok CLI) it is returned directly without opening a browser.
186
+ """
187
+ file_cred = read_grok_file_credential()
188
+ if file_cred is not None:
189
+ return file_cred
190
+
191
+ verifier, challenge = generate_pkce()
192
+ state = secrets.token_urlsafe(32)
193
+ nonce = secrets.token_urlsafe(16)
194
+ url = _build_authorization_url(challenge, state, nonce)
195
+
196
+ server, code_future = await start_oauth_callback_server(
197
+ CALLBACK_PATH, state, CALLBACK_HOST, CALLBACK_PORT
198
+ )
199
+ callbacks.on_auth(
200
+ OAuthAuthInfo(
201
+ url=url,
202
+ instructions=(
203
+ "Complete xAI login in your browser (requires a SuperGrok / "
204
+ "X Premium+ subscription). If the browser is on another "
205
+ "machine, paste the final redirect URL here."
206
+ ),
207
+ )
208
+ )
209
+
210
+ code, recv_state = await await_oauth_code(code_future, state, server, callbacks)
211
+
212
+ if not code:
213
+ raw = await callbacks.on_prompt(
214
+ OAuthPrompt(
215
+ message="Paste the authorization code or full redirect URL:",
216
+ placeholder=REDIRECT_URI,
217
+ )
218
+ )
219
+ parsed_code, parsed_state = parse_authorization_input(raw)
220
+ if parsed_state and parsed_state != state:
221
+ raise ValueError("OAuth state mismatch")
222
+ code = parsed_code
223
+ recv_state = parsed_state or state
224
+
225
+ if not code:
226
+ raise ValueError("Missing authorization code")
227
+ if not recv_state:
228
+ raise ValueError("Missing OAuth state")
229
+
230
+ if callbacks.on_progress:
231
+ callbacks.on_progress("Exchanging authorization code for tokens...")
232
+
233
+ data = await asyncio.to_thread(_exchange_code, code, verifier)
234
+ access, refresh, expires_ms = _parse_token_response(data)
235
+
236
+ return OAuthCredential(access=access, refresh=refresh, expires=expires_ms)
237
+
238
+
239
+ async def refresh_xai_grok_token(
240
+ credential: OAuthCredential, signal: AbortSignal | None = None
241
+ ) -> OAuthCredential:
242
+ """Exchange a refresh token for a new OAuthCredential; transparent to the streaming loop."""
243
+ data = await asyncio.to_thread(_refresh_token_sync, credential.refresh)
244
+ access, new_refresh, expires_ms = _parse_token_response(data)
245
+ refresh = new_refresh or credential.refresh
246
+ return OAuthCredential(access=access, refresh=refresh, expires=expires_ms)
247
+
248
+
249
+ @dataclass
250
+ class XAIGrokOAuthProvider(OAuthProvider):
251
+ """OAuthProvider implementation for xAI Grok CLI (SuperGrok / X Premium+) accounts."""
252
+
253
+ id: str = "xai-grok"
254
+ name: str = "xAI Grok CLI (SuperGrok Subscription)"
255
+ uses_callback_server: bool = True
256
+
257
+ async def login(self, callbacks: OAuthLoginCallbacks) -> OAuthCredential:
258
+ """Initiate the OAuth login flow through xAI's authorization server."""
259
+ return await login_xai_grok(callbacks)
260
+
261
+ async def refresh_token(
262
+ self, credential: OAuthCredential, signal: AbortSignal | None = None
263
+ ) -> OAuthCredential:
264
+ """Obtain a new access token using the stored refresh token."""
265
+ return await refresh_xai_grok_token(credential, signal=signal)
266
+
267
+ async def logout(self, credential: OAuthCredential) -> None:
268
+ """Revoke the refresh token at xAI's revocation endpoint (best-effort)."""
269
+ await asyncio.to_thread(_revoke_token_sync, credential.refresh)
270
+
271
+ @property
272
+ def api(self):
273
+ """Return the API class that handles requests with this provider's tokens."""
274
+ from tau.inference.api.text.xai_responses import XAIAPIResponses
275
+
276
+ return XAIAPIResponses
277
+
278
+ async def validate(
279
+ self, credential: OAuthCredential, signal: AbortSignal | None = None
280
+ ) -> bool:
281
+ """Return True if the credential is unexpired and accepted by the API."""
282
+ if self.is_expired(credential):
283
+ return False
284
+ if signal and signal.is_set():
285
+ return False
286
+ return await asyncio.to_thread(_validate_token_sync, credential.access)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tau-coding-agent
3
- Version: 0.6.7
3
+ Version: 0.6.8
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